2025-11-12T09:00:03.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:00:03.557 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:00:03.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:00:04.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 8, 59, 41), 20.63, 25.61, 0.0, 19.02, 22.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:00:04.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 08:59:41
2025-11-12T09:00:04.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:00:04.478 [DEBUG] [Thread-12939] [transport.py] [_log()] starting thread (client mode): 0x149069e0
2025-11-12T09:00:04.478 [DEBUG] [Thread-12939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:00:04.498 [DEBUG] [Thread-12939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:00:04.498 [INFO] [Thread-12939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] client lang: <none>
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] server lang: <none>
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] kex follows: False
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] Compression: none
2025-11-12T09:00:04.502 [DEBUG] [Thread-12939] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:00:04.518 [DEBUG] [Thread-12939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:00:04.518 [DEBUG] [Thread-12939] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:00:04.518 [DEBUG] [Thread-12939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:00:04.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:00:04.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:00:04.518 [DEBUG] [Thread-12939] [transport.py] [_log()] userauth is OK
2025-11-12T09:00:04.518 [DEBUG] [Thread-12939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:00:04.518 [DEBUG] [Thread-12939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:00:04.518 [DEBUG] [Thread-12939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:00:04.518 [DEBUG] [Thread-12939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:00:04.527 [INFO] [Thread-12939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:00:04.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:00:09.118 [DEBUG] [Thread-12939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:00:09.118 [DEBUG] [Thread-12939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:00:09.119 [DEBUG] [Thread-12939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:00:09.159 [DEBUG] [Thread-12939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:00:09.160 [DEBUG] [Thread-12939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:00:09.162 [DEBUG] [Thread-12939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:00:09.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:00:09.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:00:09.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:00:09.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:00:09.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:00:09.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:00:09.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:00:09.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:00:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:00:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.291410 -999.00  +22.00  20.52     33   +5.00 1 1 1 1 1   888    0 22.12 184.52 ----- 17.0 20.5 292.2 22.8 28.4 -26.2 27.7 -24.1 25.9 -24.1 26.4 -24.8
2025-11-12T09:00:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:00:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:00:09.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.291410
2025-11-12T09:00:09.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:00:09.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:00:09.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:00:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:00:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:00:09.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T08:59:41', tmtdew=20.63, humidity=25.61, cloud=0.0, wind=19.02, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T06:59:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:00:09.288 [DEBUG] [Thread-12939] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:00:09.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:00:09.385 [DEBUG] [Thread-12942] [transport.py] [_log()] starting thread (client mode): 0x173e87f0
2025-11-12T09:00:09.386 [DEBUG] [Thread-12942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:00:09.400 [DEBUG] [Thread-12942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:00:09.400 [INFO] [Thread-12942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:00:09.408 [DEBUG] [Thread-12942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] client lang: <none>
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] server lang: <none>
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] kex follows: False
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] Compression: none
2025-11-12T09:00:09.409 [DEBUG] [Thread-12942] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:00:09.469 [DEBUG] [Thread-12942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:00:09.470 [DEBUG] [Thread-12942] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:00:09.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:00:09.471 [DEBUG] [Thread-12942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:00:09.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:00:09.526 [DEBUG] [Thread-12942] [transport.py] [_log()] userauth is OK
2025-11-12T09:00:09.526 [DEBUG] [Thread-12942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:00:09.527 [DEBUG] [Thread-12942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:00:09.527 [DEBUG] [Thread-12942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:00:09.527 [DEBUG] [Thread-12942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:00:09.549 [INFO] [Thread-12942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:00:09.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:00:09.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:00:10.373 [DEBUG] [Thread-12942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:00:10.373 [DEBUG] [Thread-12942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:00:10.421 [DEBUG] [Thread-12942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:00:10.421 [DEBUG] [Thread-12942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:00:10.430 [DEBUG] [Thread-12942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:00:10.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:00: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')
2025-11-12T09:00:10.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-11-12T09:00:10.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:00:10.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:00:10.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:00:10.472 [DEBUG] [Thread-12942] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:00:14.845 [DEBUG] [Thread-12944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:00:24.240 [DEBUG] [Thread-12945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:00:29.890 [DEBUG] [Thread-12946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:00:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:00:40.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:00:40.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-11-12T09:00:41.092 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:00:41.093 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:00:41.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 0, 13), 20.45, 25.91, 0.0, 19.43, 22.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:00:41.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:00:13
2025-11-12T09:00:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:00:41.466 [DEBUG] [Thread-12947] [transport.py] [_log()] starting thread (client mode): 0x149a4d30
2025-11-12T09:00:41.466 [DEBUG] [Thread-12947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:00:41.486 [DEBUG] [Thread-12947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:00:41.487 [INFO] [Thread-12947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] client lang: <none>
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] server lang: <none>
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] kex follows: False
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] Compression: none
2025-11-12T09:00:41.490 [DEBUG] [Thread-12947] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:00:41.505 [DEBUG] [Thread-12947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:00:41.505 [DEBUG] [Thread-12947] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:00:41.506 [DEBUG] [Thread-12947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:00:41.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:00:41.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:00:41.506 [DEBUG] [Thread-12947] [transport.py] [_log()] userauth is OK
2025-11-12T09:00:41.506 [DEBUG] [Thread-12947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:00:41.506 [DEBUG] [Thread-12947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:00:41.506 [DEBUG] [Thread-12947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:00:41.506 [DEBUG] [Thread-12947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:00:41.516 [INFO] [Thread-12947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:00:41.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:00:42.161 [DEBUG] [Thread-12947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:00:42.161 [DEBUG] [Thread-12947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:00:42.161 [DEBUG] [Thread-12947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:00:42.202 [DEBUG] [Thread-12947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:00:42.203 [DEBUG] [Thread-12947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:00:42.206 [DEBUG] [Thread-12947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:00:42.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:00:42.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:00:42.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:00:42.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:00:42.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:00:42.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:00:42.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:00:42.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:00:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:00:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.291757 -999.00  +21.90  18.61     33   +5.10 1 1 1 1 1   888    0 21.50 164.10 ----- 19.4 18.6 293.2 22.4 28.4 -26.1 27.7 -24.5 25.8 -26.3 26.5 -25.0
2025-11-12T09:00:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:00:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:00:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.291757
2025-11-12T09:00:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:00:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:00:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:00:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:00:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:00:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:00:13', tmtdew=20.45, humidity=25.91, cloud=0.0, wind=19.43, temperature=22.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:00:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:00:42.227 [DEBUG] [Thread-12947] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:00:42.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:00:42.319 [DEBUG] [Thread-12950] [transport.py] [_log()] starting thread (client mode): 0x17399de0
2025-11-12T09:00:42.319 [DEBUG] [Thread-12950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:00:42.337 [DEBUG] [Thread-12950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:00:42.337 [INFO] [Thread-12950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] client lang: <none>
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] server lang: <none>
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] kex follows: False
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] Compression: none
2025-11-12T09:00:42.345 [DEBUG] [Thread-12950] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:00:42.403 [DEBUG] [Thread-12950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:00:42.404 [DEBUG] [Thread-12950] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:00:42.404 [DEBUG] [Thread-12950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:00:42.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:00:42.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:00:42.459 [DEBUG] [Thread-12950] [transport.py] [_log()] userauth is OK
2025-11-12T09:00:42.459 [DEBUG] [Thread-12950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:00:42.459 [DEBUG] [Thread-12950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:00:42.460 [DEBUG] [Thread-12950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:00:42.460 [DEBUG] [Thread-12950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:00:42.479 [INFO] [Thread-12950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:00:42.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:00:42.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:00:43.348 [DEBUG] [Thread-12950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:00:43.348 [DEBUG] [Thread-12950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:00:43.395 [DEBUG] [Thread-12950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:00:43.396 [DEBUG] [Thread-12950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:00:43.409 [DEBUG] [Thread-12950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:00:43.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:00:43.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:00:43.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:00:43.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:00:43.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:00:43.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:00:43.450 [DEBUG] [Thread-12950] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:00:44.923 [DEBUG] [Thread-12952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:00:59.975 [DEBUG] [Thread-12953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:01:13.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:01:13.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:01:13.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-11-12T09:01:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 0, 45), 20.17, 26.5, 0.0, 14.19, 22.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:01:14.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:00:45
2025-11-12T09:01:14.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:01:14.380 [DEBUG] [Thread-12954] [transport.py] [_log()] starting thread (client mode): 0x1739b3d0
2025-11-12T09:01:14.380 [DEBUG] [Thread-12954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:01:14.401 [DEBUG] [Thread-12954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:01:14.401 [INFO] [Thread-12954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] client lang: <none>
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] server lang: <none>
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] kex follows: False
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:01:14.404 [DEBUG] [Thread-12954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:01:14.405 [DEBUG] [Thread-12954] [transport.py] [_log()] Compression: none
2025-11-12T09:01:14.405 [DEBUG] [Thread-12954] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:01:14.422 [DEBUG] [Thread-12954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:01:14.423 [DEBUG] [Thread-12954] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:01:14.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:01:14.424 [DEBUG] [Thread-12954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:01:14.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:01:14.426 [DEBUG] [Thread-12954] [transport.py] [_log()] userauth is OK
2025-11-12T09:01:14.426 [DEBUG] [Thread-12954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:01:14.426 [DEBUG] [Thread-12954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:01:14.426 [DEBUG] [Thread-12954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:01:14.426 [DEBUG] [Thread-12954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:01:14.443 [INFO] [Thread-12954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:01:14.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:01:15.011 [DEBUG] [Thread-12956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:01:15.065 [DEBUG] [Thread-12954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:01:15.065 [DEBUG] [Thread-12954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:01:15.065 [DEBUG] [Thread-12954] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:01:15.106 [DEBUG] [Thread-12954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:01:15.106 [DEBUG] [Thread-12954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:01:15.108 [DEBUG] [Thread-12954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:01:15.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:01:15.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:01:15.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:01:15.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:01:15.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:01:15.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:01:15.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:01:15.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:01:15.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:01:15.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.292104 -999.00  +21.90   9.68     33   +5.30 1 1 1 1 1   888    0 20.84 147.88 ----- 10.7 9.7 296.9 16.5 28.5 -27.1 27.8 -24.6 25.9 -24.1 26.5 -25.2
2025-11-12T09:01:15.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:01:15.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:01:15.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.292104
2025-11-12T09:01:15.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:01:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:01:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:01:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:01:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:01:15.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:00:45', tmtdew=20.17, humidity=26.5, cloud=0.0, wind=14.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:00:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:01:15.127 [DEBUG] [Thread-12954] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:01:15.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:01:15.213 [DEBUG] [Thread-12958] [transport.py] [_log()] starting thread (client mode): 0x173e80a0
2025-11-12T09:01:15.213 [DEBUG] [Thread-12958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:01:15.228 [DEBUG] [Thread-12958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:01:15.228 [INFO] [Thread-12958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] client lang: <none>
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] server lang: <none>
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] kex follows: False
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] Compression: none
2025-11-12T09:01:15.236 [DEBUG] [Thread-12958] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:01:15.293 [DEBUG] [Thread-12958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:01:15.293 [DEBUG] [Thread-12958] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:01:15.293 [DEBUG] [Thread-12958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:01:15.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:01:15.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:01:15.350 [DEBUG] [Thread-12958] [transport.py] [_log()] userauth is OK
2025-11-12T09:01:15.350 [DEBUG] [Thread-12958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:01:15.350 [DEBUG] [Thread-12958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:01:15.350 [DEBUG] [Thread-12958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:01:15.350 [DEBUG] [Thread-12958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:01:15.364 [INFO] [Thread-12958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:01:15.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:01:15.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:01:16.206 [DEBUG] [Thread-12958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:01:16.206 [DEBUG] [Thread-12958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:01:16.255 [DEBUG] [Thread-12958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:01:16.255 [DEBUG] [Thread-12958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:01:16.263 [DEBUG] [Thread-12958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:01:16.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:01:16.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-11-12T09:01:16.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-11-12T09:01:16.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:01:16.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:01:16.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:01:16.295 [DEBUG] [Thread-12958] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:01:24.273 [DEBUG] [Thread-12960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:01:30.047 [DEBUG] [Thread-12961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:01:41.234 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:01:41.236 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:01:45.098 [DEBUG] [Thread-12962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:01:46.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:01:46.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:01:46.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:01:46.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 1, 17), 20.13, 26.59, 0.0, 12.69, 22.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:01:46.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:01:17
2025-11-12T09:01:47.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:01:47.248 [DEBUG] [Thread-12963] [transport.py] [_log()] starting thread (client mode): 0x149a5a50
2025-11-12T09:01:47.248 [DEBUG] [Thread-12963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:01:47.269 [DEBUG] [Thread-12963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:01:47.269 [INFO] [Thread-12963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:01:47.273 [DEBUG] [Thread-12963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:01:47.273 [DEBUG] [Thread-12963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:01:47.273 [DEBUG] [Thread-12963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] client lang: <none>
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] server lang: <none>
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] kex follows: False
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] Compression: none
2025-11-12T09:01:47.274 [DEBUG] [Thread-12963] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:01:47.291 [DEBUG] [Thread-12963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:01:47.291 [DEBUG] [Thread-12963] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:01:47.292 [DEBUG] [Thread-12963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:01:47.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:01:47.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:01:47.294 [DEBUG] [Thread-12963] [transport.py] [_log()] userauth is OK
2025-11-12T09:01:47.294 [DEBUG] [Thread-12963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:01:47.294 [DEBUG] [Thread-12963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:01:47.294 [DEBUG] [Thread-12963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:01:47.294 [DEBUG] [Thread-12963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:01:47.310 [INFO] [Thread-12963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:01:47.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:01:47.929 [DEBUG] [Thread-12963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:01:47.930 [DEBUG] [Thread-12963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:01:47.930 [DEBUG] [Thread-12963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:01:47.971 [DEBUG] [Thread-12963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:01:47.971 [DEBUG] [Thread-12963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:01:47.975 [DEBUG] [Thread-12963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:01:47.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:01:47.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:01:47.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:01:47.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:01:47.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:01:47.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:01:47.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:01:47.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:01:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:01:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.292799 -999.00  +21.90  15.92     30   +3.70 1 1 1 1 1   888    0 20.73 131.23 ----- 12.4 15.9 289.2 20.4 28.7 -27.1 27.9 -25.3 25.8 -28.6 26.6 -26.7
2025-11-12T09:01:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:01:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:01:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.292799
2025-11-12T09:01:48.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:01:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:01:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:01:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:01:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:01:48.002 [DEBUG] [Thread-12963] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:01:48.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:01:17', tmtdew=20.13, humidity=26.59, cloud=0.0, wind=12.69, temperature=22.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:01:37.834', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:01:48.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:01:48.097 [DEBUG] [Thread-12966] [transport.py] [_log()] starting thread (client mode): 0x173e8160
2025-11-12T09:01:48.097 [DEBUG] [Thread-12966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:01:48.112 [DEBUG] [Thread-12966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:01:48.112 [INFO] [Thread-12966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:01:48.119 [DEBUG] [Thread-12966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] client lang: <none>
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] server lang: <none>
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] kex follows: False
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:01:48.120 [DEBUG] [Thread-12966] [transport.py] [_log()] Compression: none
2025-11-12T09:01:48.121 [DEBUG] [Thread-12966] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:01:48.183 [DEBUG] [Thread-12966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:01:48.184 [DEBUG] [Thread-12966] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:01:48.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:01:48.185 [DEBUG] [Thread-12966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:01:48.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:01:48.239 [DEBUG] [Thread-12966] [transport.py] [_log()] userauth is OK
2025-11-12T09:01:48.239 [DEBUG] [Thread-12966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:01:48.239 [DEBUG] [Thread-12966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:01:48.239 [DEBUG] [Thread-12966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:01:48.239 [DEBUG] [Thread-12966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:01:48.257 [INFO] [Thread-12966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:01:48.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:01:48.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:01:49.110 [DEBUG] [Thread-12966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:01:49.110 [DEBUG] [Thread-12966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:01:49.159 [DEBUG] [Thread-12966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:01:49.159 [DEBUG] [Thread-12966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:01:49.168 [DEBUG] [Thread-12966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:01:49.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:01:49.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')
2025-11-12T09:01:49.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:01:49.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:01:49.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:01:49.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:01:49.208 [DEBUG] [Thread-12966] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:02:00.127 [DEBUG] [Thread-12968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:02:15.178 [DEBUG] [Thread-12969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:02:19.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:02:19.205 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:02:19.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:02:19.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 1, 49), 20.83, 25.35, 0.0, 16.98, 22.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:02:19.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:01:49
2025-11-12T09:02:19.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:02:20.116 [DEBUG] [Thread-12970] [transport.py] [_log()] starting thread (client mode): 0x173e8400
2025-11-12T09:02:20.116 [DEBUG] [Thread-12970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:02:20.137 [DEBUG] [Thread-12970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:02:20.137 [INFO] [Thread-12970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] client lang: <none>
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] server lang: <none>
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] kex follows: False
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:02:20.140 [DEBUG] [Thread-12970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:02:20.141 [DEBUG] [Thread-12970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:02:20.141 [DEBUG] [Thread-12970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:02:20.141 [DEBUG] [Thread-12970] [transport.py] [_log()] Compression: none
2025-11-12T09:02:20.141 [DEBUG] [Thread-12970] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:02:20.158 [DEBUG] [Thread-12970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:02:20.159 [DEBUG] [Thread-12970] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:02:20.159 [DEBUG] [Thread-12970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:02:20.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:02:20.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:02:20.161 [DEBUG] [Thread-12970] [transport.py] [_log()] userauth is OK
2025-11-12T09:02:20.161 [DEBUG] [Thread-12970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:02:20.161 [DEBUG] [Thread-12970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:02:20.161 [DEBUG] [Thread-12970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:02:20.162 [DEBUG] [Thread-12970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:02:20.186 [INFO] [Thread-12970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:02:20.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:02:20.849 [DEBUG] [Thread-12970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:02:20.849 [DEBUG] [Thread-12970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:02:20.850 [DEBUG] [Thread-12970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:02:20.891 [DEBUG] [Thread-12970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:02:20.891 [DEBUG] [Thread-12970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:02:20.894 [DEBUG] [Thread-12970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:02:20.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:02:20.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:02:20.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:02:20.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:02:20.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:02:20.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:02:20.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:02:20.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:02:20.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:02:20.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.293146 -999.00  +22.10  14.23     29   +3.50 1 1 1 1 1   888    0 20.36 122.57 ----- 19.5 14.2 290.5 18.8 28.7 -27.1 28.0 -24.9 25.7 -26.8 26.6 -25.4
2025-11-12T09:02:20.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:02:20.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:02:20.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.293146
2025-11-12T09:02:20.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:02:20.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:02:20.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:02:20.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:02:20.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:02:20.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:01:49', tmtdew=20.83, humidity=25.35, cloud=0.0, wind=16.98, temperature=22.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:02:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:02:20.924 [DEBUG] [Thread-12970] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:02:21.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:02:21.019 [DEBUG] [Thread-12973] [transport.py] [_log()] starting thread (client mode): 0x173bd060
2025-11-12T09:02:21.019 [DEBUG] [Thread-12973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:02:21.035 [DEBUG] [Thread-12973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:02:21.035 [INFO] [Thread-12973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:02:21.042 [DEBUG] [Thread-12973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:02:21.043 [DEBUG] [Thread-12973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:02:21.043 [DEBUG] [Thread-12973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:02:21.043 [DEBUG] [Thread-12973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:02:21.043 [DEBUG] [Thread-12973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:02:21.043 [DEBUG] [Thread-12973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:02:21.043 [DEBUG] [Thread-12973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:02:21.043 [DEBUG] [Thread-12973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:02:21.044 [DEBUG] [Thread-12973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:02:21.044 [DEBUG] [Thread-12973] [transport.py] [_log()] client lang: <none>
2025-11-12T09:02:21.044 [DEBUG] [Thread-12973] [transport.py] [_log()] server lang: <none>
2025-11-12T09:02:21.044 [DEBUG] [Thread-12973] [transport.py] [_log()] kex follows: False
2025-11-12T09:02:21.044 [DEBUG] [Thread-12973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:02:21.044 [DEBUG] [Thread-12973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:02:21.044 [DEBUG] [Thread-12973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:02:21.044 [DEBUG] [Thread-12973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:02:21.045 [DEBUG] [Thread-12973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:02:21.045 [DEBUG] [Thread-12973] [transport.py] [_log()] Compression: none
2025-11-12T09:02:21.045 [DEBUG] [Thread-12973] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:02:21.104 [DEBUG] [Thread-12973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:02:21.104 [DEBUG] [Thread-12973] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:02:21.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:02:21.106 [DEBUG] [Thread-12973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:02:21.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:02:21.169 [DEBUG] [Thread-12973] [transport.py] [_log()] userauth is OK
2025-11-12T09:02:21.169 [DEBUG] [Thread-12973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:02:21.169 [DEBUG] [Thread-12973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:02:21.169 [DEBUG] [Thread-12973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:02:21.169 [DEBUG] [Thread-12973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:02:21.198 [INFO] [Thread-12973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:02:21.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:02:21.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:02:22.057 [DEBUG] [Thread-12973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:02:22.057 [DEBUG] [Thread-12973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:02:22.105 [DEBUG] [Thread-12973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:02:22.105 [DEBUG] [Thread-12973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:02:22.113 [DEBUG] [Thread-12973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:02:22.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:02:22.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-11-12T09:02:22.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-11-12T09:02:22.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:02:22.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:02:22.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:02:22.146 [DEBUG] [Thread-12973] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:02:24.307 [DEBUG] [Thread-12975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:02:30.215 [DEBUG] [Thread-12976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:02:41.377 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:02:41.378 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:02:45.269 [DEBUG] [Thread-12977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:02:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:02:52.149 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:02:52.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-11-12T09:02:52.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 2, 21), 20.98, 25.09, 0.0, 18.62, 22.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:02:52.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:02:21
2025-11-12T09:02:52.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:02:53.074 [DEBUG] [Thread-12978] [transport.py] [_log()] starting thread (client mode): 0x149a5d20
2025-11-12T09:02:53.074 [DEBUG] [Thread-12978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:02:53.095 [DEBUG] [Thread-12978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:02:53.096 [INFO] [Thread-12978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] client lang: <none>
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] server lang: <none>
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] kex follows: False
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] Compression: none
2025-11-12T09:02:53.099 [DEBUG] [Thread-12978] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:02:53.117 [DEBUG] [Thread-12978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:02:53.118 [DEBUG] [Thread-12978] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:02:53.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:02:53.119 [DEBUG] [Thread-12978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:02:53.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:02:53.121 [DEBUG] [Thread-12978] [transport.py] [_log()] userauth is OK
2025-11-12T09:02:53.121 [DEBUG] [Thread-12978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:02:53.121 [DEBUG] [Thread-12978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:02:53.121 [DEBUG] [Thread-12978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:02:53.121 [DEBUG] [Thread-12978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:02:53.146 [INFO] [Thread-12978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:02:53.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:02:53.800 [DEBUG] [Thread-12978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:02:53.800 [DEBUG] [Thread-12978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:02:53.800 [DEBUG] [Thread-12978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:02:53.841 [DEBUG] [Thread-12978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:02:53.841 [DEBUG] [Thread-12978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:02:53.843 [DEBUG] [Thread-12978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:02:53.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:02:53.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:02:53.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:02:53.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:02:53.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:02:53.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:02:53.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:02:53.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:02:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:02:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.293493 -999.00  +22.10  22.13     28   +3.20 1 1 1 1 1   888    0 20.57 128.60 ----- 23.6 22.1 277.0 26.7 28.6 -27.2 27.9 -25.0 25.9 -24.3 26.6 -25.8
2025-11-12T09:02:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:02:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:02:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.293493
2025-11-12T09:02:53.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:02:53.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:02:53.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:02:53.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:02:53.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:02:53.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:02:21', tmtdew=20.98, humidity=25.09, cloud=0.0, wind=18.62, temperature=22.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:02:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:02:53.861 [DEBUG] [Thread-12978] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:02:53.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:02:53.948 [DEBUG] [Thread-12981] [transport.py] [_log()] starting thread (client mode): 0x17399c30
2025-11-12T09:02:53.948 [DEBUG] [Thread-12981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:02:53.963 [DEBUG] [Thread-12981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:02:53.964 [INFO] [Thread-12981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] client lang: <none>
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] server lang: <none>
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] kex follows: False
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:02:53.971 [DEBUG] [Thread-12981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:02:53.972 [DEBUG] [Thread-12981] [transport.py] [_log()] Compression: none
2025-11-12T09:02:53.972 [DEBUG] [Thread-12981] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:02:54.036 [DEBUG] [Thread-12981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:02:54.036 [DEBUG] [Thread-12981] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:02:54.037 [DEBUG] [Thread-12981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:02:54.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:02:54.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:02:54.095 [DEBUG] [Thread-12981] [transport.py] [_log()] userauth is OK
2025-11-12T09:02:54.095 [DEBUG] [Thread-12981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:02:54.095 [DEBUG] [Thread-12981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:02:54.095 [DEBUG] [Thread-12981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:02:54.095 [DEBUG] [Thread-12981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:02:54.109 [INFO] [Thread-12981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:02:54.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:02:54.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:02:54.970 [DEBUG] [Thread-12981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:02:54.970 [DEBUG] [Thread-12981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:02:55.018 [DEBUG] [Thread-12981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:02:55.018 [DEBUG] [Thread-12981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:02:55.026 [DEBUG] [Thread-12981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:02:55.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:02:55.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-11-12T09:02: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-11-12T09:02:55.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:02:55.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:02:55.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:02:55.059 [DEBUG] [Thread-12981] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:03:00.302 [DEBUG] [Thread-12983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:03:15.348 [DEBUG] [Thread-12984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:03:24.360 [DEBUG] [Thread-12985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:03:25.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:03:25.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:03:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:03:25.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 2, 53), 21.6, 24.02, 0.0, 22.62, 22.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:03:25.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:02:53
2025-11-12T09:03:25.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:03:26.041 [DEBUG] [Thread-12986] [transport.py] [_log()] starting thread (client mode): 0x1739b520
2025-11-12T09:03:26.041 [DEBUG] [Thread-12986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:03:26.062 [DEBUG] [Thread-12986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:03:26.062 [INFO] [Thread-12986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] client lang: <none>
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] server lang: <none>
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] kex follows: False
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] Compression: none
2025-11-12T09:03:26.065 [DEBUG] [Thread-12986] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:03:26.079 [DEBUG] [Thread-12986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:03:26.079 [DEBUG] [Thread-12986] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:03:26.079 [DEBUG] [Thread-12986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:03:26.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:03:26.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:03:26.080 [DEBUG] [Thread-12986] [transport.py] [_log()] userauth is OK
2025-11-12T09:03:26.080 [DEBUG] [Thread-12986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:03:26.080 [DEBUG] [Thread-12986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:03:26.080 [DEBUG] [Thread-12986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:03:26.080 [DEBUG] [Thread-12986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:03:26.095 [INFO] [Thread-12986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:03:26.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:03:26.737 [DEBUG] [Thread-12986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:03:26.737 [DEBUG] [Thread-12986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:03:26.737 [DEBUG] [Thread-12986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:03:26.778 [DEBUG] [Thread-12986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:03:26.778 [DEBUG] [Thread-12986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:03:26.780 [DEBUG] [Thread-12986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:03:26.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:03:26.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:03:26.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:03:26.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:03:26.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:03:26.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:03:26.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:03:26.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:03:26.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:03:26.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.293840 -999.00  +21.90  17.08     30   +3.80 1 1 1 1 1   888    0 20.75 129.94 ----- 18.6 17.1 278.3 23.9 28.4 -28.8 27.8 -25.2 25.7 -25.1 26.4 -26.3
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.293840
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:03:26.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:02:53', tmtdew=21.6, humidity=24.02, cloud=0.0, wind=22.62, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:03:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:03:26.792 [DEBUG] [Thread-12986] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:03:26.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:03:26.879 [DEBUG] [Thread-12989] [transport.py] [_log()] starting thread (client mode): 0x1493ebf0
2025-11-12T09:03:26.879 [DEBUG] [Thread-12989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:03:26.894 [DEBUG] [Thread-12989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:03:26.894 [INFO] [Thread-12989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] client lang: <none>
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] server lang: <none>
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] kex follows: False
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:03:26.902 [DEBUG] [Thread-12989] [transport.py] [_log()] Compression: none
2025-11-12T09:03:26.903 [DEBUG] [Thread-12989] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:03:26.917 [DEBUG] [Thread-12989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:03:26.918 [DEBUG] [Thread-12989] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:03:26.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:03:26.918 [DEBUG] [Thread-12989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:03:26.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:03:26.978 [DEBUG] [Thread-12989] [transport.py] [_log()] userauth is OK
2025-11-12T09:03:26.978 [DEBUG] [Thread-12989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:03:26.978 [DEBUG] [Thread-12989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:03:26.979 [DEBUG] [Thread-12989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:03:26.979 [DEBUG] [Thread-12989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:03:27.000 [INFO] [Thread-12989] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:03:27.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:03:27.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:03:27.875 [DEBUG] [Thread-12989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:03:27.875 [DEBUG] [Thread-12989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:03:27.926 [DEBUG] [Thread-12989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:03:27.926 [DEBUG] [Thread-12989] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:03:27.937 [DEBUG] [Thread-12989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:03:27.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:03:27.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-11-12T09:03:27.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-11-12T09:03:27.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:03:27.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:03:27.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:03:27.981 [DEBUG] [Thread-12989] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:03:30.381 [DEBUG] [Thread-12991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:03:41.517 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:03:41.518 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:03:45.435 [DEBUG] [Thread-12992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:03:58.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:03:58.001 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:03:58.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-11-12T09:03:58.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 3, 25), 22.46, 22.67, 0.0, 21.86, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:03:58.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:03:25
2025-11-12T09:03:58.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:03:58.987 [DEBUG] [Thread-12993] [transport.py] [_log()] starting thread (client mode): 0x1739ace0
2025-11-12T09:03:58.987 [DEBUG] [Thread-12993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:03:59.004 [DEBUG] [Thread-12993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:03:59.004 [INFO] [Thread-12993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] client lang: <none>
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] server lang: <none>
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] kex follows: False
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] Compression: none
2025-11-12T09:03:59.007 [DEBUG] [Thread-12993] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:03:59.023 [DEBUG] [Thread-12993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:03:59.024 [DEBUG] [Thread-12993] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:03:59.024 [DEBUG] [Thread-12993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:03:59.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:03:59.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:03:59.025 [DEBUG] [Thread-12993] [transport.py] [_log()] userauth is OK
2025-11-12T09:03:59.025 [DEBUG] [Thread-12993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:03:59.025 [DEBUG] [Thread-12993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:03:59.025 [DEBUG] [Thread-12993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:03:59.025 [DEBUG] [Thread-12993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:03:59.043 [INFO] [Thread-12993] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:03:59.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:03:59.665 [DEBUG] [Thread-12993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:03:59.666 [DEBUG] [Thread-12993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:03:59.666 [DEBUG] [Thread-12993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:03:59.707 [DEBUG] [Thread-12993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:03:59.707 [DEBUG] [Thread-12993] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:03:59.711 [DEBUG] [Thread-12993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:03:59.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:03:59.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:03:59.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:03:59.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:03:59.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:03:59.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:03:59.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:03:59.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:03:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:03:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.294187 -999.00  +21.90  19.67     31   +4.10 1 1 1 1 1   888    0 20.84 125.61 ----- 19.0 19.7 281.4 22.4 28.4 -28.3 27.8 -24.9 25.6 -26.2 26.4 -26.4
2025-11-12T09:03:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:03:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:03:59.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.294187
2025-11-12T09:03:59.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:03:59.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:03:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:03:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:03:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:03:59.739 [DEBUG] [Thread-12993] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:03:59.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:03:25', tmtdew=22.46, humidity=22.67, cloud=0.0, wind=21.86, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:03:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:03:59.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:03:59.834 [DEBUG] [Thread-12996] [transport.py] [_log()] starting thread (client mode): 0x17399fc0
2025-11-12T09:03:59.835 [DEBUG] [Thread-12996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:03:59.849 [DEBUG] [Thread-12996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:03:59.849 [INFO] [Thread-12996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:03:59.857 [DEBUG] [Thread-12996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:03:59.857 [DEBUG] [Thread-12996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] client lang: <none>
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] server lang: <none>
2025-11-12T09:03:59.858 [DEBUG] [Thread-12996] [transport.py] [_log()] kex follows: False
2025-11-12T09:03:59.859 [DEBUG] [Thread-12996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:03:59.859 [DEBUG] [Thread-12996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:03:59.859 [DEBUG] [Thread-12996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:03:59.859 [DEBUG] [Thread-12996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:03:59.859 [DEBUG] [Thread-12996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:03:59.859 [DEBUG] [Thread-12996] [transport.py] [_log()] Compression: none
2025-11-12T09:03:59.859 [DEBUG] [Thread-12996] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:03:59.915 [DEBUG] [Thread-12996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:03:59.916 [DEBUG] [Thread-12996] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:03:59.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:03:59.918 [DEBUG] [Thread-12996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:03:59.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:03:59.975 [DEBUG] [Thread-12996] [transport.py] [_log()] userauth is OK
2025-11-12T09:03:59.975 [DEBUG] [Thread-12996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:03:59.976 [DEBUG] [Thread-12996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:03:59.976 [DEBUG] [Thread-12996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:03:59.976 [DEBUG] [Thread-12996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:03:59.995 [INFO] [Thread-12996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:03:59.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:03:59.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:04:00.468 [DEBUG] [Thread-12998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:04:00.813 [DEBUG] [Thread-12996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:04:00.813 [DEBUG] [Thread-12996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:04:00.872 [DEBUG] [Thread-12996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:04:00.872 [DEBUG] [Thread-12996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:04:00.881 [DEBUG] [Thread-12996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:04:00.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:04:00.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:04:00.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-11-12T09:04:00.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:04:00.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:04:00.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:04:00.919 [DEBUG] [Thread-12996] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:04:15.520 [DEBUG] [Thread-12999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:04:24.394 [DEBUG] [Thread-13000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:04:30.552 [DEBUG] [Thread-13001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:04:30.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:04:30.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:04:30.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-11-12T09:04:31.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 3, 57), 22.03, 23.22, 0.0, 20.71, 22.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:04:31.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:03:57
2025-11-12T09:04:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:04:31.903 [DEBUG] [Thread-13002] [transport.py] [_log()] starting thread (client mode): 0x173bfdf0
2025-11-12T09:04:31.903 [DEBUG] [Thread-13002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:04:31.918 [DEBUG] [Thread-13002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:04:31.918 [INFO] [Thread-13002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:04:31.920 [DEBUG] [Thread-13002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] client lang: <none>
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] server lang: <none>
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] kex follows: False
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] Compression: none
2025-11-12T09:04:31.921 [DEBUG] [Thread-13002] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:04:31.928 [DEBUG] [Thread-13002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:04:31.928 [DEBUG] [Thread-13002] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:04:31.928 [DEBUG] [Thread-13002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:04:31.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:04:31.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:04:31.929 [DEBUG] [Thread-13002] [transport.py] [_log()] userauth is OK
2025-11-12T09:04:31.929 [DEBUG] [Thread-13002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:04:31.929 [DEBUG] [Thread-13002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:04:31.929 [DEBUG] [Thread-13002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:04:31.929 [DEBUG] [Thread-13002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:04:31.938 [INFO] [Thread-13002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:04:31.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:04:32.536 [DEBUG] [Thread-13002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:04:32.536 [DEBUG] [Thread-13002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:04:32.536 [DEBUG] [Thread-13002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:04:32.577 [DEBUG] [Thread-13002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:04:32.577 [DEBUG] [Thread-13002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:04:32.579 [DEBUG] [Thread-13002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:04:32.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:04:32.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:04:32.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:04:32.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:04:32.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:04:32.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:04:32.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.294535 -999.00  +22.00  17.92     27   +2.60 1 1 1 1 1   888    0 20.70 120.76 ----- 21.4 17.9 293.6 20.7 28.3 -28.2 27.7 -25.0 25.7 -25.6 26.4 -26.3
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.294535
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:04:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:04:32.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:03:57', tmtdew=22.03, humidity=23.22, cloud=0.0, wind=20.71, temperature=22.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:04:07.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:04:32.596 [DEBUG] [Thread-13002] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:04:32.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:04:32.683 [DEBUG] [Thread-13005] [transport.py] [_log()] starting thread (client mode): 0x173bf640
2025-11-12T09:04:32.683 [DEBUG] [Thread-13005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:04:32.698 [DEBUG] [Thread-13005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:04:32.698 [INFO] [Thread-13005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:04:32.705 [DEBUG] [Thread-13005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] client lang: <none>
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] server lang: <none>
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] kex follows: False
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] Compression: none
2025-11-12T09:04:32.706 [DEBUG] [Thread-13005] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:04:32.761 [DEBUG] [Thread-13005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:04:32.761 [DEBUG] [Thread-13005] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:04:32.761 [DEBUG] [Thread-13005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:04:32.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:04:32.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:04:32.818 [DEBUG] [Thread-13005] [transport.py] [_log()] userauth is OK
2025-11-12T09:04:32.818 [DEBUG] [Thread-13005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:04:32.818 [DEBUG] [Thread-13005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:04:32.818 [DEBUG] [Thread-13005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:04:32.818 [DEBUG] [Thread-13005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:04:32.832 [INFO] [Thread-13005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:04:32.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:04:32.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:04:33.665 [DEBUG] [Thread-13005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:04:33.666 [DEBUG] [Thread-13005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:04:33.715 [DEBUG] [Thread-13005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:04:33.716 [DEBUG] [Thread-13005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:04:33.728 [DEBUG] [Thread-13005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:04:33.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:04:33.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-11-12T09:04:33.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-11-12T09:04:33.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:04:33.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:04:33.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:04:33.766 [DEBUG] [Thread-13005] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:04:41.660 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:04:41.662 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:04:45.587 [DEBUG] [Thread-13007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:05:00.641 [DEBUG] [Thread-13008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:05:03.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:05:03.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:05:03.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-11-12T09:05:04.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 5, 1), 24.02, 20.06, 0.0, 18.03, 22.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:05:04.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:05:01
2025-11-12T09:05:04.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:05:04.694 [DEBUG] [Thread-13009] [transport.py] [_log()] starting thread (client mode): 0x14916d10
2025-11-12T09:05:04.694 [DEBUG] [Thread-13009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:05:04.713 [DEBUG] [Thread-13009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:05:04.713 [INFO] [Thread-13009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] client lang: <none>
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] server lang: <none>
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] kex follows: False
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] Compression: none
2025-11-12T09:05:04.716 [DEBUG] [Thread-13009] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:05:04.733 [DEBUG] [Thread-13009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:05:04.734 [DEBUG] [Thread-13009] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:05:04.734 [DEBUG] [Thread-13009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:05:04.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:05:04.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:05:04.736 [DEBUG] [Thread-13009] [transport.py] [_log()] userauth is OK
2025-11-12T09:05:04.737 [DEBUG] [Thread-13009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:05:04.737 [DEBUG] [Thread-13009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:05:04.737 [DEBUG] [Thread-13009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:05:04.737 [DEBUG] [Thread-13009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:05:04.758 [INFO] [Thread-13009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:05:04.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:05:05.358 [DEBUG] [Thread-13009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:05:05.359 [DEBUG] [Thread-13009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:05:05.359 [DEBUG] [Thread-13009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:05:05.400 [DEBUG] [Thread-13009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:05:05.400 [DEBUG] [Thread-13009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:05:05.403 [DEBUG] [Thread-13009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:05:05.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:05:05.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:05:05.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:05:05.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:05:05.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:05:05.429 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:05:05.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:05:05.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:05:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:05:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.294882 -999.00  +22.30  18.30     26   +2.30 1 1 1 1 1   888    0 21.42 130.07 ----- 21.9 18.3 291.0 23.6 28.5 -27.1 27.8 -24.9 25.9 -24.3 26.5 -25.7
2025-11-12T09:05:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:05:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:05:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.294882
2025-11-12T09:05:05.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:05:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:05:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:05:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:05:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:05:05.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:05:01', tmtdew=24.02, humidity=20.06, cloud=0.0, wind=18.03, temperature=22.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:04:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:05:05.432 [DEBUG] [Thread-13009] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:05:05.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:05:05.527 [DEBUG] [Thread-13012] [transport.py] [_log()] starting thread (client mode): 0x14914ee0
2025-11-12T09:05:05.527 [DEBUG] [Thread-13012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:05:05.542 [DEBUG] [Thread-13012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:05:05.542 [INFO] [Thread-13012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] client lang: <none>
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] server lang: <none>
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] kex follows: False
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:05:05.550 [DEBUG] [Thread-13012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:05:05.551 [DEBUG] [Thread-13012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:05:05.551 [DEBUG] [Thread-13012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:05:05.551 [DEBUG] [Thread-13012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:05:05.551 [DEBUG] [Thread-13012] [transport.py] [_log()] Compression: none
2025-11-12T09:05:05.551 [DEBUG] [Thread-13012] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:05:05.611 [DEBUG] [Thread-13012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:05:05.612 [DEBUG] [Thread-13012] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:05:05.613 [DEBUG] [Thread-13012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:05:05.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:05:05.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:05:05.670 [DEBUG] [Thread-13012] [transport.py] [_log()] userauth is OK
2025-11-12T09:05:05.671 [DEBUG] [Thread-13012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:05:05.671 [DEBUG] [Thread-13012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:05:05.671 [DEBUG] [Thread-13012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:05:05.671 [DEBUG] [Thread-13012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:05:05.689 [INFO] [Thread-13012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:05:05.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:05:05.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:05:06.609 [DEBUG] [Thread-13012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:05:06.609 [DEBUG] [Thread-13012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:05:06.660 [DEBUG] [Thread-13012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:05:06.660 [DEBUG] [Thread-13012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:05:06.672 [DEBUG] [Thread-13012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:05:06.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:05:06.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-11-12T09:05:06.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-11-12T09:05:06.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:05:06.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:05:06.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:05:06.718 [DEBUG] [Thread-13012] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:05:15.674 [DEBUG] [Thread-13014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:05:24.439 [DEBUG] [Thread-13015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:05:30.730 [DEBUG] [Thread-13016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:05:36.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:05:36.737 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:05:36.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:05:37.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 5, 33), 24.35, 19.63, 0.0, 15.9, 22.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:05:37.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:05:33
2025-11-12T09:05:37.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:05:37.660 [DEBUG] [Thread-13017] [transport.py] [_log()] starting thread (client mode): 0x173bc6a0
2025-11-12T09:05:37.661 [DEBUG] [Thread-13017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:05:37.681 [DEBUG] [Thread-13017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:05:37.681 [INFO] [Thread-13017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:05:37.684 [DEBUG] [Thread-13017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] client lang: <none>
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] server lang: <none>
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] kex follows: False
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] Compression: none
2025-11-12T09:05:37.685 [DEBUG] [Thread-13017] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:05:37.700 [DEBUG] [Thread-13017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:05:37.701 [DEBUG] [Thread-13017] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:05:37.701 [DEBUG] [Thread-13017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:05:37.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:05:37.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:05:37.704 [DEBUG] [Thread-13017] [transport.py] [_log()] userauth is OK
2025-11-12T09:05:37.704 [DEBUG] [Thread-13017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:05:37.704 [DEBUG] [Thread-13017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:05:37.704 [DEBUG] [Thread-13017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:05:37.704 [DEBUG] [Thread-13017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:05:37.728 [INFO] [Thread-13017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:05:37.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:05:38.326 [DEBUG] [Thread-13017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:05:38.326 [DEBUG] [Thread-13017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:05:38.327 [DEBUG] [Thread-13017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:05:38.368 [DEBUG] [Thread-13017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:05:38.368 [DEBUG] [Thread-13017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:05:38.371 [DEBUG] [Thread-13017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:05:38.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:05:38.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:05:38.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:05:38.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:05:38.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:05:38.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:05:38.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:05:38.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:05:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:05:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.294882 -999.00  +22.30  18.30     26   +2.30 1 1 1 1 1   888    0 21.42 130.07 ----- 21.9 18.3 291.0 23.6 28.5 -27.1 27.8 -24.9 25.9 -24.3 26.5 -25.7
2025-11-12T09:05:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:05:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:05:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.294882
2025-11-12T09:05:38.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:05:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:05:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:05:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:05:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:05:38.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:05:33', tmtdew=24.35, humidity=19.63, cloud=0.0, wind=15.9, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:04:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:05:38.401 [DEBUG] [Thread-13017] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:05:38.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:05:38.500 [DEBUG] [Thread-13020] [transport.py] [_log()] starting thread (client mode): 0x1493ce20
2025-11-12T09:05:38.500 [DEBUG] [Thread-13020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:05:38.516 [DEBUG] [Thread-13020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:05:38.517 [INFO] [Thread-13020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:05:38.524 [DEBUG] [Thread-13020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] client lang: <none>
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] server lang: <none>
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] kex follows: False
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] Compression: none
2025-11-12T09:05:38.525 [DEBUG] [Thread-13020] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:05:38.583 [DEBUG] [Thread-13020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:05:38.583 [DEBUG] [Thread-13020] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:05:38.584 [DEBUG] [Thread-13020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:05:38.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:05:38.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:05:38.639 [DEBUG] [Thread-13020] [transport.py] [_log()] userauth is OK
2025-11-12T09:05:38.639 [DEBUG] [Thread-13020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:05:38.639 [DEBUG] [Thread-13020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:05:38.639 [DEBUG] [Thread-13020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:05:38.639 [DEBUG] [Thread-13020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:05:38.658 [INFO] [Thread-13020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:05:38.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:05:38.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:05:39.497 [DEBUG] [Thread-13020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:05:39.497 [DEBUG] [Thread-13020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:05:39.546 [DEBUG] [Thread-13020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:05:39.546 [DEBUG] [Thread-13020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:05:39.555 [DEBUG] [Thread-13020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:05:39.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:05:39.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-11-12T09:05:39.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-11-12T09:05:39.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:05:39.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:05:39.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:05:39.592 [DEBUG] [Thread-13020] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:05:41.804 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:05:41.805 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:05:45.762 [DEBUG] [Thread-13022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:06:00.800 [DEBUG] [Thread-13023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:06:09.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:06:09.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:06:09.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-11-12T09:06:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 6, 5), 24.1, 19.96, 0.0, 18.93, 22.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:06:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:06:05
2025-11-12T09:06:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:06:10.531 [DEBUG] [Thread-13024] [transport.py] [_log()] starting thread (client mode): 0x1493ebf0
2025-11-12T09:06:10.531 [DEBUG] [Thread-13024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:06:10.550 [DEBUG] [Thread-13024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:06:10.551 [INFO] [Thread-13024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] client lang: <none>
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] server lang: <none>
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] kex follows: False
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] Compression: none
2025-11-12T09:06:10.552 [DEBUG] [Thread-13024] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:06:10.571 [DEBUG] [Thread-13024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:06:10.571 [DEBUG] [Thread-13024] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:06:10.572 [DEBUG] [Thread-13024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:06:10.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:06:10.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:06:10.574 [DEBUG] [Thread-13024] [transport.py] [_log()] userauth is OK
2025-11-12T09:06:10.574 [DEBUG] [Thread-13024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:06:10.574 [DEBUG] [Thread-13024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:06:10.574 [DEBUG] [Thread-13024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:06:10.574 [DEBUG] [Thread-13024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:06:10.596 [INFO] [Thread-13024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:06:10.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:06:11.230 [DEBUG] [Thread-13024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:06:11.230 [DEBUG] [Thread-13024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:06:11.230 [DEBUG] [Thread-13024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:06:11.271 [DEBUG] [Thread-13024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:06:11.271 [DEBUG] [Thread-13024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:06:11.274 [DEBUG] [Thread-13024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:06:11.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:06:11.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:06:11.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:06:11.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:06:11.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:06:11.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:06:11.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:06:11.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:06:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:06:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.295229 -999.00  +22.30  14.85     26   +2.10 1 1 1 1 1   888    0 20.89 125.71 ----- 13.8 14.8 295.2 21.4 28.6 -26.8 27.9 -25.0 25.9 -24.2 26.6 -25.5
2025-11-12T09:06:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:06:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:06:11.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.295229
2025-11-12T09:06:11.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:06:11.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:06:11.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:06:11.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:06:11.298 [DEBUG] [Thread-13024] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:06:11.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:06:11.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:06:05', tmtdew=24.1, humidity=19.96, cloud=0.0, wind=18.93, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:05:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:06:11.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:06:11.408 [DEBUG] [Thread-13027] [transport.py] [_log()] starting thread (client mode): 0x1493e620
2025-11-12T09:06:11.408 [DEBUG] [Thread-13027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:06:11.423 [DEBUG] [Thread-13027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:06:11.423 [INFO] [Thread-13027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:06:11.430 [DEBUG] [Thread-13027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:06:11.431 [DEBUG] [Thread-13027] [transport.py] [_log()] client lang: <none>
2025-11-12T09:06:11.432 [DEBUG] [Thread-13027] [transport.py] [_log()] server lang: <none>
2025-11-12T09:06:11.432 [DEBUG] [Thread-13027] [transport.py] [_log()] kex follows: False
2025-11-12T09:06:11.432 [DEBUG] [Thread-13027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:06:11.432 [DEBUG] [Thread-13027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:06:11.432 [DEBUG] [Thread-13027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:06:11.432 [DEBUG] [Thread-13027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:06:11.432 [DEBUG] [Thread-13027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:06:11.432 [DEBUG] [Thread-13027] [transport.py] [_log()] Compression: none
2025-11-12T09:06:11.433 [DEBUG] [Thread-13027] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:06:11.491 [DEBUG] [Thread-13027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:06:11.492 [DEBUG] [Thread-13027] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:06:11.492 [DEBUG] [Thread-13027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:06:11.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:06:11.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:06:11.551 [DEBUG] [Thread-13027] [transport.py] [_log()] userauth is OK
2025-11-12T09:06:11.551 [DEBUG] [Thread-13027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:06:11.551 [DEBUG] [Thread-13027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:06:11.551 [DEBUG] [Thread-13027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:06:11.551 [DEBUG] [Thread-13027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:06:11.573 [INFO] [Thread-13027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:06:11.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:06:11.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:06:12.501 [DEBUG] [Thread-13027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:06:12.501 [DEBUG] [Thread-13027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:06:12.548 [DEBUG] [Thread-13027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:06:12.549 [DEBUG] [Thread-13027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:06:12.558 [DEBUG] [Thread-13027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:06:12.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:06:12.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-11-12T09:06:12.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:06:12.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:06:12.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:06:12.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:06:12.595 [DEBUG] [Thread-13027] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:06:15.836 [DEBUG] [Thread-13029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:06:24.482 [DEBUG] [Thread-13030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:06:30.883 [DEBUG] [Thread-13031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:06:41.946 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:06:41.948 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:06:42.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:06:42.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:06:42.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:06:43.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 6, 37), 24.03, 20.14, 0.0, 19.97, 22.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:06:43.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:06:37
2025-11-12T09:06:43.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:06:43.517 [DEBUG] [Thread-13032] [transport.py] [_log()] starting thread (client mode): 0x17363d90
2025-11-12T09:06:43.517 [DEBUG] [Thread-13032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:06:43.538 [DEBUG] [Thread-13032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:06:43.539 [INFO] [Thread-13032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:06:43.542 [DEBUG] [Thread-13032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] client lang: <none>
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] server lang: <none>
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] kex follows: False
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] Compression: none
2025-11-12T09:06:43.543 [DEBUG] [Thread-13032] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:06:43.563 [DEBUG] [Thread-13032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:06:43.564 [DEBUG] [Thread-13032] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:06:43.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:06:43.565 [DEBUG] [Thread-13032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:06:43.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:06:43.567 [DEBUG] [Thread-13032] [transport.py] [_log()] userauth is OK
2025-11-12T09:06:43.567 [DEBUG] [Thread-13032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:06:43.567 [DEBUG] [Thread-13032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:06:43.567 [DEBUG] [Thread-13032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:06:43.567 [DEBUG] [Thread-13032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:06:43.603 [INFO] [Thread-13032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:06:43.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:06:44.246 [DEBUG] [Thread-13032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:06:44.247 [DEBUG] [Thread-13032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:06:44.247 [DEBUG] [Thread-13032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:06:44.288 [DEBUG] [Thread-13032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:06:44.288 [DEBUG] [Thread-13032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:06:44.292 [DEBUG] [Thread-13032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:06:44.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:06:44.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:06:44.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:06:44.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:06:44.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:06:44.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:06:44.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:06:44.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:06:44.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:06:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.295924 -999.00  +22.60  17.91     26   +2.20 1 1 1 1 1   888    0 21.44 126.69 ----- 16.5 17.9 289.4 23.3 28.6 -28.1 27.9 -25.4 25.9 -27.0 26.6 -25.8
2025-11-12T09:06:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:06:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:06:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.295924
2025-11-12T09:06:44.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:06:44.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:06:44.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:06:44.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:06:44.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:06:44.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:06:37', tmtdew=24.03, humidity=20.14, cloud=0.0, wind=19.97, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:06:07.834', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:06:44.318 [DEBUG] [Thread-13032] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:06:44.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:06:44.416 [DEBUG] [Thread-13035] [transport.py] [_log()] starting thread (client mode): 0x1739bac0
2025-11-12T09:06:44.416 [DEBUG] [Thread-13035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:06:44.431 [DEBUG] [Thread-13035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:06:44.431 [INFO] [Thread-13035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:06:44.439 [DEBUG] [Thread-13035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] client lang: <none>
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] server lang: <none>
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] kex follows: False
2025-11-12T09:06:44.440 [DEBUG] [Thread-13035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:06:44.441 [DEBUG] [Thread-13035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:06:44.441 [DEBUG] [Thread-13035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:06:44.441 [DEBUG] [Thread-13035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:06:44.441 [DEBUG] [Thread-13035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:06:44.441 [DEBUG] [Thread-13035] [transport.py] [_log()] Compression: none
2025-11-12T09:06:44.441 [DEBUG] [Thread-13035] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:06:44.498 [DEBUG] [Thread-13035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:06:44.499 [DEBUG] [Thread-13035] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:06:44.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:06:44.500 [DEBUG] [Thread-13035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:06:44.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:06:44.554 [DEBUG] [Thread-13035] [transport.py] [_log()] userauth is OK
2025-11-12T09:06:44.555 [DEBUG] [Thread-13035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:06:44.555 [DEBUG] [Thread-13035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:06:44.555 [DEBUG] [Thread-13035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:06:44.555 [DEBUG] [Thread-13035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:06:44.576 [INFO] [Thread-13035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:06:44.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:06:44.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:06:45.454 [DEBUG] [Thread-13035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:06:45.455 [DEBUG] [Thread-13035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:06:45.505 [DEBUG] [Thread-13035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:06:45.506 [DEBUG] [Thread-13035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:06:45.515 [DEBUG] [Thread-13035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:06:45.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:06:45.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-11-12T09:06:45.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-11-12T09:06:45.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:06:45.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:06:45.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:06:45.552 [DEBUG] [Thread-13035] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:06:45.917 [DEBUG] [Thread-13037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:07:00.970 [DEBUG] [Thread-13038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:07:15.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:07:15.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:07:15.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-11-12T09:07:16.003 [DEBUG] [Thread-13039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:07:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 7, 9), 24.34, 19.71, 0.0, 18.14, 22.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:07:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:07:09
2025-11-12T09:07:16.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:07:16.495 [DEBUG] [Thread-13040] [transport.py] [_log()] starting thread (client mode): 0x1739afe0
2025-11-12T09:07:16.495 [DEBUG] [Thread-13040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:07:16.515 [DEBUG] [Thread-13040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:07:16.515 [INFO] [Thread-13040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:07:16.518 [DEBUG] [Thread-13040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:07:16.518 [DEBUG] [Thread-13040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:07:16.518 [DEBUG] [Thread-13040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:07:16.518 [DEBUG] [Thread-13040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:07:16.518 [DEBUG] [Thread-13040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:07:16.518 [DEBUG] [Thread-13040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] client lang: <none>
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] server lang: <none>
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] kex follows: False
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] Compression: none
2025-11-12T09:07:16.519 [DEBUG] [Thread-13040] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:07:16.536 [DEBUG] [Thread-13040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:07:16.536 [DEBUG] [Thread-13040] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:07:16.537 [DEBUG] [Thread-13040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:07:16.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:07:16.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:07:16.580 [DEBUG] [Thread-13040] [transport.py] [_log()] userauth is OK
2025-11-12T09:07:16.581 [DEBUG] [Thread-13040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:07:16.581 [DEBUG] [Thread-13040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:07:16.581 [DEBUG] [Thread-13040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:07:16.581 [DEBUG] [Thread-13040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:07:16.612 [INFO] [Thread-13040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:07:16.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:07:17.258 [DEBUG] [Thread-13040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:07:17.258 [DEBUG] [Thread-13040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:07:17.258 [DEBUG] [Thread-13040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:07:17.299 [DEBUG] [Thread-13040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:07:17.299 [DEBUG] [Thread-13040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:07:17.302 [DEBUG] [Thread-13040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:07:17.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:07:17.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:07:17.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:07:17.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:07:17.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:07:17.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:07:17.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:07:17.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:07:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:07:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.296271 -999.00  +22.60  23.41     26   +2.60 1 1 1 1 1   888    0 21.55 141.48 ----- 24.0 23.4 288.6 26.0 28.6 -26.4 27.9 -24.6 26.1 -24.8 26.6 -25.3
2025-11-12T09:07:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:07:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:07:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.296271
2025-11-12T09:07:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:07:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:07:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:07:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:07:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:07:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:07:09', tmtdew=24.34, humidity=19.71, cloud=0.0, wind=18.14, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:06:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:07:17.330 [DEBUG] [Thread-13040] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:07:17.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:07:17.425 [DEBUG] [Thread-13043] [transport.py] [_log()] starting thread (client mode): 0x149a7ac0
2025-11-12T09:07:17.426 [DEBUG] [Thread-13043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:07:17.440 [DEBUG] [Thread-13043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:07:17.440 [INFO] [Thread-13043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:07:17.448 [DEBUG] [Thread-13043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:07:17.448 [DEBUG] [Thread-13043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:07:17.448 [DEBUG] [Thread-13043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:07:17.448 [DEBUG] [Thread-13043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:07:17.448 [DEBUG] [Thread-13043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:07:17.448 [DEBUG] [Thread-13043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] client lang: <none>
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] server lang: <none>
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] kex follows: False
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] Compression: none
2025-11-12T09:07:17.449 [DEBUG] [Thread-13043] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:07:17.510 [DEBUG] [Thread-13043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:07:17.511 [DEBUG] [Thread-13043] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:07:17.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:07:17.512 [DEBUG] [Thread-13043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:07:17.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:07:17.567 [DEBUG] [Thread-13043] [transport.py] [_log()] userauth is OK
2025-11-12T09:07:17.567 [DEBUG] [Thread-13043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:07:17.567 [DEBUG] [Thread-13043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:07:17.567 [DEBUG] [Thread-13043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:07:17.567 [DEBUG] [Thread-13043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:07:17.587 [INFO] [Thread-13043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:07:17.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:07:17.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:07:18.434 [DEBUG] [Thread-13043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:07:18.434 [DEBUG] [Thread-13043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:07:18.481 [DEBUG] [Thread-13043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:07:18.482 [DEBUG] [Thread-13043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:07:18.491 [DEBUG] [Thread-13043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:07:18.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:07:18.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-11-12T09:07:18.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-11-12T09:07:18.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:07:18.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:07:18.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:07:18.528 [DEBUG] [Thread-13043] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:07:24.515 [DEBUG] [Thread-13045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:07:31.038 [DEBUG] [Thread-13046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:07:42.089 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:07:42.090 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:07:46.085 [DEBUG] [Thread-13047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:07:48.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:07:48.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:07:48.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-11-12T09:07:49.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 7, 41), 23.43, 20.8, 0.0, 21.88, 22.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:07:49.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:07:41
2025-11-12T09:07:49.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:07:49.446 [DEBUG] [Thread-13048] [transport.py] [_log()] starting thread (client mode): 0x149164a0
2025-11-12T09:07:49.446 [DEBUG] [Thread-13048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:07:49.465 [DEBUG] [Thread-13048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:07:49.465 [INFO] [Thread-13048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:07:49.468 [DEBUG] [Thread-13048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:07:49.468 [DEBUG] [Thread-13048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] client lang: <none>
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] server lang: <none>
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] kex follows: False
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] Compression: none
2025-11-12T09:07:49.469 [DEBUG] [Thread-13048] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:07:49.486 [DEBUG] [Thread-13048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:07:49.487 [DEBUG] [Thread-13048] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:07:49.487 [DEBUG] [Thread-13048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:07:49.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:07:49.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:07:49.489 [DEBUG] [Thread-13048] [transport.py] [_log()] userauth is OK
2025-11-12T09:07:49.489 [DEBUG] [Thread-13048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:07:49.489 [DEBUG] [Thread-13048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:07:49.489 [DEBUG] [Thread-13048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:07:49.489 [DEBUG] [Thread-13048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:07:49.527 [INFO] [Thread-13048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:07:49.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:07:50.161 [DEBUG] [Thread-13048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:07:50.161 [DEBUG] [Thread-13048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:07:50.162 [DEBUG] [Thread-13048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:07:50.203 [DEBUG] [Thread-13048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:07:50.203 [DEBUG] [Thread-13048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:07:50.206 [DEBUG] [Thread-13048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:07:50.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:07:50.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:07:50.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:07:50.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:07:50.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:07:50.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:07:50.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:07:50.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:07:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:07:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.296618 -999.00  +22.30  19.24     28   +3.00 1 1 1 1 1   888    0 22.33 158.42 ----- 16.8 19.2 300.4 28.0 28.5 -27.2 27.8 -25.3 26.0 -26.6 26.6 -25.8
2025-11-12T09:07:50.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:07:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:07:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.296618
2025-11-12T09:07:50.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:07:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:07:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:07:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:07:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:07:50.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:07:41', tmtdew=23.43, humidity=20.8, cloud=0.0, wind=21.88, temperature=22.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:07:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:07:50.237 [DEBUG] [Thread-13048] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:07:50.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:07:50.325 [DEBUG] [Thread-13051] [transport.py] [_log()] starting thread (client mode): 0x14921ea0
2025-11-12T09:07:50.326 [DEBUG] [Thread-13051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:07:50.351 [DEBUG] [Thread-13051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:07:50.351 [INFO] [Thread-13051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:07:50.358 [DEBUG] [Thread-13051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:07:50.359 [DEBUG] [Thread-13051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:07:50.359 [DEBUG] [Thread-13051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:07:50.359 [DEBUG] [Thread-13051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:07:50.359 [DEBUG] [Thread-13051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:07:50.359 [DEBUG] [Thread-13051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:07:50.359 [DEBUG] [Thread-13051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:07:50.359 [DEBUG] [Thread-13051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:07:50.360 [DEBUG] [Thread-13051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:07:50.360 [DEBUG] [Thread-13051] [transport.py] [_log()] client lang: <none>
2025-11-12T09:07:50.360 [DEBUG] [Thread-13051] [transport.py] [_log()] server lang: <none>
2025-11-12T09:07:50.360 [DEBUG] [Thread-13051] [transport.py] [_log()] kex follows: False
2025-11-12T09:07:50.360 [DEBUG] [Thread-13051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:07:50.360 [DEBUG] [Thread-13051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:07:50.360 [DEBUG] [Thread-13051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:07:50.361 [DEBUG] [Thread-13051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:07:50.361 [DEBUG] [Thread-13051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:07:50.361 [DEBUG] [Thread-13051] [transport.py] [_log()] Compression: none
2025-11-12T09:07:50.361 [DEBUG] [Thread-13051] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:07:50.417 [DEBUG] [Thread-13051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:07:50.418 [DEBUG] [Thread-13051] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:07:50.418 [DEBUG] [Thread-13051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:07:50.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:07:50.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:07:50.474 [DEBUG] [Thread-13051] [transport.py] [_log()] userauth is OK
2025-11-12T09:07:50.475 [DEBUG] [Thread-13051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:07:50.475 [DEBUG] [Thread-13051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:07:50.475 [DEBUG] [Thread-13051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:07:50.475 [DEBUG] [Thread-13051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:07:50.494 [INFO] [Thread-13051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:07:50.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:07:50.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:07:51.328 [DEBUG] [Thread-13051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:07:51.329 [DEBUG] [Thread-13051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:07:51.377 [DEBUG] [Thread-13051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:07:51.377 [DEBUG] [Thread-13051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:07:51.386 [DEBUG] [Thread-13051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:07:51.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:07:51.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:07:51.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-11-12T09:07:51.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:07:51.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:07:51.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:07:51.427 [DEBUG] [Thread-13051] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:08:01.115 [DEBUG] [Thread-13053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:08:16.165 [DEBUG] [Thread-13054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:08:21.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:08:21.429 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:08:21.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-11-12T09:08:22.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 8, 13), 23.24, 21.07, 0.0, 21.21, 22.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:08:22.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:08:13
2025-11-12T09:08:22.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:08:22.383 [DEBUG] [Thread-13055] [transport.py] [_log()] starting thread (client mode): 0x173be470
2025-11-12T09:08:22.383 [DEBUG] [Thread-13055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:08:22.400 [DEBUG] [Thread-13055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:08:22.400 [INFO] [Thread-13055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] client lang: <none>
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] server lang: <none>
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] kex follows: False
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:08:22.403 [DEBUG] [Thread-13055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:08:22.404 [DEBUG] [Thread-13055] [transport.py] [_log()] Compression: none
2025-11-12T09:08:22.404 [DEBUG] [Thread-13055] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:08:22.419 [DEBUG] [Thread-13055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:08:22.419 [DEBUG] [Thread-13055] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:08:22.419 [DEBUG] [Thread-13055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:08:22.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:08:22.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:08:22.420 [DEBUG] [Thread-13055] [transport.py] [_log()] userauth is OK
2025-11-12T09:08:22.420 [DEBUG] [Thread-13055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:08:22.420 [DEBUG] [Thread-13055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:08:22.420 [DEBUG] [Thread-13055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:08:22.420 [DEBUG] [Thread-13055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:08:22.435 [INFO] [Thread-13055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:08:22.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:08:23.066 [DEBUG] [Thread-13055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:08:23.066 [DEBUG] [Thread-13055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:08:23.066 [DEBUG] [Thread-13055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:08:23.107 [DEBUG] [Thread-13055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:08:23.107 [DEBUG] [Thread-13055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:08:23.109 [DEBUG] [Thread-13055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:08:23.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:08:23.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:08:23.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:08:23.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:08:23.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:08:23.126 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:08:23.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.296966 -999.00  +22.00  20.71     28   +3.00 1 1 1 1 1   888    0 22.18 153.07 ----- 19.4 20.7 290.6 23.0 28.4 -27.2 27.8 -26.0 26.0 -24.9 26.6 -26.1
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.296966
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:08:23.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:08:23.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:08:13', tmtdew=23.24, humidity=21.07, cloud=0.0, wind=21.21, temperature=22.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:07:37.862', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:08:23.127 [DEBUG] [Thread-13055] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:08:23.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:08:23.213 [DEBUG] [Thread-13058] [transport.py] [_log()] starting thread (client mode): 0x14922e90
2025-11-12T09:08:23.213 [DEBUG] [Thread-13058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:08:23.227 [DEBUG] [Thread-13058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:08:23.227 [INFO] [Thread-13058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] client lang: <none>
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] server lang: <none>
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] kex follows: False
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:08:23.235 [DEBUG] [Thread-13058] [transport.py] [_log()] Compression: none
2025-11-12T09:08:23.236 [DEBUG] [Thread-13058] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:08:23.292 [DEBUG] [Thread-13058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:08:23.293 [DEBUG] [Thread-13058] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:08:23.293 [DEBUG] [Thread-13058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:08:23.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:08:23.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:08:23.350 [DEBUG] [Thread-13058] [transport.py] [_log()] userauth is OK
2025-11-12T09:08:23.350 [DEBUG] [Thread-13058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:08:23.350 [DEBUG] [Thread-13058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:08:23.350 [DEBUG] [Thread-13058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:08:23.350 [DEBUG] [Thread-13058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:08:23.364 [INFO] [Thread-13058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:08:23.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:08:23.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:08:24.194 [DEBUG] [Thread-13058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:08:24.194 [DEBUG] [Thread-13058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:08:24.242 [DEBUG] [Thread-13058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:08:24.242 [DEBUG] [Thread-13058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:08:24.250 [DEBUG] [Thread-13058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:08:24.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:08:24.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-11-12T09:08: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') -> 00000000
2025-11-12T09:08:24.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:08:24.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:08:24.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:08:24.288 [DEBUG] [Thread-13058] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:08:24.543 [DEBUG] [Thread-13060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:08:31.199 [DEBUG] [Thread-13061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:08:42.234 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:08:42.236 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:08:46.248 [DEBUG] [Thread-13062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:08:54.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:08:54.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:08:54.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-11-12T09:08:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 8, 45), 23.7, 20.94, 0.0, 19.75, 22.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:08:54.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:08:45
2025-11-12T09:08:55.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:08:55.194 [DEBUG] [Thread-13063] [transport.py] [_log()] starting thread (client mode): 0x17361450
2025-11-12T09:08:55.194 [DEBUG] [Thread-13063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:08:55.214 [DEBUG] [Thread-13063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:08:55.214 [INFO] [Thread-13063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] client lang: <none>
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] server lang: <none>
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] kex follows: False
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] Compression: none
2025-11-12T09:08:55.217 [DEBUG] [Thread-13063] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:08:55.232 [DEBUG] [Thread-13063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:08:55.233 [DEBUG] [Thread-13063] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:08:55.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:08:55.234 [DEBUG] [Thread-13063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:08:55.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:08:55.236 [DEBUG] [Thread-13063] [transport.py] [_log()] userauth is OK
2025-11-12T09:08:55.236 [DEBUG] [Thread-13063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:08:55.236 [DEBUG] [Thread-13063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:08:55.236 [DEBUG] [Thread-13063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:08:55.236 [DEBUG] [Thread-13063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:08:55.260 [INFO] [Thread-13063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:08:55.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:08:55.889 [DEBUG] [Thread-13063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:08:55.889 [DEBUG] [Thread-13063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:08:55.889 [DEBUG] [Thread-13063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:08:55.930 [DEBUG] [Thread-13063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:08:55.931 [DEBUG] [Thread-13063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:08:55.934 [DEBUG] [Thread-13063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:08:55.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:08:55.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:08:55.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:08:55.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:08:55.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:08:55.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:08:55.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:08:55.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:08:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:08:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.297312 -999.00  +22.10  16.51     27   +2.60 1 1 1 1 1   888    0 22.95 167.32 ----- 15.5 16.5 277.6 22.9 28.4 -27.7 27.7 -24.9 25.9 -29.2 26.5 -25.7
2025-11-12T09:08:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:08:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:08:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.297312
2025-11-12T09:08:55.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:08:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:08:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:08:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:08:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:08:55.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:08:45', tmtdew=23.7, humidity=20.94, cloud=0.0, wind=19.75, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:08:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:08:55.958 [DEBUG] [Thread-13063] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:08:56.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:08:56.061 [DEBUG] [Thread-13066] [transport.py] [_log()] starting thread (client mode): 0x19ddad70
2025-11-12T09:08:56.061 [DEBUG] [Thread-13066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:08:56.076 [DEBUG] [Thread-13066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:08:56.076 [INFO] [Thread-13066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] client lang: <none>
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] server lang: <none>
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] kex follows: False
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:08:56.083 [DEBUG] [Thread-13066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:08:56.084 [DEBUG] [Thread-13066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:08:56.084 [DEBUG] [Thread-13066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:08:56.084 [DEBUG] [Thread-13066] [transport.py] [_log()] Compression: none
2025-11-12T09:08:56.084 [DEBUG] [Thread-13066] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:08:56.141 [DEBUG] [Thread-13066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:08:56.141 [DEBUG] [Thread-13066] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:08:56.141 [DEBUG] [Thread-13066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:08:56.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:08:56.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:08:56.198 [DEBUG] [Thread-13066] [transport.py] [_log()] userauth is OK
2025-11-12T09:08:56.199 [DEBUG] [Thread-13066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:08:56.199 [DEBUG] [Thread-13066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:08:56.199 [DEBUG] [Thread-13066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:08:56.199 [DEBUG] [Thread-13066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:08:56.220 [INFO] [Thread-13066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:08:56.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:08:56.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:08:57.079 [DEBUG] [Thread-13066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:08:57.080 [DEBUG] [Thread-13066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:08:57.128 [DEBUG] [Thread-13066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:08:57.128 [DEBUG] [Thread-13066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:08:57.137 [DEBUG] [Thread-13066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:08:57.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:08:57.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-11-12T09:08:57.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:08:57.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:08:57.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:08:57.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:08:57.173 [DEBUG] [Thread-13066] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:09:01.281 [DEBUG] [Thread-13068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:09:16.322 [DEBUG] [Thread-13069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:09:24.576 [DEBUG] [Thread-13070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:09:27.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:09:27.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:09:27.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-11-12T09:09:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 9, 17), 24.23, 20.21, 0.0, 24.1, 22.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:09:27.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:09:17
2025-11-12T09:09:27.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:09:28.111 [DEBUG] [Thread-13071] [transport.py] [_log()] starting thread (client mode): 0x17362d40
2025-11-12T09:09:28.111 [DEBUG] [Thread-13071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:09:28.132 [DEBUG] [Thread-13071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:09:28.132 [INFO] [Thread-13071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] client lang: <none>
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] server lang: <none>
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] kex follows: False
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] Compression: none
2025-11-12T09:09:28.135 [DEBUG] [Thread-13071] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:09:28.152 [DEBUG] [Thread-13071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:09:28.153 [DEBUG] [Thread-13071] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:09:28.153 [DEBUG] [Thread-13071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:09:28.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:09:28.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:09:28.155 [DEBUG] [Thread-13071] [transport.py] [_log()] userauth is OK
2025-11-12T09:09:28.155 [DEBUG] [Thread-13071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:09:28.156 [DEBUG] [Thread-13071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:09:28.156 [DEBUG] [Thread-13071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:09:28.156 [DEBUG] [Thread-13071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:09:28.180 [INFO] [Thread-13071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:09:28.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:09:28.800 [DEBUG] [Thread-13071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:09:28.800 [DEBUG] [Thread-13071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:09:28.800 [DEBUG] [Thread-13071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:09:28.840 [DEBUG] [Thread-13071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:09:28.841 [DEBUG] [Thread-13071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:09:28.844 [DEBUG] [Thread-13071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:09:28.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:09:28.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:09:28.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:09:28.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:09:28.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:09:28.865 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:09:28.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:09:28.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:09:28.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:09:28.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.297660 -999.00  +22.30  17.59     27   +2.50 1 1 1 1 1   888    0 22.63 167.19 ----- 20.3 17.6 291.2 22.3 28.4 -27.4 27.8 -24.6 25.9 -24.6 26.6 -25.5
2025-11-12T09:09:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:09:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:09:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.297660
2025-11-12T09:09:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:09:28.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:09:28.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:09:28.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:09:28.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:09:28.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:09:17', tmtdew=24.23, humidity=20.21, cloud=0.0, wind=24.1, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:08:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:09:28.868 [DEBUG] [Thread-13071] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:09:28.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:09:28.961 [DEBUG] [Thread-13074] [transport.py] [_log()] starting thread (client mode): 0x173bc7c0
2025-11-12T09:09:28.961 [DEBUG] [Thread-13074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:09:28.976 [DEBUG] [Thread-13074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:09:28.976 [INFO] [Thread-13074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:09:28.983 [DEBUG] [Thread-13074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:09:28.983 [DEBUG] [Thread-13074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:09:28.983 [DEBUG] [Thread-13074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:09:28.983 [DEBUG] [Thread-13074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:09:28.983 [DEBUG] [Thread-13074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] client lang: <none>
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] server lang: <none>
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] kex follows: False
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] Compression: none
2025-11-12T09:09:28.984 [DEBUG] [Thread-13074] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:09:29.042 [DEBUG] [Thread-13074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:09:29.042 [DEBUG] [Thread-13074] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:09:29.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:09:29.042 [DEBUG] [Thread-13074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:09:29.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:09:29.098 [DEBUG] [Thread-13074] [transport.py] [_log()] userauth is OK
2025-11-12T09:09:29.099 [DEBUG] [Thread-13074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:09:29.099 [DEBUG] [Thread-13074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:09:29.099 [DEBUG] [Thread-13074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:09:29.099 [DEBUG] [Thread-13074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:09:29.118 [INFO] [Thread-13074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:09:29.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:09:29.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:09:29.997 [DEBUG] [Thread-13074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:09:29.997 [DEBUG] [Thread-13074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:09:30.045 [DEBUG] [Thread-13074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:09:30.045 [DEBUG] [Thread-13074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:09:30.054 [DEBUG] [Thread-13074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:09:30.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:09:30.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-11-12T09:09:30.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:09:30.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:09:30.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:09:30.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:09:30.090 [DEBUG] [Thread-13074] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:09:31.358 [DEBUG] [Thread-13076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:09:42.378 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:09:42.378 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:09:46.408 [DEBUG] [Thread-13077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:10:00.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:10:00.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:10:00.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-11-12T09:10:00.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 9, 49), 24.97, 18.89, 0.0, 17.68, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:10:00.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:09:49
2025-11-12T09:10:00.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:10:01.004 [DEBUG] [Thread-13078] [transport.py] [_log()] starting thread (client mode): 0x1493c9a0
2025-11-12T09:10:01.005 [DEBUG] [Thread-13078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:10:01.025 [DEBUG] [Thread-13078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:10:01.025 [INFO] [Thread-13078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] client lang: <none>
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] server lang: <none>
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] kex follows: False
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:10:01.028 [DEBUG] [Thread-13078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:10:01.029 [DEBUG] [Thread-13078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:10:01.029 [DEBUG] [Thread-13078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:10:01.029 [DEBUG] [Thread-13078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:10:01.029 [DEBUG] [Thread-13078] [transport.py] [_log()] Compression: none
2025-11-12T09:10:01.029 [DEBUG] [Thread-13078] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:10:01.046 [DEBUG] [Thread-13078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:10:01.046 [DEBUG] [Thread-13078] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:10:01.047 [DEBUG] [Thread-13078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:10:01.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:10:01.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:10:01.049 [DEBUG] [Thread-13078] [transport.py] [_log()] userauth is OK
2025-11-12T09:10:01.049 [DEBUG] [Thread-13078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:10:01.049 [DEBUG] [Thread-13078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:10:01.049 [DEBUG] [Thread-13078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:10:01.049 [DEBUG] [Thread-13078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:10:01.064 [INFO] [Thread-13078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:10:01.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:10:01.446 [DEBUG] [Thread-13080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:10:01.681 [DEBUG] [Thread-13078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:10:01.682 [DEBUG] [Thread-13078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:10:01.682 [DEBUG] [Thread-13078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:10:01.723 [DEBUG] [Thread-13078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:10:01.723 [DEBUG] [Thread-13078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:10:01.726 [DEBUG] [Thread-13078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:10:01.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:10:01.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:10:01.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:10:01.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:10:01.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:10:01.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:10:01.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.298007 -999.00  +22.30  14.49     25   +1.70 1 1 1 1 1   888    0 22.72 166.57 ----- 18.7 14.5 305.8 21.6 28.4 -26.9 27.8 -25.1 25.9 -26.1 26.6 -25.6
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.298007
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:10:01.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:10:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:10:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:10:01.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:09:49', tmtdew=24.97, humidity=18.89, cloud=0.0, wind=17.68, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:09:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:10:01.748 [DEBUG] [Thread-13078] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:10:01.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:10:01.831 [DEBUG] [Thread-13082] [transport.py] [_log()] starting thread (client mode): 0x14921300
2025-11-12T09:10:01.831 [DEBUG] [Thread-13082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:10:01.846 [DEBUG] [Thread-13082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:10:01.846 [INFO] [Thread-13082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] client lang: <none>
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] server lang: <none>
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] kex follows: False
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:10:01.856 [DEBUG] [Thread-13082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:10:01.857 [DEBUG] [Thread-13082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:10:01.857 [DEBUG] [Thread-13082] [transport.py] [_log()] Compression: none
2025-11-12T09:10:01.857 [DEBUG] [Thread-13082] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:10:01.915 [DEBUG] [Thread-13082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:10:01.916 [DEBUG] [Thread-13082] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:10:01.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:10:01.917 [DEBUG] [Thread-13082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:10:01.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:10:01.970 [DEBUG] [Thread-13082] [transport.py] [_log()] userauth is OK
2025-11-12T09:10:01.971 [DEBUG] [Thread-13082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:10:01.971 [DEBUG] [Thread-13082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:10:01.971 [DEBUG] [Thread-13082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:10:01.971 [DEBUG] [Thread-13082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:10:01.994 [INFO] [Thread-13082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:10:01.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:10:01.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:10:02.852 [DEBUG] [Thread-13082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:10:02.852 [DEBUG] [Thread-13082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:10:02.899 [DEBUG] [Thread-13082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:10:02.900 [DEBUG] [Thread-13082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:10:02.909 [DEBUG] [Thread-13082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:10:02.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:10:02.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:10:02.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-11-12T09:10:02.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:10:02.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:10:02.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:10:02.946 [DEBUG] [Thread-13082] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:10:16.484 [DEBUG] [Thread-13084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:10:24.609 [DEBUG] [Thread-13085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:10:31.525 [DEBUG] [Thread-13086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:10:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:10:32.968 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:10:32.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-11-12T09:10:33.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 10, 21), 25.04, 18.83, 0.0, 17.57, 22.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:10:33.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:10:21
2025-11-12T09:10:33.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:10:33.898 [DEBUG] [Thread-13087] [transport.py] [_log()] starting thread (client mode): 0x17345060
2025-11-12T09:10:33.899 [DEBUG] [Thread-13087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:10:33.920 [DEBUG] [Thread-13087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:10:33.921 [INFO] [Thread-13087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:10:33.923 [DEBUG] [Thread-13087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:10:33.923 [DEBUG] [Thread-13087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] client lang: <none>
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] server lang: <none>
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] kex follows: False
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] Compression: none
2025-11-12T09:10:33.924 [DEBUG] [Thread-13087] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:10:33.941 [DEBUG] [Thread-13087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:10:33.942 [DEBUG] [Thread-13087] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:10:33.942 [DEBUG] [Thread-13087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:10:33.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:10:33.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:10:33.944 [DEBUG] [Thread-13087] [transport.py] [_log()] userauth is OK
2025-11-12T09:10:33.944 [DEBUG] [Thread-13087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:10:33.945 [DEBUG] [Thread-13087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:10:33.945 [DEBUG] [Thread-13087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:10:33.945 [DEBUG] [Thread-13087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:10:33.960 [INFO] [Thread-13087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:10:33.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:10:34.584 [DEBUG] [Thread-13087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:10:34.584 [DEBUG] [Thread-13087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:10:34.584 [DEBUG] [Thread-13087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:10:34.625 [DEBUG] [Thread-13087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:10:34.625 [DEBUG] [Thread-13087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:10:34.628 [DEBUG] [Thread-13087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:10:34.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:10:34.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:10:34.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:10:34.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:10:34.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:10:34.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:10:34.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:10:34.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:10:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:10:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.298701 -999.00  +22.70  18.98     24   +1.50 1 1 1 1 1   888    0 22.58 162.38 ----- 16.8 19.0 299.2 23.7 28.6 -25.9 27.9 -24.6 26.2 -25.0 26.7 -25.1
2025-11-12T09:10:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:10:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:10:34.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.298701
2025-11-12T09:10:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:10:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:10:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:10:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:10:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:10:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:10:21', tmtdew=25.04, humidity=18.83, cloud=0.0, wind=17.57, temperature=22.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:10:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:10:34.655 [DEBUG] [Thread-13087] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:10:34.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:10:34.751 [DEBUG] [Thread-13090] [transport.py] [_log()] starting thread (client mode): 0x149077f0
2025-11-12T09:10:34.751 [DEBUG] [Thread-13090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:10:34.766 [DEBUG] [Thread-13090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:10:34.766 [INFO] [Thread-13090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:10:34.774 [DEBUG] [Thread-13090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:10:34.774 [DEBUG] [Thread-13090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:10:34.774 [DEBUG] [Thread-13090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:10:34.774 [DEBUG] [Thread-13090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:10:34.774 [DEBUG] [Thread-13090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:10:34.774 [DEBUG] [Thread-13090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:10:34.775 [DEBUG] [Thread-13090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:10:34.775 [DEBUG] [Thread-13090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:10:34.775 [DEBUG] [Thread-13090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:10:34.775 [DEBUG] [Thread-13090] [transport.py] [_log()] client lang: <none>
2025-11-12T09:10:34.775 [DEBUG] [Thread-13090] [transport.py] [_log()] server lang: <none>
2025-11-12T09:10:34.775 [DEBUG] [Thread-13090] [transport.py] [_log()] kex follows: False
2025-11-12T09:10:34.775 [DEBUG] [Thread-13090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:10:34.775 [DEBUG] [Thread-13090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:10:34.776 [DEBUG] [Thread-13090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:10:34.776 [DEBUG] [Thread-13090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:10:34.776 [DEBUG] [Thread-13090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:10:34.776 [DEBUG] [Thread-13090] [transport.py] [_log()] Compression: none
2025-11-12T09:10:34.776 [DEBUG] [Thread-13090] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:10:34.835 [DEBUG] [Thread-13090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:10:34.836 [DEBUG] [Thread-13090] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:10:34.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:10:34.837 [DEBUG] [Thread-13090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:10:34.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:10:34.895 [DEBUG] [Thread-13090] [transport.py] [_log()] userauth is OK
2025-11-12T09:10:34.895 [DEBUG] [Thread-13090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:10:34.895 [DEBUG] [Thread-13090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:10:34.895 [DEBUG] [Thread-13090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:10:34.895 [DEBUG] [Thread-13090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:10:34.914 [INFO] [Thread-13090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:10:34.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:10:34.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:10:35.773 [DEBUG] [Thread-13090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:10:35.773 [DEBUG] [Thread-13090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:10:35.822 [DEBUG] [Thread-13090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:10:35.823 [DEBUG] [Thread-13090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:10:35.832 [DEBUG] [Thread-13090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:10:35.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:10:35.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')
2025-11-12T09:10:35.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:10:35.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:10:35.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:10:35.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:10:35.869 [DEBUG] [Thread-13090] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:10:42.519 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:10:42.520 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:10:46.557 [DEBUG] [Thread-13092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:11:01.605 [DEBUG] [Thread-13093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:11:05.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:11:05.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:11:05.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-11-12T09:11:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 10, 52), 25.35, 18.24, 0.0, 15.32, 23.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:11:06.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:10:52
2025-11-12T09:11:06.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:11:06.809 [DEBUG] [Thread-13094] [transport.py] [_log()] starting thread (client mode): 0x17347130
2025-11-12T09:11:06.809 [DEBUG] [Thread-13094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:11:06.830 [DEBUG] [Thread-13094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:11:06.831 [INFO] [Thread-13094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:11:06.834 [DEBUG] [Thread-13094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:11:06.834 [DEBUG] [Thread-13094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:11:06.834 [DEBUG] [Thread-13094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:11:06.834 [DEBUG] [Thread-13094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:11:06.834 [DEBUG] [Thread-13094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:11:06.834 [DEBUG] [Thread-13094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:11:06.834 [DEBUG] [Thread-13094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:11:06.834 [DEBUG] [Thread-13094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] client lang: <none>
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] server lang: <none>
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] kex follows: False
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] Compression: none
2025-11-12T09:11:06.835 [DEBUG] [Thread-13094] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:11:06.853 [DEBUG] [Thread-13094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:11:06.854 [DEBUG] [Thread-13094] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:11:06.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:11:06.855 [DEBUG] [Thread-13094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:11:06.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:11:06.857 [DEBUG] [Thread-13094] [transport.py] [_log()] userauth is OK
2025-11-12T09:11:06.857 [DEBUG] [Thread-13094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:11:06.857 [DEBUG] [Thread-13094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:11:06.858 [DEBUG] [Thread-13094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:11:06.858 [DEBUG] [Thread-13094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:11:06.883 [INFO] [Thread-13094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:11:06.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:11:07.521 [DEBUG] [Thread-13094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:11:07.522 [DEBUG] [Thread-13094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:11:07.522 [DEBUG] [Thread-13094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:11:07.563 [DEBUG] [Thread-13094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:11:07.563 [DEBUG] [Thread-13094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:11:07.566 [DEBUG] [Thread-13094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:11:07.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:11:07.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:11:07.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:11:07.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:11:07.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:11:07.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:11:07.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:11:07.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:11:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:11:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.299048 -999.00  +22.80  17.71     24   +1.70 1 1 1 1 1   888    0 22.67 154.25 ----- 18.6 17.7 313.0 20.9 28.6 -26.0 27.9 -24.7 26.2 -25.5 26.8 -25.3
2025-11-12T09:11:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:11:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:11:07.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.299048
2025-11-12T09:11:07.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:11:07.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:11:07.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:11:07.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:11:07.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:11:07.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:10:52', tmtdew=25.35, humidity=18.24, cloud=0.0, wind=15.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:10:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:11:07.594 [DEBUG] [Thread-13094] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:11:07.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:11:07.689 [DEBUG] [Thread-13097] [transport.py] [_log()] starting thread (client mode): 0x17347f70
2025-11-12T09:11:07.689 [DEBUG] [Thread-13097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:11:07.705 [DEBUG] [Thread-13097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:11:07.705 [INFO] [Thread-13097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:11:07.712 [DEBUG] [Thread-13097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:11:07.713 [DEBUG] [Thread-13097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:11:07.713 [DEBUG] [Thread-13097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:11:07.713 [DEBUG] [Thread-13097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:11:07.713 [DEBUG] [Thread-13097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:11:07.713 [DEBUG] [Thread-13097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:11:07.713 [DEBUG] [Thread-13097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:11:07.713 [DEBUG] [Thread-13097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:11:07.713 [DEBUG] [Thread-13097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:11:07.714 [DEBUG] [Thread-13097] [transport.py] [_log()] client lang: <none>
2025-11-12T09:11:07.714 [DEBUG] [Thread-13097] [transport.py] [_log()] server lang: <none>
2025-11-12T09:11:07.714 [DEBUG] [Thread-13097] [transport.py] [_log()] kex follows: False
2025-11-12T09:11:07.714 [DEBUG] [Thread-13097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:11:07.714 [DEBUG] [Thread-13097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:11:07.714 [DEBUG] [Thread-13097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:11:07.714 [DEBUG] [Thread-13097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:11:07.715 [DEBUG] [Thread-13097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:11:07.715 [DEBUG] [Thread-13097] [transport.py] [_log()] Compression: none
2025-11-12T09:11:07.715 [DEBUG] [Thread-13097] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:11:07.772 [DEBUG] [Thread-13097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:11:07.772 [DEBUG] [Thread-13097] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:11:07.773 [DEBUG] [Thread-13097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:11:07.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:11:07.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:11:07.831 [DEBUG] [Thread-13097] [transport.py] [_log()] userauth is OK
2025-11-12T09:11:07.832 [DEBUG] [Thread-13097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:11:07.832 [DEBUG] [Thread-13097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:11:07.832 [DEBUG] [Thread-13097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:11:07.832 [DEBUG] [Thread-13097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:11:07.852 [INFO] [Thread-13097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:11:07.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:11:07.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:11:08.687 [DEBUG] [Thread-13097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:11:08.687 [DEBUG] [Thread-13097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:11:08.736 [DEBUG] [Thread-13097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:11:08.736 [DEBUG] [Thread-13097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:11:08.745 [DEBUG] [Thread-13097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:11:08.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:11:08.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-11-12T09:11:08.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-11-12T09:11:08.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:11:08.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:11:08.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:11:08.782 [DEBUG] [Thread-13097] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:11:16.642 [DEBUG] [Thread-13099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:11:24.654 [DEBUG] [Thread-13100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:11:31.693 [DEBUG] [Thread-13101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:11:38.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:11:38.805 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:11:38.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-11-12T09:11:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 11, 24), 25.36, 18.26, 0.0, 18.47, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:11:39.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:11:24
2025-11-12T09:11:39.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:11:39.725 [DEBUG] [Thread-13102] [transport.py] [_log()] starting thread (client mode): 0x14904fa0
2025-11-12T09:11:39.725 [DEBUG] [Thread-13102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:11:39.746 [DEBUG] [Thread-13102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:11:39.746 [INFO] [Thread-13102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:11:39.749 [DEBUG] [Thread-13102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:11:39.749 [DEBUG] [Thread-13102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:11:39.749 [DEBUG] [Thread-13102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:11:39.749 [DEBUG] [Thread-13102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:11:39.749 [DEBUG] [Thread-13102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:11:39.749 [DEBUG] [Thread-13102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:11:39.749 [DEBUG] [Thread-13102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:11:39.749 [DEBUG] [Thread-13102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] client lang: <none>
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] server lang: <none>
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] kex follows: False
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] Compression: none
2025-11-12T09:11:39.750 [DEBUG] [Thread-13102] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:11:39.767 [DEBUG] [Thread-13102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:11:39.767 [DEBUG] [Thread-13102] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:11:39.768 [DEBUG] [Thread-13102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:11:39.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:11:39.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:11:39.770 [DEBUG] [Thread-13102] [transport.py] [_log()] userauth is OK
2025-11-12T09:11:39.770 [DEBUG] [Thread-13102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:11:39.770 [DEBUG] [Thread-13102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:11:39.770 [DEBUG] [Thread-13102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:11:39.770 [DEBUG] [Thread-13102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:11:39.794 [INFO] [Thread-13102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:11:39.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:11:40.424 [DEBUG] [Thread-13102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:11:40.424 [DEBUG] [Thread-13102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:11:40.424 [DEBUG] [Thread-13102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:11:40.465 [DEBUG] [Thread-13102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:11:40.465 [DEBUG] [Thread-13102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:11:40.468 [DEBUG] [Thread-13102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:11:40.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:11:40.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:11:40.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:11:40.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:11:40.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:11:40.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:11:40.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:11:40.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:11:40.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:11:40.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.299396 -999.00  +22.60  23.49     24   +1.10 1 1 1 1 1   888    0 23.56 179.30 ----- 25.4 23.5 290.2 31.0 28.6 -27.9 27.9 -25.6 26.1 -27.3 26.8 -26.1
2025-11-12T09:11:40.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:11:40.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:11:40.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.299396
2025-11-12T09:11:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:11:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:11:40.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:11:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:11:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:11:40.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:11:24', tmtdew=25.36, humidity=18.26, cloud=0.0, wind=18.47, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:11:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:11:40.494 [DEBUG] [Thread-13102] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:11:40.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:11:40.590 [DEBUG] [Thread-13105] [transport.py] [_log()] starting thread (client mode): 0x19ddab60
2025-11-12T09:11:40.590 [DEBUG] [Thread-13105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:11:40.604 [DEBUG] [Thread-13105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:11:40.604 [INFO] [Thread-13105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:11:40.612 [DEBUG] [Thread-13105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:11:40.612 [DEBUG] [Thread-13105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:11:40.612 [DEBUG] [Thread-13105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] client lang: <none>
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] server lang: <none>
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] kex follows: False
2025-11-12T09:11:40.613 [DEBUG] [Thread-13105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:11:40.614 [DEBUG] [Thread-13105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:11:40.614 [DEBUG] [Thread-13105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:11:40.614 [DEBUG] [Thread-13105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:11:40.614 [DEBUG] [Thread-13105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:11:40.614 [DEBUG] [Thread-13105] [transport.py] [_log()] Compression: none
2025-11-12T09:11:40.614 [DEBUG] [Thread-13105] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:11:40.671 [DEBUG] [Thread-13105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:11:40.672 [DEBUG] [Thread-13105] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:11:40.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:11:40.673 [DEBUG] [Thread-13105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:11:40.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:11:40.730 [DEBUG] [Thread-13105] [transport.py] [_log()] userauth is OK
2025-11-12T09:11:40.730 [DEBUG] [Thread-13105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:11:40.731 [DEBUG] [Thread-13105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:11:40.731 [DEBUG] [Thread-13105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:11:40.731 [DEBUG] [Thread-13105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:11:40.755 [INFO] [Thread-13105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:11:40.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:11:40.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:11:41.615 [DEBUG] [Thread-13105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:11:41.615 [DEBUG] [Thread-13105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:11:41.663 [DEBUG] [Thread-13105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:11:41.663 [DEBUG] [Thread-13105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:11:41.672 [DEBUG] [Thread-13105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:11:41.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:11:41.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-11-12T09:11:41.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-11-12T09:11:41.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:11:41.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:11:41.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:11:41.709 [DEBUG] [Thread-13105] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:11:42.660 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:11:42.662 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:11:46.729 [DEBUG] [Thread-13107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:12:01.782 [DEBUG] [Thread-13108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:12:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:12:11.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:12:11.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-11-12T09:12:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 11, 56), 25.64, 17.86, 0.0, 25.78, 23.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:12:12.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:11:56
2025-11-12T09:12:12.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:12:12.709 [DEBUG] [Thread-13109] [transport.py] [_log()] starting thread (client mode): 0x19dd9c00
2025-11-12T09:12:12.709 [DEBUG] [Thread-13109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:12:12.729 [DEBUG] [Thread-13109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:12:12.729 [INFO] [Thread-13109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:12:12.732 [DEBUG] [Thread-13109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:12:12.732 [DEBUG] [Thread-13109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:12:12.732 [DEBUG] [Thread-13109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:12:12.732 [DEBUG] [Thread-13109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:12:12.732 [DEBUG] [Thread-13109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:12:12.732 [DEBUG] [Thread-13109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:12:12.732 [DEBUG] [Thread-13109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:12:12.732 [DEBUG] [Thread-13109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] client lang: <none>
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] server lang: <none>
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] kex follows: False
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] Compression: none
2025-11-12T09:12:12.733 [DEBUG] [Thread-13109] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:12:12.748 [DEBUG] [Thread-13109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:12:12.748 [DEBUG] [Thread-13109] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:12:12.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:12:12.748 [DEBUG] [Thread-13109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:12:12.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:12:12.749 [DEBUG] [Thread-13109] [transport.py] [_log()] userauth is OK
2025-11-12T09:12:12.749 [DEBUG] [Thread-13109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:12:12.749 [DEBUG] [Thread-13109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:12:12.749 [DEBUG] [Thread-13109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:12:12.749 [DEBUG] [Thread-13109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:12:12.757 [INFO] [Thread-13109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:12:12.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:12:13.401 [DEBUG] [Thread-13109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:12:13.401 [DEBUG] [Thread-13109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:12:13.401 [DEBUG] [Thread-13109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:12:13.442 [DEBUG] [Thread-13109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:12:13.442 [DEBUG] [Thread-13109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:12:13.444 [DEBUG] [Thread-13109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:12:13.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:12:13.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:12:13.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:12:13.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:12:13.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:12:13.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:12:13.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.299743 -999.00  +22.50  22.20     24   +1.30 1 1 1 1 1   888    0 23.90 187.76 ----- 20.0 22.2 286.7 27.1 28.5 -27.1 27.9 -25.6 26.2 -26.8 26.8 -25.8
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.299743
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:12:13.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:11:56', tmtdew=25.64, humidity=17.86, cloud=0.0, wind=25.78, temperature=23.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:11:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:12:13.464 [DEBUG] [Thread-13109] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:12:13.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:12:13.550 [DEBUG] [Thread-13112] [transport.py] [_log()] starting thread (client mode): 0x173442e0
2025-11-12T09:12:13.550 [DEBUG] [Thread-13112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:12:13.564 [DEBUG] [Thread-13112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:12:13.564 [INFO] [Thread-13112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:12:13.571 [DEBUG] [Thread-13112] [transport.py] [_log()] client lang: <none>
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] server lang: <none>
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] kex follows: False
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] Compression: none
2025-11-12T09:12:13.572 [DEBUG] [Thread-13112] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:12:13.629 [DEBUG] [Thread-13112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:12:13.629 [DEBUG] [Thread-13112] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:12:13.629 [DEBUG] [Thread-13112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:12:13.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:12:13.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:12:13.686 [DEBUG] [Thread-13112] [transport.py] [_log()] userauth is OK
2025-11-12T09:12:13.686 [DEBUG] [Thread-13112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:12:13.686 [DEBUG] [Thread-13112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:12:13.686 [DEBUG] [Thread-13112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:12:13.686 [DEBUG] [Thread-13112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:12:13.700 [INFO] [Thread-13112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:12:13.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:12:13.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:12:14.578 [DEBUG] [Thread-13112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:12:14.578 [DEBUG] [Thread-13112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:12:14.626 [DEBUG] [Thread-13112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:12:14.626 [DEBUG] [Thread-13112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:12:14.634 [DEBUG] [Thread-13112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:12:14.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:12:14.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-11-12T09:12:14.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:12:14.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:12:14.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:12:14.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:12:14.668 [DEBUG] [Thread-13112] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:12:16.813 [DEBUG] [Thread-13114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:12:24.689 [DEBUG] [Thread-13115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:12:31.854 [DEBUG] [Thread-13116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:12:42.803 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:12:42.805 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:12:44.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:12:44.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:12:44.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-11-12T09:12:45.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 12, 28), 25.66, 17.83, 0.0, 23.89, 23.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:12:45.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:12:28
2025-11-12T09:12:45.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:12:45.633 [DEBUG] [Thread-13117] [transport.py] [_log()] starting thread (client mode): 0x14906350
2025-11-12T09:12:45.634 [DEBUG] [Thread-13117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:12:45.655 [DEBUG] [Thread-13117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:12:45.655 [INFO] [Thread-13117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] client lang: <none>
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] server lang: <none>
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] kex follows: False
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] Compression: none
2025-11-12T09:12:45.659 [DEBUG] [Thread-13117] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:12:45.677 [DEBUG] [Thread-13117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:12:45.678 [DEBUG] [Thread-13117] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:12:45.678 [DEBUG] [Thread-13117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:12:45.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:12:45.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:12:45.680 [DEBUG] [Thread-13117] [transport.py] [_log()] userauth is OK
2025-11-12T09:12:45.681 [DEBUG] [Thread-13117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:12:45.681 [DEBUG] [Thread-13117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:12:45.681 [DEBUG] [Thread-13117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:12:45.681 [DEBUG] [Thread-13117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:12:45.715 [INFO] [Thread-13117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:12:45.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:12:46.345 [DEBUG] [Thread-13117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:12:46.345 [DEBUG] [Thread-13117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:12:46.345 [DEBUG] [Thread-13117] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:12:46.386 [DEBUG] [Thread-13117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:12:46.386 [DEBUG] [Thread-13117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:12:46.389 [DEBUG] [Thread-13117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:12:46.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:12:46.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:12:46.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:12:46.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:12:46.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:12:46.412 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:12:46.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:12:46.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:12:46.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:12:46.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.300090 -999.00  +22.70  15.72     24   +1.50 1 1 1 1 1   888    0 24.68 197.78 ----- 12.6 15.7 287.8 24.3 28.4 -28.0 27.9 -25.5 26.1 -25.1 26.7 -26.7
2025-11-12T09:12:46.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:12:46.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:12:46.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.300090
2025-11-12T09:12:46.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:12:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:12:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:12:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:12:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:12:46.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:12:28', tmtdew=25.66, humidity=17.83, cloud=0.0, wind=23.89, temperature=23.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:12:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:12:46.414 [DEBUG] [Thread-13117] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:12:46.498 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:12:46.508 [DEBUG] [Thread-13120] [transport.py] [_log()] starting thread (client mode): 0x1493c910
2025-11-12T09:12:46.508 [DEBUG] [Thread-13120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:12:46.523 [DEBUG] [Thread-13120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:12:46.523 [INFO] [Thread-13120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:12:46.531 [DEBUG] [Thread-13120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:12:46.531 [DEBUG] [Thread-13120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:12:46.531 [DEBUG] [Thread-13120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:12:46.531 [DEBUG] [Thread-13120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:12:46.531 [DEBUG] [Thread-13120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:12:46.531 [DEBUG] [Thread-13120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:12:46.531 [DEBUG] [Thread-13120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:12:46.531 [DEBUG] [Thread-13120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] client lang: <none>
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] server lang: <none>
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] kex follows: False
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:12:46.532 [DEBUG] [Thread-13120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:12:46.533 [DEBUG] [Thread-13120] [transport.py] [_log()] Compression: none
2025-11-12T09:12:46.533 [DEBUG] [Thread-13120] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:12:46.591 [DEBUG] [Thread-13120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:12:46.592 [DEBUG] [Thread-13120] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:12:46.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:12:46.593 [DEBUG] [Thread-13120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:12:46.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:12:46.646 [DEBUG] [Thread-13120] [transport.py] [_log()] userauth is OK
2025-11-12T09:12:46.646 [DEBUG] [Thread-13120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:12:46.647 [DEBUG] [Thread-13120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:12:46.647 [DEBUG] [Thread-13120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:12:46.647 [DEBUG] [Thread-13120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:12:46.670 [INFO] [Thread-13120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:12:46.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:12:46.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:12:46.891 [DEBUG] [Thread-13122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:12:47.521 [DEBUG] [Thread-13120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:12:47.521 [DEBUG] [Thread-13120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:12:47.569 [DEBUG] [Thread-13120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:12:47.569 [DEBUG] [Thread-13120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:12:47.577 [DEBUG] [Thread-13120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:12:47.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:12:47.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-11-12T09:12:47.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-11-12T09:12:47.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:12:47.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:12:47.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:12:47.608 [DEBUG] [Thread-13120] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:13:01.934 [DEBUG] [Thread-13123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:13:16.972 [DEBUG] [Thread-13124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:13:17.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:13:17.629 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:13:17.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-11-12T09:13:18.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 13), 25.24, 18.28, 0.0, 21.88, 22.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:13:18.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:13:00
2025-11-12T09:13:18.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:13:18.565 [DEBUG] [Thread-13125] [transport.py] [_log()] starting thread (client mode): 0x1493ce20
2025-11-12T09:13:18.565 [DEBUG] [Thread-13125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:13:18.584 [DEBUG] [Thread-13125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:13:18.584 [INFO] [Thread-13125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:13:18.587 [DEBUG] [Thread-13125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:13:18.587 [DEBUG] [Thread-13125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:13:18.587 [DEBUG] [Thread-13125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:13:18.587 [DEBUG] [Thread-13125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:13:18.587 [DEBUG] [Thread-13125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:13:18.587 [DEBUG] [Thread-13125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] client lang: <none>
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] server lang: <none>
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] kex follows: False
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] Compression: none
2025-11-12T09:13:18.588 [DEBUG] [Thread-13125] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:13:18.607 [DEBUG] [Thread-13125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:13:18.607 [DEBUG] [Thread-13125] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:13:18.608 [DEBUG] [Thread-13125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:13:18.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:13:18.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:13:18.610 [DEBUG] [Thread-13125] [transport.py] [_log()] userauth is OK
2025-11-12T09:13:18.610 [DEBUG] [Thread-13125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:13:18.610 [DEBUG] [Thread-13125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:13:18.610 [DEBUG] [Thread-13125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:13:18.610 [DEBUG] [Thread-13125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:13:18.635 [INFO] [Thread-13125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:13:18.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:13:19.257 [DEBUG] [Thread-13125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:13:19.257 [DEBUG] [Thread-13125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:13:19.257 [DEBUG] [Thread-13125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:13:19.297 [DEBUG] [Thread-13125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:13:19.298 [DEBUG] [Thread-13125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:13:19.301 [DEBUG] [Thread-13125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:13:19.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:13:19.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:13:19.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:13:19.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:13:19.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:13:19.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:13:19.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:13:19.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:13:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:13:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.300437 -999.00  +22.60  20.08     24   +1.40 1 1 1 1 1   888    0 24.92 210.06 ----- 15.3 20.1 282.2 27.1 28.6 -27.7 27.9 -25.2 25.9 -26.1 26.8 -26.3
2025-11-12T09:13:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:13:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:13:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.300437
2025-11-12T09:13:19.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:13:19.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:13:19.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:13:19.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:13:19.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:13:19.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:13:00', tmtdew=25.24, humidity=18.28, cloud=0.0, wind=21.88, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:12:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:13:19.329 [DEBUG] [Thread-13125] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:13:19.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:13:19.424 [DEBUG] [Thread-13128] [transport.py] [_log()] starting thread (client mode): 0x14921660
2025-11-12T09:13:19.425 [DEBUG] [Thread-13128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:13:19.438 [DEBUG] [Thread-13128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:13:19.439 [INFO] [Thread-13128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:13:19.446 [DEBUG] [Thread-13128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] client lang: <none>
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] server lang: <none>
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] kex follows: False
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] Compression: none
2025-11-12T09:13:19.447 [DEBUG] [Thread-13128] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:13:19.503 [DEBUG] [Thread-13128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:13:19.504 [DEBUG] [Thread-13128] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:13:19.504 [DEBUG] [Thread-13128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:13:19.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:13:19.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:13:19.563 [DEBUG] [Thread-13128] [transport.py] [_log()] userauth is OK
2025-11-12T09:13:19.564 [DEBUG] [Thread-13128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:13:19.564 [DEBUG] [Thread-13128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:13:19.564 [DEBUG] [Thread-13128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:13:19.564 [DEBUG] [Thread-13128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:13:19.583 [INFO] [Thread-13128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:13:19.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:13:19.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:13:20.423 [DEBUG] [Thread-13128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:13:20.424 [DEBUG] [Thread-13128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:13:20.472 [DEBUG] [Thread-13128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:13:20.472 [DEBUG] [Thread-13128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:13:20.481 [DEBUG] [Thread-13128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:13:20.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:13:20.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-11-12T09:13:20.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-11-12T09:13:20.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:13:20.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:13:20.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:13:20.516 [DEBUG] [Thread-13128] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:13:24.722 [DEBUG] [Thread-13130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:13:32.008 [DEBUG] [Thread-13131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:13:42.948 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:13:42.949 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:13:47.054 [DEBUG] [Thread-13132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:13:50.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:13:50.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:13:50.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-11-12T09:13:51.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 13, 32), 25.14, 18.39, 0.0, 21.69, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:13:51.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:13:32
2025-11-12T09:13:51.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:13:51.461 [DEBUG] [Thread-13133] [transport.py] [_log()] starting thread (client mode): 0x19ddbbe0
2025-11-12T09:13:51.461 [DEBUG] [Thread-13133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:13:51.481 [DEBUG] [Thread-13133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:13:51.481 [INFO] [Thread-13133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:13:51.482 [DEBUG] [Thread-13133] [transport.py] [_log()] client lang: <none>
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] server lang: <none>
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] kex follows: False
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] Compression: none
2025-11-12T09:13:51.483 [DEBUG] [Thread-13133] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:13:51.500 [DEBUG] [Thread-13133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:13:51.501 [DEBUG] [Thread-13133] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:13:51.501 [DEBUG] [Thread-13133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:13:51.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:13:51.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:13:51.503 [DEBUG] [Thread-13133] [transport.py] [_log()] userauth is OK
2025-11-12T09:13:51.504 [DEBUG] [Thread-13133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:13:51.504 [DEBUG] [Thread-13133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:13:51.504 [DEBUG] [Thread-13133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:13:51.504 [DEBUG] [Thread-13133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:13:51.540 [INFO] [Thread-13133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:13:51.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:13:52.118 [DEBUG] [Thread-13133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:13:52.118 [DEBUG] [Thread-13133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:13:52.118 [DEBUG] [Thread-13133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:13:52.159 [DEBUG] [Thread-13133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:13:52.159 [DEBUG] [Thread-13133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:13:52.163 [DEBUG] [Thread-13133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:13:52.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:13:52.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:13:52.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:13:52.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:13:52.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:13:52.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:13:52.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:13:52.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:13:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:13:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.300785 -999.00  +22.80  20.21     24   +1.40 1 1 1 1 1   888    0 24.83 208.52 ----- 18.2 20.2 295.4 27.8 28.5 -27.6 27.9 -25.5 26.1 -24.6 26.7 -26.1
2025-11-12T09:13:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:13:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:13:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.300785
2025-11-12T09:13:52.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:13:52.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:13:52.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:13:52.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:13:52.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:13:52.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:13:32', tmtdew=25.14, humidity=18.39, cloud=0.0, wind=21.69, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:13:07.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:13:52.191 [DEBUG] [Thread-13133] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:13:52.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:13:52.291 [DEBUG] [Thread-13136] [transport.py] [_log()] starting thread (client mode): 0x19dda380
2025-11-12T09:13:52.291 [DEBUG] [Thread-13136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:13:52.306 [DEBUG] [Thread-13136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:13:52.306 [INFO] [Thread-13136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:13:52.313 [DEBUG] [Thread-13136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:13:52.313 [DEBUG] [Thread-13136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:13:52.313 [DEBUG] [Thread-13136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:13:52.313 [DEBUG] [Thread-13136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:13:52.313 [DEBUG] [Thread-13136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] client lang: <none>
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] server lang: <none>
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] kex follows: False
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] Compression: none
2025-11-12T09:13:52.314 [DEBUG] [Thread-13136] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:13:52.371 [DEBUG] [Thread-13136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:13:52.372 [DEBUG] [Thread-13136] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:13:52.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:13:52.373 [DEBUG] [Thread-13136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:13:52.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:13:52.433 [DEBUG] [Thread-13136] [transport.py] [_log()] userauth is OK
2025-11-12T09:13:52.434 [DEBUG] [Thread-13136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:13:52.434 [DEBUG] [Thread-13136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:13:52.434 [DEBUG] [Thread-13136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:13:52.434 [DEBUG] [Thread-13136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:13:52.456 [INFO] [Thread-13136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:13:52.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:13:52.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:13:53.309 [DEBUG] [Thread-13136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:13:53.310 [DEBUG] [Thread-13136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:13:53.358 [DEBUG] [Thread-13136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:13:53.358 [DEBUG] [Thread-13136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:13:53.367 [DEBUG] [Thread-13136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:13:53.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:13:53.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:13:53.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:13:53.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:13:53.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:13:53.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:13:53.406 [DEBUG] [Thread-13136] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:14:02.091 [DEBUG] [Thread-13138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:14:17.140 [DEBUG] [Thread-13139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:14:23.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:14:23.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:14:23.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-11-12T09:14:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 14, 4), 25.19, 18.36, 0.0, 22.27, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:14:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:14:04
2025-11-12T09:14:24.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:14:24.341 [DEBUG] [Thread-13140] [transport.py] [_log()] starting thread (client mode): 0x19dd9270
2025-11-12T09:14:24.341 [DEBUG] [Thread-13140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:14:24.361 [DEBUG] [Thread-13140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:14:24.361 [INFO] [Thread-13140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:14:24.364 [DEBUG] [Thread-13140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] client lang: <none>
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] server lang: <none>
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] kex follows: False
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:14:24.365 [DEBUG] [Thread-13140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:14:24.366 [DEBUG] [Thread-13140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:14:24.366 [DEBUG] [Thread-13140] [transport.py] [_log()] Compression: none
2025-11-12T09:14:24.366 [DEBUG] [Thread-13140] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:14:24.384 [DEBUG] [Thread-13140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:14:24.385 [DEBUG] [Thread-13140] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:14:24.385 [DEBUG] [Thread-13140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:14:24.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:14:24.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:14:24.387 [DEBUG] [Thread-13140] [transport.py] [_log()] userauth is OK
2025-11-12T09:14:24.387 [DEBUG] [Thread-13140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:14:24.387 [DEBUG] [Thread-13140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:14:24.387 [DEBUG] [Thread-13140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:14:24.387 [DEBUG] [Thread-13140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:14:24.411 [INFO] [Thread-13140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:14:24.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:14:24.776 [DEBUG] [Thread-13142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:14:25.015 [DEBUG] [Thread-13140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:14:25.015 [DEBUG] [Thread-13140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:14:25.015 [DEBUG] [Thread-13140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:14:25.056 [DEBUG] [Thread-13140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:14:25.056 [DEBUG] [Thread-13140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:14:25.060 [DEBUG] [Thread-13140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:14:25.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:14:25.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:14:25.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:14:25.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:14:25.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:14:25.084 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:14:25.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:14:25.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:14:25.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:14:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.301132 -999.00  +22.70  16.06     24   +1.20 1 1 1 1 1   888    0 25.06 215.22 ----- 17.0 16.1 300.4 22.2 28.6 -25.8 27.9 -25.2 26.2 -25.5 26.8 -25.4
2025-11-12T09:14:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:14:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:14:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.301132
2025-11-12T09:14:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:14:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:14:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:14:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:14:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:14:25.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:14:04', tmtdew=25.19, humidity=18.36, cloud=0.0, wind=22.27, temperature=22.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:13:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:14:25.087 [DEBUG] [Thread-13140] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:14:25.185 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:14:25.197 [DEBUG] [Thread-13144] [transport.py] [_log()] starting thread (client mode): 0x19dd9720
2025-11-12T09:14:25.197 [DEBUG] [Thread-13144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:14:25.217 [DEBUG] [Thread-13144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:14:25.217 [INFO] [Thread-13144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:14:25.225 [DEBUG] [Thread-13144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:14:25.225 [DEBUG] [Thread-13144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:14:25.225 [DEBUG] [Thread-13144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] client lang: <none>
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] server lang: <none>
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] kex follows: False
2025-11-12T09:14:25.226 [DEBUG] [Thread-13144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:14:25.227 [DEBUG] [Thread-13144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:14:25.227 [DEBUG] [Thread-13144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:14:25.227 [DEBUG] [Thread-13144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:14:25.227 [DEBUG] [Thread-13144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:14:25.227 [DEBUG] [Thread-13144] [transport.py] [_log()] Compression: none
2025-11-12T09:14:25.227 [DEBUG] [Thread-13144] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:14:25.285 [DEBUG] [Thread-13144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:14:25.285 [DEBUG] [Thread-13144] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:14:25.286 [DEBUG] [Thread-13144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:14:25.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:14:25.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:14:25.344 [DEBUG] [Thread-13144] [transport.py] [_log()] userauth is OK
2025-11-12T09:14:25.344 [DEBUG] [Thread-13144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:14:25.344 [DEBUG] [Thread-13144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:14:25.344 [DEBUG] [Thread-13144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:14:25.344 [DEBUG] [Thread-13144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:14:25.365 [INFO] [Thread-13144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:14:25.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:14:25.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:14:26.213 [DEBUG] [Thread-13144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:14:26.213 [DEBUG] [Thread-13144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:14:26.264 [DEBUG] [Thread-13144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:14:26.264 [DEBUG] [Thread-13144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:14:26.275 [DEBUG] [Thread-13144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:14:26.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:14:26.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-11-12T09:14:26.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-11-12T09:14:26.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:14:26.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:14:26.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:14:26.313 [DEBUG] [Thread-13144] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:14:32.175 [DEBUG] [Thread-13146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:14:43.091 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:14:43.092 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:14:47.226 [DEBUG] [Thread-13147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:14:56.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:14:56.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:14:56.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-11-12T09:14:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 14, 36), 25.33, 18.69, 0.0, 18.42, 23.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:14:56.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:14:36
2025-11-12T09:14:57.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:14:57.252 [DEBUG] [Thread-13148] [transport.py] [_log()] starting thread (client mode): 0x1493ffa0
2025-11-12T09:14:57.252 [DEBUG] [Thread-13148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:14:57.272 [DEBUG] [Thread-13148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:14:57.272 [INFO] [Thread-13148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:14:57.275 [DEBUG] [Thread-13148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] client lang: <none>
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] server lang: <none>
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] kex follows: False
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] Compression: none
2025-11-12T09:14:57.276 [DEBUG] [Thread-13148] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:14:57.292 [DEBUG] [Thread-13148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:14:57.293 [DEBUG] [Thread-13148] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:14:57.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:14:57.294 [DEBUG] [Thread-13148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:14:57.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:14:57.296 [DEBUG] [Thread-13148] [transport.py] [_log()] userauth is OK
2025-11-12T09:14:57.296 [DEBUG] [Thread-13148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:14:57.296 [DEBUG] [Thread-13148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:14:57.296 [DEBUG] [Thread-13148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:14:57.296 [DEBUG] [Thread-13148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:14:57.319 [INFO] [Thread-13148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:14:57.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:14:57.947 [DEBUG] [Thread-13148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:14:57.948 [DEBUG] [Thread-13148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:14:57.948 [DEBUG] [Thread-13148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:14:57.988 [DEBUG] [Thread-13148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:14:57.988 [DEBUG] [Thread-13148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:14:57.991 [DEBUG] [Thread-13148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:14:58.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:14:58.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:14:58.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:14:58.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:14:58.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:14:58.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:14:58.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:14:58.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:14:58.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:14:58.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.301826 -999.00  +22.50  16.75     25   +1.80 1 1 1 1 1   888    0 25.18 211.79 ----- 18.4 16.8 282.9 21.2 28.7 -26.2 28.0 -24.6 26.2 -25.3 26.8 -25.0
2025-11-12T09:14:58.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:14:58.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:14:58.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.301826
2025-11-12T09:14:58.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:14:58.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:14:58.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:14:58.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:14:58.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:14:58.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:14:36', tmtdew=25.33, humidity=18.69, cloud=0.0, wind=18.42, temperature=23.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:14:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:14:58.016 [DEBUG] [Thread-13148] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:14:58.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:14:58.113 [DEBUG] [Thread-13151] [transport.py] [_log()] starting thread (client mode): 0x14907580
2025-11-12T09:14:58.113 [DEBUG] [Thread-13151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:14:58.127 [DEBUG] [Thread-13151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:14:58.127 [INFO] [Thread-13151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:14:58.134 [DEBUG] [Thread-13151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:14:58.134 [DEBUG] [Thread-13151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:14:58.134 [DEBUG] [Thread-13151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:14:58.134 [DEBUG] [Thread-13151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] client lang: <none>
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] server lang: <none>
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] kex follows: False
2025-11-12T09:14:58.135 [DEBUG] [Thread-13151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:14:58.136 [DEBUG] [Thread-13151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:14:58.136 [DEBUG] [Thread-13151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:14:58.136 [DEBUG] [Thread-13151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:14:58.136 [DEBUG] [Thread-13151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:14:58.136 [DEBUG] [Thread-13151] [transport.py] [_log()] Compression: none
2025-11-12T09:14:58.136 [DEBUG] [Thread-13151] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:14:58.192 [DEBUG] [Thread-13151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:14:58.193 [DEBUG] [Thread-13151] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:14:58.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:14:58.194 [DEBUG] [Thread-13151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:14:58.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:14:58.251 [DEBUG] [Thread-13151] [transport.py] [_log()] userauth is OK
2025-11-12T09:14:58.251 [DEBUG] [Thread-13151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:14:58.251 [DEBUG] [Thread-13151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:14:58.251 [DEBUG] [Thread-13151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:14:58.251 [DEBUG] [Thread-13151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:14:58.273 [INFO] [Thread-13151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:14:58.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:14:58.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:14:59.144 [DEBUG] [Thread-13151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:14:59.144 [DEBUG] [Thread-13151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:14:59.192 [DEBUG] [Thread-13151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:14:59.192 [DEBUG] [Thread-13151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:14:59.205 [DEBUG] [Thread-13151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:14:59.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:14:59.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-11-12T09:14:59.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-11-12T09:14:59.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:14:59.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:14:59.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:14:59.240 [DEBUG] [Thread-13151] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:15:02.250 [DEBUG] [Thread-13153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:15:17.293 [DEBUG] [Thread-13154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:15:24.823 [DEBUG] [Thread-13155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:15:29.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:15:29.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:15:29.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-11-12T09:15:29.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 15, 8), 25.34, 18.73, 0.0, 21.31, 23.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:15:29.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:15:08
2025-11-12T09:15:30.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:15:30.216 [DEBUG] [Thread-13156] [transport.py] [_log()] starting thread (client mode): 0x1493ca30
2025-11-12T09:15:30.216 [DEBUG] [Thread-13156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:15:30.236 [DEBUG] [Thread-13156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:15:30.236 [INFO] [Thread-13156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] client lang: <none>
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] server lang: <none>
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] kex follows: False
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:15:30.239 [DEBUG] [Thread-13156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:15:30.240 [DEBUG] [Thread-13156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:15:30.240 [DEBUG] [Thread-13156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:15:30.240 [DEBUG] [Thread-13156] [transport.py] [_log()] Compression: none
2025-11-12T09:15:30.240 [DEBUG] [Thread-13156] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:15:30.256 [DEBUG] [Thread-13156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:15:30.257 [DEBUG] [Thread-13156] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:15:30.257 [DEBUG] [Thread-13156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:15:30.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:15:30.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:15:30.259 [DEBUG] [Thread-13156] [transport.py] [_log()] userauth is OK
2025-11-12T09:15:30.260 [DEBUG] [Thread-13156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:15:30.260 [DEBUG] [Thread-13156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:15:30.260 [DEBUG] [Thread-13156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:15:30.260 [DEBUG] [Thread-13156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:15:30.285 [INFO] [Thread-13156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:15:30.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:15:30.902 [DEBUG] [Thread-13156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:15:30.903 [DEBUG] [Thread-13156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:15:30.903 [DEBUG] [Thread-13156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:15:30.944 [DEBUG] [Thread-13156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:15:30.944 [DEBUG] [Thread-13156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:15:30.947 [DEBUG] [Thread-13156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:15:30.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:15:30.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:15:30.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:15:30.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:15:30.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:15:30.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:15:30.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:15:30.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:15:30.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:15:30.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.302173 -999.00  +22.60  24.64     26   +2.20 1 1 1 1 1   888    0 25.20 216.98 ----- 22.1 24.6 291.6 28.7 28.8 -27.3 28.1 -25.3 26.2 -25.3 26.9 -25.7
2025-11-12T09:15:30.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:15:30.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:15:30.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.302173
2025-11-12T09:15:30.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:15:30.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:15:30.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:15:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:15:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:15:30.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:15:08', tmtdew=25.34, humidity=18.73, cloud=0.0, wind=21.31, temperature=23.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:15:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:15:30.974 [DEBUG] [Thread-13156] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:15:31.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:15:31.071 [DEBUG] [Thread-13159] [transport.py] [_log()] starting thread (client mode): 0x14905db0
2025-11-12T09:15:31.071 [DEBUG] [Thread-13159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:15:31.085 [DEBUG] [Thread-13159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:15:31.086 [INFO] [Thread-13159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] client lang: <none>
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] server lang: <none>
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] kex follows: False
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:15:31.093 [DEBUG] [Thread-13159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:15:31.094 [DEBUG] [Thread-13159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:15:31.094 [DEBUG] [Thread-13159] [transport.py] [_log()] Compression: none
2025-11-12T09:15:31.094 [DEBUG] [Thread-13159] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:15:31.151 [DEBUG] [Thread-13159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:15:31.152 [DEBUG] [Thread-13159] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:15:31.153 [DEBUG] [Thread-13159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:15:31.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:15:31.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:15:31.208 [DEBUG] [Thread-13159] [transport.py] [_log()] userauth is OK
2025-11-12T09:15:31.208 [DEBUG] [Thread-13159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:15:31.208 [DEBUG] [Thread-13159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:15:31.208 [DEBUG] [Thread-13159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:15:31.208 [DEBUG] [Thread-13159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:15:31.227 [INFO] [Thread-13159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:15:31.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:15:31.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:15:32.067 [DEBUG] [Thread-13159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:15:32.067 [DEBUG] [Thread-13159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:15:32.118 [DEBUG] [Thread-13159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:15:32.118 [DEBUG] [Thread-13159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:15:32.128 [DEBUG] [Thread-13159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:15:32.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:15:32.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-11-12T09:15:32.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-11-12T09:15:32.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:15:32.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:15:32.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:15:32.165 [DEBUG] [Thread-13159] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:15:32.330 [DEBUG] [Thread-13161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:15:43.233 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:15:43.235 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:15:47.389 [DEBUG] [Thread-13162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:16:02.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:16:02.177 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:16:02.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-11-12T09:16:02.424 [DEBUG] [Thread-13163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:16:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 15, 40), 25.01, 18.98, 0.0, 18.97, 23.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:16:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:15:40
2025-11-12T09:16:02.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:16:03.130 [DEBUG] [Thread-13164] [transport.py] [_log()] starting thread (client mode): 0x17360fa0
2025-11-12T09:16:03.130 [DEBUG] [Thread-13164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:16:03.150 [DEBUG] [Thread-13164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:16:03.150 [INFO] [Thread-13164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] client lang: <none>
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] server lang: <none>
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] kex follows: False
2025-11-12T09:16:03.153 [DEBUG] [Thread-13164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:16:03.154 [DEBUG] [Thread-13164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:16:03.154 [DEBUG] [Thread-13164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:16:03.154 [DEBUG] [Thread-13164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:16:03.154 [DEBUG] [Thread-13164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:16:03.154 [DEBUG] [Thread-13164] [transport.py] [_log()] Compression: none
2025-11-12T09:16:03.154 [DEBUG] [Thread-13164] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:16:03.166 [DEBUG] [Thread-13164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:16:03.167 [DEBUG] [Thread-13164] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:16:03.167 [DEBUG] [Thread-13164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:16:03.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:16:03.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:16:03.167 [DEBUG] [Thread-13164] [transport.py] [_log()] userauth is OK
2025-11-12T09:16:03.167 [DEBUG] [Thread-13164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:16:03.167 [DEBUG] [Thread-13164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:16:03.167 [DEBUG] [Thread-13164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:16:03.167 [DEBUG] [Thread-13164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:16:03.182 [INFO] [Thread-13164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:16:03.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:16:03.816 [DEBUG] [Thread-13164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:16:03.816 [DEBUG] [Thread-13164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:16:03.816 [DEBUG] [Thread-13164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:16:03.857 [DEBUG] [Thread-13164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:16:03.857 [DEBUG] [Thread-13164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:16:03.859 [DEBUG] [Thread-13164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:16:03.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:16:03.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:16:03.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:16:03.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:16:03.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:16:03.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:16:03.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:16:03.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:16:03.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.302521 -999.00  +22.20  24.20     26   +2.10 1 1 1 1 1   888    0 25.91 229.74 ----- 19.1 24.2 297.2 27.9 28.6 -27.6 27.9 -25.8 26.2 -26.6 26.8 -25.9
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.302521
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:16:03.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:15:40', tmtdew=25.01, humidity=18.98, cloud=0.0, wind=18.97, temperature=23.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:15:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:16:03.879 [DEBUG] [Thread-13164] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:16:03.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:16:03.963 [DEBUG] [Thread-13167] [transport.py] [_log()] starting thread (client mode): 0x149a4400
2025-11-12T09:16:03.964 [DEBUG] [Thread-13167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:16:03.980 [DEBUG] [Thread-13167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:16:03.980 [INFO] [Thread-13167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] client lang: <none>
2025-11-12T09:16:03.989 [DEBUG] [Thread-13167] [transport.py] [_log()] server lang: <none>
2025-11-12T09:16:03.990 [DEBUG] [Thread-13167] [transport.py] [_log()] kex follows: False
2025-11-12T09:16:03.990 [DEBUG] [Thread-13167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:16:03.990 [DEBUG] [Thread-13167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:16:03.990 [DEBUG] [Thread-13167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:16:03.990 [DEBUG] [Thread-13167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:16:03.990 [DEBUG] [Thread-13167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:16:03.990 [DEBUG] [Thread-13167] [transport.py] [_log()] Compression: none
2025-11-12T09:16:03.990 [DEBUG] [Thread-13167] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:16:04.047 [DEBUG] [Thread-13167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:16:04.047 [DEBUG] [Thread-13167] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:16:04.047 [DEBUG] [Thread-13167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:16:04.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:16:04.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:16:04.103 [DEBUG] [Thread-13167] [transport.py] [_log()] userauth is OK
2025-11-12T09:16:04.103 [DEBUG] [Thread-13167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:16:04.103 [DEBUG] [Thread-13167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:16:04.103 [DEBUG] [Thread-13167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:16:04.103 [DEBUG] [Thread-13167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:16:04.117 [INFO] [Thread-13167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:16:04.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:16:04.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:16:05.078 [DEBUG] [Thread-13167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:16:05.078 [DEBUG] [Thread-13167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:16:05.126 [DEBUG] [Thread-13167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:16:05.126 [DEBUG] [Thread-13167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:16:05.134 [DEBUG] [Thread-13167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:16:05.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:16:05.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-11-12T09:16:05.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-11-12T09:16:05.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:16:05.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:16:05.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:16:05.166 [DEBUG] [Thread-13167] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:16:17.455 [DEBUG] [Thread-13169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:16:24.857 [DEBUG] [Thread-13170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:16:32.509 [DEBUG] [Thread-13171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:16:35.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:16:35.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:16:35.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-11-12T09:16:35.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 16, 12), 24.6, 19.49, 0.0, 16.82, 23.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:16:35.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:16:12
2025-11-12T09:16:35.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:16:36.103 [DEBUG] [Thread-13172] [transport.py] [_log()] starting thread (client mode): 0x19ddbf40
2025-11-12T09:16:36.103 [DEBUG] [Thread-13172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:16:36.123 [DEBUG] [Thread-13172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:16:36.123 [INFO] [Thread-13172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:16:36.126 [DEBUG] [Thread-13172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:16:36.126 [DEBUG] [Thread-13172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:16:36.126 [DEBUG] [Thread-13172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:16:36.126 [DEBUG] [Thread-13172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:16:36.126 [DEBUG] [Thread-13172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:16:36.126 [DEBUG] [Thread-13172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:16:36.126 [DEBUG] [Thread-13172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:16:36.126 [DEBUG] [Thread-13172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] client lang: <none>
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] server lang: <none>
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] kex follows: False
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] Compression: none
2025-11-12T09:16:36.127 [DEBUG] [Thread-13172] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:16:36.142 [DEBUG] [Thread-13172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:16:36.143 [DEBUG] [Thread-13172] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:16:36.143 [DEBUG] [Thread-13172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:16:36.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:16:36.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:16:36.184 [DEBUG] [Thread-13172] [transport.py] [_log()] userauth is OK
2025-11-12T09:16:36.184 [DEBUG] [Thread-13172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:16:36.184 [DEBUG] [Thread-13172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:16:36.184 [DEBUG] [Thread-13172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:16:36.184 [DEBUG] [Thread-13172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:16:36.215 [INFO] [Thread-13172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:16:36.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:16:36.843 [DEBUG] [Thread-13172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:16:36.843 [DEBUG] [Thread-13172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:16:36.844 [DEBUG] [Thread-13172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:16:36.886 [DEBUG] [Thread-13172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:16:36.886 [DEBUG] [Thread-13172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:16:36.889 [DEBUG] [Thread-13172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:16:36.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:16:36.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:16:36.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:16:36.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:16:36.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:16:36.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:16:36.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:16:36.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:16:36.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:16:36.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.302868 -999.00  +22.20  17.63     26   +2.00 1 1 1 1 1   888    0 25.92 235.89 ----- 17.9 17.6 297.2 24.1 28.6 -26.6 27.9 -25.1 26.2 -26.4 26.8 -25.7
2025-11-12T09:16:36.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:16:36.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:16:36.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.302868
2025-11-12T09:16:36.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:16:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:16:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:16:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:16:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:16:36.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:16:12', tmtdew=24.6, humidity=19.49, cloud=0.0, wind=16.82, temperature=23.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:16:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:16:36.917 [DEBUG] [Thread-13172] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:16:37.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:16:37.015 [DEBUG] [Thread-13175] [transport.py] [_log()] starting thread (client mode): 0x17362e60
2025-11-12T09:16:37.015 [DEBUG] [Thread-13175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:16:37.031 [DEBUG] [Thread-13175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:16:37.031 [INFO] [Thread-13175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:16:37.039 [DEBUG] [Thread-13175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] client lang: <none>
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] server lang: <none>
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] kex follows: False
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:16:37.040 [DEBUG] [Thread-13175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:16:37.041 [DEBUG] [Thread-13175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:16:37.041 [DEBUG] [Thread-13175] [transport.py] [_log()] Compression: none
2025-11-12T09:16:37.041 [DEBUG] [Thread-13175] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:16:37.103 [DEBUG] [Thread-13175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:16:37.104 [DEBUG] [Thread-13175] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:16:37.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:16:37.105 [DEBUG] [Thread-13175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:16:37.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:16:37.159 [DEBUG] [Thread-13175] [transport.py] [_log()] userauth is OK
2025-11-12T09:16:37.159 [DEBUG] [Thread-13175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:16:37.160 [DEBUG] [Thread-13175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:16:37.160 [DEBUG] [Thread-13175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:16:37.160 [DEBUG] [Thread-13175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:16:37.176 [INFO] [Thread-13175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:16:37.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:16:37.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:16:38.033 [DEBUG] [Thread-13175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:16:38.033 [DEBUG] [Thread-13175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:16:38.084 [DEBUG] [Thread-13175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:16:38.084 [DEBUG] [Thread-13175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:16:38.094 [DEBUG] [Thread-13175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:16:38.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:16:38.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-11-12T09:16:38.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-11-12T09:16:38.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:16:38.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:16:38.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:16:38.139 [DEBUG] [Thread-13175] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:16:43.376 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:16:43.377 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:16:47.545 [DEBUG] [Thread-13177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:17:02.596 [DEBUG] [Thread-13178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:17:08.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:17:08.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:17:08.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-11-12T09:17:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 16, 44), 25.35, 18.42, 0.0, 20.98, 23.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:17:08.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:16:44
2025-11-12T09:17:08.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:17:09.078 [DEBUG] [Thread-13179] [transport.py] [_log()] starting thread (client mode): 0x17345690
2025-11-12T09:17:09.078 [DEBUG] [Thread-13179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:17:09.097 [DEBUG] [Thread-13179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:17:09.098 [INFO] [Thread-13179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:17:09.099 [DEBUG] [Thread-13179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:17:09.099 [DEBUG] [Thread-13179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:17:09.099 [DEBUG] [Thread-13179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:17:09.099 [DEBUG] [Thread-13179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:17:09.099 [DEBUG] [Thread-13179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:17:09.099 [DEBUG] [Thread-13179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:17:09.099 [DEBUG] [Thread-13179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] client lang: <none>
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] server lang: <none>
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] kex follows: False
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] Compression: none
2025-11-12T09:17:09.100 [DEBUG] [Thread-13179] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:17:09.117 [DEBUG] [Thread-13179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:17:09.117 [DEBUG] [Thread-13179] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:17:09.118 [DEBUG] [Thread-13179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:17:09.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:17:09.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:17:09.120 [DEBUG] [Thread-13179] [transport.py] [_log()] userauth is OK
2025-11-12T09:17:09.120 [DEBUG] [Thread-13179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:17:09.120 [DEBUG] [Thread-13179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:17:09.120 [DEBUG] [Thread-13179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:17:09.120 [DEBUG] [Thread-13179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:17:09.139 [INFO] [Thread-13179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:17:09.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:17:09.734 [DEBUG] [Thread-13179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:17:09.734 [DEBUG] [Thread-13179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:17:09.735 [DEBUG] [Thread-13179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:17:09.776 [DEBUG] [Thread-13179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:17:09.776 [DEBUG] [Thread-13179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:17:09.779 [DEBUG] [Thread-13179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:17:09.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:17:09.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:17:09.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:17:09.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:17:09.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:17:09.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:17:09.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:17:09.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:17:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:17:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.303215 -999.00  +22.40  21.93     24   +1.30 1 1 1 1 1   888    0 26.25 243.59 ----- 22.4 21.9 277.2 30.3 28.6 -26.9 27.9 -25.5 26.3 -25.8 26.8 -25.8
2025-11-12T09:17:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:17:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:17:09.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.303215
2025-11-12T09:17:09.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:17:09.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:17:09.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:17:09.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:17:09.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:17:09.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:16:44', tmtdew=25.35, humidity=18.42, cloud=0.0, wind=20.98, temperature=23.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:16:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:17:09.806 [DEBUG] [Thread-13179] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:17:09.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:17:09.902 [DEBUG] [Thread-13182] [transport.py] [_log()] starting thread (client mode): 0x173eb5b0
2025-11-12T09:17:09.902 [DEBUG] [Thread-13182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:17:09.921 [DEBUG] [Thread-13182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:17:09.921 [INFO] [Thread-13182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:17:09.932 [DEBUG] [Thread-13182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:17:09.933 [DEBUG] [Thread-13182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:17:09.933 [DEBUG] [Thread-13182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:17:09.933 [DEBUG] [Thread-13182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:17:09.933 [DEBUG] [Thread-13182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:17:09.933 [DEBUG] [Thread-13182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:17:09.933 [DEBUG] [Thread-13182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:17:09.934 [DEBUG] [Thread-13182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:17:09.934 [DEBUG] [Thread-13182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:17:09.934 [DEBUG] [Thread-13182] [transport.py] [_log()] client lang: <none>
2025-11-12T09:17:09.934 [DEBUG] [Thread-13182] [transport.py] [_log()] server lang: <none>
2025-11-12T09:17:09.934 [DEBUG] [Thread-13182] [transport.py] [_log()] kex follows: False
2025-11-12T09:17:09.934 [DEBUG] [Thread-13182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:17:09.934 [DEBUG] [Thread-13182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:17:09.934 [DEBUG] [Thread-13182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:17:09.935 [DEBUG] [Thread-13182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:17:09.935 [DEBUG] [Thread-13182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:17:09.935 [DEBUG] [Thread-13182] [transport.py] [_log()] Compression: none
2025-11-12T09:17:09.935 [DEBUG] [Thread-13182] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:17:09.992 [DEBUG] [Thread-13182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:17:09.993 [DEBUG] [Thread-13182] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:17:09.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:17:09.995 [DEBUG] [Thread-13182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:17:09.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:17:10.052 [DEBUG] [Thread-13182] [transport.py] [_log()] userauth is OK
2025-11-12T09:17:10.053 [DEBUG] [Thread-13182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:17:10.053 [DEBUG] [Thread-13182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:17:10.053 [DEBUG] [Thread-13182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:17:10.053 [DEBUG] [Thread-13182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:17:10.073 [INFO] [Thread-13182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:17:10.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:17:10.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:17:10.924 [DEBUG] [Thread-13182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:17:10.924 [DEBUG] [Thread-13182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:17:10.972 [DEBUG] [Thread-13182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:17:10.972 [DEBUG] [Thread-13182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:17:10.981 [DEBUG] [Thread-13182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:17:10.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:17:10.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-11-12T09:17:10.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-11-12T09:17:11.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:17:11.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:17:11.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:17:11.016 [DEBUG] [Thread-13182] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:17:17.631 [DEBUG] [Thread-13184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:17:24.886 [DEBUG] [Thread-13185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:17:32.676 [DEBUG] [Thread-13186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:17:41.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:17:41.040 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:17:41.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:17:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 17, 16), 25.3, 18.49, 0.0, 22.06, 23.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:17:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:17:16
2025-11-12T09:17:41.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:17:41.970 [DEBUG] [Thread-13187] [transport.py] [_log()] starting thread (client mode): 0x17344400
2025-11-12T09:17:41.970 [DEBUG] [Thread-13187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:17:41.990 [DEBUG] [Thread-13187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:17:41.990 [INFO] [Thread-13187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:17:41.993 [DEBUG] [Thread-13187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:17:41.993 [DEBUG] [Thread-13187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] client lang: <none>
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] server lang: <none>
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] kex follows: False
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] Compression: none
2025-11-12T09:17:41.994 [DEBUG] [Thread-13187] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:17:42.012 [DEBUG] [Thread-13187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:17:42.013 [DEBUG] [Thread-13187] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:17:42.013 [DEBUG] [Thread-13187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:17:42.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:17:42.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:17:42.015 [DEBUG] [Thread-13187] [transport.py] [_log()] userauth is OK
2025-11-12T09:17:42.016 [DEBUG] [Thread-13187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:17:42.016 [DEBUG] [Thread-13187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:17:42.016 [DEBUG] [Thread-13187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:17:42.016 [DEBUG] [Thread-13187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:17:42.034 [INFO] [Thread-13187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:17:42.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:17:42.670 [DEBUG] [Thread-13187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:17:42.670 [DEBUG] [Thread-13187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:17:42.671 [DEBUG] [Thread-13187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:17:42.711 [DEBUG] [Thread-13187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:17:42.711 [DEBUG] [Thread-13187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:17:42.714 [DEBUG] [Thread-13187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:17:42.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:17:42.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:17:42.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:17:42.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:17:42.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:17:42.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:17:42.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:17:42.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:17:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:17:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.303562 -999.00  +22.60  24.57     22   +0.20 1 1 1 1 1   888    0 27.44 263.74 ----- 22.3 24.6 264.4 29.6 28.5 -26.9 27.9 -25.4 26.0 -27.9 26.9 -26.0
2025-11-12T09:17:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:17:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:17:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.303562
2025-11-12T09:17:42.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:17:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:17:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:17:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:17:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:17:42.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:17:16', tmtdew=25.3, humidity=18.49, cloud=0.0, wind=22.06, temperature=23.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:17:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:17:42.742 [DEBUG] [Thread-13187] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:17:42.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:17:42.837 [DEBUG] [Thread-13190] [transport.py] [_log()] starting thread (client mode): 0x17363940
2025-11-12T09:17:42.837 [DEBUG] [Thread-13190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:17:42.855 [DEBUG] [Thread-13190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:17:42.856 [INFO] [Thread-13190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:17:42.863 [DEBUG] [Thread-13190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:17:42.864 [DEBUG] [Thread-13190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:17:42.864 [DEBUG] [Thread-13190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:17:42.864 [DEBUG] [Thread-13190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:17:42.864 [DEBUG] [Thread-13190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:17:42.864 [DEBUG] [Thread-13190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:17:42.864 [DEBUG] [Thread-13190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:17:42.865 [DEBUG] [Thread-13190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:17:42.865 [DEBUG] [Thread-13190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:17:42.865 [DEBUG] [Thread-13190] [transport.py] [_log()] client lang: <none>
2025-11-12T09:17:42.865 [DEBUG] [Thread-13190] [transport.py] [_log()] server lang: <none>
2025-11-12T09:17:42.865 [DEBUG] [Thread-13190] [transport.py] [_log()] kex follows: False
2025-11-12T09:17:42.865 [DEBUG] [Thread-13190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:17:42.865 [DEBUG] [Thread-13190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:17:42.865 [DEBUG] [Thread-13190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:17:42.866 [DEBUG] [Thread-13190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:17:42.866 [DEBUG] [Thread-13190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:17:42.866 [DEBUG] [Thread-13190] [transport.py] [_log()] Compression: none
2025-11-12T09:17:42.866 [DEBUG] [Thread-13190] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:17:42.928 [DEBUG] [Thread-13190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:17:42.929 [DEBUG] [Thread-13190] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:17:42.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:17:42.930 [DEBUG] [Thread-13190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:17:42.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:17:42.984 [DEBUG] [Thread-13190] [transport.py] [_log()] userauth is OK
2025-11-12T09:17:42.984 [DEBUG] [Thread-13190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:17:42.985 [DEBUG] [Thread-13190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:17:42.985 [DEBUG] [Thread-13190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:17:42.985 [DEBUG] [Thread-13190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:17:43.005 [INFO] [Thread-13190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:17:43.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:17:43.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:17:43.520 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:17:43.521 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:17:43.857 [DEBUG] [Thread-13190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:17:43.857 [DEBUG] [Thread-13190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:17:43.905 [DEBUG] [Thread-13190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:17:43.905 [DEBUG] [Thread-13190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:17:43.914 [DEBUG] [Thread-13190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:17:43.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:17:43.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-11-12T09:17:43.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-11-12T09:17:43.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:17:43.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:17:43.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:17:43.952 [DEBUG] [Thread-13190] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:17:47.714 [DEBUG] [Thread-13192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:18:02.762 [DEBUG] [Thread-13193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:18:13.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:18:13.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:18:13.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-11-12T09:18:14.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 17, 48), 26.02, 17.61, 0.0, 28.71, 22.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:18:14.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:17:48
2025-11-12T09:18:14.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:18:14.883 [DEBUG] [Thread-13194] [transport.py] [_log()] starting thread (client mode): 0x14905510
2025-11-12T09:18:14.883 [DEBUG] [Thread-13194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:18:14.903 [DEBUG] [Thread-13194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:18:14.903 [INFO] [Thread-13194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] client lang: <none>
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] server lang: <none>
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] kex follows: False
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:18:14.906 [DEBUG] [Thread-13194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:18:14.907 [DEBUG] [Thread-13194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:18:14.907 [DEBUG] [Thread-13194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:18:14.907 [DEBUG] [Thread-13194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:18:14.907 [DEBUG] [Thread-13194] [transport.py] [_log()] Compression: none
2025-11-12T09:18:14.907 [DEBUG] [Thread-13194] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:18:14.924 [DEBUG] [Thread-13194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:18:14.924 [DEBUG] [Thread-13194] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:18:14.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:18:14.925 [DEBUG] [Thread-13194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:18:14.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:18:14.927 [DEBUG] [Thread-13194] [transport.py] [_log()] userauth is OK
2025-11-12T09:18:14.927 [DEBUG] [Thread-13194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:18:14.927 [DEBUG] [Thread-13194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:18:14.927 [DEBUG] [Thread-13194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:18:14.928 [DEBUG] [Thread-13194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:18:14.951 [INFO] [Thread-13194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:18:14.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:18:15.580 [DEBUG] [Thread-13194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:18:15.580 [DEBUG] [Thread-13194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:18:15.580 [DEBUG] [Thread-13194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:18:15.620 [DEBUG] [Thread-13194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:18:15.621 [DEBUG] [Thread-13194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:18:15.624 [DEBUG] [Thread-13194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:18:15.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:18:15.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:18:15.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:18:15.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:18:15.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:18:15.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:18:15.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:18:15.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:18:15.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:18:15.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.303910 -999.00  +22.40  26.70     23   +0.60 1 1 1 1 1   888    0 27.55 277.89 ----- 23.8 26.7 283.8 29.6 28.4 -28.3 27.8 -25.8 26.0 -26.2 26.7 -26.0
2025-11-12T09:18:15.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:18:15.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:18:15.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.303910
2025-11-12T09:18:15.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:18:15.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:18:15.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:18:15.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:18:15.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:18:15.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:17:48', tmtdew=26.02, humidity=17.61, cloud=0.0, wind=28.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:17:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:18:15.647 [DEBUG] [Thread-13194] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:18:15.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:18:15.744 [DEBUG] [Thread-13197] [transport.py] [_log()] starting thread (client mode): 0x149a43a0
2025-11-12T09:18:15.744 [DEBUG] [Thread-13197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:18:15.759 [DEBUG] [Thread-13197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:18:15.759 [INFO] [Thread-13197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:18:15.766 [DEBUG] [Thread-13197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:18:15.766 [DEBUG] [Thread-13197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:18:15.766 [DEBUG] [Thread-13197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:18:15.766 [DEBUG] [Thread-13197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] client lang: <none>
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] server lang: <none>
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] kex follows: False
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] Compression: none
2025-11-12T09:18:15.767 [DEBUG] [Thread-13197] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:18:15.824 [DEBUG] [Thread-13197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:18:15.824 [DEBUG] [Thread-13197] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:18:15.825 [DEBUG] [Thread-13197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:18:15.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:18:15.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:18:15.880 [DEBUG] [Thread-13197] [transport.py] [_log()] userauth is OK
2025-11-12T09:18:15.880 [DEBUG] [Thread-13197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:18:15.881 [DEBUG] [Thread-13197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:18:15.881 [DEBUG] [Thread-13197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:18:15.881 [DEBUG] [Thread-13197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:18:15.900 [INFO] [Thread-13197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:18:15.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:18:15.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:18:16.736 [DEBUG] [Thread-13197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:18:16.736 [DEBUG] [Thread-13197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:18:16.785 [DEBUG] [Thread-13197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:18:16.785 [DEBUG] [Thread-13197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:18:16.794 [DEBUG] [Thread-13197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:18:16.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:18:16.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')
2025-11-12T09:18:16.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-11-12T09:18:16.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:18:16.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:18:16.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:18:16.832 [DEBUG] [Thread-13197] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:18:17.796 [DEBUG] [Thread-13199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:18:24.931 [DEBUG] [Thread-13200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:18:32.846 [DEBUG] [Thread-13201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:18:43.664 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:18:43.665 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:18:46.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:18:46.854 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:18:46.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-11-12T09:18:47.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 18, 20), 26.11, 17.5, 0.0, 28.83, 22.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:18:47.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:18:20
2025-11-12T09:18:47.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:18:47.767 [DEBUG] [Thread-13202] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T09:18:47.767 [DEBUG] [Thread-13202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:18:47.781 [DEBUG] [Thread-13202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:18:47.781 [INFO] [Thread-13202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] client lang: <none>
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] server lang: <none>
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] kex follows: False
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:18:47.784 [DEBUG] [Thread-13202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:18:47.785 [DEBUG] [Thread-13202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:18:47.785 [DEBUG] [Thread-13202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:18:47.785 [DEBUG] [Thread-13202] [transport.py] [_log()] Compression: none
2025-11-12T09:18:47.785 [DEBUG] [Thread-13202] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:18:47.800 [DEBUG] [Thread-13202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:18:47.800 [DEBUG] [Thread-13202] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:18:47.801 [DEBUG] [Thread-13202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:18:47.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:18:47.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:18:47.802 [DEBUG] [Thread-13202] [transport.py] [_log()] userauth is OK
2025-11-12T09:18:47.803 [DEBUG] [Thread-13202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:18:47.803 [DEBUG] [Thread-13202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:18:47.803 [DEBUG] [Thread-13202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:18:47.803 [DEBUG] [Thread-13202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:18:47.827 [INFO] [Thread-13202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:18:47.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:18:47.879 [DEBUG] [Thread-13204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:18:48.456 [DEBUG] [Thread-13202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:18:48.456 [DEBUG] [Thread-13202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:18:48.456 [DEBUG] [Thread-13202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:18:48.497 [DEBUG] [Thread-13202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:18:48.497 [DEBUG] [Thread-13202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:18:48.500 [DEBUG] [Thread-13202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:18:48.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:18:48.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:18:48.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:18:48.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:18:48.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:18:48.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:18:48.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:18:48.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:18:48.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:18:48.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.304604 -999.00  +22.50  18.81     23   +0.90 1 1 1 1 1   888    0 29.08 312.34 ----- 19.3 18.8 287.6 20.8 28.4 -26.9 27.9 -25.3 26.1 -25.8 26.8 -25.5
2025-11-12T09:18:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:18:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:18:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.304604
2025-11-12T09:18:48.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:18:48.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:18:48.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:18:48.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:18:48.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:18:48.526 [DEBUG] [Thread-13202] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:18:48.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:18:20', tmtdew=26.11, humidity=17.5, cloud=0.0, wind=28.83, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:18:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:18:48.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:18:48.621 [DEBUG] [Thread-13206] [transport.py] [_log()] starting thread (client mode): 0x19dd9d50
2025-11-12T09:18:48.621 [DEBUG] [Thread-13206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:18:48.638 [DEBUG] [Thread-13206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:18:48.638 [INFO] [Thread-13206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:18:48.646 [DEBUG] [Thread-13206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] client lang: <none>
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] server lang: <none>
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] kex follows: False
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] Compression: none
2025-11-12T09:18:48.647 [DEBUG] [Thread-13206] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:18:48.705 [DEBUG] [Thread-13206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:18:48.706 [DEBUG] [Thread-13206] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:18:48.706 [DEBUG] [Thread-13206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:18:48.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:18:48.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:18:48.765 [DEBUG] [Thread-13206] [transport.py] [_log()] userauth is OK
2025-11-12T09:18:48.765 [DEBUG] [Thread-13206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:18:48.766 [DEBUG] [Thread-13206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:18:48.766 [DEBUG] [Thread-13206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:18:48.766 [DEBUG] [Thread-13206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:18:48.786 [INFO] [Thread-13206] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:18:48.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:18:48.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:18:49.681 [DEBUG] [Thread-13206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:18:49.682 [DEBUG] [Thread-13206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:18:49.730 [DEBUG] [Thread-13206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:18:49.730 [DEBUG] [Thread-13206] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:18:49.739 [DEBUG] [Thread-13206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:18:49.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:18:49.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:18: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-11-12T09:18:49.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:18:49.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:18:49.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:18:49.776 [DEBUG] [Thread-13206] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:19:02.917 [DEBUG] [Thread-13208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:19:17.963 [DEBUG] [Thread-13209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:19:19.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:19:19.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:19:19.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-11-12T09:19:20.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 18, 52), 25.73, 17.64, 0.0, 17.47, 22.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:19:20.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:18:52
2025-11-12T09:19:20.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:19:20.744 [DEBUG] [Thread-13210] [transport.py] [_log()] starting thread (client mode): 0x17347580
2025-11-12T09:19:20.744 [DEBUG] [Thread-13210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:19:20.765 [DEBUG] [Thread-13210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:19:20.765 [INFO] [Thread-13210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:19:20.766 [DEBUG] [Thread-13210] [transport.py] [_log()] client lang: <none>
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] server lang: <none>
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] kex follows: False
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] Compression: none
2025-11-12T09:19:20.767 [DEBUG] [Thread-13210] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:19:20.783 [DEBUG] [Thread-13210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:19:20.784 [DEBUG] [Thread-13210] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:19:20.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:19:20.784 [DEBUG] [Thread-13210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:19:20.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:19:20.785 [DEBUG] [Thread-13210] [transport.py] [_log()] userauth is OK
2025-11-12T09:19:20.785 [DEBUG] [Thread-13210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:19:20.785 [DEBUG] [Thread-13210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:19:20.785 [DEBUG] [Thread-13210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:19:20.785 [DEBUG] [Thread-13210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:19:20.802 [INFO] [Thread-13210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:19:20.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:19:21.403 [DEBUG] [Thread-13210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:19:21.403 [DEBUG] [Thread-13210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:19:21.404 [DEBUG] [Thread-13210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:19:21.444 [DEBUG] [Thread-13210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:19:21.444 [DEBUG] [Thread-13210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:19:21.447 [DEBUG] [Thread-13210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:19:21.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:19:21.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:19:21.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:19:21.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:19:21.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:19:21.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:19:21.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:19:21.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:19:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:19:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.304951 -999.00  +22.70  21.13     24   +1.30 1 1 1 1 1   888    0 28.55 300.84 ----- 23.1 21.1 286.6 24.0 28.6 -26.4 27.9 -24.8 26.1 -25.7 26.9 -24.7
2025-11-12T09:19:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:19:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:19:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.304951
2025-11-12T09:19:21.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:19:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:19:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:19:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:19:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:19:21.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:18:52', tmtdew=25.73, humidity=17.64, cloud=0.0, wind=17.47, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:19:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:19:21.474 [DEBUG] [Thread-13210] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:19:21.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:19:21.577 [DEBUG] [Thread-13213] [transport.py] [_log()] starting thread (client mode): 0x149a72b0
2025-11-12T09:19:21.578 [DEBUG] [Thread-13213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:19:21.593 [DEBUG] [Thread-13213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:19:21.593 [INFO] [Thread-13213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:19:21.600 [DEBUG] [Thread-13213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] client lang: <none>
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] server lang: <none>
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] kex follows: False
2025-11-12T09:19:21.601 [DEBUG] [Thread-13213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:19:21.602 [DEBUG] [Thread-13213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:19:21.602 [DEBUG] [Thread-13213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:19:21.602 [DEBUG] [Thread-13213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:19:21.602 [DEBUG] [Thread-13213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:19:21.602 [DEBUG] [Thread-13213] [transport.py] [_log()] Compression: none
2025-11-12T09:19:21.602 [DEBUG] [Thread-13213] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:19:21.660 [DEBUG] [Thread-13213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:19:21.661 [DEBUG] [Thread-13213] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:19:21.661 [DEBUG] [Thread-13213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:19:21.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:19:21.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:19:21.717 [DEBUG] [Thread-13213] [transport.py] [_log()] userauth is OK
2025-11-12T09:19:21.718 [DEBUG] [Thread-13213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:19:21.718 [DEBUG] [Thread-13213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:19:21.718 [DEBUG] [Thread-13213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:19:21.718 [DEBUG] [Thread-13213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:19:21.737 [INFO] [Thread-13213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:19:21.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:19:21.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:19:22.583 [DEBUG] [Thread-13213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:19:22.584 [DEBUG] [Thread-13213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:19:22.631 [DEBUG] [Thread-13213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:19:22.631 [DEBUG] [Thread-13213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:19:22.640 [DEBUG] [Thread-13213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:19:22.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:19:22.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:19:22.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-11-12T09:19:22.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:19:22.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:19:22.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:19:22.680 [DEBUG] [Thread-13213] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:19:24.959 [DEBUG] [Thread-13215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:19:32.993 [DEBUG] [Thread-13216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:19:43.805 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:19:43.806 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:19:48.056 [DEBUG] [Thread-13217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:19:52.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:19:52.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:19:52.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-11-12T09:19:53.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 19, 24), 25.61, 17.78, 0.0, 16.9, 22.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:19:53.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:19:24
2025-11-12T09:19:53.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:19:53.631 [DEBUG] [Thread-13218] [transport.py] [_log()] starting thread (client mode): 0x17347f40
2025-11-12T09:19:53.631 [DEBUG] [Thread-13218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:19:53.651 [DEBUG] [Thread-13218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:19:53.651 [INFO] [Thread-13218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:19:53.654 [DEBUG] [Thread-13218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:19:53.654 [DEBUG] [Thread-13218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:19:53.654 [DEBUG] [Thread-13218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] client lang: <none>
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] server lang: <none>
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] kex follows: False
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] Compression: none
2025-11-12T09:19:53.655 [DEBUG] [Thread-13218] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:19:53.675 [DEBUG] [Thread-13218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:19:53.676 [DEBUG] [Thread-13218] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:19:53.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:19:53.677 [DEBUG] [Thread-13218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:19:53.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:19:53.679 [DEBUG] [Thread-13218] [transport.py] [_log()] userauth is OK
2025-11-12T09:19:53.679 [DEBUG] [Thread-13218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:19:53.679 [DEBUG] [Thread-13218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:19:53.679 [DEBUG] [Thread-13218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:19:53.679 [DEBUG] [Thread-13218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:19:53.717 [INFO] [Thread-13218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:19:53.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:19:54.365 [DEBUG] [Thread-13218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:19:54.365 [DEBUG] [Thread-13218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:19:54.365 [DEBUG] [Thread-13218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:19:54.406 [DEBUG] [Thread-13218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:19:54.406 [DEBUG] [Thread-13218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:19:54.408 [DEBUG] [Thread-13218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:19:54.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:19:54.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:19:54.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:19:54.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:19:54.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:19:54.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:19:54.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.305298 -999.00  +22.70  24.37     23   +0.60 1 1 1 1 1   888    0 28.22 276.72 ----- 26.4 24.4 294.4 28.7 28.6 -27.5 28.0 -25.5 26.2 -25.7 26.9 -25.2
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.305298
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:19:54.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:19:24', tmtdew=25.61, humidity=17.78, cloud=0.0, wind=16.9, temperature=22.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:19:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:19:54.427 [DEBUG] [Thread-13218] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:19:54.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:19:54.513 [DEBUG] [Thread-13221] [transport.py] [_log()] starting thread (client mode): 0x19dd9d50
2025-11-12T09:19:54.513 [DEBUG] [Thread-13221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:19:54.528 [DEBUG] [Thread-13221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:19:54.528 [INFO] [Thread-13221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] client lang: <none>
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] server lang: <none>
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] kex follows: False
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] Compression: none
2025-11-12T09:19:54.536 [DEBUG] [Thread-13221] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:19:54.590 [DEBUG] [Thread-13221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:19:54.590 [DEBUG] [Thread-13221] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:19:54.591 [DEBUG] [Thread-13221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:19:54.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:19:54.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:19:54.648 [DEBUG] [Thread-13221] [transport.py] [_log()] userauth is OK
2025-11-12T09:19:54.648 [DEBUG] [Thread-13221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:19:54.648 [DEBUG] [Thread-13221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:19:54.648 [DEBUG] [Thread-13221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:19:54.648 [DEBUG] [Thread-13221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:19:54.662 [INFO] [Thread-13221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:19:54.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:19:54.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:19:55.549 [DEBUG] [Thread-13221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:19:55.550 [DEBUG] [Thread-13221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:19:55.598 [DEBUG] [Thread-13221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:19:55.598 [DEBUG] [Thread-13221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:19:55.606 [DEBUG] [Thread-13221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:19:55.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:19:55.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-11-12T09:19:55.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:19:55.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:19:55.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:19:55.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:19:55.637 [DEBUG] [Thread-13221] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:20:03.089 [DEBUG] [Thread-13223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:20:18.144 [DEBUG] [Thread-13224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:20:24.993 [DEBUG] [Thread-13225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:20:25.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:20:25.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:20:25.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-11-12T09:20:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 19, 56), 25.83, 17.6, 0.0, 18.6, 22.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:20:26.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:19:56
2025-11-12T09:20:26.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:20:26.572 [DEBUG] [Thread-13226] [transport.py] [_log()] starting thread (client mode): 0x173ea320
2025-11-12T09:20:26.572 [DEBUG] [Thread-13226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:20:26.591 [DEBUG] [Thread-13226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:20:26.591 [INFO] [Thread-13226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] client lang: <none>
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] server lang: <none>
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] kex follows: False
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:20:26.594 [DEBUG] [Thread-13226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:20:26.595 [DEBUG] [Thread-13226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:20:26.595 [DEBUG] [Thread-13226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:20:26.595 [DEBUG] [Thread-13226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:20:26.595 [DEBUG] [Thread-13226] [transport.py] [_log()] Compression: none
2025-11-12T09:20:26.595 [DEBUG] [Thread-13226] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:20:26.613 [DEBUG] [Thread-13226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:20:26.613 [DEBUG] [Thread-13226] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:20:26.614 [DEBUG] [Thread-13226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:20:26.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:20:26.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:20:26.616 [DEBUG] [Thread-13226] [transport.py] [_log()] userauth is OK
2025-11-12T09:20:26.616 [DEBUG] [Thread-13226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:20:26.616 [DEBUG] [Thread-13226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:20:26.616 [DEBUG] [Thread-13226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:20:26.616 [DEBUG] [Thread-13226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:20:26.635 [INFO] [Thread-13226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:20:26.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:20:27.267 [DEBUG] [Thread-13226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:20:27.267 [DEBUG] [Thread-13226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:20:27.268 [DEBUG] [Thread-13226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:20:27.308 [DEBUG] [Thread-13226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:20:27.308 [DEBUG] [Thread-13226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:20:27.311 [DEBUG] [Thread-13226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:20:27.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:20:27.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:20:27.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:20:27.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:20:27.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:20:27.334 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:20:27.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:20:27.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:20:27.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:20:27.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.305645 -999.00  +22.80  18.72     23   +0.70 1 1 1 1 1   888    0 28.61 304.24 ----- 16.4 18.7 270.2 26.4 28.8 -26.9 28.0 -25.3 26.3 -27.2 26.9 -25.2
2025-11-12T09:20:27.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:20:27.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:20:27.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.305645
2025-11-12T09:20:27.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:20:27.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:20:27.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:20:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:20:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:20:27.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:19:56', tmtdew=25.83, humidity=17.6, cloud=0.0, wind=18.6, temperature=22.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:20:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:20:27.337 [DEBUG] [Thread-13226] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:20:27.420 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:20:27.433 [DEBUG] [Thread-13229] [transport.py] [_log()] starting thread (client mode): 0x149a66e0
2025-11-12T09:20:27.433 [DEBUG] [Thread-13229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:20:27.450 [DEBUG] [Thread-13229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:20:27.451 [INFO] [Thread-13229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] client lang: <none>
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] server lang: <none>
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] kex follows: False
2025-11-12T09:20:27.461 [DEBUG] [Thread-13229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:20:27.462 [DEBUG] [Thread-13229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:20:27.462 [DEBUG] [Thread-13229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:20:27.462 [DEBUG] [Thread-13229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:20:27.462 [DEBUG] [Thread-13229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:20:27.462 [DEBUG] [Thread-13229] [transport.py] [_log()] Compression: none
2025-11-12T09:20:27.462 [DEBUG] [Thread-13229] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:20:27.520 [DEBUG] [Thread-13229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:20:27.521 [DEBUG] [Thread-13229] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:20:27.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:20:27.522 [DEBUG] [Thread-13229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:20:27.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:20:27.576 [DEBUG] [Thread-13229] [transport.py] [_log()] userauth is OK
2025-11-12T09:20:27.577 [DEBUG] [Thread-13229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:20:27.577 [DEBUG] [Thread-13229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:20:27.577 [DEBUG] [Thread-13229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:20:27.577 [DEBUG] [Thread-13229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:20:27.596 [INFO] [Thread-13229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:20:27.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:20:27.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:20:28.462 [DEBUG] [Thread-13229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:20:28.463 [DEBUG] [Thread-13229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:20:28.514 [DEBUG] [Thread-13229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:20:28.514 [DEBUG] [Thread-13229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:20:28.523 [DEBUG] [Thread-13229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:20:28.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:20:28.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-11-12T09:20:28.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:20:28.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:20:28.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:20:28.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:20:28.558 [DEBUG] [Thread-13229] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:20:33.179 [DEBUG] [Thread-13231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:20:43.948 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:20:43.949 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:20:48.220 [DEBUG] [Thread-13232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:20:58.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:20:58.581 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:20:58.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-11-12T09:20:59.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 20, 28), 26.14, 17.23, 0.0, 17.38, 23.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:20:59.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:20:28
2025-11-12T09:20:59.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:20:59.492 [DEBUG] [Thread-13233] [transport.py] [_log()] starting thread (client mode): 0x19ddb7c0
2025-11-12T09:20:59.492 [DEBUG] [Thread-13233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:20:59.512 [DEBUG] [Thread-13233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:20:59.512 [INFO] [Thread-13233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:20:59.515 [DEBUG] [Thread-13233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:20:59.515 [DEBUG] [Thread-13233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:20:59.515 [DEBUG] [Thread-13233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] client lang: <none>
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] server lang: <none>
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] kex follows: False
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:20:59.516 [DEBUG] [Thread-13233] [transport.py] [_log()] Compression: none
2025-11-12T09:20:59.517 [DEBUG] [Thread-13233] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:20:59.535 [DEBUG] [Thread-13233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:20:59.536 [DEBUG] [Thread-13233] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:20:59.537 [DEBUG] [Thread-13233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:20:59.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:20:59.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:20:59.540 [DEBUG] [Thread-13233] [transport.py] [_log()] userauth is OK
2025-11-12T09:20:59.540 [DEBUG] [Thread-13233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:20:59.540 [DEBUG] [Thread-13233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:20:59.540 [DEBUG] [Thread-13233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:20:59.540 [DEBUG] [Thread-13233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:20:59.557 [INFO] [Thread-13233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:20:59.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:21:00.185 [DEBUG] [Thread-13233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:21:00.186 [DEBUG] [Thread-13233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:21:00.186 [DEBUG] [Thread-13233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:21:00.227 [DEBUG] [Thread-13233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:21:00.227 [DEBUG] [Thread-13233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:21:00.230 [DEBUG] [Thread-13233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:21:00.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:21:00.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:21:00.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:21:00.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:21:00.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:21:00.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:21:00.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:21:00.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:21:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:21:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.305993 -999.00  +22.70  20.63     24   +1.10 1 1 1 1 1   888    0 28.23 284.95 ----- 16.8 20.6 297.4 23.1 28.9 -25.7 28.1 -24.6 26.4 -25.2 27.1 -25.0
2025-11-12T09:21:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:21:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:21:00.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.305993
2025-11-12T09:21:00.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:21:00.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:21:00.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:21:00.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:21:00.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:21:00.257 [DEBUG] [Thread-13233] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:21:00.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:20:28', tmtdew=26.14, humidity=17.23, cloud=0.0, wind=17.38, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:20:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:21:00.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:21:00.352 [DEBUG] [Thread-13236] [transport.py] [_log()] starting thread (client mode): 0x1739bca0
2025-11-12T09:21:00.352 [DEBUG] [Thread-13236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:21:00.367 [DEBUG] [Thread-13236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:21:00.367 [INFO] [Thread-13236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] client lang: <none>
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] server lang: <none>
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] kex follows: False
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:21:00.375 [DEBUG] [Thread-13236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:21:00.376 [DEBUG] [Thread-13236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:21:00.376 [DEBUG] [Thread-13236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:21:00.376 [DEBUG] [Thread-13236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:21:00.376 [DEBUG] [Thread-13236] [transport.py] [_log()] Compression: none
2025-11-12T09:21:00.376 [DEBUG] [Thread-13236] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:21:00.433 [DEBUG] [Thread-13236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:21:00.433 [DEBUG] [Thread-13236] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:21:00.434 [DEBUG] [Thread-13236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:21:00.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:21:00.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:21:00.488 [DEBUG] [Thread-13236] [transport.py] [_log()] userauth is OK
2025-11-12T09:21:00.489 [DEBUG] [Thread-13236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:21:00.489 [DEBUG] [Thread-13236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:21:00.489 [DEBUG] [Thread-13236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:21:00.489 [DEBUG] [Thread-13236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:21:00.508 [INFO] [Thread-13236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:21:00.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:21:00.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:21:01.328 [DEBUG] [Thread-13236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:21:01.329 [DEBUG] [Thread-13236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:21:01.376 [DEBUG] [Thread-13236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:21:01.376 [DEBUG] [Thread-13236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:21:01.384 [DEBUG] [Thread-13236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:21:01.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:21:01.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-11-12T09:21:01.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-11-12T09:21:01.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:21:01.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:21:01.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:21:01.415 [DEBUG] [Thread-13236] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:21:03.259 [DEBUG] [Thread-13238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:21:18.309 [DEBUG] [Thread-13239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:21:25.027 [DEBUG] [Thread-13240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:21:31.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:21:31.438 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:21:31.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-11-12T09:21:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 20, 28), 26.14, 17.23, 0.0, 17.38, 23.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:21:32.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:20:28
2025-11-12T09:21:32.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:21:32.336 [DEBUG] [Thread-13241] [transport.py] [_log()] starting thread (client mode): 0x173be200
2025-11-12T09:21:32.337 [DEBUG] [Thread-13241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:21:32.357 [DEBUG] [Thread-13241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:21:32.357 [INFO] [Thread-13241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:21:32.360 [DEBUG] [Thread-13241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:21:32.360 [DEBUG] [Thread-13241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] client lang: <none>
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] server lang: <none>
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] kex follows: False
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:21:32.361 [DEBUG] [Thread-13241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:21:32.362 [DEBUG] [Thread-13241] [transport.py] [_log()] Compression: none
2025-11-12T09:21:32.362 [DEBUG] [Thread-13241] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:21:32.376 [DEBUG] [Thread-13241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:21:32.377 [DEBUG] [Thread-13241] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:21:32.378 [DEBUG] [Thread-13241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:21:32.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:21:32.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:21:32.380 [DEBUG] [Thread-13241] [transport.py] [_log()] userauth is OK
2025-11-12T09:21:32.380 [DEBUG] [Thread-13241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:21:32.380 [DEBUG] [Thread-13241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:21:32.381 [DEBUG] [Thread-13241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:21:32.381 [DEBUG] [Thread-13241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:21:32.395 [INFO] [Thread-13241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:21:32.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:21:33.054 [DEBUG] [Thread-13241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:21:33.055 [DEBUG] [Thread-13241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:21:33.055 [DEBUG] [Thread-13241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:21:33.095 [DEBUG] [Thread-13241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:21:33.095 [DEBUG] [Thread-13241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:21:33.097 [DEBUG] [Thread-13241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:21:33.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:21:33.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:21:33.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:21:33.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:21:33.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:21:33.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:21:33.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:21:33.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:21:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:21:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.306340 -999.00  +22.70  11.25     24   +1.30 1 1 1 1 1   888    0 29.56 308.60 ----- 12.2 11.2 276.5 18.7 28.9 -28.4 28.1 -25.4 26.2 -25.7 27.1 -25.6
2025-11-12T09:21:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:21:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:21:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.306340
2025-11-12T09:21:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:21:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:21:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:21:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:21:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:21:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:20:28', tmtdew=26.14, humidity=17.23, cloud=0.0, wind=17.38, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:21:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:21:33.116 [DEBUG] [Thread-13241] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:21:33.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:21:33.203 [DEBUG] [Thread-13244] [transport.py] [_log()] starting thread (client mode): 0x14904610
2025-11-12T09:21:33.203 [DEBUG] [Thread-13244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:21:33.219 [DEBUG] [Thread-13244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:21:33.220 [INFO] [Thread-13244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] client lang: <none>
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] server lang: <none>
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] kex follows: False
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] Compression: none
2025-11-12T09:21:33.227 [DEBUG] [Thread-13244] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:21:33.283 [DEBUG] [Thread-13244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:21:33.283 [DEBUG] [Thread-13244] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:21:33.283 [DEBUG] [Thread-13244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:21:33.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:21:33.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:21:33.341 [DEBUG] [Thread-13244] [transport.py] [_log()] userauth is OK
2025-11-12T09:21:33.341 [DEBUG] [Thread-13244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:21:33.341 [DEBUG] [Thread-13244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:21:33.341 [DEBUG] [Thread-13244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:21:33.341 [DEBUG] [Thread-13244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:21:33.344 [DEBUG] [Thread-13246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:21:33.357 [INFO] [Thread-13244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:21:33.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:21:33.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:21:34.177 [DEBUG] [Thread-13244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:21:34.177 [DEBUG] [Thread-13244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:21:34.225 [DEBUG] [Thread-13244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:21:34.225 [DEBUG] [Thread-13244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:21:34.233 [DEBUG] [Thread-13244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:21:34.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:21:34.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-11-12T09:21:34.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:21:34.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:21:34.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:21:34.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:21:34.265 [DEBUG] [Thread-13244] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:21:44.091 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:21:44.092 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:21:48.386 [DEBUG] [Thread-13247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:22:03.419 [DEBUG] [Thread-13248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:22:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:22:04.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:22:04.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-11-12T09:22:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 21, 32), 25.78, 17.46, 0.0, 21.72, 22.85, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:22:04.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:21:32
2025-11-12T09:22:05.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:22:05.254 [DEBUG] [Thread-13249] [transport.py] [_log()] starting thread (client mode): 0x149a7070
2025-11-12T09:22:05.255 [DEBUG] [Thread-13249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:22:05.266 [DEBUG] [Thread-13249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:22:05.266 [INFO] [Thread-13249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] client lang: <none>
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] server lang: <none>
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] kex follows: False
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] Compression: none
2025-11-12T09:22:05.269 [DEBUG] [Thread-13249] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:22:05.277 [DEBUG] [Thread-13249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:22:05.277 [DEBUG] [Thread-13249] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:22:05.277 [DEBUG] [Thread-13249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:22:05.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:22:05.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:22:05.278 [DEBUG] [Thread-13249] [transport.py] [_log()] userauth is OK
2025-11-12T09:22:05.278 [DEBUG] [Thread-13249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:22:05.278 [DEBUG] [Thread-13249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:22:05.278 [DEBUG] [Thread-13249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:22:05.278 [DEBUG] [Thread-13249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:22:05.304 [INFO] [Thread-13249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:22:05.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:22:05.880 [DEBUG] [Thread-13249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:22:05.880 [DEBUG] [Thread-13249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:22:05.880 [DEBUG] [Thread-13249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:22:05.921 [DEBUG] [Thread-13249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:22:05.921 [DEBUG] [Thread-13249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:22:05.923 [DEBUG] [Thread-13249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:22:05.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:22:05.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:22:05.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:22:05.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:22:05.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:22:05.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:22:05.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:22:05.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:22:05.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:22:05.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.306687 -999.00  +22.60  22.80     25   +1.60 1 1 1 1 1   888    0 28.60 306.71 ----- 21.8 22.8 299.0 26.4 28.8 -27.8 28.1 -25.6 26.2 -24.8 27.1 -25.9
2025-11-12T09:22:05.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:22:05.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:22:05.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.306687
2025-11-12T09:22:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:22:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:22:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:22:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:22:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:22:05.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:21:32', tmtdew=25.78, humidity=17.46, cloud=0.0, wind=21.72, temperature=22.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:21:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:22:05.941 [DEBUG] [Thread-13249] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:22:06.015 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:22:06.026 [DEBUG] [Thread-13252] [transport.py] [_log()] starting thread (client mode): 0x173bc220
2025-11-12T09:22:06.026 [DEBUG] [Thread-13252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:22:06.041 [DEBUG] [Thread-13252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:22:06.041 [INFO] [Thread-13252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] client lang: <none>
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] server lang: <none>
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] kex follows: False
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] Compression: none
2025-11-12T09:22:06.049 [DEBUG] [Thread-13252] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:22:06.106 [DEBUG] [Thread-13252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:22:06.106 [DEBUG] [Thread-13252] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:22:06.106 [DEBUG] [Thread-13252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:22:06.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:22:06.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:22:06.164 [DEBUG] [Thread-13252] [transport.py] [_log()] userauth is OK
2025-11-12T09:22:06.164 [DEBUG] [Thread-13252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:22:06.164 [DEBUG] [Thread-13252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:22:06.164 [DEBUG] [Thread-13252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:22:06.164 [DEBUG] [Thread-13252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:22:06.178 [INFO] [Thread-13252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:22:06.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:22:06.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:22:07.013 [DEBUG] [Thread-13252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:22:07.013 [DEBUG] [Thread-13252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:22:07.061 [DEBUG] [Thread-13252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:22:07.062 [DEBUG] [Thread-13252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:22:07.071 [DEBUG] [Thread-13252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:22:07.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:22:07.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-11-12T09:22:07.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-11-12T09:22:07.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:22:07.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:22:07.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:22:07.108 [DEBUG] [Thread-13252] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:22:18.460 [DEBUG] [Thread-13254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:22:25.065 [DEBUG] [Thread-13255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:22:33.507 [DEBUG] [Thread-13256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:22:37.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:22:37.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:22:37.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-11-12T09:22:37.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 22, 4), 25.52, 17.76, 0.0, 20.68, 22.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:22:37.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:22:04
2025-11-12T09:22:37.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:22:38.115 [DEBUG] [Thread-13257] [transport.py] [_log()] starting thread (client mode): 0x173bfd00
2025-11-12T09:22:38.115 [DEBUG] [Thread-13257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:22:38.125 [DEBUG] [Thread-13257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:22:38.125 [INFO] [Thread-13257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] client lang: <none>
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] server lang: <none>
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] kex follows: False
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] Compression: none
2025-11-12T09:22:38.127 [DEBUG] [Thread-13257] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:22:38.135 [DEBUG] [Thread-13257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:22:38.135 [DEBUG] [Thread-13257] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:22:38.135 [DEBUG] [Thread-13257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:22:38.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:22:38.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:22:38.136 [DEBUG] [Thread-13257] [transport.py] [_log()] userauth is OK
2025-11-12T09:22:38.136 [DEBUG] [Thread-13257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:22:38.136 [DEBUG] [Thread-13257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:22:38.136 [DEBUG] [Thread-13257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:22:38.136 [DEBUG] [Thread-13257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:22:38.145 [INFO] [Thread-13257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:22:38.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:22:38.685 [DEBUG] [Thread-13257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:22:38.685 [DEBUG] [Thread-13257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:22:38.685 [DEBUG] [Thread-13257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:22:38.725 [DEBUG] [Thread-13257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:22:38.725 [DEBUG] [Thread-13257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:22:38.727 [DEBUG] [Thread-13257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:22:38.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:22:38.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:22:38.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:22:38.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:22:38.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:22:38.755 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:22:38.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:22:38.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:22:38.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:22:38.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.307035 -999.00  +22.60  22.59     24   +1.50 1 1 1 1 1   888    0 29.50 322.01 ----- 22.3 22.6 292.4 26.8 28.9 -26.9 28.1 -25.6 26.4 -25.3 27.1 -25.1
2025-11-12T09:22:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:22:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:22:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.307035
2025-11-12T09:22:38.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:22:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:22:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:22:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:22:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:22:38.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:22:04', tmtdew=25.52, humidity=17.76, cloud=0.0, wind=20.68, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:22:07.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:22:38.757 [DEBUG] [Thread-13257] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:22:38.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:22:38.855 [DEBUG] [Thread-13260] [transport.py] [_log()] starting thread (client mode): 0x173bf850
2025-11-12T09:22:38.856 [DEBUG] [Thread-13260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:22:38.870 [DEBUG] [Thread-13260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:22:38.871 [INFO] [Thread-13260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:22:38.878 [DEBUG] [Thread-13260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:22:38.878 [DEBUG] [Thread-13260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:22:38.878 [DEBUG] [Thread-13260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:22:38.878 [DEBUG] [Thread-13260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:22:38.878 [DEBUG] [Thread-13260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:22:38.878 [DEBUG] [Thread-13260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] client lang: <none>
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] server lang: <none>
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] kex follows: False
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] Compression: none
2025-11-12T09:22:38.879 [DEBUG] [Thread-13260] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:22:38.936 [DEBUG] [Thread-13260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:22:38.937 [DEBUG] [Thread-13260] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:22:38.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:22:38.938 [DEBUG] [Thread-13260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:22:38.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:22:38.998 [DEBUG] [Thread-13260] [transport.py] [_log()] userauth is OK
2025-11-12T09:22:38.999 [DEBUG] [Thread-13260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:22:38.999 [DEBUG] [Thread-13260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:22:38.999 [DEBUG] [Thread-13260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:22:38.999 [DEBUG] [Thread-13260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:22:39.018 [INFO] [Thread-13260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:22:39.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:22:39.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:22:39.876 [DEBUG] [Thread-13260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:22:39.877 [DEBUG] [Thread-13260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:22:39.925 [DEBUG] [Thread-13260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:22:39.925 [DEBUG] [Thread-13260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:22:39.934 [DEBUG] [Thread-13260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:22:39.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:22:39.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-11-12T09:22:39.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-11-12T09:22:39.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:22:39.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:22:39.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:22:39.972 [DEBUG] [Thread-13260] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:22:44.234 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:22:44.236 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:22:48.541 [DEBUG] [Thread-13262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:23:03.597 [DEBUG] [Thread-13263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:23:09.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:23:09.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:23:09.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-11-12T09:23:10.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 22, 36), 25.38, 18.38, 0.0, 17.72, 23.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:23:10.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:22:36
2025-11-12T09:23:10.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:23:10.971 [DEBUG] [Thread-13264] [transport.py] [_log()] starting thread (client mode): 0x173bccd0
2025-11-12T09:23:10.971 [DEBUG] [Thread-13264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:23:10.992 [DEBUG] [Thread-13264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:23:10.992 [INFO] [Thread-13264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] client lang: <none>
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] server lang: <none>
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] kex follows: False
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] Compression: none
2025-11-12T09:23:10.994 [DEBUG] [Thread-13264] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:23:11.002 [DEBUG] [Thread-13264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:23:11.002 [DEBUG] [Thread-13264] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:23:11.002 [DEBUG] [Thread-13264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:23:11.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:23:11.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:23:11.003 [DEBUG] [Thread-13264] [transport.py] [_log()] userauth is OK
2025-11-12T09:23:11.003 [DEBUG] [Thread-13264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:23:11.003 [DEBUG] [Thread-13264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:23:11.003 [DEBUG] [Thread-13264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:23:11.003 [DEBUG] [Thread-13264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:23:11.016 [INFO] [Thread-13264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:23:11.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:23:11.593 [DEBUG] [Thread-13264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:23:11.593 [DEBUG] [Thread-13264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:23:11.593 [DEBUG] [Thread-13264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:23:11.634 [DEBUG] [Thread-13264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:23:11.634 [DEBUG] [Thread-13264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:23:11.636 [DEBUG] [Thread-13264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:23:11.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:23:11.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:23:11.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:23:11.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:23:11.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:23:11.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:23:11.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:23:11.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:23:11.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:23:11.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.307729 -999.00  +22.40  25.64     26   +2.00 1 1 1 1 1   888    0 29.80 324.74 ----- 26.9 25.6 298.6 29.4 28.7 -27.6 28.1 -25.8 26.3 -25.3 27.0 -26.1
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.307729
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:23:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:22:36', tmtdew=25.38, humidity=18.38, cloud=0.0, wind=17.72, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:23:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:23:11.657 [DEBUG] [Thread-13264] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:23:11.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:23:11.742 [DEBUG] [Thread-13267] [transport.py] [_log()] starting thread (client mode): 0x14905090
2025-11-12T09:23:11.742 [DEBUG] [Thread-13267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:23:11.757 [DEBUG] [Thread-13267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:23:11.757 [INFO] [Thread-13267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:23:11.764 [DEBUG] [Thread-13267] [transport.py] [_log()] client lang: <none>
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] server lang: <none>
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] kex follows: False
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] Compression: none
2025-11-12T09:23:11.765 [DEBUG] [Thread-13267] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:23:11.822 [DEBUG] [Thread-13267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:23:11.823 [DEBUG] [Thread-13267] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:23:11.823 [DEBUG] [Thread-13267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:23:11.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:23:11.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:23:11.880 [DEBUG] [Thread-13267] [transport.py] [_log()] userauth is OK
2025-11-12T09:23:11.880 [DEBUG] [Thread-13267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:23:11.880 [DEBUG] [Thread-13267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:23:11.880 [DEBUG] [Thread-13267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:23:11.880 [DEBUG] [Thread-13267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:23:11.894 [INFO] [Thread-13267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:23:11.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:23:11.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:23:12.728 [DEBUG] [Thread-13267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:23:12.728 [DEBUG] [Thread-13267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:23:12.776 [DEBUG] [Thread-13267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:23:12.776 [DEBUG] [Thread-13267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:23:12.787 [DEBUG] [Thread-13267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:23:12.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:23:12.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:23:12.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-11-12T09:23:12.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:23:12.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:23:12.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:23:12.820 [DEBUG] [Thread-13267] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:23:18.632 [DEBUG] [Thread-13269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:23:25.108 [DEBUG] [Thread-13270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:23:33.683 [DEBUG] [Thread-13271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:23:42.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:23:42.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:23:42.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-11-12T09:23:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 23, 40), 25.08, 18.58, 0.0, 18.35, 23.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:23:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:23:40
2025-11-12T09:23:43.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:23:43.719 [DEBUG] [Thread-13272] [transport.py] [_log()] starting thread (client mode): 0x173bf130
2025-11-12T09:23:43.719 [DEBUG] [Thread-13272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:23:43.740 [DEBUG] [Thread-13272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:23:43.740 [INFO] [Thread-13272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] client lang: <none>
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] server lang: <none>
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] kex follows: False
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] Compression: none
2025-11-12T09:23:43.743 [DEBUG] [Thread-13272] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:23:43.759 [DEBUG] [Thread-13272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:23:43.759 [DEBUG] [Thread-13272] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:23:43.759 [DEBUG] [Thread-13272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:23:43.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:23:43.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:23:43.760 [DEBUG] [Thread-13272] [transport.py] [_log()] userauth is OK
2025-11-12T09:23:43.760 [DEBUG] [Thread-13272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:23:43.760 [DEBUG] [Thread-13272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:23:43.760 [DEBUG] [Thread-13272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:23:43.760 [DEBUG] [Thread-13272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:23:43.776 [INFO] [Thread-13272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:23:43.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:23:44.370 [DEBUG] [Thread-13272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:23:44.370 [DEBUG] [Thread-13272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:23:44.370 [DEBUG] [Thread-13272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:23:44.379 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:23:44.381 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:23:44.411 [DEBUG] [Thread-13272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:23:44.411 [DEBUG] [Thread-13272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:23:44.415 [DEBUG] [Thread-13272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:23:44.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:23:44.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:23:44.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:23:44.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:23:44.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:23:44.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:23:44.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:23:44.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:23:44.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:23:44.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.307729 -999.00  +22.40  25.64     26   +2.00 1 1 1 1 1   888    0 29.80 324.74 ----- 26.9 25.6 298.6 29.4 28.7 -27.6 28.1 -25.8 26.3 -25.3 27.0 -26.1
2025-11-12T09:23:44.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:23:44.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:23:44.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.307729
2025-11-12T09:23:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:23:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:23:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:23:44.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:23:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:23:44.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:23:40', tmtdew=25.08, humidity=18.58, cloud=0.0, wind=18.35, temperature=23.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:23:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:23:44.442 [DEBUG] [Thread-13272] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:23:44.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:23:44.541 [DEBUG] [Thread-13275] [transport.py] [_log()] starting thread (client mode): 0x173bde10
2025-11-12T09:23:44.542 [DEBUG] [Thread-13275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:23:44.556 [DEBUG] [Thread-13275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:23:44.557 [INFO] [Thread-13275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:23:44.564 [DEBUG] [Thread-13275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:23:44.564 [DEBUG] [Thread-13275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:23:44.564 [DEBUG] [Thread-13275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:23:44.564 [DEBUG] [Thread-13275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:23:44.564 [DEBUG] [Thread-13275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] client lang: <none>
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] server lang: <none>
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] kex follows: False
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] Compression: none
2025-11-12T09:23:44.565 [DEBUG] [Thread-13275] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:23:44.624 [DEBUG] [Thread-13275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:23:44.625 [DEBUG] [Thread-13275] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:23:44.626 [DEBUG] [Thread-13275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:23:44.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:23:44.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:23:44.681 [DEBUG] [Thread-13275] [transport.py] [_log()] userauth is OK
2025-11-12T09:23:44.681 [DEBUG] [Thread-13275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:23:44.681 [DEBUG] [Thread-13275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:23:44.681 [DEBUG] [Thread-13275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:23:44.681 [DEBUG] [Thread-13275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:23:44.700 [INFO] [Thread-13275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:23:44.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:23:44.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:23:45.534 [DEBUG] [Thread-13275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:23:45.534 [DEBUG] [Thread-13275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:23:45.582 [DEBUG] [Thread-13275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:23:45.583 [DEBUG] [Thread-13275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:23:45.592 [DEBUG] [Thread-13275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:23:45.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:23:45.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:23:45.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:23:45.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:23:45.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:23:45.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:23:45.628 [DEBUG] [Thread-13275] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:23:48.717 [DEBUG] [Thread-13277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:24:03.765 [DEBUG] [Thread-13278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:24:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:24:15.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:24:15.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-11-12T09:24:16.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 24, 12), 25.09, 18.58, 0.0, 16.5, 23.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:24:16.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:24:12
2025-11-12T09:24:16.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:24:16.547 [DEBUG] [Thread-13279] [transport.py] [_log()] starting thread (client mode): 0x17398c10
2025-11-12T09:24:16.547 [DEBUG] [Thread-13279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:24:16.568 [DEBUG] [Thread-13279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:24:16.568 [INFO] [Thread-13279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:24:16.571 [DEBUG] [Thread-13279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:24:16.571 [DEBUG] [Thread-13279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:24:16.571 [DEBUG] [Thread-13279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] client lang: <none>
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] server lang: <none>
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] kex follows: False
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:24:16.572 [DEBUG] [Thread-13279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:24:16.573 [DEBUG] [Thread-13279] [transport.py] [_log()] Compression: none
2025-11-12T09:24:16.573 [DEBUG] [Thread-13279] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:24:16.591 [DEBUG] [Thread-13279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:24:16.591 [DEBUG] [Thread-13279] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:24:16.592 [DEBUG] [Thread-13279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:24:16.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:24:16.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:24:16.595 [DEBUG] [Thread-13279] [transport.py] [_log()] userauth is OK
2025-11-12T09:24:16.595 [DEBUG] [Thread-13279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:24:16.595 [DEBUG] [Thread-13279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:24:16.595 [DEBUG] [Thread-13279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:24:16.595 [DEBUG] [Thread-13279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:24:16.611 [INFO] [Thread-13279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:24:16.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:24:17.259 [DEBUG] [Thread-13279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:24:17.259 [DEBUG] [Thread-13279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:24:17.259 [DEBUG] [Thread-13279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:24:17.300 [DEBUG] [Thread-13279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:24:17.300 [DEBUG] [Thread-13279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:24:17.304 [DEBUG] [Thread-13279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:24:17.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:24:17.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:24:17.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:24:17.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:24:17.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:24:17.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:24:17.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:24:17.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:24:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:24:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.308076 -999.00  +22.20  23.80     26   +2.20 1 1 1 1 1   888    0 28.79 288.85 ----- 26.0 23.8 297.4 31.0 28.7 -26.9 28.0 -25.2 26.2 -24.5 27.0 -25.1
2025-11-12T09:24:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:24:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:24:17.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.308076
2025-11-12T09:24:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:24:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:24:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:24:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:24:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:24:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:24:12', tmtdew=25.09, humidity=18.58, cloud=0.0, wind=16.5, temperature=23.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:23:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:24:17.329 [DEBUG] [Thread-13279] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:24:17.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:24:17.424 [DEBUG] [Thread-13282] [transport.py] [_log()] starting thread (client mode): 0x173e9060
2025-11-12T09:24:17.424 [DEBUG] [Thread-13282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:24:17.439 [DEBUG] [Thread-13282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:24:17.440 [INFO] [Thread-13282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:24:17.447 [DEBUG] [Thread-13282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:24:17.447 [DEBUG] [Thread-13282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:24:17.447 [DEBUG] [Thread-13282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:24:17.447 [DEBUG] [Thread-13282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:24:17.447 [DEBUG] [Thread-13282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:24:17.447 [DEBUG] [Thread-13282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:24:17.447 [DEBUG] [Thread-13282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:24:17.447 [DEBUG] [Thread-13282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] client lang: <none>
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] server lang: <none>
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] kex follows: False
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] Compression: none
2025-11-12T09:24:17.448 [DEBUG] [Thread-13282] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:24:17.505 [DEBUG] [Thread-13282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:24:17.506 [DEBUG] [Thread-13282] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:24:17.506 [DEBUG] [Thread-13282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:24:17.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:24:17.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:24:17.561 [DEBUG] [Thread-13282] [transport.py] [_log()] userauth is OK
2025-11-12T09:24:17.561 [DEBUG] [Thread-13282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:24:17.561 [DEBUG] [Thread-13282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:24:17.561 [DEBUG] [Thread-13282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:24:17.561 [DEBUG] [Thread-13282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:24:17.580 [INFO] [Thread-13282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:24:17.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:24:17.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:24:18.449 [DEBUG] [Thread-13282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:24:18.450 [DEBUG] [Thread-13282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:24:18.498 [DEBUG] [Thread-13282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:24:18.498 [DEBUG] [Thread-13282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:24:18.507 [DEBUG] [Thread-13282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:24:18.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:24:18.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:24:18.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:24:18.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:24:18.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:24:18.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:24:18.544 [DEBUG] [Thread-13282] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:24:18.802 [DEBUG] [Thread-13284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:24:25.136 [DEBUG] [Thread-13285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:24:33.859 [DEBUG] [Thread-13286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:24:44.521 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:24:44.522 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:24:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:24:48.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:24:48.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-11-12T09:24:48.892 [DEBUG] [Thread-13287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:24:49.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 24, 44), 24.34, 19.57, 0.0, 15.61, 23.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:24:49.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:24:44
2025-11-12T09:24:49.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:24:49.458 [DEBUG] [Thread-13288] [transport.py] [_log()] starting thread (client mode): 0x149059c0
2025-11-12T09:24:49.458 [DEBUG] [Thread-13288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:24:49.478 [DEBUG] [Thread-13288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:24:49.478 [INFO] [Thread-13288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] client lang: <none>
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] server lang: <none>
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] kex follows: False
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:24:49.479 [DEBUG] [Thread-13288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:24:49.480 [DEBUG] [Thread-13288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:24:49.480 [DEBUG] [Thread-13288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:24:49.480 [DEBUG] [Thread-13288] [transport.py] [_log()] Compression: none
2025-11-12T09:24:49.480 [DEBUG] [Thread-13288] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:24:49.487 [DEBUG] [Thread-13288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:24:49.488 [DEBUG] [Thread-13288] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:24:49.488 [DEBUG] [Thread-13288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:24:49.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:24:49.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:24:49.490 [DEBUG] [Thread-13288] [transport.py] [_log()] userauth is OK
2025-11-12T09:24:49.490 [DEBUG] [Thread-13288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:24:49.490 [DEBUG] [Thread-13288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:24:49.490 [DEBUG] [Thread-13288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:24:49.490 [DEBUG] [Thread-13288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:24:49.525 [INFO] [Thread-13288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:24:49.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:24:50.134 [DEBUG] [Thread-13288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:24:50.134 [DEBUG] [Thread-13288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:24:50.135 [DEBUG] [Thread-13288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:24:50.175 [DEBUG] [Thread-13288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:24:50.176 [DEBUG] [Thread-13288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:24:50.179 [DEBUG] [Thread-13288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:24:50.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:24:50.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:24:50.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:24:50.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:24:50.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:24:50.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:24:50.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:24:50.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:24:50.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:24:50.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.308423 -999.00  +22.10  23.93     27   +2.20 1 1 1 1 1   888    0 27.85 269.44 ----- 22.7 23.9 294.8 27.0 28.7 -26.8 28.0 -25.7 26.2 -25.3 26.9 -25.7
2025-11-12T09:24:50.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:24:50.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:24:50.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.308423
2025-11-12T09:24:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:24:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:24:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:24:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:24:50.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:24:50.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:24:44', tmtdew=24.34, humidity=19.57, cloud=0.0, wind=15.61, temperature=23.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:24:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:24:50.205 [DEBUG] [Thread-13288] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:24:50.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:24:50.300 [DEBUG] [Thread-13291] [transport.py] [_log()] starting thread (client mode): 0x173995a0
2025-11-12T09:24:50.300 [DEBUG] [Thread-13291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:24:50.315 [DEBUG] [Thread-13291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:24:50.315 [INFO] [Thread-13291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:24:50.323 [DEBUG] [Thread-13291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:24:50.323 [DEBUG] [Thread-13291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:24:50.323 [DEBUG] [Thread-13291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:24:50.323 [DEBUG] [Thread-13291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:24:50.323 [DEBUG] [Thread-13291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:24:50.323 [DEBUG] [Thread-13291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:24:50.323 [DEBUG] [Thread-13291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:24:50.323 [DEBUG] [Thread-13291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] client lang: <none>
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] server lang: <none>
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] kex follows: False
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] Compression: none
2025-11-12T09:24:50.324 [DEBUG] [Thread-13291] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:24:50.381 [DEBUG] [Thread-13291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:24:50.382 [DEBUG] [Thread-13291] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:24:50.382 [DEBUG] [Thread-13291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:24:50.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:24:50.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:24:50.437 [DEBUG] [Thread-13291] [transport.py] [_log()] userauth is OK
2025-11-12T09:24:50.437 [DEBUG] [Thread-13291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:24:50.437 [DEBUG] [Thread-13291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:24:50.437 [DEBUG] [Thread-13291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:24:50.438 [DEBUG] [Thread-13291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:24:50.456 [INFO] [Thread-13291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:24:50.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:24:50.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:24:51.359 [DEBUG] [Thread-13291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:24:51.359 [DEBUG] [Thread-13291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:24:51.407 [DEBUG] [Thread-13291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:24:51.407 [DEBUG] [Thread-13291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:24:51.416 [DEBUG] [Thread-13291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:24:51.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:24:51.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-11-12T09:24:51.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-11-12T09:24:51.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:24:51.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:24:51.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:24:51.453 [DEBUG] [Thread-13291] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:25:03.923 [DEBUG] [Thread-13293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:25:18.971 [DEBUG] [Thread-13294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:25:21.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:25:21.467 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:25:21.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-11-12T09:25:22.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 25, 16), 24.25, 19.67, 0.0, 14.54, 23.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:25:22.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:25:16
2025-11-12T09:25:22.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:25:22.371 [DEBUG] [Thread-13295] [transport.py] [_log()] starting thread (client mode): 0x1739a8f0
2025-11-12T09:25:22.371 [DEBUG] [Thread-13295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:25:22.390 [DEBUG] [Thread-13295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:25:22.391 [INFO] [Thread-13295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:25:22.394 [DEBUG] [Thread-13295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:25:22.394 [DEBUG] [Thread-13295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:25:22.394 [DEBUG] [Thread-13295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:25:22.394 [DEBUG] [Thread-13295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:25:22.394 [DEBUG] [Thread-13295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:25:22.394 [DEBUG] [Thread-13295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:25:22.394 [DEBUG] [Thread-13295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] client lang: <none>
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] server lang: <none>
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] kex follows: False
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] Compression: none
2025-11-12T09:25:22.395 [DEBUG] [Thread-13295] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:25:22.417 [DEBUG] [Thread-13295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:25:22.418 [DEBUG] [Thread-13295] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:25:22.419 [DEBUG] [Thread-13295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:25:22.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:25:22.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:25:22.460 [DEBUG] [Thread-13295] [transport.py] [_log()] userauth is OK
2025-11-12T09:25:22.461 [DEBUG] [Thread-13295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:25:22.461 [DEBUG] [Thread-13295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:25:22.461 [DEBUG] [Thread-13295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:25:22.461 [DEBUG] [Thread-13295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:25:22.491 [INFO] [Thread-13295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:25:22.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:25:23.124 [DEBUG] [Thread-13295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:25:23.125 [DEBUG] [Thread-13295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:25:23.125 [DEBUG] [Thread-13295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:25:23.166 [DEBUG] [Thread-13295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:25:23.166 [DEBUG] [Thread-13295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:25:23.170 [DEBUG] [Thread-13295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:25:23.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:25:23.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:25:23.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:25:23.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:25:23.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:25:23.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:25:23.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:25:23.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:25:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:25:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.308771 -999.00  +22.20  22.25     27   +2.40 1 1 1 1 1   888    0 27.76 268.36 ----- 20.0 22.2 296.6 30.5 28.6 -28.0 28.0 -25.8 26.2 -25.9 26.9 -25.9
2025-11-12T09:25:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:25:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:25:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.308771
2025-11-12T09:25:23.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:25:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:25:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:25:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:25:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:25:23.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:25:16', tmtdew=24.25, humidity=19.67, cloud=0.0, wind=14.54, temperature=23.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:24:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:25:23.191 [DEBUG] [Thread-13295] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:25:23.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:25:23.281 [DEBUG] [Thread-13298] [transport.py] [_log()] starting thread (client mode): 0x149063b0
2025-11-12T09:25:23.282 [DEBUG] [Thread-13298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:25:23.296 [DEBUG] [Thread-13298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:25:23.296 [INFO] [Thread-13298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] client lang: <none>
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] server lang: <none>
2025-11-12T09:25:23.304 [DEBUG] [Thread-13298] [transport.py] [_log()] kex follows: False
2025-11-12T09:25:23.305 [DEBUG] [Thread-13298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:25:23.305 [DEBUG] [Thread-13298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:25:23.305 [DEBUG] [Thread-13298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:25:23.305 [DEBUG] [Thread-13298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:25:23.305 [DEBUG] [Thread-13298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:25:23.305 [DEBUG] [Thread-13298] [transport.py] [_log()] Compression: none
2025-11-12T09:25:23.305 [DEBUG] [Thread-13298] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:25:23.363 [DEBUG] [Thread-13298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:25:23.364 [DEBUG] [Thread-13298] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:25:23.364 [DEBUG] [Thread-13298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:25:23.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:25:23.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:25:23.421 [DEBUG] [Thread-13298] [transport.py] [_log()] userauth is OK
2025-11-12T09:25:23.422 [DEBUG] [Thread-13298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:25:23.422 [DEBUG] [Thread-13298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:25:23.422 [DEBUG] [Thread-13298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:25:23.422 [DEBUG] [Thread-13298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:25:23.446 [INFO] [Thread-13298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:25:23.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:25:23.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:25:24.322 [DEBUG] [Thread-13298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:25:24.323 [DEBUG] [Thread-13298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:25:24.371 [DEBUG] [Thread-13298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:25:24.371 [DEBUG] [Thread-13298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:25:24.380 [DEBUG] [Thread-13298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:25:24.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:25:24.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-11-12T09:25:24.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-11-12T09:25:24.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:25:24.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:25:24.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:25:24.417 [DEBUG] [Thread-13298] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:25:25.168 [DEBUG] [Thread-13300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:25:34.007 [DEBUG] [Thread-13301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:25:44.662 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:25:44.663 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:25:49.059 [DEBUG] [Thread-13302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:25:54.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:25:54.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:25:54.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:25:55.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 25, 48), 23.98, 19.9, 0.0, 17.29, 22.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:25:55.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:25:48
2025-11-12T09:25:55.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:25:55.348 [DEBUG] [Thread-13303] [transport.py] [_log()] starting thread (client mode): 0x1739a590
2025-11-12T09:25:55.348 [DEBUG] [Thread-13303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:25:55.369 [DEBUG] [Thread-13303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:25:55.369 [INFO] [Thread-13303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] client lang: <none>
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] server lang: <none>
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] kex follows: False
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] Compression: none
2025-11-12T09:25:55.372 [DEBUG] [Thread-13303] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:25:55.388 [DEBUG] [Thread-13303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:25:55.388 [DEBUG] [Thread-13303] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:25:55.388 [DEBUG] [Thread-13303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:25:55.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:25:55.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:25:55.388 [DEBUG] [Thread-13303] [transport.py] [_log()] userauth is OK
2025-11-12T09:25:55.388 [DEBUG] [Thread-13303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:25:55.389 [DEBUG] [Thread-13303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:25:55.389 [DEBUG] [Thread-13303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:25:55.389 [DEBUG] [Thread-13303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:25:55.398 [INFO] [Thread-13303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:25:55.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:25:56.021 [DEBUG] [Thread-13303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:25:56.021 [DEBUG] [Thread-13303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:25:56.021 [DEBUG] [Thread-13303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:25:56.061 [DEBUG] [Thread-13303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:25:56.061 [DEBUG] [Thread-13303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:25:56.064 [DEBUG] [Thread-13303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:25:56.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:25:56.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:25:56.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:25:56.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:25:56.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:25:56.082 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:25:56.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:25:56.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:25:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:25:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.309117 -999.00  +22.20  16.10     27   +2.50 1 1 1 1 1   888    0 27.74 247.04 ----- 16.4 16.1 306.6 25.6 28.6 -26.4 27.8 -26.0 26.2 -25.7 26.9 -25.5
2025-11-12T09:25:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:25:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:25:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.309117
2025-11-12T09:25:56.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:25:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:25:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:25:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:25:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:25:56.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:25:48', tmtdew=23.98, humidity=19.9, cloud=0.0, wind=17.29, temperature=22.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:25:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:25:56.083 [DEBUG] [Thread-13303] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:25:56.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:25:56.195 [DEBUG] [Thread-13306] [transport.py] [_log()] starting thread (client mode): 0x173995a0
2025-11-12T09:25:56.195 [DEBUG] [Thread-13306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:25:56.209 [DEBUG] [Thread-13306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:25:56.210 [INFO] [Thread-13306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:25:56.217 [DEBUG] [Thread-13306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:25:56.217 [DEBUG] [Thread-13306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:25:56.217 [DEBUG] [Thread-13306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] client lang: <none>
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] server lang: <none>
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] kex follows: False
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] Compression: none
2025-11-12T09:25:56.218 [DEBUG] [Thread-13306] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:25:56.281 [DEBUG] [Thread-13306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:25:56.281 [DEBUG] [Thread-13306] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:25:56.282 [DEBUG] [Thread-13306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:25:56.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:25:56.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:25:56.337 [DEBUG] [Thread-13306] [transport.py] [_log()] userauth is OK
2025-11-12T09:25:56.337 [DEBUG] [Thread-13306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:25:56.337 [DEBUG] [Thread-13306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:25:56.338 [DEBUG] [Thread-13306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:25:56.338 [DEBUG] [Thread-13306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:25:56.357 [INFO] [Thread-13306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:25:56.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:25:56.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:25:57.201 [DEBUG] [Thread-13306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:25:57.202 [DEBUG] [Thread-13306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:25:57.249 [DEBUG] [Thread-13306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:25:57.250 [DEBUG] [Thread-13306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:25:57.259 [DEBUG] [Thread-13306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:25:57.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:25:57.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-11-12T09:25:57.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-11-12T09:25:57.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:25:57.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:25:57.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:25:57.296 [DEBUG] [Thread-13306] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:26:04.094 [DEBUG] [Thread-13308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:26:19.144 [DEBUG] [Thread-13309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:26:25.196 [DEBUG] [Thread-13310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:26:27.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:26:27.318 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:26:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:26:27.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 26, 20), 23.88, 20.05, 0.0, 14.75, 22.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:26:27.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:26:20
2025-11-12T09:26:28.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:26:28.214 [DEBUG] [Thread-13311] [transport.py] [_log()] starting thread (client mode): 0x149213f0
2025-11-12T09:26:28.214 [DEBUG] [Thread-13311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:26:28.235 [DEBUG] [Thread-13311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:26:28.235 [INFO] [Thread-13311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:26:28.238 [DEBUG] [Thread-13311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:26:28.238 [DEBUG] [Thread-13311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] client lang: <none>
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] server lang: <none>
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] kex follows: False
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] Compression: none
2025-11-12T09:26:28.239 [DEBUG] [Thread-13311] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:26:28.256 [DEBUG] [Thread-13311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:26:28.257 [DEBUG] [Thread-13311] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:26:28.257 [DEBUG] [Thread-13311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:26:28.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:26:28.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:26:28.259 [DEBUG] [Thread-13311] [transport.py] [_log()] userauth is OK
2025-11-12T09:26:28.259 [DEBUG] [Thread-13311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:26:28.259 [DEBUG] [Thread-13311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:26:28.259 [DEBUG] [Thread-13311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:26:28.259 [DEBUG] [Thread-13311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:26:28.282 [INFO] [Thread-13311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:26:28.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:26:28.870 [DEBUG] [Thread-13311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:26:28.871 [DEBUG] [Thread-13311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:26:28.871 [DEBUG] [Thread-13311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:26:28.911 [DEBUG] [Thread-13311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:26:28.912 [DEBUG] [Thread-13311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:26:28.915 [DEBUG] [Thread-13311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:26:28.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:26:28.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:26:28.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:26:28.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:26:28.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:26:28.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:26:28.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:26:28.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:26:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:26:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.309465 -999.00  +22.30  19.85     26   +2.00 1 1 1 1 1   888    0 27.41 227.59 ----- 20.0 19.9 296.2 23.3 28.6 -26.4 27.9 -25.1 26.4 -25.1 26.9 -25.4
2025-11-12T09:26:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:26:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:26:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.309465
2025-11-12T09:26:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:26:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:26:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:26:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:26:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:26:28.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:26:20', tmtdew=23.88, humidity=20.05, cloud=0.0, wind=14.75, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:25:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:26:28.938 [DEBUG] [Thread-13311] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:26:29.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:26:29.024 [DEBUG] [Thread-13314] [transport.py] [_log()] starting thread (client mode): 0x173e87f0
2025-11-12T09:26:29.024 [DEBUG] [Thread-13314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:26:29.038 [DEBUG] [Thread-13314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:26:29.038 [INFO] [Thread-13314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:26:29.046 [DEBUG] [Thread-13314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] client lang: <none>
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] server lang: <none>
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] kex follows: False
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] Compression: none
2025-11-12T09:26:29.047 [DEBUG] [Thread-13314] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:26:29.104 [DEBUG] [Thread-13314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:26:29.105 [DEBUG] [Thread-13314] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:26:29.105 [DEBUG] [Thread-13314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:26:29.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:26:29.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:26:29.160 [DEBUG] [Thread-13314] [transport.py] [_log()] userauth is OK
2025-11-12T09:26:29.161 [DEBUG] [Thread-13314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:26:29.161 [DEBUG] [Thread-13314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:26:29.161 [DEBUG] [Thread-13314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:26:29.161 [DEBUG] [Thread-13314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:26:29.180 [INFO] [Thread-13314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:26:29.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:26:29.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:26:30.071 [DEBUG] [Thread-13314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:26:30.072 [DEBUG] [Thread-13314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:26:30.121 [DEBUG] [Thread-13314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:26:30.121 [DEBUG] [Thread-13314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:26:30.135 [DEBUG] [Thread-13314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:26:30.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:26:30.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-11-12T09:26:30.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:26:30.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:26:30.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:26:30.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:26:30.180 [DEBUG] [Thread-13314] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:26:34.177 [DEBUG] [Thread-13316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:26:44.805 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:26:44.806 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:26:49.232 [DEBUG] [Thread-13317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:27:00.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:27:00.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:27:00.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-11-12T09:27:00.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 26, 52), 23.87, 20.32, 0.0, 15.26, 22.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:27:00.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:26:52
2025-11-12T09:27:01.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:27:01.152 [DEBUG] [Thread-13318] [transport.py] [_log()] starting thread (client mode): 0x14917b80
2025-11-12T09:27:01.152 [DEBUG] [Thread-13318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:27:01.169 [DEBUG] [Thread-13318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:27:01.169 [INFO] [Thread-13318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:27:01.170 [DEBUG] [Thread-13318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:27:01.170 [DEBUG] [Thread-13318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:27:01.170 [DEBUG] [Thread-13318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:27:01.170 [DEBUG] [Thread-13318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:27:01.170 [DEBUG] [Thread-13318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:27:01.170 [DEBUG] [Thread-13318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:27:01.170 [DEBUG] [Thread-13318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:27:01.170 [DEBUG] [Thread-13318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] client lang: <none>
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] server lang: <none>
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] kex follows: False
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] Compression: none
2025-11-12T09:27:01.171 [DEBUG] [Thread-13318] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:27:01.178 [DEBUG] [Thread-13318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:27:01.178 [DEBUG] [Thread-13318] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:27:01.179 [DEBUG] [Thread-13318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:27:01.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:27:01.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:27:01.180 [DEBUG] [Thread-13318] [transport.py] [_log()] userauth is OK
2025-11-12T09:27:01.180 [DEBUG] [Thread-13318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:27:01.180 [DEBUG] [Thread-13318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:27:01.180 [DEBUG] [Thread-13318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:27:01.180 [DEBUG] [Thread-13318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:27:01.192 [INFO] [Thread-13318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:27:01.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:27:01.800 [DEBUG] [Thread-13318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:27:01.800 [DEBUG] [Thread-13318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:27:01.800 [DEBUG] [Thread-13318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:27:01.841 [DEBUG] [Thread-13318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:27:01.841 [DEBUG] [Thread-13318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:27:01.843 [DEBUG] [Thread-13318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:27:01.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:27:01.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:27:01.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:27:01.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:27:01.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:27:01.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:27:01.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.309812 -999.00  +22.10  13.22     26   +1.90 1 1 1 1 1   888    0 25.85 203.98 ----- 15.0 13.2 322.0 22.1 28.8 -25.5 28.0 -24.9 26.4 -23.9 27.0 -24.3
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.309812
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:27:01.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:26:52', tmtdew=23.87, humidity=20.32, cloud=0.0, wind=15.26, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:26:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:27:01.865 [DEBUG] [Thread-13318] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:27:01.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:27:01.953 [DEBUG] [Thread-13321] [transport.py] [_log()] starting thread (client mode): 0x14917130
2025-11-12T09:27:01.953 [DEBUG] [Thread-13321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:27:01.968 [DEBUG] [Thread-13321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:27:01.968 [INFO] [Thread-13321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] client lang: <none>
2025-11-12T09:27:01.975 [DEBUG] [Thread-13321] [transport.py] [_log()] server lang: <none>
2025-11-12T09:27:01.976 [DEBUG] [Thread-13321] [transport.py] [_log()] kex follows: False
2025-11-12T09:27:01.976 [DEBUG] [Thread-13321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:27:01.976 [DEBUG] [Thread-13321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:27:01.976 [DEBUG] [Thread-13321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:27:01.976 [DEBUG] [Thread-13321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:27:01.976 [DEBUG] [Thread-13321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:27:01.976 [DEBUG] [Thread-13321] [transport.py] [_log()] Compression: none
2025-11-12T09:27:01.976 [DEBUG] [Thread-13321] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:27:02.031 [DEBUG] [Thread-13321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:27:02.031 [DEBUG] [Thread-13321] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:27:02.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:27:02.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:27:02.032 [DEBUG] [Thread-13321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:27:02.088 [DEBUG] [Thread-13321] [transport.py] [_log()] userauth is OK
2025-11-12T09:27:02.088 [DEBUG] [Thread-13321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:27:02.088 [DEBUG] [Thread-13321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:27:02.089 [DEBUG] [Thread-13321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:27:02.089 [DEBUG] [Thread-13321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:27:02.102 [INFO] [Thread-13321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:27:02.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:27:02.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:27:02.997 [DEBUG] [Thread-13321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:27:02.998 [DEBUG] [Thread-13321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:27:03.045 [DEBUG] [Thread-13321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:27:03.045 [DEBUG] [Thread-13321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:27:03.054 [DEBUG] [Thread-13321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:27:03.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:27:03.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-11-12T09:27:03.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-11-12T09:27:03.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:27:03.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:27:03.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:27:03.091 [DEBUG] [Thread-13321] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:27:04.263 [DEBUG] [Thread-13323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:27:19.305 [DEBUG] [Thread-13324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:27:25.235 [DEBUG] [Thread-13325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:27:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:27:33.113 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:27:33.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-11-12T09:27:33.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 27, 24), 23.95, 20.25, 0.0, 13.66, 23.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:27:33.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:27:24
2025-11-12T09:27:33.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:27:34.031 [DEBUG] [Thread-13326] [transport.py] [_log()] starting thread (client mode): 0x173eab30
2025-11-12T09:27:34.031 [DEBUG] [Thread-13326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:27:34.051 [DEBUG] [Thread-13326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:27:34.051 [INFO] [Thread-13326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:27:34.054 [DEBUG] [Thread-13326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:27:34.054 [DEBUG] [Thread-13326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] client lang: <none>
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] server lang: <none>
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] kex follows: False
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:27:34.055 [DEBUG] [Thread-13326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:27:34.056 [DEBUG] [Thread-13326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:27:34.056 [DEBUG] [Thread-13326] [transport.py] [_log()] Compression: none
2025-11-12T09:27:34.056 [DEBUG] [Thread-13326] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:27:34.075 [DEBUG] [Thread-13326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:27:34.075 [DEBUG] [Thread-13326] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:27:34.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:27:34.077 [DEBUG] [Thread-13326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:27:34.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:27:34.080 [DEBUG] [Thread-13326] [transport.py] [_log()] userauth is OK
2025-11-12T09:27:34.080 [DEBUG] [Thread-13326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:27:34.080 [DEBUG] [Thread-13326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:27:34.080 [DEBUG] [Thread-13326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:27:34.080 [DEBUG] [Thread-13326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:27:34.105 [INFO] [Thread-13326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:27:34.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:27:34.342 [DEBUG] [Thread-13328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:27:34.689 [DEBUG] [Thread-13326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:27:34.689 [DEBUG] [Thread-13326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:27:34.689 [DEBUG] [Thread-13326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:27:34.731 [DEBUG] [Thread-13326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:27:34.731 [DEBUG] [Thread-13326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:27:34.734 [DEBUG] [Thread-13326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:27:34.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:27:34.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:27:34.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:27:34.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:27:34.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:27:34.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:27:34.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:27:34.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:27:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:27:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.310159 -999.00  +22.30  12.55     27   +2.50 1 1 1 1 1   888    0 26.00 201.68 ----- 13.5 12.6 294.4 18.3 29.0 -25.3 28.2 -24.1 26.6 -23.5 27.2 -24.1
2025-11-12T09:27:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:27:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:27:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.310159
2025-11-12T09:27:34.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:27:34.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:27:34.762 [DEBUG] [Thread-13326] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:27:34.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:27:34.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:27:34.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:27:34.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:27:24', tmtdew=23.95, humidity=20.25, cloud=0.0, wind=13.66, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:26:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:27:34.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:27:34.861 [DEBUG] [Thread-13330] [transport.py] [_log()] starting thread (client mode): 0x173be770
2025-11-12T09:27:34.862 [DEBUG] [Thread-13330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:27:34.877 [DEBUG] [Thread-13330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:27:34.877 [INFO] [Thread-13330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:27:34.884 [DEBUG] [Thread-13330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:27:34.885 [DEBUG] [Thread-13330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:27:34.885 [DEBUG] [Thread-13330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:27:34.885 [DEBUG] [Thread-13330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:27:34.885 [DEBUG] [Thread-13330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:27:34.885 [DEBUG] [Thread-13330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:27:34.885 [DEBUG] [Thread-13330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:27:34.885 [DEBUG] [Thread-13330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:27:34.886 [DEBUG] [Thread-13330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:27:34.886 [DEBUG] [Thread-13330] [transport.py] [_log()] client lang: <none>
2025-11-12T09:27:34.886 [DEBUG] [Thread-13330] [transport.py] [_log()] server lang: <none>
2025-11-12T09:27:34.886 [DEBUG] [Thread-13330] [transport.py] [_log()] kex follows: False
2025-11-12T09:27:34.886 [DEBUG] [Thread-13330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:27:34.886 [DEBUG] [Thread-13330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:27:34.886 [DEBUG] [Thread-13330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:27:34.887 [DEBUG] [Thread-13330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:27:34.887 [DEBUG] [Thread-13330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:27:34.887 [DEBUG] [Thread-13330] [transport.py] [_log()] Compression: none
2025-11-12T09:27:34.887 [DEBUG] [Thread-13330] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:27:34.946 [DEBUG] [Thread-13330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:27:34.947 [DEBUG] [Thread-13330] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:27:34.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:27:34.948 [DEBUG] [Thread-13330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:27:34.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:27:35.005 [DEBUG] [Thread-13330] [transport.py] [_log()] userauth is OK
2025-11-12T09:27:35.005 [DEBUG] [Thread-13330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:27:35.005 [DEBUG] [Thread-13330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:27:35.005 [DEBUG] [Thread-13330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:27:35.005 [DEBUG] [Thread-13330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:27:35.020 [INFO] [Thread-13330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:27:35.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:27:35.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:27:35.893 [DEBUG] [Thread-13330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:27:35.893 [DEBUG] [Thread-13330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:27:35.941 [DEBUG] [Thread-13330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:27:35.941 [DEBUG] [Thread-13330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:27:35.950 [DEBUG] [Thread-13330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:27:35.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:27:35.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-11-12T09:27:35.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-11-12T09:27:35.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:27:35.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:27:35.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:27:35.987 [DEBUG] [Thread-13330] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:27:44.954 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:27:44.956 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:27:49.381 [DEBUG] [Thread-13332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:28:04.443 [DEBUG] [Thread-13333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:28:06.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:28:06.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:28:06.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-11-12T09:28:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 27, 56), 24.6, 19.22, 0.0, 17.54, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:28:06.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:27:56
2025-11-12T09:28:06.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:28:06.930 [DEBUG] [Thread-13334] [transport.py] [_log()] starting thread (client mode): 0x173631c0
2025-11-12T09:28:06.930 [DEBUG] [Thread-13334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:28:06.950 [DEBUG] [Thread-13334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:28:06.951 [INFO] [Thread-13334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:28:06.953 [DEBUG] [Thread-13334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] client lang: <none>
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] server lang: <none>
2025-11-12T09:28:06.954 [DEBUG] [Thread-13334] [transport.py] [_log()] kex follows: False
2025-11-12T09:28:06.955 [DEBUG] [Thread-13334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:28:06.955 [DEBUG] [Thread-13334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:28:06.955 [DEBUG] [Thread-13334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:28:06.955 [DEBUG] [Thread-13334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:28:06.955 [DEBUG] [Thread-13334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:28:06.955 [DEBUG] [Thread-13334] [transport.py] [_log()] Compression: none
2025-11-12T09:28:06.955 [DEBUG] [Thread-13334] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:28:06.974 [DEBUG] [Thread-13334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:28:06.975 [DEBUG] [Thread-13334] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:28:06.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:28:06.977 [DEBUG] [Thread-13334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:28:06.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:28:06.979 [DEBUG] [Thread-13334] [transport.py] [_log()] userauth is OK
2025-11-12T09:28:06.979 [DEBUG] [Thread-13334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:28:06.979 [DEBUG] [Thread-13334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:28:06.979 [DEBUG] [Thread-13334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:28:06.979 [DEBUG] [Thread-13334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:28:07.003 [INFO] [Thread-13334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:28:07.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:28:07.639 [DEBUG] [Thread-13334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:28:07.639 [DEBUG] [Thread-13334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:28:07.640 [DEBUG] [Thread-13334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:28:07.680 [DEBUG] [Thread-13334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:28:07.680 [DEBUG] [Thread-13334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:28:07.683 [DEBUG] [Thread-13334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:28:07.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:28:07.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:28:07.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:28:07.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:28:07.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:28:07.707 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:28:07.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:28:07.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:28:07.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:28:07.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.310854 -999.00  +23.00  11.71     26   +2.60 1 1 1 1 1   888    0 25.11 179.23 ----- 11.0 11.7 273.6 15.4 29.2 -25.8 28.5 -24.0 26.8 -24.7 27.4 -24.0
2025-11-12T09:28:07.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:28:07.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:28:07.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.310854
2025-11-12T09:28:07.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:28:07.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:28:07.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:28:07.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:28:07.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:28:07.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:27:56', tmtdew=24.6, humidity=19.22, cloud=0.0, wind=17.54, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:27:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:28:07.710 [DEBUG] [Thread-13334] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:28:07.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:28:07.803 [DEBUG] [Thread-13337] [transport.py] [_log()] starting thread (client mode): 0x173be290
2025-11-12T09:28:07.803 [DEBUG] [Thread-13337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:28:07.818 [DEBUG] [Thread-13337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:28:07.819 [INFO] [Thread-13337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:28:07.826 [DEBUG] [Thread-13337] [transport.py] [_log()] client lang: <none>
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] server lang: <none>
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] kex follows: False
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] Compression: none
2025-11-12T09:28:07.827 [DEBUG] [Thread-13337] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:28:07.886 [DEBUG] [Thread-13337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:28:07.886 [DEBUG] [Thread-13337] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:28:07.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:28:07.887 [DEBUG] [Thread-13337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:28:07.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:28:07.945 [DEBUG] [Thread-13337] [transport.py] [_log()] userauth is OK
2025-11-12T09:28:07.945 [DEBUG] [Thread-13337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:28:07.945 [DEBUG] [Thread-13337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:28:07.945 [DEBUG] [Thread-13337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:28:07.946 [DEBUG] [Thread-13337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:28:07.965 [INFO] [Thread-13337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:28:07.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:28:07.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:28:08.851 [DEBUG] [Thread-13337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:28:08.851 [DEBUG] [Thread-13337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:28:08.899 [DEBUG] [Thread-13337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:28:08.900 [DEBUG] [Thread-13337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:28:08.911 [DEBUG] [Thread-13337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:28:08.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:28: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-11-12T09:28:08.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-11-12T09:28:08.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:28:08.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:28:08.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:28:08.952 [DEBUG] [Thread-13337] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:28:19.477 [DEBUG] [Thread-13339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:28:25.273 [DEBUG] [Thread-13340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:28:34.528 [DEBUG] [Thread-13341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:28:38.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:28:38.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:28:38.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-11-12T09:28:39.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 28, 28), 24.41, 19.44, 0.0, 17.8, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:28:39.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:28:28
2025-11-12T09:28:39.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:28:39.880 [DEBUG] [Thread-13342] [transport.py] [_log()] starting thread (client mode): 0x17360a00
2025-11-12T09:28:39.880 [DEBUG] [Thread-13342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:28:39.901 [DEBUG] [Thread-13342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:28:39.901 [INFO] [Thread-13342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] client lang: <none>
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] server lang: <none>
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] kex follows: False
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:28:39.904 [DEBUG] [Thread-13342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:28:39.905 [DEBUG] [Thread-13342] [transport.py] [_log()] Compression: none
2025-11-12T09:28:39.905 [DEBUG] [Thread-13342] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:28:39.921 [DEBUG] [Thread-13342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:28:39.922 [DEBUG] [Thread-13342] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:28:39.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:28:39.923 [DEBUG] [Thread-13342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:28:39.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:28:39.925 [DEBUG] [Thread-13342] [transport.py] [_log()] userauth is OK
2025-11-12T09:28:39.925 [DEBUG] [Thread-13342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:28:39.925 [DEBUG] [Thread-13342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:28:39.925 [DEBUG] [Thread-13342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:28:39.925 [DEBUG] [Thread-13342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:28:39.949 [INFO] [Thread-13342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:28:39.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:28:40.585 [DEBUG] [Thread-13342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:28:40.585 [DEBUG] [Thread-13342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:28:40.586 [DEBUG] [Thread-13342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:28:40.627 [DEBUG] [Thread-13342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:28:40.627 [DEBUG] [Thread-13342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:28:40.631 [DEBUG] [Thread-13342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:28:40.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:28:40.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:28:40.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:28:40.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:28:40.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:28:40.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:28:40.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:28:40.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:28:40.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:28:40.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.311201 -999.00  +22.90  17.29     25   +2.10 1 1 1 1 1   888    0 24.94 161.49 ----- 22.1 17.3 275.0 27.1 29.4 -26.3 28.6 -24.7 26.6 -29.4 27.6 -25.2
2025-11-12T09:28:40.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:28:40.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:28:40.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.311201
2025-11-12T09:28:40.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:28:40.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:28:40.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:28:40.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:28:40.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:28:40.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:28:28', tmtdew=24.41, humidity=19.44, cloud=0.0, wind=17.8, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:28:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:28:40.666 [DEBUG] [Thread-13342] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:28:40.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:28:40.763 [DEBUG] [Thread-13345] [transport.py] [_log()] starting thread (client mode): 0x17399ae0
2025-11-12T09:28:40.763 [DEBUG] [Thread-13345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:28:40.778 [DEBUG] [Thread-13345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:28:40.778 [INFO] [Thread-13345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] client lang: <none>
2025-11-12T09:28:40.786 [DEBUG] [Thread-13345] [transport.py] [_log()] server lang: <none>
2025-11-12T09:28:40.787 [DEBUG] [Thread-13345] [transport.py] [_log()] kex follows: False
2025-11-12T09:28:40.787 [DEBUG] [Thread-13345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:28:40.787 [DEBUG] [Thread-13345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:28:40.787 [DEBUG] [Thread-13345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:28:40.787 [DEBUG] [Thread-13345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:28:40.787 [DEBUG] [Thread-13345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:28:40.787 [DEBUG] [Thread-13345] [transport.py] [_log()] Compression: none
2025-11-12T09:28:40.787 [DEBUG] [Thread-13345] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:28:40.846 [DEBUG] [Thread-13345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:28:40.847 [DEBUG] [Thread-13345] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:28:40.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:28:40.848 [DEBUG] [Thread-13345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:28:40.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:28:40.905 [DEBUG] [Thread-13345] [transport.py] [_log()] userauth is OK
2025-11-12T09:28:40.905 [DEBUG] [Thread-13345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:28:40.905 [DEBUG] [Thread-13345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:28:40.905 [DEBUG] [Thread-13345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:28:40.906 [DEBUG] [Thread-13345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:28:40.924 [INFO] [Thread-13345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:28:40.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:28:40.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:28:41.754 [DEBUG] [Thread-13345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:28:41.755 [DEBUG] [Thread-13345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:28:41.803 [DEBUG] [Thread-13345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:28:41.803 [DEBUG] [Thread-13345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:28:41.812 [DEBUG] [Thread-13345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:28:41.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:28:41.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-11-12T09:28:41.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-11-12T09:28:41.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:28:41.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:28:41.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:28:41.849 [DEBUG] [Thread-13345] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:28:45.099 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:28:45.100 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:28:49.566 [DEBUG] [Thread-13347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:29:04.614 [DEBUG] [Thread-13348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:29:11.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:29:11.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:29:11.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-11-12T09:29:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 28, 28), 24.41, 19.44, 0.0, 17.8, 23.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:29:12.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:28:28
2025-11-12T09:29:12.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:29:12.772 [DEBUG] [Thread-13349] [transport.py] [_log()] starting thread (client mode): 0x14915990
2025-11-12T09:29:12.772 [DEBUG] [Thread-13349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:29:12.792 [DEBUG] [Thread-13349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:29:12.793 [INFO] [Thread-13349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] client lang: <none>
2025-11-12T09:29:12.796 [DEBUG] [Thread-13349] [transport.py] [_log()] server lang: <none>
2025-11-12T09:29:12.797 [DEBUG] [Thread-13349] [transport.py] [_log()] kex follows: False
2025-11-12T09:29:12.797 [DEBUG] [Thread-13349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:29:12.797 [DEBUG] [Thread-13349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:29:12.797 [DEBUG] [Thread-13349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:29:12.797 [DEBUG] [Thread-13349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:29:12.797 [DEBUG] [Thread-13349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:29:12.797 [DEBUG] [Thread-13349] [transport.py] [_log()] Compression: none
2025-11-12T09:29:12.797 [DEBUG] [Thread-13349] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:29:12.813 [DEBUG] [Thread-13349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:29:12.814 [DEBUG] [Thread-13349] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:29:12.814 [DEBUG] [Thread-13349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:29:12.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:29:12.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:29:12.816 [DEBUG] [Thread-13349] [transport.py] [_log()] userauth is OK
2025-11-12T09:29:12.816 [DEBUG] [Thread-13349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:29:12.816 [DEBUG] [Thread-13349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:29:12.817 [DEBUG] [Thread-13349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:29:12.817 [DEBUG] [Thread-13349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:29:12.839 [INFO] [Thread-13349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:29:12.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:29:13.481 [DEBUG] [Thread-13349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:29:13.481 [DEBUG] [Thread-13349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:29:13.481 [DEBUG] [Thread-13349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:29:13.521 [DEBUG] [Thread-13349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:29:13.522 [DEBUG] [Thread-13349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:29:13.525 [DEBUG] [Thread-13349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:29:13.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:29:13.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:29:13.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:29:13.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:29:13.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:29:13.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:29:13.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:29:13.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:29:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:29:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.311548 -999.00  +22.70  17.22     26   +2.20 1 1 1 1 1   888    0 25.32 158.70 ----- 17.4 17.2 272.6 23.8 29.1 -28.2 28.5 -25.3 26.4 -27.0 27.4 -25.7
2025-11-12T09:29:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:29:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:29:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.311548
2025-11-12T09:29:13.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:29:13.550 [DEBUG] [Thread-13349] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:29:13.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:29:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:29:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:29:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:29:13.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:28:28', tmtdew=24.41, humidity=19.44, cloud=0.0, wind=17.8, temperature=23.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:28:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:29:13.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:29:13.646 [DEBUG] [Thread-13352] [transport.py] [_log()] starting thread (client mode): 0x173eb2e0
2025-11-12T09:29:13.646 [DEBUG] [Thread-13352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:29:13.664 [DEBUG] [Thread-13352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:29:13.665 [INFO] [Thread-13352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:29:13.672 [DEBUG] [Thread-13352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:29:13.672 [DEBUG] [Thread-13352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] client lang: <none>
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] server lang: <none>
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] kex follows: False
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] Compression: none
2025-11-12T09:29:13.673 [DEBUG] [Thread-13352] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:29:13.735 [DEBUG] [Thread-13352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:29:13.735 [DEBUG] [Thread-13352] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:29:13.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:29:13.737 [DEBUG] [Thread-13352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:29:13.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:29:13.799 [DEBUG] [Thread-13352] [transport.py] [_log()] userauth is OK
2025-11-12T09:29:13.799 [DEBUG] [Thread-13352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:29:13.799 [DEBUG] [Thread-13352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:29:13.799 [DEBUG] [Thread-13352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:29:13.800 [DEBUG] [Thread-13352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:29:13.821 [INFO] [Thread-13352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:29:13.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:29:13.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:29:14.716 [DEBUG] [Thread-13352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:29:14.716 [DEBUG] [Thread-13352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:29:14.766 [DEBUG] [Thread-13352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:29:14.767 [DEBUG] [Thread-13352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:29:14.778 [DEBUG] [Thread-13352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:29:14.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:29:14.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-11-12T09:29:14.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-11-12T09:29:14.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:29:14.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:29:14.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:29:14.824 [DEBUG] [Thread-13352] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:29:19.650 [DEBUG] [Thread-13354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:29:25.306 [DEBUG] [Thread-13355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:29:34.707 [DEBUG] [Thread-13356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:29:44.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:29:44.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:29:44.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-11-12T09:29:45.241 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:29:45.242 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:29:45.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 29, 32), 24.2, 20.12, 0.0, 23.31, 23.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:29:45.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:29:32
2025-11-12T09:29:45.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:29:45.728 [DEBUG] [Thread-13357] [transport.py] [_log()] starting thread (client mode): 0x14915000
2025-11-12T09:29:45.728 [DEBUG] [Thread-13357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:29:45.748 [DEBUG] [Thread-13357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:29:45.748 [INFO] [Thread-13357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] client lang: <none>
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] server lang: <none>
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] kex follows: False
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:29:45.751 [DEBUG] [Thread-13357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:29:45.752 [DEBUG] [Thread-13357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:29:45.752 [DEBUG] [Thread-13357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:29:45.752 [DEBUG] [Thread-13357] [transport.py] [_log()] Compression: none
2025-11-12T09:29:45.752 [DEBUG] [Thread-13357] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:29:45.767 [DEBUG] [Thread-13357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:29:45.767 [DEBUG] [Thread-13357] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:29:45.768 [DEBUG] [Thread-13357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:29:45.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:29:45.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:29:45.769 [DEBUG] [Thread-13357] [transport.py] [_log()] userauth is OK
2025-11-12T09:29:45.770 [DEBUG] [Thread-13357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:29:45.770 [DEBUG] [Thread-13357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:29:45.770 [DEBUG] [Thread-13357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:29:45.770 [DEBUG] [Thread-13357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:29:45.793 [INFO] [Thread-13357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:29:45.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:29:46.454 [DEBUG] [Thread-13357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:29:46.455 [DEBUG] [Thread-13357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:29:46.455 [DEBUG] [Thread-13357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:29:46.495 [DEBUG] [Thread-13357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:29:46.495 [DEBUG] [Thread-13357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:29:46.498 [DEBUG] [Thread-13357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:29:46.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:29:46.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:29:46.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:29:46.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:29:46.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:29:46.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:29:46.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:29:46.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:29:46.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:29:46.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.311896 -999.00  +22.90  13.97     26   +2.50 1 1 1 1 1   888    0 24.10 134.06 ----- 13.8 14.0 282.8 22.6 29.2 -27.4 28.5 -25.0 26.6 -24.6 27.4 -24.9
2025-11-12T09:29:46.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:29:46.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:29:46.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.311896
2025-11-12T09:29:46.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:29:46.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:29:46.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:29:46.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:29:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:29:46.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:29:32', tmtdew=24.2, humidity=20.12, cloud=0.0, wind=23.31, temperature=23.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:29:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:29:46.521 [DEBUG] [Thread-13357] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:29:46.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:29:46.615 [DEBUG] [Thread-13360] [transport.py] [_log()] starting thread (client mode): 0x1739a800
2025-11-12T09:29:46.615 [DEBUG] [Thread-13360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:29:46.634 [DEBUG] [Thread-13360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:29:46.635 [INFO] [Thread-13360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:29:46.642 [DEBUG] [Thread-13360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:29:46.642 [DEBUG] [Thread-13360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:29:46.642 [DEBUG] [Thread-13360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] client lang: <none>
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] server lang: <none>
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] kex follows: False
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:29:46.643 [DEBUG] [Thread-13360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:29:46.644 [DEBUG] [Thread-13360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:29:46.644 [DEBUG] [Thread-13360] [transport.py] [_log()] Compression: none
2025-11-12T09:29:46.644 [DEBUG] [Thread-13360] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:29:46.700 [DEBUG] [Thread-13360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:29:46.700 [DEBUG] [Thread-13360] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:29:46.701 [DEBUG] [Thread-13360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:29:46.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:29:46.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:29:46.756 [DEBUG] [Thread-13360] [transport.py] [_log()] userauth is OK
2025-11-12T09:29:46.756 [DEBUG] [Thread-13360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:29:46.757 [DEBUG] [Thread-13360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:29:46.757 [DEBUG] [Thread-13360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:29:46.757 [DEBUG] [Thread-13360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:29:46.776 [INFO] [Thread-13360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:29:46.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:29:46.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:29:47.608 [DEBUG] [Thread-13360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:29:47.609 [DEBUG] [Thread-13360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:29:47.656 [DEBUG] [Thread-13360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:29:47.656 [DEBUG] [Thread-13360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:29:47.665 [DEBUG] [Thread-13360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:29:47.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:29:47.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-11-12T09:29:47.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-11-12T09:29:47.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:29:47.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:29:47.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:29:47.698 [DEBUG] [Thread-13360] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:29:49.738 [DEBUG] [Thread-13362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:30:04.786 [DEBUG] [Thread-13363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:30:17.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:30:17.721 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:30:17.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-11-12T09:30:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 30, 5), 24.47, 19.77, 0.0, 22.53, 23.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:30:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:30:05
2025-11-12T09:30:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:30:18.930 [DEBUG] [Thread-13364] [transport.py] [_log()] starting thread (client mode): 0x173bc700
2025-11-12T09:30:18.930 [DEBUG] [Thread-13364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:30:18.951 [DEBUG] [Thread-13364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:30:18.951 [INFO] [Thread-13364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:30:18.954 [DEBUG] [Thread-13364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:30:18.954 [DEBUG] [Thread-13364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:30:18.954 [DEBUG] [Thread-13364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:30:18.954 [DEBUG] [Thread-13364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:30:18.954 [DEBUG] [Thread-13364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:30:18.954 [DEBUG] [Thread-13364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:30:18.954 [DEBUG] [Thread-13364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:30:18.954 [DEBUG] [Thread-13364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] client lang: <none>
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] server lang: <none>
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] kex follows: False
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] Compression: none
2025-11-12T09:30:18.955 [DEBUG] [Thread-13364] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:30:18.971 [DEBUG] [Thread-13364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:30:18.972 [DEBUG] [Thread-13364] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:30:18.972 [DEBUG] [Thread-13364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:30:18.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:30:18.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:30:18.973 [DEBUG] [Thread-13364] [transport.py] [_log()] userauth is OK
2025-11-12T09:30:18.974 [DEBUG] [Thread-13364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:30:18.974 [DEBUG] [Thread-13364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:30:18.974 [DEBUG] [Thread-13364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:30:18.974 [DEBUG] [Thread-13364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:30:18.997 [INFO] [Thread-13364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:30:18.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:30:19.620 [DEBUG] [Thread-13364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:30:19.620 [DEBUG] [Thread-13364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:30:19.620 [DEBUG] [Thread-13364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:30:19.662 [DEBUG] [Thread-13364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:30:19.662 [DEBUG] [Thread-13364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:30:19.665 [DEBUG] [Thread-13364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:30:19.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:30:19.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:30:19.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:30:19.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:30:19.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:30:19.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:30:19.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:30:19.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:30:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:30:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.312243 -999.00  +23.10  16.55     25   +2.30 1 1 1 1 1   888    0 24.48 122.54 ----- 15.8 16.6 275.6 24.2 29.4 -26.4 28.6 -24.2 26.6 -23.6 27.5 -24.3
2025-11-12T09:30:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:30:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:30:19.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.312243
2025-11-12T09:30:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:30:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:30:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:30:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:30:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:30:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:30:05', tmtdew=24.47, humidity=19.77, cloud=0.0, wind=22.53, temperature=23.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:29:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:30:19.684 [DEBUG] [Thread-13364] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:30:19.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:30:19.772 [DEBUG] [Thread-13367] [transport.py] [_log()] starting thread (client mode): 0x173e9cf0
2025-11-12T09:30:19.772 [DEBUG] [Thread-13367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:30:19.789 [DEBUG] [Thread-13367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:30:19.790 [INFO] [Thread-13367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:30:19.801 [DEBUG] [Thread-13367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:30:19.801 [DEBUG] [Thread-13367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] client lang: <none>
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] server lang: <none>
2025-11-12T09:30:19.802 [DEBUG] [Thread-13367] [transport.py] [_log()] kex follows: False
2025-11-12T09:30:19.803 [DEBUG] [Thread-13367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:30:19.803 [DEBUG] [Thread-13367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:30:19.803 [DEBUG] [Thread-13367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:30:19.803 [DEBUG] [Thread-13367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:30:19.803 [DEBUG] [Thread-13367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:30:19.804 [DEBUG] [Thread-13367] [transport.py] [_log()] Compression: none
2025-11-12T09:30:19.804 [DEBUG] [Thread-13367] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:30:19.812 [DEBUG] [Thread-13369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:30:19.857 [DEBUG] [Thread-13367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:30:19.858 [DEBUG] [Thread-13367] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:30:19.858 [DEBUG] [Thread-13367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:30:19.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:30:19.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:30:19.913 [DEBUG] [Thread-13367] [transport.py] [_log()] userauth is OK
2025-11-12T09:30:19.913 [DEBUG] [Thread-13367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:30:19.913 [DEBUG] [Thread-13367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:30:19.913 [DEBUG] [Thread-13367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:30:19.913 [DEBUG] [Thread-13367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:30:19.932 [INFO] [Thread-13367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:30:19.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:30:19.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:30:20.841 [DEBUG] [Thread-13367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:30:20.841 [DEBUG] [Thread-13367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:30:20.889 [DEBUG] [Thread-13367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:30:20.889 [DEBUG] [Thread-13367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:30:20.897 [DEBUG] [Thread-13367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:30:20.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:30:20.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-11-12T09:30:20.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-11-12T09:30:20.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:30:20.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:30:20.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:30:20.930 [DEBUG] [Thread-13367] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:30:25.340 [DEBUG] [Thread-13370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:30:34.866 [DEBUG] [Thread-13371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:30:45.391 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:30:45.392 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:30:49.902 [DEBUG] [Thread-13372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:30:50.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:30:50.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:30:50.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-11-12T09:30:51.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 30, 38), 24.9, 18.91, 0.0, 21.3, 23.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:30:51.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:30:38
2025-11-12T09:30:51.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:30:51.844 [DEBUG] [Thread-13373] [transport.py] [_log()] starting thread (client mode): 0x173be3b0
2025-11-12T09:30:51.844 [DEBUG] [Thread-13373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:30:51.865 [DEBUG] [Thread-13373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:30:51.865 [INFO] [Thread-13373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:30:51.868 [DEBUG] [Thread-13373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] client lang: <none>
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] server lang: <none>
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] kex follows: False
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] Compression: none
2025-11-12T09:30:51.869 [DEBUG] [Thread-13373] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:30:51.886 [DEBUG] [Thread-13373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:30:51.887 [DEBUG] [Thread-13373] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:30:51.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:30:51.888 [DEBUG] [Thread-13373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:30:51.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:30:51.890 [DEBUG] [Thread-13373] [transport.py] [_log()] userauth is OK
2025-11-12T09:30:51.890 [DEBUG] [Thread-13373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:30:51.890 [DEBUG] [Thread-13373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:30:51.890 [DEBUG] [Thread-13373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:30:51.890 [DEBUG] [Thread-13373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:30:51.911 [INFO] [Thread-13373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:30:51.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:30:52.757 [DEBUG] [Thread-13373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:30:52.757 [DEBUG] [Thread-13373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:30:52.758 [DEBUG] [Thread-13373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:30:52.798 [DEBUG] [Thread-13373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:30:52.798 [DEBUG] [Thread-13373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:30:52.800 [DEBUG] [Thread-13373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:30:52.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:30:52.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:30:52.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:30:52.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:30:52.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:30:52.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:30:52.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.312590 -999.00  +23.10  19.63     25   +2.30 1 1 1 1 1   888    0 23.13 101.52 ----- 17.2 19.6 274.6 26.1 29.4 -27.2 28.7 -24.4 26.7 -25.9 27.6 -25.4
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.312590
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:30:52.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:30:52.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:30:52.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:30:38', tmtdew=24.9, humidity=18.91, cloud=0.0, wind=21.3, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:30:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:30:52.819 [DEBUG] [Thread-13373] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:30:52.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:31:04.935 [DEBUG] [Thread-13376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:31:19.986 [DEBUG] [Thread-13377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:31:25.373 [DEBUG] [Thread-13378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:31:35.017 [DEBUG] [Thread-13379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:31:45.534 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:31:45.535 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:31:50.049 [DEBUG] [Thread-13380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:32:05.084 [DEBUG] [Thread-13381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:32:20.116 [DEBUG] [Thread-13382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:32:25.410 [DEBUG] [Thread-13383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:32:35.153 [DEBUG] [Thread-13384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:32:45.675 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:32:45.675 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:32:50.186 [DEBUG] [Thread-13385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:33:05.219 [DEBUG] [Thread-13386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:33:05.851 [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-11-12T09:33:20.254 [DEBUG] [Thread-13387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:33:25.445 [DEBUG] [Thread-13388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:33:35.288 [DEBUG] [Thread-13389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:33:35.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:33:35.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:33:35.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-11-12T09:33:36.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 33, 18), 24.84, 19.05, 0.0, 16.76, 23.03, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:33:36.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:33:18
2025-11-12T09:33:36.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:33:36.794 [DEBUG] [Thread-13390] [transport.py] [_log()] starting thread (client mode): 0x19dda890
2025-11-12T09:33:36.794 [DEBUG] [Thread-13390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:33:36.814 [DEBUG] [Thread-13390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:33:36.814 [INFO] [Thread-13390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] client lang: <none>
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] server lang: <none>
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] kex follows: False
2025-11-12T09:33:36.818 [DEBUG] [Thread-13390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:33:36.819 [DEBUG] [Thread-13390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:33:36.819 [DEBUG] [Thread-13390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:33:36.819 [DEBUG] [Thread-13390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:33:36.819 [DEBUG] [Thread-13390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:33:36.819 [DEBUG] [Thread-13390] [transport.py] [_log()] Compression: none
2025-11-12T09:33:36.819 [DEBUG] [Thread-13390] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:33:36.837 [DEBUG] [Thread-13390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:33:36.838 [DEBUG] [Thread-13390] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:33:36.838 [DEBUG] [Thread-13390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:33:36.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:33:36.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:33:36.840 [DEBUG] [Thread-13390] [transport.py] [_log()] userauth is OK
2025-11-12T09:33:36.841 [DEBUG] [Thread-13390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:33:36.841 [DEBUG] [Thread-13390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:33:36.841 [DEBUG] [Thread-13390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:33:36.841 [DEBUG] [Thread-13390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:33:36.866 [INFO] [Thread-13390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:33:36.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:33:37.477 [DEBUG] [Thread-13390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:33:37.477 [DEBUG] [Thread-13390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:33:37.478 [DEBUG] [Thread-13390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:33:37.518 [DEBUG] [Thread-13390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:33:37.519 [DEBUG] [Thread-13390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:33:37.522 [DEBUG] [Thread-13390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:33:37.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:33:37.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:33:37.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:33:37.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:33:37.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:33:37.546 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:33:37.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:33:37.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:33:37.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:33:37.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.314673 -999.00  +23.30  19.25     24   +2.10 1 1 1 1 1   888    0 22.35 47.24 ----- 19.9 19.2 272.4 23.6 29.9 -25.6 29.0 -23.9 27.2 -25.1 27.9 -24.4
2025-11-12T09:33:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:33:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:33:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.314673
2025-11-12T09:33:37.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:33:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:33:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:33:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:33:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:33:37.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:33:18', tmtdew=24.84, humidity=19.05, cloud=0.0, wind=16.76, temperature=23.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:33:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:33:37.549 [DEBUG] [Thread-13390] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:33:37.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:33:37.646 [DEBUG] [Thread-13393] [transport.py] [_log()] starting thread (client mode): 0x149164a0
2025-11-12T09:33:37.647 [DEBUG] [Thread-13393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:33:37.662 [DEBUG] [Thread-13393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:33:37.662 [INFO] [Thread-13393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:33:37.670 [DEBUG] [Thread-13393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:33:37.670 [DEBUG] [Thread-13393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:33:37.671 [DEBUG] [Thread-13393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:33:37.671 [DEBUG] [Thread-13393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:33:37.671 [DEBUG] [Thread-13393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:33:37.671 [DEBUG] [Thread-13393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:33:37.671 [DEBUG] [Thread-13393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:33:37.671 [DEBUG] [Thread-13393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:33:37.671 [DEBUG] [Thread-13393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:33:37.671 [DEBUG] [Thread-13393] [transport.py] [_log()] client lang: <none>
2025-11-12T09:33:37.672 [DEBUG] [Thread-13393] [transport.py] [_log()] server lang: <none>
2025-11-12T09:33:37.672 [DEBUG] [Thread-13393] [transport.py] [_log()] kex follows: False
2025-11-12T09:33:37.672 [DEBUG] [Thread-13393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:33:37.672 [DEBUG] [Thread-13393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:33:37.672 [DEBUG] [Thread-13393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:33:37.672 [DEBUG] [Thread-13393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:33:37.672 [DEBUG] [Thread-13393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:33:37.672 [DEBUG] [Thread-13393] [transport.py] [_log()] Compression: none
2025-11-12T09:33:37.673 [DEBUG] [Thread-13393] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:33:37.729 [DEBUG] [Thread-13393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:33:37.730 [DEBUG] [Thread-13393] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:33:37.731 [DEBUG] [Thread-13393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:33:37.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:33:37.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:33:37.785 [DEBUG] [Thread-13393] [transport.py] [_log()] userauth is OK
2025-11-12T09:33:37.785 [DEBUG] [Thread-13393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:33:37.785 [DEBUG] [Thread-13393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:33:37.785 [DEBUG] [Thread-13393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:33:37.785 [DEBUG] [Thread-13393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:33:37.807 [INFO] [Thread-13393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:33:37.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:33:37.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:33:38.628 [DEBUG] [Thread-13393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:33:38.628 [DEBUG] [Thread-13393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:33:38.677 [DEBUG] [Thread-13393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:33:38.677 [DEBUG] [Thread-13393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:33:38.686 [DEBUG] [Thread-13393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:33:38.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:33:38.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-11-12T09:33:38.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-11-12T09:33:38.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:33:38.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:33:38.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:33:38.723 [DEBUG] [Thread-13393] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:33:45.817 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:33:45.818 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:33:50.329 [DEBUG] [Thread-13395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:34:05.376 [DEBUG] [Thread-13396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:34:08.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:34:08.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:34:08.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:34:09.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 33, 50), 24.85, 18.94, 0.0, 25.16, 23.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:34:09.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:33:50
2025-11-12T09:34:09.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:34:09.694 [DEBUG] [Thread-13397] [transport.py] [_log()] starting thread (client mode): 0x173bf3d0
2025-11-12T09:34:09.694 [DEBUG] [Thread-13397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:34:09.714 [DEBUG] [Thread-13397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:34:09.714 [INFO] [Thread-13397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] client lang: <none>
2025-11-12T09:34:09.717 [DEBUG] [Thread-13397] [transport.py] [_log()] server lang: <none>
2025-11-12T09:34:09.718 [DEBUG] [Thread-13397] [transport.py] [_log()] kex follows: False
2025-11-12T09:34:09.718 [DEBUG] [Thread-13397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:34:09.718 [DEBUG] [Thread-13397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:34:09.718 [DEBUG] [Thread-13397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:34:09.718 [DEBUG] [Thread-13397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:34:09.718 [DEBUG] [Thread-13397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:34:09.718 [DEBUG] [Thread-13397] [transport.py] [_log()] Compression: none
2025-11-12T09:34:09.718 [DEBUG] [Thread-13397] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:34:09.734 [DEBUG] [Thread-13397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:34:09.734 [DEBUG] [Thread-13397] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:34:09.734 [DEBUG] [Thread-13397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:34:09.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:34:09.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:34:09.735 [DEBUG] [Thread-13397] [transport.py] [_log()] userauth is OK
2025-11-12T09:34:09.735 [DEBUG] [Thread-13397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:34:09.735 [DEBUG] [Thread-13397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:34:09.735 [DEBUG] [Thread-13397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:34:09.735 [DEBUG] [Thread-13397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:34:09.750 [INFO] [Thread-13397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:34:09.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:34:10.553 [DEBUG] [Thread-13397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:34:10.553 [DEBUG] [Thread-13397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:34:10.553 [DEBUG] [Thread-13397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:34:10.594 [DEBUG] [Thread-13397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:34:10.594 [DEBUG] [Thread-13397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:34:10.596 [DEBUG] [Thread-13397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:34:10.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:34:10.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:34:10.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:34:10.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:34:10.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:34:10.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:34:10.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.315020 -999.00  +23.30  23.30     24   +2.10 1 1 1 1 1   888    0 21.61 39.84 ----- 21.2 23.3 272.0 26.0 29.8 -27.1 29.0 -24.9 27.1 -25.2 28.0 -25.2
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.315020
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:34:10.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:33:50', tmtdew=24.85, humidity=18.94, cloud=0.0, wind=25.16, temperature=23.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:33:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:34:10.616 [DEBUG] [Thread-13397] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:34:10.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:34:10.700 [DEBUG] [Thread-13400] [transport.py] [_log()] starting thread (client mode): 0x173450c0
2025-11-12T09:34:10.700 [DEBUG] [Thread-13400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:34:10.714 [DEBUG] [Thread-13400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:34:10.714 [INFO] [Thread-13400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] client lang: <none>
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] server lang: <none>
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] kex follows: False
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] Compression: none
2025-11-12T09:34:10.722 [DEBUG] [Thread-13400] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:34:10.780 [DEBUG] [Thread-13400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:34:10.780 [DEBUG] [Thread-13400] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:34:10.780 [DEBUG] [Thread-13400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:34:10.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:34:10.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:34:10.837 [DEBUG] [Thread-13400] [transport.py] [_log()] userauth is OK
2025-11-12T09:34:10.837 [DEBUG] [Thread-13400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:34:10.837 [DEBUG] [Thread-13400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:34:10.837 [DEBUG] [Thread-13400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:34:10.837 [DEBUG] [Thread-13400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:34:10.851 [INFO] [Thread-13400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:34:10.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:34:10.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:34:11.664 [DEBUG] [Thread-13400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:34:11.664 [DEBUG] [Thread-13400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:34:11.713 [DEBUG] [Thread-13400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:34:11.713 [DEBUG] [Thread-13400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:34:11.722 [DEBUG] [Thread-13400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:34:11.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:34:11.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-11-12T09:34:11.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:34:11.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:34:11.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:34:11.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:34:11.760 [DEBUG] [Thread-13400] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:34:20.410 [DEBUG] [Thread-13402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:34:25.491 [DEBUG] [Thread-13403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:34:35.459 [DEBUG] [Thread-13404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:34:41.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:34:41.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:34:41.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-11-12T09:34:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 34, 22), 25.19, 18.56, 0.0, 25.99, 23.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:34:42.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:34:22
2025-11-12T09:34:42.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:34:42.694 [DEBUG] [Thread-13405] [transport.py] [_log()] starting thread (client mode): 0x173be020
2025-11-12T09:34:42.695 [DEBUG] [Thread-13405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:34:42.715 [DEBUG] [Thread-13405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:34:42.715 [INFO] [Thread-13405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:34:42.719 [DEBUG] [Thread-13405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:34:42.719 [DEBUG] [Thread-13405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:34:42.719 [DEBUG] [Thread-13405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:34:42.719 [DEBUG] [Thread-13405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:34:42.719 [DEBUG] [Thread-13405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:34:42.719 [DEBUG] [Thread-13405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] client lang: <none>
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] server lang: <none>
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] kex follows: False
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] Compression: none
2025-11-12T09:34:42.720 [DEBUG] [Thread-13405] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:34:42.738 [DEBUG] [Thread-13405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:34:42.738 [DEBUG] [Thread-13405] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:34:42.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:34:42.739 [DEBUG] [Thread-13405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:34:42.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:34:42.741 [DEBUG] [Thread-13405] [transport.py] [_log()] userauth is OK
2025-11-12T09:34:42.741 [DEBUG] [Thread-13405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:34:42.742 [DEBUG] [Thread-13405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:34:42.742 [DEBUG] [Thread-13405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:34:42.742 [DEBUG] [Thread-13405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:34:42.766 [INFO] [Thread-13405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:34:42.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:34:43.394 [DEBUG] [Thread-13405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:34:43.394 [DEBUG] [Thread-13405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:34:43.395 [DEBUG] [Thread-13405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:34:43.436 [DEBUG] [Thread-13405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:34:43.436 [DEBUG] [Thread-13405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:34:43.439 [DEBUG] [Thread-13405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:34:43.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:34:43.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:34:43.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:34:43.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:34:43.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:34:43.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:34:43.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:34:43.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:34:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:34:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.315368 -999.00  +23.00  16.36     25   +2.00 1 1 1 1 1   888    0 21.96 25.71 ----- 21.1 16.4 279.6 29.9 29.6 -27.0 29.0 -26.5 26.9 -24.6 27.9 -25.3
2025-11-12T09:34:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:34:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:34:43.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.315368
2025-11-12T09:34:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:34:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:34:43.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:34:43.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:34:43.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:34:43.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:34:22', tmtdew=25.19, humidity=18.56, cloud=0.0, wind=25.99, temperature=23.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:34:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:34:43.467 [DEBUG] [Thread-13405] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:34:43.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:34:43.573 [DEBUG] [Thread-13408] [transport.py] [_log()] starting thread (client mode): 0x19ddba30
2025-11-12T09:34:43.573 [DEBUG] [Thread-13408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:34:43.588 [DEBUG] [Thread-13408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:34:43.588 [INFO] [Thread-13408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:34:43.597 [DEBUG] [Thread-13408] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:34:43.597 [DEBUG] [Thread-13408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] client lang: <none>
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] server lang: <none>
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] kex follows: False
2025-11-12T09:34:43.598 [DEBUG] [Thread-13408] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:34:43.599 [DEBUG] [Thread-13408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:34:43.599 [DEBUG] [Thread-13408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:34:43.599 [DEBUG] [Thread-13408] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:34:43.599 [DEBUG] [Thread-13408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:34:43.599 [DEBUG] [Thread-13408] [transport.py] [_log()] Compression: none
2025-11-12T09:34:43.599 [DEBUG] [Thread-13408] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:34:43.653 [DEBUG] [Thread-13408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:34:43.654 [DEBUG] [Thread-13408] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:34:43.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:34:43.655 [DEBUG] [Thread-13408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:34:43.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:34:43.714 [DEBUG] [Thread-13408] [transport.py] [_log()] userauth is OK
2025-11-12T09:34:43.714 [DEBUG] [Thread-13408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:34:43.714 [DEBUG] [Thread-13408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:34:43.714 [DEBUG] [Thread-13408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:34:43.715 [DEBUG] [Thread-13408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:34:43.733 [INFO] [Thread-13408] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:34:43.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:34:43.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:34:44.604 [DEBUG] [Thread-13408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:34:44.604 [DEBUG] [Thread-13408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:34:44.652 [DEBUG] [Thread-13408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:34:44.652 [DEBUG] [Thread-13408] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:34:44.659 [DEBUG] [Thread-13408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:34:44.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:34:44.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-11-12T09:34:44.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-11-12T09:34:44.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:34:44.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:34:44.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:34:44.691 [DEBUG] [Thread-13408] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:34:45.958 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:34:45.959 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:34:50.494 [DEBUG] [Thread-13410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:35:05.554 [DEBUG] [Thread-13411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:35:14.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:35:14.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:35:14.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-11-12T09:35:15.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 34, 54), 24.42, 19.59, 0.0, 18.67, 23.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:35:15.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:34:54
2025-11-12T09:35:15.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:35:15.625 [DEBUG] [Thread-13412] [transport.py] [_log()] starting thread (client mode): 0x17360ee0
2025-11-12T09:35:15.626 [DEBUG] [Thread-13412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:35:15.645 [DEBUG] [Thread-13412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:35:15.645 [INFO] [Thread-13412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] client lang: <none>
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] server lang: <none>
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] kex follows: False
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:35:15.648 [DEBUG] [Thread-13412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:35:15.649 [DEBUG] [Thread-13412] [transport.py] [_log()] Compression: none
2025-11-12T09:35:15.649 [DEBUG] [Thread-13412] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:35:15.667 [DEBUG] [Thread-13412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:35:15.668 [DEBUG] [Thread-13412] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:35:15.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:35:15.669 [DEBUG] [Thread-13412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:35:15.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:35:15.671 [DEBUG] [Thread-13412] [transport.py] [_log()] userauth is OK
2025-11-12T09:35:15.671 [DEBUG] [Thread-13412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:35:15.671 [DEBUG] [Thread-13412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:35:15.671 [DEBUG] [Thread-13412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:35:15.671 [DEBUG] [Thread-13412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:35:15.707 [INFO] [Thread-13412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:35:15.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:35:16.984 [DEBUG] [Thread-13412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:35:16.984 [DEBUG] [Thread-13412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:35:16.984 [DEBUG] [Thread-13412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:35:17.025 [DEBUG] [Thread-13412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:35:17.025 [DEBUG] [Thread-13412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:35:17.028 [DEBUG] [Thread-13412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:35:17.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:35:17.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:35:17.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:35:17.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:35:17.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:35:17.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:35:17.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:35:17.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:35:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:35:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.315715 -999.00  +22.90  18.22     25   +2.10 1 1 1 1 1   888    0 21.49 17.71 ----- 16.3 18.2 279.0 23.9 29.7 -26.3 28.9 -25.4 26.8 -28.1 27.9 -25.3
2025-11-12T09:35:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:35:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:35:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.315715
2025-11-12T09:35:17.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:35:17.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:35:17.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:35:17.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:35:17.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:35:17.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:34:54', tmtdew=24.42, humidity=19.59, cloud=0.0, wind=18.67, temperature=23.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:34:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:35:17.058 [DEBUG] [Thread-13412] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:35:17.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:35:17.155 [DEBUG] [Thread-13415] [transport.py] [_log()] starting thread (client mode): 0x149a7ac0
2025-11-12T09:35:17.155 [DEBUG] [Thread-13415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:35:17.171 [DEBUG] [Thread-13415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:35:17.172 [INFO] [Thread-13415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:35:17.179 [DEBUG] [Thread-13415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:35:17.179 [DEBUG] [Thread-13415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:35:17.179 [DEBUG] [Thread-13415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:35:17.179 [DEBUG] [Thread-13415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:35:17.179 [DEBUG] [Thread-13415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] client lang: <none>
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] server lang: <none>
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] kex follows: False
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] Compression: none
2025-11-12T09:35:17.180 [DEBUG] [Thread-13415] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:35:17.237 [DEBUG] [Thread-13415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:35:17.238 [DEBUG] [Thread-13415] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:35:17.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:35:17.239 [DEBUG] [Thread-13415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:35:17.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:35:17.297 [DEBUG] [Thread-13415] [transport.py] [_log()] userauth is OK
2025-11-12T09:35:17.298 [DEBUG] [Thread-13415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:35:17.298 [DEBUG] [Thread-13415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:35:17.298 [DEBUG] [Thread-13415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:35:17.298 [DEBUG] [Thread-13415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:35:17.318 [INFO] [Thread-13415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:35:17.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:35:17.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:35:18.161 [DEBUG] [Thread-13415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:35:18.161 [DEBUG] [Thread-13415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:35:18.209 [DEBUG] [Thread-13415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:35:18.209 [DEBUG] [Thread-13415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:35:18.219 [DEBUG] [Thread-13415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:35:18.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:35:18.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-11-12T09:35:18.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-11-12T09:35:18.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:35:18.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:35:18.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:35:18.259 [DEBUG] [Thread-13415] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:35:20.594 [DEBUG] [Thread-13417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:35:25.520 [DEBUG] [Thread-13418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:35:35.653 [DEBUG] [Thread-13419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:35:46.100 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:35:46.101 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:35:48.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:35:48.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:35:48.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-11-12T09:35:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 35, 26), 24.63, 19.36, 0.0, 20.03, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:35:48.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:35:26
2025-11-12T09:35:49.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:35:49.203 [DEBUG] [Thread-13420] [transport.py] [_log()] starting thread (client mode): 0x19dda9b0
2025-11-12T09:35:49.204 [DEBUG] [Thread-13420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:35:49.225 [DEBUG] [Thread-13420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:35:49.226 [INFO] [Thread-13420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:35:49.229 [DEBUG] [Thread-13420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:35:49.229 [DEBUG] [Thread-13420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:35:49.229 [DEBUG] [Thread-13420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] client lang: <none>
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] server lang: <none>
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] kex follows: False
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] Compression: none
2025-11-12T09:35:49.230 [DEBUG] [Thread-13420] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:35:49.248 [DEBUG] [Thread-13420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:35:49.248 [DEBUG] [Thread-13420] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:35:49.249 [DEBUG] [Thread-13420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:35:49.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:35:49.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:35:49.251 [DEBUG] [Thread-13420] [transport.py] [_log()] userauth is OK
2025-11-12T09:35:49.251 [DEBUG] [Thread-13420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:35:49.251 [DEBUG] [Thread-13420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:35:49.251 [DEBUG] [Thread-13420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:35:49.251 [DEBUG] [Thread-13420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:35:49.277 [INFO] [Thread-13420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:35:49.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:35:49.919 [DEBUG] [Thread-13420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:35:49.919 [DEBUG] [Thread-13420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:35:49.920 [DEBUG] [Thread-13420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:35:49.961 [DEBUG] [Thread-13420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:35:49.961 [DEBUG] [Thread-13420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:35:49.964 [DEBUG] [Thread-13420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:35:49.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:35:49.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:35:49.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:35:49.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:35:49.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:35:49.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:35:49.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:35:49.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:35:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:35:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.316062 -999.00  +22.70  20.61     25   +1.90 1 1 1 1 1   888    0 21.88 14.45 ----- 24.1 20.6 273.6 23.1 29.7 -27.9 29.0 -24.4 26.8 -29.3 27.9 -26.4
2025-11-12T09:35:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:35:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:35:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.316062
2025-11-12T09:35:49.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:35:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:35:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:35:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:35:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:35:49.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:35:26', tmtdew=24.63, humidity=19.36, cloud=0.0, wind=20.03, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:35:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:35:49.993 [DEBUG] [Thread-13420] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:35:50.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:35:50.088 [DEBUG] [Thread-13423] [transport.py] [_log()] starting thread (client mode): 0x19dd8f40
2025-11-12T09:35:50.089 [DEBUG] [Thread-13423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:35:50.103 [DEBUG] [Thread-13423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:35:50.103 [INFO] [Thread-13423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:35:50.111 [DEBUG] [Thread-13423] [transport.py] [_log()] client lang: <none>
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] server lang: <none>
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] kex follows: False
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] Compression: none
2025-11-12T09:35:50.112 [DEBUG] [Thread-13423] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:35:50.172 [DEBUG] [Thread-13423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:35:50.173 [DEBUG] [Thread-13423] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:35:50.173 [DEBUG] [Thread-13423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:35:50.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:35:50.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:35:50.229 [DEBUG] [Thread-13423] [transport.py] [_log()] userauth is OK
2025-11-12T09:35:50.229 [DEBUG] [Thread-13423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:35:50.229 [DEBUG] [Thread-13423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:35:50.229 [DEBUG] [Thread-13423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:35:50.229 [DEBUG] [Thread-13423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:35:50.250 [INFO] [Thread-13423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:35: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-11-12T09:35:50.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:35:50.689 [DEBUG] [Thread-13425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:35:51.092 [DEBUG] [Thread-13423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:35:51.092 [DEBUG] [Thread-13423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:35:51.140 [DEBUG] [Thread-13423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:35:51.140 [DEBUG] [Thread-13423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:35:51.152 [DEBUG] [Thread-13423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:35:51.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:35:51.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-11-12T09:35:51.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-11-12T09:35:51.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:35:51.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:35:51.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:35:51.189 [DEBUG] [Thread-13423] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:36:05.743 [DEBUG] [Thread-13426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:36:20.777 [DEBUG] [Thread-13427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:36:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:36:21.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:36:21.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:36:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 35, 58), 25.42, 18.68, 0.0, 15.72, 23.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:36:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:35:58
2025-11-12T09:36:21.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:36:22.118 [DEBUG] [Thread-13428] [transport.py] [_log()] starting thread (client mode): 0x14916c80
2025-11-12T09:36:22.118 [DEBUG] [Thread-13428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:36:22.138 [DEBUG] [Thread-13428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:36:22.138 [INFO] [Thread-13428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:36:22.141 [DEBUG] [Thread-13428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:36:22.141 [DEBUG] [Thread-13428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] client lang: <none>
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] server lang: <none>
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] kex follows: False
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:36:22.142 [DEBUG] [Thread-13428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:36:22.143 [DEBUG] [Thread-13428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:36:22.143 [DEBUG] [Thread-13428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:36:22.143 [DEBUG] [Thread-13428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:36:22.143 [DEBUG] [Thread-13428] [transport.py] [_log()] Compression: none
2025-11-12T09:36:22.143 [DEBUG] [Thread-13428] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:36:22.161 [DEBUG] [Thread-13428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:36:22.162 [DEBUG] [Thread-13428] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:36:22.163 [DEBUG] [Thread-13428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:36:22.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:36:22.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:36:22.165 [DEBUG] [Thread-13428] [transport.py] [_log()] userauth is OK
2025-11-12T09:36:22.165 [DEBUG] [Thread-13428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:36:22.165 [DEBUG] [Thread-13428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:36:22.166 [DEBUG] [Thread-13428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:36:22.166 [DEBUG] [Thread-13428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:36:22.184 [INFO] [Thread-13428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:36:22.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:36:22.840 [DEBUG] [Thread-13428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:36:22.840 [DEBUG] [Thread-13428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:36:22.841 [DEBUG] [Thread-13428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:36:22.882 [DEBUG] [Thread-13428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:36:22.882 [DEBUG] [Thread-13428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:36:22.885 [DEBUG] [Thread-13428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:36:22.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:36:22.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:36:22.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:36:22.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:36:22.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:36:22.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:36:22.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:36:22.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:36:22.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:36:22.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.316757 -999.00  +22.30  15.66     25   +1.80 1 1 1 1 1   888    0 20.91 9.56 ----- 21.1 15.7 264.9 22.8 29.6 -27.6 28.9 -24.8 26.9 -27.8 27.7 -26.1
2025-11-12T09:36:22.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:36:22.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:36:22.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.316757
2025-11-12T09:36:22.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:36:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:36:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:36:22.915 [DEBUG] [Thread-13428] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:36:22.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:36:22.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:36:22.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:35:58', tmtdew=25.42, humidity=18.68, cloud=0.0, wind=15.72, temperature=23.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:36:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:36: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-11-12T09:36:23.012 [DEBUG] [Thread-13431] [transport.py] [_log()] starting thread (client mode): 0x19dda020
2025-11-12T09:36:23.012 [DEBUG] [Thread-13431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:36:23.027 [DEBUG] [Thread-13431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:36:23.028 [INFO] [Thread-13431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:36:23.035 [DEBUG] [Thread-13431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] client lang: <none>
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] server lang: <none>
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] kex follows: False
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:36:23.036 [DEBUG] [Thread-13431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:36:23.037 [DEBUG] [Thread-13431] [transport.py] [_log()] Compression: none
2025-11-12T09:36:23.037 [DEBUG] [Thread-13431] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:36:23.093 [DEBUG] [Thread-13431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:36:23.094 [DEBUG] [Thread-13431] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:36:23.094 [DEBUG] [Thread-13431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:36:23.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:36:23.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:36:23.149 [DEBUG] [Thread-13431] [transport.py] [_log()] userauth is OK
2025-11-12T09:36:23.150 [DEBUG] [Thread-13431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:36:23.150 [DEBUG] [Thread-13431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:36:23.150 [DEBUG] [Thread-13431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:36:23.150 [DEBUG] [Thread-13431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:36:23.168 [INFO] [Thread-13431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:36:23.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:36:23.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:36:23.997 [DEBUG] [Thread-13431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:36:23.997 [DEBUG] [Thread-13431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:36:24.046 [DEBUG] [Thread-13431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:36:24.046 [DEBUG] [Thread-13431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:36:24.055 [DEBUG] [Thread-13431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:36:24.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:36:24.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-11-12T09:36:24.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-11-12T09:36:24.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:36:24.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:36:24.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:36:24.093 [DEBUG] [Thread-13431] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:36:25.553 [DEBUG] [Thread-13433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:36:35.813 [DEBUG] [Thread-13434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:36:46.240 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:36:46.242 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:36:50.865 [DEBUG] [Thread-13435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:36:54.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:36:54.116 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:36:54.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-11-12T09:36:54.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 36, 30), 25.24, 18.89, 0.0, 12.76, 23.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:36:54.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:36:30
2025-11-12T09:36:54.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:36:55.031 [DEBUG] [Thread-13436] [transport.py] [_log()] starting thread (client mode): 0x19ddbb20
2025-11-12T09:36:55.032 [DEBUG] [Thread-13436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:36:55.053 [DEBUG] [Thread-13436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:36:55.053 [INFO] [Thread-13436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:36:55.055 [DEBUG] [Thread-13436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:36:55.055 [DEBUG] [Thread-13436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:36:55.055 [DEBUG] [Thread-13436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:36:55.055 [DEBUG] [Thread-13436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:36:55.055 [DEBUG] [Thread-13436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:36:55.055 [DEBUG] [Thread-13436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] client lang: <none>
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] server lang: <none>
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] kex follows: False
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] Compression: none
2025-11-12T09:36:55.056 [DEBUG] [Thread-13436] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:36:55.070 [DEBUG] [Thread-13436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:36:55.071 [DEBUG] [Thread-13436] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:36:55.071 [DEBUG] [Thread-13436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:36:55.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:36:55.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:36:55.074 [DEBUG] [Thread-13436] [transport.py] [_log()] userauth is OK
2025-11-12T09:36:55.074 [DEBUG] [Thread-13436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:36:55.074 [DEBUG] [Thread-13436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:36:55.074 [DEBUG] [Thread-13436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:36:55.074 [DEBUG] [Thread-13436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:36:55.099 [INFO] [Thread-13436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:36:55.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:36:55.712 [DEBUG] [Thread-13436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:36:55.713 [DEBUG] [Thread-13436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:36:55.713 [DEBUG] [Thread-13436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:36:55.754 [DEBUG] [Thread-13436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:36:55.754 [DEBUG] [Thread-13436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:36:55.756 [DEBUG] [Thread-13436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:36:55.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:36:55.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:36:55.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:36:55.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:36:55.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:36:55.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:36:55.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:36:55.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:36:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:36:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.317104 -999.00  +22.70  14.42     26   +2.20 1 1 1 1 1   888    0 20.67 3.89 ----- 19.9 14.4 270.3 32.9 29.6 -26.0 28.8 -24.3 27.0 -26.9 27.8 -23.9
2025-11-12T09:36:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:36:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:36:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.317104
2025-11-12T09:36:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:36:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:36:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:36:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:36:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:36:55.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:36:30', tmtdew=25.24, humidity=18.89, cloud=0.0, wind=12.76, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:36:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:36:55.784 [DEBUG] [Thread-13436] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:36:55.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:36:55.870 [DEBUG] [Thread-13439] [transport.py] [_log()] starting thread (client mode): 0x19dd8730
2025-11-12T09:36:55.870 [DEBUG] [Thread-13439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:36:55.886 [DEBUG] [Thread-13439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:36:55.886 [INFO] [Thread-13439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:36:55.894 [DEBUG] [Thread-13439] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:36:55.894 [DEBUG] [Thread-13439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:36:55.894 [DEBUG] [Thread-13439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:36:55.894 [DEBUG] [Thread-13439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:36:55.894 [DEBUG] [Thread-13439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] client lang: <none>
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] server lang: <none>
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] kex follows: False
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] Compression: none
2025-11-12T09:36:55.895 [DEBUG] [Thread-13439] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:36:55.958 [DEBUG] [Thread-13439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:36:55.958 [DEBUG] [Thread-13439] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:36:55.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:36:55.959 [DEBUG] [Thread-13439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:36:55.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:36:56.013 [DEBUG] [Thread-13439] [transport.py] [_log()] userauth is OK
2025-11-12T09:36:56.013 [DEBUG] [Thread-13439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:36:56.013 [DEBUG] [Thread-13439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:36:56.014 [DEBUG] [Thread-13439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:36:56.014 [DEBUG] [Thread-13439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:36:56.032 [INFO] [Thread-13439] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:36:56.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:36:56.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:36:56.959 [DEBUG] [Thread-13439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:36:56.959 [DEBUG] [Thread-13439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:36:57.008 [DEBUG] [Thread-13439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:36:57.008 [DEBUG] [Thread-13439] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:36:57.017 [DEBUG] [Thread-13439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:36:57.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:36:57.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-11-12T09:36:57.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-11-12T09:36:57.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:36:57.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:36:57.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:36:57.054 [DEBUG] [Thread-13439] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:37:05.906 [DEBUG] [Thread-13441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:37:20.954 [DEBUG] [Thread-13442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:37:25.598 [DEBUG] [Thread-13443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:37:27.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:37:27.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:37:27.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-11-12T09:37:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 37, 2), 25.33, 18.78, 0.0, 12.88, 23.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:37:27.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:37:02
2025-11-12T09:37:27.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:37:27.986 [DEBUG] [Thread-13444] [transport.py] [_log()] starting thread (client mode): 0x14915210
2025-11-12T09:37:27.986 [DEBUG] [Thread-13444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:37:28.006 [DEBUG] [Thread-13444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:37:28.006 [INFO] [Thread-13444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:37:28.009 [DEBUG] [Thread-13444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] client lang: <none>
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] server lang: <none>
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] kex follows: False
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] Compression: none
2025-11-12T09:37:28.010 [DEBUG] [Thread-13444] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:37:28.027 [DEBUG] [Thread-13444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:37:28.028 [DEBUG] [Thread-13444] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:37:28.028 [DEBUG] [Thread-13444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:37:28.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:37:28.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:37:28.030 [DEBUG] [Thread-13444] [transport.py] [_log()] userauth is OK
2025-11-12T09:37:28.030 [DEBUG] [Thread-13444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:37:28.030 [DEBUG] [Thread-13444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:37:28.030 [DEBUG] [Thread-13444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:37:28.031 [DEBUG] [Thread-13444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:37:28.054 [INFO] [Thread-13444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:37:28.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:37:28.676 [DEBUG] [Thread-13444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:37:28.676 [DEBUG] [Thread-13444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:37:28.676 [DEBUG] [Thread-13444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:37:28.717 [DEBUG] [Thread-13444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:37:28.717 [DEBUG] [Thread-13444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:37:28.719 [DEBUG] [Thread-13444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:37:28.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:37:28.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:37:28.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:37:28.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:37:28.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:37:28.742 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:37:28.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:37:28.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:37:28.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:37:28.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.317451 -999.00  +22.50  32.18     25   +1.60 1 1 2 1 1   888    0 20.46 -1.71 ----- 28.5 32.2 271.2 36.1 29.5 -27.9 28.9 -25.1 26.6 -24.5 27.6 -25.4
2025-11-12T09:37:28.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:37:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:37:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.317451
2025-11-12T09:37:28.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:37:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:37:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:37:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:37:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:37:28.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:37:02', tmtdew=25.33, humidity=18.78, cloud=0.0, wind=12.88, temperature=23.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:37:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:37:28.745 [DEBUG] [Thread-13444] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:37:28.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:37:28.840 [DEBUG] [Thread-13447] [transport.py] [_log()] starting thread (client mode): 0x149158d0
2025-11-12T09:37:28.840 [DEBUG] [Thread-13447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:37:28.856 [DEBUG] [Thread-13447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:37:28.856 [INFO] [Thread-13447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:37:28.863 [DEBUG] [Thread-13447] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:37:28.864 [DEBUG] [Thread-13447] [transport.py] [_log()] client lang: <none>
2025-11-12T09:37:28.865 [DEBUG] [Thread-13447] [transport.py] [_log()] server lang: <none>
2025-11-12T09:37:28.865 [DEBUG] [Thread-13447] [transport.py] [_log()] kex follows: False
2025-11-12T09:37:28.865 [DEBUG] [Thread-13447] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:37:28.865 [DEBUG] [Thread-13447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:37:28.865 [DEBUG] [Thread-13447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:37:28.865 [DEBUG] [Thread-13447] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:37:28.865 [DEBUG] [Thread-13447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:37:28.865 [DEBUG] [Thread-13447] [transport.py] [_log()] Compression: none
2025-11-12T09:37:28.866 [DEBUG] [Thread-13447] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:37:28.926 [DEBUG] [Thread-13447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:37:28.927 [DEBUG] [Thread-13447] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:37:28.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:37:28.929 [DEBUG] [Thread-13447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:37:28.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:37:28.985 [DEBUG] [Thread-13447] [transport.py] [_log()] userauth is OK
2025-11-12T09:37:28.985 [DEBUG] [Thread-13447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:37:28.985 [DEBUG] [Thread-13447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:37:28.985 [DEBUG] [Thread-13447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:37:28.985 [DEBUG] [Thread-13447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:37:28.999 [INFO] [Thread-13447] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:37:29.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:37:29.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:37:29.867 [DEBUG] [Thread-13447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:37:29.867 [DEBUG] [Thread-13447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:37:29.914 [DEBUG] [Thread-13447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:37:29.915 [DEBUG] [Thread-13447] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:37:29.924 [DEBUG] [Thread-13447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:37:29.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:37:29.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-11-12T09:37:29.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-11-12T09:37:29.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:37:29.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:37:29.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:37:29.965 [DEBUG] [Thread-13447] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:37:35.982 [DEBUG] [Thread-13449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:37:46.383 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:37:46.384 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:37:51.033 [DEBUG] [Thread-13450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:37:59.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:37:59.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:37: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-11-12T09:38:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 37, 34), 25.05, 18.88, 0.0, 23.5, 23.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:38:00.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:37:34
2025-11-12T09:38:00.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:38:00.969 [DEBUG] [Thread-13451] [transport.py] [_log()] starting thread (client mode): 0x173464d0
2025-11-12T09:38:00.969 [DEBUG] [Thread-13451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:38:00.989 [DEBUG] [Thread-13451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:38:00.989 [INFO] [Thread-13451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:38:00.992 [DEBUG] [Thread-13451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] client lang: <none>
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] server lang: <none>
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] kex follows: False
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] Compression: none
2025-11-12T09:38:00.993 [DEBUG] [Thread-13451] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:38:01.009 [DEBUG] [Thread-13451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:38:01.009 [DEBUG] [Thread-13451] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:38:01.009 [DEBUG] [Thread-13451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:38:01.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:38:01.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:38:01.010 [DEBUG] [Thread-13451] [transport.py] [_log()] userauth is OK
2025-11-12T09:38:01.010 [DEBUG] [Thread-13451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:38:01.011 [DEBUG] [Thread-13451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:38:01.011 [DEBUG] [Thread-13451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:38:01.011 [DEBUG] [Thread-13451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:38:01.029 [INFO] [Thread-13451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:38:01.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:38:01.713 [DEBUG] [Thread-13451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:38:01.713 [DEBUG] [Thread-13451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:38:01.713 [DEBUG] [Thread-13451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:38:01.754 [DEBUG] [Thread-13451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:38:01.754 [DEBUG] [Thread-13451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:38:01.756 [DEBUG] [Thread-13451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:38:01.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:38:01.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:38:01.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:38:01.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:38:01.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:38:01.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:38:01.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.317798 -999.00  +22.20  25.08     25   +1.60 1 1 1 1 1   888    0 20.73 -12.50 ----- 20.8 25.1 275.6 31.9 29.3 -27.2 28.7 -24.2 26.4 -27.7 27.5 -25.7
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.317798
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:38:01.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:37:34', tmtdew=25.05, humidity=18.88, cloud=0.0, wind=23.5, temperature=23.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:37:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:38:01.776 [DEBUG] [Thread-13451] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:38:01.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:38:01.862 [DEBUG] [Thread-13454] [transport.py] [_log()] starting thread (client mode): 0x1493f100
2025-11-12T09:38:01.862 [DEBUG] [Thread-13454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:38:01.878 [DEBUG] [Thread-13454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:38:01.878 [INFO] [Thread-13454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] client lang: <none>
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] server lang: <none>
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] kex follows: False
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] Compression: none
2025-11-12T09:38:01.887 [DEBUG] [Thread-13454] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:38:01.947 [DEBUG] [Thread-13454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:38:01.947 [DEBUG] [Thread-13454] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:38:01.947 [DEBUG] [Thread-13454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:38:01.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:38:01.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:38:02.007 [DEBUG] [Thread-13454] [transport.py] [_log()] userauth is OK
2025-11-12T09:38:02.007 [DEBUG] [Thread-13454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:38:02.007 [DEBUG] [Thread-13454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:38:02.007 [DEBUG] [Thread-13454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:38:02.007 [DEBUG] [Thread-13454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:38:02.025 [INFO] [Thread-13454] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:38:02.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:38:02.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:38:02.933 [DEBUG] [Thread-13454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:38:02.933 [DEBUG] [Thread-13454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:38:02.982 [DEBUG] [Thread-13454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:38:02.982 [DEBUG] [Thread-13454] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:38:02.991 [DEBUG] [Thread-13454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:38:03.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:38:03.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-11-12T09:38:03.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-11-12T09:38:03.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:38:03.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:38:03.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:38:03.027 [DEBUG] [Thread-13454] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:38:06.065 [DEBUG] [Thread-13456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:38:21.110 [DEBUG] [Thread-13457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:38:25.631 [DEBUG] [Thread-13458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:38:33.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:38:33.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:38:33.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:38:33.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 38, 6), 24.97, 18.97, 0.0, 26.24, 23.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:38:33.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:38:06
2025-11-12T09:38:33.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:38:33.990 [DEBUG] [Thread-13459] [transport.py] [_log()] starting thread (client mode): 0x17346140
2025-11-12T09:38:33.991 [DEBUG] [Thread-13459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:38:34.010 [DEBUG] [Thread-13459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:38:34.010 [INFO] [Thread-13459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:38:34.013 [DEBUG] [Thread-13459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] client lang: <none>
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] server lang: <none>
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] kex follows: False
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] Compression: none
2025-11-12T09:38:34.014 [DEBUG] [Thread-13459] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:38:34.031 [DEBUG] [Thread-13459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:38:34.031 [DEBUG] [Thread-13459] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:38:34.032 [DEBUG] [Thread-13459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:38:34.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:38:34.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:38:34.034 [DEBUG] [Thread-13459] [transport.py] [_log()] userauth is OK
2025-11-12T09:38:34.034 [DEBUG] [Thread-13459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:38:34.034 [DEBUG] [Thread-13459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:38:34.034 [DEBUG] [Thread-13459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:38:34.034 [DEBUG] [Thread-13459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:38:34.048 [INFO] [Thread-13459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:38:34.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:38:34.688 [DEBUG] [Thread-13459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:38:34.688 [DEBUG] [Thread-13459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:38:34.688 [DEBUG] [Thread-13459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:38:34.728 [DEBUG] [Thread-13459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:38:34.729 [DEBUG] [Thread-13459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:38:34.732 [DEBUG] [Thread-13459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:38:34.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:38:34.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:38:34.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:38:34.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:38:34.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:38:34.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:38:34.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:38:34.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:38:34.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:38:34.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.318145 -999.00  +22.20  20.63     26   +2.00 1 1 1 1 1   888    0 20.10 -24.62 ----- 20.6 20.6 271.0 27.7 29.4 -28.0 28.6 -24.3 26.6 -26.8 27.4 -25.2
2025-11-12T09:38:34.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:38:34.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:38:34.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.318145
2025-11-12T09:38:34.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:38:34.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:38:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:38:34.759 [DEBUG] [Thread-13459] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:38:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:38:34.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:38:34.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:38:06', tmtdew=24.97, humidity=18.97, cloud=0.0, wind=26.24, temperature=23.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:38:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:38:34.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:38:34.856 [DEBUG] [Thread-13462] [transport.py] [_log()] starting thread (client mode): 0x19ddad70
2025-11-12T09:38:34.856 [DEBUG] [Thread-13462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:38:34.871 [DEBUG] [Thread-13462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:38:34.871 [INFO] [Thread-13462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:38:34.879 [DEBUG] [Thread-13462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:38:34.879 [DEBUG] [Thread-13462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:38:34.879 [DEBUG] [Thread-13462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:38:34.879 [DEBUG] [Thread-13462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] client lang: <none>
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] server lang: <none>
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] kex follows: False
2025-11-12T09:38:34.880 [DEBUG] [Thread-13462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:38:34.881 [DEBUG] [Thread-13462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:38:34.881 [DEBUG] [Thread-13462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:38:34.881 [DEBUG] [Thread-13462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:38:34.881 [DEBUG] [Thread-13462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:38:34.881 [DEBUG] [Thread-13462] [transport.py] [_log()] Compression: none
2025-11-12T09:38:34.881 [DEBUG] [Thread-13462] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:38:34.937 [DEBUG] [Thread-13462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:38:34.938 [DEBUG] [Thread-13462] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:38:34.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:38:34.939 [DEBUG] [Thread-13462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:38:34.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:38:34.993 [DEBUG] [Thread-13462] [transport.py] [_log()] userauth is OK
2025-11-12T09:38:34.993 [DEBUG] [Thread-13462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:38:34.994 [DEBUG] [Thread-13462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:38:34.994 [DEBUG] [Thread-13462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:38:34.994 [DEBUG] [Thread-13462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:38:35.014 [INFO] [Thread-13462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:38:35.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:38:35.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:38:35.846 [DEBUG] [Thread-13462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:38:35.846 [DEBUG] [Thread-13462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:38:35.894 [DEBUG] [Thread-13462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:38:35.894 [DEBUG] [Thread-13462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:38:35.902 [DEBUG] [Thread-13462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:38:35.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:38:35.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')
2025-11-12T09:38:35.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-11-12T09:38:35.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:38:35.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:38:35.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:38:35.933 [DEBUG] [Thread-13462] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:38:36.140 [DEBUG] [Thread-13464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:38:46.527 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:38:46.528 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:38:51.178 [DEBUG] [Thread-13465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:39:05.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:39:05.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:39:05.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:39:06.214 [DEBUG] [Thread-13466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:39:06.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 38, 38), 24.78, 19.41, 0.0, 27.21, 23.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:39:06.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:38:38
2025-11-12T09:39:06.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:39:06.885 [DEBUG] [Thread-13467] [transport.py] [_log()] starting thread (client mode): 0x19dd9c90
2025-11-12T09:39:06.885 [DEBUG] [Thread-13467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:39:06.905 [DEBUG] [Thread-13467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:39:06.906 [INFO] [Thread-13467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:39:06.908 [DEBUG] [Thread-13467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:39:06.908 [DEBUG] [Thread-13467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:39:06.908 [DEBUG] [Thread-13467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:39:06.908 [DEBUG] [Thread-13467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] client lang: <none>
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] server lang: <none>
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] kex follows: False
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] Compression: none
2025-11-12T09:39:06.909 [DEBUG] [Thread-13467] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:39:06.926 [DEBUG] [Thread-13467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:39:06.926 [DEBUG] [Thread-13467] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:39:06.927 [DEBUG] [Thread-13467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:39:06.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:39:06.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:39:06.929 [DEBUG] [Thread-13467] [transport.py] [_log()] userauth is OK
2025-11-12T09:39:06.929 [DEBUG] [Thread-13467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:39:06.929 [DEBUG] [Thread-13467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:39:06.929 [DEBUG] [Thread-13467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:39:06.929 [DEBUG] [Thread-13467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:39:06.965 [INFO] [Thread-13467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:39:06.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:39:07.595 [DEBUG] [Thread-13467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:39:07.595 [DEBUG] [Thread-13467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:39:07.596 [DEBUG] [Thread-13467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:39:07.636 [DEBUG] [Thread-13467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:39:07.637 [DEBUG] [Thread-13467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:39:07.640 [DEBUG] [Thread-13467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:39:07.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:39:07.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:39:07.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:39:07.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:39:07.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:39:07.665 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:39:07.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:39:07.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:39:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:39:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.318493 -999.00  +22.70  23.04     26   +2.20 1 1 1 1 1   888    0 19.65 -36.97 ----- 21.6 23.0 274.2 25.5 29.4 -26.2 28.6 -23.9 26.5 -26.4 27.6 -24.0
2025-11-12T09:39:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:39:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:39:07.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.318493
2025-11-12T09:39:07.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:39:07.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:39:07.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:39:07.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:39:07.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:39:07.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:38:38', tmtdew=24.78, humidity=19.41, cloud=0.0, wind=27.21, temperature=23.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:38:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:39:07.668 [DEBUG] [Thread-13467] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:39:07.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:39:07.949 [DEBUG] [Thread-13470] [transport.py] [_log()] starting thread (client mode): 0x149a7ac0
2025-11-12T09:39:07.949 [DEBUG] [Thread-13470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:39:07.963 [DEBUG] [Thread-13470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:39:07.963 [INFO] [Thread-13470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:39:07.971 [DEBUG] [Thread-13470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:39:07.971 [DEBUG] [Thread-13470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:39:07.971 [DEBUG] [Thread-13470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] client lang: <none>
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] server lang: <none>
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] kex follows: False
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:39:07.972 [DEBUG] [Thread-13470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:39:07.973 [DEBUG] [Thread-13470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:39:07.973 [DEBUG] [Thread-13470] [transport.py] [_log()] Compression: none
2025-11-12T09:39:07.973 [DEBUG] [Thread-13470] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:39:08.034 [DEBUG] [Thread-13470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:39:08.035 [DEBUG] [Thread-13470] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:39:08.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:39:08.036 [DEBUG] [Thread-13470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:39:08.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:39:08.093 [DEBUG] [Thread-13470] [transport.py] [_log()] userauth is OK
2025-11-12T09:39:08.094 [DEBUG] [Thread-13470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:39:08.094 [DEBUG] [Thread-13470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:39:08.094 [DEBUG] [Thread-13470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:39:08.094 [DEBUG] [Thread-13470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:39:08.112 [INFO] [Thread-13470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:39:08.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:39:08.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:39:08.954 [DEBUG] [Thread-13470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:39:08.954 [DEBUG] [Thread-13470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:39:09.003 [DEBUG] [Thread-13470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:39:09.003 [DEBUG] [Thread-13470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:39:09.012 [DEBUG] [Thread-13470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:39:09.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:39:09.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-11-12T09:39:09.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:39:09.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:39:09.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:39:09.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:39:09.048 [DEBUG] [Thread-13470] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:39:21.247 [DEBUG] [Thread-13472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:39:25.677 [DEBUG] [Thread-13473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:39:36.301 [DEBUG] [Thread-13474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:39:39.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:39:39.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:39:39.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-11-12T09:39:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 39, 10), 24.58, 19.64, 0.0, 26.56, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:39:39.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:39:10
2025-11-12T09:39:39.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:39:40.005 [DEBUG] [Thread-13475] [transport.py] [_log()] starting thread (client mode): 0x17362980
2025-11-12T09:39:40.006 [DEBUG] [Thread-13475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:39:40.025 [DEBUG] [Thread-13475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:39:40.026 [INFO] [Thread-13475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:39:40.028 [DEBUG] [Thread-13475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:39:40.028 [DEBUG] [Thread-13475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:39:40.028 [DEBUG] [Thread-13475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:39:40.028 [DEBUG] [Thread-13475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:39:40.028 [DEBUG] [Thread-13475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:39:40.028 [DEBUG] [Thread-13475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:39:40.028 [DEBUG] [Thread-13475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:39:40.028 [DEBUG] [Thread-13475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] client lang: <none>
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] server lang: <none>
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] kex follows: False
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] Compression: none
2025-11-12T09:39:40.029 [DEBUG] [Thread-13475] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:39:40.037 [DEBUG] [Thread-13475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:39:40.037 [DEBUG] [Thread-13475] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:39:40.038 [DEBUG] [Thread-13475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:39:40.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:39:40.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:39:40.039 [DEBUG] [Thread-13475] [transport.py] [_log()] userauth is OK
2025-11-12T09:39:40.040 [DEBUG] [Thread-13475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:39:40.040 [DEBUG] [Thread-13475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:39:40.040 [DEBUG] [Thread-13475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:39:40.040 [DEBUG] [Thread-13475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:39:40.058 [INFO] [Thread-13475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:39:40.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:39:40.707 [DEBUG] [Thread-13475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:39:40.707 [DEBUG] [Thread-13475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:39:40.707 [DEBUG] [Thread-13475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:39:40.747 [DEBUG] [Thread-13475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:39:40.748 [DEBUG] [Thread-13475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:39:40.752 [DEBUG] [Thread-13475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:39:40.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:39:40.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:39:40.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:39:40.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:39:40.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:39:40.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:39:40.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:39:40.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:39:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:39:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.318840 -999.00  +22.50  22.35     25   +1.70 1 1 1 1 1   888    0 19.98 -35.60 ----- 19.9 22.4 270.6 25.7 29.5 -27.0 28.6 -24.5 26.4 -27.6 27.6 -25.0
2025-11-12T09:39:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:39:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:39:40.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.318840
2025-11-12T09:39:40.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:39:40.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:39:40.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:39:40.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:39:40.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:39:40.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:39:10', tmtdew=24.58, humidity=19.64, cloud=0.0, wind=26.56, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:39:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:39:40.770 [DEBUG] [Thread-13475] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:39:40.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:39:40.870 [DEBUG] [Thread-13478] [transport.py] [_log()] starting thread (client mode): 0x14921690
2025-11-12T09:39:40.870 [DEBUG] [Thread-13478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:39:40.885 [DEBUG] [Thread-13478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:39:40.885 [INFO] [Thread-13478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] client lang: <none>
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] server lang: <none>
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] kex follows: False
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:39:40.893 [DEBUG] [Thread-13478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:39:40.894 [DEBUG] [Thread-13478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:39:40.894 [DEBUG] [Thread-13478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:39:40.894 [DEBUG] [Thread-13478] [transport.py] [_log()] Compression: none
2025-11-12T09:39:40.894 [DEBUG] [Thread-13478] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:39:40.954 [DEBUG] [Thread-13478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:39:40.954 [DEBUG] [Thread-13478] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:39:40.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:39:40.956 [DEBUG] [Thread-13478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:39:40.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:39:41.009 [DEBUG] [Thread-13478] [transport.py] [_log()] userauth is OK
2025-11-12T09:39:41.010 [DEBUG] [Thread-13478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:39:41.010 [DEBUG] [Thread-13478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:39:41.010 [DEBUG] [Thread-13478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:39:41.010 [DEBUG] [Thread-13478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:39:41.029 [INFO] [Thread-13478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:39:41.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:39:41.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:39:41.869 [DEBUG] [Thread-13478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:39:41.869 [DEBUG] [Thread-13478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:39:41.917 [DEBUG] [Thread-13478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:39:41.917 [DEBUG] [Thread-13478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:39:41.926 [DEBUG] [Thread-13478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:39:41.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:39:41.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-11-12T09:39:41.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-11-12T09:39:41.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:39:41.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:39:41.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:39:41.963 [DEBUG] [Thread-13478] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:39:46.670 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:39:46.671 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:39:51.338 [DEBUG] [Thread-13480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:40:06.388 [DEBUG] [Thread-13481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:40:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:40:11.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:40:11.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-11-12T09:40:12.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 39, 42), 24.68, 19.09, 0.0, 21.47, 23.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:40:12.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:39:42
2025-11-12T09:40:12.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:40:12.883 [DEBUG] [Thread-13482] [transport.py] [_log()] starting thread (client mode): 0x17361a80
2025-11-12T09:40:12.883 [DEBUG] [Thread-13482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:40:12.903 [DEBUG] [Thread-13482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:40:12.903 [INFO] [Thread-13482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:40:12.906 [DEBUG] [Thread-13482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] client lang: <none>
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] server lang: <none>
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] kex follows: False
2025-11-12T09:40:12.907 [DEBUG] [Thread-13482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:40:12.908 [DEBUG] [Thread-13482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:40:12.908 [DEBUG] [Thread-13482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:40:12.908 [DEBUG] [Thread-13482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:40:12.908 [DEBUG] [Thread-13482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:40:12.908 [DEBUG] [Thread-13482] [transport.py] [_log()] Compression: none
2025-11-12T09:40:12.908 [DEBUG] [Thread-13482] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:40:12.927 [DEBUG] [Thread-13482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:40:12.928 [DEBUG] [Thread-13482] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:40:12.928 [DEBUG] [Thread-13482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:40:12.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:40:12.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:40:12.931 [DEBUG] [Thread-13482] [transport.py] [_log()] userauth is OK
2025-11-12T09:40:12.932 [DEBUG] [Thread-13482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:40:12.932 [DEBUG] [Thread-13482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:40:12.932 [DEBUG] [Thread-13482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:40:12.932 [DEBUG] [Thread-13482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:40:12.955 [INFO] [Thread-13482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:40:12.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:40:13.558 [DEBUG] [Thread-13482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:40:13.559 [DEBUG] [Thread-13482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:40:13.559 [DEBUG] [Thread-13482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:40:13.600 [DEBUG] [Thread-13482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:40:13.600 [DEBUG] [Thread-13482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:40:13.604 [DEBUG] [Thread-13482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:40:13.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:40:13.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:40:13.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:40:13.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:40:13.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:40:13.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:40:13.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:40:13.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:40:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:40:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.319534 -999.00  +22.80  14.46     25   +2.10 1 1 1 1 1   888    0 19.34 -39.10 ----- 13.1 14.5 295.8 19.7 29.5 -26.1 28.7 -24.9 26.9 -23.7 27.6 -23.8
2025-11-12T09:40:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:40:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:40:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.319534
2025-11-12T09:40:13.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:40:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:40:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:40:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:40:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:40:13.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:39:42', tmtdew=24.68, humidity=19.09, cloud=0.0, wind=21.47, temperature=23.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:40:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:40:13.633 [DEBUG] [Thread-13482] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:40:13.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:40:13.730 [DEBUG] [Thread-13485] [transport.py] [_log()] starting thread (client mode): 0x173620b0
2025-11-12T09:40:13.730 [DEBUG] [Thread-13485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:40:13.745 [DEBUG] [Thread-13485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:40:13.745 [INFO] [Thread-13485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] client lang: <none>
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] server lang: <none>
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] kex follows: False
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:40:13.753 [DEBUG] [Thread-13485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:40:13.754 [DEBUG] [Thread-13485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:40:13.754 [DEBUG] [Thread-13485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:40:13.754 [DEBUG] [Thread-13485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:40:13.754 [DEBUG] [Thread-13485] [transport.py] [_log()] Compression: none
2025-11-12T09:40:13.754 [DEBUG] [Thread-13485] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:40:13.814 [DEBUG] [Thread-13485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:40:13.815 [DEBUG] [Thread-13485] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:40:13.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:40:13.816 [DEBUG] [Thread-13485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:40:13.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:40:13.870 [DEBUG] [Thread-13485] [transport.py] [_log()] userauth is OK
2025-11-12T09:40:13.870 [DEBUG] [Thread-13485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:40:13.870 [DEBUG] [Thread-13485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:40:13.870 [DEBUG] [Thread-13485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:40:13.870 [DEBUG] [Thread-13485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:40:13.892 [INFO] [Thread-13485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:40:13.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:40:13.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:40:14.755 [DEBUG] [Thread-13485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:40:14.755 [DEBUG] [Thread-13485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:40:14.803 [DEBUG] [Thread-13485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:40:14.803 [DEBUG] [Thread-13485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:40:14.811 [DEBUG] [Thread-13485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:40:14.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:40:14.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')
2025-11-12T09:40:14.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:40:14.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:40:14.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:40:14.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:40:14.842 [DEBUG] [Thread-13485] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:40:21.427 [DEBUG] [Thread-13487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:40:25.723 [DEBUG] [Thread-13488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:40:36.475 [DEBUG] [Thread-13489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:40:44.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:40:44.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:40:44.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-11-12T09:40:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 40, 14), 24.57, 19.21, 0.0, 19.66, 23.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:40:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:40:14
2025-11-12T09:40:45.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:40:45.798 [DEBUG] [Thread-13490] [transport.py] [_log()] starting thread (client mode): 0x173633d0
2025-11-12T09:40:45.798 [DEBUG] [Thread-13490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:40:45.813 [DEBUG] [Thread-13490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:40:45.814 [INFO] [Thread-13490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] client lang: <none>
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] server lang: <none>
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] kex follows: False
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] Compression: none
2025-11-12T09:40:45.816 [DEBUG] [Thread-13490] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:40:45.831 [DEBUG] [Thread-13490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:40:45.832 [DEBUG] [Thread-13490] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:40:45.832 [DEBUG] [Thread-13490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:40:45.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:40:45.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:40:45.834 [DEBUG] [Thread-13490] [transport.py] [_log()] userauth is OK
2025-11-12T09:40:45.834 [DEBUG] [Thread-13490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:40:45.834 [DEBUG] [Thread-13490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:40:45.835 [DEBUG] [Thread-13490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:40:45.835 [DEBUG] [Thread-13490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:40:45.870 [INFO] [Thread-13490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:40:45.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:40:46.440 [DEBUG] [Thread-13490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:40:46.440 [DEBUG] [Thread-13490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:40:46.440 [DEBUG] [Thread-13490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:40:46.481 [DEBUG] [Thread-13490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:40:46.481 [DEBUG] [Thread-13490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:40:46.483 [DEBUG] [Thread-13490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:40:46.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:40:46.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:40:46.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:40:46.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:40:46.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:40:46.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:40:46.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:40:46.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.319882 -999.00  +22.90  12.76     25   +2.30 1 1 1 1 1   888    0 19.94 -37.62 ----- 13.4 12.8 299.0 24.4 29.7 -25.7 28.8 -23.7 27.1 -22.5 27.7 -23.6
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.319882
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:40:46.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:40:14', tmtdew=24.57, humidity=19.21, cloud=0.0, wind=19.66, temperature=23.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:40:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:40:46.494 [DEBUG] [Thread-13490] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:40:46.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:40:46.579 [DEBUG] [Thread-13493] [transport.py] [_log()] starting thread (client mode): 0x173e8b50
2025-11-12T09:40:46.579 [DEBUG] [Thread-13493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:40:46.593 [DEBUG] [Thread-13493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:40:46.593 [INFO] [Thread-13493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] client lang: <none>
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] server lang: <none>
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] kex follows: False
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] Compression: none
2025-11-12T09:40:46.601 [DEBUG] [Thread-13493] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:40:46.657 [DEBUG] [Thread-13493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:40:46.657 [DEBUG] [Thread-13493] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:40:46.658 [DEBUG] [Thread-13493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:40:46.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:40:46.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:40:46.713 [DEBUG] [Thread-13493] [transport.py] [_log()] userauth is OK
2025-11-12T09:40:46.713 [DEBUG] [Thread-13493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:40:46.713 [DEBUG] [Thread-13493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:40:46.713 [DEBUG] [Thread-13493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:40:46.713 [DEBUG] [Thread-13493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:40:46.728 [INFO] [Thread-13493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:40:46.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:40:46.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:40:46.813 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:40:46.814 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:40:47.572 [DEBUG] [Thread-13493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:40:47.572 [DEBUG] [Thread-13493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:40:47.620 [DEBUG] [Thread-13493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:40:47.620 [DEBUG] [Thread-13493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:40:47.628 [DEBUG] [Thread-13493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:40:47.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:40:47.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-11-12T09:40:47.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:40:47.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:40:47.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:40:47.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:40:47.662 [DEBUG] [Thread-13493] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:40:51.510 [DEBUG] [Thread-13495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:41:06.566 [DEBUG] [Thread-13496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:41:17.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:41:17.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:41:17.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-11-12T09:41:18.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 40, 46), 24.49, 19.81, 0.0, 19.36, 23.51, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:41:18.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:40:46
2025-11-12T09:41:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:41:18.632 [DEBUG] [Thread-13497] [transport.py] [_log()] starting thread (client mode): 0x17362290
2025-11-12T09:41:18.632 [DEBUG] [Thread-13497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:41:18.646 [DEBUG] [Thread-13497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:41:18.646 [INFO] [Thread-13497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:41:18.649 [DEBUG] [Thread-13497] [transport.py] [_log()] client lang: <none>
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] server lang: <none>
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] kex follows: False
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] Compression: none
2025-11-12T09:41:18.650 [DEBUG] [Thread-13497] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:41:18.657 [DEBUG] [Thread-13497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:41:18.657 [DEBUG] [Thread-13497] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:41:18.657 [DEBUG] [Thread-13497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:41:18.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:41:18.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:41:18.658 [DEBUG] [Thread-13497] [transport.py] [_log()] userauth is OK
2025-11-12T09:41:18.658 [DEBUG] [Thread-13497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:41:18.658 [DEBUG] [Thread-13497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:41:18.658 [DEBUG] [Thread-13497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:41:18.658 [DEBUG] [Thread-13497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:41:18.667 [INFO] [Thread-13497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:41:18.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:41:19.271 [DEBUG] [Thread-13497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:41:19.271 [DEBUG] [Thread-13497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:41:19.271 [DEBUG] [Thread-13497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:41:19.312 [DEBUG] [Thread-13497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:41:19.312 [DEBUG] [Thread-13497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:41:19.314 [DEBUG] [Thread-13497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:41:19.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:41:19.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:41:19.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:41:19.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:41:19.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:41:19.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:41:19.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.320229 -999.00  +23.20  12.98     25   +2.40 1 1 1 1 1   888    0 19.58 -35.63 ----- 21.7 13.0 281.1 19.1 29.8 -25.2 28.9 -23.2 27.1 -24.7 27.9 -23.4
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.320229
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:41:19.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:40:46', tmtdew=24.49, humidity=19.81, cloud=0.0, wind=19.36, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:41:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:41:19.331 [DEBUG] [Thread-13497] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:41:19.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:41:19.417 [DEBUG] [Thread-13500] [transport.py] [_log()] starting thread (client mode): 0x17347df0
2025-11-12T09:41:19.417 [DEBUG] [Thread-13500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:41:19.437 [DEBUG] [Thread-13500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:41:19.437 [INFO] [Thread-13500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] client lang: <none>
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] server lang: <none>
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] kex follows: False
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:41:19.445 [DEBUG] [Thread-13500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:41:19.446 [DEBUG] [Thread-13500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:41:19.446 [DEBUG] [Thread-13500] [transport.py] [_log()] Compression: none
2025-11-12T09:41:19.446 [DEBUG] [Thread-13500] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:41:19.503 [DEBUG] [Thread-13500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:41:19.504 [DEBUG] [Thread-13500] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:41:19.504 [DEBUG] [Thread-13500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:41:19.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:41:19.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:41:19.561 [DEBUG] [Thread-13500] [transport.py] [_log()] userauth is OK
2025-11-12T09:41:19.561 [DEBUG] [Thread-13500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:41:19.561 [DEBUG] [Thread-13500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:41:19.561 [DEBUG] [Thread-13500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:41:19.561 [DEBUG] [Thread-13500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:41:19.576 [INFO] [Thread-13500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:41:19.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:41:19.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:41:20.439 [DEBUG] [Thread-13500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:41:20.439 [DEBUG] [Thread-13500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:41:20.486 [DEBUG] [Thread-13500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:41:20.486 [DEBUG] [Thread-13500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:41:20.495 [DEBUG] [Thread-13500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:41:20.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:41:20.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-11-12T09:41:20.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-11-12T09:41:20.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:41:20.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:41:20.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:41:20.530 [DEBUG] [Thread-13500] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:41:21.602 [DEBUG] [Thread-13502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:41:25.756 [DEBUG] [Thread-13503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:41:36.658 [DEBUG] [Thread-13504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:41:46.955 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:41:46.956 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:41:50.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:41:50.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:41:50.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-11-12T09:41:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 41, 18), 24.53, 19.76, 0.0, 17.03, 23.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:41:51.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:41:18
2025-11-12T09:41:51.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:41:51.576 [DEBUG] [Thread-13505] [transport.py] [_log()] starting thread (client mode): 0x1493c400
2025-11-12T09:41:51.576 [DEBUG] [Thread-13505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:41:51.596 [DEBUG] [Thread-13505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:41:51.596 [INFO] [Thread-13505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] client lang: <none>
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] server lang: <none>
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] kex follows: False
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:41:51.599 [DEBUG] [Thread-13505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:41:51.600 [DEBUG] [Thread-13505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:41:51.600 [DEBUG] [Thread-13505] [transport.py] [_log()] Compression: none
2025-11-12T09:41:51.600 [DEBUG] [Thread-13505] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:41:51.616 [DEBUG] [Thread-13505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:41:51.616 [DEBUG] [Thread-13505] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:41:51.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:41:51.616 [DEBUG] [Thread-13505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:41:51.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:41:51.617 [DEBUG] [Thread-13505] [transport.py] [_log()] userauth is OK
2025-11-12T09:41:51.617 [DEBUG] [Thread-13505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:41:51.617 [DEBUG] [Thread-13505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:41:51.617 [DEBUG] [Thread-13505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:41:51.618 [DEBUG] [Thread-13505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:41:51.627 [INFO] [Thread-13505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:41:51.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:41:51.690 [DEBUG] [Thread-13507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:41:52.221 [DEBUG] [Thread-13505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:41:52.221 [DEBUG] [Thread-13505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:41:52.221 [DEBUG] [Thread-13505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:41:52.262 [DEBUG] [Thread-13505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:41:52.262 [DEBUG] [Thread-13505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:41:52.264 [DEBUG] [Thread-13505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:41:52.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:41:52.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:41:52.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:41:52.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:41:52.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:41:52.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:41:52.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:41:52.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:41:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:41:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.320229 -999.00  +23.20  12.98     25   +2.40 1 1 1 1 1   888    0 19.58 -35.63 ----- 21.7 13.0 281.1 19.1 29.8 -25.2 28.9 -23.2 27.1 -24.7 27.9 -23.4
2025-11-12T09:41:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:41:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:41:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.320229
2025-11-12T09:41:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:41:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:41:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:41:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:41:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:41:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:41:18', tmtdew=24.53, humidity=19.76, cloud=0.0, wind=17.03, temperature=23.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:41:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:41:52.284 [DEBUG] [Thread-13505] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:41:52.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:41:52.381 [DEBUG] [Thread-13509] [transport.py] [_log()] starting thread (client mode): 0x19dd9c90
2025-11-12T09:41:52.381 [DEBUG] [Thread-13509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:41:52.396 [DEBUG] [Thread-13509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:41:52.396 [INFO] [Thread-13509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:41:52.403 [DEBUG] [Thread-13509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] client lang: <none>
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] server lang: <none>
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] kex follows: False
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] Compression: none
2025-11-12T09:41:52.404 [DEBUG] [Thread-13509] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:41:52.460 [DEBUG] [Thread-13509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:41:52.460 [DEBUG] [Thread-13509] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:41:52.460 [DEBUG] [Thread-13509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:41:52.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:41:52.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:41:52.517 [DEBUG] [Thread-13509] [transport.py] [_log()] userauth is OK
2025-11-12T09:41:52.517 [DEBUG] [Thread-13509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:41:52.517 [DEBUG] [Thread-13509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:41:52.517 [DEBUG] [Thread-13509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:41:52.517 [DEBUG] [Thread-13509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:41:52.531 [INFO] [Thread-13509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:41:52.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:41:52.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:41:53.431 [DEBUG] [Thread-13509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:41:53.431 [DEBUG] [Thread-13509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:41:53.479 [DEBUG] [Thread-13509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:41:53.479 [DEBUG] [Thread-13509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:41:53.488 [DEBUG] [Thread-13509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:41:53.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:41:53.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-11-12T09:41:53.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-11-12T09:41:53.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:41:53.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:41:53.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:41:53.520 [DEBUG] [Thread-13509] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:42:06.723 [DEBUG] [Thread-13511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:42:21.776 [DEBUG] [Thread-13512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:42:23.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:42:23.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:42:23.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-11-12T09:42:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 41, 49), 24.69, 19.22, 0.0, 19.69, 23.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:42:24.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:41:49
2025-11-12T09:42:24.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:42:24.486 [DEBUG] [Thread-13513] [transport.py] [_log()] starting thread (client mode): 0x173e9360
2025-11-12T09:42:24.487 [DEBUG] [Thread-13513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:42:24.507 [DEBUG] [Thread-13513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:42:24.507 [INFO] [Thread-13513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:42:24.510 [DEBUG] [Thread-13513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:42:24.510 [DEBUG] [Thread-13513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:42:24.510 [DEBUG] [Thread-13513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:42:24.510 [DEBUG] [Thread-13513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] client lang: <none>
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] server lang: <none>
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] kex follows: False
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] Compression: none
2025-11-12T09:42:24.511 [DEBUG] [Thread-13513] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:42:24.527 [DEBUG] [Thread-13513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:42:24.528 [DEBUG] [Thread-13513] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:42:24.528 [DEBUG] [Thread-13513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:42:24.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:42:24.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:42:24.530 [DEBUG] [Thread-13513] [transport.py] [_log()] userauth is OK
2025-11-12T09:42:24.531 [DEBUG] [Thread-13513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:42:24.531 [DEBUG] [Thread-13513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:42:24.531 [DEBUG] [Thread-13513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:42:24.531 [DEBUG] [Thread-13513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:42:24.566 [INFO] [Thread-13513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:42:24.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:42:25.220 [DEBUG] [Thread-13513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:42:25.221 [DEBUG] [Thread-13513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:42:25.221 [DEBUG] [Thread-13513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:42:25.261 [DEBUG] [Thread-13513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:42:25.262 [DEBUG] [Thread-13513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:42:25.265 [DEBUG] [Thread-13513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:42:25.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:42:25.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:42:25.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:42:25.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:42:25.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:42:25.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:42:25.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:42:25.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:42:25.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:42:25.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.320576 -999.00  +23.20  26.37     25   +2.10 1 1 1 1 1   888    0 19.82 -33.91 ----- 20.8 26.4 278.5 30.6 29.8 -25.6 29.0 -23.9 26.8 -25.8 27.9 -23.7
2025-11-12T09:42:25.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:42:25.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:42:25.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.320576
2025-11-12T09:42:25.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:42:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:42:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:42:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:42:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:42:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:41:49', tmtdew=24.69, humidity=19.22, cloud=0.0, wind=19.69, temperature=23.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:41:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:42:25.294 [DEBUG] [Thread-13513] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:42:25.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:42:25.390 [DEBUG] [Thread-13516] [transport.py] [_log()] starting thread (client mode): 0x173bc490
2025-11-12T09:42:25.391 [DEBUG] [Thread-13516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:42:25.406 [DEBUG] [Thread-13516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:42:25.406 [INFO] [Thread-13516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:42:25.414 [DEBUG] [Thread-13516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:42:25.414 [DEBUG] [Thread-13516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:42:25.414 [DEBUG] [Thread-13516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:42:25.414 [DEBUG] [Thread-13516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:42:25.414 [DEBUG] [Thread-13516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:42:25.414 [DEBUG] [Thread-13516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:42:25.414 [DEBUG] [Thread-13516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:42:25.414 [DEBUG] [Thread-13516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] client lang: <none>
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] server lang: <none>
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] kex follows: False
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] Compression: none
2025-11-12T09:42:25.415 [DEBUG] [Thread-13516] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:42:25.472 [DEBUG] [Thread-13516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:42:25.472 [DEBUG] [Thread-13516] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:42:25.472 [DEBUG] [Thread-13516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:42:25.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:42:25.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:42:25.534 [DEBUG] [Thread-13516] [transport.py] [_log()] userauth is OK
2025-11-12T09:42:25.534 [DEBUG] [Thread-13516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:42:25.534 [DEBUG] [Thread-13516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:42:25.534 [DEBUG] [Thread-13516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:42:25.534 [DEBUG] [Thread-13516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:42:25.558 [INFO] [Thread-13516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:42:25.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:42:25.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:42:25.788 [DEBUG] [Thread-13518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:42:26.493 [DEBUG] [Thread-13516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:42:26.493 [DEBUG] [Thread-13516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:42:26.541 [DEBUG] [Thread-13516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:42:26.542 [DEBUG] [Thread-13516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:42:26.552 [DEBUG] [Thread-13516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:42:26.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:42:26.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')
2025-11-12T09:42:26.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-11-12T09:42:26.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:42:26.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:42:26.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:42:26.587 [DEBUG] [Thread-13516] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:42:36.806 [DEBUG] [Thread-13519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:42:47.097 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:42:47.098 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:42:51.855 [DEBUG] [Thread-13520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:42:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:42:56.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:42:56.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-11-12T09:42:57.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 42, 54), 24.72, 19.21, 0.0, 28.14, 23.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:42:57.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:42:54
2025-11-12T09:42:57.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:42:57.523 [DEBUG] [Thread-13521] [transport.py] [_log()] starting thread (client mode): 0x14921330
2025-11-12T09:42:57.523 [DEBUG] [Thread-13521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:42:57.544 [DEBUG] [Thread-13521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:42:57.544 [INFO] [Thread-13521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:42:57.547 [DEBUG] [Thread-13521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:42:57.547 [DEBUG] [Thread-13521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:42:57.547 [DEBUG] [Thread-13521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] client lang: <none>
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] server lang: <none>
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] kex follows: False
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:42:57.548 [DEBUG] [Thread-13521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:42:57.549 [DEBUG] [Thread-13521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:42:57.549 [DEBUG] [Thread-13521] [transport.py] [_log()] Compression: none
2025-11-12T09:42:57.549 [DEBUG] [Thread-13521] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:42:57.567 [DEBUG] [Thread-13521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:42:57.568 [DEBUG] [Thread-13521] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:42:57.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:42:57.569 [DEBUG] [Thread-13521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:42:57.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:42:57.571 [DEBUG] [Thread-13521] [transport.py] [_log()] userauth is OK
2025-11-12T09:42:57.571 [DEBUG] [Thread-13521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:42:57.572 [DEBUG] [Thread-13521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:42:57.572 [DEBUG] [Thread-13521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:42:57.572 [DEBUG] [Thread-13521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:42:57.589 [INFO] [Thread-13521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:42:57.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:42:58.219 [DEBUG] [Thread-13521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:42:58.219 [DEBUG] [Thread-13521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:42:58.219 [DEBUG] [Thread-13521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:42:58.259 [DEBUG] [Thread-13521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:42:58.260 [DEBUG] [Thread-13521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:42:58.263 [DEBUG] [Thread-13521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:42:58.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:42:58.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:42:58.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:42:58.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:42:58.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:42:58.285 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:42:58.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:42:58.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:42:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:42:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.320923 -999.00  +23.00  14.53     25   +2.40 1 1 1 1 1   888    0 19.63 -32.13 ----- 14.8 14.5 287.2 20.1 29.8 -25.6 28.9 -23.6 27.1 -22.8 27.9 -23.6
2025-11-12T09:42:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:42:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:42:58.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.320923
2025-11-12T09:42:58.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:42:58.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:42:58.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:42:58.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:42:58.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:42:58.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:42:54', tmtdew=24.72, humidity=19.21, cloud=0.0, wind=28.14, temperature=23.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:42:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:42:58.288 [DEBUG] [Thread-13521] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:42:58.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:42:58.372 [DEBUG] [Thread-13524] [transport.py] [_log()] starting thread (client mode): 0x173e88e0
2025-11-12T09:42:58.372 [DEBUG] [Thread-13524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:42:58.391 [DEBUG] [Thread-13524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:42:58.392 [INFO] [Thread-13524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:42:58.399 [DEBUG] [Thread-13524] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:42:58.399 [DEBUG] [Thread-13524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:42:58.399 [DEBUG] [Thread-13524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:42:58.399 [DEBUG] [Thread-13524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:42:58.399 [DEBUG] [Thread-13524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:42:58.399 [DEBUG] [Thread-13524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:42:58.399 [DEBUG] [Thread-13524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] client lang: <none>
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] server lang: <none>
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] kex follows: False
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] Compression: none
2025-11-12T09:42:58.400 [DEBUG] [Thread-13524] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:42:58.458 [DEBUG] [Thread-13524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:42:58.458 [DEBUG] [Thread-13524] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:42:58.459 [DEBUG] [Thread-13524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:42:58.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:42:58.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:42:58.513 [DEBUG] [Thread-13524] [transport.py] [_log()] userauth is OK
2025-11-12T09:42:58.514 [DEBUG] [Thread-13524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:42:58.514 [DEBUG] [Thread-13524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:42:58.514 [DEBUG] [Thread-13524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:42:58.514 [DEBUG] [Thread-13524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:42:58.534 [INFO] [Thread-13524] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:42:58.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:42:58.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:42:59.371 [DEBUG] [Thread-13524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:42:59.371 [DEBUG] [Thread-13524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:42:59.419 [DEBUG] [Thread-13524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:42:59.420 [DEBUG] [Thread-13524] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:42:59.429 [DEBUG] [Thread-13524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:42:59.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:42:59.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-11-12T09:42:59.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:42:59.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:42:59.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:42:59.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:42:59.466 [DEBUG] [Thread-13524] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:43:06.888 [DEBUG] [Thread-13526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:43:21.934 [DEBUG] [Thread-13527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:43:25.821 [DEBUG] [Thread-13528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:43:29.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:43:29.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:43:29.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-11-12T09:43:30.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 43, 25), 24.91, 19.01, 0.0, 32.25, 23.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:43:30.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:43:25
2025-11-12T09:43:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:43:30.404 [DEBUG] [Thread-13529] [transport.py] [_log()] starting thread (client mode): 0x14906230
2025-11-12T09:43:30.405 [DEBUG] [Thread-13529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:43:30.425 [DEBUG] [Thread-13529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:43:30.425 [INFO] [Thread-13529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] client lang: <none>
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] server lang: <none>
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] kex follows: False
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] Compression: none
2025-11-12T09:43:30.428 [DEBUG] [Thread-13529] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:43:30.445 [DEBUG] [Thread-13529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:43:30.446 [DEBUG] [Thread-13529] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:43:30.446 [DEBUG] [Thread-13529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:43:30.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:43:30.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:43:30.448 [DEBUG] [Thread-13529] [transport.py] [_log()] userauth is OK
2025-11-12T09:43:30.449 [DEBUG] [Thread-13529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:43:30.449 [DEBUG] [Thread-13529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:43:30.449 [DEBUG] [Thread-13529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:43:30.449 [DEBUG] [Thread-13529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:43:30.474 [INFO] [Thread-13529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:43:30.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:43:31.120 [DEBUG] [Thread-13529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:43:31.121 [DEBUG] [Thread-13529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:43:31.121 [DEBUG] [Thread-13529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:43:31.162 [DEBUG] [Thread-13529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:43:31.162 [DEBUG] [Thread-13529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:43:31.165 [DEBUG] [Thread-13529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:43:31.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:43:31.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:43:31.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:43:31.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:43:31.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:43:31.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:43:31.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:43:31.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:43:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:43:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.321270 -999.00  +23.50  25.23     25   +2.60 1 1 1 1 1   888    0 20.01 -27.63 ----- 27.0 25.2 289.9 31.8 30.0 -24.7 29.1 -23.3 27.1 -23.5 28.1 -22.8
2025-11-12T09:43:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:43:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:43:31.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.321270
2025-11-12T09:43:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:43:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:43:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:43:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:43:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:43:31.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:43:25', tmtdew=24.91, humidity=19.01, cloud=0.0, wind=32.25, temperature=23.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:42:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:43:31.191 [DEBUG] [Thread-13529] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:43:31.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:43:31.286 [DEBUG] [Thread-13532] [transport.py] [_log()] starting thread (client mode): 0x17361120
2025-11-12T09:43:31.286 [DEBUG] [Thread-13532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:43:31.302 [DEBUG] [Thread-13532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:43:31.302 [INFO] [Thread-13532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:43:31.309 [DEBUG] [Thread-13532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:43:31.309 [DEBUG] [Thread-13532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] client lang: <none>
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] server lang: <none>
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] kex follows: False
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:43:31.310 [DEBUG] [Thread-13532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:43:31.311 [DEBUG] [Thread-13532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:43:31.311 [DEBUG] [Thread-13532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:43:31.311 [DEBUG] [Thread-13532] [transport.py] [_log()] Compression: none
2025-11-12T09:43:31.311 [DEBUG] [Thread-13532] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:43:31.369 [DEBUG] [Thread-13532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:43:31.369 [DEBUG] [Thread-13532] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:43:31.370 [DEBUG] [Thread-13532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:43:31.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:43:31.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:43:31.426 [DEBUG] [Thread-13532] [transport.py] [_log()] userauth is OK
2025-11-12T09:43:31.426 [DEBUG] [Thread-13532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:43:31.426 [DEBUG] [Thread-13532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:43:31.426 [DEBUG] [Thread-13532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:43:31.426 [DEBUG] [Thread-13532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:43:31.444 [INFO] [Thread-13532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:43:31.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:43:31.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:43:32.391 [DEBUG] [Thread-13532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:43:32.391 [DEBUG] [Thread-13532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:43:32.439 [DEBUG] [Thread-13532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:43:32.439 [DEBUG] [Thread-13532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:43:32.448 [DEBUG] [Thread-13532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:43:32.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:43: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-11-12T09:43:32.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-11-12T09:43:32.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:43:32.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:43:32.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:43:32.496 [DEBUG] [Thread-13532] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:43:36.969 [DEBUG] [Thread-13534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:43:47.239 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:43:47.240 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:43:52.017 [DEBUG] [Thread-13535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:44:02.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:44:02.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:44:02.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-11-12T09:44:03.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 43, 57), 24.7, 19.39, 0.0, 22.88, 23.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:44:03.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:43:57
2025-11-12T09:44:03.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:44:03.430 [DEBUG] [Thread-13536] [transport.py] [_log()] starting thread (client mode): 0x14907670
2025-11-12T09:44:03.430 [DEBUG] [Thread-13536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:44:03.450 [DEBUG] [Thread-13536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:44:03.450 [INFO] [Thread-13536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:44:03.453 [DEBUG] [Thread-13536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] client lang: <none>
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] server lang: <none>
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] kex follows: False
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] Compression: none
2025-11-12T09:44:03.454 [DEBUG] [Thread-13536] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:44:03.473 [DEBUG] [Thread-13536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:44:03.474 [DEBUG] [Thread-13536] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:44:03.475 [DEBUG] [Thread-13536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:44:03.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:44:03.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:44:03.477 [DEBUG] [Thread-13536] [transport.py] [_log()] userauth is OK
2025-11-12T09:44:03.477 [DEBUG] [Thread-13536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:44:03.477 [DEBUG] [Thread-13536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:44:03.477 [DEBUG] [Thread-13536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:44:03.478 [DEBUG] [Thread-13536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:44:03.499 [INFO] [Thread-13536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:44:03.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:44:04.113 [DEBUG] [Thread-13536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:44:04.113 [DEBUG] [Thread-13536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:44:04.114 [DEBUG] [Thread-13536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:44:04.154 [DEBUG] [Thread-13536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:44:04.154 [DEBUG] [Thread-13536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:44:04.157 [DEBUG] [Thread-13536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:44:04.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:44:04.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:44:04.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:44:04.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:44:04.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:44:04.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:44:04.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:44:04.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:44:04.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:44:04.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.321618 -999.00  +23.50  21.66     26   +2.80 1 1 1 1 1   888    0 20.03 -23.83 ----- 21.1 21.7 302.8 29.7 30.1 -25.0 29.1 -23.9 27.4 -24.2 28.2 -23.2
2025-11-12T09:44:04.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:44:04.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:44:04.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.321618
2025-11-12T09:44:04.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:44:04.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:44:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:44:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:44:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:44:04.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:43:57', tmtdew=24.7, humidity=19.39, cloud=0.0, wind=22.88, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:43:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:44:04.184 [DEBUG] [Thread-13536] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:44:04.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:44:04.279 [DEBUG] [Thread-13539] [transport.py] [_log()] starting thread (client mode): 0x14920340
2025-11-12T09:44:04.279 [DEBUG] [Thread-13539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:44:04.293 [DEBUG] [Thread-13539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:44:04.294 [INFO] [Thread-13539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:44:04.301 [DEBUG] [Thread-13539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:44:04.301 [DEBUG] [Thread-13539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:44:04.301 [DEBUG] [Thread-13539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] client lang: <none>
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] server lang: <none>
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] kex follows: False
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:44:04.302 [DEBUG] [Thread-13539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:44:04.303 [DEBUG] [Thread-13539] [transport.py] [_log()] Compression: none
2025-11-12T09:44:04.303 [DEBUG] [Thread-13539] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:44:04.369 [DEBUG] [Thread-13539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:44:04.370 [DEBUG] [Thread-13539] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:44:04.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:44:04.371 [DEBUG] [Thread-13539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:44:04.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:44:04.426 [DEBUG] [Thread-13539] [transport.py] [_log()] userauth is OK
2025-11-12T09:44:04.426 [DEBUG] [Thread-13539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:44:04.426 [DEBUG] [Thread-13539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:44:04.426 [DEBUG] [Thread-13539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:44:04.426 [DEBUG] [Thread-13539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:44:04.445 [INFO] [Thread-13539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:44:04.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:44:04.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:44:05.290 [DEBUG] [Thread-13539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:44:05.291 [DEBUG] [Thread-13539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:44:05.339 [DEBUG] [Thread-13539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:44:05.339 [DEBUG] [Thread-13539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:44:05.348 [DEBUG] [Thread-13539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:44:05.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:44:05.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-11-12T09:44:05.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-11-12T09:44:05.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:44:05.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:44:05.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:44:05.385 [DEBUG] [Thread-13539] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:44:07.052 [DEBUG] [Thread-13541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:44:22.106 [DEBUG] [Thread-13542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:44:25.851 [DEBUG] [Thread-13543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:44:35.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:44:35.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:44:35.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-11-12T09:44:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 44, 29), 24.73, 19.34, 0.0, 21.77, 23.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:44:36.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:44:29
2025-11-12T09:44:36.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:44:36.336 [DEBUG] [Thread-13544] [transport.py] [_log()] starting thread (client mode): 0x17362a10
2025-11-12T09:44:36.337 [DEBUG] [Thread-13544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:44:36.359 [DEBUG] [Thread-13544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:44:36.360 [INFO] [Thread-13544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] client lang: <none>
2025-11-12T09:44:36.363 [DEBUG] [Thread-13544] [transport.py] [_log()] server lang: <none>
2025-11-12T09:44:36.364 [DEBUG] [Thread-13544] [transport.py] [_log()] kex follows: False
2025-11-12T09:44:36.364 [DEBUG] [Thread-13544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:44:36.364 [DEBUG] [Thread-13544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:44:36.364 [DEBUG] [Thread-13544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:44:36.364 [DEBUG] [Thread-13544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:44:36.364 [DEBUG] [Thread-13544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:44:36.364 [DEBUG] [Thread-13544] [transport.py] [_log()] Compression: none
2025-11-12T09:44:36.364 [DEBUG] [Thread-13544] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:44:36.382 [DEBUG] [Thread-13544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:44:36.382 [DEBUG] [Thread-13544] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:44:36.383 [DEBUG] [Thread-13544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:44:36.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:44:36.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:44:36.385 [DEBUG] [Thread-13544] [transport.py] [_log()] userauth is OK
2025-11-12T09:44:36.385 [DEBUG] [Thread-13544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:44:36.385 [DEBUG] [Thread-13544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:44:36.385 [DEBUG] [Thread-13544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:44:36.385 [DEBUG] [Thread-13544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:44:36.409 [INFO] [Thread-13544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:44:36.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:44:37.064 [DEBUG] [Thread-13544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:44:37.064 [DEBUG] [Thread-13544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:44:37.065 [DEBUG] [Thread-13544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:44:37.106 [DEBUG] [Thread-13544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:44:37.106 [DEBUG] [Thread-13544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:44:37.109 [DEBUG] [Thread-13544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:44:37.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:44:37.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:44:37.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:44:37.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:44:37.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:44:37.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:44:37.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:44:37.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:44:37.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:44:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.321965 -999.00  +23.50  24.98     25   +2.50 1 1 1 1 1   888    0 19.96 -19.21 ----- 26.8 25.0 287.6 28.9 30.0 -25.9 29.2 -24.3 27.3 -24.1 28.2 -24.4
2025-11-12T09:44:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:44:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:44:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.321965
2025-11-12T09:44:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:44:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:44:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:44:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:44:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:44:37.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:44:29', tmtdew=24.73, humidity=19.34, cloud=0.0, wind=21.77, temperature=23.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:43:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:44:37.135 [DEBUG] [Thread-13544] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:44:37.140 [DEBUG] [Thread-13547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:44:37.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:44:37.232 [DEBUG] [Thread-13548] [transport.py] [_log()] starting thread (client mode): 0x149a5300
2025-11-12T09:44:37.233 [DEBUG] [Thread-13548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:44:37.248 [DEBUG] [Thread-13548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:44:37.248 [INFO] [Thread-13548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:44:37.255 [DEBUG] [Thread-13548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] client lang: <none>
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] server lang: <none>
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] kex follows: False
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] Compression: none
2025-11-12T09:44:37.256 [DEBUG] [Thread-13548] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:44:37.314 [DEBUG] [Thread-13548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:44:37.315 [DEBUG] [Thread-13548] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:44:37.315 [DEBUG] [Thread-13548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:44:37.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:44:37.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:44:37.374 [DEBUG] [Thread-13548] [transport.py] [_log()] userauth is OK
2025-11-12T09:44:37.374 [DEBUG] [Thread-13548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:44:37.375 [DEBUG] [Thread-13548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:44:37.375 [DEBUG] [Thread-13548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:44:37.375 [DEBUG] [Thread-13548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:44:37.393 [INFO] [Thread-13548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:44:37.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:44:37.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:44:38.227 [DEBUG] [Thread-13548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:44:38.228 [DEBUG] [Thread-13548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:44:38.275 [DEBUG] [Thread-13548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:44:38.276 [DEBUG] [Thread-13548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:44:38.285 [DEBUG] [Thread-13548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:44:38.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:44:38.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-11-12T09:44:38.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-11-12T09:44:38.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:44:38.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:44:38.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:44:38.322 [DEBUG] [Thread-13548] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:44:47.384 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:44:47.385 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:44:52.184 [DEBUG] [Thread-13550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:45:07.217 [DEBUG] [Thread-13551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:45:08.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:45:08.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:45: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-11-12T09:45:08.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 45, 1), 24.73, 19.52, 0.0, 23.5, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:45:08.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:45:01
2025-11-12T09:45:09.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:45:09.245 [DEBUG] [Thread-13552] [transport.py] [_log()] starting thread (client mode): 0x173bff10
2025-11-12T09:45:09.245 [DEBUG] [Thread-13552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:45:09.266 [DEBUG] [Thread-13552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:45:09.267 [INFO] [Thread-13552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:45:09.269 [DEBUG] [Thread-13552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:45:09.269 [DEBUG] [Thread-13552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:45:09.269 [DEBUG] [Thread-13552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:45:09.269 [DEBUG] [Thread-13552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] client lang: <none>
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] server lang: <none>
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] kex follows: False
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] Compression: none
2025-11-12T09:45:09.270 [DEBUG] [Thread-13552] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:45:09.286 [DEBUG] [Thread-13552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:45:09.287 [DEBUG] [Thread-13552] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:45:09.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:45:09.288 [DEBUG] [Thread-13552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:45:09.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:45:09.290 [DEBUG] [Thread-13552] [transport.py] [_log()] userauth is OK
2025-11-12T09:45:09.290 [DEBUG] [Thread-13552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:45:09.290 [DEBUG] [Thread-13552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:45:09.290 [DEBUG] [Thread-13552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:45:09.291 [DEBUG] [Thread-13552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:45:09.313 [INFO] [Thread-13552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:45:09.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:45:13.103 [DEBUG] [Thread-13552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:45:13.103 [DEBUG] [Thread-13552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:45:13.103 [DEBUG] [Thread-13552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:45:13.144 [DEBUG] [Thread-13552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:45:13.144 [DEBUG] [Thread-13552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:45:13.147 [DEBUG] [Thread-13552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:45:13.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:45:13.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:45:13.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:45:13.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:45:13.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:45:13.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:45:13.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:45:13.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:45:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:45:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.322659 -999.00  +22.90  22.84     25   +2.20 1 1 1 1 1   888    0 20.49 -16.75 ----- 23.8 22.8 283.8 29.3 29.9 -27.0 29.1 -24.7 27.3 -25.0 28.1 -24.8
2025-11-12T09:45:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:45:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:45:13.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.322659
2025-11-12T09:45:13.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:45:13.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:45:13.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:45:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:45:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:45:13.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:45:01', tmtdew=24.73, humidity=19.52, cloud=0.0, wind=23.5, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:44:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:45:13.230 [DEBUG] [Thread-13552] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:45:13.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:45:13.327 [DEBUG] [Thread-13555] [transport.py] [_log()] starting thread (client mode): 0x14923f40
2025-11-12T09:45:13.327 [DEBUG] [Thread-13555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:45:13.342 [DEBUG] [Thread-13555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:45:13.342 [INFO] [Thread-13555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] client lang: <none>
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] server lang: <none>
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] kex follows: False
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:45:13.350 [DEBUG] [Thread-13555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:45:13.351 [DEBUG] [Thread-13555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:45:13.351 [DEBUG] [Thread-13555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:45:13.351 [DEBUG] [Thread-13555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:45:13.351 [DEBUG] [Thread-13555] [transport.py] [_log()] Compression: none
2025-11-12T09:45:13.351 [DEBUG] [Thread-13555] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:45:13.410 [DEBUG] [Thread-13555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:45:13.411 [DEBUG] [Thread-13555] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:45:13.411 [DEBUG] [Thread-13555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:45:13.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:45:13.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:45:13.466 [DEBUG] [Thread-13555] [transport.py] [_log()] userauth is OK
2025-11-12T09:45:13.466 [DEBUG] [Thread-13555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:45:13.466 [DEBUG] [Thread-13555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:45:13.466 [DEBUG] [Thread-13555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:45:13.466 [DEBUG] [Thread-13555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:45:13.485 [INFO] [Thread-13555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:45:13.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:45:13.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:45:14.320 [DEBUG] [Thread-13555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:45:14.321 [DEBUG] [Thread-13555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:45:14.369 [DEBUG] [Thread-13555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:45:14.369 [DEBUG] [Thread-13555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:45:14.379 [DEBUG] [Thread-13555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:45:14.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:45:14.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:45:14.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-11-12T09:45:14.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:45:14.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:45:14.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:45:14.416 [DEBUG] [Thread-13555] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:45:22.257 [DEBUG] [Thread-13557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:45:25.884 [DEBUG] [Thread-13558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:45:37.317 [DEBUG] [Thread-13559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:45:44.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:45:44.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:45:44.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:45:45.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 45, 33), 25.83, 18.05, 0.0, 19.48, 24.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:45:45.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:45:33
2025-11-12T09:45:45.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:45:45.374 [DEBUG] [Thread-13560] [transport.py] [_log()] starting thread (client mode): 0x17346050
2025-11-12T09:45:45.374 [DEBUG] [Thread-13560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:45:45.395 [DEBUG] [Thread-13560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:45:45.395 [INFO] [Thread-13560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:45:45.398 [DEBUG] [Thread-13560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] client lang: <none>
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] server lang: <none>
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] kex follows: False
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:45:45.399 [DEBUG] [Thread-13560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:45:45.400 [DEBUG] [Thread-13560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:45:45.400 [DEBUG] [Thread-13560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:45:45.400 [DEBUG] [Thread-13560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:45:45.400 [DEBUG] [Thread-13560] [transport.py] [_log()] Compression: none
2025-11-12T09:45:45.400 [DEBUG] [Thread-13560] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:45:45.421 [DEBUG] [Thread-13560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:45:45.422 [DEBUG] [Thread-13560] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:45:45.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:45:45.423 [DEBUG] [Thread-13560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:45:45.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:45:45.425 [DEBUG] [Thread-13560] [transport.py] [_log()] userauth is OK
2025-11-12T09:45:45.425 [DEBUG] [Thread-13560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:45:45.425 [DEBUG] [Thread-13560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:45:45.425 [DEBUG] [Thread-13560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:45:45.425 [DEBUG] [Thread-13560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:45:45.460 [INFO] [Thread-13560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:45:45.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:45:46.092 [DEBUG] [Thread-13560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:45:46.092 [DEBUG] [Thread-13560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:45:46.092 [DEBUG] [Thread-13560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:45:46.133 [DEBUG] [Thread-13560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:45:46.133 [DEBUG] [Thread-13560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:45:46.136 [DEBUG] [Thread-13560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:45:46.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:45:46.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:45:46.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:45:46.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:45:46.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:45:46.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:45:46.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:45:46.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:45:46.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:45:46.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.323006 -999.00  +22.70  20.26     25   +2.00 1 1 1 1 1   888    0 19.76 -18.03 ----- 21.2 20.3 295.2 25.3 29.9 -26.3 29.0 -24.6 27.3 -25.2 28.1 -24.6
2025-11-12T09:45:46.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:45:46.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:45:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.323006
2025-11-12T09:45:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:45:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:45:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:45:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:45:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:45:46.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:45:33', tmtdew=25.83, humidity=18.05, cloud=0.0, wind=19.48, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:45:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:45:46.162 [DEBUG] [Thread-13560] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:45:46.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:45:46.268 [DEBUG] [Thread-13563] [transport.py] [_log()] starting thread (client mode): 0x173452a0
2025-11-12T09:45:46.269 [DEBUG] [Thread-13563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:45:46.284 [DEBUG] [Thread-13563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:45:46.284 [INFO] [Thread-13563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] client lang: <none>
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] server lang: <none>
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] kex follows: False
2025-11-12T09:45:46.292 [DEBUG] [Thread-13563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:45:46.293 [DEBUG] [Thread-13563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:45:46.293 [DEBUG] [Thread-13563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:45:46.293 [DEBUG] [Thread-13563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:45:46.293 [DEBUG] [Thread-13563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:45:46.293 [DEBUG] [Thread-13563] [transport.py] [_log()] Compression: none
2025-11-12T09:45:46.293 [DEBUG] [Thread-13563] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:45:46.350 [DEBUG] [Thread-13563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:45:46.350 [DEBUG] [Thread-13563] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:45:46.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:45:46.352 [DEBUG] [Thread-13563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:45:46.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:45:46.406 [DEBUG] [Thread-13563] [transport.py] [_log()] userauth is OK
2025-11-12T09:45:46.406 [DEBUG] [Thread-13563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:45:46.406 [DEBUG] [Thread-13563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:45:46.406 [DEBUG] [Thread-13563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:45:46.406 [DEBUG] [Thread-13563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:45:46.426 [INFO] [Thread-13563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:45:46.426 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:45:46.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:45:47.305 [DEBUG] [Thread-13563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:45:47.305 [DEBUG] [Thread-13563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:45:47.353 [DEBUG] [Thread-13563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:45:47.354 [DEBUG] [Thread-13563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:45:47.363 [DEBUG] [Thread-13563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:45:47.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:45:47.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-11-12T09:45:47.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-11-12T09:45:47.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:45:47.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:45:47.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:45:47.400 [DEBUG] [Thread-13563] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:45:47.526 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:45:47.527 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:45:52.350 [DEBUG] [Thread-13565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:46:07.411 [DEBUG] [Thread-13566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:46:17.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:46:17.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:46:17.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-11-12T09:46:18.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 46, 5), 24.65, 19.37, 0.0, 13.97, 23.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:46:18.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:46:05
2025-11-12T09:46:18.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:46:18.314 [DEBUG] [Thread-13567] [transport.py] [_log()] starting thread (client mode): 0x173987f0
2025-11-12T09:46:18.314 [DEBUG] [Thread-13567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:46:18.334 [DEBUG] [Thread-13567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:46:18.334 [INFO] [Thread-13567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] client lang: <none>
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] server lang: <none>
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] kex follows: False
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:46:18.337 [DEBUG] [Thread-13567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:46:18.338 [DEBUG] [Thread-13567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:46:18.338 [DEBUG] [Thread-13567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:46:18.338 [DEBUG] [Thread-13567] [transport.py] [_log()] Compression: none
2025-11-12T09:46:18.338 [DEBUG] [Thread-13567] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:46:18.354 [DEBUG] [Thread-13567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:46:18.354 [DEBUG] [Thread-13567] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:46:18.354 [DEBUG] [Thread-13567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:46:18.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:46:18.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:46:18.355 [DEBUG] [Thread-13567] [transport.py] [_log()] userauth is OK
2025-11-12T09:46:18.355 [DEBUG] [Thread-13567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:46:18.355 [DEBUG] [Thread-13567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:46:18.355 [DEBUG] [Thread-13567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:46:18.355 [DEBUG] [Thread-13567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:46:18.370 [INFO] [Thread-13567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:46:18.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:46:19.079 [DEBUG] [Thread-13567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:46:19.079 [DEBUG] [Thread-13567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:46:19.079 [DEBUG] [Thread-13567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:46:19.120 [DEBUG] [Thread-13567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:46:19.120 [DEBUG] [Thread-13567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:46:19.122 [DEBUG] [Thread-13567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:46:19.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:46:19.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:46:19.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:46:19.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:46:19.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:46:19.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:46:19.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.323354 -999.00  +22.50  15.36     25   +2.00 1 1 1 1 1   888    0 19.86 -20.99 ----- 14.1 15.4 287.6 26.7 29.8 -26.5 29.0 -25.1 27.4 -23.3 28.1 -24.5
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.323354
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:46:19.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:46:05', tmtdew=24.65, humidity=19.37, cloud=0.0, wind=13.97, temperature=23.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:45:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:46:19.139 [DEBUG] [Thread-13567] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:46:19.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:46:19.226 [DEBUG] [Thread-13570] [transport.py] [_log()] starting thread (client mode): 0x1737e6b0
2025-11-12T09:46:19.226 [DEBUG] [Thread-13570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:46:19.244 [DEBUG] [Thread-13570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:46:19.244 [INFO] [Thread-13570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] client lang: <none>
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] server lang: <none>
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] kex follows: False
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:46:19.251 [DEBUG] [Thread-13570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:46:19.252 [DEBUG] [Thread-13570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:46:19.252 [DEBUG] [Thread-13570] [transport.py] [_log()] Compression: none
2025-11-12T09:46:19.252 [DEBUG] [Thread-13570] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:46:19.308 [DEBUG] [Thread-13570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:46:19.308 [DEBUG] [Thread-13570] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:46:19.308 [DEBUG] [Thread-13570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:46:19.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:46:19.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:46:19.365 [DEBUG] [Thread-13570] [transport.py] [_log()] userauth is OK
2025-11-12T09:46:19.365 [DEBUG] [Thread-13570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:46:19.365 [DEBUG] [Thread-13570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:46:19.365 [DEBUG] [Thread-13570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:46:19.365 [DEBUG] [Thread-13570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:46:19.382 [INFO] [Thread-13570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:46:19.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:46:19.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:46:20.202 [DEBUG] [Thread-13570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:46:20.202 [DEBUG] [Thread-13570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:46:20.250 [DEBUG] [Thread-13570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:46:20.250 [DEBUG] [Thread-13570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:46:20.258 [DEBUG] [Thread-13570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:46:20.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:46: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-11-12T09:46:20.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-11-12T09:46:20.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:46:20.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:46:20.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:46:20.290 [DEBUG] [Thread-13570] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:46:22.441 [DEBUG] [Thread-13572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:46:25.917 [DEBUG] [Thread-13573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:46:37.482 [DEBUG] [Thread-13574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:46:47.668 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:46:47.669 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:46:50.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:46:50.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:46:50.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:46:50.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 46, 37), 24.78, 19.09, 0.0, 17.36, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:46:50.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:46:37
2025-11-12T09:46:51.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:46:51.249 [DEBUG] [Thread-13575] [transport.py] [_log()] starting thread (client mode): 0x1737c280
2025-11-12T09:46:51.250 [DEBUG] [Thread-13575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:46:51.268 [DEBUG] [Thread-13575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:46:51.268 [INFO] [Thread-13575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:46:51.271 [DEBUG] [Thread-13575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:46:51.271 [DEBUG] [Thread-13575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] client lang: <none>
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] server lang: <none>
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] kex follows: False
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] Compression: none
2025-11-12T09:46:51.272 [DEBUG] [Thread-13575] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:46:51.288 [DEBUG] [Thread-13575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:46:51.289 [DEBUG] [Thread-13575] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:46:51.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:46:51.290 [DEBUG] [Thread-13575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:46:51.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:46:51.291 [DEBUG] [Thread-13575] [transport.py] [_log()] userauth is OK
2025-11-12T09:46:51.291 [DEBUG] [Thread-13575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:46:51.291 [DEBUG] [Thread-13575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:46:51.291 [DEBUG] [Thread-13575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:46:51.291 [DEBUG] [Thread-13575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:46:51.306 [INFO] [Thread-13575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:46:51.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:46:51.958 [DEBUG] [Thread-13575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:46:51.959 [DEBUG] [Thread-13575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:46:51.959 [DEBUG] [Thread-13575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:46:51.999 [DEBUG] [Thread-13575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:46:51.999 [DEBUG] [Thread-13575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:46:52.002 [DEBUG] [Thread-13575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:46:52.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:46:52.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:46:52.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:46:52.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:46:52.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:46:52.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:46:52.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:46:52.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:46:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:46:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.323701 -999.00  +22.90  15.92     25   +2.40 1 1 1 1 1   888    0 20.16 -25.56 ----- 15.9 15.9 297.0 19.3 29.9 -25.5 29.1 -24.0 27.4 -23.9 28.1 -24.0
2025-11-12T09:46:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:46:52.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:46:52.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.323701
2025-11-12T09:46:52.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:46:52.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:46:52.028 [DEBUG] [Thread-13575] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:46:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:46:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:46:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:46:52.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:46:37', tmtdew=24.78, humidity=19.09, cloud=0.0, wind=17.36, temperature=23.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:46:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:46:52.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:46:52.125 [DEBUG] [Thread-13578] [transport.py] [_log()] starting thread (client mode): 0x1737f040
2025-11-12T09:46:52.125 [DEBUG] [Thread-13578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:46:52.145 [DEBUG] [Thread-13578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:46:52.146 [INFO] [Thread-13578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:46:52.153 [DEBUG] [Thread-13578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:46:52.153 [DEBUG] [Thread-13578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:46:52.153 [DEBUG] [Thread-13578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:46:52.153 [DEBUG] [Thread-13578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:46:52.153 [DEBUG] [Thread-13578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:46:52.153 [DEBUG] [Thread-13578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:46:52.153 [DEBUG] [Thread-13578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:46:52.153 [DEBUG] [Thread-13578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] client lang: <none>
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] server lang: <none>
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] kex follows: False
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] Compression: none
2025-11-12T09:46:52.154 [DEBUG] [Thread-13578] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:46:52.212 [DEBUG] [Thread-13578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:46:52.213 [DEBUG] [Thread-13578] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:46:52.213 [DEBUG] [Thread-13578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:46:52.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:46:52.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:46:52.271 [DEBUG] [Thread-13578] [transport.py] [_log()] userauth is OK
2025-11-12T09:46:52.271 [DEBUG] [Thread-13578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:46:52.272 [DEBUG] [Thread-13578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:46:52.272 [DEBUG] [Thread-13578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:46:52.272 [DEBUG] [Thread-13578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:46:52.295 [INFO] [Thread-13578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:46:52.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:46:52.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:46:52.515 [DEBUG] [Thread-13580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:46:53.151 [DEBUG] [Thread-13578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:46:53.151 [DEBUG] [Thread-13578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:46:53.199 [DEBUG] [Thread-13578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:46:53.199 [DEBUG] [Thread-13578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:46:53.208 [DEBUG] [Thread-13578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:46:53.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:46:53.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-11-12T09:46:53.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-11-12T09:46:53.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:46:53.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:46:53.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:46:53.242 [DEBUG] [Thread-13578] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:47:07.566 [DEBUG] [Thread-13581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:47:22.603 [DEBUG] [Thread-13582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:47:23.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:47:23.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:47:23.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-11-12T09:47:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 47, 9), 24.83, 19.04, 0.0, 16.64, 23.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:47:23.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:47:09
2025-11-12T09:47:24.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:47:24.162 [DEBUG] [Thread-13583] [transport.py] [_log()] starting thread (client mode): 0x1739a590
2025-11-12T09:47:24.162 [DEBUG] [Thread-13583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:47:24.183 [DEBUG] [Thread-13583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:47:24.183 [INFO] [Thread-13583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:47:24.186 [DEBUG] [Thread-13583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:47:24.186 [DEBUG] [Thread-13583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] client lang: <none>
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] server lang: <none>
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] kex follows: False
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] Compression: none
2025-11-12T09:47:24.187 [DEBUG] [Thread-13583] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:47:24.205 [DEBUG] [Thread-13583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:47:24.205 [DEBUG] [Thread-13583] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:47:24.206 [DEBUG] [Thread-13583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:47:24.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:47:24.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:47:24.208 [DEBUG] [Thread-13583] [transport.py] [_log()] userauth is OK
2025-11-12T09:47:24.208 [DEBUG] [Thread-13583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:47:24.208 [DEBUG] [Thread-13583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:47:24.208 [DEBUG] [Thread-13583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:47:24.208 [DEBUG] [Thread-13583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:47:24.224 [INFO] [Thread-13583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:47:24.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:47:24.951 [DEBUG] [Thread-13583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:47:24.952 [DEBUG] [Thread-13583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:47:24.952 [DEBUG] [Thread-13583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:47:24.992 [DEBUG] [Thread-13583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:47:24.993 [DEBUG] [Thread-13583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:47:24.996 [DEBUG] [Thread-13583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:47:25.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:47:25.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:47:25.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:47:25.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:47:25.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:47:25.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:47:25.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:47:25.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:47:25.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:47:25.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.324048 -999.00  +23.10  17.41     25   +2.30 1 1 1 1 1   888    0 19.68 -29.28 ----- 19.2 17.4 295.6 18.9 30.0 -26.2 29.1 -24.3 27.4 -23.9 28.2 -24.1
2025-11-12T09:47:25.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:47:25.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:47:25.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.324048
2025-11-12T09:47:25.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:47:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:47:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:47:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:47:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:47:25.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:47:09', tmtdew=24.83, humidity=19.04, cloud=0.0, wind=16.64, temperature=23.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:46:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:47:25.021 [DEBUG] [Thread-13583] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:47:25.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:47:25.117 [DEBUG] [Thread-13586] [transport.py] [_log()] starting thread (client mode): 0x17399270
2025-11-12T09:47:25.117 [DEBUG] [Thread-13586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:47:25.131 [DEBUG] [Thread-13586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:47:25.132 [INFO] [Thread-13586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] client lang: <none>
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] server lang: <none>
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] kex follows: False
2025-11-12T09:47:25.139 [DEBUG] [Thread-13586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:47:25.140 [DEBUG] [Thread-13586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:47:25.140 [DEBUG] [Thread-13586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:47:25.140 [DEBUG] [Thread-13586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:47:25.140 [DEBUG] [Thread-13586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:47:25.140 [DEBUG] [Thread-13586] [transport.py] [_log()] Compression: none
2025-11-12T09:47:25.140 [DEBUG] [Thread-13586] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:47:25.197 [DEBUG] [Thread-13586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:47:25.198 [DEBUG] [Thread-13586] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:47:25.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:47:25.199 [DEBUG] [Thread-13586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:47:25.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:47:25.253 [DEBUG] [Thread-13586] [transport.py] [_log()] userauth is OK
2025-11-12T09:47:25.254 [DEBUG] [Thread-13586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:47:25.254 [DEBUG] [Thread-13586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:47:25.254 [DEBUG] [Thread-13586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:47:25.254 [DEBUG] [Thread-13586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:47:25.273 [INFO] [Thread-13586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:47:25.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:47:25.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:47:25.949 [DEBUG] [Thread-13588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:47:26.116 [DEBUG] [Thread-13586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:47:26.117 [DEBUG] [Thread-13586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:47:26.165 [DEBUG] [Thread-13586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:47:26.165 [DEBUG] [Thread-13586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:47:26.174 [DEBUG] [Thread-13586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:47:26.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:47:26.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-11-12T09:47:26.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:47:26.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:47:26.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:47:26.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:47:26.211 [DEBUG] [Thread-13586] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:47:37.636 [DEBUG] [Thread-13589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:47:47.812 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:47:47.813 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:47:52.676 [DEBUG] [Thread-13590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:47:56.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:47:56.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:47:56.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-11-12T09:47:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 47, 41), 24.64, 19.64, 0.0, 12.74, 23.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:47:56.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:47:41
2025-11-12T09:47:56.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:47:57.136 [DEBUG] [Thread-13591] [transport.py] [_log()] starting thread (client mode): 0x1737de40
2025-11-12T09:47:57.136 [DEBUG] [Thread-13591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:47:57.156 [DEBUG] [Thread-13591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:47:57.156 [INFO] [Thread-13591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] client lang: <none>
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] server lang: <none>
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] kex follows: False
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] Compression: none
2025-11-12T09:47:57.160 [DEBUG] [Thread-13591] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:47:57.176 [DEBUG] [Thread-13591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:47:57.177 [DEBUG] [Thread-13591] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:47:57.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:47:57.178 [DEBUG] [Thread-13591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:47:57.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:47:57.180 [DEBUG] [Thread-13591] [transport.py] [_log()] userauth is OK
2025-11-12T09:47:57.180 [DEBUG] [Thread-13591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:47:57.181 [DEBUG] [Thread-13591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:47:57.181 [DEBUG] [Thread-13591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:47:57.181 [DEBUG] [Thread-13591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:47:57.206 [INFO] [Thread-13591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:47:57.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:47:57.842 [DEBUG] [Thread-13591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:47:57.843 [DEBUG] [Thread-13591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:47:57.843 [DEBUG] [Thread-13591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:47:57.883 [DEBUG] [Thread-13591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:47:57.884 [DEBUG] [Thread-13591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:47:57.887 [DEBUG] [Thread-13591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:47:57.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:47:57.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:47:57.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:47:57.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:47:57.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:47:57.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:47:57.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:47:57.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:47:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:47:57.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.324395 -999.00  +22.90  16.80     25   +2.20 1 1 1 1 1   888    0 19.82 -24.99 ----- 15.1 16.8 292.8 21.8 30.1 -25.4 29.2 -23.9 27.4 -23.1 28.3 -23.8
2025-11-12T09:47:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:47:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:47:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.324395
2025-11-12T09:47:57.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:47:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:47:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:47:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:47:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:47:57.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:47:41', tmtdew=24.64, humidity=19.64, cloud=0.0, wind=12.74, temperature=23.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:47:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:47:57.915 [DEBUG] [Thread-13591] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:47:57.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:47:58.011 [DEBUG] [Thread-13594] [transport.py] [_log()] starting thread (client mode): 0x1737e7d0
2025-11-12T09:47:58.011 [DEBUG] [Thread-13594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:47:58.026 [DEBUG] [Thread-13594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:47:58.026 [INFO] [Thread-13594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:47:58.033 [DEBUG] [Thread-13594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:47:58.033 [DEBUG] [Thread-13594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] client lang: <none>
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] server lang: <none>
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] kex follows: False
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] Compression: none
2025-11-12T09:47:58.034 [DEBUG] [Thread-13594] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:47:58.093 [DEBUG] [Thread-13594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:47:58.094 [DEBUG] [Thread-13594] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:47:58.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:47:58.095 [DEBUG] [Thread-13594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:47:58.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:47:58.153 [DEBUG] [Thread-13594] [transport.py] [_log()] userauth is OK
2025-11-12T09:47:58.153 [DEBUG] [Thread-13594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:47:58.154 [DEBUG] [Thread-13594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:47:58.154 [DEBUG] [Thread-13594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:47:58.154 [DEBUG] [Thread-13594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:47:58.173 [INFO] [Thread-13594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:47:58.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:47:58.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:47:59.007 [DEBUG] [Thread-13594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:47:59.007 [DEBUG] [Thread-13594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:47:59.055 [DEBUG] [Thread-13594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:47:59.055 [DEBUG] [Thread-13594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:47:59.064 [DEBUG] [Thread-13594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:47:59.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:47: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')
2025-11-12T09:47:59.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-11-12T09:47:59.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:47:59.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:47:59.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:47:59.098 [DEBUG] [Thread-13594] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:48:07.713 [DEBUG] [Thread-13596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:48:22.760 [DEBUG] [Thread-13597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:48:25.987 [DEBUG] [Thread-13598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:48:29.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:48:29.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:48:29.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-11-12T09:48:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 48, 13), 24.74, 19.52, 0.0, 15.3, 23.6, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:48:29.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:48:13
2025-11-12T09:48:29.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:48:30.028 [DEBUG] [Thread-13599] [transport.py] [_log()] starting thread (client mode): 0x1737e050
2025-11-12T09:48:30.028 [DEBUG] [Thread-13599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:48:30.041 [DEBUG] [Thread-13599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:48:30.042 [INFO] [Thread-13599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:48:30.042 [DEBUG] [Thread-13599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] client lang: <none>
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] server lang: <none>
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] kex follows: False
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] Compression: none
2025-11-12T09:48:30.043 [DEBUG] [Thread-13599] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:48:30.051 [DEBUG] [Thread-13599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:48:30.051 [DEBUG] [Thread-13599] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:48:30.051 [DEBUG] [Thread-13599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:48:30.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:48:30.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:48:30.052 [DEBUG] [Thread-13599] [transport.py] [_log()] userauth is OK
2025-11-12T09:48:30.052 [DEBUG] [Thread-13599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:48:30.052 [DEBUG] [Thread-13599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:48:30.052 [DEBUG] [Thread-13599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:48:30.052 [DEBUG] [Thread-13599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:48:30.065 [INFO] [Thread-13599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:48:30.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:48:30.730 [DEBUG] [Thread-13599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:48:30.730 [DEBUG] [Thread-13599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:48:30.730 [DEBUG] [Thread-13599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:48:30.771 [DEBUG] [Thread-13599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:48:30.771 [DEBUG] [Thread-13599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:48:30.774 [DEBUG] [Thread-13599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:48:30.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:48:30.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:48:30.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:48:30.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:48:30.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:48:30.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:48:30.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:48:30.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:48:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:48:30.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.324743 -999.00  +22.90  15.76     26   +2.30 1 1 1 1 1   888    0 20.11 -19.16 ----- 16.0 15.8 292.0 21.6 30.2 -25.3 29.3 -24.1 27.6 -22.6 28.4 -23.8
2025-11-12T09:48:30.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:48:30.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:48:30.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.324743
2025-11-12T09:48:30.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:48:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:48:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:48:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:48:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:48:30.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:48:13', tmtdew=24.74, humidity=19.52, cloud=0.0, wind=15.3, temperature=23.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:47:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:48:30.801 [DEBUG] [Thread-13599] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:48:30.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:48:30.893 [DEBUG] [Thread-13602] [transport.py] [_log()] starting thread (client mode): 0x1737efb0
2025-11-12T09:48:30.894 [DEBUG] [Thread-13602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:48:30.908 [DEBUG] [Thread-13602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:48:30.908 [INFO] [Thread-13602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:48:30.916 [DEBUG] [Thread-13602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:48:30.916 [DEBUG] [Thread-13602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:48:30.916 [DEBUG] [Thread-13602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:48:30.916 [DEBUG] [Thread-13602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:48:30.916 [DEBUG] [Thread-13602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:48:30.916 [DEBUG] [Thread-13602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] client lang: <none>
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] server lang: <none>
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] kex follows: False
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] Compression: none
2025-11-12T09:48:30.917 [DEBUG] [Thread-13602] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:48:30.977 [DEBUG] [Thread-13602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:48:30.978 [DEBUG] [Thread-13602] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:48:30.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:48:30.979 [DEBUG] [Thread-13602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:48:30.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:48:31.037 [DEBUG] [Thread-13602] [transport.py] [_log()] userauth is OK
2025-11-12T09:48:31.038 [DEBUG] [Thread-13602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:48:31.038 [DEBUG] [Thread-13602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:48:31.038 [DEBUG] [Thread-13602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:48:31.038 [DEBUG] [Thread-13602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:48:31.057 [INFO] [Thread-13602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:48:31.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:48:31.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:48:31.973 [DEBUG] [Thread-13602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:48:31.973 [DEBUG] [Thread-13602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:48:32.021 [DEBUG] [Thread-13602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:48:32.022 [DEBUG] [Thread-13602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:48:32.031 [DEBUG] [Thread-13602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:48:32.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:48:32.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-11-12T09:48:32.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T09:48:32.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:48:32.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:48:32.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:48:32.067 [DEBUG] [Thread-13602] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:48:37.796 [DEBUG] [Thread-13604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:48:47.953 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:48:47.954 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:48:52.848 [DEBUG] [Thread-13605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:49:02.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:49:02.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:49:02.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-11-12T09:49:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 48, 45), 25.18, 18.69, 0.0, 20.31, 23.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:49:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:48:45
2025-11-12T09:49:02.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:49:02.994 [DEBUG] [Thread-13606] [transport.py] [_log()] starting thread (client mode): 0x173bfc70
2025-11-12T09:49:02.994 [DEBUG] [Thread-13606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:49:03.014 [DEBUG] [Thread-13606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:49:03.015 [INFO] [Thread-13606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] client lang: <none>
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] server lang: <none>
2025-11-12T09:49:03.017 [DEBUG] [Thread-13606] [transport.py] [_log()] kex follows: False
2025-11-12T09:49:03.018 [DEBUG] [Thread-13606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:49:03.018 [DEBUG] [Thread-13606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:49:03.018 [DEBUG] [Thread-13606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:49:03.018 [DEBUG] [Thread-13606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:49:03.018 [DEBUG] [Thread-13606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:49:03.018 [DEBUG] [Thread-13606] [transport.py] [_log()] Compression: none
2025-11-12T09:49:03.018 [DEBUG] [Thread-13606] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:49:03.035 [DEBUG] [Thread-13606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:49:03.035 [DEBUG] [Thread-13606] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:49:03.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:49:03.036 [DEBUG] [Thread-13606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:49:03.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:49:03.038 [DEBUG] [Thread-13606] [transport.py] [_log()] userauth is OK
2025-11-12T09:49:03.038 [DEBUG] [Thread-13606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:49:03.038 [DEBUG] [Thread-13606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:49:03.038 [DEBUG] [Thread-13606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:49:03.038 [DEBUG] [Thread-13606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:49:03.063 [INFO] [Thread-13606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:49:03.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:49:03.701 [DEBUG] [Thread-13606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:49:03.701 [DEBUG] [Thread-13606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:49:03.702 [DEBUG] [Thread-13606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:49:03.743 [DEBUG] [Thread-13606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:49:03.743 [DEBUG] [Thread-13606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:49:03.747 [DEBUG] [Thread-13606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:49:03.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:49:03.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:49:03.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:49:03.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:49:03.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:49:03.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:49:03.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:49:03.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:49:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:49:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.325090 -999.00  +23.00  12.79     26   +2.50 1 1 1 1 1   888    0 20.24 -14.87 ----- 9.9 12.8 290.8 17.0 30.2 -25.4 29.3 -24.2 27.6 -23.8 28.4 -23.7
2025-11-12T09:49:03.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:49:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:49:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.325090
2025-11-12T09:49:03.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:49:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:49:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:49:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:49:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:49:03.773 [DEBUG] [Thread-13606] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:49:03.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:48:45', tmtdew=25.18, humidity=18.69, cloud=0.0, wind=20.31, temperature=23.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:48:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:49:03.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:49:03.869 [DEBUG] [Thread-13609] [transport.py] [_log()] starting thread (client mode): 0x173bf760
2025-11-12T09:49:03.869 [DEBUG] [Thread-13609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:49:03.884 [DEBUG] [Thread-13609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:49:03.884 [INFO] [Thread-13609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:49:03.892 [DEBUG] [Thread-13609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:49:03.892 [DEBUG] [Thread-13609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:49:03.892 [DEBUG] [Thread-13609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:49:03.892 [DEBUG] [Thread-13609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:49:03.892 [DEBUG] [Thread-13609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:49:03.892 [DEBUG] [Thread-13609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:49:03.893 [DEBUG] [Thread-13609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:49:03.893 [DEBUG] [Thread-13609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:49:03.893 [DEBUG] [Thread-13609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:49:03.893 [DEBUG] [Thread-13609] [transport.py] [_log()] client lang: <none>
2025-11-12T09:49:03.893 [DEBUG] [Thread-13609] [transport.py] [_log()] server lang: <none>
2025-11-12T09:49:03.893 [DEBUG] [Thread-13609] [transport.py] [_log()] kex follows: False
2025-11-12T09:49:03.893 [DEBUG] [Thread-13609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:49:03.893 [DEBUG] [Thread-13609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:49:03.894 [DEBUG] [Thread-13609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:49:03.894 [DEBUG] [Thread-13609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:49:03.894 [DEBUG] [Thread-13609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:49:03.894 [DEBUG] [Thread-13609] [transport.py] [_log()] Compression: none
2025-11-12T09:49:03.894 [DEBUG] [Thread-13609] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:49:03.950 [DEBUG] [Thread-13609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:49:03.951 [DEBUG] [Thread-13609] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:49:03.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:49:03.953 [DEBUG] [Thread-13609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:49:03.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:49:04.009 [DEBUG] [Thread-13609] [transport.py] [_log()] userauth is OK
2025-11-12T09:49:04.009 [DEBUG] [Thread-13609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:49:04.009 [DEBUG] [Thread-13609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:49:04.009 [DEBUG] [Thread-13609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:49:04.009 [DEBUG] [Thread-13609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:49:04.028 [INFO] [Thread-13609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:49:04.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:49:04.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:49:04.880 [DEBUG] [Thread-13609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:49:04.880 [DEBUG] [Thread-13609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:49:04.929 [DEBUG] [Thread-13609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:49:04.929 [DEBUG] [Thread-13609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:49:04.938 [DEBUG] [Thread-13609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:49:04.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:49:04.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-11-12T09:49:04.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-11-12T09:49:04.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:49:04.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:49:04.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:49:04.975 [DEBUG] [Thread-13609] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:49:07.879 [DEBUG] [Thread-13611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:49:22.930 [DEBUG] [Thread-13612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:49:26.021 [DEBUG] [Thread-13613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:49:34.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:49:34.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:49:34.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-11-12T09:49:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 49, 17), 25.13, 18.74, 0.0, 18.53, 23.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:49:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:49:17
2025-11-12T09:49:35.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:49:35.914 [DEBUG] [Thread-13614] [transport.py] [_log()] starting thread (client mode): 0x17399f30
2025-11-12T09:49:35.914 [DEBUG] [Thread-13614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:49:35.924 [DEBUG] [Thread-13614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:49:35.924 [INFO] [Thread-13614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] client lang: <none>
2025-11-12T09:49:35.925 [DEBUG] [Thread-13614] [transport.py] [_log()] server lang: <none>
2025-11-12T09:49:35.926 [DEBUG] [Thread-13614] [transport.py] [_log()] kex follows: False
2025-11-12T09:49:35.926 [DEBUG] [Thread-13614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:49:35.926 [DEBUG] [Thread-13614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:49:35.926 [DEBUG] [Thread-13614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:49:35.926 [DEBUG] [Thread-13614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:49:35.926 [DEBUG] [Thread-13614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:49:35.926 [DEBUG] [Thread-13614] [transport.py] [_log()] Compression: none
2025-11-12T09:49:35.926 [DEBUG] [Thread-13614] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:49:35.938 [DEBUG] [Thread-13614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:49:35.938 [DEBUG] [Thread-13614] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:49:35.938 [DEBUG] [Thread-13614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:49:35.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:49:35.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:49:35.939 [DEBUG] [Thread-13614] [transport.py] [_log()] userauth is OK
2025-11-12T09:49:35.939 [DEBUG] [Thread-13614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:49:35.939 [DEBUG] [Thread-13614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:49:35.939 [DEBUG] [Thread-13614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:49:35.939 [DEBUG] [Thread-13614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:49:35.948 [INFO] [Thread-13614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:49:35.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:49:36.505 [DEBUG] [Thread-13614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:49:36.506 [DEBUG] [Thread-13614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:49:36.506 [DEBUG] [Thread-13614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:49:36.547 [DEBUG] [Thread-13614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:49:36.547 [DEBUG] [Thread-13614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:49:36.550 [DEBUG] [Thread-13614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:49:36.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:49:36.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:49:36.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:49:36.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:49:36.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:49:36.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:49:36.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:49:36.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:49:36.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:49:36.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.325784 -999.00  +23.50  15.79     24   +2.00 1 1 1 1 1   888    0 20.75 -3.13 ----- 14.7 15.8 283.2 22.7 30.2 -26.5 29.4 -24.3 27.5 -23.1 28.4 -24.4
2025-11-12T09:49:36.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:49:36.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:49:36.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.325784
2025-11-12T09:49:36.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:49:36.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:49:36.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:49:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:49:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:49:36.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:49:17', tmtdew=25.13, humidity=18.74, cloud=0.0, wind=18.53, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:49:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:49:36.579 [DEBUG] [Thread-13614] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:49:36.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:49:36.674 [DEBUG] [Thread-13617] [transport.py] [_log()] starting thread (client mode): 0x1737e230
2025-11-12T09:49:36.674 [DEBUG] [Thread-13617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:49:36.689 [DEBUG] [Thread-13617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:49:36.689 [INFO] [Thread-13617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:49:36.696 [DEBUG] [Thread-13617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] client lang: <none>
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] server lang: <none>
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] kex follows: False
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] Compression: none
2025-11-12T09:49:36.697 [DEBUG] [Thread-13617] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:49:36.757 [DEBUG] [Thread-13617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:49:36.758 [DEBUG] [Thread-13617] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:49:36.758 [DEBUG] [Thread-13617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:49:36.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:49:36.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:49:36.817 [DEBUG] [Thread-13617] [transport.py] [_log()] userauth is OK
2025-11-12T09:49:36.817 [DEBUG] [Thread-13617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:49:36.818 [DEBUG] [Thread-13617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:49:36.818 [DEBUG] [Thread-13617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:49:36.818 [DEBUG] [Thread-13617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:49:36.838 [INFO] [Thread-13617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:49:36.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:49:36.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:49:37.697 [DEBUG] [Thread-13617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:49:37.697 [DEBUG] [Thread-13617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:49:37.745 [DEBUG] [Thread-13617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:49:37.746 [DEBUG] [Thread-13617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:49:37.755 [DEBUG] [Thread-13617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:49:37.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:49:37.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-11-12T09:49:37.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-11-12T09:49:37.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:49:37.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:49:37.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:49:37.791 [DEBUG] [Thread-13617] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:49:37.964 [DEBUG] [Thread-13619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:49:48.095 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:49:48.096 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:49:53.020 [DEBUG] [Thread-13620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:50:07.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:50:07.806 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:50:07.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-11-12T09:50:08.055 [DEBUG] [Thread-13621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:50:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 49, 49), 25.28, 18.47, 0.0, 20.77, 23.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:50:08.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:49:49
2025-11-12T09:50:08.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:50:08.709 [DEBUG] [Thread-13622] [transport.py] [_log()] starting thread (client mode): 0x1737fdf0
2025-11-12T09:50:08.709 [DEBUG] [Thread-13622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:50:08.724 [DEBUG] [Thread-13622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:50:08.725 [INFO] [Thread-13622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] client lang: <none>
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] server lang: <none>
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] kex follows: False
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:50:08.728 [DEBUG] [Thread-13622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:50:08.729 [DEBUG] [Thread-13622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:50:08.729 [DEBUG] [Thread-13622] [transport.py] [_log()] Compression: none
2025-11-12T09:50:08.729 [DEBUG] [Thread-13622] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:50:08.748 [DEBUG] [Thread-13622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:50:08.749 [DEBUG] [Thread-13622] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:50:08.749 [DEBUG] [Thread-13622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:50:08.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:50:08.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:50:08.751 [DEBUG] [Thread-13622] [transport.py] [_log()] userauth is OK
2025-11-12T09:50:08.752 [DEBUG] [Thread-13622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:50:08.752 [DEBUG] [Thread-13622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:50:08.752 [DEBUG] [Thread-13622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:50:08.752 [DEBUG] [Thread-13622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:50:08.777 [INFO] [Thread-13622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:50:08.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:50:10.982 [DEBUG] [Thread-13622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:50:10.982 [DEBUG] [Thread-13622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:50:10.982 [DEBUG] [Thread-13622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:50:11.023 [DEBUG] [Thread-13622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:50:11.023 [DEBUG] [Thread-13622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:50:11.025 [DEBUG] [Thread-13622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:50:11.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:50:11.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:50:11.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:50:11.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:50:11.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:50:11.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:50:11.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:50:11.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:50:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:50:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.326131 -999.00  +23.50  16.74     24   +1.80 1 1 1 1 1   888    0 20.87 5.58 ----- 18.3 16.7 281.0 22.4 30.1 -27.4 29.4 -23.9 27.7 -23.8 28.4 -25.0
2025-11-12T09:50:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:50:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:50:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.326131
2025-11-12T09:50:11.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:50:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:50:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:50:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:50:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:50:11.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:49:49', tmtdew=25.28, humidity=18.47, cloud=0.0, wind=20.77, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:49:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:50:11.046 [DEBUG] [Thread-13622] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:50:11.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:50:11.132 [DEBUG] [Thread-13625] [transport.py] [_log()] starting thread (client mode): 0x1737f7c0
2025-11-12T09:50:11.132 [DEBUG] [Thread-13625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:50:11.148 [DEBUG] [Thread-13625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:50:11.148 [INFO] [Thread-13625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] client lang: <none>
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] server lang: <none>
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] kex follows: False
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] Compression: none
2025-11-12T09:50:11.156 [DEBUG] [Thread-13625] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:50:11.211 [DEBUG] [Thread-13625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:50:11.211 [DEBUG] [Thread-13625] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:50:11.211 [DEBUG] [Thread-13625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:50:11.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:50:11.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:50:11.273 [DEBUG] [Thread-13625] [transport.py] [_log()] userauth is OK
2025-11-12T09:50:11.273 [DEBUG] [Thread-13625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:50:11.273 [DEBUG] [Thread-13625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:50:11.273 [DEBUG] [Thread-13625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:50:11.273 [DEBUG] [Thread-13625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:50:11.290 [INFO] [Thread-13625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:50:11.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:50:11.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:50:12.127 [DEBUG] [Thread-13625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:50:12.127 [DEBUG] [Thread-13625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:50:12.175 [DEBUG] [Thread-13625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:50:12.175 [DEBUG] [Thread-13625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:50:12.183 [DEBUG] [Thread-13625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:50:12.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:50:12.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-11-12T09:50:12.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-11-12T09:50:12.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:50:12.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:50:12.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:50:12.215 [DEBUG] [Thread-13625] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:50:23.083 [DEBUG] [Thread-13627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:50:26.056 [DEBUG] [Thread-13628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:50:38.136 [DEBUG] [Thread-13629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:50:42.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:50:42.237 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:50:42.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-11-12T09:50:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 50, 21), 25.84, 17.81, 0.0, 24.1, 23.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:50:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:50:21
2025-11-12T09:50:43.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:50:43.148 [DEBUG] [Thread-13630] [transport.py] [_log()] starting thread (client mode): 0x17399f30
2025-11-12T09:50:43.148 [DEBUG] [Thread-13630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:50:43.169 [DEBUG] [Thread-13630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:50:43.169 [INFO] [Thread-13630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] client lang: <none>
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] server lang: <none>
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] kex follows: False
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] Compression: none
2025-11-12T09:50:43.173 [DEBUG] [Thread-13630] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:50:43.191 [DEBUG] [Thread-13630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:50:43.192 [DEBUG] [Thread-13630] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:50:43.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:50:43.193 [DEBUG] [Thread-13630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:50:43.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:50:43.195 [DEBUG] [Thread-13630] [transport.py] [_log()] userauth is OK
2025-11-12T09:50:43.196 [DEBUG] [Thread-13630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:50:43.196 [DEBUG] [Thread-13630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:50:43.196 [DEBUG] [Thread-13630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:50:43.196 [DEBUG] [Thread-13630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:50:43.222 [INFO] [Thread-13630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:50:43.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:50:43.875 [DEBUG] [Thread-13630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:50:43.875 [DEBUG] [Thread-13630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:50:43.876 [DEBUG] [Thread-13630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:50:43.917 [DEBUG] [Thread-13630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:50:43.917 [DEBUG] [Thread-13630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:50:43.920 [DEBUG] [Thread-13630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:50:43.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:50:43.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:50:43.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:50:43.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:50:43.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:50:43.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:50:43.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:50:43.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:50:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:50:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.326478 -999.00  +23.40  22.84     24   +1.70 1 1 1 1 1   888    0 21.60 16.33 ----- 21.4 22.8 266.0 26.0 30.2 -25.8 29.3 -24.8 27.7 -27.9 28.4 -25.0
2025-11-12T09:50:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:50:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:50:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.326478
2025-11-12T09:50:43.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:50:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:50:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:50:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:50:43.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:50:43.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:50:21', tmtdew=25.84, humidity=17.81, cloud=0.0, wind=24.1, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:50:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:50:43.948 [DEBUG] [Thread-13630] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:50:44.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:50:48.237 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:50:48.238 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:50:53.169 [DEBUG] [Thread-13633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:51:08.216 [DEBUG] [Thread-13634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:51:23.257 [DEBUG] [Thread-13635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:51:26.085 [DEBUG] [Thread-13636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:51:38.290 [DEBUG] [Thread-13637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:51:48.379 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:51:48.380 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:51:53.327 [DEBUG] [Thread-13638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:52:08.361 [DEBUG] [Thread-13639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:52:23.394 [DEBUG] [Thread-13640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:52:26.133 [DEBUG] [Thread-13641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:52:38.434 [DEBUG] [Thread-13642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:52:48.521 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:52:48.522 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:52:53.470 [DEBUG] [Thread-13643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:52:57.787 [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-11-12T09:53:08.509 [DEBUG] [Thread-13644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:53:23.539 [DEBUG] [Thread-13645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:53:26.161 [DEBUG] [Thread-13646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:53:27.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:53:27.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:53:27.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:53:28.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 53, 1), 25.92, 17.93, 0.0, 17.89, 24.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:53:28.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:53:01
2025-11-12T09:53:28.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:53:28.755 [DEBUG] [Thread-13647] [transport.py] [_log()] starting thread (client mode): 0x173e9600
2025-11-12T09:53:28.755 [DEBUG] [Thread-13647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:53:28.776 [DEBUG] [Thread-13647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:53:28.776 [INFO] [Thread-13647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] client lang: <none>
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] server lang: <none>
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] kex follows: False
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] Compression: none
2025-11-12T09:53:28.779 [DEBUG] [Thread-13647] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:53:28.796 [DEBUG] [Thread-13647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:53:28.797 [DEBUG] [Thread-13647] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:53:28.797 [DEBUG] [Thread-13647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:53:28.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:53:28.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:53:28.841 [DEBUG] [Thread-13647] [transport.py] [_log()] userauth is OK
2025-11-12T09:53:28.841 [DEBUG] [Thread-13647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:53:28.841 [DEBUG] [Thread-13647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:53:28.841 [DEBUG] [Thread-13647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:53:28.841 [DEBUG] [Thread-13647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:53:28.861 [INFO] [Thread-13647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:53:28.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:53:29.459 [DEBUG] [Thread-13647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:53:29.459 [DEBUG] [Thread-13647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:53:29.459 [DEBUG] [Thread-13647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:53:29.500 [DEBUG] [Thread-13647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:53:29.500 [DEBUG] [Thread-13647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:53:29.502 [DEBUG] [Thread-13647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:53:29.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:53:29.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:53:29.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:53:29.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:53:29.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:53:29.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:53:29.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:53:29.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:53:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:53:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.328562 -999.00  +23.50  10.10     24   +2.20 1 1 1 1 1   888    0 22.43 45.29 ----- 17.4 10.1 277.8 16.9 30.1 -26.7 29.4 -25.0 27.7 -23.9 28.3 -25.0
2025-11-12T09:53:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:53:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:53:29.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.328562
2025-11-12T09:53:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:53:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:53:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:53:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:53:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:53:29.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:53:01', tmtdew=25.92, humidity=17.93, cloud=0.0, wind=17.89, temperature=24.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:53:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:53:29.526 [DEBUG] [Thread-13647] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:53:29.609 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:53:29.622 [DEBUG] [Thread-13650] [transport.py] [_log()] starting thread (client mode): 0x173ea440
2025-11-12T09:53:29.622 [DEBUG] [Thread-13650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:53:29.640 [DEBUG] [Thread-13650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:53:29.640 [INFO] [Thread-13650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:53:29.647 [DEBUG] [Thread-13650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] client lang: <none>
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] server lang: <none>
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] kex follows: False
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:53:29.648 [DEBUG] [Thread-13650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:53:29.649 [DEBUG] [Thread-13650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:53:29.649 [DEBUG] [Thread-13650] [transport.py] [_log()] Compression: none
2025-11-12T09:53:29.649 [DEBUG] [Thread-13650] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:53:29.708 [DEBUG] [Thread-13650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:53:29.709 [DEBUG] [Thread-13650] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:53:29.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:53:29.710 [DEBUG] [Thread-13650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:53:29.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:53:29.773 [DEBUG] [Thread-13650] [transport.py] [_log()] userauth is OK
2025-11-12T09:53:29.773 [DEBUG] [Thread-13650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:53:29.773 [DEBUG] [Thread-13650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:53:29.773 [DEBUG] [Thread-13650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:53:29.773 [DEBUG] [Thread-13650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:53:29.793 [INFO] [Thread-13650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:53:29.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:53:29.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:53:30.655 [DEBUG] [Thread-13650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:53:30.656 [DEBUG] [Thread-13650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:53:30.703 [DEBUG] [Thread-13650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:53:30.704 [DEBUG] [Thread-13650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:53:30.713 [DEBUG] [Thread-13650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:53:30.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:53:30.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-11-12T09:53:30.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-11-12T09:53:30.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:53:30.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:53:30.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:53:30.770 [DEBUG] [Thread-13650] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:53:38.570 [DEBUG] [Thread-13652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:53:48.663 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:53:48.665 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:53:53.625 [DEBUG] [Thread-13653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:54:00.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:54:00.792 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:54:00.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-11-12T09:54:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 53, 33), 25.82, 18.04, 0.0, 18.03, 24.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:54:01.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:53:33
2025-11-12T09:54:01.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:54:01.775 [DEBUG] [Thread-13654] [transport.py] [_log()] starting thread (client mode): 0x173ea320
2025-11-12T09:54:01.775 [DEBUG] [Thread-13654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:54:01.796 [DEBUG] [Thread-13654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:54:01.796 [INFO] [Thread-13654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] client lang: <none>
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] server lang: <none>
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] kex follows: False
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] Compression: none
2025-11-12T09:54:01.799 [DEBUG] [Thread-13654] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:54:01.815 [DEBUG] [Thread-13654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:54:01.815 [DEBUG] [Thread-13654] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:54:01.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:54:01.815 [DEBUG] [Thread-13654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:54:01.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:54:01.816 [DEBUG] [Thread-13654] [transport.py] [_log()] userauth is OK
2025-11-12T09:54:01.816 [DEBUG] [Thread-13654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:54:01.816 [DEBUG] [Thread-13654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:54:01.816 [DEBUG] [Thread-13654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:54:01.816 [DEBUG] [Thread-13654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:54:01.829 [INFO] [Thread-13654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:54:01.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:54:02.491 [DEBUG] [Thread-13654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:54:02.491 [DEBUG] [Thread-13654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:54:02.491 [DEBUG] [Thread-13654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:54:02.532 [DEBUG] [Thread-13654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:54:02.532 [DEBUG] [Thread-13654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:54:02.534 [DEBUG] [Thread-13654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:54:02.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:54:02.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:54:02.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:54:02.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:54:02.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:54:02.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:54:02.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:54:02.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.328909 -999.00  +23.00  24.08     24   +1.80 1 1 1 1 1   888    0 21.89 44.13 ----- 25.4 24.1 256.2 31.9 29.7 -30.0 29.1 -27.3 27.5 -29.7 28.0 -27.6
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.328909
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:54:02.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:53:33', tmtdew=25.82, humidity=18.04, cloud=0.0, wind=18.03, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:53:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:54:02.553 [DEBUG] [Thread-13654] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:54:02.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:54:02.638 [DEBUG] [Thread-13657] [transport.py] [_log()] starting thread (client mode): 0x17398ee0
2025-11-12T09:54:02.638 [DEBUG] [Thread-13657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:54:02.653 [DEBUG] [Thread-13657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:54:02.653 [INFO] [Thread-13657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:54:02.660 [DEBUG] [Thread-13657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] client lang: <none>
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] server lang: <none>
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] kex follows: False
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] Compression: none
2025-11-12T09:54:02.661 [DEBUG] [Thread-13657] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:54:02.722 [DEBUG] [Thread-13657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:54:02.722 [DEBUG] [Thread-13657] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:54:02.723 [DEBUG] [Thread-13657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:54:02.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:54:02.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:54:02.780 [DEBUG] [Thread-13657] [transport.py] [_log()] userauth is OK
2025-11-12T09:54:02.780 [DEBUG] [Thread-13657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:54:02.780 [DEBUG] [Thread-13657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:54:02.780 [DEBUG] [Thread-13657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:54:02.780 [DEBUG] [Thread-13657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:54:02.794 [INFO] [Thread-13657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:54:02.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:54:02.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:54:03.660 [DEBUG] [Thread-13657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:54:03.660 [DEBUG] [Thread-13657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:54:03.708 [DEBUG] [Thread-13657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:54:03.708 [DEBUG] [Thread-13657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:54:03.716 [DEBUG] [Thread-13657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:54:03.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:54:03.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-11-12T09:54:03.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-11-12T09:54:03.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:54:03.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:54:03.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:54:03.748 [DEBUG] [Thread-13657] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:54:08.669 [DEBUG] [Thread-13659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:54:23.725 [DEBUG] [Thread-13660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:54:26.194 [DEBUG] [Thread-13661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:54:33.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:54:33.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:54: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-11-12T09:54:34.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 54, 5), 25.67, 18.21, 0.0, 17.22, 23.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:54:34.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:54:05
2025-11-12T09:54:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:54:34.691 [DEBUG] [Thread-13662] [transport.py] [_log()] starting thread (client mode): 0x14922f20
2025-11-12T09:54:34.691 [DEBUG] [Thread-13662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:54:34.710 [DEBUG] [Thread-13662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:54:34.711 [INFO] [Thread-13662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:54:34.712 [DEBUG] [Thread-13662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] client lang: <none>
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] server lang: <none>
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] kex follows: False
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] Compression: none
2025-11-12T09:54:34.713 [DEBUG] [Thread-13662] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:54:34.731 [DEBUG] [Thread-13662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:54:34.732 [DEBUG] [Thread-13662] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:54:34.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:54:34.734 [DEBUG] [Thread-13662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:54:34.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:54:34.736 [DEBUG] [Thread-13662] [transport.py] [_log()] userauth is OK
2025-11-12T09:54:34.736 [DEBUG] [Thread-13662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:54:34.736 [DEBUG] [Thread-13662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:54:34.736 [DEBUG] [Thread-13662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:54:34.737 [DEBUG] [Thread-13662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:54:34.766 [INFO] [Thread-13662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:54:34.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:54:35.431 [DEBUG] [Thread-13662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:54:35.431 [DEBUG] [Thread-13662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:54:35.432 [DEBUG] [Thread-13662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:54:35.471 [DEBUG] [Thread-13662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:54:35.472 [DEBUG] [Thread-13662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:54:35.475 [DEBUG] [Thread-13662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:54:35.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:54:35.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:54:35.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:54:35.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:54:35.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:54:35.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:54:35.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:54:35.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:54:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:54:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.329256 -999.00  +22.80  23.91     25   +1.90 1 1 1 1 1   888    0 21.86 43.24 ----- 22.7 23.9 277.6 30.9 29.5 -28.3 28.9 -26.2 27.2 -27.0 27.9 -26.9
2025-11-12T09:54:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:54:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:54:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.329256
2025-11-12T09:54:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:54:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:54:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:54:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:54:35.501 [DEBUG] [Thread-13662] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:54:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:54:35.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:54:05', tmtdew=25.67, humidity=18.21, cloud=0.0, wind=17.22, temperature=23.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:54:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:54:35.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:54:35.597 [DEBUG] [Thread-13665] [transport.py] [_log()] starting thread (client mode): 0x1737cc10
2025-11-12T09:54:35.597 [DEBUG] [Thread-13665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:54:35.614 [DEBUG] [Thread-13665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:54:35.614 [INFO] [Thread-13665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:54:35.622 [DEBUG] [Thread-13665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] client lang: <none>
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] server lang: <none>
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] kex follows: False
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:54:35.623 [DEBUG] [Thread-13665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:54:35.624 [DEBUG] [Thread-13665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:54:35.624 [DEBUG] [Thread-13665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:54:35.624 [DEBUG] [Thread-13665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:54:35.624 [DEBUG] [Thread-13665] [transport.py] [_log()] Compression: none
2025-11-12T09:54:35.624 [DEBUG] [Thread-13665] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:54:35.691 [DEBUG] [Thread-13665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:54:35.691 [DEBUG] [Thread-13665] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:54:35.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:54:35.692 [DEBUG] [Thread-13665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:54:35.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:54:35.754 [DEBUG] [Thread-13665] [transport.py] [_log()] userauth is OK
2025-11-12T09:54:35.755 [DEBUG] [Thread-13665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:54:35.755 [DEBUG] [Thread-13665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:54:35.755 [DEBUG] [Thread-13665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:54:35.755 [DEBUG] [Thread-13665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:54:35.777 [INFO] [Thread-13665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:54:35.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:54:35.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:54:36.645 [DEBUG] [Thread-13665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:54:36.646 [DEBUG] [Thread-13665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:54:36.693 [DEBUG] [Thread-13665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:54:36.693 [DEBUG] [Thread-13665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:54:36.702 [DEBUG] [Thread-13665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:54:36.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:54:36.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-11-12T09:54:36.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-11-12T09:54:36.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:54:36.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:54:36.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:54:36.738 [DEBUG] [Thread-13665] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:54:38.759 [DEBUG] [Thread-13667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:54:48.808 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:54:48.809 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:54:53.799 [DEBUG] [Thread-13668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:55:06.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:55:06.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:55:06.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-11-12T09:55:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 54, 37), 25.58, 17.93, 0.0, 18.9, 23.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:55:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:54:37
2025-11-12T09:55:07.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:55:07.701 [DEBUG] [Thread-13669] [transport.py] [_log()] starting thread (client mode): 0x1739be50
2025-11-12T09:55:07.702 [DEBUG] [Thread-13669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:55:07.722 [DEBUG] [Thread-13669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:55:07.722 [INFO] [Thread-13669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:55:07.725 [DEBUG] [Thread-13669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] client lang: <none>
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] server lang: <none>
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] kex follows: False
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] Compression: none
2025-11-12T09:55:07.726 [DEBUG] [Thread-13669] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:55:07.743 [DEBUG] [Thread-13669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:55:07.743 [DEBUG] [Thread-13669] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:55:07.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:55:07.744 [DEBUG] [Thread-13669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:55:07.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:55:07.746 [DEBUG] [Thread-13669] [transport.py] [_log()] userauth is OK
2025-11-12T09:55:07.746 [DEBUG] [Thread-13669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:55:07.746 [DEBUG] [Thread-13669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:55:07.746 [DEBUG] [Thread-13669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:55:07.746 [DEBUG] [Thread-13669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:55:07.768 [INFO] [Thread-13669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:55:07.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:55:08.524 [DEBUG] [Thread-13669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:55:08.524 [DEBUG] [Thread-13669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:55:08.525 [DEBUG] [Thread-13669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:55:08.565 [DEBUG] [Thread-13669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:55:08.565 [DEBUG] [Thread-13669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:55:08.568 [DEBUG] [Thread-13669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:55:08.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:55:08.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:55:08.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:55:08.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:55:08.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:55:08.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:55:08.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:55:08.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:55:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:55:08.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.329604 -999.00  +22.90  16.32     25   +2.00 1 1 1 1 1   888    0 22.26 39.43 ----- 15.6 16.3 274.0 22.7 29.6 -26.6 28.8 -24.9 26.9 -24.2 28.0 -24.6
2025-11-12T09:55:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:55:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:55:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.329604
2025-11-12T09:55:08.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:55:08.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:55:08.596 [DEBUG] [Thread-13669] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:55:08.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:55:08.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:55:08.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:55:08.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:54:37', tmtdew=25.58, humidity=17.93, cloud=0.0, wind=18.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:54:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:55:08.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:55:08.692 [DEBUG] [Thread-13672] [transport.py] [_log()] starting thread (client mode): 0x1737e6b0
2025-11-12T09:55:08.692 [DEBUG] [Thread-13672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:55:08.707 [DEBUG] [Thread-13672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:55:08.708 [INFO] [Thread-13672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:55:08.715 [DEBUG] [Thread-13672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:55:08.715 [DEBUG] [Thread-13672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:55:08.715 [DEBUG] [Thread-13672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:55:08.715 [DEBUG] [Thread-13672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:55:08.715 [DEBUG] [Thread-13672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:55:08.715 [DEBUG] [Thread-13672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] client lang: <none>
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] server lang: <none>
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] kex follows: False
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] Compression: none
2025-11-12T09:55:08.716 [DEBUG] [Thread-13672] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:55:08.772 [DEBUG] [Thread-13672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:55:08.773 [DEBUG] [Thread-13672] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:55:08.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:55:08.774 [DEBUG] [Thread-13672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:55:08.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:55:08.829 [DEBUG] [Thread-13672] [transport.py] [_log()] userauth is OK
2025-11-12T09:55:08.829 [DEBUG] [Thread-13672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:55:08.829 [DEBUG] [Thread-13672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:55:08.829 [DEBUG] [Thread-13672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:55:08.829 [DEBUG] [Thread-13672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:55:08.836 [DEBUG] [Thread-13674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:55:08.847 [INFO] [Thread-13672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:55:08.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:55:08.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:55:09.698 [DEBUG] [Thread-13672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:55:09.698 [DEBUG] [Thread-13672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:55:09.746 [DEBUG] [Thread-13672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:55:09.746 [DEBUG] [Thread-13672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:55:09.755 [DEBUG] [Thread-13672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:55:09.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:55:09.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-11-12T09:55:09.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-11-12T09:55:09.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:55:09.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:55:09.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:55:09.787 [DEBUG] [Thread-13672] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:55:23.880 [DEBUG] [Thread-13675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:55:26.225 [DEBUG] [Thread-13676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:55:38.918 [DEBUG] [Thread-13677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:55:39.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:55:39.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:55:39.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-11-12T09:55:40.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 55, 9), 25.57, 17.91, 0.0, 16.57, 23.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:55:40.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:55:09
2025-11-12T09:55:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:55:40.732 [DEBUG] [Thread-13678] [transport.py] [_log()] starting thread (client mode): 0x173e8130
2025-11-12T09:55:40.733 [DEBUG] [Thread-13678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:55:40.747 [DEBUG] [Thread-13678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:55:40.747 [INFO] [Thread-13678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] client lang: <none>
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] server lang: <none>
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] kex follows: False
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] Compression: none
2025-11-12T09:55:40.750 [DEBUG] [Thread-13678] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:55:40.767 [DEBUG] [Thread-13678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:55:40.767 [DEBUG] [Thread-13678] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:55:40.767 [DEBUG] [Thread-13678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:55:40.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:55:40.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:55:40.770 [DEBUG] [Thread-13678] [transport.py] [_log()] userauth is OK
2025-11-12T09:55:40.770 [DEBUG] [Thread-13678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:55:40.770 [DEBUG] [Thread-13678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:55:40.770 [DEBUG] [Thread-13678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:55:40.770 [DEBUG] [Thread-13678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:55:40.794 [INFO] [Thread-13678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:55:40.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:55:41.427 [DEBUG] [Thread-13678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:55:41.427 [DEBUG] [Thread-13678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:55:41.428 [DEBUG] [Thread-13678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:55:41.469 [DEBUG] [Thread-13678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:55:41.469 [DEBUG] [Thread-13678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:55:41.472 [DEBUG] [Thread-13678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:55:41.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:55:41.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:55:41.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:55:41.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:55:41.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:55:41.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:55:41.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:55:41.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:55:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:55:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.329950 -999.00  +23.20  13.61     25   +2.10 1 1 1 1 1   888    0 22.08 35.74 ----- 12.0 13.6 260.3 17.9 29.6 -27.3 28.9 -24.8 27.2 -23.9 28.0 -25.9
2025-11-12T09:55:41.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:55:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:55:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.329950
2025-11-12T09:55:41.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:55:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:55:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:55:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:55:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:55:41.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:55:09', tmtdew=25.57, humidity=17.91, cloud=0.0, wind=16.57, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:55:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:55:41.492 [DEBUG] [Thread-13678] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:55:41.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:55:41.587 [DEBUG] [Thread-13681] [transport.py] [_log()] starting thread (client mode): 0x17398d30
2025-11-12T09:55:41.587 [DEBUG] [Thread-13681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:55:41.601 [DEBUG] [Thread-13681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:55:41.601 [INFO] [Thread-13681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:55:41.609 [DEBUG] [Thread-13681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:55:41.609 [DEBUG] [Thread-13681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:55:41.609 [DEBUG] [Thread-13681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:55:41.609 [DEBUG] [Thread-13681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:55:41.609 [DEBUG] [Thread-13681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:55:41.609 [DEBUG] [Thread-13681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:55:41.609 [DEBUG] [Thread-13681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:55:41.610 [DEBUG] [Thread-13681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:55:41.610 [DEBUG] [Thread-13681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:55:41.610 [DEBUG] [Thread-13681] [transport.py] [_log()] client lang: <none>
2025-11-12T09:55:41.610 [DEBUG] [Thread-13681] [transport.py] [_log()] server lang: <none>
2025-11-12T09:55:41.610 [DEBUG] [Thread-13681] [transport.py] [_log()] kex follows: False
2025-11-12T09:55:41.610 [DEBUG] [Thread-13681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:55:41.610 [DEBUG] [Thread-13681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:55:41.610 [DEBUG] [Thread-13681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:55:41.611 [DEBUG] [Thread-13681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:55:41.611 [DEBUG] [Thread-13681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:55:41.611 [DEBUG] [Thread-13681] [transport.py] [_log()] Compression: none
2025-11-12T09:55:41.611 [DEBUG] [Thread-13681] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:55:41.668 [DEBUG] [Thread-13681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:55:41.668 [DEBUG] [Thread-13681] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:55:41.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:55:41.669 [DEBUG] [Thread-13681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:55:41.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:55:41.728 [DEBUG] [Thread-13681] [transport.py] [_log()] userauth is OK
2025-11-12T09:55:41.728 [DEBUG] [Thread-13681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:55:41.728 [DEBUG] [Thread-13681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:55:41.728 [DEBUG] [Thread-13681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:55:41.728 [DEBUG] [Thread-13681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:55:41.747 [INFO] [Thread-13681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:55:41.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:55:41.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:55:42.579 [DEBUG] [Thread-13681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:55:42.579 [DEBUG] [Thread-13681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:55:42.627 [DEBUG] [Thread-13681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:55:42.627 [DEBUG] [Thread-13681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:55:42.635 [DEBUG] [Thread-13681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:55:42.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:55:42.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T09:55:42.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-11-12T09:55:42.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:55:42.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:55:42.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:55:42.667 [DEBUG] [Thread-13681] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:55:48.952 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:55:48.953 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:55:53.955 [DEBUG] [Thread-13683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:56:09.004 [DEBUG] [Thread-13684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:56:12.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:56:12.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:56:12.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-11-12T09:56:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 55, 41), 25.79, 17.75, 0.0, 19.78, 23.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:56:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:55:41
2025-11-12T09:56:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:56:13.612 [DEBUG] [Thread-13685] [transport.py] [_log()] starting thread (client mode): 0x1739bac0
2025-11-12T09:56:13.612 [DEBUG] [Thread-13685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:56:13.632 [DEBUG] [Thread-13685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:56:13.632 [INFO] [Thread-13685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] client lang: <none>
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] server lang: <none>
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] kex follows: False
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] Compression: none
2025-11-12T09:56:13.633 [DEBUG] [Thread-13685] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:56:13.651 [DEBUG] [Thread-13685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:56:13.651 [DEBUG] [Thread-13685] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:56:13.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:56:13.652 [DEBUG] [Thread-13685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:56:13.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:56:13.654 [DEBUG] [Thread-13685] [transport.py] [_log()] userauth is OK
2025-11-12T09:56:13.654 [DEBUG] [Thread-13685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:56:13.655 [DEBUG] [Thread-13685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:56:13.655 [DEBUG] [Thread-13685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:56:13.655 [DEBUG] [Thread-13685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:56:13.679 [INFO] [Thread-13685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:56:13.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:56:14.272 [DEBUG] [Thread-13685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:56:14.272 [DEBUG] [Thread-13685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:56:14.272 [DEBUG] [Thread-13685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:56:14.313 [DEBUG] [Thread-13685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:56:14.313 [DEBUG] [Thread-13685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:56:14.315 [DEBUG] [Thread-13685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:56:14.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:56:14.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:56:14.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:56:14.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:56:14.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:56:14.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:56:14.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:56:14.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:56:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:56:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.330298 -999.00  +23.60   7.29     24   +2.10 1 1 1 1 1   888    0 21.70 34.46 ----- 7.8 7.3 280.7 14.0 29.7 -25.2 28.9 -24.4 27.4 -24.5 28.1 -24.0
2025-11-12T09:56:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:56:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:56:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.330298
2025-11-12T09:56:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:56:14.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:56:14.332 [DEBUG] [Thread-13685] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:56:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:56:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:56:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:56:14.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:55:41', tmtdew=25.79, humidity=17.75, cloud=0.0, wind=19.78, temperature=23.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:55:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:56:14.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:56:14.418 [DEBUG] [Thread-13688] [transport.py] [_log()] starting thread (client mode): 0x173ebc70
2025-11-12T09:56:14.418 [DEBUG] [Thread-13688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:56:14.433 [DEBUG] [Thread-13688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:56:14.433 [INFO] [Thread-13688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] client lang: <none>
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] server lang: <none>
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] kex follows: False
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] Compression: none
2025-11-12T09:56:14.440 [DEBUG] [Thread-13688] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:56:14.498 [DEBUG] [Thread-13688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:56:14.499 [DEBUG] [Thread-13688] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:56:14.499 [DEBUG] [Thread-13688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:56:14.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:56:14.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:56:14.556 [DEBUG] [Thread-13688] [transport.py] [_log()] userauth is OK
2025-11-12T09:56:14.556 [DEBUG] [Thread-13688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:56:14.556 [DEBUG] [Thread-13688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:56:14.556 [DEBUG] [Thread-13688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:56:14.556 [DEBUG] [Thread-13688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:56:14.573 [INFO] [Thread-13688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:56:14.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:56:14.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:56:15.439 [DEBUG] [Thread-13688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:56:15.439 [DEBUG] [Thread-13688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:56:15.487 [DEBUG] [Thread-13688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:56:15.487 [DEBUG] [Thread-13688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:56:15.495 [DEBUG] [Thread-13688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:56:15.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:56:15.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-11-12T09:56: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-11-12T09:56:15.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:56:15.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:56:15.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:56:15.527 [DEBUG] [Thread-13688] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:56:24.040 [DEBUG] [Thread-13690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:56:26.258 [DEBUG] [Thread-13691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:56:39.097 [DEBUG] [Thread-13692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:56:45.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:56:45.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:56:45.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T09:56:46.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 56, 14), 25.84, 17.71, 0.0, 21.4, 23.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:56:46.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:56:14
2025-11-12T09:56:46.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:56:46.485 [DEBUG] [Thread-13693] [transport.py] [_log()] starting thread (client mode): 0x14921600
2025-11-12T09:56:46.485 [DEBUG] [Thread-13693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:56:46.505 [DEBUG] [Thread-13693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:56:46.505 [INFO] [Thread-13693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] client lang: <none>
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] server lang: <none>
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] kex follows: False
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:56:46.508 [DEBUG] [Thread-13693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:56:46.509 [DEBUG] [Thread-13693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:56:46.509 [DEBUG] [Thread-13693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:56:46.509 [DEBUG] [Thread-13693] [transport.py] [_log()] Compression: none
2025-11-12T09:56:46.509 [DEBUG] [Thread-13693] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:56:46.525 [DEBUG] [Thread-13693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:56:46.525 [DEBUG] [Thread-13693] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:56:46.525 [DEBUG] [Thread-13693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:56:46.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:56:46.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:56:46.526 [DEBUG] [Thread-13693] [transport.py] [_log()] userauth is OK
2025-11-12T09:56:46.526 [DEBUG] [Thread-13693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:56:46.526 [DEBUG] [Thread-13693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:56:46.526 [DEBUG] [Thread-13693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:56:46.526 [DEBUG] [Thread-13693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:56:46.545 [INFO] [Thread-13693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:56:46.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:56:47.168 [DEBUG] [Thread-13693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:56:47.168 [DEBUG] [Thread-13693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:56:47.168 [DEBUG] [Thread-13693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:56:47.209 [DEBUG] [Thread-13693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:56:47.209 [DEBUG] [Thread-13693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:56:47.211 [DEBUG] [Thread-13693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:56:47.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:56:47.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:56:47.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:56:47.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:56:47.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:56:47.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:56:47.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.330645 -999.00  +23.90  10.91     24   +2.10 1 1 1 1 1   888    0 22.14 39.34 ----- 13.3 10.9 281.8 15.6 29.8 -25.5 29.0 -24.5 27.5 -24.1 28.2 -24.0
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.330645
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:56:47.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:56:14', tmtdew=25.84, humidity=17.71, cloud=0.0, wind=21.4, temperature=23.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:56:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:56:47.232 [DEBUG] [Thread-13693] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:56:47.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:56:47.318 [DEBUG] [Thread-13696] [transport.py] [_log()] starting thread (client mode): 0x173bf010
2025-11-12T09:56:47.318 [DEBUG] [Thread-13696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:56:47.333 [DEBUG] [Thread-13696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:56:47.333 [INFO] [Thread-13696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] client lang: <none>
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] server lang: <none>
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] kex follows: False
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:56:47.340 [DEBUG] [Thread-13696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:56:47.341 [DEBUG] [Thread-13696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:56:47.341 [DEBUG] [Thread-13696] [transport.py] [_log()] Compression: none
2025-11-12T09:56:47.341 [DEBUG] [Thread-13696] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:56:47.399 [DEBUG] [Thread-13696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:56:47.399 [DEBUG] [Thread-13696] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:56:47.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:56:47.399 [DEBUG] [Thread-13696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:56:47.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:56:47.455 [DEBUG] [Thread-13696] [transport.py] [_log()] userauth is OK
2025-11-12T09:56:47.455 [DEBUG] [Thread-13696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:56:47.455 [DEBUG] [Thread-13696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:56:47.455 [DEBUG] [Thread-13696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:56:47.455 [DEBUG] [Thread-13696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:56:47.469 [INFO] [Thread-13696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:56:47.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:56:47.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:56:48.368 [DEBUG] [Thread-13696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:56:48.368 [DEBUG] [Thread-13696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:56:48.416 [DEBUG] [Thread-13696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:56:48.416 [DEBUG] [Thread-13696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:56:48.425 [DEBUG] [Thread-13696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:56:48.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:56:48.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-11-12T09:56:48.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-11-12T09:56:48.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:56:48.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:56:48.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:56:48.463 [DEBUG] [Thread-13696] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:56:49.096 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:56:49.097 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:56:54.129 [DEBUG] [Thread-13698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:57:09.185 [DEBUG] [Thread-13699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:57:18.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:57:18.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:57:18.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-11-12T09:57:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 56, 45), 26.21, 17.41, 0.0, 21.0, 24.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:57:19.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:56:45
2025-11-12T09:57:19.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:57:19.482 [DEBUG] [Thread-13700] [transport.py] [_log()] starting thread (client mode): 0x17362020
2025-11-12T09:57:19.482 [DEBUG] [Thread-13700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:57:19.502 [DEBUG] [Thread-13700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:57:19.502 [INFO] [Thread-13700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] client lang: <none>
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] server lang: <none>
2025-11-12T09:57:19.504 [DEBUG] [Thread-13700] [transport.py] [_log()] kex follows: False
2025-11-12T09:57:19.505 [DEBUG] [Thread-13700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:57:19.505 [DEBUG] [Thread-13700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:57:19.505 [DEBUG] [Thread-13700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:57:19.505 [DEBUG] [Thread-13700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:57:19.505 [DEBUG] [Thread-13700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:57:19.505 [DEBUG] [Thread-13700] [transport.py] [_log()] Compression: none
2025-11-12T09:57:19.505 [DEBUG] [Thread-13700] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:57:19.512 [DEBUG] [Thread-13700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:57:19.512 [DEBUG] [Thread-13700] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:57:19.512 [DEBUG] [Thread-13700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:57:19.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:57:19.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:57:19.513 [DEBUG] [Thread-13700] [transport.py] [_log()] userauth is OK
2025-11-12T09:57:19.513 [DEBUG] [Thread-13700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:57:19.513 [DEBUG] [Thread-13700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:57:19.513 [DEBUG] [Thread-13700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:57:19.513 [DEBUG] [Thread-13700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:57:19.524 [INFO] [Thread-13700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:57:19.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:57:20.160 [DEBUG] [Thread-13700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:57:20.160 [DEBUG] [Thread-13700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:57:20.161 [DEBUG] [Thread-13700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:57:20.202 [DEBUG] [Thread-13700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:57:20.202 [DEBUG] [Thread-13700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:57:20.206 [DEBUG] [Thread-13700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:57:20.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:57:20.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:57:20.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:57:20.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:57:20.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:57:20.230 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:57:20.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:57:20.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:57:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:57:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.330993 -999.00  +23.90  17.89     23   +1.90 1 1 1 1 1   888    0 21.74 37.61 ----- 22.0 17.9 274.2 21.1 29.9 -25.7 29.1 -24.5 27.6 -26.1 28.3 -24.2
2025-11-12T09:57:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:57:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:57:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.330993
2025-11-12T09:57:20.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:57:20.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:57:20.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:57:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:57:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:57:20.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:56:45', tmtdew=26.21, humidity=17.41, cloud=0.0, wind=21.0, temperature=24.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:56:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:57:20.233 [DEBUG] [Thread-13700] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:57:20.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:57:20.329 [DEBUG] [Thread-13703] [transport.py] [_log()] starting thread (client mode): 0x17361b70
2025-11-12T09:57:20.329 [DEBUG] [Thread-13703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:57:20.344 [DEBUG] [Thread-13703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:57:20.344 [INFO] [Thread-13703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:57:20.351 [DEBUG] [Thread-13703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] client lang: <none>
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] server lang: <none>
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] kex follows: False
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] Compression: none
2025-11-12T09:57:20.352 [DEBUG] [Thread-13703] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:57:20.412 [DEBUG] [Thread-13703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:57:20.413 [DEBUG] [Thread-13703] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:57:20.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:57:20.414 [DEBUG] [Thread-13703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:57:20.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:57:20.468 [DEBUG] [Thread-13703] [transport.py] [_log()] userauth is OK
2025-11-12T09:57:20.469 [DEBUG] [Thread-13703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:57:20.469 [DEBUG] [Thread-13703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:57:20.469 [DEBUG] [Thread-13703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:57:20.469 [DEBUG] [Thread-13703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:57:20.488 [INFO] [Thread-13703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:57:20.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:57:20.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:57:21.349 [DEBUG] [Thread-13703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:57:21.350 [DEBUG] [Thread-13703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:57:21.400 [DEBUG] [Thread-13703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:57:21.400 [DEBUG] [Thread-13703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:57:21.411 [DEBUG] [Thread-13703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:57:21.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:57:21.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-11-12T09:57:21.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-11-12T09:57:21.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:57:21.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:57:21.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:57:21.452 [DEBUG] [Thread-13703] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:57:24.218 [DEBUG] [Thread-13705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:57:26.304 [DEBUG] [Thread-13706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:57:39.269 [DEBUG] [Thread-13707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:57:49.237 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:57:49.238 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:57:51.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:57:51.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:57:51.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-11-12T09:57:52.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 57, 17), 26.27, 17.3, 0.0, 21.26, 24.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:57:52.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:57:17
2025-11-12T09:57:52.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:57:52.443 [DEBUG] [Thread-13708] [transport.py] [_log()] starting thread (client mode): 0x173454e0
2025-11-12T09:57:52.444 [DEBUG] [Thread-13708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:57:52.462 [DEBUG] [Thread-13708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:57:52.462 [INFO] [Thread-13708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] client lang: <none>
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] server lang: <none>
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] kex follows: False
2025-11-12T09:57:52.465 [DEBUG] [Thread-13708] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:57:52.466 [DEBUG] [Thread-13708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:57:52.466 [DEBUG] [Thread-13708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:57:52.466 [DEBUG] [Thread-13708] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:57:52.466 [DEBUG] [Thread-13708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:57:52.466 [DEBUG] [Thread-13708] [transport.py] [_log()] Compression: none
2025-11-12T09:57:52.466 [DEBUG] [Thread-13708] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:57:52.481 [DEBUG] [Thread-13708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:57:52.481 [DEBUG] [Thread-13708] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:57:52.481 [DEBUG] [Thread-13708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:57:52.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:57:52.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:57:52.482 [DEBUG] [Thread-13708] [transport.py] [_log()] userauth is OK
2025-11-12T09:57:52.482 [DEBUG] [Thread-13708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:57:52.482 [DEBUG] [Thread-13708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:57:52.482 [DEBUG] [Thread-13708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:57:52.482 [DEBUG] [Thread-13708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:57:52.492 [INFO] [Thread-13708] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:57:52.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:57:53.093 [DEBUG] [Thread-13708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:57:53.093 [DEBUG] [Thread-13708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:57:53.093 [DEBUG] [Thread-13708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:57:53.134 [DEBUG] [Thread-13708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:57:53.134 [DEBUG] [Thread-13708] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:57:53.136 [DEBUG] [Thread-13708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:57:53.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:57:53.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:57:53.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:57:53.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:57:53.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:57:53.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:57:53.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:57:53.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:57:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:57:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.331687 -999.00  +23.30  12.28     24   +1.70 1 1 1 1 1   888    0 21.87 36.54 ----- 7.9 12.3 265.0 27.2 29.5 -26.8 28.9 -26.5 27.4 -26.4 28.1 -25.0
2025-11-12T09:57:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:57:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:57:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.331687
2025-11-12T09:57:53.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:57:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:57:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:57:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:57:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:57:53.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:57:17', tmtdew=26.27, humidity=17.3, cloud=0.0, wind=21.26, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:57:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:57:53.156 [DEBUG] [Thread-13708] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:57:53.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:57:53.241 [DEBUG] [Thread-13711] [transport.py] [_log()] starting thread (client mode): 0x17347e50
2025-11-12T09:57:53.241 [DEBUG] [Thread-13711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:57:53.257 [DEBUG] [Thread-13711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:57:53.257 [INFO] [Thread-13711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:57:53.265 [DEBUG] [Thread-13711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:57:53.265 [DEBUG] [Thread-13711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:57:53.265 [DEBUG] [Thread-13711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:57:53.265 [DEBUG] [Thread-13711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] client lang: <none>
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] server lang: <none>
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] kex follows: False
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] Compression: none
2025-11-12T09:57:53.266 [DEBUG] [Thread-13711] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:57:53.323 [DEBUG] [Thread-13711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:57:53.323 [DEBUG] [Thread-13711] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:57:53.324 [DEBUG] [Thread-13711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:57:53.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:57:53.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:57:53.379 [DEBUG] [Thread-13711] [transport.py] [_log()] userauth is OK
2025-11-12T09:57:53.379 [DEBUG] [Thread-13711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:57:53.380 [DEBUG] [Thread-13711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:57:53.380 [DEBUG] [Thread-13711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:57:53.380 [DEBUG] [Thread-13711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:57:53.399 [INFO] [Thread-13711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:57:53.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:57:53.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:57:54.272 [DEBUG] [Thread-13711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:57:54.272 [DEBUG] [Thread-13711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:57:54.304 [DEBUG] [Thread-13713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:57:54.320 [DEBUG] [Thread-13711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:57:54.320 [DEBUG] [Thread-13711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:57:54.328 [DEBUG] [Thread-13711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:57:54.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:57:54.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-11-12T09:57:54.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-11-12T09:57:54.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:57:54.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:57:54.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:57:54.360 [DEBUG] [Thread-13711] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:58:09.346 [DEBUG] [Thread-13714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:58:24.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:58:24.367 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:58:24.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-11-12T09:58:24.380 [DEBUG] [Thread-13715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:58:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 58, 21), 26.11, 17.66, 0.0, 23.52, 23.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:58:25.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:58:21
2025-11-12T09:58:25.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:58:25.292 [DEBUG] [Thread-13716] [transport.py] [_log()] starting thread (client mode): 0x173e8580
2025-11-12T09:58:25.292 [DEBUG] [Thread-13716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:58:25.307 [DEBUG] [Thread-13716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:58:25.307 [INFO] [Thread-13716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:58:25.310 [DEBUG] [Thread-13716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:58:25.310 [DEBUG] [Thread-13716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:58:25.310 [DEBUG] [Thread-13716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] client lang: <none>
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] server lang: <none>
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] kex follows: False
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] Compression: none
2025-11-12T09:58:25.311 [DEBUG] [Thread-13716] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:58:25.328 [DEBUG] [Thread-13716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:58:25.328 [DEBUG] [Thread-13716] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:58:25.329 [DEBUG] [Thread-13716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:58:25.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:58:25.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:58:25.331 [DEBUG] [Thread-13716] [transport.py] [_log()] userauth is OK
2025-11-12T09:58:25.331 [DEBUG] [Thread-13716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:58:25.331 [DEBUG] [Thread-13716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:58:25.331 [DEBUG] [Thread-13716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:58:25.331 [DEBUG] [Thread-13716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:58:25.356 [INFO] [Thread-13716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:58:25.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:58:25.970 [DEBUG] [Thread-13716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:58:25.970 [DEBUG] [Thread-13716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:58:25.970 [DEBUG] [Thread-13716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:58:26.011 [DEBUG] [Thread-13716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:58:26.011 [DEBUG] [Thread-13716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:58:26.015 [DEBUG] [Thread-13716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:58:26.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:58:26.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:58:26.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:58:26.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:58:26.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:58:26.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:58:26.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:58:26.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:58:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:58:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.332034 -999.00  +23.30  14.97     24   +1.70 1 1 1 1 1   888    0 21.88 38.09 ----- 12.9 15.0 286.4 19.2 29.7 -26.2 28.9 -25.5 27.3 -27.5 28.1 -24.5
2025-11-12T09:58:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:58:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:58:26.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.332034
2025-11-12T09:58:26.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:58:26.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:58:26.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:58:26.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:58:26.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:58:26.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:58:21', tmtdew=26.11, humidity=17.66, cloud=0.0, wind=23.52, temperature=23.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:58:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:58:26.042 [DEBUG] [Thread-13716] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:58:26.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:58:26.139 [DEBUG] [Thread-13719] [transport.py] [_log()] starting thread (client mode): 0x173e81f0
2025-11-12T09:58:26.139 [DEBUG] [Thread-13719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:58:26.160 [DEBUG] [Thread-13719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:58:26.160 [INFO] [Thread-13719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:58:26.171 [DEBUG] [Thread-13719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:58:26.171 [DEBUG] [Thread-13719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:58:26.171 [DEBUG] [Thread-13719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] client lang: <none>
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] server lang: <none>
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] kex follows: False
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:58:26.172 [DEBUG] [Thread-13719] [transport.py] [_log()] Compression: none
2025-11-12T09:58:26.173 [DEBUG] [Thread-13719] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:58:26.228 [DEBUG] [Thread-13719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:58:26.228 [DEBUG] [Thread-13719] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:58:26.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:58:26.229 [DEBUG] [Thread-13719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:58:26.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:58:26.284 [DEBUG] [Thread-13719] [transport.py] [_log()] userauth is OK
2025-11-12T09:58:26.284 [DEBUG] [Thread-13719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:58:26.284 [DEBUG] [Thread-13719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:58:26.285 [DEBUG] [Thread-13719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:58:26.285 [DEBUG] [Thread-13719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:58:26.307 [INFO] [Thread-13719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:58:26.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:58:26.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:58:26.342 [DEBUG] [Thread-13721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:58:27.176 [DEBUG] [Thread-13719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:58:27.176 [DEBUG] [Thread-13719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:58:27.224 [DEBUG] [Thread-13719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:58:27.224 [DEBUG] [Thread-13719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:58:27.233 [DEBUG] [Thread-13719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:58:27.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:58:27.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-11-12T09:58:27.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-11-12T09:58:27.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:58:27.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:58:27.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:58:27.270 [DEBUG] [Thread-13719] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:58:39.415 [DEBUG] [Thread-13722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:58:49.380 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:58:49.381 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:58:54.468 [DEBUG] [Thread-13723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:58:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:58:57.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:58:57.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-11-12T09:58:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 58, 53), 26.14, 17.8, 0.0, 23.29, 24.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:58:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:58:53
2025-11-12T09:58:58.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:58:58.217 [DEBUG] [Thread-13724] [transport.py] [_log()] starting thread (client mode): 0x17361990
2025-11-12T09:58:58.217 [DEBUG] [Thread-13724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:58:58.234 [DEBUG] [Thread-13724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:58:58.234 [INFO] [Thread-13724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:58:58.237 [DEBUG] [Thread-13724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] client lang: <none>
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] server lang: <none>
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] kex follows: False
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] Compression: none
2025-11-12T09:58:58.238 [DEBUG] [Thread-13724] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:58:58.256 [DEBUG] [Thread-13724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:58:58.256 [DEBUG] [Thread-13724] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:58:58.257 [DEBUG] [Thread-13724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:58:58.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:58:58.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:58:58.259 [DEBUG] [Thread-13724] [transport.py] [_log()] userauth is OK
2025-11-12T09:58:58.259 [DEBUG] [Thread-13724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:58:58.259 [DEBUG] [Thread-13724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:58:58.259 [DEBUG] [Thread-13724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:58:58.259 [DEBUG] [Thread-13724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:58:58.295 [INFO] [Thread-13724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:58:58.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:58:58.910 [DEBUG] [Thread-13724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:58:58.910 [DEBUG] [Thread-13724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:58:58.911 [DEBUG] [Thread-13724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:58:58.952 [DEBUG] [Thread-13724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:58:58.952 [DEBUG] [Thread-13724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:58:58.955 [DEBUG] [Thread-13724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:58:58.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:58:58.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:58:58.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:58:58.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:58:58.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:58:58.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:58:58.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:58:58.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:58:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:58:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.332381 -999.00  +23.50  16.74     24   +1.80 1 1 1 1 1   888    0 22.11 38.97 ----- 13.8 16.7 282.5 22.2 29.5 -27.1 28.9 -25.2 27.3 -24.8 28.1 -25.0
2025-11-12T09:58:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:58:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:58:58.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.332381
2025-11-12T09:58:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:58:58.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:58:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:58:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:58:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:58:58.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:58:53', tmtdew=26.14, humidity=17.8, cloud=0.0, wind=23.29, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:58:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:58:58.984 [DEBUG] [Thread-13724] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:58:59.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:58:59.079 [DEBUG] [Thread-13727] [transport.py] [_log()] starting thread (client mode): 0x17363df0
2025-11-12T09:58:59.080 [DEBUG] [Thread-13727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:58:59.095 [DEBUG] [Thread-13727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T09:58:59.095 [INFO] [Thread-13727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T09:58:59.103 [DEBUG] [Thread-13727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:58:59.103 [DEBUG] [Thread-13727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T09:58:59.103 [DEBUG] [Thread-13727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:58:59.103 [DEBUG] [Thread-13727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:58:59.103 [DEBUG] [Thread-13727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] client lang: <none>
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] server lang: <none>
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] kex follows: False
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:58:59.104 [DEBUG] [Thread-13727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:58:59.105 [DEBUG] [Thread-13727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:58:59.105 [DEBUG] [Thread-13727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:58:59.105 [DEBUG] [Thread-13727] [transport.py] [_log()] Compression: none
2025-11-12T09:58:59.105 [DEBUG] [Thread-13727] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:58:59.160 [DEBUG] [Thread-13727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:58:59.161 [DEBUG] [Thread-13727] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:58:59.161 [DEBUG] [Thread-13727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T09:58:59.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T09:58:59.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:58:59.216 [DEBUG] [Thread-13727] [transport.py] [_log()] userauth is OK
2025-11-12T09:58:59.216 [DEBUG] [Thread-13727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:58:59.217 [DEBUG] [Thread-13727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:58:59.217 [DEBUG] [Thread-13727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T09:58:59.217 [DEBUG] [Thread-13727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:58:59.236 [INFO] [Thread-13727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:58:59.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T09:58:59.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:59:00.054 [DEBUG] [Thread-13727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:59:00.054 [DEBUG] [Thread-13727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:59:00.101 [DEBUG] [Thread-13727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:59:00.101 [DEBUG] [Thread-13727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:59:00.111 [DEBUG] [Thread-13727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:59:00.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:59:00.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-11-12T09:59:00.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-11-12T09:59:00.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:59:00.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:59:00.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:59:00.147 [DEBUG] [Thread-13727] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:59:09.505 [DEBUG] [Thread-13729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:59:24.543 [DEBUG] [Thread-13730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:59:26.371 [DEBUG] [Thread-13731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:59:30.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T09:59:30.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T09:59:30.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-11-12T09:59:30.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 9, 59, 25), 25.96, 17.98, 0.0, 24.16, 23.85, 0, 0, 0, 2, 0, 0),)
2025-11-12T09:59:30.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 09:59:25
2025-11-12T09:59:30.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T09:59:31.100 [DEBUG] [Thread-13732] [transport.py] [_log()] starting thread (client mode): 0x1737f640
2025-11-12T09:59:31.101 [DEBUG] [Thread-13732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T09:59:31.122 [DEBUG] [Thread-13732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T09:59:31.122 [INFO] [Thread-13732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T09:59:31.124 [DEBUG] [Thread-13732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T09:59:31.124 [DEBUG] [Thread-13732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T09:59:31.124 [DEBUG] [Thread-13732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T09:59:31.124 [DEBUG] [Thread-13732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:59:31.124 [DEBUG] [Thread-13732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T09:59:31.124 [DEBUG] [Thread-13732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:59:31.124 [DEBUG] [Thread-13732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T09:59:31.124 [DEBUG] [Thread-13732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] client lang: <none>
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] server lang: <none>
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] kex follows: False
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] Compression: none
2025-11-12T09:59:31.125 [DEBUG] [Thread-13732] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T09:59:31.143 [DEBUG] [Thread-13732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T09:59:31.143 [DEBUG] [Thread-13732] [transport.py] [_log()] Switch to new keys ...
2025-11-12T09:59:31.144 [DEBUG] [Thread-13732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T09:59:31.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T09:59:31.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T09:59:31.146 [DEBUG] [Thread-13732] [transport.py] [_log()] userauth is OK
2025-11-12T09:59:31.146 [DEBUG] [Thread-13732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T09:59:31.146 [DEBUG] [Thread-13732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T09:59:31.146 [DEBUG] [Thread-13732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T09:59:31.146 [DEBUG] [Thread-13732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T09:59:31.171 [INFO] [Thread-13732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T09:59:31.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T09:59:31.717 [DEBUG] [Thread-13732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T09:59:31.718 [DEBUG] [Thread-13732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T09:59:31.718 [DEBUG] [Thread-13732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T09:59:31.759 [DEBUG] [Thread-13732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T09:59:31.759 [DEBUG] [Thread-13732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T09:59:31.762 [DEBUG] [Thread-13732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T09:59:31.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T09:59:31.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T09:59:31.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T09:59:31.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T09:59:31.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T09:59:31.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T09:59:31.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T09:59:31.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T09:59:31.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.332729 -999.00  +23.60  17.12     23   +1.80 1 1 1 1 1   888    0 21.87 41.24 ----- 21.0 17.1 281.6 26.3 29.4 -28.1 28.9 -26.3 27.4 -25.2 28.0 -25.9
2025-11-12T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.332729
2025-11-12T09:59:31.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T09:59:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T09:59:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T09:59:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T09:59:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T09:59:31.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T09:59:25', tmtdew=25.96, humidity=17.98, cloud=0.0, wind=24.16, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T07:59:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T09:59:31.790 [DEBUG] [Thread-13732] [transport.py] [_log()] EOF in transport thread
2025-11-12T09:59:31.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T09:59:39.575 [DEBUG] [Thread-13735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:59:49.521 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:59:49.521 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T09:59:54.622 [DEBUG] [Thread-13736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:00:09.667 [DEBUG] [Thread-13737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:00:24.705 [DEBUG] [Thread-13738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:00:26.401 [DEBUG] [Thread-13739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:00:39.735 [DEBUG] [Thread-13740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:00:49.662 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:00:49.664 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:00:54.773 [DEBUG] [Thread-13741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:01:09.810 [DEBUG] [Thread-13742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:01:24.845 [DEBUG] [Thread-13743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:01:26.450 [DEBUG] [Thread-13744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:01:39.884 [DEBUG] [Thread-13745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:01:46.170 [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-11-12T10:01:49.808 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:01:49.809 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:01:54.920 [DEBUG] [Thread-13746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:02:09.960 [DEBUG] [Thread-13747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:02:16.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:02:16.201 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:02:16.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:02:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 2, 5), 25.61, 18.28, 0.0, 22.51, 23.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:02:16.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:02:05
2025-11-12T10:02:16.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:02:17.121 [DEBUG] [Thread-13748] [transport.py] [_log()] starting thread (client mode): 0x19ddb7c0
2025-11-12T10:02:17.121 [DEBUG] [Thread-13748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:02:17.141 [DEBUG] [Thread-13748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:02:17.141 [INFO] [Thread-13748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] client lang: <none>
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] server lang: <none>
2025-11-12T10:02:17.143 [DEBUG] [Thread-13748] [transport.py] [_log()] kex follows: False
2025-11-12T10:02:17.144 [DEBUG] [Thread-13748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:02:17.144 [DEBUG] [Thread-13748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:02:17.144 [DEBUG] [Thread-13748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:02:17.144 [DEBUG] [Thread-13748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:02:17.144 [DEBUG] [Thread-13748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:02:17.144 [DEBUG] [Thread-13748] [transport.py] [_log()] Compression: none
2025-11-12T10:02:17.144 [DEBUG] [Thread-13748] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:02:17.160 [DEBUG] [Thread-13748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:02:17.160 [DEBUG] [Thread-13748] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:02:17.161 [DEBUG] [Thread-13748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:02:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:02:17.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:02:17.162 [DEBUG] [Thread-13748] [transport.py] [_log()] userauth is OK
2025-11-12T10:02:17.163 [DEBUG] [Thread-13748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:02:17.163 [DEBUG] [Thread-13748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:02:17.163 [DEBUG] [Thread-13748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:02:17.163 [DEBUG] [Thread-13748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:02:17.184 [INFO] [Thread-13748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:02:17.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:02:17.804 [DEBUG] [Thread-13748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:02:17.804 [DEBUG] [Thread-13748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:02:17.805 [DEBUG] [Thread-13748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:02:17.845 [DEBUG] [Thread-13748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:02:17.846 [DEBUG] [Thread-13748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:02:17.849 [DEBUG] [Thread-13748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:02:17.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:02:17.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:02:17.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:02:17.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:02:17.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:02:17.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:02:17.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:02:17.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:02:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:02:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.334812 -999.00  +23.00  18.76     25   +2.10 1 1 1 1 1   888    0 22.61 42.97 ----- 18.3 18.8 276.0 26.9 29.1 -26.3 28.4 -25.4 26.9 -28.2 27.8 -24.4
2025-11-12T10:02:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:02:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:02:17.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.334812
2025-11-12T10:02:17.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:02:17.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:02:17.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:02:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:02:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:02:17.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:02:05', tmtdew=25.61, humidity=18.28, cloud=0.0, wind=22.51, temperature=23.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:02:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:02:17.877 [DEBUG] [Thread-13748] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:02:17.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:02:17.974 [DEBUG] [Thread-13751] [transport.py] [_log()] starting thread (client mode): 0x19ddba60
2025-11-12T10:02:17.974 [DEBUG] [Thread-13751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:02:17.988 [DEBUG] [Thread-13751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:02:17.988 [INFO] [Thread-13751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:02:17.996 [DEBUG] [Thread-13751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:02:17.996 [DEBUG] [Thread-13751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:02:17.996 [DEBUG] [Thread-13751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:02:17.996 [DEBUG] [Thread-13751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] client lang: <none>
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] server lang: <none>
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] kex follows: False
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] Compression: none
2025-11-12T10:02:17.997 [DEBUG] [Thread-13751] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:02:18.056 [DEBUG] [Thread-13751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:02:18.056 [DEBUG] [Thread-13751] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:02:18.057 [DEBUG] [Thread-13751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:02:18.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:02:18.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:02:18.111 [DEBUG] [Thread-13751] [transport.py] [_log()] userauth is OK
2025-11-12T10:02:18.112 [DEBUG] [Thread-13751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:02:18.112 [DEBUG] [Thread-13751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:02:18.112 [DEBUG] [Thread-13751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:02:18.112 [DEBUG] [Thread-13751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:02:18.131 [INFO] [Thread-13751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:02:18.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:02:18.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:02:18.969 [DEBUG] [Thread-13751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:02:18.970 [DEBUG] [Thread-13751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:02:19.017 [DEBUG] [Thread-13751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:02:19.018 [DEBUG] [Thread-13751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:02:19.027 [DEBUG] [Thread-13751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:02:19.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:02:19.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-11-12T10:02:19.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:02:19.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:02:19.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:02:19.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:02:19.063 [DEBUG] [Thread-13751] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:02:24.994 [DEBUG] [Thread-13753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:02:26.478 [DEBUG] [Thread-13754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:02:40.036 [DEBUG] [Thread-13755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:02:49.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:02:49.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:02:49.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:02:49.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 2, 37), 25.53, 18.54, 0.0, 18.67, 23.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:02:49.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:02:37
2025-11-12T10:02:49.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:02:49.950 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:02:49.951 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:02:50.015 [DEBUG] [Thread-13756] [transport.py] [_log()] starting thread (client mode): 0x149177f0
2025-11-12T10:02:50.015 [DEBUG] [Thread-13756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:02:50.037 [DEBUG] [Thread-13756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:02:50.037 [INFO] [Thread-13756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:02:50.038 [DEBUG] [Thread-13756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] client lang: <none>
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] server lang: <none>
2025-11-12T10:02:50.039 [DEBUG] [Thread-13756] [transport.py] [_log()] kex follows: False
2025-11-12T10:02:50.040 [DEBUG] [Thread-13756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:02:50.040 [DEBUG] [Thread-13756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:02:50.040 [DEBUG] [Thread-13756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:02:50.040 [DEBUG] [Thread-13756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:02:50.040 [DEBUG] [Thread-13756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:02:50.040 [DEBUG] [Thread-13756] [transport.py] [_log()] Compression: none
2025-11-12T10:02:50.040 [DEBUG] [Thread-13756] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:02:50.048 [DEBUG] [Thread-13756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:02:50.049 [DEBUG] [Thread-13756] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:02:50.049 [DEBUG] [Thread-13756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:02:50.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:02:50.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:02:50.051 [DEBUG] [Thread-13756] [transport.py] [_log()] userauth is OK
2025-11-12T10:02:50.051 [DEBUG] [Thread-13756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:02:50.051 [DEBUG] [Thread-13756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:02:50.051 [DEBUG] [Thread-13756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:02:50.051 [DEBUG] [Thread-13756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:02:50.071 [INFO] [Thread-13756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:02:50.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:02:50.673 [DEBUG] [Thread-13756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:02:50.673 [DEBUG] [Thread-13756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:02:50.674 [DEBUG] [Thread-13756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:02:50.714 [DEBUG] [Thread-13756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:02:50.714 [DEBUG] [Thread-13756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:02:50.717 [DEBUG] [Thread-13756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:02:50.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:02:50.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:02:50.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:02:50.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:02:50.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:02:50.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:02:50.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:02:50.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:02:50.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:02:50.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.335159 -999.00  +23.30  16.13     25   +2.20 1 1 1 1 1   888    0 22.01 39.30 ----- 14.6 16.1 287.0 26.9 -999.0 -999.0 28.4 -25.9 26.8 -28.3 27.7 -25.2
2025-11-12T10:02:50.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:02:50.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:02:50.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.335159
2025-11-12T10:02:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:02:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:02:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:02:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:02:50.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:02:50.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:02:37', tmtdew=25.53, humidity=18.54, cloud=0.0, wind=18.67, temperature=23.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:02:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:02:50.742 [DEBUG] [Thread-13756] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:02:50.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:02:50.839 [DEBUG] [Thread-13759] [transport.py] [_log()] starting thread (client mode): 0x17347f70
2025-11-12T10:02:50.839 [DEBUG] [Thread-13759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:02:50.853 [DEBUG] [Thread-13759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:02:50.853 [INFO] [Thread-13759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:02:50.861 [DEBUG] [Thread-13759] [transport.py] [_log()] client lang: <none>
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] server lang: <none>
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] kex follows: False
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] Compression: none
2025-11-12T10:02:50.862 [DEBUG] [Thread-13759] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:02:50.924 [DEBUG] [Thread-13759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:02:50.924 [DEBUG] [Thread-13759] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:02:50.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:02:50.926 [DEBUG] [Thread-13759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:02:50.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:02:50.980 [DEBUG] [Thread-13759] [transport.py] [_log()] userauth is OK
2025-11-12T10:02:50.980 [DEBUG] [Thread-13759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:02:50.989 [DEBUG] [Thread-13759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:02:50.990 [DEBUG] [Thread-13759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:02:50.990 [DEBUG] [Thread-13759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:02:51.013 [INFO] [Thread-13759] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:02:51.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:02:51.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:02:51.845 [DEBUG] [Thread-13759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:02:51.846 [DEBUG] [Thread-13759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:02:51.893 [DEBUG] [Thread-13759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:02:51.894 [DEBUG] [Thread-13759] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:02:51.907 [DEBUG] [Thread-13759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:02:51.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:02:51.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-11-12T10:02:51.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-11-12T10:02:51.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:02:51.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:02:51.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:02:51.947 [DEBUG] [Thread-13759] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:02:55.077 [DEBUG] [Thread-13761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:03:10.134 [DEBUG] [Thread-13762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:03:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:03:21.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:03:21.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-11-12T10:03:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 3, 9), 25.51, 18.56, 0.0, 16.96, 23.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:03:22.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:03:09
2025-11-12T10:03:22.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:03:22.873 [DEBUG] [Thread-13763] [transport.py] [_log()] starting thread (client mode): 0x17347d60
2025-11-12T10:03:22.873 [DEBUG] [Thread-13763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:03:22.889 [DEBUG] [Thread-13763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:03:22.889 [INFO] [Thread-13763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:03:22.890 [DEBUG] [Thread-13763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:03:22.890 [DEBUG] [Thread-13763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:03:22.890 [DEBUG] [Thread-13763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:03:22.890 [DEBUG] [Thread-13763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:03:22.890 [DEBUG] [Thread-13763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:03:22.890 [DEBUG] [Thread-13763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:03:22.890 [DEBUG] [Thread-13763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] client lang: <none>
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] server lang: <none>
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] kex follows: False
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] Compression: none
2025-11-12T10:03:22.891 [DEBUG] [Thread-13763] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:03:22.903 [DEBUG] [Thread-13763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:03:22.903 [DEBUG] [Thread-13763] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:03:22.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:03:22.904 [DEBUG] [Thread-13763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:03:22.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:03:22.907 [DEBUG] [Thread-13763] [transport.py] [_log()] userauth is OK
2025-11-12T10:03:22.907 [DEBUG] [Thread-13763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:03:22.907 [DEBUG] [Thread-13763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:03:22.907 [DEBUG] [Thread-13763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:03:22.907 [DEBUG] [Thread-13763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:03:22.928 [INFO] [Thread-13763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:03:22.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:03:23.503 [DEBUG] [Thread-13763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:03:23.503 [DEBUG] [Thread-13763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:03:23.503 [DEBUG] [Thread-13763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:03:23.543 [DEBUG] [Thread-13763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:03:23.544 [DEBUG] [Thread-13763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:03:23.548 [DEBUG] [Thread-13763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:03:23.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:03:23.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:03:23.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:03:23.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:03:23.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:03:23.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:03:23.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:03:23.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:03:23.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:03:23.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.335506 -999.00  +23.50  17.75     24   +1.90 1 1 1 1 1   888    0 22.43 40.84 ----- 16.3 17.8 274.9 21.3 29.0 -27.8 28.4 -25.8 26.7 -26.4 27.7 -25.6
2025-11-12T10:03:23.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:03:23.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:03:23.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.335506
2025-11-12T10:03:23.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:03:23.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:03:23.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:03:23.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:03:23.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:03:23.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:03:09', tmtdew=25.51, humidity=18.56, cloud=0.0, wind=16.96, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:03:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:03:23.578 [DEBUG] [Thread-13763] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:03:23.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:03:23.675 [DEBUG] [Thread-13766] [transport.py] [_log()] starting thread (client mode): 0x173449a0
2025-11-12T10:03:23.675 [DEBUG] [Thread-13766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:03:23.691 [DEBUG] [Thread-13766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:03:23.691 [INFO] [Thread-13766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:03:23.699 [DEBUG] [Thread-13766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:03:23.699 [DEBUG] [Thread-13766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] client lang: <none>
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] server lang: <none>
2025-11-12T10:03:23.700 [DEBUG] [Thread-13766] [transport.py] [_log()] kex follows: False
2025-11-12T10:03:23.701 [DEBUG] [Thread-13766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:03:23.701 [DEBUG] [Thread-13766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:03:23.701 [DEBUG] [Thread-13766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:03:23.701 [DEBUG] [Thread-13766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:03:23.701 [DEBUG] [Thread-13766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:03:23.701 [DEBUG] [Thread-13766] [transport.py] [_log()] Compression: none
2025-11-12T10:03:23.701 [DEBUG] [Thread-13766] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:03:23.760 [DEBUG] [Thread-13766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:03:23.760 [DEBUG] [Thread-13766] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:03:23.761 [DEBUG] [Thread-13766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:03:23.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:03:23.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:03:23.816 [DEBUG] [Thread-13766] [transport.py] [_log()] userauth is OK
2025-11-12T10:03:23.816 [DEBUG] [Thread-13766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:03:23.816 [DEBUG] [Thread-13766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:03:23.816 [DEBUG] [Thread-13766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:03:23.816 [DEBUG] [Thread-13766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:03:23.838 [INFO] [Thread-13766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:03:23.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:03:23.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:03:24.738 [DEBUG] [Thread-13766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:03:24.738 [DEBUG] [Thread-13766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:03:24.787 [DEBUG] [Thread-13766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:03:24.787 [DEBUG] [Thread-13766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:03:24.796 [DEBUG] [Thread-13766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:03:24.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:03:24.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-11-12T10:03:24.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-11-12T10:03:24.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:03:24.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:03:24.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:03:24.832 [DEBUG] [Thread-13766] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:03:25.167 [DEBUG] [Thread-13768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:03:26.518 [DEBUG] [Thread-13769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:03:40.218 [DEBUG] [Thread-13770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:03:50.092 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:03:50.094 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:03:54.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:03:54.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:03:54.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-11-12T10:03:55.245 [DEBUG] [Thread-13771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:03:55.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 3, 41), 25.66, 17.86, 0.0, 22.29, 23.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:03:55.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:03:41
2025-11-12T10:03:55.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:03:55.787 [DEBUG] [Thread-13772] [transport.py] [_log()] starting thread (client mode): 0x173459f0
2025-11-12T10:03:55.787 [DEBUG] [Thread-13772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:03:55.806 [DEBUG] [Thread-13772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:03:55.807 [INFO] [Thread-13772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:03:55.808 [DEBUG] [Thread-13772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:03:55.808 [DEBUG] [Thread-13772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:03:55.808 [DEBUG] [Thread-13772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] client lang: <none>
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] server lang: <none>
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] kex follows: False
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] Compression: none
2025-11-12T10:03:55.809 [DEBUG] [Thread-13772] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:03:55.817 [DEBUG] [Thread-13772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:03:55.817 [DEBUG] [Thread-13772] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:03:55.817 [DEBUG] [Thread-13772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:03:55.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:03:55.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:03:55.819 [DEBUG] [Thread-13772] [transport.py] [_log()] userauth is OK
2025-11-12T10:03:55.819 [DEBUG] [Thread-13772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:03:55.819 [DEBUG] [Thread-13772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:03:55.819 [DEBUG] [Thread-13772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:03:55.819 [DEBUG] [Thread-13772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:03:55.836 [INFO] [Thread-13772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:03:55.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:03:56.438 [DEBUG] [Thread-13772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:03:56.438 [DEBUG] [Thread-13772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:03:56.439 [DEBUG] [Thread-13772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:03:56.479 [DEBUG] [Thread-13772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:03:56.479 [DEBUG] [Thread-13772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:03:56.481 [DEBUG] [Thread-13772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:03:56.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:03:56.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:03:56.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:03:56.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:03:56.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:03:56.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:03:56.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:03:56.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:03:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:03:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.335854 -999.00  +23.60  18.01     23   +1.80 1 1 1 1 1   888    0 22.71 44.86 ----- 18.5 18.0 303.4 28.8 29.1 -25.6 28.3 -25.2 26.8 -28.2 27.8 -24.6
2025-11-12T10:03:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:03:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:03:56.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.335854
2025-11-12T10:03:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:03:56.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:03:56.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:03:56.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:03:56.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:03:56.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:03:41', tmtdew=25.66, humidity=17.86, cloud=0.0, wind=22.29, temperature=23.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:03:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:03:56.508 [DEBUG] [Thread-13772] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:03:56.591 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:03:56.604 [DEBUG] [Thread-13775] [transport.py] [_log()] starting thread (client mode): 0x19dda290
2025-11-12T10:03:56.604 [DEBUG] [Thread-13775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:03:56.619 [DEBUG] [Thread-13775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:03:56.619 [INFO] [Thread-13775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:03:56.627 [DEBUG] [Thread-13775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:03:56.627 [DEBUG] [Thread-13775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:03:56.627 [DEBUG] [Thread-13775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:03:56.627 [DEBUG] [Thread-13775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:03:56.627 [DEBUG] [Thread-13775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:03:56.627 [DEBUG] [Thread-13775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:03:56.627 [DEBUG] [Thread-13775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:03:56.628 [DEBUG] [Thread-13775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:03:56.628 [DEBUG] [Thread-13775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:03:56.628 [DEBUG] [Thread-13775] [transport.py] [_log()] client lang: <none>
2025-11-12T10:03:56.628 [DEBUG] [Thread-13775] [transport.py] [_log()] server lang: <none>
2025-11-12T10:03:56.628 [DEBUG] [Thread-13775] [transport.py] [_log()] kex follows: False
2025-11-12T10:03:56.628 [DEBUG] [Thread-13775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:03:56.628 [DEBUG] [Thread-13775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:03:56.628 [DEBUG] [Thread-13775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:03:56.629 [DEBUG] [Thread-13775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:03:56.629 [DEBUG] [Thread-13775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:03:56.629 [DEBUG] [Thread-13775] [transport.py] [_log()] Compression: none
2025-11-12T10:03:56.629 [DEBUG] [Thread-13775] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:03:56.694 [DEBUG] [Thread-13775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:03:56.694 [DEBUG] [Thread-13775] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:03:56.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:03:56.695 [DEBUG] [Thread-13775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:03:56.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:03:56.752 [DEBUG] [Thread-13775] [transport.py] [_log()] userauth is OK
2025-11-12T10:03:56.752 [DEBUG] [Thread-13775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:03:56.752 [DEBUG] [Thread-13775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:03:56.752 [DEBUG] [Thread-13775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:03:56.752 [DEBUG] [Thread-13775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:03:56.771 [INFO] [Thread-13775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:03:56.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:03:56.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:03:57.591 [DEBUG] [Thread-13775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:03:57.591 [DEBUG] [Thread-13775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:03:57.640 [DEBUG] [Thread-13775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:03:57.640 [DEBUG] [Thread-13775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:03:57.649 [DEBUG] [Thread-13775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:03:57.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:03:57.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-11-12T10:03:57.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-11-12T10:03:57.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:03:57.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:03:57.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:03:57.686 [DEBUG] [Thread-13775] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:04:10.278 [DEBUG] [Thread-13777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:04:25.334 [DEBUG] [Thread-13778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:04:26.551 [DEBUG] [Thread-13779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:04:27.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:04:27.708 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:04:27.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:04:28.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 4, 13), 25.93, 17.53, 0.0, 23.17, 23.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:04:28.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:04:13
2025-11-12T10:04:28.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:04:28.645 [DEBUG] [Thread-13780] [transport.py] [_log()] starting thread (client mode): 0x173477f0
2025-11-12T10:04:28.645 [DEBUG] [Thread-13780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:04:28.657 [DEBUG] [Thread-13780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:04:28.657 [INFO] [Thread-13780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] client lang: <none>
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] server lang: <none>
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] kex follows: False
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] Compression: none
2025-11-12T10:04:28.660 [DEBUG] [Thread-13780] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:04:28.678 [DEBUG] [Thread-13780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:04:28.678 [DEBUG] [Thread-13780] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:04:28.678 [DEBUG] [Thread-13780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:04:28.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:04:28.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:04:28.680 [DEBUG] [Thread-13780] [transport.py] [_log()] userauth is OK
2025-11-12T10:04:28.680 [DEBUG] [Thread-13780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:04:28.680 [DEBUG] [Thread-13780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:04:28.680 [DEBUG] [Thread-13780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:04:28.680 [DEBUG] [Thread-13780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:04:28.715 [INFO] [Thread-13780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:04:28.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:04:29.312 [DEBUG] [Thread-13780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:04:29.312 [DEBUG] [Thread-13780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:04:29.313 [DEBUG] [Thread-13780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:04:29.353 [DEBUG] [Thread-13780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:04:29.354 [DEBUG] [Thread-13780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:04:29.357 [DEBUG] [Thread-13780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:04:29.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:04:29.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:04:29.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:04:29.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:04:29.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:04:29.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:04:29.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:04:29.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:04:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:04:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.336201 -999.00  +23.60  22.64     23   +1.40 1 1 1 1 1   888    0 22.52 53.76 ----- 16.6 22.6 290.8 26.3 29.1 -26.8 28.4 -25.0 27.0 -24.6 27.8 -24.9
2025-11-12T10:04:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:04:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:04:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.336201
2025-11-12T10:04:29.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:04:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:04:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:04:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:04:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:04:29.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:04:13', tmtdew=25.93, humidity=17.53, cloud=0.0, wind=23.17, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:04:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:04:29.381 [DEBUG] [Thread-13780] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:04:29.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:04:29.479 [DEBUG] [Thread-13783] [transport.py] [_log()] starting thread (client mode): 0x17344370
2025-11-12T10:04:29.479 [DEBUG] [Thread-13783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:04:29.494 [DEBUG] [Thread-13783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:04:29.494 [INFO] [Thread-13783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] client lang: <none>
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] server lang: <none>
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] kex follows: False
2025-11-12T10:04:29.502 [DEBUG] [Thread-13783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:04:29.503 [DEBUG] [Thread-13783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:04:29.503 [DEBUG] [Thread-13783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:04:29.503 [DEBUG] [Thread-13783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:04:29.503 [DEBUG] [Thread-13783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:04:29.503 [DEBUG] [Thread-13783] [transport.py] [_log()] Compression: none
2025-11-12T10:04:29.503 [DEBUG] [Thread-13783] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:04:29.567 [DEBUG] [Thread-13783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:04:29.567 [DEBUG] [Thread-13783] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:04:29.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:04:29.569 [DEBUG] [Thread-13783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:04:29.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:04:29.624 [DEBUG] [Thread-13783] [transport.py] [_log()] userauth is OK
2025-11-12T10:04:29.624 [DEBUG] [Thread-13783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:04:29.625 [DEBUG] [Thread-13783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:04:29.625 [DEBUG] [Thread-13783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:04:29.625 [DEBUG] [Thread-13783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:04:29.643 [INFO] [Thread-13783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:04:29.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:04:29.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:04:30.512 [DEBUG] [Thread-13783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:04:30.512 [DEBUG] [Thread-13783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:04:30.559 [DEBUG] [Thread-13783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:04:30.559 [DEBUG] [Thread-13783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:04:30.568 [DEBUG] [Thread-13783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:04:30.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:04:30.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:04:30.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-11-12T10:04:30.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:04:30.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:04:30.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:04:30.609 [DEBUG] [Thread-13783] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:04:40.375 [DEBUG] [Thread-13785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:04:50.236 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:04:50.237 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:04:55.428 [DEBUG] [Thread-13786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:05:00.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:05:00.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:05:00.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:05:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 4, 45), 26.83, 16.68, 0.0, 23.2, 24.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:05:01.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:04:45
2025-11-12T10:05:01.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:05:01.606 [DEBUG] [Thread-13787] [transport.py] [_log()] starting thread (client mode): 0x17345900
2025-11-12T10:05:01.607 [DEBUG] [Thread-13787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:05:01.626 [DEBUG] [Thread-13787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:05:01.626 [INFO] [Thread-13787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] client lang: <none>
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] server lang: <none>
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] kex follows: False
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:05:01.627 [DEBUG] [Thread-13787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:05:01.628 [DEBUG] [Thread-13787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:05:01.628 [DEBUG] [Thread-13787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:05:01.628 [DEBUG] [Thread-13787] [transport.py] [_log()] Compression: none
2025-11-12T10:05:01.628 [DEBUG] [Thread-13787] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:05:01.635 [DEBUG] [Thread-13787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:05:01.635 [DEBUG] [Thread-13787] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:05:01.635 [DEBUG] [Thread-13787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:05:01.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:05:01.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:05:01.636 [DEBUG] [Thread-13787] [transport.py] [_log()] userauth is OK
2025-11-12T10:05:01.636 [DEBUG] [Thread-13787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:05:01.636 [DEBUG] [Thread-13787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:05:01.636 [DEBUG] [Thread-13787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:05:01.636 [DEBUG] [Thread-13787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:05:01.649 [INFO] [Thread-13787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:05:01.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:05:02.466 [DEBUG] [Thread-13787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:05:02.467 [DEBUG] [Thread-13787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:05:02.467 [DEBUG] [Thread-13787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:05:02.507 [DEBUG] [Thread-13787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:05:02.508 [DEBUG] [Thread-13787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:05:02.510 [DEBUG] [Thread-13787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:05:02.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:05:02.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:05:02.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:05:02.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:05:02.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:05:02.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:05:02.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:05:02.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:05:02.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:05:02.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.336201 -999.00  +23.60  22.64     23   +1.40 1 1 1 1 1   888    0 22.52 53.76 ----- 16.6 22.6 290.8 26.3 29.1 -26.8 28.4 -25.0 27.0 -24.6 27.8 -24.9
2025-11-12T10:05:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:05:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:05:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.336201
2025-11-12T10:05:02.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:05:02.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:05:02.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:05:02.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:05:02.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:05:02.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:04:45', tmtdew=26.83, humidity=16.68, cloud=0.0, wind=23.2, temperature=24.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:04:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:05:02.530 [DEBUG] [Thread-13787] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:05:02.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:05:02.628 [DEBUG] [Thread-13790] [transport.py] [_log()] starting thread (client mode): 0x19dda230
2025-11-12T10:05:02.629 [DEBUG] [Thread-13790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:05:02.646 [DEBUG] [Thread-13790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:05:02.646 [INFO] [Thread-13790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:05:02.658 [DEBUG] [Thread-13790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:05:02.659 [DEBUG] [Thread-13790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:05:02.659 [DEBUG] [Thread-13790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:05:02.659 [DEBUG] [Thread-13790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:05:02.659 [DEBUG] [Thread-13790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:05:02.659 [DEBUG] [Thread-13790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:05:02.659 [DEBUG] [Thread-13790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:05:02.659 [DEBUG] [Thread-13790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:05:02.659 [DEBUG] [Thread-13790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:05:02.660 [DEBUG] [Thread-13790] [transport.py] [_log()] client lang: <none>
2025-11-12T10:05:02.660 [DEBUG] [Thread-13790] [transport.py] [_log()] server lang: <none>
2025-11-12T10:05:02.660 [DEBUG] [Thread-13790] [transport.py] [_log()] kex follows: False
2025-11-12T10:05:02.660 [DEBUG] [Thread-13790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:05:02.660 [DEBUG] [Thread-13790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:05:02.660 [DEBUG] [Thread-13790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:05:02.660 [DEBUG] [Thread-13790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:05:02.660 [DEBUG] [Thread-13790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:05:02.661 [DEBUG] [Thread-13790] [transport.py] [_log()] Compression: none
2025-11-12T10:05:02.661 [DEBUG] [Thread-13790] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:05:02.716 [DEBUG] [Thread-13790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:05:02.717 [DEBUG] [Thread-13790] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:05:02.718 [DEBUG] [Thread-13790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:05:02.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:05:02.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:05:02.787 [DEBUG] [Thread-13790] [transport.py] [_log()] userauth is OK
2025-11-12T10:05:02.787 [DEBUG] [Thread-13790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:05:02.787 [DEBUG] [Thread-13790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:05:02.787 [DEBUG] [Thread-13790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:05:02.787 [DEBUG] [Thread-13790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:05:02.805 [INFO] [Thread-13790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:05:02.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:05:02.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:05:03.674 [DEBUG] [Thread-13790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:05:03.674 [DEBUG] [Thread-13790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:05:03.727 [DEBUG] [Thread-13790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:05:03.727 [DEBUG] [Thread-13790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:05:03.737 [DEBUG] [Thread-13790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:05:03.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:05:03.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-11-12T10:05:03.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-11-12T10:05:03.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:05:03.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:05:03.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:05:03.774 [DEBUG] [Thread-13790] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:05:10.462 [DEBUG] [Thread-13792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:05:25.516 [DEBUG] [Thread-13793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:05:26.587 [DEBUG] [Thread-13794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:05:33.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:05:33.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:05:33.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-11-12T10:05:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 5, 17), 26.85, 16.66, 0.0, 20.96, 24.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:05:34.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:05:17
2025-11-12T10:05:34.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:05:34.717 [DEBUG] [Thread-13795] [transport.py] [_log()] starting thread (client mode): 0x19dd9c30
2025-11-12T10:05:34.718 [DEBUG] [Thread-13795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:05:34.737 [DEBUG] [Thread-13795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:05:34.738 [INFO] [Thread-13795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] client lang: <none>
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] server lang: <none>
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] kex follows: False
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] Compression: none
2025-11-12T10:05:34.741 [DEBUG] [Thread-13795] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:05:34.759 [DEBUG] [Thread-13795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:05:34.759 [DEBUG] [Thread-13795] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:05:34.760 [DEBUG] [Thread-13795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:05:34.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:05:34.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:05:34.762 [DEBUG] [Thread-13795] [transport.py] [_log()] userauth is OK
2025-11-12T10:05:34.762 [DEBUG] [Thread-13795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:05:34.763 [DEBUG] [Thread-13795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:05:34.763 [DEBUG] [Thread-13795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:05:34.763 [DEBUG] [Thread-13795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:05:34.799 [INFO] [Thread-13795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:05:34.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:05:35.440 [DEBUG] [Thread-13795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:05:35.440 [DEBUG] [Thread-13795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:05:35.440 [DEBUG] [Thread-13795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:05:35.481 [DEBUG] [Thread-13795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:05:35.481 [DEBUG] [Thread-13795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:05:35.483 [DEBUG] [Thread-13795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:05:35.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:05:35.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:05:35.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:05:35.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:05:35.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:05:35.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:05:35.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:05:35.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:05:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:05:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.336548 -999.00  +23.80  20.97     23   +1.40 1 1 1 1 1   888    0 23.06 60.47 ----- 17.6 21.0 293.8 25.9 29.3 -25.1 28.5 -24.3 27.2 -23.9 28.0 -23.9
2025-11-12T10:05:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:05:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:05:35.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.336548
2025-11-12T10:05:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:05:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:05:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:05:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:05:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:05:35.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:05:17', tmtdew=26.85, humidity=16.66, cloud=0.0, wind=20.96, temperature=24.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:04:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:05:35.501 [DEBUG] [Thread-13795] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:05:35.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:05:35.589 [DEBUG] [Thread-13798] [transport.py] [_log()] starting thread (client mode): 0x1493ee00
2025-11-12T10:05:35.589 [DEBUG] [Thread-13798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:05:35.604 [DEBUG] [Thread-13798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:05:35.604 [INFO] [Thread-13798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] client lang: <none>
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] server lang: <none>
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] kex follows: False
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] Compression: none
2025-11-12T10:05:35.612 [DEBUG] [Thread-13798] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:05:35.670 [DEBUG] [Thread-13798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:05:35.670 [DEBUG] [Thread-13798] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:05:35.670 [DEBUG] [Thread-13798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:05:35.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:05:35.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:05:35.727 [DEBUG] [Thread-13798] [transport.py] [_log()] userauth is OK
2025-11-12T10:05:35.727 [DEBUG] [Thread-13798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:05:35.727 [DEBUG] [Thread-13798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:05:35.727 [DEBUG] [Thread-13798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:05:35.727 [DEBUG] [Thread-13798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:05:35.741 [INFO] [Thread-13798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:05:35.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:05:35.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:05:36.579 [DEBUG] [Thread-13798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:05:36.579 [DEBUG] [Thread-13798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:05:36.627 [DEBUG] [Thread-13798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:05:36.627 [DEBUG] [Thread-13798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:05:36.635 [DEBUG] [Thread-13798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:05:36.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:05:36.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:05:36.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-11-12T10:05:36.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:05:36.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:05:36.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:05:36.667 [DEBUG] [Thread-13798] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:05:40.548 [DEBUG] [Thread-13800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:05:50.380 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:05:50.381 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:05:55.589 [DEBUG] [Thread-13801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:06:06.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:06:06.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:06:06.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-11-12T10:06:07.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 5, 49), 26.87, 16.43, 0.0, 25.46, 24.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:06:07.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:05:49
2025-11-12T10:06:07.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:06:07.624 [DEBUG] [Thread-13802] [transport.py] [_log()] starting thread (client mode): 0x17347340
2025-11-12T10:06:07.624 [DEBUG] [Thread-13802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:06:07.638 [DEBUG] [Thread-13802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:06:07.638 [INFO] [Thread-13802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] client lang: <none>
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] server lang: <none>
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] kex follows: False
2025-11-12T10:06:07.641 [DEBUG] [Thread-13802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:06:07.642 [DEBUG] [Thread-13802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:06:07.642 [DEBUG] [Thread-13802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:06:07.642 [DEBUG] [Thread-13802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:06:07.642 [DEBUG] [Thread-13802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:06:07.642 [DEBUG] [Thread-13802] [transport.py] [_log()] Compression: none
2025-11-12T10:06:07.642 [DEBUG] [Thread-13802] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:06:07.658 [DEBUG] [Thread-13802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:06:07.658 [DEBUG] [Thread-13802] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:06:07.658 [DEBUG] [Thread-13802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:06:07.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:06:07.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:06:07.660 [DEBUG] [Thread-13802] [transport.py] [_log()] userauth is OK
2025-11-12T10:06:07.660 [DEBUG] [Thread-13802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:06:07.660 [DEBUG] [Thread-13802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:06:07.660 [DEBUG] [Thread-13802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:06:07.660 [DEBUG] [Thread-13802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:06:07.673 [INFO] [Thread-13802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:06:07.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:06:08.422 [DEBUG] [Thread-13802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:06:08.422 [DEBUG] [Thread-13802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:06:08.422 [DEBUG] [Thread-13802] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:06:08.463 [DEBUG] [Thread-13802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:06:08.463 [DEBUG] [Thread-13802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:06:08.466 [DEBUG] [Thread-13802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:06:08.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:06:08.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:06:08.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:06:08.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:06:08.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:06:08.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:06:08.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:06:08.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:06:08.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:06:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.336895 -999.00  +23.70  23.09     22   +0.90 1 1 1 1 1   888    0 23.22 58.55 ----- 23.0 23.1 277.8 33.4 29.1 -27.6 28.6 -25.7 27.3 -25.6 28.0 -25.5
2025-11-12T10:06:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:06:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:06:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.336895
2025-11-12T10:06:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:06:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:06:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:06:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:06:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:06:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:05:49', tmtdew=26.87, humidity=16.43, cloud=0.0, wind=25.46, temperature=24.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:05:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:06:08.494 [DEBUG] [Thread-13802] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:06:08.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:06:08.588 [DEBUG] [Thread-13805] [transport.py] [_log()] starting thread (client mode): 0x1493ffd0
2025-11-12T10:06:08.588 [DEBUG] [Thread-13805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:06:08.602 [DEBUG] [Thread-13805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:06:08.603 [INFO] [Thread-13805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:06:08.610 [DEBUG] [Thread-13805] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:06:08.610 [DEBUG] [Thread-13805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:06:08.610 [DEBUG] [Thread-13805] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:06:08.610 [DEBUG] [Thread-13805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:06:08.610 [DEBUG] [Thread-13805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:06:08.610 [DEBUG] [Thread-13805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:06:08.610 [DEBUG] [Thread-13805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:06:08.610 [DEBUG] [Thread-13805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] client lang: <none>
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] server lang: <none>
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] kex follows: False
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] Compression: none
2025-11-12T10:06:08.611 [DEBUG] [Thread-13805] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:06:08.667 [DEBUG] [Thread-13805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:06:08.668 [DEBUG] [Thread-13805] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:06:08.669 [DEBUG] [Thread-13805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:06:08.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:06:08.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:06:08.724 [DEBUG] [Thread-13805] [transport.py] [_log()] userauth is OK
2025-11-12T10:06:08.724 [DEBUG] [Thread-13805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:06:08.724 [DEBUG] [Thread-13805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:06:08.724 [DEBUG] [Thread-13805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:06:08.724 [DEBUG] [Thread-13805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:06:08.743 [INFO] [Thread-13805] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:06:08.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:06:08.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:06:09.609 [DEBUG] [Thread-13805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:06:09.609 [DEBUG] [Thread-13805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:06:09.658 [DEBUG] [Thread-13805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:06:09.658 [DEBUG] [Thread-13805] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:06:09.667 [DEBUG] [Thread-13805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:06:09.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:06:09.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:06:09.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-11-12T10:06:09.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:06:09.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:06:09.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:06:09.710 [DEBUG] [Thread-13805] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:06:10.623 [DEBUG] [Thread-13807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:06:25.681 [DEBUG] [Thread-13808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:06:26.626 [DEBUG] [Thread-13809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:06:39.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:06:39.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:06:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:06:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 6, 21), 27.42, 15.78, 0.0, 27.12, 24.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:06:40.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:06:21
2025-11-12T10:06:40.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:06:40.648 [DEBUG] [Thread-13810] [transport.py] [_log()] starting thread (client mode): 0x173452d0
2025-11-12T10:06:40.648 [DEBUG] [Thread-13810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:06:40.668 [DEBUG] [Thread-13810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:06:40.668 [INFO] [Thread-13810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:06:40.671 [DEBUG] [Thread-13810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] client lang: <none>
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] server lang: <none>
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] kex follows: False
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] Compression: none
2025-11-12T10:06:40.672 [DEBUG] [Thread-13810] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:06:40.690 [DEBUG] [Thread-13810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:06:40.690 [DEBUG] [Thread-13810] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:06:40.691 [DEBUG] [Thread-13810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:06:40.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:06:40.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:06:40.693 [DEBUG] [Thread-13810] [transport.py] [_log()] userauth is OK
2025-11-12T10:06:40.693 [DEBUG] [Thread-13810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:06:40.694 [DEBUG] [Thread-13810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:06:40.694 [DEBUG] [Thread-13810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:06:40.694 [DEBUG] [Thread-13810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:06:40.718 [INFO] [Thread-13810] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:06:40.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:06:40.719 [DEBUG] [Thread-13812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:06:41.347 [DEBUG] [Thread-13810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:06:41.347 [DEBUG] [Thread-13810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:06:41.348 [DEBUG] [Thread-13810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:06:41.389 [DEBUG] [Thread-13810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:06:41.389 [DEBUG] [Thread-13810] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:06:41.392 [DEBUG] [Thread-13810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:06:41.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:06:41.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:06:41.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:06:41.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:06:41.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:06:41.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:06:41.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:06:41.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:06:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:06:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.337590 -999.00  +23.20  23.20     22   +0.40 1 1 1 1 1   888    0 22.98 61.01 ----- 17.6 23.2 287.0 32.2 29.1 -26.5 28.4 -26.0 26.6 -27.0 27.9 -24.8
2025-11-12T10:06:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:06:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:06:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.337590
2025-11-12T10:06:41.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:06:41.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:06:41.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:06:41.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:06:41.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:06:41.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:06:21', tmtdew=27.42, humidity=15.78, cloud=0.0, wind=27.12, temperature=24.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:06:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:06:41.419 [DEBUG] [Thread-13810] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:06:41.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:06:41.513 [DEBUG] [Thread-13814] [transport.py] [_log()] starting thread (client mode): 0x19ddb4f0
2025-11-12T10:06:41.513 [DEBUG] [Thread-13814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:06:41.531 [DEBUG] [Thread-13814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:06:41.532 [INFO] [Thread-13814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:06:41.539 [DEBUG] [Thread-13814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:06:41.539 [DEBUG] [Thread-13814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] client lang: <none>
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] server lang: <none>
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] kex follows: False
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:06:41.540 [DEBUG] [Thread-13814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:06:41.541 [DEBUG] [Thread-13814] [transport.py] [_log()] Compression: none
2025-11-12T10:06:41.541 [DEBUG] [Thread-13814] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:06:41.599 [DEBUG] [Thread-13814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:06:41.600 [DEBUG] [Thread-13814] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:06:41.600 [DEBUG] [Thread-13814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:06:41.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:06:41.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:06:41.656 [DEBUG] [Thread-13814] [transport.py] [_log()] userauth is OK
2025-11-12T10:06:41.656 [DEBUG] [Thread-13814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:06:41.657 [DEBUG] [Thread-13814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:06:41.657 [DEBUG] [Thread-13814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:06:41.657 [DEBUG] [Thread-13814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:06:41.676 [INFO] [Thread-13814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:06:41.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:06:41.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:06:42.538 [DEBUG] [Thread-13814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:06:42.539 [DEBUG] [Thread-13814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:06:42.593 [DEBUG] [Thread-13814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:06:42.593 [DEBUG] [Thread-13814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:06:42.603 [DEBUG] [Thread-13814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:06:42.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:06:42.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-11-12T10:06:42.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-11-12T10:06:42.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:06:42.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:06:42.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:06:42.640 [DEBUG] [Thread-13814] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:06:50.521 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:06:50.522 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:06:55.751 [DEBUG] [Thread-13816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:07:10.794 [DEBUG] [Thread-13817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:07:12.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:07:12.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:07:12.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-11-12T10:07:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 6, 53), 27.47, 15.58, 0.0, 19.92, 23.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:07:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:06:53
2025-11-12T10:07:13.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:07:13.571 [DEBUG] [Thread-13818] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T10:07:13.571 [DEBUG] [Thread-13818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:07:13.592 [DEBUG] [Thread-13818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:07:13.592 [INFO] [Thread-13818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:07:13.595 [DEBUG] [Thread-13818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] client lang: <none>
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] server lang: <none>
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] kex follows: False
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] Compression: none
2025-11-12T10:07:13.596 [DEBUG] [Thread-13818] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:07:13.610 [DEBUG] [Thread-13818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:07:13.610 [DEBUG] [Thread-13818] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:07:13.611 [DEBUG] [Thread-13818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:07:13.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:07:13.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:07:13.613 [DEBUG] [Thread-13818] [transport.py] [_log()] userauth is OK
2025-11-12T10:07:13.613 [DEBUG] [Thread-13818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:07:13.613 [DEBUG] [Thread-13818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:07:13.613 [DEBUG] [Thread-13818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:07:13.613 [DEBUG] [Thread-13818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:07:13.637 [INFO] [Thread-13818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:07:13.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:07:14.375 [DEBUG] [Thread-13818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:07:14.375 [DEBUG] [Thread-13818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:07:14.376 [DEBUG] [Thread-13818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:07:14.416 [DEBUG] [Thread-13818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:07:14.416 [DEBUG] [Thread-13818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:07:14.419 [DEBUG] [Thread-13818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:07:14.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:07:14.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:07:14.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:07:14.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:07:14.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:07:14.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:07:14.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:07:14.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:07:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:07:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.337937 -999.00  +23.30  20.25     21   +0.20 1 1 1 1 1   888    0 23.52 63.68 ----- 24.3 20.2 294.6 32.1 29.1 -26.4 28.4 -26.1 26.9 -26.7 27.8 -24.6
2025-11-12T10:07:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:07:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:07:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.337937
2025-11-12T10:07:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:07:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:07:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:07:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:07:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:07:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:06:53', tmtdew=27.47, humidity=15.58, cloud=0.0, wind=19.92, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:06:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:07:14.447 [DEBUG] [Thread-13818] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:07:14.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:07:14.543 [DEBUG] [Thread-13821] [transport.py] [_log()] starting thread (client mode): 0x17346140
2025-11-12T10:07:14.543 [DEBUG] [Thread-13821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:07:14.558 [DEBUG] [Thread-13821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:07:14.559 [INFO] [Thread-13821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:07:14.566 [DEBUG] [Thread-13821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:07:14.566 [DEBUG] [Thread-13821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:07:14.566 [DEBUG] [Thread-13821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] client lang: <none>
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] server lang: <none>
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] kex follows: False
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] Compression: none
2025-11-12T10:07:14.567 [DEBUG] [Thread-13821] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:07:14.624 [DEBUG] [Thread-13821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:07:14.624 [DEBUG] [Thread-13821] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:07:14.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:07:14.625 [DEBUG] [Thread-13821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:07:14.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:07:14.680 [DEBUG] [Thread-13821] [transport.py] [_log()] userauth is OK
2025-11-12T10:07:14.680 [DEBUG] [Thread-13821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:07:14.680 [DEBUG] [Thread-13821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:07:14.681 [DEBUG] [Thread-13821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:07:14.681 [DEBUG] [Thread-13821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:07:14.700 [INFO] [Thread-13821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:07:14.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:07:14.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:07:15.556 [DEBUG] [Thread-13821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:07:15.556 [DEBUG] [Thread-13821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:07:15.613 [DEBUG] [Thread-13821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:07:15.613 [DEBUG] [Thread-13821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:07:15.634 [DEBUG] [Thread-13821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:07:15.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:07:15.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-11-12T10:07:15.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-11-12T10:07:15.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:07:15.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:07:15.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:07:15.697 [DEBUG] [Thread-13821] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:07:25.829 [DEBUG] [Thread-13823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:07:26.655 [DEBUG] [Thread-13824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:07:40.867 [DEBUG] [Thread-13825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:07:45.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:07:45.705 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:07:45.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:07:46.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 7, 25), 27.66, 15.38, 0.0, 19.44, 23.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:07:46.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:07:25
2025-11-12T10:07:46.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:07:46.607 [DEBUG] [Thread-13826] [transport.py] [_log()] starting thread (client mode): 0x19ddb4f0
2025-11-12T10:07:46.607 [DEBUG] [Thread-13826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:07:46.628 [DEBUG] [Thread-13826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:07:46.628 [INFO] [Thread-13826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:07:46.631 [DEBUG] [Thread-13826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:07:46.631 [DEBUG] [Thread-13826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:07:46.631 [DEBUG] [Thread-13826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:07:46.631 [DEBUG] [Thread-13826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] client lang: <none>
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] server lang: <none>
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] kex follows: False
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:07:46.632 [DEBUG] [Thread-13826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:07:46.633 [DEBUG] [Thread-13826] [transport.py] [_log()] Compression: none
2025-11-12T10:07:46.633 [DEBUG] [Thread-13826] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:07:46.650 [DEBUG] [Thread-13826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:07:46.651 [DEBUG] [Thread-13826] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:07:46.652 [DEBUG] [Thread-13826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:07:46.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:07:46.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:07:46.654 [DEBUG] [Thread-13826] [transport.py] [_log()] userauth is OK
2025-11-12T10:07:46.655 [DEBUG] [Thread-13826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:07:46.655 [DEBUG] [Thread-13826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:07:46.655 [DEBUG] [Thread-13826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:07:46.655 [DEBUG] [Thread-13826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:07:46.675 [INFO] [Thread-13826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:07:46.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:07:47.301 [DEBUG] [Thread-13826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:07:47.301 [DEBUG] [Thread-13826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:07:47.301 [DEBUG] [Thread-13826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:07:47.342 [DEBUG] [Thread-13826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:07:47.342 [DEBUG] [Thread-13826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:07:47.345 [DEBUG] [Thread-13826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:07:47.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:07:47.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:07:47.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:07:47.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:07:47.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:07:47.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:07:47.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:07:47.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:07:47.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:07:47.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.338284 -999.00  +23.10  23.30     21   +0.10 1 1 1 1 1   888    0 23.31 64.34 ----- 25.9 23.3 299.0 25.3 29.3 -26.0 28.4 -25.2 26.9 -24.9 27.9 -24.6
2025-11-12T10:07:47.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:07:47.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:07:47.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.338284
2025-11-12T10:07:47.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:07:47.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:07:47.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:07:47.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:07:47.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:07:47.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:07:25', tmtdew=27.66, humidity=15.38, cloud=0.0, wind=19.44, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:07:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:07:47.374 [DEBUG] [Thread-13826] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:07: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-11-12T10:07:47.476 [DEBUG] [Thread-13829] [transport.py] [_log()] starting thread (client mode): 0x1493dea0
2025-11-12T10:07:47.476 [DEBUG] [Thread-13829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:07:47.490 [DEBUG] [Thread-13829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:07:47.490 [INFO] [Thread-13829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:07:47.498 [DEBUG] [Thread-13829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:07:47.498 [DEBUG] [Thread-13829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:07:47.498 [DEBUG] [Thread-13829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] client lang: <none>
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] server lang: <none>
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] kex follows: False
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:07:47.499 [DEBUG] [Thread-13829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:07:47.500 [DEBUG] [Thread-13829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:07:47.500 [DEBUG] [Thread-13829] [transport.py] [_log()] Compression: none
2025-11-12T10:07:47.500 [DEBUG] [Thread-13829] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:07:47.556 [DEBUG] [Thread-13829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:07:47.556 [DEBUG] [Thread-13829] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:07:47.557 [DEBUG] [Thread-13829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:07:47.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:07:47.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:07:47.612 [DEBUG] [Thread-13829] [transport.py] [_log()] userauth is OK
2025-11-12T10:07:47.612 [DEBUG] [Thread-13829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:07:47.612 [DEBUG] [Thread-13829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:07:47.612 [DEBUG] [Thread-13829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:07:47.612 [DEBUG] [Thread-13829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:07:47.631 [INFO] [Thread-13829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:07:47.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:07:47.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:07:48.459 [DEBUG] [Thread-13829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:07:48.459 [DEBUG] [Thread-13829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:07:48.507 [DEBUG] [Thread-13829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:07:48.507 [DEBUG] [Thread-13829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:07:48.516 [DEBUG] [Thread-13829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:07:48.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:07:48.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-11-12T10:07:48.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:07:48.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:07:48.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:07:48.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:07:48.549 [DEBUG] [Thread-13829] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:07:50.663 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:07:50.664 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:07:55.903 [DEBUG] [Thread-13831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:08:10.945 [DEBUG] [Thread-13832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:08:18.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:08:18.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:08:18.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-11-12T10:08:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 7, 57), 27.73, 15.42, 0.0, 18.4, 23.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:08:19.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:07:57
2025-11-12T10:08:19.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:08:19.487 [DEBUG] [Thread-13833] [transport.py] [_log()] starting thread (client mode): 0x173e9d20
2025-11-12T10:08:19.487 [DEBUG] [Thread-13833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:08:19.508 [DEBUG] [Thread-13833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:08:19.508 [INFO] [Thread-13833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:08:19.511 [DEBUG] [Thread-13833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:08:19.511 [DEBUG] [Thread-13833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:08:19.511 [DEBUG] [Thread-13833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:08:19.511 [DEBUG] [Thread-13833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:08:19.511 [DEBUG] [Thread-13833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] client lang: <none>
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] server lang: <none>
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] kex follows: False
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] Compression: none
2025-11-12T10:08:19.512 [DEBUG] [Thread-13833] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:08:19.529 [DEBUG] [Thread-13833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:08:19.529 [DEBUG] [Thread-13833] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:08:19.530 [DEBUG] [Thread-13833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:08:19.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:08:19.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:08:19.532 [DEBUG] [Thread-13833] [transport.py] [_log()] userauth is OK
2025-11-12T10:08:19.532 [DEBUG] [Thread-13833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:08:19.532 [DEBUG] [Thread-13833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:08:19.532 [DEBUG] [Thread-13833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:08:19.532 [DEBUG] [Thread-13833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:08:19.559 [INFO] [Thread-13833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:08:19.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:08:20.247 [DEBUG] [Thread-13833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:08:20.247 [DEBUG] [Thread-13833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:08:20.248 [DEBUG] [Thread-13833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:08:20.289 [DEBUG] [Thread-13833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:08:20.289 [DEBUG] [Thread-13833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:08:20.292 [DEBUG] [Thread-13833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:08:20.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:08:20.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:08:20.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:08:20.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:08:20.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:08:20.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:08:20.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:08:20.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:08:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:08:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.338631 -999.00  +23.00  18.17     22   +0.20 1 1 1 1 1   888    0 23.37 65.69 ----- 16.1 18.2 303.4 25.8 29.3 -25.7 28.4 -25.5 27.0 -26.1 27.9 -24.2
2025-11-12T10:08:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:08:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:08:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.338631
2025-11-12T10:08:20.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:08:20.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:08:20.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:08:20.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:08:20.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:08:20.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:07:57', tmtdew=27.73, humidity=15.42, cloud=0.0, wind=18.4, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:07:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:08:20.319 [DEBUG] [Thread-13833] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:08:20.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:08:20.413 [DEBUG] [Thread-13836] [transport.py] [_log()] starting thread (client mode): 0x173466b0
2025-11-12T10:08:20.414 [DEBUG] [Thread-13836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:08:20.428 [DEBUG] [Thread-13836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:08:20.428 [INFO] [Thread-13836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:08:20.436 [DEBUG] [Thread-13836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] client lang: <none>
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] server lang: <none>
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] kex follows: False
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:08:20.437 [DEBUG] [Thread-13836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:08:20.438 [DEBUG] [Thread-13836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:08:20.438 [DEBUG] [Thread-13836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:08:20.438 [DEBUG] [Thread-13836] [transport.py] [_log()] Compression: none
2025-11-12T10:08:20.438 [DEBUG] [Thread-13836] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:08:20.495 [DEBUG] [Thread-13836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:08:20.495 [DEBUG] [Thread-13836] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:08:20.496 [DEBUG] [Thread-13836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:08:20.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:08:20.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:08:20.552 [DEBUG] [Thread-13836] [transport.py] [_log()] userauth is OK
2025-11-12T10:08:20.552 [DEBUG] [Thread-13836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:08:20.552 [DEBUG] [Thread-13836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:08:20.552 [DEBUG] [Thread-13836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:08:20.552 [DEBUG] [Thread-13836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:08:20.571 [INFO] [Thread-13836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:08:20.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:08:20.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:08:21.405 [DEBUG] [Thread-13836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:08:21.406 [DEBUG] [Thread-13836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:08:21.453 [DEBUG] [Thread-13836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:08:21.454 [DEBUG] [Thread-13836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:08:21.463 [DEBUG] [Thread-13836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:08:21.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:08:21.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')
2025-11-12T10:08:21.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:08:21.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:08:21.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:08:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:08:21.499 [DEBUG] [Thread-13836] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:08:25.980 [DEBUG] [Thread-13838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:08:26.688 [DEBUG] [Thread-13839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:08:41.040 [DEBUG] [Thread-13840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:08:50.814 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:08:50.814 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:08:51.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:08:51.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:08:51.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-11-12T10:08:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 8, 29), 27.7, 15.43, 0.0, 20.66, 23.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:08:52.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:08:29
2025-11-12T10:08:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:08:52.446 [DEBUG] [Thread-13841] [transport.py] [_log()] starting thread (client mode): 0x173449a0
2025-11-12T10:08:52.446 [DEBUG] [Thread-13841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:08:52.467 [DEBUG] [Thread-13841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:08:52.467 [INFO] [Thread-13841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] client lang: <none>
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] server lang: <none>
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] kex follows: False
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:08:52.470 [DEBUG] [Thread-13841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:08:52.471 [DEBUG] [Thread-13841] [transport.py] [_log()] Compression: none
2025-11-12T10:08:52.471 [DEBUG] [Thread-13841] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:08:52.488 [DEBUG] [Thread-13841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:08:52.489 [DEBUG] [Thread-13841] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:08:52.489 [DEBUG] [Thread-13841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:08:52.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:08:52.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:08:52.490 [DEBUG] [Thread-13841] [transport.py] [_log()] userauth is OK
2025-11-12T10:08:52.490 [DEBUG] [Thread-13841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:08:52.490 [DEBUG] [Thread-13841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:08:52.490 [DEBUG] [Thread-13841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:08:52.490 [DEBUG] [Thread-13841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:08:52.507 [INFO] [Thread-13841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:08:52.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:08:53.126 [DEBUG] [Thread-13841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:08:53.126 [DEBUG] [Thread-13841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:08:53.126 [DEBUG] [Thread-13841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:08:53.167 [DEBUG] [Thread-13841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:08:53.167 [DEBUG] [Thread-13841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:08:53.169 [DEBUG] [Thread-13841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:08:53.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:08:53.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:08:53.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:08:53.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:08:53.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:08:53.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:08:53.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.338979 -999.00  +23.30  17.61     22   +0.60 1 1 1 1 1   888    0 23.50 68.62 ----- 20.4 17.6 293.8 25.9 29.5 -25.1 28.6 -24.5 27.2 -24.0 28.1 -23.9
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.338979
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:08:53.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:08:29', tmtdew=27.7, humidity=15.43, cloud=0.0, wind=20.66, temperature=23.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:08:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:08:53.189 [DEBUG] [Thread-13841] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:08:53.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:08:53.275 [DEBUG] [Thread-13844] [transport.py] [_log()] starting thread (client mode): 0x173ebc70
2025-11-12T10:08:53.276 [DEBUG] [Thread-13844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:08:53.290 [DEBUG] [Thread-13844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:08:53.290 [INFO] [Thread-13844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] client lang: <none>
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] server lang: <none>
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] kex follows: False
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] Compression: none
2025-11-12T10:08:53.298 [DEBUG] [Thread-13844] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:08:53.360 [DEBUG] [Thread-13844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:08:53.360 [DEBUG] [Thread-13844] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:08:53.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:08:53.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:08:53.360 [DEBUG] [Thread-13844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:08:53.418 [DEBUG] [Thread-13844] [transport.py] [_log()] userauth is OK
2025-11-12T10:08:53.418 [DEBUG] [Thread-13844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:08:53.418 [DEBUG] [Thread-13844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:08:53.418 [DEBUG] [Thread-13844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:08:53.418 [DEBUG] [Thread-13844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:08:53.436 [INFO] [Thread-13844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:08:53.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:08:53.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:08:54.299 [DEBUG] [Thread-13844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:08:54.299 [DEBUG] [Thread-13844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:08:54.347 [DEBUG] [Thread-13844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:08:54.347 [DEBUG] [Thread-13844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:08:54.357 [DEBUG] [Thread-13844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:08:54.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:08:54.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:08:54.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-11-12T10:08:54.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:08:54.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:08:54.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:08:54.393 [DEBUG] [Thread-13844] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:08:56.072 [DEBUG] [Thread-13846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:09:11.117 [DEBUG] [Thread-13847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:09:24.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:09:24.396 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:09:24.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-11-12T10:09:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 9, 1), 27.38, 16.07, 0.0, 17.73, 23.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:09:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:09:01
2025-11-12T10:09:25.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:09:25.317 [DEBUG] [Thread-13848] [transport.py] [_log()] starting thread (client mode): 0x173bca00
2025-11-12T10:09:25.317 [DEBUG] [Thread-13848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:09:25.339 [DEBUG] [Thread-13848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:09:25.339 [INFO] [Thread-13848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] client lang: <none>
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] server lang: <none>
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] kex follows: False
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:09:25.340 [DEBUG] [Thread-13848] [transport.py] [_log()] Compression: none
2025-11-12T10:09:25.341 [DEBUG] [Thread-13848] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:09:25.350 [DEBUG] [Thread-13848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:09:25.350 [DEBUG] [Thread-13848] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:09:25.351 [DEBUG] [Thread-13848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:09:25.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:09:25.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:09:25.352 [DEBUG] [Thread-13848] [transport.py] [_log()] userauth is OK
2025-11-12T10:09:25.353 [DEBUG] [Thread-13848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:09:25.353 [DEBUG] [Thread-13848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:09:25.353 [DEBUG] [Thread-13848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:09:25.353 [DEBUG] [Thread-13848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:09:25.376 [INFO] [Thread-13848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:09:25.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:09:26.020 [DEBUG] [Thread-13848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:09:26.021 [DEBUG] [Thread-13848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:09:26.021 [DEBUG] [Thread-13848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:09:26.061 [DEBUG] [Thread-13848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:09:26.062 [DEBUG] [Thread-13848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:09:26.066 [DEBUG] [Thread-13848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:09:26.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:09:26.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:09:26.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:09:26.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:09:26.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:09:26.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:09:26.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:09:26.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:09:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:09:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.339326 -999.00  +23.20  17.37     22   +0.90 1 1 1 1 1   888    0 23.58 70.42 ----- 19.6 17.4 292.0 24.4 29.6 -25.4 28.7 -24.8 27.2 -24.4 28.1 -24.1
2025-11-12T10:09:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:09:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:09:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.339326
2025-11-12T10:09:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:09:26.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:09:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:09:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:09:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:09:26.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:09:01', tmtdew=27.38, humidity=16.07, cloud=0.0, wind=17.73, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:08:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:09:26.091 [DEBUG] [Thread-13848] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:09:26.154 [DEBUG] [Thread-13851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:09:26.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:09:26.189 [DEBUG] [Thread-13852] [transport.py] [_log()] starting thread (client mode): 0x1493c8e0
2025-11-12T10:09:26.189 [DEBUG] [Thread-13852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:09:26.205 [DEBUG] [Thread-13852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:09:26.205 [INFO] [Thread-13852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] client lang: <none>
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] server lang: <none>
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] kex follows: False
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:09:26.213 [DEBUG] [Thread-13852] [transport.py] [_log()] Compression: none
2025-11-12T10:09:26.214 [DEBUG] [Thread-13852] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:09:26.275 [DEBUG] [Thread-13852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:09:26.276 [DEBUG] [Thread-13852] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:09:26.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:09:26.277 [DEBUG] [Thread-13852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:09:26.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:09:26.332 [DEBUG] [Thread-13852] [transport.py] [_log()] userauth is OK
2025-11-12T10:09:26.332 [DEBUG] [Thread-13852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:09:26.332 [DEBUG] [Thread-13852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:09:26.332 [DEBUG] [Thread-13852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:09:26.332 [DEBUG] [Thread-13852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:09:26.352 [INFO] [Thread-13852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:09:26.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:09:26.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:09:26.732 [DEBUG] [Thread-13854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:09:27.200 [DEBUG] [Thread-13852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:09:27.200 [DEBUG] [Thread-13852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:09:27.248 [DEBUG] [Thread-13852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:09:27.248 [DEBUG] [Thread-13852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:09:27.256 [DEBUG] [Thread-13852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:09:27.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:09:27.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-11-12T10:09:27.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:09:27.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:09:27.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:09:27.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:09:27.287 [DEBUG] [Thread-13852] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:09:41.192 [DEBUG] [Thread-13855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:09:50.958 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:09:50.959 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:09:56.230 [DEBUG] [Thread-13856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:09:57.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:09:57.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:09:57.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:09:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 9, 33), 27.0, 16.5, 0.0, 20.77, 23.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:09:57.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:09:33
2025-11-12T10:09:58.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:09:58.225 [DEBUG] [Thread-13857] [transport.py] [_log()] starting thread (client mode): 0x17360220
2025-11-12T10:09:58.225 [DEBUG] [Thread-13857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:09:58.246 [DEBUG] [Thread-13857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:09:58.246 [INFO] [Thread-13857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] client lang: <none>
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] server lang: <none>
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] kex follows: False
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:09:58.249 [DEBUG] [Thread-13857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:09:58.250 [DEBUG] [Thread-13857] [transport.py] [_log()] Compression: none
2025-11-12T10:09:58.250 [DEBUG] [Thread-13857] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:09:58.267 [DEBUG] [Thread-13857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:09:58.268 [DEBUG] [Thread-13857] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:09:58.268 [DEBUG] [Thread-13857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:09:58.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:09:58.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:09:58.270 [DEBUG] [Thread-13857] [transport.py] [_log()] userauth is OK
2025-11-12T10:09:58.271 [DEBUG] [Thread-13857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:09:58.271 [DEBUG] [Thread-13857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:09:58.271 [DEBUG] [Thread-13857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:09:58.271 [DEBUG] [Thread-13857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:09:58.295 [INFO] [Thread-13857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:09:58.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:09:58.903 [DEBUG] [Thread-13857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:09:58.904 [DEBUG] [Thread-13857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:09:58.904 [DEBUG] [Thread-13857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:09:58.945 [DEBUG] [Thread-13857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:09:58.945 [DEBUG] [Thread-13857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:09:58.948 [DEBUG] [Thread-13857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:09:58.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:09:58.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:09:58.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:09:58.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:09:58.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:09:58.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:09:58.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:09:58.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:09:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:09:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.339673 -999.00  +23.50  18.10     23   +1.40 1 1 1 1 1   888    0 24.04 70.92 ----- 17.3 18.1 275.0 24.5 29.6 -25.8 28.8 -24.5 27.3 -24.2 28.3 -23.9
2025-11-12T10:09:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:09:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:09:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.339673
2025-11-12T10:09:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:09:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:09:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:09:58.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:09:58.975 [DEBUG] [Thread-13857] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:09:58.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:09:58.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:09:33', tmtdew=27.0, humidity=16.5, cloud=0.0, wind=20.77, temperature=23.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:09:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:09:59.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:09:59.061 [DEBUG] [Thread-13860] [transport.py] [_log()] starting thread (client mode): 0x173e9fc0
2025-11-12T10:09:59.061 [DEBUG] [Thread-13860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:09:59.076 [DEBUG] [Thread-13860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:09:59.076 [INFO] [Thread-13860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] client lang: <none>
2025-11-12T10:09:59.084 [DEBUG] [Thread-13860] [transport.py] [_log()] server lang: <none>
2025-11-12T10:09:59.085 [DEBUG] [Thread-13860] [transport.py] [_log()] kex follows: False
2025-11-12T10:09:59.085 [DEBUG] [Thread-13860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:09:59.085 [DEBUG] [Thread-13860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:09:59.085 [DEBUG] [Thread-13860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:09:59.085 [DEBUG] [Thread-13860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:09:59.085 [DEBUG] [Thread-13860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:09:59.085 [DEBUG] [Thread-13860] [transport.py] [_log()] Compression: none
2025-11-12T10:09:59.085 [DEBUG] [Thread-13860] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:09:59.147 [DEBUG] [Thread-13860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:09:59.148 [DEBUG] [Thread-13860] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:09:59.148 [DEBUG] [Thread-13860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:09:59.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:09:59.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:09:59.203 [DEBUG] [Thread-13860] [transport.py] [_log()] userauth is OK
2025-11-12T10:09:59.203 [DEBUG] [Thread-13860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:09:59.204 [DEBUG] [Thread-13860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:09:59.204 [DEBUG] [Thread-13860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:09:59.204 [DEBUG] [Thread-13860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:09:59.226 [INFO] [Thread-13860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:09:59.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:09:59.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:10:00.059 [DEBUG] [Thread-13860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:10:00.059 [DEBUG] [Thread-13860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:10:00.111 [DEBUG] [Thread-13860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:10:00.111 [DEBUG] [Thread-13860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:10:00.120 [DEBUG] [Thread-13860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:10:00.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:10:00.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-11-12T10:10:00.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-11-12T10:10:00.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:10:00.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:10:00.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:10:00.161 [DEBUG] [Thread-13860] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:10:11.262 [DEBUG] [Thread-13862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:10:26.299 [DEBUG] [Thread-13863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:10:26.769 [DEBUG] [Thread-13864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:10:30.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:10:30.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:10:30.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:10:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 10, 5), 26.5, 17.09, 0.0, 16.5, 23.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:10:30.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:10:05
2025-11-12T10:10:30.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:10:31.113 [DEBUG] [Thread-13865] [transport.py] [_log()] starting thread (client mode): 0x1493c400
2025-11-12T10:10:31.113 [DEBUG] [Thread-13865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:10:31.132 [DEBUG] [Thread-13865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:10:31.132 [INFO] [Thread-13865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] client lang: <none>
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] server lang: <none>
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] kex follows: False
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:10:31.134 [DEBUG] [Thread-13865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:10:31.135 [DEBUG] [Thread-13865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:10:31.135 [DEBUG] [Thread-13865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:10:31.135 [DEBUG] [Thread-13865] [transport.py] [_log()] Compression: none
2025-11-12T10:10:31.135 [DEBUG] [Thread-13865] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:10:31.161 [DEBUG] [Thread-13865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:10:31.162 [DEBUG] [Thread-13865] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:10:31.162 [DEBUG] [Thread-13865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:10:31.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:10:31.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:10:31.162 [DEBUG] [Thread-13865] [transport.py] [_log()] userauth is OK
2025-11-12T10:10:31.162 [DEBUG] [Thread-13865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:10:31.163 [DEBUG] [Thread-13865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:10:31.163 [DEBUG] [Thread-13865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:10:31.163 [DEBUG] [Thread-13865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:10:31.172 [INFO] [Thread-13865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:10:31.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:10:31.870 [DEBUG] [Thread-13865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:10:31.870 [DEBUG] [Thread-13865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:10:31.870 [DEBUG] [Thread-13865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:10:31.911 [DEBUG] [Thread-13865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:10:31.911 [DEBUG] [Thread-13865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:10:31.913 [DEBUG] [Thread-13865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:10:31.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:10:31.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:10:31.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:10:31.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:10:31.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:10:31.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:10:31.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.340020 -999.00  +23.60  21.34     24   +2.00 1 1 1 1 1   888    0 23.75 70.75 ----- 19.6 21.3 267.2 23.8 29.7 -25.7 28.8 -24.1 27.1 -27.5 28.3 -24.0
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.340020
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:10:31.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:10:05', tmtdew=26.5, humidity=17.09, cloud=0.0, wind=16.5, temperature=23.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:09:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:10:31.934 [DEBUG] [Thread-13865] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:10:32.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:10:32.014 [DEBUG] [Thread-13868] [transport.py] [_log()] starting thread (client mode): 0x173eab30
2025-11-12T10:10:32.014 [DEBUG] [Thread-13868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:10:32.030 [DEBUG] [Thread-13868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:10:32.030 [INFO] [Thread-13868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:10:32.037 [DEBUG] [Thread-13868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:10:32.037 [DEBUG] [Thread-13868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:10:32.037 [DEBUG] [Thread-13868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:10:32.037 [DEBUG] [Thread-13868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:10:32.037 [DEBUG] [Thread-13868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:10:32.037 [DEBUG] [Thread-13868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:10:32.037 [DEBUG] [Thread-13868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] client lang: <none>
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] server lang: <none>
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] kex follows: False
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] Compression: none
2025-11-12T10:10:32.038 [DEBUG] [Thread-13868] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:10:32.094 [DEBUG] [Thread-13868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:10:32.094 [DEBUG] [Thread-13868] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:10:32.094 [DEBUG] [Thread-13868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:10:32.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:10:32.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:10:32.151 [DEBUG] [Thread-13868] [transport.py] [_log()] userauth is OK
2025-11-12T10:10:32.151 [DEBUG] [Thread-13868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:10:32.151 [DEBUG] [Thread-13868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:10:32.151 [DEBUG] [Thread-13868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:10:32.151 [DEBUG] [Thread-13868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:10:32.165 [INFO] [Thread-13868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:10:32.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:10:32.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:10:33.014 [DEBUG] [Thread-13868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:10:33.014 [DEBUG] [Thread-13868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:10:33.066 [DEBUG] [Thread-13868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:10:33.066 [DEBUG] [Thread-13868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:10:33.074 [DEBUG] [Thread-13868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:10:33.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:10:33.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-11-12T10:10: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-11-12T10:10:33.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:10:33.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:10:33.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:10:33.107 [DEBUG] [Thread-13868] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:10:41.324 [DEBUG] [Thread-13870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:10:51.100 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:10:51.110 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:10:56.366 [DEBUG] [Thread-13871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:11:03.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:11:03.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:11:03.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-11-12T10:11:03.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 10, 37), 26.3, 17.2, 0.0, 19.64, 24.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:11:03.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:10:37
2025-11-12T10:11:03.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:11:04.083 [DEBUG] [Thread-13872] [transport.py] [_log()] starting thread (client mode): 0x17362020
2025-11-12T10:11:04.083 [DEBUG] [Thread-13872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:11:04.103 [DEBUG] [Thread-13872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:11:04.103 [INFO] [Thread-13872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] client lang: <none>
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] server lang: <none>
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] kex follows: False
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] Compression: none
2025-11-12T10:11:04.106 [DEBUG] [Thread-13872] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:11:04.121 [DEBUG] [Thread-13872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:11:04.122 [DEBUG] [Thread-13872] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:11:04.122 [DEBUG] [Thread-13872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:11:04.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:11:04.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:11:04.122 [DEBUG] [Thread-13872] [transport.py] [_log()] userauth is OK
2025-11-12T10:11:04.123 [DEBUG] [Thread-13872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:11:04.123 [DEBUG] [Thread-13872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:11:04.123 [DEBUG] [Thread-13872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:11:04.123 [DEBUG] [Thread-13872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:11:04.132 [INFO] [Thread-13872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:11:04.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:11:04.758 [DEBUG] [Thread-13872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:11:04.758 [DEBUG] [Thread-13872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:11:04.758 [DEBUG] [Thread-13872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:11:04.799 [DEBUG] [Thread-13872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:11:04.799 [DEBUG] [Thread-13872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:11:04.801 [DEBUG] [Thread-13872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:11:04.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:11:04.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:11:04.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:11:04.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:11:04.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:11:04.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:11:04.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:11:04.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:11:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:11:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.340715 -999.00  +24.20  14.49     23   +2.20 1 1 1 1 1   888    0 23.95 75.59 ----- 18.2 14.5 279.2 28.3 29.9 -25.5 29.1 -24.5 27.5 -24.6 28.4 -23.5
2025-11-12T10:11:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:11:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:11:04.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.340715
2025-11-12T10:11:04.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:11:04.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:11:04.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:11:04.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:11:04.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:11:04.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:10:37', tmtdew=26.3, humidity=17.2, cloud=0.0, wind=19.64, temperature=24.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:10:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:11:04.821 [DEBUG] [Thread-13872] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:11:04.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:11:04.904 [DEBUG] [Thread-13875] [transport.py] [_log()] starting thread (client mode): 0x17347df0
2025-11-12T10:11:04.904 [DEBUG] [Thread-13875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:11:04.918 [DEBUG] [Thread-13875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:11:04.919 [INFO] [Thread-13875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] client lang: <none>
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] server lang: <none>
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] kex follows: False
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] Compression: none
2025-11-12T10:11:04.926 [DEBUG] [Thread-13875] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:11:04.985 [DEBUG] [Thread-13875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:11:04.986 [DEBUG] [Thread-13875] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:11:04.986 [DEBUG] [Thread-13875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:11:04.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:11:04.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:11:05.043 [DEBUG] [Thread-13875] [transport.py] [_log()] userauth is OK
2025-11-12T10:11:05.043 [DEBUG] [Thread-13875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:11:05.043 [DEBUG] [Thread-13875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:11:05.043 [DEBUG] [Thread-13875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:11:05.043 [DEBUG] [Thread-13875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:11:05.057 [INFO] [Thread-13875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:11:05.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:11:05.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:11:05.907 [DEBUG] [Thread-13875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:11:05.907 [DEBUG] [Thread-13875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:11:05.955 [DEBUG] [Thread-13875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:11:05.955 [DEBUG] [Thread-13875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:11:05.963 [DEBUG] [Thread-13875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:11:05.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:11:05.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:11:05.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-11-12T10:11:05.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:11:05.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:11:05.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:11:05.995 [DEBUG] [Thread-13875] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:11:11.392 [DEBUG] [Thread-13877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:11:26.427 [DEBUG] [Thread-13878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:11:26.820 [DEBUG] [Thread-13879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:11:36.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:11:36.016 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:11:36.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-11-12T10:11:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 11, 9), 26.21, 17.29, 0.0, 21.74, 24.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:11:36.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:11:09
2025-11-12T10:11:36.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:11:36.956 [DEBUG] [Thread-13880] [transport.py] [_log()] starting thread (client mode): 0x1493c400
2025-11-12T10:11:36.956 [DEBUG] [Thread-13880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:11:36.971 [DEBUG] [Thread-13880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:11:36.972 [INFO] [Thread-13880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] client lang: <none>
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] server lang: <none>
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] kex follows: False
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] Compression: none
2025-11-12T10:11:36.973 [DEBUG] [Thread-13880] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:11:36.985 [DEBUG] [Thread-13880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:11:36.985 [DEBUG] [Thread-13880] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:11:36.985 [DEBUG] [Thread-13880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:11:36.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:11:36.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:11:36.986 [DEBUG] [Thread-13880] [transport.py] [_log()] userauth is OK
2025-11-12T10:11:36.986 [DEBUG] [Thread-13880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:11:36.986 [DEBUG] [Thread-13880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:11:36.986 [DEBUG] [Thread-13880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:11:36.986 [DEBUG] [Thread-13880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:11:36.995 [INFO] [Thread-13880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:11:36.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:11:37.655 [DEBUG] [Thread-13880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:11:37.655 [DEBUG] [Thread-13880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:11:37.655 [DEBUG] [Thread-13880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:11:37.696 [DEBUG] [Thread-13880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:11:37.696 [DEBUG] [Thread-13880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:11:37.707 [DEBUG] [Thread-13880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:11:37.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:11:37.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:11:37.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:11:37.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:11:37.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:11:37.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:11:37.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.341062 -999.00  +24.30  26.17     23   +2.20 1 1 1 1 1   888    0 23.99 77.80 ----- 26.1 26.2 280.4 34.1 29.9 -26.3 29.1 -24.2 27.7 -25.5 28.5 -23.8
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.341062
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:11:37.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:11:09', tmtdew=26.21, humidity=17.29, cloud=0.0, wind=21.74, temperature=24.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:11:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:11:37.728 [DEBUG] [Thread-13880] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:11:37.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:11:37.813 [DEBUG] [Thread-13883] [transport.py] [_log()] starting thread (client mode): 0x1739b1c0
2025-11-12T10:11:37.813 [DEBUG] [Thread-13883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:11:37.828 [DEBUG] [Thread-13883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:11:37.828 [INFO] [Thread-13883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:11:37.835 [DEBUG] [Thread-13883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:11:37.835 [DEBUG] [Thread-13883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:11:37.835 [DEBUG] [Thread-13883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:11:37.835 [DEBUG] [Thread-13883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:11:37.835 [DEBUG] [Thread-13883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:11:37.835 [DEBUG] [Thread-13883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] client lang: <none>
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] server lang: <none>
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] kex follows: False
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] Compression: none
2025-11-12T10:11:37.836 [DEBUG] [Thread-13883] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:11:37.893 [DEBUG] [Thread-13883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:11:37.894 [DEBUG] [Thread-13883] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:11:37.894 [DEBUG] [Thread-13883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:11:37.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:11:37.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:11:37.951 [DEBUG] [Thread-13883] [transport.py] [_log()] userauth is OK
2025-11-12T10:11:37.951 [DEBUG] [Thread-13883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:11:37.951 [DEBUG] [Thread-13883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:11:37.951 [DEBUG] [Thread-13883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:11:37.951 [DEBUG] [Thread-13883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:11:37.965 [INFO] [Thread-13883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:11:37.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:11:37.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:11:38.797 [DEBUG] [Thread-13883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:11:38.797 [DEBUG] [Thread-13883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:11:38.844 [DEBUG] [Thread-13883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:11:38.844 [DEBUG] [Thread-13883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:11:38.852 [DEBUG] [Thread-13883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:11:38.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:11:38.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-11-12T10:11:38.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-11-12T10:11:38.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:11:38.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:11:38.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:11:38.885 [DEBUG] [Thread-13883] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:11:41.452 [DEBUG] [Thread-13885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:11:51.254 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:11:51.254 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:11:56.485 [DEBUG] [Thread-13886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:12:08.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:12:08.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:12:08.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-11-12T10:12:09.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 11, 41), 26.05, 17.89, 0.0, 27.68, 24.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:12:09.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:11:41
2025-11-12T10:12:09.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:12:09.858 [DEBUG] [Thread-13887] [transport.py] [_log()] starting thread (client mode): 0x173440d0
2025-11-12T10:12:09.858 [DEBUG] [Thread-13887] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:12:09.877 [DEBUG] [Thread-13887] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:12:09.877 [INFO] [Thread-13887] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:12:09.880 [DEBUG] [Thread-13887] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] client lang: <none>
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] server lang: <none>
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] kex follows: False
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] Compression: none
2025-11-12T10:12:09.881 [DEBUG] [Thread-13887] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:12:09.895 [DEBUG] [Thread-13887] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:12:09.896 [DEBUG] [Thread-13887] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:12:09.896 [DEBUG] [Thread-13887] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:12:09.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:12:09.896 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:12:09.896 [DEBUG] [Thread-13887] [transport.py] [_log()] userauth is OK
2025-11-12T10:12:09.896 [DEBUG] [Thread-13887] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:12:09.896 [DEBUG] [Thread-13887] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:12:09.896 [DEBUG] [Thread-13887] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:12:09.897 [DEBUG] [Thread-13887] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:12:09.905 [INFO] [Thread-13887] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:12:09.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:12:10.521 [DEBUG] [Thread-13887] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:12:10.521 [DEBUG] [Thread-13887] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:12:10.521 [DEBUG] [Thread-13887] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:12:10.562 [DEBUG] [Thread-13887] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:12:10.562 [DEBUG] [Thread-13887] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:12:10.564 [DEBUG] [Thread-13887] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:12:10.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:12:10.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:12:10.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:12:10.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:12:10.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:12:10.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:12:10.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.341409 -999.00  +24.50  21.79     23   +2.50 1 1 1 1 1   888    0 24.07 74.62 ----- 21.8 21.8 293.2 25.6 30.1 -24.9 29.2 -23.7 27.6 -26.0 28.7 -23.3
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.341409
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:12:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:11:41', tmtdew=26.05, humidity=17.89, cloud=0.0, wind=27.68, temperature=24.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:11:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:12:10.583 [DEBUG] [Thread-13887] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:12: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-11-12T10:12:10.668 [DEBUG] [Thread-13890] [transport.py] [_log()] starting thread (client mode): 0x1737e230
2025-11-12T10:12:10.668 [DEBUG] [Thread-13890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:12:10.686 [DEBUG] [Thread-13890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:12:10.686 [INFO] [Thread-13890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] client lang: <none>
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] server lang: <none>
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] kex follows: False
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:12:10.694 [DEBUG] [Thread-13890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:12:10.695 [DEBUG] [Thread-13890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:12:10.695 [DEBUG] [Thread-13890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:12:10.695 [DEBUG] [Thread-13890] [transport.py] [_log()] Compression: none
2025-11-12T10:12:10.695 [DEBUG] [Thread-13890] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:12:10.749 [DEBUG] [Thread-13890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:12:10.749 [DEBUG] [Thread-13890] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:12:10.749 [DEBUG] [Thread-13890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:12:10.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:12:10.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:12:10.807 [DEBUG] [Thread-13890] [transport.py] [_log()] userauth is OK
2025-11-12T10:12:10.807 [DEBUG] [Thread-13890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:12:10.807 [DEBUG] [Thread-13890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:12:10.807 [DEBUG] [Thread-13890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:12:10.807 [DEBUG] [Thread-13890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:12:10.821 [INFO] [Thread-13890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:12:10.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:12:10.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:12:11.511 [DEBUG] [Thread-13892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:12:11.664 [DEBUG] [Thread-13890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:12:11.664 [DEBUG] [Thread-13890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:12:11.712 [DEBUG] [Thread-13890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:12:11.712 [DEBUG] [Thread-13890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:12:11.722 [DEBUG] [Thread-13890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:12:11.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:12:11.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-11-12T10:12:11.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:12:11.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:12:11.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:12:11.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:12:11.761 [DEBUG] [Thread-13890] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:12:26.550 [DEBUG] [Thread-13893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:12:26.853 [DEBUG] [Thread-13894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:12:41.588 [DEBUG] [Thread-13895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:12:41.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:12:41.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:12:41.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-11-12T10:12:42.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 12, 14), 26.18, 17.74, 0.0, 28.34, 24.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:12:42.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:12:14
2025-11-12T10:12:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:12:42.789 [DEBUG] [Thread-13896] [transport.py] [_log()] starting thread (client mode): 0x173bf7c0
2025-11-12T10:12:42.789 [DEBUG] [Thread-13896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:12:42.801 [DEBUG] [Thread-13896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:12:42.801 [INFO] [Thread-13896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:12:42.803 [DEBUG] [Thread-13896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:12:42.803 [DEBUG] [Thread-13896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:12:42.803 [DEBUG] [Thread-13896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:12:42.803 [DEBUG] [Thread-13896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] client lang: <none>
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] server lang: <none>
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] kex follows: False
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] Compression: none
2025-11-12T10:12:42.804 [DEBUG] [Thread-13896] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:12:42.811 [DEBUG] [Thread-13896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:12:42.812 [DEBUG] [Thread-13896] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:12:42.812 [DEBUG] [Thread-13896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:12:42.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:12:42.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:12:42.813 [DEBUG] [Thread-13896] [transport.py] [_log()] userauth is OK
2025-11-12T10:12:42.813 [DEBUG] [Thread-13896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:12:42.813 [DEBUG] [Thread-13896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:12:42.813 [DEBUG] [Thread-13896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:12:42.813 [DEBUG] [Thread-13896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:12:42.825 [INFO] [Thread-13896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:12:42.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:12:43.373 [DEBUG] [Thread-13896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:12:43.374 [DEBUG] [Thread-13896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:12:43.374 [DEBUG] [Thread-13896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:12:43.414 [DEBUG] [Thread-13896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:12:43.414 [DEBUG] [Thread-13896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:12:43.416 [DEBUG] [Thread-13896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:12:43.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:12:43.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:12:43.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:12:43.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:12:43.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:12:43.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:12:43.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.341756 -999.00  +24.60  15.64     23   +2.50 1 1 1 1 1   888    0 23.96 76.42 ----- 17.4 15.6 272.6 24.3 30.3 -25.5 29.3 -24.9 27.9 -22.6 28.8 -23.9
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.341756
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:12:43.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:12:14', tmtdew=26.18, humidity=17.74, cloud=0.0, wind=28.34, temperature=24.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:12:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:12:43.435 [DEBUG] [Thread-13896] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:12:43.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:12:43.521 [DEBUG] [Thread-13899] [transport.py] [_log()] starting thread (client mode): 0x173bfc10
2025-11-12T10:12:43.521 [DEBUG] [Thread-13899] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:12:43.536 [DEBUG] [Thread-13899] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:12:43.537 [INFO] [Thread-13899] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] client lang: <none>
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] server lang: <none>
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] kex follows: False
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] Compression: none
2025-11-12T10:12:43.544 [DEBUG] [Thread-13899] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:12:43.601 [DEBUG] [Thread-13899] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:12:43.601 [DEBUG] [Thread-13899] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:12:43.601 [DEBUG] [Thread-13899] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:12:43.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:12:43.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:12:43.662 [DEBUG] [Thread-13899] [transport.py] [_log()] userauth is OK
2025-11-12T10:12:43.662 [DEBUG] [Thread-13899] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:12:43.662 [DEBUG] [Thread-13899] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:12:43.662 [DEBUG] [Thread-13899] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:12:43.663 [DEBUG] [Thread-13899] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:12:43.676 [INFO] [Thread-13899] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:12:43.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:12:43.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:12:44.499 [DEBUG] [Thread-13899] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:12:44.499 [DEBUG] [Thread-13899] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:12:44.550 [DEBUG] [Thread-13899] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:12:44.550 [DEBUG] [Thread-13899] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:12:44.560 [DEBUG] [Thread-13899] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:12:44.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:12:44.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-11-12T10:12:44.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:12:44.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:12:44.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:12:44.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:12:44.592 [DEBUG] [Thread-13899] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:12:51.396 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:12:51.397 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:12:56.620 [DEBUG] [Thread-13901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:13:11.676 [DEBUG] [Thread-13902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:13:14.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:13:14.615 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:13:14.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-11-12T10:13:15.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 12, 46), 25.92, 18.04, 0.0, 20.17, 24.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:13:15.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:12:46
2025-11-12T10:13:15.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:13:15.555 [DEBUG] [Thread-13903] [transport.py] [_log()] starting thread (client mode): 0x1737ed10
2025-11-12T10:13:15.555 [DEBUG] [Thread-13903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:13:15.575 [DEBUG] [Thread-13903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:13:15.576 [INFO] [Thread-13903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] client lang: <none>
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] server lang: <none>
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] kex follows: False
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] Compression: none
2025-11-12T10:13:15.579 [DEBUG] [Thread-13903] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:13:15.599 [DEBUG] [Thread-13903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:13:15.599 [DEBUG] [Thread-13903] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:13:15.600 [DEBUG] [Thread-13903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:13:15.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:13:15.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:13:15.641 [DEBUG] [Thread-13903] [transport.py] [_log()] userauth is OK
2025-11-12T10:13:15.641 [DEBUG] [Thread-13903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:13:15.641 [DEBUG] [Thread-13903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:13:15.641 [DEBUG] [Thread-13903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:13:15.641 [DEBUG] [Thread-13903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:13:15.666 [INFO] [Thread-13903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:13:15.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:13:16.258 [DEBUG] [Thread-13903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:13:16.258 [DEBUG] [Thread-13903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:13:16.259 [DEBUG] [Thread-13903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:13:16.300 [DEBUG] [Thread-13903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:13:16.300 [DEBUG] [Thread-13903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:13:16.303 [DEBUG] [Thread-13903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:13:16.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:13:16.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:13:16.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:13:16.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:13:16.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:13:16.327 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:13:16.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:13:16.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:13:16.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:13:16.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.342103 -999.00  +24.60  16.07     22   +2.00 1 1 1 1 1   888    0 23.93 82.85 ----- 15.0 16.1 267.4 23.2 30.4 -25.7 29.5 -23.3 27.9 -22.8 28.9 -23.6
2025-11-12T10:13:16.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:13:16.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:13:16.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.342103
2025-11-12T10:13:16.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:13:16.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:13:16.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:13:16.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:13:16.330 [DEBUG] [Thread-13903] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:13:16.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:13:16.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:12:46', tmtdew=25.92, humidity=18.04, cloud=0.0, wind=20.17, temperature=24.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:12:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:13:16.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:13:16.427 [DEBUG] [Thread-13906] [transport.py] [_log()] starting thread (client mode): 0x1737ca60
2025-11-12T10:13:16.427 [DEBUG] [Thread-13906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:13:16.447 [DEBUG] [Thread-13906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:13:16.447 [INFO] [Thread-13906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:13:16.454 [DEBUG] [Thread-13906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] client lang: <none>
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] server lang: <none>
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] kex follows: False
2025-11-12T10:13:16.455 [DEBUG] [Thread-13906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:13:16.456 [DEBUG] [Thread-13906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:13:16.456 [DEBUG] [Thread-13906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:13:16.456 [DEBUG] [Thread-13906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:13:16.456 [DEBUG] [Thread-13906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:13:16.456 [DEBUG] [Thread-13906] [transport.py] [_log()] Compression: none
2025-11-12T10:13:16.456 [DEBUG] [Thread-13906] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:13:16.516 [DEBUG] [Thread-13906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:13:16.517 [DEBUG] [Thread-13906] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:13:16.517 [DEBUG] [Thread-13906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:13:16.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:13:16.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:13:16.576 [DEBUG] [Thread-13906] [transport.py] [_log()] userauth is OK
2025-11-12T10:13:16.576 [DEBUG] [Thread-13906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:13:16.576 [DEBUG] [Thread-13906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:13:16.576 [DEBUG] [Thread-13906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:13:16.576 [DEBUG] [Thread-13906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:13:16.595 [INFO] [Thread-13906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:13:16.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:13:16.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:13:17.480 [DEBUG] [Thread-13906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:13:17.480 [DEBUG] [Thread-13906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:13:17.528 [DEBUG] [Thread-13906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:13:17.528 [DEBUG] [Thread-13906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:13:17.536 [DEBUG] [Thread-13906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:13:17.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:13:17.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-11-12T10:13:17.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-11-12T10:13:17.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:13:17.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:13:17.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:13:17.569 [DEBUG] [Thread-13906] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:13:26.709 [DEBUG] [Thread-13908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:13:26.907 [DEBUG] [Thread-13909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:13:41.761 [DEBUG] [Thread-13910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:13:47.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:13:47.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:13:47.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-11-12T10:13:48.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 13, 18), 26.03, 17.93, 0.0, 17.56, 24.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:13:48.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:13:18
2025-11-12T10:13:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:13:48.508 [DEBUG] [Thread-13911] [transport.py] [_log()] starting thread (client mode): 0x149a5300
2025-11-12T10:13:48.508 [DEBUG] [Thread-13911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:13:48.524 [DEBUG] [Thread-13911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:13:48.524 [INFO] [Thread-13911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:13:48.525 [DEBUG] [Thread-13911] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:13:48.525 [DEBUG] [Thread-13911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:13:48.525 [DEBUG] [Thread-13911] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:13:48.525 [DEBUG] [Thread-13911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:13:48.525 [DEBUG] [Thread-13911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] client lang: <none>
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] server lang: <none>
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] kex follows: False
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] Compression: none
2025-11-12T10:13:48.526 [DEBUG] [Thread-13911] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:13:48.535 [DEBUG] [Thread-13911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:13:48.535 [DEBUG] [Thread-13911] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:13:48.535 [DEBUG] [Thread-13911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:13:48.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:13:48.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:13:48.537 [DEBUG] [Thread-13911] [transport.py] [_log()] userauth is OK
2025-11-12T10:13:48.537 [DEBUG] [Thread-13911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:13:48.537 [DEBUG] [Thread-13911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:13:48.537 [DEBUG] [Thread-13911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:13:48.537 [DEBUG] [Thread-13911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:13:48.552 [INFO] [Thread-13911] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:13:48.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:13:49.145 [DEBUG] [Thread-13911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:13:49.145 [DEBUG] [Thread-13911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:13:49.145 [DEBUG] [Thread-13911] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:13:49.185 [DEBUG] [Thread-13911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:13:49.186 [DEBUG] [Thread-13911] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:13:49.189 [DEBUG] [Thread-13911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:13:49.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:13:49.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:13:49.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:13:49.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:13:49.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:13:49.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:13:49.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:13:49.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:13:49.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:13:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.342451 -999.00  +24.40  19.30     23   +2.10 1 1 1 1 1   888    0 24.23 86.28 ----- 20.9 19.3 280.6 24.1 30.5 -26.2 29.6 -24.6 28.1 -25.1 29.0 -24.4
2025-11-12T10:13:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:13:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:13:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.342451
2025-11-12T10:13:49.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:13:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:13:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:13:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:13:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:13:49.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:13:18', tmtdew=26.03, humidity=17.93, cloud=0.0, wind=17.56, temperature=24.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:13:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:13:49.214 [DEBUG] [Thread-13911] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:13:49.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:13:49.310 [DEBUG] [Thread-13914] [transport.py] [_log()] starting thread (client mode): 0x17399fc0
2025-11-12T10:13:49.310 [DEBUG] [Thread-13914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:13:49.326 [DEBUG] [Thread-13914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:13:49.327 [INFO] [Thread-13914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:13:49.334 [DEBUG] [Thread-13914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:13:49.334 [DEBUG] [Thread-13914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] client lang: <none>
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] server lang: <none>
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] kex follows: False
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] Compression: none
2025-11-12T10:13:49.335 [DEBUG] [Thread-13914] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:13:49.395 [DEBUG] [Thread-13914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:13:49.396 [DEBUG] [Thread-13914] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:13:49.396 [DEBUG] [Thread-13914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:13:49.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:13:49.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:13:49.452 [DEBUG] [Thread-13914] [transport.py] [_log()] userauth is OK
2025-11-12T10:13:49.452 [DEBUG] [Thread-13914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:13:49.452 [DEBUG] [Thread-13914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:13:49.452 [DEBUG] [Thread-13914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:13:49.452 [DEBUG] [Thread-13914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:13:49.473 [INFO] [Thread-13914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:13:49.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:13:49.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:13:50.334 [DEBUG] [Thread-13914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:13:50.335 [DEBUG] [Thread-13914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:13:50.383 [DEBUG] [Thread-13914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:13:50.383 [DEBUG] [Thread-13914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:13:50.392 [DEBUG] [Thread-13914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:13:50.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:13:50.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-11-12T10:13:50.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:13:50.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:13:50.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:13:50.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:13:50.429 [DEBUG] [Thread-13914] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:13:51.537 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:13:51.538 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:13:56.799 [DEBUG] [Thread-13916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:14:11.854 [DEBUG] [Thread-13917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:14:20.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:14:20.430 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:14:20.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:14:21.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 13, 49), 26.23, 17.31, 0.0, 22.69, 24.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:14:21.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:13:49
2025-11-12T10:14:21.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:14:21.349 [DEBUG] [Thread-13918] [transport.py] [_log()] starting thread (client mode): 0x1739a200
2025-11-12T10:14:21.350 [DEBUG] [Thread-13918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:14:21.371 [DEBUG] [Thread-13918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:14:21.371 [INFO] [Thread-13918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] client lang: <none>
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] server lang: <none>
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] kex follows: False
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] Compression: none
2025-11-12T10:14:21.375 [DEBUG] [Thread-13918] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:14:21.393 [DEBUG] [Thread-13918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:14:21.394 [DEBUG] [Thread-13918] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:14:21.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:14:21.395 [DEBUG] [Thread-13918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:14:21.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:14:21.397 [DEBUG] [Thread-13918] [transport.py] [_log()] userauth is OK
2025-11-12T10:14:21.397 [DEBUG] [Thread-13918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:14:21.398 [DEBUG] [Thread-13918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:14:21.398 [DEBUG] [Thread-13918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:14:21.398 [DEBUG] [Thread-13918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:14:21.418 [INFO] [Thread-13918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:14:21.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:14:22.053 [DEBUG] [Thread-13918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:14:22.053 [DEBUG] [Thread-13918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:14:22.054 [DEBUG] [Thread-13918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:14:22.094 [DEBUG] [Thread-13918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:14:22.094 [DEBUG] [Thread-13918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:14:22.097 [DEBUG] [Thread-13918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:14:22.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:14:22.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:14:22.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:14:22.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:14:22.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:14:22.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:14:22.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:14:22.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:14:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:14:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.342798 -999.00  +24.20  18.19     23   +1.80 1 1 1 1 1   888    0 24.30 83.60 ----- 17.3 18.2 283.0 29.6 30.4 -26.2 29.6 -24.8 28.1 -24.2 28.9 -24.0
2025-11-12T10:14:22.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:14:22.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:14:22.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.342798
2025-11-12T10:14:22.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:14:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:14:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:14:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:14:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:14:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:13:49', tmtdew=26.23, humidity=17.31, cloud=0.0, wind=22.69, temperature=24.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:13:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:14:22.125 [DEBUG] [Thread-13918] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:14:22.209 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:14:22.222 [DEBUG] [Thread-13921] [transport.py] [_log()] starting thread (client mode): 0x17399600
2025-11-12T10:14:22.222 [DEBUG] [Thread-13921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:14:22.238 [DEBUG] [Thread-13921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:14:22.238 [INFO] [Thread-13921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:14:22.245 [DEBUG] [Thread-13921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] client lang: <none>
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] server lang: <none>
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] kex follows: False
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:14:22.246 [DEBUG] [Thread-13921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:14:22.247 [DEBUG] [Thread-13921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:14:22.247 [DEBUG] [Thread-13921] [transport.py] [_log()] Compression: none
2025-11-12T10:14:22.247 [DEBUG] [Thread-13921] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:14:22.302 [DEBUG] [Thread-13921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:14:22.302 [DEBUG] [Thread-13921] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:14:22.302 [DEBUG] [Thread-13921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:14:22.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:14:22.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:14:22.366 [DEBUG] [Thread-13921] [transport.py] [_log()] userauth is OK
2025-11-12T10:14:22.366 [DEBUG] [Thread-13921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:14:22.366 [DEBUG] [Thread-13921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:14:22.367 [DEBUG] [Thread-13921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:14:22.367 [DEBUG] [Thread-13921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:14:22.390 [INFO] [Thread-13921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:14:22.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:14:22.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:14:23.212 [DEBUG] [Thread-13921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:14:23.212 [DEBUG] [Thread-13921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:14:23.260 [DEBUG] [Thread-13921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:14:23.260 [DEBUG] [Thread-13921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:14:23.268 [DEBUG] [Thread-13921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:14:23.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:14:23.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:14:23.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:14:23.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:14:23.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:14:23.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:14:23.306 [DEBUG] [Thread-13921] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:14:26.889 [DEBUG] [Thread-13923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:14:26.963 [DEBUG] [Thread-13924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:14:41.939 [DEBUG] [Thread-13925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:14:51.678 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:14:51.679 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:14:53.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:14:53.327 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:14:53.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-11-12T10:14:53.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 14, 22), 26.34, 17.18, 0.0, 21.6, 24.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:14:53.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:14:22
2025-11-12T10:14:54.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:14:54.243 [DEBUG] [Thread-13926] [transport.py] [_log()] starting thread (client mode): 0x173be020
2025-11-12T10:14:54.243 [DEBUG] [Thread-13926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:14:54.264 [DEBUG] [Thread-13926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:14:54.264 [INFO] [Thread-13926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] client lang: <none>
2025-11-12T10:14:54.268 [DEBUG] [Thread-13926] [transport.py] [_log()] server lang: <none>
2025-11-12T10:14:54.269 [DEBUG] [Thread-13926] [transport.py] [_log()] kex follows: False
2025-11-12T10:14:54.269 [DEBUG] [Thread-13926] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:14:54.269 [DEBUG] [Thread-13926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:14:54.269 [DEBUG] [Thread-13926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:14:54.269 [DEBUG] [Thread-13926] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:14:54.269 [DEBUG] [Thread-13926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:14:54.269 [DEBUG] [Thread-13926] [transport.py] [_log()] Compression: none
2025-11-12T10:14:54.269 [DEBUG] [Thread-13926] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:14:54.286 [DEBUG] [Thread-13926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:14:54.287 [DEBUG] [Thread-13926] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:14:54.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:14:54.289 [DEBUG] [Thread-13926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:14:54.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:14:54.291 [DEBUG] [Thread-13926] [transport.py] [_log()] userauth is OK
2025-11-12T10:14:54.291 [DEBUG] [Thread-13926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:14:54.292 [DEBUG] [Thread-13926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:14:54.292 [DEBUG] [Thread-13926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:14:54.292 [DEBUG] [Thread-13926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:14:54.312 [INFO] [Thread-13926] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:14:54.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:14:54.885 [DEBUG] [Thread-13926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:14:54.885 [DEBUG] [Thread-13926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:14:54.885 [DEBUG] [Thread-13926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:14:54.926 [DEBUG] [Thread-13926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:14:54.926 [DEBUG] [Thread-13926] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:14:54.929 [DEBUG] [Thread-13926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:14:54.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:14:54.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:14:54.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:14:54.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:14:54.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:14:54.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:14:54.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:14:54.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:14:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:14:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.343492 -999.00  +23.20  18.83     23   +1.30 1 1 1 1 1   888    0 24.90 98.26 ----- 19.2 18.8 271.4 24.6 30.2 -28.4 29.5 -25.9 27.5 -28.7 28.7 -25.4
2025-11-12T10:14:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:14:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:14:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.343492
2025-11-12T10:14:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:14:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:14:54.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:14:54.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:14:54.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:14:54.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:14:22', tmtdew=26.34, humidity=17.18, cloud=0.0, wind=21.6, temperature=24.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:14:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:14:54.957 [DEBUG] [Thread-13926] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:14:55.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:14:55.056 [DEBUG] [Thread-13929] [transport.py] [_log()] starting thread (client mode): 0x173bfc70
2025-11-12T10:14:55.056 [DEBUG] [Thread-13929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:14:55.071 [DEBUG] [Thread-13929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:14:55.071 [INFO] [Thread-13929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:14:55.078 [DEBUG] [Thread-13929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:14:55.078 [DEBUG] [Thread-13929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] client lang: <none>
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] server lang: <none>
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] kex follows: False
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] Compression: none
2025-11-12T10:14:55.079 [DEBUG] [Thread-13929] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:14:55.137 [DEBUG] [Thread-13929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:14:55.138 [DEBUG] [Thread-13929] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:14:55.138 [DEBUG] [Thread-13929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:14:55.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:14:55.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:14:55.200 [DEBUG] [Thread-13929] [transport.py] [_log()] userauth is OK
2025-11-12T10:14:55.200 [DEBUG] [Thread-13929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:14:55.200 [DEBUG] [Thread-13929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:14:55.200 [DEBUG] [Thread-13929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:14:55.200 [DEBUG] [Thread-13929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:14:55.214 [INFO] [Thread-13929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:14:55.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:14:55.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:14:56.053 [DEBUG] [Thread-13929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:14:56.053 [DEBUG] [Thread-13929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:14:56.101 [DEBUG] [Thread-13929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:14:56.101 [DEBUG] [Thread-13929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:14:56.109 [DEBUG] [Thread-13929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:14:56.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:14:56.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-11-12T10:14:56.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-11-12T10:14:56.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:14:56.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:14:56.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:14:56.140 [DEBUG] [Thread-13929] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:14:56.970 [DEBUG] [Thread-13931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:15:12.022 [DEBUG] [Thread-13932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:15:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:15:26.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:15:26.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-11-12T10:15:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 14, 54), 26.47, 17.1, 0.0, 21.9, 24.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:15:26.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:14:54
2025-11-12T10:15:26.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:15:26.993 [DEBUG] [Thread-13933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:15:27.053 [DEBUG] [Thread-13934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:15:27.089 [DEBUG] [Thread-13935] [transport.py] [_log()] starting thread (client mode): 0x173bfee0
2025-11-12T10:15:27.089 [DEBUG] [Thread-13935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:15:27.109 [DEBUG] [Thread-13935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:15:27.109 [INFO] [Thread-13935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] client lang: <none>
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] server lang: <none>
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] kex follows: False
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:15:27.112 [DEBUG] [Thread-13935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:15:27.113 [DEBUG] [Thread-13935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:15:27.113 [DEBUG] [Thread-13935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:15:27.113 [DEBUG] [Thread-13935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:15:27.113 [DEBUG] [Thread-13935] [transport.py] [_log()] Compression: none
2025-11-12T10:15:27.113 [DEBUG] [Thread-13935] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:15:27.128 [DEBUG] [Thread-13935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:15:27.129 [DEBUG] [Thread-13935] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:15:27.129 [DEBUG] [Thread-13935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:15:27.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:15:27.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:15:27.130 [DEBUG] [Thread-13935] [transport.py] [_log()] userauth is OK
2025-11-12T10:15:27.130 [DEBUG] [Thread-13935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:15:27.130 [DEBUG] [Thread-13935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:15:27.130 [DEBUG] [Thread-13935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:15:27.130 [DEBUG] [Thread-13935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:15:27.139 [INFO] [Thread-13935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:15:27.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:15:27.741 [DEBUG] [Thread-13935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:15:27.741 [DEBUG] [Thread-13935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:15:27.742 [DEBUG] [Thread-13935] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:15:27.782 [DEBUG] [Thread-13935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:15:27.782 [DEBUG] [Thread-13935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:15:27.784 [DEBUG] [Thread-13935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:15:27.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:15:27.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:15:27.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:15:27.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:15:27.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:15:27.802 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:15:27.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.343839 -999.00  +23.50  18.17     23   +1.40 1 1 1 1 1   888    0 24.63 100.98 ----- 14.0 18.2 258.2 22.6 30.4 -26.6 29.5 -25.1 27.7 -23.7 28.8 -25.3
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.343839
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:15:27.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:14:54', tmtdew=26.47, humidity=17.1, cloud=0.0, wind=21.9, temperature=24.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:15:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:15:27.803 [DEBUG] [Thread-13935] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:15:27.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:15:27.890 [DEBUG] [Thread-13938] [transport.py] [_log()] starting thread (client mode): 0x173bf130
2025-11-12T10:15:27.890 [DEBUG] [Thread-13938] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:15:27.905 [DEBUG] [Thread-13938] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:15:27.905 [INFO] [Thread-13938] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] client lang: <none>
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] server lang: <none>
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] kex follows: False
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] Compression: none
2025-11-12T10:15:27.914 [DEBUG] [Thread-13938] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:15:27.973 [DEBUG] [Thread-13938] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:15:27.973 [DEBUG] [Thread-13938] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:15:27.973 [DEBUG] [Thread-13938] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:15:27.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:15:27.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:15:28.034 [DEBUG] [Thread-13938] [transport.py] [_log()] userauth is OK
2025-11-12T10:15:28.034 [DEBUG] [Thread-13938] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:15:28.034 [DEBUG] [Thread-13938] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:15:28.034 [DEBUG] [Thread-13938] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:15:28.034 [DEBUG] [Thread-13938] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:15:28.049 [INFO] [Thread-13938] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:15:28.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:15:28.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:15:28.890 [DEBUG] [Thread-13938] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:15:28.890 [DEBUG] [Thread-13938] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:15:28.939 [DEBUG] [Thread-13938] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:15:28.939 [DEBUG] [Thread-13938] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:15:28.948 [DEBUG] [Thread-13938] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:15:28.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:15:28.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-11-12T10:15:28.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-11-12T10:15:28.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:15:28.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:15:28.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:15:28.984 [DEBUG] [Thread-13938] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:15:42.088 [DEBUG] [Thread-13940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:15:51.821 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:15:51.822 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:15:57.139 [DEBUG] [Thread-13941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:15:59.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:15:59.005 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:15:59.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-11-12T10:15:59.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 15, 26), 26.83, 16.67, 0.0, 21.53, 24.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:15:59.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:15:26
2025-11-12T10:15:59.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:16:00.021 [DEBUG] [Thread-13942] [transport.py] [_log()] starting thread (client mode): 0x17398a00
2025-11-12T10:16:00.021 [DEBUG] [Thread-13942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:16:00.041 [DEBUG] [Thread-13942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:16:00.041 [INFO] [Thread-13942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] client lang: <none>
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] server lang: <none>
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] kex follows: False
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:16:00.043 [DEBUG] [Thread-13942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:16:00.044 [DEBUG] [Thread-13942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:16:00.044 [DEBUG] [Thread-13942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:16:00.044 [DEBUG] [Thread-13942] [transport.py] [_log()] Compression: none
2025-11-12T10:16:00.044 [DEBUG] [Thread-13942] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:16:00.055 [DEBUG] [Thread-13942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:16:00.055 [DEBUG] [Thread-13942] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:16:00.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:16:00.056 [DEBUG] [Thread-13942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:16:00.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:16:00.056 [DEBUG] [Thread-13942] [transport.py] [_log()] userauth is OK
2025-11-12T10:16:00.056 [DEBUG] [Thread-13942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:16:00.056 [DEBUG] [Thread-13942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:16:00.056 [DEBUG] [Thread-13942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:16:00.056 [DEBUG] [Thread-13942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:16:00.065 [INFO] [Thread-13942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:16:00.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:16:00.642 [DEBUG] [Thread-13942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:16:00.642 [DEBUG] [Thread-13942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:16:00.642 [DEBUG] [Thread-13942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:16:00.683 [DEBUG] [Thread-13942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:16:00.683 [DEBUG] [Thread-13942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:16:00.685 [DEBUG] [Thread-13942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:16:00.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:16:00.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:16:00.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:16:00.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:16:00.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:16:00.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:16:00.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.344187 -999.00  +23.70  18.89     23   +1.30 1 1 1 1 1   888    0 25.02 105.38 ----- 20.4 18.9 262.4 23.6 30.3 -27.6 29.5 -25.7 27.9 -24.8 28.7 -25.6
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.344187
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:16:00.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:15:26', tmtdew=26.83, humidity=16.67, cloud=0.0, wind=21.53, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:15:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:16:00.705 [DEBUG] [Thread-13942] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:16:00.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:16:00.790 [DEBUG] [Thread-13945] [transport.py] [_log()] starting thread (client mode): 0x17398c70
2025-11-12T10:16:00.790 [DEBUG] [Thread-13945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:16:00.805 [DEBUG] [Thread-13945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:16:00.805 [INFO] [Thread-13945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:16:00.814 [DEBUG] [Thread-13945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:16:00.814 [DEBUG] [Thread-13945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:16:00.814 [DEBUG] [Thread-13945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:16:00.814 [DEBUG] [Thread-13945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:16:00.814 [DEBUG] [Thread-13945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:16:00.814 [DEBUG] [Thread-13945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:16:00.814 [DEBUG] [Thread-13945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] client lang: <none>
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] server lang: <none>
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] kex follows: False
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] Compression: none
2025-11-12T10:16:00.815 [DEBUG] [Thread-13945] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:16:00.871 [DEBUG] [Thread-13945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:16:00.871 [DEBUG] [Thread-13945] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:16:00.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:16:00.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:16:00.872 [DEBUG] [Thread-13945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:16:00.927 [DEBUG] [Thread-13945] [transport.py] [_log()] userauth is OK
2025-11-12T10:16:00.927 [DEBUG] [Thread-13945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:16:00.927 [DEBUG] [Thread-13945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:16:00.927 [DEBUG] [Thread-13945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:16:00.928 [DEBUG] [Thread-13945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:16:00.949 [INFO] [Thread-13945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:16:00.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:16:00.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:16:01.802 [DEBUG] [Thread-13945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:16:01.802 [DEBUG] [Thread-13945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:16:01.850 [DEBUG] [Thread-13945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:16:01.850 [DEBUG] [Thread-13945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:16:01.859 [DEBUG] [Thread-13945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:16:01.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:16:01.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')
2025-11-12T10:16:01.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-11-12T10:16:01.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:16:01.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:16:01.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:16:01.899 [DEBUG] [Thread-13945] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:16:12.169 [DEBUG] [Thread-13947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:16:27.028 [DEBUG] [Thread-13948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:16:27.230 [DEBUG] [Thread-13949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:16:31.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:16:31.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:16:31.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:16:32.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 15, 58), 27.05, 16.7, 0.0, 19.41, 24.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:16:32.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:15:58
2025-11-12T10:16:32.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:16:32.928 [DEBUG] [Thread-13950] [transport.py] [_log()] starting thread (client mode): 0x1739b160
2025-11-12T10:16:32.928 [DEBUG] [Thread-13950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:16:32.947 [DEBUG] [Thread-13950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:16:32.947 [INFO] [Thread-13950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:16:32.950 [DEBUG] [Thread-13950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:16:32.950 [DEBUG] [Thread-13950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:16:32.950 [DEBUG] [Thread-13950] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:16:32.950 [DEBUG] [Thread-13950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:16:32.950 [DEBUG] [Thread-13950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:16:32.950 [DEBUG] [Thread-13950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] client lang: <none>
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] server lang: <none>
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] kex follows: False
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] Compression: none
2025-11-12T10:16:32.951 [DEBUG] [Thread-13950] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:16:32.968 [DEBUG] [Thread-13950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:16:32.968 [DEBUG] [Thread-13950] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:16:32.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:16:32.970 [DEBUG] [Thread-13950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:16:32.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:16:32.971 [DEBUG] [Thread-13950] [transport.py] [_log()] userauth is OK
2025-11-12T10:16:32.971 [DEBUG] [Thread-13950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:16:32.971 [DEBUG] [Thread-13950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:16:32.971 [DEBUG] [Thread-13950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:16:32.971 [DEBUG] [Thread-13950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:16:32.995 [INFO] [Thread-13950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:16:32.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:16:33.629 [DEBUG] [Thread-13950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:16:33.629 [DEBUG] [Thread-13950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:16:33.629 [DEBUG] [Thread-13950] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:16:33.670 [DEBUG] [Thread-13950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:16:33.670 [DEBUG] [Thread-13950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:16:33.672 [DEBUG] [Thread-13950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:16:33.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:16:33.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:16:33.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:16:33.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:16:33.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:16:33.690 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:16:33.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:16:33.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:16:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:16:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.344534 -999.00  +23.90  24.94     22   +1.20 1 1 1 1 1   888    0 24.40 88.20 ----- 21.7 24.9 269.0 29.2 30.2 -28.1 29.5 -25.2 28.0 -24.5 28.7 -25.6
2025-11-12T10:16:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:16:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:16:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.344534
2025-11-12T10:16:33.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:16:33.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:16:33.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:16:33.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:16:33.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:16:33.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:15:58', tmtdew=27.05, humidity=16.7, cloud=0.0, wind=19.41, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:16:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:16:33.691 [DEBUG] [Thread-13950] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:16:33.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:16:33.777 [DEBUG] [Thread-13953] [transport.py] [_log()] starting thread (client mode): 0x173e9120
2025-11-12T10:16:33.777 [DEBUG] [Thread-13953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:16:33.792 [DEBUG] [Thread-13953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:16:33.792 [INFO] [Thread-13953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] client lang: <none>
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] server lang: <none>
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] kex follows: False
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] Compression: none
2025-11-12T10:16:33.799 [DEBUG] [Thread-13953] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:16:33.857 [DEBUG] [Thread-13953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:16:33.857 [DEBUG] [Thread-13953] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:16:33.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:16:33.858 [DEBUG] [Thread-13953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:16:33.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:16:33.914 [DEBUG] [Thread-13953] [transport.py] [_log()] userauth is OK
2025-11-12T10:16:33.914 [DEBUG] [Thread-13953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:16:33.914 [DEBUG] [Thread-13953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:16:33.915 [DEBUG] [Thread-13953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:16:33.915 [DEBUG] [Thread-13953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:16:33.928 [INFO] [Thread-13953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:16:33.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:16:33.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:16:34.830 [DEBUG] [Thread-13953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:16:34.830 [DEBUG] [Thread-13953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:16:34.878 [DEBUG] [Thread-13953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:16:34.878 [DEBUG] [Thread-13953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:16:34.886 [DEBUG] [Thread-13953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:16:34.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:16:34.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-11-12T10:16:34.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-11-12T10:16:34.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:16:34.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:16:34.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:16:34.916 [DEBUG] [Thread-13953] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:16:42.262 [DEBUG] [Thread-13955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:16:51.970 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:16:51.971 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:16:57.316 [DEBUG] [Thread-13956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:17:04.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:17:04.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:17:04.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-11-12T10:17:05.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 17, 2), 27.13, 16.58, 0.0, 24.72, 24.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:17:05.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:17:02
2025-11-12T10:17:05.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:17:05.860 [DEBUG] [Thread-13957] [transport.py] [_log()] starting thread (client mode): 0x173983d0
2025-11-12T10:17:05.860 [DEBUG] [Thread-13957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:17:05.880 [DEBUG] [Thread-13957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:17:05.880 [INFO] [Thread-13957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:17:05.882 [DEBUG] [Thread-13957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] client lang: <none>
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] server lang: <none>
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] kex follows: False
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:17:05.883 [DEBUG] [Thread-13957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:17:05.884 [DEBUG] [Thread-13957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:17:05.884 [DEBUG] [Thread-13957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:17:05.884 [DEBUG] [Thread-13957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:17:05.884 [DEBUG] [Thread-13957] [transport.py] [_log()] Compression: none
2025-11-12T10:17:05.884 [DEBUG] [Thread-13957] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:17:05.901 [DEBUG] [Thread-13957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:17:05.902 [DEBUG] [Thread-13957] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:17:05.902 [DEBUG] [Thread-13957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:17:05.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:17:05.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:17:05.904 [DEBUG] [Thread-13957] [transport.py] [_log()] userauth is OK
2025-11-12T10:17:05.905 [DEBUG] [Thread-13957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:17:05.905 [DEBUG] [Thread-13957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:17:05.905 [DEBUG] [Thread-13957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:17:05.905 [DEBUG] [Thread-13957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:17:05.923 [INFO] [Thread-13957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:17:05.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:17:06.533 [DEBUG] [Thread-13957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:17:06.533 [DEBUG] [Thread-13957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:17:06.534 [DEBUG] [Thread-13957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:17:06.575 [DEBUG] [Thread-13957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:17:06.575 [DEBUG] [Thread-13957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:17:06.578 [DEBUG] [Thread-13957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:17:06.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:17:06.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:17:06.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:17:06.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:17:06.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:17:06.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:17:06.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:17:06.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:17:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:17:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.344881 -999.00  +24.30  20.69     21   +1.00 1 1 1 1 1   888    0 24.53 82.64 ----- 21.8 20.7 273.9 27.7 30.4 -27.2 29.6 -24.8 27.9 -24.3 28.9 -25.1
2025-11-12T10:17:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:17:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:17:06.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.344881
2025-11-12T10:17:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:17:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:17:06.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:17:06.603 [DEBUG] [Thread-13957] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:17:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:17:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:17:06.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:17:02', tmtdew=27.13, humidity=16.58, cloud=0.0, wind=24.72, temperature=24.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:16:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:17:06.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:17:06.698 [DEBUG] [Thread-13960] [transport.py] [_log()] starting thread (client mode): 0x17399d20
2025-11-12T10:17:06.699 [DEBUG] [Thread-13960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:17:06.716 [DEBUG] [Thread-13960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:17:06.716 [INFO] [Thread-13960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:17:06.724 [DEBUG] [Thread-13960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:17:06.724 [DEBUG] [Thread-13960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:17:06.725 [DEBUG] [Thread-13960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:17:06.725 [DEBUG] [Thread-13960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:17:06.725 [DEBUG] [Thread-13960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:17:06.725 [DEBUG] [Thread-13960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:17:06.725 [DEBUG] [Thread-13960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:17:06.725 [DEBUG] [Thread-13960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:17:06.725 [DEBUG] [Thread-13960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:17:06.725 [DEBUG] [Thread-13960] [transport.py] [_log()] client lang: <none>
2025-11-12T10:17:06.726 [DEBUG] [Thread-13960] [transport.py] [_log()] server lang: <none>
2025-11-12T10:17:06.726 [DEBUG] [Thread-13960] [transport.py] [_log()] kex follows: False
2025-11-12T10:17:06.726 [DEBUG] [Thread-13960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:17:06.726 [DEBUG] [Thread-13960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:17:06.726 [DEBUG] [Thread-13960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:17:06.726 [DEBUG] [Thread-13960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:17:06.726 [DEBUG] [Thread-13960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:17:06.727 [DEBUG] [Thread-13960] [transport.py] [_log()] Compression: none
2025-11-12T10:17:06.727 [DEBUG] [Thread-13960] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:17:06.784 [DEBUG] [Thread-13960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:17:06.785 [DEBUG] [Thread-13960] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:17:06.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:17:06.786 [DEBUG] [Thread-13960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:17:06.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:17:06.844 [DEBUG] [Thread-13960] [transport.py] [_log()] userauth is OK
2025-11-12T10:17:06.844 [DEBUG] [Thread-13960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:17:06.844 [DEBUG] [Thread-13960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:17:06.844 [DEBUG] [Thread-13960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:17:06.844 [DEBUG] [Thread-13960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:17:06.865 [INFO] [Thread-13960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:17:06.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:17:06.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:17:07.784 [DEBUG] [Thread-13960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:17:07.784 [DEBUG] [Thread-13960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:17:07.832 [DEBUG] [Thread-13960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:17:07.833 [DEBUG] [Thread-13960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:17:07.842 [DEBUG] [Thread-13960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:17:07.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:17:07.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-11-12T10:17:07.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-11-12T10:17:07.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:17:07.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:17:07.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:17:07.882 [DEBUG] [Thread-13960] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:17:12.352 [DEBUG] [Thread-13962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:17:27.087 [DEBUG] [Thread-13963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:17:27.404 [DEBUG] [Thread-13964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:17:37.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:17:37.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:17: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-11-12T10:17:38.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 17, 34), 27.67, 15.48, 0.0, 33.49, 24.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:17:38.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:17:34
2025-11-12T10:17:38.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:17:38.817 [DEBUG] [Thread-13965] [transport.py] [_log()] starting thread (client mode): 0x1493cac0
2025-11-12T10:17:38.817 [DEBUG] [Thread-13965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:17:38.838 [DEBUG] [Thread-13965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:17:38.839 [INFO] [Thread-13965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:17:38.841 [DEBUG] [Thread-13965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:17:38.841 [DEBUG] [Thread-13965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:17:38.841 [DEBUG] [Thread-13965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] client lang: <none>
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] server lang: <none>
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] kex follows: False
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] Compression: none
2025-11-12T10:17:38.842 [DEBUG] [Thread-13965] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:17:38.860 [DEBUG] [Thread-13965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:17:38.860 [DEBUG] [Thread-13965] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:17:38.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:17:38.861 [DEBUG] [Thread-13965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:17:38.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:17:38.863 [DEBUG] [Thread-13965] [transport.py] [_log()] userauth is OK
2025-11-12T10:17:38.864 [DEBUG] [Thread-13965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:17:38.864 [DEBUG] [Thread-13965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:17:38.864 [DEBUG] [Thread-13965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:17:38.864 [DEBUG] [Thread-13965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:17:38.889 [INFO] [Thread-13965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:17:38.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:17:39.516 [DEBUG] [Thread-13965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:17:39.516 [DEBUG] [Thread-13965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:17:39.516 [DEBUG] [Thread-13965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:17:39.557 [DEBUG] [Thread-13965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:17:39.557 [DEBUG] [Thread-13965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:17:39.560 [DEBUG] [Thread-13965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:17:39.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:17:39.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:17:39.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:17:39.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:17:39.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:17:39.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:17:39.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:17:39.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:17:39.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:17:39.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.345228 -999.00  +24.40  16.91     20   +0.30 1 1 1 1 1   888    0 24.46 96.07 ----- 20.9 16.9 281.8 29.2 30.4 -27.5 29.6 -26.2 28.1 -25.8 28.9 -25.6
2025-11-12T10:17:39.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:17:39.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:17:39.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.345228
2025-11-12T10:17:39.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:17:39.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:17:39.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:17:39.585 [DEBUG] [Thread-13965] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:17:39.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:17:39.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:17:39.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:17:34', tmtdew=27.67, humidity=15.48, cloud=0.0, wind=33.49, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:17:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:17:39.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:17:39.681 [DEBUG] [Thread-13968] [transport.py] [_log()] starting thread (client mode): 0x14904fa0
2025-11-12T10:17:39.681 [DEBUG] [Thread-13968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:17:39.696 [DEBUG] [Thread-13968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:17:39.697 [INFO] [Thread-13968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:17:39.704 [DEBUG] [Thread-13968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:17:39.705 [DEBUG] [Thread-13968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:17:39.705 [DEBUG] [Thread-13968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:17:39.705 [DEBUG] [Thread-13968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:17:39.705 [DEBUG] [Thread-13968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:17:39.705 [DEBUG] [Thread-13968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:17:39.705 [DEBUG] [Thread-13968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:17:39.705 [DEBUG] [Thread-13968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:17:39.706 [DEBUG] [Thread-13968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:17:39.706 [DEBUG] [Thread-13968] [transport.py] [_log()] client lang: <none>
2025-11-12T10:17:39.706 [DEBUG] [Thread-13968] [transport.py] [_log()] server lang: <none>
2025-11-12T10:17:39.706 [DEBUG] [Thread-13968] [transport.py] [_log()] kex follows: False
2025-11-12T10:17:39.706 [DEBUG] [Thread-13968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:17:39.706 [DEBUG] [Thread-13968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:17:39.706 [DEBUG] [Thread-13968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:17:39.707 [DEBUG] [Thread-13968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:17:39.707 [DEBUG] [Thread-13968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:17:39.707 [DEBUG] [Thread-13968] [transport.py] [_log()] Compression: none
2025-11-12T10:17:39.707 [DEBUG] [Thread-13968] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:17:39.767 [DEBUG] [Thread-13968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:17:39.767 [DEBUG] [Thread-13968] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:17:39.768 [DEBUG] [Thread-13968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:17:39.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:17:39.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:17:39.823 [DEBUG] [Thread-13968] [transport.py] [_log()] userauth is OK
2025-11-12T10:17:39.824 [DEBUG] [Thread-13968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:17:39.824 [DEBUG] [Thread-13968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:17:39.824 [DEBUG] [Thread-13968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:17:39.824 [DEBUG] [Thread-13968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:17:39.845 [INFO] [Thread-13968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:17:39.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:17:39.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:17:40.670 [DEBUG] [Thread-13968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:17:40.670 [DEBUG] [Thread-13968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:17:40.717 [DEBUG] [Thread-13968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:17:40.718 [DEBUG] [Thread-13968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:17:40.727 [DEBUG] [Thread-13968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:17:40.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:17: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-11-12T10:17: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-11-12T10:17:40.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:17:40.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:17:40.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:17:40.764 [DEBUG] [Thread-13968] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:17:42.442 [DEBUG] [Thread-13970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:17:52.111 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:17:52.112 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:17:57.499 [DEBUG] [Thread-13971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:18:10.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:18:10.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:18:10.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-11-12T10:18:11.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 18, 6), 28.52, 14.64, 0.0, 29.66, 24.6, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:18:11.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:18:06
2025-11-12T10:18:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:18:11.741 [DEBUG] [Thread-13972] [transport.py] [_log()] starting thread (client mode): 0x173bd060
2025-11-12T10:18:11.742 [DEBUG] [Thread-13972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:18:11.762 [DEBUG] [Thread-13972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:18:11.762 [INFO] [Thread-13972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:18:11.765 [DEBUG] [Thread-13972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] client lang: <none>
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] server lang: <none>
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] kex follows: False
2025-11-12T10:18:11.766 [DEBUG] [Thread-13972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:18:11.767 [DEBUG] [Thread-13972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:18:11.767 [DEBUG] [Thread-13972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:18:11.767 [DEBUG] [Thread-13972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:18:11.767 [DEBUG] [Thread-13972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:18:11.767 [DEBUG] [Thread-13972] [transport.py] [_log()] Compression: none
2025-11-12T10:18:11.767 [DEBUG] [Thread-13972] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:18:11.785 [DEBUG] [Thread-13972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:18:11.786 [DEBUG] [Thread-13972] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:18:11.786 [DEBUG] [Thread-13972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:18:11.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:18:11.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:18:11.788 [DEBUG] [Thread-13972] [transport.py] [_log()] userauth is OK
2025-11-12T10:18:11.789 [DEBUG] [Thread-13972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:18:11.789 [DEBUG] [Thread-13972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:18:11.789 [DEBUG] [Thread-13972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:18:11.789 [DEBUG] [Thread-13972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:18:11.813 [INFO] [Thread-13972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:18:11.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:18:12.493 [DEBUG] [Thread-13972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:18:12.494 [DEBUG] [Thread-13972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:18:12.494 [DEBUG] [Thread-13972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:18:12.530 [DEBUG] [Thread-13974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:18:12.534 [DEBUG] [Thread-13972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:18:12.535 [DEBUG] [Thread-13972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:18:12.537 [DEBUG] [Thread-13972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:18:12.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:18:12.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:18:12.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:18:12.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:18:12.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:18:12.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:18:12.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:18:12.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:18:12.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:18:12.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.345576 -999.00  +24.20  28.08     21   +0.70 1 1 1 1 1   888    0 24.78 99.81 ----- 28.6 28.1 274.8 33.0 30.2 -28.6 29.5 -26.8 28.0 -25.2 28.8 -25.6
2025-11-12T10:18:12.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:18:12.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:18:12.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.345576
2025-11-12T10:18:12.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:18:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:18:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:18:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:18:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:18:12.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:18:06', tmtdew=28.52, humidity=14.64, cloud=0.0, wind=29.66, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:17:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:18:12.563 [DEBUG] [Thread-13972] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:18:12.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:18:12.658 [DEBUG] [Thread-13976] [transport.py] [_log()] starting thread (client mode): 0x1737d030
2025-11-12T10:18:12.658 [DEBUG] [Thread-13976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:18:12.673 [DEBUG] [Thread-13976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:18:12.674 [INFO] [Thread-13976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] client lang: <none>
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] server lang: <none>
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] kex follows: False
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:18:12.681 [DEBUG] [Thread-13976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:18:12.682 [DEBUG] [Thread-13976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:18:12.682 [DEBUG] [Thread-13976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:18:12.682 [DEBUG] [Thread-13976] [transport.py] [_log()] Compression: none
2025-11-12T10:18:12.682 [DEBUG] [Thread-13976] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:18:12.739 [DEBUG] [Thread-13976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:18:12.739 [DEBUG] [Thread-13976] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:18:12.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:18:12.741 [DEBUG] [Thread-13976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:18:12.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:18:12.795 [DEBUG] [Thread-13976] [transport.py] [_log()] userauth is OK
2025-11-12T10:18:12.795 [DEBUG] [Thread-13976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:18:12.796 [DEBUG] [Thread-13976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:18:12.796 [DEBUG] [Thread-13976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:18:12.796 [DEBUG] [Thread-13976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:18:12.814 [INFO] [Thread-13976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:18:12.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:18:12.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:18:13.667 [DEBUG] [Thread-13976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:18:13.668 [DEBUG] [Thread-13976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:18:13.716 [DEBUG] [Thread-13976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:18:13.716 [DEBUG] [Thread-13976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:18:13.725 [DEBUG] [Thread-13976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:18:13.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:18:13.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:18:13.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-11-12T10:18:13.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:18:13.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:18:13.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:18:13.762 [DEBUG] [Thread-13976] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:18:27.137 [DEBUG] [Thread-13978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:18:27.569 [DEBUG] [Thread-13979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:18:42.625 [DEBUG] [Thread-13980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:18:43.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:18:43.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:18:43.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-11-12T10:18:44.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 18, 38), 28.03, 15.25, 0.0, 28.07, 24.35, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:18:44.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:18:38
2025-11-12T10:18:44.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:18:44.721 [DEBUG] [Thread-13981] [transport.py] [_log()] starting thread (client mode): 0x173e8970
2025-11-12T10:18:44.721 [DEBUG] [Thread-13981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:18:44.740 [DEBUG] [Thread-13981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:18:44.741 [INFO] [Thread-13981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] client lang: <none>
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] server lang: <none>
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] kex follows: False
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] Compression: none
2025-11-12T10:18:44.744 [DEBUG] [Thread-13981] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:18:44.760 [DEBUG] [Thread-13981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:18:44.760 [DEBUG] [Thread-13981] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:18:44.761 [DEBUG] [Thread-13981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:18:44.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:18:44.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:18:44.763 [DEBUG] [Thread-13981] [transport.py] [_log()] userauth is OK
2025-11-12T10:18:44.763 [DEBUG] [Thread-13981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:18:44.763 [DEBUG] [Thread-13981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:18:44.763 [DEBUG] [Thread-13981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:18:44.763 [DEBUG] [Thread-13981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:18:44.787 [INFO] [Thread-13981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:18:44.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:18:45.465 [DEBUG] [Thread-13981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:18:45.466 [DEBUG] [Thread-13981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:18:45.466 [DEBUG] [Thread-13981] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:18:45.506 [DEBUG] [Thread-13981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:18:45.507 [DEBUG] [Thread-13981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:18:45.509 [DEBUG] [Thread-13981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:18:45.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:18:45.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:18:45.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:18:45.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:18:45.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:18:45.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:18:45.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:18:45.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:18:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:18:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.345923 -999.00  +23.90  25.57     22   +0.90 1 1 1 1 1   888    0 25.01 101.19 ----- 29.4 25.6 281.0 33.2 30.3 -27.9 29.4 -26.0 27.8 -25.8 28.8 -25.6
2025-11-12T10:18:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:18:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:18:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.345923
2025-11-12T10:18:45.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:18:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:18:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:18:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:18:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:18:45.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:18:38', tmtdew=28.03, humidity=15.25, cloud=0.0, wind=28.07, temperature=24.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:18:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:18:45.530 [DEBUG] [Thread-13981] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:18:45.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:18:45.628 [DEBUG] [Thread-13984] [transport.py] [_log()] starting thread (client mode): 0x1737f5b0
2025-11-12T10:18:45.628 [DEBUG] [Thread-13984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:18:45.643 [DEBUG] [Thread-13984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:18:45.643 [INFO] [Thread-13984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:18:45.651 [DEBUG] [Thread-13984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:18:45.651 [DEBUG] [Thread-13984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:18:45.651 [DEBUG] [Thread-13984] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:18:45.651 [DEBUG] [Thread-13984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:18:45.651 [DEBUG] [Thread-13984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:18:45.651 [DEBUG] [Thread-13984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] client lang: <none>
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] server lang: <none>
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] kex follows: False
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:18:45.652 [DEBUG] [Thread-13984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:18:45.653 [DEBUG] [Thread-13984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:18:45.653 [DEBUG] [Thread-13984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:18:45.653 [DEBUG] [Thread-13984] [transport.py] [_log()] Compression: none
2025-11-12T10:18:45.653 [DEBUG] [Thread-13984] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:18:45.711 [DEBUG] [Thread-13984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:18:45.711 [DEBUG] [Thread-13984] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:18:45.712 [DEBUG] [Thread-13984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:18:45.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:18:45.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:18:45.766 [DEBUG] [Thread-13984] [transport.py] [_log()] userauth is OK
2025-11-12T10:18:45.767 [DEBUG] [Thread-13984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:18:45.767 [DEBUG] [Thread-13984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:18:45.767 [DEBUG] [Thread-13984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:18:45.767 [DEBUG] [Thread-13984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:18:45.786 [INFO] [Thread-13984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:18:45.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:18:45.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:18:46.676 [DEBUG] [Thread-13984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:18:46.676 [DEBUG] [Thread-13984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:18:46.723 [DEBUG] [Thread-13984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:18:46.723 [DEBUG] [Thread-13984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:18:46.732 [DEBUG] [Thread-13984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:18:46.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:18:46.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:18:46.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:18:46.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:18:46.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:18:46.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:18:46.770 [DEBUG] [Thread-13984] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:18:52.253 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:18:52.254 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:18:57.661 [DEBUG] [Thread-13986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:19:12.711 [DEBUG] [Thread-13987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:19:16.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:19:16.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:19:16.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-11-12T10:19:17.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 19, 10), 27.51, 15.8, 0.0, 27.21, 24.35, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:19:17.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:19:10
2025-11-12T10:19:17.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:19:17.709 [DEBUG] [Thread-13988] [transport.py] [_log()] starting thread (client mode): 0x173e8130
2025-11-12T10:19:17.709 [DEBUG] [Thread-13988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:19:17.730 [DEBUG] [Thread-13988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:19:17.730 [INFO] [Thread-13988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] client lang: <none>
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] server lang: <none>
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] kex follows: False
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:19:17.733 [DEBUG] [Thread-13988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:19:17.734 [DEBUG] [Thread-13988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:19:17.734 [DEBUG] [Thread-13988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:19:17.734 [DEBUG] [Thread-13988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:19:17.734 [DEBUG] [Thread-13988] [transport.py] [_log()] Compression: none
2025-11-12T10:19:17.734 [DEBUG] [Thread-13988] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:19:17.751 [DEBUG] [Thread-13988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:19:17.752 [DEBUG] [Thread-13988] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:19:17.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:19:17.753 [DEBUG] [Thread-13988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:19:17.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:19:17.755 [DEBUG] [Thread-13988] [transport.py] [_log()] userauth is OK
2025-11-12T10:19:17.755 [DEBUG] [Thread-13988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:19:17.755 [DEBUG] [Thread-13988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:19:17.755 [DEBUG] [Thread-13988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:19:17.755 [DEBUG] [Thread-13988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:19:17.771 [INFO] [Thread-13988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:19:17.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:19:18.383 [DEBUG] [Thread-13988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:19:18.384 [DEBUG] [Thread-13988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:19:18.384 [DEBUG] [Thread-13988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:19:18.425 [DEBUG] [Thread-13988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:19:18.425 [DEBUG] [Thread-13988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:19:18.428 [DEBUG] [Thread-13988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:19:18.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:19:18.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:19:18.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:19:18.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:19:18.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:19:18.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:19:18.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:19:18.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:19:18.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:19:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.346617 -999.00  +22.90  26.17     23   +1.00 1 1 1 1 1   888    0 24.77 95.98 ----- 25.3 26.2 270.6 34.4 29.8 -28.3 29.1 -26.1 27.2 -29.7 28.4 -25.3
2025-11-12T10:19:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:19:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:19:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.346617
2025-11-12T10:19:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:19:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:19:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:19:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:19:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:19:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:19:10', tmtdew=27.51, humidity=15.8, cloud=0.0, wind=27.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:19:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:19:18.455 [DEBUG] [Thread-13988] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:19:18.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:19:18.552 [DEBUG] [Thread-13991] [transport.py] [_log()] starting thread (client mode): 0x19dd9360
2025-11-12T10:19:18.552 [DEBUG] [Thread-13991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:19:18.568 [DEBUG] [Thread-13991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:19:18.568 [INFO] [Thread-13991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:19:18.575 [DEBUG] [Thread-13991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] client lang: <none>
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] server lang: <none>
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] kex follows: False
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:19:18.576 [DEBUG] [Thread-13991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:19:18.577 [DEBUG] [Thread-13991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:19:18.577 [DEBUG] [Thread-13991] [transport.py] [_log()] Compression: none
2025-11-12T10:19:18.577 [DEBUG] [Thread-13991] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:19:18.635 [DEBUG] [Thread-13991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:19:18.636 [DEBUG] [Thread-13991] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:19:18.636 [DEBUG] [Thread-13991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:19:18.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:19:18.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:19:18.691 [DEBUG] [Thread-13991] [transport.py] [_log()] userauth is OK
2025-11-12T10:19:18.691 [DEBUG] [Thread-13991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:19:18.692 [DEBUG] [Thread-13991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:19:18.692 [DEBUG] [Thread-13991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:19:18.692 [DEBUG] [Thread-13991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:19:18.710 [INFO] [Thread-13991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:19:18.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:19:18.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:19:19.596 [DEBUG] [Thread-13991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:19:19.596 [DEBUG] [Thread-13991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:19:19.644 [DEBUG] [Thread-13991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:19:19.644 [DEBUG] [Thread-13991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:19:19.654 [DEBUG] [Thread-13991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:19:19.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:19:19.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-11-12T10:19:19.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-11-12T10:19:19.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:19:19.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:19:19.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:19:19.690 [DEBUG] [Thread-13991] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:19:27.182 [DEBUG] [Thread-13993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:19:27.747 [DEBUG] [Thread-13994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:19:42.809 [DEBUG] [Thread-13995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:19:49.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:19:49.711 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:19:49.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-11-12T10:19:50.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 19, 42), 26.67, 17.12, 0.0, 25.2, 24.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:19:50.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:19:42
2025-11-12T10:19:50.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:19:50.688 [DEBUG] [Thread-13996] [transport.py] [_log()] starting thread (client mode): 0x173bd060
2025-11-12T10:19:50.688 [DEBUG] [Thread-13996] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:19:50.704 [DEBUG] [Thread-13996] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:19:50.704 [INFO] [Thread-13996] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] client lang: <none>
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] server lang: <none>
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] kex follows: False
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] Compression: none
2025-11-12T10:19:50.707 [DEBUG] [Thread-13996] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:19:50.722 [DEBUG] [Thread-13996] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:19:50.723 [DEBUG] [Thread-13996] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:19:50.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:19:50.723 [DEBUG] [Thread-13996] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:19:50.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:19:50.723 [DEBUG] [Thread-13996] [transport.py] [_log()] userauth is OK
2025-11-12T10:19:50.723 [DEBUG] [Thread-13996] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:19:50.724 [DEBUG] [Thread-13996] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:19:50.724 [DEBUG] [Thread-13996] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:19:50.724 [DEBUG] [Thread-13996] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:19:50.736 [INFO] [Thread-13996] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:19:50.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:19:51.361 [DEBUG] [Thread-13996] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:19:51.361 [DEBUG] [Thread-13996] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:19:51.361 [DEBUG] [Thread-13996] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:19:51.402 [DEBUG] [Thread-13996] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:19:51.402 [DEBUG] [Thread-13996] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:19:51.405 [DEBUG] [Thread-13996] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:19:51.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:19:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:19:51.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:19:51.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:19:51.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:19:51.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:19:51.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:19:51.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:19:51.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:19:51.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.346965 -999.00  +22.90  26.59     24   +1.40 1 1 1 1 1   888    0 25.18 101.90 ----- 23.9 26.6 271.0 31.2 29.8 -29.1 29.1 -25.7 27.3 -24.9 28.3 -26.8
2025-11-12T10:19:51.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:19:51.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:19:51.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.346965
2025-11-12T10:19:51.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:19:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:19:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:19:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:19:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:19:51.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:19:42', tmtdew=26.67, humidity=17.12, cloud=0.0, wind=25.2, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:19:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:19:51.421 [DEBUG] [Thread-13996] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:19:51.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:19:51.508 [DEBUG] [Thread-13999] [transport.py] [_log()] starting thread (client mode): 0x173e9cf0
2025-11-12T10:19:51.508 [DEBUG] [Thread-13999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:19:51.530 [DEBUG] [Thread-13999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:19:51.530 [INFO] [Thread-13999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] client lang: <none>
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] server lang: <none>
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] kex follows: False
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:19:51.540 [DEBUG] [Thread-13999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:19:51.541 [DEBUG] [Thread-13999] [transport.py] [_log()] Compression: none
2025-11-12T10:19:51.541 [DEBUG] [Thread-13999] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:19:51.597 [DEBUG] [Thread-13999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:19:51.597 [DEBUG] [Thread-13999] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:19:51.598 [DEBUG] [Thread-13999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:19:51.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:19:51.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:19:51.654 [DEBUG] [Thread-13999] [transport.py] [_log()] userauth is OK
2025-11-12T10:19:51.654 [DEBUG] [Thread-13999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:19:51.654 [DEBUG] [Thread-13999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:19:51.654 [DEBUG] [Thread-13999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:19:51.654 [DEBUG] [Thread-13999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:19:51.668 [INFO] [Thread-13999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:19:51.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:19:51.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:19:52.393 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:19:52.394 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:19:52.548 [DEBUG] [Thread-13999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:19:52.548 [DEBUG] [Thread-13999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:19:52.596 [DEBUG] [Thread-13999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:19:52.596 [DEBUG] [Thread-13999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:19:52.604 [DEBUG] [Thread-13999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:19:52.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:19:52.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-11-12T10:19:52.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-11-12T10:19:52.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:19:52.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:19:52.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:19:52.636 [DEBUG] [Thread-13999] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:19:57.839 [DEBUG] [Thread-14001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:20:12.893 [DEBUG] [Thread-14002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:20:22.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:20:22.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:20:22.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-11-12T10:20:23.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 20, 14), 26.61, 17.17, 0.0, 26.82, 24.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:20:23.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:20:14
2025-11-12T10:20:23.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:20:23.578 [DEBUG] [Thread-14003] [transport.py] [_log()] starting thread (client mode): 0x173e92d0
2025-11-12T10:20:23.579 [DEBUG] [Thread-14003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:20:23.598 [DEBUG] [Thread-14003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:20:23.598 [INFO] [Thread-14003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] client lang: <none>
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] server lang: <none>
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] kex follows: False
2025-11-12T10:20:23.601 [DEBUG] [Thread-14003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:20:23.602 [DEBUG] [Thread-14003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:20:23.602 [DEBUG] [Thread-14003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:20:23.602 [DEBUG] [Thread-14003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:20:23.602 [DEBUG] [Thread-14003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:20:23.602 [DEBUG] [Thread-14003] [transport.py] [_log()] Compression: none
2025-11-12T10:20:23.602 [DEBUG] [Thread-14003] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:20:23.618 [DEBUG] [Thread-14003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:20:23.619 [DEBUG] [Thread-14003] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:20:23.619 [DEBUG] [Thread-14003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:20:23.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:20:23.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:20:23.621 [DEBUG] [Thread-14003] [transport.py] [_log()] userauth is OK
2025-11-12T10:20:23.621 [DEBUG] [Thread-14003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:20:23.621 [DEBUG] [Thread-14003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:20:23.621 [DEBUG] [Thread-14003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:20:23.621 [DEBUG] [Thread-14003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:20:23.643 [INFO] [Thread-14003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:20:23.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:20:24.289 [DEBUG] [Thread-14003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:20:24.289 [DEBUG] [Thread-14003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:20:24.290 [DEBUG] [Thread-14003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:20:24.330 [DEBUG] [Thread-14003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:20:24.330 [DEBUG] [Thread-14003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:20:24.333 [DEBUG] [Thread-14003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:20:24.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:20:24.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:20:24.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:20:24.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:20:24.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:20:24.355 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:20:24.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:20:24.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:20:24.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:20:24.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.347311 -999.00  +23.20  19.36     24   +1.60 1 1 1 1 1   888    0 24.96 94.12 ----- 18.3 19.4 264.4 28.4 30.0 -26.9 29.1 -24.8 27.4 -23.8 28.3 -25.3
2025-11-12T10:20:24.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:20:24.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:20:24.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.347311
2025-11-12T10:20:24.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:20:24.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:20:24.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:20:24.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:20:24.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:20:24.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:20:14', tmtdew=26.61, humidity=17.17, cloud=0.0, wind=26.82, temperature=24.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:20:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:20:24.358 [DEBUG] [Thread-14003] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:20:24.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:20:24.454 [DEBUG] [Thread-14006] [transport.py] [_log()] starting thread (client mode): 0x173e9cf0
2025-11-12T10:20:24.454 [DEBUG] [Thread-14006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:20:24.468 [DEBUG] [Thread-14006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:20:24.469 [INFO] [Thread-14006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] client lang: <none>
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] server lang: <none>
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] kex follows: False
2025-11-12T10:20:24.476 [DEBUG] [Thread-14006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:20:24.477 [DEBUG] [Thread-14006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:20:24.477 [DEBUG] [Thread-14006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:20:24.477 [DEBUG] [Thread-14006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:20:24.477 [DEBUG] [Thread-14006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:20:24.477 [DEBUG] [Thread-14006] [transport.py] [_log()] Compression: none
2025-11-12T10:20:24.477 [DEBUG] [Thread-14006] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:20:24.535 [DEBUG] [Thread-14006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:20:24.536 [DEBUG] [Thread-14006] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:20:24.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:20:24.537 [DEBUG] [Thread-14006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:20:24.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:20:24.591 [DEBUG] [Thread-14006] [transport.py] [_log()] userauth is OK
2025-11-12T10:20:24.592 [DEBUG] [Thread-14006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:20:24.592 [DEBUG] [Thread-14006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:20:24.592 [DEBUG] [Thread-14006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:20:24.592 [DEBUG] [Thread-14006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:20:24.616 [INFO] [Thread-14006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:20:24.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:20:24.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:20:25.453 [DEBUG] [Thread-14006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:20:25.453 [DEBUG] [Thread-14006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:20:25.504 [DEBUG] [Thread-14006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:20:25.504 [DEBUG] [Thread-14006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:20:25.514 [DEBUG] [Thread-14006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:20:25.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:20: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-11-12T10:20:25.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:20:25.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:20:25.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:20:25.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:20:25.553 [DEBUG] [Thread-14006] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:20:27.211 [DEBUG] [Thread-14008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:20:27.924 [DEBUG] [Thread-14009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:20:42.973 [DEBUG] [Thread-14010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:20:52.537 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:20:52.538 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:20:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:20:55.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:20:55.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-11-12T10:20:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 20, 46), 26.19, 17.4, 0.0, 18.1, 23.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:20:56.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:20:46
2025-11-12T10:20:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:20:56.542 [DEBUG] [Thread-14011] [transport.py] [_log()] starting thread (client mode): 0x19dd93f0
2025-11-12T10:20:56.542 [DEBUG] [Thread-14011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:20:56.562 [DEBUG] [Thread-14011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:20:56.563 [INFO] [Thread-14011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:20:56.564 [DEBUG] [Thread-14011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:20:56.564 [DEBUG] [Thread-14011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:20:56.564 [DEBUG] [Thread-14011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:20:56.564 [DEBUG] [Thread-14011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:20:56.564 [DEBUG] [Thread-14011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] client lang: <none>
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] server lang: <none>
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] kex follows: False
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] Compression: none
2025-11-12T10:20:56.565 [DEBUG] [Thread-14011] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:20:56.579 [DEBUG] [Thread-14011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:20:56.579 [DEBUG] [Thread-14011] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:20:56.580 [DEBUG] [Thread-14011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:20:56.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:20:56.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:20:56.582 [DEBUG] [Thread-14011] [transport.py] [_log()] userauth is OK
2025-11-12T10:20:56.582 [DEBUG] [Thread-14011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:20:56.582 [DEBUG] [Thread-14011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:20:56.582 [DEBUG] [Thread-14011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:20:56.582 [DEBUG] [Thread-14011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:20:56.600 [INFO] [Thread-14011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:20:56.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:20:57.222 [DEBUG] [Thread-14011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:20:57.222 [DEBUG] [Thread-14011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:20:57.222 [DEBUG] [Thread-14011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:20:57.263 [DEBUG] [Thread-14011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:20:57.263 [DEBUG] [Thread-14011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:20:57.266 [DEBUG] [Thread-14011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:20:57.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:20:57.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:20:57.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:20:57.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:20:57.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:20:57.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:20:57.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:20:57.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.347659 -999.00  +23.00  18.35     24   +1.40 1 1 1 1 1   888    0 24.66 91.27 ----- 15.2 18.4 267.8 21.1 29.8 -28.2 29.1 -25.4 27.4 -27.1 28.2 -26.0
2025-11-12T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:20:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.347659
2025-11-12T10:20:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:20:57.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:20:57.292 [DEBUG] [Thread-14011] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:20:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:20:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:20:57.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:20:57.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:20:46', tmtdew=26.19, humidity=17.4, cloud=0.0, wind=18.1, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:20:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:20:57.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:20:57.389 [DEBUG] [Thread-14014] [transport.py] [_log()] starting thread (client mode): 0x19dda260
2025-11-12T10:20:57.389 [DEBUG] [Thread-14014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:20:57.404 [DEBUG] [Thread-14014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:20:57.405 [INFO] [Thread-14014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:20:57.413 [DEBUG] [Thread-14014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:20:57.413 [DEBUG] [Thread-14014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:20:57.413 [DEBUG] [Thread-14014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:20:57.413 [DEBUG] [Thread-14014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:20:57.413 [DEBUG] [Thread-14014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:20:57.413 [DEBUG] [Thread-14014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:20:57.413 [DEBUG] [Thread-14014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:20:57.413 [DEBUG] [Thread-14014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] client lang: <none>
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] server lang: <none>
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] kex follows: False
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] Compression: none
2025-11-12T10:20:57.414 [DEBUG] [Thread-14014] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:20:57.472 [DEBUG] [Thread-14014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:20:57.473 [DEBUG] [Thread-14014] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:20:57.473 [DEBUG] [Thread-14014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:20:57.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:20:57.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:20:57.528 [DEBUG] [Thread-14014] [transport.py] [_log()] userauth is OK
2025-11-12T10:20:57.528 [DEBUG] [Thread-14014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:20:57.529 [DEBUG] [Thread-14014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:20:57.529 [DEBUG] [Thread-14014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:20:57.529 [DEBUG] [Thread-14014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:20:57.548 [INFO] [Thread-14014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:20:57.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:20:57.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:20:58.008 [DEBUG] [Thread-14016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:20:58.377 [DEBUG] [Thread-14014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:20:58.377 [DEBUG] [Thread-14014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:20:58.425 [DEBUG] [Thread-14014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:20:58.425 [DEBUG] [Thread-14014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:20:58.434 [DEBUG] [Thread-14014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:20:58.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:20:58.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-11-12T10:20:58.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-11-12T10:20:58.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:20:58.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:20:58.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:20:58.470 [DEBUG] [Thread-14014] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:21:13.059 [DEBUG] [Thread-14017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:21:27.251 [DEBUG] [Thread-14018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:21:28.095 [DEBUG] [Thread-14019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:21:28.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:21:28.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:21: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-11-12T10:21:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 21, 18), 26.66, 16.85, 0.0, 16.97, 23.85, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:21:29.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:21:18
2025-11-12T10:21:29.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:21:29.416 [DEBUG] [Thread-14020] [transport.py] [_log()] starting thread (client mode): 0x17398430
2025-11-12T10:21:29.416 [DEBUG] [Thread-14020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:21:29.426 [DEBUG] [Thread-14020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:21:29.427 [INFO] [Thread-14020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:21:29.429 [DEBUG] [Thread-14020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:21:29.429 [DEBUG] [Thread-14020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:21:29.429 [DEBUG] [Thread-14020] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] client lang: <none>
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] server lang: <none>
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] kex follows: False
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] Compression: none
2025-11-12T10:21:29.430 [DEBUG] [Thread-14020] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:21:29.437 [DEBUG] [Thread-14020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:21:29.437 [DEBUG] [Thread-14020] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:21:29.437 [DEBUG] [Thread-14020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:21:29.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:21:29.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:21:29.438 [DEBUG] [Thread-14020] [transport.py] [_log()] userauth is OK
2025-11-12T10:21:29.438 [DEBUG] [Thread-14020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:21:29.438 [DEBUG] [Thread-14020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:21:29.438 [DEBUG] [Thread-14020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:21:29.438 [DEBUG] [Thread-14020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:21:29.448 [INFO] [Thread-14020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:21:29.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:21:30.041 [DEBUG] [Thread-14020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:21:30.041 [DEBUG] [Thread-14020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:21:30.042 [DEBUG] [Thread-14020] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:21:30.082 [DEBUG] [Thread-14020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:21:30.082 [DEBUG] [Thread-14020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:21:30.085 [DEBUG] [Thread-14020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:21:30.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:21:30.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:21:30.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:21:30.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:21:30.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:21:30.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:21:30.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:21:30.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:21:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:21:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.348006 -999.00  +22.80   9.33     24   +1.50 1 1 1 1 1   888    0 24.05 73.78 ----- 13.0 9.3 278.8 16.9 30.0 -27.1 29.1 -25.4 27.3 -28.2 28.4 -24.8
2025-11-12T10:21:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:21:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:21:30.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.348006
2025-11-12T10:21:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:21:30.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:21:30.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:21:30.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:21:30.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:21:30.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:21:18', tmtdew=26.66, humidity=16.85, cloud=0.0, wind=16.97, temperature=23.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:21:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:21:30.118 [DEBUG] [Thread-14020] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:21:30.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:21:30.214 [DEBUG] [Thread-14023] [transport.py] [_log()] starting thread (client mode): 0x19ddb400
2025-11-12T10:21:30.214 [DEBUG] [Thread-14023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:21:30.232 [DEBUG] [Thread-14023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:21:30.232 [INFO] [Thread-14023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:21:30.240 [DEBUG] [Thread-14023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] client lang: <none>
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] server lang: <none>
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] kex follows: False
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:21:30.241 [DEBUG] [Thread-14023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:21:30.242 [DEBUG] [Thread-14023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:21:30.242 [DEBUG] [Thread-14023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:21:30.242 [DEBUG] [Thread-14023] [transport.py] [_log()] Compression: none
2025-11-12T10:21:30.242 [DEBUG] [Thread-14023] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:21:30.301 [DEBUG] [Thread-14023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:21:30.301 [DEBUG] [Thread-14023] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:21:30.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:21:30.303 [DEBUG] [Thread-14023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:21:30.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:21:30.356 [DEBUG] [Thread-14023] [transport.py] [_log()] userauth is OK
2025-11-12T10:21:30.356 [DEBUG] [Thread-14023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:21:30.356 [DEBUG] [Thread-14023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:21:30.356 [DEBUG] [Thread-14023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:21:30.357 [DEBUG] [Thread-14023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:21:30.375 [INFO] [Thread-14023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:21:30.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:21:30.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:21:31.222 [DEBUG] [Thread-14023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:21:31.222 [DEBUG] [Thread-14023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:21:31.270 [DEBUG] [Thread-14023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:21:31.271 [DEBUG] [Thread-14023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:21:31.280 [DEBUG] [Thread-14023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:21:31.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:21:31.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:21:31.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:21:31.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:21:31.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:21:31.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:21:31.317 [DEBUG] [Thread-14023] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:21:43.132 [DEBUG] [Thread-14025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:21:52.679 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:21:52.680 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:21:58.171 [DEBUG] [Thread-14026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:22:01.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:22:01.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:22:01.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-11-12T10:22:02.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 21, 50), 26.63, 17.0, 0.0, 14.24, 23.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:22:02.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:21:50
2025-11-12T10:22:02.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:22:02.299 [DEBUG] [Thread-14027] [transport.py] [_log()] starting thread (client mode): 0x173e8e20
2025-11-12T10:22:02.299 [DEBUG] [Thread-14027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:22:02.313 [DEBUG] [Thread-14027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:22:02.313 [INFO] [Thread-14027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] client lang: <none>
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] server lang: <none>
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] kex follows: False
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:22:02.315 [DEBUG] [Thread-14027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:22:02.316 [DEBUG] [Thread-14027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:22:02.316 [DEBUG] [Thread-14027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:22:02.316 [DEBUG] [Thread-14027] [transport.py] [_log()] Compression: none
2025-11-12T10:22:02.316 [DEBUG] [Thread-14027] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:22:02.328 [DEBUG] [Thread-14027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:22:02.329 [DEBUG] [Thread-14027] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:22:02.329 [DEBUG] [Thread-14027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:22:02.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:22:02.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:22:02.331 [DEBUG] [Thread-14027] [transport.py] [_log()] userauth is OK
2025-11-12T10:22:02.331 [DEBUG] [Thread-14027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:22:02.331 [DEBUG] [Thread-14027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:22:02.331 [DEBUG] [Thread-14027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:22:02.331 [DEBUG] [Thread-14027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:22:02.348 [INFO] [Thread-14027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:22:02.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:22:02.924 [DEBUG] [Thread-14027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:22:02.925 [DEBUG] [Thread-14027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:22:02.925 [DEBUG] [Thread-14027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:22:02.965 [DEBUG] [Thread-14027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:22:02.966 [DEBUG] [Thread-14027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:22:02.969 [DEBUG] [Thread-14027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:22:02.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:22:02.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:22:02.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:22:02.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:22:02.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:22:02.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:22:02.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:22:02.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:22:02.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:22:02.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.348353 -999.00  +22.90  12.18     24   +1.70 1 1 1 1 1   888    0 24.26 71.04 ----- 11.5 12.2 279.8 17.6 30.2 -26.1 29.2 -24.5 27.3 -26.3 28.5 -23.7
2025-11-12T10:22:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:22:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:22:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.348353
2025-11-12T10:22:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:22:02.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:22:02.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:22:02.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:22:02.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:22:02.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:21:50', tmtdew=26.63, humidity=17.0, cloud=0.0, wind=14.24, temperature=23.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:21:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:22:02.995 [DEBUG] [Thread-14027] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:22:03.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:22:03.091 [DEBUG] [Thread-14030] [transport.py] [_log()] starting thread (client mode): 0x173eaf80
2025-11-12T10:22:03.091 [DEBUG] [Thread-14030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:22:03.110 [DEBUG] [Thread-14030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:22:03.110 [INFO] [Thread-14030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:22:03.117 [DEBUG] [Thread-14030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:22:03.117 [DEBUG] [Thread-14030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] client lang: <none>
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] server lang: <none>
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] kex follows: False
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:22:03.118 [DEBUG] [Thread-14030] [transport.py] [_log()] Compression: none
2025-11-12T10:22:03.119 [DEBUG] [Thread-14030] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:22:03.177 [DEBUG] [Thread-14030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:22:03.177 [DEBUG] [Thread-14030] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:22:03.178 [DEBUG] [Thread-14030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:22:03.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:22:03.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:22:03.237 [DEBUG] [Thread-14030] [transport.py] [_log()] userauth is OK
2025-11-12T10:22:03.238 [DEBUG] [Thread-14030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:22:03.238 [DEBUG] [Thread-14030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:22:03.238 [DEBUG] [Thread-14030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:22:03.238 [DEBUG] [Thread-14030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:22:03.256 [INFO] [Thread-14030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:22: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-11-12T10:22:03.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:22:04.122 [DEBUG] [Thread-14030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:22:04.123 [DEBUG] [Thread-14030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:22:04.171 [DEBUG] [Thread-14030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:22:04.171 [DEBUG] [Thread-14030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:22:04.181 [DEBUG] [Thread-14030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:22:04.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:22:04.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-11-12T10:22:04.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-11-12T10:22:04.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:22:04.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:22:04.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:22:04.223 [DEBUG] [Thread-14030] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:22:13.208 [DEBUG] [Thread-14032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:22:27.289 [DEBUG] [Thread-14033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:22:28.258 [DEBUG] [Thread-14034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:22:34.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:22:34.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:22:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:22:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 22, 22), 25.87, 17.91, 0.0, 17.34, 23.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:22:34.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:22:22
2025-11-12T10:22:35.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:22:35.172 [DEBUG] [Thread-14035] [transport.py] [_log()] starting thread (client mode): 0x19ddb700
2025-11-12T10:22:35.172 [DEBUG] [Thread-14035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:22:35.193 [DEBUG] [Thread-14035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:22:35.193 [INFO] [Thread-14035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:22:35.194 [DEBUG] [Thread-14035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] client lang: <none>
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] server lang: <none>
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] kex follows: False
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:22:35.195 [DEBUG] [Thread-14035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:22:35.196 [DEBUG] [Thread-14035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:22:35.196 [DEBUG] [Thread-14035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:22:35.196 [DEBUG] [Thread-14035] [transport.py] [_log()] Compression: none
2025-11-12T10:22:35.196 [DEBUG] [Thread-14035] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:22:35.221 [DEBUG] [Thread-14035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:22:35.222 [DEBUG] [Thread-14035] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:22:35.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:22:35.223 [DEBUG] [Thread-14035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:22:35.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:22:35.225 [DEBUG] [Thread-14035] [transport.py] [_log()] userauth is OK
2025-11-12T10:22:35.225 [DEBUG] [Thread-14035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:22:35.225 [DEBUG] [Thread-14035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:22:35.225 [DEBUG] [Thread-14035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:22:35.225 [DEBUG] [Thread-14035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:22:35.248 [INFO] [Thread-14035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:22:35.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:22:35.869 [DEBUG] [Thread-14035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:22:35.870 [DEBUG] [Thread-14035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:22:35.870 [DEBUG] [Thread-14035] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:22:35.910 [DEBUG] [Thread-14035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:22:35.911 [DEBUG] [Thread-14035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:22:35.913 [DEBUG] [Thread-14035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:22:35.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:22:35.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:22:35.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:22:35.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:22:35.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:22:35.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:22:35.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:22:35.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:22:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:22:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.348701 -999.00  +23.50  16.62     24   +1.70 1 1 1 1 1   888    0 23.94 57.28 ----- 17.9 16.6 289.0 18.7 30.4 -26.0 29.4 -24.0 27.7 -23.4 28.7 -24.1
2025-11-12T10:22:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:22:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:22:35.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.348701
2025-11-12T10:22:35.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:22:35.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:22:35.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:22:35.939 [DEBUG] [Thread-14035] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:22:35.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:22:35.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:22:35.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:22:22', tmtdew=25.87, humidity=17.91, cloud=0.0, wind=17.34, temperature=23.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:22:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:22:36.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:22:36.033 [DEBUG] [Thread-14038] [transport.py] [_log()] starting thread (client mode): 0x1737cd90
2025-11-12T10:22:36.033 [DEBUG] [Thread-14038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:22:36.047 [DEBUG] [Thread-14038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:22:36.047 [INFO] [Thread-14038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] client lang: <none>
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] server lang: <none>
2025-11-12T10:22:36.055 [DEBUG] [Thread-14038] [transport.py] [_log()] kex follows: False
2025-11-12T10:22:36.056 [DEBUG] [Thread-14038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:22:36.056 [DEBUG] [Thread-14038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:22:36.056 [DEBUG] [Thread-14038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:22:36.056 [DEBUG] [Thread-14038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:22:36.056 [DEBUG] [Thread-14038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:22:36.056 [DEBUG] [Thread-14038] [transport.py] [_log()] Compression: none
2025-11-12T10:22:36.056 [DEBUG] [Thread-14038] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:22:36.113 [DEBUG] [Thread-14038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:22:36.114 [DEBUG] [Thread-14038] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:22:36.114 [DEBUG] [Thread-14038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:22:36.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:22:36.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:22:36.168 [DEBUG] [Thread-14038] [transport.py] [_log()] userauth is OK
2025-11-12T10:22:36.169 [DEBUG] [Thread-14038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:22:36.169 [DEBUG] [Thread-14038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:22:36.169 [DEBUG] [Thread-14038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:22:36.169 [DEBUG] [Thread-14038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:22:36.188 [INFO] [Thread-14038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:22:36.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:22:36.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:22:37.004 [DEBUG] [Thread-14038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:22:37.004 [DEBUG] [Thread-14038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:22:37.051 [DEBUG] [Thread-14038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:22:37.052 [DEBUG] [Thread-14038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:22:37.061 [DEBUG] [Thread-14038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:22:37.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:22:37.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-11-12T10:22:37.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-11-12T10:22:37.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:22:37.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:22:37.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:22:37.097 [DEBUG] [Thread-14038] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:22:43.294 [DEBUG] [Thread-14040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:22:52.841 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:22:52.842 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:22:58.347 [DEBUG] [Thread-14041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:23:07.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:23:07.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:23:07.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-11-12T10:23:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 22, 54), 27.4, 16.25, 0.0, 23.08, 24.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:23:07.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:22:54
2025-11-12T10:23:07.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:23:08.047 [DEBUG] [Thread-14042] [transport.py] [_log()] starting thread (client mode): 0x17346290
2025-11-12T10:23:08.048 [DEBUG] [Thread-14042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:23:08.067 [DEBUG] [Thread-14042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:23:08.067 [INFO] [Thread-14042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:23:08.070 [DEBUG] [Thread-14042] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:23:08.070 [DEBUG] [Thread-14042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:23:08.070 [DEBUG] [Thread-14042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:23:08.070 [DEBUG] [Thread-14042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] client lang: <none>
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] server lang: <none>
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] kex follows: False
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] Compression: none
2025-11-12T10:23:08.071 [DEBUG] [Thread-14042] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:23:08.081 [DEBUG] [Thread-14042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:23:08.081 [DEBUG] [Thread-14042] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:23:08.082 [DEBUG] [Thread-14042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:23:08.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:23:08.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:23:08.125 [DEBUG] [Thread-14042] [transport.py] [_log()] userauth is OK
2025-11-12T10:23:08.125 [DEBUG] [Thread-14042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:23:08.125 [DEBUG] [Thread-14042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:23:08.125 [DEBUG] [Thread-14042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:23:08.125 [DEBUG] [Thread-14042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:23:08.157 [INFO] [Thread-14042] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:23:08.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:23:08.773 [DEBUG] [Thread-14042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:23:08.773 [DEBUG] [Thread-14042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:23:08.773 [DEBUG] [Thread-14042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:23:08.814 [DEBUG] [Thread-14042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:23:08.814 [DEBUG] [Thread-14042] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:23:08.817 [DEBUG] [Thread-14042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:23:08.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:23:08.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:23:08.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:23:08.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:23:08.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:23:08.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:23:08.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:23:08.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:23:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:23:08.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.348701 -999.00  +23.50  16.62     24   +1.70 1 1 1 1 1   888    0 23.94 57.28 ----- 17.9 16.6 289.0 18.7 30.4 -26.0 29.4 -24.0 27.7 -23.4 28.7 -24.1
2025-11-12T10:23:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:23:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:23:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.348701
2025-11-12T10:23:08.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:23:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:23:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:23:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:23:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:23:08.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:22:54', tmtdew=27.4, humidity=16.25, cloud=0.0, wind=23.08, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:22:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:23:08.842 [DEBUG] [Thread-14042] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:23:08.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:23:08.937 [DEBUG] [Thread-14045] [transport.py] [_log()] starting thread (client mode): 0x19dd9a50
2025-11-12T10:23:08.938 [DEBUG] [Thread-14045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:23:08.952 [DEBUG] [Thread-14045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:23:08.952 [INFO] [Thread-14045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:23:08.960 [DEBUG] [Thread-14045] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:23:08.960 [DEBUG] [Thread-14045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:23:08.960 [DEBUG] [Thread-14045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] client lang: <none>
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] server lang: <none>
2025-11-12T10:23:08.961 [DEBUG] [Thread-14045] [transport.py] [_log()] kex follows: False
2025-11-12T10:23:08.962 [DEBUG] [Thread-14045] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:23:08.962 [DEBUG] [Thread-14045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:23:08.962 [DEBUG] [Thread-14045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:23:08.962 [DEBUG] [Thread-14045] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:23:08.962 [DEBUG] [Thread-14045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:23:08.962 [DEBUG] [Thread-14045] [transport.py] [_log()] Compression: none
2025-11-12T10:23:08.962 [DEBUG] [Thread-14045] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:23:09.017 [DEBUG] [Thread-14045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:23:09.017 [DEBUG] [Thread-14045] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:23:09.018 [DEBUG] [Thread-14045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:23:09.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:23:09.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:23:09.073 [DEBUG] [Thread-14045] [transport.py] [_log()] userauth is OK
2025-11-12T10:23:09.073 [DEBUG] [Thread-14045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:23:09.073 [DEBUG] [Thread-14045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:23:09.073 [DEBUG] [Thread-14045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:23:09.074 [DEBUG] [Thread-14045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:23:09.098 [INFO] [Thread-14045] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:23:09.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:23:09.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:23:09.997 [DEBUG] [Thread-14045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:23:09.997 [DEBUG] [Thread-14045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:23:10.046 [DEBUG] [Thread-14045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:23:10.046 [DEBUG] [Thread-14045] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:23:10.056 [DEBUG] [Thread-14045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:23:10.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:23: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-11-12T10:23: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-11-12T10:23:10.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:23:10.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:23:10.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:23:10.093 [DEBUG] [Thread-14045] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:23:13.380 [DEBUG] [Thread-14047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:23:27.317 [DEBUG] [Thread-14048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:23:28.429 [DEBUG] [Thread-14049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:23:40.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:23:40.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:23:40.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-11-12T10:23:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 23, 26), 28.44, 15.17, 0.0, 21.4, 24.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:23:40.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:23:26
2025-11-12T10:23:40.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:23:41.086 [DEBUG] [Thread-14050] [transport.py] [_log()] starting thread (client mode): 0x1737ed70
2025-11-12T10:23:41.087 [DEBUG] [Thread-14050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:23:41.107 [DEBUG] [Thread-14050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:23:41.107 [INFO] [Thread-14050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] client lang: <none>
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] server lang: <none>
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] kex follows: False
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] Compression: none
2025-11-12T10:23:41.110 [DEBUG] [Thread-14050] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:23:41.128 [DEBUG] [Thread-14050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:23:41.128 [DEBUG] [Thread-14050] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:23:41.129 [DEBUG] [Thread-14050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:23:41.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:23:41.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:23:41.129 [DEBUG] [Thread-14050] [transport.py] [_log()] userauth is OK
2025-11-12T10:23:41.129 [DEBUG] [Thread-14050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:23:41.129 [DEBUG] [Thread-14050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:23:41.129 [DEBUG] [Thread-14050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:23:41.130 [DEBUG] [Thread-14050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:23:41.156 [INFO] [Thread-14050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:23:41.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:23:41.800 [DEBUG] [Thread-14050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:23:41.800 [DEBUG] [Thread-14050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:23:41.800 [DEBUG] [Thread-14050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:23:41.841 [DEBUG] [Thread-14050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:23:41.841 [DEBUG] [Thread-14050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:23:41.844 [DEBUG] [Thread-14050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:23:41.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:23:41.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:23:41.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:23:41.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:23:41.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:23:41.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:23:41.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.349048 -999.00  +23.60  12.93     23   +1.60 1 1 1 1 1   888    0 23.53 50.73 ----- 17.4 12.9 310.2 20.1 30.5 -25.4 29.4 -25.0 27.8 -26.8 28.8 -23.9
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.349048
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:23:41.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:23:26', tmtdew=28.44, humidity=15.17, cloud=0.0, wind=21.4, temperature=24.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:22:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:23:41.863 [DEBUG] [Thread-14050] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:23:41.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:23:41.950 [DEBUG] [Thread-14053] [transport.py] [_log()] starting thread (client mode): 0x17346d70
2025-11-12T10:23:41.950 [DEBUG] [Thread-14053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:23:41.965 [DEBUG] [Thread-14053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:23:41.965 [INFO] [Thread-14053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] client lang: <none>
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] server lang: <none>
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] kex follows: False
2025-11-12T10:23:41.972 [DEBUG] [Thread-14053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:23:41.973 [DEBUG] [Thread-14053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:23:41.973 [DEBUG] [Thread-14053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:23:41.973 [DEBUG] [Thread-14053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:23:41.973 [DEBUG] [Thread-14053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:23:41.973 [DEBUG] [Thread-14053] [transport.py] [_log()] Compression: none
2025-11-12T10:23:41.973 [DEBUG] [Thread-14053] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:23:42.027 [DEBUG] [Thread-14053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:23:42.027 [DEBUG] [Thread-14053] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:23:42.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:23:42.027 [DEBUG] [Thread-14053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:23:42.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:23:42.085 [DEBUG] [Thread-14053] [transport.py] [_log()] userauth is OK
2025-11-12T10:23:42.085 [DEBUG] [Thread-14053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:23:42.085 [DEBUG] [Thread-14053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:23:42.085 [DEBUG] [Thread-14053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:23:42.085 [DEBUG] [Thread-14053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:23:42.099 [INFO] [Thread-14053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:23:42.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:23:42.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:23:42.916 [DEBUG] [Thread-14053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:23:42.916 [DEBUG] [Thread-14053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:23:42.964 [DEBUG] [Thread-14053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:23:42.964 [DEBUG] [Thread-14053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:23:42.972 [DEBUG] [Thread-14053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:23:42.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:23:42.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-11-12T10:23:42.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-11-12T10:23:42.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:23:42.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:23:42.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:23:43.003 [DEBUG] [Thread-14053] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:23:43.458 [DEBUG] [Thread-14055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:23:52.988 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:23:52.989 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:23:58.499 [DEBUG] [Thread-14056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:24:13.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:24:13.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:24:13.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-11-12T10:24:13.533 [DEBUG] [Thread-14057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:24:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 23, 58), 29.62, 13.67, 0.0, 23.11, 24.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:24:13.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:23:58
2025-11-12T10:24:13.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:24:13.953 [DEBUG] [Thread-14058] [transport.py] [_log()] starting thread (client mode): 0x17345870
2025-11-12T10:24:13.953 [DEBUG] [Thread-14058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:24:13.973 [DEBUG] [Thread-14058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:24:13.973 [INFO] [Thread-14058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] client lang: <none>
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] server lang: <none>
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] kex follows: False
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:24:13.976 [DEBUG] [Thread-14058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:24:13.977 [DEBUG] [Thread-14058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:24:13.977 [DEBUG] [Thread-14058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:24:13.977 [DEBUG] [Thread-14058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:24:13.977 [DEBUG] [Thread-14058] [transport.py] [_log()] Compression: none
2025-11-12T10:24:13.977 [DEBUG] [Thread-14058] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:24:13.994 [DEBUG] [Thread-14058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:24:13.994 [DEBUG] [Thread-14058] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:24:13.995 [DEBUG] [Thread-14058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:24:13.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:24:13.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:24:13.997 [DEBUG] [Thread-14058] [transport.py] [_log()] userauth is OK
2025-11-12T10:24:13.997 [DEBUG] [Thread-14058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:24:13.997 [DEBUG] [Thread-14058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:24:13.997 [DEBUG] [Thread-14058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:24:13.997 [DEBUG] [Thread-14058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:24:14.017 [INFO] [Thread-14058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:24:14.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:24:14.658 [DEBUG] [Thread-14058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:24:14.658 [DEBUG] [Thread-14058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:24:14.659 [DEBUG] [Thread-14058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:24:14.699 [DEBUG] [Thread-14058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:24:14.699 [DEBUG] [Thread-14058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:24:14.701 [DEBUG] [Thread-14058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:24:14.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:24:14.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:24:14.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:24:14.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:24:14.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:24:14.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:24:14.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:24:14.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:24:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:24:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.349742 -999.00  +24.00  21.58     20   -0.10 1 1 1 1 1   888    0 24.40 61.20 ----- 26.8 21.6 300.8 28.7 30.5 -26.9 29.5 -25.6 28.1 -25.1 28.9 -24.9
2025-11-12T10:24:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:24:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:24:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.349742
2025-11-12T10:24:14.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:24:14.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:24:14.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:24:14.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:24:14.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:24:14.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:23:58', tmtdew=29.62, humidity=13.67, cloud=0.0, wind=23.11, temperature=24.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:23:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:24:14.721 [DEBUG] [Thread-14058] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:24:14.798 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:24:14.808 [DEBUG] [Thread-14061] [transport.py] [_log()] starting thread (client mode): 0x173466e0
2025-11-12T10:24:14.808 [DEBUG] [Thread-14061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:24:14.824 [DEBUG] [Thread-14061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:24:14.824 [INFO] [Thread-14061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] client lang: <none>
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] server lang: <none>
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] kex follows: False
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:24:14.832 [DEBUG] [Thread-14061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:24:14.833 [DEBUG] [Thread-14061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:24:14.833 [DEBUG] [Thread-14061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:24:14.833 [DEBUG] [Thread-14061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:24:14.833 [DEBUG] [Thread-14061] [transport.py] [_log()] Compression: none
2025-11-12T10:24:14.833 [DEBUG] [Thread-14061] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:24:14.889 [DEBUG] [Thread-14061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:24:14.890 [DEBUG] [Thread-14061] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:24:14.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:24:14.891 [DEBUG] [Thread-14061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:24:14.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:24:14.946 [DEBUG] [Thread-14061] [transport.py] [_log()] userauth is OK
2025-11-12T10:24:14.946 [DEBUG] [Thread-14061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:24:14.946 [DEBUG] [Thread-14061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:24:14.946 [DEBUG] [Thread-14061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:24:14.946 [DEBUG] [Thread-14061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:24:14.965 [INFO] [Thread-14061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:24:14.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:24:14.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:24:15.802 [DEBUG] [Thread-14061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:24:15.802 [DEBUG] [Thread-14061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:24:15.850 [DEBUG] [Thread-14061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:24:15.850 [DEBUG] [Thread-14061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:24:15.859 [DEBUG] [Thread-14061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:24:15.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:24:15.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:24:15.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-11-12T10:24:15.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:24:15.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:24:15.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:24:15.895 [DEBUG] [Thread-14061] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:24:27.354 [DEBUG] [Thread-14063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:24:28.566 [DEBUG] [Thread-14064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:24:43.619 [DEBUG] [Thread-14065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:24:45.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:24:45.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:24:45.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:24:46.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 24, 30), 29.13, 14.2, 0.0, 24.6, 24.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:24:46.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:24:30
2025-11-12T10:24:46.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:24:46.839 [DEBUG] [Thread-14066] [transport.py] [_log()] starting thread (client mode): 0x17347c10
2025-11-12T10:24:46.839 [DEBUG] [Thread-14066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:24:46.859 [DEBUG] [Thread-14066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:24:46.859 [INFO] [Thread-14066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:24:46.862 [DEBUG] [Thread-14066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] client lang: <none>
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] server lang: <none>
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] kex follows: False
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] Compression: none
2025-11-12T10:24:46.863 [DEBUG] [Thread-14066] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:24:46.880 [DEBUG] [Thread-14066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:24:46.880 [DEBUG] [Thread-14066] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:24:46.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:24:46.881 [DEBUG] [Thread-14066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:24:46.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:24:46.924 [DEBUG] [Thread-14066] [transport.py] [_log()] userauth is OK
2025-11-12T10:24:46.925 [DEBUG] [Thread-14066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:24:46.925 [DEBUG] [Thread-14066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:24:46.925 [DEBUG] [Thread-14066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:24:46.925 [DEBUG] [Thread-14066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:24:46.957 [INFO] [Thread-14066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:24:46.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:24:47.608 [DEBUG] [Thread-14066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:24:47.608 [DEBUG] [Thread-14066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:24:47.609 [DEBUG] [Thread-14066] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:24:47.650 [DEBUG] [Thread-14066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:24:47.650 [DEBUG] [Thread-14066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:24:47.653 [DEBUG] [Thread-14066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:24:47.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:24:47.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:24:47.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:24:47.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:24:47.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:24:47.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:24:47.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:24:47.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:24:47.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:24:47.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.350090 -999.00  +23.80  26.68     20   -0.10 1 1 1 1 1   888    0 23.80 60.05 ----- 30.5 26.7 293.8 29.1 30.5 -26.9 29.6 -24.9 28.0 -24.4 28.9 -25.2
2025-11-12T10:24:47.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:24:47.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:24:47.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.350090
2025-11-12T10:24:47.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:24:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:24:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:24:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:24:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:24:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:24:30', tmtdew=29.13, humidity=14.2, cloud=0.0, wind=24.6, temperature=24.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:24:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:24:47.679 [DEBUG] [Thread-14066] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:24:47.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:24:47.772 [DEBUG] [Thread-14069] [transport.py] [_log()] starting thread (client mode): 0x17360820
2025-11-12T10:24:47.772 [DEBUG] [Thread-14069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:24:47.786 [DEBUG] [Thread-14069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:24:47.786 [INFO] [Thread-14069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:24:47.793 [DEBUG] [Thread-14069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:24:47.794 [DEBUG] [Thread-14069] [transport.py] [_log()] client lang: <none>
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] server lang: <none>
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] kex follows: False
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] Compression: none
2025-11-12T10:24:47.795 [DEBUG] [Thread-14069] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:24:47.854 [DEBUG] [Thread-14069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:24:47.855 [DEBUG] [Thread-14069] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:24:47.855 [DEBUG] [Thread-14069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:24:47.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:24:47.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:24:47.913 [DEBUG] [Thread-14069] [transport.py] [_log()] userauth is OK
2025-11-12T10:24:47.913 [DEBUG] [Thread-14069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:24:47.913 [DEBUG] [Thread-14069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:24:47.913 [DEBUG] [Thread-14069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:24:47.913 [DEBUG] [Thread-14069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:24:47.931 [INFO] [Thread-14069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:24:47.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:24:47.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:24:48.769 [DEBUG] [Thread-14069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:24:48.769 [DEBUG] [Thread-14069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:24:48.817 [DEBUG] [Thread-14069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:24:48.817 [DEBUG] [Thread-14069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:24:48.826 [DEBUG] [Thread-14069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:24:48.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:24:48.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-11-12T10:24:48.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-11-12T10:24:48.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:24:48.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:24:48.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:24:48.866 [DEBUG] [Thread-14069] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:24:53.129 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:24:53.130 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:24:58.657 [DEBUG] [Thread-14071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:25:13.697 [DEBUG] [Thread-14072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:25:18.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:25:18.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:25:18.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:25:19.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 25, 2), 29.68, 13.69, 0.0, 20.86, 25.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:25:19.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:25:02
2025-11-12T10:25:19.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:25:19.813 [DEBUG] [Thread-14073] [transport.py] [_log()] starting thread (client mode): 0x173632e0
2025-11-12T10:25:19.813 [DEBUG] [Thread-14073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:25:19.833 [DEBUG] [Thread-14073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:25:19.833 [INFO] [Thread-14073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:25:19.836 [DEBUG] [Thread-14073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] client lang: <none>
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] server lang: <none>
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] kex follows: False
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] Compression: none
2025-11-12T10:25:19.837 [DEBUG] [Thread-14073] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:25:19.855 [DEBUG] [Thread-14073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:25:19.855 [DEBUG] [Thread-14073] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:25:19.856 [DEBUG] [Thread-14073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:25:19.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:25:19.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:25:19.858 [DEBUG] [Thread-14073] [transport.py] [_log()] userauth is OK
2025-11-12T10:25:19.858 [DEBUG] [Thread-14073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:25:19.858 [DEBUG] [Thread-14073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:25:19.858 [DEBUG] [Thread-14073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:25:19.858 [DEBUG] [Thread-14073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:25:19.883 [INFO] [Thread-14073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:25:19.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:25:21.379 [DEBUG] [Thread-14073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:25:21.380 [DEBUG] [Thread-14073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:25:21.380 [DEBUG] [Thread-14073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:25:21.421 [DEBUG] [Thread-14073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:25:21.421 [DEBUG] [Thread-14073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:25:21.424 [DEBUG] [Thread-14073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:25:21.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:25:21.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:25:21.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:25:21.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:25:21.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:25:21.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:25:21.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:25:21.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:25:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:25:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.350437 -999.00  +23.60  28.95     20   -0.10 1 1 1 1 1   888    0 24.15 58.21 ----- 26.5 28.9 290.0 37.3 30.4 -27.4 29.5 -25.7 28.1 -25.2 28.9 -25.3
2025-11-12T10:25:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:25:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:25:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.350437
2025-11-12T10:25:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:25:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:25:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:25:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:25:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:25:21.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:25:02', tmtdew=29.68, humidity=13.69, cloud=0.0, wind=20.86, temperature=25.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:24:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:25:21.452 [DEBUG] [Thread-14073] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:25:21.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:25:21.545 [DEBUG] [Thread-14076] [transport.py] [_log()] starting thread (client mode): 0x17362860
2025-11-12T10:25:21.545 [DEBUG] [Thread-14076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:25:21.560 [DEBUG] [Thread-14076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:25:21.560 [INFO] [Thread-14076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:25:21.567 [DEBUG] [Thread-14076] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] client lang: <none>
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] server lang: <none>
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] kex follows: False
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:25:21.568 [DEBUG] [Thread-14076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:25:21.569 [DEBUG] [Thread-14076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:25:21.569 [DEBUG] [Thread-14076] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:25:21.569 [DEBUG] [Thread-14076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:25:21.569 [DEBUG] [Thread-14076] [transport.py] [_log()] Compression: none
2025-11-12T10:25:21.569 [DEBUG] [Thread-14076] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:25:21.626 [DEBUG] [Thread-14076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:25:21.627 [DEBUG] [Thread-14076] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:25:21.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:25:21.628 [DEBUG] [Thread-14076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:25:21.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:25:21.688 [DEBUG] [Thread-14076] [transport.py] [_log()] userauth is OK
2025-11-12T10:25:21.688 [DEBUG] [Thread-14076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:25:21.689 [DEBUG] [Thread-14076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:25:21.689 [DEBUG] [Thread-14076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:25:21.689 [DEBUG] [Thread-14076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:25:21.707 [INFO] [Thread-14076] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:25:21.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:25:21.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:25:22.541 [DEBUG] [Thread-14076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:25:22.541 [DEBUG] [Thread-14076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:25:22.590 [DEBUG] [Thread-14076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:25:22.590 [DEBUG] [Thread-14076] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:25:22.599 [DEBUG] [Thread-14076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:25:22.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:25:22.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-11-12T10:25:22.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-11-12T10:25:22.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:25:22.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:25:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:25:22.635 [DEBUG] [Thread-14076] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:25:27.406 [DEBUG] [Thread-14078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:25:28.735 [DEBUG] [Thread-14079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:25:43.790 [DEBUG] [Thread-14080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:25:52.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:25:52.658 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:25:52.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-11-12T10:25:53.270 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:25:53.271 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:25:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 25, 34), 28.82, 14.74, 0.0, 17.12, 24.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:25:53.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:25:34
2025-11-12T10:25:53.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:25:53.579 [DEBUG] [Thread-14081] [transport.py] [_log()] starting thread (client mode): 0x17360a00
2025-11-12T10:25:53.579 [DEBUG] [Thread-14081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:25:53.599 [DEBUG] [Thread-14081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:25:53.599 [INFO] [Thread-14081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:25:53.602 [DEBUG] [Thread-14081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] client lang: <none>
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] server lang: <none>
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] kex follows: False
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:25:53.603 [DEBUG] [Thread-14081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:25:53.604 [DEBUG] [Thread-14081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:25:53.604 [DEBUG] [Thread-14081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:25:53.604 [DEBUG] [Thread-14081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:25:53.604 [DEBUG] [Thread-14081] [transport.py] [_log()] Compression: none
2025-11-12T10:25:53.604 [DEBUG] [Thread-14081] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:25:53.623 [DEBUG] [Thread-14081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:25:53.624 [DEBUG] [Thread-14081] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:25:53.625 [DEBUG] [Thread-14081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:25:53.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:25:53.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:25:53.669 [DEBUG] [Thread-14081] [transport.py] [_log()] userauth is OK
2025-11-12T10:25:53.669 [DEBUG] [Thread-14081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:25:53.669 [DEBUG] [Thread-14081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:25:53.669 [DEBUG] [Thread-14081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:25:53.669 [DEBUG] [Thread-14081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:25:53.689 [INFO] [Thread-14081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:25:53.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:25:54.291 [DEBUG] [Thread-14081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:25:54.292 [DEBUG] [Thread-14081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:25:54.292 [DEBUG] [Thread-14081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:25:54.333 [DEBUG] [Thread-14081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:25:54.333 [DEBUG] [Thread-14081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:25:54.336 [DEBUG] [Thread-14081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:25:54.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:25:54.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:25:54.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:25:54.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:25:54.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:25:54.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:25:54.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:25:54.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:25:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:25:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.350784 -999.00  +23.30  16.43     21   +0.10 1 1 1 1 1   888    0 24.32 61.75 ----- 13.6 16.4 283.1 28.7 30.5 -26.1 29.5 -25.6 28.1 -25.6 29.0 -24.5
2025-11-12T10:25:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:25:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:25:54.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.350784
2025-11-12T10:25:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:25:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:25:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:25:54.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:25:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:25:54.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:25:34', tmtdew=28.82, humidity=14.74, cloud=0.0, wind=17.12, temperature=24.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:25:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:25:54.365 [DEBUG] [Thread-14081] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:25:54.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:25:54.462 [DEBUG] [Thread-14084] [transport.py] [_log()] starting thread (client mode): 0x19dd9270
2025-11-12T10:25:54.462 [DEBUG] [Thread-14084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:25:54.476 [DEBUG] [Thread-14084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:25:54.477 [INFO] [Thread-14084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:25:54.484 [DEBUG] [Thread-14084] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:25:54.484 [DEBUG] [Thread-14084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] client lang: <none>
2025-11-12T10:25:54.485 [DEBUG] [Thread-14084] [transport.py] [_log()] server lang: <none>
2025-11-12T10:25:54.486 [DEBUG] [Thread-14084] [transport.py] [_log()] kex follows: False
2025-11-12T10:25:54.486 [DEBUG] [Thread-14084] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:25:54.486 [DEBUG] [Thread-14084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:25:54.486 [DEBUG] [Thread-14084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:25:54.486 [DEBUG] [Thread-14084] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:25:54.486 [DEBUG] [Thread-14084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:25:54.486 [DEBUG] [Thread-14084] [transport.py] [_log()] Compression: none
2025-11-12T10:25:54.487 [DEBUG] [Thread-14084] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:25:54.542 [DEBUG] [Thread-14084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:25:54.543 [DEBUG] [Thread-14084] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:25:54.543 [DEBUG] [Thread-14084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:25:54.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:25:54.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:25:54.598 [DEBUG] [Thread-14084] [transport.py] [_log()] userauth is OK
2025-11-12T10:25:54.598 [DEBUG] [Thread-14084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:25:54.598 [DEBUG] [Thread-14084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:25:54.599 [DEBUG] [Thread-14084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:25:54.599 [DEBUG] [Thread-14084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:25:54.617 [INFO] [Thread-14084] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:25:54.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:25:54.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:25:55.451 [DEBUG] [Thread-14084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:25:55.451 [DEBUG] [Thread-14084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:25:55.499 [DEBUG] [Thread-14084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:25:55.499 [DEBUG] [Thread-14084] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:25:55.507 [DEBUG] [Thread-14084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:25:55.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:25:55.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-11-12T10:25:55.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-11-12T10:25:55.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:25:55.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:25:55.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:25:55.539 [DEBUG] [Thread-14084] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:25:58.823 [DEBUG] [Thread-14086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:26:13.882 [DEBUG] [Thread-14087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:26:25.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:26:25.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:26:25.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-11-12T10:26:26.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 26, 6), 28.42, 15.14, 0.0, 18.47, 24.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:26:26.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:26:06
2025-11-12T10:26:26.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:26:26.470 [DEBUG] [Thread-14088] [transport.py] [_log()] starting thread (client mode): 0x19dd9c60
2025-11-12T10:26:26.470 [DEBUG] [Thread-14088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:26:26.493 [DEBUG] [Thread-14088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:26:26.493 [INFO] [Thread-14088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] client lang: <none>
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] server lang: <none>
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] kex follows: False
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] Compression: none
2025-11-12T10:26:26.494 [DEBUG] [Thread-14088] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:26:26.503 [DEBUG] [Thread-14088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:26:26.503 [DEBUG] [Thread-14088] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:26:26.504 [DEBUG] [Thread-14088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:26:26.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:26:26.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:26:26.505 [DEBUG] [Thread-14088] [transport.py] [_log()] userauth is OK
2025-11-12T10:26:26.506 [DEBUG] [Thread-14088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:26:26.506 [DEBUG] [Thread-14088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:26:26.506 [DEBUG] [Thread-14088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:26:26.506 [DEBUG] [Thread-14088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:26:26.523 [INFO] [Thread-14088] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:26:26.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:26:27.356 [DEBUG] [Thread-14088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:26:27.356 [DEBUG] [Thread-14088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:26:27.356 [DEBUG] [Thread-14088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:26:27.397 [DEBUG] [Thread-14088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:26:27.398 [DEBUG] [Thread-14088] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:26:27.401 [DEBUG] [Thread-14088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:26:27.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:26:27.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:26:27.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:26:27.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:26:27.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:26:27.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:26:27.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:26:27.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.351131 -999.00  +23.70  24.45     22   +0.80 1 1 1 1 1   888    0 23.68 60.47 ----- 20.0 24.4 315.8 27.4 30.6 -25.8 29.6 -24.4 28.1 -25.2 29.1 -24.2
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.351131
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:26:27.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:26:06', tmtdew=28.42, humidity=15.14, cloud=0.0, wind=18.47, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:25:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:26:27.423 [DEBUG] [Thread-14088] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:26:27.447 [DEBUG] [Thread-14091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:26:27.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:26:27.506 [DEBUG] [Thread-14092] [transport.py] [_log()] starting thread (client mode): 0x173473d0
2025-11-12T10:26:27.506 [DEBUG] [Thread-14092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:26:27.522 [DEBUG] [Thread-14092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:26:27.522 [INFO] [Thread-14092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] client lang: <none>
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] server lang: <none>
2025-11-12T10:26:27.530 [DEBUG] [Thread-14092] [transport.py] [_log()] kex follows: False
2025-11-12T10:26:27.531 [DEBUG] [Thread-14092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:26:27.531 [DEBUG] [Thread-14092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:26:27.531 [DEBUG] [Thread-14092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:26:27.531 [DEBUG] [Thread-14092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:26:27.531 [DEBUG] [Thread-14092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:26:27.531 [DEBUG] [Thread-14092] [transport.py] [_log()] Compression: none
2025-11-12T10:26:27.531 [DEBUG] [Thread-14092] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:26:27.592 [DEBUG] [Thread-14092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:26:27.592 [DEBUG] [Thread-14092] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:26:27.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:26:27.594 [DEBUG] [Thread-14092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:26:27.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:26:27.653 [DEBUG] [Thread-14092] [transport.py] [_log()] userauth is OK
2025-11-12T10:26:27.654 [DEBUG] [Thread-14092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:26:27.654 [DEBUG] [Thread-14092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:26:27.654 [DEBUG] [Thread-14092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:26:27.654 [DEBUG] [Thread-14092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:26:27.680 [INFO] [Thread-14092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:26:27.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:26:27.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:26:28.544 [DEBUG] [Thread-14092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:26:28.544 [DEBUG] [Thread-14092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:26:28.592 [DEBUG] [Thread-14092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:26:28.592 [DEBUG] [Thread-14092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:26:28.602 [DEBUG] [Thread-14092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:26:28.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:26:28.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:26:28.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:26:28.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:26:28.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:26:28.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:26:28.636 [DEBUG] [Thread-14092] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:26:28.911 [DEBUG] [Thread-14094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:26:43.963 [DEBUG] [Thread-14095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:26:53.413 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:26:53.414 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:26:58.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:26:58.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:26:58.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-11-12T10:26:58.996 [DEBUG] [Thread-14096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:26:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 26, 38), 28.19, 15.42, 0.0, 20.84, 24.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:26:59.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:26:38
2025-11-12T10:26:59.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:26:59.571 [DEBUG] [Thread-14097] [transport.py] [_log()] starting thread (client mode): 0x173619c0
2025-11-12T10:26:59.571 [DEBUG] [Thread-14097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:26:59.591 [DEBUG] [Thread-14097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:26:59.591 [INFO] [Thread-14097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:26:59.594 [DEBUG] [Thread-14097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] client lang: <none>
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] server lang: <none>
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] kex follows: False
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] Compression: none
2025-11-12T10:26:59.595 [DEBUG] [Thread-14097] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:26:59.612 [DEBUG] [Thread-14097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:26:59.613 [DEBUG] [Thread-14097] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:26:59.613 [DEBUG] [Thread-14097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:26:59.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:26:59.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:26:59.615 [DEBUG] [Thread-14097] [transport.py] [_log()] userauth is OK
2025-11-12T10:26:59.615 [DEBUG] [Thread-14097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:26:59.615 [DEBUG] [Thread-14097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:26:59.615 [DEBUG] [Thread-14097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:26:59.615 [DEBUG] [Thread-14097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:26:59.638 [INFO] [Thread-14097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:26:59.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:27:00.272 [DEBUG] [Thread-14097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:27:00.272 [DEBUG] [Thread-14097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:27:00.272 [DEBUG] [Thread-14097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:27:00.313 [DEBUG] [Thread-14097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:27:00.313 [DEBUG] [Thread-14097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:27:00.317 [DEBUG] [Thread-14097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:27:00.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:27:00.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:27:00.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:27:00.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:27:00.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:27:00.335 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:27:00.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:27:00.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:27:00.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:27:00.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.351478 -999.00  +24.30  21.64     21   +0.80 1 1 1 1 1   888    0 24.21 62.82 ----- 25.0 21.6 312.0 29.0 30.7 -26.4 29.8 -25.5 28.3 -23.7 29.2 -24.3
2025-11-12T10:27:00.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:27:00.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:27:00.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.351478
2025-11-12T10:27:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:27:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:27:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:27:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:27:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:27:00.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:26:38', tmtdew=28.19, humidity=15.42, cloud=0.0, wind=20.84, temperature=24.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:26:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:27:00.338 [DEBUG] [Thread-14097] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:27:00.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:27:00.427 [DEBUG] [Thread-14100] [transport.py] [_log()] starting thread (client mode): 0x17362fe0
2025-11-12T10:27:00.427 [DEBUG] [Thread-14100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:27:00.442 [DEBUG] [Thread-14100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:27:00.442 [INFO] [Thread-14100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:27:00.449 [DEBUG] [Thread-14100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:27:00.450 [DEBUG] [Thread-14100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:27:00.450 [DEBUG] [Thread-14100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:27:00.450 [DEBUG] [Thread-14100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:27:00.450 [DEBUG] [Thread-14100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:27:00.450 [DEBUG] [Thread-14100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:27:00.450 [DEBUG] [Thread-14100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:27:00.451 [DEBUG] [Thread-14100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:27:00.451 [DEBUG] [Thread-14100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:27:00.451 [DEBUG] [Thread-14100] [transport.py] [_log()] client lang: <none>
2025-11-12T10:27:00.451 [DEBUG] [Thread-14100] [transport.py] [_log()] server lang: <none>
2025-11-12T10:27:00.451 [DEBUG] [Thread-14100] [transport.py] [_log()] kex follows: False
2025-11-12T10:27:00.451 [DEBUG] [Thread-14100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:27:00.451 [DEBUG] [Thread-14100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:27:00.451 [DEBUG] [Thread-14100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:27:00.452 [DEBUG] [Thread-14100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:27:00.452 [DEBUG] [Thread-14100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:27:00.452 [DEBUG] [Thread-14100] [transport.py] [_log()] Compression: none
2025-11-12T10:27:00.452 [DEBUG] [Thread-14100] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:27:00.514 [DEBUG] [Thread-14100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:27:00.514 [DEBUG] [Thread-14100] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:27:00.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:27:00.516 [DEBUG] [Thread-14100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:27:00.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:27:00.570 [DEBUG] [Thread-14100] [transport.py] [_log()] userauth is OK
2025-11-12T10:27:00.570 [DEBUG] [Thread-14100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:27:00.570 [DEBUG] [Thread-14100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:27:00.571 [DEBUG] [Thread-14100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:27:00.571 [DEBUG] [Thread-14100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:27:00.589 [INFO] [Thread-14100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:27:00.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:27:00.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:27:01.427 [DEBUG] [Thread-14100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:27:01.427 [DEBUG] [Thread-14100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:27:01.476 [DEBUG] [Thread-14100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:27:01.476 [DEBUG] [Thread-14100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:27:01.486 [DEBUG] [Thread-14100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:27:01.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:27:01.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-11-12T10:27:01.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:27:01.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:27:01.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:27:01.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:27:01.530 [DEBUG] [Thread-14100] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:27:14.027 [DEBUG] [Thread-14102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:27:27.482 [DEBUG] [Thread-14103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:27:29.075 [DEBUG] [Thread-14104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:27:31.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:27:31.551 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:27:31.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-11-12T10:27:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 27, 10), 28.57, 15.0, 0.0, 22.96, 24.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:27:32.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:27:10
2025-11-12T10:27:32.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:27:32.498 [DEBUG] [Thread-14105] [transport.py] [_log()] starting thread (client mode): 0x17362c20
2025-11-12T10:27:32.498 [DEBUG] [Thread-14105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:27:32.517 [DEBUG] [Thread-14105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:27:32.518 [INFO] [Thread-14105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] client lang: <none>
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] server lang: <none>
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] kex follows: False
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] Compression: none
2025-11-12T10:27:32.521 [DEBUG] [Thread-14105] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:27:32.537 [DEBUG] [Thread-14105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:27:32.537 [DEBUG] [Thread-14105] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:27:32.537 [DEBUG] [Thread-14105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:27:32.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:27:32.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:27:32.538 [DEBUG] [Thread-14105] [transport.py] [_log()] userauth is OK
2025-11-12T10:27:32.538 [DEBUG] [Thread-14105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:27:32.538 [DEBUG] [Thread-14105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:27:32.538 [DEBUG] [Thread-14105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:27:32.538 [DEBUG] [Thread-14105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:27:32.547 [INFO] [Thread-14105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:27:32.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:27:33.290 [DEBUG] [Thread-14105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:27:33.291 [DEBUG] [Thread-14105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:27:33.291 [DEBUG] [Thread-14105] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:27:33.332 [DEBUG] [Thread-14105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:27:33.332 [DEBUG] [Thread-14105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:27:33.334 [DEBUG] [Thread-14105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:27:33.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:27:33.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:27:33.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:27:33.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:27:33.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:27:33.351 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:27:33.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.351826 -999.00  +23.90  24.31     21   +0.70 1 1 1 1 1   888    0 24.86 69.94 ----- 26.2 24.3 318.6 31.9 30.8 -25.9 29.8 -24.1 28.4 -23.3 29.3 -24.0
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.351826
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:27:33.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:27:10', tmtdew=28.57, humidity=15.0, cloud=0.0, wind=22.96, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:26:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:27:33.353 [DEBUG] [Thread-14105] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:27:33.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:27:33.440 [DEBUG] [Thread-14108] [transport.py] [_log()] starting thread (client mode): 0x14921060
2025-11-12T10:27:33.440 [DEBUG] [Thread-14108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:27:33.457 [DEBUG] [Thread-14108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:27:33.457 [INFO] [Thread-14108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] client lang: <none>
2025-11-12T10:27:33.464 [DEBUG] [Thread-14108] [transport.py] [_log()] server lang: <none>
2025-11-12T10:27:33.465 [DEBUG] [Thread-14108] [transport.py] [_log()] kex follows: False
2025-11-12T10:27:33.465 [DEBUG] [Thread-14108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:27:33.465 [DEBUG] [Thread-14108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:27:33.465 [DEBUG] [Thread-14108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:27:33.465 [DEBUG] [Thread-14108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:27:33.465 [DEBUG] [Thread-14108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:27:33.465 [DEBUG] [Thread-14108] [transport.py] [_log()] Compression: none
2025-11-12T10:27:33.465 [DEBUG] [Thread-14108] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:27:33.524 [DEBUG] [Thread-14108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:27:33.524 [DEBUG] [Thread-14108] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:27:33.525 [DEBUG] [Thread-14108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:27:33.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:27:33.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:27:33.581 [DEBUG] [Thread-14108] [transport.py] [_log()] userauth is OK
2025-11-12T10:27:33.581 [DEBUG] [Thread-14108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:27:33.581 [DEBUG] [Thread-14108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:27:33.581 [DEBUG] [Thread-14108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:27:33.582 [DEBUG] [Thread-14108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:27:33.598 [INFO] [Thread-14108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:27:33.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:27:33.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:27:34.478 [DEBUG] [Thread-14108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:27:34.478 [DEBUG] [Thread-14108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:27:34.533 [DEBUG] [Thread-14108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:27:34.533 [DEBUG] [Thread-14108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:27:34.542 [DEBUG] [Thread-14108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:27:34.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:27:34.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-11-12T10:27:34.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:27:34.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:27:34.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:27:34.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:27:34.574 [DEBUG] [Thread-14108] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:27:44.103 [DEBUG] [Thread-14110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:27:53.563 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:27:53.564 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:27:59.145 [DEBUG] [Thread-14111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:28:04.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:28:04.567 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:28:04.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:28:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 27, 42), 27.99, 15.27, 0.0, 21.26, 24.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:28:05.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:27:42
2025-11-12T10:28:05.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:28:05.511 [DEBUG] [Thread-14112] [transport.py] [_log()] starting thread (client mode): 0x19dda9e0
2025-11-12T10:28:05.511 [DEBUG] [Thread-14112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:28:05.531 [DEBUG] [Thread-14112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:28:05.531 [INFO] [Thread-14112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:28:05.534 [DEBUG] [Thread-14112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:28:05.534 [DEBUG] [Thread-14112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:28:05.534 [DEBUG] [Thread-14112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:28:05.534 [DEBUG] [Thread-14112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:28:05.534 [DEBUG] [Thread-14112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:28:05.534 [DEBUG] [Thread-14112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] client lang: <none>
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] server lang: <none>
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] kex follows: False
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:28:05.535 [DEBUG] [Thread-14112] [transport.py] [_log()] Compression: none
2025-11-12T10:28:05.536 [DEBUG] [Thread-14112] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:28:05.556 [DEBUG] [Thread-14112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:28:05.557 [DEBUG] [Thread-14112] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:28:05.558 [DEBUG] [Thread-14112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:28:05.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:28:05.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:28:05.600 [DEBUG] [Thread-14112] [transport.py] [_log()] userauth is OK
2025-11-12T10:28:05.601 [DEBUG] [Thread-14112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:28:05.601 [DEBUG] [Thread-14112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:28:05.601 [DEBUG] [Thread-14112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:28:05.601 [DEBUG] [Thread-14112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:28:05.632 [INFO] [Thread-14112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:28:05.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:28:06.292 [DEBUG] [Thread-14112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:28:06.293 [DEBUG] [Thread-14112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:28:06.293 [DEBUG] [Thread-14112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:28:06.334 [DEBUG] [Thread-14112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:28:06.334 [DEBUG] [Thread-14112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:28:06.337 [DEBUG] [Thread-14112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:28:06.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:28:06.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:28:06.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:28:06.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:28:06.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:28:06.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:28:06.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:28:06.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:28:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:28:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.352520 -999.00  +23.90  20.78     22   +0.80 1 1 1 1 1   888    0 25.04 75.74 ----- 23.2 20.8 314.0 28.7 30.9 -26.0 29.9 -25.4 28.5 -24.3 29.4 -24.0
2025-11-12T10:28:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:28:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:28:06.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.352520
2025-11-12T10:28:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:28:06.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:28:06.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:28:06.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:28:06.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:28:06.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:27:42', tmtdew=27.99, humidity=15.27, cloud=0.0, wind=21.26, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:27:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:28:06.365 [DEBUG] [Thread-14112] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:28:06.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:28:06.460 [DEBUG] [Thread-14115] [transport.py] [_log()] starting thread (client mode): 0x17346cb0
2025-11-12T10:28:06.461 [DEBUG] [Thread-14115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:28:06.475 [DEBUG] [Thread-14115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:28:06.475 [INFO] [Thread-14115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:28:06.483 [DEBUG] [Thread-14115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] client lang: <none>
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] server lang: <none>
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] kex follows: False
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] Compression: none
2025-11-12T10:28:06.484 [DEBUG] [Thread-14115] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:28:06.543 [DEBUG] [Thread-14115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:28:06.543 [DEBUG] [Thread-14115] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:28:06.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:28:06.544 [DEBUG] [Thread-14115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:28:06.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:28:06.598 [DEBUG] [Thread-14115] [transport.py] [_log()] userauth is OK
2025-11-12T10:28:06.599 [DEBUG] [Thread-14115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:28:06.599 [DEBUG] [Thread-14115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:28:06.599 [DEBUG] [Thread-14115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:28:06.599 [DEBUG] [Thread-14115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:28:06.617 [INFO] [Thread-14115] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:28:06.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:28:06.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:28:07.466 [DEBUG] [Thread-14115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:28:07.466 [DEBUG] [Thread-14115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:28:07.514 [DEBUG] [Thread-14115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:28:07.515 [DEBUG] [Thread-14115] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:28:07.525 [DEBUG] [Thread-14115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:28:07.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:28:07.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-11-12T10:28:07.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-11-12T10:28:07.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:28:07.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:28:07.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:28:07.562 [DEBUG] [Thread-14115] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:28:14.178 [DEBUG] [Thread-14117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:28:27.526 [DEBUG] [Thread-14118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:28:29.229 [DEBUG] [Thread-14119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:28:37.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:28:37.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:28:37.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-11-12T10:28:38.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 28, 14), 27.89, 15.37, 0.0, 20.54, 24.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:28:38.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:28:14
2025-11-12T10:28:38.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:28:38.509 [DEBUG] [Thread-14120] [transport.py] [_log()] starting thread (client mode): 0x19ddadd0
2025-11-12T10:28:38.509 [DEBUG] [Thread-14120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:28:38.530 [DEBUG] [Thread-14120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:28:38.531 [INFO] [Thread-14120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:28:38.533 [DEBUG] [Thread-14120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] client lang: <none>
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] server lang: <none>
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] kex follows: False
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] Compression: none
2025-11-12T10:28:38.534 [DEBUG] [Thread-14120] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:28:38.551 [DEBUG] [Thread-14120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:28:38.552 [DEBUG] [Thread-14120] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:28:38.552 [DEBUG] [Thread-14120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:28:38.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:28:38.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:28:38.554 [DEBUG] [Thread-14120] [transport.py] [_log()] userauth is OK
2025-11-12T10:28:38.554 [DEBUG] [Thread-14120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:28:38.555 [DEBUG] [Thread-14120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:28:38.555 [DEBUG] [Thread-14120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:28:38.555 [DEBUG] [Thread-14120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:28:38.574 [INFO] [Thread-14120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:28:38.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:28:39.300 [DEBUG] [Thread-14120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:28:39.300 [DEBUG] [Thread-14120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:28:39.301 [DEBUG] [Thread-14120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:28:39.341 [DEBUG] [Thread-14120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:28:39.342 [DEBUG] [Thread-14120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:28:39.345 [DEBUG] [Thread-14120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:28:39.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:28:39.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:28:39.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:28:39.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:28:39.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:28:39.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:28:39.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:28:39.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:28:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:28:39.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.352867 -999.00  +23.90  20.66     21   +0.80 1 1 1 1 1   888    0 24.72 74.92 ----- 19.4 20.7 309.0 26.5 31.1 -24.8 29.9 -23.9 28.6 -24.3 29.5 -23.5
2025-11-12T10:28:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:28:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:28:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.352867
2025-11-12T10:28:39.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:28:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:28:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:28:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:28:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:28:39.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:28:14', tmtdew=27.89, humidity=15.37, cloud=0.0, wind=20.54, temperature=24.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:28:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:28:39.372 [DEBUG] [Thread-14120] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:28:39.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:28:39.468 [DEBUG] [Thread-14123] [transport.py] [_log()] starting thread (client mode): 0x17398ac0
2025-11-12T10:28:39.468 [DEBUG] [Thread-14123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:28:39.483 [DEBUG] [Thread-14123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:28:39.484 [INFO] [Thread-14123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:28:39.491 [DEBUG] [Thread-14123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:28:39.491 [DEBUG] [Thread-14123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:28:39.491 [DEBUG] [Thread-14123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:28:39.491 [DEBUG] [Thread-14123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:28:39.491 [DEBUG] [Thread-14123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:28:39.491 [DEBUG] [Thread-14123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:28:39.491 [DEBUG] [Thread-14123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] client lang: <none>
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] server lang: <none>
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] kex follows: False
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] Compression: none
2025-11-12T10:28:39.492 [DEBUG] [Thread-14123] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:28:39.550 [DEBUG] [Thread-14123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:28:39.551 [DEBUG] [Thread-14123] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:28:39.551 [DEBUG] [Thread-14123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:28:39.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:28:39.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:28:39.607 [DEBUG] [Thread-14123] [transport.py] [_log()] userauth is OK
2025-11-12T10:28:39.607 [DEBUG] [Thread-14123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:28:39.607 [DEBUG] [Thread-14123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:28:39.607 [DEBUG] [Thread-14123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:28:39.607 [DEBUG] [Thread-14123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:28:39.626 [INFO] [Thread-14123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:28:39.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:28:39.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:28:40.479 [DEBUG] [Thread-14123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:28:40.479 [DEBUG] [Thread-14123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:28:40.526 [DEBUG] [Thread-14123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:28:40.526 [DEBUG] [Thread-14123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:28:40.535 [DEBUG] [Thread-14123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:28:40.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:28:40.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-11-12T10:28:40.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-11-12T10:28:40.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:28:40.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:28:40.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:28:40.571 [DEBUG] [Thread-14123] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:28:44.268 [DEBUG] [Thread-14125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:28:53.705 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:28:53.706 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:28:59.319 [DEBUG] [Thread-14126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:29:10.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:29:10.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:29:10.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-11-12T10:29:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 28, 46), 27.41, 15.88, 0.0, 22.32, 24.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:29:11.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:28:46
2025-11-12T10:29:11.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:29:11.513 [DEBUG] [Thread-14127] [transport.py] [_log()] starting thread (client mode): 0x17362fb0
2025-11-12T10:29:11.513 [DEBUG] [Thread-14127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:29:11.532 [DEBUG] [Thread-14127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:29:11.532 [INFO] [Thread-14127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:29:11.533 [DEBUG] [Thread-14127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:29:11.533 [DEBUG] [Thread-14127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:29:11.533 [DEBUG] [Thread-14127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] client lang: <none>
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] server lang: <none>
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] kex follows: False
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] Compression: none
2025-11-12T10:29:11.534 [DEBUG] [Thread-14127] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:29:11.547 [DEBUG] [Thread-14127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:29:11.547 [DEBUG] [Thread-14127] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:29:11.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:29:11.549 [DEBUG] [Thread-14127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:29:11.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:29:11.551 [DEBUG] [Thread-14127] [transport.py] [_log()] userauth is OK
2025-11-12T10:29:11.551 [DEBUG] [Thread-14127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:29:11.551 [DEBUG] [Thread-14127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:29:11.551 [DEBUG] [Thread-14127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:29:11.551 [DEBUG] [Thread-14127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:29:11.570 [INFO] [Thread-14127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:29:11.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:29:12.197 [DEBUG] [Thread-14127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:29:12.198 [DEBUG] [Thread-14127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:29:12.198 [DEBUG] [Thread-14127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:29:12.239 [DEBUG] [Thread-14127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:29:12.239 [DEBUG] [Thread-14127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:29:12.242 [DEBUG] [Thread-14127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:29:12.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:29:12.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:29:12.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:29:12.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:29:12.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:29:12.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:29:12.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:29:12.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:29:12.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:29:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.353215 -999.00  +24.30  16.16     22   +1.60 1 1 1 1 1   888    0 24.67 75.11 ----- 15.9 16.2 276.8 27.5 31.1 -25.4 30.1 -23.6 28.7 -22.6 29.6 -23.6
2025-11-12T10:29:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:29:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:29:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.353215
2025-11-12T10:29:12.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:29:12.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:29:12.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:29:12.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:29:12.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:29:12.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:28:46', tmtdew=27.41, humidity=15.88, cloud=0.0, wind=22.32, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:28:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:29:12.269 [DEBUG] [Thread-14127] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:29:12.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:29:12.364 [DEBUG] [Thread-14130] [transport.py] [_log()] starting thread (client mode): 0x17363280
2025-11-12T10:29:12.364 [DEBUG] [Thread-14130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:29:12.378 [DEBUG] [Thread-14130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:29:12.379 [INFO] [Thread-14130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] client lang: <none>
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] server lang: <none>
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] kex follows: False
2025-11-12T10:29:12.386 [DEBUG] [Thread-14130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:29:12.387 [DEBUG] [Thread-14130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:29:12.387 [DEBUG] [Thread-14130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:29:12.387 [DEBUG] [Thread-14130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:29:12.387 [DEBUG] [Thread-14130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:29:12.387 [DEBUG] [Thread-14130] [transport.py] [_log()] Compression: none
2025-11-12T10:29:12.387 [DEBUG] [Thread-14130] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:29:12.446 [DEBUG] [Thread-14130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:29:12.447 [DEBUG] [Thread-14130] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:29:12.448 [DEBUG] [Thread-14130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:29:12.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:29:12.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:29:12.503 [DEBUG] [Thread-14130] [transport.py] [_log()] userauth is OK
2025-11-12T10:29:12.503 [DEBUG] [Thread-14130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:29:12.503 [DEBUG] [Thread-14130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:29:12.503 [DEBUG] [Thread-14130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:29:12.504 [DEBUG] [Thread-14130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:29:12.523 [INFO] [Thread-14130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:29:12.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:29:12.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:29:13.360 [DEBUG] [Thread-14130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:29:13.360 [DEBUG] [Thread-14130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:29:13.411 [DEBUG] [Thread-14130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:29:13.411 [DEBUG] [Thread-14130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:29:13.423 [DEBUG] [Thread-14130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:29:13.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:29:13.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-11-12T10:29:13.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-11-12T10:29:13.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:29:13.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:29:13.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:29:13.460 [DEBUG] [Thread-14130] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:29:14.356 [DEBUG] [Thread-14132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:29:27.563 [DEBUG] [Thread-14133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:29:29.407 [DEBUG] [Thread-14134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:29:43.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:29:43.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:29:43.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:29:44.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 29, 18), 27.45, 15.85, 0.0, 20.73, 24.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:29:44.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:29:18
2025-11-12T10:29:44.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:29:44.425 [DEBUG] [Thread-14135] [transport.py] [_log()] starting thread (client mode): 0x17346500
2025-11-12T10:29:44.426 [DEBUG] [Thread-14135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:29:44.435 [DEBUG] [Thread-14135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:29:44.435 [INFO] [Thread-14135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:29:44.437 [DEBUG] [Thread-14135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:29:44.437 [DEBUG] [Thread-14135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:29:44.437 [DEBUG] [Thread-14135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:29:44.437 [DEBUG] [Thread-14135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:29:44.437 [DEBUG] [Thread-14135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:29:44.437 [DEBUG] [Thread-14135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] client lang: <none>
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] server lang: <none>
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] kex follows: False
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] Compression: none
2025-11-12T10:29:44.438 [DEBUG] [Thread-14135] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:29:44.445 [DEBUG] [Thread-14137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:29:44.448 [DEBUG] [Thread-14135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:29:44.449 [DEBUG] [Thread-14135] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:29:44.449 [DEBUG] [Thread-14135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:29:44.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:29:44.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:29:44.450 [DEBUG] [Thread-14135] [transport.py] [_log()] userauth is OK
2025-11-12T10:29:44.450 [DEBUG] [Thread-14135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:29:44.451 [DEBUG] [Thread-14135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:29:44.451 [DEBUG] [Thread-14135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:29:44.451 [DEBUG] [Thread-14135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:29:44.471 [INFO] [Thread-14135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:29:44.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:29:45.101 [DEBUG] [Thread-14135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:29:45.102 [DEBUG] [Thread-14135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:29:45.102 [DEBUG] [Thread-14135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:29:45.142 [DEBUG] [Thread-14135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:29:45.142 [DEBUG] [Thread-14135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:29:45.145 [DEBUG] [Thread-14135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:29:45.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:29:45.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:29:45.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:29:45.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:29:45.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:29:45.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:29:45.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:29:45.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:29:45.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:29:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.353562 -999.00  +24.60  25.56     21   +1.30 1 1 1 1 1   888    0 24.92 71.53 ----- 27.1 25.6 276.8 30.6 30.9 -28.3 30.2 -25.4 28.7 -26.1 -999.0 -999.0
2025-11-12T10:29:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:29:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:29:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.353562
2025-11-12T10:29:45.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:29:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:29:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:29:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:29:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:29:45.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:29:18', tmtdew=27.45, humidity=15.85, cloud=0.0, wind=20.73, temperature=24.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:29:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:29:45.162 [DEBUG] [Thread-14135] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:29: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-11-12T10:29:45.258 [DEBUG] [Thread-14139] [transport.py] [_log()] starting thread (client mode): 0x149216c0
2025-11-12T10:29:45.259 [DEBUG] [Thread-14139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:29:45.273 [DEBUG] [Thread-14139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:29:45.273 [INFO] [Thread-14139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:29:45.280 [DEBUG] [Thread-14139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:29:45.280 [DEBUG] [Thread-14139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] client lang: <none>
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] server lang: <none>
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] kex follows: False
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] Compression: none
2025-11-12T10:29:45.281 [DEBUG] [Thread-14139] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:29:45.339 [DEBUG] [Thread-14139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:29:45.339 [DEBUG] [Thread-14139] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:29:45.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:29:45.341 [DEBUG] [Thread-14139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:29:45.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:29:45.395 [DEBUG] [Thread-14139] [transport.py] [_log()] userauth is OK
2025-11-12T10:29:45.395 [DEBUG] [Thread-14139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:29:45.395 [DEBUG] [Thread-14139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:29:45.395 [DEBUG] [Thread-14139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:29:45.395 [DEBUG] [Thread-14139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:29:45.414 [INFO] [Thread-14139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:29:45.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:29:45.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:29:46.261 [DEBUG] [Thread-14139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:29:46.261 [DEBUG] [Thread-14139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:29:46.310 [DEBUG] [Thread-14139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:29:46.310 [DEBUG] [Thread-14139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:29:46.319 [DEBUG] [Thread-14139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:29:46.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:29:46.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-11-12T10:29:46.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-11-12T10:29:46.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:29:46.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:29:46.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:29:46.353 [DEBUG] [Thread-14139] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:29:53.847 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:29:53.848 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:29:59.479 [DEBUG] [Thread-14141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:30:14.528 [DEBUG] [Thread-14142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:30:16.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:30:16.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:30:16.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-11-12T10:30:17.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 29, 50), 27.25, 16.53, 0.0, 24.28, 24.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:30:17.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:29:50
2025-11-12T10:30:17.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:30:17.311 [DEBUG] [Thread-14143] [transport.py] [_log()] starting thread (client mode): 0x19dd93c0
2025-11-12T10:30:17.311 [DEBUG] [Thread-14143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:30:17.332 [DEBUG] [Thread-14143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:30:17.332 [INFO] [Thread-14143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] client lang: <none>
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] server lang: <none>
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] kex follows: False
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:30:17.336 [DEBUG] [Thread-14143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:30:17.337 [DEBUG] [Thread-14143] [transport.py] [_log()] Compression: none
2025-11-12T10:30:17.337 [DEBUG] [Thread-14143] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:30:17.354 [DEBUG] [Thread-14143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:30:17.355 [DEBUG] [Thread-14143] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:30:17.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:30:17.355 [DEBUG] [Thread-14143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:30:17.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:30:17.357 [DEBUG] [Thread-14143] [transport.py] [_log()] userauth is OK
2025-11-12T10:30:17.358 [DEBUG] [Thread-14143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:30:17.358 [DEBUG] [Thread-14143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:30:17.358 [DEBUG] [Thread-14143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:30:17.358 [DEBUG] [Thread-14143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:30:17.392 [INFO] [Thread-14143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:30:17.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:30:18.061 [DEBUG] [Thread-14143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:30:18.061 [DEBUG] [Thread-14143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:30:18.062 [DEBUG] [Thread-14143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:30:18.102 [DEBUG] [Thread-14143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:30:18.102 [DEBUG] [Thread-14143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:30:18.105 [DEBUG] [Thread-14143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:30:18.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:30:18.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:30:18.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:30:18.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:30:18.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:30:18.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:30:18.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:30:18.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:30:18.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:30:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.353909 -999.00  +24.10  19.11     23   +1.90 1 1 1 1 1   888    0 24.51 71.31 ----- 18.9 19.1 265.2 31.2 31.0 -26.3 30.0 -24.8 28.1 -24.9 29.5 -25.7
2025-11-12T10:30:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:30:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:30:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.353909
2025-11-12T10:30:18.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:30:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:30:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:30:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:30:18.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:30:18.133 [DEBUG] [Thread-14143] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:30:18.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:29:50', tmtdew=27.25, humidity=16.53, cloud=0.0, wind=24.28, temperature=24.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:29:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:30:18.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:30:18.234 [DEBUG] [Thread-14146] [transport.py] [_log()] starting thread (client mode): 0x1737db10
2025-11-12T10:30:18.234 [DEBUG] [Thread-14146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:30:18.248 [DEBUG] [Thread-14146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:30:18.249 [INFO] [Thread-14146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:30:18.257 [DEBUG] [Thread-14146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] client lang: <none>
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] server lang: <none>
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] kex follows: False
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:30:18.258 [DEBUG] [Thread-14146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:30:18.259 [DEBUG] [Thread-14146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:30:18.259 [DEBUG] [Thread-14146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:30:18.259 [DEBUG] [Thread-14146] [transport.py] [_log()] Compression: none
2025-11-12T10:30:18.259 [DEBUG] [Thread-14146] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:30:18.316 [DEBUG] [Thread-14146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:30:18.317 [DEBUG] [Thread-14146] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:30:18.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:30:18.318 [DEBUG] [Thread-14146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:30:18.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:30:18.377 [DEBUG] [Thread-14146] [transport.py] [_log()] userauth is OK
2025-11-12T10:30:18.377 [DEBUG] [Thread-14146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:30:18.378 [DEBUG] [Thread-14146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:30:18.378 [DEBUG] [Thread-14146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:30:18.378 [DEBUG] [Thread-14146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:30:18.399 [INFO] [Thread-14146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:30:18.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:30:18.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:30:19.275 [DEBUG] [Thread-14146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:30:19.275 [DEBUG] [Thread-14146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:30:19.323 [DEBUG] [Thread-14146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:30:19.323 [DEBUG] [Thread-14146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:30:19.333 [DEBUG] [Thread-14146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:30:19.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:30:19.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-11-12T10:30:19.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-11-12T10:30:19.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:30:19.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:30:19.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:30:19.373 [DEBUG] [Thread-14146] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:30:27.597 [DEBUG] [Thread-14148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:30:29.563 [DEBUG] [Thread-14149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:30:44.616 [DEBUG] [Thread-14150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:30:49.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:30:49.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:30:49.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-11-12T10:30:50.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 30, 22), 27.1, 16.75, 0.0, 24.21, 24.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:30:50.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:30:22
2025-11-12T10:30:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:30:50.325 [DEBUG] [Thread-14151] [transport.py] [_log()] starting thread (client mode): 0x14920880
2025-11-12T10:30:50.325 [DEBUG] [Thread-14151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:30:50.347 [DEBUG] [Thread-14151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:30:50.347 [INFO] [Thread-14151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:30:50.351 [DEBUG] [Thread-14151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:30:50.351 [DEBUG] [Thread-14151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:30:50.351 [DEBUG] [Thread-14151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:30:50.351 [DEBUG] [Thread-14151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:30:50.351 [DEBUG] [Thread-14151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:30:50.351 [DEBUG] [Thread-14151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:30:50.351 [DEBUG] [Thread-14151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] client lang: <none>
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] server lang: <none>
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] kex follows: False
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] Compression: none
2025-11-12T10:30:50.352 [DEBUG] [Thread-14151] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:30:50.371 [DEBUG] [Thread-14151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:30:50.372 [DEBUG] [Thread-14151] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:30:50.373 [DEBUG] [Thread-14151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:30:50.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:30:50.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:30:50.375 [DEBUG] [Thread-14151] [transport.py] [_log()] userauth is OK
2025-11-12T10:30:50.375 [DEBUG] [Thread-14151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:30:50.375 [DEBUG] [Thread-14151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:30:50.375 [DEBUG] [Thread-14151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:30:50.375 [DEBUG] [Thread-14151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:30:50.400 [INFO] [Thread-14151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:30:50.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:30:51.200 [DEBUG] [Thread-14151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:30:51.201 [DEBUG] [Thread-14151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:30:51.201 [DEBUG] [Thread-14151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:30:51.242 [DEBUG] [Thread-14151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:30:51.242 [DEBUG] [Thread-14151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:30:51.245 [DEBUG] [Thread-14151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:30:51.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:30:51.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:30:51.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:30:51.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:30:51.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:30:51.267 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:30:51.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:30:51.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:30:51.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:30:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.354256 -999.00  +24.40  24.34     23   +2.00 1 1 1 1 1   888    0 24.34 68.45 ----- 18.7 24.3 272.4 28.9 30.9 -28.0 30.2 -24.7 28.6 -23.8 29.4 -25.8
2025-11-12T10:30:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:30:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:30:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.354256
2025-11-12T10:30:51.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:30:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:30:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:30:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:30:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:30:51.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:30:22', tmtdew=27.1, humidity=16.75, cloud=0.0, wind=24.21, temperature=24.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:30:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:30:51.270 [DEBUG] [Thread-14151] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:30:51.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:30:51.361 [DEBUG] [Thread-14154] [transport.py] [_log()] starting thread (client mode): 0x17399fc0
2025-11-12T10:30:51.361 [DEBUG] [Thread-14154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:30:51.375 [DEBUG] [Thread-14154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:30:51.376 [INFO] [Thread-14154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:30:51.383 [DEBUG] [Thread-14154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:30:51.383 [DEBUG] [Thread-14154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] client lang: <none>
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] server lang: <none>
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] kex follows: False
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:30:51.384 [DEBUG] [Thread-14154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:30:51.385 [DEBUG] [Thread-14154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:30:51.385 [DEBUG] [Thread-14154] [transport.py] [_log()] Compression: none
2025-11-12T10:30:51.385 [DEBUG] [Thread-14154] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:30:51.446 [DEBUG] [Thread-14154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:30:51.446 [DEBUG] [Thread-14154] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:30:51.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:30:51.447 [DEBUG] [Thread-14154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:30:51.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:30:51.503 [DEBUG] [Thread-14154] [transport.py] [_log()] userauth is OK
2025-11-12T10:30:51.503 [DEBUG] [Thread-14154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:30:51.503 [DEBUG] [Thread-14154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:30:51.503 [DEBUG] [Thread-14154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:30:51.503 [DEBUG] [Thread-14154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:30:51.523 [INFO] [Thread-14154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:30:51.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:30:51.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:30:52.380 [DEBUG] [Thread-14154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:30:52.381 [DEBUG] [Thread-14154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:30:52.432 [DEBUG] [Thread-14154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:30:52.432 [DEBUG] [Thread-14154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:30:52.442 [DEBUG] [Thread-14154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:30:52.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:30:52.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-11-12T10:30:52.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-11-12T10:30:52.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:30:52.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:30:52.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:30:52.479 [DEBUG] [Thread-14154] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:30:53.990 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:30:53.991 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:30:59.647 [DEBUG] [Thread-14156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:31:14.702 [DEBUG] [Thread-14157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:31:22.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:31:22.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:31:22.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-11-12T10:31:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 30, 54), 26.74, 16.93, 0.0, 23.59, 24.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:31:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:30:54
2025-11-12T10:31:23.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:31:23.447 [DEBUG] [Thread-14158] [transport.py] [_log()] starting thread (client mode): 0x17362e30
2025-11-12T10:31:23.447 [DEBUG] [Thread-14158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:31:23.466 [DEBUG] [Thread-14158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:31:23.466 [INFO] [Thread-14158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] client lang: <none>
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] server lang: <none>
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] kex follows: False
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:31:23.467 [DEBUG] [Thread-14158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:31:23.468 [DEBUG] [Thread-14158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:31:23.468 [DEBUG] [Thread-14158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:31:23.468 [DEBUG] [Thread-14158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:31:23.468 [DEBUG] [Thread-14158] [transport.py] [_log()] Compression: none
2025-11-12T10:31:23.468 [DEBUG] [Thread-14158] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:31:23.475 [DEBUG] [Thread-14158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:31:23.475 [DEBUG] [Thread-14158] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:31:23.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:31:23.476 [DEBUG] [Thread-14158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:31:23.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:31:23.476 [DEBUG] [Thread-14158] [transport.py] [_log()] userauth is OK
2025-11-12T10:31:23.476 [DEBUG] [Thread-14158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:31:23.476 [DEBUG] [Thread-14158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:31:23.476 [DEBUG] [Thread-14158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:31:23.476 [DEBUG] [Thread-14158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:31:23.485 [INFO] [Thread-14158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:31:23.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:31:24.095 [DEBUG] [Thread-14158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:31:24.095 [DEBUG] [Thread-14158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:31:24.095 [DEBUG] [Thread-14158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:31:24.139 [DEBUG] [Thread-14158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:31:24.139 [DEBUG] [Thread-14158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:31:24.141 [DEBUG] [Thread-14158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:31:24.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:31:24.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:31:24.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:31:24.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:31:24.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:31:24.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:31:24.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:31:24.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.354603 -999.00  +24.20  22.28     22   +1.60 1 1 1 1 1   888    0 24.36 61.69 ----- 22.9 22.3 278.4 34.6 30.9 -27.6 30.2 -24.9 28.6 -23.1 29.4 -26.1
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.354603
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:31:24.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:30:54', tmtdew=26.74, humidity=16.93, cloud=0.0, wind=23.59, temperature=24.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:30:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:31:24.161 [DEBUG] [Thread-14158] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:31:24.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:31:24.247 [DEBUG] [Thread-14161] [transport.py] [_log()] starting thread (client mode): 0x173ebb20
2025-11-12T10:31:24.247 [DEBUG] [Thread-14161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:31:24.264 [DEBUG] [Thread-14161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:31:24.264 [INFO] [Thread-14161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:31:24.271 [DEBUG] [Thread-14161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] client lang: <none>
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] server lang: <none>
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] kex follows: False
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] Compression: none
2025-11-12T10:31:24.272 [DEBUG] [Thread-14161] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:31:24.330 [DEBUG] [Thread-14161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:31:24.330 [DEBUG] [Thread-14161] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:31:24.330 [DEBUG] [Thread-14161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:31:24.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:31:24.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:31:24.387 [DEBUG] [Thread-14161] [transport.py] [_log()] userauth is OK
2025-11-12T10:31:24.387 [DEBUG] [Thread-14161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:31:24.387 [DEBUG] [Thread-14161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:31:24.387 [DEBUG] [Thread-14161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:31:24.387 [DEBUG] [Thread-14161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:31:24.402 [INFO] [Thread-14161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:31:24.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:31:24.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:31:25.271 [DEBUG] [Thread-14161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:31:25.271 [DEBUG] [Thread-14161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:31:25.319 [DEBUG] [Thread-14161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:31:25.319 [DEBUG] [Thread-14161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:31:25.327 [DEBUG] [Thread-14161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:31:25.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:31:25.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-11-12T10:31:25.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:31:25.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:31:25.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:31:25.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:31:25.359 [DEBUG] [Thread-14161] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:31:27.625 [DEBUG] [Thread-14163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:31:29.735 [DEBUG] [Thread-14164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:31:44.787 [DEBUG] [Thread-14165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:31:54.132 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:31:54.133 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:31:55.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:31:55.382 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:31: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-11-12T10:31:56.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 31, 26), 27.15, 16.47, 0.0, 21.07, 24.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:31:56.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:31:26
2025-11-12T10:31:56.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:31:56.322 [DEBUG] [Thread-14166] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T10:31:56.322 [DEBUG] [Thread-14166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:31:56.342 [DEBUG] [Thread-14166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:31:56.342 [INFO] [Thread-14166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] client lang: <none>
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] server lang: <none>
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] kex follows: False
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] Compression: none
2025-11-12T10:31:56.346 [DEBUG] [Thread-14166] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:31:56.365 [DEBUG] [Thread-14166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:31:56.365 [DEBUG] [Thread-14166] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:31:56.366 [DEBUG] [Thread-14166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:31:56.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:31:56.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:31:56.368 [DEBUG] [Thread-14166] [transport.py] [_log()] userauth is OK
2025-11-12T10:31:56.368 [DEBUG] [Thread-14166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:31:56.368 [DEBUG] [Thread-14166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:31:56.368 [DEBUG] [Thread-14166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:31:56.368 [DEBUG] [Thread-14166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:31:56.392 [INFO] [Thread-14166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:31:56.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:31:57.204 [DEBUG] [Thread-14166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:31:57.205 [DEBUG] [Thread-14166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:31:57.205 [DEBUG] [Thread-14166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:31:57.246 [DEBUG] [Thread-14166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:31:57.247 [DEBUG] [Thread-14166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:31:57.250 [DEBUG] [Thread-14166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:31:57.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:31:57.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:31:57.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:31:57.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:31:57.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:31:57.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:31:57.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:31:57.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:31:57.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:31:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.354951 -999.00  +24.10  18.32     22   +1.60 1 1 1 1 1   888    0 24.39 53.20 ----- 11.6 18.3 265.8 28.2 31.1 -26.8 30.2 -24.5 28.6 -23.7 29.4 -25.0
2025-11-12T10:31:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:31:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:31:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.354951
2025-11-12T10:31:57.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:31:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:31:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:31:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:31:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:31:57.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:31:26', tmtdew=27.15, humidity=16.47, cloud=0.0, wind=21.07, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:31:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:31:57.275 [DEBUG] [Thread-14166] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:31:57.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:31:57.375 [DEBUG] [Thread-14169] [transport.py] [_log()] starting thread (client mode): 0x173623b0
2025-11-12T10:31:57.376 [DEBUG] [Thread-14169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:31:57.391 [DEBUG] [Thread-14169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:31:57.391 [INFO] [Thread-14169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:31:57.398 [DEBUG] [Thread-14169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:31:57.399 [DEBUG] [Thread-14169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:31:57.399 [DEBUG] [Thread-14169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:31:57.399 [DEBUG] [Thread-14169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:31:57.399 [DEBUG] [Thread-14169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:31:57.399 [DEBUG] [Thread-14169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:31:57.399 [DEBUG] [Thread-14169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:31:57.400 [DEBUG] [Thread-14169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:31:57.400 [DEBUG] [Thread-14169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:31:57.400 [DEBUG] [Thread-14169] [transport.py] [_log()] client lang: <none>
2025-11-12T10:31:57.400 [DEBUG] [Thread-14169] [transport.py] [_log()] server lang: <none>
2025-11-12T10:31:57.400 [DEBUG] [Thread-14169] [transport.py] [_log()] kex follows: False
2025-11-12T10:31:57.400 [DEBUG] [Thread-14169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:31:57.400 [DEBUG] [Thread-14169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:31:57.401 [DEBUG] [Thread-14169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:31:57.401 [DEBUG] [Thread-14169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:31:57.401 [DEBUG] [Thread-14169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:31:57.401 [DEBUG] [Thread-14169] [transport.py] [_log()] Compression: none
2025-11-12T10:31:57.401 [DEBUG] [Thread-14169] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:31:57.460 [DEBUG] [Thread-14169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:31:57.461 [DEBUG] [Thread-14169] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:31:57.462 [DEBUG] [Thread-14169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:31:57.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:31:57.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:31:57.519 [DEBUG] [Thread-14169] [transport.py] [_log()] userauth is OK
2025-11-12T10:31:57.520 [DEBUG] [Thread-14169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:31:57.520 [DEBUG] [Thread-14169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:31:57.520 [DEBUG] [Thread-14169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:31:57.520 [DEBUG] [Thread-14169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:31:57.541 [INFO] [Thread-14169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:31:57.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:31:57.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:31:58.418 [DEBUG] [Thread-14169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:31:58.419 [DEBUG] [Thread-14169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:31:58.467 [DEBUG] [Thread-14169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:31:58.467 [DEBUG] [Thread-14169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:31:58.476 [DEBUG] [Thread-14169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:31:58.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:31:58.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:31:58.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-11-12T10:31:58.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:31:58.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:31:58.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:31:58.517 [DEBUG] [Thread-14169] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:31:59.821 [DEBUG] [Thread-14171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:32:14.860 [DEBUG] [Thread-14172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:32:27.659 [DEBUG] [Thread-14173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:32:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:32:28.538 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:32:28.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-11-12T10:32:29.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 31, 58), 27.53, 16.05, 0.0, 19.04, 24.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:32:29.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:31:58
2025-11-12T10:32:29.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:32:29.462 [DEBUG] [Thread-14174] [transport.py] [_log()] starting thread (client mode): 0x17361720
2025-11-12T10:32:29.463 [DEBUG] [Thread-14174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:32:29.482 [DEBUG] [Thread-14174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:32:29.482 [INFO] [Thread-14174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] client lang: <none>
2025-11-12T10:32:29.485 [DEBUG] [Thread-14174] [transport.py] [_log()] server lang: <none>
2025-11-12T10:32:29.486 [DEBUG] [Thread-14174] [transport.py] [_log()] kex follows: False
2025-11-12T10:32:29.486 [DEBUG] [Thread-14174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:32:29.486 [DEBUG] [Thread-14174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:32:29.486 [DEBUG] [Thread-14174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:32:29.486 [DEBUG] [Thread-14174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:32:29.486 [DEBUG] [Thread-14174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:32:29.486 [DEBUG] [Thread-14174] [transport.py] [_log()] Compression: none
2025-11-12T10:32:29.486 [DEBUG] [Thread-14174] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:32:29.504 [DEBUG] [Thread-14174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:32:29.505 [DEBUG] [Thread-14174] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:32:29.505 [DEBUG] [Thread-14174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:32:29.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:32:29.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:32:29.507 [DEBUG] [Thread-14174] [transport.py] [_log()] userauth is OK
2025-11-12T10:32:29.508 [DEBUG] [Thread-14174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:32:29.508 [DEBUG] [Thread-14174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:32:29.508 [DEBUG] [Thread-14174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:32:29.508 [DEBUG] [Thread-14174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:32:29.534 [INFO] [Thread-14174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:32:29.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:32:29.897 [DEBUG] [Thread-14176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:32:30.087 [DEBUG] [Thread-14174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:32:30.087 [DEBUG] [Thread-14174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:32:30.088 [DEBUG] [Thread-14174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:32:30.129 [DEBUG] [Thread-14174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:32:30.129 [DEBUG] [Thread-14174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:32:30.133 [DEBUG] [Thread-14174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:32:30.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:32:30.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:32:30.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:32:30.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:32:30.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:32:30.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:32:30.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:32:30.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:32:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:32:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.355645 -999.00  +23.90  19.71     23   +1.60 1 1 1 1 1   888    0 23.57 36.55 ----- 18.6 19.7 255.2 30.1 31.0 -26.9 30.2 -25.6 28.7 -24.1 29.3 -25.5
2025-11-12T10:32:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:32:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:32:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.355645
2025-11-12T10:32:30.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:32:30.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:32:30.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:32:30.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:32:30.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:32:30.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:31:58', tmtdew=27.53, humidity=16.05, cloud=0.0, wind=19.04, temperature=24.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:32:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:32:30.161 [DEBUG] [Thread-14174] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:32:30.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:32:30.254 [DEBUG] [Thread-14178] [transport.py] [_log()] starting thread (client mode): 0x1737d2d0
2025-11-12T10:32:30.254 [DEBUG] [Thread-14178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:32:30.268 [DEBUG] [Thread-14178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:32:30.268 [INFO] [Thread-14178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] client lang: <none>
2025-11-12T10:32:30.276 [DEBUG] [Thread-14178] [transport.py] [_log()] server lang: <none>
2025-11-12T10:32:30.285 [DEBUG] [Thread-14178] [transport.py] [_log()] kex follows: False
2025-11-12T10:32:30.285 [DEBUG] [Thread-14178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:32:30.285 [DEBUG] [Thread-14178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:32:30.285 [DEBUG] [Thread-14178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:32:30.285 [DEBUG] [Thread-14178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:32:30.286 [DEBUG] [Thread-14178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:32:30.286 [DEBUG] [Thread-14178] [transport.py] [_log()] Compression: none
2025-11-12T10:32:30.286 [DEBUG] [Thread-14178] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:32:30.340 [DEBUG] [Thread-14178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:32:30.341 [DEBUG] [Thread-14178] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:32:30.341 [DEBUG] [Thread-14178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:32:30.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:32:30.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:32:30.399 [DEBUG] [Thread-14178] [transport.py] [_log()] userauth is OK
2025-11-12T10:32:30.400 [DEBUG] [Thread-14178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:32:30.400 [DEBUG] [Thread-14178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:32:30.400 [DEBUG] [Thread-14178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:32:30.400 [DEBUG] [Thread-14178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:32:30.418 [INFO] [Thread-14178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:32:30.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:32:30.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:32:31.297 [DEBUG] [Thread-14178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:32:31.297 [DEBUG] [Thread-14178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:32:31.345 [DEBUG] [Thread-14178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:32:31.345 [DEBUG] [Thread-14178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:32:31.353 [DEBUG] [Thread-14178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:32:31.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:32:31.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-11-12T10:32:31.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:32:31.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:32:31.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:32:31.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:32:31.384 [DEBUG] [Thread-14178] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:32:44.931 [DEBUG] [Thread-14180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:32:54.275 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:32:54.276 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:32:59.980 [DEBUG] [Thread-14181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:33:01.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:33:01.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:33:01.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-11-12T10:33:02.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 32, 30), 27.23, 16.42, 0.0, 21.05, 24.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:33:02.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:32:30
2025-11-12T10:33:02.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:33:02.310 [DEBUG] [Thread-14182] [transport.py] [_log()] starting thread (client mode): 0x1737c1c0
2025-11-12T10:33:02.310 [DEBUG] [Thread-14182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:33:02.331 [DEBUG] [Thread-14182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:33:02.331 [INFO] [Thread-14182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:33:02.332 [DEBUG] [Thread-14182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:33:02.332 [DEBUG] [Thread-14182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:33:02.332 [DEBUG] [Thread-14182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:33:02.332 [DEBUG] [Thread-14182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:33:02.332 [DEBUG] [Thread-14182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:33:02.332 [DEBUG] [Thread-14182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:33:02.332 [DEBUG] [Thread-14182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:33:02.332 [DEBUG] [Thread-14182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] client lang: <none>
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] server lang: <none>
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] kex follows: False
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] Compression: none
2025-11-12T10:33:02.333 [DEBUG] [Thread-14182] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:33:02.343 [DEBUG] [Thread-14182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:33:02.343 [DEBUG] [Thread-14182] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:33:02.344 [DEBUG] [Thread-14182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:33:02.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:33:02.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:33:02.346 [DEBUG] [Thread-14182] [transport.py] [_log()] userauth is OK
2025-11-12T10:33:02.346 [DEBUG] [Thread-14182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:33:02.346 [DEBUG] [Thread-14182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:33:02.346 [DEBUG] [Thread-14182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:33:02.346 [DEBUG] [Thread-14182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:33:02.371 [INFO] [Thread-14182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:33:02.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:33:03.204 [DEBUG] [Thread-14182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:33:03.204 [DEBUG] [Thread-14182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:33:03.204 [DEBUG] [Thread-14182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:33:03.245 [DEBUG] [Thread-14182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:33:03.245 [DEBUG] [Thread-14182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:33:03.247 [DEBUG] [Thread-14182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:33:03.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:33:03.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:33:03.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:33:03.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:33:03.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:33:03.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:33:03.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.355993 -999.00  +23.60  21.69     23   +1.60 1 1 1 1 1   888    0 23.56 28.31 ----- 19.4 21.7 251.8 26.1 31.0 -27.5 30.2 -24.6 28.7 -23.8 29.2 -25.7
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.355993
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:33:03.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:32:30', tmtdew=27.23, humidity=16.42, cloud=0.0, wind=21.05, temperature=24.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:32:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:33:03.265 [DEBUG] [Thread-14182] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:33:03.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:33:03.349 [DEBUG] [Thread-14185] [transport.py] [_log()] starting thread (client mode): 0x173bf3a0
2025-11-12T10:33:03.349 [DEBUG] [Thread-14185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:33:03.364 [DEBUG] [Thread-14185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:33:03.364 [INFO] [Thread-14185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] client lang: <none>
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] server lang: <none>
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] kex follows: False
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] Compression: none
2025-11-12T10:33:03.372 [DEBUG] [Thread-14185] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:33:03.430 [DEBUG] [Thread-14185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:33:03.430 [DEBUG] [Thread-14185] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:33:03.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:33:03.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:33:03.431 [DEBUG] [Thread-14185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:33:03.487 [DEBUG] [Thread-14185] [transport.py] [_log()] userauth is OK
2025-11-12T10:33:03.487 [DEBUG] [Thread-14185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:33:03.487 [DEBUG] [Thread-14185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:33:03.487 [DEBUG] [Thread-14185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:33:03.487 [DEBUG] [Thread-14185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:33:03.502 [INFO] [Thread-14185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:33:03.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:33:03.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:33:04.377 [DEBUG] [Thread-14185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:33:04.377 [DEBUG] [Thread-14185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:33:04.425 [DEBUG] [Thread-14185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:33:04.425 [DEBUG] [Thread-14185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:33:04.433 [DEBUG] [Thread-14185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:33:04.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:33:04.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:33:04.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-11-12T10:33:04.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:33:04.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:33:04.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:33:04.465 [DEBUG] [Thread-14185] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:33:15.015 [DEBUG] [Thread-14187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:33:27.693 [DEBUG] [Thread-14188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:33:30.063 [DEBUG] [Thread-14189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:33:34.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:33:34.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:33:34.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-11-12T10:33:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 33, 2), 26.72, 16.91, 0.0, 19.25, 24.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:33:35.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:33:02
2025-11-12T10:33:35.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:33:35.427 [DEBUG] [Thread-14190] [transport.py] [_log()] starting thread (client mode): 0x17361de0
2025-11-12T10:33:35.428 [DEBUG] [Thread-14190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:33:35.447 [DEBUG] [Thread-14190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:33:35.447 [INFO] [Thread-14190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:33:35.450 [DEBUG] [Thread-14190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:33:35.450 [DEBUG] [Thread-14190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:33:35.450 [DEBUG] [Thread-14190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:33:35.450 [DEBUG] [Thread-14190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:33:35.450 [DEBUG] [Thread-14190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] client lang: <none>
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] server lang: <none>
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] kex follows: False
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] Compression: none
2025-11-12T10:33:35.451 [DEBUG] [Thread-14190] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:33:35.467 [DEBUG] [Thread-14190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:33:35.467 [DEBUG] [Thread-14190] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:33:35.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:33:35.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:33:35.468 [DEBUG] [Thread-14190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:33:35.468 [DEBUG] [Thread-14190] [transport.py] [_log()] userauth is OK
2025-11-12T10:33:35.469 [DEBUG] [Thread-14190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:33:35.469 [DEBUG] [Thread-14190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:33:35.469 [DEBUG] [Thread-14190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:33:35.469 [DEBUG] [Thread-14190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:33:35.480 [INFO] [Thread-14190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:33:35.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:33:36.088 [DEBUG] [Thread-14190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:33:36.088 [DEBUG] [Thread-14190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:33:36.089 [DEBUG] [Thread-14190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:33:36.129 [DEBUG] [Thread-14190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:33:36.129 [DEBUG] [Thread-14190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:33:36.131 [DEBUG] [Thread-14190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:33:36.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:33:36.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:33:36.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:33:36.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:33:36.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:33:36.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:33:36.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:33:36.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:33:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:33:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.356339 -999.00  +23.50   9.94     24   +1.70 1 1 1 1 1   888    0 23.15 22.77 ----- 11.8 9.9 264.6 22.1 31.1 -26.7 30.2 -24.6 28.7 -23.4 29.4 -25.1
2025-11-12T10:33:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:33:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:33:36.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.356339
2025-11-12T10:33:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:33:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:33:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:33:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:33:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:33:36.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:33:02', tmtdew=26.72, humidity=16.91, cloud=0.0, wind=19.25, temperature=24.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:33:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:33:36.150 [DEBUG] [Thread-14190] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:33:36.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:33:36.238 [DEBUG] [Thread-14193] [transport.py] [_log()] starting thread (client mode): 0x14921f30
2025-11-12T10:33:36.238 [DEBUG] [Thread-14193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:33:36.252 [DEBUG] [Thread-14193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:33:36.252 [INFO] [Thread-14193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] client lang: <none>
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] server lang: <none>
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] kex follows: False
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] Compression: none
2025-11-12T10:33:36.260 [DEBUG] [Thread-14193] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:33:36.317 [DEBUG] [Thread-14193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:33:36.318 [DEBUG] [Thread-14193] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:33:36.318 [DEBUG] [Thread-14193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:33:36.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:33:36.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:33:36.375 [DEBUG] [Thread-14193] [transport.py] [_log()] userauth is OK
2025-11-12T10:33:36.375 [DEBUG] [Thread-14193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:33:36.375 [DEBUG] [Thread-14193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:33:36.375 [DEBUG] [Thread-14193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:33:36.375 [DEBUG] [Thread-14193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:33:36.392 [INFO] [Thread-14193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:33:36.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:33:36.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:33:37.269 [DEBUG] [Thread-14193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:33:37.270 [DEBUG] [Thread-14193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:33:37.317 [DEBUG] [Thread-14193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:33:37.317 [DEBUG] [Thread-14193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:33:37.326 [DEBUG] [Thread-14193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:33:37.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:33:37.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-11-12T10:33:37.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-11-12T10:33:37.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:33:37.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:33:37.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:33:37.360 [DEBUG] [Thread-14193] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:33:45.095 [DEBUG] [Thread-14195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:33:54.418 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:33:54.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:34:00.143 [DEBUG] [Thread-14196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:34:07.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:34:07.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:34:07.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-11-12T10:34:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 33, 34), 26.27, 17.6, 0.0, 15.21, 24.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:34:08.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:33:34
2025-11-12T10:34:08.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:34:08.358 [DEBUG] [Thread-14197] [transport.py] [_log()] starting thread (client mode): 0x1737f460
2025-11-12T10:34:08.358 [DEBUG] [Thread-14197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:34:08.374 [DEBUG] [Thread-14197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:34:08.374 [INFO] [Thread-14197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:34:08.377 [DEBUG] [Thread-14197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:34:08.377 [DEBUG] [Thread-14197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:34:08.377 [DEBUG] [Thread-14197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:34:08.377 [DEBUG] [Thread-14197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:34:08.377 [DEBUG] [Thread-14197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:34:08.377 [DEBUG] [Thread-14197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:34:08.377 [DEBUG] [Thread-14197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:34:08.377 [DEBUG] [Thread-14197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] client lang: <none>
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] server lang: <none>
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] kex follows: False
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] Compression: none
2025-11-12T10:34:08.378 [DEBUG] [Thread-14197] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:34:08.393 [DEBUG] [Thread-14197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:34:08.393 [DEBUG] [Thread-14197] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:34:08.394 [DEBUG] [Thread-14197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:34:08.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:34:08.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:34:08.395 [DEBUG] [Thread-14197] [transport.py] [_log()] userauth is OK
2025-11-12T10:34:08.395 [DEBUG] [Thread-14197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:34:08.395 [DEBUG] [Thread-14197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:34:08.395 [DEBUG] [Thread-14197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:34:08.395 [DEBUG] [Thread-14197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:34:08.421 [INFO] [Thread-14197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:34:08.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:34:09.186 [DEBUG] [Thread-14197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:34:09.186 [DEBUG] [Thread-14197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:34:09.187 [DEBUG] [Thread-14197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:34:09.228 [DEBUG] [Thread-14197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:34:09.228 [DEBUG] [Thread-14197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:34:09.231 [DEBUG] [Thread-14197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:34:09.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:34:09.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:34:09.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:34:09.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:34:09.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:34:09.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:34:09.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:34:09.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:34:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:34:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.356687 -999.00  +23.90  15.30     23   +1.90 1 1 1 1 1   888    0 23.01 14.65 ----- 12.9 15.3 270.6 17.7 31.2 -26.3 30.3 -24.5 28.8 -22.9 29.5 -24.4
2025-11-12T10:34:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:34:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:34:09.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.356687
2025-11-12T10:34:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:34:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:34:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:34:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:34:09.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:34:09.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:33:34', tmtdew=26.27, humidity=17.6, cloud=0.0, wind=15.21, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:33:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:34:09.256 [DEBUG] [Thread-14197] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:34:09.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:34:09.351 [DEBUG] [Thread-14200] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T10:34:09.351 [DEBUG] [Thread-14200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:34:09.368 [DEBUG] [Thread-14200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:34:09.368 [INFO] [Thread-14200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] client lang: <none>
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] server lang: <none>
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] kex follows: False
2025-11-12T10:34:09.376 [DEBUG] [Thread-14200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:34:09.377 [DEBUG] [Thread-14200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:34:09.377 [DEBUG] [Thread-14200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:34:09.377 [DEBUG] [Thread-14200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:34:09.377 [DEBUG] [Thread-14200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:34:09.377 [DEBUG] [Thread-14200] [transport.py] [_log()] Compression: none
2025-11-12T10:34:09.377 [DEBUG] [Thread-14200] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:34:09.436 [DEBUG] [Thread-14200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:34:09.437 [DEBUG] [Thread-14200] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:34:09.437 [DEBUG] [Thread-14200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:34:09.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:34:09.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:34:09.497 [DEBUG] [Thread-14200] [transport.py] [_log()] userauth is OK
2025-11-12T10:34:09.497 [DEBUG] [Thread-14200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:34:09.497 [DEBUG] [Thread-14200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:34:09.497 [DEBUG] [Thread-14200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:34:09.497 [DEBUG] [Thread-14200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:34:09.516 [INFO] [Thread-14200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:34:09.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:34:09.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:34:10.359 [DEBUG] [Thread-14200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:34:10.359 [DEBUG] [Thread-14200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:34:10.407 [DEBUG] [Thread-14200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:34:10.407 [DEBUG] [Thread-14200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:34:10.416 [DEBUG] [Thread-14200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:34:10.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:34:10.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-11-12T10:34:10.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:34:10.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:34:10.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:34:10.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:34:10.457 [DEBUG] [Thread-14200] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:34:15.178 [DEBUG] [Thread-14202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:34:27.725 [DEBUG] [Thread-14203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:34:30.239 [DEBUG] [Thread-14204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:34:40.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:34:40.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:34:40.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-11-12T10:34:41.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 34, 6), 26.53, 17.35, 0.0, 18.81, 24.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:34:41.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:34:06
2025-11-12T10:34:41.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:34:41.417 [DEBUG] [Thread-14205] [transport.py] [_log()] starting thread (client mode): 0x17345fc0
2025-11-12T10:34:41.418 [DEBUG] [Thread-14205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:34:41.439 [DEBUG] [Thread-14205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:34:41.439 [INFO] [Thread-14205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:34:41.442 [DEBUG] [Thread-14205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] client lang: <none>
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] server lang: <none>
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] kex follows: False
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:34:41.443 [DEBUG] [Thread-14205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:34:41.444 [DEBUG] [Thread-14205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:34:41.444 [DEBUG] [Thread-14205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:34:41.444 [DEBUG] [Thread-14205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:34:41.444 [DEBUG] [Thread-14205] [transport.py] [_log()] Compression: none
2025-11-12T10:34:41.444 [DEBUG] [Thread-14205] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:34:41.462 [DEBUG] [Thread-14205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:34:41.463 [DEBUG] [Thread-14205] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:34:41.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:34:41.464 [DEBUG] [Thread-14205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:34:41.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:34:41.467 [DEBUG] [Thread-14205] [transport.py] [_log()] userauth is OK
2025-11-12T10:34:41.467 [DEBUG] [Thread-14205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:34:41.467 [DEBUG] [Thread-14205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:34:41.467 [DEBUG] [Thread-14205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:34:41.467 [DEBUG] [Thread-14205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:34:41.492 [INFO] [Thread-14205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:34:41.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:34:42.151 [DEBUG] [Thread-14205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:34:42.151 [DEBUG] [Thread-14205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:34:42.151 [DEBUG] [Thread-14205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:34:42.192 [DEBUG] [Thread-14205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:34:42.192 [DEBUG] [Thread-14205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:34:42.197 [DEBUG] [Thread-14205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:34:42.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:34:42.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:34:42.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:34:42.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:34:42.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:34:42.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:34:42.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:34:42.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:34:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:34:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.357034 -999.00  +24.10  15.89     23   +1.80 1 1 1 1 1   888    0 22.71 10.58 ----- 12.9 15.9 270.2 16.9 31.3 -26.7 30.4 -24.0 28.9 -22.9 29.7 -24.5
2025-11-12T10:34:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:34:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:34:42.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.357034
2025-11-12T10:34:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:34:42.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:34:42.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:34:42.228 [DEBUG] [Thread-14205] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:34:42.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:34:42.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:34:42.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:34:06', tmtdew=26.53, humidity=17.35, cloud=0.0, wind=18.81, temperature=24.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:34:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:34:42.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:34:42.324 [DEBUG] [Thread-14208] [transport.py] [_log()] starting thread (client mode): 0x173be2c0
2025-11-12T10:34:42.324 [DEBUG] [Thread-14208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:34:42.338 [DEBUG] [Thread-14208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:34:42.338 [INFO] [Thread-14208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] client lang: <none>
2025-11-12T10:34:42.346 [DEBUG] [Thread-14208] [transport.py] [_log()] server lang: <none>
2025-11-12T10:34:42.347 [DEBUG] [Thread-14208] [transport.py] [_log()] kex follows: False
2025-11-12T10:34:42.347 [DEBUG] [Thread-14208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:34:42.347 [DEBUG] [Thread-14208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:34:42.347 [DEBUG] [Thread-14208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:34:42.347 [DEBUG] [Thread-14208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:34:42.347 [DEBUG] [Thread-14208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:34:42.347 [DEBUG] [Thread-14208] [transport.py] [_log()] Compression: none
2025-11-12T10:34:42.347 [DEBUG] [Thread-14208] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:34:42.402 [DEBUG] [Thread-14208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:34:42.403 [DEBUG] [Thread-14208] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:34:42.403 [DEBUG] [Thread-14208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:34:42.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:34:42.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:34:42.460 [DEBUG] [Thread-14208] [transport.py] [_log()] userauth is OK
2025-11-12T10:34:42.460 [DEBUG] [Thread-14208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:34:42.460 [DEBUG] [Thread-14208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:34:42.460 [DEBUG] [Thread-14208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:34:42.460 [DEBUG] [Thread-14208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:34:42.478 [INFO] [Thread-14208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:34:42.488 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:34:42.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:34:43.307 [DEBUG] [Thread-14208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:34:43.307 [DEBUG] [Thread-14208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:34:43.355 [DEBUG] [Thread-14208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:34:43.355 [DEBUG] [Thread-14208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:34:43.365 [DEBUG] [Thread-14208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:34:43.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:34:43.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:34:43.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:34:43.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:34:43.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:34:43.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:34:43.401 [DEBUG] [Thread-14208] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:34:45.276 [DEBUG] [Thread-14210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:34:54.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:34:54.563 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:35:00.329 [DEBUG] [Thread-14211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:35:13.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:35:13.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:35:13.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-11-12T10:35:14.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 35, 10), 29.35, 14.19, 0.0, 25.09, 25.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:35:14.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:35:10
2025-11-12T10:35:14.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:35:14.405 [DEBUG] [Thread-14212] [transport.py] [_log()] starting thread (client mode): 0x173bee00
2025-11-12T10:35:14.405 [DEBUG] [Thread-14212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:35:14.425 [DEBUG] [Thread-14212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:35:14.425 [INFO] [Thread-14212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] client lang: <none>
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] server lang: <none>
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] kex follows: False
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:35:14.428 [DEBUG] [Thread-14212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:35:14.429 [DEBUG] [Thread-14212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:35:14.429 [DEBUG] [Thread-14212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:35:14.429 [DEBUG] [Thread-14212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:35:14.429 [DEBUG] [Thread-14212] [transport.py] [_log()] Compression: none
2025-11-12T10:35:14.429 [DEBUG] [Thread-14212] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:35:14.443 [DEBUG] [Thread-14212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:35:14.443 [DEBUG] [Thread-14212] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:35:14.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:35:14.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:35:14.444 [DEBUG] [Thread-14212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:35:14.444 [DEBUG] [Thread-14212] [transport.py] [_log()] userauth is OK
2025-11-12T10:35:14.444 [DEBUG] [Thread-14212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:35:14.444 [DEBUG] [Thread-14212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:35:14.444 [DEBUG] [Thread-14212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:35:14.444 [DEBUG] [Thread-14212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:35:14.455 [INFO] [Thread-14212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:35:14.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:35:15.317 [DEBUG] [Thread-14212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:35:15.317 [DEBUG] [Thread-14212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:35:15.317 [DEBUG] [Thread-14212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:35:15.358 [DEBUG] [Thread-14212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:35:15.358 [DEBUG] [Thread-14212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:35:15.360 [DEBUG] [Thread-14212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:35:15.366 [DEBUG] [Thread-14214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:35:15.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:35:15.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:35:15.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:35:15.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:35:15.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:35:15.379 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:35:15.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:35:15.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:35:15.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:35:15.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.357382 -999.00  +24.50  18.84     21   +1.30 1 1 1 1 1   888    0 23.03 9.83 ----- 22.1 18.8 291.0 23.4 31.4 -26.5 30.5 -24.3 29.0 -23.3 29.8 -24.1
2025-11-12T10:35:15.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:35:15.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:35:15.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.357382
2025-11-12T10:35:15.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:35:15.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:35:15.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:35:15.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:35:15.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:35:15.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:35:10', tmtdew=29.35, humidity=14.19, cloud=0.0, wind=25.09, temperature=25.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:34:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:35:15.380 [DEBUG] [Thread-14212] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:35:15.455 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:35:15.467 [DEBUG] [Thread-14216] [transport.py] [_log()] starting thread (client mode): 0x173bc5e0
2025-11-12T10:35:15.467 [DEBUG] [Thread-14216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:35:15.481 [DEBUG] [Thread-14216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:35:15.481 [INFO] [Thread-14216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] client lang: <none>
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] server lang: <none>
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] kex follows: False
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] Compression: none
2025-11-12T10:35:15.489 [DEBUG] [Thread-14216] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:35:15.545 [DEBUG] [Thread-14216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:35:15.546 [DEBUG] [Thread-14216] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:35:15.546 [DEBUG] [Thread-14216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:35:15.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:35:15.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:35:15.603 [DEBUG] [Thread-14216] [transport.py] [_log()] userauth is OK
2025-11-12T10:35:15.603 [DEBUG] [Thread-14216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:35:15.603 [DEBUG] [Thread-14216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:35:15.603 [DEBUG] [Thread-14216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:35:15.603 [DEBUG] [Thread-14216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:35:15.617 [INFO] [Thread-14216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:35:15.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:35:15.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:35:16.447 [DEBUG] [Thread-14216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:35:16.447 [DEBUG] [Thread-14216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:35:16.495 [DEBUG] [Thread-14216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:35:16.495 [DEBUG] [Thread-14216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:35:16.503 [DEBUG] [Thread-14216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:35:16.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:35:16.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-11-12T10:35:16.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-11-12T10:35:16.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:35:16.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:35:16.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:35:16.534 [DEBUG] [Thread-14216] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:35:27.758 [DEBUG] [Thread-14218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:35:30.400 [DEBUG] [Thread-14219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:35:45.450 [DEBUG] [Thread-14220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:35:46.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:35:46.547 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:35:46.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-11-12T10:35:47.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 35, 42), 30.8, 12.59, 0.0, 20.73, 25.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:35:47.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:35:42
2025-11-12T10:35:47.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:35:47.483 [DEBUG] [Thread-14221] [transport.py] [_log()] starting thread (client mode): 0x173e9330
2025-11-12T10:35:47.483 [DEBUG] [Thread-14221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:35:47.504 [DEBUG] [Thread-14221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:35:47.504 [INFO] [Thread-14221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:35:47.507 [DEBUG] [Thread-14221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:35:47.507 [DEBUG] [Thread-14221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] client lang: <none>
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] server lang: <none>
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] kex follows: False
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] Compression: none
2025-11-12T10:35:47.508 [DEBUG] [Thread-14221] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:35:47.525 [DEBUG] [Thread-14221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:35:47.526 [DEBUG] [Thread-14221] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:35:47.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:35:47.527 [DEBUG] [Thread-14221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:35:47.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:35:47.528 [DEBUG] [Thread-14221] [transport.py] [_log()] userauth is OK
2025-11-12T10:35:47.528 [DEBUG] [Thread-14221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:35:47.528 [DEBUG] [Thread-14221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:35:47.528 [DEBUG] [Thread-14221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:35:47.528 [DEBUG] [Thread-14221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:35:47.546 [INFO] [Thread-14221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:35:47.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:35:48.161 [DEBUG] [Thread-14221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:35:48.161 [DEBUG] [Thread-14221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:35:48.162 [DEBUG] [Thread-14221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:35:48.202 [DEBUG] [Thread-14221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:35:48.202 [DEBUG] [Thread-14221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:35:48.205 [DEBUG] [Thread-14221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:35:48.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:35:48.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:35:48.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:35:48.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:35:48.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:35:48.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:35:48.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:35:48.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:35:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:35:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.357729 -999.00  +24.90  29.46     19   -0.10 1 1 1 1 1   888    0 23.11 17.18 ----- 29.2 29.5 282.8 32.7 31.3 -28.2 30.5 -24.9 29.0 -23.6 29.9 -25.2
2025-11-12T10:35:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:35:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:35:48.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.357729
2025-11-12T10:35:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:35:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:35:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:35:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:35:48.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:35:48.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:35:42', tmtdew=30.8, humidity=12.59, cloud=0.0, wind=20.73, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:35:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:35:48.229 [DEBUG] [Thread-14221] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:35:48.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:35:48.325 [DEBUG] [Thread-14224] [transport.py] [_log()] starting thread (client mode): 0x1737f550
2025-11-12T10:35:48.325 [DEBUG] [Thread-14224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:35:48.339 [DEBUG] [Thread-14224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:35:48.339 [INFO] [Thread-14224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:35:48.346 [DEBUG] [Thread-14224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:35:48.346 [DEBUG] [Thread-14224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] client lang: <none>
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] server lang: <none>
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] kex follows: False
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] Compression: none
2025-11-12T10:35:48.347 [DEBUG] [Thread-14224] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:35:48.403 [DEBUG] [Thread-14224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:35:48.403 [DEBUG] [Thread-14224] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:35:48.403 [DEBUG] [Thread-14224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:35:48.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:35:48.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:35:48.459 [DEBUG] [Thread-14224] [transport.py] [_log()] userauth is OK
2025-11-12T10:35:48.459 [DEBUG] [Thread-14224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:35:48.459 [DEBUG] [Thread-14224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:35:48.459 [DEBUG] [Thread-14224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:35:48.459 [DEBUG] [Thread-14224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:35:48.477 [INFO] [Thread-14224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:35:48.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:35:48.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:35:49.323 [DEBUG] [Thread-14224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:35:49.323 [DEBUG] [Thread-14224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:35:49.371 [DEBUG] [Thread-14224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:35:49.371 [DEBUG] [Thread-14224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:35:49.380 [DEBUG] [Thread-14224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:35:49.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:35:49.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-11-12T10:35:49.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-11-12T10:35:49.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:35:49.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:35:49.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:35:49.414 [DEBUG] [Thread-14224] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:35:54.704 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:35:54.705 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:36:00.485 [DEBUG] [Thread-14226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:36:15.545 [DEBUG] [Thread-14227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:36:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:36:19.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:36:19.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-11-12T10:36:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 36, 14), 30.81, 12.58, 0.0, 24.54, 25.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:36:20.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:36:14
2025-11-12T10:36:20.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:36:20.344 [DEBUG] [Thread-14228] [transport.py] [_log()] starting thread (client mode): 0x173beda0
2025-11-12T10:36:20.344 [DEBUG] [Thread-14228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:36:20.364 [DEBUG] [Thread-14228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:36:20.364 [INFO] [Thread-14228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:36:20.367 [DEBUG] [Thread-14228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:36:20.367 [DEBUG] [Thread-14228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:36:20.367 [DEBUG] [Thread-14228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:36:20.367 [DEBUG] [Thread-14228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:36:20.367 [DEBUG] [Thread-14228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] client lang: <none>
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] server lang: <none>
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] kex follows: False
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] Compression: none
2025-11-12T10:36:20.368 [DEBUG] [Thread-14228] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:36:20.377 [DEBUG] [Thread-14228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:36:20.377 [DEBUG] [Thread-14228] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:36:20.378 [DEBUG] [Thread-14228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:36:20.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:36:20.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:36:20.379 [DEBUG] [Thread-14228] [transport.py] [_log()] userauth is OK
2025-11-12T10:36:20.380 [DEBUG] [Thread-14228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:36:20.380 [DEBUG] [Thread-14228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:36:20.380 [DEBUG] [Thread-14228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:36:20.380 [DEBUG] [Thread-14228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:36:20.394 [INFO] [Thread-14228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:36:20.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:36:21.018 [DEBUG] [Thread-14228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:36:21.019 [DEBUG] [Thread-14228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:36:21.019 [DEBUG] [Thread-14228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:36:21.060 [DEBUG] [Thread-14228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:36:21.060 [DEBUG] [Thread-14228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:36:21.064 [DEBUG] [Thread-14228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:36:21.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:36:21.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:36:21.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:36:21.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:36:21.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:36:21.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:36:21.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:36:21.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:36:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:36:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.358423 -999.00  +25.10  20.46     18   -0.20 1 1 1 1 1   888    0 23.85 39.43 ----- 24.0 20.5 300.0 30.3 31.4 -27.3 30.5 -24.7 29.1 -23.7 30.0 -25.5
2025-11-12T10:36:21.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:36:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:36:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.358423
2025-11-12T10:36:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:36:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:36:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:36:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:36:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:36:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:36:14', tmtdew=30.81, humidity=12.58, cloud=0.0, wind=24.54, temperature=25.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:36:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:36:21.092 [DEBUG] [Thread-14228] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:36:21.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:36:21.188 [DEBUG] [Thread-14231] [transport.py] [_log()] starting thread (client mode): 0x173bd780
2025-11-12T10:36:21.188 [DEBUG] [Thread-14231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:36:21.203 [DEBUG] [Thread-14231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:36:21.203 [INFO] [Thread-14231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:36:21.210 [DEBUG] [Thread-14231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] client lang: <none>
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] server lang: <none>
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] kex follows: False
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] Compression: none
2025-11-12T10:36:21.211 [DEBUG] [Thread-14231] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:36:21.267 [DEBUG] [Thread-14231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:36:21.268 [DEBUG] [Thread-14231] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:36:21.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:36:21.269 [DEBUG] [Thread-14231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:36:21.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:36:21.324 [DEBUG] [Thread-14231] [transport.py] [_log()] userauth is OK
2025-11-12T10:36:21.324 [DEBUG] [Thread-14231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:36:21.324 [DEBUG] [Thread-14231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:36:21.325 [DEBUG] [Thread-14231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:36:21.325 [DEBUG] [Thread-14231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:36:21.343 [INFO] [Thread-14231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:36:21.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:36:21.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:36:22.213 [DEBUG] [Thread-14231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:36:22.213 [DEBUG] [Thread-14231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:36:22.261 [DEBUG] [Thread-14231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:36:22.262 [DEBUG] [Thread-14231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:36:22.271 [DEBUG] [Thread-14231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:36:22.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:36: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')
2025-11-12T10:36:22.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-11-12T10:36:22.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:36:22.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:36:22.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:36:22.308 [DEBUG] [Thread-14231] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:36:27.792 [DEBUG] [Thread-14233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:36:30.576 [DEBUG] [Thread-14234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:36:45.626 [DEBUG] [Thread-14235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:36:52.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:36:52.331 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:36:52.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-11-12T10:36:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 36, 46), 31.06, 12.44, 0.0, 24.12, 25.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:36:52.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:36:46
2025-11-12T10:36:53.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:36:53.250 [DEBUG] [Thread-14236] [transport.py] [_log()] starting thread (client mode): 0x173eae00
2025-11-12T10:36:53.250 [DEBUG] [Thread-14236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:36:53.270 [DEBUG] [Thread-14236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:36:53.271 [INFO] [Thread-14236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:36:53.273 [DEBUG] [Thread-14236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] client lang: <none>
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] server lang: <none>
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] kex follows: False
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] Compression: none
2025-11-12T10:36:53.274 [DEBUG] [Thread-14236] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:36:53.285 [DEBUG] [Thread-14236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:36:53.286 [DEBUG] [Thread-14236] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:36:53.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:36:53.287 [DEBUG] [Thread-14236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:36:53.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:36:53.289 [DEBUG] [Thread-14236] [transport.py] [_log()] userauth is OK
2025-11-12T10:36:53.289 [DEBUG] [Thread-14236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:36:53.289 [DEBUG] [Thread-14236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:36:53.290 [DEBUG] [Thread-14236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:36:53.290 [DEBUG] [Thread-14236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:36:53.315 [INFO] [Thread-14236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:36:53.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:36:53.964 [DEBUG] [Thread-14236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:36:53.965 [DEBUG] [Thread-14236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:36:53.965 [DEBUG] [Thread-14236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:36:54.006 [DEBUG] [Thread-14236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:36:54.006 [DEBUG] [Thread-14236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:36:54.009 [DEBUG] [Thread-14236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:36:54.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:36:54.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:36:54.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:36:54.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:36:54.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:36:54.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:36:54.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:36:54.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:36:54.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:36:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.358770 -999.00  +24.80  25.73     19   -0.10 1 1 1 1 1   888    0 24.38 53.61 ----- 21.8 25.7 309.2 30.5 31.4 -27.3 30.4 -26.0 29.1 -26.3 30.0 -25.1
2025-11-12T10:36:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:36:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:36:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.358770
2025-11-12T10:36:54.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:36:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:36:54.035 [DEBUG] [Thread-14236] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:36:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:36:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:36:54.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:36:54.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:36:46', tmtdew=31.06, humidity=12.44, cloud=0.0, wind=24.12, temperature=25.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:36:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:36: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-11-12T10:36:54.142 [DEBUG] [Thread-14239] [transport.py] [_log()] starting thread (client mode): 0x17398670
2025-11-12T10:36:54.142 [DEBUG] [Thread-14239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:36:54.156 [DEBUG] [Thread-14239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:36:54.157 [INFO] [Thread-14239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:36:54.164 [DEBUG] [Thread-14239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:36:54.164 [DEBUG] [Thread-14239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:36:54.164 [DEBUG] [Thread-14239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:36:54.164 [DEBUG] [Thread-14239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:36:54.164 [DEBUG] [Thread-14239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:36:54.164 [DEBUG] [Thread-14239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:36:54.164 [DEBUG] [Thread-14239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] client lang: <none>
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] server lang: <none>
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] kex follows: False
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] Compression: none
2025-11-12T10:36:54.165 [DEBUG] [Thread-14239] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:36:54.228 [DEBUG] [Thread-14239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:36:54.228 [DEBUG] [Thread-14239] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:36:54.229 [DEBUG] [Thread-14239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:36:54.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:36:54.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:36:54.284 [DEBUG] [Thread-14239] [transport.py] [_log()] userauth is OK
2025-11-12T10:36:54.284 [DEBUG] [Thread-14239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:36:54.285 [DEBUG] [Thread-14239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:36:54.285 [DEBUG] [Thread-14239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:36:54.285 [DEBUG] [Thread-14239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:36:54.303 [INFO] [Thread-14239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:36:54.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:36:54.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:36:54.850 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:36:54.851 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:36:55.150 [DEBUG] [Thread-14239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:36:55.151 [DEBUG] [Thread-14239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:36:55.199 [DEBUG] [Thread-14239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:36:55.199 [DEBUG] [Thread-14239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:36:55.208 [DEBUG] [Thread-14239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:36:55.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:36:55.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-11-12T10:36:55.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-11-12T10:36:55.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:36:55.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:36:55.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:36:55.245 [DEBUG] [Thread-14239] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:37:00.661 [DEBUG] [Thread-14241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:37:15.708 [DEBUG] [Thread-14242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:37:25.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:37:25.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:37:25.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:37:25.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 37, 18), 31.06, 12.43, 0.0, 22.2, 25.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:37:25.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:37:18
2025-11-12T10:37:26.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:37:26.176 [DEBUG] [Thread-14243] [transport.py] [_log()] starting thread (client mode): 0x173eb1c0
2025-11-12T10:37:26.176 [DEBUG] [Thread-14243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:37:26.196 [DEBUG] [Thread-14243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:37:26.196 [INFO] [Thread-14243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] client lang: <none>
2025-11-12T10:37:26.199 [DEBUG] [Thread-14243] [transport.py] [_log()] server lang: <none>
2025-11-12T10:37:26.200 [DEBUG] [Thread-14243] [transport.py] [_log()] kex follows: False
2025-11-12T10:37:26.200 [DEBUG] [Thread-14243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:37:26.200 [DEBUG] [Thread-14243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:37:26.200 [DEBUG] [Thread-14243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:37:26.200 [DEBUG] [Thread-14243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:37:26.200 [DEBUG] [Thread-14243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:37:26.200 [DEBUG] [Thread-14243] [transport.py] [_log()] Compression: none
2025-11-12T10:37:26.200 [DEBUG] [Thread-14243] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:37:26.218 [DEBUG] [Thread-14243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:37:26.219 [DEBUG] [Thread-14243] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:37:26.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:37:26.220 [DEBUG] [Thread-14243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:37:26.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:37:26.222 [DEBUG] [Thread-14243] [transport.py] [_log()] userauth is OK
2025-11-12T10:37:26.222 [DEBUG] [Thread-14243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:37:26.222 [DEBUG] [Thread-14243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:37:26.222 [DEBUG] [Thread-14243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:37:26.222 [DEBUG] [Thread-14243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:37:26.239 [INFO] [Thread-14243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:37:26.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:37:26.856 [DEBUG] [Thread-14243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:37:26.857 [DEBUG] [Thread-14243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:37:26.857 [DEBUG] [Thread-14243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:37:26.897 [DEBUG] [Thread-14243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:37:26.898 [DEBUG] [Thread-14243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:37:26.900 [DEBUG] [Thread-14243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:37:26.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:37:26.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:37:26.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:37:26.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:37:26.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:37:26.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:37:26.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:37:26.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:37:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:37:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.359117 -999.00  +24.40  21.58     19   -0.20 1 1 1 1 1   888    0 24.35 61.85 ----- 21.8 21.6 313.4 28.7 31.4 -26.4 30.4 -26.3 29.2 -25.1 30.0 -25.1
2025-11-12T10:37:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:37:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:37:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.359117
2025-11-12T10:37:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:37:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:37:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:37:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:37:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:37:26.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:37:18', tmtdew=31.06, humidity=12.43, cloud=0.0, wind=22.2, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:37:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:37:26.925 [DEBUG] [Thread-14243] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:37:27.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:37:27.021 [DEBUG] [Thread-14246] [transport.py] [_log()] starting thread (client mode): 0x173e87c0
2025-11-12T10:37:27.021 [DEBUG] [Thread-14246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:37:27.037 [DEBUG] [Thread-14246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:37:27.037 [INFO] [Thread-14246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:37:27.044 [DEBUG] [Thread-14246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] client lang: <none>
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] server lang: <none>
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] kex follows: False
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:37:27.045 [DEBUG] [Thread-14246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:37:27.046 [DEBUG] [Thread-14246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:37:27.046 [DEBUG] [Thread-14246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:37:27.046 [DEBUG] [Thread-14246] [transport.py] [_log()] Compression: none
2025-11-12T10:37:27.046 [DEBUG] [Thread-14246] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:37:27.104 [DEBUG] [Thread-14246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:37:27.105 [DEBUG] [Thread-14246] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:37:27.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:37:27.106 [DEBUG] [Thread-14246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:37:27.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:37:27.160 [DEBUG] [Thread-14246] [transport.py] [_log()] userauth is OK
2025-11-12T10:37:27.160 [DEBUG] [Thread-14246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:37:27.161 [DEBUG] [Thread-14246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:37:27.161 [DEBUG] [Thread-14246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:37:27.161 [DEBUG] [Thread-14246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:37:27.179 [INFO] [Thread-14246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:37:27.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:37:27.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:37:27.837 [DEBUG] [Thread-14248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:37:28.054 [DEBUG] [Thread-14246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:37:28.054 [DEBUG] [Thread-14246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:37:28.101 [DEBUG] [Thread-14246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:37:28.101 [DEBUG] [Thread-14246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:37:28.110 [DEBUG] [Thread-14246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:37:28.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:37:28.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:37:28.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:37:28.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:37:28.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:37:28.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:37:28.144 [DEBUG] [Thread-14246] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:37:30.743 [DEBUG] [Thread-14249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:37:45.802 [DEBUG] [Thread-14250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:37:54.991 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:37:54.992 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:37:58.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:37:58.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:37:58.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-11-12T10:37:58.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 37, 50), 30.17, 12.89, 0.0, 18.3, 24.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:37:58.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:37:50
2025-11-12T10:37:58.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:37:59.081 [DEBUG] [Thread-14251] [transport.py] [_log()] starting thread (client mode): 0x1737e8c0
2025-11-12T10:37:59.081 [DEBUG] [Thread-14251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:37:59.101 [DEBUG] [Thread-14251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:37:59.101 [INFO] [Thread-14251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] client lang: <none>
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] server lang: <none>
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] kex follows: False
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:37:59.104 [DEBUG] [Thread-14251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:37:59.105 [DEBUG] [Thread-14251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:37:59.105 [DEBUG] [Thread-14251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:37:59.105 [DEBUG] [Thread-14251] [transport.py] [_log()] Compression: none
2025-11-12T10:37:59.105 [DEBUG] [Thread-14251] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:37:59.121 [DEBUG] [Thread-14251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:37:59.122 [DEBUG] [Thread-14251] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:37:59.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:37:59.122 [DEBUG] [Thread-14251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:37:59.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:37:59.125 [DEBUG] [Thread-14251] [transport.py] [_log()] userauth is OK
2025-11-12T10:37:59.125 [DEBUG] [Thread-14251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:37:59.125 [DEBUG] [Thread-14251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:37:59.125 [DEBUG] [Thread-14251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:37:59.125 [DEBUG] [Thread-14251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:37:59.161 [INFO] [Thread-14251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:37:59.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:37:59.795 [DEBUG] [Thread-14251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:37:59.795 [DEBUG] [Thread-14251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:37:59.795 [DEBUG] [Thread-14251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:37:59.835 [DEBUG] [Thread-14251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:37:59.836 [DEBUG] [Thread-14251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:37:59.839 [DEBUG] [Thread-14251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:37:59.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:37:59.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:37:59.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:37:59.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:37:59.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:37:59.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:37:59.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:37:59.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:37:59.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:37:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.359464 -999.00  +24.80  13.46     19   +0.10 1 1 1 1 1   888    0 25.26 72.59 ----- 16.4 13.5 278.0 22.5 31.4 -26.9 30.5 -24.8 29.2 -24.1 30.1 -25.3
2025-11-12T10:37:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:37:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:37:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.359464
2025-11-12T10:37:59.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:37:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:37:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:37:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:37:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:37:59.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:37:50', tmtdew=30.17, humidity=12.89, cloud=0.0, wind=18.3, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:37:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:37:59.867 [DEBUG] [Thread-14251] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:37:59.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:37:59.962 [DEBUG] [Thread-14254] [transport.py] [_log()] starting thread (client mode): 0x173bd660
2025-11-12T10:37:59.962 [DEBUG] [Thread-14254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:37:59.977 [DEBUG] [Thread-14254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:37:59.977 [INFO] [Thread-14254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] client lang: <none>
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] server lang: <none>
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] kex follows: False
2025-11-12T10:37:59.985 [DEBUG] [Thread-14254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:37:59.986 [DEBUG] [Thread-14254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:37:59.986 [DEBUG] [Thread-14254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:37:59.986 [DEBUG] [Thread-14254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:37:59.986 [DEBUG] [Thread-14254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:37:59.986 [DEBUG] [Thread-14254] [transport.py] [_log()] Compression: none
2025-11-12T10:37:59.986 [DEBUG] [Thread-14254] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:38:00.043 [DEBUG] [Thread-14254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:38:00.044 [DEBUG] [Thread-14254] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:38:00.044 [DEBUG] [Thread-14254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:38:00.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:38:00.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:38:00.100 [DEBUG] [Thread-14254] [transport.py] [_log()] userauth is OK
2025-11-12T10:38:00.100 [DEBUG] [Thread-14254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:38:00.100 [DEBUG] [Thread-14254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:38:00.100 [DEBUG] [Thread-14254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:38:00.100 [DEBUG] [Thread-14254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:38:00.119 [INFO] [Thread-14254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:38:00.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:38:00.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:38:00.839 [DEBUG] [Thread-14256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:38:00.948 [DEBUG] [Thread-14254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:38:00.948 [DEBUG] [Thread-14254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:38:00.996 [DEBUG] [Thread-14254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:38:00.997 [DEBUG] [Thread-14254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:38:01.006 [DEBUG] [Thread-14254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:38:01.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:38:01.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-11-12T10:38:01.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-11-12T10:38:01.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:38:01.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:38:01.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:38:01.043 [DEBUG] [Thread-14254] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:38:15.899 [DEBUG] [Thread-14257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:38:27.866 [DEBUG] [Thread-14258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:38:30.936 [DEBUG] [Thread-14259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:38:31.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:38:31.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:38:31.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:38:31.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 38, 22), 30.0, 12.99, 0.0, 18.37, 24.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:38:31.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:38:22
2025-11-12T10:38:31.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:38:31.988 [DEBUG] [Thread-14260] [transport.py] [_log()] starting thread (client mode): 0x17398490
2025-11-12T10:38:31.989 [DEBUG] [Thread-14260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:38:32.008 [DEBUG] [Thread-14260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:38:32.008 [INFO] [Thread-14260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] client lang: <none>
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] server lang: <none>
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] kex follows: False
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:38:32.011 [DEBUG] [Thread-14260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:38:32.012 [DEBUG] [Thread-14260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:38:32.012 [DEBUG] [Thread-14260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:38:32.012 [DEBUG] [Thread-14260] [transport.py] [_log()] Compression: none
2025-11-12T10:38:32.012 [DEBUG] [Thread-14260] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:38:32.028 [DEBUG] [Thread-14260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:38:32.029 [DEBUG] [Thread-14260] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:38:32.030 [DEBUG] [Thread-14260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:38:32.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:38:32.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:38:32.032 [DEBUG] [Thread-14260] [transport.py] [_log()] userauth is OK
2025-11-12T10:38:32.032 [DEBUG] [Thread-14260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:38:32.032 [DEBUG] [Thread-14260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:38:32.032 [DEBUG] [Thread-14260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:38:32.032 [DEBUG] [Thread-14260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:38:32.057 [INFO] [Thread-14260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:38:32.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:38:32.706 [DEBUG] [Thread-14260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:38:32.706 [DEBUG] [Thread-14260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:38:32.707 [DEBUG] [Thread-14260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:38:32.747 [DEBUG] [Thread-14260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:38:32.748 [DEBUG] [Thread-14260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:38:32.750 [DEBUG] [Thread-14260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:38:32.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:38:32.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:38:32.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:38:32.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:38:32.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:38:32.772 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:38:32.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:38:32.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:38:32.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:38:32.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.359812 -999.00  +24.80  21.09     18   -0.60 1 1 1 1 1   888    0 25.53 87.83 ----- 22.7 21.1 296.2 31.0 31.5 -27.0 30.5 -24.7 29.3 -23.8 30.1 -25.3
2025-11-12T10:38:32.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:38:32.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:38:32.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.359812
2025-11-12T10:38:32.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:38:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:38:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:38:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:38:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:38:32.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:38:22', tmtdew=30.0, humidity=12.99, cloud=0.0, wind=18.37, temperature=24.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:38:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:38:32.775 [DEBUG] [Thread-14260] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:38:32.858 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:38:32.870 [DEBUG] [Thread-14263] [transport.py] [_log()] starting thread (client mode): 0x14921ab0
2025-11-12T10:38:32.870 [DEBUG] [Thread-14263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:38:32.885 [DEBUG] [Thread-14263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:38:32.885 [INFO] [Thread-14263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:38:32.893 [DEBUG] [Thread-14263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:38:32.893 [DEBUG] [Thread-14263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:38:32.893 [DEBUG] [Thread-14263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] client lang: <none>
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] server lang: <none>
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] kex follows: False
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:38:32.894 [DEBUG] [Thread-14263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:38:32.895 [DEBUG] [Thread-14263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:38:32.895 [DEBUG] [Thread-14263] [transport.py] [_log()] Compression: none
2025-11-12T10:38:32.895 [DEBUG] [Thread-14263] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:38:32.952 [DEBUG] [Thread-14263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:38:32.952 [DEBUG] [Thread-14263] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:38:32.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:38:32.954 [DEBUG] [Thread-14263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:38:32.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:38:33.008 [DEBUG] [Thread-14263] [transport.py] [_log()] userauth is OK
2025-11-12T10:38:33.008 [DEBUG] [Thread-14263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:38:33.008 [DEBUG] [Thread-14263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:38:33.008 [DEBUG] [Thread-14263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:38:33.008 [DEBUG] [Thread-14263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:38:33.028 [INFO] [Thread-14263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:38:33.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:38:33.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:38:33.895 [DEBUG] [Thread-14263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:38:33.895 [DEBUG] [Thread-14263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:38:33.943 [DEBUG] [Thread-14263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:38:33.943 [DEBUG] [Thread-14263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:38:33.955 [DEBUG] [Thread-14263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:38:33.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:38:33.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-11-12T10:38:33.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:38:33.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:38:33.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:38:33.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:38:33.992 [DEBUG] [Thread-14263] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:38:45.980 [DEBUG] [Thread-14265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:38:55.134 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:38:55.135 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:39:01.037 [DEBUG] [Thread-14266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:39:04.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:39:04.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:39:04.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-11-12T10:39:04.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 38, 54), 29.85, 13.62, 0.0, 16.2, 24.6, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:39:04.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:38:54
2025-11-12T10:39:04.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:39:04.975 [DEBUG] [Thread-14267] [transport.py] [_log()] starting thread (client mode): 0x1737f2b0
2025-11-12T10:39:04.975 [DEBUG] [Thread-14267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:39:04.996 [DEBUG] [Thread-14267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:39:04.996 [INFO] [Thread-14267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] client lang: <none>
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] server lang: <none>
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] kex follows: False
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] Compression: none
2025-11-12T10:39:04.997 [DEBUG] [Thread-14267] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:39:05.005 [DEBUG] [Thread-14267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:39:05.005 [DEBUG] [Thread-14267] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:39:05.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:39:05.006 [DEBUG] [Thread-14267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:39:05.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:39:05.006 [DEBUG] [Thread-14267] [transport.py] [_log()] userauth is OK
2025-11-12T10:39:05.006 [DEBUG] [Thread-14267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:39:05.006 [DEBUG] [Thread-14267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:39:05.006 [DEBUG] [Thread-14267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:39:05.007 [DEBUG] [Thread-14267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:39:05.019 [INFO] [Thread-14267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:39:05.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:39:05.656 [DEBUG] [Thread-14267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:39:05.656 [DEBUG] [Thread-14267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:39:05.656 [DEBUG] [Thread-14267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:39:05.697 [DEBUG] [Thread-14267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:39:05.697 [DEBUG] [Thread-14267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:39:05.699 [DEBUG] [Thread-14267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:39:05.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:39:05.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:39:05.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:39:05.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:39:05.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:39:05.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:39:05.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.360159 -999.00  +24.90  24.00     18   -0.50 1 1 1 1 1   888    0 25.94 108.03 ----- 26.2 24.0 295.1 28.7 31.4 -26.5 30.6 -24.9 29.3 -25.3 30.1 -24.8
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.360159
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:39:05.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:38:54', tmtdew=29.85, humidity=13.62, cloud=0.0, wind=16.2, temperature=24.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:38:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:39:05.718 [DEBUG] [Thread-14267] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:39:05.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:39:05.803 [DEBUG] [Thread-14270] [transport.py] [_log()] starting thread (client mode): 0x173bf9a0
2025-11-12T10:39:05.803 [DEBUG] [Thread-14270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:39:05.820 [DEBUG] [Thread-14270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:39:05.820 [INFO] [Thread-14270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] client lang: <none>
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] server lang: <none>
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] kex follows: False
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] Compression: none
2025-11-12T10:39:05.828 [DEBUG] [Thread-14270] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:39:05.883 [DEBUG] [Thread-14270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:39:05.883 [DEBUG] [Thread-14270] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:39:05.883 [DEBUG] [Thread-14270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:39:05.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:39:05.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:39:05.943 [DEBUG] [Thread-14270] [transport.py] [_log()] userauth is OK
2025-11-12T10:39:05.944 [DEBUG] [Thread-14270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:39:05.944 [DEBUG] [Thread-14270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:39:05.944 [DEBUG] [Thread-14270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:39:05.944 [DEBUG] [Thread-14270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:39:05.958 [INFO] [Thread-14270] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:39:05.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:39:05.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:39:06.830 [DEBUG] [Thread-14270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:39:06.830 [DEBUG] [Thread-14270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:39:06.878 [DEBUG] [Thread-14270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:39:06.878 [DEBUG] [Thread-14270] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:39:06.886 [DEBUG] [Thread-14270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:39:06.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:39:06.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:39: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-11-12T10:39:06.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:39:06.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:39:06.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:39:06.918 [DEBUG] [Thread-14270] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:39:16.077 [DEBUG] [Thread-14272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:39:27.903 [DEBUG] [Thread-14273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:39:31.123 [DEBUG] [Thread-14274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:39:36.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:39:36.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:39:36.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-11-12T10:39:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 39, 26), 30.22, 13.34, 0.0, 18.09, 24.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:39:37.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:39:26
2025-11-12T10:39:37.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:39:37.874 [DEBUG] [Thread-14275] [transport.py] [_log()] starting thread (client mode): 0x173be590
2025-11-12T10:39:37.874 [DEBUG] [Thread-14275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:39:37.893 [DEBUG] [Thread-14275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:39:37.894 [INFO] [Thread-14275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] client lang: <none>
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] server lang: <none>
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] kex follows: False
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] Compression: none
2025-11-12T10:39:37.897 [DEBUG] [Thread-14275] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:39:37.915 [DEBUG] [Thread-14275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:39:37.915 [DEBUG] [Thread-14275] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:39:37.916 [DEBUG] [Thread-14275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:39:37.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:39:37.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:39:37.918 [DEBUG] [Thread-14275] [transport.py] [_log()] userauth is OK
2025-11-12T10:39:37.918 [DEBUG] [Thread-14275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:39:37.918 [DEBUG] [Thread-14275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:39:37.918 [DEBUG] [Thread-14275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:39:37.918 [DEBUG] [Thread-14275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:39:37.944 [INFO] [Thread-14275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:39:37.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:39:38.631 [DEBUG] [Thread-14275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:39:38.631 [DEBUG] [Thread-14275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:39:38.632 [DEBUG] [Thread-14275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:39:38.673 [DEBUG] [Thread-14275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:39:38.673 [DEBUG] [Thread-14275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:39:38.677 [DEBUG] [Thread-14275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:39:38.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:39:38.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:39:38.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:39:38.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:39:38.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:39:38.700 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:39:38.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:39:38.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:39:38.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:39:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.360506 -999.00  +24.90  26.45     18   -0.50 1 1 1 1 1   888    0 26.82 120.54 ----- 25.5 26.4 284.6 33.8 31.4 -27.7 30.5 -25.2 29.1 -24.5 30.1 -25.9
2025-11-12T10:39:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:39:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:39:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.360506
2025-11-12T10:39:38.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:39:38.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:39:38.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:39:38.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:39:38.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:39:38.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:39:26', tmtdew=30.22, humidity=13.34, cloud=0.0, wind=18.09, temperature=24.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:39:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:39:38.703 [DEBUG] [Thread-14275] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:39:38.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:39:38.808 [DEBUG] [Thread-14278] [transport.py] [_log()] starting thread (client mode): 0x1493ef20
2025-11-12T10:39:38.809 [DEBUG] [Thread-14278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:39:38.824 [DEBUG] [Thread-14278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:39:38.824 [INFO] [Thread-14278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] client lang: <none>
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] server lang: <none>
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] kex follows: False
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:39:38.832 [DEBUG] [Thread-14278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:39:38.833 [DEBUG] [Thread-14278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:39:38.833 [DEBUG] [Thread-14278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:39:38.833 [DEBUG] [Thread-14278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:39:38.833 [DEBUG] [Thread-14278] [transport.py] [_log()] Compression: none
2025-11-12T10:39:38.833 [DEBUG] [Thread-14278] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:39:38.892 [DEBUG] [Thread-14278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:39:38.892 [DEBUG] [Thread-14278] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:39:38.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:39:38.894 [DEBUG] [Thread-14278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:39:38.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:39:38.948 [DEBUG] [Thread-14278] [transport.py] [_log()] userauth is OK
2025-11-12T10:39:38.948 [DEBUG] [Thread-14278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:39:38.948 [DEBUG] [Thread-14278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:39:38.949 [DEBUG] [Thread-14278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:39:38.949 [DEBUG] [Thread-14278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:39:38.968 [INFO] [Thread-14278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:39:38.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:39:38.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:39:39.815 [DEBUG] [Thread-14278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:39:39.816 [DEBUG] [Thread-14278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:39:39.862 [DEBUG] [Thread-14278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:39:39.862 [DEBUG] [Thread-14278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:39:39.870 [DEBUG] [Thread-14278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:39:39.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:39:39.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-11-12T10:39:39.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-11-12T10:39:39.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:39:39.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:39:39.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:39:39.903 [DEBUG] [Thread-14278] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:39:46.156 [DEBUG] [Thread-14280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:39:55.273 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:39:55.274 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:40:01.201 [DEBUG] [Thread-14281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:40:09.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:40:09.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:40:09.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:40:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 39, 58), 30.39, 12.77, 0.0, 26.15, 24.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:40:10.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:39:58
2025-11-12T10:40:10.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:40:10.828 [DEBUG] [Thread-14282] [transport.py] [_log()] starting thread (client mode): 0x173994e0
2025-11-12T10:40:10.828 [DEBUG] [Thread-14282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:40:10.849 [DEBUG] [Thread-14282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:40:10.849 [INFO] [Thread-14282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] client lang: <none>
2025-11-12T10:40:10.853 [DEBUG] [Thread-14282] [transport.py] [_log()] server lang: <none>
2025-11-12T10:40:10.854 [DEBUG] [Thread-14282] [transport.py] [_log()] kex follows: False
2025-11-12T10:40:10.854 [DEBUG] [Thread-14282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:40:10.854 [DEBUG] [Thread-14282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:40:10.854 [DEBUG] [Thread-14282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:40:10.854 [DEBUG] [Thread-14282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:40:10.854 [DEBUG] [Thread-14282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:40:10.854 [DEBUG] [Thread-14282] [transport.py] [_log()] Compression: none
2025-11-12T10:40:10.854 [DEBUG] [Thread-14282] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:40:10.870 [DEBUG] [Thread-14282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:40:10.870 [DEBUG] [Thread-14282] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:40:10.871 [DEBUG] [Thread-14282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:40:10.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:40:10.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:40:10.873 [DEBUG] [Thread-14282] [transport.py] [_log()] userauth is OK
2025-11-12T10:40:10.873 [DEBUG] [Thread-14282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:40:10.873 [DEBUG] [Thread-14282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:40:10.873 [DEBUG] [Thread-14282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:40:10.873 [DEBUG] [Thread-14282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:40:10.898 [INFO] [Thread-14282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:40:10.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:40:11.553 [DEBUG] [Thread-14282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:40:11.553 [DEBUG] [Thread-14282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:40:11.554 [DEBUG] [Thread-14282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:40:11.594 [DEBUG] [Thread-14282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:40:11.595 [DEBUG] [Thread-14282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:40:11.598 [DEBUG] [Thread-14282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:40:11.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:40:11.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:40:11.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:40:11.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:40:11.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:40:11.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:40:11.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:40:11.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:40:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:40:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.360853 -999.00  +24.80  30.93     18   -0.70 1 1 2 1 1   888    0 26.95 126.01 ----- 31.2 30.9 277.0 32.7 31.3 -28.0 30.5 -25.0 29.2 -24.5 30.1 -25.3
2025-11-12T10:40:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:40:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:40:11.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.360853
2025-11-12T10:40:11.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:40:11.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:40:11.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:40:11.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:40:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:40:11.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:39:58', tmtdew=30.39, humidity=12.77, cloud=0.0, wind=26.15, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:39:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:40:11.623 [DEBUG] [Thread-14282] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:40:11.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:40:11.721 [DEBUG] [Thread-14285] [transport.py] [_log()] starting thread (client mode): 0x17398760
2025-11-12T10:40:11.722 [DEBUG] [Thread-14285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:40:11.737 [DEBUG] [Thread-14285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:40:11.737 [INFO] [Thread-14285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:40:11.745 [DEBUG] [Thread-14285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:40:11.745 [DEBUG] [Thread-14285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:40:11.745 [DEBUG] [Thread-14285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] client lang: <none>
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] server lang: <none>
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] kex follows: False
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] Compression: none
2025-11-12T10:40:11.746 [DEBUG] [Thread-14285] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:40:11.805 [DEBUG] [Thread-14285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:40:11.806 [DEBUG] [Thread-14285] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:40:11.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:40:11.807 [DEBUG] [Thread-14285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:40:11.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:40:11.864 [DEBUG] [Thread-14285] [transport.py] [_log()] userauth is OK
2025-11-12T10:40:11.865 [DEBUG] [Thread-14285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:40:11.865 [DEBUG] [Thread-14285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:40:11.865 [DEBUG] [Thread-14285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:40:11.865 [DEBUG] [Thread-14285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:40:11.885 [INFO] [Thread-14285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:40:11.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:40:11.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:40:12.727 [DEBUG] [Thread-14285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:40:12.728 [DEBUG] [Thread-14285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:40:12.775 [DEBUG] [Thread-14285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:40:12.776 [DEBUG] [Thread-14285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:40:12.785 [DEBUG] [Thread-14285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:40:12.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:40:12.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-11-12T10:40:12.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-11-12T10:40:12.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:40:12.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:40:12.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:40:12.822 [DEBUG] [Thread-14285] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:40:16.235 [DEBUG] [Thread-14287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:40:27.934 [DEBUG] [Thread-14288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:40:31.286 [DEBUG] [Thread-14289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:40:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:40:42.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:40:42.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-11-12T10:40:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 40, 31), 30.77, 12.49, 0.0, 31.83, 24.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:40:43.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:40:31
2025-11-12T10:40:43.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:40:43.775 [DEBUG] [Thread-14290] [transport.py] [_log()] starting thread (client mode): 0x17346710
2025-11-12T10:40:43.775 [DEBUG] [Thread-14290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:40:43.789 [DEBUG] [Thread-14290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:40:43.789 [INFO] [Thread-14290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] client lang: <none>
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] server lang: <none>
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] kex follows: False
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:40:43.792 [DEBUG] [Thread-14290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:40:43.793 [DEBUG] [Thread-14290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:40:43.793 [DEBUG] [Thread-14290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:40:43.793 [DEBUG] [Thread-14290] [transport.py] [_log()] Compression: none
2025-11-12T10:40:43.793 [DEBUG] [Thread-14290] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:40:43.807 [DEBUG] [Thread-14290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:40:43.808 [DEBUG] [Thread-14290] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:40:43.808 [DEBUG] [Thread-14290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:40:43.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:40:43.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:40:43.810 [DEBUG] [Thread-14290] [transport.py] [_log()] userauth is OK
2025-11-12T10:40:43.810 [DEBUG] [Thread-14290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:40:43.810 [DEBUG] [Thread-14290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:40:43.810 [DEBUG] [Thread-14290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:40:43.810 [DEBUG] [Thread-14290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:40:43.828 [INFO] [Thread-14290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:40:43.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:40:44.439 [DEBUG] [Thread-14290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:40:44.440 [DEBUG] [Thread-14290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:40:44.440 [DEBUG] [Thread-14290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:40:44.481 [DEBUG] [Thread-14290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:40:44.481 [DEBUG] [Thread-14290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:40:44.484 [DEBUG] [Thread-14290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:40:44.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:40:44.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:40:44.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:40:44.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:40:44.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:40:44.510 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:40:44.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:40:44.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:40:44.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:40:44.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.361548 -999.00  +23.80  25.73     19   -1.10 1 1 1 1 1   888    0 27.53 144.87 ----- 20.3 25.7 273.2 32.6 30.9 -29.8 30.2 -24.9 28.4 -25.5 29.7 -27.5
2025-11-12T10:40:44.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:40:44.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:40:44.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.361548
2025-11-12T10:40:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:40:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:40:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:40:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:40:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:40:44.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:40:31', tmtdew=30.77, humidity=12.49, cloud=0.0, wind=31.83, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:40:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:40:44.513 [DEBUG] [Thread-14290] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:40:44.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:40:44.605 [DEBUG] [Thread-14293] [transport.py] [_log()] starting thread (client mode): 0x14922470
2025-11-12T10:40:44.605 [DEBUG] [Thread-14293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:40:44.620 [DEBUG] [Thread-14293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:40:44.621 [INFO] [Thread-14293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:40:44.628 [DEBUG] [Thread-14293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:40:44.628 [DEBUG] [Thread-14293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:40:44.628 [DEBUG] [Thread-14293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:40:44.628 [DEBUG] [Thread-14293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:40:44.628 [DEBUG] [Thread-14293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:40:44.628 [DEBUG] [Thread-14293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:40:44.628 [DEBUG] [Thread-14293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] client lang: <none>
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] server lang: <none>
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] kex follows: False
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] Compression: none
2025-11-12T10:40:44.629 [DEBUG] [Thread-14293] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:40:44.689 [DEBUG] [Thread-14293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:40:44.690 [DEBUG] [Thread-14293] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:40:44.690 [DEBUG] [Thread-14293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:40:44.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:40:44.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:40:44.748 [DEBUG] [Thread-14293] [transport.py] [_log()] userauth is OK
2025-11-12T10:40:44.749 [DEBUG] [Thread-14293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:40:44.749 [DEBUG] [Thread-14293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:40:44.749 [DEBUG] [Thread-14293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:40:44.749 [DEBUG] [Thread-14293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:40:44.773 [INFO] [Thread-14293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:40:44.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:40:44.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:40:45.610 [DEBUG] [Thread-14293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:40:45.610 [DEBUG] [Thread-14293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:40:45.658 [DEBUG] [Thread-14293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:40:45.658 [DEBUG] [Thread-14293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:40:45.667 [DEBUG] [Thread-14293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:40:45.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:40:45.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:40: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') -> 00000000
2025-11-12T10:40:45.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:40:45.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:40:45.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:40:45.704 [DEBUG] [Thread-14293] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:40:46.324 [DEBUG] [Thread-14295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:40:55.415 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:40:55.415 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:41:01.383 [DEBUG] [Thread-14296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:41:15.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:41:15.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:41:15.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-11-12T10:41:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 41, 3), 30.73, 12.54, 0.0, 31.02, 25.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:41:16.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:41:03
2025-11-12T10:41:16.414 [DEBUG] [Thread-14297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:41:16.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:41:16.649 [DEBUG] [Thread-14298] [transport.py] [_log()] starting thread (client mode): 0x173981f0
2025-11-12T10:41:16.649 [DEBUG] [Thread-14298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:41:16.659 [DEBUG] [Thread-14298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:41:16.659 [INFO] [Thread-14298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] client lang: <none>
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] server lang: <none>
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] kex follows: False
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] Compression: none
2025-11-12T10:41:16.660 [DEBUG] [Thread-14298] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:41:16.669 [DEBUG] [Thread-14298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:41:16.669 [DEBUG] [Thread-14298] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:41:16.669 [DEBUG] [Thread-14298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:41:16.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:41:16.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:41:16.670 [DEBUG] [Thread-14298] [transport.py] [_log()] userauth is OK
2025-11-12T10:41:16.670 [DEBUG] [Thread-14298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:41:16.670 [DEBUG] [Thread-14298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:41:16.670 [DEBUG] [Thread-14298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:41:16.670 [DEBUG] [Thread-14298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:41:16.683 [INFO] [Thread-14298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:41:16.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:41:17.270 [DEBUG] [Thread-14298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:41:17.271 [DEBUG] [Thread-14298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:41:17.271 [DEBUG] [Thread-14298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:41:17.312 [DEBUG] [Thread-14298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:41:17.312 [DEBUG] [Thread-14298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:41:17.315 [DEBUG] [Thread-14298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:41:17.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:41:17.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:41:17.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:41:17.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:41:17.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:41:17.337 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:41:17.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:41:17.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:41:17.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:41:17.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.361895 -999.00  +24.00  31.48     19   -0.90 1 1 2 1 1   888    0 28.10 158.34 ----- 31.6 31.5 278.6 37.6 30.9 -28.0 30.1 -24.8 28.4 -28.2 29.6 -25.2
2025-11-12T10:41:17.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:41:17.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:41:17.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.361895
2025-11-12T10:41:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:41:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:41:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:41:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:41:17.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:41:17.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:41:03', tmtdew=30.73, humidity=12.54, cloud=0.0, wind=31.02, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:41:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:41:17.340 [DEBUG] [Thread-14298] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:41: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-11-12T10:41:17.435 [DEBUG] [Thread-14301] [transport.py] [_log()] starting thread (client mode): 0x1739ba30
2025-11-12T10:41:17.435 [DEBUG] [Thread-14301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:41:17.450 [DEBUG] [Thread-14301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:41:17.451 [INFO] [Thread-14301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:41:17.458 [DEBUG] [Thread-14301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:41:17.459 [DEBUG] [Thread-14301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:41:17.459 [DEBUG] [Thread-14301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:41:17.459 [DEBUG] [Thread-14301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:41:17.459 [DEBUG] [Thread-14301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:41:17.459 [DEBUG] [Thread-14301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:41:17.459 [DEBUG] [Thread-14301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:41:17.459 [DEBUG] [Thread-14301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:41:17.459 [DEBUG] [Thread-14301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:41:17.460 [DEBUG] [Thread-14301] [transport.py] [_log()] client lang: <none>
2025-11-12T10:41:17.460 [DEBUG] [Thread-14301] [transport.py] [_log()] server lang: <none>
2025-11-12T10:41:17.460 [DEBUG] [Thread-14301] [transport.py] [_log()] kex follows: False
2025-11-12T10:41:17.460 [DEBUG] [Thread-14301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:41:17.460 [DEBUG] [Thread-14301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:41:17.460 [DEBUG] [Thread-14301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:41:17.460 [DEBUG] [Thread-14301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:41:17.461 [DEBUG] [Thread-14301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:41:17.461 [DEBUG] [Thread-14301] [transport.py] [_log()] Compression: none
2025-11-12T10:41:17.461 [DEBUG] [Thread-14301] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:41:17.516 [DEBUG] [Thread-14301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:41:17.517 [DEBUG] [Thread-14301] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:41:17.517 [DEBUG] [Thread-14301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:41:17.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:41:17.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:41:17.572 [DEBUG] [Thread-14301] [transport.py] [_log()] userauth is OK
2025-11-12T10:41:17.573 [DEBUG] [Thread-14301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:41:17.573 [DEBUG] [Thread-14301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:41:17.573 [DEBUG] [Thread-14301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:41:17.573 [DEBUG] [Thread-14301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:41:17.591 [INFO] [Thread-14301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:41:17.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:41:17.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:41:18.438 [DEBUG] [Thread-14301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:41:18.438 [DEBUG] [Thread-14301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:41:18.485 [DEBUG] [Thread-14301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:41:18.485 [DEBUG] [Thread-14301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:41:18.495 [DEBUG] [Thread-14301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:41:18.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:41:18.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:41: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-11-12T10:41:18.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:41:18.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:41:18.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:41:18.532 [DEBUG] [Thread-14301] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:41:27.967 [DEBUG] [Thread-14303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:41:31.449 [DEBUG] [Thread-14304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:41:46.508 [DEBUG] [Thread-14305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:41:48.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:41:48.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:41:48.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:41:49.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 41, 35), 31.25, 12.24, 0.0, 21.9, 25.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:41:49.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:41:35
2025-11-12T10:41:49.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:41:49.466 [DEBUG] [Thread-14306] [transport.py] [_log()] starting thread (client mode): 0x17346f20
2025-11-12T10:41:49.466 [DEBUG] [Thread-14306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:41:49.485 [DEBUG] [Thread-14306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:41:49.485 [INFO] [Thread-14306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] client lang: <none>
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] server lang: <none>
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] kex follows: False
2025-11-12T10:41:49.488 [DEBUG] [Thread-14306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:41:49.489 [DEBUG] [Thread-14306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:41:49.489 [DEBUG] [Thread-14306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:41:49.489 [DEBUG] [Thread-14306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:41:49.489 [DEBUG] [Thread-14306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:41:49.489 [DEBUG] [Thread-14306] [transport.py] [_log()] Compression: none
2025-11-12T10:41:49.489 [DEBUG] [Thread-14306] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:41:49.503 [DEBUG] [Thread-14306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:41:49.504 [DEBUG] [Thread-14306] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:41:49.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:41:49.505 [DEBUG] [Thread-14306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:41:49.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:41:49.508 [DEBUG] [Thread-14306] [transport.py] [_log()] userauth is OK
2025-11-12T10:41:49.508 [DEBUG] [Thread-14306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:41:49.509 [DEBUG] [Thread-14306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:41:49.509 [DEBUG] [Thread-14306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:41:49.509 [DEBUG] [Thread-14306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:41:49.533 [INFO] [Thread-14306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:41:49.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:41:50.126 [DEBUG] [Thread-14306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:41:50.126 [DEBUG] [Thread-14306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:41:50.126 [DEBUG] [Thread-14306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:41:50.166 [DEBUG] [Thread-14306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:41:50.167 [DEBUG] [Thread-14306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:41:50.170 [DEBUG] [Thread-14306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:41:50.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:41:50.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:41:50.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:41:50.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:41:50.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:41:50.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:41:50.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:41:50.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:41:50.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:41:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.362242 -999.00  +24.70  21.95     18   -0.80 1 1 1 1 1   888    0 28.50 178.61 ----- 24.1 21.9 307.6 30.1 30.8 -26.5 30.1 -24.5 28.6 -24.9 29.6 -24.7
2025-11-12T10:41:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:41:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:41:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.362242
2025-11-12T10:41:50.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:41:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:41:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:41:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:41:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:41:50.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:41:35', tmtdew=31.25, humidity=12.24, cloud=0.0, wind=21.9, temperature=25.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:41:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:41:50.191 [DEBUG] [Thread-14306] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:41:50.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:41:50.287 [DEBUG] [Thread-14309] [transport.py] [_log()] starting thread (client mode): 0x14923010
2025-11-12T10:41:50.288 [DEBUG] [Thread-14309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:41:50.302 [DEBUG] [Thread-14309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:41:50.302 [INFO] [Thread-14309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:41:50.310 [DEBUG] [Thread-14309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:41:50.310 [DEBUG] [Thread-14309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:41:50.310 [DEBUG] [Thread-14309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:41:50.310 [DEBUG] [Thread-14309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:41:50.310 [DEBUG] [Thread-14309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:41:50.310 [DEBUG] [Thread-14309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:41:50.310 [DEBUG] [Thread-14309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] client lang: <none>
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] server lang: <none>
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] kex follows: False
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] Compression: none
2025-11-12T10:41:50.311 [DEBUG] [Thread-14309] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:41:50.369 [DEBUG] [Thread-14309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:41:50.369 [DEBUG] [Thread-14309] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:41:50.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:41:50.370 [DEBUG] [Thread-14309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:41:50.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:41:50.425 [DEBUG] [Thread-14309] [transport.py] [_log()] userauth is OK
2025-11-12T10:41:50.425 [DEBUG] [Thread-14309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:41:50.425 [DEBUG] [Thread-14309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:41:50.425 [DEBUG] [Thread-14309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:41:50.425 [DEBUG] [Thread-14309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:41:50.444 [INFO] [Thread-14309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:41:50.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:41:50.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:41:51.308 [DEBUG] [Thread-14309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:41:51.308 [DEBUG] [Thread-14309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:41:51.355 [DEBUG] [Thread-14309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:41:51.356 [DEBUG] [Thread-14309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:41:51.366 [DEBUG] [Thread-14309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:41:51.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:41:51.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-11-12T10:41:51.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:41:51.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:41:51.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:41:51.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:41:51.407 [DEBUG] [Thread-14309] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:41:55.557 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:41:55.558 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:42:01.544 [DEBUG] [Thread-14311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:42:16.593 [DEBUG] [Thread-14312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:42:21.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:42:21.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:42:21.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-11-12T10:42:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 42, 7), 31.37, 12.14, 0.0, 20.4, 25.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:42:22.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:42:07
2025-11-12T10:42:22.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:42:22.373 [DEBUG] [Thread-14313] [transport.py] [_log()] starting thread (client mode): 0x173eb220
2025-11-12T10:42:22.374 [DEBUG] [Thread-14313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:42:22.393 [DEBUG] [Thread-14313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:42:22.393 [INFO] [Thread-14313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:42:22.396 [DEBUG] [Thread-14313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:42:22.396 [DEBUG] [Thread-14313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:42:22.396 [DEBUG] [Thread-14313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:42:22.396 [DEBUG] [Thread-14313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:42:22.396 [DEBUG] [Thread-14313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:42:22.396 [DEBUG] [Thread-14313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:42:22.396 [DEBUG] [Thread-14313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:42:22.396 [DEBUG] [Thread-14313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] client lang: <none>
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] server lang: <none>
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] kex follows: False
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] Compression: none
2025-11-12T10:42:22.397 [DEBUG] [Thread-14313] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:42:22.415 [DEBUG] [Thread-14313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:42:22.415 [DEBUG] [Thread-14313] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:42:22.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:42:22.416 [DEBUG] [Thread-14313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:42:22.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:42:22.416 [DEBUG] [Thread-14313] [transport.py] [_log()] userauth is OK
2025-11-12T10:42:22.417 [DEBUG] [Thread-14313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:42:22.417 [DEBUG] [Thread-14313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:42:22.417 [DEBUG] [Thread-14313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:42:22.417 [DEBUG] [Thread-14313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:42:22.434 [INFO] [Thread-14313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:42:22.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:42:23.041 [DEBUG] [Thread-14313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:42:23.042 [DEBUG] [Thread-14313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:42:23.042 [DEBUG] [Thread-14313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:42:23.083 [DEBUG] [Thread-14313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:42:23.083 [DEBUG] [Thread-14313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:42:23.085 [DEBUG] [Thread-14313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:42:23.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:42:23.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:42:23.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:42:23.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:42:23.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:42:23.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:42:23.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:42:23.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:42:23.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:42:23.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.362242 -999.00  +24.70  21.95     18   -0.80 1 1 1 1 1   888    0 28.50 178.61 ----- 24.1 21.9 307.6 30.1 30.8 -26.5 30.1 -24.5 28.6 -24.9 29.6 -24.7
2025-11-12T10:42:23.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:42:23.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:42:23.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.362242
2025-11-12T10:42:23.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:42:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:42:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:42:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:42:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:42:23.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:42:07', tmtdew=31.37, humidity=12.14, cloud=0.0, wind=20.4, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:41:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:42:23.111 [DEBUG] [Thread-14313] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:42:23.194 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:42:23.206 [DEBUG] [Thread-14316] [transport.py] [_log()] starting thread (client mode): 0x1493c430
2025-11-12T10:42:23.206 [DEBUG] [Thread-14316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:42:23.221 [DEBUG] [Thread-14316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:42:23.222 [INFO] [Thread-14316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:42:23.229 [DEBUG] [Thread-14316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:42:23.229 [DEBUG] [Thread-14316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] client lang: <none>
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] server lang: <none>
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] kex follows: False
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] Compression: none
2025-11-12T10:42:23.230 [DEBUG] [Thread-14316] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:42:23.288 [DEBUG] [Thread-14316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:42:23.289 [DEBUG] [Thread-14316] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:42:23.290 [DEBUG] [Thread-14316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:42:23.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:42:23.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:42:23.345 [DEBUG] [Thread-14316] [transport.py] [_log()] userauth is OK
2025-11-12T10:42:23.345 [DEBUG] [Thread-14316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:42:23.345 [DEBUG] [Thread-14316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:42:23.345 [DEBUG] [Thread-14316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:42:23.345 [DEBUG] [Thread-14316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:42:23.365 [INFO] [Thread-14316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:42: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-11-12T10:42:23.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:42:24.198 [DEBUG] [Thread-14316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:42:24.199 [DEBUG] [Thread-14316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:42:24.246 [DEBUG] [Thread-14316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:42:24.247 [DEBUG] [Thread-14316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:42:24.256 [DEBUG] [Thread-14316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:42:24.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:42:24.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-11-12T10:42:24.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-11-12T10:42:24.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:42:24.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:42:24.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:42:24.294 [DEBUG] [Thread-14316] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:42:28.001 [DEBUG] [Thread-14318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:42:31.630 [DEBUG] [Thread-14319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:42:46.682 [DEBUG] [Thread-14320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:42:54.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:42:54.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:42:54.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-11-12T10:42:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 42, 39), 31.45, 12.18, 0.0, 26.59, 25.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:42:54.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:42:39
2025-11-12T10:42:55.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:42:55.208 [DEBUG] [Thread-14321] [transport.py] [_log()] starting thread (client mode): 0x19ddb940
2025-11-12T10:42:55.208 [DEBUG] [Thread-14321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:42:55.229 [DEBUG] [Thread-14321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:42:55.229 [INFO] [Thread-14321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:42:55.232 [DEBUG] [Thread-14321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] client lang: <none>
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] server lang: <none>
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] kex follows: False
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:42:55.233 [DEBUG] [Thread-14321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:42:55.234 [DEBUG] [Thread-14321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:42:55.234 [DEBUG] [Thread-14321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:42:55.234 [DEBUG] [Thread-14321] [transport.py] [_log()] Compression: none
2025-11-12T10:42:55.234 [DEBUG] [Thread-14321] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:42:55.252 [DEBUG] [Thread-14321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:42:55.253 [DEBUG] [Thread-14321] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:42:55.253 [DEBUG] [Thread-14321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:42:55.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:42:55.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:42:55.256 [DEBUG] [Thread-14321] [transport.py] [_log()] userauth is OK
2025-11-12T10:42:55.256 [DEBUG] [Thread-14321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:42:55.256 [DEBUG] [Thread-14321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:42:55.256 [DEBUG] [Thread-14321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:42:55.256 [DEBUG] [Thread-14321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:42:55.281 [INFO] [Thread-14321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:42:55.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:42:55.699 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:42:55.700 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:42:55.951 [DEBUG] [Thread-14321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:42:55.951 [DEBUG] [Thread-14321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:42:55.951 [DEBUG] [Thread-14321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:42:55.992 [DEBUG] [Thread-14321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:42:55.992 [DEBUG] [Thread-14321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:42:55.995 [DEBUG] [Thread-14321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:42:56.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:42:56.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:42:56.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:42:56.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:42:56.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:42:56.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:42:56.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:42:56.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:42:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:42:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.362589 -999.00  +24.40  27.19     18   -1.20 1 1 1 1 1   888    0 29.15 197.18 ----- 25.8 27.2 292.0 34.3 31.2 -27.0 30.2 -25.4 28.8 -26.7 29.7 -25.0
2025-11-12T10:42:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:42:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:42:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.362589
2025-11-12T10:42:56.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:42:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:42:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:42:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:42:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:42:56.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:42:39', tmtdew=31.45, humidity=12.18, cloud=0.0, wind=26.59, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:42:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:42:56.013 [DEBUG] [Thread-14321] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:42:56.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:43:01.713 [DEBUG] [Thread-14324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:43:16.752 [DEBUG] [Thread-14325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:43:28.035 [DEBUG] [Thread-14326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:43:31.789 [DEBUG] [Thread-14327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:43:46.820 [DEBUG] [Thread-14328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:43:55.841 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:43:55.842 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:44:01.857 [DEBUG] [Thread-14329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:44:16.889 [DEBUG] [Thread-14330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:44:28.085 [DEBUG] [Thread-14331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:44:31.920 [DEBUG] [Thread-14332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:44:46.957 [DEBUG] [Thread-14333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:44:55.984 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:44:55.984 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:45:01.992 [DEBUG] [Thread-14334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:45:11.227 [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-11-12T10:45:17.027 [DEBUG] [Thread-14335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:45:28.130 [DEBUG] [Thread-14336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:45:32.063 [DEBUG] [Thread-14337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:45:41.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:45:41.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:45:41.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:45:41.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 45, 19), 31.09, 12.43, 0.0, 15.16, 25.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:45:41.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:45:19
2025-11-12T10:45:42.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:45:42.182 [DEBUG] [Thread-14338] [transport.py] [_log()] starting thread (client mode): 0x19dda170
2025-11-12T10:45:42.182 [DEBUG] [Thread-14338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:45:42.202 [DEBUG] [Thread-14338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:45:42.202 [INFO] [Thread-14338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] client lang: <none>
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] server lang: <none>
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] kex follows: False
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] Compression: none
2025-11-12T10:45:42.205 [DEBUG] [Thread-14338] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:45:42.222 [DEBUG] [Thread-14338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:45:42.223 [DEBUG] [Thread-14338] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:45:42.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:45:42.224 [DEBUG] [Thread-14338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:45:42.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:45:42.226 [DEBUG] [Thread-14338] [transport.py] [_log()] userauth is OK
2025-11-12T10:45:42.226 [DEBUG] [Thread-14338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:45:42.226 [DEBUG] [Thread-14338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:45:42.227 [DEBUG] [Thread-14338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:45:42.227 [DEBUG] [Thread-14338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:45:42.263 [INFO] [Thread-14338] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:45:42.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:45:42.888 [DEBUG] [Thread-14338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:45:42.888 [DEBUG] [Thread-14338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:45:42.888 [DEBUG] [Thread-14338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:45:42.929 [DEBUG] [Thread-14338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:45:42.929 [DEBUG] [Thread-14338] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:45:42.932 [DEBUG] [Thread-14338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:45:42.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:45:42.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:45:42.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:45:42.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:45:42.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:45:42.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:45:42.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:45:42.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:45:42.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:45:42.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.364672 -999.00  +24.30  21.62     19   -0.60 1 1 1 1 1   888    0 30.86 245.00 ----- 23.0 21.6 296.6 32.9 31.3 -26.1 30.5 -25.3 29.1 -26.9 29.9 -24.2
2025-11-12T10:45:42.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:45:42.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:45:42.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.364672
2025-11-12T10:45:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:45:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:45:42.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:45:42.959 [DEBUG] [Thread-14338] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:45:42.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:45:42.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:45:42.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:45:19', tmtdew=31.09, humidity=12.43, cloud=0.0, wind=15.16, temperature=25.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:45:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:45:43.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:45:43.055 [DEBUG] [Thread-14341] [transport.py] [_log()] starting thread (client mode): 0x19ddb940
2025-11-12T10:45:43.055 [DEBUG] [Thread-14341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:45:43.070 [DEBUG] [Thread-14341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:45:43.070 [INFO] [Thread-14341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:45:43.077 [DEBUG] [Thread-14341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] client lang: <none>
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] server lang: <none>
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] kex follows: False
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:45:43.078 [DEBUG] [Thread-14341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:45:43.079 [DEBUG] [Thread-14341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:45:43.079 [DEBUG] [Thread-14341] [transport.py] [_log()] Compression: none
2025-11-12T10:45:43.079 [DEBUG] [Thread-14341] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:45:43.137 [DEBUG] [Thread-14341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:45:43.138 [DEBUG] [Thread-14341] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:45:43.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:45:43.139 [DEBUG] [Thread-14341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:45:43.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:45:43.192 [DEBUG] [Thread-14341] [transport.py] [_log()] userauth is OK
2025-11-12T10:45:43.193 [DEBUG] [Thread-14341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:45:43.193 [DEBUG] [Thread-14341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:45:43.193 [DEBUG] [Thread-14341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:45:43.193 [DEBUG] [Thread-14341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:45:43.212 [INFO] [Thread-14341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:45:43.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:45:43.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:45:44.042 [DEBUG] [Thread-14341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:45:44.042 [DEBUG] [Thread-14341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:45:44.091 [DEBUG] [Thread-14341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:45:44.091 [DEBUG] [Thread-14341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:45:44.100 [DEBUG] [Thread-14341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:45:44.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:45:44.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-11-12T10:45:44.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-11-12T10:45:44.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:45:44.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:45:44.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:45:44.136 [DEBUG] [Thread-14341] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:45:47.098 [DEBUG] [Thread-14343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:45:56.125 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:45:56.126 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:46:02.148 [DEBUG] [Thread-14344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:46:14.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:46:14.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:46:14.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-11-12T10:46:14.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 45, 51), 30.45, 13.11, 0.0, 23.13, 24.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:46:14.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:45:51
2025-11-12T10:46:14.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:46:15.083 [DEBUG] [Thread-14345] [transport.py] [_log()] starting thread (client mode): 0x19ddb4f0
2025-11-12T10:46:15.083 [DEBUG] [Thread-14345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:46:15.104 [DEBUG] [Thread-14345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:46:15.105 [INFO] [Thread-14345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] client lang: <none>
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] server lang: <none>
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] kex follows: False
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] Compression: none
2025-11-12T10:46:15.108 [DEBUG] [Thread-14345] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:46:15.127 [DEBUG] [Thread-14345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:46:15.127 [DEBUG] [Thread-14345] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:46:15.127 [DEBUG] [Thread-14345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:46:15.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:46:15.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:46:15.129 [DEBUG] [Thread-14345] [transport.py] [_log()] userauth is OK
2025-11-12T10:46:15.129 [DEBUG] [Thread-14345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:46:15.129 [DEBUG] [Thread-14345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:46:15.129 [DEBUG] [Thread-14345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:46:15.129 [DEBUG] [Thread-14345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:46:15.149 [INFO] [Thread-14345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:46:15.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:46:15.804 [DEBUG] [Thread-14345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:46:15.804 [DEBUG] [Thread-14345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:46:15.805 [DEBUG] [Thread-14345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:46:15.844 [DEBUG] [Thread-14345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:46:15.845 [DEBUG] [Thread-14345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:46:15.848 [DEBUG] [Thread-14345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:46:15.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:46:15.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:46:15.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:46:15.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:46:15.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:46:15.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:46:15.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:46:15.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:46:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:46:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.365020 -999.00  +23.90  21.72     19   -1.00 1 1 1 1 1   888    0 30.26 228.14 ----- 18.8 21.7 295.4 27.2 31.2 -26.4 30.4 -24.7 29.0 -24.1 30.0 -24.7
2025-11-12T10:46:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:46:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:46:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.365020
2025-11-12T10:46:15.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:46:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:46:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:46:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:46:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:46:15.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:45:51', tmtdew=30.45, humidity=13.11, cloud=0.0, wind=23.13, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:45:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:46:15.874 [DEBUG] [Thread-14345] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:46: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-11-12T10:46:15.973 [DEBUG] [Thread-14348] [transport.py] [_log()] starting thread (client mode): 0x1739b160
2025-11-12T10:46:15.974 [DEBUG] [Thread-14348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:46:15.988 [DEBUG] [Thread-14348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:46:15.989 [INFO] [Thread-14348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] client lang: <none>
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] server lang: <none>
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] kex follows: False
2025-11-12T10:46:16.000 [DEBUG] [Thread-14348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:46:16.001 [DEBUG] [Thread-14348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:46:16.001 [DEBUG] [Thread-14348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:46:16.001 [DEBUG] [Thread-14348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:46:16.001 [DEBUG] [Thread-14348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:46:16.001 [DEBUG] [Thread-14348] [transport.py] [_log()] Compression: none
2025-11-12T10:46:16.001 [DEBUG] [Thread-14348] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:46:16.056 [DEBUG] [Thread-14348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:46:16.057 [DEBUG] [Thread-14348] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:46:16.057 [DEBUG] [Thread-14348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:46:16.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:46:16.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:46:16.113 [DEBUG] [Thread-14348] [transport.py] [_log()] userauth is OK
2025-11-12T10:46:16.113 [DEBUG] [Thread-14348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:46:16.114 [DEBUG] [Thread-14348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:46:16.114 [DEBUG] [Thread-14348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:46:16.114 [DEBUG] [Thread-14348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:46:16.133 [INFO] [Thread-14348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:46: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-11-12T10:46:16.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:46:16.963 [DEBUG] [Thread-14348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:46:16.964 [DEBUG] [Thread-14348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:46:17.012 [DEBUG] [Thread-14348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:46:17.012 [DEBUG] [Thread-14348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:46:17.021 [DEBUG] [Thread-14348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:46:17.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:46:17.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-11-12T10:46: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') -> 00000000
2025-11-12T10:46:17.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:46:17.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:46:17.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:46:17.057 [DEBUG] [Thread-14348] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:46:17.182 [DEBUG] [Thread-14350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:46:28.164 [DEBUG] [Thread-14351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:46:32.245 [DEBUG] [Thread-14352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:46:47.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:46:47.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:46:47.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-11-12T10:46:47.281 [DEBUG] [Thread-14353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:46:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 46, 23), 30.32, 13.24, 0.0, 21.62, 24.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:46:47.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:46:23
2025-11-12T10:46:47.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:46:48.003 [DEBUG] [Thread-14354] [transport.py] [_log()] starting thread (client mode): 0x173620b0
2025-11-12T10:46:48.003 [DEBUG] [Thread-14354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:46:48.022 [DEBUG] [Thread-14354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:46:48.023 [INFO] [Thread-14354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] client lang: <none>
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] server lang: <none>
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] kex follows: False
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] Compression: none
2025-11-12T10:46:48.026 [DEBUG] [Thread-14354] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:46:48.041 [DEBUG] [Thread-14354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:46:48.041 [DEBUG] [Thread-14354] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:46:48.041 [DEBUG] [Thread-14354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:46:48.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:46:48.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:46:48.042 [DEBUG] [Thread-14354] [transport.py] [_log()] userauth is OK
2025-11-12T10:46:48.042 [DEBUG] [Thread-14354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:46:48.042 [DEBUG] [Thread-14354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:46:48.042 [DEBUG] [Thread-14354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:46:48.042 [DEBUG] [Thread-14354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:46:48.062 [INFO] [Thread-14354] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:46:48.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:46:48.700 [DEBUG] [Thread-14354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:46:48.700 [DEBUG] [Thread-14354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:46:48.700 [DEBUG] [Thread-14354] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:46:48.741 [DEBUG] [Thread-14354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:46:48.741 [DEBUG] [Thread-14354] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:46:48.743 [DEBUG] [Thread-14354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:46:48.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:46:48.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:46:48.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:46:48.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:46:48.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:46:48.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:46:48.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.365367 -999.00  +24.30  21.97     19   -0.70 1 1 1 1 1   888    0 30.87 237.17 ----- 23.5 22.0 273.0 33.0 31.2 -26.5 30.4 -24.7 28.8 -25.2 29.9 -24.5
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.365367
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:46:48.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:46:23', tmtdew=30.32, humidity=13.24, cloud=0.0, wind=21.62, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:46:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:46:48.764 [DEBUG] [Thread-14354] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:46:48.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:46:48.849 [DEBUG] [Thread-14357] [transport.py] [_log()] starting thread (client mode): 0x17398610
2025-11-12T10:46:48.849 [DEBUG] [Thread-14357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:46:48.863 [DEBUG] [Thread-14357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:46:48.863 [INFO] [Thread-14357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] client lang: <none>
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] server lang: <none>
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] kex follows: False
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] Compression: none
2025-11-12T10:46:48.871 [DEBUG] [Thread-14357] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:46:48.928 [DEBUG] [Thread-14357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:46:48.928 [DEBUG] [Thread-14357] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:46:48.928 [DEBUG] [Thread-14357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:46:48.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:46:48.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:46:48.984 [DEBUG] [Thread-14357] [transport.py] [_log()] userauth is OK
2025-11-12T10:46:48.984 [DEBUG] [Thread-14357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:46:48.984 [DEBUG] [Thread-14357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:46:48.984 [DEBUG] [Thread-14357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:46:48.984 [DEBUG] [Thread-14357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:46:48.999 [INFO] [Thread-14357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:46:48.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:46:48.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:46:49.901 [DEBUG] [Thread-14357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:46:49.901 [DEBUG] [Thread-14357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:46:49.949 [DEBUG] [Thread-14357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:46:49.949 [DEBUG] [Thread-14357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:46:49.957 [DEBUG] [Thread-14357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:46:49.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:46:49.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-11-12T10:46:49.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-11-12T10:46:49.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:46:49.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:46:49.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:46:49.988 [DEBUG] [Thread-14357] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:46:56.268 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:46:56.269 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:47:02.313 [DEBUG] [Thread-14359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:47:17.366 [DEBUG] [Thread-14360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:47:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:47:20.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:47:20.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-11-12T10:47:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 46, 55), 29.96, 13.37, 0.0, 33.08, 24.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:47:20.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:46:55
2025-11-12T10:47:20.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:47:20.927 [DEBUG] [Thread-14361] [transport.py] [_log()] starting thread (client mode): 0x19ddb9d0
2025-11-12T10:47:20.928 [DEBUG] [Thread-14361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:47:20.947 [DEBUG] [Thread-14361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:47:20.948 [INFO] [Thread-14361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] client lang: <none>
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] server lang: <none>
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] kex follows: False
2025-11-12T10:47:20.951 [DEBUG] [Thread-14361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:47:20.952 [DEBUG] [Thread-14361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:47:20.952 [DEBUG] [Thread-14361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:47:20.952 [DEBUG] [Thread-14361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:47:20.952 [DEBUG] [Thread-14361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:47:20.952 [DEBUG] [Thread-14361] [transport.py] [_log()] Compression: none
2025-11-12T10:47:20.952 [DEBUG] [Thread-14361] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:47:20.969 [DEBUG] [Thread-14361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:47:20.970 [DEBUG] [Thread-14361] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:47:20.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:47:20.971 [DEBUG] [Thread-14361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:47:20.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:47:20.974 [DEBUG] [Thread-14361] [transport.py] [_log()] userauth is OK
2025-11-12T10:47:20.974 [DEBUG] [Thread-14361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:47:20.974 [DEBUG] [Thread-14361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:47:20.975 [DEBUG] [Thread-14361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:47:20.975 [DEBUG] [Thread-14361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:47:21.003 [INFO] [Thread-14361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:47:21.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:47:21.668 [DEBUG] [Thread-14361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:47:21.669 [DEBUG] [Thread-14361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:47:21.669 [DEBUG] [Thread-14361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:47:21.710 [DEBUG] [Thread-14361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:47:21.710 [DEBUG] [Thread-14361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:47:21.713 [DEBUG] [Thread-14361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:47:21.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:47:21.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:47:21.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:47:21.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:47:21.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:47:21.736 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:47:21.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:47:21.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:47:21.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:47:21.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.365714 -999.00  +24.10  27.55     19   -0.80 1 1 1 1 1   888    0 29.66 199.64 ----- 31.3 27.6 275.4 35.4 31.0 -29.1 30.3 -25.3 28.6 -24.7 29.8 -26.4
2025-11-12T10:47:21.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:47:21.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:47:21.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.365714
2025-11-12T10:47:21.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:47:21.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:47:21.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:47:21.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:47:21.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:47:21.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:46:55', tmtdew=29.96, humidity=13.37, cloud=0.0, wind=33.08, temperature=24.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:46:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:47:21.739 [DEBUG] [Thread-14361] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:47:21.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:47:21.846 [DEBUG] [Thread-14364] [transport.py] [_log()] starting thread (client mode): 0x19dd95d0
2025-11-12T10:47:21.847 [DEBUG] [Thread-14364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:47:21.861 [DEBUG] [Thread-14364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:47:21.861 [INFO] [Thread-14364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] client lang: <none>
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] server lang: <none>
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] kex follows: False
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:47:21.869 [DEBUG] [Thread-14364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:47:21.870 [DEBUG] [Thread-14364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:47:21.870 [DEBUG] [Thread-14364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:47:21.870 [DEBUG] [Thread-14364] [transport.py] [_log()] Compression: none
2025-11-12T10:47:21.870 [DEBUG] [Thread-14364] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:47:21.928 [DEBUG] [Thread-14364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:47:21.929 [DEBUG] [Thread-14364] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:47:21.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:47:21.930 [DEBUG] [Thread-14364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:47:21.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:47:21.985 [DEBUG] [Thread-14364] [transport.py] [_log()] userauth is OK
2025-11-12T10:47:21.985 [DEBUG] [Thread-14364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:47:21.986 [DEBUG] [Thread-14364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:47:21.986 [DEBUG] [Thread-14364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:47:21.986 [DEBUG] [Thread-14364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:47:22.004 [INFO] [Thread-14364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:47:22.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:47:22.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:47:22.841 [DEBUG] [Thread-14364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:47:22.842 [DEBUG] [Thread-14364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:47:22.893 [DEBUG] [Thread-14364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:47:22.893 [DEBUG] [Thread-14364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:47:22.904 [DEBUG] [Thread-14364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:47:22.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:47:22.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-11-12T10:47:22.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-11-12T10:47:22.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:47:22.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:47:22.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:47:22.943 [DEBUG] [Thread-14364] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:47:28.192 [DEBUG] [Thread-14366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:47:32.398 [DEBUG] [Thread-14367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:47:47.453 [DEBUG] [Thread-14368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:47:52.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:47:52.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:47:52.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-11-12T10:47:53.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 47, 27), 30.26, 13.14, 0.0, 29.94, 24.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:47:53.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:47:27
2025-11-12T10:47:53.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:47:53.870 [DEBUG] [Thread-14369] [transport.py] [_log()] starting thread (client mode): 0x1737c4c0
2025-11-12T10:47:53.871 [DEBUG] [Thread-14369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:47:53.890 [DEBUG] [Thread-14369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:47:53.890 [INFO] [Thread-14369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] client lang: <none>
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] server lang: <none>
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] kex follows: False
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] Compression: none
2025-11-12T10:47:53.894 [DEBUG] [Thread-14369] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:47:53.909 [DEBUG] [Thread-14369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:47:53.910 [DEBUG] [Thread-14369] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:47:53.910 [DEBUG] [Thread-14369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:47:53.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:47:53.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:47:53.912 [DEBUG] [Thread-14369] [transport.py] [_log()] userauth is OK
2025-11-12T10:47:53.913 [DEBUG] [Thread-14369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:47:53.913 [DEBUG] [Thread-14369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:47:53.913 [DEBUG] [Thread-14369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:47:53.913 [DEBUG] [Thread-14369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:47:53.937 [INFO] [Thread-14369] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:47:53.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:47:54.578 [DEBUG] [Thread-14369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:47:54.579 [DEBUG] [Thread-14369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:47:54.579 [DEBUG] [Thread-14369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:47:54.620 [DEBUG] [Thread-14369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:47:54.620 [DEBUG] [Thread-14369] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:47:54.623 [DEBUG] [Thread-14369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:47:54.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:47:54.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:47:54.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:47:54.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:47:54.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:47:54.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:47:54.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:47:54.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:47:54.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:47:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.366062 -999.00  +24.20  22.89     19   -0.60 1 1 1 1 1   888    0 29.91 183.59 ----- 26.0 22.9 284.6 28.6 30.8 -27.1 30.1 -24.9 28.6 -26.8 29.6 -24.8
2025-11-12T10:47:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:47:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:47:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.366062
2025-11-12T10:47:54.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:47:54.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:47:54.651 [DEBUG] [Thread-14369] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:47:54.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:47:54.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:47:54.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:47:54.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:47:27', tmtdew=30.26, humidity=13.14, cloud=0.0, wind=29.94, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:47:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:47:54.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:47:54.747 [DEBUG] [Thread-14372] [transport.py] [_log()] starting thread (client mode): 0x19dda500
2025-11-12T10:47:54.748 [DEBUG] [Thread-14372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:47:54.762 [DEBUG] [Thread-14372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:47:54.762 [INFO] [Thread-14372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:47:54.770 [DEBUG] [Thread-14372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:47:54.770 [DEBUG] [Thread-14372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:47:54.770 [DEBUG] [Thread-14372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:47:54.770 [DEBUG] [Thread-14372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:47:54.770 [DEBUG] [Thread-14372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] client lang: <none>
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] server lang: <none>
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] kex follows: False
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] Compression: none
2025-11-12T10:47:54.771 [DEBUG] [Thread-14372] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:47:54.829 [DEBUG] [Thread-14372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:47:54.829 [DEBUG] [Thread-14372] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:47:54.830 [DEBUG] [Thread-14372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:47:54.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:47:54.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:47:54.885 [DEBUG] [Thread-14372] [transport.py] [_log()] userauth is OK
2025-11-12T10:47:54.885 [DEBUG] [Thread-14372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:47:54.885 [DEBUG] [Thread-14372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:47:54.885 [DEBUG] [Thread-14372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:47:54.885 [DEBUG] [Thread-14372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:47:54.904 [INFO] [Thread-14372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:47:54.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:47:54.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:47:55.726 [DEBUG] [Thread-14372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:47:55.726 [DEBUG] [Thread-14372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:47:55.774 [DEBUG] [Thread-14372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:47:55.774 [DEBUG] [Thread-14372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:47:55.783 [DEBUG] [Thread-14372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:47:55.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:47:55.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:47:55.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:47:55.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:47:55.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:47:55.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:47:55.817 [DEBUG] [Thread-14372] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:47:56.410 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:47:56.411 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:48:02.488 [DEBUG] [Thread-14374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:48:17.536 [DEBUG] [Thread-14375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:48:25.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:48:25.840 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:48:25.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-11-12T10:48:26.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 47, 59), 30.27, 13.04, 0.0, 25.66, 24.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:48:26.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:47:59
2025-11-12T10:48:26.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:48:26.766 [DEBUG] [Thread-14376] [transport.py] [_log()] starting thread (client mode): 0x19ddbb50
2025-11-12T10:48:26.766 [DEBUG] [Thread-14376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:48:26.785 [DEBUG] [Thread-14376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:48:26.786 [INFO] [Thread-14376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:48:26.789 [DEBUG] [Thread-14376] [transport.py] [_log()] client lang: <none>
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] server lang: <none>
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] kex follows: False
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] Compression: none
2025-11-12T10:48:26.790 [DEBUG] [Thread-14376] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:48:26.808 [DEBUG] [Thread-14376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:48:26.808 [DEBUG] [Thread-14376] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:48:26.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:48:26.810 [DEBUG] [Thread-14376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:48:26.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:48:26.812 [DEBUG] [Thread-14376] [transport.py] [_log()] userauth is OK
2025-11-12T10:48:26.812 [DEBUG] [Thread-14376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:48:26.812 [DEBUG] [Thread-14376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:48:26.812 [DEBUG] [Thread-14376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:48:26.812 [DEBUG] [Thread-14376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:48:26.837 [INFO] [Thread-14376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:48:26.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:48:27.481 [DEBUG] [Thread-14376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:48:27.481 [DEBUG] [Thread-14376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:48:27.482 [DEBUG] [Thread-14376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:48:27.522 [DEBUG] [Thread-14376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:48:27.523 [DEBUG] [Thread-14376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:48:27.525 [DEBUG] [Thread-14376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:48:27.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:48:27.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:48:27.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:48:27.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:48:27.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:48:27.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:48:27.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:48:27.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:48:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:48:27.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.366409 -999.00  +24.10  26.47     19   -0.80 1 1 1 1 1   888    0 29.09 182.86 ----- 33.6 26.5 271.4 42.1 30.7 -28.0 30.0 -25.6 28.3 -25.6 29.5 -25.1
2025-11-12T10:48:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:48:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:48:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.366409
2025-11-12T10:48:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:48:27.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:48:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:48:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:48:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:48:27.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:47:59', tmtdew=30.27, humidity=13.04, cloud=0.0, wind=25.66, temperature=24.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:47:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:48:27.551 [DEBUG] [Thread-14376] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:48: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-11-12T10:48:27.648 [DEBUG] [Thread-14379] [transport.py] [_log()] starting thread (client mode): 0x1493f910
2025-11-12T10:48:27.648 [DEBUG] [Thread-14379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:48:27.664 [DEBUG] [Thread-14379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:48:27.664 [INFO] [Thread-14379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:48:27.671 [DEBUG] [Thread-14379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:48:27.671 [DEBUG] [Thread-14379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:48:27.671 [DEBUG] [Thread-14379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] client lang: <none>
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] server lang: <none>
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] kex follows: False
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:48:27.672 [DEBUG] [Thread-14379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:48:27.673 [DEBUG] [Thread-14379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:48:27.673 [DEBUG] [Thread-14379] [transport.py] [_log()] Compression: none
2025-11-12T10:48:27.673 [DEBUG] [Thread-14379] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:48:27.728 [DEBUG] [Thread-14379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:48:27.728 [DEBUG] [Thread-14379] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:48:27.728 [DEBUG] [Thread-14379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:48:27.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:48:27.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:48:27.785 [DEBUG] [Thread-14379] [transport.py] [_log()] userauth is OK
2025-11-12T10:48:27.785 [DEBUG] [Thread-14379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:48:27.785 [DEBUG] [Thread-14379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:48:27.785 [DEBUG] [Thread-14379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:48:27.785 [DEBUG] [Thread-14379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:48:27.803 [INFO] [Thread-14379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:48:27.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:48:27.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:48:28.225 [DEBUG] [Thread-14381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:48:28.690 [DEBUG] [Thread-14379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:48:28.690 [DEBUG] [Thread-14379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:48:28.738 [DEBUG] [Thread-14379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:48:28.738 [DEBUG] [Thread-14379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:48:28.747 [DEBUG] [Thread-14379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:48:28.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:48:28.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-11-12T10:48:28.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-11-12T10:48:28.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:48:28.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:48:28.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:48:28.780 [DEBUG] [Thread-14379] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:48:32.572 [DEBUG] [Thread-14382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:48:47.611 [DEBUG] [Thread-14383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:48:56.567 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:48:56.568 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:48:58.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:48:58.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:48:58.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-11-12T10:48:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 48, 31), 30.25, 13.08, 0.0, 32.61, 24.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:48:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:48:31
2025-11-12T10:48:59.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:48:59.725 [DEBUG] [Thread-14384] [transport.py] [_log()] starting thread (client mode): 0x1493ef20
2025-11-12T10:48:59.726 [DEBUG] [Thread-14384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:48:59.745 [DEBUG] [Thread-14384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:48:59.746 [INFO] [Thread-14384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:48:59.749 [DEBUG] [Thread-14384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:48:59.749 [DEBUG] [Thread-14384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:48:59.749 [DEBUG] [Thread-14384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:48:59.749 [DEBUG] [Thread-14384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:48:59.749 [DEBUG] [Thread-14384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] client lang: <none>
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] server lang: <none>
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] kex follows: False
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] Compression: none
2025-11-12T10:48:59.750 [DEBUG] [Thread-14384] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:48:59.767 [DEBUG] [Thread-14384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:48:59.768 [DEBUG] [Thread-14384] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:48:59.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:48:59.769 [DEBUG] [Thread-14384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:48:59.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:48:59.771 [DEBUG] [Thread-14384] [transport.py] [_log()] userauth is OK
2025-11-12T10:48:59.771 [DEBUG] [Thread-14384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:48:59.772 [DEBUG] [Thread-14384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:48:59.772 [DEBUG] [Thread-14384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:48:59.772 [DEBUG] [Thread-14384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:48:59.798 [INFO] [Thread-14384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:48:59.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:49:00.423 [DEBUG] [Thread-14384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:49:00.423 [DEBUG] [Thread-14384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:49:00.424 [DEBUG] [Thread-14384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:49:00.465 [DEBUG] [Thread-14384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:49:00.465 [DEBUG] [Thread-14384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:49:00.469 [DEBUG] [Thread-14384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:49:00.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:49:00.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:49:00.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:49:00.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:49:00.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:49:00.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:49:00.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:49:00.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:49:00.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:49:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.366756 -999.00  +23.80  28.04     19   -0.70 1 1 1 1 1   888    0 28.73 178.14 ----- 24.9 28.0 275.8 39.5 30.4 -29.4 29.8 -26.2 28.1 -28.3 29.2 -26.7
2025-11-12T10:49:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:49:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:49:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.366756
2025-11-12T10:49:00.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:49:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:49:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:49:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:49:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:49:00.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:48:31', tmtdew=30.25, humidity=13.08, cloud=0.0, wind=32.61, temperature=24.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:48:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:49:00.497 [DEBUG] [Thread-14384] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:49:00.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:49:00.593 [DEBUG] [Thread-14387] [transport.py] [_log()] starting thread (client mode): 0x149825c0
2025-11-12T10:49:00.593 [DEBUG] [Thread-14387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:49:00.608 [DEBUG] [Thread-14387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:49:00.608 [INFO] [Thread-14387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:49:00.616 [DEBUG] [Thread-14387] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:49:00.616 [DEBUG] [Thread-14387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:49:00.616 [DEBUG] [Thread-14387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] client lang: <none>
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] server lang: <none>
2025-11-12T10:49:00.617 [DEBUG] [Thread-14387] [transport.py] [_log()] kex follows: False
2025-11-12T10:49:00.618 [DEBUG] [Thread-14387] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:49:00.618 [DEBUG] [Thread-14387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:49:00.618 [DEBUG] [Thread-14387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:49:00.618 [DEBUG] [Thread-14387] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:49:00.618 [DEBUG] [Thread-14387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:49:00.618 [DEBUG] [Thread-14387] [transport.py] [_log()] Compression: none
2025-11-12T10:49:00.618 [DEBUG] [Thread-14387] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:49:00.677 [DEBUG] [Thread-14387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:49:00.678 [DEBUG] [Thread-14387] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:49:00.678 [DEBUG] [Thread-14387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:49:00.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:49:00.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:49:00.733 [DEBUG] [Thread-14387] [transport.py] [_log()] userauth is OK
2025-11-12T10:49:00.734 [DEBUG] [Thread-14387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:49:00.734 [DEBUG] [Thread-14387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:49:00.734 [DEBUG] [Thread-14387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:49:00.734 [DEBUG] [Thread-14387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:49:00.754 [INFO] [Thread-14387] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:49:00.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:49:00.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:49:01.605 [DEBUG] [Thread-14387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:49:01.606 [DEBUG] [Thread-14387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:49:01.654 [DEBUG] [Thread-14387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:49:01.654 [DEBUG] [Thread-14387] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:49:01.663 [DEBUG] [Thread-14387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:49:01.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:49:01.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-11-12T10:49:01.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:49:01.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:49:01.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:49:01.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:49:01.701 [DEBUG] [Thread-14387] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:49:02.644 [DEBUG] [Thread-14389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:49:17.699 [DEBUG] [Thread-14390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:49:28.258 [DEBUG] [Thread-14391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:49:31.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:49:31.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:49:31.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-11-12T10:49:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 49, 3), 30.03, 13.29, 0.0, 27.77, 24.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:49:32.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:49:03
2025-11-12T10:49:32.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:49:32.651 [DEBUG] [Thread-14392] [transport.py] [_log()] starting thread (client mode): 0x14982080
2025-11-12T10:49:32.651 [DEBUG] [Thread-14392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:49:32.671 [DEBUG] [Thread-14392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:49:32.671 [INFO] [Thread-14392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:49:32.674 [DEBUG] [Thread-14392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:49:32.674 [DEBUG] [Thread-14392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:49:32.674 [DEBUG] [Thread-14392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:49:32.674 [DEBUG] [Thread-14392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] client lang: <none>
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] server lang: <none>
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] kex follows: False
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] Compression: none
2025-11-12T10:49:32.675 [DEBUG] [Thread-14392] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:49:32.692 [DEBUG] [Thread-14392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:49:32.692 [DEBUG] [Thread-14392] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:49:32.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:49:32.693 [DEBUG] [Thread-14392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:49:32.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:49:32.732 [DEBUG] [Thread-14394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:49:32.736 [DEBUG] [Thread-14392] [transport.py] [_log()] userauth is OK
2025-11-12T10:49:32.736 [DEBUG] [Thread-14392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:49:32.737 [DEBUG] [Thread-14392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:49:32.737 [DEBUG] [Thread-14392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:49:32.737 [DEBUG] [Thread-14392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:49:32.771 [INFO] [Thread-14392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:49:32.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:49:33.412 [DEBUG] [Thread-14392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:49:33.412 [DEBUG] [Thread-14392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:49:33.413 [DEBUG] [Thread-14392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:49:33.454 [DEBUG] [Thread-14392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:49:33.454 [DEBUG] [Thread-14392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:49:33.457 [DEBUG] [Thread-14392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:49:33.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:49:33.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:49:33.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:49:33.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:49:33.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:49:33.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:49:33.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:49:33.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:49:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:49:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.367450 -999.00  +23.70  19.06     20   -0.30 1 1 1 1 1   888    0 29.02 171.23 ----- 20.2 19.1 298.9 25.4 30.5 -25.4 29.7 -24.9 -999.0 -999.0 29.1 -23.6
2025-11-12T10:49:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:49:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:49:33.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.367450
2025-11-12T10:49:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:49:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:49:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:49:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:49:33.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:49:33.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:49:03', tmtdew=30.03, humidity=13.29, cloud=0.0, wind=27.77, temperature=24.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:49:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:49:33.483 [DEBUG] [Thread-14392] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:49:33.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:49:33.569 [DEBUG] [Thread-14396] [transport.py] [_log()] starting thread (client mode): 0x14983850
2025-11-12T10:49:33.569 [DEBUG] [Thread-14396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:49:33.584 [DEBUG] [Thread-14396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:49:33.584 [INFO] [Thread-14396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:49:33.591 [DEBUG] [Thread-14396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] client lang: <none>
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] server lang: <none>
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] kex follows: False
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:49:33.592 [DEBUG] [Thread-14396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:49:33.593 [DEBUG] [Thread-14396] [transport.py] [_log()] Compression: none
2025-11-12T10:49:33.593 [DEBUG] [Thread-14396] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:49:33.653 [DEBUG] [Thread-14396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:49:33.654 [DEBUG] [Thread-14396] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:49:33.654 [DEBUG] [Thread-14396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:49:33.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:49:33.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:49:33.709 [DEBUG] [Thread-14396] [transport.py] [_log()] userauth is OK
2025-11-12T10:49:33.709 [DEBUG] [Thread-14396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:49:33.709 [DEBUG] [Thread-14396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:49:33.710 [DEBUG] [Thread-14396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:49:33.710 [DEBUG] [Thread-14396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:49:33.728 [INFO] [Thread-14396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:49: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-11-12T10:49:33.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:49:34.567 [DEBUG] [Thread-14396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:49:34.568 [DEBUG] [Thread-14396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:49:34.615 [DEBUG] [Thread-14396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:49:34.616 [DEBUG] [Thread-14396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:49:34.625 [DEBUG] [Thread-14396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:49:34.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:49:34.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-11-12T10:49:34.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-11-12T10:49:34.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:49:34.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:49:34.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:49:34.662 [DEBUG] [Thread-14396] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:49:47.767 [DEBUG] [Thread-14398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:49:56.709 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:49:56.710 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:50:02.814 [DEBUG] [Thread-14399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:50:04.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:50:04.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:50:04.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-11-12T10:50:05.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 49, 35), 29.72, 13.87, 0.0, 22.06, 25.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:50:05.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:49:35
2025-11-12T10:50:05.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:50:05.645 [DEBUG] [Thread-14400] [transport.py] [_log()] starting thread (client mode): 0x14983790
2025-11-12T10:50:05.645 [DEBUG] [Thread-14400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:50:05.666 [DEBUG] [Thread-14400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:50:05.666 [INFO] [Thread-14400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:50:05.669 [DEBUG] [Thread-14400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:50:05.669 [DEBUG] [Thread-14400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:50:05.669 [DEBUG] [Thread-14400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:50:05.669 [DEBUG] [Thread-14400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] client lang: <none>
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] server lang: <none>
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] kex follows: False
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] Compression: none
2025-11-12T10:50:05.670 [DEBUG] [Thread-14400] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:50:05.685 [DEBUG] [Thread-14400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:50:05.685 [DEBUG] [Thread-14400] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:50:05.685 [DEBUG] [Thread-14400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:50:05.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:50:05.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:50:05.686 [DEBUG] [Thread-14400] [transport.py] [_log()] userauth is OK
2025-11-12T10:50:05.686 [DEBUG] [Thread-14400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:50:05.686 [DEBUG] [Thread-14400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:50:05.686 [DEBUG] [Thread-14400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:50:05.686 [DEBUG] [Thread-14400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:50:05.695 [INFO] [Thread-14400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:50:05.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:50:06.679 [DEBUG] [Thread-14400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:50:06.680 [DEBUG] [Thread-14400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:50:06.680 [DEBUG] [Thread-14400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:50:06.720 [DEBUG] [Thread-14400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:50:06.721 [DEBUG] [Thread-14400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:50:06.724 [DEBUG] [Thread-14400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:50:06.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:50:06.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:50:06.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:50:06.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:50:06.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:50:06.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:50:06.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:50:06.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:50:06.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:50:06.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.367798 -999.00  +23.90  18.81     20   -0.10 1 1 1 1 1   888    0 28.01 142.58 ----- 20.1 18.8 295.2 28.9 30.5 -26.4 29.7 -24.6 28.4 -23.1 29.1 -24.2
2025-11-12T10:50:06.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:50:06.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:50:06.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.367798
2025-11-12T10:50:06.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:50:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:50:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:50:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:50:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:50:06.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:49:35', tmtdew=29.72, humidity=13.87, cloud=0.0, wind=22.06, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:49:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:50:06.750 [DEBUG] [Thread-14400] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:50:06.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:50:06.845 [DEBUG] [Thread-14403] [transport.py] [_log()] starting thread (client mode): 0x1493cd90
2025-11-12T10:50:06.845 [DEBUG] [Thread-14403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:50:06.864 [DEBUG] [Thread-14403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:50:06.864 [INFO] [Thread-14403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:50:06.872 [DEBUG] [Thread-14403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] client lang: <none>
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] server lang: <none>
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] kex follows: False
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] Compression: none
2025-11-12T10:50:06.873 [DEBUG] [Thread-14403] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:50:06.929 [DEBUG] [Thread-14403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:50:06.929 [DEBUG] [Thread-14403] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:50:06.930 [DEBUG] [Thread-14403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:50:06.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:50:06.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:50:06.985 [DEBUG] [Thread-14403] [transport.py] [_log()] userauth is OK
2025-11-12T10:50:06.985 [DEBUG] [Thread-14403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:50:06.985 [DEBUG] [Thread-14403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:50:06.985 [DEBUG] [Thread-14403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:50:06.986 [DEBUG] [Thread-14403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:50:07.004 [INFO] [Thread-14403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:50:07.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:50:07.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:50:07.871 [DEBUG] [Thread-14403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:50:07.871 [DEBUG] [Thread-14403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:50:07.919 [DEBUG] [Thread-14403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:50:07.919 [DEBUG] [Thread-14403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:50:07.927 [DEBUG] [Thread-14403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:50:07.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:50:07.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:50:07.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-11-12T10:50:07.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:50:07.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:50:07.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:50:07.958 [DEBUG] [Thread-14403] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:50:17.844 [DEBUG] [Thread-14405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:50:28.291 [DEBUG] [Thread-14406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:50:32.899 [DEBUG] [Thread-14407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:50:37.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:50:37.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:50:37.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-11-12T10:50:38.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 50, 7), 29.63, 13.94, 0.0, 19.76, 25.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:50:38.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:50:07
2025-11-12T10:50:38.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:50:38.903 [DEBUG] [Thread-14408] [transport.py] [_log()] starting thread (client mode): 0x1493d8a0
2025-11-12T10:50:38.903 [DEBUG] [Thread-14408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:50:38.924 [DEBUG] [Thread-14408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:50:38.924 [INFO] [Thread-14408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] client lang: <none>
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] server lang: <none>
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] kex follows: False
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] Compression: none
2025-11-12T10:50:38.927 [DEBUG] [Thread-14408] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:50:38.942 [DEBUG] [Thread-14408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:50:38.942 [DEBUG] [Thread-14408] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:50:38.942 [DEBUG] [Thread-14408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:50:38.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:50:38.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:50:38.943 [DEBUG] [Thread-14408] [transport.py] [_log()] userauth is OK
2025-11-12T10:50:38.943 [DEBUG] [Thread-14408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:50:38.943 [DEBUG] [Thread-14408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:50:38.943 [DEBUG] [Thread-14408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:50:38.943 [DEBUG] [Thread-14408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:50:38.952 [INFO] [Thread-14408] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:50:38.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:50:39.558 [DEBUG] [Thread-14408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:50:39.558 [DEBUG] [Thread-14408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:50:39.558 [DEBUG] [Thread-14408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:50:39.599 [DEBUG] [Thread-14408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:50:39.599 [DEBUG] [Thread-14408] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:50:39.601 [DEBUG] [Thread-14408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:50:39.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:50:39.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:50:39.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:50:39.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:50:39.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:50:39.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:50:39.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.368144 -999.00  +24.30  21.73     20   +0.20 1 1 1 1 1   888    0 28.16 141.50 ----- 21.0 21.7 274.1 25.7 30.6 -25.0 29.8 -23.8 28.6 -22.6 29.2 -23.6
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.368144
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:50:39.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:50:39.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:50:07', tmtdew=29.63, humidity=13.94, cloud=0.0, wind=19.76, temperature=25.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:50:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:50:39.620 [DEBUG] [Thread-14408] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:50:39.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:50:39.712 [DEBUG] [Thread-14411] [transport.py] [_log()] starting thread (client mode): 0x14982530
2025-11-12T10:50:39.712 [DEBUG] [Thread-14411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:50:39.731 [DEBUG] [Thread-14411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:50:39.731 [INFO] [Thread-14411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:50:39.741 [DEBUG] [Thread-14411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:50:39.741 [DEBUG] [Thread-14411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:50:39.741 [DEBUG] [Thread-14411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:50:39.741 [DEBUG] [Thread-14411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:50:39.741 [DEBUG] [Thread-14411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:50:39.741 [DEBUG] [Thread-14411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] client lang: <none>
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] server lang: <none>
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] kex follows: False
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] Compression: none
2025-11-12T10:50:39.742 [DEBUG] [Thread-14411] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:50:39.795 [DEBUG] [Thread-14411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:50:39.795 [DEBUG] [Thread-14411] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:50:39.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:50:39.795 [DEBUG] [Thread-14411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:50:39.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:50:39.852 [DEBUG] [Thread-14411] [transport.py] [_log()] userauth is OK
2025-11-12T10:50:39.852 [DEBUG] [Thread-14411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:50:39.852 [DEBUG] [Thread-14411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:50:39.852 [DEBUG] [Thread-14411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:50:39.852 [DEBUG] [Thread-14411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:50:39.866 [INFO] [Thread-14411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:50:39.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:50:39.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:50:40.706 [DEBUG] [Thread-14411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:50:40.706 [DEBUG] [Thread-14411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:50:40.754 [DEBUG] [Thread-14411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:50:40.754 [DEBUG] [Thread-14411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:50:40.763 [DEBUG] [Thread-14411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:50:40.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:50:40.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-11-12T10:50:40.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-11-12T10:50:40.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:50:40.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:50:40.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:50:40.795 [DEBUG] [Thread-14411] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:50:47.931 [DEBUG] [Thread-14413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:50:56.852 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:50:56.853 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:51:02.991 [DEBUG] [Thread-14414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:51:10.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:51:10.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:51:10.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-11-12T10:51:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 50, 39), 30.05, 13.52, 0.0, 27.44, 25.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:51:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:50:39
2025-11-12T10:51:11.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:51:11.727 [DEBUG] [Thread-14415] [transport.py] [_log()] starting thread (client mode): 0x149809d0
2025-11-12T10:51:11.727 [DEBUG] [Thread-14415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:51:11.748 [DEBUG] [Thread-14415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:51:11.748 [INFO] [Thread-14415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:51:11.749 [DEBUG] [Thread-14415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:51:11.749 [DEBUG] [Thread-14415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:51:11.749 [DEBUG] [Thread-14415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] client lang: <none>
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] server lang: <none>
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] kex follows: False
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:51:11.750 [DEBUG] [Thread-14415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:51:11.751 [DEBUG] [Thread-14415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:51:11.751 [DEBUG] [Thread-14415] [transport.py] [_log()] Compression: none
2025-11-12T10:51:11.751 [DEBUG] [Thread-14415] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:51:11.768 [DEBUG] [Thread-14415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:51:11.769 [DEBUG] [Thread-14415] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:51:11.769 [DEBUG] [Thread-14415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:51:11.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:51:11.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:51:11.771 [DEBUG] [Thread-14415] [transport.py] [_log()] userauth is OK
2025-11-12T10:51:11.771 [DEBUG] [Thread-14415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:51:11.772 [DEBUG] [Thread-14415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:51:11.772 [DEBUG] [Thread-14415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:51:11.772 [DEBUG] [Thread-14415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:51:11.795 [INFO] [Thread-14415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:51:11.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:51:12.383 [DEBUG] [Thread-14415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:51:12.383 [DEBUG] [Thread-14415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:51:12.383 [DEBUG] [Thread-14415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:51:12.424 [DEBUG] [Thread-14415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:51:12.424 [DEBUG] [Thread-14415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:51:12.426 [DEBUG] [Thread-14415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:51:12.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:51:12.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:51:12.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:51:12.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:51:12.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:51:12.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:51:12.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:51:12.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.368492 -999.00  +24.40  19.76     20   +0.00 1 1 1 1 1   888    0 28.65 131.84 ----- 15.9 19.8 285.6 26.1 30.6 -25.4 29.9 -23.5 28.6 -23.5 29.4 -24.0
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.368492
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:51:12.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:50:39', tmtdew=30.05, humidity=13.52, cloud=0.0, wind=27.44, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:50:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:51:12.444 [DEBUG] [Thread-14415] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:51:12.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:51:12.535 [DEBUG] [Thread-14418] [transport.py] [_log()] starting thread (client mode): 0x1493e950
2025-11-12T10:51:12.535 [DEBUG] [Thread-14418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:51:12.550 [DEBUG] [Thread-14418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:51:12.551 [INFO] [Thread-14418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] client lang: <none>
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] server lang: <none>
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] kex follows: False
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:51:12.558 [DEBUG] [Thread-14418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:51:12.559 [DEBUG] [Thread-14418] [transport.py] [_log()] Compression: none
2025-11-12T10:51:12.559 [DEBUG] [Thread-14418] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:51:12.615 [DEBUG] [Thread-14418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:51:12.616 [DEBUG] [Thread-14418] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:51:12.616 [DEBUG] [Thread-14418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:51:12.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:51:12.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:51:12.672 [DEBUG] [Thread-14418] [transport.py] [_log()] userauth is OK
2025-11-12T10:51:12.672 [DEBUG] [Thread-14418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:51:12.673 [DEBUG] [Thread-14418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:51:12.673 [DEBUG] [Thread-14418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:51:12.673 [DEBUG] [Thread-14418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:51:12.690 [INFO] [Thread-14418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:51:12.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:51:12.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:51:13.586 [DEBUG] [Thread-14418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:51:13.586 [DEBUG] [Thread-14418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:51:13.633 [DEBUG] [Thread-14418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:51:13.633 [DEBUG] [Thread-14418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:51:13.642 [DEBUG] [Thread-14418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:51:13.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:51:13.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:51:13.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-11-12T10:51:13.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:51:13.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:51:13.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:51:13.692 [DEBUG] [Thread-14418] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:51:18.025 [DEBUG] [Thread-14420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:51:28.333 [DEBUG] [Thread-14421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:51:33.071 [DEBUG] [Thread-14422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:51:43.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:51:43.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:51:43.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-11-12T10:51:44.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 51, 11), 30.4, 13.17, 0.0, 24.62, 25.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:51:44.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:51:11
2025-11-12T10:51:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:51:44.689 [DEBUG] [Thread-14423] [transport.py] [_log()] starting thread (client mode): 0x1493f4f0
2025-11-12T10:51:44.689 [DEBUG] [Thread-14423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:51:44.711 [DEBUG] [Thread-14423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:51:44.711 [INFO] [Thread-14423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] client lang: <none>
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] server lang: <none>
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] kex follows: False
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] Compression: none
2025-11-12T10:51:44.714 [DEBUG] [Thread-14423] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:51:44.730 [DEBUG] [Thread-14423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:51:44.730 [DEBUG] [Thread-14423] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:51:44.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:51:44.731 [DEBUG] [Thread-14423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:51:44.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:51:44.731 [DEBUG] [Thread-14423] [transport.py] [_log()] userauth is OK
2025-11-12T10:51:44.731 [DEBUG] [Thread-14423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:51:44.731 [DEBUG] [Thread-14423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:51:44.732 [DEBUG] [Thread-14423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:51:44.732 [DEBUG] [Thread-14423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:51:44.751 [INFO] [Thread-14423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:51:44.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:51:45.357 [DEBUG] [Thread-14423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:51:45.357 [DEBUG] [Thread-14423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:51:45.357 [DEBUG] [Thread-14423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:51:45.398 [DEBUG] [Thread-14423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:51:45.398 [DEBUG] [Thread-14423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:51:45.401 [DEBUG] [Thread-14423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:51:45.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:51:45.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:51:45.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:51:45.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:51:45.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:51:45.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:51:45.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:51:45.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.368839 -999.00  +25.20  19.80     18   -0.20 1 1 1 1 1   888    0 27.81 123.32 ----- 24.6 19.8 300.8 26.2 30.6 -26.0 29.9 -24.6 28.7 -23.7 29.4 -23.5
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.368839
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:51:45.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:51:11', tmtdew=30.4, humidity=13.17, cloud=0.0, wind=24.62, temperature=25.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:51:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:51:45.420 [DEBUG] [Thread-14423] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:51:45.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:51:45.505 [DEBUG] [Thread-14426] [transport.py] [_log()] starting thread (client mode): 0x17361ea0
2025-11-12T10:51:45.505 [DEBUG] [Thread-14426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:51:45.520 [DEBUG] [Thread-14426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:51:45.520 [INFO] [Thread-14426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:51:45.527 [DEBUG] [Thread-14426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] client lang: <none>
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] server lang: <none>
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] kex follows: False
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] Compression: none
2025-11-12T10:51:45.528 [DEBUG] [Thread-14426] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:51:45.583 [DEBUG] [Thread-14426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:51:45.583 [DEBUG] [Thread-14426] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:51:45.584 [DEBUG] [Thread-14426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:51:45.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:51:45.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:51:45.640 [DEBUG] [Thread-14426] [transport.py] [_log()] userauth is OK
2025-11-12T10:51:45.640 [DEBUG] [Thread-14426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:51:45.640 [DEBUG] [Thread-14426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:51:45.640 [DEBUG] [Thread-14426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:51:45.640 [DEBUG] [Thread-14426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:51:45.654 [INFO] [Thread-14426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:51:45.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:51:45.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:51:46.557 [DEBUG] [Thread-14426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:51:46.557 [DEBUG] [Thread-14426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:51:46.605 [DEBUG] [Thread-14426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:51:46.605 [DEBUG] [Thread-14426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:51:46.614 [DEBUG] [Thread-14426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:51:46.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:51:46.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-11-12T10:51:46.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T10:51:46.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:51:46.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:51:46.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:51:46.651 [DEBUG] [Thread-14426] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:51:48.107 [DEBUG] [Thread-14428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:51:56.994 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:51:56.995 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:52:03.153 [DEBUG] [Thread-14429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:52:16.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:52:16.673 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:52:16.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:52:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 51, 43), 29.78, 13.32, 0.0, 23.82, 24.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:52:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:51:43
2025-11-12T10:52:17.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:52:17.662 [DEBUG] [Thread-14430] [transport.py] [_log()] starting thread (client mode): 0x19dd9f00
2025-11-12T10:52:17.662 [DEBUG] [Thread-14430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:52:17.683 [DEBUG] [Thread-14430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:52:17.683 [INFO] [Thread-14430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:52:17.686 [DEBUG] [Thread-14430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] client lang: <none>
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] server lang: <none>
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] kex follows: False
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] Compression: none
2025-11-12T10:52:17.687 [DEBUG] [Thread-14430] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:52:17.702 [DEBUG] [Thread-14430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:52:17.702 [DEBUG] [Thread-14430] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:52:17.702 [DEBUG] [Thread-14430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:52:17.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:52:17.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:52:17.703 [DEBUG] [Thread-14430] [transport.py] [_log()] userauth is OK
2025-11-12T10:52:17.703 [DEBUG] [Thread-14430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:52:17.703 [DEBUG] [Thread-14430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:52:17.703 [DEBUG] [Thread-14430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:52:17.703 [DEBUG] [Thread-14430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:52:17.720 [INFO] [Thread-14430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:52:17.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:52:18.191 [DEBUG] [Thread-14432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:52:18.351 [DEBUG] [Thread-14430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:52:18.351 [DEBUG] [Thread-14430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:52:18.351 [DEBUG] [Thread-14430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:52:18.392 [DEBUG] [Thread-14430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:52:18.392 [DEBUG] [Thread-14430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:52:18.396 [DEBUG] [Thread-14430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:52:18.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:52:18.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:52:18.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:52:18.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:52:18.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:52:18.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:52:18.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:52:18.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:52:18.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:52:18.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.369187 -999.00  +25.00  26.49     18   -0.80 1 1 1 1 1   888    0 27.98 117.84 ----- 27.3 26.5 291.8 37.0 30.6 -28.9 29.9 -24.9 28.6 -23.9 29.5 -25.3
2025-11-12T10:52:18.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:52:18.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:52:18.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.369187
2025-11-12T10:52:18.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:52:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:52:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:52:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:52:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:52:18.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:51:43', tmtdew=29.78, humidity=13.32, cloud=0.0, wind=23.82, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:51:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:52:18.425 [DEBUG] [Thread-14430] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:52:18.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:52:18.521 [DEBUG] [Thread-14434] [transport.py] [_log()] starting thread (client mode): 0x19dd8f10
2025-11-12T10:52:18.521 [DEBUG] [Thread-14434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:52:18.536 [DEBUG] [Thread-14434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:52:18.536 [INFO] [Thread-14434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:52:18.544 [DEBUG] [Thread-14434] [transport.py] [_log()] client lang: <none>
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] server lang: <none>
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] kex follows: False
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] Compression: none
2025-11-12T10:52:18.545 [DEBUG] [Thread-14434] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:52:18.601 [DEBUG] [Thread-14434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:52:18.602 [DEBUG] [Thread-14434] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:52:18.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:52:18.603 [DEBUG] [Thread-14434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:52:18.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:52:18.657 [DEBUG] [Thread-14434] [transport.py] [_log()] userauth is OK
2025-11-12T10:52:18.657 [DEBUG] [Thread-14434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:52:18.657 [DEBUG] [Thread-14434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:52:18.657 [DEBUG] [Thread-14434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:52:18.658 [DEBUG] [Thread-14434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:52:18.678 [INFO] [Thread-14434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:52:18.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:52:18.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:52:19.522 [DEBUG] [Thread-14434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:52:19.522 [DEBUG] [Thread-14434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:52:19.574 [DEBUG] [Thread-14434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:52:19.574 [DEBUG] [Thread-14434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:52:19.587 [DEBUG] [Thread-14434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:52:19.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:52:19.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:52:19.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-11-12T10:52:19.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:52:19.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:52:19.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:52:19.639 [DEBUG] [Thread-14434] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:52:28.366 [DEBUG] [Thread-14436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:52:33.230 [DEBUG] [Thread-14437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:52:48.276 [DEBUG] [Thread-14438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:52:49.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:52:49.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:52:49.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-11-12T10:52:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 52, 15), 29.78, 13.32, 0.0, 24.32, 24.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:52:50.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:52:15
2025-11-12T10:52:50.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:52:50.569 [DEBUG] [Thread-14439] [transport.py] [_log()] starting thread (client mode): 0x149813f0
2025-11-12T10:52:50.570 [DEBUG] [Thread-14439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:52:50.589 [DEBUG] [Thread-14439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:52:50.589 [INFO] [Thread-14439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:52:50.592 [DEBUG] [Thread-14439] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] client lang: <none>
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] server lang: <none>
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] kex follows: False
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] Compression: none
2025-11-12T10:52:50.593 [DEBUG] [Thread-14439] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:52:50.610 [DEBUG] [Thread-14439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:52:50.611 [DEBUG] [Thread-14439] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:52:50.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:52:50.611 [DEBUG] [Thread-14439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:52:50.612 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:52:50.613 [DEBUG] [Thread-14439] [transport.py] [_log()] userauth is OK
2025-11-12T10:52:50.614 [DEBUG] [Thread-14439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:52:50.614 [DEBUG] [Thread-14439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:52:50.614 [DEBUG] [Thread-14439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:52:50.614 [DEBUG] [Thread-14439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:52:50.636 [INFO] [Thread-14439] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:52:50.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:52:51.250 [DEBUG] [Thread-14439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:52:51.251 [DEBUG] [Thread-14439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:52:51.251 [DEBUG] [Thread-14439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:52:51.291 [DEBUG] [Thread-14439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:52:51.292 [DEBUG] [Thread-14439] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:52:51.295 [DEBUG] [Thread-14439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:52:51.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:52:51.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:52:51.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:52:51.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:52:51.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:52:51.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:52:51.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:52:51.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:52:51.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:52:51.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.369534 -999.00  +24.90  28.17     18   -0.90 1 1 1 1 1   888    0 27.61 126.44 ----- 33.5 28.2 275.8 31.1 30.6 -26.0 29.9 -25.5 28.6 -25.2 29.5 -24.3
2025-11-12T10:52:51.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:52:51.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:52:51.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.369534
2025-11-12T10:52:51.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:52:51.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:52:51.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:52:51.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:52:51.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:52:51.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:52:15', tmtdew=29.78, humidity=13.32, cloud=0.0, wind=24.32, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:52:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:52:51.321 [DEBUG] [Thread-14439] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:52:51.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:52:51.415 [DEBUG] [Thread-14442] [transport.py] [_log()] starting thread (client mode): 0x149836a0
2025-11-12T10:52:51.415 [DEBUG] [Thread-14442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:52:51.430 [DEBUG] [Thread-14442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:52:51.430 [INFO] [Thread-14442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] client lang: <none>
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] server lang: <none>
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] kex follows: False
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:52:51.440 [DEBUG] [Thread-14442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:52:51.441 [DEBUG] [Thread-14442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:52:51.441 [DEBUG] [Thread-14442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:52:51.441 [DEBUG] [Thread-14442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:52:51.441 [DEBUG] [Thread-14442] [transport.py] [_log()] Compression: none
2025-11-12T10:52:51.441 [DEBUG] [Thread-14442] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:52:51.500 [DEBUG] [Thread-14442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:52:51.501 [DEBUG] [Thread-14442] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:52:51.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:52:51.502 [DEBUG] [Thread-14442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:52:51.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:52:51.557 [DEBUG] [Thread-14442] [transport.py] [_log()] userauth is OK
2025-11-12T10:52:51.557 [DEBUG] [Thread-14442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:52:51.558 [DEBUG] [Thread-14442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:52:51.558 [DEBUG] [Thread-14442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:52:51.558 [DEBUG] [Thread-14442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:52:51.577 [INFO] [Thread-14442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:52:51.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:52:51.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:52:52.461 [DEBUG] [Thread-14442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:52:52.461 [DEBUG] [Thread-14442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:52:52.509 [DEBUG] [Thread-14442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:52:52.509 [DEBUG] [Thread-14442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:52:52.518 [DEBUG] [Thread-14442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:52:52.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:52:52.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-11-12T10:52:52.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-11-12T10:52:52.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:52:52.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:52:52.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:52:52.554 [DEBUG] [Thread-14442] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:52:57.136 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:52:57.137 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:53:03.312 [DEBUG] [Thread-14444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:53:18.356 [DEBUG] [Thread-14445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:53:22.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:53:22.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:53:22.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-11-12T10:53:23.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 53, 19), 30.61, 12.62, 0.0, 22.81, 24.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:53:23.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:53:19
2025-11-12T10:53:23.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:53:23.481 [DEBUG] [Thread-14446] [transport.py] [_log()] starting thread (client mode): 0x1493d0f0
2025-11-12T10:53:23.481 [DEBUG] [Thread-14446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:53:23.502 [DEBUG] [Thread-14446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:53:23.502 [INFO] [Thread-14446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:53:23.505 [DEBUG] [Thread-14446] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:53:23.505 [DEBUG] [Thread-14446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:53:23.505 [DEBUG] [Thread-14446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:53:23.505 [DEBUG] [Thread-14446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:53:23.505 [DEBUG] [Thread-14446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] client lang: <none>
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] server lang: <none>
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] kex follows: False
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:53:23.506 [DEBUG] [Thread-14446] [transport.py] [_log()] Compression: none
2025-11-12T10:53:23.507 [DEBUG] [Thread-14446] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:53:23.525 [DEBUG] [Thread-14446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:53:23.526 [DEBUG] [Thread-14446] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:53:23.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:53:23.528 [DEBUG] [Thread-14446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:53:23.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:53:23.530 [DEBUG] [Thread-14446] [transport.py] [_log()] userauth is OK
2025-11-12T10:53:23.530 [DEBUG] [Thread-14446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:53:23.531 [DEBUG] [Thread-14446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:53:23.531 [DEBUG] [Thread-14446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:53:23.531 [DEBUG] [Thread-14446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:53:23.552 [INFO] [Thread-14446] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:53:23.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:53:24.171 [DEBUG] [Thread-14446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:53:24.172 [DEBUG] [Thread-14446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:53:24.172 [DEBUG] [Thread-14446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:53:24.213 [DEBUG] [Thread-14446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:53:24.213 [DEBUG] [Thread-14446] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:53:24.216 [DEBUG] [Thread-14446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:53:24.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:53:24.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:53:24.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:53:24.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:53:24.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:53:24.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:53:24.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:53:24.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:53:24.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:53:24.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.369881 -999.00  +24.30  29.10     18   -1.10 1 1 1 1 1   888    0 27.94 116.69 ----- 22.3 29.1 285.4 34.5 30.3 -29.1 29.6 -27.3 28.1 -28.6 29.2 -26.4
2025-11-12T10:53:24.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:53:24.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:53:24.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.369881
2025-11-12T10:53:24.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:53:24.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:53:24.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:53:24.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:53:24.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:53:24.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:53:19', tmtdew=30.61, humidity=12.62, cloud=0.0, wind=22.81, temperature=24.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:52:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:53:24.244 [DEBUG] [Thread-14446] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:53:24.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:53:24.341 [DEBUG] [Thread-14449] [transport.py] [_log()] starting thread (client mode): 0x17363880
2025-11-12T10:53:24.341 [DEBUG] [Thread-14449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:53:24.356 [DEBUG] [Thread-14449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:53:24.356 [INFO] [Thread-14449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:53:24.363 [DEBUG] [Thread-14449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] client lang: <none>
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] server lang: <none>
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] kex follows: False
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:53:24.364 [DEBUG] [Thread-14449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:53:24.365 [DEBUG] [Thread-14449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:53:24.365 [DEBUG] [Thread-14449] [transport.py] [_log()] Compression: none
2025-11-12T10:53:24.365 [DEBUG] [Thread-14449] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:53:24.421 [DEBUG] [Thread-14449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:53:24.421 [DEBUG] [Thread-14449] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:53:24.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:53:24.423 [DEBUG] [Thread-14449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:53:24.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:53:24.478 [DEBUG] [Thread-14449] [transport.py] [_log()] userauth is OK
2025-11-12T10:53:24.478 [DEBUG] [Thread-14449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:53:24.478 [DEBUG] [Thread-14449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:53:24.478 [DEBUG] [Thread-14449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:53:24.478 [DEBUG] [Thread-14449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:53:24.496 [INFO] [Thread-14449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:53:24.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:53:24.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:53:25.363 [DEBUG] [Thread-14449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:53:25.363 [DEBUG] [Thread-14449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:53:25.412 [DEBUG] [Thread-14449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:53:25.412 [DEBUG] [Thread-14449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:53:25.421 [DEBUG] [Thread-14449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:53:25.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:53:25.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-11-12T10:53:25.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-11-12T10:53:25.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:53:25.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:53:25.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:53:25.458 [DEBUG] [Thread-14449] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:53:28.407 [DEBUG] [Thread-14451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:53:33.389 [DEBUG] [Thread-14452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:53:48.439 [DEBUG] [Thread-14453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:53:55.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:53:55.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:53:55.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-11-12T10:53:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 53, 51), 30.87, 12.39, 0.0, 26.61, 24.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:53:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:53:51
2025-11-12T10:53:56.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:53:56.453 [DEBUG] [Thread-14454] [transport.py] [_log()] starting thread (client mode): 0x17360f70
2025-11-12T10:53:56.453 [DEBUG] [Thread-14454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:53:56.474 [DEBUG] [Thread-14454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:53:56.474 [INFO] [Thread-14454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] client lang: <none>
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] server lang: <none>
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] kex follows: False
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:53:56.477 [DEBUG] [Thread-14454] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:53:56.478 [DEBUG] [Thread-14454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:53:56.478 [DEBUG] [Thread-14454] [transport.py] [_log()] Compression: none
2025-11-12T10:53:56.478 [DEBUG] [Thread-14454] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:53:56.493 [DEBUG] [Thread-14454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:53:56.493 [DEBUG] [Thread-14454] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:53:56.494 [DEBUG] [Thread-14454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:53:56.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:53:56.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:53:56.495 [DEBUG] [Thread-14454] [transport.py] [_log()] userauth is OK
2025-11-12T10:53:56.495 [DEBUG] [Thread-14454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:53:56.495 [DEBUG] [Thread-14454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:53:56.495 [DEBUG] [Thread-14454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:53:56.495 [DEBUG] [Thread-14454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:53:56.522 [INFO] [Thread-14454] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:53:56.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:53:57.174 [DEBUG] [Thread-14454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:53:57.174 [DEBUG] [Thread-14454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:53:57.174 [DEBUG] [Thread-14454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:53:57.215 [DEBUG] [Thread-14454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:53:57.215 [DEBUG] [Thread-14454] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:53:57.217 [DEBUG] [Thread-14454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:53:57.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:53:57.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:53:57.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:53:57.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:53:57.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:53:57.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:53:57.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:53:57.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:53:57.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.370575 -999.00  +24.10  26.40     17   -1.60 1 1 1 1 1   888    0 28.32 125.59 ----- 26.2 26.4 289.4 32.7 29.9 -29.1 29.3 -26.5 27.9 -28.4 28.9 -26.7
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.370575
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:53:57.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:53:51', tmtdew=30.87, humidity=12.39, cloud=0.0, wind=26.61, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:53:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:53:57.237 [DEBUG] [Thread-14454] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:53:57.277 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:53:57.278 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:53:57.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:53:57.322 [DEBUG] [Thread-14457] [transport.py] [_log()] starting thread (client mode): 0x173bc490
2025-11-12T10:53:57.322 [DEBUG] [Thread-14457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:53:57.338 [DEBUG] [Thread-14457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:53:57.338 [INFO] [Thread-14457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:53:57.345 [DEBUG] [Thread-14457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:53:57.345 [DEBUG] [Thread-14457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:53:57.345 [DEBUG] [Thread-14457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:53:57.345 [DEBUG] [Thread-14457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] client lang: <none>
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] server lang: <none>
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] kex follows: False
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] Compression: none
2025-11-12T10:53:57.346 [DEBUG] [Thread-14457] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:53:57.403 [DEBUG] [Thread-14457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:53:57.403 [DEBUG] [Thread-14457] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:53:57.403 [DEBUG] [Thread-14457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:53:57.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:53:57.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:53:57.460 [DEBUG] [Thread-14457] [transport.py] [_log()] userauth is OK
2025-11-12T10:53:57.460 [DEBUG] [Thread-14457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:53:57.460 [DEBUG] [Thread-14457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:53:57.460 [DEBUG] [Thread-14457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:53:57.460 [DEBUG] [Thread-14457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:53:57.475 [INFO] [Thread-14457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:53:57.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:53:57.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:53:58.329 [DEBUG] [Thread-14457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:53:58.330 [DEBUG] [Thread-14457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:53:58.377 [DEBUG] [Thread-14457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:53:58.378 [DEBUG] [Thread-14457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:53:58.387 [DEBUG] [Thread-14457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:53:58.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:53:58.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:53:58.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-11-12T10:53:58.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:53:58.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:53:58.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:53:58.425 [DEBUG] [Thread-14457] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:54:03.472 [DEBUG] [Thread-14459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:54:18.514 [DEBUG] [Thread-14460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:54:28.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:54:28.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:54:28.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-11-12T10:54:28.464 [DEBUG] [Thread-14461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:54:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 54, 23), 31.09, 12.21, 0.0, 24.91, 24.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:54:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:54:23
2025-11-12T10:54:29.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:54:29.349 [DEBUG] [Thread-14462] [transport.py] [_log()] starting thread (client mode): 0x1493cb80
2025-11-12T10:54:29.349 [DEBUG] [Thread-14462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:54:29.370 [DEBUG] [Thread-14462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:54:29.370 [INFO] [Thread-14462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] client lang: <none>
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] server lang: <none>
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] kex follows: False
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:54:29.373 [DEBUG] [Thread-14462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:54:29.374 [DEBUG] [Thread-14462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:54:29.374 [DEBUG] [Thread-14462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:54:29.374 [DEBUG] [Thread-14462] [transport.py] [_log()] Compression: none
2025-11-12T10:54:29.374 [DEBUG] [Thread-14462] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:54:29.392 [DEBUG] [Thread-14462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:54:29.392 [DEBUG] [Thread-14462] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:54:29.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:54:29.393 [DEBUG] [Thread-14462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:54:29.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:54:29.396 [DEBUG] [Thread-14462] [transport.py] [_log()] userauth is OK
2025-11-12T10:54:29.396 [DEBUG] [Thread-14462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:54:29.396 [DEBUG] [Thread-14462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:54:29.396 [DEBUG] [Thread-14462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:54:29.396 [DEBUG] [Thread-14462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:54:29.420 [INFO] [Thread-14462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:54:29.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:54:30.071 [DEBUG] [Thread-14462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:54:30.071 [DEBUG] [Thread-14462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:54:30.072 [DEBUG] [Thread-14462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:54:30.112 [DEBUG] [Thread-14462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:54:30.112 [DEBUG] [Thread-14462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:54:30.115 [DEBUG] [Thread-14462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:54:30.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:54:30.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:54:30.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:54:30.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:54:30.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:54:30.140 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:54:30.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:54:30.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:54:30.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:54:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.370923 -999.00  +24.00  25.55     17   -2.00 1 1 1 1 1   888    0 28.77 141.53 ----- 22.7 25.6 270.2 30.8 29.9 -27.6 29.2 -27.0 27.9 -29.2 28.9 -25.6
2025-11-12T10:54:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:54:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:54:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.370923
2025-11-12T10:54:30.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:54:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:54:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:54:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:54:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:54:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:54:23', tmtdew=31.09, humidity=12.21, cloud=0.0, wind=24.91, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:54:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:54:30.143 [DEBUG] [Thread-14462] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:54:30.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:54:30.248 [DEBUG] [Thread-14465] [transport.py] [_log()] starting thread (client mode): 0x1493d0f0
2025-11-12T10:54:30.248 [DEBUG] [Thread-14465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:54:30.263 [DEBUG] [Thread-14465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:54:30.263 [INFO] [Thread-14465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:54:30.270 [DEBUG] [Thread-14465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:54:30.270 [DEBUG] [Thread-14465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:54:30.270 [DEBUG] [Thread-14465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:54:30.270 [DEBUG] [Thread-14465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:54:30.270 [DEBUG] [Thread-14465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] client lang: <none>
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] server lang: <none>
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] kex follows: False
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] Compression: none
2025-11-12T10:54:30.271 [DEBUG] [Thread-14465] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:54:30.333 [DEBUG] [Thread-14465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:54:30.333 [DEBUG] [Thread-14465] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:54:30.333 [DEBUG] [Thread-14465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:54:30.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:54:30.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:54:30.389 [DEBUG] [Thread-14465] [transport.py] [_log()] userauth is OK
2025-11-12T10:54:30.389 [DEBUG] [Thread-14465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:54:30.389 [DEBUG] [Thread-14465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:54:30.390 [DEBUG] [Thread-14465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:54:30.390 [DEBUG] [Thread-14465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:54:30.411 [INFO] [Thread-14465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:54:30.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:54:30.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:54:31.307 [DEBUG] [Thread-14465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:54:31.307 [DEBUG] [Thread-14465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:54:31.355 [DEBUG] [Thread-14465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:54:31.355 [DEBUG] [Thread-14465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:54:31.363 [DEBUG] [Thread-14465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:54:31.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:54:31.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-11-12T10:54:31.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-11-12T10:54:31.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:54:31.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:54:31.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:54:31.394 [DEBUG] [Thread-14465] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:54:33.546 [DEBUG] [Thread-14467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:54:48.595 [DEBUG] [Thread-14468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:54:57.419 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:54:57.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:55:01.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:55:01.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:55:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:55:02.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 54, 55), 31.28, 12.21, 0.0, 21.26, 24.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:55:02.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:54:55
2025-11-12T10:55:02.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:55:02.343 [DEBUG] [Thread-14469] [transport.py] [_log()] starting thread (client mode): 0x14980640
2025-11-12T10:55:02.343 [DEBUG] [Thread-14469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:55:02.365 [DEBUG] [Thread-14469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:55:02.365 [INFO] [Thread-14469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] client lang: <none>
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] server lang: <none>
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] kex follows: False
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:55:02.368 [DEBUG] [Thread-14469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:55:02.369 [DEBUG] [Thread-14469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:55:02.369 [DEBUG] [Thread-14469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:55:02.369 [DEBUG] [Thread-14469] [transport.py] [_log()] Compression: none
2025-11-12T10:55:02.369 [DEBUG] [Thread-14469] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:55:02.377 [DEBUG] [Thread-14469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:55:02.378 [DEBUG] [Thread-14469] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:55:02.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:55:02.379 [DEBUG] [Thread-14469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:55:02.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:55:02.381 [DEBUG] [Thread-14469] [transport.py] [_log()] userauth is OK
2025-11-12T10:55:02.381 [DEBUG] [Thread-14469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:55:02.381 [DEBUG] [Thread-14469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:55:02.381 [DEBUG] [Thread-14469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:55:02.381 [DEBUG] [Thread-14469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:55:02.405 [INFO] [Thread-14469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:55:02.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:55:03.108 [DEBUG] [Thread-14469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:55:03.108 [DEBUG] [Thread-14469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:55:03.109 [DEBUG] [Thread-14469] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:55:03.150 [DEBUG] [Thread-14469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:55:03.150 [DEBUG] [Thread-14469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:55:03.154 [DEBUG] [Thread-14469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:55:03.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:55:03.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:55:03.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:55:03.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:55:03.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:55:03.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:55:03.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:55:03.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:55:03.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:55:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.371270 -999.00  +23.80  13.98     18   -1.80 1 1 1 1 1   888    0 28.46 148.21 ----- 19.7 14.0 285.6 21.5 29.6 -28.3 29.1 -26.2 27.8 -25.2 28.6 -27.0
2025-11-12T10:55:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:55:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:55:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.371270
2025-11-12T10:55:03.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:55:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:55:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:55:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:55:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:55:03.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:54:55', tmtdew=31.28, humidity=12.21, cloud=0.0, wind=21.26, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:54:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:55:03.200 [DEBUG] [Thread-14469] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:55:03.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:55:03.295 [DEBUG] [Thread-14472] [transport.py] [_log()] starting thread (client mode): 0x173e8370
2025-11-12T10:55:03.295 [DEBUG] [Thread-14472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:55:03.310 [DEBUG] [Thread-14472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:55:03.310 [INFO] [Thread-14472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] client lang: <none>
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] server lang: <none>
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] kex follows: False
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:55:03.318 [DEBUG] [Thread-14472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:55:03.319 [DEBUG] [Thread-14472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:55:03.319 [DEBUG] [Thread-14472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:55:03.319 [DEBUG] [Thread-14472] [transport.py] [_log()] Compression: none
2025-11-12T10:55:03.319 [DEBUG] [Thread-14472] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:55:03.378 [DEBUG] [Thread-14472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:55:03.379 [DEBUG] [Thread-14472] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:55:03.380 [DEBUG] [Thread-14472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:55:03.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:55:03.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:55:03.437 [DEBUG] [Thread-14472] [transport.py] [_log()] userauth is OK
2025-11-12T10:55:03.438 [DEBUG] [Thread-14472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:55:03.438 [DEBUG] [Thread-14472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:55:03.438 [DEBUG] [Thread-14472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:55:03.438 [DEBUG] [Thread-14472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:55:03.459 [INFO] [Thread-14472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:55:03.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:55:03.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:55:03.627 [DEBUG] [Thread-14474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:55:04.335 [DEBUG] [Thread-14472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:55:04.336 [DEBUG] [Thread-14472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:55:04.384 [DEBUG] [Thread-14472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:55:04.384 [DEBUG] [Thread-14472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:55:04.393 [DEBUG] [Thread-14472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:55:04.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:55:04.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-11-12T10:55:04.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-11-12T10:55:04.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:55:04.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:55:04.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:55:04.429 [DEBUG] [Thread-14472] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:55:18.684 [DEBUG] [Thread-14475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:55:28.494 [DEBUG] [Thread-14476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:55:33.721 [DEBUG] [Thread-14477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:55:34.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:55:34.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:55:34.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-11-12T10:55:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 55, 27), 31.39, 12.11, 0.0, 23.8, 24.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:55:35.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:55:27
2025-11-12T10:55:35.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:55:35.317 [DEBUG] [Thread-14478] [transport.py] [_log()] starting thread (client mode): 0x1493d7b0
2025-11-12T10:55:35.318 [DEBUG] [Thread-14478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:55:35.338 [DEBUG] [Thread-14478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:55:35.339 [INFO] [Thread-14478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:55:35.342 [DEBUG] [Thread-14478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:55:35.342 [DEBUG] [Thread-14478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:55:35.342 [DEBUG] [Thread-14478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] client lang: <none>
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] server lang: <none>
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] kex follows: False
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] Compression: none
2025-11-12T10:55:35.343 [DEBUG] [Thread-14478] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:55:35.360 [DEBUG] [Thread-14478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:55:35.360 [DEBUG] [Thread-14478] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:55:35.361 [DEBUG] [Thread-14478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:55:35.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:55:35.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:55:35.363 [DEBUG] [Thread-14478] [transport.py] [_log()] userauth is OK
2025-11-12T10:55:35.363 [DEBUG] [Thread-14478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:55:35.363 [DEBUG] [Thread-14478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:55:35.364 [DEBUG] [Thread-14478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:55:35.364 [DEBUG] [Thread-14478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:55:35.388 [INFO] [Thread-14478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:55:35.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:55:36.024 [DEBUG] [Thread-14478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:55:36.025 [DEBUG] [Thread-14478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:55:36.025 [DEBUG] [Thread-14478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:55:36.066 [DEBUG] [Thread-14478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:55:36.066 [DEBUG] [Thread-14478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:55:36.070 [DEBUG] [Thread-14478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:55:36.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:55:36.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:55:36.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:55:36.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:55:36.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:55:36.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:55:36.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:55:36.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:55:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:55:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.371617 -999.00  +23.80  31.42     17   -2.00 1 1 2 1 1   888    0 29.11 164.26 ----- 27.1 31.4 286.6 35.0 29.6 -27.6 28.9 -26.8 27.8 -25.8 28.6 -25.8
2025-11-12T10:55:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:55:36.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:55:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.371617
2025-11-12T10:55:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:55:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:55:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:55:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:55:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:55:36.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:55:27', tmtdew=31.39, humidity=12.11, cloud=0.0, wind=23.8, temperature=24.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:55:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:55:36.098 [DEBUG] [Thread-14478] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:55:36.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:55:36.194 [DEBUG] [Thread-14481] [transport.py] [_log()] starting thread (client mode): 0x149808e0
2025-11-12T10:55:36.195 [DEBUG] [Thread-14481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:55:36.209 [DEBUG] [Thread-14481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:55:36.209 [INFO] [Thread-14481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:55:36.217 [DEBUG] [Thread-14481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:55:36.217 [DEBUG] [Thread-14481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:55:36.217 [DEBUG] [Thread-14481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:55:36.217 [DEBUG] [Thread-14481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:55:36.217 [DEBUG] [Thread-14481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:55:36.217 [DEBUG] [Thread-14481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] client lang: <none>
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] server lang: <none>
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] kex follows: False
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] Compression: none
2025-11-12T10:55:36.218 [DEBUG] [Thread-14481] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:55:36.277 [DEBUG] [Thread-14481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:55:36.278 [DEBUG] [Thread-14481] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:55:36.278 [DEBUG] [Thread-14481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:55:36.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:55:36.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:55:36.333 [DEBUG] [Thread-14481] [transport.py] [_log()] userauth is OK
2025-11-12T10:55:36.334 [DEBUG] [Thread-14481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:55:36.334 [DEBUG] [Thread-14481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:55:36.334 [DEBUG] [Thread-14481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:55:36.334 [DEBUG] [Thread-14481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:55:36.353 [INFO] [Thread-14481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:55:36.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:55:36.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:55:37.224 [DEBUG] [Thread-14481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:55:37.224 [DEBUG] [Thread-14481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:55:37.271 [DEBUG] [Thread-14481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:55:37.272 [DEBUG] [Thread-14481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:55:37.281 [DEBUG] [Thread-14481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:55:37.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:55:37.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-11-12T10:55:37.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-11-12T10:55:37.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:55:37.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:55:37.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:55:37.318 [DEBUG] [Thread-14481] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:55:48.754 [DEBUG] [Thread-14483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:55:57.561 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:55:57.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:56:03.797 [DEBUG] [Thread-14484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:56:07.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:56:07.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:56:07.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-11-12T10:56:07.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 55, 59), 31.44, 11.71, 0.0, 20.22, 24.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:56:07.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:55:59
2025-11-12T10:56:08.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:56:08.231 [DEBUG] [Thread-14485] [transport.py] [_log()] starting thread (client mode): 0x173bc490
2025-11-12T10:56:08.231 [DEBUG] [Thread-14485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:56:08.251 [DEBUG] [Thread-14485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:56:08.251 [INFO] [Thread-14485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:56:08.254 [DEBUG] [Thread-14485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] client lang: <none>
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] server lang: <none>
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] kex follows: False
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] Compression: none
2025-11-12T10:56:08.255 [DEBUG] [Thread-14485] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:56:08.275 [DEBUG] [Thread-14485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:56:08.276 [DEBUG] [Thread-14485] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:56:08.276 [DEBUG] [Thread-14485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:56:08.277 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:56:08.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:56:08.279 [DEBUG] [Thread-14485] [transport.py] [_log()] userauth is OK
2025-11-12T10:56:08.279 [DEBUG] [Thread-14485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:56:08.279 [DEBUG] [Thread-14485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:56:08.279 [DEBUG] [Thread-14485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:56:08.280 [DEBUG] [Thread-14485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:56:08.294 [INFO] [Thread-14485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:56:08.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:56:09.284 [DEBUG] [Thread-14485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:56:09.284 [DEBUG] [Thread-14485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:56:09.285 [DEBUG] [Thread-14485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:56:09.325 [DEBUG] [Thread-14485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:56:09.326 [DEBUG] [Thread-14485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:56:09.329 [DEBUG] [Thread-14485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:56:09.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:56:09.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:56:09.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:56:09.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:56:09.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:56:09.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:56:09.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:56:09.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:56:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:56:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.371964 -999.00  +23.90  24.58     18   -1.80 1 1 1 1 1   888    0 29.00 157.89 ----- 22.8 24.6 300.2 31.8 29.4 -27.5 28.8 -26.3 27.8 -27.1 28.4 -25.6
2025-11-12T10:56:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:56:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:56:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.371964
2025-11-12T10:56:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:56:09.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:56:09.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:56:09.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:56:09.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:56:09.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:55:59', tmtdew=31.44, humidity=11.71, cloud=0.0, wind=20.22, temperature=24.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:55:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:56:09.356 [DEBUG] [Thread-14485] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:56:09.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:56:09.450 [DEBUG] [Thread-14488] [transport.py] [_log()] starting thread (client mode): 0x173bf820
2025-11-12T10:56:09.450 [DEBUG] [Thread-14488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:56:09.464 [DEBUG] [Thread-14488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:56:09.464 [INFO] [Thread-14488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] client lang: <none>
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] server lang: <none>
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] kex follows: False
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:56:09.472 [DEBUG] [Thread-14488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:56:09.473 [DEBUG] [Thread-14488] [transport.py] [_log()] Compression: none
2025-11-12T10:56:09.473 [DEBUG] [Thread-14488] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:56:09.529 [DEBUG] [Thread-14488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:56:09.530 [DEBUG] [Thread-14488] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:56:09.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:56:09.531 [DEBUG] [Thread-14488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:56:09.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:56:09.585 [DEBUG] [Thread-14488] [transport.py] [_log()] userauth is OK
2025-11-12T10:56:09.586 [DEBUG] [Thread-14488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:56:09.586 [DEBUG] [Thread-14488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:56:09.586 [DEBUG] [Thread-14488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:56:09.586 [DEBUG] [Thread-14488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:56:09.605 [INFO] [Thread-14488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:56:09.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:56:09.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:56:10.468 [DEBUG] [Thread-14488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:56:10.469 [DEBUG] [Thread-14488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:56:10.516 [DEBUG] [Thread-14488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:56:10.517 [DEBUG] [Thread-14488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:56:10.527 [DEBUG] [Thread-14488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:56:10.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:56:10.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-11-12T10:56:10.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-11-12T10:56:10.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:56:10.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:56:10.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:56:10.563 [DEBUG] [Thread-14488] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:56:18.836 [DEBUG] [Thread-14490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:56:28.544 [DEBUG] [Thread-14491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:56:33.883 [DEBUG] [Thread-14492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:56:40.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:56:40.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:56:40.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-11-12T10:56:41.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 56, 31), 31.32, 11.76, 0.0, 18.17, 24.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:56:41.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:56:31
2025-11-12T10:56:41.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:56:41.483 [DEBUG] [Thread-14493] [transport.py] [_log()] starting thread (client mode): 0x173e8970
2025-11-12T10:56:41.483 [DEBUG] [Thread-14493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:56:41.504 [DEBUG] [Thread-14493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:56:41.505 [INFO] [Thread-14493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:56:41.508 [DEBUG] [Thread-14493] [transport.py] [_log()] client lang: <none>
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] server lang: <none>
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] kex follows: False
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] Compression: none
2025-11-12T10:56:41.509 [DEBUG] [Thread-14493] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:56:41.528 [DEBUG] [Thread-14493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:56:41.529 [DEBUG] [Thread-14493] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:56:41.530 [DEBUG] [Thread-14493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:56:41.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:56:41.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:56:41.533 [DEBUG] [Thread-14493] [transport.py] [_log()] userauth is OK
2025-11-12T10:56:41.533 [DEBUG] [Thread-14493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:56:41.533 [DEBUG] [Thread-14493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:56:41.533 [DEBUG] [Thread-14493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:56:41.533 [DEBUG] [Thread-14493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:56:41.570 [INFO] [Thread-14493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:56:41.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:56:42.212 [DEBUG] [Thread-14493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:56:42.212 [DEBUG] [Thread-14493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:56:42.213 [DEBUG] [Thread-14493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:56:42.254 [DEBUG] [Thread-14493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:56:42.254 [DEBUG] [Thread-14493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:56:42.257 [DEBUG] [Thread-14493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:56:42.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:56:42.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:56:42.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:56:42.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:56:42.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:56:42.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:56:42.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:56:42.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:56:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:56:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.372312 -999.00  +24.30  20.45     18   -1.40 1 1 1 1 1   888    0 29.66 171.21 ----- 19.0 20.4 304.0 26.5 29.4 -26.8 28.8 -25.9 27.7 -26.0 28.4 -25.1
2025-11-12T10:56:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:56:42.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:56:42.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.372312
2025-11-12T10:56:42.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:56:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:56:42.283 [DEBUG] [Thread-14493] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:56:42.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:56:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:56:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:56:42.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:56:31', tmtdew=31.32, humidity=11.76, cloud=0.0, wind=18.17, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:56:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:56:42.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:56:42.373 [DEBUG] [Thread-14496] [transport.py] [_log()] starting thread (client mode): 0x14923790
2025-11-12T10:56:42.373 [DEBUG] [Thread-14496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:56:42.387 [DEBUG] [Thread-14496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:56:42.387 [INFO] [Thread-14496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:56:42.395 [DEBUG] [Thread-14496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:56:42.395 [DEBUG] [Thread-14496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:56:42.395 [DEBUG] [Thread-14496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] client lang: <none>
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] server lang: <none>
2025-11-12T10:56:42.396 [DEBUG] [Thread-14496] [transport.py] [_log()] kex follows: False
2025-11-12T10:56:42.397 [DEBUG] [Thread-14496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:56:42.397 [DEBUG] [Thread-14496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:56:42.397 [DEBUG] [Thread-14496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:56:42.397 [DEBUG] [Thread-14496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:56:42.397 [DEBUG] [Thread-14496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:56:42.397 [DEBUG] [Thread-14496] [transport.py] [_log()] Compression: none
2025-11-12T10:56:42.397 [DEBUG] [Thread-14496] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:56:42.453 [DEBUG] [Thread-14496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:56:42.454 [DEBUG] [Thread-14496] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:56:42.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:56:42.455 [DEBUG] [Thread-14496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:56:42.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:56:42.509 [DEBUG] [Thread-14496] [transport.py] [_log()] userauth is OK
2025-11-12T10:56:42.510 [DEBUG] [Thread-14496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:56:42.510 [DEBUG] [Thread-14496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:56:42.510 [DEBUG] [Thread-14496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:56:42.510 [DEBUG] [Thread-14496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:56:42.529 [INFO] [Thread-14496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:56:42.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:56:42.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:56:43.331 [DEBUG] [Thread-14496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:56:43.331 [DEBUG] [Thread-14496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:56:43.380 [DEBUG] [Thread-14496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:56:43.380 [DEBUG] [Thread-14496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:56:43.389 [DEBUG] [Thread-14496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:56:43.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:56:43.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T10:56:43.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-11-12T10:56:43.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:56:43.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:56:43.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:56:43.426 [DEBUG] [Thread-14496] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:56:48.922 [DEBUG] [Thread-14498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:56:57.711 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:56:57.712 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:57:03.976 [DEBUG] [Thread-14499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:57:13.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:57:13.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:57:13.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-11-12T10:57:14.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 57, 3), 31.4, 11.68, 0.0, 19.07, 24.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:57:14.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:57:03
2025-11-12T10:57:14.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:57:14.330 [DEBUG] [Thread-14500] [transport.py] [_log()] starting thread (client mode): 0x173bcfa0
2025-11-12T10:57:14.330 [DEBUG] [Thread-14500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:57:14.350 [DEBUG] [Thread-14500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:57:14.350 [INFO] [Thread-14500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] client lang: <none>
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] server lang: <none>
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] kex follows: False
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:57:14.353 [DEBUG] [Thread-14500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:57:14.354 [DEBUG] [Thread-14500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:57:14.354 [DEBUG] [Thread-14500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:57:14.354 [DEBUG] [Thread-14500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:57:14.354 [DEBUG] [Thread-14500] [transport.py] [_log()] Compression: none
2025-11-12T10:57:14.354 [DEBUG] [Thread-14500] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:57:14.371 [DEBUG] [Thread-14500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:57:14.372 [DEBUG] [Thread-14500] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:57:14.372 [DEBUG] [Thread-14500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:57:14.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:57:14.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:57:14.374 [DEBUG] [Thread-14500] [transport.py] [_log()] userauth is OK
2025-11-12T10:57:14.374 [DEBUG] [Thread-14500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:57:14.374 [DEBUG] [Thread-14500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:57:14.374 [DEBUG] [Thread-14500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:57:14.374 [DEBUG] [Thread-14500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:57:14.392 [INFO] [Thread-14500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:57:14.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:57:15.018 [DEBUG] [Thread-14500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:57:15.018 [DEBUG] [Thread-14500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:57:15.019 [DEBUG] [Thread-14500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:57:15.059 [DEBUG] [Thread-14500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:57:15.059 [DEBUG] [Thread-14500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:57:15.063 [DEBUG] [Thread-14500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:57:15.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:57:15.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:57:15.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:57:15.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:57:15.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:57:15.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:57:15.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:57:15.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:57:15.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:57:15.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.372658 -999.00  +24.40  26.40     17   -1.70 1 1 1 1 1   888    0 30.91 186.45 ----- 22.9 26.4 309.0 33.8 29.4 -26.3 28.8 -25.9 27.8 -24.9 28.4 -25.2
2025-11-12T10:57:15.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:57:15.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:57:15.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.372658
2025-11-12T10:57:15.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:57:15.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:57:15.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:57:15.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:57:15.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:57:15.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:57:03', tmtdew=31.4, humidity=11.68, cloud=0.0, wind=19.07, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:56:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:57:15.091 [DEBUG] [Thread-14500] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:57:15.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:57:15.187 [DEBUG] [Thread-14503] [transport.py] [_log()] starting thread (client mode): 0x14921de0
2025-11-12T10:57:15.188 [DEBUG] [Thread-14503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:57:15.201 [DEBUG] [Thread-14503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:57:15.201 [INFO] [Thread-14503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] client lang: <none>
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] server lang: <none>
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] kex follows: False
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] Compression: none
2025-11-12T10:57:15.209 [DEBUG] [Thread-14503] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:57:15.270 [DEBUG] [Thread-14503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:57:15.271 [DEBUG] [Thread-14503] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:57:15.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:57:15.272 [DEBUG] [Thread-14503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:57:15.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:57:15.331 [DEBUG] [Thread-14503] [transport.py] [_log()] userauth is OK
2025-11-12T10:57:15.331 [DEBUG] [Thread-14503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:57:15.331 [DEBUG] [Thread-14503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:57:15.332 [DEBUG] [Thread-14503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:57:15.332 [DEBUG] [Thread-14503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:57:15.350 [INFO] [Thread-14503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:57:15.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:57:15.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:57:16.224 [DEBUG] [Thread-14503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:57:16.224 [DEBUG] [Thread-14503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:57:16.273 [DEBUG] [Thread-14503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:57:16.273 [DEBUG] [Thread-14503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:57:16.282 [DEBUG] [Thread-14503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:57:16.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:57:16.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-11-12T10:57:16.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-11-12T10:57:16.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:57:16.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:57:16.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:57:16.319 [DEBUG] [Thread-14503] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:57:19.010 [DEBUG] [Thread-14505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:57:28.582 [DEBUG] [Thread-14506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:57:34.065 [DEBUG] [Thread-14507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:57:46.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:57:46.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:57:46.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-11-12T10:57:46.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 57, 35), 30.87, 12.24, 0.0, 20.56, 24.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:57:46.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:57:35
2025-11-12T10:57:47.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:57:47.253 [DEBUG] [Thread-14508] [transport.py] [_log()] starting thread (client mode): 0x17398e50
2025-11-12T10:57:47.253 [DEBUG] [Thread-14508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:57:47.274 [DEBUG] [Thread-14508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:57:47.274 [INFO] [Thread-14508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] client lang: <none>
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] server lang: <none>
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] kex follows: False
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] Compression: none
2025-11-12T10:57:47.278 [DEBUG] [Thread-14508] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:57:47.293 [DEBUG] [Thread-14508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:57:47.293 [DEBUG] [Thread-14508] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:57:47.294 [DEBUG] [Thread-14508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:57:47.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:57:47.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:57:47.294 [DEBUG] [Thread-14508] [transport.py] [_log()] userauth is OK
2025-11-12T10:57:47.294 [DEBUG] [Thread-14508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:57:47.294 [DEBUG] [Thread-14508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:57:47.294 [DEBUG] [Thread-14508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:57:47.294 [DEBUG] [Thread-14508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:57:47.325 [INFO] [Thread-14508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:57:47.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:57:47.972 [DEBUG] [Thread-14508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:57:47.972 [DEBUG] [Thread-14508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:57:47.972 [DEBUG] [Thread-14508] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:57:48.013 [DEBUG] [Thread-14508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:57:48.013 [DEBUG] [Thread-14508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:57:48.015 [DEBUG] [Thread-14508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:57:48.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:57:48.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:57:48.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:57:48.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:57:48.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:57:48.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:57:48.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:57:48.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.373353 -999.00  +24.30  21.50     18   -1.00 1 1 1 1 1   888    0 30.06 185.58 ----- 22.9 21.5 304.4 28.7 29.5 -24.8 28.9 -24.5 28.1 -24.4 28.6 -24.0
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.373353
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:57:48.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:57:35', tmtdew=30.87, humidity=12.24, cloud=0.0, wind=20.56, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:57:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:57:48.036 [DEBUG] [Thread-14508] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:57:48.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:57:48.119 [DEBUG] [Thread-14511] [transport.py] [_log()] starting thread (client mode): 0x173bf490
2025-11-12T10:57:48.119 [DEBUG] [Thread-14511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:57:48.134 [DEBUG] [Thread-14511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:57:48.134 [INFO] [Thread-14511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] client lang: <none>
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] server lang: <none>
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] kex follows: False
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] Compression: none
2025-11-12T10:57:48.142 [DEBUG] [Thread-14511] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:57:48.202 [DEBUG] [Thread-14511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:57:48.202 [DEBUG] [Thread-14511] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:57:48.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:57:48.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:57:48.202 [DEBUG] [Thread-14511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:57:48.262 [DEBUG] [Thread-14511] [transport.py] [_log()] userauth is OK
2025-11-12T10:57:48.262 [DEBUG] [Thread-14511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:57:48.262 [DEBUG] [Thread-14511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:57:48.262 [DEBUG] [Thread-14511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:57:48.262 [DEBUG] [Thread-14511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:57:48.276 [INFO] [Thread-14511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:57:48.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:57:48.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:57:49.097 [DEBUG] [Thread-14513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:57:49.117 [DEBUG] [Thread-14511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:57:49.118 [DEBUG] [Thread-14511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:57:49.165 [DEBUG] [Thread-14511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:57:49.165 [DEBUG] [Thread-14511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:57:49.174 [DEBUG] [Thread-14511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:57:49.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:57:49.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-11-12T10:57:49.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-11-12T10:57:49.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:57:49.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:57:49.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:57:49.210 [DEBUG] [Thread-14511] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:57:57.852 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:57:57.853 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:58:04.150 [DEBUG] [Thread-14514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:58:19.185 [DEBUG] [Thread-14515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:58:19.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:58:19.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:58:19.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:58:19.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 58, 7), 30.39, 12.64, 0.0, 20.24, 24.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:58:19.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:58:07
2025-11-12T10:58:19.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:58:20.116 [DEBUG] [Thread-14516] [transport.py] [_log()] starting thread (client mode): 0x173445b0
2025-11-12T10:58:20.116 [DEBUG] [Thread-14516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:58:20.127 [DEBUG] [Thread-14516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:58:20.127 [INFO] [Thread-14516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] client lang: <none>
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] server lang: <none>
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] kex follows: False
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:58:20.131 [DEBUG] [Thread-14516] [transport.py] [_log()] Compression: none
2025-11-12T10:58:20.132 [DEBUG] [Thread-14516] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:58:20.149 [DEBUG] [Thread-14516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:58:20.149 [DEBUG] [Thread-14516] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:58:20.150 [DEBUG] [Thread-14516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:58:20.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:58:20.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:58:20.152 [DEBUG] [Thread-14516] [transport.py] [_log()] userauth is OK
2025-11-12T10:58:20.152 [DEBUG] [Thread-14516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:58:20.152 [DEBUG] [Thread-14516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:58:20.152 [DEBUG] [Thread-14516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:58:20.152 [DEBUG] [Thread-14516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:58:20.171 [INFO] [Thread-14516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:58:20.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:58:20.814 [DEBUG] [Thread-14516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:58:20.815 [DEBUG] [Thread-14516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:58:20.815 [DEBUG] [Thread-14516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:58:20.855 [DEBUG] [Thread-14516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:58:20.855 [DEBUG] [Thread-14516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:58:20.857 [DEBUG] [Thread-14516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:58:20.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:58:20.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:58:20.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:58:20.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:58:20.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:58:20.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:58:20.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:58:20.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:58:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:58:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.373700 -999.00  +24.40  24.95     18   -1.00 1 1 1 1 1   888    0 29.96 167.73 ----- 26.4 24.9 312.4 29.2 29.7 -24.2 29.1 -23.6 28.2 -23.4 28.8 -23.7
2025-11-12T10:58:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:58:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:58:20.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.373700
2025-11-12T10:58:20.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:58:20.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:58:20.880 [DEBUG] [Thread-14516] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:58:20.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:58:20.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:58:20.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:58:20.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:58:07', tmtdew=30.39, humidity=12.64, cloud=0.0, wind=20.24, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:58:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:58:20.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:58:20.979 [DEBUG] [Thread-14519] [transport.py] [_log()] starting thread (client mode): 0x173459c0
2025-11-12T10:58:20.979 [DEBUG] [Thread-14519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:58:20.995 [DEBUG] [Thread-14519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:58:20.996 [INFO] [Thread-14519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:58:21.007 [DEBUG] [Thread-14519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:58:21.007 [DEBUG] [Thread-14519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:58:21.007 [DEBUG] [Thread-14519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:58:21.007 [DEBUG] [Thread-14519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:58:21.007 [DEBUG] [Thread-14519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:58:21.007 [DEBUG] [Thread-14519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] client lang: <none>
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] server lang: <none>
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] kex follows: False
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] Compression: none
2025-11-12T10:58:21.008 [DEBUG] [Thread-14519] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:58:21.068 [DEBUG] [Thread-14519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:58:21.068 [DEBUG] [Thread-14519] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:58:21.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:58:21.069 [DEBUG] [Thread-14519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:58:21.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:58:21.133 [DEBUG] [Thread-14519] [transport.py] [_log()] userauth is OK
2025-11-12T10:58:21.134 [DEBUG] [Thread-14519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:58:21.134 [DEBUG] [Thread-14519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:58:21.134 [DEBUG] [Thread-14519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:58:21.134 [DEBUG] [Thread-14519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:58:21.154 [INFO] [Thread-14519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:58:21.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:58:21.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:58:21.987 [DEBUG] [Thread-14519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:58:21.987 [DEBUG] [Thread-14519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:58:22.038 [DEBUG] [Thread-14519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:58:22.038 [DEBUG] [Thread-14519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:58:22.046 [DEBUG] [Thread-14519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:58:22.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:58:22.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-11-12T10:58:22.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-11-12T10:58:22.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:58:22.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:58:22.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:58:22.078 [DEBUG] [Thread-14519] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:58:28.624 [DEBUG] [Thread-14521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:58:34.214 [DEBUG] [Thread-14522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:58:49.269 [DEBUG] [Thread-14523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:58:52.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:58:52.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:58:52.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-11-12T10:58:52.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 58, 39), 30.27, 12.74, 0.0, 13.66, 24.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:58:52.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:58:39
2025-11-12T10:58:52.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:58:52.975 [DEBUG] [Thread-14524] [transport.py] [_log()] starting thread (client mode): 0x173bf490
2025-11-12T10:58:52.975 [DEBUG] [Thread-14524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:58:52.996 [DEBUG] [Thread-14524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:58:52.997 [INFO] [Thread-14524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:58:52.999 [DEBUG] [Thread-14524] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] client lang: <none>
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] server lang: <none>
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] kex follows: False
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] Compression: none
2025-11-12T10:58:53.000 [DEBUG] [Thread-14524] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:58:53.018 [DEBUG] [Thread-14524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:58:53.019 [DEBUG] [Thread-14524] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:58:53.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:58:53.020 [DEBUG] [Thread-14524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:58:53.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:58:53.022 [DEBUG] [Thread-14524] [transport.py] [_log()] userauth is OK
2025-11-12T10:58:53.022 [DEBUG] [Thread-14524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:58:53.023 [DEBUG] [Thread-14524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:58:53.023 [DEBUG] [Thread-14524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:58:53.023 [DEBUG] [Thread-14524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:58:53.048 [INFO] [Thread-14524] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:58:53.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:58:53.660 [DEBUG] [Thread-14524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:58:53.660 [DEBUG] [Thread-14524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:58:53.661 [DEBUG] [Thread-14524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:58:53.701 [DEBUG] [Thread-14524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:58:53.701 [DEBUG] [Thread-14524] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:58:53.704 [DEBUG] [Thread-14524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:58:53.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:58:53.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:58:53.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:58:53.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:58:53.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:58:53.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:58:53.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:58:53.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:58:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:58:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.374048 -999.00  +24.40  17.19     18   -0.70 1 2 1 1 1   888    0 30.04 167.78 ----- 21.4 17.2 292.0 28.1 29.8 -23.7 29.2 -22.7 28.4 -22.0 28.9 -22.8
2025-11-12T10:58:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:58:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:58:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.374048
2025-11-12T10:58:53.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:58:53.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:58:53.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:58:53.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:58:53.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T10:58:53.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:58:39', tmtdew=30.27, humidity=12.74, cloud=0.0, wind=13.66, temperature=24.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:58:37.747', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:58:53.732 [DEBUG] [Thread-14524] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:58:53.823 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:58:53.834 [DEBUG] [Thread-14527] [transport.py] [_log()] starting thread (client mode): 0x149228f0
2025-11-12T10:58:53.834 [DEBUG] [Thread-14527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:58:53.849 [DEBUG] [Thread-14527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:58:53.849 [INFO] [Thread-14527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:58:53.857 [DEBUG] [Thread-14527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:58:53.857 [DEBUG] [Thread-14527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:58:53.857 [DEBUG] [Thread-14527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:58:53.857 [DEBUG] [Thread-14527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] client lang: <none>
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] server lang: <none>
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] kex follows: False
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:58:53.858 [DEBUG] [Thread-14527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:58:53.859 [DEBUG] [Thread-14527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:58:53.859 [DEBUG] [Thread-14527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:58:53.859 [DEBUG] [Thread-14527] [transport.py] [_log()] Compression: none
2025-11-12T10:58:53.859 [DEBUG] [Thread-14527] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:58:53.918 [DEBUG] [Thread-14527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:58:53.918 [DEBUG] [Thread-14527] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:58:53.919 [DEBUG] [Thread-14527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:58:53.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:58:53.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:58:53.973 [DEBUG] [Thread-14527] [transport.py] [_log()] userauth is OK
2025-11-12T10:58:53.974 [DEBUG] [Thread-14527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:58:53.974 [DEBUG] [Thread-14527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:58:53.974 [DEBUG] [Thread-14527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:58:53.974 [DEBUG] [Thread-14527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:58:53.993 [INFO] [Thread-14527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:58:53.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:58:53.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:58:54.825 [DEBUG] [Thread-14527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:58:54.835 [DEBUG] [Thread-14527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:58:54.874 [DEBUG] [Thread-14527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:58:54.874 [DEBUG] [Thread-14527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:58:54.883 [DEBUG] [Thread-14527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:58:54.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:58:54.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-11-12T10:58:54.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-11-12T10:58:54.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:58:54.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:58:54.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:58:54.919 [DEBUG] [Thread-14527] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:58:57.994 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:58:57.995 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:59:04.304 [DEBUG] [Thread-14529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:59:19.342 [DEBUG] [Thread-14530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:59:24.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:59:24.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:59:24.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T10:59:25.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 59, 11), 30.11, 12.89, 0.0, 18.76, 24.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:59:25.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:59:11
2025-11-12T10:59:25.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:59:25.841 [DEBUG] [Thread-14531] [transport.py] [_log()] starting thread (client mode): 0x17346c80
2025-11-12T10:59:25.841 [DEBUG] [Thread-14531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:59:25.861 [DEBUG] [Thread-14531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:59:25.862 [INFO] [Thread-14531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:59:25.862 [DEBUG] [Thread-14531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:59:25.862 [DEBUG] [Thread-14531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] client lang: <none>
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] server lang: <none>
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] kex follows: False
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:59:25.863 [DEBUG] [Thread-14531] [transport.py] [_log()] Compression: none
2025-11-12T10:59:25.864 [DEBUG] [Thread-14531] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:59:25.873 [DEBUG] [Thread-14531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:59:25.874 [DEBUG] [Thread-14531] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:59:25.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:59:25.875 [DEBUG] [Thread-14531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:59:25.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:59:25.877 [DEBUG] [Thread-14531] [transport.py] [_log()] userauth is OK
2025-11-12T10:59:25.877 [DEBUG] [Thread-14531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:59:25.877 [DEBUG] [Thread-14531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:59:25.877 [DEBUG] [Thread-14531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:59:25.877 [DEBUG] [Thread-14531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:59:25.901 [INFO] [Thread-14531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:59:25.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:59:26.541 [DEBUG] [Thread-14531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:59:26.541 [DEBUG] [Thread-14531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:59:26.542 [DEBUG] [Thread-14531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:59:26.582 [DEBUG] [Thread-14531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:59:26.582 [DEBUG] [Thread-14531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:59:26.585 [DEBUG] [Thread-14531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:59:26.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:59:26.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:59:26.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:59:26.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:59:26.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:59:26.607 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:59:26.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:59:26.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:59:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:59:26.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.374395 -999.00  +24.90  19.66     18   -0.60 1 2 1 1 1   888    0 29.43 150.73 ----- 22.5 19.7 281.0 27.2 30.1 -23.8 29.4 -22.5 28.4 -22.0 29.2 -22.8
2025-11-12T10:59:26.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:59:26.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:59:26.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.374395
2025-11-12T10:59:26.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:59:26.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:59:26.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:59:26.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:59:26.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T10:59:26.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:59:11', tmtdew=30.11, humidity=12.89, cloud=0.0, wind=18.76, temperature=24.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:59:07.728', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:59:26.610 [DEBUG] [Thread-14531] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:59:26.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:59:26.707 [DEBUG] [Thread-14534] [transport.py] [_log()] starting thread (client mode): 0x1737ead0
2025-11-12T10:59:26.707 [DEBUG] [Thread-14534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:59:26.721 [DEBUG] [Thread-14534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:59:26.722 [INFO] [Thread-14534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:59:26.729 [DEBUG] [Thread-14534] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:59:26.729 [DEBUG] [Thread-14534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] client lang: <none>
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] server lang: <none>
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] kex follows: False
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:59:26.730 [DEBUG] [Thread-14534] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:59:26.731 [DEBUG] [Thread-14534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:59:26.731 [DEBUG] [Thread-14534] [transport.py] [_log()] Compression: none
2025-11-12T10:59:26.731 [DEBUG] [Thread-14534] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:59:26.789 [DEBUG] [Thread-14534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:59:26.790 [DEBUG] [Thread-14534] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:59:26.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:59:26.791 [DEBUG] [Thread-14534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:59:26.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:59:26.850 [DEBUG] [Thread-14534] [transport.py] [_log()] userauth is OK
2025-11-12T10:59:26.850 [DEBUG] [Thread-14534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:59:26.850 [DEBUG] [Thread-14534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:59:26.850 [DEBUG] [Thread-14534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:59:26.850 [DEBUG] [Thread-14534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:59:26.869 [INFO] [Thread-14534] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:59:26.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:59:26.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:59:27.701 [DEBUG] [Thread-14534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:59:27.701 [DEBUG] [Thread-14534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:59:27.749 [DEBUG] [Thread-14534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:59:27.749 [DEBUG] [Thread-14534] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:59:27.758 [DEBUG] [Thread-14534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:59:27.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:59:27.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-11-12T10:59:27.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-11-12T10:59:27.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:59:27.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:59:27.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:59:27.795 [DEBUG] [Thread-14534] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:59:28.657 [DEBUG] [Thread-14536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:59:34.382 [DEBUG] [Thread-14537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:59:49.434 [DEBUG] [Thread-14538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:59:57.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T10:59:57.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T10:59:57.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-11-12T10:59:58.135 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:59:58.136 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T10:59:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 10, 59, 43), 30.79, 12.37, 0.0, 23.33, 25.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T10:59:58.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 10:59:43
2025-11-12T10:59:58.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T10:59:58.705 [DEBUG] [Thread-14539] [transport.py] [_log()] starting thread (client mode): 0x17399b10
2025-11-12T10:59:58.706 [DEBUG] [Thread-14539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:59:58.726 [DEBUG] [Thread-14539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T10:59:58.726 [INFO] [Thread-14539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] client lang: <none>
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] server lang: <none>
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] kex follows: False
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] Compression: none
2025-11-12T10:59:58.730 [DEBUG] [Thread-14539] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:59:58.739 [DEBUG] [Thread-14539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:59:58.739 [DEBUG] [Thread-14539] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:59:58.739 [DEBUG] [Thread-14539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T10:59:58.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T10:59:58.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:59:58.741 [DEBUG] [Thread-14539] [transport.py] [_log()] userauth is OK
2025-11-12T10:59:58.741 [DEBUG] [Thread-14539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:59:58.741 [DEBUG] [Thread-14539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:59:58.741 [DEBUG] [Thread-14539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T10:59:58.742 [DEBUG] [Thread-14539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:59:58.761 [INFO] [Thread-14539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:59:58.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T10:59:59.398 [DEBUG] [Thread-14539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T10:59:59.399 [DEBUG] [Thread-14539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T10:59:59.399 [DEBUG] [Thread-14539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T10:59:59.440 [DEBUG] [Thread-14539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T10:59:59.440 [DEBUG] [Thread-14539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T10:59:59.443 [DEBUG] [Thread-14539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T10:59:59.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T10:59:59.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T10:59:59.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T10:59:59.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T10:59:59.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T10:59:59.467 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T10:59:59.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T10:59:59.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T10:59:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T10:59:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.374742 -999.00  +24.60  23.72     18   -0.90 1 1 1 1 1   888    0 28.89 140.98 ----- 30.1 23.7 278.2 34.7 30.1 -27.6 29.4 -23.9 28.1 -27.4 29.2 -24.6
2025-11-12T10:59:59.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T10:59:59.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T10:59:59.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.374742
2025-11-12T10:59:59.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T10:59:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T10:59:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T10:59:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T10:59:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T10:59:59.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T10:59:43', tmtdew=30.79, humidity=12.37, cloud=0.0, wind=23.33, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T08:59:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T10:59:59.470 [DEBUG] [Thread-14539] [transport.py] [_log()] EOF in transport thread
2025-11-12T10:59:59.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T10:59:59.567 [DEBUG] [Thread-14542] [transport.py] [_log()] starting thread (client mode): 0x1739be20
2025-11-12T10:59:59.567 [DEBUG] [Thread-14542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T10:59:59.586 [DEBUG] [Thread-14542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T10:59:59.586 [INFO] [Thread-14542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T10:59:59.593 [DEBUG] [Thread-14542] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] client lang: <none>
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] server lang: <none>
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] kex follows: False
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T10:59:59.594 [DEBUG] [Thread-14542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T10:59:59.595 [DEBUG] [Thread-14542] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T10:59:59.595 [DEBUG] [Thread-14542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T10:59:59.595 [DEBUG] [Thread-14542] [transport.py] [_log()] Compression: none
2025-11-12T10:59:59.595 [DEBUG] [Thread-14542] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T10:59:59.654 [DEBUG] [Thread-14542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T10:59:59.655 [DEBUG] [Thread-14542] [transport.py] [_log()] Switch to new keys ...
2025-11-12T10:59:59.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T10:59:59.656 [DEBUG] [Thread-14542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T10:59:59.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T10:59:59.710 [DEBUG] [Thread-14542] [transport.py] [_log()] userauth is OK
2025-11-12T10:59:59.710 [DEBUG] [Thread-14542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T10:59:59.710 [DEBUG] [Thread-14542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T10:59:59.710 [DEBUG] [Thread-14542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T10:59:59.710 [DEBUG] [Thread-14542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T10:59:59.730 [INFO] [Thread-14542] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T10:59:59.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T10:59:59.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:00:00.607 [DEBUG] [Thread-14542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:00:00.608 [DEBUG] [Thread-14542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:00:00.656 [DEBUG] [Thread-14542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:00:00.656 [DEBUG] [Thread-14542] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:00:00.665 [DEBUG] [Thread-14542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:00:00.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:00:00.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')
2025-11-12T11:00:00.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-11-12T11:00:00.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:00:00.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:00:00.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:00:00.703 [DEBUG] [Thread-14542] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:00:04.473 [DEBUG] [Thread-14544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:00:19.532 [DEBUG] [Thread-14545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:00:28.691 [DEBUG] [Thread-14546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:00:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:00:30.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:00:30.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-11-12T11:00:31.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 0, 15), 30.67, 12.49, 0.0, 25.43, 25.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:00:31.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:00:15
2025-11-12T11:00:31.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:00:31.607 [DEBUG] [Thread-14547] [transport.py] [_log()] starting thread (client mode): 0x14920c10
2025-11-12T11:00:31.608 [DEBUG] [Thread-14547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:00:31.627 [DEBUG] [Thread-14547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:00:31.627 [INFO] [Thread-14547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] client lang: <none>
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] server lang: <none>
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] kex follows: False
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] Compression: none
2025-11-12T11:00:31.629 [DEBUG] [Thread-14547] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:00:31.646 [DEBUG] [Thread-14547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:00:31.646 [DEBUG] [Thread-14547] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:00:31.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:00:31.647 [DEBUG] [Thread-14547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:00:31.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:00:31.649 [DEBUG] [Thread-14547] [transport.py] [_log()] userauth is OK
2025-11-12T11:00:31.649 [DEBUG] [Thread-14547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:00:31.650 [DEBUG] [Thread-14547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:00:31.650 [DEBUG] [Thread-14547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:00:31.650 [DEBUG] [Thread-14547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:00:31.677 [INFO] [Thread-14547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:00:31.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:00:32.238 [DEBUG] [Thread-14547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:00:32.239 [DEBUG] [Thread-14547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:00:32.239 [DEBUG] [Thread-14547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:00:32.280 [DEBUG] [Thread-14547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:00:32.280 [DEBUG] [Thread-14547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:00:32.283 [DEBUG] [Thread-14547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:00:32.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:00:32.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:00:32.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:00:32.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:00:32.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:00:32.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:00:32.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:00:32.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:00:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:00:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.375089 -999.00  +24.60  27.73     17   -1.30 1 1 1 1 1   888    0 28.20 124.85 ----- 24.6 27.7 288.5 34.0 30.1 -24.9 29.4 -24.6 28.3 -25.0 29.2 -23.6
2025-11-12T11:00:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:00:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:00:32.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.375089
2025-11-12T11:00:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:00:32.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:00:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:00:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:00:32.310 [DEBUG] [Thread-14547] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:00:32.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:00:32.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:00:15', tmtdew=30.67, humidity=12.49, cloud=0.0, wind=25.43, temperature=25.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:00:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:00:32.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:00:32.406 [DEBUG] [Thread-14550] [transport.py] [_log()] starting thread (client mode): 0x14921ab0
2025-11-12T11:00:32.406 [DEBUG] [Thread-14550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:00:32.421 [DEBUG] [Thread-14550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:00:32.422 [INFO] [Thread-14550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:00:32.429 [DEBUG] [Thread-14550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:00:32.429 [DEBUG] [Thread-14550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:00:32.429 [DEBUG] [Thread-14550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] client lang: <none>
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] server lang: <none>
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] kex follows: False
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] Compression: none
2025-11-12T11:00:32.430 [DEBUG] [Thread-14550] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:00:32.490 [DEBUG] [Thread-14550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:00:32.490 [DEBUG] [Thread-14550] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:00:32.491 [DEBUG] [Thread-14550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:00:32.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:00:32.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:00:32.545 [DEBUG] [Thread-14550] [transport.py] [_log()] userauth is OK
2025-11-12T11:00:32.546 [DEBUG] [Thread-14550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:00:32.546 [DEBUG] [Thread-14550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:00:32.546 [DEBUG] [Thread-14550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:00:32.546 [DEBUG] [Thread-14550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:00:32.565 [INFO] [Thread-14550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:00:32.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:00:32.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:00:33.419 [DEBUG] [Thread-14550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:00:33.419 [DEBUG] [Thread-14550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:00:33.467 [DEBUG] [Thread-14550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:00:33.467 [DEBUG] [Thread-14550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:00:33.477 [DEBUG] [Thread-14550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:00:33.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:00:33.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:00:33.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-11-12T11:00:33.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:00:33.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:00:33.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:00:33.514 [DEBUG] [Thread-14550] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:00:34.566 [DEBUG] [Thread-14552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:00:49.622 [DEBUG] [Thread-14553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:00:58.276 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:00:58.277 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:01:03.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:01:03.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:01:03.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:01:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 0, 47), 31.37, 12.03, 0.0, 24.95, 25.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:01:04.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:00:47
2025-11-12T11:01:04.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:01:04.436 [DEBUG] [Thread-14554] [transport.py] [_log()] starting thread (client mode): 0x17398550
2025-11-12T11:01:04.436 [DEBUG] [Thread-14554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:01:04.453 [DEBUG] [Thread-14554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:01:04.454 [INFO] [Thread-14554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] client lang: <none>
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] server lang: <none>
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] kex follows: False
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:01:04.455 [DEBUG] [Thread-14554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:01:04.456 [DEBUG] [Thread-14554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:01:04.456 [DEBUG] [Thread-14554] [transport.py] [_log()] Compression: none
2025-11-12T11:01:04.456 [DEBUG] [Thread-14554] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:01:04.474 [DEBUG] [Thread-14554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:01:04.475 [DEBUG] [Thread-14554] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:01:04.475 [DEBUG] [Thread-14554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:01:04.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:01:04.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:01:04.477 [DEBUG] [Thread-14554] [transport.py] [_log()] userauth is OK
2025-11-12T11:01:04.477 [DEBUG] [Thread-14554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:01:04.477 [DEBUG] [Thread-14554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:01:04.477 [DEBUG] [Thread-14554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:01:04.477 [DEBUG] [Thread-14554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:01:04.502 [INFO] [Thread-14554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:01:04.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:01:04.652 [DEBUG] [Thread-14556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:01:05.093 [DEBUG] [Thread-14554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:01:05.094 [DEBUG] [Thread-14554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:01:05.094 [DEBUG] [Thread-14554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:01:05.135 [DEBUG] [Thread-14554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:01:05.135 [DEBUG] [Thread-14554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:01:05.137 [DEBUG] [Thread-14554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:01:05.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:01:05.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:01:05.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:01:05.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:01:05.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:01:05.156 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:01:05.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:01:05.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:01:05.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:01:05.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.375437 -999.00  +24.60  22.68     18   -1.30 1 1 1 1 1   888    0 28.10 113.31 ----- 22.0 22.7 276.6 26.2 30.0 -27.7 29.4 -25.3 28.1 -26.7 29.1 -25.2
2025-11-12T11:01:05.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:01:05.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:01:05.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.375437
2025-11-12T11:01:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:01:05.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:01:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:01:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:01:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:01:05.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:00:47', tmtdew=31.37, humidity=12.03, cloud=0.0, wind=24.95, temperature=25.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:00:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:01:05.159 [DEBUG] [Thread-14554] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:01:05.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:01:05.254 [DEBUG] [Thread-14558] [transport.py] [_log()] starting thread (client mode): 0x1737f070
2025-11-12T11:01:05.254 [DEBUG] [Thread-14558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:01:05.268 [DEBUG] [Thread-14558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:01:05.269 [INFO] [Thread-14558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] client lang: <none>
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] server lang: <none>
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] kex follows: False
2025-11-12T11:01:05.276 [DEBUG] [Thread-14558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:01:05.277 [DEBUG] [Thread-14558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:01:05.277 [DEBUG] [Thread-14558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:01:05.277 [DEBUG] [Thread-14558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:01:05.277 [DEBUG] [Thread-14558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:01:05.277 [DEBUG] [Thread-14558] [transport.py] [_log()] Compression: none
2025-11-12T11:01:05.277 [DEBUG] [Thread-14558] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:01:05.334 [DEBUG] [Thread-14558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:01:05.335 [DEBUG] [Thread-14558] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:01:05.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:01:05.336 [DEBUG] [Thread-14558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:01:05.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:01:05.394 [DEBUG] [Thread-14558] [transport.py] [_log()] userauth is OK
2025-11-12T11:01:05.394 [DEBUG] [Thread-14558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:01:05.394 [DEBUG] [Thread-14558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:01:05.394 [DEBUG] [Thread-14558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:01:05.394 [DEBUG] [Thread-14558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:01:05.413 [INFO] [Thread-14558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:01:05.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:01:05.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:01:06.242 [DEBUG] [Thread-14558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:01:06.242 [DEBUG] [Thread-14558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:01:06.291 [DEBUG] [Thread-14558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:01:06.291 [DEBUG] [Thread-14558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:01:06.300 [DEBUG] [Thread-14558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:01:06.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:01:06.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-11-12T11:01:06.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-11-12T11:01:06.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:01:06.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:01:06.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:01:06.337 [DEBUG] [Thread-14558] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:01:19.685 [DEBUG] [Thread-14560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:01:28.726 [DEBUG] [Thread-14561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:01:34.746 [DEBUG] [Thread-14562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:01:36.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:01:36.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:01:36.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-11-12T11:01:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 1, 19), 31.49, 11.91, 0.0, 22.97, 25.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:01:37.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:01:19
2025-11-12T11:01:37.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:01:37.286 [DEBUG] [Thread-14563] [transport.py] [_log()] starting thread (client mode): 0x1737d180
2025-11-12T11:01:37.286 [DEBUG] [Thread-14563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:01:37.306 [DEBUG] [Thread-14563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:01:37.306 [INFO] [Thread-14563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] client lang: <none>
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] server lang: <none>
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] kex follows: False
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] Compression: none
2025-11-12T11:01:37.309 [DEBUG] [Thread-14563] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:01:37.325 [DEBUG] [Thread-14563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:01:37.325 [DEBUG] [Thread-14563] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:01:37.325 [DEBUG] [Thread-14563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:01:37.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:01:37.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:01:37.326 [DEBUG] [Thread-14563] [transport.py] [_log()] userauth is OK
2025-11-12T11:01:37.326 [DEBUG] [Thread-14563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:01:37.326 [DEBUG] [Thread-14563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:01:37.326 [DEBUG] [Thread-14563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:01:37.326 [DEBUG] [Thread-14563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:01:37.339 [INFO] [Thread-14563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:01:37.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:01:37.895 [DEBUG] [Thread-14563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:01:37.895 [DEBUG] [Thread-14563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:01:37.895 [DEBUG] [Thread-14563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:01:37.936 [DEBUG] [Thread-14563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:01:37.936 [DEBUG] [Thread-14563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:01:37.938 [DEBUG] [Thread-14563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:01:37.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:01:37.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:01:37.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:01:37.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:01:37.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:01:37.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:01:37.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.375437 -999.00  +24.60  22.68     18   -1.30 1 1 1 1 1   888    0 28.10 113.31 ----- 22.0 22.7 276.6 26.2 30.0 -27.7 29.4 -25.3 28.1 -26.7 29.1 -25.2
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.375437
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:01:37.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:01:19', tmtdew=31.49, humidity=11.91, cloud=0.0, wind=22.97, temperature=25.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:00:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:01:37.958 [DEBUG] [Thread-14563] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:01:38.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:01:38.046 [DEBUG] [Thread-14566] [transport.py] [_log()] starting thread (client mode): 0x1737ebc0
2025-11-12T11:01:38.046 [DEBUG] [Thread-14566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:01:38.061 [DEBUG] [Thread-14566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:01:38.061 [INFO] [Thread-14566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:01:38.068 [DEBUG] [Thread-14566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:01:38.068 [DEBUG] [Thread-14566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:01:38.068 [DEBUG] [Thread-14566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:01:38.068 [DEBUG] [Thread-14566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:01:38.068 [DEBUG] [Thread-14566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:01:38.068 [DEBUG] [Thread-14566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:01:38.068 [DEBUG] [Thread-14566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:01:38.068 [DEBUG] [Thread-14566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] client lang: <none>
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] server lang: <none>
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] kex follows: False
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] Compression: none
2025-11-12T11:01:38.069 [DEBUG] [Thread-14566] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:01:38.124 [DEBUG] [Thread-14566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:01:38.124 [DEBUG] [Thread-14566] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:01:38.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:01:38.125 [DEBUG] [Thread-14566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:01:38.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:01:38.181 [DEBUG] [Thread-14566] [transport.py] [_log()] userauth is OK
2025-11-12T11:01:38.181 [DEBUG] [Thread-14566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:01:38.181 [DEBUG] [Thread-14566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:01:38.181 [DEBUG] [Thread-14566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:01:38.181 [DEBUG] [Thread-14566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:01:38.199 [INFO] [Thread-14566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:01:38.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:01:38.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:01:39.018 [DEBUG] [Thread-14566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:01:39.019 [DEBUG] [Thread-14566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:01:39.066 [DEBUG] [Thread-14566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:01:39.066 [DEBUG] [Thread-14566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:01:39.075 [DEBUG] [Thread-14566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:01:39.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:01:39.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-11-12T11:01:39.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:01:39.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:01:39.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:01:39.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:01:39.109 [DEBUG] [Thread-14566] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:01:49.779 [DEBUG] [Thread-14568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:01:58.416 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:01:58.417 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:02:04.832 [DEBUG] [Thread-14569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:02:09.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:02:09.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:02: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-11-12T11:02:09.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 1, 51), 30.69, 12.66, 0.0, 29.26, 25.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:02:09.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:01:51
2025-11-12T11:02:09.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:02:09.997 [DEBUG] [Thread-14570] [transport.py] [_log()] starting thread (client mode): 0x17398af0
2025-11-12T11:02:09.997 [DEBUG] [Thread-14570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:02:10.018 [DEBUG] [Thread-14570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:02:10.019 [INFO] [Thread-14570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:02:10.022 [DEBUG] [Thread-14570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:02:10.022 [DEBUG] [Thread-14570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] client lang: <none>
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] server lang: <none>
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] kex follows: False
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:02:10.023 [DEBUG] [Thread-14570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:02:10.024 [DEBUG] [Thread-14570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:02:10.024 [DEBUG] [Thread-14570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:02:10.024 [DEBUG] [Thread-14570] [transport.py] [_log()] Compression: none
2025-11-12T11:02:10.024 [DEBUG] [Thread-14570] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:02:10.043 [DEBUG] [Thread-14570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:02:10.044 [DEBUG] [Thread-14570] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:02:10.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:02:10.045 [DEBUG] [Thread-14570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:02:10.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:02:10.048 [DEBUG] [Thread-14570] [transport.py] [_log()] userauth is OK
2025-11-12T11:02:10.048 [DEBUG] [Thread-14570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:02:10.048 [DEBUG] [Thread-14570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:02:10.048 [DEBUG] [Thread-14570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:02:10.048 [DEBUG] [Thread-14570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:02:10.073 [INFO] [Thread-14570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:02:10.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:02:10.731 [DEBUG] [Thread-14570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:02:10.732 [DEBUG] [Thread-14570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:02:10.732 [DEBUG] [Thread-14570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:02:10.772 [DEBUG] [Thread-14570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:02:10.772 [DEBUG] [Thread-14570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:02:10.775 [DEBUG] [Thread-14570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:02:10.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:02:10.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:02:10.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:02:10.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:02:10.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:02:10.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:02:10.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:02:10.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:02:10.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:02:10.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.375784 -999.00  +24.60  21.00     18   -1.20 1 1 1 1 1   888    0 28.21 113.97 ----- 20.4 21.0 289.0 29.7 30.0 -27.5 29.4 -24.3 28.1 -25.7 29.1 -24.8
2025-11-12T11:02:10.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:02:10.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:02:10.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.375784
2025-11-12T11:02:10.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:02:10.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:02:10.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:02:10.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:02:10.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:02:10.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:01:51', tmtdew=30.69, humidity=12.66, cloud=0.0, wind=29.26, temperature=25.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:01:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:02:10.800 [DEBUG] [Thread-14570] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:02:10.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:02:10.896 [DEBUG] [Thread-14573] [transport.py] [_log()] starting thread (client mode): 0x173be470
2025-11-12T11:02:10.896 [DEBUG] [Thread-14573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:02:10.912 [DEBUG] [Thread-14573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:02:10.912 [INFO] [Thread-14573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] client lang: <none>
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] server lang: <none>
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] kex follows: False
2025-11-12T11:02:10.920 [DEBUG] [Thread-14573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:02:10.921 [DEBUG] [Thread-14573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:02:10.921 [DEBUG] [Thread-14573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:02:10.921 [DEBUG] [Thread-14573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:02:10.921 [DEBUG] [Thread-14573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:02:10.921 [DEBUG] [Thread-14573] [transport.py] [_log()] Compression: none
2025-11-12T11:02:10.921 [DEBUG] [Thread-14573] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:02:10.976 [DEBUG] [Thread-14573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:02:10.977 [DEBUG] [Thread-14573] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:02:10.977 [DEBUG] [Thread-14573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:02:10.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:02:10.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:02:11.033 [DEBUG] [Thread-14573] [transport.py] [_log()] userauth is OK
2025-11-12T11:02:11.033 [DEBUG] [Thread-14573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:02:11.034 [DEBUG] [Thread-14573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:02:11.034 [DEBUG] [Thread-14573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:02:11.034 [DEBUG] [Thread-14573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:02:11.053 [INFO] [Thread-14573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:02:11.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:02:11.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:02:11.889 [DEBUG] [Thread-14573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:02:11.889 [DEBUG] [Thread-14573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:02:11.938 [DEBUG] [Thread-14573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:02:11.938 [DEBUG] [Thread-14573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:02:11.947 [DEBUG] [Thread-14573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:02:11.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:02:11.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-11-12T11:02:11.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-11-12T11:02:11.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:02:11.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:02:11.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:02:11.982 [DEBUG] [Thread-14573] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:02:19.866 [DEBUG] [Thread-14575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:02:28.760 [DEBUG] [Thread-14576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:02:34.914 [DEBUG] [Thread-14577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:02:42.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:02:42.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:02:42.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-11-12T11:02:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 2, 23), 30.7, 12.66, 0.0, 30.35, 25.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:02:42.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:02:23
2025-11-12T11:02:42.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:02:42.902 [DEBUG] [Thread-14578] [transport.py] [_log()] starting thread (client mode): 0x173bca00
2025-11-12T11:02:42.903 [DEBUG] [Thread-14578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:02:42.922 [DEBUG] [Thread-14578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:02:42.922 [INFO] [Thread-14578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:02:42.925 [DEBUG] [Thread-14578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] client lang: <none>
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] server lang: <none>
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] kex follows: False
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] Compression: none
2025-11-12T11:02:42.926 [DEBUG] [Thread-14578] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:02:42.943 [DEBUG] [Thread-14578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:02:42.944 [DEBUG] [Thread-14578] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:02:42.944 [DEBUG] [Thread-14578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:02:42.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:02:42.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:02:42.947 [DEBUG] [Thread-14578] [transport.py] [_log()] userauth is OK
2025-11-12T11:02:42.947 [DEBUG] [Thread-14578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:02:42.947 [DEBUG] [Thread-14578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:02:42.947 [DEBUG] [Thread-14578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:02:42.947 [DEBUG] [Thread-14578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:02:42.971 [INFO] [Thread-14578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:02:42.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:02:43.613 [DEBUG] [Thread-14578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:02:43.613 [DEBUG] [Thread-14578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:02:43.614 [DEBUG] [Thread-14578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:02:43.655 [DEBUG] [Thread-14578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:02:43.655 [DEBUG] [Thread-14578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:02:43.659 [DEBUG] [Thread-14578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:02:43.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:02:43.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:02:43.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:02:43.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:02:43.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:02:43.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:02:43.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:02:43.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:02:43.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:02:43.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.376478 -999.00  +25.10  27.05     18   -0.50 1 1 1 1 1   888    0 28.11 106.10 ----- 26.6 27.1 301.8 29.6 30.4 -25.8 29.6 -24.2 28.4 -25.1 29.4 -23.6
2025-11-12T11:02:43.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:02:43.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:02:43.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.376478
2025-11-12T11:02:43.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:02:43.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:02:43.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:02:43.685 [DEBUG] [Thread-14578] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:02:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:02:43.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:02:43.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:02:23', tmtdew=30.7, humidity=12.66, cloud=0.0, wind=30.35, temperature=25.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:02:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:02:43.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:02:43.780 [DEBUG] [Thread-14581] [transport.py] [_log()] starting thread (client mode): 0x173e9450
2025-11-12T11:02:43.780 [DEBUG] [Thread-14581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:02:43.795 [DEBUG] [Thread-14581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:02:43.795 [INFO] [Thread-14581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:02:43.802 [DEBUG] [Thread-14581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:02:43.803 [DEBUG] [Thread-14581] [transport.py] [_log()] client lang: <none>
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] server lang: <none>
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] kex follows: False
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] Compression: none
2025-11-12T11:02:43.804 [DEBUG] [Thread-14581] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:02:43.862 [DEBUG] [Thread-14581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:02:43.863 [DEBUG] [Thread-14581] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:02:43.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:02:43.864 [DEBUG] [Thread-14581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:02:43.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:02:43.918 [DEBUG] [Thread-14581] [transport.py] [_log()] userauth is OK
2025-11-12T11:02:43.918 [DEBUG] [Thread-14581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:02:43.918 [DEBUG] [Thread-14581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:02:43.918 [DEBUG] [Thread-14581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:02:43.918 [DEBUG] [Thread-14581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:02:43.938 [INFO] [Thread-14581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:02:43.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:02:43.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:02:44.794 [DEBUG] [Thread-14581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:02:44.794 [DEBUG] [Thread-14581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:02:44.842 [DEBUG] [Thread-14581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:02:44.842 [DEBUG] [Thread-14581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:02:44.851 [DEBUG] [Thread-14581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:02:44.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:02:44.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-11-12T11:02:44.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') -> 00000000
2025-11-12T11:02:44.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:02:44.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:02:44.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:02:44.887 [DEBUG] [Thread-14581] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:02:49.956 [DEBUG] [Thread-14583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:02:58.561 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:02:58.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:03:05.004 [DEBUG] [Thread-14584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:03:14.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:03:14.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:03:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:03:15.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 2, 55), 30.55, 12.76, 0.0, 24.95, 25.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:03:15.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:02:55
2025-11-12T11:03:15.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:03:15.806 [DEBUG] [Thread-14585] [transport.py] [_log()] starting thread (client mode): 0x173e87f0
2025-11-12T11:03:15.806 [DEBUG] [Thread-14585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:03:15.825 [DEBUG] [Thread-14585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:03:15.826 [INFO] [Thread-14585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] client lang: <none>
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] server lang: <none>
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] kex follows: False
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] Compression: none
2025-11-12T11:03:15.829 [DEBUG] [Thread-14585] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:03:15.846 [DEBUG] [Thread-14585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:03:15.847 [DEBUG] [Thread-14585] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:03:15.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:03:15.848 [DEBUG] [Thread-14585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:03:15.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:03:15.850 [DEBUG] [Thread-14585] [transport.py] [_log()] userauth is OK
2025-11-12T11:03:15.851 [DEBUG] [Thread-14585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:03:15.851 [DEBUG] [Thread-14585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:03:15.851 [DEBUG] [Thread-14585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:03:15.851 [DEBUG] [Thread-14585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:03:15.865 [INFO] [Thread-14585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:03:15.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:03:16.501 [DEBUG] [Thread-14585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:03:16.501 [DEBUG] [Thread-14585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:03:16.502 [DEBUG] [Thread-14585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:03:16.542 [DEBUG] [Thread-14585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:03:16.542 [DEBUG] [Thread-14585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:03:16.545 [DEBUG] [Thread-14585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:03:16.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:03:16.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:03:16.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:03:16.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:03:16.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:03:16.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:03:16.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:03:16.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:03:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:03:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.376825 -999.00  +24.90  21.18     18   -0.70 1 1 1 1 1   888    0 27.69 90.34 ----- 21.5 21.2 268.6 27.9 30.4 -25.4 29.7 -24.7 28.6 -27.7 29.4 -24.1
2025-11-12T11:03:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:03:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:03:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.376825
2025-11-12T11:03:16.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:03:16.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:03:16.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:03:16.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:03:16.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:03:16.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:02:55', tmtdew=30.55, humidity=12.76, cloud=0.0, wind=24.95, temperature=25.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:02:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:03:16.571 [DEBUG] [Thread-14585] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:03:16.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:03:16.667 [DEBUG] [Thread-14588] [transport.py] [_log()] starting thread (client mode): 0x17345bd0
2025-11-12T11:03:16.667 [DEBUG] [Thread-14588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:03:16.681 [DEBUG] [Thread-14588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:03:16.682 [INFO] [Thread-14588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:03:16.689 [DEBUG] [Thread-14588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:03:16.689 [DEBUG] [Thread-14588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] client lang: <none>
2025-11-12T11:03:16.690 [DEBUG] [Thread-14588] [transport.py] [_log()] server lang: <none>
2025-11-12T11:03:16.691 [DEBUG] [Thread-14588] [transport.py] [_log()] kex follows: False
2025-11-12T11:03:16.691 [DEBUG] [Thread-14588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:03:16.691 [DEBUG] [Thread-14588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:03:16.691 [DEBUG] [Thread-14588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:03:16.691 [DEBUG] [Thread-14588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:03:16.691 [DEBUG] [Thread-14588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:03:16.691 [DEBUG] [Thread-14588] [transport.py] [_log()] Compression: none
2025-11-12T11:03:16.692 [DEBUG] [Thread-14588] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:03:16.749 [DEBUG] [Thread-14588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:03:16.750 [DEBUG] [Thread-14588] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:03:16.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:03:16.752 [DEBUG] [Thread-14588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:03:16.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:03:16.806 [DEBUG] [Thread-14588] [transport.py] [_log()] userauth is OK
2025-11-12T11:03:16.806 [DEBUG] [Thread-14588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:03:16.806 [DEBUG] [Thread-14588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:03:16.806 [DEBUG] [Thread-14588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:03:16.806 [DEBUG] [Thread-14588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:03:16.825 [INFO] [Thread-14588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:03:16.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:03:16.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:03:17.683 [DEBUG] [Thread-14588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:03:17.684 [DEBUG] [Thread-14588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:03:17.732 [DEBUG] [Thread-14588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:03:17.732 [DEBUG] [Thread-14588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:03:17.741 [DEBUG] [Thread-14588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:03:17.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:03:17.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-11-12T11:03:17.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:03:17.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:03:17.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:03:17.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:03:17.778 [DEBUG] [Thread-14588] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:03:20.040 [DEBUG] [Thread-14590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:03:28.788 [DEBUG] [Thread-14591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:03:35.081 [DEBUG] [Thread-14592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:03:47.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:03:47.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:03:47.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:03:48.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 3, 27), 30.99, 12.36, 0.0, 28.25, 25.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:03:48.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:03:27
2025-11-12T11:03:48.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:03:48.685 [DEBUG] [Thread-14593] [transport.py] [_log()] starting thread (client mode): 0x1739a590
2025-11-12T11:03:48.685 [DEBUG] [Thread-14593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:03:48.706 [DEBUG] [Thread-14593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:03:48.706 [INFO] [Thread-14593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:03:48.709 [DEBUG] [Thread-14593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] client lang: <none>
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] server lang: <none>
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] kex follows: False
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] Compression: none
2025-11-12T11:03:48.710 [DEBUG] [Thread-14593] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:03:48.730 [DEBUG] [Thread-14593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:03:48.730 [DEBUG] [Thread-14593] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:03:48.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:03:48.732 [DEBUG] [Thread-14593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:03:48.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:03:48.734 [DEBUG] [Thread-14593] [transport.py] [_log()] userauth is OK
2025-11-12T11:03:48.734 [DEBUG] [Thread-14593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:03:48.734 [DEBUG] [Thread-14593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:03:48.734 [DEBUG] [Thread-14593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:03:48.734 [DEBUG] [Thread-14593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:03:48.759 [INFO] [Thread-14593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:03:48.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:03:49.395 [DEBUG] [Thread-14593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:03:49.396 [DEBUG] [Thread-14593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:03:49.396 [DEBUG] [Thread-14593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:03:49.437 [DEBUG] [Thread-14593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:03:49.437 [DEBUG] [Thread-14593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:03:49.441 [DEBUG] [Thread-14593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:03:49.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:03:49.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:03:49.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:03:49.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:03:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:03:49.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:03:49.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:03:49.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:03:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:03:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.377173 -999.00  +24.60  18.50     18   -1.00 1 1 1 1 1   888    0 27.18 72.03 ----- 20.1 18.5 290.2 25.1 30.2 -25.7 29.6 -25.0 28.5 -25.8 29.3 -24.1
2025-11-12T11:03:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:03:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:03:49.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.377173
2025-11-12T11:03:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:03:49.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:03:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:03:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:03:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:03:49.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:03:27', tmtdew=30.99, humidity=12.36, cloud=0.0, wind=28.25, temperature=25.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:03:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:03:49.469 [DEBUG] [Thread-14593] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:03:49.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:03:49.565 [DEBUG] [Thread-14596] [transport.py] [_log()] starting thread (client mode): 0x14923790
2025-11-12T11:03:49.565 [DEBUG] [Thread-14596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:03:49.581 [DEBUG] [Thread-14596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:03:49.581 [INFO] [Thread-14596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] client lang: <none>
2025-11-12T11:03:49.589 [DEBUG] [Thread-14596] [transport.py] [_log()] server lang: <none>
2025-11-12T11:03:49.590 [DEBUG] [Thread-14596] [transport.py] [_log()] kex follows: False
2025-11-12T11:03:49.590 [DEBUG] [Thread-14596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:03:49.590 [DEBUG] [Thread-14596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:03:49.590 [DEBUG] [Thread-14596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:03:49.590 [DEBUG] [Thread-14596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:03:49.590 [DEBUG] [Thread-14596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:03:49.590 [DEBUG] [Thread-14596] [transport.py] [_log()] Compression: none
2025-11-12T11:03:49.590 [DEBUG] [Thread-14596] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:03:49.650 [DEBUG] [Thread-14596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:03:49.650 [DEBUG] [Thread-14596] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:03:49.651 [DEBUG] [Thread-14596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:03:49.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:03:49.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:03:49.706 [DEBUG] [Thread-14596] [transport.py] [_log()] userauth is OK
2025-11-12T11:03:49.706 [DEBUG] [Thread-14596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:03:49.706 [DEBUG] [Thread-14596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:03:49.706 [DEBUG] [Thread-14596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:03:49.706 [DEBUG] [Thread-14596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:03:49.725 [INFO] [Thread-14596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:03:49.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:03:49.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:03:50.114 [DEBUG] [Thread-14598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:03:50.556 [DEBUG] [Thread-14596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:03:50.557 [DEBUG] [Thread-14596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:03:50.604 [DEBUG] [Thread-14596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:03:50.604 [DEBUG] [Thread-14596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:03:50.613 [DEBUG] [Thread-14596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:03:50.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:03:50.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:03:50.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-11-12T11:03:50.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:03:50.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:03:50.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:03:50.647 [DEBUG] [Thread-14596] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:03:58.707 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:03:58.708 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:04:05.166 [DEBUG] [Thread-14599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:04:20.203 [DEBUG] [Thread-14600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:04:20.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:04:20.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:04:20.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:04:21.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 3, 59), 30.94, 12.33, 0.0, 27.74, 25.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:04:21.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:03:59
2025-11-12T11:04:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:04:21.564 [DEBUG] [Thread-14601] [transport.py] [_log()] starting thread (client mode): 0x173bd3f0
2025-11-12T11:04:21.565 [DEBUG] [Thread-14601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:04:21.584 [DEBUG] [Thread-14601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:04:21.585 [INFO] [Thread-14601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:04:21.588 [DEBUG] [Thread-14601] [transport.py] [_log()] client lang: <none>
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] server lang: <none>
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] kex follows: False
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] Compression: none
2025-11-12T11:04:21.589 [DEBUG] [Thread-14601] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:04:21.606 [DEBUG] [Thread-14601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:04:21.606 [DEBUG] [Thread-14601] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:04:21.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:04:21.607 [DEBUG] [Thread-14601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:04:21.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:04:21.609 [DEBUG] [Thread-14601] [transport.py] [_log()] userauth is OK
2025-11-12T11:04:21.610 [DEBUG] [Thread-14601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:04:21.610 [DEBUG] [Thread-14601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:04:21.610 [DEBUG] [Thread-14601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:04:21.610 [DEBUG] [Thread-14601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:04:21.634 [INFO] [Thread-14601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:04:21.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:04:22.281 [DEBUG] [Thread-14601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:04:22.281 [DEBUG] [Thread-14601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:04:22.281 [DEBUG] [Thread-14601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:04:22.321 [DEBUG] [Thread-14601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:04:22.322 [DEBUG] [Thread-14601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:04:22.325 [DEBUG] [Thread-14601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:04:22.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:04:22.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:04:22.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:04:22.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:04:22.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:04:22.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:04:22.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:04:22.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:04:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:04:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.377520 -999.00  +24.80  15.44     18   -0.80 1 1 1 1 1   888    0 27.23 59.53 ----- 16.5 15.4 300.2 25.1 30.5 -26.4 29.7 -24.9 28.6 -23.7 29.4 -24.5
2025-11-12T11:04:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:04:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:04:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.377520
2025-11-12T11:04:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:04:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:04:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:04:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:04:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:04:22.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:03:59', tmtdew=30.94, humidity=12.33, cloud=0.0, wind=27.74, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:03:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:04:22.351 [DEBUG] [Thread-14601] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:04:22.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:04:22.449 [DEBUG] [Thread-14604] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T11:04:22.449 [DEBUG] [Thread-14604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:04:22.464 [DEBUG] [Thread-14604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:04:22.464 [INFO] [Thread-14604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:04:22.472 [DEBUG] [Thread-14604] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] client lang: <none>
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] server lang: <none>
2025-11-12T11:04:22.473 [DEBUG] [Thread-14604] [transport.py] [_log()] kex follows: False
2025-11-12T11:04:22.474 [DEBUG] [Thread-14604] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:04:22.474 [DEBUG] [Thread-14604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:04:22.474 [DEBUG] [Thread-14604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:04:22.474 [DEBUG] [Thread-14604] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:04:22.474 [DEBUG] [Thread-14604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:04:22.474 [DEBUG] [Thread-14604] [transport.py] [_log()] Compression: none
2025-11-12T11:04:22.474 [DEBUG] [Thread-14604] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:04:22.530 [DEBUG] [Thread-14604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:04:22.530 [DEBUG] [Thread-14604] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:04:22.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:04:22.532 [DEBUG] [Thread-14604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:04:22.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:04:22.586 [DEBUG] [Thread-14604] [transport.py] [_log()] userauth is OK
2025-11-12T11:04:22.586 [DEBUG] [Thread-14604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:04:22.586 [DEBUG] [Thread-14604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:04:22.586 [DEBUG] [Thread-14604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:04:22.587 [DEBUG] [Thread-14604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:04:22.606 [INFO] [Thread-14604] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:04:22.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:04:22.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:04:23.443 [DEBUG] [Thread-14604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:04:23.443 [DEBUG] [Thread-14604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:04:23.491 [DEBUG] [Thread-14604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:04:23.492 [DEBUG] [Thread-14604] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:04:23.501 [DEBUG] [Thread-14604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:04:23.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:04:23.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-11-12T11:04:23.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-11-12T11:04:23.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:04:23.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:04:23.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:04:23.538 [DEBUG] [Thread-14604] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:04:28.821 [DEBUG] [Thread-14606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:04:35.239 [DEBUG] [Thread-14607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:04:50.295 [DEBUG] [Thread-14608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:04:53.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:04:53.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:04:53.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-11-12T11:04:54.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 4, 31), 30.77, 12.46, 0.0, 24.9, 24.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:04:54.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:04:31
2025-11-12T11:04:54.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:04:54.449 [DEBUG] [Thread-14609] [transport.py] [_log()] starting thread (client mode): 0x1737f700
2025-11-12T11:04:54.450 [DEBUG] [Thread-14609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:04:54.469 [DEBUG] [Thread-14609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:04:54.469 [INFO] [Thread-14609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:04:54.472 [DEBUG] [Thread-14609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] client lang: <none>
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] server lang: <none>
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] kex follows: False
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] Compression: none
2025-11-12T11:04:54.473 [DEBUG] [Thread-14609] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:04:54.492 [DEBUG] [Thread-14609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:04:54.493 [DEBUG] [Thread-14609] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:04:54.493 [DEBUG] [Thread-14609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:04:54.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:04:54.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:04:54.495 [DEBUG] [Thread-14609] [transport.py] [_log()] userauth is OK
2025-11-12T11:04:54.496 [DEBUG] [Thread-14609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:04:54.496 [DEBUG] [Thread-14609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:04:54.496 [DEBUG] [Thread-14609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:04:54.496 [DEBUG] [Thread-14609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:04:54.521 [INFO] [Thread-14609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:04:54.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:04:55.152 [DEBUG] [Thread-14609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:04:55.153 [DEBUG] [Thread-14609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:04:55.153 [DEBUG] [Thread-14609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:04:55.193 [DEBUG] [Thread-14609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:04:55.194 [DEBUG] [Thread-14609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:04:55.197 [DEBUG] [Thread-14609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:04:55.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:04:55.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:04:55.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:04:55.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:04:55.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:04:55.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:04:55.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:04:55.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:04:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:04:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.377867 -999.00  +24.80  31.92     17   -1.40 1 1 2 1 1   888    0 26.78 45.92 ----- 29.7 31.9 276.4 35.8 30.5 -27.5 29.6 -26.3 28.4 -28.8 29.5 -24.8
2025-11-12T11:04:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:04:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:04:55.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.377867
2025-11-12T11:04:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:04:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:04:55.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:04:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:04:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:04:55.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:04:31', tmtdew=30.77, humidity=12.46, cloud=0.0, wind=24.9, temperature=24.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:04:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:04:55.223 [DEBUG] [Thread-14609] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:04:55.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:04:55.319 [DEBUG] [Thread-14612] [transport.py] [_log()] starting thread (client mode): 0x1493ce20
2025-11-12T11:04:55.319 [DEBUG] [Thread-14612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:04:55.334 [DEBUG] [Thread-14612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:04:55.334 [INFO] [Thread-14612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] client lang: <none>
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] server lang: <none>
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] kex follows: False
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:04:55.342 [DEBUG] [Thread-14612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:04:55.343 [DEBUG] [Thread-14612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:04:55.343 [DEBUG] [Thread-14612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:04:55.343 [DEBUG] [Thread-14612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:04:55.343 [DEBUG] [Thread-14612] [transport.py] [_log()] Compression: none
2025-11-12T11:04:55.343 [DEBUG] [Thread-14612] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:04:55.402 [DEBUG] [Thread-14612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:04:55.403 [DEBUG] [Thread-14612] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:04:55.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:04:55.404 [DEBUG] [Thread-14612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:04:55.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:04:55.462 [DEBUG] [Thread-14612] [transport.py] [_log()] userauth is OK
2025-11-12T11:04:55.462 [DEBUG] [Thread-14612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:04:55.462 [DEBUG] [Thread-14612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:04:55.462 [DEBUG] [Thread-14612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:04:55.462 [DEBUG] [Thread-14612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:04:55.482 [INFO] [Thread-14612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:04:55.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:04:55.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:04:56.301 [DEBUG] [Thread-14612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:04:56.301 [DEBUG] [Thread-14612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:04:56.349 [DEBUG] [Thread-14612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:04:56.350 [DEBUG] [Thread-14612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:04:56.358 [DEBUG] [Thread-14612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:04:56.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:04:56.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-11-12T11:04:56.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:04:56.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:04:56.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:04:56.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:04:56.395 [DEBUG] [Thread-14612] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:04:58.850 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:04:58.851 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:05:05.326 [DEBUG] [Thread-14614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:05:20.375 [DEBUG] [Thread-14615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:05:26.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:05:26.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:05:26.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-11-12T11:05:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 5, 3), 30.52, 12.67, 0.0, 29.29, 24.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:05:27.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:05:03
2025-11-12T11:05:27.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:05:27.368 [DEBUG] [Thread-14616] [transport.py] [_log()] starting thread (client mode): 0x17398a00
2025-11-12T11:05:27.368 [DEBUG] [Thread-14616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:05:27.389 [DEBUG] [Thread-14616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:05:27.389 [INFO] [Thread-14616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] client lang: <none>
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] server lang: <none>
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] kex follows: False
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:05:27.392 [DEBUG] [Thread-14616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:05:27.393 [DEBUG] [Thread-14616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:05:27.393 [DEBUG] [Thread-14616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:05:27.393 [DEBUG] [Thread-14616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:05:27.393 [DEBUG] [Thread-14616] [transport.py] [_log()] Compression: none
2025-11-12T11:05:27.393 [DEBUG] [Thread-14616] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:05:27.409 [DEBUG] [Thread-14616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:05:27.409 [DEBUG] [Thread-14616] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:05:27.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:05:27.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:05:27.410 [DEBUG] [Thread-14616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:05:27.410 [DEBUG] [Thread-14616] [transport.py] [_log()] userauth is OK
2025-11-12T11:05:27.410 [DEBUG] [Thread-14616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:05:27.410 [DEBUG] [Thread-14616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:05:27.410 [DEBUG] [Thread-14616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:05:27.410 [DEBUG] [Thread-14616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:05:27.420 [INFO] [Thread-14616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:05:27.420 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:05:28.036 [DEBUG] [Thread-14616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:05:28.036 [DEBUG] [Thread-14616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:05:28.036 [DEBUG] [Thread-14616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:05:28.077 [DEBUG] [Thread-14616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:05:28.077 [DEBUG] [Thread-14616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:05:28.079 [DEBUG] [Thread-14616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:05:28.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:05:28.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:05:28.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:05:28.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:05:28.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:05:28.096 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:05:28.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.378214 -999.00  +24.40  22.96     18   -1.30 1 1 1 1 1   888    0 26.58 39.63 ----- 21.5 23.0 278.8 36.3 29.9 -29.9 29.3 -26.4 28.0 -26.9 29.0 -27.9
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.378214
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:05:28.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:05:03', tmtdew=30.52, humidity=12.67, cloud=0.0, wind=29.29, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:04:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:05:28.097 [DEBUG] [Thread-14616] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:05:28.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:05:28.187 [DEBUG] [Thread-14619] [transport.py] [_log()] starting thread (client mode): 0x173bf910
2025-11-12T11:05:28.187 [DEBUG] [Thread-14619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:05:28.203 [DEBUG] [Thread-14619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:05:28.203 [INFO] [Thread-14619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] client lang: <none>
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] server lang: <none>
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] kex follows: False
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] Compression: none
2025-11-12T11:05:28.211 [DEBUG] [Thread-14619] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:05:28.269 [DEBUG] [Thread-14619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:05:28.269 [DEBUG] [Thread-14619] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:05:28.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:05:28.269 [DEBUG] [Thread-14619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:05:28.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:05:28.325 [DEBUG] [Thread-14619] [transport.py] [_log()] userauth is OK
2025-11-12T11:05:28.325 [DEBUG] [Thread-14619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:05:28.325 [DEBUG] [Thread-14619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:05:28.325 [DEBUG] [Thread-14619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:05:28.325 [DEBUG] [Thread-14619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:05:28.340 [INFO] [Thread-14619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:05:28.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:05:28.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:05:28.856 [DEBUG] [Thread-14621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:05:29.227 [DEBUG] [Thread-14619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:05:29.227 [DEBUG] [Thread-14619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:05:29.275 [DEBUG] [Thread-14619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:05:29.275 [DEBUG] [Thread-14619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:05:29.283 [DEBUG] [Thread-14619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:05:29.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:05:29.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-11-12T11:05:29.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-11-12T11:05:29.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:05:29.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:05:29.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:05:29.315 [DEBUG] [Thread-14619] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:05:35.410 [DEBUG] [Thread-14622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:05:50.465 [DEBUG] [Thread-14623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:05:58.993 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:05:58.994 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:05:59.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:05:59.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:05:59.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-11-12T11:05:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 5, 35), 30.9, 12.41, 0.0, 24.38, 24.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:05:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:05:35
2025-11-12T11:06:00.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:06:00.205 [DEBUG] [Thread-14624] [transport.py] [_log()] starting thread (client mode): 0x173bd120
2025-11-12T11:06:00.205 [DEBUG] [Thread-14624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:06:00.225 [DEBUG] [Thread-14624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:06:00.225 [INFO] [Thread-14624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:06:00.228 [DEBUG] [Thread-14624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:06:00.228 [DEBUG] [Thread-14624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:06:00.228 [DEBUG] [Thread-14624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] client lang: <none>
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] server lang: <none>
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] kex follows: False
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] Compression: none
2025-11-12T11:06:00.229 [DEBUG] [Thread-14624] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:06:00.245 [DEBUG] [Thread-14624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:06:00.245 [DEBUG] [Thread-14624] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:06:00.246 [DEBUG] [Thread-14624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:06:00.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:06:00.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:06:00.248 [DEBUG] [Thread-14624] [transport.py] [_log()] userauth is OK
2025-11-12T11:06:00.248 [DEBUG] [Thread-14624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:06:00.248 [DEBUG] [Thread-14624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:06:00.248 [DEBUG] [Thread-14624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:06:00.249 [DEBUG] [Thread-14624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:06:00.267 [INFO] [Thread-14624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:06:00.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:06:00.924 [DEBUG] [Thread-14624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:06:00.925 [DEBUG] [Thread-14624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:06:00.925 [DEBUG] [Thread-14624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:06:00.965 [DEBUG] [Thread-14624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:06:00.966 [DEBUG] [Thread-14624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:06:00.968 [DEBUG] [Thread-14624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:06:00.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:06:00.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:06:00.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:06:00.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:06:00.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:06:00.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:06:00.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:06:00.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:06:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:06:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.378561 -999.00  +24.80  23.88     17   -1.10 1 1 1 1 1   888    0 26.30 34.83 ----- 27.9 23.9 294.8 29.3 30.0 -26.6 29.3 -25.4 28.2 -24.0 29.0 -24.7
2025-11-12T11:06:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:06:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:06:00.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.378561
2025-11-12T11:06:00.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:06:00.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:06:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:06:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:06:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:06:00.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:05:35', tmtdew=30.9, humidity=12.41, cloud=0.0, wind=24.38, temperature=24.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:05:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:06:00.995 [DEBUG] [Thread-14624] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:06:01.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:06:01.099 [DEBUG] [Thread-14627] [transport.py] [_log()] starting thread (client mode): 0x1739bd30
2025-11-12T11:06:01.100 [DEBUG] [Thread-14627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:06:01.114 [DEBUG] [Thread-14627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:06:01.114 [INFO] [Thread-14627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:06:01.122 [DEBUG] [Thread-14627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] client lang: <none>
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] server lang: <none>
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] kex follows: False
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] Compression: none
2025-11-12T11:06:01.123 [DEBUG] [Thread-14627] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:06:01.182 [DEBUG] [Thread-14627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:06:01.182 [DEBUG] [Thread-14627] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:06:01.183 [DEBUG] [Thread-14627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:06:01.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:06:01.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:06:01.238 [DEBUG] [Thread-14627] [transport.py] [_log()] userauth is OK
2025-11-12T11:06:01.238 [DEBUG] [Thread-14627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:06:01.238 [DEBUG] [Thread-14627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:06:01.238 [DEBUG] [Thread-14627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:06:01.238 [DEBUG] [Thread-14627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:06:01.252 [INFO] [Thread-14627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:06:01.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:06:01.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:06:02.128 [DEBUG] [Thread-14627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:06:02.128 [DEBUG] [Thread-14627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:06:02.176 [DEBUG] [Thread-14627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:06:02.177 [DEBUG] [Thread-14627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:06:02.186 [DEBUG] [Thread-14627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:06:02.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:06:02.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-11-12T11:06:02.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-11-12T11:06:02.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:06:02.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:06:02.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:06:02.222 [DEBUG] [Thread-14627] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:06:05.498 [DEBUG] [Thread-14629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:06:20.537 [DEBUG] [Thread-14630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:06:28.893 [DEBUG] [Thread-14631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:06:32.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:06:32.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:06:32.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-11-12T11:06:32.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 6, 7), 30.81, 12.48, 0.0, 24.84, 24.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:06:32.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:06:07
2025-11-12T11:06:32.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:06:33.122 [DEBUG] [Thread-14632] [transport.py] [_log()] starting thread (client mode): 0x17347340
2025-11-12T11:06:33.122 [DEBUG] [Thread-14632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:06:33.143 [DEBUG] [Thread-14632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:06:33.143 [INFO] [Thread-14632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] client lang: <none>
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] server lang: <none>
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] kex follows: False
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] Compression: none
2025-11-12T11:06:33.146 [DEBUG] [Thread-14632] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:06:33.167 [DEBUG] [Thread-14632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:06:33.168 [DEBUG] [Thread-14632] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:06:33.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:06:33.169 [DEBUG] [Thread-14632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:06:33.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:06:33.171 [DEBUG] [Thread-14632] [transport.py] [_log()] userauth is OK
2025-11-12T11:06:33.171 [DEBUG] [Thread-14632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:06:33.171 [DEBUG] [Thread-14632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:06:33.171 [DEBUG] [Thread-14632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:06:33.171 [DEBUG] [Thread-14632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:06:33.196 [INFO] [Thread-14632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:06:33.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:06:33.824 [DEBUG] [Thread-14632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:06:33.824 [DEBUG] [Thread-14632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:06:33.824 [DEBUG] [Thread-14632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:06:33.865 [DEBUG] [Thread-14632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:06:33.866 [DEBUG] [Thread-14632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:06:33.868 [DEBUG] [Thread-14632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:06:33.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:06:33.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:06:33.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:06:33.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:06:33.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:06:33.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:06:33.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:06:33.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:06:33.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:06:33.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.379256 -999.00  +24.20  18.12     18   -1.30 1 1 1 1 1   888    0 26.36 39.87 ----- 19.8 18.1 279.0 27.0 29.8 -28.8 29.1 -27.9 27.9 -30.6 28.8 -26.9
2025-11-12T11:06:33.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:06:33.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:06:33.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.379256
2025-11-12T11:06:33.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:06:33.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:06:33.892 [DEBUG] [Thread-14632] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:06:33.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:06:33.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:06:33.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:06:33.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:06:07', tmtdew=30.81, humidity=12.48, cloud=0.0, wind=24.84, temperature=24.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:06:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:06:33.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:06:33.987 [DEBUG] [Thread-14635] [transport.py] [_log()] starting thread (client mode): 0x19dd90f0
2025-11-12T11:06:33.987 [DEBUG] [Thread-14635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:06:34.001 [DEBUG] [Thread-14635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:06:34.002 [INFO] [Thread-14635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:06:34.009 [DEBUG] [Thread-14635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:06:34.009 [DEBUG] [Thread-14635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:06:34.009 [DEBUG] [Thread-14635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:06:34.009 [DEBUG] [Thread-14635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:06:34.009 [DEBUG] [Thread-14635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:06:34.009 [DEBUG] [Thread-14635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:06:34.009 [DEBUG] [Thread-14635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] client lang: <none>
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] server lang: <none>
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] kex follows: False
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] Compression: none
2025-11-12T11:06:34.010 [DEBUG] [Thread-14635] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:06:34.077 [DEBUG] [Thread-14635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:06:34.078 [DEBUG] [Thread-14635] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:06:34.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:06:34.079 [DEBUG] [Thread-14635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:06:34.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:06:34.136 [DEBUG] [Thread-14635] [transport.py] [_log()] userauth is OK
2025-11-12T11:06:34.136 [DEBUG] [Thread-14635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:06:34.136 [DEBUG] [Thread-14635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:06:34.136 [DEBUG] [Thread-14635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:06:34.137 [DEBUG] [Thread-14635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:06:34.155 [INFO] [Thread-14635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:06:34.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:06:34.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:06:35.030 [DEBUG] [Thread-14635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:06:35.030 [DEBUG] [Thread-14635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:06:35.077 [DEBUG] [Thread-14635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:06:35.078 [DEBUG] [Thread-14635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:06:35.087 [DEBUG] [Thread-14635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:06:35.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:06:35.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-11-12T11:06:35.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-11-12T11:06:35.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:06:35.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:06:35.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:06:35.122 [DEBUG] [Thread-14635] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:06:35.577 [DEBUG] [Thread-14637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:06:50.628 [DEBUG] [Thread-14638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:06:59.135 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:06:59.136 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:07:05.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:07:05.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:07:05.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-11-12T11:07:05.663 [DEBUG] [Thread-14639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:07:05.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 6, 39), 30.79, 12.38, 0.0, 19.43, 24.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:07:05.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:06:39
2025-11-12T11:07:05.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:07:06.021 [DEBUG] [Thread-14640] [transport.py] [_log()] starting thread (client mode): 0x1739bd30
2025-11-12T11:07:06.021 [DEBUG] [Thread-14640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:07:06.042 [DEBUG] [Thread-14640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:07:06.042 [INFO] [Thread-14640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:07:06.045 [DEBUG] [Thread-14640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:07:06.045 [DEBUG] [Thread-14640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] client lang: <none>
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] server lang: <none>
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] kex follows: False
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:07:06.046 [DEBUG] [Thread-14640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:07:06.047 [DEBUG] [Thread-14640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:07:06.047 [DEBUG] [Thread-14640] [transport.py] [_log()] Compression: none
2025-11-12T11:07:06.047 [DEBUG] [Thread-14640] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:07:06.065 [DEBUG] [Thread-14640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:07:06.066 [DEBUG] [Thread-14640] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:07:06.067 [DEBUG] [Thread-14640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:07:06.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:07:06.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:07:06.069 [DEBUG] [Thread-14640] [transport.py] [_log()] userauth is OK
2025-11-12T11:07:06.070 [DEBUG] [Thread-14640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:07:06.070 [DEBUG] [Thread-14640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:07:06.070 [DEBUG] [Thread-14640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:07:06.070 [DEBUG] [Thread-14640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:07:06.094 [INFO] [Thread-14640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:07:06.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:07:06.736 [DEBUG] [Thread-14640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:07:06.736 [DEBUG] [Thread-14640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:07:06.736 [DEBUG] [Thread-14640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:07:06.777 [DEBUG] [Thread-14640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:07:06.777 [DEBUG] [Thread-14640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:07:06.779 [DEBUG] [Thread-14640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:07:06.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:07:06.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:07:06.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:07:06.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:07:06.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:07:06.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:07:06.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:07:06.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:07:06.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:07:06.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.379603 -999.00  +24.00  17.88     18   -1.40 1 1 1 1 1   888    0 26.94 37.63 ----- 17.2 17.9 272.6 21.7 29.4 -29.1 28.9 -26.5 27.7 -26.5 28.6 -27.3
2025-11-12T11:07:06.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:07:06.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:07:06.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.379603
2025-11-12T11:07:06.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:07:06.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:07:06.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:07:06.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:07:06.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:07:06.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:06:39', tmtdew=30.79, humidity=12.38, cloud=0.0, wind=19.43, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:06:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:07:06.807 [DEBUG] [Thread-14640] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:07:06.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:07:06.901 [DEBUG] [Thread-14643] [transport.py] [_log()] starting thread (client mode): 0x1493f100
2025-11-12T11:07:06.902 [DEBUG] [Thread-14643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:07:06.917 [DEBUG] [Thread-14643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:07:06.917 [INFO] [Thread-14643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:07:06.925 [DEBUG] [Thread-14643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:07:06.925 [DEBUG] [Thread-14643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:07:06.925 [DEBUG] [Thread-14643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:07:06.925 [DEBUG] [Thread-14643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] client lang: <none>
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] server lang: <none>
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] kex follows: False
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:07:06.926 [DEBUG] [Thread-14643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:07:06.927 [DEBUG] [Thread-14643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:07:06.927 [DEBUG] [Thread-14643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:07:06.927 [DEBUG] [Thread-14643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:07:06.927 [DEBUG] [Thread-14643] [transport.py] [_log()] Compression: none
2025-11-12T11:07:06.927 [DEBUG] [Thread-14643] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:07:06.982 [DEBUG] [Thread-14643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:07:06.983 [DEBUG] [Thread-14643] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:07:06.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:07:06.984 [DEBUG] [Thread-14643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:07:06.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:07:07.038 [DEBUG] [Thread-14643] [transport.py] [_log()] userauth is OK
2025-11-12T11:07:07.038 [DEBUG] [Thread-14643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:07:07.039 [DEBUG] [Thread-14643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:07:07.039 [DEBUG] [Thread-14643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:07:07.039 [DEBUG] [Thread-14643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:07:07.057 [INFO] [Thread-14643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:07:07.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:07:07.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:07:07.947 [DEBUG] [Thread-14643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:07:07.947 [DEBUG] [Thread-14643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:07:07.995 [DEBUG] [Thread-14643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:07:07.996 [DEBUG] [Thread-14643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:07:08.005 [DEBUG] [Thread-14643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:07:08.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:07:08.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:07:08.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:07:08.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:07:08.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:07:08.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:07:08.041 [DEBUG] [Thread-14643] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:07:20.697 [DEBUG] [Thread-14645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:07:28.927 [DEBUG] [Thread-14646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:07:35.743 [DEBUG] [Thread-14647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:07:38.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:07:38.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:07:38.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-11-12T11:07:38.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 7, 11), 31.01, 12.18, 0.0, 17.15, 24.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:07:38.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:07:11
2025-11-12T11:07:38.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:07:38.968 [DEBUG] [Thread-14648] [transport.py] [_log()] starting thread (client mode): 0x1737d6c0
2025-11-12T11:07:38.969 [DEBUG] [Thread-14648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:07:38.988 [DEBUG] [Thread-14648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:07:38.988 [INFO] [Thread-14648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:07:38.991 [DEBUG] [Thread-14648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:07:38.991 [DEBUG] [Thread-14648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:07:38.991 [DEBUG] [Thread-14648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:07:38.991 [DEBUG] [Thread-14648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:07:38.991 [DEBUG] [Thread-14648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:07:38.991 [DEBUG] [Thread-14648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:07:38.991 [DEBUG] [Thread-14648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] client lang: <none>
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] server lang: <none>
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] kex follows: False
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] Compression: none
2025-11-12T11:07:38.992 [DEBUG] [Thread-14648] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:07:39.007 [DEBUG] [Thread-14648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:07:39.008 [DEBUG] [Thread-14648] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:07:39.008 [DEBUG] [Thread-14648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:07:39.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:07:39.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:07:39.010 [DEBUG] [Thread-14648] [transport.py] [_log()] userauth is OK
2025-11-12T11:07:39.010 [DEBUG] [Thread-14648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:07:39.010 [DEBUG] [Thread-14648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:07:39.011 [DEBUG] [Thread-14648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:07:39.011 [DEBUG] [Thread-14648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:07:39.036 [INFO] [Thread-14648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:07:39.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:07:39.670 [DEBUG] [Thread-14648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:07:39.670 [DEBUG] [Thread-14648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:07:39.670 [DEBUG] [Thread-14648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:07:39.710 [DEBUG] [Thread-14648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:07:39.711 [DEBUG] [Thread-14648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:07:39.713 [DEBUG] [Thread-14648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:07:39.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:07:39.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:07:39.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:07:39.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:07:39.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:07:39.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:07:39.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:07:39.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:07:39.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:07:39.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.379950 -999.00  +23.70  14.54     18   -1.40 1 1 1 1 1   888    0 26.32 35.29 ----- 10.9 14.5 295.4 21.9 29.4 -28.3 28.9 -26.0 27.7 -27.4 28.6 -25.9
2025-11-12T11:07:39.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:07:39.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:07:39.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.379950
2025-11-12T11:07:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:07:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:07:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:07:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:07:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:07:39.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:07:11', tmtdew=31.01, humidity=12.18, cloud=0.0, wind=17.15, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:07:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:07:39.738 [DEBUG] [Thread-14648] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:07:39.819 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:07:39.831 [DEBUG] [Thread-14651] [transport.py] [_log()] starting thread (client mode): 0x17346f80
2025-11-12T11:07:39.832 [DEBUG] [Thread-14651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:07:39.849 [DEBUG] [Thread-14651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:07:39.849 [INFO] [Thread-14651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:07:39.858 [DEBUG] [Thread-14651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:07:39.858 [DEBUG] [Thread-14651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:07:39.858 [DEBUG] [Thread-14651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:07:39.858 [DEBUG] [Thread-14651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] client lang: <none>
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] server lang: <none>
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] kex follows: False
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] Compression: none
2025-11-12T11:07:39.859 [DEBUG] [Thread-14651] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:07:39.920 [DEBUG] [Thread-14651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:07:39.921 [DEBUG] [Thread-14651] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:07:39.921 [DEBUG] [Thread-14651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:07:39.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:07:39.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:07:39.981 [DEBUG] [Thread-14651] [transport.py] [_log()] userauth is OK
2025-11-12T11:07:39.981 [DEBUG] [Thread-14651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:07:39.981 [DEBUG] [Thread-14651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:07:39.981 [DEBUG] [Thread-14651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:07:39.981 [DEBUG] [Thread-14651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:07:40.000 [INFO] [Thread-14651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:07: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-11-12T11:07:40.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:07:40.870 [DEBUG] [Thread-14651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:07:40.870 [DEBUG] [Thread-14651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:07:40.920 [DEBUG] [Thread-14651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:07:40.920 [DEBUG] [Thread-14651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:07:40.929 [DEBUG] [Thread-14651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:07:40.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:07:40.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-11-12T11:07:40.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:07:40.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:07:40.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:07:40.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:07:40.967 [DEBUG] [Thread-14651] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:07:50.779 [DEBUG] [Thread-14653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:07:59.284 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:07:59.285 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:08:05.826 [DEBUG] [Thread-14654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:08:10.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:08:10.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:08:10.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-11-12T11:08:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 7, 43), 30.59, 12.89, 0.0, 18.09, 24.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:08:11.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:07:43
2025-11-12T11:08:11.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:08:11.875 [DEBUG] [Thread-14655] [transport.py] [_log()] starting thread (client mode): 0x1737ef50
2025-11-12T11:08:11.875 [DEBUG] [Thread-14655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:08:11.891 [DEBUG] [Thread-14655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:08:11.891 [INFO] [Thread-14655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] client lang: <none>
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] server lang: <none>
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] kex follows: False
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:08:11.893 [DEBUG] [Thread-14655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:08:11.894 [DEBUG] [Thread-14655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:08:11.894 [DEBUG] [Thread-14655] [transport.py] [_log()] Compression: none
2025-11-12T11:08:11.894 [DEBUG] [Thread-14655] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:08:11.906 [DEBUG] [Thread-14655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:08:11.906 [DEBUG] [Thread-14655] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:08:11.907 [DEBUG] [Thread-14655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:08:11.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:08:11.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:08:11.908 [DEBUG] [Thread-14655] [transport.py] [_log()] userauth is OK
2025-11-12T11:08:11.908 [DEBUG] [Thread-14655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:08:11.909 [DEBUG] [Thread-14655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:08:11.909 [DEBUG] [Thread-14655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:08:11.909 [DEBUG] [Thread-14655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:08:11.927 [INFO] [Thread-14655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:08:11.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:08:12.617 [DEBUG] [Thread-14655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:08:12.617 [DEBUG] [Thread-14655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:08:12.617 [DEBUG] [Thread-14655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:08:12.658 [DEBUG] [Thread-14655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:08:12.658 [DEBUG] [Thread-14655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:08:12.662 [DEBUG] [Thread-14655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:08:12.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:08:12.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:08:12.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:08:12.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:08:12.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:08:12.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:08:12.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:08:12.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:08:12.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:08:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.380298 -999.00  +24.00  14.88     18   -1.30 1 1 1 1 1   888    0 26.20 32.71 ----- 20.7 14.9 303.4 21.9 29.6 -27.0 28.9 -26.5 27.9 -25.7 28.7 -25.2
2025-11-12T11:08:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:08:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:08:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.380298
2025-11-12T11:08:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:08:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:08:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:08:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:08:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:08:12.687 [DEBUG] [Thread-14655] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:08:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:07:43', tmtdew=30.59, humidity=12.89, cloud=0.0, wind=18.09, temperature=24.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:07:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:08:12.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:08:12.780 [DEBUG] [Thread-14658] [transport.py] [_log()] starting thread (client mode): 0x149837f0
2025-11-12T11:08:12.780 [DEBUG] [Thread-14658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:08:12.795 [DEBUG] [Thread-14658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:08:12.796 [INFO] [Thread-14658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:08:12.803 [DEBUG] [Thread-14658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:08:12.803 [DEBUG] [Thread-14658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:08:12.803 [DEBUG] [Thread-14658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:08:12.803 [DEBUG] [Thread-14658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:08:12.803 [DEBUG] [Thread-14658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] client lang: <none>
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] server lang: <none>
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] kex follows: False
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] Compression: none
2025-11-12T11:08:12.804 [DEBUG] [Thread-14658] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:08:12.862 [DEBUG] [Thread-14658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:08:12.863 [DEBUG] [Thread-14658] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:08:12.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:08:12.864 [DEBUG] [Thread-14658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:08:12.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:08:12.918 [DEBUG] [Thread-14658] [transport.py] [_log()] userauth is OK
2025-11-12T11:08:12.918 [DEBUG] [Thread-14658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:08:12.918 [DEBUG] [Thread-14658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:08:12.919 [DEBUG] [Thread-14658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:08:12.919 [DEBUG] [Thread-14658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:08:12.938 [INFO] [Thread-14658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:08:12.938 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:08:12.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:08:13.805 [DEBUG] [Thread-14658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:08:13.805 [DEBUG] [Thread-14658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:08:13.853 [DEBUG] [Thread-14658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:08:13.853 [DEBUG] [Thread-14658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:08:13.862 [DEBUG] [Thread-14658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:08:13.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:08:13.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-11-12T11:08:13.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-11-12T11:08:13.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:08:13.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:08:13.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:08:13.899 [DEBUG] [Thread-14658] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:08:20.861 [DEBUG] [Thread-14660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:08:28.972 [DEBUG] [Thread-14661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:08:35.913 [DEBUG] [Thread-14662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:08:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:08:43.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:08:43.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-11-12T11:08:44.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 8, 15), 30.53, 12.93, 0.0, 15.58, 24.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:08:44.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:08:15
2025-11-12T11:08:44.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:08:44.807 [DEBUG] [Thread-14663] [transport.py] [_log()] starting thread (client mode): 0x19dd9390
2025-11-12T11:08:44.807 [DEBUG] [Thread-14663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:08:44.828 [DEBUG] [Thread-14663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:08:44.828 [INFO] [Thread-14663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] client lang: <none>
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] server lang: <none>
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] kex follows: False
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] Compression: none
2025-11-12T11:08:44.831 [DEBUG] [Thread-14663] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:08:44.850 [DEBUG] [Thread-14663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:08:44.851 [DEBUG] [Thread-14663] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:08:44.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:08:44.852 [DEBUG] [Thread-14663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:08:44.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:08:44.854 [DEBUG] [Thread-14663] [transport.py] [_log()] userauth is OK
2025-11-12T11:08:44.855 [DEBUG] [Thread-14663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:08:44.855 [DEBUG] [Thread-14663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:08:44.855 [DEBUG] [Thread-14663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:08:44.855 [DEBUG] [Thread-14663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:08:44.877 [INFO] [Thread-14663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:08:44.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:08:45.541 [DEBUG] [Thread-14663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:08:45.541 [DEBUG] [Thread-14663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:08:45.541 [DEBUG] [Thread-14663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:08:45.582 [DEBUG] [Thread-14663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:08:45.582 [DEBUG] [Thread-14663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:08:45.586 [DEBUG] [Thread-14663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:08:45.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:08:45.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:08:45.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:08:45.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:08:45.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:08:45.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:08:45.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:08:45.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:08:45.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:08:45.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.380645 -999.00  +23.90  15.79     17   -1.90 1 1 1 1 1   888    0 26.11 31.80 ----- 15.9 15.8 302.2 21.6 29.4 -29.0 28.8 -27.2 27.9 -26.1 28.6 -27.0
2025-11-12T11:08:45.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:08:45.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:08:45.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.380645
2025-11-12T11:08:45.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:08:45.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:08:45.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:08:45.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:08:45.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:08:45.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:08:15', tmtdew=30.53, humidity=12.93, cloud=0.0, wind=15.58, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:08:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:08:45.613 [DEBUG] [Thread-14663] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:08:45.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:08:45.708 [DEBUG] [Thread-14666] [transport.py] [_log()] starting thread (client mode): 0x173e92d0
2025-11-12T11:08:45.708 [DEBUG] [Thread-14666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:08:45.724 [DEBUG] [Thread-14666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:08:45.724 [INFO] [Thread-14666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:08:45.731 [DEBUG] [Thread-14666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:08:45.731 [DEBUG] [Thread-14666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] client lang: <none>
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] server lang: <none>
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] kex follows: False
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:08:45.732 [DEBUG] [Thread-14666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:08:45.733 [DEBUG] [Thread-14666] [transport.py] [_log()] Compression: none
2025-11-12T11:08:45.733 [DEBUG] [Thread-14666] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:08:45.790 [DEBUG] [Thread-14666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:08:45.791 [DEBUG] [Thread-14666] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:08:45.792 [DEBUG] [Thread-14666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:08:45.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:08:45.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:08:45.853 [DEBUG] [Thread-14666] [transport.py] [_log()] userauth is OK
2025-11-12T11:08:45.853 [DEBUG] [Thread-14666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:08:45.853 [DEBUG] [Thread-14666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:08:45.853 [DEBUG] [Thread-14666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:08:45.854 [DEBUG] [Thread-14666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:08:45.874 [INFO] [Thread-14666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:08:45.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:08:45.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:08:46.730 [DEBUG] [Thread-14666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:08:46.730 [DEBUG] [Thread-14666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:08:46.779 [DEBUG] [Thread-14666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:08:46.779 [DEBUG] [Thread-14666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:08:46.788 [DEBUG] [Thread-14666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:08:46.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:08:46.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-11-12T11:08:46.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:08:46.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:08:46.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:08:46.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:08:46.825 [DEBUG] [Thread-14666] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:08:50.946 [DEBUG] [Thread-14668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:08:59.425 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:08:59.427 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:09:05.996 [DEBUG] [Thread-14669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:09:16.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:09:16.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:09:16.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-11-12T11:09:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 8, 47), 31.11, 12.33, 0.0, 23.15, 24.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:09:17.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:08:47
2025-11-12T11:09:17.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:09:17.783 [DEBUG] [Thread-14670] [transport.py] [_log()] starting thread (client mode): 0x14983dc0
2025-11-12T11:09:17.784 [DEBUG] [Thread-14670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:09:17.794 [DEBUG] [Thread-14670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:09:17.794 [INFO] [Thread-14670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] client lang: <none>
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] server lang: <none>
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] kex follows: False
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:09:17.796 [DEBUG] [Thread-14670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:09:17.797 [DEBUG] [Thread-14670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:09:17.797 [DEBUG] [Thread-14670] [transport.py] [_log()] Compression: none
2025-11-12T11:09:17.797 [DEBUG] [Thread-14670] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:09:17.810 [DEBUG] [Thread-14670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:09:17.810 [DEBUG] [Thread-14670] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:09:17.810 [DEBUG] [Thread-14670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:09:17.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:09:17.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:09:17.811 [DEBUG] [Thread-14670] [transport.py] [_log()] userauth is OK
2025-11-12T11:09:17.811 [DEBUG] [Thread-14670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:09:17.811 [DEBUG] [Thread-14670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:09:17.811 [DEBUG] [Thread-14670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:09:17.811 [DEBUG] [Thread-14670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:09:17.823 [INFO] [Thread-14670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:09:17.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:09:18.420 [DEBUG] [Thread-14670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:09:18.420 [DEBUG] [Thread-14670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:09:18.421 [DEBUG] [Thread-14670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:09:18.461 [DEBUG] [Thread-14670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:09:18.461 [DEBUG] [Thread-14670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:09:18.463 [DEBUG] [Thread-14670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:09:18.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:09:18.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:09:18.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:09:18.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:09:18.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:09:18.482 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:09:18.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:09:18.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.380992 -999.00  +23.90  19.27     18   -1.70 1 1 1 1 1   888    0 26.14 32.04 ----- 16.5 19.3 283.0 20.8 29.5 -26.2 28.9 -25.0 27.9 -28.2 28.5 -24.4
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.380992
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:09:18.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:08:47', tmtdew=31.11, humidity=12.33, cloud=0.0, wind=23.15, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:08:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:09:18.484 [DEBUG] [Thread-14670] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:09:18.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:09:18.570 [DEBUG] [Thread-14673] [transport.py] [_log()] starting thread (client mode): 0x17347580
2025-11-12T11:09:18.570 [DEBUG] [Thread-14673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:09:18.585 [DEBUG] [Thread-14673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:09:18.585 [INFO] [Thread-14673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:09:18.592 [DEBUG] [Thread-14673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:09:18.592 [DEBUG] [Thread-14673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:09:18.592 [DEBUG] [Thread-14673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:09:18.592 [DEBUG] [Thread-14673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:09:18.592 [DEBUG] [Thread-14673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:09:18.592 [DEBUG] [Thread-14673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:09:18.592 [DEBUG] [Thread-14673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] client lang: <none>
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] server lang: <none>
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] kex follows: False
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] Compression: none
2025-11-12T11:09:18.593 [DEBUG] [Thread-14673] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:09:18.648 [DEBUG] [Thread-14673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:09:18.649 [DEBUG] [Thread-14673] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:09:18.649 [DEBUG] [Thread-14673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:09:18.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:09:18.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:09:18.705 [DEBUG] [Thread-14673] [transport.py] [_log()] userauth is OK
2025-11-12T11:09:18.705 [DEBUG] [Thread-14673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:09:18.705 [DEBUG] [Thread-14673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:09:18.705 [DEBUG] [Thread-14673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:09:18.705 [DEBUG] [Thread-14673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:09:18.720 [INFO] [Thread-14673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:09:18.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:09:18.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:09:19.563 [DEBUG] [Thread-14673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:09:19.563 [DEBUG] [Thread-14673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:09:19.611 [DEBUG] [Thread-14673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:09:19.611 [DEBUG] [Thread-14673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:09:19.619 [DEBUG] [Thread-14673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:09:19.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:09:19.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:09:19.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-11-12T11:09:19.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:09:19.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:09:19.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:09:19.651 [DEBUG] [Thread-14673] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:09:21.027 [DEBUG] [Thread-14675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:09:29.011 [DEBUG] [Thread-14676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:09:36.069 [DEBUG] [Thread-14677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:09:49.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:09:49.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:09:49.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:09:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 9, 19), 31.07, 12.36, 0.0, 25.57, 24.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:09:50.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:09:19
2025-11-12T11:09:50.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:09:50.555 [DEBUG] [Thread-14678] [transport.py] [_log()] starting thread (client mode): 0x17344370
2025-11-12T11:09:50.555 [DEBUG] [Thread-14678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:09:50.573 [DEBUG] [Thread-14678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:09:50.573 [INFO] [Thread-14678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:09:50.576 [DEBUG] [Thread-14678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:09:50.576 [DEBUG] [Thread-14678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:09:50.576 [DEBUG] [Thread-14678] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:09:50.576 [DEBUG] [Thread-14678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:09:50.576 [DEBUG] [Thread-14678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:09:50.576 [DEBUG] [Thread-14678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:09:50.576 [DEBUG] [Thread-14678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:09:50.576 [DEBUG] [Thread-14678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] client lang: <none>
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] server lang: <none>
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] kex follows: False
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] Compression: none
2025-11-12T11:09:50.577 [DEBUG] [Thread-14678] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:09:50.594 [DEBUG] [Thread-14678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:09:50.594 [DEBUG] [Thread-14678] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:09:50.595 [DEBUG] [Thread-14678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:09:50.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:09:50.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:09:50.596 [DEBUG] [Thread-14678] [transport.py] [_log()] userauth is OK
2025-11-12T11:09:50.597 [DEBUG] [Thread-14678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:09:50.597 [DEBUG] [Thread-14678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:09:50.597 [DEBUG] [Thread-14678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:09:50.597 [DEBUG] [Thread-14678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:09:50.621 [INFO] [Thread-14678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:09:50.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:09:51.110 [DEBUG] [Thread-14680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:09:51.261 [DEBUG] [Thread-14678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:09:51.262 [DEBUG] [Thread-14678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:09:51.262 [DEBUG] [Thread-14678] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:09:51.303 [DEBUG] [Thread-14678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:09:51.303 [DEBUG] [Thread-14678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:09:51.306 [DEBUG] [Thread-14678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:09:51.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:09:51.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:09:51.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:09:51.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:09:51.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:09:51.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:09:51.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:09:51.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:09:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:09:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.381339 -999.00  +24.10  30.59     17   -2.00 1 1 2 1 1   888    0 26.10 34.79 ----- 24.3 30.6 275.4 36.3 29.6 -27.1 29.0 -25.1 27.9 -26.0 28.8 -25.1
2025-11-12T11:09:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:09:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:09:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.381339
2025-11-12T11:09:51.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:09:51.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:09:51.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:09:51.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:09:51.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:09:51.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:09:19', tmtdew=31.07, humidity=12.36, cloud=0.0, wind=25.57, temperature=24.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:09:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:09:51.331 [DEBUG] [Thread-14678] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:09:51.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:09:51.424 [DEBUG] [Thread-14682] [transport.py] [_log()] starting thread (client mode): 0x173be890
2025-11-12T11:09:51.424 [DEBUG] [Thread-14682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:09:51.439 [DEBUG] [Thread-14682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:09:51.439 [INFO] [Thread-14682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] client lang: <none>
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] server lang: <none>
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] kex follows: False
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:09:51.447 [DEBUG] [Thread-14682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:09:51.448 [DEBUG] [Thread-14682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:09:51.448 [DEBUG] [Thread-14682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:09:51.448 [DEBUG] [Thread-14682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:09:51.448 [DEBUG] [Thread-14682] [transport.py] [_log()] Compression: none
2025-11-12T11:09:51.448 [DEBUG] [Thread-14682] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:09:51.506 [DEBUG] [Thread-14682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:09:51.507 [DEBUG] [Thread-14682] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:09:51.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:09:51.508 [DEBUG] [Thread-14682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:09:51.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:09:51.562 [DEBUG] [Thread-14682] [transport.py] [_log()] userauth is OK
2025-11-12T11:09:51.563 [DEBUG] [Thread-14682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:09:51.563 [DEBUG] [Thread-14682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:09:51.563 [DEBUG] [Thread-14682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:09:51.563 [DEBUG] [Thread-14682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:09:51.582 [INFO] [Thread-14682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:09:51.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:09:51.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:09:52.408 [DEBUG] [Thread-14682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:09:52.408 [DEBUG] [Thread-14682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:09:52.456 [DEBUG] [Thread-14682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:09:52.456 [DEBUG] [Thread-14682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:09:52.464 [DEBUG] [Thread-14682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:09:52.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:09:52.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')
2025-11-12T11:09:52.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-11-12T11:09:52.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:09:52.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:09:52.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:09:52.496 [DEBUG] [Thread-14682] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:09:59.567 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:09:59.568 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:10:06.145 [DEBUG] [Thread-14684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:10:21.200 [DEBUG] [Thread-14685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:10:22.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:10:22.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:10:22.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-11-12T11:10:23.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 9, 51), 31.42, 11.89, 0.0, 26.43, 24.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:10:23.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:09:51
2025-11-12T11:10:23.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:10:23.403 [DEBUG] [Thread-14686] [transport.py] [_log()] starting thread (client mode): 0x17362380
2025-11-12T11:10:23.404 [DEBUG] [Thread-14686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:10:23.416 [DEBUG] [Thread-14686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:10:23.416 [INFO] [Thread-14686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:10:23.419 [DEBUG] [Thread-14686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:10:23.419 [DEBUG] [Thread-14686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:10:23.419 [DEBUG] [Thread-14686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:10:23.419 [DEBUG] [Thread-14686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] client lang: <none>
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] server lang: <none>
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] kex follows: False
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] Compression: none
2025-11-12T11:10:23.420 [DEBUG] [Thread-14686] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:10:23.436 [DEBUG] [Thread-14686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:10:23.436 [DEBUG] [Thread-14686] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:10:23.436 [DEBUG] [Thread-14686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:10:23.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:10:23.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:10:23.438 [DEBUG] [Thread-14686] [transport.py] [_log()] userauth is OK
2025-11-12T11:10:23.438 [DEBUG] [Thread-14686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:10:23.438 [DEBUG] [Thread-14686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:10:23.438 [DEBUG] [Thread-14686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:10:23.439 [DEBUG] [Thread-14686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:10:23.455 [INFO] [Thread-14686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:10:23.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:10:24.040 [DEBUG] [Thread-14686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:10:24.040 [DEBUG] [Thread-14686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:10:24.041 [DEBUG] [Thread-14686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:10:24.080 [DEBUG] [Thread-14686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:10:24.080 [DEBUG] [Thread-14686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:10:24.082 [DEBUG] [Thread-14686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:10:24.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:10:24.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:10:24.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:10:24.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:10:24.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:10:24.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:10:24.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:10:24.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:10:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:10:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.381686 -999.00  +24.10  20.35     17   -1.80 1 1 1 1 1   888    0 26.47 38.52 ----- 23.4 20.4 263.6 34.2 29.5 -27.3 29.0 -24.1 28.0 -25.1 28.7 -25.7
2025-11-12T11:10:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:10:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:10:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.381686
2025-11-12T11:10:24.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:10:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:10:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:10:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:10:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:10:24.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:09:51', tmtdew=31.42, humidity=11.89, cloud=0.0, wind=26.43, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:09:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:10:24.099 [DEBUG] [Thread-14686] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:10:24.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:10:24.186 [DEBUG] [Thread-14689] [transport.py] [_log()] starting thread (client mode): 0x17360f70
2025-11-12T11:10:24.186 [DEBUG] [Thread-14689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:10:24.201 [DEBUG] [Thread-14689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:10:24.201 [INFO] [Thread-14689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:10:24.209 [DEBUG] [Thread-14689] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:10:24.209 [DEBUG] [Thread-14689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:10:24.209 [DEBUG] [Thread-14689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] client lang: <none>
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] server lang: <none>
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] kex follows: False
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] Compression: none
2025-11-12T11:10:24.210 [DEBUG] [Thread-14689] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:10:24.266 [DEBUG] [Thread-14689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:10:24.266 [DEBUG] [Thread-14689] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:10:24.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:10:24.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:10:24.267 [DEBUG] [Thread-14689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:10:24.326 [DEBUG] [Thread-14689] [transport.py] [_log()] userauth is OK
2025-11-12T11:10:24.326 [DEBUG] [Thread-14689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:10:24.326 [DEBUG] [Thread-14689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:10:24.326 [DEBUG] [Thread-14689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:10:24.326 [DEBUG] [Thread-14689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:10:24.342 [INFO] [Thread-14689] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:10:24.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:10:24.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:10:25.173 [DEBUG] [Thread-14689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:10:25.173 [DEBUG] [Thread-14689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:10:25.221 [DEBUG] [Thread-14689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:10:25.221 [DEBUG] [Thread-14689] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:10:25.230 [DEBUG] [Thread-14689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:10:25.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:10:25.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:10:25.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:10:25.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:10:25.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:10:25.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:10:25.262 [DEBUG] [Thread-14689] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:10:29.039 [DEBUG] [Thread-14691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:10:36.234 [DEBUG] [Thread-14692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:10:51.279 [DEBUG] [Thread-14693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:10:55.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:10:55.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:10:55.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-11-12T11:10:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 10, 23), 31.86, 11.56, 0.0, 28.83, 24.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:10:55.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:10:23
2025-11-12T11:10:56.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:10:56.181 [DEBUG] [Thread-14694] [transport.py] [_log()] starting thread (client mode): 0x17361e40
2025-11-12T11:10:56.181 [DEBUG] [Thread-14694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:10:56.204 [DEBUG] [Thread-14694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:10:56.204 [INFO] [Thread-14694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] client lang: <none>
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] server lang: <none>
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] kex follows: False
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] Compression: none
2025-11-12T11:10:56.206 [DEBUG] [Thread-14694] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:10:56.222 [DEBUG] [Thread-14694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:10:56.223 [DEBUG] [Thread-14694] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:10:56.223 [DEBUG] [Thread-14694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:10:56.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:10:56.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:10:56.223 [DEBUG] [Thread-14694] [transport.py] [_log()] userauth is OK
2025-11-12T11:10:56.223 [DEBUG] [Thread-14694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:10:56.223 [DEBUG] [Thread-14694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:10:56.223 [DEBUG] [Thread-14694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:10:56.223 [DEBUG] [Thread-14694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:10:56.232 [INFO] [Thread-14694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:10:56.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:10:56.872 [DEBUG] [Thread-14694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:10:56.872 [DEBUG] [Thread-14694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:10:56.872 [DEBUG] [Thread-14694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:10:56.913 [DEBUG] [Thread-14694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:10:56.913 [DEBUG] [Thread-14694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:10:56.915 [DEBUG] [Thread-14694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:10:56.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:10:56.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:10:56.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:10:56.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:10:56.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:10:56.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:10:56.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.382381 -999.00  +24.10  23.59     18   -1.50 1 1 1 1 1   888    0 26.41 43.16 ----- 20.0 23.6 274.2 26.9 29.9 -26.8 29.1 -24.5 28.0 -25.6 29.0 -24.5
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.382381
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:10:56.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:10:23', tmtdew=31.86, humidity=11.56, cloud=0.0, wind=28.83, temperature=24.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:10:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:10:56.934 [DEBUG] [Thread-14694] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:10:57.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:10:57.019 [DEBUG] [Thread-14697] [transport.py] [_log()] starting thread (client mode): 0x17363190
2025-11-12T11:10:57.019 [DEBUG] [Thread-14697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:10:57.034 [DEBUG] [Thread-14697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:10:57.034 [INFO] [Thread-14697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] client lang: <none>
2025-11-12T11:10:57.041 [DEBUG] [Thread-14697] [transport.py] [_log()] server lang: <none>
2025-11-12T11:10:57.042 [DEBUG] [Thread-14697] [transport.py] [_log()] kex follows: False
2025-11-12T11:10:57.042 [DEBUG] [Thread-14697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:10:57.042 [DEBUG] [Thread-14697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:10:57.042 [DEBUG] [Thread-14697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:10:57.042 [DEBUG] [Thread-14697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:10:57.042 [DEBUG] [Thread-14697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:10:57.042 [DEBUG] [Thread-14697] [transport.py] [_log()] Compression: none
2025-11-12T11:10:57.042 [DEBUG] [Thread-14697] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:10:57.096 [DEBUG] [Thread-14697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:10:57.096 [DEBUG] [Thread-14697] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:10:57.096 [DEBUG] [Thread-14697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:10:57.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:10:57.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:10:57.153 [DEBUG] [Thread-14697] [transport.py] [_log()] userauth is OK
2025-11-12T11:10:57.153 [DEBUG] [Thread-14697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:10:57.153 [DEBUG] [Thread-14697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:10:57.153 [DEBUG] [Thread-14697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:10:57.153 [DEBUG] [Thread-14697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:10:57.167 [INFO] [Thread-14697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:10:57.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:10:57.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:10:58.020 [DEBUG] [Thread-14697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:10:58.020 [DEBUG] [Thread-14697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:10:58.068 [DEBUG] [Thread-14697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:10:58.068 [DEBUG] [Thread-14697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:10:58.077 [DEBUG] [Thread-14697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:10:58.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:10:58.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-11-12T11:10: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-11-12T11:10:58.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:10:58.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:10:58.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:10:58.113 [DEBUG] [Thread-14697] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:10:59.711 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:10:59.712 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:11:06.316 [DEBUG] [Thread-14699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:11:21.375 [DEBUG] [Thread-14700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:11:28.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:11:28.134 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:11:28.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-11-12T11:11:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 10, 55), 31.45, 11.98, 0.0, 23.29, 24.85, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:11:28.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:10:55
2025-11-12T11:11:28.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:11:29.068 [DEBUG] [Thread-14701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:11:29.089 [DEBUG] [Thread-14702] [transport.py] [_log()] starting thread (client mode): 0x14980490
2025-11-12T11:11:29.089 [DEBUG] [Thread-14702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:11:29.109 [DEBUG] [Thread-14702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:11:29.109 [INFO] [Thread-14702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] client lang: <none>
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] server lang: <none>
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] kex follows: False
2025-11-12T11:11:29.112 [DEBUG] [Thread-14702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:11:29.113 [DEBUG] [Thread-14702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:11:29.113 [DEBUG] [Thread-14702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:11:29.113 [DEBUG] [Thread-14702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:11:29.113 [DEBUG] [Thread-14702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:11:29.113 [DEBUG] [Thread-14702] [transport.py] [_log()] Compression: none
2025-11-12T11:11:29.113 [DEBUG] [Thread-14702] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:11:29.127 [DEBUG] [Thread-14702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:11:29.127 [DEBUG] [Thread-14702] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:11:29.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:11:29.127 [DEBUG] [Thread-14702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:11:29.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:11:29.128 [DEBUG] [Thread-14702] [transport.py] [_log()] userauth is OK
2025-11-12T11:11:29.128 [DEBUG] [Thread-14702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:11:29.128 [DEBUG] [Thread-14702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:11:29.128 [DEBUG] [Thread-14702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:11:29.128 [DEBUG] [Thread-14702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:11:29.148 [INFO] [Thread-14702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:11:29.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:11:29.784 [DEBUG] [Thread-14702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:11:29.784 [DEBUG] [Thread-14702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:11:29.784 [DEBUG] [Thread-14702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:11:29.825 [DEBUG] [Thread-14702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:11:29.825 [DEBUG] [Thread-14702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:11:29.828 [DEBUG] [Thread-14702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:11:29.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:11:29.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:11:29.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:11:29.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:11:29.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:11:29.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:11:29.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.382728 -999.00  +24.40  32.94     18   -1.20 1 1 2 1 1   888    0 26.54 39.77 ----- 33.6 32.9 272.4 38.7 29.8 -25.3 29.2 -24.2 28.0 -24.5 29.0 -22.9
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.382728
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:11:29.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:10:55', tmtdew=31.45, humidity=11.98, cloud=0.0, wind=23.29, temperature=24.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:11:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:11:29.849 [DEBUG] [Thread-14702] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:11:29.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:11:29.936 [DEBUG] [Thread-14705] [transport.py] [_log()] starting thread (client mode): 0x149816c0
2025-11-12T11:11:29.936 [DEBUG] [Thread-14705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:11:29.951 [DEBUG] [Thread-14705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:11:29.951 [INFO] [Thread-14705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] client lang: <none>
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] server lang: <none>
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] kex follows: False
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] Compression: none
2025-11-12T11:11:29.959 [DEBUG] [Thread-14705] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:11:30.020 [DEBUG] [Thread-14705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:11:30.020 [DEBUG] [Thread-14705] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:11:30.020 [DEBUG] [Thread-14705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:11:30.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:11:30.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:11:30.078 [DEBUG] [Thread-14705] [transport.py] [_log()] userauth is OK
2025-11-12T11:11:30.078 [DEBUG] [Thread-14705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:11:30.078 [DEBUG] [Thread-14705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:11:30.078 [DEBUG] [Thread-14705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:11:30.079 [DEBUG] [Thread-14705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:11:30.101 [INFO] [Thread-14705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:11:30.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:11:30.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:11:30.988 [DEBUG] [Thread-14705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:11:30.988 [DEBUG] [Thread-14705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:11:31.036 [DEBUG] [Thread-14705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:11:31.036 [DEBUG] [Thread-14705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:11:31.046 [DEBUG] [Thread-14705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:11:31.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:11:31.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-11-12T11:11: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') -> 00000000
2025-11-12T11:11:31.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:11:31.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:11:31.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:11:31.081 [DEBUG] [Thread-14705] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:11:36.413 [DEBUG] [Thread-14707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:11:51.466 [DEBUG] [Thread-14708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:11:59.854 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:11:59.855 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:12:01.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:12:01.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:12:01.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:12:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 11, 27), 31.45, 11.98, 0.0, 27.19, 24.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:12:01.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:11:27
2025-11-12T11:12:01.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:12:02.055 [DEBUG] [Thread-14709] [transport.py] [_log()] starting thread (client mode): 0x14983ac0
2025-11-12T11:12:02.055 [DEBUG] [Thread-14709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:12:02.076 [DEBUG] [Thread-14709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:12:02.076 [INFO] [Thread-14709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:12:02.079 [DEBUG] [Thread-14709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:12:02.079 [DEBUG] [Thread-14709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:12:02.079 [DEBUG] [Thread-14709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:12:02.079 [DEBUG] [Thread-14709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:12:02.079 [DEBUG] [Thread-14709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:12:02.079 [DEBUG] [Thread-14709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:12:02.079 [DEBUG] [Thread-14709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] client lang: <none>
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] server lang: <none>
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] kex follows: False
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] Compression: none
2025-11-12T11:12:02.080 [DEBUG] [Thread-14709] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:12:02.097 [DEBUG] [Thread-14709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:12:02.097 [DEBUG] [Thread-14709] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:12:02.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:12:02.098 [DEBUG] [Thread-14709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:12:02.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:12:02.100 [DEBUG] [Thread-14709] [transport.py] [_log()] userauth is OK
2025-11-12T11:12:02.100 [DEBUG] [Thread-14709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:12:02.100 [DEBUG] [Thread-14709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:12:02.100 [DEBUG] [Thread-14709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:12:02.100 [DEBUG] [Thread-14709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:12:02.132 [INFO] [Thread-14709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:12:02.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:12:02.764 [DEBUG] [Thread-14709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:12:02.764 [DEBUG] [Thread-14709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:12:02.764 [DEBUG] [Thread-14709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:12:02.805 [DEBUG] [Thread-14709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:12:02.805 [DEBUG] [Thread-14709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:12:02.808 [DEBUG] [Thread-14709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:12:02.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:12:02.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:12:02.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:12:02.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:12:02.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:12:02.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:12:02.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:12:02.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.383075 -999.00  +24.40  35.25     18   -1.20 1 1 2 1 1   888    0 26.80 37.60 ----- 28.7 35.2 273.8 46.4 29.9 -25.3 29.1 -25.0 27.9 -27.3 28.9 -24.3
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.383075
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:12:02.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:11:27', tmtdew=31.45, humidity=11.98, cloud=0.0, wind=27.19, temperature=24.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:11:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:12:02.833 [DEBUG] [Thread-14709] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:12:02.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:12:02.921 [DEBUG] [Thread-14712] [transport.py] [_log()] starting thread (client mode): 0x17363430
2025-11-12T11:12:02.921 [DEBUG] [Thread-14712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:12:02.936 [DEBUG] [Thread-14712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:12:02.937 [INFO] [Thread-14712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:12:02.944 [DEBUG] [Thread-14712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:12:02.944 [DEBUG] [Thread-14712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:12:02.944 [DEBUG] [Thread-14712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:12:02.944 [DEBUG] [Thread-14712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:12:02.944 [DEBUG] [Thread-14712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:12:02.944 [DEBUG] [Thread-14712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:12:02.944 [DEBUG] [Thread-14712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] client lang: <none>
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] server lang: <none>
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] kex follows: False
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] Compression: none
2025-11-12T11:12:02.945 [DEBUG] [Thread-14712] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:12:03.001 [DEBUG] [Thread-14712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:12:03.002 [DEBUG] [Thread-14712] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:12:03.002 [DEBUG] [Thread-14712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:12:03.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:12:03.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:12:03.058 [DEBUG] [Thread-14712] [transport.py] [_log()] userauth is OK
2025-11-12T11:12:03.058 [DEBUG] [Thread-14712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:12:03.058 [DEBUG] [Thread-14712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:12:03.058 [DEBUG] [Thread-14712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:12:03.058 [DEBUG] [Thread-14712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:12:03.076 [INFO] [Thread-14712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:12:03.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:12:03.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:12:03.920 [DEBUG] [Thread-14712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:12:03.920 [DEBUG] [Thread-14712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:12:03.968 [DEBUG] [Thread-14712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:12:03.968 [DEBUG] [Thread-14712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:12:03.977 [DEBUG] [Thread-14712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:12:03.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:12:03.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-11-12T11:12:03.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-11-12T11:12:04.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:12:04.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:12:04.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:12:04.013 [DEBUG] [Thread-14712] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:12:06.499 [DEBUG] [Thread-14714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:12:21.554 [DEBUG] [Thread-14715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:12:29.098 [DEBUG] [Thread-14716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:12:34.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:12:34.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:12:34.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-11-12T11:12:34.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 11, 59), 31.33, 11.84, 0.0, 30.28, 25.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:12:34.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:11:59
2025-11-12T11:12:34.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:12:34.932 [DEBUG] [Thread-14717] [transport.py] [_log()] starting thread (client mode): 0x14980730
2025-11-12T11:12:34.932 [DEBUG] [Thread-14717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:12:34.952 [DEBUG] [Thread-14717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:12:34.952 [INFO] [Thread-14717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:12:34.955 [DEBUG] [Thread-14717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] client lang: <none>
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] server lang: <none>
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] kex follows: False
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] Compression: none
2025-11-12T11:12:34.956 [DEBUG] [Thread-14717] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:12:34.973 [DEBUG] [Thread-14717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:12:34.973 [DEBUG] [Thread-14717] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:12:34.974 [DEBUG] [Thread-14717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:12:34.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:12:34.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:12:34.976 [DEBUG] [Thread-14717] [transport.py] [_log()] userauth is OK
2025-11-12T11:12:34.976 [DEBUG] [Thread-14717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:12:34.976 [DEBUG] [Thread-14717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:12:34.976 [DEBUG] [Thread-14717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:12:34.976 [DEBUG] [Thread-14717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:12:35.000 [INFO] [Thread-14717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:12:35.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:12:35.573 [DEBUG] [Thread-14717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:12:35.573 [DEBUG] [Thread-14717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:12:35.574 [DEBUG] [Thread-14717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:12:35.615 [DEBUG] [Thread-14717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:12:35.615 [DEBUG] [Thread-14717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:12:35.619 [DEBUG] [Thread-14717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:12:35.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:12:35.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:12:35.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:12:35.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:12:35.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:12:35.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:12:35.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:12:35.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:12:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:12:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.383423 -999.00  +24.40  26.02     18   -1.30 1 1 1 1 1   888    0 26.53 40.26 ----- 23.3 26.0 268.0 35.2 29.8 -27.1 29.1 -25.4 27.8 -25.6 28.9 -24.6
2025-11-12T11:12:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:12:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:12:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.383423
2025-11-12T11:12:35.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:12:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:12:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:12:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:12:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:12:35.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:11:59', tmtdew=31.33, humidity=11.84, cloud=0.0, wind=30.28, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:12:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:12:35.646 [DEBUG] [Thread-14717] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:12:35.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:12:35.742 [DEBUG] [Thread-14720] [transport.py] [_log()] starting thread (client mode): 0x14981270
2025-11-12T11:12:35.742 [DEBUG] [Thread-14720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:12:35.757 [DEBUG] [Thread-14720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:12:35.757 [INFO] [Thread-14720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:12:35.765 [DEBUG] [Thread-14720] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:12:35.765 [DEBUG] [Thread-14720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:12:35.765 [DEBUG] [Thread-14720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:12:35.765 [DEBUG] [Thread-14720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:12:35.765 [DEBUG] [Thread-14720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:12:35.765 [DEBUG] [Thread-14720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:12:35.765 [DEBUG] [Thread-14720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] client lang: <none>
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] server lang: <none>
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] kex follows: False
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] Compression: none
2025-11-12T11:12:35.766 [DEBUG] [Thread-14720] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:12:35.822 [DEBUG] [Thread-14720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:12:35.823 [DEBUG] [Thread-14720] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:12:35.824 [DEBUG] [Thread-14720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:12:35.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:12:35.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:12:35.878 [DEBUG] [Thread-14720] [transport.py] [_log()] userauth is OK
2025-11-12T11:12:35.879 [DEBUG] [Thread-14720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:12:35.879 [DEBUG] [Thread-14720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:12:35.879 [DEBUG] [Thread-14720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:12:35.879 [DEBUG] [Thread-14720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:12:35.898 [INFO] [Thread-14720] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:12:35.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:12:35.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:12:36.588 [DEBUG] [Thread-14722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:12:36.745 [DEBUG] [Thread-14720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:12:36.745 [DEBUG] [Thread-14720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:12:36.792 [DEBUG] [Thread-14720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:12:36.792 [DEBUG] [Thread-14720] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:12:36.801 [DEBUG] [Thread-14720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:12:36.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:12:36.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:12:36.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-11-12T11:12:36.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:12:36.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:12:36.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:12:36.842 [DEBUG] [Thread-14720] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:12:51.642 [DEBUG] [Thread-14723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:12:59.997 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:12:59.998 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:13:06.678 [DEBUG] [Thread-14724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:13:06.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:13:06.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:13:06.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-11-12T11:13:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 13, 3), 30.9, 12.19, 0.0, 30.37, 25.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:13:07.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:13:03
2025-11-12T11:13:07.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:13:07.823 [DEBUG] [Thread-14725] [transport.py] [_log()] starting thread (client mode): 0x14982f20
2025-11-12T11:13:07.823 [DEBUG] [Thread-14725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:13:07.843 [DEBUG] [Thread-14725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:13:07.843 [INFO] [Thread-14725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:13:07.845 [DEBUG] [Thread-14725] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:13:07.845 [DEBUG] [Thread-14725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:13:07.845 [DEBUG] [Thread-14725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:13:07.845 [DEBUG] [Thread-14725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:13:07.845 [DEBUG] [Thread-14725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:13:07.845 [DEBUG] [Thread-14725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] client lang: <none>
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] server lang: <none>
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] kex follows: False
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] Compression: none
2025-11-12T11:13:07.846 [DEBUG] [Thread-14725] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:13:07.860 [DEBUG] [Thread-14725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:13:07.860 [DEBUG] [Thread-14725] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:13:07.860 [DEBUG] [Thread-14725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:13:07.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:13:07.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:13:07.861 [DEBUG] [Thread-14725] [transport.py] [_log()] userauth is OK
2025-11-12T11:13:07.861 [DEBUG] [Thread-14725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:13:07.861 [DEBUG] [Thread-14725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:13:07.861 [DEBUG] [Thread-14725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:13:07.861 [DEBUG] [Thread-14725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:13:07.887 [INFO] [Thread-14725] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:13:07.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:13:08.539 [DEBUG] [Thread-14725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:13:08.539 [DEBUG] [Thread-14725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:13:08.539 [DEBUG] [Thread-14725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:13:08.580 [DEBUG] [Thread-14725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:13:08.580 [DEBUG] [Thread-14725] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:13:08.582 [DEBUG] [Thread-14725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:13:08.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:13:08.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:13:08.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:13:08.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:13:08.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:13:08.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:13:08.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:13:08.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:13:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:13:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.383770 -999.00  +24.40  23.18     18   -1.30 1 1 1 1 1   888    0 26.43 42.46 ----- 27.1 23.2 286.4 31.0 29.7 -28.2 29.0 -27.0 27.7 -27.2 28.8 -24.9
2025-11-12T11:13:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:13:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:13:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.383770
2025-11-12T11:13:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:13:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:13:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:13:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:13:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:13:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:13:03', tmtdew=30.9, humidity=12.19, cloud=0.0, wind=30.37, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:12:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:13:08.600 [DEBUG] [Thread-14725] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:13:08.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:13:08.685 [DEBUG] [Thread-14728] [transport.py] [_log()] starting thread (client mode): 0x173613f0
2025-11-12T11:13:08.686 [DEBUG] [Thread-14728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:13:08.701 [DEBUG] [Thread-14728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:13:08.701 [INFO] [Thread-14728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:13:08.711 [DEBUG] [Thread-14728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] client lang: <none>
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] server lang: <none>
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] kex follows: False
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] Compression: none
2025-11-12T11:13:08.712 [DEBUG] [Thread-14728] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:13:08.764 [DEBUG] [Thread-14728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:13:08.764 [DEBUG] [Thread-14728] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:13:08.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:13:08.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:13:08.765 [DEBUG] [Thread-14728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:13:08.822 [DEBUG] [Thread-14728] [transport.py] [_log()] userauth is OK
2025-11-12T11:13:08.822 [DEBUG] [Thread-14728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:13:08.822 [DEBUG] [Thread-14728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:13:08.822 [DEBUG] [Thread-14728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:13:08.822 [DEBUG] [Thread-14728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:13:08.838 [INFO] [Thread-14728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:13:08.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:13:08.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:13:09.656 [DEBUG] [Thread-14728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:13:09.656 [DEBUG] [Thread-14728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:13:09.704 [DEBUG] [Thread-14728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:13:09.704 [DEBUG] [Thread-14728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:13:09.712 [DEBUG] [Thread-14728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:13:09.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:13:09.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')
2025-11-12T11:13:09.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') -> 00000000
2025-11-12T11:13:09.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:13:09.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:13:09.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:13:09.744 [DEBUG] [Thread-14728] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:13:21.712 [DEBUG] [Thread-14730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:13:29.126 [DEBUG] [Thread-14731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:13:36.766 [DEBUG] [Thread-14732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:13:39.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:13:39.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:13:39.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-11-12T11:13:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 13, 3), 30.9, 12.19, 0.0, 30.37, 25.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:13:40.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:13:03
2025-11-12T11:13:40.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:13:40.687 [DEBUG] [Thread-14733] [transport.py] [_log()] starting thread (client mode): 0x173637f0
2025-11-12T11:13:40.687 [DEBUG] [Thread-14733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:13:40.707 [DEBUG] [Thread-14733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:13:40.708 [INFO] [Thread-14733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:13:40.710 [DEBUG] [Thread-14733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] client lang: <none>
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] server lang: <none>
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] kex follows: False
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:13:40.711 [DEBUG] [Thread-14733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:13:40.712 [DEBUG] [Thread-14733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:13:40.712 [DEBUG] [Thread-14733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:13:40.712 [DEBUG] [Thread-14733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:13:40.712 [DEBUG] [Thread-14733] [transport.py] [_log()] Compression: none
2025-11-12T11:13:40.712 [DEBUG] [Thread-14733] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:13:40.730 [DEBUG] [Thread-14733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:13:40.731 [DEBUG] [Thread-14733] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:13:40.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:13:40.732 [DEBUG] [Thread-14733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:13:40.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:13:40.734 [DEBUG] [Thread-14733] [transport.py] [_log()] userauth is OK
2025-11-12T11:13:40.734 [DEBUG] [Thread-14733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:13:40.734 [DEBUG] [Thread-14733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:13:40.735 [DEBUG] [Thread-14733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:13:40.735 [DEBUG] [Thread-14733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:13:40.758 [INFO] [Thread-14733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:13:40.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:13:41.367 [DEBUG] [Thread-14733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:13:41.367 [DEBUG] [Thread-14733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:13:41.367 [DEBUG] [Thread-14733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:13:41.408 [DEBUG] [Thread-14733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:13:41.408 [DEBUG] [Thread-14733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:13:41.411 [DEBUG] [Thread-14733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:13:41.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:13:41.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:13:41.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:13:41.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:13:41.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:13:41.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:13:41.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:13:41.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:13:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:13:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.384117 -999.00  +24.10  24.91     18   -1.30 1 1 1 1 1   888    0 27.23 45.44 ----- 28.1 24.9 282.0 34.2 29.5 -28.3 28.9 -27.1 27.4 -27.0 28.6 -26.3
2025-11-12T11:13:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:13:41.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:13:41.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.384117
2025-11-12T11:13:41.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:13:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:13:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:13:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:13:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:13:41.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:13:03', tmtdew=30.9, humidity=12.19, cloud=0.0, wind=30.37, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:13:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:13:41.441 [DEBUG] [Thread-14733] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:13:41.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:13:41.538 [DEBUG] [Thread-14736] [transport.py] [_log()] starting thread (client mode): 0x17360280
2025-11-12T11:13:41.538 [DEBUG] [Thread-14736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:13:41.554 [DEBUG] [Thread-14736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:13:41.554 [INFO] [Thread-14736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:13:41.561 [DEBUG] [Thread-14736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] client lang: <none>
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] server lang: <none>
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] kex follows: False
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] Compression: none
2025-11-12T11:13:41.562 [DEBUG] [Thread-14736] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:13:41.618 [DEBUG] [Thread-14736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:13:41.619 [DEBUG] [Thread-14736] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:13:41.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:13:41.620 [DEBUG] [Thread-14736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:13:41.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:13:41.674 [DEBUG] [Thread-14736] [transport.py] [_log()] userauth is OK
2025-11-12T11:13:41.675 [DEBUG] [Thread-14736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:13:41.675 [DEBUG] [Thread-14736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:13:41.675 [DEBUG] [Thread-14736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:13:41.675 [DEBUG] [Thread-14736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:13:41.694 [INFO] [Thread-14736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:13:41.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:13:41.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:13:42.518 [DEBUG] [Thread-14736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:13:42.518 [DEBUG] [Thread-14736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:13:42.566 [DEBUG] [Thread-14736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:13:42.567 [DEBUG] [Thread-14736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:13:42.576 [DEBUG] [Thread-14736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:13:42.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:13:42.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:13:42.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:13:42.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:13:42.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:13:42.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:13:42.612 [DEBUG] [Thread-14736] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:13:51.801 [DEBUG] [Thread-14738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:14:00.140 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:14:00.141 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:14:06.848 [DEBUG] [Thread-14739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:14:12.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:14:12.630 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:14:12.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-11-12T11:14:13.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 14, 10), 30.62, 12.77, 0.0, 17.08, 24.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:14:13.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:14:10
2025-11-12T11:14:13.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:14:13.521 [DEBUG] [Thread-14740] [transport.py] [_log()] starting thread (client mode): 0x14981ab0
2025-11-12T11:14:13.522 [DEBUG] [Thread-14740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:14:13.544 [DEBUG] [Thread-14740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:14:13.544 [INFO] [Thread-14740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:14:13.545 [DEBUG] [Thread-14740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] client lang: <none>
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] server lang: <none>
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] kex follows: False
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] Compression: none
2025-11-12T11:14:13.546 [DEBUG] [Thread-14740] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:14:13.564 [DEBUG] [Thread-14740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:14:13.564 [DEBUG] [Thread-14740] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:14:13.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:14:13.566 [DEBUG] [Thread-14740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:14:13.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:14:13.568 [DEBUG] [Thread-14740] [transport.py] [_log()] userauth is OK
2025-11-12T11:14:13.568 [DEBUG] [Thread-14740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:14:13.568 [DEBUG] [Thread-14740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:14:13.568 [DEBUG] [Thread-14740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:14:13.568 [DEBUG] [Thread-14740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:14:13.587 [INFO] [Thread-14740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:14:13.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:14:14.193 [DEBUG] [Thread-14740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:14:14.193 [DEBUG] [Thread-14740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:14:14.194 [DEBUG] [Thread-14740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:14:14.235 [DEBUG] [Thread-14740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:14:14.235 [DEBUG] [Thread-14740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:14:14.238 [DEBUG] [Thread-14740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:14:14.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:14:14.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:14:14.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:14:14.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:14:14.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:14:14.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:14:14.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:14:14.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:14:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:14:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.384464 -999.00  +23.80  23.07     18   -1.20 1 1 1 1 1   888    0 27.05 43.95 ----- 17.5 23.1 275.4 27.7 29.4 -27.6 28.8 -26.3 27.5 -25.9 28.5 -25.1
2025-11-12T11:14:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:14:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:14:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.384464
2025-11-12T11:14:14.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:14:14.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:14:14.268 [DEBUG] [Thread-14740] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:14:14.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:14:14.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:14:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:14:14.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:14:10', tmtdew=30.62, humidity=12.77, cloud=0.0, wind=17.08, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:13:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:14:14.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:14:14.363 [DEBUG] [Thread-14743] [transport.py] [_log()] starting thread (client mode): 0x14921660
2025-11-12T11:14:14.363 [DEBUG] [Thread-14743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:14:14.378 [DEBUG] [Thread-14743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:14:14.378 [INFO] [Thread-14743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] client lang: <none>
2025-11-12T11:14:14.386 [DEBUG] [Thread-14743] [transport.py] [_log()] server lang: <none>
2025-11-12T11:14:14.387 [DEBUG] [Thread-14743] [transport.py] [_log()] kex follows: False
2025-11-12T11:14:14.387 [DEBUG] [Thread-14743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:14:14.387 [DEBUG] [Thread-14743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:14:14.387 [DEBUG] [Thread-14743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:14:14.387 [DEBUG] [Thread-14743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:14:14.387 [DEBUG] [Thread-14743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:14:14.387 [DEBUG] [Thread-14743] [transport.py] [_log()] Compression: none
2025-11-12T11:14:14.387 [DEBUG] [Thread-14743] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:14:14.446 [DEBUG] [Thread-14743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:14:14.447 [DEBUG] [Thread-14743] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:14:14.447 [DEBUG] [Thread-14743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:14:14.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:14:14.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:14:14.503 [DEBUG] [Thread-14743] [transport.py] [_log()] userauth is OK
2025-11-12T11:14:14.503 [DEBUG] [Thread-14743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:14:14.503 [DEBUG] [Thread-14743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:14:14.503 [DEBUG] [Thread-14743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:14:14.503 [DEBUG] [Thread-14743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:14:14.523 [INFO] [Thread-14743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:14:14.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:14:14.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:14:15.396 [DEBUG] [Thread-14743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:14:15.396 [DEBUG] [Thread-14743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:14:15.445 [DEBUG] [Thread-14743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:14:15.446 [DEBUG] [Thread-14743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:14:15.455 [DEBUG] [Thread-14743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:14:15.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:14:15.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-11-12T11:14:15.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-11-12T11:14:15.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:14:15.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:14:15.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:14:15.489 [DEBUG] [Thread-14743] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:14:21.884 [DEBUG] [Thread-14745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:14:29.155 [DEBUG] [Thread-14746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:14:36.934 [DEBUG] [Thread-14747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:14:45.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:14:45.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:14:45.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-11-12T11:14:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 14, 42), 31.06, 12.31, 0.0, 18.51, 24.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:14:46.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:14:42
2025-11-12T11:14:46.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:14:46.409 [DEBUG] [Thread-14748] [transport.py] [_log()] starting thread (client mode): 0x14980550
2025-11-12T11:14:46.410 [DEBUG] [Thread-14748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:14:46.423 [DEBUG] [Thread-14748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:14:46.423 [INFO] [Thread-14748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:14:46.426 [DEBUG] [Thread-14748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:14:46.426 [DEBUG] [Thread-14748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] client lang: <none>
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] server lang: <none>
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] kex follows: False
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] Compression: none
2025-11-12T11:14:46.427 [DEBUG] [Thread-14748] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:14:46.444 [DEBUG] [Thread-14748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:14:46.445 [DEBUG] [Thread-14748] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:14:46.445 [DEBUG] [Thread-14748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:14:46.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:14:46.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:14:46.448 [DEBUG] [Thread-14748] [transport.py] [_log()] userauth is OK
2025-11-12T11:14:46.448 [DEBUG] [Thread-14748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:14:46.448 [DEBUG] [Thread-14748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:14:46.448 [DEBUG] [Thread-14748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:14:46.448 [DEBUG] [Thread-14748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:14:46.467 [INFO] [Thread-14748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:14:46.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:14:47.048 [DEBUG] [Thread-14748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:14:47.048 [DEBUG] [Thread-14748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:14:47.048 [DEBUG] [Thread-14748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:14:47.088 [DEBUG] [Thread-14748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:14:47.089 [DEBUG] [Thread-14748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:14:47.092 [DEBUG] [Thread-14748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:14:47.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:14:47.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:14:47.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:14:47.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:14:47.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:14:47.117 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:14:47.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:14:47.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:14:47.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:14:47.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.385159 -999.00  +24.00  11.61     18   -1.40 1 1 1 1 1   888    0 27.03 43.52 ----- 13.3 11.6 260.6 21.2 29.4 -26.5 28.9 -24.3 27.8 -23.3 28.6 -24.5
2025-11-12T11:14:47.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:14:47.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:14:47.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.385159
2025-11-12T11:14:47.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:14:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:14:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:14:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:14:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:14:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:14:42', tmtdew=31.06, humidity=12.31, cloud=0.0, wind=18.51, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:14:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:14:47.120 [DEBUG] [Thread-14748] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:14:47.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:14:47.215 [DEBUG] [Thread-14751] [transport.py] [_log()] starting thread (client mode): 0x14982c20
2025-11-12T11:14:47.216 [DEBUG] [Thread-14751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:14:47.230 [DEBUG] [Thread-14751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:14:47.230 [INFO] [Thread-14751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:14:47.237 [DEBUG] [Thread-14751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:14:47.237 [DEBUG] [Thread-14751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:14:47.237 [DEBUG] [Thread-14751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] client lang: <none>
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] server lang: <none>
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] kex follows: False
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] Compression: none
2025-11-12T11:14:47.238 [DEBUG] [Thread-14751] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:14:47.298 [DEBUG] [Thread-14751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:14:47.299 [DEBUG] [Thread-14751] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:14:47.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:14:47.300 [DEBUG] [Thread-14751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:14:47.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:14:47.354 [DEBUG] [Thread-14751] [transport.py] [_log()] userauth is OK
2025-11-12T11:14:47.354 [DEBUG] [Thread-14751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:14:47.355 [DEBUG] [Thread-14751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:14:47.355 [DEBUG] [Thread-14751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:14:47.355 [DEBUG] [Thread-14751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:14:47.374 [INFO] [Thread-14751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11: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-11-12T11:14:47.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:14:48.288 [DEBUG] [Thread-14751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:14:48.288 [DEBUG] [Thread-14751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:14:48.336 [DEBUG] [Thread-14751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:14:48.336 [DEBUG] [Thread-14751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:14:48.345 [DEBUG] [Thread-14751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:14:48.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:14:48.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-11-12T11:14:48.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-11-12T11:14:48.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:14:48.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:14:48.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:14:48.386 [DEBUG] [Thread-14751] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:14:51.975 [DEBUG] [Thread-14753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:15:00.282 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:15:00.283 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:15:07.022 [DEBUG] [Thread-14754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:15:18.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:15:18.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:15:18.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-11-12T11:15:19.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 15, 14), 30.92, 12.44, 0.0, 17.17, 24.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:15:19.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:15:14
2025-11-12T11:15:19.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:15:19.307 [DEBUG] [Thread-14755] [transport.py] [_log()] starting thread (client mode): 0x17361c30
2025-11-12T11:15:19.308 [DEBUG] [Thread-14755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:15:19.328 [DEBUG] [Thread-14755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:15:19.328 [INFO] [Thread-14755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:15:19.331 [DEBUG] [Thread-14755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:15:19.331 [DEBUG] [Thread-14755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:15:19.331 [DEBUG] [Thread-14755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:15:19.331 [DEBUG] [Thread-14755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:15:19.331 [DEBUG] [Thread-14755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:15:19.331 [DEBUG] [Thread-14755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:15:19.331 [DEBUG] [Thread-14755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] client lang: <none>
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] server lang: <none>
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] kex follows: False
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] Compression: none
2025-11-12T11:15:19.332 [DEBUG] [Thread-14755] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:15:19.344 [DEBUG] [Thread-14755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:15:19.345 [DEBUG] [Thread-14755] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:15:19.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:15:19.346 [DEBUG] [Thread-14755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:15:19.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:15:19.348 [DEBUG] [Thread-14755] [transport.py] [_log()] userauth is OK
2025-11-12T11:15:19.348 [DEBUG] [Thread-14755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:15:19.348 [DEBUG] [Thread-14755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:15:19.348 [DEBUG] [Thread-14755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:15:19.348 [DEBUG] [Thread-14755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:15:19.364 [INFO] [Thread-14755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:15:19.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:15:21.182 [DEBUG] [Thread-14755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:15:21.183 [DEBUG] [Thread-14755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:15:21.183 [DEBUG] [Thread-14755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:15:21.223 [DEBUG] [Thread-14755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:15:21.224 [DEBUG] [Thread-14755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:15:21.227 [DEBUG] [Thread-14755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:15:21.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:15:21.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:15:21.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:15:21.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:15:21.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:15:21.255 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:15:21.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:15:21.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:15:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:15:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.385159 -999.00  +24.00  11.61     18   -1.40 1 1 1 1 1   888    0 27.03 43.52 ----- 13.3 11.6 260.6 21.2 29.4 -26.5 28.9 -24.3 27.8 -23.3 28.6 -24.5
2025-11-12T11:15:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:15:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:15:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.385159
2025-11-12T11:15:21.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:15:21.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:15:21.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:15:21.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:15:21.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:15:21.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:15:14', tmtdew=30.92, humidity=12.44, cloud=0.0, wind=17.17, temperature=24.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:14:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:15:21.258 [DEBUG] [Thread-14755] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:15:21.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:15:21.355 [DEBUG] [Thread-14758] [transport.py] [_log()] starting thread (client mode): 0x173620b0
2025-11-12T11:15:21.355 [DEBUG] [Thread-14758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:15:21.375 [DEBUG] [Thread-14758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:15:21.375 [INFO] [Thread-14758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:15:21.383 [DEBUG] [Thread-14758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:15:21.383 [DEBUG] [Thread-14758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:15:21.383 [DEBUG] [Thread-14758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:15:21.383 [DEBUG] [Thread-14758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:15:21.383 [DEBUG] [Thread-14758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:15:21.383 [DEBUG] [Thread-14758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:15:21.383 [DEBUG] [Thread-14758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:15:21.383 [DEBUG] [Thread-14758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] client lang: <none>
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] server lang: <none>
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] kex follows: False
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] Compression: none
2025-11-12T11:15:21.384 [DEBUG] [Thread-14758] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:15:21.442 [DEBUG] [Thread-14758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:15:21.443 [DEBUG] [Thread-14758] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:15:21.444 [DEBUG] [Thread-14758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:15:21.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:15:21.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:15:21.498 [DEBUG] [Thread-14758] [transport.py] [_log()] userauth is OK
2025-11-12T11:15:21.499 [DEBUG] [Thread-14758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:15:21.499 [DEBUG] [Thread-14758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:15:21.499 [DEBUG] [Thread-14758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:15:21.499 [DEBUG] [Thread-14758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:15:21.518 [INFO] [Thread-14758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:15:21.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:15:21.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:15:22.056 [DEBUG] [Thread-14760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:15:22.364 [DEBUG] [Thread-14758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:15:22.365 [DEBUG] [Thread-14758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:15:22.413 [DEBUG] [Thread-14758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:15:22.413 [DEBUG] [Thread-14758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:15:22.422 [DEBUG] [Thread-14758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:15:22.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:15:22.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:15:22.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-11-12T11:15:22.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:15:22.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:15:22.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:15:22.460 [DEBUG] [Thread-14758] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:15:29.189 [DEBUG] [Thread-14761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:15:37.112 [DEBUG] [Thread-14762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:15:52.150 [DEBUG] [Thread-14763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:15:52.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:15:52.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:15:52.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-11-12T11:15:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 15, 46), 30.92, 12.39, 0.0, 28.14, 24.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:15:53.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:15:46
2025-11-12T11:15:53.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:15:53.392 [DEBUG] [Thread-14764] [transport.py] [_log()] starting thread (client mode): 0x17360c40
2025-11-12T11:15:53.392 [DEBUG] [Thread-14764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:15:53.412 [DEBUG] [Thread-14764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:15:53.412 [INFO] [Thread-14764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] client lang: <none>
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] server lang: <none>
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] kex follows: False
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:15:53.415 [DEBUG] [Thread-14764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:15:53.416 [DEBUG] [Thread-14764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:15:53.416 [DEBUG] [Thread-14764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:15:53.416 [DEBUG] [Thread-14764] [transport.py] [_log()] Compression: none
2025-11-12T11:15:53.416 [DEBUG] [Thread-14764] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:15:53.435 [DEBUG] [Thread-14764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:15:53.436 [DEBUG] [Thread-14764] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:15:53.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:15:53.437 [DEBUG] [Thread-14764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:15:53.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:15:53.439 [DEBUG] [Thread-14764] [transport.py] [_log()] userauth is OK
2025-11-12T11:15:53.439 [DEBUG] [Thread-14764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:15:53.439 [DEBUG] [Thread-14764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:15:53.439 [DEBUG] [Thread-14764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:15:53.439 [DEBUG] [Thread-14764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:15:53.464 [INFO] [Thread-14764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:15:53.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:15:54.096 [DEBUG] [Thread-14764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:15:54.096 [DEBUG] [Thread-14764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:15:54.097 [DEBUG] [Thread-14764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:15:54.138 [DEBUG] [Thread-14764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:15:54.138 [DEBUG] [Thread-14764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:15:54.141 [DEBUG] [Thread-14764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:15:54.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:15:54.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:15:54.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:15:54.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:15:54.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:15:54.166 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:15:54.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:15:54.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:15:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:15:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.385505 -999.00  +24.10  30.39     18   -1.40 1 1 2 1 1   888    0 27.15 48.53 ----- 29.4 30.4 270.6 35.1 29.7 -25.5 29.0 -25.6 27.7 -26.3 28.7 -24.0
2025-11-12T11:15:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:15:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:15:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.385505
2025-11-12T11:15:54.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:15:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:15:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:15:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:15:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:15:54.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:15:46', tmtdew=30.92, humidity=12.39, cloud=0.0, wind=28.14, temperature=24.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:15:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:15:54.169 [DEBUG] [Thread-14764] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:15:54.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:15:54.265 [DEBUG] [Thread-14767] [transport.py] [_log()] starting thread (client mode): 0x19dd90f0
2025-11-12T11:15:54.266 [DEBUG] [Thread-14767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:15:54.280 [DEBUG] [Thread-14767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:15:54.280 [INFO] [Thread-14767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] client lang: <none>
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] server lang: <none>
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] kex follows: False
2025-11-12T11:15:54.288 [DEBUG] [Thread-14767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:15:54.289 [DEBUG] [Thread-14767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:15:54.289 [DEBUG] [Thread-14767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:15:54.289 [DEBUG] [Thread-14767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:15:54.289 [DEBUG] [Thread-14767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:15:54.289 [DEBUG] [Thread-14767] [transport.py] [_log()] Compression: none
2025-11-12T11:15:54.289 [DEBUG] [Thread-14767] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:15:54.346 [DEBUG] [Thread-14767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:15:54.347 [DEBUG] [Thread-14767] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:15:54.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:15:54.348 [DEBUG] [Thread-14767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:15:54.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:15:54.402 [DEBUG] [Thread-14767] [transport.py] [_log()] userauth is OK
2025-11-12T11:15:54.403 [DEBUG] [Thread-14767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:15:54.403 [DEBUG] [Thread-14767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:15:54.403 [DEBUG] [Thread-14767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:15:54.403 [DEBUG] [Thread-14767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:15:54.422 [INFO] [Thread-14767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:15:54.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:15:54.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:15:55.303 [DEBUG] [Thread-14767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:15:55.303 [DEBUG] [Thread-14767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:15:55.352 [DEBUG] [Thread-14767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:15:55.352 [DEBUG] [Thread-14767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:15:55.362 [DEBUG] [Thread-14767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:15:55.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:15:55.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-11-12T11:15:55.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:15:55.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:15:55.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:15:55.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:15:55.399 [DEBUG] [Thread-14767] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:16:00.424 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:16:00.426 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:16:07.189 [DEBUG] [Thread-14769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:16:22.231 [DEBUG] [Thread-14770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:16:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:16:25.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:16:25.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-11-12T11:16:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 16, 18), 31.06, 12.28, 0.0, 27.07, 24.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:16:26.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:16:18
2025-11-12T11:16:26.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:16:26.306 [DEBUG] [Thread-14771] [transport.py] [_log()] starting thread (client mode): 0x17363c70
2025-11-12T11:16:26.306 [DEBUG] [Thread-14771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:16:26.326 [DEBUG] [Thread-14771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:16:26.326 [INFO] [Thread-14771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:16:26.329 [DEBUG] [Thread-14771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] client lang: <none>
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] server lang: <none>
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] kex follows: False
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:16:26.330 [DEBUG] [Thread-14771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:16:26.331 [DEBUG] [Thread-14771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:16:26.331 [DEBUG] [Thread-14771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:16:26.331 [DEBUG] [Thread-14771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:16:26.331 [DEBUG] [Thread-14771] [transport.py] [_log()] Compression: none
2025-11-12T11:16:26.331 [DEBUG] [Thread-14771] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:16:26.348 [DEBUG] [Thread-14771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:16:26.349 [DEBUG] [Thread-14771] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:16:26.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:16:26.350 [DEBUG] [Thread-14771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:16:26.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:16:26.352 [DEBUG] [Thread-14771] [transport.py] [_log()] userauth is OK
2025-11-12T11:16:26.352 [DEBUG] [Thread-14771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:16:26.352 [DEBUG] [Thread-14771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:16:26.352 [DEBUG] [Thread-14771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:16:26.353 [DEBUG] [Thread-14771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:16:26.378 [INFO] [Thread-14771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:16:26.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:16:27.091 [DEBUG] [Thread-14771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:16:27.091 [DEBUG] [Thread-14771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:16:27.092 [DEBUG] [Thread-14771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:16:27.132 [DEBUG] [Thread-14771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:16:27.133 [DEBUG] [Thread-14771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:16:27.136 [DEBUG] [Thread-14771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:16:27.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:16:27.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:16:27.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:16:27.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:16:27.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:16:27.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:16:27.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:16:27.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:16:27.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:16:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.385853 -999.00  +23.80  27.97     18   -1.20 1 1 1 1 1   888    0 27.27 45.76 ----- 28.4 28.0 273.6 31.1 29.4 -27.9 28.9 -24.4 27.6 -26.0 28.6 -25.4
2025-11-12T11:16:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:16:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:16:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.385853
2025-11-12T11:16:27.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:16:27.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:16:27.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:16:27.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:16:27.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:16:27.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:16:18', tmtdew=31.06, humidity=12.28, cloud=0.0, wind=27.07, temperature=24.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:15:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:16:27.162 [DEBUG] [Thread-14771] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:16:27.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:16:27.258 [DEBUG] [Thread-14774] [transport.py] [_log()] starting thread (client mode): 0x17362410
2025-11-12T11:16:27.258 [DEBUG] [Thread-14774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:16:27.273 [DEBUG] [Thread-14774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:16:27.274 [INFO] [Thread-14774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:16:27.281 [DEBUG] [Thread-14774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] client lang: <none>
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] server lang: <none>
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] kex follows: False
2025-11-12T11:16:27.282 [DEBUG] [Thread-14774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:16:27.283 [DEBUG] [Thread-14774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:16:27.283 [DEBUG] [Thread-14774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:16:27.283 [DEBUG] [Thread-14774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:16:27.283 [DEBUG] [Thread-14774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:16:27.283 [DEBUG] [Thread-14774] [transport.py] [_log()] Compression: none
2025-11-12T11:16:27.283 [DEBUG] [Thread-14774] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:16:27.338 [DEBUG] [Thread-14774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:16:27.339 [DEBUG] [Thread-14774] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:16:27.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:16:27.340 [DEBUG] [Thread-14774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:16:27.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:16:27.399 [DEBUG] [Thread-14774] [transport.py] [_log()] userauth is OK
2025-11-12T11:16:27.399 [DEBUG] [Thread-14774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:16:27.399 [DEBUG] [Thread-14774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:16:27.399 [DEBUG] [Thread-14774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:16:27.399 [DEBUG] [Thread-14774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:16:27.418 [INFO] [Thread-14774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:16:27.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:16:27.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:16:28.295 [DEBUG] [Thread-14774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:16:28.295 [DEBUG] [Thread-14774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:16:28.343 [DEBUG] [Thread-14774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:16:28.343 [DEBUG] [Thread-14774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:16:28.352 [DEBUG] [Thread-14774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:16:28.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:16:28.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-11-12T11:16: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-11-12T11:16:28.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:16:28.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:16:28.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:16:28.386 [DEBUG] [Thread-14774] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:16:29.229 [DEBUG] [Thread-14776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:16:37.264 [DEBUG] [Thread-14777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:16:52.317 [DEBUG] [Thread-14778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:16:58.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:16:58.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:16: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-11-12T11:16:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 16, 50), 30.69, 12.39, 0.0, 21.37, 24.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:16:59.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:16:50
2025-11-12T11:16:59.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:16:59.394 [DEBUG] [Thread-14779] [transport.py] [_log()] starting thread (client mode): 0x173634f0
2025-11-12T11:16:59.394 [DEBUG] [Thread-14779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:16:59.416 [DEBUG] [Thread-14779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:16:59.416 [INFO] [Thread-14779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] client lang: <none>
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] server lang: <none>
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] kex follows: False
2025-11-12T11:16:59.419 [DEBUG] [Thread-14779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:16:59.420 [DEBUG] [Thread-14779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:16:59.420 [DEBUG] [Thread-14779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:16:59.420 [DEBUG] [Thread-14779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:16:59.420 [DEBUG] [Thread-14779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:16:59.420 [DEBUG] [Thread-14779] [transport.py] [_log()] Compression: none
2025-11-12T11:16:59.420 [DEBUG] [Thread-14779] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:16:59.434 [DEBUG] [Thread-14779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:16:59.434 [DEBUG] [Thread-14779] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:16:59.434 [DEBUG] [Thread-14779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:16:59.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:16:59.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:16:59.435 [DEBUG] [Thread-14779] [transport.py] [_log()] userauth is OK
2025-11-12T11:16:59.435 [DEBUG] [Thread-14779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:16:59.435 [DEBUG] [Thread-14779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:16:59.435 [DEBUG] [Thread-14779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:16:59.435 [DEBUG] [Thread-14779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:16:59.444 [INFO] [Thread-14779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:16:59.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:17:00.077 [DEBUG] [Thread-14779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:17:00.077 [DEBUG] [Thread-14779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:17:00.077 [DEBUG] [Thread-14779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:17:00.119 [DEBUG] [Thread-14779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:17:00.119 [DEBUG] [Thread-14779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:17:00.121 [DEBUG] [Thread-14779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:17:00.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:17:00.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:17:00.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:17:00.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:17:00.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:17:00.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:17:00.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.386200 -999.00  +23.50  18.90     19   -1.30 1 1 1 1 1   888    0 26.99 43.02 ----- 21.4 18.9 265.8 32.0 29.5 -26.1 28.9 -24.3 27.6 -22.5 28.6 -24.4
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.386200
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:17:00.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:16:50', tmtdew=30.69, humidity=12.39, cloud=0.0, wind=21.37, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:16:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:17:00.140 [DEBUG] [Thread-14779] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:17:00.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:17:00.227 [DEBUG] [Thread-14782] [transport.py] [_log()] starting thread (client mode): 0x173bd900
2025-11-12T11:17:00.227 [DEBUG] [Thread-14782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:17:00.242 [DEBUG] [Thread-14782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:17:00.242 [INFO] [Thread-14782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] client lang: <none>
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] server lang: <none>
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] kex follows: False
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] Compression: none
2025-11-12T11:17:00.250 [DEBUG] [Thread-14782] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:17:00.304 [DEBUG] [Thread-14782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:17:00.304 [DEBUG] [Thread-14782] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:17:00.304 [DEBUG] [Thread-14782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:17:00.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:17:00.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:17:00.362 [DEBUG] [Thread-14782] [transport.py] [_log()] userauth is OK
2025-11-12T11:17:00.362 [DEBUG] [Thread-14782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:17:00.362 [DEBUG] [Thread-14782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:17:00.362 [DEBUG] [Thread-14782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:17:00.362 [DEBUG] [Thread-14782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:17:00.376 [INFO] [Thread-14782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:17:00.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:17:00.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:17:00.565 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:17:00.566 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:17:01.225 [DEBUG] [Thread-14782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:17:01.225 [DEBUG] [Thread-14782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:17:01.273 [DEBUG] [Thread-14782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:17:01.273 [DEBUG] [Thread-14782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:17:01.281 [DEBUG] [Thread-14782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:17:01.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:17: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-11-12T11:17:01.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-11-12T11:17:01.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:17:01.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:17:01.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:17:01.311 [DEBUG] [Thread-14782] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:17:07.350 [DEBUG] [Thread-14784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:17:22.400 [DEBUG] [Thread-14785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:17:29.263 [DEBUG] [Thread-14786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:17:31.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:17:31.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:17:31.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-11-12T11:17:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 17, 22), 30.66, 12.41, 0.0, 21.47, 24.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:17:31.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:17:22
2025-11-12T11:17:32.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:17:32.248 [DEBUG] [Thread-14787] [transport.py] [_log()] starting thread (client mode): 0x14982d70
2025-11-12T11:17:32.248 [DEBUG] [Thread-14787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:17:32.263 [DEBUG] [Thread-14787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:17:32.263 [INFO] [Thread-14787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:17:32.266 [DEBUG] [Thread-14787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:17:32.266 [DEBUG] [Thread-14787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:17:32.266 [DEBUG] [Thread-14787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:17:32.266 [DEBUG] [Thread-14787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:17:32.266 [DEBUG] [Thread-14787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] client lang: <none>
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] server lang: <none>
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] kex follows: False
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] Compression: none
2025-11-12T11:17:32.267 [DEBUG] [Thread-14787] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:17:32.285 [DEBUG] [Thread-14787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:17:32.286 [DEBUG] [Thread-14787] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:17:32.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:17:32.287 [DEBUG] [Thread-14787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:17:32.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:17:32.289 [DEBUG] [Thread-14787] [transport.py] [_log()] userauth is OK
2025-11-12T11:17:32.289 [DEBUG] [Thread-14787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:17:32.289 [DEBUG] [Thread-14787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:17:32.289 [DEBUG] [Thread-14787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:17:32.290 [DEBUG] [Thread-14787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:17:32.315 [INFO] [Thread-14787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:17:32.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:17:32.912 [DEBUG] [Thread-14787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:17:32.912 [DEBUG] [Thread-14787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:17:32.912 [DEBUG] [Thread-14787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:17:32.952 [DEBUG] [Thread-14787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:17:32.953 [DEBUG] [Thread-14787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:17:32.955 [DEBUG] [Thread-14787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:17:32.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:17:32.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:17:32.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:17:32.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:17:32.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:17:32.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:17:32.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:17:32.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:17:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:17:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.386548 -999.00  +23.50  18.96     18   -1.50 1 1 1 1 1   888    0 26.55 36.76 ----- 19.4 19.0 278.7 30.5 29.6 -26.4 29.0 -23.8 27.7 -23.8 28.6 -24.7
2025-11-12T11:17:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:17:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:17:32.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.386548
2025-11-12T11:17:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:17:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:17:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:17:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:17:32.982 [DEBUG] [Thread-14787] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:17:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:17:32.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:17:22', tmtdew=30.66, humidity=12.41, cloud=0.0, wind=21.47, temperature=24.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:16:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:17:33.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:17:33.079 [DEBUG] [Thread-14790] [transport.py] [_log()] starting thread (client mode): 0x14920580
2025-11-12T11:17:33.080 [DEBUG] [Thread-14790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:17:33.094 [DEBUG] [Thread-14790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:17:33.094 [INFO] [Thread-14790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] client lang: <none>
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] server lang: <none>
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] kex follows: False
2025-11-12T11:17:33.102 [DEBUG] [Thread-14790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:17:33.103 [DEBUG] [Thread-14790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:17:33.103 [DEBUG] [Thread-14790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:17:33.103 [DEBUG] [Thread-14790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:17:33.103 [DEBUG] [Thread-14790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:17:33.103 [DEBUG] [Thread-14790] [transport.py] [_log()] Compression: none
2025-11-12T11:17:33.103 [DEBUG] [Thread-14790] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:17:33.162 [DEBUG] [Thread-14790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:17:33.162 [DEBUG] [Thread-14790] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:17:33.162 [DEBUG] [Thread-14790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:17:33.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:17:33.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:17:33.221 [DEBUG] [Thread-14790] [transport.py] [_log()] userauth is OK
2025-11-12T11:17:33.222 [DEBUG] [Thread-14790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:17:33.222 [DEBUG] [Thread-14790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:17:33.222 [DEBUG] [Thread-14790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:17:33.222 [DEBUG] [Thread-14790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:17:33.244 [INFO] [Thread-14790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:17:33.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:17:33.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:17:34.070 [DEBUG] [Thread-14790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:17:34.070 [DEBUG] [Thread-14790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:17:34.117 [DEBUG] [Thread-14790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:17:34.118 [DEBUG] [Thread-14790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:17:34.126 [DEBUG] [Thread-14790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:17:34.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:17:34.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-11-12T11:17:34.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:17:34.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:17:34.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:17:34.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:17:34.161 [DEBUG] [Thread-14790] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:17:37.431 [DEBUG] [Thread-14792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:17:52.471 [DEBUG] [Thread-14793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:18:00.707 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:18:00.708 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:18:04.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:18:04.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:18:04.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:18:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 17, 54), 30.79, 12.33, 0.0, 21.84, 24.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:18:04.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:17:54
2025-11-12T11:18:04.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:18:05.082 [DEBUG] [Thread-14794] [transport.py] [_log()] starting thread (client mode): 0x17344eb0
2025-11-12T11:18:05.082 [DEBUG] [Thread-14794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:18:05.101 [DEBUG] [Thread-14794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:18:05.102 [INFO] [Thread-14794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:18:05.104 [DEBUG] [Thread-14794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] client lang: <none>
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] server lang: <none>
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] kex follows: False
2025-11-12T11:18:05.105 [DEBUG] [Thread-14794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:18:05.106 [DEBUG] [Thread-14794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:18:05.106 [DEBUG] [Thread-14794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:18:05.106 [DEBUG] [Thread-14794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:18:05.106 [DEBUG] [Thread-14794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:18:05.106 [DEBUG] [Thread-14794] [transport.py] [_log()] Compression: none
2025-11-12T11:18:05.106 [DEBUG] [Thread-14794] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:18:05.125 [DEBUG] [Thread-14794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:18:05.125 [DEBUG] [Thread-14794] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:18:05.126 [DEBUG] [Thread-14794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:18:05.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:18:05.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:18:05.128 [DEBUG] [Thread-14794] [transport.py] [_log()] userauth is OK
2025-11-12T11:18:05.128 [DEBUG] [Thread-14794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:18:05.128 [DEBUG] [Thread-14794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:18:05.128 [DEBUG] [Thread-14794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:18:05.128 [DEBUG] [Thread-14794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:18:05.164 [INFO] [Thread-14794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:18:05.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:18:05.759 [DEBUG] [Thread-14794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:18:05.759 [DEBUG] [Thread-14794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:18:05.760 [DEBUG] [Thread-14794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:18:05.801 [DEBUG] [Thread-14794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:18:05.801 [DEBUG] [Thread-14794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:18:05.804 [DEBUG] [Thread-14794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:18:05.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:18:05.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:18:05.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:18:05.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:18:05.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:18:05.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:18:05.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:18:05.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:18:05.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:18:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.386895 -999.00  +23.80  17.39     18   -1.30 1 1 1 1 1   888    0 26.13 31.33 ----- 15.8 17.4 278.2 22.5 29.9 -23.8 29.1 -23.3 27.9 -24.6 28.9 -22.1
2025-11-12T11:18:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:18:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:18:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.386895
2025-11-12T11:18:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:18:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:18:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:18:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:18:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:18:05.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:17:54', tmtdew=30.79, humidity=12.33, cloud=0.0, wind=21.84, temperature=24.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:17:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:18:05.834 [DEBUG] [Thread-14794] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:18:05.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:18:05.928 [DEBUG] [Thread-14797] [transport.py] [_log()] starting thread (client mode): 0x19dd9d50
2025-11-12T11:18:05.928 [DEBUG] [Thread-14797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:18:05.942 [DEBUG] [Thread-14797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:18:05.942 [INFO] [Thread-14797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:18:05.949 [DEBUG] [Thread-14797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] client lang: <none>
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] server lang: <none>
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] kex follows: False
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] Compression: none
2025-11-12T11:18:05.950 [DEBUG] [Thread-14797] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:18:06.011 [DEBUG] [Thread-14797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:18:06.011 [DEBUG] [Thread-14797] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:18:06.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:18:06.013 [DEBUG] [Thread-14797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:18:06.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:18:06.067 [DEBUG] [Thread-14797] [transport.py] [_log()] userauth is OK
2025-11-12T11:18:06.068 [DEBUG] [Thread-14797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:18:06.068 [DEBUG] [Thread-14797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:18:06.068 [DEBUG] [Thread-14797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:18:06.068 [DEBUG] [Thread-14797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:18:06.087 [INFO] [Thread-14797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:18:06.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:18:06.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:18:06.985 [DEBUG] [Thread-14797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:18:06.985 [DEBUG] [Thread-14797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:18:07.033 [DEBUG] [Thread-14797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:18:07.034 [DEBUG] [Thread-14797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:18:07.043 [DEBUG] [Thread-14797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:18:07.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:18:07.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-11-12T11:18:07.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-11-12T11:18:07.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:18:07.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:18:07.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:18:07.080 [DEBUG] [Thread-14797] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:18:07.510 [DEBUG] [Thread-14799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:18:22.559 [DEBUG] [Thread-14800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:18:29.295 [DEBUG] [Thread-14801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:18:37.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:18:37.103 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:18:37.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-11-12T11:18:37.595 [DEBUG] [Thread-14802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:18:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 18, 26), 30.71, 12.44, 0.0, 21.33, 25.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:18:37.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:18:26
2025-11-12T11:18:37.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:18:38.006 [DEBUG] [Thread-14803] [transport.py] [_log()] starting thread (client mode): 0x14980bb0
2025-11-12T11:18:38.006 [DEBUG] [Thread-14803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:18:38.025 [DEBUG] [Thread-14803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:18:38.025 [INFO] [Thread-14803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:18:38.028 [DEBUG] [Thread-14803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] client lang: <none>
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] server lang: <none>
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] kex follows: False
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:18:38.029 [DEBUG] [Thread-14803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:18:38.030 [DEBUG] [Thread-14803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:18:38.030 [DEBUG] [Thread-14803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:18:38.030 [DEBUG] [Thread-14803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:18:38.030 [DEBUG] [Thread-14803] [transport.py] [_log()] Compression: none
2025-11-12T11:18:38.030 [DEBUG] [Thread-14803] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:18:38.048 [DEBUG] [Thread-14803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:18:38.048 [DEBUG] [Thread-14803] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:18:38.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:18:38.049 [DEBUG] [Thread-14803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:18:38.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:18:38.051 [DEBUG] [Thread-14803] [transport.py] [_log()] userauth is OK
2025-11-12T11:18:38.052 [DEBUG] [Thread-14803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:18:38.052 [DEBUG] [Thread-14803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:18:38.052 [DEBUG] [Thread-14803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:18:38.052 [DEBUG] [Thread-14803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:18:38.076 [INFO] [Thread-14803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:18:38.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:18:38.810 [DEBUG] [Thread-14803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:18:38.810 [DEBUG] [Thread-14803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:18:38.810 [DEBUG] [Thread-14803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:18:38.851 [DEBUG] [Thread-14803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:18:38.851 [DEBUG] [Thread-14803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:18:38.855 [DEBUG] [Thread-14803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:18:38.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:18:38.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:18:38.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:18:38.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:18:38.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:18:38.878 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:18:38.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:18:38.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:18:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:18:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.387589 -999.00  +24.10  12.05     19   -0.80 1 2 1 1 1   888    0 25.86 20.34 ----- 15.3 12.1 295.6 24.8 30.2 -24.0 29.4 -23.0 28.2 -22.1 29.1 -22.6
2025-11-12T11:18:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:18:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:18:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.387589
2025-11-12T11:18:38.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:18:38.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:18:38.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:18:38.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:18:38.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T11:18:38.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:18:26', tmtdew=30.71, humidity=12.44, cloud=0.0, wind=21.33, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:18:07.690', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:18:38.881 [DEBUG] [Thread-14803] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:18:38.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:18:38.967 [DEBUG] [Thread-14806] [transport.py] [_log()] starting thread (client mode): 0x1737e140
2025-11-12T11:18:38.967 [DEBUG] [Thread-14806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:18:38.982 [DEBUG] [Thread-14806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:18:38.982 [INFO] [Thread-14806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:18:38.990 [DEBUG] [Thread-14806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:18:38.990 [DEBUG] [Thread-14806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:18:38.990 [DEBUG] [Thread-14806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:18:38.990 [DEBUG] [Thread-14806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:18:38.990 [DEBUG] [Thread-14806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:18:38.991 [DEBUG] [Thread-14806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:18:38.991 [DEBUG] [Thread-14806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:18:38.991 [DEBUG] [Thread-14806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:18:38.991 [DEBUG] [Thread-14806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:18:38.991 [DEBUG] [Thread-14806] [transport.py] [_log()] client lang: <none>
2025-11-12T11:18:38.991 [DEBUG] [Thread-14806] [transport.py] [_log()] server lang: <none>
2025-11-12T11:18:38.991 [DEBUG] [Thread-14806] [transport.py] [_log()] kex follows: False
2025-11-12T11:18:38.991 [DEBUG] [Thread-14806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:18:38.992 [DEBUG] [Thread-14806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:18:38.992 [DEBUG] [Thread-14806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:18:38.992 [DEBUG] [Thread-14806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:18:38.992 [DEBUG] [Thread-14806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:18:38.992 [DEBUG] [Thread-14806] [transport.py] [_log()] Compression: none
2025-11-12T11:18:38.992 [DEBUG] [Thread-14806] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:18:39.046 [DEBUG] [Thread-14806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:18:39.047 [DEBUG] [Thread-14806] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:18:39.047 [DEBUG] [Thread-14806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:18:39.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:18:39.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:18:39.102 [DEBUG] [Thread-14806] [transport.py] [_log()] userauth is OK
2025-11-12T11:18:39.102 [DEBUG] [Thread-14806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:18:39.102 [DEBUG] [Thread-14806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:18:39.103 [DEBUG] [Thread-14806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:18:39.103 [DEBUG] [Thread-14806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:18:39.128 [INFO] [Thread-14806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:18:39.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:18:39.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:18:39.945 [DEBUG] [Thread-14806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:18:39.946 [DEBUG] [Thread-14806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:18:39.996 [DEBUG] [Thread-14806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:18:39.996 [DEBUG] [Thread-14806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:18:40.009 [DEBUG] [Thread-14806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:18:40.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:18:40.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-11-12T11:18:40.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-11-12T11:18:40.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:18:40.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:18:40.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:18:40.046 [DEBUG] [Thread-14806] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:18:52.630 [DEBUG] [Thread-14808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:19:00.851 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:19:00.852 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:19:07.680 [DEBUG] [Thread-14809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:19:10.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:19:10.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:19:10.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-11-12T11:19:10.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 18, 58), 30.81, 12.43, 0.0, 15.4, 25.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:19:10.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:18:58
2025-11-12T11:19:10.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:19:10.982 [DEBUG] [Thread-14810] [transport.py] [_log()] starting thread (client mode): 0x149228c0
2025-11-12T11:19:10.982 [DEBUG] [Thread-14810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:19:11.003 [DEBUG] [Thread-14810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:19:11.003 [INFO] [Thread-14810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:19:11.005 [DEBUG] [Thread-14810] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] client lang: <none>
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] server lang: <none>
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] kex follows: False
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] Compression: none
2025-11-12T11:19:11.006 [DEBUG] [Thread-14810] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:19:11.025 [DEBUG] [Thread-14810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:19:11.026 [DEBUG] [Thread-14810] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:19:11.027 [DEBUG] [Thread-14810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:19:11.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:19:11.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:19:11.029 [DEBUG] [Thread-14810] [transport.py] [_log()] userauth is OK
2025-11-12T11:19:11.029 [DEBUG] [Thread-14810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:19:11.029 [DEBUG] [Thread-14810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:19:11.029 [DEBUG] [Thread-14810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:19:11.029 [DEBUG] [Thread-14810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:19:11.054 [INFO] [Thread-14810] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:19:11.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:19:11.690 [DEBUG] [Thread-14810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:19:11.690 [DEBUG] [Thread-14810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:19:11.691 [DEBUG] [Thread-14810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:19:11.731 [DEBUG] [Thread-14810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:19:11.731 [DEBUG] [Thread-14810] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:19:11.734 [DEBUG] [Thread-14810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:19:11.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:19:11.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:19:11.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:19:11.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:19:11.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:19:11.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:19:11.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:19:11.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:19:11.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:19:11.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.387936 -999.00  +24.70  13.78     18   -0.70 1 1 1 1 1   888    0 26.08 12.78 ----- 13.5 13.8 281.0 17.0 30.6 -22.4 29.7 -23.4 28.5 -22.8 29.5 -21.2
2025-11-12T11:19:11.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:19:11.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:19:11.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.387936
2025-11-12T11:19:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:19:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:19:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:19:11.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:19:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:19:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:18:58', tmtdew=30.81, humidity=12.43, cloud=0.0, wind=15.4, temperature=25.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:18:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:19:11.762 [DEBUG] [Thread-14810] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:19:11.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:19:11.861 [DEBUG] [Thread-14813] [transport.py] [_log()] starting thread (client mode): 0x1737e890
2025-11-12T11:19:11.861 [DEBUG] [Thread-14813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:19:11.876 [DEBUG] [Thread-14813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:19:11.876 [INFO] [Thread-14813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:19:11.883 [DEBUG] [Thread-14813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] client lang: <none>
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] server lang: <none>
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] kex follows: False
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:19:11.884 [DEBUG] [Thread-14813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:19:11.885 [DEBUG] [Thread-14813] [transport.py] [_log()] Compression: none
2025-11-12T11:19:11.885 [DEBUG] [Thread-14813] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:19:11.941 [DEBUG] [Thread-14813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:19:11.942 [DEBUG] [Thread-14813] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:19:11.943 [DEBUG] [Thread-14813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:19:11.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:19:11.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:19:11.999 [DEBUG] [Thread-14813] [transport.py] [_log()] userauth is OK
2025-11-12T11:19:11.999 [DEBUG] [Thread-14813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:19:11.999 [DEBUG] [Thread-14813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:19:11.999 [DEBUG] [Thread-14813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:19:11.999 [DEBUG] [Thread-14813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:19:12.018 [INFO] [Thread-14813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:19:12.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:19:12.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:19:12.899 [DEBUG] [Thread-14813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:19:12.899 [DEBUG] [Thread-14813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:19:12.946 [DEBUG] [Thread-14813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:19:12.947 [DEBUG] [Thread-14813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:19:12.956 [DEBUG] [Thread-14813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:19:12.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:19:12.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-11-12T11:19:12.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-11-12T11:19:12.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:19:12.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:19:12.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:19:12.992 [DEBUG] [Thread-14813] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:19:22.718 [DEBUG] [Thread-14815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:19:29.327 [DEBUG] [Thread-14816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:19:37.766 [DEBUG] [Thread-14817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:19:43.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:19:43.015 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:19:43.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-11-12T11:19:43.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 19, 30), 30.91, 12.36, 0.0, 13.34, 25.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:19:43.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:19:30
2025-11-12T11:19:43.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:19:43.915 [DEBUG] [Thread-14818] [transport.py] [_log()] starting thread (client mode): 0x1737f850
2025-11-12T11:19:43.915 [DEBUG] [Thread-14818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:19:43.926 [DEBUG] [Thread-14818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:19:43.926 [INFO] [Thread-14818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] client lang: <none>
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] server lang: <none>
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] kex follows: False
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:19:43.927 [DEBUG] [Thread-14818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:19:43.928 [DEBUG] [Thread-14818] [transport.py] [_log()] Compression: none
2025-11-12T11:19:43.928 [DEBUG] [Thread-14818] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:19:43.938 [DEBUG] [Thread-14818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:19:43.938 [DEBUG] [Thread-14818] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:19:43.938 [DEBUG] [Thread-14818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:19:43.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:19:43.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:19:43.939 [DEBUG] [Thread-14818] [transport.py] [_log()] userauth is OK
2025-11-12T11:19:43.939 [DEBUG] [Thread-14818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:19:43.939 [DEBUG] [Thread-14818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:19:43.939 [DEBUG] [Thread-14818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:19:43.939 [DEBUG] [Thread-14818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:19:43.952 [INFO] [Thread-14818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:19:43.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:19:44.629 [DEBUG] [Thread-14818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:19:44.629 [DEBUG] [Thread-14818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:19:44.629 [DEBUG] [Thread-14818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:19:44.670 [DEBUG] [Thread-14818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:19:44.670 [DEBUG] [Thread-14818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:19:44.673 [DEBUG] [Thread-14818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:19:44.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:19:44.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:19:44.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:19:44.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:19:44.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:19:44.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:19:44.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:19:44.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:19:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:19:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.388284 -999.00  +24.70  17.17     18   -0.70 1 2 1 1 1   888    0 25.62 4.89 ----- 16.5 17.2 297.0 22.8 30.7 -25.0 29.8 -23.2 28.7 -21.8 29.6 -22.6
2025-11-12T11:19:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:19:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:19:44.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.388284
2025-11-12T11:19:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:19:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:19:44.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:19:44.700 [DEBUG] [Thread-14818] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:19:44.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:19:44.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T11:19:44.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:19:30', tmtdew=30.91, humidity=12.36, cloud=0.0, wind=13.34, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:19:07.738', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:19:44.781 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:19:44.793 [DEBUG] [Thread-14821] [transport.py] [_log()] starting thread (client mode): 0x173981f0
2025-11-12T11:19:44.793 [DEBUG] [Thread-14821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:19:44.808 [DEBUG] [Thread-14821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:19:44.808 [INFO] [Thread-14821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] client lang: <none>
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] server lang: <none>
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] kex follows: False
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:19:44.816 [DEBUG] [Thread-14821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:19:44.817 [DEBUG] [Thread-14821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:19:44.817 [DEBUG] [Thread-14821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:19:44.817 [DEBUG] [Thread-14821] [transport.py] [_log()] Compression: none
2025-11-12T11:19:44.817 [DEBUG] [Thread-14821] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:19:44.874 [DEBUG] [Thread-14821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:19:44.875 [DEBUG] [Thread-14821] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:19:44.876 [DEBUG] [Thread-14821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:19:44.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:19:44.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:19:44.931 [DEBUG] [Thread-14821] [transport.py] [_log()] userauth is OK
2025-11-12T11:19:44.931 [DEBUG] [Thread-14821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:19:44.931 [DEBUG] [Thread-14821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:19:44.931 [DEBUG] [Thread-14821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:19:44.931 [DEBUG] [Thread-14821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:19:44.950 [INFO] [Thread-14821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:19:44.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:19:44.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:19:45.793 [DEBUG] [Thread-14821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:19:45.793 [DEBUG] [Thread-14821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:19:45.840 [DEBUG] [Thread-14821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:19:45.841 [DEBUG] [Thread-14821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:19:45.850 [DEBUG] [Thread-14821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:19:45.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:19:45.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-11-12T11:19:45.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-11-12T11:19:45.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:19:45.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:19:45.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:19:45.886 [DEBUG] [Thread-14821] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:19:52.808 [DEBUG] [Thread-14823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:20:00.992 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:20:00.993 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:20:07.861 [DEBUG] [Thread-14824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:20:15.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:20:15.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:20:15.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-11-12T11:20:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 20, 2), 30.56, 12.66, 0.0, 16.07, 25.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:20:16.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:20:02
2025-11-12T11:20:16.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:20:16.800 [DEBUG] [Thread-14825] [transport.py] [_log()] starting thread (client mode): 0x19dda320
2025-11-12T11:20:16.800 [DEBUG] [Thread-14825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:20:16.820 [DEBUG] [Thread-14825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:20:16.820 [INFO] [Thread-14825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:20:16.823 [DEBUG] [Thread-14825] [transport.py] [_log()] client lang: <none>
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] server lang: <none>
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] kex follows: False
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] Compression: none
2025-11-12T11:20:16.824 [DEBUG] [Thread-14825] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:20:16.840 [DEBUG] [Thread-14825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:20:16.841 [DEBUG] [Thread-14825] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:20:16.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:20:16.842 [DEBUG] [Thread-14825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:20:16.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:20:16.844 [DEBUG] [Thread-14825] [transport.py] [_log()] userauth is OK
2025-11-12T11:20:16.844 [DEBUG] [Thread-14825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:20:16.844 [DEBUG] [Thread-14825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:20:16.844 [DEBUG] [Thread-14825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:20:16.844 [DEBUG] [Thread-14825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:20:16.880 [INFO] [Thread-14825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:20:16.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:20:18.504 [DEBUG] [Thread-14825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:20:18.504 [DEBUG] [Thread-14825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:20:18.504 [DEBUG] [Thread-14825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:20:18.545 [DEBUG] [Thread-14825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:20:18.545 [DEBUG] [Thread-14825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:20:18.548 [DEBUG] [Thread-14825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:20:18.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:20:18.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:20:18.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:20:18.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:20:18.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:20:18.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:20:18.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:20:18.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:20:18.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:20:18.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.388631 -999.00  +24.90  26.22     18   -0.40 1 1 1 1 1   888    0 25.02 -3.40 ----- 26.2 26.2 279.6 31.8 30.9 -24.5 29.9 -25.9 28.6 -24.7 29.8 -23.6
2025-11-12T11:20:18.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:20:18.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:20:18.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.388631
2025-11-12T11:20:18.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:20:18.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:20:18.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:20:18.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:20:18.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:20:18.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:20:02', tmtdew=30.56, humidity=12.66, cloud=0.0, wind=16.07, temperature=25.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:19:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:20:18.709 [DEBUG] [Thread-14825] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:20:18.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:20:18.804 [DEBUG] [Thread-14828] [transport.py] [_log()] starting thread (client mode): 0x1739a650
2025-11-12T11:20:18.804 [DEBUG] [Thread-14828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:20:18.822 [DEBUG] [Thread-14828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:20:18.823 [INFO] [Thread-14828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] client lang: <none>
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] server lang: <none>
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] kex follows: False
2025-11-12T11:20:18.830 [DEBUG] [Thread-14828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:20:18.831 [DEBUG] [Thread-14828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:20:18.831 [DEBUG] [Thread-14828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:20:18.831 [DEBUG] [Thread-14828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:20:18.831 [DEBUG] [Thread-14828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:20:18.831 [DEBUG] [Thread-14828] [transport.py] [_log()] Compression: none
2025-11-12T11:20:18.831 [DEBUG] [Thread-14828] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:20:18.889 [DEBUG] [Thread-14828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:20:18.890 [DEBUG] [Thread-14828] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:20:18.890 [DEBUG] [Thread-14828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:20:18.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:20:18.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:20:18.946 [DEBUG] [Thread-14828] [transport.py] [_log()] userauth is OK
2025-11-12T11:20:18.946 [DEBUG] [Thread-14828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:20:18.946 [DEBUG] [Thread-14828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:20:18.946 [DEBUG] [Thread-14828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:20:18.946 [DEBUG] [Thread-14828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:20:18.966 [INFO] [Thread-14828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:20:18.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:20:18.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:20:19.852 [DEBUG] [Thread-14828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:20:19.853 [DEBUG] [Thread-14828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:20:19.900 [DEBUG] [Thread-14828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:20:19.900 [DEBUG] [Thread-14828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:20:19.909 [DEBUG] [Thread-14828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:20:19.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:20:19.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-11-12T11:20:19.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-11-12T11:20:19.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:20:19.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:20:19.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:20:19.943 [DEBUG] [Thread-14828] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:20:22.893 [DEBUG] [Thread-14830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:20:29.360 [DEBUG] [Thread-14831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:20:37.952 [DEBUG] [Thread-14832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:20:49.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:20:49.965 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:20:49.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-11-12T11:20:50.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 20, 34), 30.29, 13.27, 0.0, 25.55, 25.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:20:50.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:20:34
2025-11-12T11:20:50.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:20:50.892 [DEBUG] [Thread-14833] [transport.py] [_log()] starting thread (client mode): 0x173625c0
2025-11-12T11:20:50.892 [DEBUG] [Thread-14833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:20:50.912 [DEBUG] [Thread-14833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:20:50.912 [INFO] [Thread-14833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] client lang: <none>
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] server lang: <none>
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] kex follows: False
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:20:50.915 [DEBUG] [Thread-14833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:20:50.916 [DEBUG] [Thread-14833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:20:50.916 [DEBUG] [Thread-14833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:20:50.916 [DEBUG] [Thread-14833] [transport.py] [_log()] Compression: none
2025-11-12T11:20:50.916 [DEBUG] [Thread-14833] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:20:50.934 [DEBUG] [Thread-14833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:20:50.934 [DEBUG] [Thread-14833] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:20:50.934 [DEBUG] [Thread-14833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:20:50.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:20:50.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:20:50.934 [DEBUG] [Thread-14833] [transport.py] [_log()] userauth is OK
2025-11-12T11:20:50.935 [DEBUG] [Thread-14833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:20:50.935 [DEBUG] [Thread-14833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:20:50.935 [DEBUG] [Thread-14833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:20:50.935 [DEBUG] [Thread-14833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:20:50.944 [INFO] [Thread-14833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:20:50.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:20:51.577 [DEBUG] [Thread-14833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:20:51.577 [DEBUG] [Thread-14833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:20:51.577 [DEBUG] [Thread-14833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:20:51.618 [DEBUG] [Thread-14833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:20:51.618 [DEBUG] [Thread-14833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:20:51.620 [DEBUG] [Thread-14833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:20:51.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:20:51.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:20:51.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:20:51.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:20:51.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:20:51.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:20:51.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.388978 -999.00  +24.90  18.15     18   -0.30 1 1 1 1 1   888    0 24.69 -11.92 ----- 20.9 18.1 285.4 31.7 30.6 -27.3 29.8 -25.1 28.6 -25.4 29.7 -25.4
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.388978
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:20:51.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:20:34', tmtdew=30.29, humidity=13.27, cloud=0.0, wind=25.55, temperature=25.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:20:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:20:51.640 [DEBUG] [Thread-14833] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:20:51.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:20:51.724 [DEBUG] [Thread-14836] [transport.py] [_log()] starting thread (client mode): 0x1737eec0
2025-11-12T11:20:51.724 [DEBUG] [Thread-14836] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:20:51.738 [DEBUG] [Thread-14836] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:20:51.738 [INFO] [Thread-14836] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] client lang: <none>
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] server lang: <none>
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] kex follows: False
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:20:51.746 [DEBUG] [Thread-14836] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:20:51.747 [DEBUG] [Thread-14836] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:20:51.747 [DEBUG] [Thread-14836] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:20:51.747 [DEBUG] [Thread-14836] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:20:51.747 [DEBUG] [Thread-14836] [transport.py] [_log()] Compression: none
2025-11-12T11:20:51.747 [DEBUG] [Thread-14836] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:20:51.801 [DEBUG] [Thread-14836] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:20:51.801 [DEBUG] [Thread-14836] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:20:51.801 [DEBUG] [Thread-14836] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:20:51.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:20:51.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:20:51.858 [DEBUG] [Thread-14836] [transport.py] [_log()] userauth is OK
2025-11-12T11:20:51.858 [DEBUG] [Thread-14836] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:20:51.858 [DEBUG] [Thread-14836] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:20:51.858 [DEBUG] [Thread-14836] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:20:51.858 [DEBUG] [Thread-14836] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:20:51.872 [INFO] [Thread-14836] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:20:51.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:20:51.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:20:52.732 [DEBUG] [Thread-14836] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:20:52.732 [DEBUG] [Thread-14836] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:20:52.780 [DEBUG] [Thread-14836] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:20:52.780 [DEBUG] [Thread-14836] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:20:52.788 [DEBUG] [Thread-14836] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:20:52.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:20:52.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-11-12T11:20: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-11-12T11:20:52.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:20:52.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:20:52.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:20:52.820 [DEBUG] [Thread-14836] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:20:52.986 [DEBUG] [Thread-14838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:21:01.134 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:21:01.135 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:21:08.025 [DEBUG] [Thread-14839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:21:22.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:21:22.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:21:22.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-11-12T11:21:23.059 [DEBUG] [Thread-14840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:21:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 21, 6), 30.67, 12.98, 0.0, 24.63, 25.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:21:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:21:06
2025-11-12T11:21:23.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:21:23.763 [DEBUG] [Thread-14841] [transport.py] [_log()] starting thread (client mode): 0x1739bd90
2025-11-12T11:21:23.763 [DEBUG] [Thread-14841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:21:23.776 [DEBUG] [Thread-14841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:21:23.776 [INFO] [Thread-14841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] client lang: <none>
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] server lang: <none>
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] kex follows: False
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] Compression: none
2025-11-12T11:21:23.777 [DEBUG] [Thread-14841] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:21:23.786 [DEBUG] [Thread-14841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:21:23.786 [DEBUG] [Thread-14841] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:21:23.786 [DEBUG] [Thread-14841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:21:23.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:21:23.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:21:23.788 [DEBUG] [Thread-14841] [transport.py] [_log()] userauth is OK
2025-11-12T11:21:23.788 [DEBUG] [Thread-14841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:21:23.788 [DEBUG] [Thread-14841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:21:23.788 [DEBUG] [Thread-14841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:21:23.788 [DEBUG] [Thread-14841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:21:23.811 [INFO] [Thread-14841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:21:23.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:21:24.381 [DEBUG] [Thread-14841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:21:24.381 [DEBUG] [Thread-14841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:21:24.381 [DEBUG] [Thread-14841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:21:24.421 [DEBUG] [Thread-14841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:21:24.422 [DEBUG] [Thread-14841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:21:24.425 [DEBUG] [Thread-14841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:21:24.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:21:24.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:21:24.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:21:24.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:21:24.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:21:24.449 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:21:24.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:21:24.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:21:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:21:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.389325 -999.00  +24.80  23.85     18   -0.50 1 1 1 1 1   888    0 25.29 -18.33 ----- 28.9 23.9 286.3 27.7 30.6 -26.7 29.9 -24.1 28.6 -25.0 29.6 -24.7
2025-11-12T11:21:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:21:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:21:24.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.389325
2025-11-12T11:21:24.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:21:24.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:21:24.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:21:24.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:21:24.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:21:24.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:21:06', tmtdew=30.67, humidity=12.98, cloud=0.0, wind=24.63, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:20:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:21:24.452 [DEBUG] [Thread-14841] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:21:24.536 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:21:24.548 [DEBUG] [Thread-14844] [transport.py] [_log()] starting thread (client mode): 0x173bd1b0
2025-11-12T11:21:24.549 [DEBUG] [Thread-14844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:21:24.563 [DEBUG] [Thread-14844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:21:24.563 [INFO] [Thread-14844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:21:24.571 [DEBUG] [Thread-14844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:21:24.571 [DEBUG] [Thread-14844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:21:24.571 [DEBUG] [Thread-14844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:21:24.571 [DEBUG] [Thread-14844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:21:24.571 [DEBUG] [Thread-14844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] client lang: <none>
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] server lang: <none>
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] kex follows: False
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:21:24.572 [DEBUG] [Thread-14844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:21:24.573 [DEBUG] [Thread-14844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:21:24.573 [DEBUG] [Thread-14844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:21:24.573 [DEBUG] [Thread-14844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:21:24.573 [DEBUG] [Thread-14844] [transport.py] [_log()] Compression: none
2025-11-12T11:21:24.573 [DEBUG] [Thread-14844] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:21:24.631 [DEBUG] [Thread-14844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:21:24.632 [DEBUG] [Thread-14844] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:21:24.633 [DEBUG] [Thread-14844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:21:24.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:21:24.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:21:24.695 [DEBUG] [Thread-14844] [transport.py] [_log()] userauth is OK
2025-11-12T11:21:24.695 [DEBUG] [Thread-14844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:21:24.695 [DEBUG] [Thread-14844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:21:24.695 [DEBUG] [Thread-14844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:21:24.695 [DEBUG] [Thread-14844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:21:24.714 [INFO] [Thread-14844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:21:24.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:21:24.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:21:25.576 [DEBUG] [Thread-14844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:21:25.577 [DEBUG] [Thread-14844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:21:25.624 [DEBUG] [Thread-14844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:21:25.625 [DEBUG] [Thread-14844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:21:25.634 [DEBUG] [Thread-14844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:21:25.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:21:25.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:21:25.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-11-12T11:21:25.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:21:25.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:21:25.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:21:25.675 [DEBUG] [Thread-14844] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:21:29.388 [DEBUG] [Thread-14846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:21:38.090 [DEBUG] [Thread-14847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:21:53.143 [DEBUG] [Thread-14848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:21:55.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:21:55.693 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:21:55.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-11-12T11:21:56.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 21, 38), 30.48, 13.01, 0.0, 24.4, 25.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:21:56.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:21:38
2025-11-12T11:21:56.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:21:56.629 [DEBUG] [Thread-14849] [transport.py] [_log()] starting thread (client mode): 0x173e8520
2025-11-12T11:21:56.629 [DEBUG] [Thread-14849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:21:56.640 [DEBUG] [Thread-14849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:21:56.641 [INFO] [Thread-14849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:21:56.643 [DEBUG] [Thread-14849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] client lang: <none>
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] server lang: <none>
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] kex follows: False
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] Compression: none
2025-11-12T11:21:56.644 [DEBUG] [Thread-14849] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:21:56.663 [DEBUG] [Thread-14849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:21:56.664 [DEBUG] [Thread-14849] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:21:56.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:21:56.664 [DEBUG] [Thread-14849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:21:56.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:21:56.666 [DEBUG] [Thread-14849] [transport.py] [_log()] userauth is OK
2025-11-12T11:21:56.667 [DEBUG] [Thread-14849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:21:56.667 [DEBUG] [Thread-14849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:21:56.667 [DEBUG] [Thread-14849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:21:56.667 [DEBUG] [Thread-14849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:21:56.691 [INFO] [Thread-14849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:21:56.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:21:57.324 [DEBUG] [Thread-14849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:21:57.324 [DEBUG] [Thread-14849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:21:57.325 [DEBUG] [Thread-14849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:21:57.366 [DEBUG] [Thread-14849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:21:57.366 [DEBUG] [Thread-14849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:21:57.369 [DEBUG] [Thread-14849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:21:57.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:21:57.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:21:57.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:21:57.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:21:57.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:21:57.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:21:57.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:21:57.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:21:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:21:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.389673 -999.00  +24.60  20.82     18   -0.90 1 1 1 1 1   888    0 24.81 -21.31 ----- 25.5 20.8 282.2 40.8 30.4 -28.8 29.7 -24.0 28.6 -24.0 29.5 -25.7
2025-11-12T11:21:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:21:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:21:57.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.389673
2025-11-12T11:21:57.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:21:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:21:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:21:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:21:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:21:57.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:21:38', tmtdew=30.48, humidity=13.01, cloud=0.0, wind=24.4, temperature=25.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:21:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:21:57.398 [DEBUG] [Thread-14849] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:21:57.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:21:57.493 [DEBUG] [Thread-14852] [transport.py] [_log()] starting thread (client mode): 0x173ea470
2025-11-12T11:21:57.493 [DEBUG] [Thread-14852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:21:57.507 [DEBUG] [Thread-14852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:21:57.508 [INFO] [Thread-14852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:21:57.515 [DEBUG] [Thread-14852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:21:57.515 [DEBUG] [Thread-14852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] client lang: <none>
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] server lang: <none>
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] kex follows: False
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] Compression: none
2025-11-12T11:21:57.516 [DEBUG] [Thread-14852] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:21:57.574 [DEBUG] [Thread-14852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:21:57.575 [DEBUG] [Thread-14852] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:21:57.575 [DEBUG] [Thread-14852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:21:57.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:21:57.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:21:57.631 [DEBUG] [Thread-14852] [transport.py] [_log()] userauth is OK
2025-11-12T11:21:57.631 [DEBUG] [Thread-14852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:21:57.631 [DEBUG] [Thread-14852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:21:57.631 [DEBUG] [Thread-14852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:21:57.631 [DEBUG] [Thread-14852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:21:57.649 [INFO] [Thread-14852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:21:57.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:21:57.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:21:58.502 [DEBUG] [Thread-14852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:21:58.502 [DEBUG] [Thread-14852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:21:58.549 [DEBUG] [Thread-14852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:21:58.550 [DEBUG] [Thread-14852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:21:58.559 [DEBUG] [Thread-14852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:21:58.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:21:58.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-11-12T11:21:58.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-11-12T11:21:58.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:21:58.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:21:58.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:21:58.597 [DEBUG] [Thread-14852] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:22:01.286 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:22:01.287 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:22:08.176 [DEBUG] [Thread-14854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:22:23.215 [DEBUG] [Thread-14855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:22:28.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:22:28.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:22:28.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-11-12T11:22:29.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 22, 10), 30.53, 13.01, 0.0, 25.78, 25.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:22:29.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:22:10
2025-11-12T11:22:29.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:22:29.416 [DEBUG] [Thread-14856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:22:29.546 [DEBUG] [Thread-14857] [transport.py] [_log()] starting thread (client mode): 0x173eb280
2025-11-12T11:22:29.546 [DEBUG] [Thread-14857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:22:29.562 [DEBUG] [Thread-14857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:22:29.562 [INFO] [Thread-14857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] client lang: <none>
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] server lang: <none>
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] kex follows: False
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] Compression: none
2025-11-12T11:22:29.564 [DEBUG] [Thread-14857] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:22:29.575 [DEBUG] [Thread-14857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:22:29.576 [DEBUG] [Thread-14857] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:22:29.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:22:29.576 [DEBUG] [Thread-14857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:22:29.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:22:29.577 [DEBUG] [Thread-14857] [transport.py] [_log()] userauth is OK
2025-11-12T11:22:29.577 [DEBUG] [Thread-14857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:22:29.577 [DEBUG] [Thread-14857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:22:29.577 [DEBUG] [Thread-14857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:22:29.577 [DEBUG] [Thread-14857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:22:29.594 [INFO] [Thread-14857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:22:29.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:22:30.198 [DEBUG] [Thread-14857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:22:30.199 [DEBUG] [Thread-14857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:22:30.199 [DEBUG] [Thread-14857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:22:30.239 [DEBUG] [Thread-14857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:22:30.240 [DEBUG] [Thread-14857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:22:30.242 [DEBUG] [Thread-14857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:22:30.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:22:30.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:22:30.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:22:30.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:22:30.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:22:30.266 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:22:30.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:22:30.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:22:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:22:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.390020 -999.00  +24.20  22.51     18   -0.90 1 1 1 1 1   888    0 24.54 -21.09 ----- 25.0 22.5 270.8 28.8 30.6 -25.5 29.8 -24.1 28.5 -29.0 29.6 -23.6
2025-11-12T11:22:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:22:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:22:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.390020
2025-11-12T11:22:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:22:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:22:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:22:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:22:30.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:22:30.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:22:10', tmtdew=30.53, humidity=13.01, cloud=0.0, wind=25.78, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:21:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:22:30.269 [DEBUG] [Thread-14857] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:22:30.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:22:30.365 [DEBUG] [Thread-14860] [transport.py] [_log()] starting thread (client mode): 0x149228c0
2025-11-12T11:22:30.365 [DEBUG] [Thread-14860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:22:30.379 [DEBUG] [Thread-14860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:22:30.379 [INFO] [Thread-14860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:22:30.387 [DEBUG] [Thread-14860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:22:30.387 [DEBUG] [Thread-14860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:22:30.387 [DEBUG] [Thread-14860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:22:30.387 [DEBUG] [Thread-14860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:22:30.387 [DEBUG] [Thread-14860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] client lang: <none>
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] server lang: <none>
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] kex follows: False
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:22:30.388 [DEBUG] [Thread-14860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:22:30.389 [DEBUG] [Thread-14860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:22:30.389 [DEBUG] [Thread-14860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:22:30.389 [DEBUG] [Thread-14860] [transport.py] [_log()] Compression: none
2025-11-12T11:22:30.389 [DEBUG] [Thread-14860] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:22:30.446 [DEBUG] [Thread-14860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:22:30.447 [DEBUG] [Thread-14860] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:22:30.447 [DEBUG] [Thread-14860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:22:30.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:22:30.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:22:30.502 [DEBUG] [Thread-14860] [transport.py] [_log()] userauth is OK
2025-11-12T11:22:30.503 [DEBUG] [Thread-14860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:22:30.503 [DEBUG] [Thread-14860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:22:30.503 [DEBUG] [Thread-14860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:22:30.503 [DEBUG] [Thread-14860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:22:30.526 [INFO] [Thread-14860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:22:30.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:22:30.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:22:31.400 [DEBUG] [Thread-14860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:22:31.400 [DEBUG] [Thread-14860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:22:31.447 [DEBUG] [Thread-14860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:22:31.448 [DEBUG] [Thread-14860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:22:31.456 [DEBUG] [Thread-14860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:22:31.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:22:31.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-11-12T11:22:31.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-11-12T11:22:31.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:22:31.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:22:31.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:22:31.494 [DEBUG] [Thread-14860] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:22:38.248 [DEBUG] [Thread-14862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:22:53.304 [DEBUG] [Thread-14863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:23:01.429 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:23:01.430 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:23:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:23:01.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:23:01.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-11-12T11:23:02.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 22, 42), 31.41, 12.04, 0.0, 20.52, 25.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:23:02.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:22:42
2025-11-12T11:23:02.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:23:02.447 [DEBUG] [Thread-14864] [transport.py] [_log()] starting thread (client mode): 0x14921ba0
2025-11-12T11:23:02.447 [DEBUG] [Thread-14864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:23:02.468 [DEBUG] [Thread-14864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:23:02.468 [INFO] [Thread-14864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:23:02.471 [DEBUG] [Thread-14864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:23:02.471 [DEBUG] [Thread-14864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:23:02.471 [DEBUG] [Thread-14864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:23:02.471 [DEBUG] [Thread-14864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] client lang: <none>
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] server lang: <none>
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] kex follows: False
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] Compression: none
2025-11-12T11:23:02.472 [DEBUG] [Thread-14864] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:23:02.489 [DEBUG] [Thread-14864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:23:02.489 [DEBUG] [Thread-14864] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:23:02.490 [DEBUG] [Thread-14864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:23:02.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:23:02.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:23:02.492 [DEBUG] [Thread-14864] [transport.py] [_log()] userauth is OK
2025-11-12T11:23:02.492 [DEBUG] [Thread-14864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:23:02.492 [DEBUG] [Thread-14864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:23:02.492 [DEBUG] [Thread-14864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:23:02.492 [DEBUG] [Thread-14864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:23:02.515 [INFO] [Thread-14864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:23:02.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:23:03.153 [DEBUG] [Thread-14864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:23:03.154 [DEBUG] [Thread-14864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:23:03.154 [DEBUG] [Thread-14864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:23:03.195 [DEBUG] [Thread-14864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:23:03.195 [DEBUG] [Thread-14864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:23:03.199 [DEBUG] [Thread-14864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:23:03.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:23:03.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:23:03.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:23:03.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:23:03.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:23:03.222 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:23:03.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:23:03.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:23:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:23:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.390714 -999.00  +24.60  17.36     18   -0.70 1 1 1 1 1   888    0 24.88 -21.77 ----- 16.8 17.4 278.6 23.4 30.9 -25.3 29.9 -24.6 28.8 -24.6 29.8 -23.6
2025-11-12T11:23:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:23:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:23:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.390714
2025-11-12T11:23:03.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:23:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:23:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:23:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:23:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:23:03.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:22:42', tmtdew=31.41, humidity=12.04, cloud=0.0, wind=20.52, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:22:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:23:03.225 [DEBUG] [Thread-14864] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:23:03.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:23:03.321 [DEBUG] [Thread-14867] [transport.py] [_log()] starting thread (client mode): 0x173e9600
2025-11-12T11:23:03.321 [DEBUG] [Thread-14867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:23:03.336 [DEBUG] [Thread-14867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:23:03.336 [INFO] [Thread-14867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:23:03.344 [DEBUG] [Thread-14867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:23:03.344 [DEBUG] [Thread-14867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:23:03.344 [DEBUG] [Thread-14867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:23:03.344 [DEBUG] [Thread-14867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:23:03.344 [DEBUG] [Thread-14867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:23:03.344 [DEBUG] [Thread-14867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:23:03.344 [DEBUG] [Thread-14867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:23:03.344 [DEBUG] [Thread-14867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] client lang: <none>
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] server lang: <none>
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] kex follows: False
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] Compression: none
2025-11-12T11:23:03.345 [DEBUG] [Thread-14867] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:23:03.405 [DEBUG] [Thread-14867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:23:03.405 [DEBUG] [Thread-14867] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:23:03.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:23:03.407 [DEBUG] [Thread-14867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:23:03.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:23:03.462 [DEBUG] [Thread-14867] [transport.py] [_log()] userauth is OK
2025-11-12T11:23:03.463 [DEBUG] [Thread-14867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:23:03.463 [DEBUG] [Thread-14867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:23:03.463 [DEBUG] [Thread-14867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:23:03.463 [DEBUG] [Thread-14867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:23:03.482 [INFO] [Thread-14867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:23:03.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:23:03.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:23:04.364 [DEBUG] [Thread-14867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:23:04.365 [DEBUG] [Thread-14867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:23:04.412 [DEBUG] [Thread-14867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:23:04.412 [DEBUG] [Thread-14867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:23:04.422 [DEBUG] [Thread-14867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:23:04.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:23:04.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-11-12T11:23:04.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-11-12T11:23:04.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:23:04.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:23:04.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:23:04.460 [DEBUG] [Thread-14867] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:23:08.343 [DEBUG] [Thread-14869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:23:23.393 [DEBUG] [Thread-14870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:23:29.450 [DEBUG] [Thread-14871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:23:34.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:23:34.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:23:34.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-11-12T11:23:35.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 23, 14), 31.19, 12.21, 0.0, 20.73, 25.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:23:35.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:23:14
2025-11-12T11:23:35.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:23:35.408 [DEBUG] [Thread-14872] [transport.py] [_log()] starting thread (client mode): 0x173bc7c0
2025-11-12T11:23:35.408 [DEBUG] [Thread-14872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:23:35.429 [DEBUG] [Thread-14872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:23:35.429 [INFO] [Thread-14872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] client lang: <none>
2025-11-12T11:23:35.432 [DEBUG] [Thread-14872] [transport.py] [_log()] server lang: <none>
2025-11-12T11:23:35.433 [DEBUG] [Thread-14872] [transport.py] [_log()] kex follows: False
2025-11-12T11:23:35.433 [DEBUG] [Thread-14872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:23:35.433 [DEBUG] [Thread-14872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:23:35.433 [DEBUG] [Thread-14872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:23:35.433 [DEBUG] [Thread-14872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:23:35.433 [DEBUG] [Thread-14872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:23:35.433 [DEBUG] [Thread-14872] [transport.py] [_log()] Compression: none
2025-11-12T11:23:35.433 [DEBUG] [Thread-14872] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:23:35.450 [DEBUG] [Thread-14872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:23:35.451 [DEBUG] [Thread-14872] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:23:35.452 [DEBUG] [Thread-14872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:23:35.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:23:35.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:23:35.454 [DEBUG] [Thread-14872] [transport.py] [_log()] userauth is OK
2025-11-12T11:23:35.454 [DEBUG] [Thread-14872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:23:35.454 [DEBUG] [Thread-14872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:23:35.454 [DEBUG] [Thread-14872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:23:35.454 [DEBUG] [Thread-14872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:23:35.472 [INFO] [Thread-14872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:23:35.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:23:36.084 [DEBUG] [Thread-14872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:23:36.084 [DEBUG] [Thread-14872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:23:36.084 [DEBUG] [Thread-14872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:23:36.124 [DEBUG] [Thread-14872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:23:36.125 [DEBUG] [Thread-14872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:23:36.127 [DEBUG] [Thread-14872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:23:36.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:23:36.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:23:36.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:23:36.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:23:36.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:23:36.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:23:36.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:23:36.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:23:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:23:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.391061 -999.00  +24.80  28.83     18   -0.40 1 1 1 1 1   888    0 24.70 -23.27 ----- 26.1 28.8 292.4 37.3 30.9 -27.3 29.9 -25.5 28.7 -26.7 29.9 -24.4
2025-11-12T11:23:36.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:23:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:23:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.391061
2025-11-12T11:23:36.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:23:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:23:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:23:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:23:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:23:36.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:23:14', tmtdew=31.19, humidity=12.21, cloud=0.0, wind=20.73, temperature=25.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:23:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:23:36.153 [DEBUG] [Thread-14872] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:23:36.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:23:36.258 [DEBUG] [Thread-14875] [transport.py] [_log()] starting thread (client mode): 0x173e88e0
2025-11-12T11:23:36.258 [DEBUG] [Thread-14875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:23:36.273 [DEBUG] [Thread-14875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:23:36.273 [INFO] [Thread-14875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:23:36.280 [DEBUG] [Thread-14875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] client lang: <none>
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] server lang: <none>
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] kex follows: False
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:23:36.281 [DEBUG] [Thread-14875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:23:36.282 [DEBUG] [Thread-14875] [transport.py] [_log()] Compression: none
2025-11-12T11:23:36.282 [DEBUG] [Thread-14875] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:23:36.339 [DEBUG] [Thread-14875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:23:36.339 [DEBUG] [Thread-14875] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:23:36.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:23:36.340 [DEBUG] [Thread-14875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:23:36.341 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:23:36.395 [DEBUG] [Thread-14875] [transport.py] [_log()] userauth is OK
2025-11-12T11:23:36.395 [DEBUG] [Thread-14875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:23:36.395 [DEBUG] [Thread-14875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:23:36.395 [DEBUG] [Thread-14875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:23:36.395 [DEBUG] [Thread-14875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:23:36.414 [INFO] [Thread-14875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:23:36.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:23:36.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:23:37.254 [DEBUG] [Thread-14875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:23:37.255 [DEBUG] [Thread-14875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:23:37.302 [DEBUG] [Thread-14875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:23:37.303 [DEBUG] [Thread-14875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:23:37.312 [DEBUG] [Thread-14875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:23:37.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:23:37.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-11-12T11:23:37.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-11-12T11:23:37.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:23:37.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:23:37.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:23:37.346 [DEBUG] [Thread-14875] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:23:38.424 [DEBUG] [Thread-14877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:23:53.475 [DEBUG] [Thread-14878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:24:01.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:24:01.571 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:24:07.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:24:07.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:24:07.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-11-12T11:24:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 23, 46), 31.12, 12.21, 0.0, 25.51, 25.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:24:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:23:46
2025-11-12T11:24:08.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:24:08.293 [DEBUG] [Thread-14879] [transport.py] [_log()] starting thread (client mode): 0x173bcee0
2025-11-12T11:24:08.293 [DEBUG] [Thread-14879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:24:08.314 [DEBUG] [Thread-14879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:24:08.314 [INFO] [Thread-14879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] client lang: <none>
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] server lang: <none>
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] kex follows: False
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] Compression: none
2025-11-12T11:24:08.317 [DEBUG] [Thread-14879] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:24:08.331 [DEBUG] [Thread-14879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:24:08.331 [DEBUG] [Thread-14879] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:24:08.332 [DEBUG] [Thread-14879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:24:08.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:24:08.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:24:08.333 [DEBUG] [Thread-14879] [transport.py] [_log()] userauth is OK
2025-11-12T11:24:08.334 [DEBUG] [Thread-14879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:24:08.334 [DEBUG] [Thread-14879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:24:08.334 [DEBUG] [Thread-14879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:24:08.334 [DEBUG] [Thread-14879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:24:08.352 [INFO] [Thread-14879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:24:08.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:24:08.514 [DEBUG] [Thread-14881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:24:08.975 [DEBUG] [Thread-14879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:24:08.975 [DEBUG] [Thread-14879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:24:08.976 [DEBUG] [Thread-14879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:24:09.017 [DEBUG] [Thread-14879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:24:09.017 [DEBUG] [Thread-14879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:24:09.020 [DEBUG] [Thread-14879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:24:09.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:24:09.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:24:09.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:24:09.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:24:09.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:24:09.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:24:09.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:24:09.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:24:09.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:24:09.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.391409 -999.00  +24.60  27.77     18   -0.60 1 1 1 1 1   888    0 24.77 -24.01 ----- 23.1 27.8 278.8 30.3 30.6 -28.3 29.9 -26.4 28.4 -28.6 29.9 -25.3
2025-11-12T11:24:09.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:24:09.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:24:09.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.391409
2025-11-12T11:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:24:09.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:24:09.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:23:46', tmtdew=31.12, humidity=12.21, cloud=0.0, wind=25.51, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:23:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:24:09.044 [DEBUG] [Thread-14879] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:24:09.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:24:09.141 [DEBUG] [Thread-14883] [transport.py] [_log()] starting thread (client mode): 0x1737d930
2025-11-12T11:24:09.141 [DEBUG] [Thread-14883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:24:09.156 [DEBUG] [Thread-14883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:24:09.156 [INFO] [Thread-14883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:24:09.163 [DEBUG] [Thread-14883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:24:09.163 [DEBUG] [Thread-14883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:24:09.163 [DEBUG] [Thread-14883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] client lang: <none>
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] server lang: <none>
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] kex follows: False
2025-11-12T11:24:09.164 [DEBUG] [Thread-14883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:24:09.165 [DEBUG] [Thread-14883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:24:09.165 [DEBUG] [Thread-14883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:24:09.165 [DEBUG] [Thread-14883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:24:09.165 [DEBUG] [Thread-14883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:24:09.165 [DEBUG] [Thread-14883] [transport.py] [_log()] Compression: none
2025-11-12T11:24:09.165 [DEBUG] [Thread-14883] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:24:09.223 [DEBUG] [Thread-14883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:24:09.224 [DEBUG] [Thread-14883] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:24:09.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:24:09.225 [DEBUG] [Thread-14883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:24:09.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:24:09.283 [DEBUG] [Thread-14883] [transport.py] [_log()] userauth is OK
2025-11-12T11:24:09.283 [DEBUG] [Thread-14883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:24:09.283 [DEBUG] [Thread-14883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:24:09.283 [DEBUG] [Thread-14883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:24:09.284 [DEBUG] [Thread-14883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:24:09.303 [INFO] [Thread-14883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:24:09.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:24:09.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:24:10.149 [DEBUG] [Thread-14883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:24:10.150 [DEBUG] [Thread-14883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:24:10.197 [DEBUG] [Thread-14883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:24:10.198 [DEBUG] [Thread-14883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:24:10.207 [DEBUG] [Thread-14883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:24:10.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:24:10.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:24:10.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-11-12T11:24:10.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:24:10.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:24:10.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:24:10.244 [DEBUG] [Thread-14883] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:24:23.551 [DEBUG] [Thread-14885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:24:29.489 [DEBUG] [Thread-14886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:24:38.599 [DEBUG] [Thread-14887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:24:40.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:24:40.266 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:24:40.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-11-12T11:24:40.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 24, 18), 31.02, 12.29, 0.0, 29.89, 25.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:24:40.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:24:18
2025-11-12T11:24:41.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:24:41.203 [DEBUG] [Thread-14888] [transport.py] [_log()] starting thread (client mode): 0x173bdc90
2025-11-12T11:24:41.203 [DEBUG] [Thread-14888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:24:41.222 [DEBUG] [Thread-14888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:24:41.222 [INFO] [Thread-14888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:24:41.225 [DEBUG] [Thread-14888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:24:41.225 [DEBUG] [Thread-14888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:24:41.225 [DEBUG] [Thread-14888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:24:41.225 [DEBUG] [Thread-14888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] client lang: <none>
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] server lang: <none>
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] kex follows: False
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] Compression: none
2025-11-12T11:24:41.226 [DEBUG] [Thread-14888] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:24:41.243 [DEBUG] [Thread-14888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:24:41.243 [DEBUG] [Thread-14888] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:24:41.243 [DEBUG] [Thread-14888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:24:41.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:24:41.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:24:41.244 [DEBUG] [Thread-14888] [transport.py] [_log()] userauth is OK
2025-11-12T11:24:41.244 [DEBUG] [Thread-14888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:24:41.244 [DEBUG] [Thread-14888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:24:41.244 [DEBUG] [Thread-14888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:24:41.244 [DEBUG] [Thread-14888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:24:41.253 [INFO] [Thread-14888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:24:41.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:24:41.851 [DEBUG] [Thread-14888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:24:41.851 [DEBUG] [Thread-14888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:24:41.851 [DEBUG] [Thread-14888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:24:41.892 [DEBUG] [Thread-14888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:24:41.892 [DEBUG] [Thread-14888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:24:41.894 [DEBUG] [Thread-14888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:24:41.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:24:41.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:24:41.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:24:41.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:24:41.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:24:41.915 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:24:41.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:24:41.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:24:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:24:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.391756 -999.00  +24.60  28.63     19   -0.40 1 1 1 1 1   888    0 24.87 -24.29 ----- 27.5 28.6 295.2 31.6 30.8 -26.3 29.9 -25.0 28.8 -26.7 29.8 -24.2
2025-11-12T11:24:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:24:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:24:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.391756
2025-11-12T11:24:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:24:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:24:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:24:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:24:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:24:41.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:24:18', tmtdew=31.02, humidity=12.29, cloud=0.0, wind=29.89, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:24:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:24:41.917 [DEBUG] [Thread-14888] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:24:41.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:24:42.003 [DEBUG] [Thread-14891] [transport.py] [_log()] starting thread (client mode): 0x173eb3a0
2025-11-12T11:24:42.003 [DEBUG] [Thread-14891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:24:42.018 [DEBUG] [Thread-14891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:24:42.018 [INFO] [Thread-14891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:24:42.025 [DEBUG] [Thread-14891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] client lang: <none>
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] server lang: <none>
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] kex follows: False
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] Compression: none
2025-11-12T11:24:42.026 [DEBUG] [Thread-14891] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:24:42.081 [DEBUG] [Thread-14891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:24:42.081 [DEBUG] [Thread-14891] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:24:42.081 [DEBUG] [Thread-14891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:24:42.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:24:42.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:24:42.138 [DEBUG] [Thread-14891] [transport.py] [_log()] userauth is OK
2025-11-12T11:24:42.138 [DEBUG] [Thread-14891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:24:42.138 [DEBUG] [Thread-14891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:24:42.138 [DEBUG] [Thread-14891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:24:42.138 [DEBUG] [Thread-14891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:24:42.154 [INFO] [Thread-14891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:24:42.154 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:24:42.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:24:43.003 [DEBUG] [Thread-14891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:24:43.004 [DEBUG] [Thread-14891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:24:43.052 [DEBUG] [Thread-14891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:24:43.052 [DEBUG] [Thread-14891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:24:43.060 [DEBUG] [Thread-14891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:24:43.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:24:43.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:24:43.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:24:43.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:24:43.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:24:43.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:24:43.091 [DEBUG] [Thread-14891] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:24:53.634 [DEBUG] [Thread-14893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:25:01.711 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:25:01.712 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:25:08.688 [DEBUG] [Thread-14894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:25:13.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:25:13.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:25:13.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-11-12T11:25:13.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 24, 49), 30.68, 12.91, 0.0, 26.36, 25.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:25:13.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:24:49
2025-11-12T11:25:13.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:25:14.059 [DEBUG] [Thread-14895] [transport.py] [_log()] starting thread (client mode): 0x173445b0
2025-11-12T11:25:14.060 [DEBUG] [Thread-14895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:25:14.078 [DEBUG] [Thread-14895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:25:14.078 [INFO] [Thread-14895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:25:14.081 [DEBUG] [Thread-14895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:25:14.081 [DEBUG] [Thread-14895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:25:14.081 [DEBUG] [Thread-14895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] client lang: <none>
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] server lang: <none>
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] kex follows: False
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] Compression: none
2025-11-12T11:25:14.082 [DEBUG] [Thread-14895] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:25:14.098 [DEBUG] [Thread-14895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:25:14.099 [DEBUG] [Thread-14895] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:25:14.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:25:14.100 [DEBUG] [Thread-14895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:25:14.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:25:14.102 [DEBUG] [Thread-14895] [transport.py] [_log()] userauth is OK
2025-11-12T11:25:14.102 [DEBUG] [Thread-14895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:25:14.102 [DEBUG] [Thread-14895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:25:14.102 [DEBUG] [Thread-14895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:25:14.102 [DEBUG] [Thread-14895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:25:14.130 [INFO] [Thread-14895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:25:14.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:25:14.712 [DEBUG] [Thread-14895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:25:14.712 [DEBUG] [Thread-14895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:25:14.712 [DEBUG] [Thread-14895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:25:14.752 [DEBUG] [Thread-14895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:25:14.753 [DEBUG] [Thread-14895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:25:14.756 [DEBUG] [Thread-14895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:25:14.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:25:14.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:25:14.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:25:14.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:25:14.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:25:14.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:25:14.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:25:14.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:25:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:25:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.392103 -999.00  +24.90  18.51     19   -0.20 1 1 1 1 1   888    0 24.58 -26.57 ----- 19.3 18.5 312.9 27.7 30.9 -24.7 29.9 -23.9 29.1 -22.9 29.9 -23.2
2025-11-12T11:25:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:25:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:25:14.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.392103
2025-11-12T11:25:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:25:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:25:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:25:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:25:14.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:25:14.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:24:49', tmtdew=30.68, humidity=12.91, cloud=0.0, wind=26.36, temperature=25.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:24:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:25:14.783 [DEBUG] [Thread-14895] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:25:14.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:25:14.879 [DEBUG] [Thread-14898] [transport.py] [_log()] starting thread (client mode): 0x173ebb20
2025-11-12T11:25:14.879 [DEBUG] [Thread-14898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:25:14.894 [DEBUG] [Thread-14898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:25:14.894 [INFO] [Thread-14898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:25:14.901 [DEBUG] [Thread-14898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:25:14.901 [DEBUG] [Thread-14898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:25:14.901 [DEBUG] [Thread-14898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] client lang: <none>
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] server lang: <none>
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] kex follows: False
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] Compression: none
2025-11-12T11:25:14.902 [DEBUG] [Thread-14898] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:25:14.958 [DEBUG] [Thread-14898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:25:14.959 [DEBUG] [Thread-14898] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:25:14.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:25:14.960 [DEBUG] [Thread-14898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:25:14.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:25:15.015 [DEBUG] [Thread-14898] [transport.py] [_log()] userauth is OK
2025-11-12T11:25:15.015 [DEBUG] [Thread-14898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:25:15.015 [DEBUG] [Thread-14898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:25:15.015 [DEBUG] [Thread-14898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:25:15.015 [DEBUG] [Thread-14898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:25:15.035 [INFO] [Thread-14898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:25:15.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:25:15.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:25:15.882 [DEBUG] [Thread-14898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:25:15.882 [DEBUG] [Thread-14898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:25:15.930 [DEBUG] [Thread-14898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:25:15.931 [DEBUG] [Thread-14898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:25:15.942 [DEBUG] [Thread-14898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:25:15.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:25:15.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:25:15.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-11-12T11:25:15.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:25:15.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:25:15.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:25:15.977 [DEBUG] [Thread-14898] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:25:23.719 [DEBUG] [Thread-14900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:25:29.541 [DEBUG] [Thread-14901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:25:38.763 [DEBUG] [Thread-14902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:25:45.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:25:45.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:25:45.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-11-12T11:25:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 25, 21), 30.78, 12.81, 0.0, 19.73, 25.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:25:46.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:25:21
2025-11-12T11:25:46.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:25:46.908 [DEBUG] [Thread-14903] [transport.py] [_log()] starting thread (client mode): 0x173bca00
2025-11-12T11:25:46.908 [DEBUG] [Thread-14903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:25:46.929 [DEBUG] [Thread-14903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:25:46.929 [INFO] [Thread-14903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] client lang: <none>
2025-11-12T11:25:46.932 [DEBUG] [Thread-14903] [transport.py] [_log()] server lang: <none>
2025-11-12T11:25:46.933 [DEBUG] [Thread-14903] [transport.py] [_log()] kex follows: False
2025-11-12T11:25:46.933 [DEBUG] [Thread-14903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:25:46.933 [DEBUG] [Thread-14903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:25:46.933 [DEBUG] [Thread-14903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:25:46.933 [DEBUG] [Thread-14903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:25:46.933 [DEBUG] [Thread-14903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:25:46.933 [DEBUG] [Thread-14903] [transport.py] [_log()] Compression: none
2025-11-12T11:25:46.933 [DEBUG] [Thread-14903] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:25:46.958 [DEBUG] [Thread-14903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:25:46.959 [DEBUG] [Thread-14903] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:25:46.960 [DEBUG] [Thread-14903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:25:46.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:25:46.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:25:46.962 [DEBUG] [Thread-14903] [transport.py] [_log()] userauth is OK
2025-11-12T11:25:46.962 [DEBUG] [Thread-14903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:25:46.962 [DEBUG] [Thread-14903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:25:46.962 [DEBUG] [Thread-14903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:25:46.962 [DEBUG] [Thread-14903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:25:46.999 [INFO] [Thread-14903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:25:47.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:25:47.618 [DEBUG] [Thread-14903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:25:47.618 [DEBUG] [Thread-14903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:25:47.619 [DEBUG] [Thread-14903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:25:47.660 [DEBUG] [Thread-14903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:25:47.660 [DEBUG] [Thread-14903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:25:47.663 [DEBUG] [Thread-14903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:25:47.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:25:47.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:25:47.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:25:47.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:25:47.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:25:47.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:25:47.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:25:47.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:25:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:25:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.392450 -999.00  +24.90  21.51     18   -0.50 1 1 1 1 1   888    0 24.58 -25.29 ----- 21.5 21.5 301.4 27.4 31.1 -25.2 30.1 -24.6 29.1 -23.8 30.1 -23.6
2025-11-12T11:25:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:25:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:25:47.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.392450
2025-11-12T11:25:47.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:25:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:25:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:25:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:25:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:25:47.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:25:21', tmtdew=30.78, humidity=12.81, cloud=0.0, wind=19.73, temperature=25.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:25:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:25:47.692 [DEBUG] [Thread-14903] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:25:47.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:25:47.786 [DEBUG] [Thread-14906] [transport.py] [_log()] starting thread (client mode): 0x1737e4d0
2025-11-12T11:25:47.786 [DEBUG] [Thread-14906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:25:47.800 [DEBUG] [Thread-14906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:25:47.800 [INFO] [Thread-14906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] client lang: <none>
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] server lang: <none>
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] kex follows: False
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:25:47.808 [DEBUG] [Thread-14906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:25:47.809 [DEBUG] [Thread-14906] [transport.py] [_log()] Compression: none
2025-11-12T11:25:47.809 [DEBUG] [Thread-14906] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:25:47.866 [DEBUG] [Thread-14906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:25:47.866 [DEBUG] [Thread-14906] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:25:47.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:25:47.867 [DEBUG] [Thread-14906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:25:47.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:25:47.922 [DEBUG] [Thread-14906] [transport.py] [_log()] userauth is OK
2025-11-12T11:25:47.922 [DEBUG] [Thread-14906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:25:47.923 [DEBUG] [Thread-14906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:25:47.923 [DEBUG] [Thread-14906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:25:47.923 [DEBUG] [Thread-14906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:25:47.941 [INFO] [Thread-14906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:25:47.941 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:25:47.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:25:48.778 [DEBUG] [Thread-14906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:25:48.779 [DEBUG] [Thread-14906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:25:48.826 [DEBUG] [Thread-14906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:25:48.827 [DEBUG] [Thread-14906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:25:48.836 [DEBUG] [Thread-14906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:25:48.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:25:48.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-11-12T11:25:48.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-11-12T11:25:48.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:25:48.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:25:48.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:25:48.873 [DEBUG] [Thread-14906] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:25:53.801 [DEBUG] [Thread-14908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:26:01.853 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:26:01.854 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:26:08.854 [DEBUG] [Thread-14909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:26:18.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:26:18.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:26:18.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-11-12T11:26:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 25, 53), 30.9, 12.43, 0.0, 28.57, 25.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:26:19.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:25:53
2025-11-12T11:26:19.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:26:19.810 [DEBUG] [Thread-14910] [transport.py] [_log()] starting thread (client mode): 0x173e99c0
2025-11-12T11:26:19.810 [DEBUG] [Thread-14910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:26:19.825 [DEBUG] [Thread-14910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:26:19.825 [INFO] [Thread-14910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] client lang: <none>
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] server lang: <none>
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] kex follows: False
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] Compression: none
2025-11-12T11:26:19.828 [DEBUG] [Thread-14910] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:26:19.845 [DEBUG] [Thread-14910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:26:19.845 [DEBUG] [Thread-14910] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:26:19.846 [DEBUG] [Thread-14910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:26:19.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:26:19.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:26:19.848 [DEBUG] [Thread-14910] [transport.py] [_log()] userauth is OK
2025-11-12T11:26:19.848 [DEBUG] [Thread-14910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:26:19.848 [DEBUG] [Thread-14910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:26:19.848 [DEBUG] [Thread-14910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:26:19.848 [DEBUG] [Thread-14910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:26:19.865 [INFO] [Thread-14910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:26:19.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:26:20.400 [DEBUG] [Thread-14910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:26:20.401 [DEBUG] [Thread-14910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:26:20.401 [DEBUG] [Thread-14910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:26:20.442 [DEBUG] [Thread-14910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:26:20.442 [DEBUG] [Thread-14910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:26:20.445 [DEBUG] [Thread-14910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:26:20.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:26:20.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:26:20.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:26:20.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:26:20.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:26:20.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:26:20.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:26:20.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:26:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:26:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.392798 -999.00  +25.00  27.75     18   -0.50 1 1 1 1 1   888    0 24.79 -24.30 ----- 29.5 27.8 296.0 31.2 31.1 -25.0 30.2 -23.7 29.2 -23.3 30.2 -23.3
2025-11-12T11:26:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:26:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:26:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.392798
2025-11-12T11:26:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:26:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:26:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:26:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:26:20.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:26:20.472 [DEBUG] [Thread-14910] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:26:20.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:25:53', tmtdew=30.9, humidity=12.43, cloud=0.0, wind=28.57, temperature=25.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:25:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:26:20.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:26:20.568 [DEBUG] [Thread-14913] [transport.py] [_log()] starting thread (client mode): 0x1737dd80
2025-11-12T11:26:20.568 [DEBUG] [Thread-14913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:26:20.586 [DEBUG] [Thread-14913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:26:20.587 [INFO] [Thread-14913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] client lang: <none>
2025-11-12T11:26:20.594 [DEBUG] [Thread-14913] [transport.py] [_log()] server lang: <none>
2025-11-12T11:26:20.595 [DEBUG] [Thread-14913] [transport.py] [_log()] kex follows: False
2025-11-12T11:26:20.595 [DEBUG] [Thread-14913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:26:20.595 [DEBUG] [Thread-14913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:26:20.595 [DEBUG] [Thread-14913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:26:20.595 [DEBUG] [Thread-14913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:26:20.595 [DEBUG] [Thread-14913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:26:20.595 [DEBUG] [Thread-14913] [transport.py] [_log()] Compression: none
2025-11-12T11:26:20.595 [DEBUG] [Thread-14913] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:26:20.651 [DEBUG] [Thread-14913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:26:20.652 [DEBUG] [Thread-14913] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:26:20.652 [DEBUG] [Thread-14913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:26:20.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:26:20.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:26:20.707 [DEBUG] [Thread-14913] [transport.py] [_log()] userauth is OK
2025-11-12T11:26:20.707 [DEBUG] [Thread-14913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:26:20.707 [DEBUG] [Thread-14913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:26:20.707 [DEBUG] [Thread-14913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:26:20.707 [DEBUG] [Thread-14913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:26:20.726 [INFO] [Thread-14913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:26:20.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:26:20.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:26:21.571 [DEBUG] [Thread-14913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:26:21.572 [DEBUG] [Thread-14913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:26:21.620 [DEBUG] [Thread-14913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:26:21.620 [DEBUG] [Thread-14913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:26:21.630 [DEBUG] [Thread-14913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:26:21.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:26:21.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-11-12T11:26:21.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-11-12T11:26:21.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:26:21.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:26:21.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:26:21.667 [DEBUG] [Thread-14913] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:26:23.890 [DEBUG] [Thread-14915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:26:29.575 [DEBUG] [Thread-14916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:26:38.943 [DEBUG] [Thread-14917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:26:51.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:26:51.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:26:51.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-11-12T11:26:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 26, 25), 31.12, 12.28, 0.0, 27.54, 25.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:26:52.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:26:25
2025-11-12T11:26:52.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:26:52.603 [DEBUG] [Thread-14918] [transport.py] [_log()] starting thread (client mode): 0x173e90f0
2025-11-12T11:26:52.604 [DEBUG] [Thread-14918] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:26:52.625 [DEBUG] [Thread-14918] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:26:52.626 [INFO] [Thread-14918] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:26:52.628 [DEBUG] [Thread-14918] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:26:52.628 [DEBUG] [Thread-14918] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:26:52.628 [DEBUG] [Thread-14918] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:26:52.628 [DEBUG] [Thread-14918] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:26:52.628 [DEBUG] [Thread-14918] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] client lang: <none>
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] server lang: <none>
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] kex follows: False
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] Compression: none
2025-11-12T11:26:52.629 [DEBUG] [Thread-14918] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:26:52.647 [DEBUG] [Thread-14918] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:26:52.647 [DEBUG] [Thread-14918] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:26:52.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:26:52.648 [DEBUG] [Thread-14918] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:26:52.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:26:52.651 [DEBUG] [Thread-14918] [transport.py] [_log()] userauth is OK
2025-11-12T11:26:52.651 [DEBUG] [Thread-14918] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:26:52.651 [DEBUG] [Thread-14918] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:26:52.651 [DEBUG] [Thread-14918] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:26:52.651 [DEBUG] [Thread-14918] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:26:52.678 [INFO] [Thread-14918] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:26:52.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:26:53.312 [DEBUG] [Thread-14918] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:26:53.313 [DEBUG] [Thread-14918] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:26:53.313 [DEBUG] [Thread-14918] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:26:53.354 [DEBUG] [Thread-14918] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:26:53.354 [DEBUG] [Thread-14918] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:26:53.357 [DEBUG] [Thread-14918] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:26:53.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:26:53.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:26:53.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:26:53.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:26:53.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:26:53.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:26:53.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:26:53.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:26:53.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:26:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.393492 -999.00  +26.20  24.01     17   -0.10 1 1 1 1 1   888    0 25.15 -19.69 ----- 21.1 24.0 280.6 32.9 31.4 -24.6 30.5 -24.0 29.6 -24.5 30.5 -23.1
2025-11-12T11:26:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:26:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:26:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.393492
2025-11-12T11:26:53.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:26:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:26:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:26:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:26:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:26:53.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:26:25', tmtdew=31.12, humidity=12.28, cloud=0.0, wind=27.54, temperature=25.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:26:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:26:53.385 [DEBUG] [Thread-14918] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:26:53.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:26:53.492 [DEBUG] [Thread-14921] [transport.py] [_log()] starting thread (client mode): 0x173bfa00
2025-11-12T11:26:53.492 [DEBUG] [Thread-14921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:26:53.506 [DEBUG] [Thread-14921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:26:53.506 [INFO] [Thread-14921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:26:53.514 [DEBUG] [Thread-14921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:26:53.514 [DEBUG] [Thread-14921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:26:53.514 [DEBUG] [Thread-14921] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] client lang: <none>
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] server lang: <none>
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] kex follows: False
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:26:53.515 [DEBUG] [Thread-14921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:26:53.516 [DEBUG] [Thread-14921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:26:53.516 [DEBUG] [Thread-14921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:26:53.516 [DEBUG] [Thread-14921] [transport.py] [_log()] Compression: none
2025-11-12T11:26:53.516 [DEBUG] [Thread-14921] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:26:53.571 [DEBUG] [Thread-14921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:26:53.571 [DEBUG] [Thread-14921] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:26:53.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:26:53.572 [DEBUG] [Thread-14921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:26:53.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:26:53.627 [DEBUG] [Thread-14921] [transport.py] [_log()] userauth is OK
2025-11-12T11:26:53.627 [DEBUG] [Thread-14921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:26:53.627 [DEBUG] [Thread-14921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:26:53.627 [DEBUG] [Thread-14921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:26:53.628 [DEBUG] [Thread-14921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:26:53.646 [INFO] [Thread-14921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:26:53.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:26:53.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:26:53.972 [DEBUG] [Thread-14923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:26:54.531 [DEBUG] [Thread-14921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:26:54.531 [DEBUG] [Thread-14921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:26:54.578 [DEBUG] [Thread-14921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:26:54.578 [DEBUG] [Thread-14921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:26:54.587 [DEBUG] [Thread-14921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:26:54.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:26:54.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-11-12T11:26:54.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-11-12T11:26:54.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:26:54.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:26:54.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:26:54.622 [DEBUG] [Thread-14921] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:27:01.995 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:27:01.996 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:27:09.022 [DEBUG] [Thread-14924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:27:24.058 [DEBUG] [Thread-14925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:27:24.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:27:24.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:27:24.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-11-12T11:27:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 26, 57), 31.67, 12.06, 0.0, 33.06, 25.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:27:25.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:26:57
2025-11-12T11:27:25.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:27:25.556 [DEBUG] [Thread-14926] [transport.py] [_log()] starting thread (client mode): 0x14980730
2025-11-12T11:27:25.556 [DEBUG] [Thread-14926] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:27:25.575 [DEBUG] [Thread-14926] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:27:25.575 [INFO] [Thread-14926] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] client lang: <none>
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] server lang: <none>
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] kex follows: False
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] Compression: none
2025-11-12T11:27:25.578 [DEBUG] [Thread-14926] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:27:25.588 [DEBUG] [Thread-14926] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:27:25.588 [DEBUG] [Thread-14926] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:27:25.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:27:25.589 [DEBUG] [Thread-14926] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:27:25.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:27:25.593 [DEBUG] [Thread-14926] [transport.py] [_log()] userauth is OK
2025-11-12T11:27:25.594 [DEBUG] [Thread-14926] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:27:25.594 [DEBUG] [Thread-14926] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:27:25.594 [DEBUG] [Thread-14926] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:27:25.594 [DEBUG] [Thread-14926] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:27:25.612 [INFO] [Thread-14926] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:27:25.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:27:26.156 [DEBUG] [Thread-14926] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:27:26.157 [DEBUG] [Thread-14926] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:27:26.157 [DEBUG] [Thread-14926] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:27:26.197 [DEBUG] [Thread-14926] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:27:26.198 [DEBUG] [Thread-14926] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:27:26.201 [DEBUG] [Thread-14926] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:27:26.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:27:26.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:27:26.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:27:26.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:27:26.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:27:26.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:27:26.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:27:26.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:27:26.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:27:26.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.393839 -999.00  +26.30  23.29     17   -0.10 1 1 1 1 1   888    0 25.05 -14.39 ----- 25.9 23.3 297.6 28.4 31.5 -25.9 30.6 -24.1 29.7 -26.7 30.6 -24.2
2025-11-12T11:27:26.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:27:26.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:27:26.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.393839
2025-11-12T11:27:26.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:27:26.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:27:26.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:27:26.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:27:26.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:27:26.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:26:57', tmtdew=31.67, humidity=12.06, cloud=0.0, wind=33.06, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:27:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:27:26.230 [DEBUG] [Thread-14926] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:27:26.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:27:26.325 [DEBUG] [Thread-14929] [transport.py] [_log()] starting thread (client mode): 0x149823e0
2025-11-12T11:27:26.326 [DEBUG] [Thread-14929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:27:26.344 [DEBUG] [Thread-14929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:27:26.344 [INFO] [Thread-14929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] client lang: <none>
2025-11-12T11:27:26.352 [DEBUG] [Thread-14929] [transport.py] [_log()] server lang: <none>
2025-11-12T11:27:26.353 [DEBUG] [Thread-14929] [transport.py] [_log()] kex follows: False
2025-11-12T11:27:26.353 [DEBUG] [Thread-14929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:27:26.353 [DEBUG] [Thread-14929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:27:26.353 [DEBUG] [Thread-14929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:27:26.353 [DEBUG] [Thread-14929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:27:26.353 [DEBUG] [Thread-14929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:27:26.353 [DEBUG] [Thread-14929] [transport.py] [_log()] Compression: none
2025-11-12T11:27:26.353 [DEBUG] [Thread-14929] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:27:26.414 [DEBUG] [Thread-14929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:27:26.414 [DEBUG] [Thread-14929] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:27:26.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:27:26.416 [DEBUG] [Thread-14929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:27:26.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:27:26.472 [DEBUG] [Thread-14929] [transport.py] [_log()] userauth is OK
2025-11-12T11:27:26.472 [DEBUG] [Thread-14929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:27:26.472 [DEBUG] [Thread-14929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:27:26.472 [DEBUG] [Thread-14929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:27:26.472 [DEBUG] [Thread-14929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:27:26.491 [INFO] [Thread-14929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:27:26.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:27:26.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:27:27.375 [DEBUG] [Thread-14929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:27:27.376 [DEBUG] [Thread-14929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:27:27.423 [DEBUG] [Thread-14929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:27:27.424 [DEBUG] [Thread-14929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:27:27.433 [DEBUG] [Thread-14929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:27:27.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:27:27.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-11-12T11:27:27.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-11-12T11:27:27.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:27:27.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:27:27.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:27:27.471 [DEBUG] [Thread-14929] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:27:29.609 [DEBUG] [Thread-14931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:27:39.094 [DEBUG] [Thread-14932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:27:54.141 [DEBUG] [Thread-14933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:27:57.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:27:57.492 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:27:57.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:27:58.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 27, 29), 31.6, 12.11, 0.0, 30.08, 25.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:27:58.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:27:29
2025-11-12T11:27:58.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:27:58.407 [DEBUG] [Thread-14934] [transport.py] [_log()] starting thread (client mode): 0x1737ed70
2025-11-12T11:27:58.407 [DEBUG] [Thread-14934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:27:58.427 [DEBUG] [Thread-14934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:27:58.427 [INFO] [Thread-14934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:27:58.430 [DEBUG] [Thread-14934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:27:58.430 [DEBUG] [Thread-14934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:27:58.430 [DEBUG] [Thread-14934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:27:58.430 [DEBUG] [Thread-14934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:27:58.430 [DEBUG] [Thread-14934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:27:58.430 [DEBUG] [Thread-14934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:27:58.430 [DEBUG] [Thread-14934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:27:58.430 [DEBUG] [Thread-14934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] client lang: <none>
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] server lang: <none>
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] kex follows: False
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] Compression: none
2025-11-12T11:27:58.431 [DEBUG] [Thread-14934] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:27:58.449 [DEBUG] [Thread-14934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:27:58.450 [DEBUG] [Thread-14934] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:27:58.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:27:58.451 [DEBUG] [Thread-14934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:27:58.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:27:58.453 [DEBUG] [Thread-14934] [transport.py] [_log()] userauth is OK
2025-11-12T11:27:58.453 [DEBUG] [Thread-14934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:27:58.453 [DEBUG] [Thread-14934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:27:58.453 [DEBUG] [Thread-14934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:27:58.453 [DEBUG] [Thread-14934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:27:58.478 [INFO] [Thread-14934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:27:58.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:27:59.108 [DEBUG] [Thread-14934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:27:59.108 [DEBUG] [Thread-14934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:27:59.109 [DEBUG] [Thread-14934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:27:59.150 [DEBUG] [Thread-14934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:27:59.150 [DEBUG] [Thread-14934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:27:59.153 [DEBUG] [Thread-14934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:27:59.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:27:59.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:27:59.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:27:59.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:27:59.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:27:59.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:27:59.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:27:59.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:27:59.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:27:59.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.394186 -999.00  +26.20  28.12     17   -0.30 1 1 1 1 1   888    0 25.12 -9.88 ----- 25.9 28.1 282.6 33.3 31.7 -24.3 30.8 -23.7 29.9 -24.5 30.8 -22.9
2025-11-12T11:27:59.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:27:59.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:27:59.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.394186
2025-11-12T11:27:59.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:27:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:27:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:27:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:27:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:27:59.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:27:29', tmtdew=31.6, humidity=12.11, cloud=0.0, wind=30.08, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:27:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:27:59.177 [DEBUG] [Thread-14934] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:27:59.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:27:59.275 [DEBUG] [Thread-14937] [transport.py] [_log()] starting thread (client mode): 0x19ddbd00
2025-11-12T11:27:59.275 [DEBUG] [Thread-14937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:27:59.289 [DEBUG] [Thread-14937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:27:59.290 [INFO] [Thread-14937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:27:59.297 [DEBUG] [Thread-14937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:27:59.297 [DEBUG] [Thread-14937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:27:59.297 [DEBUG] [Thread-14937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] client lang: <none>
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] server lang: <none>
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] kex follows: False
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:27:59.298 [DEBUG] [Thread-14937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:27:59.299 [DEBUG] [Thread-14937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:27:59.299 [DEBUG] [Thread-14937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:27:59.299 [DEBUG] [Thread-14937] [transport.py] [_log()] Compression: none
2025-11-12T11:27:59.299 [DEBUG] [Thread-14937] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:27:59.355 [DEBUG] [Thread-14937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:27:59.356 [DEBUG] [Thread-14937] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:27:59.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:27:59.357 [DEBUG] [Thread-14937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:27:59.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:27:59.411 [DEBUG] [Thread-14937] [transport.py] [_log()] userauth is OK
2025-11-12T11:27:59.411 [DEBUG] [Thread-14937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:27:59.411 [DEBUG] [Thread-14937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:27:59.412 [DEBUG] [Thread-14937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:27:59.412 [DEBUG] [Thread-14937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:27:59.434 [INFO] [Thread-14937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:27:59.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:27:59.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:28:00.281 [DEBUG] [Thread-14937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:28:00.282 [DEBUG] [Thread-14937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:28:00.329 [DEBUG] [Thread-14937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:28:00.330 [DEBUG] [Thread-14937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:28:00.343 [DEBUG] [Thread-14937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:28:00.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:28:00.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-11-12T11:28:00.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-11-12T11:28:00.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:28:00.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:28:00.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:28:00.382 [DEBUG] [Thread-14937] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:28:02.137 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:28:02.138 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:28:09.173 [DEBUG] [Thread-14939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:28:24.236 [DEBUG] [Thread-14940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:28:29.646 [DEBUG] [Thread-14941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:28:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:28:30.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:28:30.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-11-12T11:28:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 28, 1), 31.68, 12.06, 0.0, 28.53, 25.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:28:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:28:01
2025-11-12T11:28:31.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:28:31.347 [DEBUG] [Thread-14942] [transport.py] [_log()] starting thread (client mode): 0x149208b0
2025-11-12T11:28:31.347 [DEBUG] [Thread-14942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:28:31.367 [DEBUG] [Thread-14942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:28:31.367 [INFO] [Thread-14942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:28:31.370 [DEBUG] [Thread-14942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:28:31.370 [DEBUG] [Thread-14942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:28:31.370 [DEBUG] [Thread-14942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:28:31.370 [DEBUG] [Thread-14942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:28:31.370 [DEBUG] [Thread-14942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:28:31.370 [DEBUG] [Thread-14942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:28:31.370 [DEBUG] [Thread-14942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:28:31.370 [DEBUG] [Thread-14942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] client lang: <none>
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] server lang: <none>
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] kex follows: False
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] Compression: none
2025-11-12T11:28:31.371 [DEBUG] [Thread-14942] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:28:31.379 [DEBUG] [Thread-14942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:28:31.379 [DEBUG] [Thread-14942] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:28:31.379 [DEBUG] [Thread-14942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:28:31.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:28:31.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:28:31.424 [DEBUG] [Thread-14942] [transport.py] [_log()] userauth is OK
2025-11-12T11:28:31.424 [DEBUG] [Thread-14942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:28:31.424 [DEBUG] [Thread-14942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:28:31.424 [DEBUG] [Thread-14942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:28:31.424 [DEBUG] [Thread-14942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:28:31.442 [INFO] [Thread-14942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:28:31.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:28:32.000 [DEBUG] [Thread-14942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:28:32.001 [DEBUG] [Thread-14942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:28:32.001 [DEBUG] [Thread-14942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:28:32.041 [DEBUG] [Thread-14942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:28:32.041 [DEBUG] [Thread-14942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:28:32.043 [DEBUG] [Thread-14942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:28:32.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:28:32.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:28:32.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:28:32.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:28:32.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:28:32.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:28:32.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:28:32.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:28:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:28:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.394534 -999.00  +26.10  29.37     17   -0.30 1 1 1 1 1   888    0 25.33 -7.07 ----- 29.0 29.4 297.8 37.1 31.8 -25.4 30.8 -25.0 29.9 -26.4 30.9 -23.8
2025-11-12T11:28:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:28:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:28:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.394534
2025-11-12T11:28:32.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:28:32.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:28:32.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:28:32.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:28:32.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:28:32.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:28:01', tmtdew=31.68, humidity=12.06, cloud=0.0, wind=28.53, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:28:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:28:32.065 [DEBUG] [Thread-14942] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:28:32.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:28:32.152 [DEBUG] [Thread-14945] [transport.py] [_log()] starting thread (client mode): 0x17399510
2025-11-12T11:28:32.152 [DEBUG] [Thread-14945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:28:32.167 [DEBUG] [Thread-14945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:28:32.167 [INFO] [Thread-14945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] client lang: <none>
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] server lang: <none>
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] kex follows: False
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] Compression: none
2025-11-12T11:28:32.175 [DEBUG] [Thread-14945] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:28:32.234 [DEBUG] [Thread-14945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:28:32.234 [DEBUG] [Thread-14945] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:28:32.234 [DEBUG] [Thread-14945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:28:32.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:28:32.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:28:32.290 [DEBUG] [Thread-14945] [transport.py] [_log()] userauth is OK
2025-11-12T11:28:32.290 [DEBUG] [Thread-14945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:28:32.290 [DEBUG] [Thread-14945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:28:32.290 [DEBUG] [Thread-14945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:28:32.290 [DEBUG] [Thread-14945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:28:32.308 [INFO] [Thread-14945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:28:32.308 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:28:32.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:28:33.149 [DEBUG] [Thread-14945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:28:33.149 [DEBUG] [Thread-14945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:28:33.197 [DEBUG] [Thread-14945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:28:33.197 [DEBUG] [Thread-14945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:28:33.205 [DEBUG] [Thread-14945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:28:33.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:28:33.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-11-12T11:28:33.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:28:33.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:28:33.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:28:33.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:28:33.237 [DEBUG] [Thread-14945] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:28:39.270 [DEBUG] [Thread-14947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:28:54.323 [DEBUG] [Thread-14948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:29:02.277 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:29:02.278 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:29:03.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:29:03.235 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:29:03.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-11-12T11:29:03.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 28, 33), 32.29, 11.55, 0.0, 32.67, 26.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:29:03.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:28:33
2025-11-12T11:29:04.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:29:04.152 [DEBUG] [Thread-14949] [transport.py] [_log()] starting thread (client mode): 0x1737f070
2025-11-12T11:29:04.152 [DEBUG] [Thread-14949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:29:04.173 [DEBUG] [Thread-14949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:29:04.173 [INFO] [Thread-14949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] client lang: <none>
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] server lang: <none>
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] kex follows: False
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:29:04.176 [DEBUG] [Thread-14949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:29:04.177 [DEBUG] [Thread-14949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:29:04.177 [DEBUG] [Thread-14949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:29:04.177 [DEBUG] [Thread-14949] [transport.py] [_log()] Compression: none
2025-11-12T11:29:04.177 [DEBUG] [Thread-14949] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:29:04.193 [DEBUG] [Thread-14949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:29:04.194 [DEBUG] [Thread-14949] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:29:04.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:29:04.195 [DEBUG] [Thread-14949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:29:04.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:29:04.197 [DEBUG] [Thread-14949] [transport.py] [_log()] userauth is OK
2025-11-12T11:29:04.197 [DEBUG] [Thread-14949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:29:04.197 [DEBUG] [Thread-14949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:29:04.197 [DEBUG] [Thread-14949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:29:04.197 [DEBUG] [Thread-14949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:29:04.225 [INFO] [Thread-14949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:29:04.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:29:04.883 [DEBUG] [Thread-14949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:29:04.883 [DEBUG] [Thread-14949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:29:04.884 [DEBUG] [Thread-14949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:29:04.925 [DEBUG] [Thread-14949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:29:04.925 [DEBUG] [Thread-14949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:29:04.928 [DEBUG] [Thread-14949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:29:04.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:29:04.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:29:04.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:29:04.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:29:04.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:29:04.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:29:04.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:29:04.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:29:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:29:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.394881 -999.00  +25.50  28.93     17   -0.60 1 1 1 1 1   888    0 25.78 -4.69 ----- 27.1 28.9 313.0 38.3 31.8 -26.6 30.7 -25.4 30.0 -24.8 30.9 -24.4
2025-11-12T11:29:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:29:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:29:04.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.394881
2025-11-12T11:29:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:29:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:29:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:29:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:29:04.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:29:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:28:33', tmtdew=32.29, humidity=11.55, cloud=0.0, wind=32.67, temperature=26.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:28:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:29:04.958 [DEBUG] [Thread-14949] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:29:05.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:29:05.053 [DEBUG] [Thread-14952] [transport.py] [_log()] starting thread (client mode): 0x173e8280
2025-11-12T11:29:05.053 [DEBUG] [Thread-14952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:29:05.073 [DEBUG] [Thread-14952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:29:05.074 [INFO] [Thread-14952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:29:05.081 [DEBUG] [Thread-14952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:29:05.081 [DEBUG] [Thread-14952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:29:05.081 [DEBUG] [Thread-14952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:29:05.081 [DEBUG] [Thread-14952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] client lang: <none>
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] server lang: <none>
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] kex follows: False
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] Compression: none
2025-11-12T11:29:05.082 [DEBUG] [Thread-14952] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:29:05.143 [DEBUG] [Thread-14952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:29:05.143 [DEBUG] [Thread-14952] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:29:05.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:29:05.145 [DEBUG] [Thread-14952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:29:05.145 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:29:05.203 [DEBUG] [Thread-14952] [transport.py] [_log()] userauth is OK
2025-11-12T11:29:05.204 [DEBUG] [Thread-14952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:29:05.204 [DEBUG] [Thread-14952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:29:05.204 [DEBUG] [Thread-14952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:29:05.204 [DEBUG] [Thread-14952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:29:05.224 [INFO] [Thread-14952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:29:05.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:29:05.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:29:06.104 [DEBUG] [Thread-14952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:29:06.104 [DEBUG] [Thread-14952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:29:06.152 [DEBUG] [Thread-14952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:29:06.152 [DEBUG] [Thread-14952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:29:06.160 [DEBUG] [Thread-14952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:29:06.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:29:06.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-11-12T11:29:06.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-11-12T11:29:06.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:29:06.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:29:06.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:29:06.194 [DEBUG] [Thread-14952] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:29:09.357 [DEBUG] [Thread-14954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:29:24.407 [DEBUG] [Thread-14955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:29:29.679 [DEBUG] [Thread-14956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:29:36.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:29:36.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:29:36.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-11-12T11:29:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 29, 5), 32.09, 11.41, 0.0, 23.82, 26.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:29:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:29:05
2025-11-12T11:29:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:29:37.141 [DEBUG] [Thread-14957] [transport.py] [_log()] starting thread (client mode): 0x19ddbcd0
2025-11-12T11:29:37.142 [DEBUG] [Thread-14957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:29:37.152 [DEBUG] [Thread-14957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:29:37.153 [INFO] [Thread-14957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:29:37.153 [DEBUG] [Thread-14957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:29:37.153 [DEBUG] [Thread-14957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:29:37.153 [DEBUG] [Thread-14957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:29:37.153 [DEBUG] [Thread-14957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:29:37.153 [DEBUG] [Thread-14957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:29:37.153 [DEBUG] [Thread-14957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:29:37.153 [DEBUG] [Thread-14957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] client lang: <none>
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] server lang: <none>
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] kex follows: False
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] Compression: none
2025-11-12T11:29:37.154 [DEBUG] [Thread-14957] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:29:37.162 [DEBUG] [Thread-14957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:29:37.162 [DEBUG] [Thread-14957] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:29:37.162 [DEBUG] [Thread-14957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:29:37.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:29:37.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:29:37.164 [DEBUG] [Thread-14957] [transport.py] [_log()] userauth is OK
2025-11-12T11:29:37.164 [DEBUG] [Thread-14957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:29:37.164 [DEBUG] [Thread-14957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:29:37.164 [DEBUG] [Thread-14957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:29:37.164 [DEBUG] [Thread-14957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:29:37.176 [INFO] [Thread-14957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:29:37.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:29:37.727 [DEBUG] [Thread-14957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:29:37.727 [DEBUG] [Thread-14957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:29:37.728 [DEBUG] [Thread-14957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:29:37.767 [DEBUG] [Thread-14957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:29:37.768 [DEBUG] [Thread-14957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:29:37.772 [DEBUG] [Thread-14957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:29:37.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:29:37.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:29:37.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:29:37.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:29:37.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:29:37.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:29:37.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:29:37.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:29:37.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:29:37.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.395228 -999.00  +25.30  17.78     18   -0.40 1 1 1 1 1   888    0 25.66 -5.00 ----- 14.8 17.8 311.8 28.7 31.9 -25.4 30.9 -24.5 30.1 -23.1 30.9 -23.6
2025-11-12T11:29:37.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:29:37.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:29:37.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.395228
2025-11-12T11:29:37.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:29:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:29:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:29:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:29:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:29:37.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:29:05', tmtdew=32.09, humidity=11.41, cloud=0.0, wind=23.82, temperature=26.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:29:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:29:37.799 [DEBUG] [Thread-14957] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:29:37.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:29:37.891 [DEBUG] [Thread-14960] [transport.py] [_log()] starting thread (client mode): 0x1493d630
2025-11-12T11:29:37.891 [DEBUG] [Thread-14960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:29:37.907 [DEBUG] [Thread-14960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:29:37.907 [INFO] [Thread-14960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:29:37.915 [DEBUG] [Thread-14960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:29:37.915 [DEBUG] [Thread-14960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:29:37.915 [DEBUG] [Thread-14960] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] client lang: <none>
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] server lang: <none>
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] kex follows: False
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:29:37.916 [DEBUG] [Thread-14960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:29:37.917 [DEBUG] [Thread-14960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:29:37.917 [DEBUG] [Thread-14960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:29:37.917 [DEBUG] [Thread-14960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:29:37.917 [DEBUG] [Thread-14960] [transport.py] [_log()] Compression: none
2025-11-12T11:29:37.917 [DEBUG] [Thread-14960] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:29:37.973 [DEBUG] [Thread-14960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:29:37.974 [DEBUG] [Thread-14960] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:29:37.974 [DEBUG] [Thread-14960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:29:37.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:29:37.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:29:38.029 [DEBUG] [Thread-14960] [transport.py] [_log()] userauth is OK
2025-11-12T11:29:38.029 [DEBUG] [Thread-14960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:29:38.029 [DEBUG] [Thread-14960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:29:38.029 [DEBUG] [Thread-14960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:29:38.029 [DEBUG] [Thread-14960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:29:38.043 [INFO] [Thread-14960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:29:38.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:29:38.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:29:38.908 [DEBUG] [Thread-14960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:29:38.908 [DEBUG] [Thread-14960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:29:38.956 [DEBUG] [Thread-14960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:29:38.956 [DEBUG] [Thread-14960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:29:38.964 [DEBUG] [Thread-14960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:29:38.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:29:38.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')
2025-11-12T11:29:38.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-11-12T11:29:38.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:29:38.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:29:38.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:29:38.996 [DEBUG] [Thread-14960] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:29:39.443 [DEBUG] [Thread-14962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:29:54.483 [DEBUG] [Thread-14963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:30:02.419 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:30:02.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:30:08.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:30:08.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:30:08.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-11-12T11:30:09.522 [DEBUG] [Thread-14964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:30:09.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 29, 37), 31.89, 11.51, 0.0, 30.35, 26.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:30:09.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:29:37
2025-11-12T11:30:09.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:30:09.896 [DEBUG] [Thread-14965] [transport.py] [_log()] starting thread (client mode): 0x173e9a80
2025-11-12T11:30:09.896 [DEBUG] [Thread-14965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:30:09.916 [DEBUG] [Thread-14965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:30:09.916 [INFO] [Thread-14965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:30:09.919 [DEBUG] [Thread-14965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] client lang: <none>
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] server lang: <none>
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] kex follows: False
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:30:09.920 [DEBUG] [Thread-14965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:30:09.921 [DEBUG] [Thread-14965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:30:09.921 [DEBUG] [Thread-14965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:30:09.921 [DEBUG] [Thread-14965] [transport.py] [_log()] Compression: none
2025-11-12T11:30:09.921 [DEBUG] [Thread-14965] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:30:09.938 [DEBUG] [Thread-14965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:30:09.938 [DEBUG] [Thread-14965] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:30:09.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:30:09.939 [DEBUG] [Thread-14965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:30:09.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:30:09.941 [DEBUG] [Thread-14965] [transport.py] [_log()] userauth is OK
2025-11-12T11:30:09.941 [DEBUG] [Thread-14965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:30:09.941 [DEBUG] [Thread-14965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:30:09.941 [DEBUG] [Thread-14965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:30:09.941 [DEBUG] [Thread-14965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:30:09.959 [INFO] [Thread-14965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:30:09.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:30:10.626 [DEBUG] [Thread-14965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:30:10.626 [DEBUG] [Thread-14965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:30:10.626 [DEBUG] [Thread-14965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:30:10.667 [DEBUG] [Thread-14965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:30:10.667 [DEBUG] [Thread-14965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:30:10.669 [DEBUG] [Thread-14965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:30:10.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:30:10.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:30:10.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:30:10.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:30:10.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:30:10.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:30:10.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:30:10.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.395575 -999.00  +25.50  36.05     18   -0.30 1 1 2 1 1   888    0 25.96 -4.65 ----- 31.5 36.0 267.6 38.3 31.9 -26.4 30.9 -25.7 29.7 -35.5 31.1 -24.3
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.395575
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:30:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:29:37', tmtdew=31.89, humidity=11.51, cloud=0.0, wind=30.35, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:29:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:30:10.688 [DEBUG] [Thread-14965] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:30:10.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:30:10.775 [DEBUG] [Thread-14968] [transport.py] [_log()] starting thread (client mode): 0x19ddb550
2025-11-12T11:30:10.775 [DEBUG] [Thread-14968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:30:10.790 [DEBUG] [Thread-14968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:30:10.790 [INFO] [Thread-14968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:30:10.797 [DEBUG] [Thread-14968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] client lang: <none>
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] server lang: <none>
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] kex follows: False
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] Compression: none
2025-11-12T11:30:10.798 [DEBUG] [Thread-14968] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:30:10.856 [DEBUG] [Thread-14968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:30:10.857 [DEBUG] [Thread-14968] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:30:10.857 [DEBUG] [Thread-14968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:30:10.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:30:10.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:30:10.913 [DEBUG] [Thread-14968] [transport.py] [_log()] userauth is OK
2025-11-12T11:30:10.914 [DEBUG] [Thread-14968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:30:10.914 [DEBUG] [Thread-14968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:30:10.914 [DEBUG] [Thread-14968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:30:10.914 [DEBUG] [Thread-14968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:30:10.927 [INFO] [Thread-14968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:30:10.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:30:10.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:30:11.765 [DEBUG] [Thread-14968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:30:11.765 [DEBUG] [Thread-14968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:30:11.813 [DEBUG] [Thread-14968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:30:11.813 [DEBUG] [Thread-14968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:30:11.821 [DEBUG] [Thread-14968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:30:11.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:30:11.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-11-12T11:30:11.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-11-12T11:30:11.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:30:11.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:30:11.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:30:11.853 [DEBUG] [Thread-14968] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:30:24.557 [DEBUG] [Thread-14970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:30:29.706 [DEBUG] [Thread-14971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:30:39.606 [DEBUG] [Thread-14972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:30:41.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:30:41.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:30:41.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:30:42.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 30, 9), 31.58, 11.73, 0.0, 27.53, 25.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:30:42.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:30:09
2025-11-12T11:30:42.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:30:42.830 [DEBUG] [Thread-14973] [transport.py] [_log()] starting thread (client mode): 0x19dda080
2025-11-12T11:30:42.830 [DEBUG] [Thread-14973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:30:42.850 [DEBUG] [Thread-14973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:30:42.850 [INFO] [Thread-14973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:30:42.851 [DEBUG] [Thread-14973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] client lang: <none>
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] server lang: <none>
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] kex follows: False
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] Compression: none
2025-11-12T11:30:42.852 [DEBUG] [Thread-14973] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:30:42.862 [DEBUG] [Thread-14973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:30:42.862 [DEBUG] [Thread-14973] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:30:42.863 [DEBUG] [Thread-14973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:30:42.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:30:42.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:30:42.863 [DEBUG] [Thread-14973] [transport.py] [_log()] userauth is OK
2025-11-12T11:30:42.863 [DEBUG] [Thread-14973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:30:42.863 [DEBUG] [Thread-14973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:30:42.863 [DEBUG] [Thread-14973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:30:42.863 [DEBUG] [Thread-14973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:30:42.872 [INFO] [Thread-14973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:30:42.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:30:43.491 [DEBUG] [Thread-14973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:30:43.491 [DEBUG] [Thread-14973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:30:43.491 [DEBUG] [Thread-14973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:30:43.532 [DEBUG] [Thread-14973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:30:43.532 [DEBUG] [Thread-14973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:30:43.534 [DEBUG] [Thread-14973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:30:43.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:30:43.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:30:43.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:30:43.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:30:43.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:30:43.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:30:43.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.396270 -999.00  +25.00  29.40     18   -0.90 1 1 1 1 1   888    0 25.93 -0.34 ----- 30.4 29.4 282.6 38.9 31.4 -28.6 30.6 -26.6 29.3 -27.4 30.6 -25.7
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.396270
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:30:43.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:30:09', tmtdew=31.58, humidity=11.73, cloud=0.0, wind=27.53, temperature=25.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:30:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:30:43.556 [DEBUG] [Thread-14973] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:30:43.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:30:43.641 [DEBUG] [Thread-14976] [transport.py] [_log()] starting thread (client mode): 0x19dd9090
2025-11-12T11:30:43.641 [DEBUG] [Thread-14976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:30:43.656 [DEBUG] [Thread-14976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:30:43.656 [INFO] [Thread-14976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:30:43.663 [DEBUG] [Thread-14976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] client lang: <none>
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] server lang: <none>
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] kex follows: False
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] Compression: none
2025-11-12T11:30:43.664 [DEBUG] [Thread-14976] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:30:43.719 [DEBUG] [Thread-14976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:30:43.719 [DEBUG] [Thread-14976] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:30:43.719 [DEBUG] [Thread-14976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:30:43.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:30:43.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:30:43.776 [DEBUG] [Thread-14976] [transport.py] [_log()] userauth is OK
2025-11-12T11:30:43.777 [DEBUG] [Thread-14976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:30:43.777 [DEBUG] [Thread-14976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:30:43.777 [DEBUG] [Thread-14976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:30:43.777 [DEBUG] [Thread-14976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:30:43.792 [INFO] [Thread-14976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:30:43.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:30:43.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:30:44.649 [DEBUG] [Thread-14976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:30:44.650 [DEBUG] [Thread-14976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:30:44.698 [DEBUG] [Thread-14976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:30:44.698 [DEBUG] [Thread-14976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:30:44.707 [DEBUG] [Thread-14976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:30:44.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:30:44.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-11-12T11:30:44.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-11-12T11:30:44.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:30:44.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:30:44.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:30:44.745 [DEBUG] [Thread-14976] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:30:54.642 [DEBUG] [Thread-14978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:31:02.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:31:02.563 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:31:09.686 [DEBUG] [Thread-14979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:31:14.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:31:14.745 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:31:14.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-11-12T11:31:15.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 30, 42), 31.24, 12.48, 0.0, 28.14, 25.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:31:15.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:30:42
2025-11-12T11:31:15.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:31:15.723 [DEBUG] [Thread-14980] [transport.py] [_log()] starting thread (client mode): 0x17363df0
2025-11-12T11:31:15.723 [DEBUG] [Thread-14980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:31:15.745 [DEBUG] [Thread-14980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:31:15.745 [INFO] [Thread-14980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] client lang: <none>
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] server lang: <none>
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] kex follows: False
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] Compression: none
2025-11-12T11:31:15.749 [DEBUG] [Thread-14980] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:31:15.762 [DEBUG] [Thread-14980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:31:15.762 [DEBUG] [Thread-14980] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:31:15.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:31:15.763 [DEBUG] [Thread-14980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:31:15.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:31:15.764 [DEBUG] [Thread-14980] [transport.py] [_log()] userauth is OK
2025-11-12T11:31:15.764 [DEBUG] [Thread-14980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:31:15.764 [DEBUG] [Thread-14980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:31:15.764 [DEBUG] [Thread-14980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:31:15.764 [DEBUG] [Thread-14980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:31:15.779 [INFO] [Thread-14980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:31:15.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:31:16.360 [DEBUG] [Thread-14980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:31:16.361 [DEBUG] [Thread-14980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:31:16.361 [DEBUG] [Thread-14980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:31:16.401 [DEBUG] [Thread-14980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:31:16.402 [DEBUG] [Thread-14980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:31:16.405 [DEBUG] [Thread-14980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:31:16.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:31:16.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:31:16.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:31:16.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:31:16.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:31:16.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:31:16.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:31:16.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:31:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:31:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.396617 -999.00  +24.70  22.32     18   -1.00 1 1 1 1 1   888    0 25.21 1.21 ----- 19.7 22.3 269.8 29.1 31.2 -28.0 30.5 -25.8 29.1 -30.0 30.4 -25.7
2025-11-12T11:31:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:31:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:31:16.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.396617
2025-11-12T11:31:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:31:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:31:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:31:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:31:16.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:31:16.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:30:42', tmtdew=31.24, humidity=12.48, cloud=0.0, wind=28.14, temperature=25.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:31:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:31:16.433 [DEBUG] [Thread-14980] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:31:16.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:31:16.534 [DEBUG] [Thread-14983] [transport.py] [_log()] starting thread (client mode): 0x17363700
2025-11-12T11:31:16.534 [DEBUG] [Thread-14983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:31:16.550 [DEBUG] [Thread-14983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:31:16.551 [INFO] [Thread-14983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:31:16.558 [DEBUG] [Thread-14983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:31:16.558 [DEBUG] [Thread-14983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:31:16.558 [DEBUG] [Thread-14983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] client lang: <none>
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] server lang: <none>
2025-11-12T11:31:16.559 [DEBUG] [Thread-14983] [transport.py] [_log()] kex follows: False
2025-11-12T11:31:16.560 [DEBUG] [Thread-14983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:31:16.560 [DEBUG] [Thread-14983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:31:16.560 [DEBUG] [Thread-14983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:31:16.560 [DEBUG] [Thread-14983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:31:16.560 [DEBUG] [Thread-14983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:31:16.560 [DEBUG] [Thread-14983] [transport.py] [_log()] Compression: none
2025-11-12T11:31:16.560 [DEBUG] [Thread-14983] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:31:16.617 [DEBUG] [Thread-14983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:31:16.618 [DEBUG] [Thread-14983] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:31:16.619 [DEBUG] [Thread-14983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:31:16.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:31:16.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:31:16.673 [DEBUG] [Thread-14983] [transport.py] [_log()] userauth is OK
2025-11-12T11:31:16.673 [DEBUG] [Thread-14983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:31:16.673 [DEBUG] [Thread-14983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:31:16.674 [DEBUG] [Thread-14983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:31:16.674 [DEBUG] [Thread-14983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:31:16.693 [INFO] [Thread-14983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:31:16.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:31:16.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:31:17.564 [DEBUG] [Thread-14983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:31:17.565 [DEBUG] [Thread-14983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:31:17.612 [DEBUG] [Thread-14983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:31:17.613 [DEBUG] [Thread-14983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:31:17.622 [DEBUG] [Thread-14983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:31:17.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:31:17.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:31:17.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:31:17.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:31:17.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:31:17.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:31:17.658 [DEBUG] [Thread-14983] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:31:24.716 [DEBUG] [Thread-14985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:31:29.762 [DEBUG] [Thread-14986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:31:39.771 [DEBUG] [Thread-14987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:31:47.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:31:47.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:31:47.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-11-12T11:31:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 31, 14), 31.27, 12.44, 0.0, 27.84, 25.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:31:48.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:31:14
2025-11-12T11:31:48.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:31:48.659 [DEBUG] [Thread-14988] [transport.py] [_log()] starting thread (client mode): 0x173e8280
2025-11-12T11:31:48.659 [DEBUG] [Thread-14988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:31:48.674 [DEBUG] [Thread-14988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:31:48.674 [INFO] [Thread-14988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] client lang: <none>
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] server lang: <none>
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] kex follows: False
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] Compression: none
2025-11-12T11:31:48.677 [DEBUG] [Thread-14988] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:31:48.692 [DEBUG] [Thread-14988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:31:48.692 [DEBUG] [Thread-14988] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:31:48.692 [DEBUG] [Thread-14988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:31:48.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:31:48.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:31:48.693 [DEBUG] [Thread-14988] [transport.py] [_log()] userauth is OK
2025-11-12T11:31:48.693 [DEBUG] [Thread-14988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:31:48.693 [DEBUG] [Thread-14988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:31:48.693 [DEBUG] [Thread-14988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:31:48.693 [DEBUG] [Thread-14988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:31:48.703 [INFO] [Thread-14988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:31:48.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:31:49.332 [DEBUG] [Thread-14988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:31:49.332 [DEBUG] [Thread-14988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:31:49.332 [DEBUG] [Thread-14988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:31:49.373 [DEBUG] [Thread-14988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:31:49.373 [DEBUG] [Thread-14988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:31:49.374 [DEBUG] [Thread-14988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:31:49.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:31:49.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:31:49.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:31:49.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:31:49.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:31:49.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:31:49.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:31:49.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:31:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:31:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.396964 -999.00  +24.90  19.53     19   +0.10 1 1 1 1 1   888    0 25.21 0.35 ----- 24.4 19.5 280.0 35.0 31.3 -25.6 30.5 -24.9 29.4 -25.2 30.4 -23.8
2025-11-12T11:31:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:31:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:31:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.396964
2025-11-12T11:31:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:31:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:31:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:31:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:31:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:31:49.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:31:14', tmtdew=31.27, humidity=12.44, cloud=0.0, wind=27.84, temperature=25.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:31:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:31:49.385 [DEBUG] [Thread-14988] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:31:49.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:31:49.469 [DEBUG] [Thread-14991] [transport.py] [_log()] starting thread (client mode): 0x1493d1b0
2025-11-12T11:31:49.469 [DEBUG] [Thread-14991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:31:49.485 [DEBUG] [Thread-14991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:31:49.485 [INFO] [Thread-14991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] client lang: <none>
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] server lang: <none>
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] kex follows: False
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] Compression: none
2025-11-12T11:31:49.493 [DEBUG] [Thread-14991] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:31:49.554 [DEBUG] [Thread-14991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:31:49.555 [DEBUG] [Thread-14991] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:31:49.555 [DEBUG] [Thread-14991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:31:49.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:31:49.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:31:49.613 [DEBUG] [Thread-14991] [transport.py] [_log()] userauth is OK
2025-11-12T11:31:49.613 [DEBUG] [Thread-14991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:31:49.613 [DEBUG] [Thread-14991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:31:49.613 [DEBUG] [Thread-14991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:31:49.613 [DEBUG] [Thread-14991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:31:49.633 [INFO] [Thread-14991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:31:49.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:31:49.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:31:50.505 [DEBUG] [Thread-14991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:31:50.505 [DEBUG] [Thread-14991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:31:50.553 [DEBUG] [Thread-14991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:31:50.553 [DEBUG] [Thread-14991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:31:50.562 [DEBUG] [Thread-14991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:31:50.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:31:50.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:31:50.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:31:50.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:31:50.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:31:50.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:31:50.596 [DEBUG] [Thread-14991] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:31:54.805 [DEBUG] [Thread-14993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:32:02.705 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:32:02.706 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:32:09.870 [DEBUG] [Thread-14994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:32:20.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:32:20.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:32:20.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-11-12T11:32:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 32, 18), 30.76, 12.78, 0.0, 26.38, 25.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:32:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:32:18
2025-11-12T11:32:21.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:32:21.563 [DEBUG] [Thread-14995] [transport.py] [_log()] starting thread (client mode): 0x19dd9090
2025-11-12T11:32:21.563 [DEBUG] [Thread-14995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:32:21.575 [DEBUG] [Thread-14995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:32:21.576 [INFO] [Thread-14995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] client lang: <none>
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] server lang: <none>
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] kex follows: False
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] Compression: none
2025-11-12T11:32:21.579 [DEBUG] [Thread-14995] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:32:21.597 [DEBUG] [Thread-14995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:32:21.597 [DEBUG] [Thread-14995] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:32:21.598 [DEBUG] [Thread-14995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:32:21.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:32:21.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:32:21.645 [DEBUG] [Thread-14995] [transport.py] [_log()] userauth is OK
2025-11-12T11:32:21.645 [DEBUG] [Thread-14995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:32:21.645 [DEBUG] [Thread-14995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:32:21.646 [DEBUG] [Thread-14995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:32:21.646 [DEBUG] [Thread-14995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:32:21.671 [INFO] [Thread-14995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:32:21.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:32:22.269 [DEBUG] [Thread-14995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:32:22.269 [DEBUG] [Thread-14995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:32:22.269 [DEBUG] [Thread-14995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:32:22.310 [DEBUG] [Thread-14995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:32:22.310 [DEBUG] [Thread-14995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:32:22.312 [DEBUG] [Thread-14995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:32:22.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:32:22.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:32:22.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:32:22.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:32:22.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:32:22.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:32:22.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:32:22.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:32:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:32:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.396964 -999.00  +24.90  19.53     19   +0.10 1 1 1 1 1   888    0 25.21 0.35 ----- 24.4 19.5 280.0 35.0 31.3 -25.6 30.5 -24.9 29.4 -25.2 30.4 -23.8
2025-11-12T11:32:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:32:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:32:22.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.396964
2025-11-12T11:32:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:32:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:32:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:32:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:32:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:32:22.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:32:18', tmtdew=30.76, humidity=12.78, cloud=0.0, wind=26.38, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:31:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:32:22.325 [DEBUG] [Thread-14995] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:32:22.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:32:22.410 [DEBUG] [Thread-14998] [transport.py] [_log()] starting thread (client mode): 0x14922710
2025-11-12T11:32:22.410 [DEBUG] [Thread-14998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:32:22.425 [DEBUG] [Thread-14998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:32:22.425 [INFO] [Thread-14998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] client lang: <none>
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] server lang: <none>
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] kex follows: False
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] Compression: none
2025-11-12T11:32:22.433 [DEBUG] [Thread-14998] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:32:22.491 [DEBUG] [Thread-14998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:32:22.491 [DEBUG] [Thread-14998] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:32:22.491 [DEBUG] [Thread-14998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:32:22.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:32:22.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:32:22.548 [DEBUG] [Thread-14998] [transport.py] [_log()] userauth is OK
2025-11-12T11:32:22.548 [DEBUG] [Thread-14998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:32:22.548 [DEBUG] [Thread-14998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:32:22.548 [DEBUG] [Thread-14998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:32:22.548 [DEBUG] [Thread-14998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:32:22.565 [INFO] [Thread-14998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:32:22.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:32:22.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:32:23.412 [DEBUG] [Thread-14998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:32:23.412 [DEBUG] [Thread-14998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:32:23.460 [DEBUG] [Thread-14998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:32:23.460 [DEBUG] [Thread-14998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:32:23.468 [DEBUG] [Thread-14998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:32:23.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:32:23.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-11-12T11:32:23.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-11-12T11:32:23.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:32:23.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:32:23.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:32:23.499 [DEBUG] [Thread-14998] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:32:24.902 [DEBUG] [Thread-15000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:32:29.794 [DEBUG] [Thread-15001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:32:39.954 [DEBUG] [Thread-15002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:32:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:32:53.502 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:32:53.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-11-12T11:32:54.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 32, 50), 30.27, 13.04, 0.0, 26.78, 26.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:32:54.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:32:50
2025-11-12T11:32:54.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:32:54.418 [DEBUG] [Thread-15003] [transport.py] [_log()] starting thread (client mode): 0x17362b00
2025-11-12T11:32:54.419 [DEBUG] [Thread-15003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:32:54.441 [DEBUG] [Thread-15003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:32:54.441 [INFO] [Thread-15003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:32:54.446 [DEBUG] [Thread-15003] [transport.py] [_log()] client lang: <none>
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] server lang: <none>
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] kex follows: False
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] Compression: none
2025-11-12T11:32:54.447 [DEBUG] [Thread-15003] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:32:54.466 [DEBUG] [Thread-15003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:32:54.467 [DEBUG] [Thread-15003] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:32:54.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:32:54.468 [DEBUG] [Thread-15003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:32:54.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:32:54.470 [DEBUG] [Thread-15003] [transport.py] [_log()] userauth is OK
2025-11-12T11:32:54.470 [DEBUG] [Thread-15003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:32:54.470 [DEBUG] [Thread-15003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:32:54.470 [DEBUG] [Thread-15003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:32:54.470 [DEBUG] [Thread-15003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:32:54.490 [INFO] [Thread-15003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:32:54.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:32:54.993 [DEBUG] [Thread-15005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:32:55.281 [DEBUG] [Thread-15003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:32:55.281 [DEBUG] [Thread-15003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:32:55.282 [DEBUG] [Thread-15003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:32:55.322 [DEBUG] [Thread-15003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:32:55.322 [DEBUG] [Thread-15003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:32:55.326 [DEBUG] [Thread-15003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:32:55.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:32:55.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:32:55.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:32:55.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:32:55.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:32:55.348 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:32:55.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:32:55.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:32:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:32:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.397311 -999.00  +24.90  34.96     19   +0.30 1 1 2 1 1   888    0 25.77 -3.64 ----- 32.2 35.0 274.0 38.3 31.2 -26.9 30.4 -25.6 29.0 -27.0 30.3 -24.5
2025-11-12T11:32:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:32:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:32:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.397311
2025-11-12T11:32:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:32:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:32:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:32:55.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:32:55.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:32:55.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:32:50', tmtdew=30.27, humidity=13.04, cloud=0.0, wind=26.78, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:32:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:32:55.351 [DEBUG] [Thread-15003] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:32:55.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:32:55.447 [DEBUG] [Thread-15007] [transport.py] [_log()] starting thread (client mode): 0x14923790
2025-11-12T11:32:55.447 [DEBUG] [Thread-15007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:32:55.463 [DEBUG] [Thread-15007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:32:55.463 [INFO] [Thread-15007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:32:55.474 [DEBUG] [Thread-15007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:32:55.474 [DEBUG] [Thread-15007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:32:55.474 [DEBUG] [Thread-15007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:32:55.474 [DEBUG] [Thread-15007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] client lang: <none>
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] server lang: <none>
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] kex follows: False
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] Compression: none
2025-11-12T11:32:55.475 [DEBUG] [Thread-15007] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:32:55.534 [DEBUG] [Thread-15007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:32:55.534 [DEBUG] [Thread-15007] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:32:55.534 [DEBUG] [Thread-15007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:32:55.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:32:55.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:32:55.592 [DEBUG] [Thread-15007] [transport.py] [_log()] userauth is OK
2025-11-12T11:32:55.592 [DEBUG] [Thread-15007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:32:55.592 [DEBUG] [Thread-15007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:32:55.592 [DEBUG] [Thread-15007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:32:55.592 [DEBUG] [Thread-15007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:32:55.615 [INFO] [Thread-15007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:32:55.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:32:55.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:32:56.496 [DEBUG] [Thread-15007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:32:56.497 [DEBUG] [Thread-15007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:32:56.545 [DEBUG] [Thread-15007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:32:56.545 [DEBUG] [Thread-15007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:32:56.555 [DEBUG] [Thread-15007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:32:56.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:32:56.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-11-12T11:32:56.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-11-12T11:32:56.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:32:56.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:32:56.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:32:56.594 [DEBUG] [Thread-15007] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:33:02.846 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:33:02.846 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:33:10.030 [DEBUG] [Thread-15009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:33:25.075 [DEBUG] [Thread-15010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:33:26.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:33:26.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:33:26.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-11-12T11:33:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 33, 22), 30.43, 12.94, 0.0, 27.56, 26.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:33:27.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:33:22
2025-11-12T11:33:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:33:27.500 [DEBUG] [Thread-15011] [transport.py] [_log()] starting thread (client mode): 0x1493c1f0
2025-11-12T11:33:27.500 [DEBUG] [Thread-15011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:33:27.520 [DEBUG] [Thread-15011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:33:27.520 [INFO] [Thread-15011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] client lang: <none>
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] server lang: <none>
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] kex follows: False
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] Compression: none
2025-11-12T11:33:27.524 [DEBUG] [Thread-15011] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:33:27.544 [DEBUG] [Thread-15011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:33:27.544 [DEBUG] [Thread-15011] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:33:27.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:33:27.546 [DEBUG] [Thread-15011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:33:27.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:33:27.548 [DEBUG] [Thread-15011] [transport.py] [_log()] userauth is OK
2025-11-12T11:33:27.548 [DEBUG] [Thread-15011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:33:27.548 [DEBUG] [Thread-15011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:33:27.548 [DEBUG] [Thread-15011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:33:27.548 [DEBUG] [Thread-15011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:33:27.571 [INFO] [Thread-15011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:33:27.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:33:28.227 [DEBUG] [Thread-15011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:33:28.228 [DEBUG] [Thread-15011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:33:28.228 [DEBUG] [Thread-15011] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:33:28.268 [DEBUG] [Thread-15011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:33:28.268 [DEBUG] [Thread-15011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:33:28.271 [DEBUG] [Thread-15011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:33:28.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:33:28.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:33:28.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:33:28.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:33:28.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:33:28.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:33:28.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:33:28.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:33:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:33:28.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.397658 -999.00  +24.70  26.26     20   +0.20 1 1 1 1 1   888    0 25.10 -9.55 ----- 29.2 26.3 280.4 37.5 31.1 -26.5 30.3 -25.4 29.0 -27.8 30.2 -24.4
2025-11-12T11:33:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:33:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:33:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.397658
2025-11-12T11:33:28.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:33:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:33:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:33:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:33:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:33:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:33:22', tmtdew=30.43, humidity=12.94, cloud=0.0, wind=27.56, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:32:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:33:28.292 [DEBUG] [Thread-15011] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:33:28.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:33:28.391 [DEBUG] [Thread-15014] [transport.py] [_log()] starting thread (client mode): 0x1493ebf0
2025-11-12T11:33:28.391 [DEBUG] [Thread-15014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:33:28.406 [DEBUG] [Thread-15014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:33:28.406 [INFO] [Thread-15014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:33:28.413 [DEBUG] [Thread-15014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:33:28.414 [DEBUG] [Thread-15014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:33:28.414 [DEBUG] [Thread-15014] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:33:28.414 [DEBUG] [Thread-15014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:33:28.414 [DEBUG] [Thread-15014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:33:28.414 [DEBUG] [Thread-15014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:33:28.414 [DEBUG] [Thread-15014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:33:28.414 [DEBUG] [Thread-15014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:33:28.414 [DEBUG] [Thread-15014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] client lang: <none>
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] server lang: <none>
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] kex follows: False
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:33:28.415 [DEBUG] [Thread-15014] [transport.py] [_log()] Compression: none
2025-11-12T11:33:28.416 [DEBUG] [Thread-15014] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:33:28.472 [DEBUG] [Thread-15014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:33:28.472 [DEBUG] [Thread-15014] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:33:28.473 [DEBUG] [Thread-15014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:33:28.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:33:28.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:33:28.532 [DEBUG] [Thread-15014] [transport.py] [_log()] userauth is OK
2025-11-12T11:33:28.532 [DEBUG] [Thread-15014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:33:28.532 [DEBUG] [Thread-15014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:33:28.532 [DEBUG] [Thread-15014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:33:28.532 [DEBUG] [Thread-15014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:33:28.551 [INFO] [Thread-15014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:33:28.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:33:28.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:33:29.424 [DEBUG] [Thread-15014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:33:29.425 [DEBUG] [Thread-15014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:33:29.474 [DEBUG] [Thread-15014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:33:29.474 [DEBUG] [Thread-15014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:33:29.482 [DEBUG] [Thread-15014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:33:29.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:33:29.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-11-12T11:33:29.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-11-12T11:33:29.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:33:29.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:33:29.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:33:29.517 [DEBUG] [Thread-15014] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:33:29.826 [DEBUG] [Thread-15016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:33:40.112 [DEBUG] [Thread-15017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:33:55.148 [DEBUG] [Thread-15018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:33:59.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:33:59.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:33:59.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-11-12T11:34:00.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 33, 54), 30.8, 12.97, 0.0, 27.35, 25.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:34:00.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:33:54
2025-11-12T11:34:00.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:34:00.458 [DEBUG] [Thread-15019] [transport.py] [_log()] starting thread (client mode): 0x17360c70
2025-11-12T11:34:00.458 [DEBUG] [Thread-15019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:34:00.477 [DEBUG] [Thread-15019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:34:00.477 [INFO] [Thread-15019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:34:00.480 [DEBUG] [Thread-15019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:34:00.480 [DEBUG] [Thread-15019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:34:00.480 [DEBUG] [Thread-15019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:34:00.480 [DEBUG] [Thread-15019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:34:00.480 [DEBUG] [Thread-15019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] client lang: <none>
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] server lang: <none>
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] kex follows: False
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] Compression: none
2025-11-12T11:34:00.481 [DEBUG] [Thread-15019] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:34:00.498 [DEBUG] [Thread-15019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:34:00.498 [DEBUG] [Thread-15019] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:34:00.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:34:00.499 [DEBUG] [Thread-15019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:34:00.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:34:00.502 [DEBUG] [Thread-15019] [transport.py] [_log()] userauth is OK
2025-11-12T11:34:00.502 [DEBUG] [Thread-15019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:34:00.502 [DEBUG] [Thread-15019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:34:00.502 [DEBUG] [Thread-15019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:34:00.502 [DEBUG] [Thread-15019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:34:00.530 [INFO] [Thread-15019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:34:00.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:34:01.328 [DEBUG] [Thread-15019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:34:01.328 [DEBUG] [Thread-15019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:34:01.329 [DEBUG] [Thread-15019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:34:01.370 [DEBUG] [Thread-15019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:34:01.370 [DEBUG] [Thread-15019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:34:01.373 [DEBUG] [Thread-15019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:34:01.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:34:01.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:34:01.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:34:01.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:34:01.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:34:01.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:34:01.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:34:01.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:34:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:34:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.398006 -999.00  +24.80  29.37     19   +0.00 1 1 1 1 1   888    0 25.24 -13.46 ----- 25.8 29.4 262.4 35.3 31.0 -26.4 30.2 -25.9 29.1 -25.1 30.1 -24.9
2025-11-12T11:34:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:34:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:34:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.398006
2025-11-12T11:34:01.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:34:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:34:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:34:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:34:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:34:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:33:54', tmtdew=30.8, humidity=12.97, cloud=0.0, wind=27.35, temperature=25.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:33:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:34:01.399 [DEBUG] [Thread-15019] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:34:01.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:34:01.494 [DEBUG] [Thread-15022] [transport.py] [_log()] starting thread (client mode): 0x17360910
2025-11-12T11:34:01.494 [DEBUG] [Thread-15022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:34:01.509 [DEBUG] [Thread-15022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:34:01.509 [INFO] [Thread-15022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:34:01.516 [DEBUG] [Thread-15022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] client lang: <none>
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] server lang: <none>
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] kex follows: False
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] Compression: none
2025-11-12T11:34:01.517 [DEBUG] [Thread-15022] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:34:01.580 [DEBUG] [Thread-15022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:34:01.581 [DEBUG] [Thread-15022] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:34:01.581 [DEBUG] [Thread-15022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:34:01.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:34:01.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:34:01.636 [DEBUG] [Thread-15022] [transport.py] [_log()] userauth is OK
2025-11-12T11:34:01.636 [DEBUG] [Thread-15022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:34:01.636 [DEBUG] [Thread-15022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:34:01.636 [DEBUG] [Thread-15022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:34:01.637 [DEBUG] [Thread-15022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:34:01.655 [INFO] [Thread-15022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:34:01.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:34:01.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:34:02.508 [DEBUG] [Thread-15022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:34:02.509 [DEBUG] [Thread-15022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:34:02.557 [DEBUG] [Thread-15022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:34:02.557 [DEBUG] [Thread-15022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:34:02.566 [DEBUG] [Thread-15022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:34:02.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:34:02.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-11-12T11:34:02.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-11-12T11:34:02.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:34:02.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:34:02.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:34:02.602 [DEBUG] [Thread-15022] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:34:02.987 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:34:02.988 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:34:10.185 [DEBUG] [Thread-15024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:34:25.231 [DEBUG] [Thread-15025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:34:29.859 [DEBUG] [Thread-15026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:34:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:34:32.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:34:32.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-11-12T11:34:33.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 34, 26), 30.37, 13.32, 0.0, 26.47, 25.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:34:33.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:34:26
2025-11-12T11:34:33.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:34:33.493 [DEBUG] [Thread-15027] [transport.py] [_log()] starting thread (client mode): 0x14921600
2025-11-12T11:34:33.494 [DEBUG] [Thread-15027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:34:33.515 [DEBUG] [Thread-15027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:34:33.515 [INFO] [Thread-15027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:34:33.518 [DEBUG] [Thread-15027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] client lang: <none>
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] server lang: <none>
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] kex follows: False
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] Compression: none
2025-11-12T11:34:33.519 [DEBUG] [Thread-15027] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:34:33.536 [DEBUG] [Thread-15027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:34:33.537 [DEBUG] [Thread-15027] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:34:33.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:34:33.537 [DEBUG] [Thread-15027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:34:33.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:34:33.539 [DEBUG] [Thread-15027] [transport.py] [_log()] userauth is OK
2025-11-12T11:34:33.540 [DEBUG] [Thread-15027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:34:33.540 [DEBUG] [Thread-15027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:34:33.540 [DEBUG] [Thread-15027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:34:33.540 [DEBUG] [Thread-15027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:34:33.564 [INFO] [Thread-15027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:34:33.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:34:34.205 [DEBUG] [Thread-15027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:34:34.205 [DEBUG] [Thread-15027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:34:34.205 [DEBUG] [Thread-15027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:34:34.245 [DEBUG] [Thread-15027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:34:34.246 [DEBUG] [Thread-15027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:34:34.249 [DEBUG] [Thread-15027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:34:34.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:34:34.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:34:34.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:34:34.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:34:34.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:34:34.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:34:34.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:34:34.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:34:34.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:34:34.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.398353 -999.00  +24.90  24.73     18   -0.30 1 1 1 1 1   888    0 25.42 -14.96 ----- 31.4 24.7 271.4 38.0 30.7 -31.1 30.1 -26.9 28.8 -30.9 30.0 -28.0
2025-11-12T11:34:34.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:34:34.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:34:34.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.398353
2025-11-12T11:34:34.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:34:34.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:34:34.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:34:34.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:34:34.274 [DEBUG] [Thread-15027] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:34:34.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:34:34.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:34:26', tmtdew=30.37, humidity=13.32, cloud=0.0, wind=26.47, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:33:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:34:34.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:34:34.370 [DEBUG] [Thread-15030] [transport.py] [_log()] starting thread (client mode): 0x14955d50
2025-11-12T11:34:34.370 [DEBUG] [Thread-15030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:34:34.384 [DEBUG] [Thread-15030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:34:34.384 [INFO] [Thread-15030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:34:34.392 [DEBUG] [Thread-15030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:34:34.392 [DEBUG] [Thread-15030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:34:34.392 [DEBUG] [Thread-15030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:34:34.392 [DEBUG] [Thread-15030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:34:34.392 [DEBUG] [Thread-15030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] client lang: <none>
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] server lang: <none>
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] kex follows: False
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:34:34.393 [DEBUG] [Thread-15030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:34:34.394 [DEBUG] [Thread-15030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:34:34.394 [DEBUG] [Thread-15030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:34:34.394 [DEBUG] [Thread-15030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:34:34.394 [DEBUG] [Thread-15030] [transport.py] [_log()] Compression: none
2025-11-12T11:34:34.394 [DEBUG] [Thread-15030] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:34:34.452 [DEBUG] [Thread-15030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:34:34.453 [DEBUG] [Thread-15030] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:34:34.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:34:34.463 [DEBUG] [Thread-15030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:34:34.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:34:34.512 [DEBUG] [Thread-15030] [transport.py] [_log()] userauth is OK
2025-11-12T11:34:34.512 [DEBUG] [Thread-15030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:34:34.512 [DEBUG] [Thread-15030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:34:34.512 [DEBUG] [Thread-15030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:34:34.512 [DEBUG] [Thread-15030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:34:34.531 [INFO] [Thread-15030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:34:34.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:34:34.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:34:35.410 [DEBUG] [Thread-15030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:34:35.410 [DEBUG] [Thread-15030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:34:35.457 [DEBUG] [Thread-15030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:34:35.458 [DEBUG] [Thread-15030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:34:35.467 [DEBUG] [Thread-15030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:34:35.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:34:35.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:34:35.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-11-12T11:34:35.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:34:35.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:34:35.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:34:35.503 [DEBUG] [Thread-15030] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:34:40.266 [DEBUG] [Thread-15032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:34:55.329 [DEBUG] [Thread-15033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:35:03.129 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:35:03.130 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:35:05.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:35:05.526 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:35:05.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-11-12T11:35:06.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 34, 58), 30.66, 13.14, 0.0, 23.06, 25.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:35:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:34:58
2025-11-12T11:35:06.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:35:06.435 [DEBUG] [Thread-15034] [transport.py] [_log()] starting thread (client mode): 0x149236a0
2025-11-12T11:35:06.436 [DEBUG] [Thread-15034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:35:06.456 [DEBUG] [Thread-15034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:35:06.456 [INFO] [Thread-15034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] client lang: <none>
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] server lang: <none>
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] kex follows: False
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] Compression: none
2025-11-12T11:35:06.459 [DEBUG] [Thread-15034] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:35:06.476 [DEBUG] [Thread-15034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:35:06.477 [DEBUG] [Thread-15034] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:35:06.477 [DEBUG] [Thread-15034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:35:06.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:35:06.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:35:06.479 [DEBUG] [Thread-15034] [transport.py] [_log()] userauth is OK
2025-11-12T11:35:06.480 [DEBUG] [Thread-15034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:35:06.480 [DEBUG] [Thread-15034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:35:06.480 [DEBUG] [Thread-15034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:35:06.480 [DEBUG] [Thread-15034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:35:06.505 [INFO] [Thread-15034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:35:06.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:35:10.364 [DEBUG] [Thread-15036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:35:11.778 [DEBUG] [Thread-15034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:35:11.778 [DEBUG] [Thread-15034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:35:11.787 [DEBUG] [Thread-15034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:35:11.820 [DEBUG] [Thread-15034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:35:11.820 [DEBUG] [Thread-15034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:35:11.822 [DEBUG] [Thread-15034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:35:11.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:35:11.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:35:11.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:35:11.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:35:11.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:35:11.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:35:11.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:35:11.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:35:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:35:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.399394 -999.00  +25.10  30.72     18   -0.10 1 1 2 1 1   888    0 25.04 -16.00 ----- 33.6 30.7 271.6 37.2 30.9 -28.4 30.1 -26.3 28.8 -30.6 30.0 -25.2
2025-11-12T11:35:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:35:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:35:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.399394
2025-11-12T11:35:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:35:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:35:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:35:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:35:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:35:11.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:34:58', tmtdew=30.66, humidity=13.14, cloud=0.0, wind=23.06, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:35:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:35:11.903 [DEBUG] [Thread-15034] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:35:11.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:35:12.000 [DEBUG] [Thread-15038] [transport.py] [_log()] starting thread (client mode): 0x19dda740
2025-11-12T11:35:12.001 [DEBUG] [Thread-15038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:35:12.016 [DEBUG] [Thread-15038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:35:12.017 [INFO] [Thread-15038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] client lang: <none>
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] server lang: <none>
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] kex follows: False
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:35:12.024 [DEBUG] [Thread-15038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:35:12.025 [DEBUG] [Thread-15038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:35:12.025 [DEBUG] [Thread-15038] [transport.py] [_log()] Compression: none
2025-11-12T11:35:12.025 [DEBUG] [Thread-15038] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:35:12.083 [DEBUG] [Thread-15038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:35:12.084 [DEBUG] [Thread-15038] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:35:12.084 [DEBUG] [Thread-15038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:35:12.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:35:12.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:35:12.139 [DEBUG] [Thread-15038] [transport.py] [_log()] userauth is OK
2025-11-12T11:35:12.139 [DEBUG] [Thread-15038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:35:12.139 [DEBUG] [Thread-15038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:35:12.139 [DEBUG] [Thread-15038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:35:12.139 [DEBUG] [Thread-15038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:35:12.160 [INFO] [Thread-15038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:35:12.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:35:12.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:35:13.007 [DEBUG] [Thread-15038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:35:13.007 [DEBUG] [Thread-15038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:35:13.055 [DEBUG] [Thread-15038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:35:13.055 [DEBUG] [Thread-15038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:35:13.064 [DEBUG] [Thread-15038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:35:13.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:35:13.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-11-12T11:35:13.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-11-12T11:35:13.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:35:13.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:35:13.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:35:13.098 [DEBUG] [Thread-15038] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:35:25.397 [DEBUG] [Thread-15040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:35:29.898 [DEBUG] [Thread-15041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:35:40.454 [DEBUG] [Thread-15042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:35:43.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:35:43.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:35:43.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-11-12T11:35:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 35, 30), 30.57, 13.19, 0.0, 24.17, 25.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:35:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:35:30
2025-11-12T11:35:43.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:35:44.026 [DEBUG] [Thread-15043] [transport.py] [_log()] starting thread (client mode): 0x14921de0
2025-11-12T11:35:44.027 [DEBUG] [Thread-15043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:35:44.046 [DEBUG] [Thread-15043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:35:44.046 [INFO] [Thread-15043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:35:44.049 [DEBUG] [Thread-15043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:35:44.049 [DEBUG] [Thread-15043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:35:44.049 [DEBUG] [Thread-15043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:35:44.049 [DEBUG] [Thread-15043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:35:44.049 [DEBUG] [Thread-15043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] client lang: <none>
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] server lang: <none>
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] kex follows: False
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:35:44.050 [DEBUG] [Thread-15043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:35:44.051 [DEBUG] [Thread-15043] [transport.py] [_log()] Compression: none
2025-11-12T11:35:44.051 [DEBUG] [Thread-15043] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:35:44.068 [DEBUG] [Thread-15043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:35:44.069 [DEBUG] [Thread-15043] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:35:44.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:35:44.070 [DEBUG] [Thread-15043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:35:44.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:35:44.072 [DEBUG] [Thread-15043] [transport.py] [_log()] userauth is OK
2025-11-12T11:35:44.072 [DEBUG] [Thread-15043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:35:44.073 [DEBUG] [Thread-15043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:35:44.073 [DEBUG] [Thread-15043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:35:44.073 [DEBUG] [Thread-15043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:35:44.098 [INFO] [Thread-15043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:35:44.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:35:44.735 [DEBUG] [Thread-15043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:35:44.736 [DEBUG] [Thread-15043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:35:44.736 [DEBUG] [Thread-15043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:35:44.777 [DEBUG] [Thread-15043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:35:44.777 [DEBUG] [Thread-15043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:35:44.780 [DEBUG] [Thread-15043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:35:44.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:35:44.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:35:44.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:35:44.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:35:44.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:35:44.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:35:44.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:35:44.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:35:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:35:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.399394 -999.00  +25.10  30.72     18   -0.10 1 1 2 1 1   888    0 25.04 -16.00 ----- 33.6 30.7 271.6 37.2 30.9 -28.4 30.1 -26.3 28.8 -30.6 30.0 -25.2
2025-11-12T11:35:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:35:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:35:44.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.399394
2025-11-12T11:35:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:35:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:35:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:35:44.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:35:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:35:44.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:35:30', tmtdew=30.57, humidity=13.19, cloud=0.0, wind=24.17, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:35:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:35:44.808 [DEBUG] [Thread-15043] [transport.py] [_log()] EOF in transport thread
2025-11-12T11: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-11-12T11:35:44.903 [DEBUG] [Thread-15046] [transport.py] [_log()] starting thread (client mode): 0x14957790
2025-11-12T11:35:44.903 [DEBUG] [Thread-15046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:35:44.918 [DEBUG] [Thread-15046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:35:44.919 [INFO] [Thread-15046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] client lang: <none>
2025-11-12T11:35:44.926 [DEBUG] [Thread-15046] [transport.py] [_log()] server lang: <none>
2025-11-12T11:35:44.927 [DEBUG] [Thread-15046] [transport.py] [_log()] kex follows: False
2025-11-12T11:35:44.927 [DEBUG] [Thread-15046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:35:44.927 [DEBUG] [Thread-15046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:35:44.927 [DEBUG] [Thread-15046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:35:44.927 [DEBUG] [Thread-15046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:35:44.927 [DEBUG] [Thread-15046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:35:44.927 [DEBUG] [Thread-15046] [transport.py] [_log()] Compression: none
2025-11-12T11:35:44.927 [DEBUG] [Thread-15046] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:35:44.985 [DEBUG] [Thread-15046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:35:44.985 [DEBUG] [Thread-15046] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:35:44.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:35:44.986 [DEBUG] [Thread-15046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:35:44.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:35:45.047 [DEBUG] [Thread-15046] [transport.py] [_log()] userauth is OK
2025-11-12T11:35:45.047 [DEBUG] [Thread-15046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:35:45.048 [DEBUG] [Thread-15046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:35:45.048 [DEBUG] [Thread-15046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:35:45.048 [DEBUG] [Thread-15046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:35:45.066 [INFO] [Thread-15046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:35:45.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:35:45.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:35:45.880 [DEBUG] [Thread-15046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:35:45.880 [DEBUG] [Thread-15046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:35:45.929 [DEBUG] [Thread-15046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:35:45.929 [DEBUG] [Thread-15046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:35:45.940 [DEBUG] [Thread-15046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:35:45.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:35: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-11-12T11:35:45.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-11-12T11:35:45.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:35:45.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:35:45.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:35:45.976 [DEBUG] [Thread-15046] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:35:55.484 [DEBUG] [Thread-15048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:36:03.270 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:36:03.271 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:36:10.536 [DEBUG] [Thread-15049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:36:15.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:36:15.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:36:15.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-11-12T11:36:16.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 36, 2), 30.76, 13.06, 0.0, 30.63, 25.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:36:16.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:36:02
2025-11-12T11:36:16.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:36:16.926 [DEBUG] [Thread-15050] [transport.py] [_log()] starting thread (client mode): 0x14957460
2025-11-12T11:36:16.926 [DEBUG] [Thread-15050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:36:16.947 [DEBUG] [Thread-15050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:36:16.947 [INFO] [Thread-15050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] client lang: <none>
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] server lang: <none>
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] kex follows: False
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] Compression: none
2025-11-12T11:36:16.950 [DEBUG] [Thread-15050] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:36:16.967 [DEBUG] [Thread-15050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:36:16.967 [DEBUG] [Thread-15050] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:36:16.967 [DEBUG] [Thread-15050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:36:16.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:36:16.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:36:16.968 [DEBUG] [Thread-15050] [transport.py] [_log()] userauth is OK
2025-11-12T11:36:16.968 [DEBUG] [Thread-15050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:36:16.968 [DEBUG] [Thread-15050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:36:16.968 [DEBUG] [Thread-15050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:36:16.968 [DEBUG] [Thread-15050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:36:16.996 [INFO] [Thread-15050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:36:16.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:36:17.730 [DEBUG] [Thread-15050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:36:17.730 [DEBUG] [Thread-15050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:36:17.730 [DEBUG] [Thread-15050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:36:17.771 [DEBUG] [Thread-15050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:36:17.771 [DEBUG] [Thread-15050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:36:17.773 [DEBUG] [Thread-15050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:36:17.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:36:17.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:36:17.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:36:17.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:36:17.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:36:17.791 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:36:17.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:36:17.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:36:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:36:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.399742 -999.00  +24.80  28.25     19   -0.20 1 1 1 1 1   888    0 25.34 -14.27 ----- 28.9 28.2 274.6 40.6 30.6 -26.7 29.9 -26.1 28.7 -26.7 29.8 -24.7
2025-11-12T11:36:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:36:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:36:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.399742
2025-11-12T11:36:17.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:36:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:36:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:36:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:36:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:36:17.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:36:02', tmtdew=30.76, humidity=13.06, cloud=0.0, wind=30.63, temperature=25.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:35:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:36:17.792 [DEBUG] [Thread-15050] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:36:17.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:36:17.878 [DEBUG] [Thread-15053] [transport.py] [_log()] starting thread (client mode): 0x17360760
2025-11-12T11:36:17.878 [DEBUG] [Thread-15053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:36:17.893 [DEBUG] [Thread-15053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:36:17.893 [INFO] [Thread-15053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] client lang: <none>
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] server lang: <none>
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] kex follows: False
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] Compression: none
2025-11-12T11:36:17.901 [DEBUG] [Thread-15053] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:36:17.961 [DEBUG] [Thread-15053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:36:17.961 [DEBUG] [Thread-15053] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:36:17.961 [DEBUG] [Thread-15053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:36:17.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:36:17.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:36:18.018 [DEBUG] [Thread-15053] [transport.py] [_log()] userauth is OK
2025-11-12T11:36:18.019 [DEBUG] [Thread-15053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:36:18.019 [DEBUG] [Thread-15053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:36:18.019 [DEBUG] [Thread-15053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:36:18.019 [DEBUG] [Thread-15053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:36:18.036 [INFO] [Thread-15053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:36:18.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:36:18.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:36:18.926 [DEBUG] [Thread-15053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:36:18.926 [DEBUG] [Thread-15053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:36:18.974 [DEBUG] [Thread-15053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:36:18.974 [DEBUG] [Thread-15053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:36:18.982 [DEBUG] [Thread-15053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:36:18.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:36:18.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-11-12T11:36:18.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-11-12T11:36:19.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:36:19.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:36:19.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:36:19.013 [DEBUG] [Thread-15053] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:36:25.570 [DEBUG] [Thread-15055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:36:29.936 [DEBUG] [Thread-15056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:36:40.621 [DEBUG] [Thread-15057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:36:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:36:49.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:36:49.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-11-12T11:36:49.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 36, 34), 31.81, 12.02, 0.0, 36.91, 27.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:36:49.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:36:34
2025-11-12T11:36:49.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:36:49.965 [DEBUG] [Thread-15058] [transport.py] [_log()] starting thread (client mode): 0x149205e0
2025-11-12T11:36:49.965 [DEBUG] [Thread-15058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:36:49.985 [DEBUG] [Thread-15058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:36:49.985 [INFO] [Thread-15058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:36:49.988 [DEBUG] [Thread-15058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:36:49.988 [DEBUG] [Thread-15058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:36:49.988 [DEBUG] [Thread-15058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:36:49.988 [DEBUG] [Thread-15058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:36:49.988 [DEBUG] [Thread-15058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] client lang: <none>
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] server lang: <none>
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] kex follows: False
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] Compression: none
2025-11-12T11:36:49.989 [DEBUG] [Thread-15058] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:36:50.006 [DEBUG] [Thread-15058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:36:50.007 [DEBUG] [Thread-15058] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:36:50.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:36:50.007 [DEBUG] [Thread-15058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:36:50.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:36:50.009 [DEBUG] [Thread-15058] [transport.py] [_log()] userauth is OK
2025-11-12T11:36:50.009 [DEBUG] [Thread-15058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:36:50.009 [DEBUG] [Thread-15058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:36:50.009 [DEBUG] [Thread-15058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:36:50.010 [DEBUG] [Thread-15058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:36:50.045 [INFO] [Thread-15058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:36:50.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:36:50.682 [DEBUG] [Thread-15058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:36:50.683 [DEBUG] [Thread-15058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:36:50.683 [DEBUG] [Thread-15058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:36:50.724 [DEBUG] [Thread-15058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:36:50.724 [DEBUG] [Thread-15058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:36:50.727 [DEBUG] [Thread-15058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:36:50.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:36:50.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:36:50.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:36:50.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:36:50.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:36:50.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:36:50.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:36:50.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:36:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:36:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.400089 -999.00  +24.40  30.30     19   -0.50 1 1 2 1 1   888    0 24.68 -14.41 ----- 28.7 30.3 275.6 39.6 30.3 -30.9 29.7 -27.8 28.3 -29.9 29.6 -26.0
2025-11-12T11:36:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:36:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:36:50.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.400089
2025-11-12T11:36:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:36:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:36:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:36:50.754 [DEBUG] [Thread-15058] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:36:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:36:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:36:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:36:34', tmtdew=31.81, humidity=12.02, cloud=0.0, wind=36.91, temperature=27.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:36:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:36:50.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:36:50.848 [DEBUG] [Thread-15061] [transport.py] [_log()] starting thread (client mode): 0x19ddada0
2025-11-12T11:36:50.849 [DEBUG] [Thread-15061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:36:50.863 [DEBUG] [Thread-15061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:36:50.864 [INFO] [Thread-15061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] client lang: <none>
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] server lang: <none>
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] kex follows: False
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] Compression: none
2025-11-12T11:36:50.871 [DEBUG] [Thread-15061] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:36:50.930 [DEBUG] [Thread-15061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:36:50.931 [DEBUG] [Thread-15061] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:36:50.931 [DEBUG] [Thread-15061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:36:50.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:36:50.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:36:50.987 [DEBUG] [Thread-15061] [transport.py] [_log()] userauth is OK
2025-11-12T11:36:50.987 [DEBUG] [Thread-15061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:36:50.987 [DEBUG] [Thread-15061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:36:50.987 [DEBUG] [Thread-15061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:36:50.987 [DEBUG] [Thread-15061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:36:51.006 [INFO] [Thread-15061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:36:51.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:36:51.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:36:51.865 [DEBUG] [Thread-15061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:36:51.866 [DEBUG] [Thread-15061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:36:51.914 [DEBUG] [Thread-15061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:36:51.914 [DEBUG] [Thread-15061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:36:51.923 [DEBUG] [Thread-15061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:36:51.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:36:51.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:36:51.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-11-12T11:36:51.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:36:51.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:36:51.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:36:51.960 [DEBUG] [Thread-15061] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:36:55.654 [DEBUG] [Thread-15063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:37:03.414 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:37:03.415 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:37:10.695 [DEBUG] [Thread-15064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:37:21.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:37:21.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:37:21.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-11-12T11:37:22.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 37, 6), 30.89, 12.52, 0.0, 28.46, 25.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:37:22.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:37:06
2025-11-12T11:37:22.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:37:22.896 [DEBUG] [Thread-15065] [transport.py] [_log()] starting thread (client mode): 0x1493d8a0
2025-11-12T11:37:22.896 [DEBUG] [Thread-15065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:37:22.912 [DEBUG] [Thread-15065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:37:22.912 [INFO] [Thread-15065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] client lang: <none>
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] server lang: <none>
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] kex follows: False
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:37:22.915 [DEBUG] [Thread-15065] [transport.py] [_log()] Compression: none
2025-11-12T11:37:22.916 [DEBUG] [Thread-15065] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:37:22.924 [DEBUG] [Thread-15065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:37:22.924 [DEBUG] [Thread-15065] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:37:22.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:37:22.924 [DEBUG] [Thread-15065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:37:22.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:37:22.925 [DEBUG] [Thread-15065] [transport.py] [_log()] userauth is OK
2025-11-12T11:37:22.925 [DEBUG] [Thread-15065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:37:22.925 [DEBUG] [Thread-15065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:37:22.925 [DEBUG] [Thread-15065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:37:22.925 [DEBUG] [Thread-15065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:37:22.942 [INFO] [Thread-15065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:37:22.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:37:23.633 [DEBUG] [Thread-15065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:37:23.633 [DEBUG] [Thread-15065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:37:23.634 [DEBUG] [Thread-15065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:37:23.674 [DEBUG] [Thread-15065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:37:23.674 [DEBUG] [Thread-15065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:37:23.677 [DEBUG] [Thread-15065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:37:23.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:37:23.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:37:23.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:37:23.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:37:23.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:37:23.696 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:37:23.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:37:23.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:37:23.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:37:23.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.400436 -999.00  +24.40  28.23     18   -0.80 1 1 1 1 1   888    0 24.42 -15.21 ----- 27.8 28.2 285.4 35.5 30.3 -29.3 29.7 -26.8 28.4 -27.5 29.6 -26.2
2025-11-12T11:37:23.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:37:23.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:37:23.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.400436
2025-11-12T11:37:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:37:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:37:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:37:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:37:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:37:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:37:06', tmtdew=30.89, humidity=12.52, cloud=0.0, wind=28.46, temperature=25.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:36:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:37:23.698 [DEBUG] [Thread-15065] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:37:23.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:37:23.789 [DEBUG] [Thread-15068] [transport.py] [_log()] starting thread (client mode): 0x149560e0
2025-11-12T11:37:23.790 [DEBUG] [Thread-15068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:37:23.804 [DEBUG] [Thread-15068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:37:23.804 [INFO] [Thread-15068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:37:23.811 [DEBUG] [Thread-15068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] client lang: <none>
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] server lang: <none>
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] kex follows: False
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] Compression: none
2025-11-12T11:37:23.812 [DEBUG] [Thread-15068] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:37:23.870 [DEBUG] [Thread-15068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:37:23.870 [DEBUG] [Thread-15068] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:37:23.871 [DEBUG] [Thread-15068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:37:23.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:37:23.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:37:23.928 [DEBUG] [Thread-15068] [transport.py] [_log()] userauth is OK
2025-11-12T11:37:23.929 [DEBUG] [Thread-15068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:37:23.929 [DEBUG] [Thread-15068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:37:23.929 [DEBUG] [Thread-15068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:37:23.929 [DEBUG] [Thread-15068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:37:23.950 [INFO] [Thread-15068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:37:23.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:37:23.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:37:24.807 [DEBUG] [Thread-15068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:37:24.807 [DEBUG] [Thread-15068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:37:24.855 [DEBUG] [Thread-15068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:37:24.855 [DEBUG] [Thread-15068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:37:24.864 [DEBUG] [Thread-15068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:37:24.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:37:24.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-11-12T11:37:24.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-11-12T11:37:24.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:37:24.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:37:24.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:37:24.898 [DEBUG] [Thread-15068] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:37:25.731 [DEBUG] [Thread-15070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:37:29.970 [DEBUG] [Thread-15071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:37:40.777 [DEBUG] [Thread-15072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:37:54.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:37:54.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:37:54.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:37:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 37, 38), 31.08, 12.47, 0.0, 25.44, 25.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:37:55.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:37:38
2025-11-12T11:37:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:37:55.812 [DEBUG] [Thread-15073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:37:55.835 [DEBUG] [Thread-15074] [transport.py] [_log()] starting thread (client mode): 0x14956b00
2025-11-12T11:37:55.835 [DEBUG] [Thread-15074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:37:55.854 [DEBUG] [Thread-15074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:37:55.854 [INFO] [Thread-15074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] client lang: <none>
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] server lang: <none>
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] kex follows: False
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:37:55.857 [DEBUG] [Thread-15074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:37:55.858 [DEBUG] [Thread-15074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:37:55.858 [DEBUG] [Thread-15074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:37:55.858 [DEBUG] [Thread-15074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:37:55.858 [DEBUG] [Thread-15074] [transport.py] [_log()] Compression: none
2025-11-12T11:37:55.858 [DEBUG] [Thread-15074] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:37:55.874 [DEBUG] [Thread-15074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:37:55.875 [DEBUG] [Thread-15074] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:37:55.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:37:55.876 [DEBUG] [Thread-15074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:37:55.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:37:55.878 [DEBUG] [Thread-15074] [transport.py] [_log()] userauth is OK
2025-11-12T11:37:55.878 [DEBUG] [Thread-15074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:37:55.878 [DEBUG] [Thread-15074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:37:55.878 [DEBUG] [Thread-15074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:37:55.878 [DEBUG] [Thread-15074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:37:55.903 [INFO] [Thread-15074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:37:55.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:37:56.459 [DEBUG] [Thread-15074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:37:56.459 [DEBUG] [Thread-15074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:37:56.460 [DEBUG] [Thread-15074] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:37:56.500 [DEBUG] [Thread-15074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:37:56.500 [DEBUG] [Thread-15074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:37:56.503 [DEBUG] [Thread-15074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:37:56.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:37:56.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:37:56.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:37:56.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:37:56.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:37:56.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:37:56.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:37:56.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:37:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:37:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.400783 -999.00  +24.60  27.49     18   -0.90 1 1 1 1 1   888    0 25.43 -15.81 ----- 24.8 27.5 273.6 37.2 30.2 -27.2 29.6 -25.3 28.4 -25.4 29.4 -25.2
2025-11-12T11:37:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:37:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:37:56.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.400783
2025-11-12T11:37:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:37:56.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:37:56.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:37:56.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:37:56.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:37:56.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:37:38', tmtdew=31.08, humidity=12.47, cloud=0.0, wind=25.44, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:37:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:37:56.531 [DEBUG] [Thread-15074] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:37:56.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:37:56.627 [DEBUG] [Thread-15077] [transport.py] [_log()] starting thread (client mode): 0x17345690
2025-11-12T11:37:56.627 [DEBUG] [Thread-15077] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:37:56.642 [DEBUG] [Thread-15077] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:37:56.643 [INFO] [Thread-15077] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:37:56.650 [DEBUG] [Thread-15077] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:37:56.650 [DEBUG] [Thread-15077] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:37:56.650 [DEBUG] [Thread-15077] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:37:56.650 [DEBUG] [Thread-15077] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] client lang: <none>
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] server lang: <none>
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] kex follows: False
2025-11-12T11:37:56.651 [DEBUG] [Thread-15077] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:37:56.652 [DEBUG] [Thread-15077] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:37:56.652 [DEBUG] [Thread-15077] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:37:56.652 [DEBUG] [Thread-15077] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:37:56.652 [DEBUG] [Thread-15077] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:37:56.652 [DEBUG] [Thread-15077] [transport.py] [_log()] Compression: none
2025-11-12T11:37:56.652 [DEBUG] [Thread-15077] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:37:56.711 [DEBUG] [Thread-15077] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:37:56.712 [DEBUG] [Thread-15077] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:37:56.712 [DEBUG] [Thread-15077] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:37:56.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:37:56.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:37:56.770 [DEBUG] [Thread-15077] [transport.py] [_log()] userauth is OK
2025-11-12T11:37:56.771 [DEBUG] [Thread-15077] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:37:56.771 [DEBUG] [Thread-15077] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:37:56.771 [DEBUG] [Thread-15077] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:37:56.771 [DEBUG] [Thread-15077] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:37:56.790 [INFO] [Thread-15077] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:37:56.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:37:56.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:37:57.615 [DEBUG] [Thread-15077] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:37:57.616 [DEBUG] [Thread-15077] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:37:57.665 [DEBUG] [Thread-15077] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:37:57.665 [DEBUG] [Thread-15077] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:37:57.677 [DEBUG] [Thread-15077] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:37:57.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:37:57.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-11-12T11:37:57.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-11-12T11:37:57.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:37:57.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:37:57.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:37:57.721 [DEBUG] [Thread-15077] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:38:03.556 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:38:03.558 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:38:10.846 [DEBUG] [Thread-15079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:38:25.887 [DEBUG] [Thread-15080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:38:27.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:38:27.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:38:27.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-11-12T11:38:28.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 38, 9), 31.39, 12.21, 0.0, 25.64, 25.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:38:28.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:38:09
2025-11-12T11:38:28.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:38:28.622 [DEBUG] [Thread-15081] [transport.py] [_log()] starting thread (client mode): 0x1493e710
2025-11-12T11:38:28.622 [DEBUG] [Thread-15081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:38:28.644 [DEBUG] [Thread-15081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:38:28.645 [INFO] [Thread-15081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:38:28.648 [DEBUG] [Thread-15081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:38:28.648 [DEBUG] [Thread-15081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:38:28.648 [DEBUG] [Thread-15081] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:38:28.648 [DEBUG] [Thread-15081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:38:28.648 [DEBUG] [Thread-15081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:38:28.648 [DEBUG] [Thread-15081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] client lang: <none>
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] server lang: <none>
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] kex follows: False
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] Compression: none
2025-11-12T11:38:28.649 [DEBUG] [Thread-15081] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:38:28.665 [DEBUG] [Thread-15081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:38:28.665 [DEBUG] [Thread-15081] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:38:28.666 [DEBUG] [Thread-15081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:38:28.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:38:28.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:38:28.667 [DEBUG] [Thread-15081] [transport.py] [_log()] userauth is OK
2025-11-12T11:38:28.668 [DEBUG] [Thread-15081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:38:28.668 [DEBUG] [Thread-15081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:38:28.668 [DEBUG] [Thread-15081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:38:28.668 [DEBUG] [Thread-15081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:38:28.691 [INFO] [Thread-15081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:38:28.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:38:29.409 [DEBUG] [Thread-15081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:38:29.410 [DEBUG] [Thread-15081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:38:29.410 [DEBUG] [Thread-15081] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:38:29.450 [DEBUG] [Thread-15081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:38:29.451 [DEBUG] [Thread-15081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:38:29.453 [DEBUG] [Thread-15081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:38:29.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:38:29.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:38:29.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:38:29.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:38:29.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:38:29.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:38:29.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:38:29.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:38:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:38:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.401131 -999.00  +24.60  28.32     18   -1.20 1 1 1 1 1   888    0 25.19 -15.49 ----- 24.0 28.3 268.4 32.0 30.2 -26.8 29.6 -26.0 28.3 -29.9 29.4 -24.8
2025-11-12T11:38:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:38:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:38:29.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.401131
2025-11-12T11:38:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:38:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:38:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:38:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:38:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:38:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:38:09', tmtdew=31.39, humidity=12.21, cloud=0.0, wind=25.64, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:37:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:38:29.479 [DEBUG] [Thread-15081] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:38:29.562 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:38:29.575 [DEBUG] [Thread-15084] [transport.py] [_log()] starting thread (client mode): 0x19dd8fa0
2025-11-12T11:38:29.575 [DEBUG] [Thread-15084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:38:29.589 [DEBUG] [Thread-15084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:38:29.590 [INFO] [Thread-15084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] client lang: <none>
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] server lang: <none>
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] kex follows: False
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:38:29.597 [DEBUG] [Thread-15084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:38:29.598 [DEBUG] [Thread-15084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:38:29.598 [DEBUG] [Thread-15084] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:38:29.598 [DEBUG] [Thread-15084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:38:29.598 [DEBUG] [Thread-15084] [transport.py] [_log()] Compression: none
2025-11-12T11:38:29.598 [DEBUG] [Thread-15084] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:38:29.654 [DEBUG] [Thread-15084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:38:29.654 [DEBUG] [Thread-15084] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:38:29.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:38:29.656 [DEBUG] [Thread-15084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:38:29.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:38:29.710 [DEBUG] [Thread-15084] [transport.py] [_log()] userauth is OK
2025-11-12T11:38:29.711 [DEBUG] [Thread-15084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:38:29.711 [DEBUG] [Thread-15084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:38:29.711 [DEBUG] [Thread-15084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:38:29.711 [DEBUG] [Thread-15084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:38:29.730 [INFO] [Thread-15084] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:38:29.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:38:29.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:38:30.012 [DEBUG] [Thread-15086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:38:30.657 [DEBUG] [Thread-15084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:38:30.657 [DEBUG] [Thread-15084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:38:30.705 [DEBUG] [Thread-15084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:38:30.705 [DEBUG] [Thread-15084] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:38:30.714 [DEBUG] [Thread-15084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:38:30.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:38:30.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-11-12T11:38:30.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-11-12T11:38:30.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:38:30.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:38:30.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:38:30.751 [DEBUG] [Thread-15084] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:38:40.924 [DEBUG] [Thread-15087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:38:55.971 [DEBUG] [Thread-15088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:39:00.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:39:00.773 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:39:00.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-11-12T11:39:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 38, 42), 31.32, 12.24, 0.0, 30.67, 25.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:39:01.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:38:42
2025-11-12T11:39:01.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:39:01.665 [DEBUG] [Thread-15089] [transport.py] [_log()] starting thread (client mode): 0x173ebee0
2025-11-12T11:39:01.665 [DEBUG] [Thread-15089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:39:01.686 [DEBUG] [Thread-15089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:39:01.687 [INFO] [Thread-15089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] client lang: <none>
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] server lang: <none>
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] kex follows: False
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] Compression: none
2025-11-12T11:39:01.690 [DEBUG] [Thread-15089] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:39:01.706 [DEBUG] [Thread-15089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:39:01.707 [DEBUG] [Thread-15089] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:39:01.708 [DEBUG] [Thread-15089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:39:01.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:39:01.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:39:01.710 [DEBUG] [Thread-15089] [transport.py] [_log()] userauth is OK
2025-11-12T11:39:01.710 [DEBUG] [Thread-15089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:39:01.710 [DEBUG] [Thread-15089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:39:01.710 [DEBUG] [Thread-15089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:39:01.710 [DEBUG] [Thread-15089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:39:01.733 [INFO] [Thread-15089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:39:01.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:39:02.371 [DEBUG] [Thread-15089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:39:02.371 [DEBUG] [Thread-15089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:39:02.372 [DEBUG] [Thread-15089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:39:02.413 [DEBUG] [Thread-15089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:39:02.413 [DEBUG] [Thread-15089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:39:02.417 [DEBUG] [Thread-15089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:39:02.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:39:02.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:39:02.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:39:02.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:39:02.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:39:02.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:39:02.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:39:02.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:39:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:39:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.401478 -999.00  +24.40  28.51     18   -1.20 1 1 1 1 1   888    0 25.07 -13.92 ----- 29.0 28.5 275.4 40.9 30.0 -29.6 29.4 -27.4 28.1 -29.5 29.3 -28.0
2025-11-12T11:39:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:39:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:39:02.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.401478
2025-11-12T11:39:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:39:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:39:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:39:02.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:39:02.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:39:02.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:38:42', tmtdew=31.32, humidity=12.24, cloud=0.0, wind=30.67, temperature=25.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:38:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:39:02.443 [DEBUG] [Thread-15089] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:39:02.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:39:02.537 [DEBUG] [Thread-15092] [transport.py] [_log()] starting thread (client mode): 0x173e8760
2025-11-12T11:39:02.537 [DEBUG] [Thread-15092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:39:02.552 [DEBUG] [Thread-15092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:39:02.553 [INFO] [Thread-15092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:39:02.560 [DEBUG] [Thread-15092] [transport.py] [_log()] client lang: <none>
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] server lang: <none>
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] kex follows: False
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] Compression: none
2025-11-12T11:39:02.561 [DEBUG] [Thread-15092] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:39:02.618 [DEBUG] [Thread-15092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:39:02.619 [DEBUG] [Thread-15092] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:39:02.620 [DEBUG] [Thread-15092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:39:02.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:39:02.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:39:02.674 [DEBUG] [Thread-15092] [transport.py] [_log()] userauth is OK
2025-11-12T11:39:02.674 [DEBUG] [Thread-15092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:39:02.675 [DEBUG] [Thread-15092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:39:02.675 [DEBUG] [Thread-15092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:39:02.675 [DEBUG] [Thread-15092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:39:02.693 [INFO] [Thread-15092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:39:02.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:39:02.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:39:03.559 [DEBUG] [Thread-15092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:39:03.560 [DEBUG] [Thread-15092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:39:03.608 [DEBUG] [Thread-15092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:39:03.608 [DEBUG] [Thread-15092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:39:03.617 [DEBUG] [Thread-15092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:39:03.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:39:03.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:39:03.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-11-12T11:39:03.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:39:03.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:39:03.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:39:03.654 [DEBUG] [Thread-15092] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:39:03.699 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:39:03.700 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:39:11.012 [DEBUG] [Thread-15094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:39:26.063 [DEBUG] [Thread-15095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:39:30.046 [DEBUG] [Thread-15096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:39:33.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:39:33.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:39:33.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-11-12T11:39:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 39, 14), 31.65, 11.98, 0.0, 32.36, 25.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:39:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:39:14
2025-11-12T11:39:34.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:39:34.550 [DEBUG] [Thread-15097] [transport.py] [_log()] starting thread (client mode): 0x14983850
2025-11-12T11:39:34.550 [DEBUG] [Thread-15097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:39:34.565 [DEBUG] [Thread-15097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:39:34.565 [INFO] [Thread-15097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] client lang: <none>
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] server lang: <none>
2025-11-12T11:39:34.568 [DEBUG] [Thread-15097] [transport.py] [_log()] kex follows: False
2025-11-12T11:39:34.569 [DEBUG] [Thread-15097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:39:34.569 [DEBUG] [Thread-15097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:39:34.569 [DEBUG] [Thread-15097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:39:34.569 [DEBUG] [Thread-15097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:39:34.569 [DEBUG] [Thread-15097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:39:34.569 [DEBUG] [Thread-15097] [transport.py] [_log()] Compression: none
2025-11-12T11:39:34.569 [DEBUG] [Thread-15097] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:39:34.585 [DEBUG] [Thread-15097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:39:34.585 [DEBUG] [Thread-15097] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:39:34.585 [DEBUG] [Thread-15097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:39:34.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:39:34.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:39:34.587 [DEBUG] [Thread-15097] [transport.py] [_log()] userauth is OK
2025-11-12T11:39:34.587 [DEBUG] [Thread-15097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:39:34.588 [DEBUG] [Thread-15097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:39:34.588 [DEBUG] [Thread-15097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:39:34.588 [DEBUG] [Thread-15097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:39:34.602 [INFO] [Thread-15097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:39:34.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:39:35.193 [DEBUG] [Thread-15097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:39:35.194 [DEBUG] [Thread-15097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:39:35.194 [DEBUG] [Thread-15097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:39:35.235 [DEBUG] [Thread-15097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:39:35.235 [DEBUG] [Thread-15097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:39:35.238 [DEBUG] [Thread-15097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:39:35.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:39:35.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:39:35.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:39:35.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:39:35.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:39:35.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:39:35.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:39:35.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:39:35.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:39:35.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.402172 -999.00  +24.20  27.46     18   -1.10 1 1 1 1 1   888    0 25.02 -8.49 ----- 24.8 27.5 270.6 36.0 29.8 -28.7 29.2 -25.8 27.9 -28.9 29.0 -26.6
2025-11-12T11:39:35.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:39:35.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:39:35.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.402172
2025-11-12T11:39:35.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:39:35.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:39:35.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:39:35.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:39:35.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:39:35.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:39:14', tmtdew=31.65, humidity=11.98, cloud=0.0, wind=32.36, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:39:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:39:35.267 [DEBUG] [Thread-15097] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:39:35.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:39:35.364 [DEBUG] [Thread-15100] [transport.py] [_log()] starting thread (client mode): 0x17362c20
2025-11-12T11:39:35.364 [DEBUG] [Thread-15100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:39:35.382 [DEBUG] [Thread-15100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:39:35.382 [INFO] [Thread-15100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:39:35.389 [DEBUG] [Thread-15100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:39:35.390 [DEBUG] [Thread-15100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:39:35.390 [DEBUG] [Thread-15100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:39:35.390 [DEBUG] [Thread-15100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:39:35.390 [DEBUG] [Thread-15100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:39:35.390 [DEBUG] [Thread-15100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:39:35.390 [DEBUG] [Thread-15100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:39:35.390 [DEBUG] [Thread-15100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:39:35.391 [DEBUG] [Thread-15100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:39:35.391 [DEBUG] [Thread-15100] [transport.py] [_log()] client lang: <none>
2025-11-12T11:39:35.391 [DEBUG] [Thread-15100] [transport.py] [_log()] server lang: <none>
2025-11-12T11:39:35.391 [DEBUG] [Thread-15100] [transport.py] [_log()] kex follows: False
2025-11-12T11:39:35.391 [DEBUG] [Thread-15100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:39:35.391 [DEBUG] [Thread-15100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:39:35.391 [DEBUG] [Thread-15100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:39:35.391 [DEBUG] [Thread-15100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:39:35.392 [DEBUG] [Thread-15100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:39:35.392 [DEBUG] [Thread-15100] [transport.py] [_log()] Compression: none
2025-11-12T11:39:35.392 [DEBUG] [Thread-15100] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:39:35.451 [DEBUG] [Thread-15100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:39:35.451 [DEBUG] [Thread-15100] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:39:35.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:39:35.452 [DEBUG] [Thread-15100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:39:35.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:39:35.506 [DEBUG] [Thread-15100] [transport.py] [_log()] userauth is OK
2025-11-12T11:39:35.506 [DEBUG] [Thread-15100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:39:35.506 [DEBUG] [Thread-15100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:39:35.506 [DEBUG] [Thread-15100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:39:35.506 [DEBUG] [Thread-15100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:39:35.525 [INFO] [Thread-15100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:39:35.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:39:35.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:39:36.403 [DEBUG] [Thread-15100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:39:36.403 [DEBUG] [Thread-15100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:39:36.451 [DEBUG] [Thread-15100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:39:36.452 [DEBUG] [Thread-15100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:39:36.460 [DEBUG] [Thread-15100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:39:36.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:39:36.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-11-12T11:39:36.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-11-12T11:39:36.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:39:36.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:39:36.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:39:36.494 [DEBUG] [Thread-15100] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:39:41.095 [DEBUG] [Thread-15102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:39:56.148 [DEBUG] [Thread-15103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:40:03.841 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:40:03.842 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:40:06.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:40:06.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:40:06.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-11-12T11:40:07.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 39, 46), 31.51, 12.01, 0.0, 27.51, 25.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:40:07.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:39:46
2025-11-12T11:40:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:40:07.419 [DEBUG] [Thread-15104] [transport.py] [_log()] starting thread (client mode): 0x14920e20
2025-11-12T11:40:07.420 [DEBUG] [Thread-15104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:40:07.439 [DEBUG] [Thread-15104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:40:07.439 [INFO] [Thread-15104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:40:07.440 [DEBUG] [Thread-15104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] client lang: <none>
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] server lang: <none>
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] kex follows: False
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] Compression: none
2025-11-12T11:40:07.441 [DEBUG] [Thread-15104] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:40:07.448 [DEBUG] [Thread-15104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:40:07.448 [DEBUG] [Thread-15104] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:40:07.448 [DEBUG] [Thread-15104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:40:07.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:40:07.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:40:07.449 [DEBUG] [Thread-15104] [transport.py] [_log()] userauth is OK
2025-11-12T11:40:07.449 [DEBUG] [Thread-15104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:40:07.449 [DEBUG] [Thread-15104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:40:07.449 [DEBUG] [Thread-15104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:40:07.449 [DEBUG] [Thread-15104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:40:07.458 [INFO] [Thread-15104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:40:07.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:40:09.224 [DEBUG] [Thread-15104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:40:09.224 [DEBUG] [Thread-15104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:40:09.225 [DEBUG] [Thread-15104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:40:09.265 [DEBUG] [Thread-15104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:40:09.265 [DEBUG] [Thread-15104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:40:09.267 [DEBUG] [Thread-15104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:40:09.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:40:09.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:40:09.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:40:09.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:40:09.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:40:09.299 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:40:09.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.402520 -999.00  +24.30  26.74     18   -1.30 1 1 1 1 1   888    0 25.25 -5.96 ----- 27.0 26.7 273.8 40.2 29.8 -28.4 29.2 -26.3 28.1 -26.3 29.0 -25.2
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.402520
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:40:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:39:46', tmtdew=31.51, humidity=12.01, cloud=0.0, wind=27.51, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:39:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:40:09.300 [DEBUG] [Thread-15104] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:40:09.371 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:40:09.383 [DEBUG] [Thread-15107] [transport.py] [_log()] starting thread (client mode): 0x14920c10
2025-11-12T11:40:09.383 [DEBUG] [Thread-15107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:40:09.397 [DEBUG] [Thread-15107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:40:09.397 [INFO] [Thread-15107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] client lang: <none>
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] server lang: <none>
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] kex follows: False
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] Compression: none
2025-11-12T11:40:09.405 [DEBUG] [Thread-15107] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:40:09.460 [DEBUG] [Thread-15107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:40:09.460 [DEBUG] [Thread-15107] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:40:09.460 [DEBUG] [Thread-15107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:40:09.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:40:09.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:40:09.521 [DEBUG] [Thread-15107] [transport.py] [_log()] userauth is OK
2025-11-12T11:40:09.521 [DEBUG] [Thread-15107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:40:09.521 [DEBUG] [Thread-15107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:40:09.521 [DEBUG] [Thread-15107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:40:09.521 [DEBUG] [Thread-15107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:40:09.535 [INFO] [Thread-15107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:40:09.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:40:09.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:40:10.399 [DEBUG] [Thread-15107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:40:10.399 [DEBUG] [Thread-15107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:40:10.447 [DEBUG] [Thread-15107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:40:10.447 [DEBUG] [Thread-15107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:40:10.455 [DEBUG] [Thread-15107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:40:10.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:40:10.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:40: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-11-12T11:40:10.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:40:10.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:40:10.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:40:10.487 [DEBUG] [Thread-15107] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:40:11.180 [DEBUG] [Thread-15109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:40:26.227 [DEBUG] [Thread-15110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:40:30.081 [DEBUG] [Thread-15111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:40:40.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:40:40.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:40:40.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:40:41.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 40, 18), 31.54, 11.99, 0.0, 27.95, 25.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:40:41.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:40:18
2025-11-12T11:40:41.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:40:41.266 [DEBUG] [Thread-15112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:40:41.400 [DEBUG] [Thread-15113] [transport.py] [_log()] starting thread (client mode): 0x17398250
2025-11-12T11:40:41.400 [DEBUG] [Thread-15113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:40:41.420 [DEBUG] [Thread-15113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:40:41.420 [INFO] [Thread-15113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] client lang: <none>
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] server lang: <none>
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] kex follows: False
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] Compression: none
2025-11-12T11:40:41.422 [DEBUG] [Thread-15113] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:40:41.430 [DEBUG] [Thread-15113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:40:41.430 [DEBUG] [Thread-15113] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:40:41.430 [DEBUG] [Thread-15113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:40:41.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:40:41.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:40:41.432 [DEBUG] [Thread-15113] [transport.py] [_log()] userauth is OK
2025-11-12T11:40:41.432 [DEBUG] [Thread-15113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:40:41.432 [DEBUG] [Thread-15113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:40:41.432 [DEBUG] [Thread-15113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:40:41.432 [DEBUG] [Thread-15113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:40:41.451 [INFO] [Thread-15113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:40:41.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:40:42.105 [DEBUG] [Thread-15113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:40:42.106 [DEBUG] [Thread-15113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:40:42.106 [DEBUG] [Thread-15113] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:40:42.147 [DEBUG] [Thread-15113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:40:42.147 [DEBUG] [Thread-15113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:40:42.150 [DEBUG] [Thread-15113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:40:42.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:40:42.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:40:42.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:40:42.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:40:42.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:40:42.177 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:40:42.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:40:42.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:40:42.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:40:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.402866 -999.00  +24.30  23.10     18   -1.00 1 1 1 1 1   888    0 25.52 -2.39 ----- 23.0 23.1 273.4 31.5 29.8 -26.9 29.1 -25.1 27.9 -27.2 29.0 -23.9
2025-11-12T11:40:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:40:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:40:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.402866
2025-11-12T11:40:42.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:40:42.178 [DEBUG] [Thread-15113] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:40:42.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:40:42.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:40:42.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:40:42.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:40:42.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:40:18', tmtdew=31.54, humidity=11.99, cloud=0.0, wind=27.95, temperature=25.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:40:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:40:42.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:40:42.276 [DEBUG] [Thread-15116] [transport.py] [_log()] starting thread (client mode): 0x17360c70
2025-11-12T11:40:42.276 [DEBUG] [Thread-15116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:40:42.292 [DEBUG] [Thread-15116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:40:42.292 [INFO] [Thread-15116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:40:42.299 [DEBUG] [Thread-15116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:40:42.299 [DEBUG] [Thread-15116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:40:42.299 [DEBUG] [Thread-15116] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:40:42.299 [DEBUG] [Thread-15116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] client lang: <none>
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] server lang: <none>
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] kex follows: False
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] Compression: none
2025-11-12T11:40:42.300 [DEBUG] [Thread-15116] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:40:42.357 [DEBUG] [Thread-15116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:40:42.358 [DEBUG] [Thread-15116] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:40:42.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:40:42.359 [DEBUG] [Thread-15116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:40:42.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:40:42.414 [DEBUG] [Thread-15116] [transport.py] [_log()] userauth is OK
2025-11-12T11:40:42.414 [DEBUG] [Thread-15116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:40:42.415 [DEBUG] [Thread-15116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:40:42.415 [DEBUG] [Thread-15116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:40:42.415 [DEBUG] [Thread-15116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:40:42.433 [INFO] [Thread-15116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:40:42.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:40:42.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:40:43.263 [DEBUG] [Thread-15116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:40:43.263 [DEBUG] [Thread-15116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:40:43.311 [DEBUG] [Thread-15116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:40:43.311 [DEBUG] [Thread-15116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:40:43.320 [DEBUG] [Thread-15116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:40:43.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:40:43.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:40:43.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-11-12T11:40:43.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:40:43.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:40:43.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:40:43.357 [DEBUG] [Thread-15116] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:40:56.294 [DEBUG] [Thread-15118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:41:03.986 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:41:03.987 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:41:11.344 [DEBUG] [Thread-15119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:41:13.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:41:13.349 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:41:13.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-11-12T11:41:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 40, 50), 31.22, 12.08, 0.0, 24.1, 25.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:41:13.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:40:50
2025-11-12T11:41:14.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:41:14.232 [DEBUG] [Thread-15120] [transport.py] [_log()] starting thread (client mode): 0x173e8760
2025-11-12T11:41:14.232 [DEBUG] [Thread-15120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:41:14.252 [DEBUG] [Thread-15120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:41:14.252 [INFO] [Thread-15120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] client lang: <none>
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] server lang: <none>
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] kex follows: False
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] Compression: none
2025-11-12T11:41:14.255 [DEBUG] [Thread-15120] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:41:14.274 [DEBUG] [Thread-15120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:41:14.275 [DEBUG] [Thread-15120] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:41:14.275 [DEBUG] [Thread-15120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:41:14.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:41:14.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:41:14.277 [DEBUG] [Thread-15120] [transport.py] [_log()] userauth is OK
2025-11-12T11:41:14.277 [DEBUG] [Thread-15120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:41:14.277 [DEBUG] [Thread-15120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:41:14.278 [DEBUG] [Thread-15120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:41:14.278 [DEBUG] [Thread-15120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:41:14.302 [INFO] [Thread-15120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:41:14.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:41:14.925 [DEBUG] [Thread-15120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:41:14.925 [DEBUG] [Thread-15120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:41:14.926 [DEBUG] [Thread-15120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:41:14.967 [DEBUG] [Thread-15120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:41:14.967 [DEBUG] [Thread-15120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:41:14.970 [DEBUG] [Thread-15120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:41:14.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:41:14.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:41:14.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:41:14.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:41:14.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:41:14.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:41:14.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:41:14.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:41:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:41:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.403214 -999.00  +24.40  16.57     18   -1.20 1 1 1 1 1   888    0 25.35 0.52 ----- 12.9 16.6 271.8 28.7 29.9 -26.4 29.3 -24.2 28.1 -24.2 29.2 -23.4
2025-11-12T11:41:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:41:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:41:14.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.403214
2025-11-12T11:41:14.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:41:14.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:41:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:41:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:41:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:41:15.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:40:50', tmtdew=31.22, humidity=12.08, cloud=0.0, wind=24.1, temperature=25.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:40:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:41:15.000 [DEBUG] [Thread-15120] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:41:15.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:41:15.096 [DEBUG] [Thread-15123] [transport.py] [_log()] starting thread (client mode): 0x14921720
2025-11-12T11:41:15.096 [DEBUG] [Thread-15123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:41:15.111 [DEBUG] [Thread-15123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:41:15.111 [INFO] [Thread-15123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:41:15.119 [DEBUG] [Thread-15123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:41:15.119 [DEBUG] [Thread-15123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:41:15.119 [DEBUG] [Thread-15123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:41:15.119 [DEBUG] [Thread-15123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:41:15.119 [DEBUG] [Thread-15123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:41:15.120 [DEBUG] [Thread-15123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:41:15.120 [DEBUG] [Thread-15123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:41:15.120 [DEBUG] [Thread-15123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:41:15.120 [DEBUG] [Thread-15123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:41:15.120 [DEBUG] [Thread-15123] [transport.py] [_log()] client lang: <none>
2025-11-12T11:41:15.120 [DEBUG] [Thread-15123] [transport.py] [_log()] server lang: <none>
2025-11-12T11:41:15.120 [DEBUG] [Thread-15123] [transport.py] [_log()] kex follows: False
2025-11-12T11:41:15.120 [DEBUG] [Thread-15123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:41:15.121 [DEBUG] [Thread-15123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:41:15.121 [DEBUG] [Thread-15123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:41:15.121 [DEBUG] [Thread-15123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:41:15.121 [DEBUG] [Thread-15123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:41:15.121 [DEBUG] [Thread-15123] [transport.py] [_log()] Compression: none
2025-11-12T11:41:15.121 [DEBUG] [Thread-15123] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:41:15.178 [DEBUG] [Thread-15123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:41:15.179 [DEBUG] [Thread-15123] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:41:15.179 [DEBUG] [Thread-15123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:41:15.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:41:15.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:41:15.238 [DEBUG] [Thread-15123] [transport.py] [_log()] userauth is OK
2025-11-12T11:41:15.238 [DEBUG] [Thread-15123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:41:15.238 [DEBUG] [Thread-15123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:41:15.239 [DEBUG] [Thread-15123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:41:15.239 [DEBUG] [Thread-15123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:41:15.257 [INFO] [Thread-15123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:41:15.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:41:15.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:41:16.100 [DEBUG] [Thread-15123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:41:16.101 [DEBUG] [Thread-15123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:41:16.149 [DEBUG] [Thread-15123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:41:16.149 [DEBUG] [Thread-15123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:41:16.158 [DEBUG] [Thread-15123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:41:16.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:41:16.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-11-12T11:41:16.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-11-12T11:41:16.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:41:16.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:41:16.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:41:16.194 [DEBUG] [Thread-15123] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:41:26.376 [DEBUG] [Thread-15125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:41:30.114 [DEBUG] [Thread-15126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:41:41.416 [DEBUG] [Thread-15127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:41:46.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:41:46.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:41:46.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-11-12T11:41:46.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 41, 21), 31.0, 12.24, 0.0, 20.47, 25.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:41:46.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:41:21
2025-11-12T11:41:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:41:47.113 [DEBUG] [Thread-15128] [transport.py] [_log()] starting thread (client mode): 0x1737c0d0
2025-11-12T11:41:47.114 [DEBUG] [Thread-15128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:41:47.124 [DEBUG] [Thread-15128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:41:47.125 [INFO] [Thread-15128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] client lang: <none>
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] server lang: <none>
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] kex follows: False
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] Compression: none
2025-11-12T11:41:47.128 [DEBUG] [Thread-15128] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:41:47.145 [DEBUG] [Thread-15128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:41:47.145 [DEBUG] [Thread-15128] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:41:47.146 [DEBUG] [Thread-15128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:41:47.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:41:47.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:41:47.147 [DEBUG] [Thread-15128] [transport.py] [_log()] userauth is OK
2025-11-12T11:41:47.148 [DEBUG] [Thread-15128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:41:47.148 [DEBUG] [Thread-15128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:41:47.148 [DEBUG] [Thread-15128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:41:47.148 [DEBUG] [Thread-15128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:41:47.173 [INFO] [Thread-15128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:41:47.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:41:47.811 [DEBUG] [Thread-15128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:41:47.811 [DEBUG] [Thread-15128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:41:47.812 [DEBUG] [Thread-15128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:41:47.852 [DEBUG] [Thread-15128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:41:47.852 [DEBUG] [Thread-15128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:41:47.855 [DEBUG] [Thread-15128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:41:47.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:41:47.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:41:47.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:41:47.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:41:47.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:41:47.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:41:47.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:41:47.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:41:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:41:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.403561 -999.00  +24.70  14.96     18   -0.70 1 1 1 1 1   888    0 25.57 1.20 ----- 13.3 15.0 279.9 22.9 30.2 -24.2 29.4 -23.5 28.5 -23.8 29.3 -22.7
2025-11-12T11:41:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:41:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:41:47.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.403561
2025-11-12T11:41:47.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:41:47.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:41:47.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:41:47.884 [DEBUG] [Thread-15128] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:41:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:41:47.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:41:47.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:41:21', tmtdew=31.0, humidity=12.24, cloud=0.0, wind=20.47, temperature=25.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:41:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:41:47.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:41:47.979 [DEBUG] [Thread-15131] [transport.py] [_log()] starting thread (client mode): 0x14920580
2025-11-12T11:41:47.979 [DEBUG] [Thread-15131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:41:47.994 [DEBUG] [Thread-15131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:41:47.994 [INFO] [Thread-15131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:41:48.001 [DEBUG] [Thread-15131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:41:48.002 [DEBUG] [Thread-15131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:41:48.002 [DEBUG] [Thread-15131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:41:48.002 [DEBUG] [Thread-15131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:41:48.002 [DEBUG] [Thread-15131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:41:48.002 [DEBUG] [Thread-15131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:41:48.002 [DEBUG] [Thread-15131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:41:48.002 [DEBUG] [Thread-15131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] client lang: <none>
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] server lang: <none>
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] kex follows: False
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:41:48.003 [DEBUG] [Thread-15131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:41:48.004 [DEBUG] [Thread-15131] [transport.py] [_log()] Compression: none
2025-11-12T11:41:48.004 [DEBUG] [Thread-15131] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:41:48.062 [DEBUG] [Thread-15131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:41:48.063 [DEBUG] [Thread-15131] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:41:48.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:41:48.065 [DEBUG] [Thread-15131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:41:48.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:41:48.127 [DEBUG] [Thread-15131] [transport.py] [_log()] userauth is OK
2025-11-12T11:41:48.127 [DEBUG] [Thread-15131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:41:48.127 [DEBUG] [Thread-15131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:41:48.128 [DEBUG] [Thread-15131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:41:48.128 [DEBUG] [Thread-15131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:41:48.150 [INFO] [Thread-15131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:41:48.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:41:48.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:41:49.027 [DEBUG] [Thread-15131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:41:49.027 [DEBUG] [Thread-15131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:41:49.075 [DEBUG] [Thread-15131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:41:49.075 [DEBUG] [Thread-15131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:41:49.084 [DEBUG] [Thread-15131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:41:49.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:41:49.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-11-12T11:41:49.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-11-12T11:41:49.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:41:49.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:41:49.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:41:49.121 [DEBUG] [Thread-15131] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:41:56.454 [DEBUG] [Thread-15133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:42:04.128 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:42:04.129 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:42:11.514 [DEBUG] [Thread-15134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:42:19.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:42:19.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:42:19.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-11-12T11:42:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 41, 54), 31.23, 12.43, 0.0, 22.07, 25.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:42:19.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:41:54
2025-11-12T11:42:19.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:42:20.026 [DEBUG] [Thread-15135] [transport.py] [_log()] starting thread (client mode): 0x14983b50
2025-11-12T11:42:20.026 [DEBUG] [Thread-15135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:42:20.047 [DEBUG] [Thread-15135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:42:20.047 [INFO] [Thread-15135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] client lang: <none>
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] server lang: <none>
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] kex follows: False
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:42:20.050 [DEBUG] [Thread-15135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:42:20.051 [DEBUG] [Thread-15135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:42:20.051 [DEBUG] [Thread-15135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:42:20.051 [DEBUG] [Thread-15135] [transport.py] [_log()] Compression: none
2025-11-12T11:42:20.051 [DEBUG] [Thread-15135] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:42:20.063 [DEBUG] [Thread-15135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:42:20.064 [DEBUG] [Thread-15135] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:42:20.065 [DEBUG] [Thread-15135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:42:20.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:42:20.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:42:20.067 [DEBUG] [Thread-15135] [transport.py] [_log()] userauth is OK
2025-11-12T11:42:20.067 [DEBUG] [Thread-15135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:42:20.067 [DEBUG] [Thread-15135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:42:20.067 [DEBUG] [Thread-15135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:42:20.067 [DEBUG] [Thread-15135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:42:20.093 [INFO] [Thread-15135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:42:20.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:42:20.734 [DEBUG] [Thread-15135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:42:20.734 [DEBUG] [Thread-15135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:42:20.735 [DEBUG] [Thread-15135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:42:20.776 [DEBUG] [Thread-15135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:42:20.776 [DEBUG] [Thread-15135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:42:20.780 [DEBUG] [Thread-15135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:42:20.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:42:20.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:42:20.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:42:20.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:42:20.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:42:20.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:42:20.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:42:20.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:42:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:42:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.403908 -999.00  +25.20  30.00     18   -0.70 1 1 2 1 1   888    0 25.41 4.00 ----- 32.1 30.0 286.9 35.4 30.1 -26.1 29.4 -24.6 28.5 -24.0 29.3 -24.3
2025-11-12T11:42:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:42:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:42:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.403908
2025-11-12T11:42:20.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:42:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:42:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:42:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:42:20.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:42:20.806 [DEBUG] [Thread-15135] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:42:20.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:41:54', tmtdew=31.23, humidity=12.43, cloud=0.0, wind=22.07, temperature=25.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:41:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:42:20.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:42:20.902 [DEBUG] [Thread-15138] [transport.py] [_log()] starting thread (client mode): 0x17346290
2025-11-12T11:42:20.902 [DEBUG] [Thread-15138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:42:20.917 [DEBUG] [Thread-15138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:42:20.917 [INFO] [Thread-15138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:42:20.925 [DEBUG] [Thread-15138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:42:20.925 [DEBUG] [Thread-15138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:42:20.925 [DEBUG] [Thread-15138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:42:20.925 [DEBUG] [Thread-15138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:42:20.925 [DEBUG] [Thread-15138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] client lang: <none>
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] server lang: <none>
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] kex follows: False
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:42:20.926 [DEBUG] [Thread-15138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:42:20.927 [DEBUG] [Thread-15138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:42:20.927 [DEBUG] [Thread-15138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:42:20.927 [DEBUG] [Thread-15138] [transport.py] [_log()] Compression: none
2025-11-12T11:42:20.927 [DEBUG] [Thread-15138] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:42:20.986 [DEBUG] [Thread-15138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:42:20.987 [DEBUG] [Thread-15138] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:42:20.988 [DEBUG] [Thread-15138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:42:20.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:42:20.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:42:21.045 [DEBUG] [Thread-15138] [transport.py] [_log()] userauth is OK
2025-11-12T11:42:21.046 [DEBUG] [Thread-15138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:42:21.046 [DEBUG] [Thread-15138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:42:21.046 [DEBUG] [Thread-15138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:42:21.046 [DEBUG] [Thread-15138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:42:21.065 [INFO] [Thread-15138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:42:21.065 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:42:21.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:42:21.911 [DEBUG] [Thread-15138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:42:21.911 [DEBUG] [Thread-15138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:42:21.959 [DEBUG] [Thread-15138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:42:21.960 [DEBUG] [Thread-15138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:42:21.969 [DEBUG] [Thread-15138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:42:21.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:42:21.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-11-12T11:42:21.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:42:21.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:42:21.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:42:21.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:42:22.005 [DEBUG] [Thread-15138] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:42:26.550 [DEBUG] [Thread-15140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:42:30.147 [DEBUG] [Thread-15141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:42:41.596 [DEBUG] [Thread-15142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:42:52.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:42:52.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:42:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:42:52.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 42, 26), 31.16, 12.46, 0.0, 24.46, 25.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:42:52.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:42:26
2025-11-12T11:42:52.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:42:52.910 [DEBUG] [Thread-15143] [transport.py] [_log()] starting thread (client mode): 0x173473d0
2025-11-12T11:42:52.910 [DEBUG] [Thread-15143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:42:52.932 [DEBUG] [Thread-15143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:42:52.932 [INFO] [Thread-15143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:42:52.935 [DEBUG] [Thread-15143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:42:52.935 [DEBUG] [Thread-15143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:42:52.935 [DEBUG] [Thread-15143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:42:52.935 [DEBUG] [Thread-15143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] client lang: <none>
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] server lang: <none>
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] kex follows: False
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] Compression: none
2025-11-12T11:42:52.936 [DEBUG] [Thread-15143] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:42:52.947 [DEBUG] [Thread-15143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:42:52.947 [DEBUG] [Thread-15143] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:42:52.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:42:52.948 [DEBUG] [Thread-15143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:42:52.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:42:52.949 [DEBUG] [Thread-15143] [transport.py] [_log()] userauth is OK
2025-11-12T11:42:52.950 [DEBUG] [Thread-15143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:42:52.950 [DEBUG] [Thread-15143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:42:52.950 [DEBUG] [Thread-15143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:42:52.950 [DEBUG] [Thread-15143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:42:52.959 [INFO] [Thread-15143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:42:52.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:42:53.576 [DEBUG] [Thread-15143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:42:53.576 [DEBUG] [Thread-15143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:42:53.577 [DEBUG] [Thread-15143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:42:53.618 [DEBUG] [Thread-15143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:42:53.618 [DEBUG] [Thread-15143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:42:53.621 [DEBUG] [Thread-15143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:42:53.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:42:53.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:42:53.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:42:53.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:42:53.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:42:53.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:42:53.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:42:53.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:42:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:42:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.404256 -999.00  +25.90  16.80     17   -0.70 1 1 1 1 1   888    0 26.15 10.42 ----- 20.0 16.8 278.4 29.7 30.4 -24.4 29.6 -23.4 28.9 -23.0 29.6 -23.6
2025-11-12T11:42:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:42:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:42:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.404256
2025-11-12T11:42:53.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:42:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:42:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:42:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:42:53.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:42:53.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:42:26', tmtdew=31.16, humidity=12.46, cloud=0.0, wind=24.46, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:42:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:42:53.649 [DEBUG] [Thread-15143] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:42:53.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:42:53.746 [DEBUG] [Thread-15146] [transport.py] [_log()] starting thread (client mode): 0x149205e0
2025-11-12T11:42:53.747 [DEBUG] [Thread-15146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:42:53.762 [DEBUG] [Thread-15146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:42:53.763 [INFO] [Thread-15146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:42:53.770 [DEBUG] [Thread-15146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:42:53.770 [DEBUG] [Thread-15146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] client lang: <none>
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] server lang: <none>
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] kex follows: False
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] Compression: none
2025-11-12T11:42:53.771 [DEBUG] [Thread-15146] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:42:53.829 [DEBUG] [Thread-15146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:42:53.830 [DEBUG] [Thread-15146] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:42:53.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:42:53.831 [DEBUG] [Thread-15146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:42:53.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:42:53.889 [DEBUG] [Thread-15146] [transport.py] [_log()] userauth is OK
2025-11-12T11:42:53.890 [DEBUG] [Thread-15146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:42:53.890 [DEBUG] [Thread-15146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:42:53.890 [DEBUG] [Thread-15146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:42:53.890 [DEBUG] [Thread-15146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:42:53.910 [INFO] [Thread-15146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:42:53.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:42:53.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:42:54.763 [DEBUG] [Thread-15146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:42:54.763 [DEBUG] [Thread-15146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:42:54.812 [DEBUG] [Thread-15146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:42:54.812 [DEBUG] [Thread-15146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:42:54.821 [DEBUG] [Thread-15146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:42:54.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:42:54.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-11-12T11:42:54.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:42:54.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:42:54.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:42:54.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:42:54.858 [DEBUG] [Thread-15146] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:42:56.627 [DEBUG] [Thread-15148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:43:04.271 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:43:04.272 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:43:11.682 [DEBUG] [Thread-15149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:43:24.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:43:24.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:43:24.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-11-12T11:43:25.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 42, 58), 31.48, 12.02, 0.0, 29.66, 25.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:43:25.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:42:58
2025-11-12T11:43:25.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:43:25.783 [DEBUG] [Thread-15150] [transport.py] [_log()] starting thread (client mode): 0x173bf790
2025-11-12T11:43:25.783 [DEBUG] [Thread-15150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:43:25.803 [DEBUG] [Thread-15150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:43:25.803 [INFO] [Thread-15150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:43:25.807 [DEBUG] [Thread-15150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:43:25.807 [DEBUG] [Thread-15150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:43:25.807 [DEBUG] [Thread-15150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:43:25.807 [DEBUG] [Thread-15150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:43:25.807 [DEBUG] [Thread-15150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:43:25.807 [DEBUG] [Thread-15150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] client lang: <none>
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] server lang: <none>
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] kex follows: False
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] Compression: none
2025-11-12T11:43:25.808 [DEBUG] [Thread-15150] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:43:25.828 [DEBUG] [Thread-15150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:43:25.829 [DEBUG] [Thread-15150] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:43:25.829 [DEBUG] [Thread-15150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:43:25.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:43:25.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:43:25.831 [DEBUG] [Thread-15150] [transport.py] [_log()] userauth is OK
2025-11-12T11:43:25.832 [DEBUG] [Thread-15150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:43:25.832 [DEBUG] [Thread-15150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:43:25.832 [DEBUG] [Thread-15150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:43:25.832 [DEBUG] [Thread-15150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:43:25.857 [INFO] [Thread-15150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:43:25.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:43:26.485 [DEBUG] [Thread-15150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:43:26.486 [DEBUG] [Thread-15150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:43:26.486 [DEBUG] [Thread-15150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:43:26.527 [DEBUG] [Thread-15150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:43:26.527 [DEBUG] [Thread-15150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:43:26.530 [DEBUG] [Thread-15150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:43:26.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:43:26.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:43:26.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:43:26.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:43:26.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:43:26.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:43:26.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:43:26.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:43:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:43:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.404603 -999.00  +25.70  24.78     17   -0.80 1 1 1 1 1   888    0 26.06 17.38 ----- 21.8 24.8 273.2 35.5 30.4 -25.9 29.7 -24.3 28.8 -23.2 29.6 -24.2
2025-11-12T11:43:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:43:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:43:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.404603
2025-11-12T11:43:26.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:43:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:43:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:43:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:43:26.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:43:26.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:42:58', tmtdew=31.48, humidity=12.02, cloud=0.0, wind=29.66, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:42:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:43:26.560 [DEBUG] [Thread-15150] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:43:26.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:43:26.655 [DEBUG] [Thread-15153] [transport.py] [_log()] starting thread (client mode): 0x14954bb0
2025-11-12T11:43:26.656 [DEBUG] [Thread-15153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:43:26.670 [DEBUG] [Thread-15153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:43:26.670 [INFO] [Thread-15153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] client lang: <none>
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] server lang: <none>
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] kex follows: False
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:43:26.678 [DEBUG] [Thread-15153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:43:26.679 [DEBUG] [Thread-15153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:43:26.679 [DEBUG] [Thread-15153] [transport.py] [_log()] Compression: none
2025-11-12T11:43:26.679 [DEBUG] [Thread-15153] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:43:26.718 [DEBUG] [Thread-15155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:43:26.737 [DEBUG] [Thread-15153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:43:26.738 [DEBUG] [Thread-15153] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:43:26.738 [DEBUG] [Thread-15153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:43:26.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:43:26.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:43:26.800 [DEBUG] [Thread-15153] [transport.py] [_log()] userauth is OK
2025-11-12T11:43:26.800 [DEBUG] [Thread-15153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:43:26.800 [DEBUG] [Thread-15153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:43:26.800 [DEBUG] [Thread-15153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:43:26.800 [DEBUG] [Thread-15153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:43:26.819 [INFO] [Thread-15153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:43:26.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:43:26.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:43:27.654 [DEBUG] [Thread-15153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:43:27.654 [DEBUG] [Thread-15153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:43:27.702 [DEBUG] [Thread-15153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:43:27.702 [DEBUG] [Thread-15153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:43:27.711 [DEBUG] [Thread-15153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:43:27.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:43:27.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')
2025-11-12T11:43:27.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-11-12T11:43:27.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:43:27.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:43:27.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:43:27.748 [DEBUG] [Thread-15153] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:43:30.192 [DEBUG] [Thread-15156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:43:41.769 [DEBUG] [Thread-15157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:43:56.803 [DEBUG] [Thread-15158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:43:57.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:43:57.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:43:57.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-11-12T11:43:58.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 43, 30), 31.85, 11.78, 0.0, 32.13, 26.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:43:58.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:43:30
2025-11-12T11:43:58.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:43:58.705 [DEBUG] [Thread-15159] [transport.py] [_log()] starting thread (client mode): 0x173bf010
2025-11-12T11:43:58.705 [DEBUG] [Thread-15159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:43:58.718 [DEBUG] [Thread-15159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:43:58.719 [INFO] [Thread-15159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] client lang: <none>
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] server lang: <none>
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] kex follows: False
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] Compression: none
2025-11-12T11:43:58.722 [DEBUG] [Thread-15159] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:43:58.730 [DEBUG] [Thread-15159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:43:58.730 [DEBUG] [Thread-15159] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:43:58.730 [DEBUG] [Thread-15159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:43:58.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:43:58.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:43:58.731 [DEBUG] [Thread-15159] [transport.py] [_log()] userauth is OK
2025-11-12T11:43:58.731 [DEBUG] [Thread-15159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:43:58.731 [DEBUG] [Thread-15159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:43:58.731 [DEBUG] [Thread-15159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:43:58.731 [DEBUG] [Thread-15159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:43:58.744 [INFO] [Thread-15159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:43:58.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:43:59.404 [DEBUG] [Thread-15159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:43:59.405 [DEBUG] [Thread-15159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:43:59.405 [DEBUG] [Thread-15159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:43:59.445 [DEBUG] [Thread-15159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:43:59.445 [DEBUG] [Thread-15159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:43:59.448 [DEBUG] [Thread-15159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:43:59.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:43:59.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:43:59.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:43:59.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:43:59.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:43:59.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:43:59.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.405297 -999.00  +25.30  22.71     17   -0.90 1 1 1 1 1   888    0 25.90 25.75 ----- 21.7 22.7 287.8 33.9 30.4 -26.2 29.6 -25.0 28.9 -23.8 29.7 -24.8
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.405297
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:43:30', tmtdew=31.85, humidity=11.78, cloud=0.0, wind=32.13, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:43:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:43:59.469 [DEBUG] [Thread-15159] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:43:59.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:43:59.555 [DEBUG] [Thread-15162] [transport.py] [_log()] starting thread (client mode): 0x1737d120
2025-11-12T11:43:59.555 [DEBUG] [Thread-15162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:43:59.569 [DEBUG] [Thread-15162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:43:59.569 [INFO] [Thread-15162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:43:59.576 [DEBUG] [Thread-15162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] client lang: <none>
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] server lang: <none>
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] kex follows: False
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] Compression: none
2025-11-12T11:43:59.577 [DEBUG] [Thread-15162] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:43:59.631 [DEBUG] [Thread-15162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:43:59.632 [DEBUG] [Thread-15162] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:43:59.632 [DEBUG] [Thread-15162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:43:59.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:43:59.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:43:59.688 [DEBUG] [Thread-15162] [transport.py] [_log()] userauth is OK
2025-11-12T11:43:59.688 [DEBUG] [Thread-15162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:43:59.689 [DEBUG] [Thread-15162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:43:59.689 [DEBUG] [Thread-15162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:43:59.689 [DEBUG] [Thread-15162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:43:59.703 [INFO] [Thread-15162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:43:59.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:43:59.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:44:00.538 [DEBUG] [Thread-15162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:44:00.538 [DEBUG] [Thread-15162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:44:00.586 [DEBUG] [Thread-15162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:44:00.586 [DEBUG] [Thread-15162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:44:00.594 [DEBUG] [Thread-15162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:44:00.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:44:00.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:44:00.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-11-12T11:44:00.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:44:00.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:44:00.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:44:00.625 [DEBUG] [Thread-15162] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:44:04.419 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:44:04.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:44:11.837 [DEBUG] [Thread-15164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:44:26.891 [DEBUG] [Thread-15165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:44:30.225 [DEBUG] [Thread-15166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:44:30.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:44:30.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:44:30.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:44:31.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 44, 2), 32.39, 11.36, 0.0, 30.22, 26.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:44:31.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:44:02
2025-11-12T11:44:31.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:44:31.547 [DEBUG] [Thread-15167] [transport.py] [_log()] starting thread (client mode): 0x1737f310
2025-11-12T11:44:31.547 [DEBUG] [Thread-15167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:44:31.567 [DEBUG] [Thread-15167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:44:31.567 [INFO] [Thread-15167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] client lang: <none>
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] server lang: <none>
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] kex follows: False
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] Compression: none
2025-11-12T11:44:31.571 [DEBUG] [Thread-15167] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:44:31.591 [DEBUG] [Thread-15167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:44:31.592 [DEBUG] [Thread-15167] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:44:31.592 [DEBUG] [Thread-15167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:44:31.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:44:31.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:44:31.636 [DEBUG] [Thread-15167] [transport.py] [_log()] userauth is OK
2025-11-12T11:44:31.637 [DEBUG] [Thread-15167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:44:31.637 [DEBUG] [Thread-15167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:44:31.637 [DEBUG] [Thread-15167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:44:31.637 [DEBUG] [Thread-15167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:44:31.657 [INFO] [Thread-15167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:44:31.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:44:32.270 [DEBUG] [Thread-15167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:44:32.270 [DEBUG] [Thread-15167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:44:32.271 [DEBUG] [Thread-15167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:44:32.311 [DEBUG] [Thread-15167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:44:32.312 [DEBUG] [Thread-15167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:44:32.314 [DEBUG] [Thread-15167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:44:32.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:44:32.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:44:32.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:44:32.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:44:32.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:44:32.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:44:32.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:44:32.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:44:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:44:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.405645 -999.00  +25.40  23.36     17   -0.80 1 1 1 1 1   888    0 26.11 28.12 ----- 20.0 23.4 295.0 29.4 30.4 -26.1 29.7 -25.2 29.0 -23.7 29.8 -24.7
2025-11-12T11:44:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:44:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:44:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.405645
2025-11-12T11:44:32.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:44:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:44:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:44:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:44:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:44:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:44:02', tmtdew=32.39, humidity=11.36, cloud=0.0, wind=30.22, temperature=26.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:44:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:44:32.341 [DEBUG] [Thread-15167] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:44:32.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:44:32.436 [DEBUG] [Thread-15170] [transport.py] [_log()] starting thread (client mode): 0x1493e950
2025-11-12T11:44:32.436 [DEBUG] [Thread-15170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:44:32.450 [DEBUG] [Thread-15170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:44:32.451 [INFO] [Thread-15170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:44:32.458 [DEBUG] [Thread-15170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:44:32.458 [DEBUG] [Thread-15170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:44:32.458 [DEBUG] [Thread-15170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:44:32.458 [DEBUG] [Thread-15170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] client lang: <none>
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] server lang: <none>
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] kex follows: False
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] Compression: none
2025-11-12T11:44:32.459 [DEBUG] [Thread-15170] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:44:32.516 [DEBUG] [Thread-15170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:44:32.517 [DEBUG] [Thread-15170] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:44:32.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:44:32.518 [DEBUG] [Thread-15170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:44:32.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:44:32.576 [DEBUG] [Thread-15170] [transport.py] [_log()] userauth is OK
2025-11-12T11:44:32.577 [DEBUG] [Thread-15170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:44:32.577 [DEBUG] [Thread-15170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:44:32.577 [DEBUG] [Thread-15170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:44:32.577 [DEBUG] [Thread-15170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:44:32.603 [INFO] [Thread-15170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:44:32.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:44:32.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:44:33.463 [DEBUG] [Thread-15170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:44:33.464 [DEBUG] [Thread-15170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:44:33.511 [DEBUG] [Thread-15170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:44:33.512 [DEBUG] [Thread-15170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:44:33.521 [DEBUG] [Thread-15170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:44:33.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:44:33.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-11-12T11:44:33.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-11-12T11:44:33.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:44:33.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:44:33.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:44:33.556 [DEBUG] [Thread-15170] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:44:41.922 [DEBUG] [Thread-15172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:44:56.974 [DEBUG] [Thread-15173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:45:03.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:45:03.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:45:03.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-11-12T11:45:04.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 44, 34), 33.88, 10.33, 0.0, 32.43, 27.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:45:04.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:44:34
2025-11-12T11:45:04.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:45:04.466 [DEBUG] [Thread-15174] [transport.py] [_log()] starting thread (client mode): 0x173beda0
2025-11-12T11:45:04.466 [DEBUG] [Thread-15174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:45:04.485 [DEBUG] [Thread-15174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:45:04.485 [INFO] [Thread-15174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:45:04.486 [DEBUG] [Thread-15174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] client lang: <none>
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] server lang: <none>
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] kex follows: False
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] Compression: none
2025-11-12T11:45:04.487 [DEBUG] [Thread-15174] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:45:04.500 [DEBUG] [Thread-15174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:45:04.500 [DEBUG] [Thread-15174] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:45:04.501 [DEBUG] [Thread-15174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:45:04.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:45:04.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:45:04.503 [DEBUG] [Thread-15174] [transport.py] [_log()] userauth is OK
2025-11-12T11:45:04.503 [DEBUG] [Thread-15174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:45:04.503 [DEBUG] [Thread-15174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:45:04.503 [DEBUG] [Thread-15174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:45:04.503 [DEBUG] [Thread-15174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:45:04.518 [INFO] [Thread-15174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:45:04.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:45:04.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:45:04.563 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:45:07.987 [DEBUG] [Thread-15174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:45:07.987 [DEBUG] [Thread-15174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:45:07.987 [DEBUG] [Thread-15174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:45:08.028 [DEBUG] [Thread-15174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:45:08.028 [DEBUG] [Thread-15174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:45:08.030 [DEBUG] [Thread-15174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:45:08.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:45:08.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:45:08.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:45:08.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:45:08.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:45:08.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:45:08.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:45:08.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:45:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:45:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.405992 -999.00  +25.90  23.49     17   -0.40 1 1 1 1 1   888    0 26.42 30.39 ----- 26.2 23.5 287.4 31.4 30.5 -25.8 29.8 -24.8 29.0 -29.0 29.9 -24.5
2025-11-12T11:45:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:45:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:45:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.405992
2025-11-12T11:45:08.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:45:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:45:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:45:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:45:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:45:08.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:44:34', tmtdew=33.88, humidity=10.33, cloud=0.0, wind=32.43, temperature=27.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:44:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:45:08.091 [DEBUG] [Thread-15174] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:45:08.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:45:08.177 [DEBUG] [Thread-15177] [transport.py] [_log()] starting thread (client mode): 0x173bcee0
2025-11-12T11:45:08.177 [DEBUG] [Thread-15177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:45:08.191 [DEBUG] [Thread-15177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:45:08.191 [INFO] [Thread-15177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] client lang: <none>
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] server lang: <none>
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] kex follows: False
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] Compression: none
2025-11-12T11:45:08.199 [DEBUG] [Thread-15177] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:45:08.255 [DEBUG] [Thread-15177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:45:08.255 [DEBUG] [Thread-15177] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:45:08.255 [DEBUG] [Thread-15177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:45:08.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:45:08.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:45:08.313 [DEBUG] [Thread-15177] [transport.py] [_log()] userauth is OK
2025-11-12T11:45:08.313 [DEBUG] [Thread-15177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:45:08.313 [DEBUG] [Thread-15177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:45:08.313 [DEBUG] [Thread-15177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:45:08.313 [DEBUG] [Thread-15177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:45:08.332 [INFO] [Thread-15177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:45:08.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:45:08.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:45:09.192 [DEBUG] [Thread-15177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:45:09.192 [DEBUG] [Thread-15177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:45:09.240 [DEBUG] [Thread-15177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:45:09.240 [DEBUG] [Thread-15177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:45:09.249 [DEBUG] [Thread-15177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:45:09.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:45:09.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-11-12T11:45:09.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-11-12T11:45:09.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:45:09.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:45:09.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:45:09.288 [DEBUG] [Thread-15177] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:45:12.012 [DEBUG] [Thread-15179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:45:27.060 [DEBUG] [Thread-15180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:45:30.263 [DEBUG] [Thread-15181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:45:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:45:39.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:45:39.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-11-12T11:45:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 45, 6), 31.85, 11.54, 0.0, 28.44, 25.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:45:39.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:45:06
2025-11-12T11:45:40.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:45:40.250 [DEBUG] [Thread-15182] [transport.py] [_log()] starting thread (client mode): 0x173bdbd0
2025-11-12T11:45:40.250 [DEBUG] [Thread-15182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:45:40.271 [DEBUG] [Thread-15182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:45:40.271 [INFO] [Thread-15182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] client lang: <none>
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] server lang: <none>
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] kex follows: False
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:45:40.274 [DEBUG] [Thread-15182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:45:40.275 [DEBUG] [Thread-15182] [transport.py] [_log()] Compression: none
2025-11-12T11:45:40.275 [DEBUG] [Thread-15182] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:45:40.291 [DEBUG] [Thread-15182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:45:40.291 [DEBUG] [Thread-15182] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:45:40.291 [DEBUG] [Thread-15182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:45:40.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:45:40.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:45:40.292 [DEBUG] [Thread-15182] [transport.py] [_log()] userauth is OK
2025-11-12T11:45:40.292 [DEBUG] [Thread-15182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:45:40.292 [DEBUG] [Thread-15182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:45:40.292 [DEBUG] [Thread-15182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:45:40.292 [DEBUG] [Thread-15182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:45:40.307 [INFO] [Thread-15182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:45:40.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:45:40.938 [DEBUG] [Thread-15182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:45:40.939 [DEBUG] [Thread-15182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:45:40.939 [DEBUG] [Thread-15182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:45:40.980 [DEBUG] [Thread-15182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:45:40.980 [DEBUG] [Thread-15182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:45:40.983 [DEBUG] [Thread-15182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:45:40.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:45:40.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:45:40.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:45:40.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:45:41.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:45:41.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:45:41.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:45:41.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:45:41.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:45:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.406339 -999.00  +25.50  19.23     17   -0.60 1 1 1 1 1   888    0 26.46 34.73 ----- 19.4 19.2 295.6 32.3 30.4 -28.1 29.8 -26.0 28.9 -24.8 29.9 -26.5
2025-11-12T11:45:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:45:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:45:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.406339
2025-11-12T11:45:41.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:45:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:45:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:45:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:45:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:45:41.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:45:06', tmtdew=31.85, humidity=11.54, cloud=0.0, wind=28.44, temperature=25.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:45:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:45:41.012 [DEBUG] [Thread-15182] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:45:41.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:45:41.118 [DEBUG] [Thread-15185] [transport.py] [_log()] starting thread (client mode): 0x1737ce50
2025-11-12T11:45:41.119 [DEBUG] [Thread-15185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:45:41.133 [DEBUG] [Thread-15185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:45:41.133 [INFO] [Thread-15185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:45:41.141 [DEBUG] [Thread-15185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:45:41.141 [DEBUG] [Thread-15185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:45:41.141 [DEBUG] [Thread-15185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:45:41.141 [DEBUG] [Thread-15185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:45:41.141 [DEBUG] [Thread-15185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:45:41.141 [DEBUG] [Thread-15185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:45:41.141 [DEBUG] [Thread-15185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] client lang: <none>
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] server lang: <none>
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] kex follows: False
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] Compression: none
2025-11-12T11:45:41.142 [DEBUG] [Thread-15185] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:45:41.201 [DEBUG] [Thread-15185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:45:41.202 [DEBUG] [Thread-15185] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:45:41.202 [DEBUG] [Thread-15185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:45:41.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:45:41.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:45:41.257 [DEBUG] [Thread-15185] [transport.py] [_log()] userauth is OK
2025-11-12T11:45:41.257 [DEBUG] [Thread-15185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:45:41.257 [DEBUG] [Thread-15185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:45:41.257 [DEBUG] [Thread-15185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:45:41.257 [DEBUG] [Thread-15185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:45:41.275 [INFO] [Thread-15185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:45:41.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:45:41.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:45:42.096 [DEBUG] [Thread-15187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:45:42.109 [DEBUG] [Thread-15185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:45:42.109 [DEBUG] [Thread-15185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:45:42.157 [DEBUG] [Thread-15185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:45:42.158 [DEBUG] [Thread-15185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:45:42.169 [DEBUG] [Thread-15185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:45:42.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:45:42.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-11-12T11:45:42.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-11-12T11:45:42.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:45:42.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:45:42.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:45:42.208 [DEBUG] [Thread-15185] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:45:57.143 [DEBUG] [Thread-15188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:46:04.706 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:46:04.707 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:46:12.176 [DEBUG] [Thread-15189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:46:12.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:46:12.228 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:46:12.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-11-12T11:46:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 45, 38), 32.05, 11.64, 0.0, 30.44, 26.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:46:12.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:45:38
2025-11-12T11:46:12.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:46:13.113 [DEBUG] [Thread-15190] [transport.py] [_log()] starting thread (client mode): 0x1737e770
2025-11-12T11:46:13.113 [DEBUG] [Thread-15190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:46:13.134 [DEBUG] [Thread-15190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:46:13.134 [INFO] [Thread-15190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:46:13.137 [DEBUG] [Thread-15190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:46:13.137 [DEBUG] [Thread-15190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:46:13.137 [DEBUG] [Thread-15190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] client lang: <none>
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] server lang: <none>
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] kex follows: False
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] Compression: none
2025-11-12T11:46:13.138 [DEBUG] [Thread-15190] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:46:13.156 [DEBUG] [Thread-15190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:46:13.156 [DEBUG] [Thread-15190] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:46:13.157 [DEBUG] [Thread-15190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:46:13.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:46:13.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:46:13.159 [DEBUG] [Thread-15190] [transport.py] [_log()] userauth is OK
2025-11-12T11:46:13.159 [DEBUG] [Thread-15190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:46:13.159 [DEBUG] [Thread-15190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:46:13.159 [DEBUG] [Thread-15190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:46:13.159 [DEBUG] [Thread-15190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:46:13.184 [INFO] [Thread-15190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:46:13.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:46:14.010 [DEBUG] [Thread-15190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:46:14.010 [DEBUG] [Thread-15190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:46:14.011 [DEBUG] [Thread-15190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:46:14.051 [DEBUG] [Thread-15190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:46:14.052 [DEBUG] [Thread-15190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:46:14.055 [DEBUG] [Thread-15190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:46:14.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:46:14.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:46:14.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:46:14.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:46:14.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:46:14.078 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:46:14.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:46:14.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:46:14.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:46:14.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.406686 -999.00  +26.10  27.78     17   -0.50 1 1 1 1 1   888    0 26.58 37.54 ----- 24.8 27.8 286.0 30.7 30.7 -25.6 30.0 -23.9 29.2 -26.3 30.1 -23.5
2025-11-12T11:46:14.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:46:14.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:46:14.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.406686
2025-11-12T11:46:14.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:46:14.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:46:14.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:46:14.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:46:14.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:46:14.080 [DEBUG] [Thread-15190] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:46:14.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:45:38', tmtdew=32.05, humidity=11.64, cloud=0.0, wind=30.44, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:45:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:46: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-11-12T11:46:14.174 [DEBUG] [Thread-15193] [transport.py] [_log()] starting thread (client mode): 0x173e8910
2025-11-12T11:46:14.174 [DEBUG] [Thread-15193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:46:14.195 [DEBUG] [Thread-15193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:46:14.195 [INFO] [Thread-15193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:46:14.202 [DEBUG] [Thread-15193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:46:14.202 [DEBUG] [Thread-15193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] client lang: <none>
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] server lang: <none>
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] kex follows: False
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:46:14.203 [DEBUG] [Thread-15193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:46:14.204 [DEBUG] [Thread-15193] [transport.py] [_log()] Compression: none
2025-11-12T11:46:14.204 [DEBUG] [Thread-15193] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:46:14.261 [DEBUG] [Thread-15193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:46:14.262 [DEBUG] [Thread-15193] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:46:14.262 [DEBUG] [Thread-15193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:46:14.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:46:14.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:46:14.317 [DEBUG] [Thread-15193] [transport.py] [_log()] userauth is OK
2025-11-12T11:46:14.317 [DEBUG] [Thread-15193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:46:14.317 [DEBUG] [Thread-15193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:46:14.317 [DEBUG] [Thread-15193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:46:14.318 [DEBUG] [Thread-15193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:46:14.336 [INFO] [Thread-15193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:46:14.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:46:14.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:46:15.199 [DEBUG] [Thread-15193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:46:15.199 [DEBUG] [Thread-15193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:46:15.246 [DEBUG] [Thread-15193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:46:15.247 [DEBUG] [Thread-15193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:46:15.256 [DEBUG] [Thread-15193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:46:15.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:46:15.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-11-12T11:46:15.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-11-12T11:46:15.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:46:15.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:46:15.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:46:15.292 [DEBUG] [Thread-15193] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:46:27.214 [DEBUG] [Thread-15195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:46:30.293 [DEBUG] [Thread-15196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:46:42.269 [DEBUG] [Thread-15197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:46:45.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:46:45.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:46:45.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-11-12T11:46:45.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 46, 42), 32.66, 10.9, 0.0, 20.52, 26.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:46:45.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:46:42
2025-11-12T11:46:46.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:46:46.186 [DEBUG] [Thread-15198] [transport.py] [_log()] starting thread (client mode): 0x173bf580
2025-11-12T11:46:46.186 [DEBUG] [Thread-15198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:46:46.206 [DEBUG] [Thread-15198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:46:46.207 [INFO] [Thread-15198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:46:46.209 [DEBUG] [Thread-15198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] client lang: <none>
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] server lang: <none>
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] kex follows: False
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] Compression: none
2025-11-12T11:46:46.210 [DEBUG] [Thread-15198] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:46:46.232 [DEBUG] [Thread-15198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:46:46.232 [DEBUG] [Thread-15198] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:46:46.233 [DEBUG] [Thread-15198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:46:46.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:46:46.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:46:46.235 [DEBUG] [Thread-15198] [transport.py] [_log()] userauth is OK
2025-11-12T11:46:46.235 [DEBUG] [Thread-15198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:46:46.235 [DEBUG] [Thread-15198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:46:46.235 [DEBUG] [Thread-15198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:46:46.235 [DEBUG] [Thread-15198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:46:46.261 [INFO] [Thread-15198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:46:46.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:46:46.873 [DEBUG] [Thread-15198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:46:46.874 [DEBUG] [Thread-15198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:46:46.874 [DEBUG] [Thread-15198] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:46:46.915 [DEBUG] [Thread-15198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:46:46.915 [DEBUG] [Thread-15198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:46:46.918 [DEBUG] [Thread-15198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:46:46.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:46:46.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:46:46.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:46:46.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:46:46.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:46:46.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:46:46.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:46:46.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:46:46.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:46:46.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.407033 -999.00  +25.80  23.36     16   -1.20 1 1 1 1 1   888    0 27.11 39.19 ----- 25.0 23.4 288.6 32.4 30.7 -26.3 30.0 -24.9 29.3 -23.8 30.1 -24.5
2025-11-12T11:46:46.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:46:46.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:46:46.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.407033
2025-11-12T11:46:46.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:46:46.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:46:46.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:46:46.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:46:46.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:46:46.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:46:42', tmtdew=32.66, humidity=10.9, cloud=0.0, wind=20.52, temperature=26.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:46:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:46:46.945 [DEBUG] [Thread-15198] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:46:47.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:46:47.040 [DEBUG] [Thread-15201] [transport.py] [_log()] starting thread (client mode): 0x17399930
2025-11-12T11:46:47.040 [DEBUG] [Thread-15201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:46:47.055 [DEBUG] [Thread-15201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:46:47.055 [INFO] [Thread-15201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:46:47.063 [DEBUG] [Thread-15201] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:46:47.063 [DEBUG] [Thread-15201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:46:47.063 [DEBUG] [Thread-15201] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:46:47.063 [DEBUG] [Thread-15201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] client lang: <none>
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] server lang: <none>
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] kex follows: False
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] Compression: none
2025-11-12T11:46:47.064 [DEBUG] [Thread-15201] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:46:47.122 [DEBUG] [Thread-15201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:46:47.123 [DEBUG] [Thread-15201] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:46:47.124 [DEBUG] [Thread-15201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:46:47.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:46:47.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:46:47.185 [DEBUG] [Thread-15201] [transport.py] [_log()] userauth is OK
2025-11-12T11:46:47.185 [DEBUG] [Thread-15201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:46:47.185 [DEBUG] [Thread-15201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:46:47.185 [DEBUG] [Thread-15201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:46:47.185 [DEBUG] [Thread-15201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:46:47.205 [INFO] [Thread-15201] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:46:47.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:46:47.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:46:48.068 [DEBUG] [Thread-15201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:46:48.068 [DEBUG] [Thread-15201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:46:48.116 [DEBUG] [Thread-15201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:46:48.116 [DEBUG] [Thread-15201] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:46:48.125 [DEBUG] [Thread-15201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:46:48.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:46: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')
2025-11-12T11:46:48.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:46:48.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:46:48.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:46:48.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:46:48.161 [DEBUG] [Thread-15201] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:46:57.308 [DEBUG] [Thread-15203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:47:04.849 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:47:04.850 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:47:12.356 [DEBUG] [Thread-15204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:47:18.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:47:18.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:47:18.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-11-12T11:47:18.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 47, 14), 32.41, 11.09, 0.0, 21.72, 26.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:47:18.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:47:14
2025-11-12T11:47:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:47:19.054 [DEBUG] [Thread-15205] [transport.py] [_log()] starting thread (client mode): 0x1739a080
2025-11-12T11:47:19.055 [DEBUG] [Thread-15205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:47:19.074 [DEBUG] [Thread-15205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:47:19.075 [INFO] [Thread-15205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:47:19.077 [DEBUG] [Thread-15205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] client lang: <none>
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] server lang: <none>
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] kex follows: False
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] Compression: none
2025-11-12T11:47:19.078 [DEBUG] [Thread-15205] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:47:19.098 [DEBUG] [Thread-15205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:47:19.099 [DEBUG] [Thread-15205] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:47:19.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:47:19.100 [DEBUG] [Thread-15205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:47:19.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:47:19.102 [DEBUG] [Thread-15205] [transport.py] [_log()] userauth is OK
2025-11-12T11:47:19.102 [DEBUG] [Thread-15205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:47:19.102 [DEBUG] [Thread-15205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:47:19.103 [DEBUG] [Thread-15205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:47:19.103 [DEBUG] [Thread-15205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:47:19.127 [INFO] [Thread-15205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:47:19.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:47:19.891 [DEBUG] [Thread-15205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:47:19.891 [DEBUG] [Thread-15205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:47:19.891 [DEBUG] [Thread-15205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:47:19.931 [DEBUG] [Thread-15205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:47:19.932 [DEBUG] [Thread-15205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:47:19.935 [DEBUG] [Thread-15205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:47:19.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:47:19.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:47:19.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:47:19.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:47:19.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:47:19.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:47:19.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:47:19.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:47:19.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:47:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.407381 -999.00  +25.40  23.35     17   -1.10 1 1 1 1 1   888    0 26.68 38.23 ----- 26.8 23.4 289.8 31.2 30.7 -26.9 30.0 -25.4 29.3 -23.6 30.1 -25.0
2025-11-12T11:47:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:47:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:47:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.407381
2025-11-12T11:47:19.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:47:19.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:47:19.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:47:19.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:47:19.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:47:19.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:47:14', tmtdew=32.41, humidity=11.09, cloud=0.0, wind=21.72, temperature=26.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:46:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:47:19.961 [DEBUG] [Thread-15205] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:47:20.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:47:20.056 [DEBUG] [Thread-15208] [transport.py] [_log()] starting thread (client mode): 0x173452d0
2025-11-12T11:47:20.056 [DEBUG] [Thread-15208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:47:20.072 [DEBUG] [Thread-15208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:47:20.072 [INFO] [Thread-15208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:47:20.079 [DEBUG] [Thread-15208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:47:20.079 [DEBUG] [Thread-15208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:47:20.079 [DEBUG] [Thread-15208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:47:20.079 [DEBUG] [Thread-15208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] client lang: <none>
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] server lang: <none>
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] kex follows: False
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] Compression: none
2025-11-12T11:47:20.080 [DEBUG] [Thread-15208] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:47:20.136 [DEBUG] [Thread-15208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:47:20.137 [DEBUG] [Thread-15208] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:47:20.137 [DEBUG] [Thread-15208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:47:20.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:47:20.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:47:20.193 [DEBUG] [Thread-15208] [transport.py] [_log()] userauth is OK
2025-11-12T11:47:20.193 [DEBUG] [Thread-15208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:47:20.193 [DEBUG] [Thread-15208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:47:20.193 [DEBUG] [Thread-15208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:47:20.193 [DEBUG] [Thread-15208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:47:20.215 [INFO] [Thread-15208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:47:20.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:47:20.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:47:21.035 [DEBUG] [Thread-15208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:47:21.035 [DEBUG] [Thread-15208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:47:21.084 [DEBUG] [Thread-15208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:47:21.084 [DEBUG] [Thread-15208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:47:21.093 [DEBUG] [Thread-15208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:47:21.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:47:21.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-11-12T11:47:21.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:47:21.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:47:21.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:47:21.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:47:21.131 [DEBUG] [Thread-15208] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:47:27.389 [DEBUG] [Thread-15210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:47:30.327 [DEBUG] [Thread-15211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:47:42.451 [DEBUG] [Thread-15212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:47:51.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:47:51.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:47:51.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-11-12T11:47:51.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 47, 46), 31.55, 11.79, 0.0, 19.67, 25.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:47:51.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:47:46
2025-11-12T11:47:51.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:47:52.040 [DEBUG] [Thread-15213] [transport.py] [_log()] starting thread (client mode): 0x17399fc0
2025-11-12T11:47:52.040 [DEBUG] [Thread-15213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:47:52.061 [DEBUG] [Thread-15213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:47:52.061 [INFO] [Thread-15213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] client lang: <none>
2025-11-12T11:47:52.064 [DEBUG] [Thread-15213] [transport.py] [_log()] server lang: <none>
2025-11-12T11:47:52.065 [DEBUG] [Thread-15213] [transport.py] [_log()] kex follows: False
2025-11-12T11:47:52.065 [DEBUG] [Thread-15213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:47:52.065 [DEBUG] [Thread-15213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:47:52.065 [DEBUG] [Thread-15213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:47:52.065 [DEBUG] [Thread-15213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:47:52.065 [DEBUG] [Thread-15213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:47:52.065 [DEBUG] [Thread-15213] [transport.py] [_log()] Compression: none
2025-11-12T11:47:52.065 [DEBUG] [Thread-15213] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:47:52.080 [DEBUG] [Thread-15213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:47:52.080 [DEBUG] [Thread-15213] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:47:52.081 [DEBUG] [Thread-15213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:47:52.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:47:52.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:47:52.081 [DEBUG] [Thread-15213] [transport.py] [_log()] userauth is OK
2025-11-12T11:47:52.081 [DEBUG] [Thread-15213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:47:52.081 [DEBUG] [Thread-15213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:47:52.081 [DEBUG] [Thread-15213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:47:52.081 [DEBUG] [Thread-15213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:47:52.091 [INFO] [Thread-15213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:47:52.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:47:52.749 [DEBUG] [Thread-15213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:47:52.749 [DEBUG] [Thread-15213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:47:52.749 [DEBUG] [Thread-15213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:47:52.791 [DEBUG] [Thread-15213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:47:52.791 [DEBUG] [Thread-15213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:47:52.794 [DEBUG] [Thread-15213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:47:52.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:47:52.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:47:52.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:47:52.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:47:52.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:47:52.820 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:47:52.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:47:52.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.407728 -999.00  +25.50  17.97     18   -0.40 1 1 1 1 1   888    0 27.18 37.85 ----- 22.7 18.0 311.4 28.3 30.9 -24.4 30.1 -23.5 29.5 -24.5 30.2 -23.1
2025-11-12T11:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:47:52.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.407728
2025-11-12T11:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:47:52.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:47:46', tmtdew=31.55, humidity=11.79, cloud=0.0, wind=19.67, temperature=25.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:47:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:47:52.823 [DEBUG] [Thread-15213] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:47:52.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:47:52.918 [DEBUG] [Thread-15216] [transport.py] [_log()] starting thread (client mode): 0x14956b00
2025-11-12T11:47:52.918 [DEBUG] [Thread-15216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:47:52.933 [DEBUG] [Thread-15216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:47:52.933 [INFO] [Thread-15216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:47:52.940 [DEBUG] [Thread-15216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] client lang: <none>
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] server lang: <none>
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] kex follows: False
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] Compression: none
2025-11-12T11:47:52.941 [DEBUG] [Thread-15216] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:47:53.000 [DEBUG] [Thread-15216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:47:53.001 [DEBUG] [Thread-15216] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:47:53.001 [DEBUG] [Thread-15216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:47:53.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:47:53.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:47:53.057 [DEBUG] [Thread-15216] [transport.py] [_log()] userauth is OK
2025-11-12T11:47:53.057 [DEBUG] [Thread-15216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:47:53.057 [DEBUG] [Thread-15216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:47:53.057 [DEBUG] [Thread-15216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:47:53.057 [DEBUG] [Thread-15216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:47:53.077 [INFO] [Thread-15216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:47:53.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:47:53.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:47:53.963 [DEBUG] [Thread-15216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:47:53.963 [DEBUG] [Thread-15216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:47:54.011 [DEBUG] [Thread-15216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:47:54.012 [DEBUG] [Thread-15216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:47:54.021 [DEBUG] [Thread-15216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:47:54.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:47:54.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-11-12T11:47:54.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-11-12T11:47:54.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:47:54.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:47:54.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:47:54.056 [DEBUG] [Thread-15216] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:47:57.483 [DEBUG] [Thread-15218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:48:04.991 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:48:04.993 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:48:12.541 [DEBUG] [Thread-15219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:48:24.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:48:24.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:48:24.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-11-12T11:48:24.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 48, 18), 31.56, 11.79, 0.0, 17.47, 25.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:48:24.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:48:18
2025-11-12T11:48:24.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:48:24.961 [DEBUG] [Thread-15220] [transport.py] [_log()] starting thread (client mode): 0x14957460
2025-11-12T11:48:24.961 [DEBUG] [Thread-15220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:48:24.981 [DEBUG] [Thread-15220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:48:24.982 [INFO] [Thread-15220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:48:24.985 [DEBUG] [Thread-15220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] client lang: <none>
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] server lang: <none>
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] kex follows: False
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] Compression: none
2025-11-12T11:48:24.986 [DEBUG] [Thread-15220] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:48:25.003 [DEBUG] [Thread-15220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:48:25.004 [DEBUG] [Thread-15220] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:48:25.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:48:25.005 [DEBUG] [Thread-15220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:48:25.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:48:25.007 [DEBUG] [Thread-15220] [transport.py] [_log()] userauth is OK
2025-11-12T11:48:25.007 [DEBUG] [Thread-15220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:48:25.007 [DEBUG] [Thread-15220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:48:25.007 [DEBUG] [Thread-15220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:48:25.008 [DEBUG] [Thread-15220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:48:25.043 [INFO] [Thread-15220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:48:25.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:48:25.691 [DEBUG] [Thread-15220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:48:25.691 [DEBUG] [Thread-15220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:48:25.691 [DEBUG] [Thread-15220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:48:25.732 [DEBUG] [Thread-15220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:48:25.732 [DEBUG] [Thread-15220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:48:25.735 [DEBUG] [Thread-15220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:48:25.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:48:25.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:48:25.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:48:25.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:48:25.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:48:25.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:48:25.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.408422 -999.00  +25.60  28.60     17   -0.50 1 2 1 1 1   888    0 26.68 33.43 ----- 25.4 28.6 297.6 33.0 31.4 -24.8 30.5 -23.2 29.8 -22.7 30.6 -22.7
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.408422
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T11:48:25.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:48:18', tmtdew=31.56, humidity=11.79, cloud=0.0, wind=17.47, temperature=25.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:48:07.661', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:48:25.755 [DEBUG] [Thread-15220] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:48:25.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:48:25.840 [DEBUG] [Thread-15223] [transport.py] [_log()] starting thread (client mode): 0x173e9600
2025-11-12T11:48:25.840 [DEBUG] [Thread-15223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:48:25.855 [DEBUG] [Thread-15223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:48:25.855 [INFO] [Thread-15223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] client lang: <none>
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] server lang: <none>
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] kex follows: False
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] Compression: none
2025-11-12T11:48:25.863 [DEBUG] [Thread-15223] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:48:25.919 [DEBUG] [Thread-15223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:48:25.919 [DEBUG] [Thread-15223] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:48:25.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:48:25.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:48:25.920 [DEBUG] [Thread-15223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:48:25.976 [DEBUG] [Thread-15223] [transport.py] [_log()] userauth is OK
2025-11-12T11:48:25.976 [DEBUG] [Thread-15223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:48:25.976 [DEBUG] [Thread-15223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:48:25.976 [DEBUG] [Thread-15223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:48:25.976 [DEBUG] [Thread-15223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:48:25.991 [INFO] [Thread-15223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:48:25.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:48:25.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:48:26.842 [DEBUG] [Thread-15223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:48:26.842 [DEBUG] [Thread-15223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:48:26.890 [DEBUG] [Thread-15223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:48:26.890 [DEBUG] [Thread-15223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:48:26.898 [DEBUG] [Thread-15223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:48:26.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:48:26.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-11-12T11:48:26.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-11-12T11:48:26.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:48:26.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:48:26.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:48:26.930 [DEBUG] [Thread-15223] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:48:27.575 [DEBUG] [Thread-15225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:48:30.359 [DEBUG] [Thread-15226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:48:42.623 [DEBUG] [Thread-15227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:48:56.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:48:56.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:48:56.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-11-12T11:48:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 48, 50), 31.14, 12.54, 0.0, 19.83, 25.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:48:57.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:48:50
2025-11-12T11:48:57.655 [DEBUG] [Thread-15228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:48:57.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:48:57.842 [DEBUG] [Thread-15229] [transport.py] [_log()] starting thread (client mode): 0x1737c280
2025-11-12T11:48:57.842 [DEBUG] [Thread-15229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:48:57.862 [DEBUG] [Thread-15229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:48:57.863 [INFO] [Thread-15229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:48:57.866 [DEBUG] [Thread-15229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:48:57.866 [DEBUG] [Thread-15229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:48:57.866 [DEBUG] [Thread-15229] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] client lang: <none>
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] server lang: <none>
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] kex follows: False
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] Compression: none
2025-11-12T11:48:57.867 [DEBUG] [Thread-15229] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:48:57.884 [DEBUG] [Thread-15229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:48:57.884 [DEBUG] [Thread-15229] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:48:57.885 [DEBUG] [Thread-15229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:48:57.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:48:57.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:48:57.887 [DEBUG] [Thread-15229] [transport.py] [_log()] userauth is OK
2025-11-12T11:48:57.887 [DEBUG] [Thread-15229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:48:57.887 [DEBUG] [Thread-15229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:48:57.887 [DEBUG] [Thread-15229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:48:57.888 [DEBUG] [Thread-15229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:48:57.912 [INFO] [Thread-15229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:48:57.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:48:58.559 [DEBUG] [Thread-15229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:48:58.559 [DEBUG] [Thread-15229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:48:58.560 [DEBUG] [Thread-15229] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:48:58.600 [DEBUG] [Thread-15229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:48:58.600 [DEBUG] [Thread-15229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:48:58.603 [DEBUG] [Thread-15229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:48:58.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:48:58.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:48:58.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:48:58.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:48:58.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:48:58.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:48:58.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:48:58.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:48:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:48:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.408769 -999.00  +25.10  26.09     18   -0.30 1 1 1 1 1   888    0 27.13 31.40 ----- 23.2 26.1 290.0 29.6 31.4 -23.8 30.6 -23.2 29.9 -25.4 30.7 -22.4
2025-11-12T11:48:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:48:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:48:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.408769
2025-11-12T11:48:58.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:48:58.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:48:58.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:48:58.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:48:58.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:48:58.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:48:50', tmtdew=31.14, humidity=12.54, cloud=0.0, wind=19.83, temperature=25.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:48:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:48:58.630 [DEBUG] [Thread-15229] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:48:58.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:48:58.727 [DEBUG] [Thread-15232] [transport.py] [_log()] starting thread (client mode): 0x1737d960
2025-11-12T11:48:58.727 [DEBUG] [Thread-15232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:48:58.742 [DEBUG] [Thread-15232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:48:58.742 [INFO] [Thread-15232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] client lang: <none>
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] server lang: <none>
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] kex follows: False
2025-11-12T11:48:58.750 [DEBUG] [Thread-15232] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:48:58.751 [DEBUG] [Thread-15232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:48:58.751 [DEBUG] [Thread-15232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:48:58.751 [DEBUG] [Thread-15232] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:48:58.751 [DEBUG] [Thread-15232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:48:58.751 [DEBUG] [Thread-15232] [transport.py] [_log()] Compression: none
2025-11-12T11:48:58.751 [DEBUG] [Thread-15232] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:48:58.808 [DEBUG] [Thread-15232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:48:58.809 [DEBUG] [Thread-15232] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:48:58.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:48:58.810 [DEBUG] [Thread-15232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:48:58.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:48:58.864 [DEBUG] [Thread-15232] [transport.py] [_log()] userauth is OK
2025-11-12T11:48:58.864 [DEBUG] [Thread-15232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:48:58.864 [DEBUG] [Thread-15232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:48:58.865 [DEBUG] [Thread-15232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:48:58.865 [DEBUG] [Thread-15232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:48:58.888 [INFO] [Thread-15232] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:48:58.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:48:58.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:48:59.714 [DEBUG] [Thread-15232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:48:59.715 [DEBUG] [Thread-15232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:48:59.763 [DEBUG] [Thread-15232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:48:59.763 [DEBUG] [Thread-15232] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:48:59.772 [DEBUG] [Thread-15232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:48:59.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:48:59.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-11-12T11:48:59.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-11-12T11:48:59.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:48:59.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:48:59.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:48:59.809 [DEBUG] [Thread-15232] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:49:05.134 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:49:05.135 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:49:12.686 [DEBUG] [Thread-15234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:49:27.738 [DEBUG] [Thread-15235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:49:29.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:49:29.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:49:29.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-11-12T11:49:30.389 [DEBUG] [Thread-15236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:49:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 49, 22), 30.84, 12.84, 0.0, 21.19, 25.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:49:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:49:22
2025-11-12T11:49:30.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:49:30.730 [DEBUG] [Thread-15237] [transport.py] [_log()] starting thread (client mode): 0x1737d240
2025-11-12T11:49:30.730 [DEBUG] [Thread-15237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:49:30.750 [DEBUG] [Thread-15237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:49:30.750 [INFO] [Thread-15237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] client lang: <none>
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] server lang: <none>
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] kex follows: False
2025-11-12T11:49:30.753 [DEBUG] [Thread-15237] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:49:30.754 [DEBUG] [Thread-15237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:49:30.754 [DEBUG] [Thread-15237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:49:30.754 [DEBUG] [Thread-15237] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:49:30.754 [DEBUG] [Thread-15237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:49:30.754 [DEBUG] [Thread-15237] [transport.py] [_log()] Compression: none
2025-11-12T11:49:30.754 [DEBUG] [Thread-15237] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:49:30.772 [DEBUG] [Thread-15237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:49:30.773 [DEBUG] [Thread-15237] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:49:30.773 [DEBUG] [Thread-15237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:49:30.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:49:30.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:49:30.775 [DEBUG] [Thread-15237] [transport.py] [_log()] userauth is OK
2025-11-12T11:49:30.775 [DEBUG] [Thread-15237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:49:30.775 [DEBUG] [Thread-15237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:49:30.776 [DEBUG] [Thread-15237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:49:30.776 [DEBUG] [Thread-15237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:49:30.799 [INFO] [Thread-15237] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:49:30.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:49:31.412 [DEBUG] [Thread-15237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:49:31.413 [DEBUG] [Thread-15237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:49:31.413 [DEBUG] [Thread-15237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:49:31.453 [DEBUG] [Thread-15237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:49:31.454 [DEBUG] [Thread-15237] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:49:31.456 [DEBUG] [Thread-15237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:49:31.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:49:31.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:49:31.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:49:31.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:49:31.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:49:31.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:49:31.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:49:31.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:49:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:49:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.409117 -999.00  +25.20  26.20     19   +0.10 1 1 1 1 1   888    0 26.19 27.92 ----- 26.7 26.2 299.0 30.5 31.6 -23.7 30.7 -22.8 30.0 -25.4 30.8 -22.1
2025-11-12T11:49:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:49:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:49:31.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.409117
2025-11-12T11:49:31.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:49:31.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:49:31.479 [DEBUG] [Thread-15237] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:49:31.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:49:31.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:49:31.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:49:31.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:49:22', tmtdew=30.84, humidity=12.84, cloud=0.0, wind=21.19, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:49:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:49:31.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:49:31.575 [DEBUG] [Thread-15240] [transport.py] [_log()] starting thread (client mode): 0x17399cc0
2025-11-12T11:49:31.575 [DEBUG] [Thread-15240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:49:31.590 [DEBUG] [Thread-15240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:49:31.590 [INFO] [Thread-15240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:49:31.598 [DEBUG] [Thread-15240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:49:31.599 [DEBUG] [Thread-15240] [transport.py] [_log()] client lang: <none>
2025-11-12T11:49:31.599 [DEBUG] [Thread-15240] [transport.py] [_log()] server lang: <none>
2025-11-12T11:49:31.599 [DEBUG] [Thread-15240] [transport.py] [_log()] kex follows: False
2025-11-12T11:49:31.599 [DEBUG] [Thread-15240] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:49:31.599 [DEBUG] [Thread-15240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:49:31.599 [DEBUG] [Thread-15240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:49:31.599 [DEBUG] [Thread-15240] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:49:31.599 [DEBUG] [Thread-15240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:49:31.600 [DEBUG] [Thread-15240] [transport.py] [_log()] Compression: none
2025-11-12T11:49:31.600 [DEBUG] [Thread-15240] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:49:31.655 [DEBUG] [Thread-15240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:49:31.656 [DEBUG] [Thread-15240] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:49:31.656 [DEBUG] [Thread-15240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:49:31.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:49:31.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:49:31.712 [DEBUG] [Thread-15240] [transport.py] [_log()] userauth is OK
2025-11-12T11:49:31.712 [DEBUG] [Thread-15240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:49:31.712 [DEBUG] [Thread-15240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:49:31.712 [DEBUG] [Thread-15240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:49:31.712 [DEBUG] [Thread-15240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:49:31.731 [INFO] [Thread-15240] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:49:31.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:49:31.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:49:32.585 [DEBUG] [Thread-15240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:49:32.585 [DEBUG] [Thread-15240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:49:32.634 [DEBUG] [Thread-15240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:49:32.634 [DEBUG] [Thread-15240] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:49:32.643 [DEBUG] [Thread-15240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:49:32.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:49:32.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-11-12T11:49:32.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-11-12T11:49:32.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:49:32.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:49:32.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:49:32.680 [DEBUG] [Thread-15240] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:49:42.772 [DEBUG] [Thread-15242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:49:57.818 [DEBUG] [Thread-15243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:50:02.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:50:02.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:50:02.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-11-12T11:50:03.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 49, 54), 30.31, 13.44, 0.0, 29.87, 26.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:50:03.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:49:54
2025-11-12T11:50:03.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:50:03.589 [DEBUG] [Thread-15244] [transport.py] [_log()] starting thread (client mode): 0x14982170
2025-11-12T11:50:03.589 [DEBUG] [Thread-15244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:50:03.609 [DEBUG] [Thread-15244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:50:03.609 [INFO] [Thread-15244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:50:03.612 [DEBUG] [Thread-15244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:50:03.612 [DEBUG] [Thread-15244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:50:03.612 [DEBUG] [Thread-15244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:50:03.612 [DEBUG] [Thread-15244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:50:03.612 [DEBUG] [Thread-15244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:50:03.612 [DEBUG] [Thread-15244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:50:03.612 [DEBUG] [Thread-15244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:50:03.612 [DEBUG] [Thread-15244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] client lang: <none>
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] server lang: <none>
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] kex follows: False
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] Compression: none
2025-11-12T11:50:03.613 [DEBUG] [Thread-15244] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:50:03.632 [DEBUG] [Thread-15244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:50:03.632 [DEBUG] [Thread-15244] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:50:03.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:50:03.634 [DEBUG] [Thread-15244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:50:03.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:50:03.636 [DEBUG] [Thread-15244] [transport.py] [_log()] userauth is OK
2025-11-12T11:50:03.636 [DEBUG] [Thread-15244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:50:03.636 [DEBUG] [Thread-15244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:50:03.636 [DEBUG] [Thread-15244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:50:03.636 [DEBUG] [Thread-15244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:50:03.654 [INFO] [Thread-15244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:50:03.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:50:05.276 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:50:05.277 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:50:12.534 [DEBUG] [Thread-15244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:50:12.534 [DEBUG] [Thread-15244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:50:12.535 [DEBUG] [Thread-15244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:50:12.574 [DEBUG] [Thread-15244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:50:12.575 [DEBUG] [Thread-15244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:50:12.578 [DEBUG] [Thread-15244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:50:12.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:50:12.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:50:12.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:50:12.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:50:12.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:50:12.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:50:12.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:50:12.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:50:12.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:50:12.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.409464 -999.00  +25.40  28.41     19   +0.30 1 1 1 1 1   888    0 26.52 25.67 ----- 31.0 28.4 277.4 39.5 31.4 -25.7 30.6 -23.5 29.7 -24.9 30.8 -23.3
2025-11-12T11:50:12.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:50:12.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:50:12.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.409464
2025-11-12T11:50:12.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:50:12.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:50:12.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:50:12.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:50:12.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:50:12.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:49:54', tmtdew=30.31, humidity=13.44, cloud=0.0, wind=29.87, temperature=26.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:49:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:50:12.759 [DEBUG] [Thread-15244] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:50:12.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:50:12.849 [DEBUG] [Thread-15247] [transport.py] [_log()] starting thread (client mode): 0x17347730
2025-11-12T11:50:12.849 [DEBUG] [Thread-15247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:50:12.852 [DEBUG] [Thread-15248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:50:12.862 [DEBUG] [Thread-15247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:50:12.862 [INFO] [Thread-15247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:50:12.870 [DEBUG] [Thread-15247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:50:12.870 [DEBUG] [Thread-15247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:50:12.870 [DEBUG] [Thread-15247] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:50:12.870 [DEBUG] [Thread-15247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:50:12.870 [DEBUG] [Thread-15247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:50:12.870 [DEBUG] [Thread-15247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:50:12.870 [DEBUG] [Thread-15247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:50:12.870 [DEBUG] [Thread-15247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] client lang: <none>
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] server lang: <none>
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] kex follows: False
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:50:12.871 [DEBUG] [Thread-15247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:50:12.872 [DEBUG] [Thread-15247] [transport.py] [_log()] Compression: none
2025-11-12T11:50:12.872 [DEBUG] [Thread-15247] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:50:12.934 [DEBUG] [Thread-15247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:50:12.935 [DEBUG] [Thread-15247] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:50:12.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:50:12.936 [DEBUG] [Thread-15247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:50:12.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:50:12.992 [DEBUG] [Thread-15247] [transport.py] [_log()] userauth is OK
2025-11-12T11:50:12.993 [DEBUG] [Thread-15247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:50:12.993 [DEBUG] [Thread-15247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:50:12.993 [DEBUG] [Thread-15247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:50:12.993 [DEBUG] [Thread-15247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:50:13.011 [INFO] [Thread-15247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:50:13.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:50:13.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:50:13.867 [DEBUG] [Thread-15247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:50:13.867 [DEBUG] [Thread-15247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:50:13.915 [DEBUG] [Thread-15247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:50:13.916 [DEBUG] [Thread-15247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:50:13.925 [DEBUG] [Thread-15247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:50:13.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:50: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-11-12T11:50:13.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-11-12T11:50:13.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:50:13.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:50:13.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:50:13.962 [DEBUG] [Thread-15247] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:50:27.888 [DEBUG] [Thread-15250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:50:30.423 [DEBUG] [Thread-15251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:50:42.923 [DEBUG] [Thread-15252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:50:43.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:50:43.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:50:43.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-11-12T11:50:44.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 50, 26), 30.55, 13.24, 0.0, 31.67, 26.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:50:44.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:50:26
2025-11-12T11:50:44.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:50:44.885 [DEBUG] [Thread-15253] [transport.py] [_log()] starting thread (client mode): 0x14982c50
2025-11-12T11:50:44.885 [DEBUG] [Thread-15253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:50:44.905 [DEBUG] [Thread-15253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:50:44.905 [INFO] [Thread-15253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] client lang: <none>
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] server lang: <none>
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] kex follows: False
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] Compression: none
2025-11-12T11:50:44.908 [DEBUG] [Thread-15253] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:50:44.923 [DEBUG] [Thread-15253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:50:44.924 [DEBUG] [Thread-15253] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:50:44.924 [DEBUG] [Thread-15253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:50:44.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:50:44.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:50:44.926 [DEBUG] [Thread-15253] [transport.py] [_log()] userauth is OK
2025-11-12T11:50:44.926 [DEBUG] [Thread-15253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:50:44.926 [DEBUG] [Thread-15253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:50:44.926 [DEBUG] [Thread-15253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:50:44.926 [DEBUG] [Thread-15253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:50:44.947 [INFO] [Thread-15253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:50:44.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:50:45.580 [DEBUG] [Thread-15253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:50:45.580 [DEBUG] [Thread-15253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:50:45.580 [DEBUG] [Thread-15253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:50:45.621 [DEBUG] [Thread-15253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:50:45.621 [DEBUG] [Thread-15253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:50:45.624 [DEBUG] [Thread-15253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:50:45.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:50:45.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:50:45.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:50:45.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:50:45.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:50:45.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:50:45.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:50:45.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:50:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:50:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.409811 -999.00  +25.50  25.93     19   +0.20 1 1 1 1 1   888    0 26.15 22.41 ----- 25.3 25.9 290.0 33.2 31.5 -25.6 30.6 -24.2 29.9 -24.1 30.9 -23.8
2025-11-12T11:50:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:50:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:50:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.409811
2025-11-12T11:50:45.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:50:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:50:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:50:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:50:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:50:45.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:50:26', tmtdew=30.55, humidity=13.24, cloud=0.0, wind=31.67, temperature=26.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:50:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:50:45.651 [DEBUG] [Thread-15253] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:50:45.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:50:45.757 [DEBUG] [Thread-15256] [transport.py] [_log()] starting thread (client mode): 0x14923010
2025-11-12T11:50:45.757 [DEBUG] [Thread-15256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:50:45.773 [DEBUG] [Thread-15256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:50:45.774 [INFO] [Thread-15256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:50:45.781 [DEBUG] [Thread-15256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:50:45.781 [DEBUG] [Thread-15256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:50:45.781 [DEBUG] [Thread-15256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:50:45.781 [DEBUG] [Thread-15256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:50:45.781 [DEBUG] [Thread-15256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:50:45.781 [DEBUG] [Thread-15256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:50:45.781 [DEBUG] [Thread-15256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] client lang: <none>
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] server lang: <none>
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] kex follows: False
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] Compression: none
2025-11-12T11:50:45.782 [DEBUG] [Thread-15256] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:50:45.840 [DEBUG] [Thread-15256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:50:45.841 [DEBUG] [Thread-15256] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:50:45.841 [DEBUG] [Thread-15256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:50:45.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:50:45.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:50:45.897 [DEBUG] [Thread-15256] [transport.py] [_log()] userauth is OK
2025-11-12T11:50:45.897 [DEBUG] [Thread-15256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:50:45.897 [DEBUG] [Thread-15256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:50:45.897 [DEBUG] [Thread-15256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:50:45.897 [DEBUG] [Thread-15256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:50:45.916 [INFO] [Thread-15256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:50:45.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:50:45.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:50:46.765 [DEBUG] [Thread-15256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:50:46.766 [DEBUG] [Thread-15256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:50:46.814 [DEBUG] [Thread-15256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:50:46.814 [DEBUG] [Thread-15256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:50:46.823 [DEBUG] [Thread-15256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:50:46.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:50:46.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:50:46.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-11-12T11:50:46.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:50:46.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:50:46.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:50:46.860 [DEBUG] [Thread-15256] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:50:57.961 [DEBUG] [Thread-15258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:51:05.419 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:51:05.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:51:13.010 [DEBUG] [Thread-15259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:51:16.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:51:16.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:51:16.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-11-12T11:51:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 50, 58), 31.54, 12.29, 0.0, 24.81, 26.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:51:17.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:50:58
2025-11-12T11:51:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:51:17.764 [DEBUG] [Thread-15260] [transport.py] [_log()] starting thread (client mode): 0x173bcbe0
2025-11-12T11:51:17.764 [DEBUG] [Thread-15260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:51:17.786 [DEBUG] [Thread-15260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:51:17.786 [INFO] [Thread-15260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] client lang: <none>
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] server lang: <none>
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] kex follows: False
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:51:17.789 [DEBUG] [Thread-15260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:51:17.790 [DEBUG] [Thread-15260] [transport.py] [_log()] Compression: none
2025-11-12T11:51:17.790 [DEBUG] [Thread-15260] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:51:17.807 [DEBUG] [Thread-15260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:51:17.807 [DEBUG] [Thread-15260] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:51:17.808 [DEBUG] [Thread-15260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:51:17.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:51:17.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:51:17.810 [DEBUG] [Thread-15260] [transport.py] [_log()] userauth is OK
2025-11-12T11:51:17.810 [DEBUG] [Thread-15260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:51:17.810 [DEBUG] [Thread-15260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:51:17.810 [DEBUG] [Thread-15260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:51:17.810 [DEBUG] [Thread-15260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:51:17.829 [INFO] [Thread-15260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:51:17.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:51:18.616 [DEBUG] [Thread-15260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:51:18.616 [DEBUG] [Thread-15260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:51:18.617 [DEBUG] [Thread-15260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:51:18.657 [DEBUG] [Thread-15260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:51:18.657 [DEBUG] [Thread-15260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:51:18.661 [DEBUG] [Thread-15260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:51:18.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:51:18.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:51:18.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:51:18.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:51:18.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:51:18.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:51:18.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:51:18.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:51:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:51:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.410158 -999.00  +26.00  32.89     17   -0.30 1 1 2 1 1   888    0 26.41 22.36 ----- 35.9 32.9 306.5 41.0 31.5 -25.6 30.6 -24.6 29.8 -26.4 30.8 -24.0
2025-11-12T11:51:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:51:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:51:18.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.410158
2025-11-12T11:51:18.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:51:18.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:51:18.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:51:18.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:51:18.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:51:18.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:50:58', tmtdew=31.54, humidity=12.29, cloud=0.0, wind=24.81, temperature=26.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:50:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:51:18.686 [DEBUG] [Thread-15260] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:51:18.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:51:18.781 [DEBUG] [Thread-15263] [transport.py] [_log()] starting thread (client mode): 0x173e8580
2025-11-12T11:51:18.781 [DEBUG] [Thread-15263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:51:18.796 [DEBUG] [Thread-15263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:51:18.797 [INFO] [Thread-15263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:51:18.804 [DEBUG] [Thread-15263] [transport.py] [_log()] client lang: <none>
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] server lang: <none>
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] kex follows: False
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] Compression: none
2025-11-12T11:51:18.805 [DEBUG] [Thread-15263] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:51:18.864 [DEBUG] [Thread-15263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:51:18.865 [DEBUG] [Thread-15263] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:51:18.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:51:18.866 [DEBUG] [Thread-15263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:51:18.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:51:18.924 [DEBUG] [Thread-15263] [transport.py] [_log()] userauth is OK
2025-11-12T11:51:18.924 [DEBUG] [Thread-15263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:51:18.924 [DEBUG] [Thread-15263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:51:18.924 [DEBUG] [Thread-15263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:51:18.924 [DEBUG] [Thread-15263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:51:18.943 [INFO] [Thread-15263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:51:18.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:51:18.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:51:19.818 [DEBUG] [Thread-15263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:51:19.819 [DEBUG] [Thread-15263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:51:19.867 [DEBUG] [Thread-15263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:51:19.867 [DEBUG] [Thread-15263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:51:19.876 [DEBUG] [Thread-15263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:51:19.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:51:19.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-11-12T11:51:19.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-11-12T11:51:19.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:51:19.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:51:19.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:51:19.912 [DEBUG] [Thread-15263] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:51:28.047 [DEBUG] [Thread-15265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:51:30.456 [DEBUG] [Thread-15266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:51:43.090 [DEBUG] [Thread-15267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:51:49.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:51:49.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:51:49.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-11-12T11:51:50.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 51, 30), 32.0, 11.93, 0.0, 26.04, 26.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:51:50.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:51:30
2025-11-12T11:51:50.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:51:50.824 [DEBUG] [Thread-15268] [transport.py] [_log()] starting thread (client mode): 0x14982c50
2025-11-12T11:51:50.824 [DEBUG] [Thread-15268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:51:50.846 [DEBUG] [Thread-15268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:51:50.846 [INFO] [Thread-15268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:51:50.849 [DEBUG] [Thread-15268] [transport.py] [_log()] client lang: <none>
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] server lang: <none>
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] kex follows: False
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] Compression: none
2025-11-12T11:51:50.850 [DEBUG] [Thread-15268] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:51:50.869 [DEBUG] [Thread-15268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:51:50.870 [DEBUG] [Thread-15268] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:51:50.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:51:50.871 [DEBUG] [Thread-15268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:51:50.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:51:50.874 [DEBUG] [Thread-15268] [transport.py] [_log()] userauth is OK
2025-11-12T11:51:50.874 [DEBUG] [Thread-15268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:51:50.874 [DEBUG] [Thread-15268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:51:50.874 [DEBUG] [Thread-15268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:51:50.874 [DEBUG] [Thread-15268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:51:50.911 [INFO] [Thread-15268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:51:50.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:51:51.553 [DEBUG] [Thread-15268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:51:51.554 [DEBUG] [Thread-15268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:51:51.554 [DEBUG] [Thread-15268] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:51:51.595 [DEBUG] [Thread-15268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:51:51.595 [DEBUG] [Thread-15268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:51:51.599 [DEBUG] [Thread-15268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:51:51.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:51:51.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:51:51.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:51:51.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:51:51.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:51:51.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:51:51.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:51:51.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:51:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:51:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.410506 -999.00  +25.50  37.44     17   -0.80 1 1 2 1 1   888    0 26.90 27.70 ----- 34.4 37.4 298.4 45.0 31.1 -28.6 30.4 -27.1 29.5 -26.0 30.6 -26.8
2025-11-12T11:51:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:51:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:51:51.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.410506
2025-11-12T11:51:51.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:51:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:51:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:51:51.627 [DEBUG] [Thread-15268] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:51:51.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:51:51.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:51:51.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:51:30', tmtdew=32.0, humidity=11.93, cloud=0.0, wind=26.04, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:51:07.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:51:51.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:51:51.725 [DEBUG] [Thread-15271] [transport.py] [_log()] starting thread (client mode): 0x1737f850
2025-11-12T11:51:51.725 [DEBUG] [Thread-15271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:51:51.739 [DEBUG] [Thread-15271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:51:51.739 [INFO] [Thread-15271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:51:51.746 [DEBUG] [Thread-15271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:51:51.747 [DEBUG] [Thread-15271] [transport.py] [_log()] client lang: <none>
2025-11-12T11:51:51.748 [DEBUG] [Thread-15271] [transport.py] [_log()] server lang: <none>
2025-11-12T11:51:51.748 [DEBUG] [Thread-15271] [transport.py] [_log()] kex follows: False
2025-11-12T11:51:51.748 [DEBUG] [Thread-15271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:51:51.748 [DEBUG] [Thread-15271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:51:51.748 [DEBUG] [Thread-15271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:51:51.748 [DEBUG] [Thread-15271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:51:51.748 [DEBUG] [Thread-15271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:51:51.749 [DEBUG] [Thread-15271] [transport.py] [_log()] Compression: none
2025-11-12T11:51:51.749 [DEBUG] [Thread-15271] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:51:51.804 [DEBUG] [Thread-15271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:51:51.805 [DEBUG] [Thread-15271] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:51:51.806 [DEBUG] [Thread-15271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:51:51.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:51:51.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:51:51.860 [DEBUG] [Thread-15271] [transport.py] [_log()] userauth is OK
2025-11-12T11:51:51.860 [DEBUG] [Thread-15271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:51:51.860 [DEBUG] [Thread-15271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:51:51.860 [DEBUG] [Thread-15271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:51:51.861 [DEBUG] [Thread-15271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:51:51.880 [INFO] [Thread-15271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:51: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-11-12T11:51:51.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:51:52.730 [DEBUG] [Thread-15271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:51:52.731 [DEBUG] [Thread-15271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:51:52.779 [DEBUG] [Thread-15271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:51:52.779 [DEBUG] [Thread-15271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:51:52.788 [DEBUG] [Thread-15271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:51:52.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:51:52.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-11-12T11:51:52.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:51:52.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:51:52.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:51:52.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:51:52.825 [DEBUG] [Thread-15271] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:51:58.125 [DEBUG] [Thread-15273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:52:05.561 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:52:05.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:52:13.176 [DEBUG] [Thread-15274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:52:22.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:52:22.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:52:22.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-11-12T11:52:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 52, 2), 32.14, 11.83, 0.0, 23.61, 26.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:52:23.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:52:02
2025-11-12T11:52:23.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:52:23.734 [DEBUG] [Thread-15275] [transport.py] [_log()] starting thread (client mode): 0x173ea3e0
2025-11-12T11:52:23.734 [DEBUG] [Thread-15275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:52:23.754 [DEBUG] [Thread-15275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:52:23.755 [INFO] [Thread-15275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:52:23.758 [DEBUG] [Thread-15275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:52:23.758 [DEBUG] [Thread-15275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:52:23.758 [DEBUG] [Thread-15275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] client lang: <none>
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] server lang: <none>
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] kex follows: False
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] Compression: none
2025-11-12T11:52:23.759 [DEBUG] [Thread-15275] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:52:23.777 [DEBUG] [Thread-15275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:52:23.778 [DEBUG] [Thread-15275] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:52:23.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:52:23.779 [DEBUG] [Thread-15275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:52:23.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:52:23.781 [DEBUG] [Thread-15275] [transport.py] [_log()] userauth is OK
2025-11-12T11:52:23.781 [DEBUG] [Thread-15275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:52:23.781 [DEBUG] [Thread-15275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:52:23.781 [DEBUG] [Thread-15275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:52:23.781 [DEBUG] [Thread-15275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:52:23.796 [INFO] [Thread-15275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:52:23.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:52:24.440 [DEBUG] [Thread-15275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:52:24.440 [DEBUG] [Thread-15275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:52:24.441 [DEBUG] [Thread-15275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:52:24.481 [DEBUG] [Thread-15275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:52:24.482 [DEBUG] [Thread-15275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:52:24.485 [DEBUG] [Thread-15275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:52:24.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:52:24.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:52:24.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:52:24.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:52:24.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:52:24.508 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:52:24.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:52:24.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:52:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:52:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.411200 -999.00  +25.00  18.81     18   -0.50 1 1 1 1 1   888    0 26.58 26.28 ----- 21.8 18.8 281.6 24.4 30.7 -27.6 30.1 -26.0 29.4 -26.3 30.1 -25.9
2025-11-12T11:52:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:52:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:52:24.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.411200
2025-11-12T11:52:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:52:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:52:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:52:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:52:24.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:52:24.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:52:02', tmtdew=32.14, humidity=11.83, cloud=0.0, wind=23.61, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:52:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:52:24.511 [DEBUG] [Thread-15275] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:52:24.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:52:24.606 [DEBUG] [Thread-15278] [transport.py] [_log()] starting thread (client mode): 0x173bcf70
2025-11-12T11:52:24.606 [DEBUG] [Thread-15278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:52:24.621 [DEBUG] [Thread-15278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:52:24.621 [INFO] [Thread-15278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] client lang: <none>
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] server lang: <none>
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] kex follows: False
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:52:24.629 [DEBUG] [Thread-15278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:52:24.630 [DEBUG] [Thread-15278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:52:24.630 [DEBUG] [Thread-15278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:52:24.630 [DEBUG] [Thread-15278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:52:24.630 [DEBUG] [Thread-15278] [transport.py] [_log()] Compression: none
2025-11-12T11:52:24.630 [DEBUG] [Thread-15278] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:52:24.688 [DEBUG] [Thread-15278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:52:24.689 [DEBUG] [Thread-15278] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:52:24.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:52:24.690 [DEBUG] [Thread-15278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:52:24.690 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:52:24.744 [DEBUG] [Thread-15278] [transport.py] [_log()] userauth is OK
2025-11-12T11:52:24.744 [DEBUG] [Thread-15278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:52:24.745 [DEBUG] [Thread-15278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:52:24.745 [DEBUG] [Thread-15278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:52:24.745 [DEBUG] [Thread-15278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:52:24.766 [INFO] [Thread-15278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:52:24.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:52:24.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:52:25.614 [DEBUG] [Thread-15278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:52:25.614 [DEBUG] [Thread-15278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:52:25.661 [DEBUG] [Thread-15278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:52:25.662 [DEBUG] [Thread-15278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:52:25.671 [DEBUG] [Thread-15278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:52:25.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:52:25.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:52:25.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:52:25.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:52:25.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:52:25.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:52:25.709 [DEBUG] [Thread-15278] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:52:28.208 [DEBUG] [Thread-15280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:52:30.490 [DEBUG] [Thread-15281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:52:43.262 [DEBUG] [Thread-15282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:52:55.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:52:55.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:52:55.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-11-12T11:52:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 52, 34), 31.72, 11.98, 0.0, 21.23, 25.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:52:56.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:52:34
2025-11-12T11:52:56.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:52:56.712 [DEBUG] [Thread-15283] [transport.py] [_log()] starting thread (client mode): 0x173bedd0
2025-11-12T11:52:56.713 [DEBUG] [Thread-15283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:52:56.732 [DEBUG] [Thread-15283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:52:56.732 [INFO] [Thread-15283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] client lang: <none>
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] server lang: <none>
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] kex follows: False
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] Compression: none
2025-11-12T11:52:56.736 [DEBUG] [Thread-15283] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:52:56.751 [DEBUG] [Thread-15283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:52:56.751 [DEBUG] [Thread-15283] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:52:56.751 [DEBUG] [Thread-15283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:52:56.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:52:56.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:52:56.752 [DEBUG] [Thread-15283] [transport.py] [_log()] userauth is OK
2025-11-12T11:52:56.752 [DEBUG] [Thread-15283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:52:56.752 [DEBUG] [Thread-15283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:52:56.752 [DEBUG] [Thread-15283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:52:56.752 [DEBUG] [Thread-15283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:52:56.769 [INFO] [Thread-15283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:52:56.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:52:57.427 [DEBUG] [Thread-15283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:52:57.427 [DEBUG] [Thread-15283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:52:57.427 [DEBUG] [Thread-15283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:52:57.468 [DEBUG] [Thread-15283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:52:57.468 [DEBUG] [Thread-15283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:52:57.470 [DEBUG] [Thread-15283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:52:57.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:52:57.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:52:57.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:52:57.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:52:57.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:52:57.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:52:57.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.411547 -999.00  +25.10  20.05     17   -1.00 1 1 1 1 1   888    0 26.79 24.41 ----- 19.8 20.1 271.0 22.9 30.9 -27.1 30.2 -24.7 29.4 -26.0 30.2 -24.1
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.411547
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:52:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:52:57.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:52:57.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:52:57.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:52:34', tmtdew=31.72, humidity=11.98, cloud=0.0, wind=21.23, temperature=25.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:52:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:52:57.489 [DEBUG] [Thread-15283] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:52:57.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:52:57.572 [DEBUG] [Thread-15286] [transport.py] [_log()] starting thread (client mode): 0x173457b0
2025-11-12T11:52:57.572 [DEBUG] [Thread-15286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:52:57.587 [DEBUG] [Thread-15286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:52:57.587 [INFO] [Thread-15286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:52:57.594 [DEBUG] [Thread-15286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:52:57.594 [DEBUG] [Thread-15286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:52:57.594 [DEBUG] [Thread-15286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:52:57.594 [DEBUG] [Thread-15286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] client lang: <none>
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] server lang: <none>
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] kex follows: False
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] Compression: none
2025-11-12T11:52:57.595 [DEBUG] [Thread-15286] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:52:57.650 [DEBUG] [Thread-15286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:52:57.650 [DEBUG] [Thread-15286] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:52:57.650 [DEBUG] [Thread-15286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:52:57.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:52:57.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:52:57.707 [DEBUG] [Thread-15286] [transport.py] [_log()] userauth is OK
2025-11-12T11:52:57.707 [DEBUG] [Thread-15286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:52:57.707 [DEBUG] [Thread-15286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:52:57.707 [DEBUG] [Thread-15286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:52:57.707 [DEBUG] [Thread-15286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:52:57.721 [INFO] [Thread-15286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:52:57.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:52:57.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:52:58.295 [DEBUG] [Thread-15288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:52:58.549 [DEBUG] [Thread-15286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:52:58.549 [DEBUG] [Thread-15286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:52:58.597 [DEBUG] [Thread-15286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:52:58.597 [DEBUG] [Thread-15286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:52:58.605 [DEBUG] [Thread-15286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:52:58.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:52:58.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:52:58.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-11-12T11:52:58.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:52:58.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:52:58.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:52:58.637 [DEBUG] [Thread-15286] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:53:05.703 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:53:05.705 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:53:13.344 [DEBUG] [Thread-15289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:53:28.381 [DEBUG] [Thread-15290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:53:28.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:53:28.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:53:28.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-11-12T11:53:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 53, 6), 31.15, 12.42, 0.0, 20.8, 25.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:53:29.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:53:06
2025-11-12T11:53:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:53:29.567 [DEBUG] [Thread-15291] [transport.py] [_log()] starting thread (client mode): 0x173beec0
2025-11-12T11:53:29.567 [DEBUG] [Thread-15291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:53:29.587 [DEBUG] [Thread-15291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:53:29.587 [INFO] [Thread-15291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:53:29.590 [DEBUG] [Thread-15291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:53:29.590 [DEBUG] [Thread-15291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:53:29.590 [DEBUG] [Thread-15291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:53:29.590 [DEBUG] [Thread-15291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:53:29.590 [DEBUG] [Thread-15291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] client lang: <none>
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] server lang: <none>
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] kex follows: False
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] Compression: none
2025-11-12T11:53:29.591 [DEBUG] [Thread-15291] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:53:29.613 [DEBUG] [Thread-15291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:53:29.614 [DEBUG] [Thread-15291] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:53:29.614 [DEBUG] [Thread-15291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:53:29.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:53:29.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:53:29.657 [DEBUG] [Thread-15291] [transport.py] [_log()] userauth is OK
2025-11-12T11:53:29.657 [DEBUG] [Thread-15291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:53:29.657 [DEBUG] [Thread-15291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:53:29.657 [DEBUG] [Thread-15291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:53:29.658 [DEBUG] [Thread-15291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:53:29.690 [INFO] [Thread-15291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:53:29.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:53:30.301 [DEBUG] [Thread-15291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:53:30.301 [DEBUG] [Thread-15291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:53:30.301 [DEBUG] [Thread-15291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:53:30.342 [DEBUG] [Thread-15291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:53:30.342 [DEBUG] [Thread-15291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:53:30.345 [DEBUG] [Thread-15291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:53:30.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:53:30.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:53:30.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:53:30.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:53:30.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:53:30.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:53:30.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:53:30.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:53:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:53:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.411894 -999.00  +24.80  24.87     18   -1.00 1 1 1 1 1   888    0 26.69 23.84 ----- 26.6 24.9 276.8 34.4 30.5 -28.4 30.0 -26.5 29.3 -28.2 29.9 -27.2
2025-11-12T11:53:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:53:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:53:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.411894
2025-11-12T11:53:30.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:53:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:53:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:53:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:53:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:53:30.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:53:06', tmtdew=31.15, humidity=12.42, cloud=0.0, wind=20.8, temperature=25.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:53:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:53:30.373 [DEBUG] [Thread-15291] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:53:30.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:53:30.469 [DEBUG] [Thread-15294] [transport.py] [_log()] starting thread (client mode): 0x17361120
2025-11-12T11:53:30.469 [DEBUG] [Thread-15294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:53:30.484 [DEBUG] [Thread-15294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:53:30.485 [INFO] [Thread-15294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:53:30.492 [DEBUG] [Thread-15294] [transport.py] [_log()] client lang: <none>
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] server lang: <none>
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] kex follows: False
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] Compression: none
2025-11-12T11:53:30.493 [DEBUG] [Thread-15294] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:53:30.527 [DEBUG] [Thread-15296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:53:30.551 [DEBUG] [Thread-15294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:53:30.552 [DEBUG] [Thread-15294] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:53:30.552 [DEBUG] [Thread-15294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:53:30.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:53:30.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:53:30.608 [DEBUG] [Thread-15294] [transport.py] [_log()] userauth is OK
2025-11-12T11:53:30.608 [DEBUG] [Thread-15294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:53:30.608 [DEBUG] [Thread-15294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:53:30.608 [DEBUG] [Thread-15294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:53:30.608 [DEBUG] [Thread-15294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:53:30.628 [INFO] [Thread-15294] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:53:30.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:53:30.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:53:31.462 [DEBUG] [Thread-15294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:53:31.462 [DEBUG] [Thread-15294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:53:31.510 [DEBUG] [Thread-15294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:53:31.510 [DEBUG] [Thread-15294] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:53:31.519 [DEBUG] [Thread-15294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:53:31.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:53:31.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:53:31.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:53:31.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:53:31.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:53:31.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:53:31.554 [DEBUG] [Thread-15294] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:53:43.414 [DEBUG] [Thread-15297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:53:58.466 [DEBUG] [Thread-15298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:54:01.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:54:01.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:54:01.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-11-12T11:54:02.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 53, 38), 31.33, 12.41, 0.0, 27.38, 25.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:54:02.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:53:38
2025-11-12T11:54:02.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:54:02.476 [DEBUG] [Thread-15299] [transport.py] [_log()] starting thread (client mode): 0x173e9210
2025-11-12T11:54:02.476 [DEBUG] [Thread-15299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:54:02.497 [DEBUG] [Thread-15299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:54:02.498 [INFO] [Thread-15299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:54:02.500 [DEBUG] [Thread-15299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:54:02.500 [DEBUG] [Thread-15299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:54:02.500 [DEBUG] [Thread-15299] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:54:02.500 [DEBUG] [Thread-15299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:54:02.500 [DEBUG] [Thread-15299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] client lang: <none>
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] server lang: <none>
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] kex follows: False
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] Compression: none
2025-11-12T11:54:02.501 [DEBUG] [Thread-15299] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:54:02.519 [DEBUG] [Thread-15299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:54:02.520 [DEBUG] [Thread-15299] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:54:02.520 [DEBUG] [Thread-15299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:54:02.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:54:02.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:54:02.523 [DEBUG] [Thread-15299] [transport.py] [_log()] userauth is OK
2025-11-12T11:54:02.523 [DEBUG] [Thread-15299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:54:02.523 [DEBUG] [Thread-15299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:54:02.523 [DEBUG] [Thread-15299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:54:02.523 [DEBUG] [Thread-15299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:54:02.549 [INFO] [Thread-15299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:54:02.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:54:03.199 [DEBUG] [Thread-15299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:54:03.199 [DEBUG] [Thread-15299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:54:03.200 [DEBUG] [Thread-15299] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:54:03.240 [DEBUG] [Thread-15299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:54:03.241 [DEBUG] [Thread-15299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:54:03.244 [DEBUG] [Thread-15299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:54:03.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:54:03.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:54:03.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:54:03.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:54:03.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:54:03.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:54:03.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:54:03.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:54:03.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:54:03.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.412242 -999.00  +24.90  23.32     18   -0.70 1 1 1 1 1   888    0 26.48 21.27 ----- 23.1 23.3 281.8 35.1 30.5 -26.9 29.9 -25.0 28.9 -25.4 29.9 -24.7
2025-11-12T11:54:03.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:54:03.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:54:03.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.412242
2025-11-12T11:54:03.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:54:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:54:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:54:03.272 [DEBUG] [Thread-15299] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:54:03.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:54:03.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:54:03.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:53:38', tmtdew=31.33, humidity=12.41, cloud=0.0, wind=27.38, temperature=25.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:53:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:54:03.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:54:03.368 [DEBUG] [Thread-15302] [transport.py] [_log()] starting thread (client mode): 0x1739a590
2025-11-12T11:54:03.368 [DEBUG] [Thread-15302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:54:03.382 [DEBUG] [Thread-15302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:54:03.382 [INFO] [Thread-15302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] client lang: <none>
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] server lang: <none>
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] kex follows: False
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] Compression: none
2025-11-12T11:54:03.390 [DEBUG] [Thread-15302] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:54:03.446 [DEBUG] [Thread-15302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:54:03.446 [DEBUG] [Thread-15302] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:54:03.446 [DEBUG] [Thread-15302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:54:03.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:54:03.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:54:03.504 [DEBUG] [Thread-15302] [transport.py] [_log()] userauth is OK
2025-11-12T11:54:03.504 [DEBUG] [Thread-15302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:54:03.504 [DEBUG] [Thread-15302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:54:03.504 [DEBUG] [Thread-15302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:54:03.504 [DEBUG] [Thread-15302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:54:03.522 [INFO] [Thread-15302] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:54:03.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:54:03.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:54:04.359 [DEBUG] [Thread-15302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:54:04.359 [DEBUG] [Thread-15302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:54:04.408 [DEBUG] [Thread-15302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:54:04.408 [DEBUG] [Thread-15302] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:54:04.417 [DEBUG] [Thread-15302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:54:04.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:54:04.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-11-12T11:54:04.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-11-12T11:54:04.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:54:04.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:54:04.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:54:04.455 [DEBUG] [Thread-15302] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:54:05.846 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:54:05.847 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:54:13.501 [DEBUG] [Thread-15304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:54:28.539 [DEBUG] [Thread-15305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:54:30.559 [DEBUG] [Thread-15306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:54:34.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:54:34.448 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:54:34.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-11-12T11:54:35.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 54, 10), 31.55, 12.23, 0.0, 28.69, 25.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:54:35.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:54:10
2025-11-12T11:54:35.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:54:35.335 [DEBUG] [Thread-15307] [transport.py] [_log()] starting thread (client mode): 0x14980790
2025-11-12T11:54:35.336 [DEBUG] [Thread-15307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:54:35.356 [DEBUG] [Thread-15307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:54:35.356 [INFO] [Thread-15307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] client lang: <none>
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] server lang: <none>
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] kex follows: False
2025-11-12T11:54:35.359 [DEBUG] [Thread-15307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:54:35.360 [DEBUG] [Thread-15307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:54:35.360 [DEBUG] [Thread-15307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:54:35.360 [DEBUG] [Thread-15307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:54:35.360 [DEBUG] [Thread-15307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:54:35.360 [DEBUG] [Thread-15307] [transport.py] [_log()] Compression: none
2025-11-12T11:54:35.360 [DEBUG] [Thread-15307] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:54:35.377 [DEBUG] [Thread-15307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:54:35.377 [DEBUG] [Thread-15307] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:54:35.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:54:35.378 [DEBUG] [Thread-15307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:54:35.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:54:35.380 [DEBUG] [Thread-15307] [transport.py] [_log()] userauth is OK
2025-11-12T11:54:35.380 [DEBUG] [Thread-15307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:54:35.381 [DEBUG] [Thread-15307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:54:35.381 [DEBUG] [Thread-15307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:54:35.381 [DEBUG] [Thread-15307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:54:35.399 [INFO] [Thread-15307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:54:35.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:54:36.024 [DEBUG] [Thread-15307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:54:36.024 [DEBUG] [Thread-15307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:54:36.025 [DEBUG] [Thread-15307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:54:36.064 [DEBUG] [Thread-15307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:54:36.065 [DEBUG] [Thread-15307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:54:36.068 [DEBUG] [Thread-15307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:54:36.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:54:36.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:54:36.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:54:36.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:54:36.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:54:36.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:54:36.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:54:36.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:54:36.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:54:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.412589 -999.00  +25.00  17.34     18   -0.60 1 1 1 1 1   888    0 26.11 19.33 ----- 17.7 17.3 290.9 23.5 30.5 -25.6 29.9 -24.2 28.9 -27.1 29.9 -24.0
2025-11-12T11:54:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:54:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:54:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.412589
2025-11-12T11:54:36.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:54:36.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:54:36.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:54:36.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:54:36.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:54:36.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:54:10', tmtdew=31.55, humidity=12.23, cloud=0.0, wind=28.69, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:54:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:54:36.093 [DEBUG] [Thread-15307] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:54:36.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:54:36.191 [DEBUG] [Thread-15310] [transport.py] [_log()] starting thread (client mode): 0x19dd93f0
2025-11-12T11:54:36.191 [DEBUG] [Thread-15310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:54:36.205 [DEBUG] [Thread-15310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:54:36.206 [INFO] [Thread-15310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:54:36.213 [DEBUG] [Thread-15310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] client lang: <none>
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] server lang: <none>
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] kex follows: False
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:54:36.214 [DEBUG] [Thread-15310] [transport.py] [_log()] Compression: none
2025-11-12T11:54:36.215 [DEBUG] [Thread-15310] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:54:36.272 [DEBUG] [Thread-15310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:54:36.272 [DEBUG] [Thread-15310] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:54:36.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:54:36.274 [DEBUG] [Thread-15310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:54:36.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:54:36.332 [DEBUG] [Thread-15310] [transport.py] [_log()] userauth is OK
2025-11-12T11:54:36.333 [DEBUG] [Thread-15310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:54:36.333 [DEBUG] [Thread-15310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:54:36.333 [DEBUG] [Thread-15310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:54:36.333 [DEBUG] [Thread-15310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:54:36.352 [INFO] [Thread-15310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:54:36.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:54:36.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:54:37.198 [DEBUG] [Thread-15310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:54:37.198 [DEBUG] [Thread-15310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:54:37.246 [DEBUG] [Thread-15310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:54:37.246 [DEBUG] [Thread-15310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:54:37.255 [DEBUG] [Thread-15310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:54:37.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:54:37.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-11-12T11:54:37.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-11-12T11:54:37.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:54:37.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:54:37.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:54:37.289 [DEBUG] [Thread-15310] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:54:43.573 [DEBUG] [Thread-15312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:54:58.615 [DEBUG] [Thread-15313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:55:05.997 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:55:05.998 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:55:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:55:07.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:55:07.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:55:07.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 54, 42), 31.54, 12.13, 0.0, 31.21, 25.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:55:07.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:54:42
2025-11-12T11:55:08.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:55:08.204 [DEBUG] [Thread-15314] [transport.py] [_log()] starting thread (client mode): 0x19dd8f40
2025-11-12T11:55:08.204 [DEBUG] [Thread-15314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:55:08.223 [DEBUG] [Thread-15314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:55:08.224 [INFO] [Thread-15314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:55:08.227 [DEBUG] [Thread-15314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:55:08.227 [DEBUG] [Thread-15314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] client lang: <none>
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] server lang: <none>
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] kex follows: False
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] Compression: none
2025-11-12T11:55:08.228 [DEBUG] [Thread-15314] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:55:08.247 [DEBUG] [Thread-15314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:55:08.247 [DEBUG] [Thread-15314] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:55:08.248 [DEBUG] [Thread-15314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:55:08.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:55:08.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:55:08.250 [DEBUG] [Thread-15314] [transport.py] [_log()] userauth is OK
2025-11-12T11:55:08.250 [DEBUG] [Thread-15314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:55:08.250 [DEBUG] [Thread-15314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:55:08.250 [DEBUG] [Thread-15314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:55:08.250 [DEBUG] [Thread-15314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:55:08.274 [INFO] [Thread-15314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:55:08.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:55:12.607 [DEBUG] [Thread-15314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:55:12.607 [DEBUG] [Thread-15314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:55:12.608 [DEBUG] [Thread-15314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:55:12.648 [DEBUG] [Thread-15314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:55:12.649 [DEBUG] [Thread-15314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:55:12.652 [DEBUG] [Thread-15314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:55:12.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:55:12.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:55:12.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:55:12.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:55:12.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:55:12.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:55:12.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:55:12.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:55:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:55:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.412936 -999.00  +25.60  18.71     17   -0.50 1 2 1 1 1   888    0 26.30 16.89 ----- 27.4 18.7 287.2 27.0 30.8 -24.3 30.1 -23.4 29.2 -22.5 30.2 -22.7
2025-11-12T11:55:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:55:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:55:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.412936
2025-11-12T11:55:12.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:55:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:55:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:55:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:55:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T11:55:12.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:54:42', tmtdew=31.54, humidity=12.13, cloud=0.0, wind=31.21, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:54:37.670', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:55:12.707 [DEBUG] [Thread-15314] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:55:12.791 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:55:12.803 [DEBUG] [Thread-15317] [transport.py] [_log()] starting thread (client mode): 0x19dd9e10
2025-11-12T11:55:12.803 [DEBUG] [Thread-15317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:55:12.818 [DEBUG] [Thread-15317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:55:12.819 [INFO] [Thread-15317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:55:12.826 [DEBUG] [Thread-15317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] client lang: <none>
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] server lang: <none>
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] kex follows: False
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] Compression: none
2025-11-12T11:55:12.827 [DEBUG] [Thread-15317] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:55:12.884 [DEBUG] [Thread-15317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:55:12.885 [DEBUG] [Thread-15317] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:55:12.885 [DEBUG] [Thread-15317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:55:12.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:55:12.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:55:12.940 [DEBUG] [Thread-15317] [transport.py] [_log()] userauth is OK
2025-11-12T11:55:12.940 [DEBUG] [Thread-15317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:55:12.940 [DEBUG] [Thread-15317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:55:12.940 [DEBUG] [Thread-15317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:55:12.949 [DEBUG] [Thread-15317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:55:12.974 [INFO] [Thread-15317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:55:12.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:55:12.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:55:13.654 [DEBUG] [Thread-15319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:55:13.817 [DEBUG] [Thread-15317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:55:13.817 [DEBUG] [Thread-15317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:55:13.864 [DEBUG] [Thread-15317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:55:13.864 [DEBUG] [Thread-15317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:55:13.873 [DEBUG] [Thread-15317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:55:13.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:55:13.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:55:13.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:55:13.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:55:13.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:55:13.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:55:13.910 [DEBUG] [Thread-15317] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:55:28.714 [DEBUG] [Thread-15320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:55:30.604 [DEBUG] [Thread-15321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:55:43.750 [DEBUG] [Thread-15322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:55:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:55:43.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:55:43.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-11-12T11:55:44.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 55, 14), 32.02, 11.73, 0.0, 30.15, 25.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:55:44.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:55:14
2025-11-12T11:55:44.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:55:44.812 [DEBUG] [Thread-15323] [transport.py] [_log()] starting thread (client mode): 0x17362b00
2025-11-12T11:55:44.812 [DEBUG] [Thread-15323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:55:44.833 [DEBUG] [Thread-15323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:55:44.833 [INFO] [Thread-15323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:55:44.837 [DEBUG] [Thread-15323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:55:44.837 [DEBUG] [Thread-15323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:55:44.837 [DEBUG] [Thread-15323] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:55:44.837 [DEBUG] [Thread-15323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:55:44.837 [DEBUG] [Thread-15323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:55:44.837 [DEBUG] [Thread-15323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:55:44.837 [DEBUG] [Thread-15323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:55:44.837 [DEBUG] [Thread-15323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] client lang: <none>
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] server lang: <none>
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] kex follows: False
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] Compression: none
2025-11-12T11:55:44.838 [DEBUG] [Thread-15323] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:55:44.857 [DEBUG] [Thread-15323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:55:44.858 [DEBUG] [Thread-15323] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:55:44.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:55:44.859 [DEBUG] [Thread-15323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:55:44.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:55:44.861 [DEBUG] [Thread-15323] [transport.py] [_log()] userauth is OK
2025-11-12T11:55:44.861 [DEBUG] [Thread-15323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:55:44.861 [DEBUG] [Thread-15323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:55:44.861 [DEBUG] [Thread-15323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:55:44.861 [DEBUG] [Thread-15323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:55:44.886 [INFO] [Thread-15323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:55:44.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:55:45.525 [DEBUG] [Thread-15323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:55:45.525 [DEBUG] [Thread-15323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:55:45.525 [DEBUG] [Thread-15323] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:55:45.566 [DEBUG] [Thread-15323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:55:45.566 [DEBUG] [Thread-15323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:55:45.570 [DEBUG] [Thread-15323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:55:45.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:55:45.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:55:45.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:55:45.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:55:45.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:55:45.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:55:45.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:55:45.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:55:45.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:55:45.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.413283 -999.00  +26.00  22.64     16   -0.90 1 1 1 1 1   888    0 26.42 20.76 ----- 26.2 22.6 285.0 29.2 30.9 -25.9 30.2 -24.2 29.3 -23.4 30.2 -23.3
2025-11-12T11:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.413283
2025-11-12T11:55:45.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:55:45.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:55:45.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:55:45.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:55:45.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:55:45.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:55:14', tmtdew=32.02, humidity=11.73, cloud=0.0, wind=30.15, temperature=25.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:55:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:55:45.597 [DEBUG] [Thread-15323] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:55:45.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:55:45.696 [DEBUG] [Thread-15326] [transport.py] [_log()] starting thread (client mode): 0x17362f20
2025-11-12T11:55:45.696 [DEBUG] [Thread-15326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:55:45.711 [DEBUG] [Thread-15326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:55:45.711 [INFO] [Thread-15326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] client lang: <none>
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] server lang: <none>
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] kex follows: False
2025-11-12T11:55:45.719 [DEBUG] [Thread-15326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:55:45.720 [DEBUG] [Thread-15326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:55:45.720 [DEBUG] [Thread-15326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:55:45.720 [DEBUG] [Thread-15326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:55:45.720 [DEBUG] [Thread-15326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:55:45.720 [DEBUG] [Thread-15326] [transport.py] [_log()] Compression: none
2025-11-12T11:55:45.720 [DEBUG] [Thread-15326] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:55:45.775 [DEBUG] [Thread-15326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:55:45.776 [DEBUG] [Thread-15326] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:55:45.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:55:45.777 [DEBUG] [Thread-15326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:55:45.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:55:45.833 [DEBUG] [Thread-15326] [transport.py] [_log()] userauth is OK
2025-11-12T11:55:45.834 [DEBUG] [Thread-15326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:55:45.834 [DEBUG] [Thread-15326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:55:45.834 [DEBUG] [Thread-15326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:55:45.834 [DEBUG] [Thread-15326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:55:45.852 [INFO] [Thread-15326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:55:45.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:55:45.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:55:46.693 [DEBUG] [Thread-15326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:55:46.694 [DEBUG] [Thread-15326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:55:46.741 [DEBUG] [Thread-15326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:55:46.742 [DEBUG] [Thread-15326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:55:46.751 [DEBUG] [Thread-15326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:55:46.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:55:46.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')
2025-11-12T11:55:46.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-11-12T11:55:46.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:55:46.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:55:46.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:55:46.788 [DEBUG] [Thread-15326] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:55:58.788 [DEBUG] [Thread-15328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:56:06.139 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:56:06.140 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:56:13.834 [DEBUG] [Thread-15329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:56:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:56:16.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:56:16.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-11-12T11:56:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 55, 46), 33.19, 10.7, 0.0, 24.65, 25.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:56:17.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:55:46
2025-11-12T11:56:17.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:56:17.715 [DEBUG] [Thread-15330] [transport.py] [_log()] starting thread (client mode): 0x17360430
2025-11-12T11:56:17.715 [DEBUG] [Thread-15330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:56:17.735 [DEBUG] [Thread-15330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:56:17.735 [INFO] [Thread-15330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:56:17.736 [DEBUG] [Thread-15330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:56:17.736 [DEBUG] [Thread-15330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:56:17.736 [DEBUG] [Thread-15330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] client lang: <none>
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] server lang: <none>
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] kex follows: False
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] Compression: none
2025-11-12T11:56:17.737 [DEBUG] [Thread-15330] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:56:17.754 [DEBUG] [Thread-15330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:56:17.755 [DEBUG] [Thread-15330] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:56:17.755 [DEBUG] [Thread-15330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:56:17.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:56:17.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:56:17.757 [DEBUG] [Thread-15330] [transport.py] [_log()] userauth is OK
2025-11-12T11:56:17.758 [DEBUG] [Thread-15330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:56:17.758 [DEBUG] [Thread-15330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:56:17.758 [DEBUG] [Thread-15330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:56:17.758 [DEBUG] [Thread-15330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:56:17.782 [INFO] [Thread-15330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:56:17.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:56:18.435 [DEBUG] [Thread-15330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:56:18.436 [DEBUG] [Thread-15330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:56:18.436 [DEBUG] [Thread-15330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:56:18.477 [DEBUG] [Thread-15330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:56:18.477 [DEBUG] [Thread-15330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:56:18.481 [DEBUG] [Thread-15330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:56:18.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:56:18.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:56:18.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:56:18.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:56:18.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:56:18.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:56:18.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:56:18.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:56:18.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:56:18.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.413631 -999.00  +25.50  18.22     14   -3.00 1 1 1 1 1   888    0 26.36 28.64 ----- 18.2 18.2 280.0 42.2 30.7 -26.6 30.2 -25.3 29.4 -26.0 30.2 -24.4
2025-11-12T11:56:18.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:56:18.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:56:18.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.413631
2025-11-12T11:56:18.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:56:18.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:56:18.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:56:18.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:56:18.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:56:18.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:55:46', tmtdew=33.19, humidity=10.7, cloud=0.0, wind=24.65, temperature=25.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:55:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:56:18.507 [DEBUG] [Thread-15330] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:56: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-11-12T11:56:18.603 [DEBUG] [Thread-15333] [transport.py] [_log()] starting thread (client mode): 0x17363400
2025-11-12T11:56:18.603 [DEBUG] [Thread-15333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:56:18.618 [DEBUG] [Thread-15333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:56:18.618 [INFO] [Thread-15333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:56:18.625 [DEBUG] [Thread-15333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] client lang: <none>
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] server lang: <none>
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] kex follows: False
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] Compression: none
2025-11-12T11:56:18.626 [DEBUG] [Thread-15333] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:56:18.683 [DEBUG] [Thread-15333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:56:18.684 [DEBUG] [Thread-15333] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:56:18.685 [DEBUG] [Thread-15333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:56:18.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:56:18.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:56:18.739 [DEBUG] [Thread-15333] [transport.py] [_log()] userauth is OK
2025-11-12T11:56:18.740 [DEBUG] [Thread-15333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:56:18.740 [DEBUG] [Thread-15333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:56:18.740 [DEBUG] [Thread-15333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:56:18.740 [DEBUG] [Thread-15333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:56:18.758 [INFO] [Thread-15333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:56: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-11-12T11:56:18.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:56:19.592 [DEBUG] [Thread-15333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:56:19.592 [DEBUG] [Thread-15333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:56:19.640 [DEBUG] [Thread-15333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:56:19.640 [DEBUG] [Thread-15333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:56:19.648 [DEBUG] [Thread-15333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:56:19.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:56:19.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-11-12T11:56:19.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T11:56:19.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:56:19.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:56:19.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:56:19.680 [DEBUG] [Thread-15333] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:56:28.868 [DEBUG] [Thread-15335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:56:30.664 [DEBUG] [Thread-15336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:56:43.918 [DEBUG] [Thread-15337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:56:49.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:56:49.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:56:49.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-11-12T11:56:50.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 56, 18), 33.25, 10.68, 0.0, 22.0, 25.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:56:50.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:56:18
2025-11-12T11:56:50.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:56:50.641 [DEBUG] [Thread-15338] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T11:56:50.641 [DEBUG] [Thread-15338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:56:50.662 [DEBUG] [Thread-15338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:56:50.662 [INFO] [Thread-15338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] client lang: <none>
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] server lang: <none>
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] kex follows: False
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:56:50.665 [DEBUG] [Thread-15338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:56:50.666 [DEBUG] [Thread-15338] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:56:50.666 [DEBUG] [Thread-15338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:56:50.666 [DEBUG] [Thread-15338] [transport.py] [_log()] Compression: none
2025-11-12T11:56:50.666 [DEBUG] [Thread-15338] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:56:50.681 [DEBUG] [Thread-15338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:56:50.681 [DEBUG] [Thread-15338] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:56:50.681 [DEBUG] [Thread-15338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:56:50.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:56:50.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:56:50.682 [DEBUG] [Thread-15338] [transport.py] [_log()] userauth is OK
2025-11-12T11:56:50.682 [DEBUG] [Thread-15338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:56:50.682 [DEBUG] [Thread-15338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:56:50.682 [DEBUG] [Thread-15338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:56:50.682 [DEBUG] [Thread-15338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:56:50.691 [INFO] [Thread-15338] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:56:50.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:56:51.291 [DEBUG] [Thread-15338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:56:51.291 [DEBUG] [Thread-15338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:56:51.291 [DEBUG] [Thread-15338] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:56:51.332 [DEBUG] [Thread-15338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:56:51.332 [DEBUG] [Thread-15338] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:56:51.333 [DEBUG] [Thread-15338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:56:51.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:56:51.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:56:51.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:56:51.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:56:51.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:56:51.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:56:51.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.414325 -999.00  +25.70  23.26     14   -3.70 1 1 1 1 1   888    0 27.73 66.66 ----- 23.5 23.3 292.0 35.0 31.1 -24.1 30.3 -23.4 29.3 -26.1 30.4 -22.6
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.414325
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:56:51.343 [DEBUG] [Thread-15338] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:56:51.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:56:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:56:18', tmtdew=33.25, humidity=10.68, cloud=0.0, wind=22.0, temperature=25.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:56:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:56:51.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:56:51.432 [DEBUG] [Thread-15341] [transport.py] [_log()] starting thread (client mode): 0x19dd9420
2025-11-12T11:56:51.432 [DEBUG] [Thread-15341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:56:51.447 [DEBUG] [Thread-15341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:56:51.447 [INFO] [Thread-15341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] client lang: <none>
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] server lang: <none>
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] kex follows: False
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] Compression: none
2025-11-12T11:56:51.455 [DEBUG] [Thread-15341] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:56:51.514 [DEBUG] [Thread-15341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:56:51.514 [DEBUG] [Thread-15341] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:56:51.514 [DEBUG] [Thread-15341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:56:51.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:56:51.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:56:51.571 [DEBUG] [Thread-15341] [transport.py] [_log()] userauth is OK
2025-11-12T11:56:51.571 [DEBUG] [Thread-15341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:56:51.571 [DEBUG] [Thread-15341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:56:51.571 [DEBUG] [Thread-15341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:56:51.571 [DEBUG] [Thread-15341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:56:51.588 [INFO] [Thread-15341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:56:51.589 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:56:51.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:56:52.444 [DEBUG] [Thread-15341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:56:52.444 [DEBUG] [Thread-15341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:56:52.492 [DEBUG] [Thread-15341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:56:52.492 [DEBUG] [Thread-15341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:56:52.500 [DEBUG] [Thread-15341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:56:52.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:56:52.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T11:56: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') -> 00000000
2025-11-12T11:56:52.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:56:52.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:56:52.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:56:52.534 [DEBUG] [Thread-15341] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:56:58.956 [DEBUG] [Thread-15343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:57:06.282 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:57:06.283 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:57:14.009 [DEBUG] [Thread-15344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:57:22.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:57:22.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:57:22.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:57:23.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 56, 50), 36.07, 8.7, 0.0, 27.03, 26.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:57:23.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:56:50
2025-11-12T11:57:23.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:57:23.498 [DEBUG] [Thread-15345] [transport.py] [_log()] starting thread (client mode): 0x17361990
2025-11-12T11:57:23.498 [DEBUG] [Thread-15345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:57:23.518 [DEBUG] [Thread-15345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:57:23.518 [INFO] [Thread-15345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] client lang: <none>
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] server lang: <none>
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] kex follows: False
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:57:23.521 [DEBUG] [Thread-15345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:57:23.522 [DEBUG] [Thread-15345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:57:23.522 [DEBUG] [Thread-15345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:57:23.522 [DEBUG] [Thread-15345] [transport.py] [_log()] Compression: none
2025-11-12T11:57:23.522 [DEBUG] [Thread-15345] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:57:23.540 [DEBUG] [Thread-15345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:57:23.540 [DEBUG] [Thread-15345] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:57:23.540 [DEBUG] [Thread-15345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:57:23.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:57:23.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:57:23.541 [DEBUG] [Thread-15345] [transport.py] [_log()] userauth is OK
2025-11-12T11:57:23.541 [DEBUG] [Thread-15345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:57:23.541 [DEBUG] [Thread-15345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:57:23.541 [DEBUG] [Thread-15345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:57:23.541 [DEBUG] [Thread-15345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:57:23.553 [INFO] [Thread-15345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:57:23.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:57:24.201 [DEBUG] [Thread-15345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:57:24.201 [DEBUG] [Thread-15345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:57:24.201 [DEBUG] [Thread-15345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:57:24.242 [DEBUG] [Thread-15345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:57:24.242 [DEBUG] [Thread-15345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:57:24.244 [DEBUG] [Thread-15345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:57:24.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:57:24.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:57:24.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:57:24.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:57:24.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:57:24.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:57:24.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.414672 -999.00  +26.20  29.50     14   -2.50 1 1 1 1 1   888    0 28.45 83.76 ----- 31.6 29.5 293.8 43.8 31.3 -24.3 30.4 -23.1 29.6 -23.8 30.7 -22.3
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.414672
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:57:24.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:56:50', tmtdew=36.07, humidity=8.7, cloud=0.0, wind=27.03, temperature=26.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:57:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:57:24.262 [DEBUG] [Thread-15345] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:57: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-11-12T11:57:24.350 [DEBUG] [Thread-15348] [transport.py] [_log()] starting thread (client mode): 0x14983040
2025-11-12T11:57:24.350 [DEBUG] [Thread-15348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:57:24.367 [DEBUG] [Thread-15348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:57:24.367 [INFO] [Thread-15348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:57:24.374 [DEBUG] [Thread-15348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:57:24.374 [DEBUG] [Thread-15348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:57:24.374 [DEBUG] [Thread-15348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:57:24.374 [DEBUG] [Thread-15348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:57:24.374 [DEBUG] [Thread-15348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] client lang: <none>
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] server lang: <none>
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] kex follows: False
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] Compression: none
2025-11-12T11:57:24.375 [DEBUG] [Thread-15348] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:57:24.431 [DEBUG] [Thread-15348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:57:24.431 [DEBUG] [Thread-15348] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:57:24.431 [DEBUG] [Thread-15348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:57:24.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:57:24.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:57:24.491 [DEBUG] [Thread-15348] [transport.py] [_log()] userauth is OK
2025-11-12T11:57:24.491 [DEBUG] [Thread-15348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:57:24.491 [DEBUG] [Thread-15348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:57:24.491 [DEBUG] [Thread-15348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:57:24.491 [DEBUG] [Thread-15348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:57:24.504 [INFO] [Thread-15348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:57:24.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:57:24.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:57:25.384 [DEBUG] [Thread-15348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:57:25.384 [DEBUG] [Thread-15348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:57:25.432 [DEBUG] [Thread-15348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:57:25.432 [DEBUG] [Thread-15348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:57:25.440 [DEBUG] [Thread-15348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:57:25.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:57:25.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-11-12T11:57:25.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-11-12T11:57:25.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:57:25.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:57:25.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:57:25.471 [DEBUG] [Thread-15348] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:57:29.040 [DEBUG] [Thread-15350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:57:30.700 [DEBUG] [Thread-15351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:57:44.084 [DEBUG] [Thread-15352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:57:55.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:57:55.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:57:55.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:57:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 57, 22), 36.3, 8.6, 0.0, 33.84, 26.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:57:56.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:57:22
2025-11-12T11:57:56.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:57:56.460 [DEBUG] [Thread-15353] [transport.py] [_log()] starting thread (client mode): 0x19ddbf10
2025-11-12T11:57:56.460 [DEBUG] [Thread-15353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:57:56.481 [DEBUG] [Thread-15353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:57:56.481 [INFO] [Thread-15353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:57:56.484 [DEBUG] [Thread-15353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] client lang: <none>
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] server lang: <none>
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] kex follows: False
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] Compression: none
2025-11-12T11:57:56.485 [DEBUG] [Thread-15353] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:57:56.500 [DEBUG] [Thread-15353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:57:56.500 [DEBUG] [Thread-15353] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:57:56.501 [DEBUG] [Thread-15353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:57:56.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:57:56.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:57:56.501 [DEBUG] [Thread-15353] [transport.py] [_log()] userauth is OK
2025-11-12T11:57:56.501 [DEBUG] [Thread-15353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:57:56.502 [DEBUG] [Thread-15353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:57:56.502 [DEBUG] [Thread-15353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:57:56.502 [DEBUG] [Thread-15353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:57:56.512 [INFO] [Thread-15353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:57:56.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:57:57.159 [DEBUG] [Thread-15353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:57:57.159 [DEBUG] [Thread-15353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:57:57.159 [DEBUG] [Thread-15353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:57:57.199 [DEBUG] [Thread-15353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:57:57.200 [DEBUG] [Thread-15353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:57:57.202 [DEBUG] [Thread-15353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:57:57.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:57:57.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:57:57.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:57:57.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:57:57.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:57:57.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:57:57.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:57:57.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:57:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:57:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.415019 -999.00  +26.20  30.29     14   -3.00 1 2 2 1 1   888    0 28.52 94.63 ----- 39.1 30.3 301.2 43.2 31.4 -24.4 30.5 -23.7 29.7 -21.1 30.8 -23.3
2025-11-12T11:57:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:57:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:57:57.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.415019
2025-11-12T11:57:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:57:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:57:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:57:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:57:57.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T11:57:57.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:57:22', tmtdew=36.3, humidity=8.6, cloud=0.0, wind=33.84, temperature=26.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:57:37.642', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:57:57.221 [DEBUG] [Thread-15353] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:57:57.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:57:57.317 [DEBUG] [Thread-15356] [transport.py] [_log()] starting thread (client mode): 0x19dd92a0
2025-11-12T11:57:57.317 [DEBUG] [Thread-15356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:57:57.332 [DEBUG] [Thread-15356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:57:57.332 [INFO] [Thread-15356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:57:57.339 [DEBUG] [Thread-15356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] client lang: <none>
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] server lang: <none>
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] kex follows: False
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:57:57.340 [DEBUG] [Thread-15356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:57:57.341 [DEBUG] [Thread-15356] [transport.py] [_log()] Compression: none
2025-11-12T11:57:57.341 [DEBUG] [Thread-15356] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:57:57.398 [DEBUG] [Thread-15356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:57:57.399 [DEBUG] [Thread-15356] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:57:57.399 [DEBUG] [Thread-15356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:57:57.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:57:57.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:57:57.455 [DEBUG] [Thread-15356] [transport.py] [_log()] userauth is OK
2025-11-12T11:57:57.456 [DEBUG] [Thread-15356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:57:57.456 [DEBUG] [Thread-15356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:57:57.456 [DEBUG] [Thread-15356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:57:57.456 [DEBUG] [Thread-15356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:57:57.475 [INFO] [Thread-15356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:57:57.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:57:57.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:57:58.339 [DEBUG] [Thread-15356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:57:58.339 [DEBUG] [Thread-15356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:57:58.387 [DEBUG] [Thread-15356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:57:58.387 [DEBUG] [Thread-15356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:57:58.396 [DEBUG] [Thread-15356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:57:58.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:57:58.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-11-12T11:57:58.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-11-12T11:57:58.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:57:58.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:57:58.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:57:58.432 [DEBUG] [Thread-15356] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:57:59.119 [DEBUG] [Thread-15358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:58:06.423 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:58:06.424 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:58:14.168 [DEBUG] [Thread-15359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:58:28.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:58:28.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:58:28.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:58:29.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 57, 54), 36.55, 8.42, 0.0, 41.52, 27.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:58:29.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:57:54
2025-11-12T11:58:29.202 [DEBUG] [Thread-15360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:58:29.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:58:29.384 [DEBUG] [Thread-15361] [transport.py] [_log()] starting thread (client mode): 0x19ddae00
2025-11-12T11:58:29.384 [DEBUG] [Thread-15361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:58:29.399 [DEBUG] [Thread-15361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:58:29.399 [INFO] [Thread-15361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:58:29.402 [DEBUG] [Thread-15361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] client lang: <none>
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] server lang: <none>
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] kex follows: False
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] Compression: none
2025-11-12T11:58:29.403 [DEBUG] [Thread-15361] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:58:29.420 [DEBUG] [Thread-15361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:58:29.420 [DEBUG] [Thread-15361] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:58:29.421 [DEBUG] [Thread-15361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:58:29.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:58:29.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:58:29.423 [DEBUG] [Thread-15361] [transport.py] [_log()] userauth is OK
2025-11-12T11:58:29.423 [DEBUG] [Thread-15361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:58:29.423 [DEBUG] [Thread-15361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:58:29.423 [DEBUG] [Thread-15361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:58:29.423 [DEBUG] [Thread-15361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:58:29.441 [INFO] [Thread-15361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:58:29.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:58:30.046 [DEBUG] [Thread-15361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:58:30.046 [DEBUG] [Thread-15361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:58:30.046 [DEBUG] [Thread-15361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:58:30.086 [DEBUG] [Thread-15361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:58:30.087 [DEBUG] [Thread-15361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:58:30.089 [DEBUG] [Thread-15361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:58:30.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:58:30.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:58:30.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:58:30.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:58:30.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:58:30.105 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:58:30.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:58:30.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:58:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:58:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.415367 -999.00  +25.90  30.98     15   -2.30 1 1 2 1 1   888    0 29.27 117.75 ----- 32.1 31.0 290.2 44.1 31.4 -23.9 30.6 -23.4 29.9 -23.2 30.9 -23.2
2025-11-12T11:58:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:58:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:58:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.415367
2025-11-12T11:58:30.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:58:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:58:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:58:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:58:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:58:30.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:57:54', tmtdew=36.55, humidity=8.42, cloud=0.0, wind=41.52, temperature=27.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:58:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:58:30.108 [DEBUG] [Thread-15361] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:58:30.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:58:30.203 [DEBUG] [Thread-15364] [transport.py] [_log()] starting thread (client mode): 0x19ddae90
2025-11-12T11:58:30.203 [DEBUG] [Thread-15364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:58:30.218 [DEBUG] [Thread-15364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:58:30.219 [INFO] [Thread-15364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:58:30.226 [DEBUG] [Thread-15364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:58:30.226 [DEBUG] [Thread-15364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:58:30.226 [DEBUG] [Thread-15364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:58:30.226 [DEBUG] [Thread-15364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] client lang: <none>
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] server lang: <none>
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] kex follows: False
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] Compression: none
2025-11-12T11:58:30.227 [DEBUG] [Thread-15364] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:58:30.283 [DEBUG] [Thread-15364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:58:30.284 [DEBUG] [Thread-15364] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:58:30.284 [DEBUG] [Thread-15364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:58:30.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:58:30.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:58:30.339 [DEBUG] [Thread-15364] [transport.py] [_log()] userauth is OK
2025-11-12T11:58:30.339 [DEBUG] [Thread-15364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:58:30.339 [DEBUG] [Thread-15364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:58:30.340 [DEBUG] [Thread-15364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:58:30.340 [DEBUG] [Thread-15364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:58:30.358 [INFO] [Thread-15364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:58:30.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:58:30.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:58:30.756 [DEBUG] [Thread-15366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:58:31.227 [DEBUG] [Thread-15364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:58:31.227 [DEBUG] [Thread-15364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:58:31.276 [DEBUG] [Thread-15364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:58:31.276 [DEBUG] [Thread-15364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:58:31.285 [DEBUG] [Thread-15364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:58:31.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:58:31.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-11-12T11:58:31.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-11-12T11:58:31.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:58:31.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:58:31.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:58:31.321 [DEBUG] [Thread-15364] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:58:44.231 [DEBUG] [Thread-15367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:58:59.271 [DEBUG] [Thread-15368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:59:01.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:59:01.344 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:59:01.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:59:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 58, 58), 34.98, 9.4, 0.0, 29.48, 26.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:59:01.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:58:58
2025-11-12T11:59:02.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:59:02.265 [DEBUG] [Thread-15369] [transport.py] [_log()] starting thread (client mode): 0x19dd8f40
2025-11-12T11:59:02.266 [DEBUG] [Thread-15369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:59:02.284 [DEBUG] [Thread-15369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:59:02.284 [INFO] [Thread-15369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] client lang: <none>
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] server lang: <none>
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] kex follows: False
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:59:02.287 [DEBUG] [Thread-15369] [transport.py] [_log()] Compression: none
2025-11-12T11:59:02.288 [DEBUG] [Thread-15369] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:59:02.303 [DEBUG] [Thread-15369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:59:02.303 [DEBUG] [Thread-15369] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:59:02.304 [DEBUG] [Thread-15369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:59:02.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:59:02.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:59:02.306 [DEBUG] [Thread-15369] [transport.py] [_log()] userauth is OK
2025-11-12T11:59:02.306 [DEBUG] [Thread-15369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:59:02.306 [DEBUG] [Thread-15369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:59:02.306 [DEBUG] [Thread-15369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:59:02.306 [DEBUG] [Thread-15369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:59:02.331 [INFO] [Thread-15369] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:59:02.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:59:02.982 [DEBUG] [Thread-15369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:59:02.982 [DEBUG] [Thread-15369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:59:02.982 [DEBUG] [Thread-15369] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:59:03.022 [DEBUG] [Thread-15369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:59:03.022 [DEBUG] [Thread-15369] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:59:03.024 [DEBUG] [Thread-15369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:59:03.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:59:03.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:59:03.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:59:03.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:59:03.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:59:03.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:59:03.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:59:03.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:59:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:59:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.415714 -999.00  +25.40  31.56     15   -2.20 1 1 2 1 1   888    0 30.09 121.61 ----- 26.6 31.6 294.8 44.4 31.4 -24.0 30.6 -23.4 30.0 -24.6 30.8 -22.8
2025-11-12T11:59:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:59:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:59:03.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.415714
2025-11-12T11:59:03.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:59:03.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:59:03.047 [DEBUG] [Thread-15369] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:59:03.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:59:03.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:59:03.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T11:59:03.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:58:58', tmtdew=34.98, humidity=9.4, cloud=0.0, wind=29.48, temperature=26.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:58:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:59:03.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:59:03.143 [DEBUG] [Thread-15372] [transport.py] [_log()] starting thread (client mode): 0x149835e0
2025-11-12T11:59:03.143 [DEBUG] [Thread-15372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:59:03.159 [DEBUG] [Thread-15372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:59:03.159 [INFO] [Thread-15372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:59:03.167 [DEBUG] [Thread-15372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:59:03.167 [DEBUG] [Thread-15372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:59:03.167 [DEBUG] [Thread-15372] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:59:03.167 [DEBUG] [Thread-15372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:59:03.167 [DEBUG] [Thread-15372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:59:03.167 [DEBUG] [Thread-15372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] client lang: <none>
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] server lang: <none>
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] kex follows: False
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:59:03.168 [DEBUG] [Thread-15372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:59:03.169 [DEBUG] [Thread-15372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:59:03.169 [DEBUG] [Thread-15372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:59:03.169 [DEBUG] [Thread-15372] [transport.py] [_log()] Compression: none
2025-11-12T11:59:03.169 [DEBUG] [Thread-15372] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:59:03.227 [DEBUG] [Thread-15372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:59:03.228 [DEBUG] [Thread-15372] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:59:03.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:59:03.230 [DEBUG] [Thread-15372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:59:03.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:59:03.283 [DEBUG] [Thread-15372] [transport.py] [_log()] userauth is OK
2025-11-12T11:59:03.283 [DEBUG] [Thread-15372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:59:03.283 [DEBUG] [Thread-15372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:59:03.283 [DEBUG] [Thread-15372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:59:03.283 [DEBUG] [Thread-15372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:59:03.302 [INFO] [Thread-15372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:59:03.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:59:03.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:59:04.196 [DEBUG] [Thread-15372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:59:04.196 [DEBUG] [Thread-15372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:59:04.243 [DEBUG] [Thread-15372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:59:04.244 [DEBUG] [Thread-15372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:59:04.253 [DEBUG] [Thread-15372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:59:04.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:59:04.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-11-12T11:59:04.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-11-12T11:59:04.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:59:04.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:59:04.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:59:04.287 [DEBUG] [Thread-15372] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:59:06.564 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:59:06.566 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:59:14.302 [DEBUG] [Thread-15374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:59:29.352 [DEBUG] [Thread-15375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:59:30.795 [DEBUG] [Thread-15376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:59:34.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T11:59:34.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T11:59:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T11:59:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 11, 59, 30), 34.43, 9.78, 0.0, 27.44, 26.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T11:59:34.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 11:59:30
2025-11-12T11:59:35.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T11:59:35.224 [DEBUG] [Thread-15377] [transport.py] [_log()] starting thread (client mode): 0x14981c30
2025-11-12T11:59:35.224 [DEBUG] [Thread-15377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:59:35.244 [DEBUG] [Thread-15377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T11:59:35.244 [INFO] [Thread-15377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:59:35.247 [DEBUG] [Thread-15377] [transport.py] [_log()] client lang: <none>
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] server lang: <none>
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] kex follows: False
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] Compression: none
2025-11-12T11:59:35.248 [DEBUG] [Thread-15377] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:59:35.266 [DEBUG] [Thread-15377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:59:35.267 [DEBUG] [Thread-15377] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:59:35.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T11:59:35.269 [DEBUG] [Thread-15377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T11:59:35.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:59:35.271 [DEBUG] [Thread-15377] [transport.py] [_log()] userauth is OK
2025-11-12T11:59:35.272 [DEBUG] [Thread-15377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:59:35.272 [DEBUG] [Thread-15377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:59:35.272 [DEBUG] [Thread-15377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T11:59:35.272 [DEBUG] [Thread-15377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:59:35.292 [INFO] [Thread-15377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:59:35.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:59:35.913 [DEBUG] [Thread-15377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:59:35.913 [DEBUG] [Thread-15377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:59:35.913 [DEBUG] [Thread-15377] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T11:59:35.954 [DEBUG] [Thread-15377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:59:35.954 [DEBUG] [Thread-15377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:59:35.957 [DEBUG] [Thread-15377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:59:35.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:59:35.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T11:59:35.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T11:59:35.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T11:59:35.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:59:35.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T11:59:35.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:59:35.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:59:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T11:59:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.416061 -999.00  +25.70  32.88     15   -2.00 1 2 2 1 1   888    0 30.50 131.29 ----- 35.7 32.9 289.6 38.5 31.6 -25.2 30.7 -23.9 30.1 -21.8 30.9 -23.2
2025-11-12T11:59:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T11:59:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T11:59:35.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.416061
2025-11-12T11:59:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T11:59:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T11:59:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T11:59:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T11:59:35.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T11:59:35.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T11:59:30', tmtdew=34.43, humidity=9.78, cloud=0.0, wind=27.44, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:59:07.670', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T11:59:35.985 [DEBUG] [Thread-15377] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:59:36.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T11:59:36.081 [DEBUG] [Thread-15380] [transport.py] [_log()] starting thread (client mode): 0x14980f40
2025-11-12T11:59:36.082 [DEBUG] [Thread-15380] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T11:59:36.100 [DEBUG] [Thread-15380] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T11:59:36.101 [INFO] [Thread-15380] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T11:59:36.108 [DEBUG] [Thread-15380] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T11:59:36.108 [DEBUG] [Thread-15380] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] client lang: <none>
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] server lang: <none>
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] kex follows: False
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T11:59:36.109 [DEBUG] [Thread-15380] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T11:59:36.110 [DEBUG] [Thread-15380] [transport.py] [_log()] Compression: none
2025-11-12T11:59:36.110 [DEBUG] [Thread-15380] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T11:59:36.171 [DEBUG] [Thread-15380] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T11:59:36.172 [DEBUG] [Thread-15380] [transport.py] [_log()] Switch to new keys ...
2025-11-12T11:59:36.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T11:59:36.173 [DEBUG] [Thread-15380] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T11:59:36.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T11:59:36.230 [DEBUG] [Thread-15380] [transport.py] [_log()] userauth is OK
2025-11-12T11:59:36.230 [DEBUG] [Thread-15380] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T11:59:36.231 [DEBUG] [Thread-15380] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T11:59:36.231 [DEBUG] [Thread-15380] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T11:59:36.231 [DEBUG] [Thread-15380] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T11:59:36.253 [INFO] [Thread-15380] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T11:59:36.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T11:59:36.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T11:59:37.102 [DEBUG] [Thread-15380] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T11:59:37.102 [DEBUG] [Thread-15380] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T11:59:37.150 [DEBUG] [Thread-15380] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T11:59:37.150 [DEBUG] [Thread-15380] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T11:59:37.159 [DEBUG] [Thread-15380] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T11:59:37.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T11:59:37.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-11-12T11:59:37.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-11-12T11:59:37.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T11:59:37.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T11:59:37.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T11:59:37.196 [DEBUG] [Thread-15380] [transport.py] [_log()] EOF in transport thread
2025-11-12T11:59:44.386 [DEBUG] [Thread-15382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T11:59:59.437 [DEBUG] [Thread-15383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:00:06.707 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:00:06.709 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:00:07.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:00:07.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:00: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-11-12T12:00:07.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 0, 2), 34.18, 9.95, 0.0, 26.57, 26.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:00:07.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:00:02
2025-11-12T12:00:07.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:00:08.099 [DEBUG] [Thread-15384] [transport.py] [_log()] starting thread (client mode): 0x173443a0
2025-11-12T12:00:08.100 [DEBUG] [Thread-15384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:00:08.119 [DEBUG] [Thread-15384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:00:08.119 [INFO] [Thread-15384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:00:08.121 [DEBUG] [Thread-15384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] client lang: <none>
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] server lang: <none>
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] kex follows: False
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] Compression: none
2025-11-12T12:00:08.122 [DEBUG] [Thread-15384] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:00:08.130 [DEBUG] [Thread-15384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:00:08.130 [DEBUG] [Thread-15384] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:00:08.130 [DEBUG] [Thread-15384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:00:08.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:00:08.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:00:08.132 [DEBUG] [Thread-15384] [transport.py] [_log()] userauth is OK
2025-11-12T12:00:08.132 [DEBUG] [Thread-15384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:00:08.132 [DEBUG] [Thread-15384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:00:08.132 [DEBUG] [Thread-15384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:00:08.132 [DEBUG] [Thread-15384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:00:08.143 [INFO] [Thread-15384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:00:08.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:00:13.393 [DEBUG] [Thread-15384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:00:13.393 [DEBUG] [Thread-15384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:00:13.402 [DEBUG] [Thread-15384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:00:13.433 [DEBUG] [Thread-15384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:00:13.434 [DEBUG] [Thread-15384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:00:13.438 [DEBUG] [Thread-15384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:00:13.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:00:13.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:00:13.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:00:13.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:00:13.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:00:13.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:00:13.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:00:13.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:00:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:00:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.416061 -999.00  +25.70  32.88     15   -2.00 1 2 2 1 1   888    0 30.50 131.29 ----- 35.7 32.9 289.6 38.5 31.6 -25.2 30.7 -23.9 30.1 -21.8 30.9 -23.2
2025-11-12T12:00:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:00:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:00:13.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.416061
2025-11-12T12:00:13.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:00:13.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:00:13.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:00:13.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:00:13.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T12:00:13.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:00:02', tmtdew=34.18, humidity=9.95, cloud=0.0, wind=26.57, temperature=26.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:59:07.670', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:00:13.728 [DEBUG] [Thread-15384] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:00:13.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:00:13.821 [DEBUG] [Thread-15387] [transport.py] [_log()] starting thread (client mode): 0x14954d90
2025-11-12T12:00:13.821 [DEBUG] [Thread-15387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:00:13.837 [DEBUG] [Thread-15387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:00:13.837 [INFO] [Thread-15387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:00:13.845 [DEBUG] [Thread-15387] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:00:13.845 [DEBUG] [Thread-15387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:00:13.845 [DEBUG] [Thread-15387] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:00:13.845 [DEBUG] [Thread-15387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:00:13.845 [DEBUG] [Thread-15387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:00:13.845 [DEBUG] [Thread-15387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:00:13.845 [DEBUG] [Thread-15387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:00:13.845 [DEBUG] [Thread-15387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] client lang: <none>
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] server lang: <none>
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] kex follows: False
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] Compression: none
2025-11-12T12:00:13.846 [DEBUG] [Thread-15387] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:00:13.906 [DEBUG] [Thread-15387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:00:13.907 [DEBUG] [Thread-15387] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:00:13.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:00:13.908 [DEBUG] [Thread-15387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:00:13.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:00:13.963 [DEBUG] [Thread-15387] [transport.py] [_log()] userauth is OK
2025-11-12T12:00:13.964 [DEBUG] [Thread-15387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:00:13.964 [DEBUG] [Thread-15387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:00:13.964 [DEBUG] [Thread-15387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:00:13.964 [DEBUG] [Thread-15387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:00:13.985 [INFO] [Thread-15387] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:00:13.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:00:13.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:00:14.467 [DEBUG] [Thread-15389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:00:14.860 [DEBUG] [Thread-15387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:00:14.860 [DEBUG] [Thread-15387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:00:14.908 [DEBUG] [Thread-15387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:00:14.908 [DEBUG] [Thread-15387] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:00:14.917 [DEBUG] [Thread-15387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:00:14.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:00:14.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-11-12T12:00:14.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-11-12T12:00:14.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:00:14.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:00:14.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:00:14.953 [DEBUG] [Thread-15387] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:00:29.524 [DEBUG] [Thread-15390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:00:30.828 [DEBUG] [Thread-15391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:00:44.554 [DEBUG] [Thread-15392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:00:44.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:00:44.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:00: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-11-12T12:00:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 0, 34), 32.91, 11.06, 0.0, 27.19, 25.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:00:45.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:00:34
2025-11-12T12:00:45.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:00:45.892 [DEBUG] [Thread-15393] [transport.py] [_log()] starting thread (client mode): 0x19ddbf40
2025-11-12T12:00:45.893 [DEBUG] [Thread-15393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:00:45.913 [DEBUG] [Thread-15393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:00:45.913 [INFO] [Thread-15393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:00:45.916 [DEBUG] [Thread-15393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] client lang: <none>
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] server lang: <none>
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] kex follows: False
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] Compression: none
2025-11-12T12:00:45.917 [DEBUG] [Thread-15393] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:00:45.932 [DEBUG] [Thread-15393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:00:45.933 [DEBUG] [Thread-15393] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:00:45.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:00:45.934 [DEBUG] [Thread-15393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:00:45.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:00:45.935 [DEBUG] [Thread-15393] [transport.py] [_log()] userauth is OK
2025-11-12T12:00:45.935 [DEBUG] [Thread-15393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:00:45.935 [DEBUG] [Thread-15393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:00:45.935 [DEBUG] [Thread-15393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:00:45.935 [DEBUG] [Thread-15393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:00:45.956 [INFO] [Thread-15393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:00:45.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:00:46.557 [DEBUG] [Thread-15393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:00:46.557 [DEBUG] [Thread-15393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:00:46.557 [DEBUG] [Thread-15393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:00:46.598 [DEBUG] [Thread-15393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:00:46.598 [DEBUG] [Thread-15393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:00:46.601 [DEBUG] [Thread-15393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:00:46.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:00:46.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:00:46.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:00:46.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:00:46.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:00:46.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:00:46.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:00:46.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.416409 -999.00  +25.80  30.93     16   -1.90 1 1 2 1 1   888    0 30.38 136.98 ----- 32.8 30.9 298.6 41.5 31.6 -24.2 30.8 -23.6 30.0 -23.3 31.0 -22.6
2025-11-12T12:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.416409
2025-11-12T12:00:46.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:00:46.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:00:34', tmtdew=32.91, humidity=11.06, cloud=0.0, wind=27.19, temperature=25.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T09:59:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:00:46.621 [DEBUG] [Thread-15393] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:00:46.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:00:59.590 [DEBUG] [Thread-15396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:01:06.850 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:01:06.852 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:01:14.644 [DEBUG] [Thread-15397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:01:29.683 [DEBUG] [Thread-15398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:01:30.876 [DEBUG] [Thread-15399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:01:44.720 [DEBUG] [Thread-15400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:01:59.758 [DEBUG] [Thread-15401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:02:06.993 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:02:06.994 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:02:14.795 [DEBUG] [Thread-15402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:02:29.834 [DEBUG] [Thread-15403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:02:30.921 [DEBUG] [Thread-15404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:02:44.865 [DEBUG] [Thread-15405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:02:59.896 [DEBUG] [Thread-15406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:03:00.667 [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-11-12T12:03:07.136 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:03:07.137 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:03:14.932 [DEBUG] [Thread-15407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:03:29.965 [DEBUG] [Thread-15408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:03:30.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:03:30.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:03:30.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-11-12T12:03:30.949 [DEBUG] [Thread-15409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:03:31.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 3, 14), 32.18, 11.53, 0.0, 25.51, 26.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:03:31.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:03:14
2025-11-12T12:03:31.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:03:31.603 [DEBUG] [Thread-15410] [transport.py] [_log()] starting thread (client mode): 0x19ddbfd0
2025-11-12T12:03:31.604 [DEBUG] [Thread-15410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:03:31.625 [DEBUG] [Thread-15410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:03:31.625 [INFO] [Thread-15410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] client lang: <none>
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] server lang: <none>
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] kex follows: False
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] Compression: none
2025-11-12T12:03:31.629 [DEBUG] [Thread-15410] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:03:31.638 [DEBUG] [Thread-15410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:03:31.638 [DEBUG] [Thread-15410] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:03:31.639 [DEBUG] [Thread-15410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:03:31.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:03:31.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:03:31.640 [DEBUG] [Thread-15410] [transport.py] [_log()] userauth is OK
2025-11-12T12:03:31.641 [DEBUG] [Thread-15410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:03:31.641 [DEBUG] [Thread-15410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:03:31.641 [DEBUG] [Thread-15410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:03:31.641 [DEBUG] [Thread-15410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:03:31.660 [INFO] [Thread-15410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:03:31.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:03:32.448 [DEBUG] [Thread-15410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:03:32.449 [DEBUG] [Thread-15410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:03:32.449 [DEBUG] [Thread-15410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:03:32.489 [DEBUG] [Thread-15410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:03:32.489 [DEBUG] [Thread-15410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:03:32.492 [DEBUG] [Thread-15410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:03:32.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:03:32.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:03:32.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:03:32.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:03:32.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:03:32.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:03:32.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:03:32.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:03:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:03:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.418492 -999.00  +26.70  19.40     17   -0.10 1 2 1 1 1   888    0 30.03 129.02 ----- 23.4 19.4 290.4 28.9 32.3 -23.8 31.4 -22.3 30.6 -22.4 31.7 -21.9
2025-11-12T12:03:32.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:03:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:03:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.418492
2025-11-12T12:03:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:03:32.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:03:32.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:03:32.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:03:32.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T12:03:32.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:03:14', tmtdew=32.18, humidity=11.53, cloud=0.0, wind=25.51, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:02:37.709', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:03:32.516 [DEBUG] [Thread-15410] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:03:32.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:03:32.611 [DEBUG] [Thread-15413] [transport.py] [_log()] starting thread (client mode): 0x173becb0
2025-11-12T12:03:32.611 [DEBUG] [Thread-15413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:03:32.626 [DEBUG] [Thread-15413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:03:32.626 [INFO] [Thread-15413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:03:32.633 [DEBUG] [Thread-15413] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] client lang: <none>
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] server lang: <none>
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] kex follows: False
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:03:32.634 [DEBUG] [Thread-15413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:03:32.635 [DEBUG] [Thread-15413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:03:32.635 [DEBUG] [Thread-15413] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:03:32.635 [DEBUG] [Thread-15413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:03:32.635 [DEBUG] [Thread-15413] [transport.py] [_log()] Compression: none
2025-11-12T12:03:32.635 [DEBUG] [Thread-15413] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:03:32.692 [DEBUG] [Thread-15413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:03:32.692 [DEBUG] [Thread-15413] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:03:32.693 [DEBUG] [Thread-15413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:03:32.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:03:32.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:03:32.751 [DEBUG] [Thread-15413] [transport.py] [_log()] userauth is OK
2025-11-12T12:03:32.751 [DEBUG] [Thread-15413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:03:32.752 [DEBUG] [Thread-15413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:03:32.752 [DEBUG] [Thread-15413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:03:32.752 [DEBUG] [Thread-15413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:03:32.771 [INFO] [Thread-15413] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:03:32.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:03:32.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:03:33.614 [DEBUG] [Thread-15413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:03:33.615 [DEBUG] [Thread-15413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:03:33.663 [DEBUG] [Thread-15413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:03:33.663 [DEBUG] [Thread-15413] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:03:33.672 [DEBUG] [Thread-15413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:03:33.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:03:33.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-11-12T12:03:33.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-11-12T12:03:33.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:03:33.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:03:33.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:03:33.709 [DEBUG] [Thread-15413] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:03:45.002 [DEBUG] [Thread-15415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:04:00.050 [DEBUG] [Thread-15416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:04:03.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:04:03.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:04:03.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-11-12T12:04:04.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 3, 46), 32.22, 11.58, 0.0, 19.36, 26.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:04:04.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:03:46
2025-11-12T12:04:04.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:04:04.655 [DEBUG] [Thread-15417] [transport.py] [_log()] starting thread (client mode): 0x17360700
2025-11-12T12:04:04.656 [DEBUG] [Thread-15417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:04:04.675 [DEBUG] [Thread-15417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:04:04.675 [INFO] [Thread-15417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:04:04.678 [DEBUG] [Thread-15417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:04:04.678 [DEBUG] [Thread-15417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:04:04.678 [DEBUG] [Thread-15417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:04:04.678 [DEBUG] [Thread-15417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:04:04.678 [DEBUG] [Thread-15417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] client lang: <none>
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] server lang: <none>
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] kex follows: False
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] Compression: none
2025-11-12T12:04:04.679 [DEBUG] [Thread-15417] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:04:04.695 [DEBUG] [Thread-15417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:04:04.695 [DEBUG] [Thread-15417] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:04:04.695 [DEBUG] [Thread-15417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:04:04.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:04:04.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:04:04.737 [DEBUG] [Thread-15417] [transport.py] [_log()] userauth is OK
2025-11-12T12:04:04.737 [DEBUG] [Thread-15417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:04:04.737 [DEBUG] [Thread-15417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:04:04.737 [DEBUG] [Thread-15417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:04:04.738 [DEBUG] [Thread-15417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:04:04.774 [INFO] [Thread-15417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:04:04.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:04:05.395 [DEBUG] [Thread-15417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:04:05.396 [DEBUG] [Thread-15417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:04:05.396 [DEBUG] [Thread-15417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:04:05.437 [DEBUG] [Thread-15417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:04:05.437 [DEBUG] [Thread-15417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:04:05.440 [DEBUG] [Thread-15417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:04:05.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:04:05.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:04:05.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:04:05.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:04:05.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:04:05.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:04:05.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:04:05.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:04:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:04:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.418839 -999.00  +27.00  19.59     17   +0.00 1 2 1 1 1   888    0 30.12 119.21 ----- 21.0 19.6 301.3 28.8 32.5 -22.7 31.5 -22.2 30.7 -23.0 31.8 -22.1
2025-11-12T12:04:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:04:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:04:05.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.418839
2025-11-12T12:04:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:04:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:04:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:04:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:04:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T12:04:05.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:03:46', tmtdew=32.22, humidity=11.58, cloud=0.0, wind=19.36, temperature=26.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:03:07.690', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:04:05.468 [DEBUG] [Thread-15417] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:04:05.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:04:05.562 [DEBUG] [Thread-15420] [transport.py] [_log()] starting thread (client mode): 0x17361ba0
2025-11-12T12:04:05.562 [DEBUG] [Thread-15420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:04:05.577 [DEBUG] [Thread-15420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:04:05.577 [INFO] [Thread-15420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:04:05.584 [DEBUG] [Thread-15420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:04:05.584 [DEBUG] [Thread-15420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:04:05.584 [DEBUG] [Thread-15420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:04:05.584 [DEBUG] [Thread-15420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:04:05.584 [DEBUG] [Thread-15420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:04:05.584 [DEBUG] [Thread-15420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:04:05.584 [DEBUG] [Thread-15420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:04:05.584 [DEBUG] [Thread-15420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] client lang: <none>
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] server lang: <none>
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] kex follows: False
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] Compression: none
2025-11-12T12:04:05.585 [DEBUG] [Thread-15420] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:04:05.642 [DEBUG] [Thread-15420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:04:05.642 [DEBUG] [Thread-15420] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:04:05.643 [DEBUG] [Thread-15420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:04:05.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:04:05.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:04:05.700 [DEBUG] [Thread-15420] [transport.py] [_log()] userauth is OK
2025-11-12T12:04:05.700 [DEBUG] [Thread-15420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:04:05.701 [DEBUG] [Thread-15420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:04:05.701 [DEBUG] [Thread-15420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:04:05.701 [DEBUG] [Thread-15420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:04:05.720 [INFO] [Thread-15420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:04:05.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:04:05.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:04:06.552 [DEBUG] [Thread-15420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:04:06.552 [DEBUG] [Thread-15420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:04:06.600 [DEBUG] [Thread-15420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:04:06.601 [DEBUG] [Thread-15420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:04:06.610 [DEBUG] [Thread-15420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:04:06.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:04:06.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-11-12T12:04:06.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:04:06.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:04:06.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:04:06.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:04:06.646 [DEBUG] [Thread-15420] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:04:07.280 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:04:07.281 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:04:15.091 [DEBUG] [Thread-15422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:04:30.148 [DEBUG] [Thread-15423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:04:30.977 [DEBUG] [Thread-15424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:04:36.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:04:36.662 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:04:36.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:04:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 4, 18), 32.35, 11.46, 0.0, 18.56, 26.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:04:37.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:04:18
2025-11-12T12:04:37.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:04:37.582 [DEBUG] [Thread-15425] [transport.py] [_log()] starting thread (client mode): 0x1493ed40
2025-11-12T12:04:37.582 [DEBUG] [Thread-15425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:04:37.602 [DEBUG] [Thread-15425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:04:37.602 [INFO] [Thread-15425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:04:37.605 [DEBUG] [Thread-15425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] client lang: <none>
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] server lang: <none>
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] kex follows: False
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:04:37.606 [DEBUG] [Thread-15425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:04:37.607 [DEBUG] [Thread-15425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:04:37.607 [DEBUG] [Thread-15425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:04:37.607 [DEBUG] [Thread-15425] [transport.py] [_log()] Compression: none
2025-11-12T12:04:37.607 [DEBUG] [Thread-15425] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:04:37.626 [DEBUG] [Thread-15425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:04:37.627 [DEBUG] [Thread-15425] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:04:37.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:04:37.628 [DEBUG] [Thread-15425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:04:37.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:04:37.630 [DEBUG] [Thread-15425] [transport.py] [_log()] userauth is OK
2025-11-12T12:04:37.631 [DEBUG] [Thread-15425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:04:37.631 [DEBUG] [Thread-15425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:04:37.631 [DEBUG] [Thread-15425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:04:37.631 [DEBUG] [Thread-15425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:04:37.657 [INFO] [Thread-15425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:04:37.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:04:38.384 [DEBUG] [Thread-15425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:04:38.384 [DEBUG] [Thread-15425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:04:38.385 [DEBUG] [Thread-15425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:04:38.425 [DEBUG] [Thread-15425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:04:38.426 [DEBUG] [Thread-15425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:04:38.429 [DEBUG] [Thread-15425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:04:38.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:04:38.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:04:38.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:04:38.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:04:38.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:04:38.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:04:38.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:04:38.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:04:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:04:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.419533 -999.00  +26.40  30.64     16   -0.90 1 1 2 1 1   888    0 30.31 127.93 ----- 26.2 30.6 297.4 34.5 32.2 -25.8 31.4 -25.8 31.0 -22.5 31.7 -24.5
2025-11-12T12:04:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:04:38.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:04:38.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.419533
2025-11-12T12:04:38.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:04:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:04:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:04:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:04:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:04:38.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:04:18', tmtdew=32.35, humidity=11.46, cloud=0.0, wind=18.56, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:04:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:04:38.458 [DEBUG] [Thread-15425] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:04:38.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:04:38.554 [DEBUG] [Thread-15428] [transport.py] [_log()] starting thread (client mode): 0x17363fd0
2025-11-12T12:04:38.554 [DEBUG] [Thread-15428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:04:38.570 [DEBUG] [Thread-15428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:04:38.570 [INFO] [Thread-15428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:04:38.578 [DEBUG] [Thread-15428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:04:38.579 [DEBUG] [Thread-15428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:04:38.579 [DEBUG] [Thread-15428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:04:38.579 [DEBUG] [Thread-15428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:04:38.579 [DEBUG] [Thread-15428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:04:38.579 [DEBUG] [Thread-15428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:04:38.579 [DEBUG] [Thread-15428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:04:38.579 [DEBUG] [Thread-15428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:04:38.579 [DEBUG] [Thread-15428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:04:38.580 [DEBUG] [Thread-15428] [transport.py] [_log()] client lang: <none>
2025-11-12T12:04:38.580 [DEBUG] [Thread-15428] [transport.py] [_log()] server lang: <none>
2025-11-12T12:04:38.580 [DEBUG] [Thread-15428] [transport.py] [_log()] kex follows: False
2025-11-12T12:04:38.580 [DEBUG] [Thread-15428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:04:38.580 [DEBUG] [Thread-15428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:04:38.580 [DEBUG] [Thread-15428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:04:38.581 [DEBUG] [Thread-15428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:04:38.581 [DEBUG] [Thread-15428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:04:38.581 [DEBUG] [Thread-15428] [transport.py] [_log()] Compression: none
2025-11-12T12:04:38.581 [DEBUG] [Thread-15428] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:04:38.639 [DEBUG] [Thread-15428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:04:38.639 [DEBUG] [Thread-15428] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:04:38.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:04:38.641 [DEBUG] [Thread-15428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:04:38.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:04:38.695 [DEBUG] [Thread-15428] [transport.py] [_log()] userauth is OK
2025-11-12T12:04:38.695 [DEBUG] [Thread-15428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:04:38.696 [DEBUG] [Thread-15428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:04:38.696 [DEBUG] [Thread-15428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:04:38.696 [DEBUG] [Thread-15428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:04:38.720 [INFO] [Thread-15428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:04:38.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:04:38.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:04:39.571 [DEBUG] [Thread-15428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:04:39.572 [DEBUG] [Thread-15428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:04:39.619 [DEBUG] [Thread-15428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:04:39.619 [DEBUG] [Thread-15428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:04:39.628 [DEBUG] [Thread-15428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:04:39.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:04:39.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-11-12T12:04:39.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-11-12T12:04:39.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:04:39.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:04:39.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:04:39.662 [DEBUG] [Thread-15428] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:04:45.182 [DEBUG] [Thread-15430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:05:00.232 [DEBUG] [Thread-15431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:05:07.423 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:05:07.424 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:05:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:05:09.685 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:05:09.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:05:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 4, 50), 32.62, 11.31, 0.0, 16.41, 26.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:05:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:04:50
2025-11-12T12:05:10.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:05:10.655 [DEBUG] [Thread-15432] [transport.py] [_log()] starting thread (client mode): 0x14981660
2025-11-12T12:05:10.655 [DEBUG] [Thread-15432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:05:10.675 [DEBUG] [Thread-15432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:05:10.675 [INFO] [Thread-15432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:05:10.678 [DEBUG] [Thread-15432] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:05:10.678 [DEBUG] [Thread-15432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:05:10.678 [DEBUG] [Thread-15432] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:05:10.678 [DEBUG] [Thread-15432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] client lang: <none>
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] server lang: <none>
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] kex follows: False
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] Compression: none
2025-11-12T12:05:10.679 [DEBUG] [Thread-15432] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:05:10.695 [DEBUG] [Thread-15432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:05:10.695 [DEBUG] [Thread-15432] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:05:10.695 [DEBUG] [Thread-15432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:05:10.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:05:10.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:05:10.695 [DEBUG] [Thread-15432] [transport.py] [_log()] userauth is OK
2025-11-12T12:05:10.695 [DEBUG] [Thread-15432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:05:10.695 [DEBUG] [Thread-15432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:05:10.695 [DEBUG] [Thread-15432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:05:10.695 [DEBUG] [Thread-15432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:05:10.711 [INFO] [Thread-15432] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:05:10.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:05:13.184 [DEBUG] [Thread-15432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:05:13.184 [DEBUG] [Thread-15432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:05:13.185 [DEBUG] [Thread-15432] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:05:13.225 [DEBUG] [Thread-15432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:05:13.225 [DEBUG] [Thread-15432] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:05:13.229 [DEBUG] [Thread-15432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:05:13.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:05:13.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:05:13.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:05:13.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:05:13.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:05:13.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:05:13.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:05:13.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:05:13.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:05:13.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.419880 -999.00  +25.70  21.46     17   -1.00 1 1 1 1 1   888    0 30.82 138.46 ----- 24.7 21.5 284.4 32.6 32.1 -25.7 31.3 -25.1 30.8 -25.6 31.6 -24.6
2025-11-12T12:05:13.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:05:13.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:05:13.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.419880
2025-11-12T12:05:13.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:05:13.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:05:13.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:05:13.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:05:13.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:05:13.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:04:50', tmtdew=32.62, humidity=11.31, cloud=0.0, wind=16.41, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:04:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:05:13.254 [DEBUG] [Thread-15432] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:05: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-11-12T12:05:13.351 [DEBUG] [Thread-15435] [transport.py] [_log()] starting thread (client mode): 0x19dd9690
2025-11-12T12:05:13.351 [DEBUG] [Thread-15435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:05:13.366 [DEBUG] [Thread-15435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:05:13.366 [INFO] [Thread-15435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] client lang: <none>
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] server lang: <none>
2025-11-12T12:05:13.374 [DEBUG] [Thread-15435] [transport.py] [_log()] kex follows: False
2025-11-12T12:05:13.375 [DEBUG] [Thread-15435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:05:13.375 [DEBUG] [Thread-15435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:05:13.375 [DEBUG] [Thread-15435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:05:13.375 [DEBUG] [Thread-15435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:05:13.375 [DEBUG] [Thread-15435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:05:13.375 [DEBUG] [Thread-15435] [transport.py] [_log()] Compression: none
2025-11-12T12:05:13.375 [DEBUG] [Thread-15435] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:05:13.431 [DEBUG] [Thread-15435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:05:13.432 [DEBUG] [Thread-15435] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:05:13.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:05:13.433 [DEBUG] [Thread-15435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:05:13.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:05:13.487 [DEBUG] [Thread-15435] [transport.py] [_log()] userauth is OK
2025-11-12T12:05:13.487 [DEBUG] [Thread-15435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:05:13.488 [DEBUG] [Thread-15435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:05:13.488 [DEBUG] [Thread-15435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:05:13.488 [DEBUG] [Thread-15435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:05:13.506 [INFO] [Thread-15435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:05:13.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:05:13.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:05:14.346 [DEBUG] [Thread-15435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:05:14.347 [DEBUG] [Thread-15435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:05:14.395 [DEBUG] [Thread-15435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:05:14.395 [DEBUG] [Thread-15435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:05:14.404 [DEBUG] [Thread-15435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:05:14.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:05:14.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:05:14.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-11-12T12:05:14.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:05:14.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:05:14.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:05:14.441 [DEBUG] [Thread-15435] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:05:15.266 [DEBUG] [Thread-15437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:05:30.320 [DEBUG] [Thread-15438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:05:31.009 [DEBUG] [Thread-15439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:05:44.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:05:44.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:05:44.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-11-12T12:05:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 5, 22), 32.08, 11.69, 0.0, 17.08, 26.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:05:45.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:05:22
2025-11-12T12:05:45.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:05:45.354 [DEBUG] [Thread-15440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:05:45.423 [DEBUG] [Thread-15441] [transport.py] [_log()] starting thread (client mode): 0x14956230
2025-11-12T12:05:45.423 [DEBUG] [Thread-15441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:05:45.443 [DEBUG] [Thread-15441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:05:45.443 [INFO] [Thread-15441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] client lang: <none>
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] server lang: <none>
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] kex follows: False
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] Compression: none
2025-11-12T12:05:45.447 [DEBUG] [Thread-15441] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:05:45.463 [DEBUG] [Thread-15441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:05:45.463 [DEBUG] [Thread-15441] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:05:45.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:05:45.463 [DEBUG] [Thread-15441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:05:45.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:05:45.504 [DEBUG] [Thread-15441] [transport.py] [_log()] userauth is OK
2025-11-12T12:05:45.504 [DEBUG] [Thread-15441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:05:45.504 [DEBUG] [Thread-15441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:05:45.504 [DEBUG] [Thread-15441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:05:45.504 [DEBUG] [Thread-15441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:05:45.531 [INFO] [Thread-15441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:05:45.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:05:46.332 [DEBUG] [Thread-15441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:05:46.333 [DEBUG] [Thread-15441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:05:46.333 [DEBUG] [Thread-15441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:05:46.374 [DEBUG] [Thread-15441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:05:46.374 [DEBUG] [Thread-15441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:05:46.376 [DEBUG] [Thread-15441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:05:46.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:05:46.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:05:46.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:05:46.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:05:46.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:05:46.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:05:46.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.420227 -999.00  +25.20  24.32     17   -1.10 1 1 1 1 1   888    0 30.22 129.68 ----- 24.1 24.3 310.4 35.1 32.1 -25.6 31.2 -25.3 30.5 -23.3 31.5 -24.4
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.420227
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:05:46.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:05:22', tmtdew=32.08, humidity=11.69, cloud=0.0, wind=17.08, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:05:07.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:05:46.392 [DEBUG] [Thread-15441] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:05:46.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:05:46.477 [DEBUG] [Thread-15444] [transport.py] [_log()] starting thread (client mode): 0x17346710
2025-11-12T12:05:46.477 [DEBUG] [Thread-15444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:05:46.493 [DEBUG] [Thread-15444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:05:46.493 [INFO] [Thread-15444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] client lang: <none>
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] server lang: <none>
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] kex follows: False
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] Compression: none
2025-11-12T12:05:46.501 [DEBUG] [Thread-15444] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:05:46.558 [DEBUG] [Thread-15444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:05:46.558 [DEBUG] [Thread-15444] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:05:46.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:05:46.558 [DEBUG] [Thread-15444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:05:46.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:05:46.614 [DEBUG] [Thread-15444] [transport.py] [_log()] userauth is OK
2025-11-12T12:05:46.615 [DEBUG] [Thread-15444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:05:46.615 [DEBUG] [Thread-15444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:05:46.615 [DEBUG] [Thread-15444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:05:46.615 [DEBUG] [Thread-15444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:05:46.628 [INFO] [Thread-15444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:05:46.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:05:46.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:05:47.481 [DEBUG] [Thread-15444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:05:47.481 [DEBUG] [Thread-15444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:05:47.529 [DEBUG] [Thread-15444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:05:47.529 [DEBUG] [Thread-15444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:05:47.538 [DEBUG] [Thread-15444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:05:47.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:05:47.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-11-12T12:05: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') -> 00000000
2025-11-12T12:05:47.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:05:47.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:05:47.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:05:47.575 [DEBUG] [Thread-15444] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:06:00.382 [DEBUG] [Thread-15446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:06:07.564 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:06:07.566 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:06:15.440 [DEBUG] [Thread-15447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:06:17.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:06:17.597 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:06:17.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-11-12T12:06:18.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 5, 55), 32.01, 11.61, 0.0, 13.44, 26.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:06:18.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:05:55
2025-11-12T12:06:18.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:06:18.532 [DEBUG] [Thread-15448] [transport.py] [_log()] starting thread (client mode): 0x14982950
2025-11-12T12:06:18.532 [DEBUG] [Thread-15448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:06:18.552 [DEBUG] [Thread-15448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:06:18.552 [INFO] [Thread-15448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] client lang: <none>
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] server lang: <none>
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] kex follows: False
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:06:18.555 [DEBUG] [Thread-15448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:06:18.556 [DEBUG] [Thread-15448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:06:18.556 [DEBUG] [Thread-15448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:06:18.556 [DEBUG] [Thread-15448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:06:18.556 [DEBUG] [Thread-15448] [transport.py] [_log()] Compression: none
2025-11-12T12:06:18.556 [DEBUG] [Thread-15448] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:06:18.576 [DEBUG] [Thread-15448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:06:18.576 [DEBUG] [Thread-15448] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:06:18.577 [DEBUG] [Thread-15448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:06:18.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:06:18.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:06:18.579 [DEBUG] [Thread-15448] [transport.py] [_log()] userauth is OK
2025-11-12T12:06:18.579 [DEBUG] [Thread-15448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:06:18.579 [DEBUG] [Thread-15448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:06:18.579 [DEBUG] [Thread-15448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:06:18.580 [DEBUG] [Thread-15448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:06:18.606 [INFO] [Thread-15448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:06:18.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:06:19.247 [DEBUG] [Thread-15448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:06:19.247 [DEBUG] [Thread-15448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:06:19.247 [DEBUG] [Thread-15448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:06:19.287 [DEBUG] [Thread-15448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:06:19.288 [DEBUG] [Thread-15448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:06:19.291 [DEBUG] [Thread-15448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:06:19.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:06:19.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:06:19.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:06:19.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:06:19.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:06:19.315 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:06:19.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:06:19.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:06:19.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:06:19.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.420575 -999.00  +25.00  18.49     18   -0.80 1 1 1 1 1   888    0 29.27 117.93 ----- 16.7 18.5 306.4 24.9 32.0 -26.3 31.2 -25.4 30.6 -25.4 31.4 -25.2
2025-11-12T12:06:19.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:06:19.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:06:19.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.420575
2025-11-12T12:06:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:06:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:06:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:06:19.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:06:19.318 [DEBUG] [Thread-15448] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:06:19.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:06:19.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:05:55', tmtdew=32.01, humidity=11.61, cloud=0.0, wind=13.44, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:05:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:06:19.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:06:19.406 [DEBUG] [Thread-15451] [transport.py] [_log()] starting thread (client mode): 0x14980ac0
2025-11-12T12:06:19.406 [DEBUG] [Thread-15451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:06:19.421 [DEBUG] [Thread-15451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:06:19.421 [INFO] [Thread-15451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:06:19.429 [DEBUG] [Thread-15451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:06:19.429 [DEBUG] [Thread-15451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:06:19.429 [DEBUG] [Thread-15451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:06:19.429 [DEBUG] [Thread-15451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:06:19.429 [DEBUG] [Thread-15451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:06:19.429 [DEBUG] [Thread-15451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:06:19.429 [DEBUG] [Thread-15451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:06:19.429 [DEBUG] [Thread-15451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] client lang: <none>
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] server lang: <none>
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] kex follows: False
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:06:19.430 [DEBUG] [Thread-15451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:06:19.431 [DEBUG] [Thread-15451] [transport.py] [_log()] Compression: none
2025-11-12T12:06:19.431 [DEBUG] [Thread-15451] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:06:19.488 [DEBUG] [Thread-15451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:06:19.489 [DEBUG] [Thread-15451] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:06:19.489 [DEBUG] [Thread-15451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:06:19.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:06:19.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:06:19.548 [DEBUG] [Thread-15451] [transport.py] [_log()] userauth is OK
2025-11-12T12:06:19.548 [DEBUG] [Thread-15451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:06:19.548 [DEBUG] [Thread-15451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:06:19.548 [DEBUG] [Thread-15451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:06:19.548 [DEBUG] [Thread-15451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:06:19.567 [INFO] [Thread-15451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:06:19.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:06:19.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:06:20.427 [DEBUG] [Thread-15451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:06:20.427 [DEBUG] [Thread-15451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:06:20.475 [DEBUG] [Thread-15451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:06:20.476 [DEBUG] [Thread-15451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:06:20.485 [DEBUG] [Thread-15451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:06:20.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:06:20.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-11-12T12:06:20.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-11-12T12:06:20.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:06:20.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:06:20.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:06:20.520 [DEBUG] [Thread-15451] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:06:30.473 [DEBUG] [Thread-15453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:06:31.043 [DEBUG] [Thread-15454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:06:45.528 [DEBUG] [Thread-15455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:06:50.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:06:50.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:06:50.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:06:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 6, 27), 31.96, 11.64, 0.0, 13.27, 26.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:06:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:06:27
2025-11-12T12:06:51.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:06:51.456 [DEBUG] [Thread-15456] [transport.py] [_log()] starting thread (client mode): 0x1493e590
2025-11-12T12:06:51.457 [DEBUG] [Thread-15456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:06:51.477 [DEBUG] [Thread-15456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:06:51.477 [INFO] [Thread-15456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] client lang: <none>
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] server lang: <none>
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] kex follows: False
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] Compression: none
2025-11-12T12:06:51.481 [DEBUG] [Thread-15456] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:06:51.499 [DEBUG] [Thread-15456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:06:51.499 [DEBUG] [Thread-15456] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:06:51.500 [DEBUG] [Thread-15456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:06:51.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:06:51.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:06:51.502 [DEBUG] [Thread-15456] [transport.py] [_log()] userauth is OK
2025-11-12T12:06:51.502 [DEBUG] [Thread-15456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:06:51.502 [DEBUG] [Thread-15456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:06:51.502 [DEBUG] [Thread-15456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:06:51.502 [DEBUG] [Thread-15456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:06:51.518 [INFO] [Thread-15456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:06:51.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:06:52.241 [DEBUG] [Thread-15456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:06:52.242 [DEBUG] [Thread-15456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:06:52.242 [DEBUG] [Thread-15456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:06:52.283 [DEBUG] [Thread-15456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:06:52.283 [DEBUG] [Thread-15456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:06:52.286 [DEBUG] [Thread-15456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:06:52.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:06:52.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:06:52.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:06:52.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:06:52.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:06:52.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:06:52.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:06:52.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:06:52.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:06:52.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.420922 -999.00  +25.40  16.16     18   -0.60 1 1 1 1 1   888    0 29.80 114.02 ----- 16.3 16.2 324.4 20.2 32.0 -26.3 31.1 -24.3 30.4 -24.8 31.4 -24.6
2025-11-12T12:06:52.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:06:52.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:06:52.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.420922
2025-11-12T12:06:52.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:06:52.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:06:52.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:06:52.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:06:52.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:06:52.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:06:27', tmtdew=31.96, humidity=11.64, cloud=0.0, wind=13.27, temperature=26.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:06:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:06:52.314 [DEBUG] [Thread-15456] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:06:52.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:06:52.410 [DEBUG] [Thread-15459] [transport.py] [_log()] starting thread (client mode): 0x173445b0
2025-11-12T12:06:52.410 [DEBUG] [Thread-15459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:06:52.425 [DEBUG] [Thread-15459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:06:52.425 [INFO] [Thread-15459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:06:52.433 [DEBUG] [Thread-15459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:06:52.433 [DEBUG] [Thread-15459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:06:52.433 [DEBUG] [Thread-15459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:06:52.433 [DEBUG] [Thread-15459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:06:52.433 [DEBUG] [Thread-15459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:06:52.434 [DEBUG] [Thread-15459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:06:52.434 [DEBUG] [Thread-15459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:06:52.434 [DEBUG] [Thread-15459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:06:52.434 [DEBUG] [Thread-15459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:06:52.434 [DEBUG] [Thread-15459] [transport.py] [_log()] client lang: <none>
2025-11-12T12:06:52.434 [DEBUG] [Thread-15459] [transport.py] [_log()] server lang: <none>
2025-11-12T12:06:52.434 [DEBUG] [Thread-15459] [transport.py] [_log()] kex follows: False
2025-11-12T12:06:52.434 [DEBUG] [Thread-15459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:06:52.435 [DEBUG] [Thread-15459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:06:52.435 [DEBUG] [Thread-15459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:06:52.435 [DEBUG] [Thread-15459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:06:52.435 [DEBUG] [Thread-15459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:06:52.435 [DEBUG] [Thread-15459] [transport.py] [_log()] Compression: none
2025-11-12T12:06:52.435 [DEBUG] [Thread-15459] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:06:52.491 [DEBUG] [Thread-15459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:06:52.492 [DEBUG] [Thread-15459] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:06:52.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:06:52.493 [DEBUG] [Thread-15459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:06:52.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:06:52.547 [DEBUG] [Thread-15459] [transport.py] [_log()] userauth is OK
2025-11-12T12:06:52.548 [DEBUG] [Thread-15459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:06:52.548 [DEBUG] [Thread-15459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:06:52.548 [DEBUG] [Thread-15459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:06:52.548 [DEBUG] [Thread-15459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:06:52.567 [INFO] [Thread-15459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:06:52.568 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:06:52.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:06:53.446 [DEBUG] [Thread-15459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:06:53.446 [DEBUG] [Thread-15459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:06:53.495 [DEBUG] [Thread-15459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:06:53.495 [DEBUG] [Thread-15459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:06:53.504 [DEBUG] [Thread-15459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:06:53.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:06:53.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:06:53.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:06:53.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:06:53.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:06:53.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:06:53.541 [DEBUG] [Thread-15459] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:07:00.562 [DEBUG] [Thread-15461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:07:07.707 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:07:07.708 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:07:15.602 [DEBUG] [Thread-15462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:07:23.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:07:23.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:07:23.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:07:24.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 6, 59), 31.86, 11.76, 0.0, 16.11, 26.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:07:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:06:59
2025-11-12T12:07:24.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:07:24.457 [DEBUG] [Thread-15463] [transport.py] [_log()] starting thread (client mode): 0x149815d0
2025-11-12T12:07:24.457 [DEBUG] [Thread-15463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:07:24.477 [DEBUG] [Thread-15463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:07:24.477 [INFO] [Thread-15463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:07:24.480 [DEBUG] [Thread-15463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:07:24.480 [DEBUG] [Thread-15463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:07:24.480 [DEBUG] [Thread-15463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] client lang: <none>
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] server lang: <none>
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] kex follows: False
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] Compression: none
2025-11-12T12:07:24.481 [DEBUG] [Thread-15463] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:07:24.499 [DEBUG] [Thread-15463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:07:24.499 [DEBUG] [Thread-15463] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:07:24.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:07:24.501 [DEBUG] [Thread-15463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:07:24.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:07:24.503 [DEBUG] [Thread-15463] [transport.py] [_log()] userauth is OK
2025-11-12T12:07:24.503 [DEBUG] [Thread-15463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:07:24.503 [DEBUG] [Thread-15463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:07:24.503 [DEBUG] [Thread-15463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:07:24.503 [DEBUG] [Thread-15463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:07:24.542 [INFO] [Thread-15463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:07:24.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:07:25.193 [DEBUG] [Thread-15463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:07:25.193 [DEBUG] [Thread-15463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:07:25.193 [DEBUG] [Thread-15463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:07:25.234 [DEBUG] [Thread-15463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:07:25.234 [DEBUG] [Thread-15463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:07:25.237 [DEBUG] [Thread-15463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:07:25.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:07:25.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:07:25.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:07:25.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:07:25.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:07:25.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:07:25.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:07:25.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:07:25.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:07:25.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.421269 -999.00  +25.90  16.68     17   -0.50 1 1 1 1 1   888    0 29.33 94.65 ----- 20.6 16.7 310.2 22.9 31.9 -26.1 31.1 -25.1 30.6 -24.3 31.3 -25.1
2025-11-12T12:07:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:07:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:07:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.421269
2025-11-12T12:07:25.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:07:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:07:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:07:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:07:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:07:25.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:06:59', tmtdew=31.86, humidity=11.76, cloud=0.0, wind=16.11, temperature=26.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:06:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:07:25.264 [DEBUG] [Thread-15463] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:07:25.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:07:25.361 [DEBUG] [Thread-15466] [transport.py] [_log()] starting thread (client mode): 0x173fb6a0
2025-11-12T12:07:25.361 [DEBUG] [Thread-15466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:07:25.375 [DEBUG] [Thread-15466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:07:25.376 [INFO] [Thread-15466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:07:25.383 [DEBUG] [Thread-15466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:07:25.383 [DEBUG] [Thread-15466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:07:25.383 [DEBUG] [Thread-15466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:07:25.383 [DEBUG] [Thread-15466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] client lang: <none>
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] server lang: <none>
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] kex follows: False
2025-11-12T12:07:25.384 [DEBUG] [Thread-15466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:07:25.385 [DEBUG] [Thread-15466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:07:25.385 [DEBUG] [Thread-15466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:07:25.385 [DEBUG] [Thread-15466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:07:25.385 [DEBUG] [Thread-15466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:07:25.385 [DEBUG] [Thread-15466] [transport.py] [_log()] Compression: none
2025-11-12T12:07:25.385 [DEBUG] [Thread-15466] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:07:25.443 [DEBUG] [Thread-15466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:07:25.444 [DEBUG] [Thread-15466] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:07:25.444 [DEBUG] [Thread-15466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:07:25.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:07:25.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:07:25.503 [DEBUG] [Thread-15466] [transport.py] [_log()] userauth is OK
2025-11-12T12:07:25.503 [DEBUG] [Thread-15466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:07:25.504 [DEBUG] [Thread-15466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:07:25.504 [DEBUG] [Thread-15466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:07:25.504 [DEBUG] [Thread-15466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:07:25.523 [INFO] [Thread-15466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:07: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-11-12T12:07:25.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:07:26.372 [DEBUG] [Thread-15466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:07:26.373 [DEBUG] [Thread-15466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:07:26.420 [DEBUG] [Thread-15466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:07:26.421 [DEBUG] [Thread-15466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:07:26.430 [DEBUG] [Thread-15466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:07:26.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:07:26.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-11-12T12:07:26.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:07:26.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:07:26.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:07:26.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:07:26.467 [DEBUG] [Thread-15466] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:07:30.640 [DEBUG] [Thread-15468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:07:31.076 [DEBUG] [Thread-15469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:07:45.696 [DEBUG] [Thread-15470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:07:56.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:07:56.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:07:56.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:07:57.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 7, 31), 31.75, 11.84, 0.0, 19.5, 26.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:07:57.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:07:31
2025-11-12T12:07:57.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:07:57.398 [DEBUG] [Thread-15471] [transport.py] [_log()] starting thread (client mode): 0x173e9060
2025-11-12T12:07:57.398 [DEBUG] [Thread-15471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:07:57.419 [DEBUG] [Thread-15471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:07:57.420 [INFO] [Thread-15471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] client lang: <none>
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] server lang: <none>
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] kex follows: False
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:07:57.423 [DEBUG] [Thread-15471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:07:57.424 [DEBUG] [Thread-15471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:07:57.424 [DEBUG] [Thread-15471] [transport.py] [_log()] Compression: none
2025-11-12T12:07:57.424 [DEBUG] [Thread-15471] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:07:57.440 [DEBUG] [Thread-15471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:07:57.440 [DEBUG] [Thread-15471] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:07:57.441 [DEBUG] [Thread-15471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:07:57.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:07:57.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:07:57.443 [DEBUG] [Thread-15471] [transport.py] [_log()] userauth is OK
2025-11-12T12:07:57.443 [DEBUG] [Thread-15471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:07:57.444 [DEBUG] [Thread-15471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:07:57.444 [DEBUG] [Thread-15471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:07:57.444 [DEBUG] [Thread-15471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:07:57.462 [INFO] [Thread-15471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:07:57.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:07:58.228 [DEBUG] [Thread-15471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:07:58.228 [DEBUG] [Thread-15471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:07:58.229 [DEBUG] [Thread-15471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:07:58.270 [DEBUG] [Thread-15471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:07:58.270 [DEBUG] [Thread-15471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:07:58.273 [DEBUG] [Thread-15471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:07:58.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:07:58.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:07:58.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:07:58.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:07:58.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:07:58.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:07:58.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:07:58.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:07:58.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:07:58.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.421617 -999.00  +25.90  28.95     17   -0.70 1 1 1 1 1   888    0 29.31 83.36 ----- 25.9 28.9 284.0 30.8 31.7 -27.4 31.1 -25.0 30.5 -24.9 31.3 -25.7
2025-11-12T12:07:58.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:07:58.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:07:58.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.421617
2025-11-12T12:07:58.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:07:58.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:07:58.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:07:58.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:07:58.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:07:58.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:07:31', tmtdew=31.75, humidity=11.84, cloud=0.0, wind=19.5, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:07:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:07:58.308 [DEBUG] [Thread-15471] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:07:58.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:07:58.406 [DEBUG] [Thread-15474] [transport.py] [_log()] starting thread (client mode): 0x173602b0
2025-11-12T12:07:58.406 [DEBUG] [Thread-15474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:07:58.421 [DEBUG] [Thread-15474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:07:58.421 [INFO] [Thread-15474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:07:58.428 [DEBUG] [Thread-15474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] client lang: <none>
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] server lang: <none>
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] kex follows: False
2025-11-12T12:07:58.429 [DEBUG] [Thread-15474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:07:58.430 [DEBUG] [Thread-15474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:07:58.430 [DEBUG] [Thread-15474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:07:58.430 [DEBUG] [Thread-15474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:07:58.430 [DEBUG] [Thread-15474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:07:58.430 [DEBUG] [Thread-15474] [transport.py] [_log()] Compression: none
2025-11-12T12:07:58.430 [DEBUG] [Thread-15474] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:07:58.488 [DEBUG] [Thread-15474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:07:58.489 [DEBUG] [Thread-15474] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:07:58.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:07:58.490 [DEBUG] [Thread-15474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:07:58.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:07:58.544 [DEBUG] [Thread-15474] [transport.py] [_log()] userauth is OK
2025-11-12T12:07:58.544 [DEBUG] [Thread-15474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:07:58.544 [DEBUG] [Thread-15474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:07:58.544 [DEBUG] [Thread-15474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:07:58.544 [DEBUG] [Thread-15474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:07:58.563 [INFO] [Thread-15474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:07:58.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:07:58.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:07:59.421 [DEBUG] [Thread-15474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:07:59.422 [DEBUG] [Thread-15474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:07:59.469 [DEBUG] [Thread-15474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:07:59.469 [DEBUG] [Thread-15474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:07:59.479 [DEBUG] [Thread-15474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:07:59.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:07:59.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:07:59.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:07:59.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:07:59.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:07:59.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:07:59.514 [DEBUG] [Thread-15474] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:08:00.729 [DEBUG] [Thread-15476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:08:07.848 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:08:07.850 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:08:15.780 [DEBUG] [Thread-15477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:08:29.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:08:29.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:08:29.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:08:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 8, 4), 32.4, 11.35, 0.0, 19.76, 26.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:08:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:08:04
2025-11-12T12:08:30.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:08:30.471 [DEBUG] [Thread-15478] [transport.py] [_log()] starting thread (client mode): 0x173f84c0
2025-11-12T12:08:30.471 [DEBUG] [Thread-15478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:08:30.492 [DEBUG] [Thread-15478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:08:30.492 [INFO] [Thread-15478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:08:30.495 [DEBUG] [Thread-15478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:08:30.495 [DEBUG] [Thread-15478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:08:30.495 [DEBUG] [Thread-15478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:08:30.495 [DEBUG] [Thread-15478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] client lang: <none>
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] server lang: <none>
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] kex follows: False
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:08:30.496 [DEBUG] [Thread-15478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:08:30.497 [DEBUG] [Thread-15478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:08:30.497 [DEBUG] [Thread-15478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:08:30.497 [DEBUG] [Thread-15478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:08:30.497 [DEBUG] [Thread-15478] [transport.py] [_log()] Compression: none
2025-11-12T12:08:30.497 [DEBUG] [Thread-15478] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:08:30.516 [DEBUG] [Thread-15478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:08:30.517 [DEBUG] [Thread-15478] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:08:30.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:08:30.518 [DEBUG] [Thread-15478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:08:30.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:08:30.519 [DEBUG] [Thread-15478] [transport.py] [_log()] userauth is OK
2025-11-12T12:08:30.519 [DEBUG] [Thread-15478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:08:30.519 [DEBUG] [Thread-15478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:08:30.520 [DEBUG] [Thread-15478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:08:30.520 [DEBUG] [Thread-15478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:08:30.543 [INFO] [Thread-15478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:08:30.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:08:30.819 [DEBUG] [Thread-15480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:08:31.110 [DEBUG] [Thread-15481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:08:31.173 [DEBUG] [Thread-15478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:08:31.173 [DEBUG] [Thread-15478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:08:31.173 [DEBUG] [Thread-15478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:08:31.213 [DEBUG] [Thread-15478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:08:31.214 [DEBUG] [Thread-15478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:08:31.217 [DEBUG] [Thread-15478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:08:31.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:08:31.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:08:31.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:08:31.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:08:31.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:08:31.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:08:31.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:08:31.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:08:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:08:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.422311 -999.00  +26.60  24.64     16   -1.00 1 1 1 1 1   888    0 28.73 70.07 ----- 23.5 24.6 306.4 30.8 32.0 -24.5 31.3 -23.5 30.6 -22.6 31.5 -22.5
2025-11-12T12:08:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:08:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:08:31.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.422311
2025-11-12T12:08:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:08:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:08:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:08:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:08:31.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:08:31.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:08:04', tmtdew=32.4, humidity=11.35, cloud=0.0, wind=19.76, temperature=26.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:08:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:08:31.247 [DEBUG] [Thread-15478] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:08:31.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:08:31.343 [DEBUG] [Thread-15483] [transport.py] [_log()] starting thread (client mode): 0x173f8250
2025-11-12T12:08:31.343 [DEBUG] [Thread-15483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:08:31.358 [DEBUG] [Thread-15483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:08:31.358 [INFO] [Thread-15483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:08:31.365 [DEBUG] [Thread-15483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] client lang: <none>
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] server lang: <none>
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] kex follows: False
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] Compression: none
2025-11-12T12:08:31.366 [DEBUG] [Thread-15483] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:08:31.425 [DEBUG] [Thread-15483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:08:31.425 [DEBUG] [Thread-15483] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:08:31.426 [DEBUG] [Thread-15483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:08:31.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:08:31.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:08:31.484 [DEBUG] [Thread-15483] [transport.py] [_log()] userauth is OK
2025-11-12T12:08:31.484 [DEBUG] [Thread-15483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:08:31.484 [DEBUG] [Thread-15483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:08:31.484 [DEBUG] [Thread-15483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:08:31.485 [DEBUG] [Thread-15483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:08:31.504 [INFO] [Thread-15483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:08:31.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:08:31.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:08:32.372 [DEBUG] [Thread-15483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:08:32.373 [DEBUG] [Thread-15483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:08:32.421 [DEBUG] [Thread-15483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:08:32.421 [DEBUG] [Thread-15483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:08:32.430 [DEBUG] [Thread-15483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:08:32.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:08:32.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-11-12T12:08:32.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:08:32.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:08:32.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:08:32.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:08:32.467 [DEBUG] [Thread-15483] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:08:45.857 [DEBUG] [Thread-15485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:09:00.906 [DEBUG] [Thread-15486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:09:02.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:09:02.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:09:02.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-11-12T12:09:03.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 8, 36), 32.86, 10.83, 0.0, 26.11, 26.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:09:03.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:08:36
2025-11-12T12:09:03.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:09:03.466 [DEBUG] [Thread-15487] [transport.py] [_log()] starting thread (client mode): 0x17398610
2025-11-12T12:09:03.466 [DEBUG] [Thread-15487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:09:03.488 [DEBUG] [Thread-15487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:09:03.488 [INFO] [Thread-15487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] client lang: <none>
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] server lang: <none>
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] kex follows: False
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] Compression: none
2025-11-12T12:09:03.491 [DEBUG] [Thread-15487] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:09:03.507 [DEBUG] [Thread-15487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:09:03.507 [DEBUG] [Thread-15487] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:09:03.507 [DEBUG] [Thread-15487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:09:03.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:09:03.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:09:03.508 [DEBUG] [Thread-15487] [transport.py] [_log()] userauth is OK
2025-11-12T12:09:03.508 [DEBUG] [Thread-15487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:09:03.508 [DEBUG] [Thread-15487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:09:03.508 [DEBUG] [Thread-15487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:09:03.508 [DEBUG] [Thread-15487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:09:03.517 [INFO] [Thread-15487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:09:03.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:09:04.266 [DEBUG] [Thread-15487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:09:04.266 [DEBUG] [Thread-15487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:09:04.266 [DEBUG] [Thread-15487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:09:04.307 [DEBUG] [Thread-15487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:09:04.307 [DEBUG] [Thread-15487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:09:04.309 [DEBUG] [Thread-15487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:09:04.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:09:04.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:09:04.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:09:04.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:09:04.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:09:04.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:09:04.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.422658 -999.00  +26.80  29.35     16   -0.70 1 1 1 1 1   888    0 28.47 69.72 ----- 29.9 29.4 278.6 38.8 31.9 -25.7 31.2 -23.9 30.7 -22.4 31.5 -24.4
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.422658
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:09:04.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:08:36', tmtdew=32.86, humidity=10.83, cloud=0.0, wind=26.11, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:08:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:09:04.329 [DEBUG] [Thread-15487] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:09:04.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:09:04.414 [DEBUG] [Thread-15490] [transport.py] [_log()] starting thread (client mode): 0x1737ed70
2025-11-12T12:09:04.414 [DEBUG] [Thread-15490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:09:04.429 [DEBUG] [Thread-15490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:09:04.429 [INFO] [Thread-15490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] client lang: <none>
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] server lang: <none>
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] kex follows: False
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] Compression: none
2025-11-12T12:09:04.437 [DEBUG] [Thread-15490] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:09:04.494 [DEBUG] [Thread-15490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:09:04.494 [DEBUG] [Thread-15490] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:09:04.494 [DEBUG] [Thread-15490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:09:04.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:09:04.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:09:04.551 [DEBUG] [Thread-15490] [transport.py] [_log()] userauth is OK
2025-11-12T12:09:04.551 [DEBUG] [Thread-15490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:09:04.551 [DEBUG] [Thread-15490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:09:04.551 [DEBUG] [Thread-15490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:09:04.551 [DEBUG] [Thread-15490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:09:04.565 [INFO] [Thread-15490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:09:04.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:09:04.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:09:05.431 [DEBUG] [Thread-15490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:09:05.431 [DEBUG] [Thread-15490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:09:05.482 [DEBUG] [Thread-15490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:09:05.482 [DEBUG] [Thread-15490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:09:05.493 [DEBUG] [Thread-15490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:09:05.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:09:05.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-11-12T12:09:05.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-11-12T12:09:05.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:09:05.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:09:05.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:09:05.535 [DEBUG] [Thread-15490] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:09:07.990 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:09:07.991 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:09:15.932 [DEBUG] [Thread-15492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:09:30.984 [DEBUG] [Thread-15493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:09:31.144 [DEBUG] [Thread-15494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:09:35.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:09:35.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:09:35.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-11-12T12:09:36.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 9, 8), 33.41, 10.45, 0.0, 30.05, 26.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:09:36.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:09:08
2025-11-12T12:09:36.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:09:36.488 [DEBUG] [Thread-15495] [transport.py] [_log()] starting thread (client mode): 0x173fb640
2025-11-12T12:09:36.489 [DEBUG] [Thread-15495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:09:36.510 [DEBUG] [Thread-15495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:09:36.510 [INFO] [Thread-15495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:09:36.513 [DEBUG] [Thread-15495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:09:36.513 [DEBUG] [Thread-15495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:09:36.513 [DEBUG] [Thread-15495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:09:36.513 [DEBUG] [Thread-15495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:09:36.513 [DEBUG] [Thread-15495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:09:36.513 [DEBUG] [Thread-15495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:09:36.513 [DEBUG] [Thread-15495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] client lang: <none>
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] server lang: <none>
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] kex follows: False
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] Compression: none
2025-11-12T12:09:36.514 [DEBUG] [Thread-15495] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:09:36.531 [DEBUG] [Thread-15495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:09:36.532 [DEBUG] [Thread-15495] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:09:36.532 [DEBUG] [Thread-15495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:09:36.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:09:36.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:09:36.533 [DEBUG] [Thread-15495] [transport.py] [_log()] userauth is OK
2025-11-12T12:09:36.533 [DEBUG] [Thread-15495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:09:36.533 [DEBUG] [Thread-15495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:09:36.533 [DEBUG] [Thread-15495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:09:36.533 [DEBUG] [Thread-15495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:09:36.548 [INFO] [Thread-15495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:09:36.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:09:37.191 [DEBUG] [Thread-15495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:09:37.191 [DEBUG] [Thread-15495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:09:37.191 [DEBUG] [Thread-15495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:09:37.232 [DEBUG] [Thread-15495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:09:37.232 [DEBUG] [Thread-15495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:09:37.235 [DEBUG] [Thread-15495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:09:37.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:09:37.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:09:37.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:09:37.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:09:37.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:09:37.258 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:09:37.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:09:37.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:09:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:09:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.423005 -999.00  +26.80  26.94     16   -0.30 1 1 1 1 1   888    0 28.66 67.30 ----- 28.1 26.9 293.6 36.8 31.9 -26.3 31.1 -24.0 30.4 -28.2 31.4 -25.1
2025-11-12T12:09:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:09:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:09:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.423005
2025-11-12T12:09:37.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:09:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:09:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:09:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:09:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:09:37.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:09:08', tmtdew=33.41, humidity=10.45, cloud=0.0, wind=30.05, temperature=26.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:09:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:09:37.260 [DEBUG] [Thread-15495] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:09:37.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:09:37.357 [DEBUG] [Thread-15498] [transport.py] [_log()] starting thread (client mode): 0x173fa4a0
2025-11-12T12:09:37.357 [DEBUG] [Thread-15498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:09:37.374 [DEBUG] [Thread-15498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:09:37.375 [INFO] [Thread-15498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:09:37.383 [DEBUG] [Thread-15498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:09:37.383 [DEBUG] [Thread-15498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:09:37.383 [DEBUG] [Thread-15498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:09:37.383 [DEBUG] [Thread-15498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] client lang: <none>
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] server lang: <none>
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] kex follows: False
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] Compression: none
2025-11-12T12:09:37.384 [DEBUG] [Thread-15498] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:09:37.447 [DEBUG] [Thread-15498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:09:37.448 [DEBUG] [Thread-15498] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:09:37.449 [DEBUG] [Thread-15498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:09:37.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:09:37.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:09:37.509 [DEBUG] [Thread-15498] [transport.py] [_log()] userauth is OK
2025-11-12T12:09:37.509 [DEBUG] [Thread-15498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:09:37.510 [DEBUG] [Thread-15498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:09:37.510 [DEBUG] [Thread-15498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:09:37.510 [DEBUG] [Thread-15498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:09:37.532 [INFO] [Thread-15498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:09:37.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:09:37.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:09:38.387 [DEBUG] [Thread-15498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:09:38.388 [DEBUG] [Thread-15498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:09:38.439 [DEBUG] [Thread-15498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:09:38.439 [DEBUG] [Thread-15498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:09:38.448 [DEBUG] [Thread-15498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:09:38.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:09:38.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-11-12T12:09:38.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:09:38.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:09:38.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:09:38.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:09:38.488 [DEBUG] [Thread-15498] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:09:46.023 [DEBUG] [Thread-15500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:10:01.077 [DEBUG] [Thread-15501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:10:08.133 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:10:08.134 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:10:08.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:10:08.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:10:08.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-11-12T12:10:09.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 9, 39), 33.42, 10.46, 0.0, 30.52, 27.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:10:09.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:09:39
2025-11-12T12:10:09.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:10:09.415 [DEBUG] [Thread-15502] [transport.py] [_log()] starting thread (client mode): 0x149576d0
2025-11-12T12:10:09.415 [DEBUG] [Thread-15502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:10:09.428 [DEBUG] [Thread-15502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:10:09.428 [INFO] [Thread-15502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:10:09.431 [DEBUG] [Thread-15502] [transport.py] [_log()] client lang: <none>
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] server lang: <none>
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] kex follows: False
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] Compression: none
2025-11-12T12:10:09.432 [DEBUG] [Thread-15502] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:10:09.443 [DEBUG] [Thread-15502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:10:09.443 [DEBUG] [Thread-15502] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:10:09.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:10:09.444 [DEBUG] [Thread-15502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:10:09.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:10:09.447 [DEBUG] [Thread-15502] [transport.py] [_log()] userauth is OK
2025-11-12T12:10:09.447 [DEBUG] [Thread-15502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:10:09.447 [DEBUG] [Thread-15502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:10:09.448 [DEBUG] [Thread-15502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:10:09.448 [DEBUG] [Thread-15502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:10:09.470 [INFO] [Thread-15502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:10:09.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:10:10.840 [DEBUG] [Thread-15502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:10:10.840 [DEBUG] [Thread-15502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:10:10.840 [DEBUG] [Thread-15502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:10:10.880 [DEBUG] [Thread-15502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:10:10.881 [DEBUG] [Thread-15502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:10:10.884 [DEBUG] [Thread-15502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:10:10.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:10:10.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:10:10.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:10:10.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:10:10.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:10:10.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:10:10.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:10:10.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:10:10.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:10:10.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.423352 -999.00  +26.50  23.43     16   -0.70 1 1 1 1 1   888    0 28.36 63.32 ----- 21.8 23.4 297.0 35.0 31.8 -25.7 31.1 -25.7 30.4 -31.2 31.3 -24.5
2025-11-12T12:10:10.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:10:10.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:10:10.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.423352
2025-11-12T12:10:10.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:10:10.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:10:10.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:10:10.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:10:10.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:10:10.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:09:39', tmtdew=33.42, humidity=10.46, cloud=0.0, wind=30.52, temperature=27.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:09:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:10:10.908 [DEBUG] [Thread-15502] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:10:10.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:10:11.004 [DEBUG] [Thread-15505] [transport.py] [_log()] starting thread (client mode): 0x149560e0
2025-11-12T12:10:11.004 [DEBUG] [Thread-15505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:10:11.021 [DEBUG] [Thread-15505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:10:11.021 [INFO] [Thread-15505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] client lang: <none>
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] server lang: <none>
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] kex follows: False
2025-11-12T12:10:11.029 [DEBUG] [Thread-15505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:10:11.030 [DEBUG] [Thread-15505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:10:11.030 [DEBUG] [Thread-15505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:10:11.030 [DEBUG] [Thread-15505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:10:11.030 [DEBUG] [Thread-15505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:10:11.030 [DEBUG] [Thread-15505] [transport.py] [_log()] Compression: none
2025-11-12T12:10:11.030 [DEBUG] [Thread-15505] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:10:11.093 [DEBUG] [Thread-15505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:10:11.093 [DEBUG] [Thread-15505] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:10:11.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:10:11.094 [DEBUG] [Thread-15505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:10:11.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:10:11.153 [DEBUG] [Thread-15505] [transport.py] [_log()] userauth is OK
2025-11-12T12:10:11.153 [DEBUG] [Thread-15505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:10:11.153 [DEBUG] [Thread-15505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:10:11.153 [DEBUG] [Thread-15505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:10:11.153 [DEBUG] [Thread-15505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:10:11.172 [INFO] [Thread-15505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:10:11.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:10:11.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:10:12.030 [DEBUG] [Thread-15505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:10:12.031 [DEBUG] [Thread-15505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:10:12.079 [DEBUG] [Thread-15505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:10:12.079 [DEBUG] [Thread-15505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:10:12.089 [DEBUG] [Thread-15505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:10:12.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:10:12.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-11-12T12:10:12.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-11-12T12:10:12.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:10:12.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:10:12.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:10:12.125 [DEBUG] [Thread-15505] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:10:16.111 [DEBUG] [Thread-15507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:10:31.158 [DEBUG] [Thread-15508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:10:31.177 [DEBUG] [Thread-15509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:10:42.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:10:42.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:10:42.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:10:42.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 10, 12), 33.48, 10.42, 0.0, 28.55, 27.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:10:42.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:10:12
2025-11-12T12:10:42.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:10:43.055 [DEBUG] [Thread-15510] [transport.py] [_log()] starting thread (client mode): 0x173f8640
2025-11-12T12:10:43.055 [DEBUG] [Thread-15510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:10:43.075 [DEBUG] [Thread-15510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:10:43.075 [INFO] [Thread-15510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] client lang: <none>
2025-11-12T12:10:43.078 [DEBUG] [Thread-15510] [transport.py] [_log()] server lang: <none>
2025-11-12T12:10:43.079 [DEBUG] [Thread-15510] [transport.py] [_log()] kex follows: False
2025-11-12T12:10:43.079 [DEBUG] [Thread-15510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:10:43.079 [DEBUG] [Thread-15510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:10:43.079 [DEBUG] [Thread-15510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:10:43.079 [DEBUG] [Thread-15510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:10:43.079 [DEBUG] [Thread-15510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:10:43.079 [DEBUG] [Thread-15510] [transport.py] [_log()] Compression: none
2025-11-12T12:10:43.079 [DEBUG] [Thread-15510] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:10:43.097 [DEBUG] [Thread-15510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:10:43.098 [DEBUG] [Thread-15510] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:10:43.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:10:43.099 [DEBUG] [Thread-15510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:10:43.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:10:43.141 [DEBUG] [Thread-15510] [transport.py] [_log()] userauth is OK
2025-11-12T12:10:43.141 [DEBUG] [Thread-15510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:10:43.141 [DEBUG] [Thread-15510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:10:43.141 [DEBUG] [Thread-15510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:10:43.142 [DEBUG] [Thread-15510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:10:43.173 [INFO] [Thread-15510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:10:43.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:10:43.820 [DEBUG] [Thread-15510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:10:43.820 [DEBUG] [Thread-15510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:10:43.820 [DEBUG] [Thread-15510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:10:43.860 [DEBUG] [Thread-15510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:10:43.861 [DEBUG] [Thread-15510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:10:43.864 [DEBUG] [Thread-15510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:10:43.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:10:43.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:10:43.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:10:43.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:10:43.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:10:43.890 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:10:43.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:10:43.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:10:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:10:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.423699 -999.00  +26.20  22.44     16   -1.20 1 1 1 1 1   888    0 28.55 61.77 ----- 24.5 22.4 283.7 31.4 31.3 -28.8 30.9 -26.6 30.3 -26.7 31.0 -27.5
2025-11-12T12:10:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:10:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:10:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.423699
2025-11-12T12:10:43.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:10:43.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:10:43.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:10:43.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:10:43.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:10:43.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:10:12', tmtdew=33.48, humidity=10.42, cloud=0.0, wind=28.55, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:10:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:10:43.892 [DEBUG] [Thread-15510] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:10:43.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:10:43.989 [DEBUG] [Thread-15513] [transport.py] [_log()] starting thread (client mode): 0x1737e5f0
2025-11-12T12:10:43.989 [DEBUG] [Thread-15513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:10:44.004 [DEBUG] [Thread-15513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:10:44.004 [INFO] [Thread-15513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:10:44.011 [DEBUG] [Thread-15513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] client lang: <none>
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] server lang: <none>
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] kex follows: False
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:10:44.012 [DEBUG] [Thread-15513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:10:44.013 [DEBUG] [Thread-15513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:10:44.013 [DEBUG] [Thread-15513] [transport.py] [_log()] Compression: none
2025-11-12T12:10:44.013 [DEBUG] [Thread-15513] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:10:44.072 [DEBUG] [Thread-15513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:10:44.072 [DEBUG] [Thread-15513] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:10:44.073 [DEBUG] [Thread-15513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:10:44.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:10:44.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:10:44.128 [DEBUG] [Thread-15513] [transport.py] [_log()] userauth is OK
2025-11-12T12:10:44.128 [DEBUG] [Thread-15513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:10:44.128 [DEBUG] [Thread-15513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:10:44.128 [DEBUG] [Thread-15513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:10:44.128 [DEBUG] [Thread-15513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:10:44.146 [INFO] [Thread-15513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:10:44.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:10:44.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:10:44.997 [DEBUG] [Thread-15513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:10:44.997 [DEBUG] [Thread-15513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:10:45.045 [DEBUG] [Thread-15513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:10:45.045 [DEBUG] [Thread-15513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:10:45.053 [DEBUG] [Thread-15513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:10:45.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:10:45.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-11-12T12:10:45.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-11-12T12:10:45.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:10:45.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:10:45.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:10:45.085 [DEBUG] [Thread-15513] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:10:46.191 [DEBUG] [Thread-15515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:11:01.239 [DEBUG] [Thread-15516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:11:08.276 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:11:08.277 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:11:15.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:11:15.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:11:15.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-11-12T12:11:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 10, 44), 33.26, 10.83, 0.0, 28.51, 26.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:11:15.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:10:44
2025-11-12T12:11:15.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:11:16.002 [DEBUG] [Thread-15517] [transport.py] [_log()] starting thread (client mode): 0x173bc9a0
2025-11-12T12:11:16.002 [DEBUG] [Thread-15517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:11:16.022 [DEBUG] [Thread-15517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:11:16.022 [INFO] [Thread-15517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:11:16.025 [DEBUG] [Thread-15517] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:11:16.025 [DEBUG] [Thread-15517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:11:16.025 [DEBUG] [Thread-15517] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:11:16.025 [DEBUG] [Thread-15517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:11:16.025 [DEBUG] [Thread-15517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:11:16.025 [DEBUG] [Thread-15517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:11:16.025 [DEBUG] [Thread-15517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] client lang: <none>
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] server lang: <none>
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] kex follows: False
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] Compression: none
2025-11-12T12:11:16.026 [DEBUG] [Thread-15517] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:11:16.043 [DEBUG] [Thread-15517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:11:16.044 [DEBUG] [Thread-15517] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:11:16.044 [DEBUG] [Thread-15517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:11:16.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:11:16.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:11:16.046 [DEBUG] [Thread-15517] [transport.py] [_log()] userauth is OK
2025-11-12T12:11:16.046 [DEBUG] [Thread-15517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:11:16.046 [DEBUG] [Thread-15517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:11:16.046 [DEBUG] [Thread-15517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:11:16.046 [DEBUG] [Thread-15517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:11:16.067 [INFO] [Thread-15517] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:11:16.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:11:16.272 [DEBUG] [Thread-15519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:11:16.655 [DEBUG] [Thread-15517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:11:16.656 [DEBUG] [Thread-15517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:11:16.656 [DEBUG] [Thread-15517] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:11:16.697 [DEBUG] [Thread-15517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:11:16.697 [DEBUG] [Thread-15517] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:11:16.699 [DEBUG] [Thread-15517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:11:16.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:11:16.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:11:16.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:11:16.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:11:16.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:11:16.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:11:16.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:11:16.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.424047 -999.00  +26.20  23.87     16   -1.00 1 1 1 1 1   888    0 28.19 58.65 ----- 21.8 23.9 302.4 27.2 31.4 -28.5 30.7 -26.3 30.0 -25.1 31.0 -25.9
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.424047
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:11:16.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:10:44', tmtdew=33.26, humidity=10.83, cloud=0.0, wind=28.51, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:10:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:11:16.721 [DEBUG] [Thread-15517] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:11:16.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:11:16.806 [DEBUG] [Thread-15521] [transport.py] [_log()] starting thread (client mode): 0x173bca00
2025-11-12T12:11:16.806 [DEBUG] [Thread-15521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:11:16.822 [DEBUG] [Thread-15521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:11:16.822 [INFO] [Thread-15521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:11:16.829 [DEBUG] [Thread-15521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:11:16.829 [DEBUG] [Thread-15521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:11:16.829 [DEBUG] [Thread-15521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] client lang: <none>
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] server lang: <none>
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] kex follows: False
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] Compression: none
2025-11-12T12:11:16.830 [DEBUG] [Thread-15521] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:11:16.886 [DEBUG] [Thread-15521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:11:16.886 [DEBUG] [Thread-15521] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:11:16.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:11:16.887 [DEBUG] [Thread-15521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:11:16.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:11:16.944 [DEBUG] [Thread-15521] [transport.py] [_log()] userauth is OK
2025-11-12T12:11:16.944 [DEBUG] [Thread-15521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:11:16.944 [DEBUG] [Thread-15521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:11:16.944 [DEBUG] [Thread-15521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:11:16.944 [DEBUG] [Thread-15521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:11:16.961 [INFO] [Thread-15521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:11:16.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:11:16.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:11:17.811 [DEBUG] [Thread-15521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:11:17.812 [DEBUG] [Thread-15521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:11:17.859 [DEBUG] [Thread-15521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:11:17.859 [DEBUG] [Thread-15521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:11:17.870 [DEBUG] [Thread-15521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:11:17.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:11:17.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-11-12T12:11:17.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:11:17.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:11:17.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:11:17.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:11:17.902 [DEBUG] [Thread-15521] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:11:31.223 [DEBUG] [Thread-15523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:11:31.303 [DEBUG] [Thread-15524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:11:46.357 [DEBUG] [Thread-15525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:11:47.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:11:47.925 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:11:47.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:11:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 11, 16), 32.77, 11.16, 0.0, 25.14, 26.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:11:48.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:11:16
2025-11-12T12:11:48.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:11:48.905 [DEBUG] [Thread-15526] [transport.py] [_log()] starting thread (client mode): 0x149540d0
2025-11-12T12:11:48.906 [DEBUG] [Thread-15526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:11:48.926 [DEBUG] [Thread-15526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:11:48.926 [INFO] [Thread-15526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:11:48.929 [DEBUG] [Thread-15526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:11:48.929 [DEBUG] [Thread-15526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:11:48.929 [DEBUG] [Thread-15526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:11:48.929 [DEBUG] [Thread-15526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:11:48.929 [DEBUG] [Thread-15526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:11:48.929 [DEBUG] [Thread-15526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:11:48.929 [DEBUG] [Thread-15526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] client lang: <none>
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] server lang: <none>
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] kex follows: False
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] Compression: none
2025-11-12T12:11:48.930 [DEBUG] [Thread-15526] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:11:48.945 [DEBUG] [Thread-15526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:11:48.945 [DEBUG] [Thread-15526] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:11:48.946 [DEBUG] [Thread-15526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:11:48.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:11:48.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:11:48.947 [DEBUG] [Thread-15526] [transport.py] [_log()] userauth is OK
2025-11-12T12:11:48.947 [DEBUG] [Thread-15526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:11:48.947 [DEBUG] [Thread-15526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:11:48.947 [DEBUG] [Thread-15526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:11:48.947 [DEBUG] [Thread-15526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:11:48.966 [INFO] [Thread-15526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:11:48.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:11:49.572 [DEBUG] [Thread-15526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:11:49.572 [DEBUG] [Thread-15526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:11:49.573 [DEBUG] [Thread-15526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:11:49.613 [DEBUG] [Thread-15526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:11:49.613 [DEBUG] [Thread-15526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:11:49.615 [DEBUG] [Thread-15526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:11:49.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:11:49.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:11:49.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:11:49.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:11:49.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:11:49.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:11:49.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:11:49.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:11:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:11:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.424394 -999.00  +25.90  26.76     17   -0.90 1 1 1 1 1   888    0 28.01 53.14 ----- 27.8 26.8 273.2 35.7 31.1 -29.3 30.6 -26.0 30.0 -27.7 30.6 -27.8
2025-11-12T12:11:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:11:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:11:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.424394
2025-11-12T12:11:49.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:11:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:11:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:11:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:11:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:11:49.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:11:16', tmtdew=32.77, humidity=11.16, cloud=0.0, wind=25.14, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:11:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:11:49.634 [DEBUG] [Thread-15526] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:11:49.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:11:49.719 [DEBUG] [Thread-15529] [transport.py] [_log()] starting thread (client mode): 0x173eb280
2025-11-12T12:11:49.719 [DEBUG] [Thread-15529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:11:49.737 [DEBUG] [Thread-15529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:11:49.737 [INFO] [Thread-15529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] client lang: <none>
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] server lang: <none>
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] kex follows: False
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:11:49.744 [DEBUG] [Thread-15529] [transport.py] [_log()] Compression: none
2025-11-12T12:11:49.745 [DEBUG] [Thread-15529] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:11:49.805 [DEBUG] [Thread-15529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:11:49.805 [DEBUG] [Thread-15529] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:11:49.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:11:49.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:11:49.806 [DEBUG] [Thread-15529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:11:49.863 [DEBUG] [Thread-15529] [transport.py] [_log()] userauth is OK
2025-11-12T12:11:49.863 [DEBUG] [Thread-15529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:11:49.863 [DEBUG] [Thread-15529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:11:49.863 [DEBUG] [Thread-15529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:11:49.863 [DEBUG] [Thread-15529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:11:49.879 [INFO] [Thread-15529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:11:49.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:11:49.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:11:50.755 [DEBUG] [Thread-15529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:11:50.756 [DEBUG] [Thread-15529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:11:50.804 [DEBUG] [Thread-15529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:11:50.804 [DEBUG] [Thread-15529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:11:50.813 [DEBUG] [Thread-15529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:11:50.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:11:50.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-11-12T12:11:50.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-11-12T12:11:50.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:11:50.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:11:50.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:11:50.850 [DEBUG] [Thread-15529] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:12:01.391 [DEBUG] [Thread-15531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:12:08.418 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:12:08.419 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:12:16.444 [DEBUG] [Thread-15532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:12:20.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:12:20.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:12:20.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-11-12T12:12:21.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 11, 47), 32.34, 11.53, 0.0, 20.59, 26.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:12:21.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:11:47
2025-11-12T12:12:21.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:12:21.839 [DEBUG] [Thread-15533] [transport.py] [_log()] starting thread (client mode): 0x173bf010
2025-11-12T12:12:21.839 [DEBUG] [Thread-15533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:12:21.858 [DEBUG] [Thread-15533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:12:21.858 [INFO] [Thread-15533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:12:21.861 [DEBUG] [Thread-15533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] client lang: <none>
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] server lang: <none>
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] kex follows: False
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] Compression: none
2025-11-12T12:12:21.862 [DEBUG] [Thread-15533] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:12:21.876 [DEBUG] [Thread-15533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:12:21.876 [DEBUG] [Thread-15533] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:12:21.876 [DEBUG] [Thread-15533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:12:21.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:12:21.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:12:21.877 [DEBUG] [Thread-15533] [transport.py] [_log()] userauth is OK
2025-11-12T12:12:21.877 [DEBUG] [Thread-15533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:12:21.877 [DEBUG] [Thread-15533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:12:21.877 [DEBUG] [Thread-15533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:12:21.877 [DEBUG] [Thread-15533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:12:21.893 [INFO] [Thread-15533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:12:21.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:12:22.549 [DEBUG] [Thread-15533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:12:22.549 [DEBUG] [Thread-15533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:12:22.550 [DEBUG] [Thread-15533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:12:22.591 [DEBUG] [Thread-15533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:12:22.591 [DEBUG] [Thread-15533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:12:22.594 [DEBUG] [Thread-15533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:12:22.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:12:22.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:12:22.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:12:22.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:12:22.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:12:22.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:12:22.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:12:22.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:12:22.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:12:22.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.424742 -999.00  +25.40  19.47     18   -0.60 1 1 1 1 1   888    0 28.52 48.16 ----- 26.8 19.5 273.8 28.6 31.1 -26.7 30.6 -24.7 29.5 -27.6 30.7 -24.4
2025-11-12T12:12:22.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:12:22.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:12:22.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.424742
2025-11-12T12:12:22.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:12:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:12:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:12:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:12:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:12:22.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:11:47', tmtdew=32.34, humidity=11.53, cloud=0.0, wind=20.59, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:11:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:12:22.624 [DEBUG] [Thread-15533] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:12:22.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:12:22.718 [DEBUG] [Thread-15536] [transport.py] [_log()] starting thread (client mode): 0x173bdf60
2025-11-12T12:12:22.719 [DEBUG] [Thread-15536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:12:22.733 [DEBUG] [Thread-15536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:12:22.733 [INFO] [Thread-15536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:12:22.741 [DEBUG] [Thread-15536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:12:22.741 [DEBUG] [Thread-15536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:12:22.741 [DEBUG] [Thread-15536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] client lang: <none>
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] server lang: <none>
2025-11-12T12:12:22.742 [DEBUG] [Thread-15536] [transport.py] [_log()] kex follows: False
2025-11-12T12:12:22.743 [DEBUG] [Thread-15536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:12:22.743 [DEBUG] [Thread-15536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:12:22.743 [DEBUG] [Thread-15536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:12:22.743 [DEBUG] [Thread-15536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:12:22.743 [DEBUG] [Thread-15536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:12:22.743 [DEBUG] [Thread-15536] [transport.py] [_log()] Compression: none
2025-11-12T12:12:22.743 [DEBUG] [Thread-15536] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:12:22.800 [DEBUG] [Thread-15536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:12:22.801 [DEBUG] [Thread-15536] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:12:22.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:12:22.802 [DEBUG] [Thread-15536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:12:22.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:12:22.856 [DEBUG] [Thread-15536] [transport.py] [_log()] userauth is OK
2025-11-12T12:12:22.856 [DEBUG] [Thread-15536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:12:22.856 [DEBUG] [Thread-15536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:12:22.856 [DEBUG] [Thread-15536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:12:22.856 [DEBUG] [Thread-15536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:12:22.875 [INFO] [Thread-15536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:12:22.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:12:22.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:12:23.727 [DEBUG] [Thread-15536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:12:23.727 [DEBUG] [Thread-15536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:12:23.775 [DEBUG] [Thread-15536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:12:23.775 [DEBUG] [Thread-15536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:12:23.784 [DEBUG] [Thread-15536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:12:23.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:12:23.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-11-12T12:12:23.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:12:23.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:12:23.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:12:23.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:12:23.821 [DEBUG] [Thread-15536] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:12:31.257 [DEBUG] [Thread-15538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:12:31.476 [DEBUG] [Thread-15539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:12:46.529 [DEBUG] [Thread-15540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:12:53.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:12:53.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:12:53.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-11-12T12:12:54.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 12, 19), 32.23, 11.61, 0.0, 17.75, 26.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:12:54.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:12:19
2025-11-12T12:12:54.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:12:54.822 [DEBUG] [Thread-15541] [transport.py] [_log()] starting thread (client mode): 0x173be890
2025-11-12T12:12:54.822 [DEBUG] [Thread-15541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:12:54.842 [DEBUG] [Thread-15541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:12:54.842 [INFO] [Thread-15541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:12:54.845 [DEBUG] [Thread-15541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] client lang: <none>
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] server lang: <none>
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] kex follows: False
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] Compression: none
2025-11-12T12:12:54.846 [DEBUG] [Thread-15541] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:12:54.861 [DEBUG] [Thread-15541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:12:54.861 [DEBUG] [Thread-15541] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:12:54.861 [DEBUG] [Thread-15541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:12:54.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:12:54.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:12:54.862 [DEBUG] [Thread-15541] [transport.py] [_log()] userauth is OK
2025-11-12T12:12:54.862 [DEBUG] [Thread-15541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:12:54.862 [DEBUG] [Thread-15541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:12:54.862 [DEBUG] [Thread-15541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:12:54.862 [DEBUG] [Thread-15541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:12:54.877 [INFO] [Thread-15541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:12:54.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:12:55.498 [DEBUG] [Thread-15541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:12:55.498 [DEBUG] [Thread-15541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:12:55.498 [DEBUG] [Thread-15541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:12:55.539 [DEBUG] [Thread-15541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:12:55.539 [DEBUG] [Thread-15541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:12:55.541 [DEBUG] [Thread-15541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:12:55.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:12:55.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:12:55.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:12:55.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:12:55.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:12:55.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:12:55.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.425436 -999.00  +25.20  14.23     18   -0.60 1 1 1 1 1   888    0 28.58 45.19 ----- 19.0 14.2 307.6 25.1 31.1 -26.2 30.4 -24.6 29.6 -24.4 30.6 -23.9
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.425436
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:12:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:12:19', tmtdew=32.23, humidity=11.61, cloud=0.0, wind=17.75, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:12:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:12:55.559 [DEBUG] [Thread-15541] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:12:55.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:12:55.649 [DEBUG] [Thread-15544] [transport.py] [_log()] starting thread (client mode): 0x14922110
2025-11-12T12:12:55.649 [DEBUG] [Thread-15544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:12:55.663 [DEBUG] [Thread-15544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:12:55.663 [INFO] [Thread-15544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] client lang: <none>
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] server lang: <none>
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] kex follows: False
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] Compression: none
2025-11-12T12:12:55.671 [DEBUG] [Thread-15544] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:12:55.725 [DEBUG] [Thread-15544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:12:55.725 [DEBUG] [Thread-15544] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:12:55.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:12:55.726 [DEBUG] [Thread-15544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:12:55.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:12:55.788 [DEBUG] [Thread-15544] [transport.py] [_log()] userauth is OK
2025-11-12T12:12:55.788 [DEBUG] [Thread-15544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:12:55.788 [DEBUG] [Thread-15544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:12:55.788 [DEBUG] [Thread-15544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:12:55.788 [DEBUG] [Thread-15544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:12:55.804 [INFO] [Thread-15544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:12:55.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:12:55.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:12:56.631 [DEBUG] [Thread-15544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:12:56.631 [DEBUG] [Thread-15544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:12:56.679 [DEBUG] [Thread-15544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:12:56.679 [DEBUG] [Thread-15544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:12:56.687 [DEBUG] [Thread-15544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:12:56.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:12:56.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-11-12T12:12: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') -> 00000000
2025-11-12T12:12:56.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:12:56.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:12:56.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:12:56.719 [DEBUG] [Thread-15544] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:13:01.562 [DEBUG] [Thread-15546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:13:08.561 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:13:08.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:13:16.616 [DEBUG] [Thread-15547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:13:26.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:13:26.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:13:26.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-11-12T12:13:27.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 13, 24), 31.9, 11.98, 0.0, 16.97, 26.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:13:27.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:13:24
2025-11-12T12:13:27.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:13:27.651 [DEBUG] [Thread-15548] [transport.py] [_log()] starting thread (client mode): 0x1739a3b0
2025-11-12T12:13:27.651 [DEBUG] [Thread-15548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:13:27.672 [DEBUG] [Thread-15548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:13:27.672 [INFO] [Thread-15548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:13:27.673 [DEBUG] [Thread-15548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] client lang: <none>
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] server lang: <none>
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] kex follows: False
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:13:27.674 [DEBUG] [Thread-15548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:13:27.675 [DEBUG] [Thread-15548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:13:27.675 [DEBUG] [Thread-15548] [transport.py] [_log()] Compression: none
2025-11-12T12:13:27.675 [DEBUG] [Thread-15548] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:13:27.687 [DEBUG] [Thread-15548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:13:27.687 [DEBUG] [Thread-15548] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:13:27.688 [DEBUG] [Thread-15548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:13:27.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:13:27.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:13:27.690 [DEBUG] [Thread-15548] [transport.py] [_log()] userauth is OK
2025-11-12T12:13:27.690 [DEBUG] [Thread-15548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:13:27.690 [DEBUG] [Thread-15548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:13:27.690 [DEBUG] [Thread-15548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:13:27.690 [DEBUG] [Thread-15548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:13:27.704 [INFO] [Thread-15548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:13:27.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:13:28.346 [DEBUG] [Thread-15548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:13:28.347 [DEBUG] [Thread-15548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:13:28.347 [DEBUG] [Thread-15548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:13:28.387 [DEBUG] [Thread-15548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:13:28.388 [DEBUG] [Thread-15548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:13:28.391 [DEBUG] [Thread-15548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:13:28.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:13:28.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:13:28.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:13:28.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:13:28.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:13:28.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:13:28.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:13:28.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:13:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:13:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.425783 -999.00  +25.50  23.06     18   -0.40 1 1 1 1 1   888    0 27.60 39.02 ----- 19.6 23.1 279.4 25.3 30.8 -27.1 30.4 -26.1 29.7 -24.3 30.4 -25.2
2025-11-12T12:13:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:13:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:13:28.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.425783
2025-11-12T12:13:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:13:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:13:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:13:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:13:28.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:13:28.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:13:24', tmtdew=31.9, humidity=11.98, cloud=0.0, wind=16.97, temperature=26.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:13:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:13:28.416 [DEBUG] [Thread-15548] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:13:28.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:13:28.524 [DEBUG] [Thread-15551] [transport.py] [_log()] starting thread (client mode): 0x14922860
2025-11-12T12:13:28.524 [DEBUG] [Thread-15551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:13:28.538 [DEBUG] [Thread-15551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:13:28.538 [INFO] [Thread-15551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] client lang: <none>
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] server lang: <none>
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] kex follows: False
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] Compression: none
2025-11-12T12:13:28.546 [DEBUG] [Thread-15551] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:13:28.604 [DEBUG] [Thread-15551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:13:28.605 [DEBUG] [Thread-15551] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:13:28.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:13:28.605 [DEBUG] [Thread-15551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:13:28.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:13:28.664 [DEBUG] [Thread-15551] [transport.py] [_log()] userauth is OK
2025-11-12T12:13:28.664 [DEBUG] [Thread-15551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:13:28.664 [DEBUG] [Thread-15551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:13:28.664 [DEBUG] [Thread-15551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:13:28.664 [DEBUG] [Thread-15551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:13:28.683 [INFO] [Thread-15551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:13:28.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:13:28.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:13:29.552 [DEBUG] [Thread-15551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:13:29.553 [DEBUG] [Thread-15551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:13:29.600 [DEBUG] [Thread-15551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:13:29.600 [DEBUG] [Thread-15551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:13:29.609 [DEBUG] [Thread-15551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:13:29.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:13:29.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-11-12T12:13:29.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-11-12T12:13:29.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:13:29.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:13:29.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:13:29.642 [DEBUG] [Thread-15551] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:13:31.299 [DEBUG] [Thread-15553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:13:31.652 [DEBUG] [Thread-15554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:13:46.705 [DEBUG] [Thread-15555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:13:59.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:13:59.665 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:13:59.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:14:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 13, 55), 31.88, 12.06, 0.0, 19.41, 26.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:14:00.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:13:55
2025-11-12T12:14:00.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:14:00.602 [DEBUG] [Thread-15556] [transport.py] [_log()] starting thread (client mode): 0x173ea950
2025-11-12T12:14:00.603 [DEBUG] [Thread-15556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:14:00.624 [DEBUG] [Thread-15556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:14:00.625 [INFO] [Thread-15556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] client lang: <none>
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] server lang: <none>
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] kex follows: False
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:14:00.627 [DEBUG] [Thread-15556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:14:00.628 [DEBUG] [Thread-15556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:14:00.628 [DEBUG] [Thread-15556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:14:00.628 [DEBUG] [Thread-15556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:14:00.628 [DEBUG] [Thread-15556] [transport.py] [_log()] Compression: none
2025-11-12T12:14:00.628 [DEBUG] [Thread-15556] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:14:00.645 [DEBUG] [Thread-15556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:14:00.646 [DEBUG] [Thread-15556] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:14:00.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:14:00.647 [DEBUG] [Thread-15556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:14:00.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:14:00.649 [DEBUG] [Thread-15556] [transport.py] [_log()] userauth is OK
2025-11-12T12:14:00.649 [DEBUG] [Thread-15556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:14:00.650 [DEBUG] [Thread-15556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:14:00.650 [DEBUG] [Thread-15556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:14:00.650 [DEBUG] [Thread-15556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:14:00.669 [INFO] [Thread-15556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:14:00.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:14:01.299 [DEBUG] [Thread-15556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:14:01.300 [DEBUG] [Thread-15556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:14:01.300 [DEBUG] [Thread-15556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:14:01.341 [DEBUG] [Thread-15556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:14:01.341 [DEBUG] [Thread-15556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:14:01.344 [DEBUG] [Thread-15556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:14:01.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:14:01.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:14:01.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:14:01.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:14:01.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:14:01.368 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:14:01.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:14:01.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:14:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:14:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.426131 -999.00  +25.70  26.37     18   -0.20 1 1 1 1 1   888    0 27.89 36.03 ----- 25.5 26.4 290.8 32.3 31.1 -25.7 30.4 -24.7 29.4 -27.3 30.6 -24.2
2025-11-12T12:14:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:14:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:14:01.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.426131
2025-11-12T12:14:01.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:14:01.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:14:01.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:14:01.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:14:01.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:14:01.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:13:55', tmtdew=31.88, humidity=12.06, cloud=0.0, wind=19.41, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:13:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:14:01.371 [DEBUG] [Thread-15556] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:14:01.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:14:01.465 [DEBUG] [Thread-15559] [transport.py] [_log()] starting thread (client mode): 0x173452d0
2025-11-12T12:14:01.466 [DEBUG] [Thread-15559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:14:01.480 [DEBUG] [Thread-15559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:14:01.481 [INFO] [Thread-15559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:14:01.488 [DEBUG] [Thread-15559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:14:01.488 [DEBUG] [Thread-15559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:14:01.488 [DEBUG] [Thread-15559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] client lang: <none>
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] server lang: <none>
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] kex follows: False
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] Compression: none
2025-11-12T12:14:01.489 [DEBUG] [Thread-15559] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:14:01.548 [DEBUG] [Thread-15559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:14:01.549 [DEBUG] [Thread-15559] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:14:01.549 [DEBUG] [Thread-15559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:14:01.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:14:01.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:14:01.608 [DEBUG] [Thread-15559] [transport.py] [_log()] userauth is OK
2025-11-12T12:14:01.609 [DEBUG] [Thread-15559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:14:01.609 [DEBUG] [Thread-15559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:14:01.609 [DEBUG] [Thread-15559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:14:01.609 [DEBUG] [Thread-15559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:14:01.628 [INFO] [Thread-15559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:14:01.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:14:01.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:14:01.742 [DEBUG] [Thread-15561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:14:02.537 [DEBUG] [Thread-15559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:14:02.537 [DEBUG] [Thread-15559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:14:02.584 [DEBUG] [Thread-15559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:14:02.585 [DEBUG] [Thread-15559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:14:02.594 [DEBUG] [Thread-15559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:14:02.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:14:02.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:14:02.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-11-12T12:14:02.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:14:02.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:14:02.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:14:02.630 [DEBUG] [Thread-15559] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:14:08.709 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:14:08.710 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:14:16.802 [DEBUG] [Thread-15562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:14:31.332 [DEBUG] [Thread-15563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:14:31.839 [DEBUG] [Thread-15564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:14:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:14:32.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:14:32.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-11-12T12:14:33.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 14, 27), 31.87, 12.09, 0.0, 20.8, 26.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:14:33.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:14:27
2025-11-12T12:14:33.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:14:33.562 [DEBUG] [Thread-15565] [transport.py] [_log()] starting thread (client mode): 0x173bc7c0
2025-11-12T12:14:33.562 [DEBUG] [Thread-15565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:14:33.581 [DEBUG] [Thread-15565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:14:33.582 [INFO] [Thread-15565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:14:33.584 [DEBUG] [Thread-15565] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:14:33.584 [DEBUG] [Thread-15565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:14:33.584 [DEBUG] [Thread-15565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:14:33.584 [DEBUG] [Thread-15565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] client lang: <none>
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] server lang: <none>
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] kex follows: False
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] Compression: none
2025-11-12T12:14:33.585 [DEBUG] [Thread-15565] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:14:33.602 [DEBUG] [Thread-15565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:14:33.603 [DEBUG] [Thread-15565] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:14:33.603 [DEBUG] [Thread-15565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:14:33.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:14:33.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:14:33.605 [DEBUG] [Thread-15565] [transport.py] [_log()] userauth is OK
2025-11-12T12:14:33.605 [DEBUG] [Thread-15565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:14:33.606 [DEBUG] [Thread-15565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:14:33.606 [DEBUG] [Thread-15565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:14:33.606 [DEBUG] [Thread-15565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:14:33.625 [INFO] [Thread-15565] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:14:33.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:14:34.212 [DEBUG] [Thread-15565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:14:34.212 [DEBUG] [Thread-15565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:14:34.212 [DEBUG] [Thread-15565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:14:34.253 [DEBUG] [Thread-15565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:14:34.253 [DEBUG] [Thread-15565] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:14:34.256 [DEBUG] [Thread-15565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:14:34.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:14:34.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:14:34.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:14:34.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:14:34.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:14:34.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:14:34.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:14:34.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:14:34.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:14:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.426478 -999.00  +25.50  12.82     18   -0.20 1 1 1 1 1   888    0 27.79 32.96 ----- 12.4 12.8 293.2 22.1 31.1 -24.9 30.4 -24.4 29.7 -23.7 30.6 -23.7
2025-11-12T12:14:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:14:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:14:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.426478
2025-11-12T12:14:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:14:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:14:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:14:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:14:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:14:34.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:14:27', tmtdew=31.87, humidity=12.09, cloud=0.0, wind=20.8, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:14:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:14:34.285 [DEBUG] [Thread-15565] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:14:34.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:14:34.381 [DEBUG] [Thread-15568] [transport.py] [_log()] starting thread (client mode): 0x173bfb80
2025-11-12T12:14:34.381 [DEBUG] [Thread-15568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:14:34.396 [DEBUG] [Thread-15568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:14:34.396 [INFO] [Thread-15568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:14:34.403 [DEBUG] [Thread-15568] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] client lang: <none>
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] server lang: <none>
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] kex follows: False
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] Compression: none
2025-11-12T12:14:34.404 [DEBUG] [Thread-15568] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:14:34.463 [DEBUG] [Thread-15568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:14:34.463 [DEBUG] [Thread-15568] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:14:34.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:14:34.464 [DEBUG] [Thread-15568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:14:34.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:14:34.520 [DEBUG] [Thread-15568] [transport.py] [_log()] userauth is OK
2025-11-12T12:14:34.521 [DEBUG] [Thread-15568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:14:34.521 [DEBUG] [Thread-15568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:14:34.521 [DEBUG] [Thread-15568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:14:34.521 [DEBUG] [Thread-15568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:14:34.541 [INFO] [Thread-15568] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:14:34.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:14:34.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:14:35.381 [DEBUG] [Thread-15568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:14:35.381 [DEBUG] [Thread-15568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:14:35.431 [DEBUG] [Thread-15568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:14:35.431 [DEBUG] [Thread-15568] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:14:35.441 [DEBUG] [Thread-15568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:14:35.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:14:35.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-11-12T12:14:35.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:14:35.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:14:35.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:14:35.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:14:35.478 [DEBUG] [Thread-15568] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:14:46.875 [DEBUG] [Thread-15570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:15:01.922 [DEBUG] [Thread-15571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:15:05.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:15:05.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:15:05.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:15:06.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 14, 59), 31.75, 12.09, 0.0, 20.49, 26.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:15:06.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:14:59
2025-11-12T12:15:06.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:15:06.414 [DEBUG] [Thread-15572] [transport.py] [_log()] starting thread (client mode): 0x1739ab00
2025-11-12T12:15:06.414 [DEBUG] [Thread-15572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:15:06.435 [DEBUG] [Thread-15572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:15:06.435 [INFO] [Thread-15572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:15:06.438 [DEBUG] [Thread-15572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:15:06.438 [DEBUG] [Thread-15572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] client lang: <none>
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] server lang: <none>
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] kex follows: False
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:15:06.439 [DEBUG] [Thread-15572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:15:06.440 [DEBUG] [Thread-15572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:15:06.440 [DEBUG] [Thread-15572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:15:06.440 [DEBUG] [Thread-15572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:15:06.440 [DEBUG] [Thread-15572] [transport.py] [_log()] Compression: none
2025-11-12T12:15:06.440 [DEBUG] [Thread-15572] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:15:06.458 [DEBUG] [Thread-15572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:15:06.459 [DEBUG] [Thread-15572] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:15:06.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:15:06.461 [DEBUG] [Thread-15572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:15:06.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:15:06.463 [DEBUG] [Thread-15572] [transport.py] [_log()] userauth is OK
2025-11-12T12:15:06.463 [DEBUG] [Thread-15572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:15:06.463 [DEBUG] [Thread-15572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:15:06.463 [DEBUG] [Thread-15572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:15:06.463 [DEBUG] [Thread-15572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:15:06.477 [INFO] [Thread-15572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:15:06.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:15:08.851 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:15:08.852 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:15:09.945 [DEBUG] [Thread-15572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:15:09.945 [DEBUG] [Thread-15572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:15:09.945 [DEBUG] [Thread-15572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:15:09.986 [DEBUG] [Thread-15572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:15:09.986 [DEBUG] [Thread-15572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:15:09.989 [DEBUG] [Thread-15572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:15:10.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:15:10.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:15:10.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:15:10.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:15:10.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:15:10.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:15:10.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:15:10.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:15:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:15:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.426825 -999.00  +25.60  17.35     18   -0.20 1 1 1 1 1   888    0 27.66 28.16 ----- 19.6 17.4 288.3 22.2 30.9 -26.6 30.4 -25.5 29.8 -25.0 30.5 -24.8
2025-11-12T12:15:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:15:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:15:10.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.426825
2025-11-12T12:15:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:15:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:15:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:15:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:15:10.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:15:10.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:14:59', tmtdew=31.75, humidity=12.09, cloud=0.0, wind=20.49, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:14:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:15:10.054 [DEBUG] [Thread-15572] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:15:10.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:15:10.287 [DEBUG] [Thread-15575] [transport.py] [_log()] starting thread (client mode): 0x1737c400
2025-11-12T12:15:10.288 [DEBUG] [Thread-15575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:15:10.302 [DEBUG] [Thread-15575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:15:10.302 [INFO] [Thread-15575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:15:10.310 [DEBUG] [Thread-15575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:15:10.310 [DEBUG] [Thread-15575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:15:10.310 [DEBUG] [Thread-15575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:15:10.310 [DEBUG] [Thread-15575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:15:10.310 [DEBUG] [Thread-15575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:15:10.310 [DEBUG] [Thread-15575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:15:10.310 [DEBUG] [Thread-15575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:15:10.310 [DEBUG] [Thread-15575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] client lang: <none>
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] server lang: <none>
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] kex follows: False
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] Compression: none
2025-11-12T12:15:10.311 [DEBUG] [Thread-15575] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:15:10.372 [DEBUG] [Thread-15575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:15:10.373 [DEBUG] [Thread-15575] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:15:10.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:15:10.374 [DEBUG] [Thread-15575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:15:10.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:15:10.429 [DEBUG] [Thread-15575] [transport.py] [_log()] userauth is OK
2025-11-12T12:15:10.429 [DEBUG] [Thread-15575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:15:10.429 [DEBUG] [Thread-15575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:15:10.429 [DEBUG] [Thread-15575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:15:10.429 [DEBUG] [Thread-15575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:15:10.448 [INFO] [Thread-15575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:15:10.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:15:10.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:15:11.308 [DEBUG] [Thread-15575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:15:11.309 [DEBUG] [Thread-15575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:15:11.357 [DEBUG] [Thread-15575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:15:11.357 [DEBUG] [Thread-15575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:15:11.366 [DEBUG] [Thread-15575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:15:11.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:15:11.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-11-12T12:15:11.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-11-12T12:15:11.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:15:11.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:15:11.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:15:11.402 [DEBUG] [Thread-15575] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:15:16.956 [DEBUG] [Thread-15577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:15:31.360 [DEBUG] [Thread-15578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:15:32.014 [DEBUG] [Thread-15579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:15:41.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:15:41.425 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:15:41.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-11-12T12:15:42.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 15, 32), 31.63, 12.21, 0.0, 24.68, 26.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:15:42.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:15:32
2025-11-12T12:15:42.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:15:42.338 [DEBUG] [Thread-15580] [transport.py] [_log()] starting thread (client mode): 0x1739b9a0
2025-11-12T12:15:42.338 [DEBUG] [Thread-15580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:15:42.359 [DEBUG] [Thread-15580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:15:42.359 [INFO] [Thread-15580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] client lang: <none>
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] server lang: <none>
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] kex follows: False
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] Compression: none
2025-11-12T12:15:42.363 [DEBUG] [Thread-15580] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:15:42.382 [DEBUG] [Thread-15580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:15:42.383 [DEBUG] [Thread-15580] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:15:42.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:15:42.384 [DEBUG] [Thread-15580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:15:42.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:15:42.387 [DEBUG] [Thread-15580] [transport.py] [_log()] userauth is OK
2025-11-12T12:15:42.387 [DEBUG] [Thread-15580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:15:42.387 [DEBUG] [Thread-15580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:15:42.387 [DEBUG] [Thread-15580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:15:42.387 [DEBUG] [Thread-15580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:15:42.411 [INFO] [Thread-15580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:15:42.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:15:43.017 [DEBUG] [Thread-15580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:15:43.017 [DEBUG] [Thread-15580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:15:43.018 [DEBUG] [Thread-15580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:15:43.059 [DEBUG] [Thread-15580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:15:43.059 [DEBUG] [Thread-15580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:15:43.063 [DEBUG] [Thread-15580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:15:43.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:15:43.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:15:43.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:15:43.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:15:43.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:15:43.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:15:43.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:15:43.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:15:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:15:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.427172 -999.00  +26.20  19.07     18   +0.50 1 1 1 1 1   888    0 27.63 20.00 ----- 21.3 19.1 281.6 31.2 30.9 -26.8 30.3 -25.3 29.6 -23.9 30.4 -24.9
2025-11-12T12:15:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:15:43.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:15:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.427172
2025-11-12T12:15:43.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:15:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:15:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:15:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:15:43.092 [DEBUG] [Thread-15580] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:15:43.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:15:43.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:15:32', tmtdew=31.63, humidity=12.21, cloud=0.0, wind=24.68, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:15:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:15:43.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:15:43.181 [DEBUG] [Thread-15583] [transport.py] [_log()] starting thread (client mode): 0x173bdd50
2025-11-12T12:15:43.182 [DEBUG] [Thread-15583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:15:43.197 [DEBUG] [Thread-15583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:15:43.197 [INFO] [Thread-15583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:15:43.204 [DEBUG] [Thread-15583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:15:43.205 [DEBUG] [Thread-15583] [transport.py] [_log()] client lang: <none>
2025-11-12T12:15:43.206 [DEBUG] [Thread-15583] [transport.py] [_log()] server lang: <none>
2025-11-12T12:15:43.206 [DEBUG] [Thread-15583] [transport.py] [_log()] kex follows: False
2025-11-12T12:15:43.206 [DEBUG] [Thread-15583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:15:43.206 [DEBUG] [Thread-15583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:15:43.206 [DEBUG] [Thread-15583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:15:43.206 [DEBUG] [Thread-15583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:15:43.206 [DEBUG] [Thread-15583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:15:43.207 [DEBUG] [Thread-15583] [transport.py] [_log()] Compression: none
2025-11-12T12:15:43.207 [DEBUG] [Thread-15583] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:15:43.264 [DEBUG] [Thread-15583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:15:43.265 [DEBUG] [Thread-15583] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:15:43.265 [DEBUG] [Thread-15583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:15:43.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:15:43.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:15:43.320 [DEBUG] [Thread-15583] [transport.py] [_log()] userauth is OK
2025-11-12T12:15:43.320 [DEBUG] [Thread-15583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:15:43.321 [DEBUG] [Thread-15583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:15:43.321 [DEBUG] [Thread-15583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:15:43.321 [DEBUG] [Thread-15583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:15:43.341 [INFO] [Thread-15583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:15:43.341 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:15:43.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:15:44.206 [DEBUG] [Thread-15583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:15:44.206 [DEBUG] [Thread-15583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:15:44.254 [DEBUG] [Thread-15583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:15:44.254 [DEBUG] [Thread-15583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:15:44.263 [DEBUG] [Thread-15583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:15:44.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:15: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')
2025-11-12T12:15:44.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-11-12T12:15:44.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:15:44.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:15:44.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:15:44.300 [DEBUG] [Thread-15583] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:15:47.048 [DEBUG] [Thread-15585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:16:02.110 [DEBUG] [Thread-15586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:16:08.992 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:16:08.992 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:16:14.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:16:14.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:16:14.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-11-12T12:16:14.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 16, 3), 31.13, 12.57, 0.0, 21.76, 26.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:16:14.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:16:03
2025-11-12T12:16:15.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:16:15.232 [DEBUG] [Thread-15587] [transport.py] [_log()] starting thread (client mode): 0x14920880
2025-11-12T12:16:15.232 [DEBUG] [Thread-15587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:16:15.253 [DEBUG] [Thread-15587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:16:15.253 [INFO] [Thread-15587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:16:15.256 [DEBUG] [Thread-15587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:16:15.256 [DEBUG] [Thread-15587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] client lang: <none>
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] server lang: <none>
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] kex follows: False
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:16:15.257 [DEBUG] [Thread-15587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:16:15.258 [DEBUG] [Thread-15587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:16:15.258 [DEBUG] [Thread-15587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:16:15.258 [DEBUG] [Thread-15587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:16:15.258 [DEBUG] [Thread-15587] [transport.py] [_log()] Compression: none
2025-11-12T12:16:15.258 [DEBUG] [Thread-15587] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:16:15.277 [DEBUG] [Thread-15587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:16:15.278 [DEBUG] [Thread-15587] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:16:15.278 [DEBUG] [Thread-15587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:16:15.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:16:15.279 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:16:15.280 [DEBUG] [Thread-15587] [transport.py] [_log()] userauth is OK
2025-11-12T12:16:15.281 [DEBUG] [Thread-15587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:16:15.281 [DEBUG] [Thread-15587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:16:15.281 [DEBUG] [Thread-15587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:16:15.281 [DEBUG] [Thread-15587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:16:15.306 [INFO] [Thread-15587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:16:15.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:16:15.957 [DEBUG] [Thread-15587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:16:15.957 [DEBUG] [Thread-15587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:16:15.958 [DEBUG] [Thread-15587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:16:15.997 [DEBUG] [Thread-15587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:16:15.998 [DEBUG] [Thread-15587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:16:16.001 [DEBUG] [Thread-15587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:16:16.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:16:16.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:16:16.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:16:16.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:16:16.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:16:16.022 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:16:16.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:16:16.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:16:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:16:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.427519 -999.00  +26.50  22.48     18   +0.50 1 1 1 1 1   888    0 27.01 11.67 ----- 22.6 22.5 272.2 27.2 30.9 -25.9 30.2 -25.3 29.5 -25.6 30.4 -24.9
2025-11-12T12:16:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:16:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:16:16.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.427519
2025-11-12T12:16:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:16:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:16:16.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:16:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:16:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:16:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:16:03', tmtdew=31.13, humidity=12.57, cloud=0.0, wind=21.76, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:15:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:16:16.025 [DEBUG] [Thread-15587] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:16:16.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:16:16.121 [DEBUG] [Thread-15590] [transport.py] [_log()] starting thread (client mode): 0x173f8190
2025-11-12T12:16:16.121 [DEBUG] [Thread-15590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:16:16.137 [DEBUG] [Thread-15590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:16:16.137 [INFO] [Thread-15590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:16:16.144 [DEBUG] [Thread-15590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] client lang: <none>
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] server lang: <none>
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] kex follows: False
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] Compression: none
2025-11-12T12:16:16.145 [DEBUG] [Thread-15590] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:16:16.204 [DEBUG] [Thread-15590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:16:16.205 [DEBUG] [Thread-15590] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:16:16.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:16:16.206 [DEBUG] [Thread-15590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:16:16.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:16:16.260 [DEBUG] [Thread-15590] [transport.py] [_log()] userauth is OK
2025-11-12T12:16:16.260 [DEBUG] [Thread-15590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:16:16.261 [DEBUG] [Thread-15590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:16:16.261 [DEBUG] [Thread-15590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:16:16.261 [DEBUG] [Thread-15590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:16:16.279 [INFO] [Thread-15590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:16:16.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:16:16.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:16:17.143 [DEBUG] [Thread-15592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:16:17.159 [DEBUG] [Thread-15590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:16:17.159 [DEBUG] [Thread-15590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:16:17.207 [DEBUG] [Thread-15590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:16:17.208 [DEBUG] [Thread-15590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:16:17.217 [DEBUG] [Thread-15590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:16:17.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:16:17.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-11-12T12:16:17.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-11-12T12:16:17.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:16:17.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:16:17.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:16:17.252 [DEBUG] [Thread-15590] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:16:31.408 [DEBUG] [Thread-15593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:16:32.189 [DEBUG] [Thread-15594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:16:47.224 [DEBUG] [Thread-15595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:16:47.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:16:47.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:16:47.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:16:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 16, 35), 30.82, 12.74, 0.0, 28.2, 26.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:16:47.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:16:35
2025-11-12T12:16:48.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:16:48.222 [DEBUG] [Thread-15596] [transport.py] [_log()] starting thread (client mode): 0x14921ba0
2025-11-12T12:16:48.222 [DEBUG] [Thread-15596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:16:48.244 [DEBUG] [Thread-15596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:16:48.244 [INFO] [Thread-15596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] client lang: <none>
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] server lang: <none>
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] kex follows: False
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] Compression: none
2025-11-12T12:16:48.247 [DEBUG] [Thread-15596] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:16:48.263 [DEBUG] [Thread-15596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:16:48.264 [DEBUG] [Thread-15596] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:16:48.264 [DEBUG] [Thread-15596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:16:48.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:16:48.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:16:48.265 [DEBUG] [Thread-15596] [transport.py] [_log()] userauth is OK
2025-11-12T12:16:48.265 [DEBUG] [Thread-15596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:16:48.265 [DEBUG] [Thread-15596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:16:48.265 [DEBUG] [Thread-15596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:16:48.265 [DEBUG] [Thread-15596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:16:48.282 [INFO] [Thread-15596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:16:48.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:16:48.906 [DEBUG] [Thread-15596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:16:48.906 [DEBUG] [Thread-15596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:16:48.906 [DEBUG] [Thread-15596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:16:48.947 [DEBUG] [Thread-15596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:16:48.947 [DEBUG] [Thread-15596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:16:48.949 [DEBUG] [Thread-15596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:16:48.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:16:48.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:16:48.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:16:48.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:16:48.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:16:48.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:16:48.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:16:48.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:16:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:16:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.428214 -999.00  +26.00  20.66     18   +0.00 1 1 1 1 1   888    0 26.83 7.82 ----- 24.0 20.7 272.4 27.0 30.8 -25.7 30.3 -25.6 29.5 -26.6 30.3 -24.4
2025-11-12T12:16:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:16:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:16:48.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.428214
2025-11-12T12:16:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:16:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:16:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:16:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:16:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:16:48.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:16:35', tmtdew=30.82, humidity=12.74, cloud=0.0, wind=28.2, temperature=26.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:16:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:16:48.970 [DEBUG] [Thread-15596] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:16:49.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:16:49.055 [DEBUG] [Thread-15599] [transport.py] [_log()] starting thread (client mode): 0x173bdd50
2025-11-12T12:16:49.055 [DEBUG] [Thread-15599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:16:49.070 [DEBUG] [Thread-15599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:16:49.071 [INFO] [Thread-15599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:16:49.078 [DEBUG] [Thread-15599] [transport.py] [_log()] client lang: <none>
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] server lang: <none>
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] kex follows: False
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] Compression: none
2025-11-12T12:16:49.079 [DEBUG] [Thread-15599] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:16:49.139 [DEBUG] [Thread-15599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:16:49.139 [DEBUG] [Thread-15599] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:16:49.139 [DEBUG] [Thread-15599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:16:49.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:16:49.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:16:49.199 [DEBUG] [Thread-15599] [transport.py] [_log()] userauth is OK
2025-11-12T12:16:49.199 [DEBUG] [Thread-15599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:16:49.200 [DEBUG] [Thread-15599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:16:49.200 [DEBUG] [Thread-15599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:16:49.200 [DEBUG] [Thread-15599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:16:49.214 [INFO] [Thread-15599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:16:49.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:16:49.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:16:50.077 [DEBUG] [Thread-15599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:16:50.077 [DEBUG] [Thread-15599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:16:50.125 [DEBUG] [Thread-15599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:16:50.125 [DEBUG] [Thread-15599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:16:50.133 [DEBUG] [Thread-15599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:16:50.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:16:50.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-11-12T12:16: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') -> 00000000
2025-11-12T12:16:50.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:16:50.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:16:50.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:16:50.164 [DEBUG] [Thread-15599] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:17:02.258 [DEBUG] [Thread-15601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:17:09.132 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:17:09.133 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:17:17.316 [DEBUG] [Thread-15602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:17:20.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:17:20.174 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:17:20.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-11-12T12:17:20.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 17, 8), 31.2, 12.44, 0.0, 26.33, 26.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:17:20.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:17:08
2025-11-12T12:17:20.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:17:21.092 [DEBUG] [Thread-15603] [transport.py] [_log()] starting thread (client mode): 0x173637f0
2025-11-12T12:17:21.092 [DEBUG] [Thread-15603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:17:21.112 [DEBUG] [Thread-15603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:17:21.112 [INFO] [Thread-15603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] client lang: <none>
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] server lang: <none>
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] kex follows: False
2025-11-12T12:17:21.115 [DEBUG] [Thread-15603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:17:21.116 [DEBUG] [Thread-15603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:17:21.116 [DEBUG] [Thread-15603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:17:21.116 [DEBUG] [Thread-15603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:17:21.116 [DEBUG] [Thread-15603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:17:21.116 [DEBUG] [Thread-15603] [transport.py] [_log()] Compression: none
2025-11-12T12:17:21.116 [DEBUG] [Thread-15603] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:17:21.131 [DEBUG] [Thread-15603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:17:21.132 [DEBUG] [Thread-15603] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:17:21.132 [DEBUG] [Thread-15603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:17:21.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:17:21.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:17:21.134 [DEBUG] [Thread-15603] [transport.py] [_log()] userauth is OK
2025-11-12T12:17:21.135 [DEBUG] [Thread-15603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:17:21.135 [DEBUG] [Thread-15603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:17:21.135 [DEBUG] [Thread-15603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:17:21.135 [DEBUG] [Thread-15603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:17:21.154 [INFO] [Thread-15603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:17:21.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:17:21.786 [DEBUG] [Thread-15603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:17:21.786 [DEBUG] [Thread-15603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:17:21.786 [DEBUG] [Thread-15603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:17:21.827 [DEBUG] [Thread-15603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:17:21.827 [DEBUG] [Thread-15603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:17:21.830 [DEBUG] [Thread-15603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:17:21.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:17:21.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:17:21.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:17:21.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:17:21.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:17:21.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:17:21.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:17:21.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:17:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:17:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.428561 -999.00  +26.10  16.29     17   -0.50 1 1 1 1 1   888    0 26.67 3.33 ----- 25.5 16.3 270.2 37.7 30.9 -25.3 30.3 -24.9 29.3 -26.9 30.4 -25.7
2025-11-12T12:17:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:17:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:17:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.428561
2025-11-12T12:17:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:17:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:17:21.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:17:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:17:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:17:21.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:17:08', tmtdew=31.2, humidity=12.44, cloud=0.0, wind=26.33, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:17:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:17:21.856 [DEBUG] [Thread-15603] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:17:21.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:17:21.952 [DEBUG] [Thread-15606] [transport.py] [_log()] starting thread (client mode): 0x173bdd50
2025-11-12T12:17:21.952 [DEBUG] [Thread-15606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:17:21.967 [DEBUG] [Thread-15606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:17:21.967 [INFO] [Thread-15606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:17:21.975 [DEBUG] [Thread-15606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:17:21.975 [DEBUG] [Thread-15606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:17:21.975 [DEBUG] [Thread-15606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:17:21.975 [DEBUG] [Thread-15606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] client lang: <none>
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] server lang: <none>
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] kex follows: False
2025-11-12T12:17:21.976 [DEBUG] [Thread-15606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:17:21.977 [DEBUG] [Thread-15606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:17:21.977 [DEBUG] [Thread-15606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:17:21.977 [DEBUG] [Thread-15606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:17:21.977 [DEBUG] [Thread-15606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:17:21.977 [DEBUG] [Thread-15606] [transport.py] [_log()] Compression: none
2025-11-12T12:17:21.977 [DEBUG] [Thread-15606] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:17:22.032 [DEBUG] [Thread-15606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:17:22.033 [DEBUG] [Thread-15606] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:17:22.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:17:22.034 [DEBUG] [Thread-15606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:17:22.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:17:22.088 [DEBUG] [Thread-15606] [transport.py] [_log()] userauth is OK
2025-11-12T12:17:22.088 [DEBUG] [Thread-15606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:17:22.089 [DEBUG] [Thread-15606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:17:22.089 [DEBUG] [Thread-15606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:17:22.089 [DEBUG] [Thread-15606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:17:22.109 [INFO] [Thread-15606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:17:22.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:17:22.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:17:22.959 [DEBUG] [Thread-15606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:17:22.959 [DEBUG] [Thread-15606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:17:23.008 [DEBUG] [Thread-15606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:17:23.008 [DEBUG] [Thread-15606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:17:23.017 [DEBUG] [Thread-15606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:17:23.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:17:23.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-11-12T12:17:23.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-11-12T12:17:23.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:17:23.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:17:23.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:17:23.054 [DEBUG] [Thread-15606] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:17:31.450 [DEBUG] [Thread-15608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:17:32.348 [DEBUG] [Thread-15609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:17:47.396 [DEBUG] [Thread-15610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:17:53.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:17:53.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:17:53.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-11-12T12:17:53.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 17, 39), 32.7, 11.41, 0.0, 29.25, 26.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:17:53.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:17:39
2025-11-12T12:17:53.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:17:53.986 [DEBUG] [Thread-15611] [transport.py] [_log()] starting thread (client mode): 0x17398fa0
2025-11-12T12:17:53.986 [DEBUG] [Thread-15611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:17:54.006 [DEBUG] [Thread-15611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:17:54.007 [INFO] [Thread-15611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] client lang: <none>
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] server lang: <none>
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] kex follows: False
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] Compression: none
2025-11-12T12:17:54.009 [DEBUG] [Thread-15611] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:17:54.026 [DEBUG] [Thread-15611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:17:54.027 [DEBUG] [Thread-15611] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:17:54.027 [DEBUG] [Thread-15611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:17:54.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:17:54.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:17:54.030 [DEBUG] [Thread-15611] [transport.py] [_log()] userauth is OK
2025-11-12T12:17:54.030 [DEBUG] [Thread-15611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:17:54.030 [DEBUG] [Thread-15611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:17:54.031 [DEBUG] [Thread-15611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:17:54.031 [DEBUG] [Thread-15611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:17:54.067 [INFO] [Thread-15611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:17:54.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:17:54.708 [DEBUG] [Thread-15611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:17:54.708 [DEBUG] [Thread-15611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:17:54.709 [DEBUG] [Thread-15611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:17:54.750 [DEBUG] [Thread-15611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:17:54.750 [DEBUG] [Thread-15611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:17:54.754 [DEBUG] [Thread-15611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:17:54.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:17:54.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:17:54.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:17:54.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:17:54.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:17:54.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:17:54.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:17:54.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:17:54.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:17:54.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.428908 -999.00  +26.20  19.93     16   -1.10 1 1 1 1 1   888    0 26.50 1.42 ----- 16.1 19.9 264.4 32.2 30.9 -24.8 30.3 -25.7 29.6 -23.6 30.4 -23.9
2025-11-12T12:17:54.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:17:54.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:17:54.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.428908
2025-11-12T12:17:54.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:17:54.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:17:54.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:17:54.777 [DEBUG] [Thread-15611] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:17:54.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:17:54.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:17:54.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:17:39', tmtdew=32.7, humidity=11.41, cloud=0.0, wind=29.25, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:17:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:17:54.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:17:54.878 [DEBUG] [Thread-15614] [transport.py] [_log()] starting thread (client mode): 0x17361a20
2025-11-12T12:17:54.879 [DEBUG] [Thread-15614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:17:54.893 [DEBUG] [Thread-15614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:17:54.893 [INFO] [Thread-15614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] client lang: <none>
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] server lang: <none>
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] kex follows: False
2025-11-12T12:17:54.901 [DEBUG] [Thread-15614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:17:54.902 [DEBUG] [Thread-15614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:17:54.902 [DEBUG] [Thread-15614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:17:54.902 [DEBUG] [Thread-15614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:17:54.902 [DEBUG] [Thread-15614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:17:54.902 [DEBUG] [Thread-15614] [transport.py] [_log()] Compression: none
2025-11-12T12:17:54.902 [DEBUG] [Thread-15614] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:17:54.964 [DEBUG] [Thread-15614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:17:54.965 [DEBUG] [Thread-15614] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:17:54.965 [DEBUG] [Thread-15614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:17:54.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:17:54.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:17:55.021 [DEBUG] [Thread-15614] [transport.py] [_log()] userauth is OK
2025-11-12T12:17:55.022 [DEBUG] [Thread-15614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:17:55.022 [DEBUG] [Thread-15614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:17:55.022 [DEBUG] [Thread-15614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:17:55.022 [DEBUG] [Thread-15614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:17:55.041 [INFO] [Thread-15614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:17:55.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:17:55.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:17:55.891 [DEBUG] [Thread-15614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:17:55.891 [DEBUG] [Thread-15614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:17:55.938 [DEBUG] [Thread-15614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:17:55.938 [DEBUG] [Thread-15614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:17:55.947 [DEBUG] [Thread-15614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:17:55.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:17:55.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:17:55.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-11-12T12:17:55.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:17:55.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:17:55.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:17:55.986 [DEBUG] [Thread-15614] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:18:02.430 [DEBUG] [Thread-15616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:18:09.274 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:18:09.276 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:18:17.471 [DEBUG] [Thread-15617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:18:25.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:18:25.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:18:25.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-11-12T12:18:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 18, 11), 33.35, 10.88, 0.0, 34.41, 26.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:18:26.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:18:11
2025-11-12T12:18:26.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:18:26.904 [DEBUG] [Thread-15618] [transport.py] [_log()] starting thread (client mode): 0x17363fa0
2025-11-12T12:18:26.904 [DEBUG] [Thread-15618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:18:26.923 [DEBUG] [Thread-15618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:18:26.924 [INFO] [Thread-15618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:18:26.926 [DEBUG] [Thread-15618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] client lang: <none>
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] server lang: <none>
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] kex follows: False
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] Compression: none
2025-11-12T12:18:26.927 [DEBUG] [Thread-15618] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:18:26.945 [DEBUG] [Thread-15618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:18:26.946 [DEBUG] [Thread-15618] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:18:26.947 [DEBUG] [Thread-15618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:18:26.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:18:26.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:18:26.949 [DEBUG] [Thread-15618] [transport.py] [_log()] userauth is OK
2025-11-12T12:18:26.949 [DEBUG] [Thread-15618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:18:26.949 [DEBUG] [Thread-15618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:18:26.949 [DEBUG] [Thread-15618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:18:26.949 [DEBUG] [Thread-15618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:18:26.975 [INFO] [Thread-15618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:18:26.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:18:27.567 [DEBUG] [Thread-15618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:18:27.567 [DEBUG] [Thread-15618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:18:27.567 [DEBUG] [Thread-15618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:18:27.608 [DEBUG] [Thread-15618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:18:27.608 [DEBUG] [Thread-15618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:18:27.611 [DEBUG] [Thread-15618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:18:27.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:18:27.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:18:27.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:18:27.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:18:27.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:18:27.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:18:27.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:18:27.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:18:27.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:18:27.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.429255 -999.00  +26.40  29.48     16   -1.10 1 1 1 1 1   888    0 26.58 0.24 ----- 32.2 29.5 275.4 40.4 30.8 -27.3 30.3 -25.5 29.6 -25.3 30.4 -24.7
2025-11-12T12:18:27.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:18:27.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:18:27.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.429255
2025-11-12T12:18:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:18:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:18:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:18:27.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:18:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:18:27.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:18:11', tmtdew=33.35, humidity=10.88, cloud=0.0, wind=34.41, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:18:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:18:27.639 [DEBUG] [Thread-15618] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:18:27.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:18:27.746 [DEBUG] [Thread-15621] [transport.py] [_log()] starting thread (client mode): 0x173fbcd0
2025-11-12T12:18:27.746 [DEBUG] [Thread-15621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:18:27.761 [DEBUG] [Thread-15621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:18:27.761 [INFO] [Thread-15621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:18:27.769 [DEBUG] [Thread-15621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:18:27.769 [DEBUG] [Thread-15621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:18:27.769 [DEBUG] [Thread-15621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:18:27.769 [DEBUG] [Thread-15621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:18:27.769 [DEBUG] [Thread-15621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:18:27.770 [DEBUG] [Thread-15621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:18:27.770 [DEBUG] [Thread-15621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:18:27.770 [DEBUG] [Thread-15621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:18:27.770 [DEBUG] [Thread-15621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:18:27.770 [DEBUG] [Thread-15621] [transport.py] [_log()] client lang: <none>
2025-11-12T12:18:27.770 [DEBUG] [Thread-15621] [transport.py] [_log()] server lang: <none>
2025-11-12T12:18:27.770 [DEBUG] [Thread-15621] [transport.py] [_log()] kex follows: False
2025-11-12T12:18:27.770 [DEBUG] [Thread-15621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:18:27.771 [DEBUG] [Thread-15621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:18:27.771 [DEBUG] [Thread-15621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:18:27.771 [DEBUG] [Thread-15621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:18:27.771 [DEBUG] [Thread-15621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:18:27.771 [DEBUG] [Thread-15621] [transport.py] [_log()] Compression: none
2025-11-12T12:18:27.771 [DEBUG] [Thread-15621] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:18:27.829 [DEBUG] [Thread-15621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:18:27.829 [DEBUG] [Thread-15621] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:18:27.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:18:27.831 [DEBUG] [Thread-15621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:18:27.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:18:27.885 [DEBUG] [Thread-15621] [transport.py] [_log()] userauth is OK
2025-11-12T12:18:27.885 [DEBUG] [Thread-15621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:18:27.885 [DEBUG] [Thread-15621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:18:27.885 [DEBUG] [Thread-15621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:18:27.885 [DEBUG] [Thread-15621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:18:27.905 [INFO] [Thread-15621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:18:27.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:18:27.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:18:28.773 [DEBUG] [Thread-15621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:18:28.773 [DEBUG] [Thread-15621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:18:28.821 [DEBUG] [Thread-15621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:18:28.821 [DEBUG] [Thread-15621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:18:28.831 [DEBUG] [Thread-15621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:18:28.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:18:28.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')
2025-11-12T12:18:28.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:18:28.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:18:28.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:18:28.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:18:28.869 [DEBUG] [Thread-15621] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:18:31.492 [DEBUG] [Thread-15623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:18:32.511 [DEBUG] [Thread-15624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:18:47.570 [DEBUG] [Thread-15625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:18:58.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:18:58.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:18:58.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-11-12T12:18:59.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 18, 43), 33.44, 10.5, 0.0, 33.45, 26.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:18:59.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:18:43
2025-11-12T12:18:59.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:18:59.797 [DEBUG] [Thread-15626] [transport.py] [_log()] starting thread (client mode): 0x1737ef50
2025-11-12T12:18:59.798 [DEBUG] [Thread-15626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:18:59.813 [DEBUG] [Thread-15626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:18:59.813 [INFO] [Thread-15626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] client lang: <none>
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] server lang: <none>
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] kex follows: False
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] Compression: none
2025-11-12T12:18:59.815 [DEBUG] [Thread-15626] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:18:59.825 [DEBUG] [Thread-15626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:18:59.825 [DEBUG] [Thread-15626] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:18:59.825 [DEBUG] [Thread-15626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:18:59.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:18:59.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:18:59.826 [DEBUG] [Thread-15626] [transport.py] [_log()] userauth is OK
2025-11-12T12:18:59.826 [DEBUG] [Thread-15626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:18:59.827 [DEBUG] [Thread-15626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:18:59.827 [DEBUG] [Thread-15626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:18:59.827 [DEBUG] [Thread-15626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:18:59.841 [INFO] [Thread-15626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:18:59.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:19:00.475 [DEBUG] [Thread-15626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:19:00.475 [DEBUG] [Thread-15626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:19:00.475 [DEBUG] [Thread-15626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:19:00.515 [DEBUG] [Thread-15626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:19:00.516 [DEBUG] [Thread-15626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:19:00.519 [DEBUG] [Thread-15626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:19:00.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:19:00.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:19:00.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:19:00.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:19:00.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:19:00.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:19:00.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:19:00.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:19:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:19:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.429603 -999.00  +26.20  38.91     16   -1.10 1 1 2 1 1   888    0 26.51 -1.11 ----- 31.0 38.9 295.4 43.1 30.8 -27.3 30.2 -25.8 29.4 -26.7 30.4 -24.1
2025-11-12T12:19:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:19:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:19:00.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.429603
2025-11-12T12:19:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:19:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:19:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:19:00.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:19:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:19:00.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:18:43', tmtdew=33.44, humidity=10.5, cloud=0.0, wind=33.45, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:18:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:19:00.543 [DEBUG] [Thread-15626] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:19:00.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:19:00.639 [DEBUG] [Thread-15629] [transport.py] [_log()] starting thread (client mode): 0x17363c40
2025-11-12T12:19:00.639 [DEBUG] [Thread-15629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:19:00.653 [DEBUG] [Thread-15629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:19:00.653 [INFO] [Thread-15629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:19:00.660 [DEBUG] [Thread-15629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:19:00.660 [DEBUG] [Thread-15629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:19:00.660 [DEBUG] [Thread-15629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:19:00.660 [DEBUG] [Thread-15629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] client lang: <none>
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] server lang: <none>
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] kex follows: False
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] Compression: none
2025-11-12T12:19:00.661 [DEBUG] [Thread-15629] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:19:00.719 [DEBUG] [Thread-15629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:19:00.720 [DEBUG] [Thread-15629] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:19:00.720 [DEBUG] [Thread-15629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:19:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:19:00.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:19:00.780 [DEBUG] [Thread-15629] [transport.py] [_log()] userauth is OK
2025-11-12T12:19:00.780 [DEBUG] [Thread-15629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:19:00.781 [DEBUG] [Thread-15629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:19:00.781 [DEBUG] [Thread-15629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:19:00.781 [DEBUG] [Thread-15629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:19:00.799 [INFO] [Thread-15629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:19:00.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:19:00.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:19:01.681 [DEBUG] [Thread-15629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:19:01.681 [DEBUG] [Thread-15629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:19:01.728 [DEBUG] [Thread-15629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:19:01.729 [DEBUG] [Thread-15629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:19:01.738 [DEBUG] [Thread-15629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:19:01.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:19:01.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-11-12T12:19: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') -> 00000000
2025-11-12T12:19:01.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:19:01.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:19:01.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:19:01.775 [DEBUG] [Thread-15629] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:19:02.607 [DEBUG] [Thread-15631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:19:09.416 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:19:09.418 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:19:17.667 [DEBUG] [Thread-15632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:19:31.540 [DEBUG] [Thread-15633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:19:31.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:19:31.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:19:31.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-11-12T12:19:32.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 19, 15), 33.4, 10.51, 0.0, 34.18, 26.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:19:32.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:19:15
2025-11-12T12:19:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:19:32.694 [DEBUG] [Thread-15634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:19:32.718 [DEBUG] [Thread-15635] [transport.py] [_log()] starting thread (client mode): 0x14955de0
2025-11-12T12:19:32.718 [DEBUG] [Thread-15635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:19:32.734 [DEBUG] [Thread-15635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:19:32.734 [INFO] [Thread-15635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] client lang: <none>
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] server lang: <none>
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] kex follows: False
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] Compression: none
2025-11-12T12:19:32.736 [DEBUG] [Thread-15635] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:19:32.750 [DEBUG] [Thread-15635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:19:32.750 [DEBUG] [Thread-15635] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:19:32.750 [DEBUG] [Thread-15635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:19:32.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:19:32.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:19:32.751 [DEBUG] [Thread-15635] [transport.py] [_log()] userauth is OK
2025-11-12T12:19:32.751 [DEBUG] [Thread-15635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:19:32.751 [DEBUG] [Thread-15635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:19:32.751 [DEBUG] [Thread-15635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:19:32.752 [DEBUG] [Thread-15635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:19:32.764 [INFO] [Thread-15635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:19:32.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:19:33.427 [DEBUG] [Thread-15635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:19:33.427 [DEBUG] [Thread-15635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:19:33.428 [DEBUG] [Thread-15635] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:19:33.469 [DEBUG] [Thread-15635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:19:33.469 [DEBUG] [Thread-15635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:19:33.472 [DEBUG] [Thread-15635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:19:33.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:19:33.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:19:33.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:19:33.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:19:33.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:19:33.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:19:33.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:19:33.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:19:33.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:19:33.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.429950 -999.00  +26.20  32.91     16   -1.30 1 1 2 1 1   888    0 26.86 -4.72 ----- 34.1 32.9 273.8 39.9 30.9 -25.3 30.2 -25.6 29.5 -27.2 30.4 -25.4
2025-11-12T12:19:33.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:19:33.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:19:33.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.429950
2025-11-12T12:19:33.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:19:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:19:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:19:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:19:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:19:33.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:19:15', tmtdew=33.4, humidity=10.51, cloud=0.0, wind=34.18, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:19:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:19:33.498 [DEBUG] [Thread-15635] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:19:33.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:19:33.596 [DEBUG] [Thread-15638] [transport.py] [_log()] starting thread (client mode): 0x173e93c0
2025-11-12T12:19:33.596 [DEBUG] [Thread-15638] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:19:33.610 [DEBUG] [Thread-15638] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:19:33.611 [INFO] [Thread-15638] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:19:33.618 [DEBUG] [Thread-15638] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:19:33.618 [DEBUG] [Thread-15638] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:19:33.618 [DEBUG] [Thread-15638] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:19:33.618 [DEBUG] [Thread-15638] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:19:33.618 [DEBUG] [Thread-15638] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] client lang: <none>
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] server lang: <none>
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] kex follows: False
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] Compression: none
2025-11-12T12:19:33.619 [DEBUG] [Thread-15638] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:19:33.675 [DEBUG] [Thread-15638] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:19:33.676 [DEBUG] [Thread-15638] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:19:33.676 [DEBUG] [Thread-15638] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:19:33.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:19:33.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:19:33.732 [DEBUG] [Thread-15638] [transport.py] [_log()] userauth is OK
2025-11-12T12:19:33.732 [DEBUG] [Thread-15638] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:19:33.732 [DEBUG] [Thread-15638] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:19:33.732 [DEBUG] [Thread-15638] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:19:33.732 [DEBUG] [Thread-15638] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:19:33.751 [INFO] [Thread-15638] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:19:33.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:19:33.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:19:34.619 [DEBUG] [Thread-15638] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:19:34.619 [DEBUG] [Thread-15638] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:19:34.668 [DEBUG] [Thread-15638] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:19:34.668 [DEBUG] [Thread-15638] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:19:34.678 [DEBUG] [Thread-15638] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:19:34.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:19:34.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-11-12T12:19:34.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:19:34.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:19:34.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:19:34.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:19:34.720 [DEBUG] [Thread-15638] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:19:47.728 [DEBUG] [Thread-15640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:20:02.781 [DEBUG] [Thread-15641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:20:04.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:20:04.725 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:20:04.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-11-12T12:20:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 19, 47), 33.33, 10.4, 0.0, 34.23, 26.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:20:05.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:19:47
2025-11-12T12:20:05.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:20:05.636 [DEBUG] [Thread-15642] [transport.py] [_log()] starting thread (client mode): 0x173e9b70
2025-11-12T12:20:05.636 [DEBUG] [Thread-15642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:20:05.656 [DEBUG] [Thread-15642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:20:05.657 [INFO] [Thread-15642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:20:05.659 [DEBUG] [Thread-15642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] client lang: <none>
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] server lang: <none>
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] kex follows: False
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] Compression: none
2025-11-12T12:20:05.660 [DEBUG] [Thread-15642] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:20:05.677 [DEBUG] [Thread-15642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:20:05.677 [DEBUG] [Thread-15642] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:20:05.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:20:05.678 [DEBUG] [Thread-15642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:20:05.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:20:05.680 [DEBUG] [Thread-15642] [transport.py] [_log()] userauth is OK
2025-11-12T12:20:05.681 [DEBUG] [Thread-15642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:20:05.681 [DEBUG] [Thread-15642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:20:05.681 [DEBUG] [Thread-15642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:20:05.681 [DEBUG] [Thread-15642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:20:05.706 [INFO] [Thread-15642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:20:05.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:20:06.403 [DEBUG] [Thread-15642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:20:06.403 [DEBUG] [Thread-15642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:20:06.403 [DEBUG] [Thread-15642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:20:06.444 [DEBUG] [Thread-15642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:20:06.444 [DEBUG] [Thread-15642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:20:06.448 [DEBUG] [Thread-15642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:20:06.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:20:06.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:20:06.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:20:06.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:20:06.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:20:06.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:20:06.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:20:06.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:20:06.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:20:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.430297 -999.00  +25.50  27.92     16   -1.50 1 1 1 1 1   888    0 26.66 -9.45 ----- 33.3 27.9 279.0 39.4 30.7 -28.8 30.0 -26.2 29.1 -26.6 30.1 -25.2
2025-11-12T12:20:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:20:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:20:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.430297
2025-11-12T12:20:06.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:20:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:20:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:20:06.502 [DEBUG] [Thread-15642] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:20:06.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:20:06.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:20:06.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:19:47', tmtdew=33.33, humidity=10.4, cloud=0.0, wind=34.23, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:19:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:20:06.588 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:20:06.600 [DEBUG] [Thread-15645] [transport.py] [_log()] starting thread (client mode): 0x14955de0
2025-11-12T12:20:06.600 [DEBUG] [Thread-15645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:20:06.616 [DEBUG] [Thread-15645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:20:06.617 [INFO] [Thread-15645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:20:06.624 [DEBUG] [Thread-15645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] client lang: <none>
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] server lang: <none>
2025-11-12T12:20:06.625 [DEBUG] [Thread-15645] [transport.py] [_log()] kex follows: False
2025-11-12T12:20:06.626 [DEBUG] [Thread-15645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:20:06.626 [DEBUG] [Thread-15645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:20:06.626 [DEBUG] [Thread-15645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:20:06.626 [DEBUG] [Thread-15645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:20:06.626 [DEBUG] [Thread-15645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:20:06.626 [DEBUG] [Thread-15645] [transport.py] [_log()] Compression: none
2025-11-12T12:20:06.626 [DEBUG] [Thread-15645] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:20:06.686 [DEBUG] [Thread-15645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:20:06.687 [DEBUG] [Thread-15645] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:20:06.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:20:06.688 [DEBUG] [Thread-15645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:20:06.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:20:06.745 [DEBUG] [Thread-15645] [transport.py] [_log()] userauth is OK
2025-11-12T12:20:06.745 [DEBUG] [Thread-15645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:20:06.745 [DEBUG] [Thread-15645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:20:06.745 [DEBUG] [Thread-15645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:20:06.745 [DEBUG] [Thread-15645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:20:06.766 [INFO] [Thread-15645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:20:06.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:20:06.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:20:07.668 [DEBUG] [Thread-15645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:20:07.668 [DEBUG] [Thread-15645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:20:07.717 [DEBUG] [Thread-15645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:20:07.717 [DEBUG] [Thread-15645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:20:07.727 [DEBUG] [Thread-15645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:20:07.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:20:07.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-11-12T12:20:07.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-11-12T12:20:07.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:20:07.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:20:07.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:20:07.764 [DEBUG] [Thread-15645] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:20:09.558 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:20:09.559 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:20:17.816 [DEBUG] [Thread-15647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:20:31.573 [DEBUG] [Thread-15648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:20:32.869 [DEBUG] [Thread-15649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:20:37.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:20:37.786 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:20: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-11-12T12:20:38.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 20, 19), 33.48, 10.28, 0.0, 31.71, 26.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:20:38.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:20:19
2025-11-12T12:20:38.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:20:38.766 [DEBUG] [Thread-15650] [transport.py] [_log()] starting thread (client mode): 0x14983880
2025-11-12T12:20:38.766 [DEBUG] [Thread-15650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:20:38.787 [DEBUG] [Thread-15650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:20:38.787 [INFO] [Thread-15650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] client lang: <none>
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] server lang: <none>
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] kex follows: False
2025-11-12T12:20:38.790 [DEBUG] [Thread-15650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:20:38.791 [DEBUG] [Thread-15650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:20:38.791 [DEBUG] [Thread-15650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:20:38.791 [DEBUG] [Thread-15650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:20:38.791 [DEBUG] [Thread-15650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:20:38.791 [DEBUG] [Thread-15650] [transport.py] [_log()] Compression: none
2025-11-12T12:20:38.791 [DEBUG] [Thread-15650] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:20:38.805 [DEBUG] [Thread-15650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:20:38.806 [DEBUG] [Thread-15650] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:20:38.806 [DEBUG] [Thread-15650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:20:38.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:20:38.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:20:38.807 [DEBUG] [Thread-15650] [transport.py] [_log()] userauth is OK
2025-11-12T12:20:38.807 [DEBUG] [Thread-15650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:20:38.807 [DEBUG] [Thread-15650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:20:38.807 [DEBUG] [Thread-15650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:20:38.807 [DEBUG] [Thread-15650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:20:38.820 [INFO] [Thread-15650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:20:38.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:20:39.366 [DEBUG] [Thread-15650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:20:39.366 [DEBUG] [Thread-15650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:20:39.366 [DEBUG] [Thread-15650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:20:39.407 [DEBUG] [Thread-15650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:20:39.407 [DEBUG] [Thread-15650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:20:39.410 [DEBUG] [Thread-15650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:20:39.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:20:39.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:20:39.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:20:39.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:20:39.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:20:39.428 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:20:39.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.430992 -999.00  +25.40  28.57     16   -1.70 1 1 1 1 1   888    0 26.33 -20.12 ----- 26.1 28.6 294.8 31.9 30.4 -28.2 29.9 -26.2 28.9 -29.5 30.0 -25.5
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.430992
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:20:39.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:20:19', tmtdew=33.48, humidity=10.28, cloud=0.0, wind=31.71, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:20:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:20:39.429 [DEBUG] [Thread-15650] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:20:39.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:20:39.514 [DEBUG] [Thread-15653] [transport.py] [_log()] starting thread (client mode): 0x149827d0
2025-11-12T12:20:39.514 [DEBUG] [Thread-15653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:20:39.529 [DEBUG] [Thread-15653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:20:39.529 [INFO] [Thread-15653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] client lang: <none>
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] server lang: <none>
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] kex follows: False
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] Compression: none
2025-11-12T12:20:39.537 [DEBUG] [Thread-15653] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:20:39.595 [DEBUG] [Thread-15653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:20:39.596 [DEBUG] [Thread-15653] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:20:39.596 [DEBUG] [Thread-15653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:20:39.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:20:39.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:20:39.651 [DEBUG] [Thread-15653] [transport.py] [_log()] userauth is OK
2025-11-12T12:20:39.652 [DEBUG] [Thread-15653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:20:39.652 [DEBUG] [Thread-15653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:20:39.652 [DEBUG] [Thread-15653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:20:39.652 [DEBUG] [Thread-15653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:20:39.669 [INFO] [Thread-15653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:20:39.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:20:39.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:20:40.530 [DEBUG] [Thread-15653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:20:40.530 [DEBUG] [Thread-15653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:20:40.578 [DEBUG] [Thread-15653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:20:40.578 [DEBUG] [Thread-15653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:20:40.586 [DEBUG] [Thread-15653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:20:40.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:20:40.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-11-12T12:20:40.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-11-12T12:20:40.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:20:40.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:20:40.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:20:40.619 [DEBUG] [Thread-15653] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:20:47.903 [DEBUG] [Thread-15655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:21:02.955 [DEBUG] [Thread-15656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:21:09.701 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:21:09.702 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:21:10.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:21:10.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:21:10.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-11-12T12:21:11.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 20, 51), 32.85, 11.01, 0.0, 22.88, 26.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:21:11.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:20:51
2025-11-12T12:21:11.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:21:11.586 [DEBUG] [Thread-15657] [transport.py] [_log()] starting thread (client mode): 0x14981ab0
2025-11-12T12:21:11.586 [DEBUG] [Thread-15657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:21:11.606 [DEBUG] [Thread-15657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:21:11.606 [INFO] [Thread-15657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:21:11.609 [DEBUG] [Thread-15657] [transport.py] [_log()] client lang: <none>
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] server lang: <none>
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] kex follows: False
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] Compression: none
2025-11-12T12:21:11.610 [DEBUG] [Thread-15657] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:21:11.635 [DEBUG] [Thread-15657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:21:11.635 [DEBUG] [Thread-15657] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:21:11.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:21:11.636 [DEBUG] [Thread-15657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:21:11.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:21:11.638 [DEBUG] [Thread-15657] [transport.py] [_log()] userauth is OK
2025-11-12T12:21:11.638 [DEBUG] [Thread-15657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:21:11.639 [DEBUG] [Thread-15657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:21:11.639 [DEBUG] [Thread-15657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:21:11.639 [DEBUG] [Thread-15657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:21:11.664 [INFO] [Thread-15657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:21:11.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:21:12.311 [DEBUG] [Thread-15657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:21:12.312 [DEBUG] [Thread-15657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:21:12.312 [DEBUG] [Thread-15657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:21:12.353 [DEBUG] [Thread-15657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:21:12.353 [DEBUG] [Thread-15657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:21:12.356 [DEBUG] [Thread-15657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:21:12.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:21:12.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:21:12.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:21:12.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:21:12.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:21:12.371 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:21:12.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:21:12.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:21:12.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:21:12.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.430992 -999.00  +25.40  28.57     16   -1.70 1 1 1 1 1   888    0 26.33 -20.12 ----- 26.1 28.6 294.8 31.9 30.4 -28.2 29.9 -26.2 28.9 -29.5 30.0 -25.5
2025-11-12T12:21:12.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:21:12.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:21:12.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.430992
2025-11-12T12:21:12.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:21:12.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:21:12.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:21:12.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:21:12.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:21:12.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:20:51', tmtdew=32.85, humidity=11.01, cloud=0.0, wind=22.88, temperature=26.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:20:37.709', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:21:12.374 [DEBUG] [Thread-15657] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:21:12.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:21:12.472 [DEBUG] [Thread-15660] [transport.py] [_log()] starting thread (client mode): 0x17360160
2025-11-12T12:21:12.472 [DEBUG] [Thread-15660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:21:12.490 [DEBUG] [Thread-15660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:21:12.490 [INFO] [Thread-15660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] client lang: <none>
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] server lang: <none>
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] kex follows: False
2025-11-12T12:21:12.498 [DEBUG] [Thread-15660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:21:12.499 [DEBUG] [Thread-15660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:21:12.499 [DEBUG] [Thread-15660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:21:12.499 [DEBUG] [Thread-15660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:21:12.499 [DEBUG] [Thread-15660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:21:12.499 [DEBUG] [Thread-15660] [transport.py] [_log()] Compression: none
2025-11-12T12:21:12.499 [DEBUG] [Thread-15660] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:21:12.556 [DEBUG] [Thread-15660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:21:12.557 [DEBUG] [Thread-15660] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:21:12.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:21:12.558 [DEBUG] [Thread-15660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:21:12.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:21:12.612 [DEBUG] [Thread-15660] [transport.py] [_log()] userauth is OK
2025-11-12T12:21:12.613 [DEBUG] [Thread-15660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:21:12.613 [DEBUG] [Thread-15660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:21:12.613 [DEBUG] [Thread-15660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:21:12.613 [DEBUG] [Thread-15660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:21:12.638 [INFO] [Thread-15660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:21:12.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:21:12.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:21:13.481 [DEBUG] [Thread-15660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:21:13.481 [DEBUG] [Thread-15660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:21:13.529 [DEBUG] [Thread-15660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:21:13.530 [DEBUG] [Thread-15660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:21:13.539 [DEBUG] [Thread-15660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:21:13.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:21:13.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-11-12T12:21:13.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-11-12T12:21:13.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:21:13.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:21:13.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:21:13.575 [DEBUG] [Thread-15660] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:21:17.992 [DEBUG] [Thread-15662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:21:31.611 [DEBUG] [Thread-15663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:21:33.032 [DEBUG] [Thread-15664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:21:43.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:21:43.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:21:43.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-11-12T12:21:44.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 21, 23), 32.35, 11.41, 0.0, 18.0, 26.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:21:44.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:21:23
2025-11-12T12:21:44.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:21:44.516 [DEBUG] [Thread-15665] [transport.py] [_log()] starting thread (client mode): 0x149837c0
2025-11-12T12:21:44.516 [DEBUG] [Thread-15665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:21:44.535 [DEBUG] [Thread-15665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:21:44.536 [INFO] [Thread-15665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] client lang: <none>
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] server lang: <none>
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] kex follows: False
2025-11-12T12:21:44.539 [DEBUG] [Thread-15665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:21:44.540 [DEBUG] [Thread-15665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:21:44.540 [DEBUG] [Thread-15665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:21:44.540 [DEBUG] [Thread-15665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:21:44.540 [DEBUG] [Thread-15665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:21:44.540 [DEBUG] [Thread-15665] [transport.py] [_log()] Compression: none
2025-11-12T12:21:44.540 [DEBUG] [Thread-15665] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:21:44.563 [DEBUG] [Thread-15665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:21:44.563 [DEBUG] [Thread-15665] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:21:44.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:21:44.564 [DEBUG] [Thread-15665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:21:44.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:21:44.566 [DEBUG] [Thread-15665] [transport.py] [_log()] userauth is OK
2025-11-12T12:21:44.566 [DEBUG] [Thread-15665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:21:44.566 [DEBUG] [Thread-15665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:21:44.567 [DEBUG] [Thread-15665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:21:44.567 [DEBUG] [Thread-15665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:21:44.602 [INFO] [Thread-15665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:21:44.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:21:45.239 [DEBUG] [Thread-15665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:21:45.239 [DEBUG] [Thread-15665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:21:45.239 [DEBUG] [Thread-15665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:21:45.280 [DEBUG] [Thread-15665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:21:45.280 [DEBUG] [Thread-15665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:21:45.283 [DEBUG] [Thread-15665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:21:45.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:21:45.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:21:45.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:21:45.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:21:45.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:21:45.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:21:45.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:21:45.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:21:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:21:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.431339 -999.00  +25.10  19.45     17   -1.60 1 1 1 1 1   888    0 26.25 -20.96 ----- 17.2 19.4 294.2 26.1 30.5 -26.9 29.9 -25.4 29.1 -25.3 30.1 -24.0
2025-11-12T12:21:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:21:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:21:45.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.431339
2025-11-12T12:21:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:21:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:21:45.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:21:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:21:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:21:45.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:21:23', tmtdew=32.35, humidity=11.41, cloud=0.0, wind=18.0, temperature=26.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:21:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:21:45.305 [DEBUG] [Thread-15665] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:21:45.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:21:45.409 [DEBUG] [Thread-15668] [transport.py] [_log()] starting thread (client mode): 0x149805e0
2025-11-12T12:21:45.409 [DEBUG] [Thread-15668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:21:45.426 [DEBUG] [Thread-15668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:21:45.426 [INFO] [Thread-15668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:21:45.433 [DEBUG] [Thread-15668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:21:45.433 [DEBUG] [Thread-15668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:21:45.433 [DEBUG] [Thread-15668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] client lang: <none>
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] server lang: <none>
2025-11-12T12:21:45.434 [DEBUG] [Thread-15668] [transport.py] [_log()] kex follows: False
2025-11-12T12:21:45.435 [DEBUG] [Thread-15668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:21:45.435 [DEBUG] [Thread-15668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:21:45.435 [DEBUG] [Thread-15668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:21:45.435 [DEBUG] [Thread-15668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:21:45.435 [DEBUG] [Thread-15668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:21:45.435 [DEBUG] [Thread-15668] [transport.py] [_log()] Compression: none
2025-11-12T12:21:45.435 [DEBUG] [Thread-15668] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:21:45.493 [DEBUG] [Thread-15668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:21:45.494 [DEBUG] [Thread-15668] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:21:45.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:21:45.495 [DEBUG] [Thread-15668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:21:45.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:21:45.552 [DEBUG] [Thread-15668] [transport.py] [_log()] userauth is OK
2025-11-12T12:21:45.552 [DEBUG] [Thread-15668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:21:45.552 [DEBUG] [Thread-15668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:21:45.553 [DEBUG] [Thread-15668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:21:45.553 [DEBUG] [Thread-15668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:21:45.575 [INFO] [Thread-15668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:21:45.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:21:45.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:21:46.455 [DEBUG] [Thread-15668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:21:46.455 [DEBUG] [Thread-15668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:21:46.503 [DEBUG] [Thread-15668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:21:46.503 [DEBUG] [Thread-15668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:21:46.512 [DEBUG] [Thread-15668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:21:46.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:21:46.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-11-12T12:21:46.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:21:46.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:21:46.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:21:46.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:21:46.547 [DEBUG] [Thread-15668] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:21:48.071 [DEBUG] [Thread-15670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:22:03.124 [DEBUG] [Thread-15671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:22:09.842 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:22:09.843 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:22:16.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:22:16.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:22:16.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-11-12T12:22:17.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 21, 55), 31.72, 11.68, 0.0, 22.07, 25.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:22:17.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:21:55
2025-11-12T12:22:17.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:22:17.475 [DEBUG] [Thread-15672] [transport.py] [_log()] starting thread (client mode): 0x149541c0
2025-11-12T12:22:17.475 [DEBUG] [Thread-15672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:22:17.494 [DEBUG] [Thread-15672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:22:17.495 [INFO] [Thread-15672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] client lang: <none>
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] server lang: <none>
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] kex follows: False
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] Compression: none
2025-11-12T12:22:17.498 [DEBUG] [Thread-15672] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:22:17.507 [DEBUG] [Thread-15672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:22:17.507 [DEBUG] [Thread-15672] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:22:17.507 [DEBUG] [Thread-15672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:22:17.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:22:17.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:22:17.509 [DEBUG] [Thread-15672] [transport.py] [_log()] userauth is OK
2025-11-12T12:22:17.509 [DEBUG] [Thread-15672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:22:17.509 [DEBUG] [Thread-15672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:22:17.509 [DEBUG] [Thread-15672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:22:17.509 [DEBUG] [Thread-15672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:22:17.533 [INFO] [Thread-15672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:22:17.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:22:18.159 [DEBUG] [Thread-15674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:22:18.163 [DEBUG] [Thread-15672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:22:18.163 [DEBUG] [Thread-15672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:22:18.163 [DEBUG] [Thread-15672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:22:18.205 [DEBUG] [Thread-15672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:22:18.205 [DEBUG] [Thread-15672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:22:18.208 [DEBUG] [Thread-15672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:22:18.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:22:18.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:22:18.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:22:18.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:22:18.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:22:18.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:22:18.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:22:18.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.431686 -999.00  +25.50  14.54     17   -0.90 1 1 1 1 1   888    0 25.91 -24.80 ----- 15.9 14.5 267.2 27.8 30.6 -25.4 30.0 -25.0 29.4 -24.5 30.2 -24.1
2025-11-12T12:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:22:18.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.431686
2025-11-12T12:22:18.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:22:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:22:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:22:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:22:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:22:18.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:21:55', tmtdew=31.72, humidity=11.68, cloud=0.0, wind=22.07, temperature=25.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:21:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:22:18.236 [DEBUG] [Thread-15672] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:22:18.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:22:18.333 [DEBUG] [Thread-15676] [transport.py] [_log()] starting thread (client mode): 0x14921210
2025-11-12T12:22:18.333 [DEBUG] [Thread-15676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:22:18.348 [DEBUG] [Thread-15676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:22:18.348 [INFO] [Thread-15676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] client lang: <none>
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] server lang: <none>
2025-11-12T12:22:18.356 [DEBUG] [Thread-15676] [transport.py] [_log()] kex follows: False
2025-11-12T12:22:18.357 [DEBUG] [Thread-15676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:22:18.357 [DEBUG] [Thread-15676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:22:18.357 [DEBUG] [Thread-15676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:22:18.357 [DEBUG] [Thread-15676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:22:18.357 [DEBUG] [Thread-15676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:22:18.357 [DEBUG] [Thread-15676] [transport.py] [_log()] Compression: none
2025-11-12T12:22:18.357 [DEBUG] [Thread-15676] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:22:18.416 [DEBUG] [Thread-15676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:22:18.416 [DEBUG] [Thread-15676] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:22:18.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:22:18.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:22:18.418 [DEBUG] [Thread-15676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:22:18.472 [DEBUG] [Thread-15676] [transport.py] [_log()] userauth is OK
2025-11-12T12:22:18.473 [DEBUG] [Thread-15676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:22:18.473 [DEBUG] [Thread-15676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:22:18.473 [DEBUG] [Thread-15676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:22:18.473 [DEBUG] [Thread-15676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:22:18.491 [INFO] [Thread-15676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:22:18.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:22:18.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:22:19.324 [DEBUG] [Thread-15676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:22:19.324 [DEBUG] [Thread-15676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:22:19.371 [DEBUG] [Thread-15676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:22:19.372 [DEBUG] [Thread-15676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:22:19.381 [DEBUG] [Thread-15676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:22:19.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:22:19.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-11-12T12:22:19.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-11-12T12:22:19.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:22:19.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:22:19.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:22:19.422 [DEBUG] [Thread-15676] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:22:31.646 [DEBUG] [Thread-15678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:22:33.194 [DEBUG] [Thread-15679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:22:48.233 [DEBUG] [Thread-15680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:22:49.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:22:49.440 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:22:49.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:22:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 22, 27), 31.41, 11.91, 0.0, 25.6, 25.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:22:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:22:27
2025-11-12T12:22:50.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:22:50.364 [DEBUG] [Thread-15681] [transport.py] [_log()] starting thread (client mode): 0x17361540
2025-11-12T12:22:50.364 [DEBUG] [Thread-15681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:22:50.387 [DEBUG] [Thread-15681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:22:50.387 [INFO] [Thread-15681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:22:50.390 [DEBUG] [Thread-15681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] client lang: <none>
2025-11-12T12:22:50.391 [DEBUG] [Thread-15681] [transport.py] [_log()] server lang: <none>
2025-11-12T12:22:50.392 [DEBUG] [Thread-15681] [transport.py] [_log()] kex follows: False
2025-11-12T12:22:50.392 [DEBUG] [Thread-15681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:22:50.392 [DEBUG] [Thread-15681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:22:50.392 [DEBUG] [Thread-15681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:22:50.392 [DEBUG] [Thread-15681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:22:50.392 [DEBUG] [Thread-15681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:22:50.392 [DEBUG] [Thread-15681] [transport.py] [_log()] Compression: none
2025-11-12T12:22:50.392 [DEBUG] [Thread-15681] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:22:50.411 [DEBUG] [Thread-15681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:22:50.412 [DEBUG] [Thread-15681] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:22:50.413 [DEBUG] [Thread-15681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:22:50.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:22:50.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:22:50.415 [DEBUG] [Thread-15681] [transport.py] [_log()] userauth is OK
2025-11-12T12:22:50.415 [DEBUG] [Thread-15681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:22:50.415 [DEBUG] [Thread-15681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:22:50.415 [DEBUG] [Thread-15681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:22:50.415 [DEBUG] [Thread-15681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:22:50.441 [INFO] [Thread-15681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:22:50.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:22:51.078 [DEBUG] [Thread-15681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:22:51.078 [DEBUG] [Thread-15681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:22:51.079 [DEBUG] [Thread-15681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:22:51.119 [DEBUG] [Thread-15681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:22:51.120 [DEBUG] [Thread-15681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:22:51.123 [DEBUG] [Thread-15681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:22:51.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:22:51.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:22:51.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:22:51.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:22:51.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:22:51.149 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:22:51.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:22:51.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:22:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:22:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.432033 -999.00  +25.90  16.39     16   -1.10 1 1 1 1 1   888    0 26.10 -30.51 ----- 17.4 16.4 250.9 26.0 30.7 -25.3 30.1 -26.1 29.4 -24.0 30.2 -25.2
2025-11-12T12:22:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:22:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:22:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.432033
2025-11-12T12:22:51.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:22:51.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:22:51.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:22:51.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:22:51.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:22:51.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:22:27', tmtdew=31.41, humidity=11.91, cloud=0.0, wind=25.6, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:22:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:22:51.152 [DEBUG] [Thread-15681] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:22:51.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:22:51.247 [DEBUG] [Thread-15684] [transport.py] [_log()] starting thread (client mode): 0x19dd96c0
2025-11-12T12:22:51.248 [DEBUG] [Thread-15684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:22:51.262 [DEBUG] [Thread-15684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:22:51.263 [INFO] [Thread-15684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:22:51.270 [DEBUG] [Thread-15684] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] client lang: <none>
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] server lang: <none>
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] kex follows: False
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] Compression: none
2025-11-12T12:22:51.271 [DEBUG] [Thread-15684] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:22:51.328 [DEBUG] [Thread-15684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:22:51.329 [DEBUG] [Thread-15684] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:22:51.330 [DEBUG] [Thread-15684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:22:51.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:22:51.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:22:51.384 [DEBUG] [Thread-15684] [transport.py] [_log()] userauth is OK
2025-11-12T12:22:51.384 [DEBUG] [Thread-15684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:22:51.384 [DEBUG] [Thread-15684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:22:51.384 [DEBUG] [Thread-15684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:22:51.384 [DEBUG] [Thread-15684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:22:51.402 [INFO] [Thread-15684] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:22:51.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:22:51.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:22:52.274 [DEBUG] [Thread-15684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:22:52.274 [DEBUG] [Thread-15684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:22:52.322 [DEBUG] [Thread-15684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:22:52.322 [DEBUG] [Thread-15684] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:22:52.332 [DEBUG] [Thread-15684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:22:52.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:22:52.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-11-12T12:22:52.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-11-12T12:22:52.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:22:52.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:22:52.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:22:52.369 [DEBUG] [Thread-15684] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:23:03.273 [DEBUG] [Thread-15686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:23:09.994 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:23:09.995 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:23:18.324 [DEBUG] [Thread-15687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:23:22.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:23:22.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:23:22.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-11-12T12:23:23.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 22, 59), 32.74, 10.78, 0.0, 25.11, 25.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:23:23.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:22:59
2025-11-12T12:23:23.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:23:23.282 [DEBUG] [Thread-15688] [transport.py] [_log()] starting thread (client mode): 0x17362f20
2025-11-12T12:23:23.282 [DEBUG] [Thread-15688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:23:23.302 [DEBUG] [Thread-15688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:23:23.302 [INFO] [Thread-15688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:23:23.305 [DEBUG] [Thread-15688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:23:23.305 [DEBUG] [Thread-15688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] client lang: <none>
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] server lang: <none>
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] kex follows: False
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] Compression: none
2025-11-12T12:23:23.306 [DEBUG] [Thread-15688] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:23:23.326 [DEBUG] [Thread-15688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:23:23.327 [DEBUG] [Thread-15688] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:23:23.327 [DEBUG] [Thread-15688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:23:23.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:23:23.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:23:23.329 [DEBUG] [Thread-15688] [transport.py] [_log()] userauth is OK
2025-11-12T12:23:23.330 [DEBUG] [Thread-15688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:23:23.330 [DEBUG] [Thread-15688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:23:23.330 [DEBUG] [Thread-15688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:23:23.330 [DEBUG] [Thread-15688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:23:23.353 [INFO] [Thread-15688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:23:23.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:23:23.993 [DEBUG] [Thread-15688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:23:23.993 [DEBUG] [Thread-15688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:23:23.994 [DEBUG] [Thread-15688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:23:24.035 [DEBUG] [Thread-15688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:23:24.035 [DEBUG] [Thread-15688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:23:24.038 [DEBUG] [Thread-15688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:23:24.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:23:24.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:23:24.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:23:24.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:23:24.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:23:24.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:23:24.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:23:24.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:23:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:23:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.432380 -999.00  +26.20  17.04     15   -1.60 1 1 1 1 1   888    0 25.57 -30.63 ----- 15.9 17.0 257.0 27.8 30.7 -25.6 30.2 -24.8 29.6 -23.9 30.4 -23.9
2025-11-12T12:23:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:23:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:23:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.432380
2025-11-12T12:23:24.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:23:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:23:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:23:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:23:24.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:23:24.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:22:59', tmtdew=32.74, humidity=10.78, cloud=0.0, wind=25.11, temperature=25.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:22:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:23:24.067 [DEBUG] [Thread-15688] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:23:24.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:23:24.163 [DEBUG] [Thread-15691] [transport.py] [_log()] starting thread (client mode): 0x17362ef0
2025-11-12T12:23:24.163 [DEBUG] [Thread-15691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:23:24.177 [DEBUG] [Thread-15691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:23:24.177 [INFO] [Thread-15691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:23:24.184 [DEBUG] [Thread-15691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:23:24.185 [DEBUG] [Thread-15691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:23:24.185 [DEBUG] [Thread-15691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:23:24.185 [DEBUG] [Thread-15691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:23:24.185 [DEBUG] [Thread-15691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:23:24.185 [DEBUG] [Thread-15691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:23:24.185 [DEBUG] [Thread-15691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:23:24.185 [DEBUG] [Thread-15691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:23:24.185 [DEBUG] [Thread-15691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:23:24.186 [DEBUG] [Thread-15691] [transport.py] [_log()] client lang: <none>
2025-11-12T12:23:24.186 [DEBUG] [Thread-15691] [transport.py] [_log()] server lang: <none>
2025-11-12T12:23:24.186 [DEBUG] [Thread-15691] [transport.py] [_log()] kex follows: False
2025-11-12T12:23:24.186 [DEBUG] [Thread-15691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:23:24.186 [DEBUG] [Thread-15691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:23:24.186 [DEBUG] [Thread-15691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:23:24.186 [DEBUG] [Thread-15691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:23:24.187 [DEBUG] [Thread-15691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:23:24.187 [DEBUG] [Thread-15691] [transport.py] [_log()] Compression: none
2025-11-12T12:23:24.187 [DEBUG] [Thread-15691] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:23:24.245 [DEBUG] [Thread-15691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:23:24.246 [DEBUG] [Thread-15691] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:23:24.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:23:24.247 [DEBUG] [Thread-15691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:23:24.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:23:24.304 [DEBUG] [Thread-15691] [transport.py] [_log()] userauth is OK
2025-11-12T12:23:24.305 [DEBUG] [Thread-15691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:23:24.305 [DEBUG] [Thread-15691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:23:24.305 [DEBUG] [Thread-15691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:23:24.305 [DEBUG] [Thread-15691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:23:24.323 [INFO] [Thread-15691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:23:24.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:23:24.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:23:25.224 [DEBUG] [Thread-15691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:23:25.224 [DEBUG] [Thread-15691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:23:25.273 [DEBUG] [Thread-15691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:23:25.273 [DEBUG] [Thread-15691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:23:25.282 [DEBUG] [Thread-15691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:23:25.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:23:25.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:23:25.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-11-12T12:23:25.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:23:25.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:23:25.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:23:25.319 [DEBUG] [Thread-15691] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:23:31.705 [DEBUG] [Thread-15693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:23:33.364 [DEBUG] [Thread-15694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:23:48.406 [DEBUG] [Thread-15695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:23:55.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:23:55.340 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:23:55.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-11-12T12:23:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 23, 31), 32.95, 10.64, 0.0, 29.68, 26.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:23:55.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:23:31
2025-11-12T12:23:56.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:23:56.272 [DEBUG] [Thread-15696] [transport.py] [_log()] starting thread (client mode): 0x173f8820
2025-11-12T12:23:56.272 [DEBUG] [Thread-15696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:23:56.292 [DEBUG] [Thread-15696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:23:56.292 [INFO] [Thread-15696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] client lang: <none>
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] server lang: <none>
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] kex follows: False
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] Compression: none
2025-11-12T12:23:56.295 [DEBUG] [Thread-15696] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:23:56.311 [DEBUG] [Thread-15696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:23:56.311 [DEBUG] [Thread-15696] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:23:56.311 [DEBUG] [Thread-15696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:23:56.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:23:56.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:23:56.313 [DEBUG] [Thread-15696] [transport.py] [_log()] userauth is OK
2025-11-12T12:23:56.313 [DEBUG] [Thread-15696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:23:56.313 [DEBUG] [Thread-15696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:23:56.313 [DEBUG] [Thread-15696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:23:56.313 [DEBUG] [Thread-15696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:23:56.329 [INFO] [Thread-15696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:23:56.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:23:56.965 [DEBUG] [Thread-15696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:23:56.965 [DEBUG] [Thread-15696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:23:56.966 [DEBUG] [Thread-15696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:23:57.007 [DEBUG] [Thread-15696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:23:57.007 [DEBUG] [Thread-15696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:23:57.010 [DEBUG] [Thread-15696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:23:57.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:23:57.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:23:57.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:23:57.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:23:57.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:23:57.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:23:57.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:23:57.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:23:57.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:23:57.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.432728 -999.00  +26.20  19.47     16   -1.10 1 1 1 1 1   888    0 25.84 -33.65 ----- 21.7 19.5 263.0 28.5 30.9 -25.9 30.3 -24.7 29.8 -24.0 30.4 -25.4
2025-11-12T12:23:57.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:23:57.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:23:57.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.432728
2025-11-12T12:23:57.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:23:57.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:23:57.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:23:57.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:23:57.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:23:57.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:23:31', tmtdew=32.95, humidity=10.64, cloud=0.0, wind=29.68, temperature=26.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:23:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:23:57.039 [DEBUG] [Thread-15696] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:23:57.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:23:57.132 [DEBUG] [Thread-15699] [transport.py] [_log()] starting thread (client mode): 0x173f8550
2025-11-12T12:23:57.132 [DEBUG] [Thread-15699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:23:57.147 [DEBUG] [Thread-15699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:23:57.147 [INFO] [Thread-15699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:23:57.154 [DEBUG] [Thread-15699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:23:57.155 [DEBUG] [Thread-15699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:23:57.155 [DEBUG] [Thread-15699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:23:57.155 [DEBUG] [Thread-15699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:23:57.155 [DEBUG] [Thread-15699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:23:57.155 [DEBUG] [Thread-15699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:23:57.155 [DEBUG] [Thread-15699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:23:57.155 [DEBUG] [Thread-15699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:23:57.156 [DEBUG] [Thread-15699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:23:57.156 [DEBUG] [Thread-15699] [transport.py] [_log()] client lang: <none>
2025-11-12T12:23:57.156 [DEBUG] [Thread-15699] [transport.py] [_log()] server lang: <none>
2025-11-12T12:23:57.156 [DEBUG] [Thread-15699] [transport.py] [_log()] kex follows: False
2025-11-12T12:23:57.156 [DEBUG] [Thread-15699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:23:57.156 [DEBUG] [Thread-15699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:23:57.156 [DEBUG] [Thread-15699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:23:57.156 [DEBUG] [Thread-15699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:23:57.157 [DEBUG] [Thread-15699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:23:57.157 [DEBUG] [Thread-15699] [transport.py] [_log()] Compression: none
2025-11-12T12:23:57.157 [DEBUG] [Thread-15699] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:23:57.212 [DEBUG] [Thread-15699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:23:57.213 [DEBUG] [Thread-15699] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:23:57.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:23:57.214 [DEBUG] [Thread-15699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:23:57.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:23:57.268 [DEBUG] [Thread-15699] [transport.py] [_log()] userauth is OK
2025-11-12T12:23:57.268 [DEBUG] [Thread-15699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:23:57.269 [DEBUG] [Thread-15699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:23:57.269 [DEBUG] [Thread-15699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:23:57.269 [DEBUG] [Thread-15699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:23:57.288 [INFO] [Thread-15699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:23:57.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:23:57.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:23:58.144 [DEBUG] [Thread-15699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:23:58.144 [DEBUG] [Thread-15699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:23:58.192 [DEBUG] [Thread-15699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:23:58.192 [DEBUG] [Thread-15699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:23:58.202 [DEBUG] [Thread-15699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:23:58.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:23:58.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-11-12T12:23:58.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-11-12T12:23:58.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:23:58.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:23:58.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:23:58.238 [DEBUG] [Thread-15699] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:24:03.437 [DEBUG] [Thread-15701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:24:10.136 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:24:10.137 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:24:18.475 [DEBUG] [Thread-15702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:24:28.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:24:28.256 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:24:28.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-11-12T12:24:28.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 24, 3), 33.05, 10.61, 0.0, 27.9, 26.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:24:28.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:24:03
2025-11-12T12:24:29.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:24:29.225 [DEBUG] [Thread-15703] [transport.py] [_log()] starting thread (client mode): 0x14980880
2025-11-12T12:24:29.225 [DEBUG] [Thread-15703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:24:29.244 [DEBUG] [Thread-15703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:24:29.244 [INFO] [Thread-15703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] client lang: <none>
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] server lang: <none>
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] kex follows: False
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] Compression: none
2025-11-12T12:24:29.248 [DEBUG] [Thread-15703] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:24:29.265 [DEBUG] [Thread-15703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:24:29.265 [DEBUG] [Thread-15703] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:24:29.266 [DEBUG] [Thread-15703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:24:29.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:24:29.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:24:29.266 [DEBUG] [Thread-15703] [transport.py] [_log()] userauth is OK
2025-11-12T12:24:29.266 [DEBUG] [Thread-15703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:24:29.266 [DEBUG] [Thread-15703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:24:29.266 [DEBUG] [Thread-15703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:24:29.266 [DEBUG] [Thread-15703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:24:29.276 [INFO] [Thread-15703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:24:29.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:24:29.912 [DEBUG] [Thread-15703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:24:29.912 [DEBUG] [Thread-15703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:24:29.912 [DEBUG] [Thread-15703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:24:29.953 [DEBUG] [Thread-15703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:24:29.953 [DEBUG] [Thread-15703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:24:29.955 [DEBUG] [Thread-15703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:24:29.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:24:29.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:24:29.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:24:29.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:24:29.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:24:29.974 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:24:29.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:24:29.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.433075 -999.00  +26.10  17.86     16   -0.80 1 1 1 1 1   888    0 25.73 -41.42 ----- 17.6 17.9 276.4 34.3 30.9 -26.2 30.3 -24.1 29.5 -27.9 30.6 -23.7
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.433075
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:24:29.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:24:03', tmtdew=33.05, humidity=10.61, cloud=0.0, wind=27.9, temperature=26.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:23:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:24:29.976 [DEBUG] [Thread-15703] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:24:30.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:24:30.062 [DEBUG] [Thread-15706] [transport.py] [_log()] starting thread (client mode): 0x14982bc0
2025-11-12T12:24:30.062 [DEBUG] [Thread-15706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:24:30.078 [DEBUG] [Thread-15706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:24:30.078 [INFO] [Thread-15706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:24:30.087 [DEBUG] [Thread-15706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:24:30.087 [DEBUG] [Thread-15706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:24:30.087 [DEBUG] [Thread-15706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:24:30.087 [DEBUG] [Thread-15706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:24:30.087 [DEBUG] [Thread-15706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:24:30.087 [DEBUG] [Thread-15706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:24:30.087 [DEBUG] [Thread-15706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] client lang: <none>
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] server lang: <none>
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] kex follows: False
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] Compression: none
2025-11-12T12:24:30.088 [DEBUG] [Thread-15706] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:24:30.148 [DEBUG] [Thread-15706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:24:30.149 [DEBUG] [Thread-15706] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:24:30.149 [DEBUG] [Thread-15706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:24:30.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:24:30.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:24:30.203 [DEBUG] [Thread-15706] [transport.py] [_log()] userauth is OK
2025-11-12T12:24:30.204 [DEBUG] [Thread-15706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:24:30.204 [DEBUG] [Thread-15706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:24:30.204 [DEBUG] [Thread-15706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:24:30.204 [DEBUG] [Thread-15706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:24:30.221 [INFO] [Thread-15706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:24:30.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:24:30.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:24:31.120 [DEBUG] [Thread-15706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:24:31.120 [DEBUG] [Thread-15706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:24:31.168 [DEBUG] [Thread-15706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:24:31.168 [DEBUG] [Thread-15706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:24:31.176 [DEBUG] [Thread-15706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:24:31.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:24:31.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-11-12T12:24:31.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-11-12T12:24:31.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:24:31.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:24:31.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:24:31.208 [DEBUG] [Thread-15706] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:24:31.757 [DEBUG] [Thread-15708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:24:33.508 [DEBUG] [Thread-15709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:24:48.549 [DEBUG] [Thread-15710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:25:01.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:25:01.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:25:01.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-11-12T12:25:01.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 24, 35), 32.69, 11.08, 0.0, 24.26, 27.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:25:01.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:24:35
2025-11-12T12:25:02.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:25:02.153 [DEBUG] [Thread-15711] [transport.py] [_log()] starting thread (client mode): 0x14921720
2025-11-12T12:25:02.153 [DEBUG] [Thread-15711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:25:02.174 [DEBUG] [Thread-15711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:25:02.174 [INFO] [Thread-15711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:25:02.177 [DEBUG] [Thread-15711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:25:02.177 [DEBUG] [Thread-15711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] client lang: <none>
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] server lang: <none>
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] kex follows: False
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:25:02.178 [DEBUG] [Thread-15711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:25:02.179 [DEBUG] [Thread-15711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:25:02.179 [DEBUG] [Thread-15711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:25:02.179 [DEBUG] [Thread-15711] [transport.py] [_log()] Compression: none
2025-11-12T12:25:02.179 [DEBUG] [Thread-15711] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:25:02.196 [DEBUG] [Thread-15711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:25:02.197 [DEBUG] [Thread-15711] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:25:02.197 [DEBUG] [Thread-15711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:25:02.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:25:02.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:25:02.200 [DEBUG] [Thread-15711] [transport.py] [_log()] userauth is OK
2025-11-12T12:25:02.200 [DEBUG] [Thread-15711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:25:02.200 [DEBUG] [Thread-15711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:25:02.200 [DEBUG] [Thread-15711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:25:02.200 [DEBUG] [Thread-15711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:25:02.219 [INFO] [Thread-15711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:25:02.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:25:03.004 [DEBUG] [Thread-15711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:25:03.004 [DEBUG] [Thread-15711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:25:03.005 [DEBUG] [Thread-15711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:25:03.046 [DEBUG] [Thread-15711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:25:03.046 [DEBUG] [Thread-15711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:25:03.050 [DEBUG] [Thread-15711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:25:03.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:25:03.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:25:03.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:25:03.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:25:03.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:25:03.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:25:03.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:25:03.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:25:03.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:25:03.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.433422 -999.00  +26.10  25.98     17   -0.50 1 1 1 1 1   888    0 25.52 -47.55 ----- 21.2 26.0 270.8 34.9 31.1 -25.9 30.2 -24.8 29.5 -26.7 30.5 -23.4
2025-11-12T12:25:03.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:25:03.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:25:03.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.433422
2025-11-12T12:25:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:25:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:25:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:25:03.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:25:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:25:03.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:24:35', tmtdew=32.69, humidity=11.08, cloud=0.0, wind=24.26, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:24:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:25:03.072 [DEBUG] [Thread-15711] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:25:03.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:25:03.168 [DEBUG] [Thread-15714] [transport.py] [_log()] starting thread (client mode): 0x14955ab0
2025-11-12T12:25:03.168 [DEBUG] [Thread-15714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:25:03.182 [DEBUG] [Thread-15714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:25:03.182 [INFO] [Thread-15714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] client lang: <none>
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] server lang: <none>
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] kex follows: False
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:25:03.190 [DEBUG] [Thread-15714] [transport.py] [_log()] Compression: none
2025-11-12T12:25:03.191 [DEBUG] [Thread-15714] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:25:03.248 [DEBUG] [Thread-15714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:25:03.249 [DEBUG] [Thread-15714] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:25:03.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:25:03.250 [DEBUG] [Thread-15714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:25:03.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:25:03.305 [DEBUG] [Thread-15714] [transport.py] [_log()] userauth is OK
2025-11-12T12:25:03.305 [DEBUG] [Thread-15714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:25:03.305 [DEBUG] [Thread-15714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:25:03.305 [DEBUG] [Thread-15714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:25:03.305 [DEBUG] [Thread-15714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:25:03.324 [INFO] [Thread-15714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:25:03.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:25:03.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:25:03.587 [DEBUG] [Thread-15716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:25:04.197 [DEBUG] [Thread-15714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:25:04.198 [DEBUG] [Thread-15714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:25:04.246 [DEBUG] [Thread-15714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:25:04.246 [DEBUG] [Thread-15714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:25:04.255 [DEBUG] [Thread-15714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:25:04.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:25:04.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-11-12T12:25:04.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-11-12T12:25:04.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:25:04.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:25:04.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:25:04.291 [DEBUG] [Thread-15714] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:25:10.280 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:25:10.281 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:25:18.646 [DEBUG] [Thread-15717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:25:31.805 [DEBUG] [Thread-15718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:25:33.688 [DEBUG] [Thread-15719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:25:34.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:25:34.301 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:25:34.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-11-12T12:25:34.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 25, 7), 32.86, 10.96, 0.0, 23.17, 27.35, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:25:34.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:25:07
2025-11-12T12:25:35.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:25:35.209 [DEBUG] [Thread-15720] [transport.py] [_log()] starting thread (client mode): 0x173e9cf0
2025-11-12T12:25:35.209 [DEBUG] [Thread-15720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:25:35.231 [DEBUG] [Thread-15720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:25:35.231 [INFO] [Thread-15720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:25:35.234 [DEBUG] [Thread-15720] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:25:35.234 [DEBUG] [Thread-15720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:25:35.234 [DEBUG] [Thread-15720] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:25:35.234 [DEBUG] [Thread-15720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:25:35.234 [DEBUG] [Thread-15720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] client lang: <none>
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] server lang: <none>
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] kex follows: False
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:25:35.235 [DEBUG] [Thread-15720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:25:35.236 [DEBUG] [Thread-15720] [transport.py] [_log()] Compression: none
2025-11-12T12:25:35.236 [DEBUG] [Thread-15720] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:25:35.255 [DEBUG] [Thread-15720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:25:35.255 [DEBUG] [Thread-15720] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:25:35.256 [DEBUG] [Thread-15720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:25:35.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:25:35.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:25:35.258 [DEBUG] [Thread-15720] [transport.py] [_log()] userauth is OK
2025-11-12T12:25:35.259 [DEBUG] [Thread-15720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:25:35.259 [DEBUG] [Thread-15720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:25:35.259 [DEBUG] [Thread-15720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:25:35.259 [DEBUG] [Thread-15720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:25:35.283 [INFO] [Thread-15720] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:25:35.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:25:36.072 [DEBUG] [Thread-15720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:25:36.072 [DEBUG] [Thread-15720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:25:36.072 [DEBUG] [Thread-15720] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:25:36.113 [DEBUG] [Thread-15720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:25:36.113 [DEBUG] [Thread-15720] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:25:36.117 [DEBUG] [Thread-15720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:25:36.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:25:36.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:25:36.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:25:36.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:25:36.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:25:36.142 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:25:36.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:25:36.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:25:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:25:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.434116 -999.00  +26.20  17.29     17   -0.40 1 1 1 1 1   888    0 25.43 -57.90 ----- 19.5 17.3 275.6 26.2 31.1 -25.4 30.4 -24.4 29.7 -25.7 30.8 -23.2
2025-11-12T12:25:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:25:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:25:36.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.434116
2025-11-12T12:25:36.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:25:36.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:25:36.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:25:36.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:25:36.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:25:36.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:25:07', tmtdew=32.86, humidity=10.96, cloud=0.0, wind=23.17, temperature=27.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:25:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:25:36.145 [DEBUG] [Thread-15720] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:25:36.228 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:25:36.240 [DEBUG] [Thread-15723] [transport.py] [_log()] starting thread (client mode): 0x14921720
2025-11-12T12:25:36.240 [DEBUG] [Thread-15723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:25:36.255 [DEBUG] [Thread-15723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:25:36.256 [INFO] [Thread-15723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:25:36.263 [DEBUG] [Thread-15723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:25:36.263 [DEBUG] [Thread-15723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:25:36.263 [DEBUG] [Thread-15723] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:25:36.263 [DEBUG] [Thread-15723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:25:36.263 [DEBUG] [Thread-15723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] client lang: <none>
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] server lang: <none>
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] kex follows: False
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] Compression: none
2025-11-12T12:25:36.264 [DEBUG] [Thread-15723] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:25:36.323 [DEBUG] [Thread-15723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:25:36.324 [DEBUG] [Thread-15723] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:25:36.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:25:36.325 [DEBUG] [Thread-15723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:25:36.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:25:36.380 [DEBUG] [Thread-15723] [transport.py] [_log()] userauth is OK
2025-11-12T12:25:36.381 [DEBUG] [Thread-15723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:25:36.381 [DEBUG] [Thread-15723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:25:36.381 [DEBUG] [Thread-15723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:25:36.381 [DEBUG] [Thread-15723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:25:36.401 [INFO] [Thread-15723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:25:36.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:25:36.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:25:37.227 [DEBUG] [Thread-15723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:25:37.227 [DEBUG] [Thread-15723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:25:37.275 [DEBUG] [Thread-15723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:25:37.275 [DEBUG] [Thread-15723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:25:37.285 [DEBUG] [Thread-15723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:25:37.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:25:37.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-11-12T12:25:37.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-11-12T12:25:37.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:25:37.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:25:37.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:25:37.321 [DEBUG] [Thread-15723] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:25:48.723 [DEBUG] [Thread-15725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:26:03.772 [DEBUG] [Thread-15726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:26:07.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:26:07.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:26:07.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-11-12T12:26:07.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 25, 39), 32.77, 11.46, 0.0, 23.73, 27.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:26:07.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:25:39
2025-11-12T12:26:08.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:26:08.243 [DEBUG] [Thread-15727] [transport.py] [_log()] starting thread (client mode): 0x149814e0
2025-11-12T12:26:08.244 [DEBUG] [Thread-15727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:26:08.264 [DEBUG] [Thread-15727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:26:08.264 [INFO] [Thread-15727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] client lang: <none>
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] server lang: <none>
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] kex follows: False
2025-11-12T12:26:08.266 [DEBUG] [Thread-15727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:26:08.267 [DEBUG] [Thread-15727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:26:08.267 [DEBUG] [Thread-15727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:26:08.267 [DEBUG] [Thread-15727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:26:08.267 [DEBUG] [Thread-15727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:26:08.267 [DEBUG] [Thread-15727] [transport.py] [_log()] Compression: none
2025-11-12T12:26:08.267 [DEBUG] [Thread-15727] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:26:08.281 [DEBUG] [Thread-15727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:26:08.282 [DEBUG] [Thread-15727] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:26:08.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:26:08.283 [DEBUG] [Thread-15727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:26:08.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:26:08.285 [DEBUG] [Thread-15727] [transport.py] [_log()] userauth is OK
2025-11-12T12:26:08.285 [DEBUG] [Thread-15727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:26:08.285 [DEBUG] [Thread-15727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:26:08.285 [DEBUG] [Thread-15727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:26:08.285 [DEBUG] [Thread-15727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:26:08.305 [INFO] [Thread-15727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:26:08.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:26:08.949 [DEBUG] [Thread-15727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:26:08.949 [DEBUG] [Thread-15727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:26:08.950 [DEBUG] [Thread-15727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:26:08.991 [DEBUG] [Thread-15727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:26:08.991 [DEBUG] [Thread-15727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:26:08.994 [DEBUG] [Thread-15727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:26:09.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:26:09.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:26:09.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:26:09.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:26:09.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:26:09.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:26:09.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:26:09.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:26:09.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:26:09.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.434464 -999.00  +26.20  12.02     17   -0.10 1 2 1 1 1   888    0 25.45 -59.28 ----- 17.0 12.0 242.2 28.1 31.2 -25.1 30.6 -23.4 29.8 -22.4 30.8 -23.2
2025-11-12T12:26:09.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:26:09.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:26:09.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.434464
2025-11-12T12:26:09.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:26:09.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:26:09.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:26:09.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:26:09.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T12:26:09.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:25:39', tmtdew=32.77, humidity=11.46, cloud=0.0, wind=23.73, temperature=27.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:25:37.690', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:26:09.021 [DEBUG] [Thread-15727] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:26:09.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:26:09.118 [DEBUG] [Thread-15730] [transport.py] [_log()] starting thread (client mode): 0x149804c0
2025-11-12T12:26:09.118 [DEBUG] [Thread-15730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:26:09.133 [DEBUG] [Thread-15730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:26:09.134 [INFO] [Thread-15730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:26:09.141 [DEBUG] [Thread-15730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] client lang: <none>
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] server lang: <none>
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] kex follows: False
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:26:09.142 [DEBUG] [Thread-15730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:26:09.143 [DEBUG] [Thread-15730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:26:09.143 [DEBUG] [Thread-15730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:26:09.143 [DEBUG] [Thread-15730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:26:09.143 [DEBUG] [Thread-15730] [transport.py] [_log()] Compression: none
2025-11-12T12:26:09.143 [DEBUG] [Thread-15730] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:26:09.200 [DEBUG] [Thread-15730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:26:09.201 [DEBUG] [Thread-15730] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:26:09.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:26:09.202 [DEBUG] [Thread-15730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:26:09.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:26:09.256 [DEBUG] [Thread-15730] [transport.py] [_log()] userauth is OK
2025-11-12T12:26:09.256 [DEBUG] [Thread-15730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:26:09.256 [DEBUG] [Thread-15730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:26:09.256 [DEBUG] [Thread-15730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:26:09.256 [DEBUG] [Thread-15730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:26:09.274 [INFO] [Thread-15730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:26:09.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:26:09.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:26:10.120 [DEBUG] [Thread-15730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:26:10.120 [DEBUG] [Thread-15730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:26:10.168 [DEBUG] [Thread-15730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:26:10.168 [DEBUG] [Thread-15730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:26:10.177 [DEBUG] [Thread-15730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:26:10.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:26:10.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-11-12T12:26:10.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-11-12T12:26:10.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:26:10.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:26:10.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:26:10.214 [DEBUG] [Thread-15730] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:26:10.428 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:26:10.429 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:26:18.805 [DEBUG] [Thread-15732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:26:31.842 [DEBUG] [Thread-15733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:26:33.855 [DEBUG] [Thread-15734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:26:40.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:26:40.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:26:40.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-11-12T12:26:40.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 26, 11), 32.43, 11.71, 0.0, 24.7, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:26:40.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:26:11
2025-11-12T12:26:40.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:26:41.131 [DEBUG] [Thread-15735] [transport.py] [_log()] starting thread (client mode): 0x17360f70
2025-11-12T12:26:41.131 [DEBUG] [Thread-15735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:26:41.152 [DEBUG] [Thread-15735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:26:41.152 [INFO] [Thread-15735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:26:41.155 [DEBUG] [Thread-15735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:26:41.155 [DEBUG] [Thread-15735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:26:41.155 [DEBUG] [Thread-15735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:26:41.155 [DEBUG] [Thread-15735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:26:41.155 [DEBUG] [Thread-15735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] client lang: <none>
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] server lang: <none>
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] kex follows: False
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:26:41.156 [DEBUG] [Thread-15735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:26:41.157 [DEBUG] [Thread-15735] [transport.py] [_log()] Compression: none
2025-11-12T12:26:41.157 [DEBUG] [Thread-15735] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:26:41.173 [DEBUG] [Thread-15735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:26:41.173 [DEBUG] [Thread-15735] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:26:41.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:26:41.175 [DEBUG] [Thread-15735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:26:41.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:26:41.177 [DEBUG] [Thread-15735] [transport.py] [_log()] userauth is OK
2025-11-12T12:26:41.178 [DEBUG] [Thread-15735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:26:41.178 [DEBUG] [Thread-15735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:26:41.178 [DEBUG] [Thread-15735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:26:41.178 [DEBUG] [Thread-15735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:26:41.196 [INFO] [Thread-15735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:26:41.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:26:41.928 [DEBUG] [Thread-15735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:26:41.929 [DEBUG] [Thread-15735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:26:41.929 [DEBUG] [Thread-15735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:26:41.969 [DEBUG] [Thread-15735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:26:41.970 [DEBUG] [Thread-15735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:26:41.973 [DEBUG] [Thread-15735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:26:41.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:26:41.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:26:41.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:26:41.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:26:41.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:26:41.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:26:41.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:26:41.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:26:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:26:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.434811 -999.00  +26.10  21.30     18   +0.10 1 1 1 1 1   888    0 25.37 -51.79 ----- 17.1 21.3 258.6 29.6 31.4 -25.7 30.6 -24.1 30.1 -22.0 30.9 -24.2
2025-11-12T12:26:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:26:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:26:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.434811
2025-11-12T12:26:41.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:26:41.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:26:41.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:26:41.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:26:41.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:26:41.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:26:11', tmtdew=32.43, humidity=11.71, cloud=0.0, wind=24.7, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:26:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:26:41.997 [DEBUG] [Thread-15735] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:26:42.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:26:42.092 [DEBUG] [Thread-15738] [transport.py] [_log()] starting thread (client mode): 0x173bf9a0
2025-11-12T12:26:42.092 [DEBUG] [Thread-15738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:26:42.107 [DEBUG] [Thread-15738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:26:42.107 [INFO] [Thread-15738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:26:42.114 [DEBUG] [Thread-15738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:26:42.115 [DEBUG] [Thread-15738] [transport.py] [_log()] client lang: <none>
2025-11-12T12:26:42.116 [DEBUG] [Thread-15738] [transport.py] [_log()] server lang: <none>
2025-11-12T12:26:42.116 [DEBUG] [Thread-15738] [transport.py] [_log()] kex follows: False
2025-11-12T12:26:42.116 [DEBUG] [Thread-15738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:26:42.116 [DEBUG] [Thread-15738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:26:42.116 [DEBUG] [Thread-15738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:26:42.116 [DEBUG] [Thread-15738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:26:42.116 [DEBUG] [Thread-15738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:26:42.116 [DEBUG] [Thread-15738] [transport.py] [_log()] Compression: none
2025-11-12T12:26:42.117 [DEBUG] [Thread-15738] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:26:42.172 [DEBUG] [Thread-15738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:26:42.173 [DEBUG] [Thread-15738] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:26:42.174 [DEBUG] [Thread-15738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:26:42.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:26:42.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:26:42.228 [DEBUG] [Thread-15738] [transport.py] [_log()] userauth is OK
2025-11-12T12:26:42.229 [DEBUG] [Thread-15738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:26:42.229 [DEBUG] [Thread-15738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:26:42.229 [DEBUG] [Thread-15738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:26:42.229 [DEBUG] [Thread-15738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:26:42.248 [INFO] [Thread-15738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:26:42.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:26:42.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:26:43.140 [DEBUG] [Thread-15738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:26:43.140 [DEBUG] [Thread-15738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:26:43.188 [DEBUG] [Thread-15738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:26:43.188 [DEBUG] [Thread-15738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:26:43.197 [DEBUG] [Thread-15738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:26:43.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:26:43.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')
2025-11-12T12:26:43.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-11-12T12:26:43.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:26:43.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:26:43.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:26:43.234 [DEBUG] [Thread-15738] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:26:48.892 [DEBUG] [Thread-15740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:27:03.951 [DEBUG] [Thread-15741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:27:10.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:27:10.572 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:27:13.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:27:13.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:27: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-11-12T12:27:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 26, 43), 31.43, 12.31, 0.0, 19.5, 26.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:27:13.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:26:43
2025-11-12T12:27:14.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:27:14.169 [DEBUG] [Thread-15742] [transport.py] [_log()] starting thread (client mode): 0x173bf910
2025-11-12T12:27:14.169 [DEBUG] [Thread-15742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:27:14.189 [DEBUG] [Thread-15742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:27:14.189 [INFO] [Thread-15742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:27:14.192 [DEBUG] [Thread-15742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:27:14.192 [DEBUG] [Thread-15742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:27:14.192 [DEBUG] [Thread-15742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:27:14.192 [DEBUG] [Thread-15742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:27:14.192 [DEBUG] [Thread-15742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:27:14.192 [DEBUG] [Thread-15742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:27:14.192 [DEBUG] [Thread-15742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] client lang: <none>
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] server lang: <none>
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] kex follows: False
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] Compression: none
2025-11-12T12:27:14.193 [DEBUG] [Thread-15742] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:27:14.212 [DEBUG] [Thread-15742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:27:14.212 [DEBUG] [Thread-15742] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:27:14.212 [DEBUG] [Thread-15742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:27:14.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:27:14.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:27:14.214 [DEBUG] [Thread-15742] [transport.py] [_log()] userauth is OK
2025-11-12T12:27:14.214 [DEBUG] [Thread-15742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:27:14.214 [DEBUG] [Thread-15742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:27:14.215 [DEBUG] [Thread-15742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:27:14.215 [DEBUG] [Thread-15742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:27:14.230 [INFO] [Thread-15742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:27:14.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:27:14.878 [DEBUG] [Thread-15742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:27:14.878 [DEBUG] [Thread-15742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:27:14.879 [DEBUG] [Thread-15742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:27:14.919 [DEBUG] [Thread-15742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:27:14.919 [DEBUG] [Thread-15742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:27:14.922 [DEBUG] [Thread-15742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:27:14.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:27:14.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:27:14.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:27:14.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:27:14.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:27:14.947 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:27:14.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:27:14.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:27:14.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:27:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.435158 -999.00  +25.90  16.48     18   +0.30 1 1 1 1 1   888    0 25.51 -46.68 ----- 13.6 16.5 260.4 20.3 31.4 -25.2 30.7 -23.6 30.2 -22.9 30.9 -24.3
2025-11-12T12:27:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:27:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:27:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.435158
2025-11-12T12:27:14.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:27:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:27:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:27:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:27:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:27:14.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:26:43', tmtdew=31.43, humidity=12.31, cloud=0.0, wind=19.5, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:26:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:27:14.949 [DEBUG] [Thread-15742] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:27:15.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:27:15.046 [DEBUG] [Thread-15745] [transport.py] [_log()] starting thread (client mode): 0x173f8190
2025-11-12T12:27:15.046 [DEBUG] [Thread-15745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:27:15.061 [DEBUG] [Thread-15745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:27:15.062 [INFO] [Thread-15745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:27:15.069 [DEBUG] [Thread-15745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:27:15.069 [DEBUG] [Thread-15745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:27:15.069 [DEBUG] [Thread-15745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:27:15.069 [DEBUG] [Thread-15745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] client lang: <none>
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] server lang: <none>
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] kex follows: False
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] Compression: none
2025-11-12T12:27:15.070 [DEBUG] [Thread-15745] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:27:15.128 [DEBUG] [Thread-15745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:27:15.129 [DEBUG] [Thread-15745] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:27:15.130 [DEBUG] [Thread-15745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:27:15.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:27:15.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:27:15.184 [DEBUG] [Thread-15745] [transport.py] [_log()] userauth is OK
2025-11-12T12:27:15.185 [DEBUG] [Thread-15745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:27:15.185 [DEBUG] [Thread-15745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:27:15.185 [DEBUG] [Thread-15745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:27:15.185 [DEBUG] [Thread-15745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:27:15.204 [INFO] [Thread-15745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:27:15.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:27:15.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:27:16.047 [DEBUG] [Thread-15745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:27:16.047 [DEBUG] [Thread-15745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:27:16.095 [DEBUG] [Thread-15745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:27:16.095 [DEBUG] [Thread-15745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:27:16.103 [DEBUG] [Thread-15745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:27:16.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:27:16.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-11-12T12:27:16.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:27:16.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:27:16.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:27:16.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:27:16.135 [DEBUG] [Thread-15745] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:27:18.983 [DEBUG] [Thread-15747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:27:31.876 [DEBUG] [Thread-15748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:27:34.039 [DEBUG] [Thread-15749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:27:46.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:27:46.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:27:46.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-11-12T12:27:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 27, 15), 31.41, 12.34, 0.0, 19.46, 26.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:27:46.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:27:15
2025-11-12T12:27:46.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:27:47.074 [DEBUG] [Thread-15750] [transport.py] [_log()] starting thread (client mode): 0x19dd91b0
2025-11-12T12:27:47.074 [DEBUG] [Thread-15750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:27:47.094 [DEBUG] [Thread-15750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:27:47.094 [INFO] [Thread-15750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] client lang: <none>
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] server lang: <none>
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] kex follows: False
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] Compression: none
2025-11-12T12:27:47.097 [DEBUG] [Thread-15750] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:27:47.113 [DEBUG] [Thread-15750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:27:47.113 [DEBUG] [Thread-15750] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:27:47.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:27:47.113 [DEBUG] [Thread-15750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:27:47.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:27:47.114 [DEBUG] [Thread-15750] [transport.py] [_log()] userauth is OK
2025-11-12T12:27:47.114 [DEBUG] [Thread-15750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:27:47.114 [DEBUG] [Thread-15750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:27:47.114 [DEBUG] [Thread-15750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:27:47.114 [DEBUG] [Thread-15750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:27:47.127 [INFO] [Thread-15750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:27:47.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:27:47.883 [DEBUG] [Thread-15750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:27:47.884 [DEBUG] [Thread-15750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:27:47.884 [DEBUG] [Thread-15750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:27:47.924 [DEBUG] [Thread-15750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:27:47.924 [DEBUG] [Thread-15750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:27:47.926 [DEBUG] [Thread-15750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:27:47.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:27:47.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:27:47.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:27:47.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:27:47.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:27:47.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:27:47.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:27:47.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:27:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.435505 -999.00  +25.90  15.90     18   +0.10 1 1 1 1 1   888    0 25.45 -41.88 ----- 15.2 15.9 250.2 22.1 31.6 -24.3 30.8 -24.4 30.3 -23.0 31.0 -23.0
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.435505
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:27:47.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:27:15', tmtdew=31.41, humidity=12.34, cloud=0.0, wind=19.46, temperature=26.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:27:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:27:47.947 [DEBUG] [Thread-15750] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:27:48.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:27:48.032 [DEBUG] [Thread-15753] [transport.py] [_log()] starting thread (client mode): 0x17360a90
2025-11-12T12:27:48.032 [DEBUG] [Thread-15753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:27:48.046 [DEBUG] [Thread-15753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:27:48.047 [INFO] [Thread-15753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] client lang: <none>
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] server lang: <none>
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] kex follows: False
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] Compression: none
2025-11-12T12:27:48.054 [DEBUG] [Thread-15753] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:27:48.119 [DEBUG] [Thread-15753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:27:48.119 [DEBUG] [Thread-15753] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:27:48.120 [DEBUG] [Thread-15753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:27:48.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:27:48.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:27:48.175 [DEBUG] [Thread-15753] [transport.py] [_log()] userauth is OK
2025-11-12T12:27:48.175 [DEBUG] [Thread-15753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:27:48.175 [DEBUG] [Thread-15753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:27:48.176 [DEBUG] [Thread-15753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:27:48.176 [DEBUG] [Thread-15753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:27:48.193 [INFO] [Thread-15753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:27:48.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:27:48.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:27:49.053 [DEBUG] [Thread-15753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:27:49.053 [DEBUG] [Thread-15753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:27:49.069 [DEBUG] [Thread-15755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:27:49.103 [DEBUG] [Thread-15753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:27:49.103 [DEBUG] [Thread-15753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:27:49.112 [DEBUG] [Thread-15753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:27:49.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:27:49.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-11-12T12:27:49.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-11-12T12:27:49.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:27:49.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:27:49.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:27:49.147 [DEBUG] [Thread-15753] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:28:04.108 [DEBUG] [Thread-15756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:28:10.712 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:28:10.713 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:28:19.147 [DEBUG] [Thread-15757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:28:19.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:28:19.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:28:19.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-11-12T12:28:19.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 27, 47), 31.39, 12.58, 0.0, 23.73, 26.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:28:19.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:27:47
2025-11-12T12:28:19.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:28:20.110 [DEBUG] [Thread-15758] [transport.py] [_log()] starting thread (client mode): 0x19ddb370
2025-11-12T12:28:20.110 [DEBUG] [Thread-15758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:28:20.131 [DEBUG] [Thread-15758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:28:20.131 [INFO] [Thread-15758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] client lang: <none>
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] server lang: <none>
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] kex follows: False
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:28:20.134 [DEBUG] [Thread-15758] [transport.py] [_log()] Compression: none
2025-11-12T12:28:20.135 [DEBUG] [Thread-15758] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:28:20.152 [DEBUG] [Thread-15758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:28:20.153 [DEBUG] [Thread-15758] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:28:20.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:28:20.153 [DEBUG] [Thread-15758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:28:20.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:28:20.154 [DEBUG] [Thread-15758] [transport.py] [_log()] userauth is OK
2025-11-12T12:28:20.154 [DEBUG] [Thread-15758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:28:20.154 [DEBUG] [Thread-15758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:28:20.154 [DEBUG] [Thread-15758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:28:20.154 [DEBUG] [Thread-15758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:28:20.171 [INFO] [Thread-15758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:28:20.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:28:20.776 [DEBUG] [Thread-15758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:28:20.776 [DEBUG] [Thread-15758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:28:20.776 [DEBUG] [Thread-15758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:28:20.817 [DEBUG] [Thread-15758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:28:20.817 [DEBUG] [Thread-15758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:28:20.819 [DEBUG] [Thread-15758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:28:20.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:28:20.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:28:20.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:28:20.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:28:20.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:28:20.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:28:20.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.435853 -999.00  +26.20  18.12     18   +0.50 1 1 1 1 1   888    0 25.73 -34.67 ----- 14.3 18.1 280.2 22.8 31.6 -25.1 30.9 -23.9 30.3 -25.0 31.0 -24.6
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.435853
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:28:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:27:47', tmtdew=31.39, humidity=12.58, cloud=0.0, wind=23.73, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:27:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:28:20.837 [DEBUG] [Thread-15758] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:28:20.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:28:20.922 [DEBUG] [Thread-15761] [transport.py] [_log()] starting thread (client mode): 0x173e8520
2025-11-12T12:28:20.922 [DEBUG] [Thread-15761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:28:20.937 [DEBUG] [Thread-15761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:28:20.937 [INFO] [Thread-15761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:28:20.944 [DEBUG] [Thread-15761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:28:20.944 [DEBUG] [Thread-15761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:28:20.944 [DEBUG] [Thread-15761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:28:20.944 [DEBUG] [Thread-15761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] client lang: <none>
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] server lang: <none>
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] kex follows: False
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] Compression: none
2025-11-12T12:28:20.945 [DEBUG] [Thread-15761] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:28:21.002 [DEBUG] [Thread-15761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:28:21.002 [DEBUG] [Thread-15761] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:28:21.002 [DEBUG] [Thread-15761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:28:21.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:28:21.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:28:21.059 [DEBUG] [Thread-15761] [transport.py] [_log()] userauth is OK
2025-11-12T12:28:21.059 [DEBUG] [Thread-15761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:28:21.059 [DEBUG] [Thread-15761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:28:21.059 [DEBUG] [Thread-15761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:28:21.059 [DEBUG] [Thread-15761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:28:21.077 [INFO] [Thread-15761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:28:21.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:28:21.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:28:21.946 [DEBUG] [Thread-15761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:28:21.946 [DEBUG] [Thread-15761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:28:21.994 [DEBUG] [Thread-15761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:28:21.995 [DEBUG] [Thread-15761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:28:22.003 [DEBUG] [Thread-15761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:28:22.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:28:22.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:28:22.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-11-12T12:28:22.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:28:22.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:28:22.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:28:22.035 [DEBUG] [Thread-15761] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:28:31.910 [DEBUG] [Thread-15763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:28:34.178 [DEBUG] [Thread-15764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:28:49.233 [DEBUG] [Thread-15765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:28:52.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:28:52.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:28:52.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-11-12T12:28:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 28, 19), 31.24, 12.69, 0.0, 24.15, 26.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:28:52.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:28:19
2025-11-12T12:28:52.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:28:53.045 [DEBUG] [Thread-15766] [transport.py] [_log()] starting thread (client mode): 0x173beec0
2025-11-12T12:28:53.045 [DEBUG] [Thread-15766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:28:53.066 [DEBUG] [Thread-15766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:28:53.066 [INFO] [Thread-15766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:28:53.069 [DEBUG] [Thread-15766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:28:53.069 [DEBUG] [Thread-15766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:28:53.069 [DEBUG] [Thread-15766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:28:53.069 [DEBUG] [Thread-15766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] client lang: <none>
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] server lang: <none>
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] kex follows: False
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] Compression: none
2025-11-12T12:28:53.070 [DEBUG] [Thread-15766] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:28:53.083 [DEBUG] [Thread-15766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:28:53.084 [DEBUG] [Thread-15766] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:28:53.084 [DEBUG] [Thread-15766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:28:53.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:28:53.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:28:53.085 [DEBUG] [Thread-15766] [transport.py] [_log()] userauth is OK
2025-11-12T12:28:53.085 [DEBUG] [Thread-15766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:28:53.085 [DEBUG] [Thread-15766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:28:53.085 [DEBUG] [Thread-15766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:28:53.085 [DEBUG] [Thread-15766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:28:53.103 [INFO] [Thread-15766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:28:53.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:28:53.824 [DEBUG] [Thread-15766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:28:53.824 [DEBUG] [Thread-15766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:28:53.825 [DEBUG] [Thread-15766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:28:53.866 [DEBUG] [Thread-15766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:28:53.866 [DEBUG] [Thread-15766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:28:53.868 [DEBUG] [Thread-15766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:28:53.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:28:53.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:28:53.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:28:53.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:28:53.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:28:53.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:28:53.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:28:53.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:28:53.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:28:53.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.436200 -999.00  +26.40  22.14     18   +0.60 1 1 1 1 1   888    0 25.59 -29.43 ----- 20.2 22.1 275.6 27.2 31.8 -24.8 30.9 -24.4 30.4 -25.8 31.3 -23.0
2025-11-12T12:28:53.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:28:53.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:28:53.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.436200
2025-11-12T12:28:53.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:28:53.895 [DEBUG] [Thread-15766] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:28:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:28:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:28:53.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:28:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:28:53.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:28:19', tmtdew=31.24, humidity=12.69, cloud=0.0, wind=24.15, temperature=26.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:28:07.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:28:53.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:28:53.996 [DEBUG] [Thread-15769] [transport.py] [_log()] starting thread (client mode): 0x173fbfa0
2025-11-12T12:28:53.996 [DEBUG] [Thread-15769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:28:54.010 [DEBUG] [Thread-15769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:28:54.011 [INFO] [Thread-15769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:28:54.018 [DEBUG] [Thread-15769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:28:54.018 [DEBUG] [Thread-15769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:28:54.018 [DEBUG] [Thread-15769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:28:54.018 [DEBUG] [Thread-15769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:28:54.018 [DEBUG] [Thread-15769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:28:54.018 [DEBUG] [Thread-15769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:28:54.018 [DEBUG] [Thread-15769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] client lang: <none>
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] server lang: <none>
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] kex follows: False
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] Compression: none
2025-11-12T12:28:54.019 [DEBUG] [Thread-15769] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:28:54.076 [DEBUG] [Thread-15769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:28:54.077 [DEBUG] [Thread-15769] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:28:54.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:28:54.078 [DEBUG] [Thread-15769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:28:54.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:28:54.132 [DEBUG] [Thread-15769] [transport.py] [_log()] userauth is OK
2025-11-12T12:28:54.132 [DEBUG] [Thread-15769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:28:54.133 [DEBUG] [Thread-15769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:28:54.133 [DEBUG] [Thread-15769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:28:54.133 [DEBUG] [Thread-15769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:28:54.152 [INFO] [Thread-15769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:28:54.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:28:54.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:28:54.977 [DEBUG] [Thread-15769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:28:54.977 [DEBUG] [Thread-15769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:28:55.026 [DEBUG] [Thread-15769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:28:55.026 [DEBUG] [Thread-15769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:28:55.035 [DEBUG] [Thread-15769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:28:55.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:28:55.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-11-12T12:28:55.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:28:55.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:28:55.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:28:55.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:28:55.072 [DEBUG] [Thread-15769] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:29:04.265 [DEBUG] [Thread-15771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:29:10.854 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:29:10.855 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:29:19.310 [DEBUG] [Thread-15772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:29:25.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:29:25.085 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:29:25.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-11-12T12:29:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 28, 51), 31.48, 12.29, 0.0, 26.43, 26.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:29:25.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:28:51
2025-11-12T12:29:25.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:29:26.027 [DEBUG] [Thread-15773] [transport.py] [_log()] starting thread (client mode): 0x14980880
2025-11-12T12:29:26.027 [DEBUG] [Thread-15773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:29:26.047 [DEBUG] [Thread-15773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:29:26.047 [INFO] [Thread-15773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:29:26.050 [DEBUG] [Thread-15773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:29:26.050 [DEBUG] [Thread-15773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] client lang: <none>
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] server lang: <none>
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] kex follows: False
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:29:26.051 [DEBUG] [Thread-15773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:29:26.052 [DEBUG] [Thread-15773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:29:26.052 [DEBUG] [Thread-15773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:29:26.052 [DEBUG] [Thread-15773] [transport.py] [_log()] Compression: none
2025-11-12T12:29:26.052 [DEBUG] [Thread-15773] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:29:26.071 [DEBUG] [Thread-15773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:29:26.071 [DEBUG] [Thread-15773] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:29:26.072 [DEBUG] [Thread-15773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:29:26.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:29:26.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:29:26.074 [DEBUG] [Thread-15773] [transport.py] [_log()] userauth is OK
2025-11-12T12:29:26.074 [DEBUG] [Thread-15773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:29:26.074 [DEBUG] [Thread-15773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:29:26.074 [DEBUG] [Thread-15773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:29:26.075 [DEBUG] [Thread-15773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:29:26.092 [INFO] [Thread-15773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:29:26.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:29:26.711 [DEBUG] [Thread-15773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:29:26.711 [DEBUG] [Thread-15773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:29:26.712 [DEBUG] [Thread-15773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:29:26.752 [DEBUG] [Thread-15773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:29:26.752 [DEBUG] [Thread-15773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:29:26.755 [DEBUG] [Thread-15773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:29:26.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:29:26.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:29:26.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:29:26.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:29:26.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:29:26.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:29:26.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:29:26.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:29:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:29:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.436547 -999.00  +26.80  28.23     17   +0.40 1 1 1 1 1   888    0 25.62 -28.28 ----- 27.3 28.2 292.6 33.4 31.8 -24.7 31.1 -24.5 30.4 -26.3 31.3 -23.1
2025-11-12T12:29:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:29:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:29:26.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.436547
2025-11-12T12:29:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:29:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:29:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:29:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:29:26.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:29:26.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:28:51', tmtdew=31.48, humidity=12.29, cloud=0.0, wind=26.43, temperature=26.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:28:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:29:26.783 [DEBUG] [Thread-15773] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:29:26.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:29:26.879 [DEBUG] [Thread-15776] [transport.py] [_log()] starting thread (client mode): 0x173f8670
2025-11-12T12:29:26.879 [DEBUG] [Thread-15776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:29:26.894 [DEBUG] [Thread-15776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:29:26.894 [INFO] [Thread-15776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] client lang: <none>
2025-11-12T12:29:26.902 [DEBUG] [Thread-15776] [transport.py] [_log()] server lang: <none>
2025-11-12T12:29:26.903 [DEBUG] [Thread-15776] [transport.py] [_log()] kex follows: False
2025-11-12T12:29:26.903 [DEBUG] [Thread-15776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:29:26.903 [DEBUG] [Thread-15776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:29:26.903 [DEBUG] [Thread-15776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:29:26.903 [DEBUG] [Thread-15776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:29:26.903 [DEBUG] [Thread-15776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:29:26.903 [DEBUG] [Thread-15776] [transport.py] [_log()] Compression: none
2025-11-12T12:29:26.903 [DEBUG] [Thread-15776] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:29:26.961 [DEBUG] [Thread-15776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:29:26.961 [DEBUG] [Thread-15776] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:29:26.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:29:26.962 [DEBUG] [Thread-15776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:29:26.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:29:27.020 [DEBUG] [Thread-15776] [transport.py] [_log()] userauth is OK
2025-11-12T12:29:27.020 [DEBUG] [Thread-15776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:29:27.021 [DEBUG] [Thread-15776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:29:27.021 [DEBUG] [Thread-15776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:29:27.021 [DEBUG] [Thread-15776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:29:27.040 [INFO] [Thread-15776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:29:27.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:29:27.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:29:27.928 [DEBUG] [Thread-15776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:29:27.929 [DEBUG] [Thread-15776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:29:27.976 [DEBUG] [Thread-15776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:29:27.977 [DEBUG] [Thread-15776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:29:27.986 [DEBUG] [Thread-15776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:29:27.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:29:27.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-11-12T12:29:28.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-11-12T12:29:28.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:29:28.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:29:28.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:29:28.019 [DEBUG] [Thread-15776] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:29:31.944 [DEBUG] [Thread-15778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:29:34.345 [DEBUG] [Thread-15779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:29:49.395 [DEBUG] [Thread-15780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:29:58.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:29:58.036 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:29:58.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-11-12T12:29:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 29, 55), 32.88, 11.31, 0.0, 21.4, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:29:58.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:29:55
2025-11-12T12:29:58.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:29:58.951 [DEBUG] [Thread-15781] [transport.py] [_log()] starting thread (client mode): 0x19dd9390
2025-11-12T12:29:58.951 [DEBUG] [Thread-15781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:29:58.971 [DEBUG] [Thread-15781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:29:58.971 [INFO] [Thread-15781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] client lang: <none>
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] server lang: <none>
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] kex follows: False
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] Compression: none
2025-11-12T12:29:58.972 [DEBUG] [Thread-15781] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:29:58.984 [DEBUG] [Thread-15781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:29:58.984 [DEBUG] [Thread-15781] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:29:58.985 [DEBUG] [Thread-15781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:29:58.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:29:58.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:29:58.987 [DEBUG] [Thread-15781] [transport.py] [_log()] userauth is OK
2025-11-12T12:29:58.987 [DEBUG] [Thread-15781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:29:58.987 [DEBUG] [Thread-15781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:29:58.987 [DEBUG] [Thread-15781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:29:58.987 [DEBUG] [Thread-15781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:29:59.005 [INFO] [Thread-15781] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:29:59.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:29:59.686 [DEBUG] [Thread-15781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:29:59.687 [DEBUG] [Thread-15781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:29:59.687 [DEBUG] [Thread-15781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:29:59.728 [DEBUG] [Thread-15781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:29:59.728 [DEBUG] [Thread-15781] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:29:59.731 [DEBUG] [Thread-15781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:29:59.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:29:59.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:29:59.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:29:59.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:29:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:29:59.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:29:59.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:29:59.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:29:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:29:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.437241 -999.00  +26.00  19.81     17   -0.10 1 1 1 1 1   888    0 26.24 -21.33 ----- 19.7 19.8 293.8 28.9 31.8 -24.8 31.1 -23.9 30.5 -22.6 31.4 -23.2
2025-11-12T12:29:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:29:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:29:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.437241
2025-11-12T12:29:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:29:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:29:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:29:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:29:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:29:59.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:29:55', tmtdew=32.88, humidity=11.31, cloud=0.0, wind=21.4, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:29:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:29:59.757 [DEBUG] [Thread-15781] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:29:59.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:29:59.851 [DEBUG] [Thread-15784] [transport.py] [_log()] starting thread (client mode): 0x1737e350
2025-11-12T12:29:59.851 [DEBUG] [Thread-15784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:29:59.866 [DEBUG] [Thread-15784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:29:59.867 [INFO] [Thread-15784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:29:59.874 [DEBUG] [Thread-15784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:29:59.874 [DEBUG] [Thread-15784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:29:59.875 [DEBUG] [Thread-15784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:29:59.875 [DEBUG] [Thread-15784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:29:59.875 [DEBUG] [Thread-15784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:29:59.875 [DEBUG] [Thread-15784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:29:59.875 [DEBUG] [Thread-15784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:29:59.875 [DEBUG] [Thread-15784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:29:59.875 [DEBUG] [Thread-15784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:29:59.875 [DEBUG] [Thread-15784] [transport.py] [_log()] client lang: <none>
2025-11-12T12:29:59.876 [DEBUG] [Thread-15784] [transport.py] [_log()] server lang: <none>
2025-11-12T12:29:59.876 [DEBUG] [Thread-15784] [transport.py] [_log()] kex follows: False
2025-11-12T12:29:59.876 [DEBUG] [Thread-15784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:29:59.876 [DEBUG] [Thread-15784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:29:59.876 [DEBUG] [Thread-15784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:29:59.876 [DEBUG] [Thread-15784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:29:59.876 [DEBUG] [Thread-15784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:29:59.877 [DEBUG] [Thread-15784] [transport.py] [_log()] Compression: none
2025-11-12T12:29:59.877 [DEBUG] [Thread-15784] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:29:59.934 [DEBUG] [Thread-15784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:29:59.935 [DEBUG] [Thread-15784] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:29:59.936 [DEBUG] [Thread-15784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:29:59.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:29:59.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:29:59.992 [DEBUG] [Thread-15784] [transport.py] [_log()] userauth is OK
2025-11-12T12:29:59.992 [DEBUG] [Thread-15784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:29:59.993 [DEBUG] [Thread-15784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:29:59.993 [DEBUG] [Thread-15784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:29:59.993 [DEBUG] [Thread-15784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:30:00.016 [INFO] [Thread-15784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:30:00.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:30:00.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:30:00.880 [DEBUG] [Thread-15784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:30:00.880 [DEBUG] [Thread-15784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:30:00.928 [DEBUG] [Thread-15784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:30:00.928 [DEBUG] [Thread-15784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:30:00.937 [DEBUG] [Thread-15784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:30:00.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:30:00.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-11-12T12:30:00.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:30:00.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:30:00.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:30:00.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:30:00.973 [DEBUG] [Thread-15784] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:30:04.432 [DEBUG] [Thread-15786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:30:10.997 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:30:10.998 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:30:19.483 [DEBUG] [Thread-15787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:30:30.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:30:30.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:30:30.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-11-12T12:30:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 30, 27), 32.52, 11.59, 0.0, 18.42, 27.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:30:31.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:30:27
2025-11-12T12:30:31.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:30:31.893 [DEBUG] [Thread-15788] [transport.py] [_log()] starting thread (client mode): 0x1737d7b0
2025-11-12T12:30:31.894 [DEBUG] [Thread-15788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:30:31.914 [DEBUG] [Thread-15788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:30:31.915 [INFO] [Thread-15788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:30:31.918 [DEBUG] [Thread-15788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:30:31.918 [DEBUG] [Thread-15788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:30:31.918 [DEBUG] [Thread-15788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:30:31.918 [DEBUG] [Thread-15788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:30:31.918 [DEBUG] [Thread-15788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:30:31.918 [DEBUG] [Thread-15788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:30:31.918 [DEBUG] [Thread-15788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] client lang: <none>
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] server lang: <none>
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] kex follows: False
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] Compression: none
2025-11-12T12:30:31.919 [DEBUG] [Thread-15788] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:30:31.935 [DEBUG] [Thread-15788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:30:31.936 [DEBUG] [Thread-15788] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:30:31.936 [DEBUG] [Thread-15788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:30:31.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:30:31.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:30:31.938 [DEBUG] [Thread-15788] [transport.py] [_log()] userauth is OK
2025-11-12T12:30:31.938 [DEBUG] [Thread-15788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:30:31.938 [DEBUG] [Thread-15788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:30:31.939 [DEBUG] [Thread-15788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:30:31.939 [DEBUG] [Thread-15788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:30:31.962 [INFO] [Thread-15788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:30:31.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:30:31.985 [DEBUG] [Thread-15790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:30:32.592 [DEBUG] [Thread-15788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:30:32.593 [DEBUG] [Thread-15788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:30:32.593 [DEBUG] [Thread-15788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:30:32.634 [DEBUG] [Thread-15788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:30:32.634 [DEBUG] [Thread-15788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:30:32.638 [DEBUG] [Thread-15788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:30:32.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:30:32.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:30:32.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:30:32.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:30:32.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:30:32.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:30:32.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:30:32.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:30:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:30:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.437588 -999.00  +26.00  25.68     18   +0.30 1 1 1 1 1   888    0 25.96 -19.66 ----- 18.9 25.7 321.2 31.3 32.0 -24.8 31.1 -24.3 30.6 -23.6 31.6 -23.4
2025-11-12T12:30:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:30:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:30:32.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.437588
2025-11-12T12:30:32.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:30:32.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:30:32.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:30:32.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:30:32.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:30:32.664 [DEBUG] [Thread-15788] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:30:32.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:30:27', tmtdew=32.52, humidity=11.59, cloud=0.0, wind=18.42, temperature=27.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:30:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:30:32.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:30:32.759 [DEBUG] [Thread-15792] [transport.py] [_log()] starting thread (client mode): 0x1737c7f0
2025-11-12T12:30:32.759 [DEBUG] [Thread-15792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:30:32.774 [DEBUG] [Thread-15792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:30:32.775 [INFO] [Thread-15792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] client lang: <none>
2025-11-12T12:30:32.783 [DEBUG] [Thread-15792] [transport.py] [_log()] server lang: <none>
2025-11-12T12:30:32.784 [DEBUG] [Thread-15792] [transport.py] [_log()] kex follows: False
2025-11-12T12:30:32.784 [DEBUG] [Thread-15792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:30:32.784 [DEBUG] [Thread-15792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:30:32.784 [DEBUG] [Thread-15792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:30:32.784 [DEBUG] [Thread-15792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:30:32.784 [DEBUG] [Thread-15792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:30:32.784 [DEBUG] [Thread-15792] [transport.py] [_log()] Compression: none
2025-11-12T12:30:32.784 [DEBUG] [Thread-15792] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:30:32.840 [DEBUG] [Thread-15792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:30:32.841 [DEBUG] [Thread-15792] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:30:32.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:30:32.842 [DEBUG] [Thread-15792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:30:32.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:30:32.896 [DEBUG] [Thread-15792] [transport.py] [_log()] userauth is OK
2025-11-12T12:30:32.896 [DEBUG] [Thread-15792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:30:32.896 [DEBUG] [Thread-15792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:30:32.896 [DEBUG] [Thread-15792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:30:32.896 [DEBUG] [Thread-15792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:30:32.916 [INFO] [Thread-15792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:30:32.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:30:32.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:30:33.794 [DEBUG] [Thread-15792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:30:33.794 [DEBUG] [Thread-15792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:30:33.842 [DEBUG] [Thread-15792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:30:33.842 [DEBUG] [Thread-15792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:30:33.851 [DEBUG] [Thread-15792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:30:33.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:30:33.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-11-12T12:30:33.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') -> 00000000
2025-11-12T12:30:33.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:30:33.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:30:33.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:30:33.888 [DEBUG] [Thread-15792] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:30:34.512 [DEBUG] [Thread-15794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:30:49.577 [DEBUG] [Thread-15795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:31:03.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:31:03.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:31:03.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-11-12T12:31:04.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 30, 27), 32.52, 11.59, 0.0, 18.42, 27.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:31:04.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:30:27
2025-11-12T12:31:04.612 [DEBUG] [Thread-15796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:31:04.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:31:04.813 [DEBUG] [Thread-15797] [transport.py] [_log()] starting thread (client mode): 0x1737f0d0
2025-11-12T12:31:04.814 [DEBUG] [Thread-15797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:31:04.834 [DEBUG] [Thread-15797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:31:04.835 [INFO] [Thread-15797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] client lang: <none>
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] server lang: <none>
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] kex follows: False
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] Compression: none
2025-11-12T12:31:04.838 [DEBUG] [Thread-15797] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:31:04.855 [DEBUG] [Thread-15797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:31:04.856 [DEBUG] [Thread-15797] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:31:04.857 [DEBUG] [Thread-15797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:31:04.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:31:04.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:31:04.859 [DEBUG] [Thread-15797] [transport.py] [_log()] userauth is OK
2025-11-12T12:31:04.859 [DEBUG] [Thread-15797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:31:04.859 [DEBUG] [Thread-15797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:31:04.859 [DEBUG] [Thread-15797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:31:04.859 [DEBUG] [Thread-15797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:31:04.884 [INFO] [Thread-15797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:31:04.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:31:05.509 [DEBUG] [Thread-15797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:31:05.510 [DEBUG] [Thread-15797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:31:05.510 [DEBUG] [Thread-15797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:31:05.550 [DEBUG] [Thread-15797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:31:05.551 [DEBUG] [Thread-15797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:31:05.554 [DEBUG] [Thread-15797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:31:05.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:31:05.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:31:05.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:31:05.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:31:05.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:31:05.577 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:31:05.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:31:05.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:31:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:31:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.437936 -999.00  +26.10  16.88     19   +0.60 1 1 1 1 1   888    0 25.65 -23.54 ----- 26.5 16.9 308.2 28.4 32.0 -25.9 31.1 -23.9 30.7 -25.2 31.7 -24.2
2025-11-12T12:31:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:31:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:31:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.437936
2025-11-12T12:31:05.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:31:05.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:31:05.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:31:05.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:31:05.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:31:05.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:30:27', tmtdew=32.52, humidity=11.59, cloud=0.0, wind=18.42, temperature=27.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:30:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:31:05.580 [DEBUG] [Thread-15797] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:31: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-11-12T12:31:05.674 [DEBUG] [Thread-15800] [transport.py] [_log()] starting thread (client mode): 0x173eb3a0
2025-11-12T12:31:05.675 [DEBUG] [Thread-15800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:31:05.690 [DEBUG] [Thread-15800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:31:05.690 [INFO] [Thread-15800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] client lang: <none>
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] server lang: <none>
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] kex follows: False
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:31:05.698 [DEBUG] [Thread-15800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:31:05.699 [DEBUG] [Thread-15800] [transport.py] [_log()] Compression: none
2025-11-12T12:31:05.699 [DEBUG] [Thread-15800] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:31:05.760 [DEBUG] [Thread-15800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:31:05.761 [DEBUG] [Thread-15800] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:31:05.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:31:05.762 [DEBUG] [Thread-15800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:31:05.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:31:05.817 [DEBUG] [Thread-15800] [transport.py] [_log()] userauth is OK
2025-11-12T12:31:05.817 [DEBUG] [Thread-15800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:31:05.817 [DEBUG] [Thread-15800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:31:05.817 [DEBUG] [Thread-15800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:31:05.817 [DEBUG] [Thread-15800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:31:05.836 [INFO] [Thread-15800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:31:05.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:31:05.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:31:06.694 [DEBUG] [Thread-15800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:31:06.695 [DEBUG] [Thread-15800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:31:06.743 [DEBUG] [Thread-15800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:31:06.743 [DEBUG] [Thread-15800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:31:06.752 [DEBUG] [Thread-15800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:31:06.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:31:06.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-11-12T12:31:06.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-11-12T12:31:06.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:31:06.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:31:06.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:31:06.789 [DEBUG] [Thread-15800] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:31:11.142 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:31:11.143 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:31:19.648 [DEBUG] [Thread-15802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:31:32.019 [DEBUG] [Thread-15803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:31:34.705 [DEBUG] [Thread-15804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:31:36.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:31:36.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:31:36.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-11-12T12:31:37.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 31, 32), 30.73, 12.97, 0.0, 14.5, 26.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:31:37.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:31:32
2025-11-12T12:31:37.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:31:37.750 [DEBUG] [Thread-15805] [transport.py] [_log()] starting thread (client mode): 0x1737c7f0
2025-11-12T12:31:37.750 [DEBUG] [Thread-15805] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:31:37.771 [DEBUG] [Thread-15805] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:31:37.771 [INFO] [Thread-15805] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:31:37.774 [DEBUG] [Thread-15805] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:31:37.774 [DEBUG] [Thread-15805] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:31:37.774 [DEBUG] [Thread-15805] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] client lang: <none>
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] server lang: <none>
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] kex follows: False
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] Compression: none
2025-11-12T12:31:37.775 [DEBUG] [Thread-15805] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:31:37.791 [DEBUG] [Thread-15805] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:31:37.791 [DEBUG] [Thread-15805] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:31:37.791 [DEBUG] [Thread-15805] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:31:37.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:31:37.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:31:37.792 [DEBUG] [Thread-15805] [transport.py] [_log()] userauth is OK
2025-11-12T12:31:37.792 [DEBUG] [Thread-15805] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:31:37.792 [DEBUG] [Thread-15805] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:31:37.792 [DEBUG] [Thread-15805] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:31:37.792 [DEBUG] [Thread-15805] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:31:37.804 [INFO] [Thread-15805] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:31:37.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:31:38.410 [DEBUG] [Thread-15805] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:31:38.411 [DEBUG] [Thread-15805] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:31:38.411 [DEBUG] [Thread-15805] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:31:38.451 [DEBUG] [Thread-15805] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:31:38.451 [DEBUG] [Thread-15805] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:31:38.454 [DEBUG] [Thread-15805] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:31:38.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:31:38.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:31:38.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:31:38.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:31:38.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:31:38.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:31:38.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:31:38.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:31:38.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:31:38.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.438283 -999.00  +26.10  18.75     18   +0.50 1 1 1 1 1   888    0 25.79 -26.82 ----- 24.0 18.8 287.5 32.1 32.1 -26.0 31.2 -24.1 30.6 -23.8 31.7 -23.9
2025-11-12T12:31:38.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:31:38.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:31:38.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.438283
2025-11-12T12:31:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:31:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:31:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:31:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:31:38.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:31:38.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:31:32', tmtdew=30.73, humidity=12.97, cloud=0.0, wind=14.5, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:31:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:31:38.480 [DEBUG] [Thread-15805] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:31:38.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:31:38.571 [DEBUG] [Thread-15808] [transport.py] [_log()] starting thread (client mode): 0x173bdc90
2025-11-12T12:31:38.571 [DEBUG] [Thread-15808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:31:38.588 [DEBUG] [Thread-15808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:31:38.589 [INFO] [Thread-15808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:31:38.600 [DEBUG] [Thread-15808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:31:38.600 [DEBUG] [Thread-15808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:31:38.600 [DEBUG] [Thread-15808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:31:38.601 [DEBUG] [Thread-15808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:31:38.601 [DEBUG] [Thread-15808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:31:38.601 [DEBUG] [Thread-15808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:31:38.601 [DEBUG] [Thread-15808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:31:38.601 [DEBUG] [Thread-15808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:31:38.601 [DEBUG] [Thread-15808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:31:38.601 [DEBUG] [Thread-15808] [transport.py] [_log()] client lang: <none>
2025-11-12T12:31:38.601 [DEBUG] [Thread-15808] [transport.py] [_log()] server lang: <none>
2025-11-12T12:31:38.602 [DEBUG] [Thread-15808] [transport.py] [_log()] kex follows: False
2025-11-12T12:31:38.602 [DEBUG] [Thread-15808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:31:38.602 [DEBUG] [Thread-15808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:31:38.602 [DEBUG] [Thread-15808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:31:38.602 [DEBUG] [Thread-15808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:31:38.602 [DEBUG] [Thread-15808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:31:38.602 [DEBUG] [Thread-15808] [transport.py] [_log()] Compression: none
2025-11-12T12:31:38.602 [DEBUG] [Thread-15808] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:31:38.662 [DEBUG] [Thread-15808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:31:38.662 [DEBUG] [Thread-15808] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:31:38.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:31:38.663 [DEBUG] [Thread-15808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:31:38.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:31:38.720 [DEBUG] [Thread-15808] [transport.py] [_log()] userauth is OK
2025-11-12T12:31:38.720 [DEBUG] [Thread-15808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:31:38.720 [DEBUG] [Thread-15808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:31:38.721 [DEBUG] [Thread-15808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:31:38.721 [DEBUG] [Thread-15808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:31:38.740 [INFO] [Thread-15808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:31:38.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:31:38.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:31:39.599 [DEBUG] [Thread-15808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:31:39.600 [DEBUG] [Thread-15808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:31:39.648 [DEBUG] [Thread-15808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:31:39.648 [DEBUG] [Thread-15808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:31:39.657 [DEBUG] [Thread-15808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:31:39.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:31:39.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-11-12T12:31:39.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-11-12T12:31:39.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:31:39.688 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:31:39.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:31:39.697 [DEBUG] [Thread-15808] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:31:49.738 [DEBUG] [Thread-15810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:32:04.799 [DEBUG] [Thread-15811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:32:09.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:32:09.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:32:09.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-11-12T12:32:10.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 32, 4), 30.99, 12.77, 0.0, 11.72, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:32:10.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:32:04
2025-11-12T12:32:10.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:32:10.616 [DEBUG] [Thread-15812] [transport.py] [_log()] starting thread (client mode): 0x173e8520
2025-11-12T12:32:10.616 [DEBUG] [Thread-15812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:32:10.637 [DEBUG] [Thread-15812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:32:10.637 [INFO] [Thread-15812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:32:10.640 [DEBUG] [Thread-15812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] client lang: <none>
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] server lang: <none>
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] kex follows: False
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] Compression: none
2025-11-12T12:32:10.641 [DEBUG] [Thread-15812] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:32:10.661 [DEBUG] [Thread-15812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:32:10.662 [DEBUG] [Thread-15812] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:32:10.663 [DEBUG] [Thread-15812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:32:10.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:32:10.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:32:10.666 [DEBUG] [Thread-15812] [transport.py] [_log()] userauth is OK
2025-11-12T12:32:10.666 [DEBUG] [Thread-15812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:32:10.666 [DEBUG] [Thread-15812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:32:10.666 [DEBUG] [Thread-15812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:32:10.666 [DEBUG] [Thread-15812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:32:10.681 [INFO] [Thread-15812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:32:10.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:32:11.285 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:32:11.285 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:32:11.305 [DEBUG] [Thread-15812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:32:11.305 [DEBUG] [Thread-15812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:32:11.305 [DEBUG] [Thread-15812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:32:11.346 [DEBUG] [Thread-15812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:32:11.346 [DEBUG] [Thread-15812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:32:11.348 [DEBUG] [Thread-15812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:32:11.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:32:11.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:32:11.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:32:11.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:32:11.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:32:11.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:32:11.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.438630 -999.00  +26.10  16.74     18   +0.50 1 1 1 1 1   888    0 25.56 -29.93 ----- 19.6 16.7 292.0 26.6 32.0 -25.6 31.2 -23.7 30.6 -24.6 31.6 -24.4
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.438630
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:32:11.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:32:04', tmtdew=30.99, humidity=12.77, cloud=0.0, wind=11.72, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:31:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:32:11.368 [DEBUG] [Thread-15812] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:32:11.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:32:11.459 [DEBUG] [Thread-15815] [transport.py] [_log()] starting thread (client mode): 0x1737db10
2025-11-12T12:32:11.459 [DEBUG] [Thread-15815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:32:11.475 [DEBUG] [Thread-15815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:32:11.475 [INFO] [Thread-15815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] client lang: <none>
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] server lang: <none>
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] kex follows: False
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] Compression: none
2025-11-12T12:32:11.483 [DEBUG] [Thread-15815] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:32:11.538 [DEBUG] [Thread-15815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:32:11.539 [DEBUG] [Thread-15815] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:32:11.539 [DEBUG] [Thread-15815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:32:11.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:32:11.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:32:11.595 [DEBUG] [Thread-15815] [transport.py] [_log()] userauth is OK
2025-11-12T12:32:11.595 [DEBUG] [Thread-15815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:32:11.595 [DEBUG] [Thread-15815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:32:11.595 [DEBUG] [Thread-15815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:32:11.595 [DEBUG] [Thread-15815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:32:11.613 [INFO] [Thread-15815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:32:11.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:32:11.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:32:12.491 [DEBUG] [Thread-15815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:32:12.491 [DEBUG] [Thread-15815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:32:12.540 [DEBUG] [Thread-15815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:32:12.540 [DEBUG] [Thread-15815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:32:12.548 [DEBUG] [Thread-15815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:32:12.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:32:12.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-11-12T12:32:12.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-11-12T12:32:12.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:32:12.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:32:12.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:32:12.583 [DEBUG] [Thread-15815] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:32:19.827 [DEBUG] [Thread-15817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:32:32.064 [DEBUG] [Thread-15818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:32:34.877 [DEBUG] [Thread-15819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:32:42.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:32:42.605 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:32:42.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-11-12T12:32:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 32, 36), 30.84, 12.71, 0.0, 29.62, 26.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:32:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:32:36
2025-11-12T12:32:43.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:32:43.500 [DEBUG] [Thread-15820] [transport.py] [_log()] starting thread (client mode): 0x173beda0
2025-11-12T12:32:43.500 [DEBUG] [Thread-15820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:32:43.520 [DEBUG] [Thread-15820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:32:43.520 [INFO] [Thread-15820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:32:43.523 [DEBUG] [Thread-15820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:32:43.523 [DEBUG] [Thread-15820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:32:43.523 [DEBUG] [Thread-15820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:32:43.523 [DEBUG] [Thread-15820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:32:43.523 [DEBUG] [Thread-15820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:32:43.523 [DEBUG] [Thread-15820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:32:43.523 [DEBUG] [Thread-15820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] client lang: <none>
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] server lang: <none>
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] kex follows: False
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] Compression: none
2025-11-12T12:32:43.524 [DEBUG] [Thread-15820] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:32:43.542 [DEBUG] [Thread-15820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:32:43.543 [DEBUG] [Thread-15820] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:32:43.544 [DEBUG] [Thread-15820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:32:43.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:32:43.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:32:43.547 [DEBUG] [Thread-15820] [transport.py] [_log()] userauth is OK
2025-11-12T12:32:43.547 [DEBUG] [Thread-15820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:32:43.547 [DEBUG] [Thread-15820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:32:43.548 [DEBUG] [Thread-15820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:32:43.548 [DEBUG] [Thread-15820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:32:43.580 [INFO] [Thread-15820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:32:43.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:32:44.196 [DEBUG] [Thread-15820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:32:44.196 [DEBUG] [Thread-15820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:32:44.197 [DEBUG] [Thread-15820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:32:44.237 [DEBUG] [Thread-15820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:32:44.237 [DEBUG] [Thread-15820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:32:44.240 [DEBUG] [Thread-15820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:32:44.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:32:44.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:32:44.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:32:44.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:32:44.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:32:44.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:32:44.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:32:44.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:32:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:32:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.438978 -999.00  +26.50  18.86     18   +0.90 1 1 1 1 1   888    0 24.99 -36.36 ----- 20.6 18.9 277.6 22.6 32.1 -24.6 31.3 -24.7 30.9 -22.7 31.8 -22.9
2025-11-12T12:32:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:32:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:32:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.438978
2025-11-12T12:32:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:32:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:32:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:32:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:32:44.265 [DEBUG] [Thread-15820] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:32:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:32:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:32:36', tmtdew=30.84, humidity=12.71, cloud=0.0, wind=29.62, temperature=26.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:32:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:32:44.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:32:44.358 [DEBUG] [Thread-15823] [transport.py] [_log()] starting thread (client mode): 0x14957460
2025-11-12T12:32:44.358 [DEBUG] [Thread-15823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:32:44.375 [DEBUG] [Thread-15823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:32:44.375 [INFO] [Thread-15823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:32:44.383 [DEBUG] [Thread-15823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:32:44.383 [DEBUG] [Thread-15823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:32:44.383 [DEBUG] [Thread-15823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] client lang: <none>
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] server lang: <none>
2025-11-12T12:32:44.384 [DEBUG] [Thread-15823] [transport.py] [_log()] kex follows: False
2025-11-12T12:32:44.385 [DEBUG] [Thread-15823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:32:44.385 [DEBUG] [Thread-15823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:32:44.385 [DEBUG] [Thread-15823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:32:44.385 [DEBUG] [Thread-15823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:32:44.385 [DEBUG] [Thread-15823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:32:44.385 [DEBUG] [Thread-15823] [transport.py] [_log()] Compression: none
2025-11-12T12:32:44.385 [DEBUG] [Thread-15823] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:32:44.440 [DEBUG] [Thread-15823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:32:44.440 [DEBUG] [Thread-15823] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:32:44.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:32:44.442 [DEBUG] [Thread-15823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:32:44.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:32:44.496 [DEBUG] [Thread-15823] [transport.py] [_log()] userauth is OK
2025-11-12T12:32:44.496 [DEBUG] [Thread-15823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:32:44.496 [DEBUG] [Thread-15823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:32:44.496 [DEBUG] [Thread-15823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:32:44.497 [DEBUG] [Thread-15823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:32:44.514 [INFO] [Thread-15823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:32:44.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:32:44.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:32:45.359 [DEBUG] [Thread-15823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:32:45.360 [DEBUG] [Thread-15823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:32:45.408 [DEBUG] [Thread-15823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:32:45.408 [DEBUG] [Thread-15823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:32:45.417 [DEBUG] [Thread-15823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:32:45.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:32:45.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-11-12T12:32:45.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-11-12T12:32:45.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:32:45.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:32:45.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:32:45.453 [DEBUG] [Thread-15823] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:32:49.911 [DEBUG] [Thread-15825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:33:04.952 [DEBUG] [Thread-15826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:33:11.426 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:33:11.427 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:33:15.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:33:15.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:33:15.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:33:16.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 33, 8), 31.01, 12.57, 0.0, 26.11, 27.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:33:16.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:33:08
2025-11-12T12:33:16.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:33:16.370 [DEBUG] [Thread-15827] [transport.py] [_log()] starting thread (client mode): 0x14956740
2025-11-12T12:33:16.370 [DEBUG] [Thread-15827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:33:16.392 [DEBUG] [Thread-15827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:33:16.392 [INFO] [Thread-15827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:33:16.395 [DEBUG] [Thread-15827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] client lang: <none>
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] server lang: <none>
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] kex follows: False
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] Compression: none
2025-11-12T12:33:16.396 [DEBUG] [Thread-15827] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:33:16.414 [DEBUG] [Thread-15827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:33:16.415 [DEBUG] [Thread-15827] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:33:16.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:33:16.416 [DEBUG] [Thread-15827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:33:16.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:33:16.417 [DEBUG] [Thread-15827] [transport.py] [_log()] userauth is OK
2025-11-12T12:33:16.418 [DEBUG] [Thread-15827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:33:16.418 [DEBUG] [Thread-15827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:33:16.418 [DEBUG] [Thread-15827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:33:16.418 [DEBUG] [Thread-15827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:33:16.451 [INFO] [Thread-15827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:33:16.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:33:17.092 [DEBUG] [Thread-15827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:33:17.092 [DEBUG] [Thread-15827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:33:17.092 [DEBUG] [Thread-15827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:33:17.140 [DEBUG] [Thread-15827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:33:17.140 [DEBUG] [Thread-15827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:33:17.144 [DEBUG] [Thread-15827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:33:17.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:33:17.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:33:17.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:33:17.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:33:17.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:33:17.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:33:17.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:33:17.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:33:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:33:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.439325 -999.00  +26.60  21.11     18   +0.80 1 1 1 1 1   888    0 24.81 -39.50 ----- 28.4 21.1 295.6 27.6 32.2 -24.9 31.3 -24.1 30.6 -27.3 31.8 -24.2
2025-11-12T12:33:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:33:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:33:17.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.439325
2025-11-12T12:33:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:33:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:33:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:33:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:33:17.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:33:17.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:33:08', tmtdew=31.01, humidity=12.57, cloud=0.0, wind=26.11, temperature=27.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:32:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:33:17.172 [DEBUG] [Thread-15827] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:33:17.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:33:17.268 [DEBUG] [Thread-15830] [transport.py] [_log()] starting thread (client mode): 0x17398c10
2025-11-12T12:33:17.269 [DEBUG] [Thread-15830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:33:17.294 [DEBUG] [Thread-15830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:33:17.295 [INFO] [Thread-15830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:33:17.302 [DEBUG] [Thread-15830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] client lang: <none>
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] server lang: <none>
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] kex follows: False
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:33:17.303 [DEBUG] [Thread-15830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:33:17.304 [DEBUG] [Thread-15830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:33:17.304 [DEBUG] [Thread-15830] [transport.py] [_log()] Compression: none
2025-11-12T12:33:17.304 [DEBUG] [Thread-15830] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:33:17.360 [DEBUG] [Thread-15830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:33:17.361 [DEBUG] [Thread-15830] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:33:17.362 [DEBUG] [Thread-15830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:33:17.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:33:17.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:33:17.416 [DEBUG] [Thread-15830] [transport.py] [_log()] userauth is OK
2025-11-12T12:33:17.417 [DEBUG] [Thread-15830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:33:17.417 [DEBUG] [Thread-15830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:33:17.417 [DEBUG] [Thread-15830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:33:17.417 [DEBUG] [Thread-15830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:33:17.436 [INFO] [Thread-15830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:33:17.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:33:17.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:33:18.327 [DEBUG] [Thread-15830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:33:18.327 [DEBUG] [Thread-15830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:33:18.374 [DEBUG] [Thread-15830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:33:18.375 [DEBUG] [Thread-15830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:33:18.386 [DEBUG] [Thread-15830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:33:18.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:33:18.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-11-12T12:33:18.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-11-12T12:33:18.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:33:18.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:33:18.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:33:18.423 [DEBUG] [Thread-15830] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:33:19.991 [DEBUG] [Thread-15832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:33:32.104 [DEBUG] [Thread-15833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:33:35.049 [DEBUG] [Thread-15834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:33:48.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:33:48.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:33:48.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-11-12T12:33:49.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 33, 40), 30.45, 13.24, 0.0, 24.44, 26.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:33:49.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:33:40
2025-11-12T12:33:49.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:33:49.355 [DEBUG] [Thread-15835] [transport.py] [_log()] starting thread (client mode): 0x1737d0f0
2025-11-12T12:33:49.356 [DEBUG] [Thread-15835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:33:49.376 [DEBUG] [Thread-15835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:33:49.376 [INFO] [Thread-15835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] client lang: <none>
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] server lang: <none>
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] kex follows: False
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] Compression: none
2025-11-12T12:33:49.379 [DEBUG] [Thread-15835] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:33:49.398 [DEBUG] [Thread-15835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:33:49.399 [DEBUG] [Thread-15835] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:33:49.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:33:49.400 [DEBUG] [Thread-15835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:33:49.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:33:49.402 [DEBUG] [Thread-15835] [transport.py] [_log()] userauth is OK
2025-11-12T12:33:49.402 [DEBUG] [Thread-15835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:33:49.402 [DEBUG] [Thread-15835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:33:49.402 [DEBUG] [Thread-15835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:33:49.402 [DEBUG] [Thread-15835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:33:49.424 [INFO] [Thread-15835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:33:49.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:33:50.056 [DEBUG] [Thread-15835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:33:50.056 [DEBUG] [Thread-15835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:33:50.056 [DEBUG] [Thread-15835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:33:50.085 [DEBUG] [Thread-15837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:33:50.096 [DEBUG] [Thread-15835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:33:50.097 [DEBUG] [Thread-15835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:33:50.099 [DEBUG] [Thread-15835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:33:50.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:33:50.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:33:50.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:33:50.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:33:50.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:33:50.122 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:33:50.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:33:50.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:33:50.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:33:50.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.440019 -999.00  +25.50  21.95     19   +0.30 1 1 1 1 1   888    0 24.80 -39.84 ----- 19.6 21.9 283.8 34.7 31.7 -28.1 30.9 -25.1 30.1 -28.7 31.5 -26.2
2025-11-12T12:33:50.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:33:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:33:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.440019
2025-11-12T12:33:50.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:33:50.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:33:50.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:33:50.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:33:50.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:33:50.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:33:40', tmtdew=30.45, humidity=13.24, cloud=0.0, wind=24.44, temperature=26.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:33:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:33:50.124 [DEBUG] [Thread-15835] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:33:50.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:33:50.215 [DEBUG] [Thread-15839] [transport.py] [_log()] starting thread (client mode): 0x173fabf0
2025-11-12T12:33:50.215 [DEBUG] [Thread-15839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:33:50.231 [DEBUG] [Thread-15839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:33:50.231 [INFO] [Thread-15839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:33:50.239 [DEBUG] [Thread-15839] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:33:50.239 [DEBUG] [Thread-15839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:33:50.239 [DEBUG] [Thread-15839] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:33:50.239 [DEBUG] [Thread-15839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:33:50.239 [DEBUG] [Thread-15839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:33:50.239 [DEBUG] [Thread-15839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:33:50.240 [DEBUG] [Thread-15839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:33:50.240 [DEBUG] [Thread-15839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:33:50.240 [DEBUG] [Thread-15839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:33:50.240 [DEBUG] [Thread-15839] [transport.py] [_log()] client lang: <none>
2025-11-12T12:33:50.240 [DEBUG] [Thread-15839] [transport.py] [_log()] server lang: <none>
2025-11-12T12:33:50.240 [DEBUG] [Thread-15839] [transport.py] [_log()] kex follows: False
2025-11-12T12:33:50.240 [DEBUG] [Thread-15839] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:33:50.240 [DEBUG] [Thread-15839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:33:50.241 [DEBUG] [Thread-15839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:33:50.241 [DEBUG] [Thread-15839] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:33:50.241 [DEBUG] [Thread-15839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:33:50.241 [DEBUG] [Thread-15839] [transport.py] [_log()] Compression: none
2025-11-12T12:33:50.241 [DEBUG] [Thread-15839] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:33:50.296 [DEBUG] [Thread-15839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:33:50.297 [DEBUG] [Thread-15839] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:33:50.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:33:50.298 [DEBUG] [Thread-15839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:33:50.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:33:50.356 [DEBUG] [Thread-15839] [transport.py] [_log()] userauth is OK
2025-11-12T12:33:50.356 [DEBUG] [Thread-15839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:33:50.357 [DEBUG] [Thread-15839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:33:50.357 [DEBUG] [Thread-15839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:33:50.357 [DEBUG] [Thread-15839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:33:50.382 [INFO] [Thread-15839] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:33:50.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:33:50.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:33:51.404 [DEBUG] [Thread-15839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:33:51.405 [DEBUG] [Thread-15839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:33:51.452 [DEBUG] [Thread-15839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:33:51.453 [DEBUG] [Thread-15839] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:33:51.461 [DEBUG] [Thread-15839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:33:51.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:33:51.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-11-12T12:33:51.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:33:51.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:33:51.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:33:51.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:33:51.495 [DEBUG] [Thread-15839] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:34:05.122 [DEBUG] [Thread-15841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:34:11.568 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:34:11.569 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:34:20.172 [DEBUG] [Thread-15842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:34:21.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:34:21.518 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:34:21.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-11-12T12:34:22.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 34, 12), 30.61, 13.12, 0.0, 22.71, 26.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:34:22.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:34:12
2025-11-12T12:34:22.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:34:22.425 [DEBUG] [Thread-15843] [transport.py] [_log()] starting thread (client mode): 0x17346560
2025-11-12T12:34:22.425 [DEBUG] [Thread-15843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:34:22.446 [DEBUG] [Thread-15843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:34:22.446 [INFO] [Thread-15843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] client lang: <none>
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] server lang: <none>
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] kex follows: False
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] Compression: none
2025-11-12T12:34:22.449 [DEBUG] [Thread-15843] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:34:22.466 [DEBUG] [Thread-15843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:34:22.467 [DEBUG] [Thread-15843] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:34:22.468 [DEBUG] [Thread-15843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:34:22.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:34:22.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:34:22.469 [DEBUG] [Thread-15843] [transport.py] [_log()] userauth is OK
2025-11-12T12:34:22.470 [DEBUG] [Thread-15843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:34:22.470 [DEBUG] [Thread-15843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:34:22.470 [DEBUG] [Thread-15843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:34:22.470 [DEBUG] [Thread-15843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:34:22.494 [INFO] [Thread-15843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:34:22.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:34:23.129 [DEBUG] [Thread-15843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:34:23.129 [DEBUG] [Thread-15843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:34:23.129 [DEBUG] [Thread-15843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:34:23.170 [DEBUG] [Thread-15843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:34:23.170 [DEBUG] [Thread-15843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:34:23.173 [DEBUG] [Thread-15843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:34:23.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:34:23.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:34:23.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:34:23.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:34:23.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:34:23.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:34:23.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:34:23.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:34:23.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:34:23.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.440366 -999.00  +25.50  20.45     19   +0.50 1 1 1 1 1   888    0 25.29 -43.42 ----- 22.2 20.4 279.6 26.8 31.6 -27.0 30.9 -25.6 30.2 -28.0 31.3 -25.4
2025-11-12T12:34:23.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:34:23.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:34:23.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.440366
2025-11-12T12:34:23.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:34:23.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:34:23.200 [DEBUG] [Thread-15843] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:34:23.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:34:23.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:34:23.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:34:23.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:34:12', tmtdew=30.61, humidity=13.12, cloud=0.0, wind=22.71, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:34:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:34:23.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:34:23.293 [DEBUG] [Thread-15846] [transport.py] [_log()] starting thread (client mode): 0x17398940
2025-11-12T12:34:23.293 [DEBUG] [Thread-15846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:34:23.308 [DEBUG] [Thread-15846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:34:23.309 [INFO] [Thread-15846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:34:23.316 [DEBUG] [Thread-15846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] client lang: <none>
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] server lang: <none>
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] kex follows: False
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:34:23.317 [DEBUG] [Thread-15846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:34:23.318 [DEBUG] [Thread-15846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:34:23.318 [DEBUG] [Thread-15846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:34:23.318 [DEBUG] [Thread-15846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:34:23.318 [DEBUG] [Thread-15846] [transport.py] [_log()] Compression: none
2025-11-12T12:34:23.318 [DEBUG] [Thread-15846] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:34:23.380 [DEBUG] [Thread-15846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:34:23.381 [DEBUG] [Thread-15846] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:34:23.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:34:23.382 [DEBUG] [Thread-15846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:34:23.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:34:23.440 [DEBUG] [Thread-15846] [transport.py] [_log()] userauth is OK
2025-11-12T12:34:23.440 [DEBUG] [Thread-15846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:34:23.440 [DEBUG] [Thread-15846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:34:23.441 [DEBUG] [Thread-15846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:34:23.441 [DEBUG] [Thread-15846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:34:23.460 [INFO] [Thread-15846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:34:23.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:34:23.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:34:24.656 [DEBUG] [Thread-15846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:34:24.656 [DEBUG] [Thread-15846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:34:24.703 [DEBUG] [Thread-15846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:34:24.703 [DEBUG] [Thread-15846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:34:24.712 [DEBUG] [Thread-15846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:34:24.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:34:24.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-11-12T12:34:24.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-11-12T12:34:24.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:34:24.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:34:24.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:34:24.747 [DEBUG] [Thread-15846] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:34:32.150 [DEBUG] [Thread-15848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:34:35.207 [DEBUG] [Thread-15849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:34:50.265 [DEBUG] [Thread-15850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:34:54.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:34:54.770 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:34:54.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-11-12T12:34:55.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 34, 44), 30.6, 13.14, 0.0, 23.01, 26.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:34:55.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:34:44
2025-11-12T12:34:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:34:55.673 [DEBUG] [Thread-15851] [transport.py] [_log()] starting thread (client mode): 0x19ddbfa0
2025-11-12T12:34:55.674 [DEBUG] [Thread-15851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:34:55.693 [DEBUG] [Thread-15851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:34:55.694 [INFO] [Thread-15851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] client lang: <none>
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] server lang: <none>
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] kex follows: False
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] Compression: none
2025-11-12T12:34:55.697 [DEBUG] [Thread-15851] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:34:55.714 [DEBUG] [Thread-15851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:34:55.715 [DEBUG] [Thread-15851] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:34:55.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:34:55.716 [DEBUG] [Thread-15851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:34:55.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:34:55.717 [DEBUG] [Thread-15851] [transport.py] [_log()] userauth is OK
2025-11-12T12:34:55.718 [DEBUG] [Thread-15851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:34:55.718 [DEBUG] [Thread-15851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:34:55.718 [DEBUG] [Thread-15851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:34:55.718 [DEBUG] [Thread-15851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:34:55.737 [INFO] [Thread-15851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:34:55.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:34:56.355 [DEBUG] [Thread-15851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:34:56.356 [DEBUG] [Thread-15851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:34:56.356 [DEBUG] [Thread-15851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:34:56.396 [DEBUG] [Thread-15851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:34:56.396 [DEBUG] [Thread-15851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:34:56.399 [DEBUG] [Thread-15851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:34:56.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:34:56.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:34:56.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:34:56.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:34:56.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:34:56.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:34:56.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:34:56.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:34:56.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:34:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.440714 -999.00  +25.60  27.09     19   +0.40 1 1 1 1 1   888    0 24.84 -44.66 ----- 27.9 27.1 272.8 30.9 31.6 -27.8 30.9 -24.8 29.9 -27.1 31.2 -25.0
2025-11-12T12:34:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:34:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:34:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.440714
2025-11-12T12:34:56.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:34:56.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:34:56.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:34:56.421 [DEBUG] [Thread-15851] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:34:56.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:34:56.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:34:56.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:34:44', tmtdew=30.6, humidity=13.14, cloud=0.0, wind=23.01, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:34:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:34:56.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:34:56.510 [DEBUG] [Thread-15854] [transport.py] [_log()] starting thread (client mode): 0x19dd9120
2025-11-12T12:34:56.511 [DEBUG] [Thread-15854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:34:56.528 [DEBUG] [Thread-15854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:34:56.528 [INFO] [Thread-15854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:34:56.535 [DEBUG] [Thread-15854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] client lang: <none>
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] server lang: <none>
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] kex follows: False
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:34:56.536 [DEBUG] [Thread-15854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:34:56.537 [DEBUG] [Thread-15854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:34:56.537 [DEBUG] [Thread-15854] [transport.py] [_log()] Compression: none
2025-11-12T12:34:56.537 [DEBUG] [Thread-15854] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:34:56.600 [DEBUG] [Thread-15854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:34:56.601 [DEBUG] [Thread-15854] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:34:56.601 [DEBUG] [Thread-15854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:34:56.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:34:56.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:34:56.656 [DEBUG] [Thread-15854] [transport.py] [_log()] userauth is OK
2025-11-12T12:34:56.656 [DEBUG] [Thread-15854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:34:56.656 [DEBUG] [Thread-15854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:34:56.657 [DEBUG] [Thread-15854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:34:56.657 [DEBUG] [Thread-15854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:34:56.677 [INFO] [Thread-15854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:34:56.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:34:56.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:34:57.749 [DEBUG] [Thread-15854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:34:57.750 [DEBUG] [Thread-15854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:34:57.798 [DEBUG] [Thread-15854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:34:57.798 [DEBUG] [Thread-15854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:34:57.810 [DEBUG] [Thread-15854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:34:57.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:34: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')
2025-11-12T12:34:57.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-11-12T12:34:57.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:34:57.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:34:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:34:57.880 [DEBUG] [Thread-15854] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:35:05.297 [DEBUG] [Thread-15856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:35:11.711 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:35:11.712 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:35:20.348 [DEBUG] [Thread-15857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:35:27.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:35:27.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:35:27.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-11-12T12:35:28.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 35, 16), 30.34, 13.35, 0.0, 24.28, 26.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:35:28.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:35:16
2025-11-12T12:35:28.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:35:28.862 [DEBUG] [Thread-15858] [transport.py] [_log()] starting thread (client mode): 0x1739bdf0
2025-11-12T12:35:28.863 [DEBUG] [Thread-15858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:35:28.882 [DEBUG] [Thread-15858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:35:28.882 [INFO] [Thread-15858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:35:28.885 [DEBUG] [Thread-15858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:35:28.885 [DEBUG] [Thread-15858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:35:28.885 [DEBUG] [Thread-15858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:35:28.885 [DEBUG] [Thread-15858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] client lang: <none>
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] server lang: <none>
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] kex follows: False
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] Compression: none
2025-11-12T12:35:28.886 [DEBUG] [Thread-15858] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:35:28.906 [DEBUG] [Thread-15858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:35:28.906 [DEBUG] [Thread-15858] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:35:28.906 [DEBUG] [Thread-15858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:35:28.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:35:28.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:35:28.907 [DEBUG] [Thread-15858] [transport.py] [_log()] userauth is OK
2025-11-12T12:35:28.907 [DEBUG] [Thread-15858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:35:28.907 [DEBUG] [Thread-15858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:35:28.907 [DEBUG] [Thread-15858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:35:28.907 [DEBUG] [Thread-15858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:35:28.924 [INFO] [Thread-15858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:35:28.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:35:29.546 [DEBUG] [Thread-15858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:35:29.547 [DEBUG] [Thread-15858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:35:29.547 [DEBUG] [Thread-15858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:35:29.588 [DEBUG] [Thread-15858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:35:29.588 [DEBUG] [Thread-15858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:35:29.592 [DEBUG] [Thread-15858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:35:29.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:35:29.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:35:29.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:35:29.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:35:29.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:35:29.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:35:29.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:35:29.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:35:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:35:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.441061 -999.00  +25.30  23.81     19   +0.10 1 1 1 1 1   888    0 24.46 -52.57 ----- 24.5 23.8 273.3 32.1 31.4 -28.2 30.8 -25.5 29.8 -27.3 31.1 -27.1
2025-11-12T12:35:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:35:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:35:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.441061
2025-11-12T12:35:29.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:35:29.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:35:29.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:35:29.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:35:29.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:35:29.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:35:16', tmtdew=30.34, humidity=13.35, cloud=0.0, wind=24.28, temperature=26.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:35:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:35:29.618 [DEBUG] [Thread-15858] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:35:29.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:35:29.713 [DEBUG] [Thread-15861] [transport.py] [_log()] starting thread (client mode): 0x173bcf70
2025-11-12T12:35:29.714 [DEBUG] [Thread-15861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:35:29.729 [DEBUG] [Thread-15861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:35:29.730 [INFO] [Thread-15861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] client lang: <none>
2025-11-12T12:35:29.738 [DEBUG] [Thread-15861] [transport.py] [_log()] server lang: <none>
2025-11-12T12:35:29.739 [DEBUG] [Thread-15861] [transport.py] [_log()] kex follows: False
2025-11-12T12:35:29.739 [DEBUG] [Thread-15861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:35:29.739 [DEBUG] [Thread-15861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:35:29.739 [DEBUG] [Thread-15861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:35:29.739 [DEBUG] [Thread-15861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:35:29.739 [DEBUG] [Thread-15861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:35:29.739 [DEBUG] [Thread-15861] [transport.py] [_log()] Compression: none
2025-11-12T12:35:29.739 [DEBUG] [Thread-15861] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:35:29.796 [DEBUG] [Thread-15861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:35:29.797 [DEBUG] [Thread-15861] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:35:29.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:35:29.798 [DEBUG] [Thread-15861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:35:29.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:35:29.860 [DEBUG] [Thread-15861] [transport.py] [_log()] userauth is OK
2025-11-12T12:35:29.860 [DEBUG] [Thread-15861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:35:29.860 [DEBUG] [Thread-15861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:35:29.860 [DEBUG] [Thread-15861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:35:29.861 [DEBUG] [Thread-15861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:35:29.879 [INFO] [Thread-15861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:35:29.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:35:29.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:35:30.905 [DEBUG] [Thread-15861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:35:30.905 [DEBUG] [Thread-15861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:35:30.952 [DEBUG] [Thread-15861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:35:30.953 [DEBUG] [Thread-15861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:35:30.962 [DEBUG] [Thread-15861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:35:30.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:35:30.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')
2025-11-12T12:35:30.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-11-12T12:35:30.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:35:30.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:35:30.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:35:30.999 [DEBUG] [Thread-15861] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:35:32.190 [DEBUG] [Thread-15863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:35:35.382 [DEBUG] [Thread-15864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:35:50.443 [DEBUG] [Thread-15865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:36:01.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:36:01.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:36:01.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-11-12T12:36:01.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 35, 48), 31.1, 12.52, 0.0, 27.95, 26.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:36:01.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:35:48
2025-11-12T12:36:01.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:36:01.952 [DEBUG] [Thread-15866] [transport.py] [_log()] starting thread (client mode): 0x173bc370
2025-11-12T12:36:01.952 [DEBUG] [Thread-15866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:36:01.971 [DEBUG] [Thread-15866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:36:01.972 [INFO] [Thread-15866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:36:01.974 [DEBUG] [Thread-15866] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] client lang: <none>
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] server lang: <none>
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] kex follows: False
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] Compression: none
2025-11-12T12:36:01.975 [DEBUG] [Thread-15866] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:36:01.992 [DEBUG] [Thread-15866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:36:01.993 [DEBUG] [Thread-15866] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:36:01.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:36:01.994 [DEBUG] [Thread-15866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:36:01.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:36:01.996 [DEBUG] [Thread-15866] [transport.py] [_log()] userauth is OK
2025-11-12T12:36:01.996 [DEBUG] [Thread-15866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:36:01.997 [DEBUG] [Thread-15866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:36:01.997 [DEBUG] [Thread-15866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:36:01.997 [DEBUG] [Thread-15866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:36:02.021 [INFO] [Thread-15866] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:36:02.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:36:02.680 [DEBUG] [Thread-15866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:36:02.680 [DEBUG] [Thread-15866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:36:02.680 [DEBUG] [Thread-15866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:36:02.721 [DEBUG] [Thread-15866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:36:02.721 [DEBUG] [Thread-15866] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:36:02.723 [DEBUG] [Thread-15866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:36:02.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:36:02.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:36:02.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:36:02.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:36:02.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:36:02.743 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:36:02.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.441408 -999.00  +25.80  18.88     19   +0.40 1 1 1 1 1   888    0 23.93 -62.27 ----- 17.9 18.9 275.5 32.9 31.4 -27.3 30.9 -24.1 -999.0 -999.0 31.1 -25.1
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.441408
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:36:02.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:35:48', tmtdew=31.1, humidity=12.52, cloud=0.0, wind=27.95, temperature=26.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:35:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:36:02.744 [DEBUG] [Thread-15866] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:36:02.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:36:02.829 [DEBUG] [Thread-15869] [transport.py] [_log()] starting thread (client mode): 0x17398520
2025-11-12T12:36:02.829 [DEBUG] [Thread-15869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:36:02.844 [DEBUG] [Thread-15869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:36:02.844 [INFO] [Thread-15869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] client lang: <none>
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] server lang: <none>
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] kex follows: False
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:36:02.853 [DEBUG] [Thread-15869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:36:02.854 [DEBUG] [Thread-15869] [transport.py] [_log()] Compression: none
2025-11-12T12:36:02.854 [DEBUG] [Thread-15869] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:36:02.912 [DEBUG] [Thread-15869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:36:02.912 [DEBUG] [Thread-15869] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:36:02.912 [DEBUG] [Thread-15869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:36:02.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:36:02.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:36:02.967 [DEBUG] [Thread-15869] [transport.py] [_log()] userauth is OK
2025-11-12T12:36:02.967 [DEBUG] [Thread-15869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:36:02.967 [DEBUG] [Thread-15869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:36:02.967 [DEBUG] [Thread-15869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:36:02.967 [DEBUG] [Thread-15869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:36:02.984 [INFO] [Thread-15869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:36:02.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:36:02.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:36:03.934 [DEBUG] [Thread-15869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:36:03.934 [DEBUG] [Thread-15869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:36:03.982 [DEBUG] [Thread-15869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:36:03.982 [DEBUG] [Thread-15869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:36:03.990 [DEBUG] [Thread-15869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:36:03.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:36:03.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-11-12T12:36:04.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:36:04.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:36:04.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:36:04.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:36:04.022 [DEBUG] [Thread-15869] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:36:05.476 [DEBUG] [Thread-15871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:36:11.853 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:36:11.854 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:36:20.514 [DEBUG] [Thread-15872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:36:32.224 [DEBUG] [Thread-15873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:36:34.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:36:34.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:36:34.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:36:34.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 36, 20), 31.9, 11.88, 0.0, 29.87, 26.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:36:34.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:36:20
2025-11-12T12:36:34.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:36:34.965 [DEBUG] [Thread-15874] [transport.py] [_log()] starting thread (client mode): 0x19dd95d0
2025-11-12T12:36:34.966 [DEBUG] [Thread-15874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:36:34.982 [DEBUG] [Thread-15874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:36:34.983 [INFO] [Thread-15874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] client lang: <none>
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] server lang: <none>
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] kex follows: False
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] Compression: none
2025-11-12T12:36:34.985 [DEBUG] [Thread-15874] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:36:35.007 [DEBUG] [Thread-15874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:36:35.007 [DEBUG] [Thread-15874] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:36:35.008 [DEBUG] [Thread-15874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:36:35.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:36:35.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:36:35.010 [DEBUG] [Thread-15874] [transport.py] [_log()] userauth is OK
2025-11-12T12:36:35.010 [DEBUG] [Thread-15874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:36:35.010 [DEBUG] [Thread-15874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:36:35.010 [DEBUG] [Thread-15874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:36:35.010 [DEBUG] [Thread-15874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:36:35.028 [INFO] [Thread-15874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:36:35.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:36:35.548 [DEBUG] [Thread-15876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:36:35.612 [DEBUG] [Thread-15874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:36:35.613 [DEBUG] [Thread-15874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:36:35.613 [DEBUG] [Thread-15874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:36:35.654 [DEBUG] [Thread-15874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:36:35.654 [DEBUG] [Thread-15874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:36:35.657 [DEBUG] [Thread-15874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:36:35.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:36:35.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:36:35.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:36:35.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:36:35.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:36:35.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:36:35.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:36:35.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:36:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:36:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.441755 -999.00  +26.60  25.24     18   +0.60 1 1 1 1 1   888    0 24.18 -66.10 ----- 22.8 25.2 271.4 28.0 31.7 -24.8 30.9 -24.3 30.4 -22.6 31.2 -23.6
2025-11-12T12:36:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:36:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:36:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.441755
2025-11-12T12:36:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:36:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:36:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:36:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:36:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:36:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:36:20', tmtdew=31.9, humidity=11.88, cloud=0.0, wind=29.87, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:36:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:36:35.678 [DEBUG] [Thread-15874] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:36:35.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:36:35.775 [DEBUG] [Thread-15878] [transport.py] [_log()] starting thread (client mode): 0x173bc460
2025-11-12T12:36:35.775 [DEBUG] [Thread-15878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:36:35.792 [DEBUG] [Thread-15878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:36:35.792 [INFO] [Thread-15878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:36:35.800 [DEBUG] [Thread-15878] [transport.py] [_log()] client lang: <none>
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] server lang: <none>
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] kex follows: False
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] Compression: none
2025-11-12T12:36:35.801 [DEBUG] [Thread-15878] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:36:35.869 [DEBUG] [Thread-15878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:36:35.870 [DEBUG] [Thread-15878] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:36:35.870 [DEBUG] [Thread-15878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:36:35.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:36:35.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:36:35.927 [DEBUG] [Thread-15878] [transport.py] [_log()] userauth is OK
2025-11-12T12:36:35.928 [DEBUG] [Thread-15878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:36:35.928 [DEBUG] [Thread-15878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:36:35.928 [DEBUG] [Thread-15878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:36:35.928 [DEBUG] [Thread-15878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:36:35.947 [INFO] [Thread-15878] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:36:35.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:36:35.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:36:36.863 [DEBUG] [Thread-15878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:36:36.863 [DEBUG] [Thread-15878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:36:36.911 [DEBUG] [Thread-15878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:36:36.912 [DEBUG] [Thread-15878] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:36:36.927 [DEBUG] [Thread-15878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:36:36.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:36:36.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-11-12T12:36:36.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-11-12T12:36:36.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:36:36.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:36:36.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:36:36.966 [DEBUG] [Thread-15878] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:36:50.581 [DEBUG] [Thread-15880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:37:05.629 [DEBUG] [Thread-15881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:37:06.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:37:06.989 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:37:06.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-11-12T12:37:07.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 36, 52), 32.57, 11.6, 0.0, 27.82, 27.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:37:07.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:36:52
2025-11-12T12:37:07.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:37:07.911 [DEBUG] [Thread-15882] [transport.py] [_log()] starting thread (client mode): 0x17399120
2025-11-12T12:37:07.911 [DEBUG] [Thread-15882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:37:07.931 [DEBUG] [Thread-15882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:37:07.931 [INFO] [Thread-15882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:37:07.934 [DEBUG] [Thread-15882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:37:07.934 [DEBUG] [Thread-15882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] client lang: <none>
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] server lang: <none>
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] kex follows: False
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:37:07.935 [DEBUG] [Thread-15882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:37:07.936 [DEBUG] [Thread-15882] [transport.py] [_log()] Compression: none
2025-11-12T12:37:07.936 [DEBUG] [Thread-15882] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:37:07.954 [DEBUG] [Thread-15882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:37:07.955 [DEBUG] [Thread-15882] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:37:07.956 [DEBUG] [Thread-15882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:37:07.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:37:07.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:37:07.958 [DEBUG] [Thread-15882] [transport.py] [_log()] userauth is OK
2025-11-12T12:37:07.959 [DEBUG] [Thread-15882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:37:07.959 [DEBUG] [Thread-15882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:37:07.959 [DEBUG] [Thread-15882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:37:07.959 [DEBUG] [Thread-15882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:37:07.983 [INFO] [Thread-15882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:37:07.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:37:08.533 [DEBUG] [Thread-15882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:37:08.533 [DEBUG] [Thread-15882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:37:08.533 [DEBUG] [Thread-15882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:37:08.573 [DEBUG] [Thread-15882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:37:08.574 [DEBUG] [Thread-15882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:37:08.577 [DEBUG] [Thread-15882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:37:08.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:37:08.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:37:08.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:37:08.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:37:08.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:37:08.600 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:37:08.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:37:08.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:37:08.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:37:08.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.442103 -999.00  +26.90  26.45     16   -0.30 1 1 1 1 1   888    0 24.27 -59.97 ----- 26.5 26.4 288.8 30.4 31.8 -24.3 31.0 -25.6 30.3 -30.2 31.4 -23.1
2025-11-12T12:37:08.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:37:08.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:37:08.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.442103
2025-11-12T12:37:08.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:37:08.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:37:08.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:37:08.602 [DEBUG] [Thread-15882] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:37:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:37:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:37:08.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:36:52', tmtdew=32.57, humidity=11.6, cloud=0.0, wind=27.82, temperature=27.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:36:37.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:37:08.687 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:37:08.700 [DEBUG] [Thread-15885] [transport.py] [_log()] starting thread (client mode): 0x173604c0
2025-11-12T12:37:08.700 [DEBUG] [Thread-15885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:37:08.715 [DEBUG] [Thread-15885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:37:08.715 [INFO] [Thread-15885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:37:08.723 [DEBUG] [Thread-15885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:37:08.723 [DEBUG] [Thread-15885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:37:08.723 [DEBUG] [Thread-15885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:37:08.723 [DEBUG] [Thread-15885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:37:08.723 [DEBUG] [Thread-15885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:37:08.724 [DEBUG] [Thread-15885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:37:08.724 [DEBUG] [Thread-15885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:37:08.724 [DEBUG] [Thread-15885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:37:08.724 [DEBUG] [Thread-15885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:37:08.724 [DEBUG] [Thread-15885] [transport.py] [_log()] client lang: <none>
2025-11-12T12:37:08.724 [DEBUG] [Thread-15885] [transport.py] [_log()] server lang: <none>
2025-11-12T12:37:08.724 [DEBUG] [Thread-15885] [transport.py] [_log()] kex follows: False
2025-11-12T12:37:08.724 [DEBUG] [Thread-15885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:37:08.725 [DEBUG] [Thread-15885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:37:08.725 [DEBUG] [Thread-15885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:37:08.725 [DEBUG] [Thread-15885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:37:08.725 [DEBUG] [Thread-15885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:37:08.725 [DEBUG] [Thread-15885] [transport.py] [_log()] Compression: none
2025-11-12T12:37:08.725 [DEBUG] [Thread-15885] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:37:08.785 [DEBUG] [Thread-15885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:37:08.785 [DEBUG] [Thread-15885] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:37:08.786 [DEBUG] [Thread-15885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:37:08.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:37:08.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:37:08.840 [DEBUG] [Thread-15885] [transport.py] [_log()] userauth is OK
2025-11-12T12:37:08.841 [DEBUG] [Thread-15885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:37:08.841 [DEBUG] [Thread-15885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:37:08.841 [DEBUG] [Thread-15885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:37:08.841 [DEBUG] [Thread-15885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:37:08.866 [INFO] [Thread-15885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:37:08.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:37:08.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:37:09.840 [DEBUG] [Thread-15885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:37:09.841 [DEBUG] [Thread-15885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:37:09.889 [DEBUG] [Thread-15885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:37:09.889 [DEBUG] [Thread-15885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:37:09.898 [DEBUG] [Thread-15885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:37:09.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:37:09.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-11-12T12:37:09.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-11-12T12:37:09.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:37:09.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:37:09.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:37:09.941 [DEBUG] [Thread-15885] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:37:11.995 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:37:11.997 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:37:20.663 [DEBUG] [Thread-15887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:37:32.258 [DEBUG] [Thread-15888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:37:35.710 [DEBUG] [Thread-15889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:37:39.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:37:39.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:37:39.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-11-12T12:37:40.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 37, 24), 32.1, 11.96, 0.0, 24.47, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:37:40.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:37:24
2025-11-12T12:37:40.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:37:40.850 [DEBUG] [Thread-15890] [transport.py] [_log()] starting thread (client mode): 0x173bca60
2025-11-12T12:37:40.851 [DEBUG] [Thread-15890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:37:40.869 [DEBUG] [Thread-15890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:37:40.869 [INFO] [Thread-15890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:37:40.871 [DEBUG] [Thread-15890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] client lang: <none>
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] server lang: <none>
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] kex follows: False
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] Compression: none
2025-11-12T12:37:40.872 [DEBUG] [Thread-15890] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:37:40.880 [DEBUG] [Thread-15890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:37:40.881 [DEBUG] [Thread-15890] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:37:40.881 [DEBUG] [Thread-15890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:37:40.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:37:40.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:37:40.882 [DEBUG] [Thread-15890] [transport.py] [_log()] userauth is OK
2025-11-12T12:37:40.883 [DEBUG] [Thread-15890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:37:40.883 [DEBUG] [Thread-15890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:37:40.883 [DEBUG] [Thread-15890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:37:40.883 [DEBUG] [Thread-15890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:37:40.906 [INFO] [Thread-15890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:37:40.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:37:41.500 [DEBUG] [Thread-15890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:37:41.500 [DEBUG] [Thread-15890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:37:41.500 [DEBUG] [Thread-15890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:37:41.541 [DEBUG] [Thread-15890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:37:41.541 [DEBUG] [Thread-15890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:37:41.544 [DEBUG] [Thread-15890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:37:41.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:37:41.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:37:41.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:37:41.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:37:41.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:37:41.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:37:41.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:37:41.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:37:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:37:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.442797 -999.00  +26.30  26.30     18   +0.20 1 1 1 1 1   888    0 24.98 -52.26 ----- 23.3 26.3 279.8 34.3 31.8 -25.4 31.0 -24.7 30.4 -25.3 31.5 -24.2
2025-11-12T12:37:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:37:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:37:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.442797
2025-11-12T12:37:41.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:37:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:37:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:37:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:37:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:37:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:37:24', tmtdew=32.1, humidity=11.96, cloud=0.0, wind=24.47, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:37:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:37:41.572 [DEBUG] [Thread-15890] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:37:41.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:37:41.670 [DEBUG] [Thread-15893] [transport.py] [_log()] starting thread (client mode): 0x173fa560
2025-11-12T12:37:41.670 [DEBUG] [Thread-15893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:37:41.685 [DEBUG] [Thread-15893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:37:41.685 [INFO] [Thread-15893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:37:41.692 [DEBUG] [Thread-15893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:37:41.692 [DEBUG] [Thread-15893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:37:41.692 [DEBUG] [Thread-15893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:37:41.692 [DEBUG] [Thread-15893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:37:41.692 [DEBUG] [Thread-15893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:37:41.692 [DEBUG] [Thread-15893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] client lang: <none>
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] server lang: <none>
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] kex follows: False
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] Compression: none
2025-11-12T12:37:41.693 [DEBUG] [Thread-15893] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:37:41.753 [DEBUG] [Thread-15893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:37:41.753 [DEBUG] [Thread-15893] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:37:41.754 [DEBUG] [Thread-15893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:37:41.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:37:41.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:37:41.809 [DEBUG] [Thread-15893] [transport.py] [_log()] userauth is OK
2025-11-12T12:37:41.809 [DEBUG] [Thread-15893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:37:41.809 [DEBUG] [Thread-15893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:37:41.809 [DEBUG] [Thread-15893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:37:41.809 [DEBUG] [Thread-15893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:37:41.828 [INFO] [Thread-15893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:37:41.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:37:41.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:37:42.672 [DEBUG] [Thread-15893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:37:42.672 [DEBUG] [Thread-15893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:37:42.720 [DEBUG] [Thread-15893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:37:42.720 [DEBUG] [Thread-15893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:37:42.729 [DEBUG] [Thread-15893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:37:42.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:37:42.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-11-12T12:37:42.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-11-12T12:37:42.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:37:42.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:37:42.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:37:42.766 [DEBUG] [Thread-15893] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:37:50.750 [DEBUG] [Thread-15895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:38:05.799 [DEBUG] [Thread-15896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:38:12.142 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:38:12.143 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:38:12.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:38:12.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:38:12.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-11-12T12:38:13.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 37, 56), 32.1, 11.74, 0.0, 27.44, 27.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:38:13.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:37:56
2025-11-12T12:38:13.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:38:13.684 [DEBUG] [Thread-15897] [transport.py] [_log()] starting thread (client mode): 0x1737e200
2025-11-12T12:38:13.685 [DEBUG] [Thread-15897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:38:13.704 [DEBUG] [Thread-15897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:38:13.704 [INFO] [Thread-15897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:38:13.706 [DEBUG] [Thread-15897] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:38:13.706 [DEBUG] [Thread-15897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:38:13.706 [DEBUG] [Thread-15897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:38:13.706 [DEBUG] [Thread-15897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:38:13.706 [DEBUG] [Thread-15897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:38:13.706 [DEBUG] [Thread-15897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:38:13.706 [DEBUG] [Thread-15897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:38:13.706 [DEBUG] [Thread-15897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] client lang: <none>
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] server lang: <none>
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] kex follows: False
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] Compression: none
2025-11-12T12:38:13.707 [DEBUG] [Thread-15897] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:38:13.723 [DEBUG] [Thread-15897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:38:13.724 [DEBUG] [Thread-15897] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:38:13.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:38:13.725 [DEBUG] [Thread-15897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:38:13.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:38:13.727 [DEBUG] [Thread-15897] [transport.py] [_log()] userauth is OK
2025-11-12T12:38:13.727 [DEBUG] [Thread-15897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:38:13.727 [DEBUG] [Thread-15897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:38:13.727 [DEBUG] [Thread-15897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:38:13.728 [DEBUG] [Thread-15897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:38:13.746 [INFO] [Thread-15897] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:38:13.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:38:14.358 [DEBUG] [Thread-15897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:38:14.359 [DEBUG] [Thread-15897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:38:14.359 [DEBUG] [Thread-15897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:38:14.400 [DEBUG] [Thread-15897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:38:14.400 [DEBUG] [Thread-15897] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:38:14.403 [DEBUG] [Thread-15897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:38:14.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:38:14.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:38:14.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:38:14.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:38:14.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:38:14.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:38:14.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:38:14.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:38:14.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:38:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.443144 -999.00  +26.10  22.33     18   +0.60 1 1 1 1 1   888    0 24.36 -50.22 ----- 19.7 22.3 273.2 28.9 31.7 -27.5 31.0 -24.4 30.2 -24.1 31.5 -24.1
2025-11-12T12:38:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:38:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:38:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.443144
2025-11-12T12:38:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:38:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:38:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:38:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:38:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:38:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:37:56', tmtdew=32.1, humidity=11.74, cloud=0.0, wind=27.44, temperature=27.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:38:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:38:14.429 [DEBUG] [Thread-15897] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:38:14.522 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:38:14.534 [DEBUG] [Thread-15900] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T12:38:14.534 [DEBUG] [Thread-15900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:38:14.548 [DEBUG] [Thread-15900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:38:14.548 [INFO] [Thread-15900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:38:14.555 [DEBUG] [Thread-15900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:38:14.555 [DEBUG] [Thread-15900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:38:14.555 [DEBUG] [Thread-15900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] client lang: <none>
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] server lang: <none>
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] kex follows: False
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] Compression: none
2025-11-12T12:38:14.556 [DEBUG] [Thread-15900] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:38:14.614 [DEBUG] [Thread-15900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:38:14.615 [DEBUG] [Thread-15900] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:38:14.615 [DEBUG] [Thread-15900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:38:14.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:38:14.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:38:14.673 [DEBUG] [Thread-15900] [transport.py] [_log()] userauth is OK
2025-11-12T12:38:14.673 [DEBUG] [Thread-15900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:38:14.673 [DEBUG] [Thread-15900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:38:14.673 [DEBUG] [Thread-15900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:38:14.674 [DEBUG] [Thread-15900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:38:14.692 [INFO] [Thread-15900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:38:14.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:38:14.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:38:15.650 [DEBUG] [Thread-15900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:38:15.651 [DEBUG] [Thread-15900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:38:15.705 [DEBUG] [Thread-15900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:38:15.705 [DEBUG] [Thread-15900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:38:15.714 [DEBUG] [Thread-15900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:38:15.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:38:15.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-11-12T12:38:15.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-11-12T12:38:15.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:38:15.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:38:15.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:38:15.748 [DEBUG] [Thread-15900] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:38:20.836 [DEBUG] [Thread-15902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:38:32.292 [DEBUG] [Thread-15903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:38:35.895 [DEBUG] [Thread-15904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:38:45.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:38:45.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:38:45.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-11-12T12:38:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 38, 28), 31.88, 11.97, 0.0, 28.74, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:38:46.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:38:28
2025-11-12T12:38:46.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:38:46.658 [DEBUG] [Thread-15905] [transport.py] [_log()] starting thread (client mode): 0x173bf2e0
2025-11-12T12:38:46.658 [DEBUG] [Thread-15905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:38:46.677 [DEBUG] [Thread-15905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:38:46.677 [INFO] [Thread-15905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:38:46.680 [DEBUG] [Thread-15905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:38:46.680 [DEBUG] [Thread-15905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] client lang: <none>
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] server lang: <none>
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] kex follows: False
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] Compression: none
2025-11-12T12:38:46.681 [DEBUG] [Thread-15905] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:38:46.698 [DEBUG] [Thread-15905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:38:46.699 [DEBUG] [Thread-15905] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:38:46.700 [DEBUG] [Thread-15905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:38:46.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:38:46.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:38:46.702 [DEBUG] [Thread-15905] [transport.py] [_log()] userauth is OK
2025-11-12T12:38:46.702 [DEBUG] [Thread-15905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:38:46.702 [DEBUG] [Thread-15905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:38:46.702 [DEBUG] [Thread-15905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:38:46.702 [DEBUG] [Thread-15905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:38:46.727 [INFO] [Thread-15905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:38:46.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:38:47.316 [DEBUG] [Thread-15905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:38:47.316 [DEBUG] [Thread-15905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:38:47.316 [DEBUG] [Thread-15905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:38:47.356 [DEBUG] [Thread-15905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:38:47.357 [DEBUG] [Thread-15905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:38:47.360 [DEBUG] [Thread-15905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:38:47.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:38:47.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:38:47.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:38:47.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:38:47.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:38:47.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:38:47.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:38:47.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:38:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:38:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.443144 -999.00  +26.10  22.33     18   +0.60 1 1 1 1 1   888    0 24.36 -50.22 ----- 19.7 22.3 273.2 28.9 31.7 -27.5 31.0 -24.4 30.2 -24.1 31.5 -24.1
2025-11-12T12:38:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:38:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:38:47.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.443144
2025-11-12T12:38:47.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:38:47.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:38:47.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:38:47.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:38:47.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:38:47.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:38:28', tmtdew=31.88, humidity=11.97, cloud=0.0, wind=28.74, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:38:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:38:47.384 [DEBUG] [Thread-15905] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:38:47.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:38:47.490 [DEBUG] [Thread-15908] [transport.py] [_log()] starting thread (client mode): 0x173ea950
2025-11-12T12:38:47.490 [DEBUG] [Thread-15908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:38:47.506 [DEBUG] [Thread-15908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:38:47.506 [INFO] [Thread-15908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:38:47.513 [DEBUG] [Thread-15908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:38:47.513 [DEBUG] [Thread-15908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:38:47.513 [DEBUG] [Thread-15908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:38:47.513 [DEBUG] [Thread-15908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:38:47.513 [DEBUG] [Thread-15908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:38:47.513 [DEBUG] [Thread-15908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] client lang: <none>
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] server lang: <none>
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] kex follows: False
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] Compression: none
2025-11-12T12:38:47.514 [DEBUG] [Thread-15908] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:38:47.577 [DEBUG] [Thread-15908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:38:47.577 [DEBUG] [Thread-15908] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:38:47.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:38:47.578 [DEBUG] [Thread-15908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:38:47.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:38:47.632 [DEBUG] [Thread-15908] [transport.py] [_log()] userauth is OK
2025-11-12T12:38:47.633 [DEBUG] [Thread-15908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:38:47.633 [DEBUG] [Thread-15908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:38:47.633 [DEBUG] [Thread-15908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:38:47.633 [DEBUG] [Thread-15908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:38:47.652 [INFO] [Thread-15908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:38:47.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:38:47.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:38:48.668 [DEBUG] [Thread-15908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:38:48.668 [DEBUG] [Thread-15908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:38:48.715 [DEBUG] [Thread-15908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:38:48.716 [DEBUG] [Thread-15908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:38:48.725 [DEBUG] [Thread-15908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:38:48.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:38:48.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-11-12T12:38:48.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-11-12T12:38:48.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:38:48.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:38:48.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:38:48.761 [DEBUG] [Thread-15908] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:38:50.929 [DEBUG] [Thread-15910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:39:05.977 [DEBUG] [Thread-15911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:39:12.285 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:39:12.287 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:39:18.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:39:18.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:39:18.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-11-12T12:39:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 38, 28), 31.88, 11.97, 0.0, 28.74, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:39:19.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:38:28
2025-11-12T12:39:19.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:39:19.752 [DEBUG] [Thread-15912] [transport.py] [_log()] starting thread (client mode): 0x19dda800
2025-11-12T12:39:19.753 [DEBUG] [Thread-15912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:39:19.773 [DEBUG] [Thread-15912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:39:19.773 [INFO] [Thread-15912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:39:19.774 [DEBUG] [Thread-15912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:39:19.774 [DEBUG] [Thread-15912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:39:19.774 [DEBUG] [Thread-15912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:39:19.774 [DEBUG] [Thread-15912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:39:19.774 [DEBUG] [Thread-15912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] client lang: <none>
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] server lang: <none>
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] kex follows: False
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] Compression: none
2025-11-12T12:39:19.775 [DEBUG] [Thread-15912] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:39:19.791 [DEBUG] [Thread-15912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:39:19.791 [DEBUG] [Thread-15912] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:39:19.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:39:19.792 [DEBUG] [Thread-15912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:39:19.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:39:19.792 [DEBUG] [Thread-15912] [transport.py] [_log()] userauth is OK
2025-11-12T12:39:19.793 [DEBUG] [Thread-15912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:39:19.793 [DEBUG] [Thread-15912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:39:19.793 [DEBUG] [Thread-15912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:39:19.793 [DEBUG] [Thread-15912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:39:19.808 [INFO] [Thread-15912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:39:19.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:39:20.411 [DEBUG] [Thread-15912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:39:20.411 [DEBUG] [Thread-15912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:39:20.412 [DEBUG] [Thread-15912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:39:20.453 [DEBUG] [Thread-15912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:39:20.453 [DEBUG] [Thread-15912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:39:20.457 [DEBUG] [Thread-15912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:39:20.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:39:20.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:39:20.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:39:20.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:39:20.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:39:20.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:39:20.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:39:20.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:39:20.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:39:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.443491 -999.00  +26.50  23.52     18   +0.70 1 1 1 1 1   888    0 24.72 -46.30 ----- 25.8 23.5 285.3 31.3 31.8 -24.7 31.1 -24.3 30.4 -24.8 31.5 -23.2
2025-11-12T12:39:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:39:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:39:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.443491
2025-11-12T12:39:20.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:39:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:39:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:39:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:39:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:39:20.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:38:28', tmtdew=31.88, humidity=11.97, cloud=0.0, wind=28.74, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:38:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:39:20.483 [DEBUG] [Thread-15912] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:39:20.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:39:20.583 [DEBUG] [Thread-15915] [transport.py] [_log()] starting thread (client mode): 0x17360280
2025-11-12T12:39:20.583 [DEBUG] [Thread-15915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:39:20.598 [DEBUG] [Thread-15915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:39:20.598 [INFO] [Thread-15915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] client lang: <none>
2025-11-12T12:39:20.606 [DEBUG] [Thread-15915] [transport.py] [_log()] server lang: <none>
2025-11-12T12:39:20.607 [DEBUG] [Thread-15915] [transport.py] [_log()] kex follows: False
2025-11-12T12:39:20.607 [DEBUG] [Thread-15915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:39:20.607 [DEBUG] [Thread-15915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:39:20.607 [DEBUG] [Thread-15915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:39:20.607 [DEBUG] [Thread-15915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:39:20.607 [DEBUG] [Thread-15915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:39:20.607 [DEBUG] [Thread-15915] [transport.py] [_log()] Compression: none
2025-11-12T12:39:20.607 [DEBUG] [Thread-15915] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:39:20.665 [DEBUG] [Thread-15915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:39:20.665 [DEBUG] [Thread-15915] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:39:20.666 [DEBUG] [Thread-15915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:39:20.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:39:20.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:39:20.721 [DEBUG] [Thread-15915] [transport.py] [_log()] userauth is OK
2025-11-12T12:39:20.722 [DEBUG] [Thread-15915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:39:20.722 [DEBUG] [Thread-15915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:39:20.722 [DEBUG] [Thread-15915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:39:20.722 [DEBUG] [Thread-15915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:39:20.740 [INFO] [Thread-15915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:39:20.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:39:20.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:39:21.014 [DEBUG] [Thread-15917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:39:21.602 [DEBUG] [Thread-15915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:39:21.603 [DEBUG] [Thread-15915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:39:21.650 [DEBUG] [Thread-15915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:39:21.650 [DEBUG] [Thread-15915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:39:21.659 [DEBUG] [Thread-15915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:39:21.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:39:21.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-11-12T12:39:21.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-11-12T12:39:21.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:39:21.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:39:21.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:39:21.695 [DEBUG] [Thread-15915] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:39:32.323 [DEBUG] [Thread-15918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:39:36.070 [DEBUG] [Thread-15919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:39:51.109 [DEBUG] [Thread-15920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:39:51.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:39:51.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:39:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:39:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 39, 32), 30.82, 13.04, 0.0, 25.44, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:39:52.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:39:32
2025-11-12T12:39:52.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:39:52.624 [DEBUG] [Thread-15921] [transport.py] [_log()] starting thread (client mode): 0x17361f90
2025-11-12T12:39:52.624 [DEBUG] [Thread-15921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:39:52.644 [DEBUG] [Thread-15921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:39:52.644 [INFO] [Thread-15921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] client lang: <none>
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] server lang: <none>
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] kex follows: False
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:39:52.647 [DEBUG] [Thread-15921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:39:52.648 [DEBUG] [Thread-15921] [transport.py] [_log()] Compression: none
2025-11-12T12:39:52.648 [DEBUG] [Thread-15921] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:39:52.665 [DEBUG] [Thread-15921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:39:52.666 [DEBUG] [Thread-15921] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:39:52.666 [DEBUG] [Thread-15921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:39:52.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:39:52.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:39:52.668 [DEBUG] [Thread-15921] [transport.py] [_log()] userauth is OK
2025-11-12T12:39:52.668 [DEBUG] [Thread-15921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:39:52.669 [DEBUG] [Thread-15921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:39:52.669 [DEBUG] [Thread-15921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:39:52.669 [DEBUG] [Thread-15921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:39:52.693 [INFO] [Thread-15921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:39:52.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:39:53.339 [DEBUG] [Thread-15921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:39:53.339 [DEBUG] [Thread-15921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:39:53.339 [DEBUG] [Thread-15921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:39:53.381 [DEBUG] [Thread-15921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:39:53.381 [DEBUG] [Thread-15921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:39:53.383 [DEBUG] [Thread-15921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:39:53.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:39:53.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:39:53.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:39:53.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:39:53.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:39:53.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:39:53.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.443840 -999.00  +27.00  21.41     18   +0.90 1 1 1 1 1   888    0 25.49 -44.47 ----- 25.3 21.4 274.7 27.3 31.9 -24.5 31.2 -23.9 30.6 -22.4 31.6 -22.8
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.443840
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:39:53.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:39:32', tmtdew=30.82, humidity=13.04, cloud=0.0, wind=25.44, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:39:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:39:53.400 [DEBUG] [Thread-15921] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:39:53.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:39:53.485 [DEBUG] [Thread-15924] [transport.py] [_log()] starting thread (client mode): 0x149831c0
2025-11-12T12:39:53.485 [DEBUG] [Thread-15924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:39:53.500 [DEBUG] [Thread-15924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:39:53.500 [INFO] [Thread-15924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] client lang: <none>
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] server lang: <none>
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] kex follows: False
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] Compression: none
2025-11-12T12:39:53.508 [DEBUG] [Thread-15924] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:39:53.563 [DEBUG] [Thread-15924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:39:53.564 [DEBUG] [Thread-15924] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:39:53.564 [DEBUG] [Thread-15924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:39:53.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:39:53.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:39:53.621 [DEBUG] [Thread-15924] [transport.py] [_log()] userauth is OK
2025-11-12T12:39:53.621 [DEBUG] [Thread-15924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:39:53.621 [DEBUG] [Thread-15924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:39:53.621 [DEBUG] [Thread-15924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:39:53.621 [DEBUG] [Thread-15924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:39:53.635 [INFO] [Thread-15924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:39:53.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:39:53.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:39:54.670 [DEBUG] [Thread-15924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:39:54.670 [DEBUG] [Thread-15924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:39:54.718 [DEBUG] [Thread-15924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:39:54.718 [DEBUG] [Thread-15924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:39:54.726 [DEBUG] [Thread-15924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:39:54.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:39:54.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:39:54.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-11-12T12:39:54.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:39:54.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:39:54.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:39:54.761 [DEBUG] [Thread-15924] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:40:06.141 [DEBUG] [Thread-15926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:40:12.428 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:40:12.429 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:40:21.192 [DEBUG] [Thread-15927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:40:24.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:40:24.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:40:24.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-11-12T12:40:25.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 40, 4), 31.0, 12.91, 0.0, 27.61, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:40:25.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:40:04
2025-11-12T12:40:25.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:40:25.705 [DEBUG] [Thread-15928] [transport.py] [_log()] starting thread (client mode): 0x14983b50
2025-11-12T12:40:25.705 [DEBUG] [Thread-15928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:40:25.725 [DEBUG] [Thread-15928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:40:25.725 [INFO] [Thread-15928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] client lang: <none>
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] server lang: <none>
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] kex follows: False
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] Compression: none
2025-11-12T12:40:25.728 [DEBUG] [Thread-15928] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:40:25.747 [DEBUG] [Thread-15928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:40:25.747 [DEBUG] [Thread-15928] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:40:25.748 [DEBUG] [Thread-15928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:40:25.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:40:25.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:40:25.750 [DEBUG] [Thread-15928] [transport.py] [_log()] userauth is OK
2025-11-12T12:40:25.750 [DEBUG] [Thread-15928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:40:25.750 [DEBUG] [Thread-15928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:40:25.750 [DEBUG] [Thread-15928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:40:25.750 [DEBUG] [Thread-15928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:40:25.769 [INFO] [Thread-15928] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:40:25.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:40:26.543 [DEBUG] [Thread-15928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:40:26.544 [DEBUG] [Thread-15928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:40:26.544 [DEBUG] [Thread-15928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:40:26.584 [DEBUG] [Thread-15928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:40:26.585 [DEBUG] [Thread-15928] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:40:26.588 [DEBUG] [Thread-15928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:40:26.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:40:26.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:40:26.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:40:26.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:40:26.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:40:26.612 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:40:26.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:40:26.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:40:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:40:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.444186 -999.00  +26.60  19.07     18   +0.70 1 1 1 1 1   888    0 25.01 -40.41 ----- 16.4 19.1 282.6 30.4 32.0 -25.4 31.3 -23.5 30.8 -23.8 31.8 -24.4
2025-11-12T12:40:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:40:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:40:26.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.444186
2025-11-12T12:40:26.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:40:26.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:40:26.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:40:26.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:40:26.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:40:26.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:40:04', tmtdew=31.0, humidity=12.91, cloud=0.0, wind=27.61, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:39:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:40:26.615 [DEBUG] [Thread-15928] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:40:26.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:40:26.711 [DEBUG] [Thread-15931] [transport.py] [_log()] starting thread (client mode): 0x1739b160
2025-11-12T12:40:26.711 [DEBUG] [Thread-15931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:40:26.728 [DEBUG] [Thread-15931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:40:26.728 [INFO] [Thread-15931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:40:26.736 [DEBUG] [Thread-15931] [transport.py] [_log()] client lang: <none>
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] server lang: <none>
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] kex follows: False
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] Compression: none
2025-11-12T12:40:26.737 [DEBUG] [Thread-15931] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:40:26.797 [DEBUG] [Thread-15931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:40:26.798 [DEBUG] [Thread-15931] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:40:26.799 [DEBUG] [Thread-15931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:40:26.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:40:26.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:40:26.857 [DEBUG] [Thread-15931] [transport.py] [_log()] userauth is OK
2025-11-12T12:40:26.858 [DEBUG] [Thread-15931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:40:26.858 [DEBUG] [Thread-15931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:40:26.858 [DEBUG] [Thread-15931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:40:26.858 [DEBUG] [Thread-15931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:40:26.876 [INFO] [Thread-15931] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:40:26.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:40:26.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:40:27.989 [DEBUG] [Thread-15931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:40:27.989 [DEBUG] [Thread-15931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:40:28.037 [DEBUG] [Thread-15931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:40:28.037 [DEBUG] [Thread-15931] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:40:28.046 [DEBUG] [Thread-15931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:40:28.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:40:28.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-11-12T12:40:28.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-11-12T12:40:28.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:40:28.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:40:28.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:40:28.085 [DEBUG] [Thread-15931] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:40:32.352 [DEBUG] [Thread-15933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:40:36.228 [DEBUG] [Thread-15934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:40:51.271 [DEBUG] [Thread-15935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:40:58.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:40:58.104 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:40:58.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-11-12T12:40:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 40, 35), 31.05, 12.84, 0.0, 24.7, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:40:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:40:35
2025-11-12T12:40:58.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:40:59.009 [DEBUG] [Thread-15936] [transport.py] [_log()] starting thread (client mode): 0x19dd8c10
2025-11-12T12:40:59.009 [DEBUG] [Thread-15936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:40:59.029 [DEBUG] [Thread-15936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:40:59.030 [INFO] [Thread-15936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] client lang: <none>
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] server lang: <none>
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] kex follows: False
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] Compression: none
2025-11-12T12:40:59.033 [DEBUG] [Thread-15936] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:40:59.041 [DEBUG] [Thread-15936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:40:59.042 [DEBUG] [Thread-15936] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:40:59.042 [DEBUG] [Thread-15936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:40:59.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:40:59.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:40:59.044 [DEBUG] [Thread-15936] [transport.py] [_log()] userauth is OK
2025-11-12T12:40:59.044 [DEBUG] [Thread-15936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:40:59.044 [DEBUG] [Thread-15936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:40:59.044 [DEBUG] [Thread-15936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:40:59.044 [DEBUG] [Thread-15936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:40:59.069 [INFO] [Thread-15936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:40:59.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:40:59.695 [DEBUG] [Thread-15936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:40:59.695 [DEBUG] [Thread-15936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:40:59.696 [DEBUG] [Thread-15936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:40:59.737 [DEBUG] [Thread-15936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:40:59.737 [DEBUG] [Thread-15936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:40:59.740 [DEBUG] [Thread-15936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:40:59.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:40:59.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:40:59.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:40:59.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:40:59.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:40:59.764 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:40:59.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:40:59.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:40:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:40:59.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.444533 -999.00  +26.80  16.25     18   +1.20 1 2 1 1 1   888    0 25.21 -43.47 ----- 20.8 16.2 275.1 25.1 32.1 -24.4 31.4 -23.4 30.9 -21.9 31.8 -23.0
2025-11-12T12:40:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:40:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:40:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.444533
2025-11-12T12:40:59.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:40:59.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:40:59.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:40:59.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:40:59.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T12:40:59.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:40:35', tmtdew=31.05, humidity=12.84, cloud=0.0, wind=24.7, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:40:07.651', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:40:59.766 [DEBUG] [Thread-15936] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:40:59.850 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:40:59.862 [DEBUG] [Thread-15939] [transport.py] [_log()] starting thread (client mode): 0x19dd92a0
2025-11-12T12:40:59.862 [DEBUG] [Thread-15939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:40:59.879 [DEBUG] [Thread-15939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:40:59.879 [INFO] [Thread-15939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] client lang: <none>
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] server lang: <none>
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] kex follows: False
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:40:59.887 [DEBUG] [Thread-15939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:40:59.888 [DEBUG] [Thread-15939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:40:59.888 [DEBUG] [Thread-15939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:40:59.888 [DEBUG] [Thread-15939] [transport.py] [_log()] Compression: none
2025-11-12T12:40:59.888 [DEBUG] [Thread-15939] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:40:59.946 [DEBUG] [Thread-15939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:40:59.946 [DEBUG] [Thread-15939] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:40:59.947 [DEBUG] [Thread-15939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:40:59.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:40:59.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:41:00.002 [DEBUG] [Thread-15939] [transport.py] [_log()] userauth is OK
2025-11-12T12:41:00.002 [DEBUG] [Thread-15939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:41:00.002 [DEBUG] [Thread-15939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:41:00.002 [DEBUG] [Thread-15939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:41:00.002 [DEBUG] [Thread-15939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:41:00.020 [INFO] [Thread-15939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:41:00.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:41:00.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:41:00.897 [DEBUG] [Thread-15939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:41:00.897 [DEBUG] [Thread-15939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:41:00.945 [DEBUG] [Thread-15939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:41:00.945 [DEBUG] [Thread-15939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:41:00.954 [DEBUG] [Thread-15939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:41:00.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:41:00.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-11-12T12:41:00.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-11-12T12:41:00.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:41:00.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:41:00.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:41:00.990 [DEBUG] [Thread-15939] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:41:06.306 [DEBUG] [Thread-15941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:41:12.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:41:12.571 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:41:21.362 [DEBUG] [Thread-15942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:41:31.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:41:31.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:41:31.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-11-12T12:41:31.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 41, 7), 31.4, 12.56, 0.0, 25.22, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:41:31.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:41:07
2025-11-12T12:41:31.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:41:31.915 [DEBUG] [Thread-15943] [transport.py] [_log()] starting thread (client mode): 0x19dd9480
2025-11-12T12:41:31.915 [DEBUG] [Thread-15943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:41:31.935 [DEBUG] [Thread-15943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:41:31.935 [INFO] [Thread-15943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:41:31.938 [DEBUG] [Thread-15943] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:41:31.938 [DEBUG] [Thread-15943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:41:31.938 [DEBUG] [Thread-15943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:41:31.938 [DEBUG] [Thread-15943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] client lang: <none>
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] server lang: <none>
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] kex follows: False
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] Compression: none
2025-11-12T12:41:31.939 [DEBUG] [Thread-15943] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:41:31.958 [DEBUG] [Thread-15943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:41:31.959 [DEBUG] [Thread-15943] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:41:31.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:41:31.961 [DEBUG] [Thread-15943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:41:31.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:41:31.963 [DEBUG] [Thread-15943] [transport.py] [_log()] userauth is OK
2025-11-12T12:41:31.963 [DEBUG] [Thread-15943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:41:31.963 [DEBUG] [Thread-15943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:41:31.963 [DEBUG] [Thread-15943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:41:31.963 [DEBUG] [Thread-15943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:41:31.981 [INFO] [Thread-15943] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:41:31.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:41:32.384 [DEBUG] [Thread-15945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:41:32.773 [DEBUG] [Thread-15943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:41:32.773 [DEBUG] [Thread-15943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:41:32.774 [DEBUG] [Thread-15943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:41:32.814 [DEBUG] [Thread-15943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:41:32.815 [DEBUG] [Thread-15943] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:41:32.818 [DEBUG] [Thread-15943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:41:32.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:41:32.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:41:32.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:41:32.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:41:32.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:41:32.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:41:32.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:41:32.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:41:32.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:41:32.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.444880 -999.00  +26.70  23.99     19   +1.20 1 1 1 1 1   888    0 25.05 -42.74 ----- 26.5 24.0 272.8 31.5 32.1 -27.4 31.4 -24.1 30.7 -26.7 31.9 -24.4
2025-11-12T12:41:32.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:41:32.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:41:32.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.444880
2025-11-12T12:41:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:41:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:41:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:41:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:41:32.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:41:32.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:41:07', tmtdew=31.4, humidity=12.56, cloud=0.0, wind=25.22, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:40:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:41:32.845 [DEBUG] [Thread-15943] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:41:32.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:41:32.941 [DEBUG] [Thread-15947] [transport.py] [_log()] starting thread (client mode): 0x19dda320
2025-11-12T12:41:32.941 [DEBUG] [Thread-15947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:41:32.956 [DEBUG] [Thread-15947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:41:32.956 [INFO] [Thread-15947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:41:32.964 [DEBUG] [Thread-15947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:41:32.964 [DEBUG] [Thread-15947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:41:32.964 [DEBUG] [Thread-15947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:41:32.964 [DEBUG] [Thread-15947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:41:32.964 [DEBUG] [Thread-15947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] client lang: <none>
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] server lang: <none>
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] kex follows: False
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:41:32.965 [DEBUG] [Thread-15947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:41:32.966 [DEBUG] [Thread-15947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:41:32.966 [DEBUG] [Thread-15947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:41:32.966 [DEBUG] [Thread-15947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:41:32.966 [DEBUG] [Thread-15947] [transport.py] [_log()] Compression: none
2025-11-12T12:41:32.966 [DEBUG] [Thread-15947] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:41:33.022 [DEBUG] [Thread-15947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:41:33.023 [DEBUG] [Thread-15947] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:41:33.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:41:33.024 [DEBUG] [Thread-15947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:41:33.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:41:33.078 [DEBUG] [Thread-15947] [transport.py] [_log()] userauth is OK
2025-11-12T12:41:33.079 [DEBUG] [Thread-15947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:41:33.079 [DEBUG] [Thread-15947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:41:33.079 [DEBUG] [Thread-15947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:41:33.079 [DEBUG] [Thread-15947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:41:33.098 [INFO] [Thread-15947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:41:33.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:41:33.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:41:33.957 [DEBUG] [Thread-15947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:41:33.957 [DEBUG] [Thread-15947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:41:34.006 [DEBUG] [Thread-15947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:41:34.006 [DEBUG] [Thread-15947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:41:34.015 [DEBUG] [Thread-15947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:41:34.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:41:34.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-11-12T12:41: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-11-12T12:41:34.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:41:34.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:41:34.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:41:34.053 [DEBUG] [Thread-15947] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:41:36.397 [DEBUG] [Thread-15949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:41:51.447 [DEBUG] [Thread-15950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:42:04.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:42:04.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:42:04.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-11-12T12:42:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 41, 39), 31.16, 12.84, 0.0, 21.1, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:42:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:41:39
2025-11-12T12:42:04.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:42:04.982 [DEBUG] [Thread-15951] [transport.py] [_log()] starting thread (client mode): 0x14983bb0
2025-11-12T12:42:04.983 [DEBUG] [Thread-15951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:42:05.002 [DEBUG] [Thread-15951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:42:05.002 [INFO] [Thread-15951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] client lang: <none>
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] server lang: <none>
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] kex follows: False
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] Compression: none
2025-11-12T12:42:05.005 [DEBUG] [Thread-15951] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:42:05.024 [DEBUG] [Thread-15951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:42:05.025 [DEBUG] [Thread-15951] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:42:05.025 [DEBUG] [Thread-15951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:42:05.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:42:05.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:42:05.028 [DEBUG] [Thread-15951] [transport.py] [_log()] userauth is OK
2025-11-12T12:42:05.028 [DEBUG] [Thread-15951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:42:05.028 [DEBUG] [Thread-15951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:42:05.028 [DEBUG] [Thread-15951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:42:05.028 [DEBUG] [Thread-15951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:42:05.051 [INFO] [Thread-15951] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:42:05.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:42:05.669 [DEBUG] [Thread-15951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:42:05.669 [DEBUG] [Thread-15951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:42:05.669 [DEBUG] [Thread-15951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:42:05.710 [DEBUG] [Thread-15951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:42:05.710 [DEBUG] [Thread-15951] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:42:05.713 [DEBUG] [Thread-15951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:42:05.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:42:05.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:42:05.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:42:05.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:42:05.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:42:05.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:42:05.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:42:05.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:42:05.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:42:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.445228 -999.00  +26.70  23.29     18   +0.60 1 1 1 1 1   888    0 25.35 -35.74 ----- 27.4 23.3 274.3 34.6 32.0 -25.9 31.4 -24.7 30.7 -23.6 31.8 -25.4
2025-11-12T12:42:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:42:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:42:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.445228
2025-11-12T12:42:05.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:42:05.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:42:05.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:42:05.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:42:05.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:42:05.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:41:39', tmtdew=31.16, humidity=12.84, cloud=0.0, wind=21.1, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:41:07.699', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:42:05.738 [DEBUG] [Thread-15951] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:42:05.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:42:05.832 [DEBUG] [Thread-15954] [transport.py] [_log()] starting thread (client mode): 0x1493ffa0
2025-11-12T12:42:05.832 [DEBUG] [Thread-15954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:42:05.847 [DEBUG] [Thread-15954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:42:05.848 [INFO] [Thread-15954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:42:05.855 [DEBUG] [Thread-15954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:42:05.855 [DEBUG] [Thread-15954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:42:05.855 [DEBUG] [Thread-15954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:42:05.855 [DEBUG] [Thread-15954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:42:05.855 [DEBUG] [Thread-15954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:42:05.855 [DEBUG] [Thread-15954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:42:05.855 [DEBUG] [Thread-15954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:42:05.855 [DEBUG] [Thread-15954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] client lang: <none>
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] server lang: <none>
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] kex follows: False
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] Compression: none
2025-11-12T12:42:05.856 [DEBUG] [Thread-15954] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:42:05.914 [DEBUG] [Thread-15954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:42:05.915 [DEBUG] [Thread-15954] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:42:05.915 [DEBUG] [Thread-15954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:42:05.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:42:05.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:42:05.970 [DEBUG] [Thread-15954] [transport.py] [_log()] userauth is OK
2025-11-12T12:42:05.970 [DEBUG] [Thread-15954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:42:05.971 [DEBUG] [Thread-15954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:42:05.971 [DEBUG] [Thread-15954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:42:05.971 [DEBUG] [Thread-15954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:42:05.996 [INFO] [Thread-15954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:42:05.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:42:05.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:42:06.477 [DEBUG] [Thread-15956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:42:06.874 [DEBUG] [Thread-15954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:42:06.875 [DEBUG] [Thread-15954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:42:06.922 [DEBUG] [Thread-15954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:42:06.923 [DEBUG] [Thread-15954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:42:06.932 [DEBUG] [Thread-15954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:42:06.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:42:06.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-11-12T12:42:06.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-11-12T12:42:06.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:42:06.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:42:06.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:42:06.969 [DEBUG] [Thread-15954] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:42:12.711 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:42:12.712 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:42:21.533 [DEBUG] [Thread-15957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:42:32.412 [DEBUG] [Thread-15958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:42:36.568 [DEBUG] [Thread-15959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:42:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:42:36.969 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:42:36.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-11-12T12:42:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 42, 11), 31.02, 12.97, 0.0, 20.96, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:42:37.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:42:11
2025-11-12T12:42:37.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:42:37.885 [DEBUG] [Thread-15960] [transport.py] [_log()] starting thread (client mode): 0x14982c50
2025-11-12T12:42:37.885 [DEBUG] [Thread-15960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:42:37.904 [DEBUG] [Thread-15960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:42:37.905 [INFO] [Thread-15960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:42:37.907 [DEBUG] [Thread-15960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] client lang: <none>
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] server lang: <none>
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] kex follows: False
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:42:37.908 [DEBUG] [Thread-15960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:42:37.909 [DEBUG] [Thread-15960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:42:37.909 [DEBUG] [Thread-15960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:42:37.909 [DEBUG] [Thread-15960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:42:37.909 [DEBUG] [Thread-15960] [transport.py] [_log()] Compression: none
2025-11-12T12:42:37.909 [DEBUG] [Thread-15960] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:42:37.927 [DEBUG] [Thread-15960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:42:37.928 [DEBUG] [Thread-15960] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:42:37.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:42:37.930 [DEBUG] [Thread-15960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:42:37.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:42:37.932 [DEBUG] [Thread-15960] [transport.py] [_log()] userauth is OK
2025-11-12T12:42:37.932 [DEBUG] [Thread-15960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:42:37.933 [DEBUG] [Thread-15960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:42:37.933 [DEBUG] [Thread-15960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:42:37.933 [DEBUG] [Thread-15960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:42:37.956 [INFO] [Thread-15960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:42:37.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:42:38.735 [DEBUG] [Thread-15960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:42:38.736 [DEBUG] [Thread-15960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:42:38.736 [DEBUG] [Thread-15960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:42:38.777 [DEBUG] [Thread-15960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:42:38.777 [DEBUG] [Thread-15960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:42:38.780 [DEBUG] [Thread-15960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:42:38.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:42:38.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:42:38.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:42:38.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:42:38.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:42:38.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:42:38.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:42:38.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:42:38.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:42:38.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.445922 -999.00  +26.80  25.19     17   +0.40 1 1 1 1 1   888    0 25.28 -35.58 ----- 27.9 25.2 282.0 31.1 32.2 -26.0 31.4 -26.2 30.8 -25.2 31.9 -24.3
2025-11-12T12:42:38.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:42:38.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:42:38.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.445922
2025-11-12T12:42:38.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:42:38.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:42:38.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:42:38.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:42:38.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:42:38.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:42:11', tmtdew=31.02, humidity=12.97, cloud=0.0, wind=20.96, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:42:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:42:38.807 [DEBUG] [Thread-15960] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:42:38.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:42:38.902 [DEBUG] [Thread-15963] [transport.py] [_log()] starting thread (client mode): 0x14983280
2025-11-12T12:42:38.903 [DEBUG] [Thread-15963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:42:38.918 [DEBUG] [Thread-15963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:42:38.918 [INFO] [Thread-15963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:42:38.925 [DEBUG] [Thread-15963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:42:38.925 [DEBUG] [Thread-15963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:42:38.925 [DEBUG] [Thread-15963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:42:38.925 [DEBUG] [Thread-15963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:42:38.925 [DEBUG] [Thread-15963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:42:38.925 [DEBUG] [Thread-15963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] client lang: <none>
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] server lang: <none>
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] kex follows: False
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] Compression: none
2025-11-12T12:42:38.926 [DEBUG] [Thread-15963] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:42:38.986 [DEBUG] [Thread-15963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:42:38.987 [DEBUG] [Thread-15963] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:42:38.987 [DEBUG] [Thread-15963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:42:38.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:42:38.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:42:39.042 [DEBUG] [Thread-15963] [transport.py] [_log()] userauth is OK
2025-11-12T12:42:39.043 [DEBUG] [Thread-15963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:42:39.043 [DEBUG] [Thread-15963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:42:39.043 [DEBUG] [Thread-15963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:42:39.043 [DEBUG] [Thread-15963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:42:39.063 [INFO] [Thread-15963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:42:39.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:42:39.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:42:39.912 [DEBUG] [Thread-15963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:42:39.912 [DEBUG] [Thread-15963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:42:39.960 [DEBUG] [Thread-15963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:42:39.960 [DEBUG] [Thread-15963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:42:39.969 [DEBUG] [Thread-15963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:42:39.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:42:39.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-11-12T12:42:39.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-11-12T12:42:39.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:42:39.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:42:39.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:42:40.003 [DEBUG] [Thread-15963] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:42:51.605 [DEBUG] [Thread-15965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:43:06.670 [DEBUG] [Thread-15966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:43:10.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:43:10.025 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:43:10.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-11-12T12:43:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 42, 43), 32.37, 11.53, 0.0, 33.77, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:43:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:42:43
2025-11-12T12:43:10.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:43:10.993 [DEBUG] [Thread-15967] [transport.py] [_log()] starting thread (client mode): 0x149815a0
2025-11-12T12:43:10.993 [DEBUG] [Thread-15967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:43:11.012 [DEBUG] [Thread-15967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:43:11.013 [INFO] [Thread-15967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] client lang: <none>
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] server lang: <none>
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] kex follows: False
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] Compression: none
2025-11-12T12:43:11.016 [DEBUG] [Thread-15967] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:43:11.034 [DEBUG] [Thread-15967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:43:11.034 [DEBUG] [Thread-15967] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:43:11.034 [DEBUG] [Thread-15967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:43:11.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:43:11.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:43:11.035 [DEBUG] [Thread-15967] [transport.py] [_log()] userauth is OK
2025-11-12T12:43:11.035 [DEBUG] [Thread-15967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:43:11.035 [DEBUG] [Thread-15967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:43:11.035 [DEBUG] [Thread-15967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:43:11.035 [DEBUG] [Thread-15967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:43:11.045 [INFO] [Thread-15967] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:43:11.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:43:11.702 [DEBUG] [Thread-15967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:43:11.702 [DEBUG] [Thread-15967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:43:11.702 [DEBUG] [Thread-15967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:43:11.743 [DEBUG] [Thread-15967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:43:11.743 [DEBUG] [Thread-15967] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:43:11.745 [DEBUG] [Thread-15967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:43:11.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:43:11.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:43:11.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:43:11.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:43:11.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:43:11.762 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:43:11.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.446269 -999.00  +26.80  32.96     17   -0.10 1 1 2 1 1   888    0 25.48 -37.00 ----- 30.2 33.0 276.6 38.7 32.0 -26.0 31.4 -26.2 30.7 -23.7 31.8 -24.4
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.446269
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:43:11.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:42:43', tmtdew=32.37, humidity=11.53, cloud=0.0, wind=33.77, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:42:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:43:11.762 [DEBUG] [Thread-15967] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:43:11.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:43:11.852 [DEBUG] [Thread-15970] [transport.py] [_log()] starting thread (client mode): 0x173621a0
2025-11-12T12:43:11.852 [DEBUG] [Thread-15970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:43:11.867 [DEBUG] [Thread-15970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:43:11.867 [INFO] [Thread-15970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] client lang: <none>
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] server lang: <none>
2025-11-12T12:43:11.874 [DEBUG] [Thread-15970] [transport.py] [_log()] kex follows: False
2025-11-12T12:43:11.875 [DEBUG] [Thread-15970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:43:11.875 [DEBUG] [Thread-15970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:43:11.875 [DEBUG] [Thread-15970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:43:11.875 [DEBUG] [Thread-15970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:43:11.875 [DEBUG] [Thread-15970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:43:11.875 [DEBUG] [Thread-15970] [transport.py] [_log()] Compression: none
2025-11-12T12:43:11.875 [DEBUG] [Thread-15970] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:43:11.932 [DEBUG] [Thread-15970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:43:11.932 [DEBUG] [Thread-15970] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:43:11.932 [DEBUG] [Thread-15970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:43:11.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:43:11.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:43:11.990 [DEBUG] [Thread-15970] [transport.py] [_log()] userauth is OK
2025-11-12T12:43:11.990 [DEBUG] [Thread-15970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:43:11.990 [DEBUG] [Thread-15970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:43:11.990 [DEBUG] [Thread-15970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:43:11.990 [DEBUG] [Thread-15970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:43:12.008 [INFO] [Thread-15970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:43:12.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:43:12.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:43:12.854 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:43:12.855 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:43:12.870 [DEBUG] [Thread-15970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:43:12.870 [DEBUG] [Thread-15970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:43:12.918 [DEBUG] [Thread-15970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:43:12.918 [DEBUG] [Thread-15970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:43:12.927 [DEBUG] [Thread-15970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:43:12.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:43:12.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:43:12.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-11-12T12:43:12.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:43:12.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:43:12.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:43:12.961 [DEBUG] [Thread-15970] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:43:21.701 [DEBUG] [Thread-15972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:43:32.452 [DEBUG] [Thread-15973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:43:36.755 [DEBUG] [Thread-15974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:43:42.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:43:42.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:43:42.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-11-12T12:43:43.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 43, 15), 32.5, 11.41, 0.0, 38.34, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:43:43.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:43:15
2025-11-12T12:43:43.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:43:43.891 [DEBUG] [Thread-15975] [transport.py] [_log()] starting thread (client mode): 0x14980dc0
2025-11-12T12:43:43.891 [DEBUG] [Thread-15975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:43:43.911 [DEBUG] [Thread-15975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:43:43.911 [INFO] [Thread-15975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:43:43.914 [DEBUG] [Thread-15975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:43:43.914 [DEBUG] [Thread-15975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:43:43.914 [DEBUG] [Thread-15975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:43:43.914 [DEBUG] [Thread-15975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] client lang: <none>
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] server lang: <none>
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] kex follows: False
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] Compression: none
2025-11-12T12:43:43.915 [DEBUG] [Thread-15975] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:43:43.930 [DEBUG] [Thread-15975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:43:43.931 [DEBUG] [Thread-15975] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:43:43.931 [DEBUG] [Thread-15975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:43:43.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:43:43.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:43:43.972 [DEBUG] [Thread-15975] [transport.py] [_log()] userauth is OK
2025-11-12T12:43:43.972 [DEBUG] [Thread-15975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:43:43.972 [DEBUG] [Thread-15975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:43:43.973 [DEBUG] [Thread-15975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:43:43.973 [DEBUG] [Thread-15975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:43:44.003 [INFO] [Thread-15975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:43:44.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:43:44.770 [DEBUG] [Thread-15975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:43:44.770 [DEBUG] [Thread-15975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:43:44.771 [DEBUG] [Thread-15975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:43:44.810 [DEBUG] [Thread-15975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:43:44.811 [DEBUG] [Thread-15975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:43:44.814 [DEBUG] [Thread-15975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:43:44.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:43:44.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:43:44.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:43:44.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:43:44.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:43:44.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:43:44.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:43:44.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:43:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:43:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.446616 -999.00  +26.50  28.27     16   -0.80 1 1 1 1 1   888    0 24.85 -35.42 ----- 28.2 28.3 278.8 35.0 31.8 -29.9 31.2 -25.7 30.3 -24.5 31.6 -26.1
2025-11-12T12:43:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:43:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:43:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.446616
2025-11-12T12:43:44.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:43:44.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:43:44.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:43:44.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:43:44.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:43:44.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:43:15', tmtdew=32.5, humidity=11.41, cloud=0.0, wind=38.34, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:43:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:43:44.841 [DEBUG] [Thread-15975] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:43: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-11-12T12:43:44.937 [DEBUG] [Thread-15978] [transport.py] [_log()] starting thread (client mode): 0x19ddb250
2025-11-12T12:43:44.937 [DEBUG] [Thread-15978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:43:44.952 [DEBUG] [Thread-15978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:43:44.952 [INFO] [Thread-15978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] client lang: <none>
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] server lang: <none>
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] kex follows: False
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:43:44.960 [DEBUG] [Thread-15978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:43:44.961 [DEBUG] [Thread-15978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:43:44.961 [DEBUG] [Thread-15978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:43:44.961 [DEBUG] [Thread-15978] [transport.py] [_log()] Compression: none
2025-11-12T12:43:44.961 [DEBUG] [Thread-15978] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:43:45.019 [DEBUG] [Thread-15978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:43:45.020 [DEBUG] [Thread-15978] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:43:45.020 [DEBUG] [Thread-15978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:43:45.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:43:45.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:43:45.078 [DEBUG] [Thread-15978] [transport.py] [_log()] userauth is OK
2025-11-12T12:43:45.079 [DEBUG] [Thread-15978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:43:45.079 [DEBUG] [Thread-15978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:43:45.079 [DEBUG] [Thread-15978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:43:45.079 [DEBUG] [Thread-15978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:43:45.098 [INFO] [Thread-15978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:43:45.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:43:45.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:43:45.950 [DEBUG] [Thread-15978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:43:45.950 [DEBUG] [Thread-15978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:43:45.998 [DEBUG] [Thread-15978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:43:45.998 [DEBUG] [Thread-15978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:43:46.006 [DEBUG] [Thread-15978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:43:46.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:43:46.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-11-12T12:43:46.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-11-12T12:43:46.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:43:46.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:43:46.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:43:46.038 [DEBUG] [Thread-15978] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:43:51.794 [DEBUG] [Thread-15980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:44:06.848 [DEBUG] [Thread-15981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:44:12.997 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:44:12.998 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:44:16.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:44:16.061 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:44:16.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-11-12T12:44:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 43, 47), 32.27, 11.54, 0.0, 31.67, 26.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:44:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:43:47
2025-11-12T12:44:16.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:44:16.982 [DEBUG] [Thread-15982] [transport.py] [_log()] starting thread (client mode): 0x1493fd30
2025-11-12T12:44:16.982 [DEBUG] [Thread-15982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:44:17.002 [DEBUG] [Thread-15982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:44:17.003 [INFO] [Thread-15982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] client lang: <none>
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] server lang: <none>
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] kex follows: False
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] Compression: none
2025-11-12T12:44:17.006 [DEBUG] [Thread-15982] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:44:17.023 [DEBUG] [Thread-15982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:44:17.024 [DEBUG] [Thread-15982] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:44:17.024 [DEBUG] [Thread-15982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:44:17.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:44:17.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:44:17.026 [DEBUG] [Thread-15982] [transport.py] [_log()] userauth is OK
2025-11-12T12:44:17.027 [DEBUG] [Thread-15982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:44:17.027 [DEBUG] [Thread-15982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:44:17.027 [DEBUG] [Thread-15982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:44:17.027 [DEBUG] [Thread-15982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:44:17.052 [INFO] [Thread-15982] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:44:17.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:44:17.659 [DEBUG] [Thread-15982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:44:17.659 [DEBUG] [Thread-15982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:44:17.659 [DEBUG] [Thread-15982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:44:17.700 [DEBUG] [Thread-15982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:44:17.700 [DEBUG] [Thread-15982] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:44:17.704 [DEBUG] [Thread-15982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:44:17.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:44:17.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:44:17.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:44:17.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:44:17.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:44:17.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:44:17.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:44:17.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:44:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:44:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.446964 -999.00  +26.50  34.98     16   -0.90 1 1 2 1 1   888    0 25.14 -35.00 ----- 30.2 35.0 297.4 36.1 31.9 -25.2 31.2 -26.3 30.5 -25.4 31.6 -24.7
2025-11-12T12:44:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:44:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:44:17.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.446964
2025-11-12T12:44:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:44:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:44:17.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:44:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:44:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:44:17.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:43:47', tmtdew=32.27, humidity=11.54, cloud=0.0, wind=31.67, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:43:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:44:17.730 [DEBUG] [Thread-15982] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:44:17.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:44:17.827 [DEBUG] [Thread-15985] [transport.py] [_log()] starting thread (client mode): 0x14920340
2025-11-12T12:44:17.827 [DEBUG] [Thread-15985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:44:17.841 [DEBUG] [Thread-15985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:44:17.842 [INFO] [Thread-15985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:44:17.849 [DEBUG] [Thread-15985] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:44:17.849 [DEBUG] [Thread-15985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] client lang: <none>
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] server lang: <none>
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] kex follows: False
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] Compression: none
2025-11-12T12:44:17.850 [DEBUG] [Thread-15985] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:44:17.906 [DEBUG] [Thread-15985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:44:17.907 [DEBUG] [Thread-15985] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:44:17.907 [DEBUG] [Thread-15985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:44:17.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:44:17.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:44:17.963 [DEBUG] [Thread-15985] [transport.py] [_log()] userauth is OK
2025-11-12T12:44:17.963 [DEBUG] [Thread-15985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:44:17.963 [DEBUG] [Thread-15985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:44:17.963 [DEBUG] [Thread-15985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:44:17.963 [DEBUG] [Thread-15985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:44:17.982 [INFO] [Thread-15985] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:44:17.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:44:17.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:44:18.829 [DEBUG] [Thread-15985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:44:18.829 [DEBUG] [Thread-15985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:44:18.877 [DEBUG] [Thread-15985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:44:18.878 [DEBUG] [Thread-15985] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:44:18.887 [DEBUG] [Thread-15985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:44:18.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:44:18.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-11-12T12:44:18.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-11-12T12:44:18.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:44:18.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:44:18.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:44:18.923 [DEBUG] [Thread-15985] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:44:21.883 [DEBUG] [Thread-15987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:44:32.484 [DEBUG] [Thread-15988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:44:36.923 [DEBUG] [Thread-15989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:44:48.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:44:48.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:44:48.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-11-12T12:44:49.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 44, 19), 32.28, 11.51, 0.0, 34.35, 26.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:44:49.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:44:19
2025-11-12T12:44:49.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:44:49.843 [DEBUG] [Thread-15990] [transport.py] [_log()] starting thread (client mode): 0x1493fcd0
2025-11-12T12:44:49.843 [DEBUG] [Thread-15990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:44:49.863 [DEBUG] [Thread-15990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:44:49.863 [INFO] [Thread-15990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:44:49.864 [DEBUG] [Thread-15990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:44:49.864 [DEBUG] [Thread-15990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:44:49.864 [DEBUG] [Thread-15990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:44:49.864 [DEBUG] [Thread-15990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] client lang: <none>
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] server lang: <none>
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] kex follows: False
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] Compression: none
2025-11-12T12:44:49.865 [DEBUG] [Thread-15990] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:44:49.879 [DEBUG] [Thread-15990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:44:49.880 [DEBUG] [Thread-15990] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:44:49.880 [DEBUG] [Thread-15990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:44:49.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:44:49.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:44:49.882 [DEBUG] [Thread-15990] [transport.py] [_log()] userauth is OK
2025-11-12T12:44:49.882 [DEBUG] [Thread-15990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:44:49.882 [DEBUG] [Thread-15990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:44:49.882 [DEBUG] [Thread-15990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:44:49.882 [DEBUG] [Thread-15990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:44:49.901 [INFO] [Thread-15990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:44:49.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:44:50.657 [DEBUG] [Thread-15990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:44:50.657 [DEBUG] [Thread-15990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:44:50.658 [DEBUG] [Thread-15990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:44:50.699 [DEBUG] [Thread-15990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:44:50.699 [DEBUG] [Thread-15990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:44:50.702 [DEBUG] [Thread-15990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:44:50.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:44:50.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:44:50.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:44:50.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:44:50.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:44:50.721 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:44:50.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:44:50.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:44:50.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:44:50.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.447311 -999.00  +26.10  30.46     17   -0.50 1 1 2 1 1   888    0 25.21 -32.87 ----- 24.6 30.5 298.6 39.5 31.8 -27.3 31.1 -26.3 30.6 -25.2 31.7 -24.9
2025-11-12T12:44:50.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:44:50.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:44:50.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.447311
2025-11-12T12:44:50.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:44:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:44:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:44:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:44:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:44:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:44:19', tmtdew=32.28, humidity=11.51, cloud=0.0, wind=34.35, temperature=26.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:44:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:44:50.724 [DEBUG] [Thread-15990] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:44:50.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:44:50.820 [DEBUG] [Thread-15993] [transport.py] [_log()] starting thread (client mode): 0x17344af0
2025-11-12T12:44:50.820 [DEBUG] [Thread-15993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:44:50.835 [DEBUG] [Thread-15993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:44:50.835 [INFO] [Thread-15993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:44:50.842 [DEBUG] [Thread-15993] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:44:50.842 [DEBUG] [Thread-15993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:44:50.842 [DEBUG] [Thread-15993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:44:50.842 [DEBUG] [Thread-15993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:44:50.842 [DEBUG] [Thread-15993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:44:50.842 [DEBUG] [Thread-15993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] client lang: <none>
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] server lang: <none>
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] kex follows: False
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] Compression: none
2025-11-12T12:44:50.843 [DEBUG] [Thread-15993] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:44:50.902 [DEBUG] [Thread-15993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:44:50.903 [DEBUG] [Thread-15993] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:44:50.903 [DEBUG] [Thread-15993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:44:50.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:44:50.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:44:50.959 [DEBUG] [Thread-15993] [transport.py] [_log()] userauth is OK
2025-11-12T12:44:50.959 [DEBUG] [Thread-15993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:44:50.960 [DEBUG] [Thread-15993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:44:50.960 [DEBUG] [Thread-15993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:44:50.960 [DEBUG] [Thread-15993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:44:50.980 [INFO] [Thread-15993] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:44: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-11-12T12:44:50.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:44:51.899 [DEBUG] [Thread-15993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:44:51.900 [DEBUG] [Thread-15993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:44:51.947 [DEBUG] [Thread-15993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:44:51.948 [DEBUG] [Thread-15993] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:44:51.957 [DEBUG] [Thread-15993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:44:51.960 [DEBUG] [Thread-15995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:44:51.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:44:51.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-11-12T12:44:51.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-11-12T12:44:51.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:44:51.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:44:51.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:44:51.993 [DEBUG] [Thread-15993] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:45:07.007 [DEBUG] [Thread-15996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:45:13.138 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:45:13.139 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:45:22.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:45:22.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:45:22.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-11-12T12:45:22.037 [DEBUG] [Thread-15997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:45:22.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 44, 51), 32.75, 11.41, 0.0, 27.08, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:45:22.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:44:51
2025-11-12T12:45:22.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:45:22.935 [DEBUG] [Thread-15998] [transport.py] [_log()] starting thread (client mode): 0x17345ae0
2025-11-12T12:45:22.935 [DEBUG] [Thread-15998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:45:22.955 [DEBUG] [Thread-15998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:45:22.955 [INFO] [Thread-15998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:45:22.958 [DEBUG] [Thread-15998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:45:22.958 [DEBUG] [Thread-15998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:45:22.958 [DEBUG] [Thread-15998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:45:22.958 [DEBUG] [Thread-15998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:45:22.958 [DEBUG] [Thread-15998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:45:22.958 [DEBUG] [Thread-15998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:45:22.958 [DEBUG] [Thread-15998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] client lang: <none>
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] server lang: <none>
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] kex follows: False
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] Compression: none
2025-11-12T12:45:22.959 [DEBUG] [Thread-15998] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:45:22.975 [DEBUG] [Thread-15998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:45:22.975 [DEBUG] [Thread-15998] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:45:22.976 [DEBUG] [Thread-15998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:45:22.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:45:22.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:45:22.978 [DEBUG] [Thread-15998] [transport.py] [_log()] userauth is OK
2025-11-12T12:45:22.978 [DEBUG] [Thread-15998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:45:22.978 [DEBUG] [Thread-15998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:45:22.978 [DEBUG] [Thread-15998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:45:22.978 [DEBUG] [Thread-15998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:45:23.002 [INFO] [Thread-15998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:45:23.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:45:23.632 [DEBUG] [Thread-15998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:45:23.632 [DEBUG] [Thread-15998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:45:23.633 [DEBUG] [Thread-15998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:45:23.673 [DEBUG] [Thread-15998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:45:23.673 [DEBUG] [Thread-15998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:45:23.676 [DEBUG] [Thread-15998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:45:23.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:45:23.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:45:23.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:45:23.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:45:23.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:45:23.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:45:23.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:45:23.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:45:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:45:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.447658 -999.00  +26.20  18.74     17   -0.30 1 1 1 1 1   888    0 24.88 -33.99 ----- 17.5 18.7 307.6 29.4 31.9 -26.0 31.2 -24.1 30.6 -23.3 31.6 -24.8
2025-11-12T12:45:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:45:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:45:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.447658
2025-11-12T12:45:23.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:45:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:45:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:45:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:45:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:45:23.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:44:51', tmtdew=32.75, humidity=11.41, cloud=0.0, wind=27.08, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:44:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:45:23.700 [DEBUG] [Thread-15998] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:45:23.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:45:23.793 [DEBUG] [Thread-16001] [transport.py] [_log()] starting thread (client mode): 0x1493d1b0
2025-11-12T12:45:23.793 [DEBUG] [Thread-16001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:45:23.808 [DEBUG] [Thread-16001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:45:23.808 [INFO] [Thread-16001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:45:23.816 [DEBUG] [Thread-16001] [transport.py] [_log()] client lang: <none>
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] server lang: <none>
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] kex follows: False
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] Compression: none
2025-11-12T12:45:23.817 [DEBUG] [Thread-16001] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:45:23.876 [DEBUG] [Thread-16001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:45:23.877 [DEBUG] [Thread-16001] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:45:23.877 [DEBUG] [Thread-16001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:45:23.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:45:23.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:45:23.935 [DEBUG] [Thread-16001] [transport.py] [_log()] userauth is OK
2025-11-12T12:45:23.935 [DEBUG] [Thread-16001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:45:23.935 [DEBUG] [Thread-16001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:45:23.935 [DEBUG] [Thread-16001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:45:23.935 [DEBUG] [Thread-16001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:45:23.957 [INFO] [Thread-16001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:45:23.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:45:23.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:45:24.837 [DEBUG] [Thread-16001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:45:24.837 [DEBUG] [Thread-16001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:45:24.885 [DEBUG] [Thread-16001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:45:24.885 [DEBUG] [Thread-16001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:45:24.893 [DEBUG] [Thread-16001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:45:24.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:45:24.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:45:24.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:45:24.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:45:24.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:45:24.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:45:24.925 [DEBUG] [Thread-16001] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:45:32.529 [DEBUG] [Thread-16003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:45:37.069 [DEBUG] [Thread-16004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:45:52.130 [DEBUG] [Thread-16005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:45:54.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:45:54.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:45:54.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-11-12T12:45:55.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 45, 23), 32.65, 11.49, 0.0, 24.28, 27.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:45:55.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:45:23
2025-11-12T12:45:55.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:45:55.847 [DEBUG] [Thread-16006] [transport.py] [_log()] starting thread (client mode): 0x1493d630
2025-11-12T12:45:55.847 [DEBUG] [Thread-16006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:45:55.867 [DEBUG] [Thread-16006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:45:55.867 [INFO] [Thread-16006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:45:55.868 [DEBUG] [Thread-16006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] client lang: <none>
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] server lang: <none>
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] kex follows: False
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] Compression: none
2025-11-12T12:45:55.869 [DEBUG] [Thread-16006] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:45:55.878 [DEBUG] [Thread-16006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:45:55.878 [DEBUG] [Thread-16006] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:45:55.879 [DEBUG] [Thread-16006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:45:55.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:45:55.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:45:55.880 [DEBUG] [Thread-16006] [transport.py] [_log()] userauth is OK
2025-11-12T12:45:55.880 [DEBUG] [Thread-16006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:45:55.880 [DEBUG] [Thread-16006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:45:55.880 [DEBUG] [Thread-16006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:45:55.881 [DEBUG] [Thread-16006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:45:55.897 [INFO] [Thread-16006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:45:55.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:45:56.666 [DEBUG] [Thread-16006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:45:56.667 [DEBUG] [Thread-16006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:45:56.667 [DEBUG] [Thread-16006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:45:56.707 [DEBUG] [Thread-16006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:45:56.707 [DEBUG] [Thread-16006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:45:56.709 [DEBUG] [Thread-16006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:45:56.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:45:56.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:45:56.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:45:56.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:45:56.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:45:56.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:45:56.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:45:56.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.448005 -999.00  +26.60  22.91     17   -0.20 1 1 1 1 1   888    0 25.63 -33.97 ----- 17.8 22.9 288.4 26.9 32.0 -26.0 31.3 -24.7 30.8 -25.6 31.8 -25.1
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.448005
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:45:56.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:45:23', tmtdew=32.65, humidity=11.49, cloud=0.0, wind=24.28, temperature=27.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:45:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:45:56.722 [DEBUG] [Thread-16006] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:45:56.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:45:56.807 [DEBUG] [Thread-16009] [transport.py] [_log()] starting thread (client mode): 0x173e93c0
2025-11-12T12:45:56.807 [DEBUG] [Thread-16009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:45:56.825 [DEBUG] [Thread-16009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:45:56.825 [INFO] [Thread-16009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] client lang: <none>
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] server lang: <none>
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] kex follows: False
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:45:56.832 [DEBUG] [Thread-16009] [transport.py] [_log()] Compression: none
2025-11-12T12:45:56.833 [DEBUG] [Thread-16009] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:45:56.889 [DEBUG] [Thread-16009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:45:56.890 [DEBUG] [Thread-16009] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:45:56.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:45:56.890 [DEBUG] [Thread-16009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:45:56.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:45:56.946 [DEBUG] [Thread-16009] [transport.py] [_log()] userauth is OK
2025-11-12T12:45:56.946 [DEBUG] [Thread-16009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:45:56.946 [DEBUG] [Thread-16009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:45:56.946 [DEBUG] [Thread-16009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:45:56.946 [DEBUG] [Thread-16009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:45:56.964 [INFO] [Thread-16009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:45:56.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:45:56.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:45:57.838 [DEBUG] [Thread-16009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:45:57.838 [DEBUG] [Thread-16009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:45:57.886 [DEBUG] [Thread-16009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:45:57.886 [DEBUG] [Thread-16009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:45:57.895 [DEBUG] [Thread-16009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:45:57.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:45:57.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-11-12T12:45:57.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:45:57.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:45:57.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:45:57.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:45:57.926 [DEBUG] [Thread-16009] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:46:07.166 [DEBUG] [Thread-16011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:46:13.280 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:46:13.282 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:46:22.227 [DEBUG] [Thread-16012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:46:27.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:46:27.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:46:27.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:46:28.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 45, 55), 33.17, 11.01, 0.0, 30.19, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:46:28.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:45:55
2025-11-12T12:46:28.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:46:28.921 [DEBUG] [Thread-16013] [transport.py] [_log()] starting thread (client mode): 0x14982ce0
2025-11-12T12:46:28.921 [DEBUG] [Thread-16013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:46:28.941 [DEBUG] [Thread-16013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:46:28.941 [INFO] [Thread-16013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] client lang: <none>
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] server lang: <none>
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] kex follows: False
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] Compression: none
2025-11-12T12:46:28.945 [DEBUG] [Thread-16013] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:46:28.963 [DEBUG] [Thread-16013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:46:28.963 [DEBUG] [Thread-16013] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:46:28.963 [DEBUG] [Thread-16013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:46:28.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:46:28.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:46:28.964 [DEBUG] [Thread-16013] [transport.py] [_log()] userauth is OK
2025-11-12T12:46:28.964 [DEBUG] [Thread-16013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:46:28.964 [DEBUG] [Thread-16013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:46:28.964 [DEBUG] [Thread-16013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:46:28.964 [DEBUG] [Thread-16013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:46:28.973 [INFO] [Thread-16013] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:46:28.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:46:29.601 [DEBUG] [Thread-16013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:46:29.601 [DEBUG] [Thread-16013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:46:29.601 [DEBUG] [Thread-16013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:46:29.642 [DEBUG] [Thread-16013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:46:29.642 [DEBUG] [Thread-16013] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:46:29.645 [DEBUG] [Thread-16013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:46:29.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:46:29.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:46:29.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:46:29.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:46:29.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:46:29.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:46:29.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.448352 -999.00  +27.20  28.10     15   -0.90 1 1 1 1 1   888    0 25.28 -27.88 ----- 28.8 28.1 270.2 32.4 32.3 -25.9 31.3 -25.8 31.1 -26.5 32.0 -23.6
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.448352
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:46:29.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:45:55', tmtdew=33.17, humidity=11.01, cloud=0.0, wind=30.19, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:45:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:46:29.657 [DEBUG] [Thread-16013] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:46:29.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:46:29.741 [DEBUG] [Thread-16016] [transport.py] [_log()] starting thread (client mode): 0x14980640
2025-11-12T12:46:29.741 [DEBUG] [Thread-16016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:46:29.756 [DEBUG] [Thread-16016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:46:29.756 [INFO] [Thread-16016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] client lang: <none>
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] server lang: <none>
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] kex follows: False
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] Compression: none
2025-11-12T12:46:29.764 [DEBUG] [Thread-16016] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:46:29.822 [DEBUG] [Thread-16016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:46:29.822 [DEBUG] [Thread-16016] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:46:29.822 [DEBUG] [Thread-16016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:46:29.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:46:29.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:46:29.878 [DEBUG] [Thread-16016] [transport.py] [_log()] userauth is OK
2025-11-12T12:46:29.878 [DEBUG] [Thread-16016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:46:29.878 [DEBUG] [Thread-16016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:46:29.878 [DEBUG] [Thread-16016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:46:29.878 [DEBUG] [Thread-16016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:46:29.893 [INFO] [Thread-16016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:46:29.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:46:29.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:46:30.820 [DEBUG] [Thread-16016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:46:30.820 [DEBUG] [Thread-16016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:46:30.868 [DEBUG] [Thread-16016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:46:30.869 [DEBUG] [Thread-16016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:46:30.879 [DEBUG] [Thread-16016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:46:30.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:46:30.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-11-12T12:46:30.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-11-12T12:46:30.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:46:30.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:46:30.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:46:30.913 [DEBUG] [Thread-16016] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:46:32.562 [DEBUG] [Thread-16018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:46:37.259 [DEBUG] [Thread-16019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:46:52.319 [DEBUG] [Thread-16020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:47:00.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:47:00.934 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:47:00.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-11-12T12:47:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 46, 27), 33.77, 10.56, 0.0, 34.39, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:47:01.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:46:27
2025-11-12T12:47:01.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:47:01.924 [DEBUG] [Thread-16021] [transport.py] [_log()] starting thread (client mode): 0x19dda320
2025-11-12T12:47:01.924 [DEBUG] [Thread-16021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:47:01.944 [DEBUG] [Thread-16021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:47:01.944 [INFO] [Thread-16021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] client lang: <none>
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] server lang: <none>
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] kex follows: False
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] Compression: none
2025-11-12T12:47:01.948 [DEBUG] [Thread-16021] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:47:01.964 [DEBUG] [Thread-16021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:47:01.964 [DEBUG] [Thread-16021] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:47:01.965 [DEBUG] [Thread-16021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:47:01.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:47:01.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:47:01.966 [DEBUG] [Thread-16021] [transport.py] [_log()] userauth is OK
2025-11-12T12:47:01.966 [DEBUG] [Thread-16021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:47:01.966 [DEBUG] [Thread-16021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:47:01.966 [DEBUG] [Thread-16021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:47:01.966 [DEBUG] [Thread-16021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:47:01.985 [INFO] [Thread-16021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:47:01.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:47:02.756 [DEBUG] [Thread-16021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:47:02.756 [DEBUG] [Thread-16021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:47:02.756 [DEBUG] [Thread-16021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:47:02.797 [DEBUG] [Thread-16021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:47:02.797 [DEBUG] [Thread-16021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:47:02.799 [DEBUG] [Thread-16021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:47:02.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:47:02.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:47:02.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:47:02.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:47:02.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:47:02.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:47:02.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.449047 -999.00  +27.30  25.12     15   -0.90 1 1 1 1 1   888    0 25.64 -14.11 ----- 20.9 25.1 278.2 40.6 32.2 -28.0 31.5 -26.0 31.0 -31.5 32.0 -26.6
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.449047
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:47:02.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:46:27', tmtdew=33.77, humidity=10.56, cloud=0.0, wind=34.39, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:46:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:47:02.811 [DEBUG] [Thread-16021] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:47: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-11-12T12:47:02.896 [DEBUG] [Thread-16024] [transport.py] [_log()] starting thread (client mode): 0x149564d0
2025-11-12T12:47:02.896 [DEBUG] [Thread-16024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:47:02.911 [DEBUG] [Thread-16024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:47:02.912 [INFO] [Thread-16024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] client lang: <none>
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] server lang: <none>
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] kex follows: False
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] Compression: none
2025-11-12T12:47:02.919 [DEBUG] [Thread-16024] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:47:02.977 [DEBUG] [Thread-16024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:47:02.977 [DEBUG] [Thread-16024] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:47:02.978 [DEBUG] [Thread-16024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:47:02.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:47:02.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:47:03.038 [DEBUG] [Thread-16024] [transport.py] [_log()] userauth is OK
2025-11-12T12:47:03.038 [DEBUG] [Thread-16024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:47:03.038 [DEBUG] [Thread-16024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:47:03.039 [DEBUG] [Thread-16024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:47:03.039 [DEBUG] [Thread-16024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:47:03.053 [INFO] [Thread-16024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:47:03.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:47:03.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:47:03.938 [DEBUG] [Thread-16024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:47:03.938 [DEBUG] [Thread-16024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:47:03.987 [DEBUG] [Thread-16024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:47:03.987 [DEBUG] [Thread-16024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:47:03.996 [DEBUG] [Thread-16024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:47:04.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:47:04.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:47:04.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-11-12T12:47:04.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:47:04.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:47:04.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:47:04.033 [DEBUG] [Thread-16024] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:47:07.358 [DEBUG] [Thread-16026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:47:13.423 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:47:13.424 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:47:22.413 [DEBUG] [Thread-16027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:47:32.590 [DEBUG] [Thread-16028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:47:34.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:47:34.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:47:34.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-11-12T12:47:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 46, 59), 33.71, 10.56, 0.0, 32.29, 26.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:47:34.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:46:59
2025-11-12T12:47:34.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:47:34.949 [DEBUG] [Thread-16029] [transport.py] [_log()] starting thread (client mode): 0x17345bd0
2025-11-12T12:47:34.950 [DEBUG] [Thread-16029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:47:34.971 [DEBUG] [Thread-16029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:47:34.971 [INFO] [Thread-16029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:47:34.974 [DEBUG] [Thread-16029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:47:34.974 [DEBUG] [Thread-16029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:47:34.974 [DEBUG] [Thread-16029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:47:34.974 [DEBUG] [Thread-16029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:47:34.974 [DEBUG] [Thread-16029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] client lang: <none>
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] server lang: <none>
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] kex follows: False
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] Compression: none
2025-11-12T12:47:34.975 [DEBUG] [Thread-16029] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:47:34.994 [DEBUG] [Thread-16029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:47:34.995 [DEBUG] [Thread-16029] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:47:34.996 [DEBUG] [Thread-16029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:47:34.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:47:34.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:47:34.999 [DEBUG] [Thread-16029] [transport.py] [_log()] userauth is OK
2025-11-12T12:47:34.999 [DEBUG] [Thread-16029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:47:34.999 [DEBUG] [Thread-16029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:47:34.999 [DEBUG] [Thread-16029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:47:34.999 [DEBUG] [Thread-16029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:47:35.035 [INFO] [Thread-16029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:47:35.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:47:35.661 [DEBUG] [Thread-16029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:47:35.661 [DEBUG] [Thread-16029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:47:35.662 [DEBUG] [Thread-16029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:47:35.702 [DEBUG] [Thread-16029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:47:35.703 [DEBUG] [Thread-16029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:47:35.705 [DEBUG] [Thread-16029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:47:35.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:47:35.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:47:35.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:47:35.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:47:35.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:47:35.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:47:35.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:47:35.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:47:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:47:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.449394 -999.00  +26.70  28.29     15   -1.30 1 1 1 1 1   888    0 25.87 -5.78 ----- 25.1 28.3 263.8 30.7 32.1 -27.5 31.4 -25.8 30.9 -25.3 31.9 -25.4
2025-11-12T12:47:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:47:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:47:35.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.449394
2025-11-12T12:47:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:47:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:47:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:47:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:47:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:47:35.734 [DEBUG] [Thread-16029] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:47:35.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:46:59', tmtdew=33.71, humidity=10.56, cloud=0.0, wind=32.29, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:47:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:47:35.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:47:35.830 [DEBUG] [Thread-16032] [transport.py] [_log()] starting thread (client mode): 0x1737c040
2025-11-12T12:47:35.830 [DEBUG] [Thread-16032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:47:35.845 [DEBUG] [Thread-16032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:47:35.846 [INFO] [Thread-16032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] client lang: <none>
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] server lang: <none>
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] kex follows: False
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:47:35.853 [DEBUG] [Thread-16032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:47:35.854 [DEBUG] [Thread-16032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:47:35.854 [DEBUG] [Thread-16032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:47:35.854 [DEBUG] [Thread-16032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:47:35.854 [DEBUG] [Thread-16032] [transport.py] [_log()] Compression: none
2025-11-12T12:47:35.854 [DEBUG] [Thread-16032] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:47:35.912 [DEBUG] [Thread-16032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:47:35.913 [DEBUG] [Thread-16032] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:47:35.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:47:35.914 [DEBUG] [Thread-16032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:47:35.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:47:35.971 [DEBUG] [Thread-16032] [transport.py] [_log()] userauth is OK
2025-11-12T12:47:35.971 [DEBUG] [Thread-16032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:47:35.972 [DEBUG] [Thread-16032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:47:35.972 [DEBUG] [Thread-16032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:47:35.972 [DEBUG] [Thread-16032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:47:35.991 [INFO] [Thread-16032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:47:35.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:47:35.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:47:36.859 [DEBUG] [Thread-16032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:47:36.859 [DEBUG] [Thread-16032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:47:36.907 [DEBUG] [Thread-16032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:47:36.907 [DEBUG] [Thread-16032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:47:36.915 [DEBUG] [Thread-16032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:47:36.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:47:36.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-11-12T12:47:36.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-11-12T12:47:36.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:47:36.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:47:36.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:47:36.947 [DEBUG] [Thread-16032] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:47:37.444 [DEBUG] [Thread-16034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:47:52.494 [DEBUG] [Thread-16035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:48:06.950 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:48:06.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:48:06.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-11-12T12:48:07.528 [DEBUG] [Thread-16036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:48:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 48, 4), 34.08, 10.33, 0.0, 32.34, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:48:07.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:48:04
2025-11-12T12:48:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:48:07.866 [DEBUG] [Thread-16037] [transport.py] [_log()] starting thread (client mode): 0x1737f460
2025-11-12T12:48:07.866 [DEBUG] [Thread-16037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:48:07.885 [DEBUG] [Thread-16037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:48:07.885 [INFO] [Thread-16037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:48:07.888 [DEBUG] [Thread-16037] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:48:07.888 [DEBUG] [Thread-16037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:48:07.888 [DEBUG] [Thread-16037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] client lang: <none>
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] server lang: <none>
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] kex follows: False
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] Compression: none
2025-11-12T12:48:07.889 [DEBUG] [Thread-16037] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:48:07.906 [DEBUG] [Thread-16037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:48:07.907 [DEBUG] [Thread-16037] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:48:07.907 [DEBUG] [Thread-16037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:48:07.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:48:07.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:48:07.909 [DEBUG] [Thread-16037] [transport.py] [_log()] userauth is OK
2025-11-12T12:48:07.910 [DEBUG] [Thread-16037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:48:07.910 [DEBUG] [Thread-16037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:48:07.910 [DEBUG] [Thread-16037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:48:07.910 [DEBUG] [Thread-16037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:48:07.934 [INFO] [Thread-16037] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:48:07.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:48:08.682 [DEBUG] [Thread-16037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:48:08.682 [DEBUG] [Thread-16037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:48:08.683 [DEBUG] [Thread-16037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:48:08.723 [DEBUG] [Thread-16037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:48:08.724 [DEBUG] [Thread-16037] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:48:08.727 [DEBUG] [Thread-16037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:48:08.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:48:08.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:48:08.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:48:08.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:48:08.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:48:08.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:48:08.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:48:08.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:48:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:48:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.449741 -999.00  +27.00  16.93     15   -1.30 1 1 1 1 1   888    0 26.58 5.33 ----- 19.1 16.9 261.5 26.5 32.2 -25.8 31.6 -25.4 30.9 -27.2 31.9 -24.2
2025-11-12T12:48:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:48:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:48:08.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.449741
2025-11-12T12:48:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:48:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:48:08.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:48:08.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:48:08.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:48:08.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:48:04', tmtdew=34.08, humidity=10.33, cloud=0.0, wind=32.34, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:47:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:48:08.755 [DEBUG] [Thread-16037] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:48:08.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:48:08.849 [DEBUG] [Thread-16040] [transport.py] [_log()] starting thread (client mode): 0x149815d0
2025-11-12T12:48:08.849 [DEBUG] [Thread-16040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:48:08.864 [DEBUG] [Thread-16040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:48:08.864 [INFO] [Thread-16040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:48:08.872 [DEBUG] [Thread-16040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:48:08.872 [DEBUG] [Thread-16040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:48:08.872 [DEBUG] [Thread-16040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:48:08.872 [DEBUG] [Thread-16040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:48:08.872 [DEBUG] [Thread-16040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:48:08.872 [DEBUG] [Thread-16040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:48:08.873 [DEBUG] [Thread-16040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:48:08.873 [DEBUG] [Thread-16040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:48:08.873 [DEBUG] [Thread-16040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:48:08.873 [DEBUG] [Thread-16040] [transport.py] [_log()] client lang: <none>
2025-11-12T12:48:08.873 [DEBUG] [Thread-16040] [transport.py] [_log()] server lang: <none>
2025-11-12T12:48:08.873 [DEBUG] [Thread-16040] [transport.py] [_log()] kex follows: False
2025-11-12T12:48:08.873 [DEBUG] [Thread-16040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:48:08.873 [DEBUG] [Thread-16040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:48:08.874 [DEBUG] [Thread-16040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:48:08.874 [DEBUG] [Thread-16040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:48:08.874 [DEBUG] [Thread-16040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:48:08.874 [DEBUG] [Thread-16040] [transport.py] [_log()] Compression: none
2025-11-12T12:48:08.874 [DEBUG] [Thread-16040] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:48:08.936 [DEBUG] [Thread-16040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:48:08.937 [DEBUG] [Thread-16040] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:48:08.937 [DEBUG] [Thread-16040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:48:08.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:48:08.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:48:08.995 [DEBUG] [Thread-16040] [transport.py] [_log()] userauth is OK
2025-11-12T12:48:08.996 [DEBUG] [Thread-16040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:48:08.996 [DEBUG] [Thread-16040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:48:08.996 [DEBUG] [Thread-16040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:48:08.996 [DEBUG] [Thread-16040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:48:09.014 [INFO] [Thread-16040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:48: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-11-12T12:48:09.015 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:48:09.862 [DEBUG] [Thread-16040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:48:09.862 [DEBUG] [Thread-16040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:48:09.911 [DEBUG] [Thread-16040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:48:09.912 [DEBUG] [Thread-16040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:48:09.920 [DEBUG] [Thread-16040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:48:09.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:48:09.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-11-12T12:48: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-11-12T12:48:09.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:48:09.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:48:09.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:48:09.957 [DEBUG] [Thread-16040] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:48:13.565 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:48:13.566 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:48:22.561 [DEBUG] [Thread-16042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:48:32.624 [DEBUG] [Thread-16043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:48:37.611 [DEBUG] [Thread-16044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:48:39.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:48:39.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:48:39.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-11-12T12:48:40.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 48, 35), 34.06, 10.01, 0.0, 25.69, 27.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:48:40.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:48:35
2025-11-12T12:48:40.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:48:40.886 [DEBUG] [Thread-16045] [transport.py] [_log()] starting thread (client mode): 0x173633d0
2025-11-12T12:48:40.886 [DEBUG] [Thread-16045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:48:40.907 [DEBUG] [Thread-16045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:48:40.907 [INFO] [Thread-16045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] client lang: <none>
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] server lang: <none>
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] kex follows: False
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] Compression: none
2025-11-12T12:48:40.910 [DEBUG] [Thread-16045] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:48:40.926 [DEBUG] [Thread-16045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:48:40.926 [DEBUG] [Thread-16045] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:48:40.927 [DEBUG] [Thread-16045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:48:40.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:48:40.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:48:40.928 [DEBUG] [Thread-16045] [transport.py] [_log()] userauth is OK
2025-11-12T12:48:40.928 [DEBUG] [Thread-16045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:48:40.928 [DEBUG] [Thread-16045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:48:40.928 [DEBUG] [Thread-16045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:48:40.928 [DEBUG] [Thread-16045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:48:40.940 [INFO] [Thread-16045] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:48:40.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:48:41.574 [DEBUG] [Thread-16045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:48:41.575 [DEBUG] [Thread-16045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:48:41.575 [DEBUG] [Thread-16045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:48:41.616 [DEBUG] [Thread-16045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:48:41.616 [DEBUG] [Thread-16045] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:48:41.619 [DEBUG] [Thread-16045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:48:41.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:48:41.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:48:41.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:48:41.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:48:41.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:48:41.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:48:41.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:48:41.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:48:41.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:48:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.450089 -999.00  +27.20  14.03     15   -1.50 1 1 1 1 1   888    0 27.40 20.42 ----- 20.1 14.0 278.4 26.1 32.2 -27.8 31.6 -25.3 31.1 -23.4 31.9 -25.7
2025-11-12T12:48:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:48:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:48:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.450089
2025-11-12T12:48:41.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:48:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:48:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:48:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:48:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:48:41.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:48:35', tmtdew=34.06, humidity=10.01, cloud=0.0, wind=25.69, temperature=27.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:48:07.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:48:41.647 [DEBUG] [Thread-16045] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:48:41.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:48:41.742 [DEBUG] [Thread-16048] [transport.py] [_log()] starting thread (client mode): 0x173fabf0
2025-11-12T12:48:41.742 [DEBUG] [Thread-16048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:48:41.757 [DEBUG] [Thread-16048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:48:41.757 [INFO] [Thread-16048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:48:41.765 [DEBUG] [Thread-16048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] client lang: <none>
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] server lang: <none>
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] kex follows: False
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:48:41.766 [DEBUG] [Thread-16048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:48:41.767 [DEBUG] [Thread-16048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:48:41.767 [DEBUG] [Thread-16048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:48:41.767 [DEBUG] [Thread-16048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:48:41.767 [DEBUG] [Thread-16048] [transport.py] [_log()] Compression: none
2025-11-12T12:48:41.767 [DEBUG] [Thread-16048] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:48:41.824 [DEBUG] [Thread-16048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:48:41.825 [DEBUG] [Thread-16048] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:48:41.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:48:41.826 [DEBUG] [Thread-16048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:48:41.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:48:41.883 [DEBUG] [Thread-16048] [transport.py] [_log()] userauth is OK
2025-11-12T12:48:41.884 [DEBUG] [Thread-16048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:48:41.884 [DEBUG] [Thread-16048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:48:41.884 [DEBUG] [Thread-16048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:48:41.884 [DEBUG] [Thread-16048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:48:41.909 [INFO] [Thread-16048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:48:41.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:48:41.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:48:42.769 [DEBUG] [Thread-16048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:48:42.769 [DEBUG] [Thread-16048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:48:42.821 [DEBUG] [Thread-16048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:48:42.821 [DEBUG] [Thread-16048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:48:42.830 [DEBUG] [Thread-16048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:48:42.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:48:42.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-11-12T12:48:42.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-11-12T12:48:42.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:48:42.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:48:42.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:48:42.864 [DEBUG] [Thread-16048] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:48:52.645 [DEBUG] [Thread-16050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:49:07.694 [DEBUG] [Thread-16051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:49:12.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:49:12.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:49:12.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-11-12T12:49:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 49, 7), 33.99, 10.01, 0.0, 25.71, 26.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:49:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:49:07
2025-11-12T12:49:13.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:49:13.705 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:49:13.706 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:49:13.788 [DEBUG] [Thread-16052] [transport.py] [_log()] starting thread (client mode): 0x14980190
2025-11-12T12:49:13.788 [DEBUG] [Thread-16052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:49:13.800 [DEBUG] [Thread-16052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:49:13.800 [INFO] [Thread-16052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] client lang: <none>
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] server lang: <none>
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] kex follows: False
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] Compression: none
2025-11-12T12:49:13.801 [DEBUG] [Thread-16052] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:49:13.811 [DEBUG] [Thread-16052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:49:13.811 [DEBUG] [Thread-16052] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:49:13.811 [DEBUG] [Thread-16052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:49:13.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:49:13.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:49:13.812 [DEBUG] [Thread-16052] [transport.py] [_log()] userauth is OK
2025-11-12T12:49:13.812 [DEBUG] [Thread-16052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:49:13.812 [DEBUG] [Thread-16052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:49:13.812 [DEBUG] [Thread-16052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:49:13.812 [DEBUG] [Thread-16052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:49:13.824 [INFO] [Thread-16052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:49:13.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:49:14.449 [DEBUG] [Thread-16052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:49:14.449 [DEBUG] [Thread-16052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:49:14.450 [DEBUG] [Thread-16052] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:49:14.490 [DEBUG] [Thread-16052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:49:14.490 [DEBUG] [Thread-16052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:49:14.493 [DEBUG] [Thread-16052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:49:14.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:49:14.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:49:14.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:49:14.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:49:14.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:49:14.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:49:14.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:49:14.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:49:14.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:49:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.450436 -999.00  +27.20  21.45     15   -1.40 1 1 1 1 1   888    0 27.46 36.32 ----- 23.2 21.4 293.4 27.1 32.3 -27.2 31.7 -24.9 31.1 -26.6 32.1 -25.4
2025-11-12T12:49:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:49:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:49:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.450436
2025-11-12T12:49:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:49:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:49:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:49:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:49:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:49:14.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:49:07', tmtdew=33.99, humidity=10.01, cloud=0.0, wind=25.71, temperature=26.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:48:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:49:14.524 [DEBUG] [Thread-16052] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:49:14.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:49:14.623 [DEBUG] [Thread-16055] [transport.py] [_log()] starting thread (client mode): 0x173f8130
2025-11-12T12:49:14.623 [DEBUG] [Thread-16055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:49:14.637 [DEBUG] [Thread-16055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:49:14.637 [INFO] [Thread-16055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:49:14.645 [DEBUG] [Thread-16055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:49:14.645 [DEBUG] [Thread-16055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:49:14.645 [DEBUG] [Thread-16055] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:49:14.645 [DEBUG] [Thread-16055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:49:14.645 [DEBUG] [Thread-16055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:49:14.645 [DEBUG] [Thread-16055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:49:14.646 [DEBUG] [Thread-16055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:49:14.646 [DEBUG] [Thread-16055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:49:14.646 [DEBUG] [Thread-16055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:49:14.646 [DEBUG] [Thread-16055] [transport.py] [_log()] client lang: <none>
2025-11-12T12:49:14.646 [DEBUG] [Thread-16055] [transport.py] [_log()] server lang: <none>
2025-11-12T12:49:14.646 [DEBUG] [Thread-16055] [transport.py] [_log()] kex follows: False
2025-11-12T12:49:14.646 [DEBUG] [Thread-16055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:49:14.646 [DEBUG] [Thread-16055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:49:14.647 [DEBUG] [Thread-16055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:49:14.647 [DEBUG] [Thread-16055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:49:14.647 [DEBUG] [Thread-16055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:49:14.647 [DEBUG] [Thread-16055] [transport.py] [_log()] Compression: none
2025-11-12T12:49:14.647 [DEBUG] [Thread-16055] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:49:14.705 [DEBUG] [Thread-16055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:49:14.706 [DEBUG] [Thread-16055] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:49:14.707 [DEBUG] [Thread-16055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:49:14.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:49:14.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:49:14.763 [DEBUG] [Thread-16055] [transport.py] [_log()] userauth is OK
2025-11-12T12:49:14.764 [DEBUG] [Thread-16055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:49:14.764 [DEBUG] [Thread-16055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:49:14.764 [DEBUG] [Thread-16055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:49:14.764 [DEBUG] [Thread-16055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:49:14.782 [INFO] [Thread-16055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:49:14.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:49:14.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:49:15.635 [DEBUG] [Thread-16055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:49:15.635 [DEBUG] [Thread-16055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:49:15.683 [DEBUG] [Thread-16055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:49:15.683 [DEBUG] [Thread-16055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:49:15.692 [DEBUG] [Thread-16055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:49:15.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:49:15.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-11-12T12:49:15.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-11-12T12:49:15.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:49:15.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:49:15.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:49:15.728 [DEBUG] [Thread-16055] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:49:22.731 [DEBUG] [Thread-16057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:49:32.652 [DEBUG] [Thread-16058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:49:37.777 [DEBUG] [Thread-16059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:49:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:49:45.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:49:45.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:49:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 49, 39), 34.55, 9.82, 0.0, 27.42, 26.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:49:46.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:49:39
2025-11-12T12:49:46.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:49:46.641 [DEBUG] [Thread-16060] [transport.py] [_log()] starting thread (client mode): 0x1737fac0
2025-11-12T12:49:46.641 [DEBUG] [Thread-16060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:49:46.660 [DEBUG] [Thread-16060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:49:46.661 [INFO] [Thread-16060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:49:46.664 [DEBUG] [Thread-16060] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:49:46.664 [DEBUG] [Thread-16060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:49:46.664 [DEBUG] [Thread-16060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:49:46.664 [DEBUG] [Thread-16060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:49:46.664 [DEBUG] [Thread-16060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] client lang: <none>
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] server lang: <none>
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] kex follows: False
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] Compression: none
2025-11-12T12:49:46.665 [DEBUG] [Thread-16060] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:49:46.684 [DEBUG] [Thread-16060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:49:46.685 [DEBUG] [Thread-16060] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:49:46.685 [DEBUG] [Thread-16060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:49:46.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:49:46.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:49:46.687 [DEBUG] [Thread-16060] [transport.py] [_log()] userauth is OK
2025-11-12T12:49:46.687 [DEBUG] [Thread-16060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:49:46.687 [DEBUG] [Thread-16060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:49:46.688 [DEBUG] [Thread-16060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:49:46.688 [DEBUG] [Thread-16060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:49:46.712 [INFO] [Thread-16060] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:49:46.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:49:47.339 [DEBUG] [Thread-16060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:49:47.339 [DEBUG] [Thread-16060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:49:47.339 [DEBUG] [Thread-16060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:49:47.380 [DEBUG] [Thread-16060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:49:47.380 [DEBUG] [Thread-16060] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:49:47.383 [DEBUG] [Thread-16060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:49:47.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:49:47.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:49:47.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:49:47.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:49:47.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:49:47.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:49:47.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:49:47.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:49:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:49:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.450783 -999.00  +27.30  17.68     14   -1.90 1 1 1 1 1   888    0 28.24 51.43 ----- 20.6 17.7 270.4 31.7 32.3 -27.0 31.7 -25.6 31.1 -24.7 32.2 -25.6
2025-11-12T12:49:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:49:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:49:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.450783
2025-11-12T12:49:47.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:49:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:49:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:49:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:49:47.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:49:47.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:49:39', tmtdew=34.55, humidity=9.82, cloud=0.0, wind=27.42, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:49:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:49:47.411 [DEBUG] [Thread-16060] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:49:47.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:49:47.506 [DEBUG] [Thread-16063] [transport.py] [_log()] starting thread (client mode): 0x14980190
2025-11-12T12:49:47.506 [DEBUG] [Thread-16063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:49:47.522 [DEBUG] [Thread-16063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:49:47.523 [INFO] [Thread-16063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] client lang: <none>
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] server lang: <none>
2025-11-12T12:49:47.530 [DEBUG] [Thread-16063] [transport.py] [_log()] kex follows: False
2025-11-12T12:49:47.531 [DEBUG] [Thread-16063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:49:47.531 [DEBUG] [Thread-16063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:49:47.531 [DEBUG] [Thread-16063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:49:47.531 [DEBUG] [Thread-16063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:49:47.531 [DEBUG] [Thread-16063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:49:47.531 [DEBUG] [Thread-16063] [transport.py] [_log()] Compression: none
2025-11-12T12:49:47.531 [DEBUG] [Thread-16063] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:49:47.588 [DEBUG] [Thread-16063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:49:47.589 [DEBUG] [Thread-16063] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:49:47.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:49:47.590 [DEBUG] [Thread-16063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:49:47.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:49:47.643 [DEBUG] [Thread-16063] [transport.py] [_log()] userauth is OK
2025-11-12T12:49:47.643 [DEBUG] [Thread-16063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:49:47.644 [DEBUG] [Thread-16063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:49:47.644 [DEBUG] [Thread-16063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:49:47.644 [DEBUG] [Thread-16063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:49:47.670 [INFO] [Thread-16063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:49:47.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:49:47.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:49:48.553 [DEBUG] [Thread-16063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:49:48.553 [DEBUG] [Thread-16063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:49:48.602 [DEBUG] [Thread-16063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:49:48.602 [DEBUG] [Thread-16063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:49:48.611 [DEBUG] [Thread-16063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:49:48.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:49:48.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-11-12T12:49:48.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-11-12T12:49:48.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:49:48.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:49:48.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:49:48.648 [DEBUG] [Thread-16063] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:49:52.813 [DEBUG] [Thread-16065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:50:07.872 [DEBUG] [Thread-16066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:50:13.847 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:50:13.848 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:50:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:50:18.671 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:50:18.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:50:19.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 50, 12), 34.51, 9.85, 0.0, 29.63, 26.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:50:19.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:50:12
2025-11-12T12:50:19.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:50:19.584 [DEBUG] [Thread-16067] [transport.py] [_log()] starting thread (client mode): 0x173f8040
2025-11-12T12:50:19.584 [DEBUG] [Thread-16067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:50:19.610 [DEBUG] [Thread-16067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:50:19.611 [INFO] [Thread-16067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:50:19.614 [DEBUG] [Thread-16067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:50:19.614 [DEBUG] [Thread-16067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:50:19.614 [DEBUG] [Thread-16067] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:50:19.614 [DEBUG] [Thread-16067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:50:19.614 [DEBUG] [Thread-16067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:50:19.614 [DEBUG] [Thread-16067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:50:19.614 [DEBUG] [Thread-16067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] client lang: <none>
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] server lang: <none>
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] kex follows: False
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] Compression: none
2025-11-12T12:50:19.615 [DEBUG] [Thread-16067] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:50:19.625 [DEBUG] [Thread-16067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:50:19.625 [DEBUG] [Thread-16067] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:50:19.626 [DEBUG] [Thread-16067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:50:19.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:50:19.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:50:19.628 [DEBUG] [Thread-16067] [transport.py] [_log()] userauth is OK
2025-11-12T12:50:19.628 [DEBUG] [Thread-16067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:50:19.628 [DEBUG] [Thread-16067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:50:19.628 [DEBUG] [Thread-16067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:50:19.628 [DEBUG] [Thread-16067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:50:19.664 [INFO] [Thread-16067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:50:19.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:50:20.227 [DEBUG] [Thread-16067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:50:20.227 [DEBUG] [Thread-16067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:50:20.227 [DEBUG] [Thread-16067] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:50:20.267 [DEBUG] [Thread-16067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:50:20.268 [DEBUG] [Thread-16067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:50:20.271 [DEBUG] [Thread-16067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:50:20.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:50:20.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:50:20.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:50:20.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:50:20.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:50:20.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:50:20.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:50:20.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:50:20.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:50:20.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.451130 -999.00  +27.00  22.01     14   -2.20 1 1 1 1 1   888    0 27.83 64.21 ----- 30.7 22.0 256.2 39.1 32.3 -27.6 31.6 -26.1 31.2 -25.1 32.1 -25.9
2025-11-12T12:50:20.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:50:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:50:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.451130
2025-11-12T12:50:20.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:50:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:50:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:50:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:50:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:50:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:50:12', tmtdew=34.51, humidity=9.85, cloud=0.0, wind=29.63, temperature=26.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:49:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:50:20.298 [DEBUG] [Thread-16067] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:50:20.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:50:20.394 [DEBUG] [Thread-16070] [transport.py] [_log()] starting thread (client mode): 0x1739ac80
2025-11-12T12:50:20.394 [DEBUG] [Thread-16070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:50:20.408 [DEBUG] [Thread-16070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:50:20.409 [INFO] [Thread-16070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:50:20.416 [DEBUG] [Thread-16070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:50:20.417 [DEBUG] [Thread-16070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:50:20.417 [DEBUG] [Thread-16070] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:50:20.417 [DEBUG] [Thread-16070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:50:20.417 [DEBUG] [Thread-16070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:50:20.417 [DEBUG] [Thread-16070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:50:20.417 [DEBUG] [Thread-16070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:50:20.417 [DEBUG] [Thread-16070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:50:20.418 [DEBUG] [Thread-16070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:50:20.418 [DEBUG] [Thread-16070] [transport.py] [_log()] client lang: <none>
2025-11-12T12:50:20.418 [DEBUG] [Thread-16070] [transport.py] [_log()] server lang: <none>
2025-11-12T12:50:20.418 [DEBUG] [Thread-16070] [transport.py] [_log()] kex follows: False
2025-11-12T12:50:20.418 [DEBUG] [Thread-16070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:50:20.418 [DEBUG] [Thread-16070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:50:20.418 [DEBUG] [Thread-16070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:50:20.418 [DEBUG] [Thread-16070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:50:20.419 [DEBUG] [Thread-16070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:50:20.419 [DEBUG] [Thread-16070] [transport.py] [_log()] Compression: none
2025-11-12T12:50:20.419 [DEBUG] [Thread-16070] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:50:20.476 [DEBUG] [Thread-16070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:50:20.476 [DEBUG] [Thread-16070] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:50:20.477 [DEBUG] [Thread-16070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:50:20.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:50:20.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:50:20.531 [DEBUG] [Thread-16070] [transport.py] [_log()] userauth is OK
2025-11-12T12:50:20.531 [DEBUG] [Thread-16070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:50:20.531 [DEBUG] [Thread-16070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:50:20.532 [DEBUG] [Thread-16070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:50:20.532 [DEBUG] [Thread-16070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:50:20.550 [INFO] [Thread-16070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:50:20.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:50:20.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:50:21.397 [DEBUG] [Thread-16070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:50:21.397 [DEBUG] [Thread-16070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:50:21.445 [DEBUG] [Thread-16070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:50:21.445 [DEBUG] [Thread-16070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:50:21.455 [DEBUG] [Thread-16070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:50:21.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:50:21.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-11-12T12:50:21.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:50:21.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:50:21.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:50:21.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:50:21.491 [DEBUG] [Thread-16070] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:50:22.910 [DEBUG] [Thread-16072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:50:32.685 [DEBUG] [Thread-16073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:50:37.966 [DEBUG] [Thread-16074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:50:51.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:50:51.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:50:51.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-11-12T12:50:52.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 50, 44), 34.37, 9.7, 0.0, 26.33, 26.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:50:52.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:50:44
2025-11-12T12:50:52.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:50:52.460 [DEBUG] [Thread-16075] [transport.py] [_log()] starting thread (client mode): 0x14955960
2025-11-12T12:50:52.460 [DEBUG] [Thread-16075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:50:52.474 [DEBUG] [Thread-16075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:50:52.474 [INFO] [Thread-16075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] client lang: <none>
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] server lang: <none>
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] kex follows: False
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] Compression: none
2025-11-12T12:50:52.478 [DEBUG] [Thread-16075] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:50:52.494 [DEBUG] [Thread-16075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:50:52.494 [DEBUG] [Thread-16075] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:50:52.494 [DEBUG] [Thread-16075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:50:52.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:50:52.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:50:52.495 [DEBUG] [Thread-16075] [transport.py] [_log()] userauth is OK
2025-11-12T12:50:52.495 [DEBUG] [Thread-16075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:50:52.495 [DEBUG] [Thread-16075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:50:52.495 [DEBUG] [Thread-16075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:50:52.495 [DEBUG] [Thread-16075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:50:52.504 [INFO] [Thread-16075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:50:52.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:50:52.997 [DEBUG] [Thread-16077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:50:53.143 [DEBUG] [Thread-16075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:50:53.144 [DEBUG] [Thread-16075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:50:53.144 [DEBUG] [Thread-16075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:50:53.184 [DEBUG] [Thread-16075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:50:53.184 [DEBUG] [Thread-16075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:50:53.187 [DEBUG] [Thread-16075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:50:53.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:50:53.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:50:53.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:50:53.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:50:53.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:50:53.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:50:53.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:50:53.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:50:53.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.451825 -999.00  +26.90  28.51     15   -1.60 1 1 1 1 1   888    0 29.56 83.67 ----- 28.5 28.5 263.0 36.5 32.2 -29.4 31.6 -26.1 31.1 -26.2 32.0 -25.5
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.451825
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:50:53.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:50:44', tmtdew=34.37, humidity=9.7, cloud=0.0, wind=26.33, temperature=26.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:50:37.680', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:50:53.206 [DEBUG] [Thread-16075] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:50:53.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:50:53.291 [DEBUG] [Thread-16079] [transport.py] [_log()] starting thread (client mode): 0x173f86a0
2025-11-12T12:50:53.291 [DEBUG] [Thread-16079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:50:53.306 [DEBUG] [Thread-16079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:50:53.306 [INFO] [Thread-16079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] client lang: <none>
2025-11-12T12:50:53.314 [DEBUG] [Thread-16079] [transport.py] [_log()] server lang: <none>
2025-11-12T12:50:53.315 [DEBUG] [Thread-16079] [transport.py] [_log()] kex follows: False
2025-11-12T12:50:53.315 [DEBUG] [Thread-16079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:50:53.315 [DEBUG] [Thread-16079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:50:53.315 [DEBUG] [Thread-16079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:50:53.315 [DEBUG] [Thread-16079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:50:53.315 [DEBUG] [Thread-16079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:50:53.315 [DEBUG] [Thread-16079] [transport.py] [_log()] Compression: none
2025-11-12T12:50:53.315 [DEBUG] [Thread-16079] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:50:53.370 [DEBUG] [Thread-16079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:50:53.370 [DEBUG] [Thread-16079] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:50:53.370 [DEBUG] [Thread-16079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:50:53.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:50:53.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:50:53.427 [DEBUG] [Thread-16079] [transport.py] [_log()] userauth is OK
2025-11-12T12:50:53.427 [DEBUG] [Thread-16079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:50:53.427 [DEBUG] [Thread-16079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:50:53.427 [DEBUG] [Thread-16079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:50:53.427 [DEBUG] [Thread-16079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:50:53.441 [INFO] [Thread-16079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:50:53.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:50:53.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:50:54.351 [DEBUG] [Thread-16079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:50:54.351 [DEBUG] [Thread-16079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:50:54.399 [DEBUG] [Thread-16079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:50:54.399 [DEBUG] [Thread-16079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:50:54.410 [DEBUG] [Thread-16079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:50:54.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:50:54.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-11-12T12:50:54.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:50:54.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:50:54.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:50:54.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:50:54.450 [DEBUG] [Thread-16079] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:51:08.032 [DEBUG] [Thread-16081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:51:13.989 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:51:13.990 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:51:23.085 [DEBUG] [Thread-16082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:51:24.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:51:24.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:51:24.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-11-12T12:51:25.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 51, 16), 34.15, 9.87, 0.0, 25.8, 26.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:51:25.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:51:16
2025-11-12T12:51:25.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:51:25.375 [DEBUG] [Thread-16083] [transport.py] [_log()] starting thread (client mode): 0x149ab5e0
2025-11-12T12:51:25.376 [DEBUG] [Thread-16083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:51:25.395 [DEBUG] [Thread-16083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:51:25.395 [INFO] [Thread-16083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:51:25.396 [DEBUG] [Thread-16083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:51:25.396 [DEBUG] [Thread-16083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:51:25.396 [DEBUG] [Thread-16083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:51:25.396 [DEBUG] [Thread-16083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:51:25.396 [DEBUG] [Thread-16083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] client lang: <none>
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] server lang: <none>
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] kex follows: False
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] Compression: none
2025-11-12T12:51:25.397 [DEBUG] [Thread-16083] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:51:25.409 [DEBUG] [Thread-16083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:51:25.410 [DEBUG] [Thread-16083] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:51:25.410 [DEBUG] [Thread-16083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:51:25.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:51:25.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:51:25.412 [DEBUG] [Thread-16083] [transport.py] [_log()] userauth is OK
2025-11-12T12:51:25.412 [DEBUG] [Thread-16083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:51:25.412 [DEBUG] [Thread-16083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:51:25.412 [DEBUG] [Thread-16083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:51:25.412 [DEBUG] [Thread-16083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:51:25.430 [INFO] [Thread-16083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:51:25.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:51:25.996 [DEBUG] [Thread-16083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:51:25.996 [DEBUG] [Thread-16083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:51:25.997 [DEBUG] [Thread-16083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:51:26.037 [DEBUG] [Thread-16083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:51:26.038 [DEBUG] [Thread-16083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:51:26.041 [DEBUG] [Thread-16083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:51:26.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:51:26.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:51:26.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:51:26.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:51:26.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:51:26.062 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:51:26.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.452172 -999.00  +26.90  12.16     15   -1.00 1 1 1 1 1   888    0 29.45 90.35 ----- 12.8 12.2 260.4 22.9 32.2 -26.1 31.6 -25.1 31.0 -24.9 31.8 -25.5
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.452172
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:51:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:51:16', tmtdew=34.15, humidity=9.87, cloud=0.0, wind=25.8, temperature=26.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:51:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:51:26.063 [DEBUG] [Thread-16083] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:51:26.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:51:26.160 [DEBUG] [Thread-16086] [transport.py] [_log()] starting thread (client mode): 0x173624d0
2025-11-12T12:51:26.160 [DEBUG] [Thread-16086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:51:26.178 [DEBUG] [Thread-16086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:51:26.178 [INFO] [Thread-16086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:51:26.187 [DEBUG] [Thread-16086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] client lang: <none>
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] server lang: <none>
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] kex follows: False
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:51:26.188 [DEBUG] [Thread-16086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:51:26.189 [DEBUG] [Thread-16086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:51:26.189 [DEBUG] [Thread-16086] [transport.py] [_log()] Compression: none
2025-11-12T12:51:26.189 [DEBUG] [Thread-16086] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:51:26.248 [DEBUG] [Thread-16086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:51:26.249 [DEBUG] [Thread-16086] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:51:26.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:51:26.250 [DEBUG] [Thread-16086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:51:26.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:51:26.313 [DEBUG] [Thread-16086] [transport.py] [_log()] userauth is OK
2025-11-12T12:51:26.313 [DEBUG] [Thread-16086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:51:26.313 [DEBUG] [Thread-16086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:51:26.313 [DEBUG] [Thread-16086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:51:26.313 [DEBUG] [Thread-16086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:51:26.336 [INFO] [Thread-16086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:51:26.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:51:26.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:51:27.213 [DEBUG] [Thread-16086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:51:27.213 [DEBUG] [Thread-16086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:51:27.263 [DEBUG] [Thread-16086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:51:27.263 [DEBUG] [Thread-16086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:51:27.275 [DEBUG] [Thread-16086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:51:27.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:51:27.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-11-12T12:51:27.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-11-12T12:51:27.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:51:27.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:51:27.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:51:27.315 [DEBUG] [Thread-16086] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:51:32.713 [DEBUG] [Thread-16088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:51:38.123 [DEBUG] [Thread-16089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:51:53.173 [DEBUG] [Thread-16090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:51:57.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:51:57.326 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:51:57.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-11-12T12:51:57.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 51, 48), 33.71, 10.53, 0.0, 27.37, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:51:57.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:51:48
2025-11-12T12:51:58.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:51:58.248 [DEBUG] [Thread-16091] [transport.py] [_log()] starting thread (client mode): 0x149a9c00
2025-11-12T12:51:58.249 [DEBUG] [Thread-16091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:51:58.269 [DEBUG] [Thread-16091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:51:58.269 [INFO] [Thread-16091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:51:58.272 [DEBUG] [Thread-16091] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:51:58.272 [DEBUG] [Thread-16091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:51:58.272 [DEBUG] [Thread-16091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:51:58.272 [DEBUG] [Thread-16091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:51:58.272 [DEBUG] [Thread-16091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:51:58.272 [DEBUG] [Thread-16091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] client lang: <none>
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] server lang: <none>
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] kex follows: False
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] Compression: none
2025-11-12T12:51:58.273 [DEBUG] [Thread-16091] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:51:58.289 [DEBUG] [Thread-16091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:51:58.290 [DEBUG] [Thread-16091] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:51:58.290 [DEBUG] [Thread-16091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:51:58.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:51:58.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:51:58.293 [DEBUG] [Thread-16091] [transport.py] [_log()] userauth is OK
2025-11-12T12:51:58.293 [DEBUG] [Thread-16091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:51:58.293 [DEBUG] [Thread-16091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:51:58.294 [DEBUG] [Thread-16091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:51:58.294 [DEBUG] [Thread-16091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:51:58.324 [INFO] [Thread-16091] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:51:58.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:51:58.943 [DEBUG] [Thread-16091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:51:58.943 [DEBUG] [Thread-16091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:51:58.943 [DEBUG] [Thread-16091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:51:58.984 [DEBUG] [Thread-16091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:51:58.984 [DEBUG] [Thread-16091] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:51:58.987 [DEBUG] [Thread-16091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:51:58.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:51:58.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:51:59.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:51:59.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:51:59.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:51:59.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:51:59.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:51:59.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:51:59.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:51:59.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.452519 -999.00  +27.20  34.47     16   -0.40 1 1 2 1 1   888    0 29.28 86.36 ----- 29.3 34.5 285.8 40.1 32.4 -26.9 31.7 -26.4 31.2 -25.9 32.1 -25.4
2025-11-12T12:51:59.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:51:59.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:51:59.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.452519
2025-11-12T12:51:59.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:51:59.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:51:59.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:51:59.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:51:59.015 [DEBUG] [Thread-16091] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:51:59.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:51:59.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:51:48', tmtdew=33.71, humidity=10.53, cloud=0.0, wind=27.37, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:51:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:51:59.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:51:59.115 [DEBUG] [Thread-16094] [transport.py] [_log()] starting thread (client mode): 0x17345900
2025-11-12T12:51:59.115 [DEBUG] [Thread-16094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:51:59.129 [DEBUG] [Thread-16094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:51:59.129 [INFO] [Thread-16094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] client lang: <none>
2025-11-12T12:51:59.137 [DEBUG] [Thread-16094] [transport.py] [_log()] server lang: <none>
2025-11-12T12:51:59.138 [DEBUG] [Thread-16094] [transport.py] [_log()] kex follows: False
2025-11-12T12:51:59.138 [DEBUG] [Thread-16094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:51:59.138 [DEBUG] [Thread-16094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:51:59.138 [DEBUG] [Thread-16094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:51:59.138 [DEBUG] [Thread-16094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:51:59.138 [DEBUG] [Thread-16094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:51:59.138 [DEBUG] [Thread-16094] [transport.py] [_log()] Compression: none
2025-11-12T12:51:59.138 [DEBUG] [Thread-16094] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:51:59.196 [DEBUG] [Thread-16094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:51:59.196 [DEBUG] [Thread-16094] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:51:59.197 [DEBUG] [Thread-16094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:51:59.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:51:59.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:51:59.254 [DEBUG] [Thread-16094] [transport.py] [_log()] userauth is OK
2025-11-12T12:51:59.254 [DEBUG] [Thread-16094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:51:59.254 [DEBUG] [Thread-16094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:51:59.254 [DEBUG] [Thread-16094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:51:59.254 [DEBUG] [Thread-16094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:51:59.273 [INFO] [Thread-16094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:51:59.273 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:51:59.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:52:00.160 [DEBUG] [Thread-16094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:52:00.160 [DEBUG] [Thread-16094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:52:00.208 [DEBUG] [Thread-16094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:52:00.208 [DEBUG] [Thread-16094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:52:00.218 [DEBUG] [Thread-16094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:52:00.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:52:00.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-11-12T12:52:00.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-11-12T12:52:00.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:52:00.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:52:00.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:52:00.254 [DEBUG] [Thread-16094] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:52:08.207 [DEBUG] [Thread-16096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:52:14.130 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:52:14.131 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:52:23.248 [DEBUG] [Thread-16097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:52:30.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:52:30.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:52:30.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-11-12T12:52:30.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 52, 20), 33.72, 10.55, 0.0, 31.41, 27.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:52:30.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:52:20
2025-11-12T12:52:31.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:52:31.173 [DEBUG] [Thread-16098] [transport.py] [_log()] starting thread (client mode): 0x173f83d0
2025-11-12T12:52:31.174 [DEBUG] [Thread-16098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:52:31.194 [DEBUG] [Thread-16098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:52:31.194 [INFO] [Thread-16098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] client lang: <none>
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] server lang: <none>
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] kex follows: False
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] Compression: none
2025-11-12T12:52:31.197 [DEBUG] [Thread-16098] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:52:31.211 [DEBUG] [Thread-16098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:52:31.211 [DEBUG] [Thread-16098] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:52:31.212 [DEBUG] [Thread-16098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:52:31.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:52:31.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:52:31.214 [DEBUG] [Thread-16098] [transport.py] [_log()] userauth is OK
2025-11-12T12:52:31.214 [DEBUG] [Thread-16098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:52:31.214 [DEBUG] [Thread-16098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:52:31.214 [DEBUG] [Thread-16098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:52:31.214 [DEBUG] [Thread-16098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:52:31.240 [INFO] [Thread-16098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:52:31.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:52:31.831 [DEBUG] [Thread-16098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:52:31.832 [DEBUG] [Thread-16098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:52:31.832 [DEBUG] [Thread-16098] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:52:31.873 [DEBUG] [Thread-16098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:52:31.873 [DEBUG] [Thread-16098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:52:31.876 [DEBUG] [Thread-16098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:52:31.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:52:31.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:52:31.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:52:31.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:52:31.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:52:31.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:52:31.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:52:31.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:52:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:52:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.452866 -999.00  +26.80  26.18     16   -0.30 1 1 1 1 1   888    0 29.72 88.89 ----- 29.4 26.2 273.5 37.7 32.4 -27.3 31.6 -25.6 31.1 -26.0 32.1 -25.3
2025-11-12T12:52:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:52:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:52:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.452866
2025-11-12T12:52:31.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:52:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:52:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:52:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:52:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:52:31.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:52:20', tmtdew=33.72, humidity=10.55, cloud=0.0, wind=31.41, temperature=27.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:52:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:52:31.899 [DEBUG] [Thread-16098] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:52:31.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:52:31.995 [DEBUG] [Thread-16101] [transport.py] [_log()] starting thread (client mode): 0x173f8a60
2025-11-12T12:52:31.995 [DEBUG] [Thread-16101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:52:32.010 [DEBUG] [Thread-16101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:52:32.010 [INFO] [Thread-16101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] client lang: <none>
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] server lang: <none>
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] kex follows: False
2025-11-12T12:52:32.018 [DEBUG] [Thread-16101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:52:32.019 [DEBUG] [Thread-16101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:52:32.019 [DEBUG] [Thread-16101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:52:32.019 [DEBUG] [Thread-16101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:52:32.019 [DEBUG] [Thread-16101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:52:32.019 [DEBUG] [Thread-16101] [transport.py] [_log()] Compression: none
2025-11-12T12:52:32.019 [DEBUG] [Thread-16101] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:52:32.080 [DEBUG] [Thread-16101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:52:32.080 [DEBUG] [Thread-16101] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:52:32.081 [DEBUG] [Thread-16101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:52:32.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:52:32.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:52:32.135 [DEBUG] [Thread-16101] [transport.py] [_log()] userauth is OK
2025-11-12T12:52:32.136 [DEBUG] [Thread-16101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:52:32.136 [DEBUG] [Thread-16101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:52:32.136 [DEBUG] [Thread-16101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:52:32.136 [DEBUG] [Thread-16101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:52:32.155 [INFO] [Thread-16101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:52:32.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:52:32.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:52:32.747 [DEBUG] [Thread-16103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:52:33.104 [DEBUG] [Thread-16101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:52:33.105 [DEBUG] [Thread-16101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:52:33.153 [DEBUG] [Thread-16101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:52:33.153 [DEBUG] [Thread-16101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:52:33.163 [DEBUG] [Thread-16101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:52:33.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:52:33.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:52:33.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-11-12T12:52:33.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:52:33.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:52:33.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:52:33.200 [DEBUG] [Thread-16101] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:52:38.287 [DEBUG] [Thread-16104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:52:53.332 [DEBUG] [Thread-16105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:53:03.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:53:03.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:53:03.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-11-12T12:53:03.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 52, 52), 33.67, 10.65, 0.0, 30.38, 27.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:53:03.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:52:52
2025-11-12T12:53:03.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:53:04.118 [DEBUG] [Thread-16106] [transport.py] [_log()] starting thread (client mode): 0x173f8430
2025-11-12T12:53:04.118 [DEBUG] [Thread-16106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:53:04.138 [DEBUG] [Thread-16106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:53:04.138 [INFO] [Thread-16106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] client lang: <none>
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] server lang: <none>
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] kex follows: False
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:53:04.141 [DEBUG] [Thread-16106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:53:04.142 [DEBUG] [Thread-16106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:53:04.142 [DEBUG] [Thread-16106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:53:04.142 [DEBUG] [Thread-16106] [transport.py] [_log()] Compression: none
2025-11-12T12:53:04.142 [DEBUG] [Thread-16106] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:53:04.157 [DEBUG] [Thread-16106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:53:04.157 [DEBUG] [Thread-16106] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:53:04.158 [DEBUG] [Thread-16106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:53:04.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:53:04.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:53:04.160 [DEBUG] [Thread-16106] [transport.py] [_log()] userauth is OK
2025-11-12T12:53:04.160 [DEBUG] [Thread-16106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:53:04.160 [DEBUG] [Thread-16106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:53:04.160 [DEBUG] [Thread-16106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:53:04.160 [DEBUG] [Thread-16106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:53:04.183 [INFO] [Thread-16106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:53:04.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:53:04.814 [DEBUG] [Thread-16106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:53:04.814 [DEBUG] [Thread-16106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:53:04.814 [DEBUG] [Thread-16106] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:53:04.855 [DEBUG] [Thread-16106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:53:04.855 [DEBUG] [Thread-16106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:53:04.858 [DEBUG] [Thread-16106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:53:04.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:53:04.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:53:04.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:53:04.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:53:04.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:53:04.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:53:04.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:53:04.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:53:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:53:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.453214 -999.00  +26.60  21.43     16   -0.60 1 1 1 1 1   888    0 29.54 95.01 ----- 23.5 21.4 270.4 34.9 32.1 -27.5 31.5 -25.3 30.9 -30.1 32.0 -26.4
2025-11-12T12:53:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:53:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:53:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.453214
2025-11-12T12:53:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:53:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:53:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:53:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:53:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:53:04.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:52:52', tmtdew=33.67, humidity=10.65, cloud=0.0, wind=30.38, temperature=27.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:52:37.690', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:53:04.888 [DEBUG] [Thread-16106] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:53:04.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:53:04.986 [DEBUG] [Thread-16109] [transport.py] [_log()] starting thread (client mode): 0x173fbbb0
2025-11-12T12:53:04.986 [DEBUG] [Thread-16109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:53:05.000 [DEBUG] [Thread-16109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:53:05.000 [INFO] [Thread-16109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:53:05.008 [DEBUG] [Thread-16109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:53:05.008 [DEBUG] [Thread-16109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] client lang: <none>
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] server lang: <none>
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] kex follows: False
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] Compression: none
2025-11-12T12:53:05.009 [DEBUG] [Thread-16109] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:53:05.072 [DEBUG] [Thread-16109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:53:05.073 [DEBUG] [Thread-16109] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:53:05.074 [DEBUG] [Thread-16109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:53:05.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:53:05.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:53:05.132 [DEBUG] [Thread-16109] [transport.py] [_log()] userauth is OK
2025-11-12T12:53:05.132 [DEBUG] [Thread-16109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:53:05.132 [DEBUG] [Thread-16109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:53:05.132 [DEBUG] [Thread-16109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:53:05.132 [DEBUG] [Thread-16109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:53:05.151 [INFO] [Thread-16109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:53:05.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:53:05.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:53:06.013 [DEBUG] [Thread-16109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:53:06.013 [DEBUG] [Thread-16109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:53:06.061 [DEBUG] [Thread-16109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:53:06.061 [DEBUG] [Thread-16109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:53:06.070 [DEBUG] [Thread-16109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:53:06.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:53:06.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-11-12T12:53:06.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-11-12T12:53:06.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:53:06.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:53:06.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:53:06.108 [DEBUG] [Thread-16109] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:53:08.366 [DEBUG] [Thread-16111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:53:14.273 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:53:14.275 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:53:23.415 [DEBUG] [Thread-16112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:53:32.792 [DEBUG] [Thread-16113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:53:36.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:53:36.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:53:36.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-11-12T12:53:36.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 53, 24), 33.37, 10.84, 0.0, 27.7, 27.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:53:36.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:53:24
2025-11-12T12:53:36.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:53:37.037 [DEBUG] [Thread-16114] [transport.py] [_log()] starting thread (client mode): 0x149576a0
2025-11-12T12:53:37.037 [DEBUG] [Thread-16114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:53:37.056 [DEBUG] [Thread-16114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:53:37.056 [INFO] [Thread-16114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:53:37.057 [DEBUG] [Thread-16114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] client lang: <none>
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] server lang: <none>
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] kex follows: False
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:53:37.058 [DEBUG] [Thread-16114] [transport.py] [_log()] Compression: none
2025-11-12T12:53:37.059 [DEBUG] [Thread-16114] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:53:37.072 [DEBUG] [Thread-16114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:53:37.073 [DEBUG] [Thread-16114] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:53:37.073 [DEBUG] [Thread-16114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:53:37.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:53:37.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:53:37.075 [DEBUG] [Thread-16114] [transport.py] [_log()] userauth is OK
2025-11-12T12:53:37.075 [DEBUG] [Thread-16114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:53:37.075 [DEBUG] [Thread-16114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:53:37.075 [DEBUG] [Thread-16114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:53:37.075 [DEBUG] [Thread-16114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:53:37.100 [INFO] [Thread-16114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:53:37.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:53:37.691 [DEBUG] [Thread-16114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:53:37.691 [DEBUG] [Thread-16114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:53:37.691 [DEBUG] [Thread-16114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:53:37.732 [DEBUG] [Thread-16114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:53:37.732 [DEBUG] [Thread-16114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:53:37.736 [DEBUG] [Thread-16114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:53:37.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:53:37.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:53:37.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:53:37.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:53:37.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:53:37.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:53:37.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:53:37.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:53:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:53:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.453561 -999.00  +26.60  38.84     17   -0.40 1 1 2 1 1   888    0 29.64 103.08 ----- 37.5 38.8 248.2 45.7 32.3 -27.0 31.4 -26.3 31.1 -24.6 32.0 -25.2
2025-11-12T12:53:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:53:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:53:37.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.453561
2025-11-12T12:53:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:53:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:53:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:53:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:53:37.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:53:37.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:53:24', tmtdew=33.37, humidity=10.84, cloud=0.0, wind=27.7, temperature=27.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:53:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:53:37.764 [DEBUG] [Thread-16114] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:53:37.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:53:37.859 [DEBUG] [Thread-16117] [transport.py] [_log()] starting thread (client mode): 0x173f89a0
2025-11-12T12:53:37.860 [DEBUG] [Thread-16117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:53:37.877 [DEBUG] [Thread-16117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:53:37.877 [INFO] [Thread-16117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:53:37.884 [DEBUG] [Thread-16117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] client lang: <none>
2025-11-12T12:53:37.885 [DEBUG] [Thread-16117] [transport.py] [_log()] server lang: <none>
2025-11-12T12:53:37.886 [DEBUG] [Thread-16117] [transport.py] [_log()] kex follows: False
2025-11-12T12:53:37.886 [DEBUG] [Thread-16117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:53:37.886 [DEBUG] [Thread-16117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:53:37.886 [DEBUG] [Thread-16117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:53:37.886 [DEBUG] [Thread-16117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:53:37.886 [DEBUG] [Thread-16117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:53:37.886 [DEBUG] [Thread-16117] [transport.py] [_log()] Compression: none
2025-11-12T12:53:37.886 [DEBUG] [Thread-16117] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:53:37.944 [DEBUG] [Thread-16117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:53:37.944 [DEBUG] [Thread-16117] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:53:37.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:53:37.945 [DEBUG] [Thread-16117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:53:37.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:53:38.000 [DEBUG] [Thread-16117] [transport.py] [_log()] userauth is OK
2025-11-12T12:53:38.000 [DEBUG] [Thread-16117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:53:38.000 [DEBUG] [Thread-16117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:53:38.000 [DEBUG] [Thread-16117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:53:38.001 [DEBUG] [Thread-16117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:53:38.019 [INFO] [Thread-16117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:53:38.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:53:38.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:53:38.446 [DEBUG] [Thread-16119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:53:38.904 [DEBUG] [Thread-16117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:53:38.904 [DEBUG] [Thread-16117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:53:38.953 [DEBUG] [Thread-16117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:53:38.953 [DEBUG] [Thread-16117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:53:38.963 [DEBUG] [Thread-16117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:53:38.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:53:38.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')
2025-11-12T12:53:38.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-11-12T12:53:38.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:53:38.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:53:38.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:53:39.000 [DEBUG] [Thread-16117] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:53:53.495 [DEBUG] [Thread-16120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:54:08.532 [DEBUG] [Thread-16121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:54:09.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:54:09.023 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:54:09.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-11-12T12:54:09.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 53, 56), 32.48, 11.36, 0.0, 28.0, 26.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:54:09.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:53:56
2025-11-12T12:54:09.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:54:09.941 [DEBUG] [Thread-16122] [transport.py] [_log()] starting thread (client mode): 0x173980a0
2025-11-12T12:54:09.941 [DEBUG] [Thread-16122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:54:09.961 [DEBUG] [Thread-16122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:54:09.961 [INFO] [Thread-16122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:54:09.964 [DEBUG] [Thread-16122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:54:09.964 [DEBUG] [Thread-16122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:54:09.964 [DEBUG] [Thread-16122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:54:09.964 [DEBUG] [Thread-16122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:54:09.964 [DEBUG] [Thread-16122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:54:09.964 [DEBUG] [Thread-16122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:54:09.964 [DEBUG] [Thread-16122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:54:09.964 [DEBUG] [Thread-16122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] client lang: <none>
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] server lang: <none>
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] kex follows: False
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] Compression: none
2025-11-12T12:54:09.965 [DEBUG] [Thread-16122] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:54:09.983 [DEBUG] [Thread-16122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:54:09.984 [DEBUG] [Thread-16122] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:54:09.985 [DEBUG] [Thread-16122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:54:09.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:54:09.986 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:54:09.987 [DEBUG] [Thread-16122] [transport.py] [_log()] userauth is OK
2025-11-12T12:54:09.987 [DEBUG] [Thread-16122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:54:09.988 [DEBUG] [Thread-16122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:54:09.988 [DEBUG] [Thread-16122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:54:09.988 [DEBUG] [Thread-16122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:54:10.012 [INFO] [Thread-16122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:54:10.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:54:10.599 [DEBUG] [Thread-16122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:54:10.599 [DEBUG] [Thread-16122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:54:10.600 [DEBUG] [Thread-16122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:54:10.640 [DEBUG] [Thread-16122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:54:10.641 [DEBUG] [Thread-16122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:54:10.644 [DEBUG] [Thread-16122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:54:10.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:54:10.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:54:10.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:54:10.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:54:10.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:54:10.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:54:10.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:54:10.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:54:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:54:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.453908 -999.00  +26.60  23.70     17   -0.30 1 1 1 1 1   888    0 29.66 98.20 ----- 19.8 23.7 261.4 39.0 32.0 -27.0 31.5 -25.4 31.0 -24.2 31.7 -27.8
2025-11-12T12:54:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:54:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:54:10.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.453908
2025-11-12T12:54:10.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:54:10.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:54:10.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:54:10.672 [DEBUG] [Thread-16122] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:54:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:54:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:54:10.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:53:56', tmtdew=32.48, humidity=11.36, cloud=0.0, wind=28.0, temperature=26.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:53:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:54: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-11-12T12:54:10.768 [DEBUG] [Thread-16125] [transport.py] [_log()] starting thread (client mode): 0x173e96c0
2025-11-12T12:54:10.769 [DEBUG] [Thread-16125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:54:10.784 [DEBUG] [Thread-16125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:54:10.784 [INFO] [Thread-16125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:54:10.792 [DEBUG] [Thread-16125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:54:10.792 [DEBUG] [Thread-16125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:54:10.792 [DEBUG] [Thread-16125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:54:10.792 [DEBUG] [Thread-16125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:54:10.792 [DEBUG] [Thread-16125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:54:10.792 [DEBUG] [Thread-16125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:54:10.792 [DEBUG] [Thread-16125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] client lang: <none>
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] server lang: <none>
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] kex follows: False
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] Compression: none
2025-11-12T12:54:10.793 [DEBUG] [Thread-16125] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:54:10.854 [DEBUG] [Thread-16125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:54:10.854 [DEBUG] [Thread-16125] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:54:10.855 [DEBUG] [Thread-16125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:54:10.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:54:10.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:54:10.912 [DEBUG] [Thread-16125] [transport.py] [_log()] userauth is OK
2025-11-12T12:54:10.912 [DEBUG] [Thread-16125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:54:10.912 [DEBUG] [Thread-16125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:54:10.912 [DEBUG] [Thread-16125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:54:10.912 [DEBUG] [Thread-16125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:54:10.931 [INFO] [Thread-16125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:54:10.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:54:10.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:54:11.777 [DEBUG] [Thread-16125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:54:11.778 [DEBUG] [Thread-16125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:54:11.826 [DEBUG] [Thread-16125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:54:11.826 [DEBUG] [Thread-16125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:54:11.835 [DEBUG] [Thread-16125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:54:11.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:54:11.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-11-12T12:54:11.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-11-12T12:54:11.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:54:11.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:54:11.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:54:11.872 [DEBUG] [Thread-16125] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:54:14.416 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:54:14.418 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:54:23.572 [DEBUG] [Thread-16127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:54:32.846 [DEBUG] [Thread-16128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:54:38.624 [DEBUG] [Thread-16129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:54:41.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:54:41.894 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:54:41.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-11-12T12:54:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 54, 28), 32.67, 11.25, 0.0, 26.22, 26.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:54:42.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:54:28
2025-11-12T12:54:42.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:54:42.847 [DEBUG] [Thread-16130] [transport.py] [_log()] starting thread (client mode): 0x149a9f30
2025-11-12T12:54:42.847 [DEBUG] [Thread-16130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:54:42.867 [DEBUG] [Thread-16130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:54:42.867 [INFO] [Thread-16130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] client lang: <none>
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] server lang: <none>
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] kex follows: False
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] Compression: none
2025-11-12T12:54:42.868 [DEBUG] [Thread-16130] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:54:42.885 [DEBUG] [Thread-16130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:54:42.885 [DEBUG] [Thread-16130] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:54:42.886 [DEBUG] [Thread-16130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:54:42.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:54:42.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:54:42.886 [DEBUG] [Thread-16130] [transport.py] [_log()] userauth is OK
2025-11-12T12:54:42.886 [DEBUG] [Thread-16130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:54:42.886 [DEBUG] [Thread-16130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:54:42.886 [DEBUG] [Thread-16130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:54:42.886 [DEBUG] [Thread-16130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:54:42.895 [INFO] [Thread-16130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:54:42.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:54:43.513 [DEBUG] [Thread-16130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:54:43.513 [DEBUG] [Thread-16130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:54:43.513 [DEBUG] [Thread-16130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:54:43.554 [DEBUG] [Thread-16130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:54:43.554 [DEBUG] [Thread-16130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:54:43.556 [DEBUG] [Thread-16130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:54:43.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:54:43.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:54:43.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:54:43.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:54:43.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:54:43.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:54:43.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:54:43.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:54:28', tmtdew=32.67, humidity=11.25, cloud=0.0, wind=26.22, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:54:43.576 [DEBUG] [Thread-16130] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:54:43.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:54:43.659 [DEBUG] [Thread-16133] [transport.py] [_log()] starting thread (client mode): 0x149abdf0
2025-11-12T12:54:43.659 [DEBUG] [Thread-16133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:54:43.675 [DEBUG] [Thread-16133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:54:43.675 [INFO] [Thread-16133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] client lang: <none>
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] server lang: <none>
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] kex follows: False
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] Compression: none
2025-11-12T12:54:43.683 [DEBUG] [Thread-16133] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:54:43.738 [DEBUG] [Thread-16133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:54:43.739 [DEBUG] [Thread-16133] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:54:43.739 [DEBUG] [Thread-16133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:54:43.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:54:43.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:54:43.795 [DEBUG] [Thread-16133] [transport.py] [_log()] userauth is OK
2025-11-12T12:54:43.795 [DEBUG] [Thread-16133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:54:43.795 [DEBUG] [Thread-16133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:54:43.795 [DEBUG] [Thread-16133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:54:43.795 [DEBUG] [Thread-16133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:54:43.809 [INFO] [Thread-16133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:54:43.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:54:43.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:54:44.676 [DEBUG] [Thread-16133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:54:44.676 [DEBUG] [Thread-16133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:54:44.724 [DEBUG] [Thread-16133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:54:44.724 [DEBUG] [Thread-16133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:54:44.733 [DEBUG] [Thread-16133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:54:44.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:54:44.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-11-12T12:54:44.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-11-12T12:54:44.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:54:44.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:54:44.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:54:44.766 [DEBUG] [Thread-16133] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:54:53.662 [DEBUG] [Thread-16135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:55:08.715 [DEBUG] [Thread-16136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:55:14.560 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:55:14.561 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:55:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:55:14.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:55:14.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-11-12T12:55:15.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 54, 28), 32.57, 11.25, 0.0, 22.62, 27.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:55:15.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:54:28
2025-11-12T12:55:15.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:55:15.723 [DEBUG] [Thread-16137] [transport.py] [_log()] starting thread (client mode): 0x17399720
2025-11-12T12:55:15.723 [DEBUG] [Thread-16137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:55:15.743 [DEBUG] [Thread-16137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:55:15.743 [INFO] [Thread-16137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:55:15.746 [DEBUG] [Thread-16137] [transport.py] [_log()] client lang: <none>
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] server lang: <none>
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] kex follows: False
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] Compression: none
2025-11-12T12:55:15.747 [DEBUG] [Thread-16137] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:55:15.755 [DEBUG] [Thread-16137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:55:15.756 [DEBUG] [Thread-16137] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:55:15.756 [DEBUG] [Thread-16137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:55:15.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:55:15.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:55:15.758 [DEBUG] [Thread-16137] [transport.py] [_log()] userauth is OK
2025-11-12T12:55:15.758 [DEBUG] [Thread-16137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:55:15.758 [DEBUG] [Thread-16137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:55:15.759 [DEBUG] [Thread-16137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:55:15.759 [DEBUG] [Thread-16137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:55:15.783 [INFO] [Thread-16137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:55:15.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:55:16.377 [DEBUG] [Thread-16137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:55:16.377 [DEBUG] [Thread-16137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:55:16.377 [DEBUG] [Thread-16137] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:55:16.418 [DEBUG] [Thread-16137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:55:16.418 [DEBUG] [Thread-16137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:55:16.421 [DEBUG] [Thread-16137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:55:16.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:55:16.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:55:16.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:55:16.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:55:16.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:55:16.445 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:55:16.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:55:16.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:55:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:55:16.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:55:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:55:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:55:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:55:16.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:55:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:55:16.448 [DEBUG] [Thread-16137] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:55:16.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:55:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:55:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:55:16.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:54:28', tmtdew=32.57, humidity=11.25, cloud=0.0, wind=22.62, temperature=27.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:55:16.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:55:16.546 [DEBUG] [Thread-16140] [transport.py] [_log()] starting thread (client mode): 0x173fbcd0
2025-11-12T12:55:16.547 [DEBUG] [Thread-16140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:55:16.562 [DEBUG] [Thread-16140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:55:16.562 [INFO] [Thread-16140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:55:16.569 [DEBUG] [Thread-16140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:55:16.569 [DEBUG] [Thread-16140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:55:16.569 [DEBUG] [Thread-16140] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:55:16.569 [DEBUG] [Thread-16140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] client lang: <none>
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] server lang: <none>
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] kex follows: False
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] Compression: none
2025-11-12T12:55:16.570 [DEBUG] [Thread-16140] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:55:16.628 [DEBUG] [Thread-16140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:55:16.628 [DEBUG] [Thread-16140] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:55:16.629 [DEBUG] [Thread-16140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:55:16.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:55:16.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:55:16.684 [DEBUG] [Thread-16140] [transport.py] [_log()] userauth is OK
2025-11-12T12:55:16.684 [DEBUG] [Thread-16140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:55:16.684 [DEBUG] [Thread-16140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:55:16.684 [DEBUG] [Thread-16140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:55:16.684 [DEBUG] [Thread-16140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:55:16.704 [INFO] [Thread-16140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:55:16.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:55:16.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:55:17.609 [DEBUG] [Thread-16140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:55:17.609 [DEBUG] [Thread-16140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:55:17.658 [DEBUG] [Thread-16140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:55:17.658 [DEBUG] [Thread-16140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:55:17.667 [DEBUG] [Thread-16140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:55:17.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:55:17.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-11-12T12:55:17.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:55:17.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:55:17.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:55:17.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:55:17.703 [DEBUG] [Thread-16140] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:55:23.747 [DEBUG] [Thread-16142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:55:32.881 [DEBUG] [Thread-16143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:55:38.790 [DEBUG] [Thread-16144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:55:47.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:55:47.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:55:47.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-11-12T12:55:48.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 55, 32), 32.17, 11.51, 0.0, 21.84, 26.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:55:48.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:55:32
2025-11-12T12:55:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:55:48.641 [DEBUG] [Thread-16145] [transport.py] [_log()] starting thread (client mode): 0x17399f30
2025-11-12T12:55:48.641 [DEBUG] [Thread-16145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:55:48.661 [DEBUG] [Thread-16145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:55:48.661 [INFO] [Thread-16145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:55:48.664 [DEBUG] [Thread-16145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:55:48.664 [DEBUG] [Thread-16145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:55:48.664 [DEBUG] [Thread-16145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] client lang: <none>
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] server lang: <none>
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] kex follows: False
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:55:48.665 [DEBUG] [Thread-16145] [transport.py] [_log()] Compression: none
2025-11-12T12:55:48.666 [DEBUG] [Thread-16145] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:55:48.686 [DEBUG] [Thread-16145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:55:48.687 [DEBUG] [Thread-16145] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:55:48.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:55:48.688 [DEBUG] [Thread-16145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:55:48.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:55:48.691 [DEBUG] [Thread-16145] [transport.py] [_log()] userauth is OK
2025-11-12T12:55:48.691 [DEBUG] [Thread-16145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:55:48.691 [DEBUG] [Thread-16145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:55:48.691 [DEBUG] [Thread-16145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:55:48.691 [DEBUG] [Thread-16145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:55:48.713 [INFO] [Thread-16145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:55:48.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:55:49.366 [DEBUG] [Thread-16145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:55:49.366 [DEBUG] [Thread-16145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:55:49.366 [DEBUG] [Thread-16145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:55:49.407 [DEBUG] [Thread-16145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:55:49.407 [DEBUG] [Thread-16145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:55:49.410 [DEBUG] [Thread-16145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:55:49.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:55:49.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:55:49.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:55:49.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:55:49.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:55:49.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:55:49.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:55:49.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:55:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:55:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:55:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:55:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:55:49.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:55:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:55:49.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:55:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:55:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:55:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:55:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:55:32', tmtdew=32.17, humidity=11.51, cloud=0.0, wind=21.84, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:55:49.435 [DEBUG] [Thread-16145] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:55:49.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:55:49.530 [DEBUG] [Thread-16148] [transport.py] [_log()] starting thread (client mode): 0x1737d120
2025-11-12T12:55:49.530 [DEBUG] [Thread-16148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:55:49.545 [DEBUG] [Thread-16148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:55:49.545 [INFO] [Thread-16148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:55:49.553 [DEBUG] [Thread-16148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:55:49.553 [DEBUG] [Thread-16148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:55:49.553 [DEBUG] [Thread-16148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:55:49.554 [DEBUG] [Thread-16148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:55:49.554 [DEBUG] [Thread-16148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:55:49.554 [DEBUG] [Thread-16148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:55:49.554 [DEBUG] [Thread-16148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:55:49.554 [DEBUG] [Thread-16148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:55:49.554 [DEBUG] [Thread-16148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:55:49.554 [DEBUG] [Thread-16148] [transport.py] [_log()] client lang: <none>
2025-11-12T12:55:49.554 [DEBUG] [Thread-16148] [transport.py] [_log()] server lang: <none>
2025-11-12T12:55:49.555 [DEBUG] [Thread-16148] [transport.py] [_log()] kex follows: False
2025-11-12T12:55:49.555 [DEBUG] [Thread-16148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:55:49.555 [DEBUG] [Thread-16148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:55:49.555 [DEBUG] [Thread-16148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:55:49.555 [DEBUG] [Thread-16148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:55:49.555 [DEBUG] [Thread-16148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:55:49.555 [DEBUG] [Thread-16148] [transport.py] [_log()] Compression: none
2025-11-12T12:55:49.555 [DEBUG] [Thread-16148] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:55:49.612 [DEBUG] [Thread-16148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:55:49.613 [DEBUG] [Thread-16148] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:55:49.613 [DEBUG] [Thread-16148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:55:49.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:55:49.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:55:49.668 [DEBUG] [Thread-16148] [transport.py] [_log()] userauth is OK
2025-11-12T12:55:49.668 [DEBUG] [Thread-16148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:55:49.668 [DEBUG] [Thread-16148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:55:49.668 [DEBUG] [Thread-16148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:55:49.668 [DEBUG] [Thread-16148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:55:49.693 [INFO] [Thread-16148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:55:49.693 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:55:49.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:55:50.585 [DEBUG] [Thread-16148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:55:50.585 [DEBUG] [Thread-16148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:55:50.632 [DEBUG] [Thread-16148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:55:50.633 [DEBUG] [Thread-16148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:55:50.642 [DEBUG] [Thread-16148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:55:50.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:55:50.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-11-12T12:55:50.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-11-12T12:55:50.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:55:50.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:55:50.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:55:50.680 [DEBUG] [Thread-16148] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:55:53.828 [DEBUG] [Thread-16150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:56:08.883 [DEBUG] [Thread-16151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:56:14.702 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:56:14.703 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:56:20.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:56:20.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:56:20.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-11-12T12:56:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 56, 4), 32.55, 11.23, 0.0, 28.95, 26.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:56:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:56:04
2025-11-12T12:56:21.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:56:21.601 [DEBUG] [Thread-16152] [transport.py] [_log()] starting thread (client mode): 0x17398f10
2025-11-12T12:56:21.601 [DEBUG] [Thread-16152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:56:21.620 [DEBUG] [Thread-16152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:56:21.620 [INFO] [Thread-16152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] client lang: <none>
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] server lang: <none>
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] kex follows: False
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:56:21.624 [DEBUG] [Thread-16152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:56:21.625 [DEBUG] [Thread-16152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:56:21.625 [DEBUG] [Thread-16152] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:56:21.625 [DEBUG] [Thread-16152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:56:21.625 [DEBUG] [Thread-16152] [transport.py] [_log()] Compression: none
2025-11-12T12:56:21.625 [DEBUG] [Thread-16152] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:56:21.643 [DEBUG] [Thread-16152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:56:21.644 [DEBUG] [Thread-16152] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:56:21.645 [DEBUG] [Thread-16152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:56:21.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:56:21.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:56:21.647 [DEBUG] [Thread-16152] [transport.py] [_log()] userauth is OK
2025-11-12T12:56:21.648 [DEBUG] [Thread-16152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:56:21.648 [DEBUG] [Thread-16152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:56:21.648 [DEBUG] [Thread-16152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:56:21.648 [DEBUG] [Thread-16152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:56:21.663 [INFO] [Thread-16152] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:56:21.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:56:22.325 [DEBUG] [Thread-16152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:56:22.325 [DEBUG] [Thread-16152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:56:22.325 [DEBUG] [Thread-16152] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:56:22.366 [DEBUG] [Thread-16152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:56:22.366 [DEBUG] [Thread-16152] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:56:22.368 [DEBUG] [Thread-16152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:56:22.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:56:22.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:56:22.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:56:22.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:56:22.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:56:22.392 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:56:22.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:56:22.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:56:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:56:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:56:22.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:56:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:56:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:56:22.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:56:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:56:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:56:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:56:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:56:22.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:56:04', tmtdew=32.55, humidity=11.23, cloud=0.0, wind=28.95, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:56:22.395 [DEBUG] [Thread-16152] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:56:22.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:56:22.492 [DEBUG] [Thread-16155] [transport.py] [_log()] starting thread (client mode): 0x173f8370
2025-11-12T12:56:22.492 [DEBUG] [Thread-16155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:56:22.511 [DEBUG] [Thread-16155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:56:22.511 [INFO] [Thread-16155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:56:22.518 [DEBUG] [Thread-16155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:56:22.519 [DEBUG] [Thread-16155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:56:22.519 [DEBUG] [Thread-16155] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:56:22.519 [DEBUG] [Thread-16155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:56:22.519 [DEBUG] [Thread-16155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:56:22.519 [DEBUG] [Thread-16155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:56:22.519 [DEBUG] [Thread-16155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:56:22.520 [DEBUG] [Thread-16155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:56:22.520 [DEBUG] [Thread-16155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:56:22.520 [DEBUG] [Thread-16155] [transport.py] [_log()] client lang: <none>
2025-11-12T12:56:22.520 [DEBUG] [Thread-16155] [transport.py] [_log()] server lang: <none>
2025-11-12T12:56:22.520 [DEBUG] [Thread-16155] [transport.py] [_log()] kex follows: False
2025-11-12T12:56:22.520 [DEBUG] [Thread-16155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:56:22.520 [DEBUG] [Thread-16155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:56:22.520 [DEBUG] [Thread-16155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:56:22.521 [DEBUG] [Thread-16155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:56:22.521 [DEBUG] [Thread-16155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:56:22.521 [DEBUG] [Thread-16155] [transport.py] [_log()] Compression: none
2025-11-12T12:56:22.521 [DEBUG] [Thread-16155] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:56:22.577 [DEBUG] [Thread-16155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:56:22.578 [DEBUG] [Thread-16155] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:56:22.579 [DEBUG] [Thread-16155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:56:22.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:56:22.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:56:22.636 [DEBUG] [Thread-16155] [transport.py] [_log()] userauth is OK
2025-11-12T12:56:22.636 [DEBUG] [Thread-16155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:56:22.646 [DEBUG] [Thread-16155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:56:22.646 [DEBUG] [Thread-16155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:56:22.646 [DEBUG] [Thread-16155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:56:22.671 [INFO] [Thread-16155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:56:22.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:56:22.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:56:23.544 [DEBUG] [Thread-16155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:56:23.544 [DEBUG] [Thread-16155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:56:23.593 [DEBUG] [Thread-16155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:56:23.593 [DEBUG] [Thread-16155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:56:23.602 [DEBUG] [Thread-16155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:56:23.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:56:23.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-11-12T12:56:23.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-11-12T12:56:23.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:56:23.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:56:23.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:56:23.639 [DEBUG] [Thread-16155] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:56:23.922 [DEBUG] [Thread-16157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:56:32.915 [DEBUG] [Thread-16158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:56:38.978 [DEBUG] [Thread-16159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:56:53.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:56:53.650 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:56:53.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-11-12T12:56:54.011 [DEBUG] [Thread-16160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:56:54.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 56, 36), 33.22, 10.66, 0.0, 36.14, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:56:54.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:56:36
2025-11-12T12:56:54.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:56:54.546 [DEBUG] [Thread-16161] [transport.py] [_log()] starting thread (client mode): 0x173999f0
2025-11-12T12:56:54.546 [DEBUG] [Thread-16161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:56:54.566 [DEBUG] [Thread-16161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:56:54.566 [INFO] [Thread-16161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:56:54.569 [DEBUG] [Thread-16161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:56:54.569 [DEBUG] [Thread-16161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:56:54.569 [DEBUG] [Thread-16161] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:56:54.569 [DEBUG] [Thread-16161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:56:54.569 [DEBUG] [Thread-16161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:56:54.569 [DEBUG] [Thread-16161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:56:54.569 [DEBUG] [Thread-16161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:56:54.569 [DEBUG] [Thread-16161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] client lang: <none>
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] server lang: <none>
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] kex follows: False
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] Compression: none
2025-11-12T12:56:54.570 [DEBUG] [Thread-16161] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:56:54.588 [DEBUG] [Thread-16161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:56:54.589 [DEBUG] [Thread-16161] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:56:54.590 [DEBUG] [Thread-16161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:56:54.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:56:54.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:56:54.592 [DEBUG] [Thread-16161] [transport.py] [_log()] userauth is OK
2025-11-12T12:56:54.592 [DEBUG] [Thread-16161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:56:54.592 [DEBUG] [Thread-16161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:56:54.592 [DEBUG] [Thread-16161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:56:54.592 [DEBUG] [Thread-16161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:56:54.617 [INFO] [Thread-16161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:56:54.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:56:55.270 [DEBUG] [Thread-16161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:56:55.270 [DEBUG] [Thread-16161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:56:55.271 [DEBUG] [Thread-16161] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:56:55.311 [DEBUG] [Thread-16161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:56:55.311 [DEBUG] [Thread-16161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:56:55.314 [DEBUG] [Thread-16161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:56:55.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:56:55.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:56:55.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:56:55.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:56:55.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:56:55.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:56:55.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:56:55.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:56:55.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:56:55.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:56:55.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:56:55.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:56:55.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:56:55.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:56:55.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:56:55.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:56:55.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:56:55.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:56:55.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:56:36', tmtdew=33.22, humidity=10.66, cloud=0.0, wind=36.14, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:56:55.341 [DEBUG] [Thread-16161] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:56:55.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:56:55.437 [DEBUG] [Thread-16164] [transport.py] [_log()] starting thread (client mode): 0x17344a60
2025-11-12T12:56:55.437 [DEBUG] [Thread-16164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:56:55.454 [DEBUG] [Thread-16164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:56:55.454 [INFO] [Thread-16164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:56:55.461 [DEBUG] [Thread-16164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:56:55.462 [DEBUG] [Thread-16164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:56:55.462 [DEBUG] [Thread-16164] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:56:55.462 [DEBUG] [Thread-16164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:56:55.462 [DEBUG] [Thread-16164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:56:55.462 [DEBUG] [Thread-16164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:56:55.462 [DEBUG] [Thread-16164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:56:55.463 [DEBUG] [Thread-16164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:56:55.463 [DEBUG] [Thread-16164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:56:55.463 [DEBUG] [Thread-16164] [transport.py] [_log()] client lang: <none>
2025-11-12T12:56:55.463 [DEBUG] [Thread-16164] [transport.py] [_log()] server lang: <none>
2025-11-12T12:56:55.463 [DEBUG] [Thread-16164] [transport.py] [_log()] kex follows: False
2025-11-12T12:56:55.463 [DEBUG] [Thread-16164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:56:55.463 [DEBUG] [Thread-16164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:56:55.463 [DEBUG] [Thread-16164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:56:55.464 [DEBUG] [Thread-16164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:56:55.464 [DEBUG] [Thread-16164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:56:55.464 [DEBUG] [Thread-16164] [transport.py] [_log()] Compression: none
2025-11-12T12:56:55.464 [DEBUG] [Thread-16164] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:56:55.522 [DEBUG] [Thread-16164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:56:55.523 [DEBUG] [Thread-16164] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:56:55.523 [DEBUG] [Thread-16164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:56:55.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:56:55.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:56:55.579 [DEBUG] [Thread-16164] [transport.py] [_log()] userauth is OK
2025-11-12T12:56:55.579 [DEBUG] [Thread-16164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:56:55.579 [DEBUG] [Thread-16164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:56:55.579 [DEBUG] [Thread-16164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:56:55.579 [DEBUG] [Thread-16164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:56:55.593 [INFO] [Thread-16164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:56:55.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:56:55.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:56:56.449 [DEBUG] [Thread-16164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:56:56.449 [DEBUG] [Thread-16164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:56:56.498 [DEBUG] [Thread-16164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:56:56.498 [DEBUG] [Thread-16164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:56:56.507 [DEBUG] [Thread-16164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:56:56.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:56:56.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-11-12T12:56:56.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-11-12T12:56:56.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:56:56.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:56:56.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:56:56.543 [DEBUG] [Thread-16164] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:57:09.042 [DEBUG] [Thread-16166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:57:14.844 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:57:14.845 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:57:24.079 [DEBUG] [Thread-16167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:57:26.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:57:26.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:57:26.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T12:57:27.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 57, 8), 33.68, 10.36, 0.0, 40.81, 27.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:57:27.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:57:08
2025-11-12T12:57:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:57:27.466 [DEBUG] [Thread-16168] [transport.py] [_log()] starting thread (client mode): 0x173f8700
2025-11-12T12:57:27.466 [DEBUG] [Thread-16168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:57:27.485 [DEBUG] [Thread-16168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:57:27.486 [INFO] [Thread-16168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:57:27.489 [DEBUG] [Thread-16168] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:57:27.489 [DEBUG] [Thread-16168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:57:27.489 [DEBUG] [Thread-16168] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:57:27.489 [DEBUG] [Thread-16168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:57:27.489 [DEBUG] [Thread-16168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:57:27.489 [DEBUG] [Thread-16168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] client lang: <none>
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] server lang: <none>
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] kex follows: False
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] Compression: none
2025-11-12T12:57:27.490 [DEBUG] [Thread-16168] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:57:27.501 [DEBUG] [Thread-16168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:57:27.502 [DEBUG] [Thread-16168] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:57:27.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:57:27.503 [DEBUG] [Thread-16168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:57:27.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:57:27.506 [DEBUG] [Thread-16168] [transport.py] [_log()] userauth is OK
2025-11-12T12:57:27.506 [DEBUG] [Thread-16168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:57:27.506 [DEBUG] [Thread-16168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:57:27.507 [DEBUG] [Thread-16168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:57:27.507 [DEBUG] [Thread-16168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:57:27.533 [INFO] [Thread-16168] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:57:27.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:57:28.122 [DEBUG] [Thread-16168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:57:28.123 [DEBUG] [Thread-16168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:57:28.123 [DEBUG] [Thread-16168] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:57:28.163 [DEBUG] [Thread-16168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:57:28.163 [DEBUG] [Thread-16168] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:57:28.166 [DEBUG] [Thread-16168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:57:28.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:57:28.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:57:28.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:57:28.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:57:28.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:57:28.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:57:28.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:57:28.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:57:28.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:57:28.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:57:28.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:57:28.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:57:28.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:57:28.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:57:28.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:57:28.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:57:28.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:57:28.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:57:28.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:57:08', tmtdew=33.68, humidity=10.36, cloud=0.0, wind=40.81, temperature=27.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:57:28.194 [DEBUG] [Thread-16168] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:57:28.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:57:28.290 [DEBUG] [Thread-16171] [transport.py] [_log()] starting thread (client mode): 0x173fbfd0
2025-11-12T12:57:28.290 [DEBUG] [Thread-16171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:57:28.306 [DEBUG] [Thread-16171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:57:28.306 [INFO] [Thread-16171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:57:28.316 [DEBUG] [Thread-16171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] client lang: <none>
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] server lang: <none>
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] kex follows: False
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:57:28.317 [DEBUG] [Thread-16171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:57:28.318 [DEBUG] [Thread-16171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:57:28.318 [DEBUG] [Thread-16171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:57:28.318 [DEBUG] [Thread-16171] [transport.py] [_log()] Compression: none
2025-11-12T12:57:28.318 [DEBUG] [Thread-16171] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:57:28.377 [DEBUG] [Thread-16171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:57:28.378 [DEBUG] [Thread-16171] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:57:28.378 [DEBUG] [Thread-16171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:57:28.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:57:28.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:57:28.439 [DEBUG] [Thread-16171] [transport.py] [_log()] userauth is OK
2025-11-12T12:57:28.439 [DEBUG] [Thread-16171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:57:28.439 [DEBUG] [Thread-16171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:57:28.439 [DEBUG] [Thread-16171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:57:28.439 [DEBUG] [Thread-16171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:57:28.463 [INFO] [Thread-16171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:57:28.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:57:28.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:57:29.341 [DEBUG] [Thread-16171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:57:29.341 [DEBUG] [Thread-16171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:57:29.394 [DEBUG] [Thread-16171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:57:29.394 [DEBUG] [Thread-16171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:57:29.403 [DEBUG] [Thread-16171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:57:29.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:57:29.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-11-12T12:57:29.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-11-12T12:57:29.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:57:29.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:57:29.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:57:29.440 [DEBUG] [Thread-16171] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:57:32.973 [DEBUG] [Thread-16173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:57:39.117 [DEBUG] [Thread-16174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:57:54.167 [DEBUG] [Thread-16175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:57:59.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:57:59.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:57:59.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-11-12T12:58:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 57, 40), 33.86, 10.28, 0.0, 37.56, 26.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:58:00.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:57:40
2025-11-12T12:58:00.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:58:00.365 [DEBUG] [Thread-16176] [transport.py] [_log()] starting thread (client mode): 0x173fb6a0
2025-11-12T12:58:00.365 [DEBUG] [Thread-16176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:58:00.383 [DEBUG] [Thread-16176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:58:00.383 [INFO] [Thread-16176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:58:00.386 [DEBUG] [Thread-16176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] client lang: <none>
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] server lang: <none>
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] kex follows: False
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:58:00.387 [DEBUG] [Thread-16176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:58:00.388 [DEBUG] [Thread-16176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:58:00.388 [DEBUG] [Thread-16176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:58:00.388 [DEBUG] [Thread-16176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:58:00.388 [DEBUG] [Thread-16176] [transport.py] [_log()] Compression: none
2025-11-12T12:58:00.388 [DEBUG] [Thread-16176] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:58:00.408 [DEBUG] [Thread-16176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:58:00.409 [DEBUG] [Thread-16176] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:58:00.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:58:00.411 [DEBUG] [Thread-16176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:58:00.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:58:00.412 [DEBUG] [Thread-16176] [transport.py] [_log()] userauth is OK
2025-11-12T12:58:00.413 [DEBUG] [Thread-16176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:58:00.413 [DEBUG] [Thread-16176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:58:00.413 [DEBUG] [Thread-16176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:58:00.413 [DEBUG] [Thread-16176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:58:00.437 [INFO] [Thread-16176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:58:00.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:58:01.093 [DEBUG] [Thread-16176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:58:01.093 [DEBUG] [Thread-16176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:58:01.094 [DEBUG] [Thread-16176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:58:01.134 [DEBUG] [Thread-16176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:58:01.134 [DEBUG] [Thread-16176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:58:01.137 [DEBUG] [Thread-16176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:58:01.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:58:01.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:58:01.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:58:01.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:58:01.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:58:01.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:58:01.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:58:01.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:58:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:58:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:58:01.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:58:01.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:58:01.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:58:01.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:58:01.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:58:01.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:58:01.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:58:01.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:58:01.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:57:40', tmtdew=33.86, humidity=10.28, cloud=0.0, wind=37.56, temperature=26.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:58:01.162 [DEBUG] [Thread-16176] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:58:01.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:58:01.263 [DEBUG] [Thread-16179] [transport.py] [_log()] starting thread (client mode): 0x173bee00
2025-11-12T12:58:01.263 [DEBUG] [Thread-16179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:58:01.277 [DEBUG] [Thread-16179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:58:01.278 [INFO] [Thread-16179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:58:01.285 [DEBUG] [Thread-16179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] client lang: <none>
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] server lang: <none>
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] kex follows: False
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:58:01.286 [DEBUG] [Thread-16179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:58:01.287 [DEBUG] [Thread-16179] [transport.py] [_log()] Compression: none
2025-11-12T12:58:01.287 [DEBUG] [Thread-16179] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:58:01.343 [DEBUG] [Thread-16179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:58:01.343 [DEBUG] [Thread-16179] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:58:01.344 [DEBUG] [Thread-16179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:58:01.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:58:01.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:58:01.399 [DEBUG] [Thread-16179] [transport.py] [_log()] userauth is OK
2025-11-12T12:58:01.399 [DEBUG] [Thread-16179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:58:01.400 [DEBUG] [Thread-16179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:58:01.400 [DEBUG] [Thread-16179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:58:01.400 [DEBUG] [Thread-16179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:58:01.419 [INFO] [Thread-16179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:58:01.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:58:01.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:58:02.319 [DEBUG] [Thread-16179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:58:02.319 [DEBUG] [Thread-16179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:58:02.372 [DEBUG] [Thread-16179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:58:02.372 [DEBUG] [Thread-16179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:58:02.381 [DEBUG] [Thread-16179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:58:02.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:58:02.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T12:58:02.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T12:58:02.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:58:02.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:58:02.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:58:02.423 [DEBUG] [Thread-16179] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:58:09.196 [DEBUG] [Thread-16181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:58:14.986 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:58:14.988 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:58:24.242 [DEBUG] [Thread-16182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:58:32.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:58:32.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:58:32.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-11-12T12:58:33.006 [DEBUG] [Thread-16183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:58:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 58, 12), 33.92, 10.22, 0.0, 36.35, 26.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:58:33.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:58:12
2025-11-12T12:58:33.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:58:33.393 [DEBUG] [Thread-16184] [transport.py] [_log()] starting thread (client mode): 0x19dd93f0
2025-11-12T12:58:33.393 [DEBUG] [Thread-16184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:58:33.410 [DEBUG] [Thread-16184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:58:33.410 [INFO] [Thread-16184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] client lang: <none>
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] server lang: <none>
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] kex follows: False
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] Compression: none
2025-11-12T12:58:33.414 [DEBUG] [Thread-16184] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:58:33.428 [DEBUG] [Thread-16184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:58:33.429 [DEBUG] [Thread-16184] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:58:33.429 [DEBUG] [Thread-16184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:58:33.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:58:33.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:58:33.430 [DEBUG] [Thread-16184] [transport.py] [_log()] userauth is OK
2025-11-12T12:58:33.430 [DEBUG] [Thread-16184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:58:33.430 [DEBUG] [Thread-16184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:58:33.430 [DEBUG] [Thread-16184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:58:33.430 [DEBUG] [Thread-16184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:58:33.440 [INFO] [Thread-16184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:58:33.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:58:34.101 [DEBUG] [Thread-16184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:58:34.101 [DEBUG] [Thread-16184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:58:34.101 [DEBUG] [Thread-16184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:58:34.142 [DEBUG] [Thread-16184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:58:34.142 [DEBUG] [Thread-16184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:58:34.144 [DEBUG] [Thread-16184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:58:34.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:58:34.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:58:34.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:58:34.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:58:34.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:58:34.162 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:58:34.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:58:34.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:58:12', tmtdew=33.92, humidity=10.22, cloud=0.0, wind=36.35, temperature=26.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:58:34.163 [DEBUG] [Thread-16184] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:58:34.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:58:34.247 [DEBUG] [Thread-16187] [transport.py] [_log()] starting thread (client mode): 0x173bc5e0
2025-11-12T12:58:34.247 [DEBUG] [Thread-16187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:58:34.263 [DEBUG] [Thread-16187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:58:34.263 [INFO] [Thread-16187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] client lang: <none>
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] server lang: <none>
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] kex follows: False
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] Compression: none
2025-11-12T12:58:34.271 [DEBUG] [Thread-16187] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:58:34.327 [DEBUG] [Thread-16187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:58:34.327 [DEBUG] [Thread-16187] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:58:34.327 [DEBUG] [Thread-16187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:58:34.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:58:34.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:58:34.383 [DEBUG] [Thread-16187] [transport.py] [_log()] userauth is OK
2025-11-12T12:58:34.383 [DEBUG] [Thread-16187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:58:34.383 [DEBUG] [Thread-16187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:58:34.383 [DEBUG] [Thread-16187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:58:34.383 [DEBUG] [Thread-16187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:58:34.397 [INFO] [Thread-16187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:58:34.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:58:34.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:58:35.251 [DEBUG] [Thread-16187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:58:35.251 [DEBUG] [Thread-16187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:58:35.300 [DEBUG] [Thread-16187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:58:35.300 [DEBUG] [Thread-16187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:58:35.309 [DEBUG] [Thread-16187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:58:35.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:58:35.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-11-12T12:58:35.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-11-12T12:58:35.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:58:35.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:58:35.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:58:35.341 [DEBUG] [Thread-16187] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:58:39.274 [DEBUG] [Thread-16189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:58:54.335 [DEBUG] [Thread-16190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:59:05.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:59:05.339 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:59:05.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-11-12T12:59:05.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 58, 44), 34.06, 10.22, 0.0, 29.84, 26.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:59:05.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:58:44
2025-11-12T12:59:06.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:59:06.231 [DEBUG] [Thread-16191] [transport.py] [_log()] starting thread (client mode): 0x19dd9a50
2025-11-12T12:59:06.231 [DEBUG] [Thread-16191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:59:06.251 [DEBUG] [Thread-16191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:59:06.252 [INFO] [Thread-16191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:59:06.255 [DEBUG] [Thread-16191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:59:06.255 [DEBUG] [Thread-16191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:59:06.255 [DEBUG] [Thread-16191] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:59:06.255 [DEBUG] [Thread-16191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:59:06.255 [DEBUG] [Thread-16191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] client lang: <none>
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] server lang: <none>
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] kex follows: False
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] Compression: none
2025-11-12T12:59:06.256 [DEBUG] [Thread-16191] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:59:06.271 [DEBUG] [Thread-16191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:59:06.272 [DEBUG] [Thread-16191] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:59:06.272 [DEBUG] [Thread-16191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:59:06.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:59:06.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:59:06.316 [DEBUG] [Thread-16191] [transport.py] [_log()] userauth is OK
2025-11-12T12:59:06.317 [DEBUG] [Thread-16191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:59:06.317 [DEBUG] [Thread-16191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:59:06.317 [DEBUG] [Thread-16191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:59:06.317 [DEBUG] [Thread-16191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:59:06.344 [INFO] [Thread-16191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:59:06.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:59:06.969 [DEBUG] [Thread-16191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:59:06.969 [DEBUG] [Thread-16191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:59:06.969 [DEBUG] [Thread-16191] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:59:07.010 [DEBUG] [Thread-16191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:59:07.010 [DEBUG] [Thread-16191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:59:07.013 [DEBUG] [Thread-16191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:59:07.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:59:07.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:59:07.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:59:07.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:59:07.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:59:07.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:59:07.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:59:07.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:59:07.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:59:07.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:59:07.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:59:07.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:59:07.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:59:07.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:59:07.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:59:07.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:59:07.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:59:07.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:59:07.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:58:44', tmtdew=34.06, humidity=10.22, cloud=0.0, wind=29.84, temperature=26.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:59:07.041 [DEBUG] [Thread-16191] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:59:07.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:59:07.140 [DEBUG] [Thread-16194] [transport.py] [_log()] starting thread (client mode): 0x149ab220
2025-11-12T12:59:07.140 [DEBUG] [Thread-16194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:59:07.154 [DEBUG] [Thread-16194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:59:07.155 [INFO] [Thread-16194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:59:07.162 [DEBUG] [Thread-16194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:59:07.162 [DEBUG] [Thread-16194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] client lang: <none>
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] server lang: <none>
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] kex follows: False
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] Compression: none
2025-11-12T12:59:07.163 [DEBUG] [Thread-16194] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:59:07.220 [DEBUG] [Thread-16194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:59:07.221 [DEBUG] [Thread-16194] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:59:07.222 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:59:07.222 [DEBUG] [Thread-16194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:59:07.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:59:07.276 [DEBUG] [Thread-16194] [transport.py] [_log()] userauth is OK
2025-11-12T12:59:07.277 [DEBUG] [Thread-16194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:59:07.277 [DEBUG] [Thread-16194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:59:07.277 [DEBUG] [Thread-16194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:59:07.277 [DEBUG] [Thread-16194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:59:07.295 [INFO] [Thread-16194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:59:07.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:59:07.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:59:08.157 [DEBUG] [Thread-16194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:59:08.157 [DEBUG] [Thread-16194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:59:08.205 [DEBUG] [Thread-16194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:59:08.206 [DEBUG] [Thread-16194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:59:08.215 [DEBUG] [Thread-16194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:59:08.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:59:08.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-11-12T12:59:08.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-11-12T12:59:08.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:59:08.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:59:08.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:59:08.252 [DEBUG] [Thread-16194] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:59:09.370 [DEBUG] [Thread-16196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:59:15.128 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:59:15.129 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:59:24.411 [DEBUG] [Thread-16197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:59:33.042 [DEBUG] [Thread-16198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:59:38.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T12:59:38.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T12:59:38.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-11-12T12:59:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 59, 16), 34.11, 10.18, 0.0, 28.83, 26.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T12:59:38.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:59:16
2025-11-12T12:59:39.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T12:59:39.169 [DEBUG] [Thread-16199] [transport.py] [_log()] starting thread (client mode): 0x14921a80
2025-11-12T12:59:39.169 [DEBUG] [Thread-16199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:59:39.189 [DEBUG] [Thread-16199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T12:59:39.189 [INFO] [Thread-16199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T12:59:39.192 [DEBUG] [Thread-16199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:59:39.192 [DEBUG] [Thread-16199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T12:59:39.192 [DEBUG] [Thread-16199] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:59:39.192 [DEBUG] [Thread-16199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:59:39.192 [DEBUG] [Thread-16199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:59:39.192 [DEBUG] [Thread-16199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] client lang: <none>
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] server lang: <none>
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] kex follows: False
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] Compression: none
2025-11-12T12:59:39.193 [DEBUG] [Thread-16199] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:59:39.209 [DEBUG] [Thread-16199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:59:39.210 [DEBUG] [Thread-16199] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:59:39.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T12:59:39.211 [DEBUG] [Thread-16199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T12:59:39.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:59:39.213 [DEBUG] [Thread-16199] [transport.py] [_log()] userauth is OK
2025-11-12T12:59:39.213 [DEBUG] [Thread-16199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:59:39.213 [DEBUG] [Thread-16199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:59:39.213 [DEBUG] [Thread-16199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T12:59:39.213 [DEBUG] [Thread-16199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:59:39.237 [INFO] [Thread-16199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:59:39.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:59:39.448 [DEBUG] [Thread-16201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T12:59:39.903 [DEBUG] [Thread-16199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:59:39.903 [DEBUG] [Thread-16199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:59:39.903 [DEBUG] [Thread-16199] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T12:59:39.944 [DEBUG] [Thread-16199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:59:39.945 [DEBUG] [Thread-16199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:59:39.948 [DEBUG] [Thread-16199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:59:39.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:59:39.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T12:59:39.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T12:59:39.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T12:59:39.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:59:39.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T12:59:39.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:59:39.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:59:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T12:59:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T12:59:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T12:59:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T12:59:39.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T12:59:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T12:59:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T12:59:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T12:59:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T12:59:39.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T12:59:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:59:16', tmtdew=34.11, humidity=10.18, cloud=0.0, wind=28.83, temperature=26.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T12:59:39.973 [DEBUG] [Thread-16199] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:59:40.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T12:59:40.080 [DEBUG] [Thread-16203] [transport.py] [_log()] starting thread (client mode): 0x149228c0
2025-11-12T12:59:40.081 [DEBUG] [Thread-16203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T12:59:40.096 [DEBUG] [Thread-16203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T12:59:40.096 [INFO] [Thread-16203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T12:59:40.104 [DEBUG] [Thread-16203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T12:59:40.105 [DEBUG] [Thread-16203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T12:59:40.105 [DEBUG] [Thread-16203] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T12:59:40.105 [DEBUG] [Thread-16203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:59:40.105 [DEBUG] [Thread-16203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T12:59:40.105 [DEBUG] [Thread-16203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:59:40.105 [DEBUG] [Thread-16203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T12:59:40.105 [DEBUG] [Thread-16203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T12:59:40.106 [DEBUG] [Thread-16203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T12:59:40.106 [DEBUG] [Thread-16203] [transport.py] [_log()] client lang: <none>
2025-11-12T12:59:40.106 [DEBUG] [Thread-16203] [transport.py] [_log()] server lang: <none>
2025-11-12T12:59:40.106 [DEBUG] [Thread-16203] [transport.py] [_log()] kex follows: False
2025-11-12T12:59:40.106 [DEBUG] [Thread-16203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T12:59:40.106 [DEBUG] [Thread-16203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T12:59:40.106 [DEBUG] [Thread-16203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T12:59:40.107 [DEBUG] [Thread-16203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T12:59:40.107 [DEBUG] [Thread-16203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T12:59:40.107 [DEBUG] [Thread-16203] [transport.py] [_log()] Compression: none
2025-11-12T12:59:40.107 [DEBUG] [Thread-16203] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T12:59:40.164 [DEBUG] [Thread-16203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T12:59:40.165 [DEBUG] [Thread-16203] [transport.py] [_log()] Switch to new keys ...
2025-11-12T12:59:40.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T12:59:40.166 [DEBUG] [Thread-16203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T12:59:40.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T12:59:40.220 [DEBUG] [Thread-16203] [transport.py] [_log()] userauth is OK
2025-11-12T12:59:40.220 [DEBUG] [Thread-16203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T12:59:40.220 [DEBUG] [Thread-16203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T12:59:40.220 [DEBUG] [Thread-16203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T12:59:40.220 [DEBUG] [Thread-16203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T12:59:40.239 [INFO] [Thread-16203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T12:59:40.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T12:59:40.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T12:59:41.095 [DEBUG] [Thread-16203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T12:59:41.096 [DEBUG] [Thread-16203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T12:59:41.144 [DEBUG] [Thread-16203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T12:59:41.144 [DEBUG] [Thread-16203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T12:59:41.153 [DEBUG] [Thread-16203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T12:59:41.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T12:59:41.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-11-12T12:59:41.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-11-12T12:59:41.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T12:59:41.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T12:59:41.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T12:59:41.189 [DEBUG] [Thread-16203] [transport.py] [_log()] EOF in transport thread
2025-11-12T12:59:54.482 [DEBUG] [Thread-16205 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:00:09.531 [DEBUG] [Thread-16206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:00:11.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:00:11.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:00:11.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-11-12T13:00:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 12, 59, 48), 33.68, 10.36, 0.0, 27.01, 26.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:00:11.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 12:59:48
2025-11-12T13:00:11.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:00:12.109 [DEBUG] [Thread-16207] [transport.py] [_log()] starting thread (client mode): 0x14921210
2025-11-12T13:00:12.110 [DEBUG] [Thread-16207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:00:12.131 [DEBUG] [Thread-16207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:00:12.131 [INFO] [Thread-16207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:00:12.134 [DEBUG] [Thread-16207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:00:12.134 [DEBUG] [Thread-16207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:00:12.134 [DEBUG] [Thread-16207] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:00:12.134 [DEBUG] [Thread-16207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:00:12.134 [DEBUG] [Thread-16207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] client lang: <none>
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] server lang: <none>
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] kex follows: False
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:00:12.135 [DEBUG] [Thread-16207] [transport.py] [_log()] Compression: none
2025-11-12T13:00:12.136 [DEBUG] [Thread-16207] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:00:12.153 [DEBUG] [Thread-16207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:00:12.154 [DEBUG] [Thread-16207] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:00:12.154 [DEBUG] [Thread-16207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:00:12.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:00:12.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:00:12.156 [DEBUG] [Thread-16207] [transport.py] [_log()] userauth is OK
2025-11-12T13:00:12.156 [DEBUG] [Thread-16207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:00:12.156 [DEBUG] [Thread-16207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:00:12.156 [DEBUG] [Thread-16207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:00:12.156 [DEBUG] [Thread-16207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:00:12.174 [INFO] [Thread-16207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:00:12.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:00:12.951 [DEBUG] [Thread-16207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:00:12.951 [DEBUG] [Thread-16207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:00:12.951 [DEBUG] [Thread-16207] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:00:12.991 [DEBUG] [Thread-16207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:00:12.991 [DEBUG] [Thread-16207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:00:12.994 [DEBUG] [Thread-16207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:00:13.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:00:13.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:00:13.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:00:13.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:00:13.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:00:13.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:00:13.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:00:13.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:00:13.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:00:13.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.454602 -999.00  +26.90  15.13     17   -0.00 1 1 1 1 1   888    0 29.81 98.39 ----- 17.1 15.1 261.8 22.2 32.2 -27.4 31.6 -24.7 31.1 -23.6 32.0 -25.4
2025-11-12T13:00:13.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:00:13.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:00:13.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.454602
2025-11-12T13:00:13.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:00:13.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:00:13.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:00:13.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:00:13.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:00:13.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T12:59:48', tmtdew=33.68, humidity=10.36, cloud=0.0, wind=27.01, temperature=26.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T10:54:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:00:13.018 [DEBUG] [Thread-16207] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:00:13.102 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:00:13.114 [DEBUG] [Thread-16210] [transport.py] [_log()] starting thread (client mode): 0x14981bd0
2025-11-12T13:00:13.114 [DEBUG] [Thread-16210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:00:13.129 [DEBUG] [Thread-16210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:00:13.129 [INFO] [Thread-16210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:00:13.136 [DEBUG] [Thread-16210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:00:13.136 [DEBUG] [Thread-16210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] client lang: <none>
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] server lang: <none>
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] kex follows: False
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:00:13.137 [DEBUG] [Thread-16210] [transport.py] [_log()] Compression: none
2025-11-12T13:00:13.138 [DEBUG] [Thread-16210] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:00:13.195 [DEBUG] [Thread-16210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:00:13.195 [DEBUG] [Thread-16210] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:00:13.196 [DEBUG] [Thread-16210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:00:13.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:00:13.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:00:13.252 [DEBUG] [Thread-16210] [transport.py] [_log()] userauth is OK
2025-11-12T13:00:13.252 [DEBUG] [Thread-16210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:00:13.252 [DEBUG] [Thread-16210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:00:13.252 [DEBUG] [Thread-16210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:00:13.252 [DEBUG] [Thread-16210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:00:13.271 [INFO] [Thread-16210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:00:13.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:00:13.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:00:14.163 [DEBUG] [Thread-16210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:00:14.163 [DEBUG] [Thread-16210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:00:14.211 [DEBUG] [Thread-16210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:00:14.211 [DEBUG] [Thread-16210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:00:14.220 [DEBUG] [Thread-16210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:00:14.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:00:14.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-11-12T13:00:14.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:00:14.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:00:14.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:00:14.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:00:14.256 [DEBUG] [Thread-16210] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:00:15.269 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:00:15.269 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:00:24.566 [DEBUG] [Thread-16212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:00:33.075 [DEBUG] [Thread-16213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:00:39.628 [DEBUG] [Thread-16214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:00:44.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:00:44.278 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:00:44.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:00:44.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 0, 21), 34.07, 10.1, 0.0, 30.44, 26.85, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:00:44.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:00:21
2025-11-12T13:00:45.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:00:45.182 [DEBUG] [Thread-16215] [transport.py] [_log()] starting thread (client mode): 0x19dd93c0
2025-11-12T13:00:45.183 [DEBUG] [Thread-16215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:00:45.202 [DEBUG] [Thread-16215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:00:45.203 [INFO] [Thread-16215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:00:45.205 [DEBUG] [Thread-16215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:00:45.205 [DEBUG] [Thread-16215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] client lang: <none>
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] server lang: <none>
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] kex follows: False
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] Compression: none
2025-11-12T13:00:45.206 [DEBUG] [Thread-16215] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:00:45.223 [DEBUG] [Thread-16215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:00:45.224 [DEBUG] [Thread-16215] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:00:45.224 [DEBUG] [Thread-16215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:00:45.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:00:45.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:00:45.226 [DEBUG] [Thread-16215] [transport.py] [_log()] userauth is OK
2025-11-12T13:00:45.226 [DEBUG] [Thread-16215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:00:45.227 [DEBUG] [Thread-16215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:00:45.227 [DEBUG] [Thread-16215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:00:45.227 [DEBUG] [Thread-16215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:00:45.251 [INFO] [Thread-16215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:00:45.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:00:45.849 [DEBUG] [Thread-16215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:00:45.849 [DEBUG] [Thread-16215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:00:45.849 [DEBUG] [Thread-16215] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:00:45.890 [DEBUG] [Thread-16215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:00:45.890 [DEBUG] [Thread-16215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:00:45.893 [DEBUG] [Thread-16215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:00:45.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:00:45.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:00:45.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:00:45.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:00:45.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:00:45.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:00:45.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:00:45.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:00:45.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:00:45.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.458769 -999.00  +26.60  23.09     15   -1.70 1 1 1 1 1   888    0 31.36 136.56 NA 26.6 23.1 295.8 38.5 31.6 -29.6 31.1 -25.0 30.4 -23.5 31.4 -26.6
2025-11-12T13:00:45.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:00:45.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:00:45.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.458769
2025-11-12T13:00:45.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:00:45.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:00:45.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:00:45.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:00:45.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:00:45.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:00:21', tmtdew=34.07, humidity=10.1, cloud=0.0, wind=30.44, temperature=26.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:00:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:00:45.916 [DEBUG] [Thread-16215] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:00:45.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:00:46.011 [DEBUG] [Thread-16218] [transport.py] [_log()] starting thread (client mode): 0x1737eec0
2025-11-12T13:00:46.011 [DEBUG] [Thread-16218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:00:46.025 [DEBUG] [Thread-16218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:00:46.026 [INFO] [Thread-16218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:00:46.033 [DEBUG] [Thread-16218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:00:46.033 [DEBUG] [Thread-16218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:00:46.033 [DEBUG] [Thread-16218] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:00:46.033 [DEBUG] [Thread-16218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:00:46.033 [DEBUG] [Thread-16218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] client lang: <none>
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] server lang: <none>
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] kex follows: False
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] Compression: none
2025-11-12T13:00:46.034 [DEBUG] [Thread-16218] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:00:46.092 [DEBUG] [Thread-16218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:00:46.093 [DEBUG] [Thread-16218] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:00:46.093 [DEBUG] [Thread-16218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:00:46.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:00:46.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:00:46.148 [DEBUG] [Thread-16218] [transport.py] [_log()] userauth is OK
2025-11-12T13:00:46.149 [DEBUG] [Thread-16218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:00:46.149 [DEBUG] [Thread-16218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:00:46.149 [DEBUG] [Thread-16218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:00:46.149 [DEBUG] [Thread-16218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:00:46.168 [INFO] [Thread-16218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:00:46.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:00:46.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:00:47.056 [DEBUG] [Thread-16218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:00:47.056 [DEBUG] [Thread-16218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:00:47.105 [DEBUG] [Thread-16218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:00:47.105 [DEBUG] [Thread-16218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:00:47.114 [DEBUG] [Thread-16218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:00:47.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:00:47.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:00:47.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-11-12T13:00:47.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:00:47.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:00:47.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:00:47.152 [DEBUG] [Thread-16218] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:00:54.662 [DEBUG] [Thread-16220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:01:09.710 [DEBUG] [Thread-16221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:01:15.410 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:01:15.411 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:01:17.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:01:17.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:01:17.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-11-12T13:01:17.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 0, 53), 34.66, 9.52, 0.0, 32.39, 27.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:01:17.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:00:53
2025-11-12T13:01:17.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:01:18.069 [DEBUG] [Thread-16222] [transport.py] [_log()] starting thread (client mode): 0x173e8220
2025-11-12T13:01:18.069 [DEBUG] [Thread-16222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:01:18.091 [DEBUG] [Thread-16222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:01:18.091 [INFO] [Thread-16222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:01:18.092 [DEBUG] [Thread-16222] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] client lang: <none>
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] server lang: <none>
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] kex follows: False
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:01:18.093 [DEBUG] [Thread-16222] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:01:18.094 [DEBUG] [Thread-16222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:01:18.094 [DEBUG] [Thread-16222] [transport.py] [_log()] Compression: none
2025-11-12T13:01:18.094 [DEBUG] [Thread-16222] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:01:18.105 [DEBUG] [Thread-16222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:01:18.106 [DEBUG] [Thread-16222] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:01:18.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:01:18.107 [DEBUG] [Thread-16222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:01:18.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:01:18.109 [DEBUG] [Thread-16222] [transport.py] [_log()] userauth is OK
2025-11-12T13:01:18.109 [DEBUG] [Thread-16222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:01:18.110 [DEBUG] [Thread-16222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:01:18.110 [DEBUG] [Thread-16222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:01:18.110 [DEBUG] [Thread-16222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:01:18.129 [INFO] [Thread-16222] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:01:18.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:01:18.704 [DEBUG] [Thread-16222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:01:18.704 [DEBUG] [Thread-16222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:01:18.705 [DEBUG] [Thread-16222] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:01:18.745 [DEBUG] [Thread-16222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:01:18.746 [DEBUG] [Thread-16222] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:01:18.748 [DEBUG] [Thread-16222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:01:18.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:01:18.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:01:18.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:01:18.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:01:18.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:01:18.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:01:18.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:01:18.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:01:18.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:01:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.459116 -999.00  +26.50  29.56     15   -2.20 1 1 1 1 1   888    0 31.19 136.90 ----- 24.7 29.6 270.4 36.5 31.7 -27.1 31.1 -25.8 30.4 -28.0 31.4 -25.4
2025-11-12T13:01:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:01:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:01:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.459116
2025-11-12T13:01:18.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:01:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:01:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:01:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:01:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:01:18.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:00:53', tmtdew=34.66, humidity=9.52, cloud=0.0, wind=32.39, temperature=27.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:01:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:01:18.779 [DEBUG] [Thread-16222] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:01:18.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:01:18.874 [DEBUG] [Thread-16225] [transport.py] [_log()] starting thread (client mode): 0x17363b20
2025-11-12T13:01:18.874 [DEBUG] [Thread-16225] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:01:18.888 [DEBUG] [Thread-16225] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:01:18.889 [INFO] [Thread-16225] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:01:18.896 [DEBUG] [Thread-16225] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] client lang: <none>
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] server lang: <none>
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] kex follows: False
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] Compression: none
2025-11-12T13:01:18.897 [DEBUG] [Thread-16225] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:01:18.956 [DEBUG] [Thread-16225] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:01:18.957 [DEBUG] [Thread-16225] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:01:18.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:01:18.958 [DEBUG] [Thread-16225] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:01:18.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:01:19.012 [DEBUG] [Thread-16225] [transport.py] [_log()] userauth is OK
2025-11-12T13:01:19.012 [DEBUG] [Thread-16225] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:01:19.012 [DEBUG] [Thread-16225] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:01:19.013 [DEBUG] [Thread-16225] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:01:19.013 [DEBUG] [Thread-16225] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:01:19.032 [INFO] [Thread-16225] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:01:19.032 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:01:19.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:01:19.901 [DEBUG] [Thread-16225] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:01:19.901 [DEBUG] [Thread-16225] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:01:19.950 [DEBUG] [Thread-16225] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:01:19.950 [DEBUG] [Thread-16225] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:01:19.959 [DEBUG] [Thread-16225] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:01:19.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:01:19.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-11-12T13:01:19.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-11-12T13:01:19.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:01:19.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:01:19.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:01:19.996 [DEBUG] [Thread-16225] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:01:24.745 [DEBUG] [Thread-16227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:01:33.109 [DEBUG] [Thread-16228 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:01:39.798 [DEBUG] [Thread-16229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:01:50.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:01:50.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:01:50.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-11-12T13:01:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 1, 25), 34.83, 9.42, 0.0, 30.44, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:01:50.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:01:25
2025-11-12T13:01:50.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:01:50.928 [DEBUG] [Thread-16230] [transport.py] [_log()] starting thread (client mode): 0x14921300
2025-11-12T13:01:50.929 [DEBUG] [Thread-16230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:01:50.951 [DEBUG] [Thread-16230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:01:50.951 [INFO] [Thread-16230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:01:50.954 [DEBUG] [Thread-16230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] client lang: <none>
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] server lang: <none>
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] kex follows: False
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] Compression: none
2025-11-12T13:01:50.955 [DEBUG] [Thread-16230] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:01:50.970 [DEBUG] [Thread-16230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:01:50.971 [DEBUG] [Thread-16230] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:01:50.971 [DEBUG] [Thread-16230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:01:50.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:01:50.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:01:50.973 [DEBUG] [Thread-16230] [transport.py] [_log()] userauth is OK
2025-11-12T13:01:50.974 [DEBUG] [Thread-16230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:01:50.974 [DEBUG] [Thread-16230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:01:50.974 [DEBUG] [Thread-16230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:01:50.974 [DEBUG] [Thread-16230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:01:50.998 [INFO] [Thread-16230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:01:50.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:01:51.638 [DEBUG] [Thread-16230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:01:51.648 [DEBUG] [Thread-16230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:01:51.648 [DEBUG] [Thread-16230] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:01:51.680 [DEBUG] [Thread-16230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:01:51.680 [DEBUG] [Thread-16230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:01:51.684 [DEBUG] [Thread-16230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:01:51.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:01:51.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:01:51.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:01:51.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:01:51.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:01:51.708 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:01:51.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:01:51.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:01:51.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:01:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.459463 -999.00  +26.40  16.93     15   -2.10 1 1 1 1 1   888    0 31.88 140.50 ----- 17.8 16.9 284.8 28.5 31.7 -27.4 31.2 -25.6 30.6 -26.3 31.6 -25.7
2025-11-12T13:01:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:01:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:01:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.459463
2025-11-12T13:01:51.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:01:51.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:01:51.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:01:51.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:01:51.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:01:51.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:01:25', tmtdew=34.83, humidity=9.42, cloud=0.0, wind=30.44, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:01:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:01:51.712 [DEBUG] [Thread-16230] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:01:51.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:01:51.806 [DEBUG] [Thread-16233] [transport.py] [_log()] starting thread (client mode): 0x149236d0
2025-11-12T13:01:51.806 [DEBUG] [Thread-16233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:01:51.821 [DEBUG] [Thread-16233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:01:51.821 [INFO] [Thread-16233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] client lang: <none>
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] server lang: <none>
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] kex follows: False
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:01:51.829 [DEBUG] [Thread-16233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:01:51.830 [DEBUG] [Thread-16233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:01:51.830 [DEBUG] [Thread-16233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:01:51.830 [DEBUG] [Thread-16233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:01:51.830 [DEBUG] [Thread-16233] [transport.py] [_log()] Compression: none
2025-11-12T13:01:51.830 [DEBUG] [Thread-16233] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:01:51.888 [DEBUG] [Thread-16233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:01:51.889 [DEBUG] [Thread-16233] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:01:51.889 [DEBUG] [Thread-16233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:01:51.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:01:51.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:01:51.944 [DEBUG] [Thread-16233] [transport.py] [_log()] userauth is OK
2025-11-12T13:01:51.945 [DEBUG] [Thread-16233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:01:51.945 [DEBUG] [Thread-16233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:01:51.945 [DEBUG] [Thread-16233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:01:51.945 [DEBUG] [Thread-16233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:01:51.968 [INFO] [Thread-16233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:01:51.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:01:51.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:01:52.825 [DEBUG] [Thread-16233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:01:52.826 [DEBUG] [Thread-16233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:01:52.873 [DEBUG] [Thread-16233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:01:52.873 [DEBUG] [Thread-16233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:01:52.882 [DEBUG] [Thread-16233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:01:52.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:01:52.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-11-12T13:01:52.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-11-12T13:01:52.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:01:52.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:01:52.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:01:52.917 [DEBUG] [Thread-16233] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:01:54.831 [DEBUG] [Thread-16235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:02:09.888 [DEBUG] [Thread-16236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:02:15.553 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:02:15.554 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:02:22.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:02:22.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:02:22.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-11-12T13:02:23.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 1, 57), 35.02, 9.42, 0.0, 19.62, 27.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:02:23.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:01:57
2025-11-12T13:02:23.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:02:23.899 [DEBUG] [Thread-16237] [transport.py] [_log()] starting thread (client mode): 0x149227d0
2025-11-12T13:02:23.899 [DEBUG] [Thread-16237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:02:23.920 [DEBUG] [Thread-16237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:02:23.920 [INFO] [Thread-16237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:02:23.921 [DEBUG] [Thread-16237] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:02:23.921 [DEBUG] [Thread-16237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] client lang: <none>
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] server lang: <none>
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] kex follows: False
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] Compression: none
2025-11-12T13:02:23.922 [DEBUG] [Thread-16237] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:02:23.932 [DEBUG] [Thread-16237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:02:23.932 [DEBUG] [Thread-16237] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:02:23.933 [DEBUG] [Thread-16237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:02:23.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:02:23.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:02:23.934 [DEBUG] [Thread-16237] [transport.py] [_log()] userauth is OK
2025-11-12T13:02:23.934 [DEBUG] [Thread-16237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:02:23.934 [DEBUG] [Thread-16237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:02:23.934 [DEBUG] [Thread-16237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:02:23.934 [DEBUG] [Thread-16237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:02:23.944 [INFO] [Thread-16237] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:02:23.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:02:24.518 [DEBUG] [Thread-16237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:02:24.518 [DEBUG] [Thread-16237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:02:24.518 [DEBUG] [Thread-16237] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:02:24.559 [DEBUG] [Thread-16237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:02:24.559 [DEBUG] [Thread-16237] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:02:24.561 [DEBUG] [Thread-16237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:02:24.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:02:24.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:02:24.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:02:24.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:02:24.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:02:24.580 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:02:24.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:02:24.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:02:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:02:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.459811 -999.00  +26.30  26.12     15   -2.20 1 1 1 1 1   888    0 31.68 143.67 ----- 28.2 26.1 276.6 29.8 31.8 -27.9 31.2 -25.9 30.6 -26.7 31.6 -26.4
2025-11-12T13:02:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:02:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:02:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.459811
2025-11-12T13:02:24.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:02:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:02:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:02:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:02:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:02:24.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:01:57', tmtdew=35.02, humidity=9.42, cloud=0.0, wind=19.62, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:02:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:02:24.581 [DEBUG] [Thread-16237] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:02:24.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:02:24.668 [DEBUG] [Thread-16240] [transport.py] [_log()] starting thread (client mode): 0x173f90c0
2025-11-12T13:02:24.669 [DEBUG] [Thread-16240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:02:24.683 [DEBUG] [Thread-16240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:02:24.683 [INFO] [Thread-16240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] client lang: <none>
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] server lang: <none>
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] kex follows: False
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:02:24.690 [DEBUG] [Thread-16240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:02:24.691 [DEBUG] [Thread-16240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:02:24.691 [DEBUG] [Thread-16240] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:02:24.691 [DEBUG] [Thread-16240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:02:24.691 [DEBUG] [Thread-16240] [transport.py] [_log()] Compression: none
2025-11-12T13:02:24.691 [DEBUG] [Thread-16240] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:02:24.747 [DEBUG] [Thread-16240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:02:24.748 [DEBUG] [Thread-16240] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:02:24.748 [DEBUG] [Thread-16240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:02:24.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:02:24.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:02:24.803 [DEBUG] [Thread-16240] [transport.py] [_log()] userauth is OK
2025-11-12T13:02:24.803 [DEBUG] [Thread-16240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:02:24.804 [DEBUG] [Thread-16240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:02:24.804 [DEBUG] [Thread-16240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:02:24.804 [DEBUG] [Thread-16240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:02:24.817 [INFO] [Thread-16240] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:02:24.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:02:24.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:02:24.920 [DEBUG] [Thread-16242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:02:25.669 [DEBUG] [Thread-16240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:02:25.669 [DEBUG] [Thread-16240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:02:25.718 [DEBUG] [Thread-16240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:02:25.718 [DEBUG] [Thread-16240] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:02:25.727 [DEBUG] [Thread-16240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:02:25.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:02: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')
2025-11-12T13:02:25.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-11-12T13:02:25.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:02:25.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:02:25.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:02:25.759 [DEBUG] [Thread-16240] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:02:33.142 [DEBUG] [Thread-16243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:02:39.962 [DEBUG] [Thread-16244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:02:55.003 [DEBUG] [Thread-16245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:02:55.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:02:55.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:02:55.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:02:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 2, 29), 34.7, 9.58, 0.0, 20.01, 26.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:02:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:02:29
2025-11-12T13:02:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:02:56.694 [DEBUG] [Thread-16246] [transport.py] [_log()] starting thread (client mode): 0x14922d70
2025-11-12T13:02:56.694 [DEBUG] [Thread-16246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:02:56.715 [DEBUG] [Thread-16246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:02:56.715 [INFO] [Thread-16246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:02:56.716 [DEBUG] [Thread-16246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:02:56.716 [DEBUG] [Thread-16246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:02:56.716 [DEBUG] [Thread-16246] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:02:56.716 [DEBUG] [Thread-16246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:02:56.716 [DEBUG] [Thread-16246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:02:56.716 [DEBUG] [Thread-16246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:02:56.716 [DEBUG] [Thread-16246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:02:56.716 [DEBUG] [Thread-16246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] client lang: <none>
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] server lang: <none>
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] kex follows: False
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] Compression: none
2025-11-12T13:02:56.717 [DEBUG] [Thread-16246] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:02:56.727 [DEBUG] [Thread-16246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:02:56.727 [DEBUG] [Thread-16246] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:02:56.728 [DEBUG] [Thread-16246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:02:56.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:02:56.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:02:56.729 [DEBUG] [Thread-16246] [transport.py] [_log()] userauth is OK
2025-11-12T13:02:56.730 [DEBUG] [Thread-16246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:02:56.730 [DEBUG] [Thread-16246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:02:56.730 [DEBUG] [Thread-16246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:02:56.730 [DEBUG] [Thread-16246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:02:56.747 [INFO] [Thread-16246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:02:56.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:02:57.337 [DEBUG] [Thread-16246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:02:57.337 [DEBUG] [Thread-16246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:02:57.337 [DEBUG] [Thread-16246] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:02:57.378 [DEBUG] [Thread-16246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:02:57.378 [DEBUG] [Thread-16246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:02:57.380 [DEBUG] [Thread-16246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:02:57.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:02:57.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:02:57.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:02:57.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:02:57.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:02:57.398 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:02:57.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:02:57.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:02:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:02:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.460158 -999.00  +26.80  21.69     14   -2.10 1 1 1 1 1   888    0 31.59 153.02 ----- 16.5 21.7 274.6 32.2 31.9 -27.6 31.3 -24.7 30.8 -24.5 31.7 -26.2
2025-11-12T13:02:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:02:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:02:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.460158
2025-11-12T13:02:57.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:02:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:02:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:02:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:02:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:02:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:02:29', tmtdew=34.7, humidity=9.58, cloud=0.0, wind=20.01, temperature=26.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:02:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:02:57.401 [DEBUG] [Thread-16246] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:02:57.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:02:57.498 [DEBUG] [Thread-16249] [transport.py] [_log()] starting thread (client mode): 0x17362ef0
2025-11-12T13:02:57.498 [DEBUG] [Thread-16249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:02:57.514 [DEBUG] [Thread-16249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:02:57.514 [INFO] [Thread-16249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:02:57.521 [DEBUG] [Thread-16249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] client lang: <none>
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] server lang: <none>
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] kex follows: False
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:02:57.522 [DEBUG] [Thread-16249] [transport.py] [_log()] Compression: none
2025-11-12T13:02:57.523 [DEBUG] [Thread-16249] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:02:57.580 [DEBUG] [Thread-16249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:02:57.580 [DEBUG] [Thread-16249] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:02:57.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:02:57.581 [DEBUG] [Thread-16249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:02:57.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:02:57.636 [DEBUG] [Thread-16249] [transport.py] [_log()] userauth is OK
2025-11-12T13:02:57.636 [DEBUG] [Thread-16249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:02:57.637 [DEBUG] [Thread-16249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:02:57.637 [DEBUG] [Thread-16249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:02:57.637 [DEBUG] [Thread-16249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:02:57.657 [INFO] [Thread-16249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:02:57.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:02:57.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:02:58.511 [DEBUG] [Thread-16249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:02:58.512 [DEBUG] [Thread-16249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:02:58.559 [DEBUG] [Thread-16249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:02:58.559 [DEBUG] [Thread-16249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:02:58.567 [DEBUG] [Thread-16249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:02:58.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:02:58.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-11-12T13:02:58.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-11-12T13:02:58.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:02:58.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:02:58.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:02:58.599 [DEBUG] [Thread-16249] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:03:10.037 [DEBUG] [Thread-16251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:03:15.697 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:03:15.698 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:03:25.102 [DEBUG] [Thread-16252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:03:28.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:03:28.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:03:28.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-11-12T13:03:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 3, 1), 35.05, 9.57, 0.0, 29.57, 26.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:03:29.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:03:01
2025-11-12T13:03:29.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:03:29.497 [DEBUG] [Thread-16253] [transport.py] [_log()] starting thread (client mode): 0x14923fa0
2025-11-12T13:03:29.497 [DEBUG] [Thread-16253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:03:29.517 [DEBUG] [Thread-16253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:03:29.517 [INFO] [Thread-16253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:03:29.518 [DEBUG] [Thread-16253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] client lang: <none>
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] server lang: <none>
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] kex follows: False
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:03:29.519 [DEBUG] [Thread-16253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:03:29.520 [DEBUG] [Thread-16253] [transport.py] [_log()] Compression: none
2025-11-12T13:03:29.520 [DEBUG] [Thread-16253] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:03:29.529 [DEBUG] [Thread-16253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:03:29.530 [DEBUG] [Thread-16253] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:03:29.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:03:29.531 [DEBUG] [Thread-16253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:03:29.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:03:29.533 [DEBUG] [Thread-16253] [transport.py] [_log()] userauth is OK
2025-11-12T13:03:29.533 [DEBUG] [Thread-16253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:03:29.533 [DEBUG] [Thread-16253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:03:29.533 [DEBUG] [Thread-16253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:03:29.533 [DEBUG] [Thread-16253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:03:29.548 [INFO] [Thread-16253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:03:29.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:03:30.155 [DEBUG] [Thread-16253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:03:30.156 [DEBUG] [Thread-16253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:03:30.156 [DEBUG] [Thread-16253] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:03:30.196 [DEBUG] [Thread-16253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:03:30.197 [DEBUG] [Thread-16253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:03:30.200 [DEBUG] [Thread-16253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:03:30.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:03:30.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:03:30.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:03:30.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:03:30.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:03:30.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:03:30.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:03:30.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:03:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:03:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.460505 -999.00  +27.30  27.04     14   -2.10 1 1 1 1 1   888    0 31.69 145.19 ----- 26.6 27.0 265.8 32.5 32.0 -26.7 31.4 -25.8 31.0 -24.3 31.8 -26.7
2025-11-12T13:03:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:03:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:03:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.460505
2025-11-12T13:03:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:03:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:03:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:03:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:03:30.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:03:30.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:03:01', tmtdew=35.05, humidity=9.57, cloud=0.0, wind=29.57, temperature=26.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:03:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:03:30.228 [DEBUG] [Thread-16253] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:03:30.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:03:30.335 [DEBUG] [Thread-16256] [transport.py] [_log()] starting thread (client mode): 0x1493c580
2025-11-12T13:03:30.335 [DEBUG] [Thread-16256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:03:30.350 [DEBUG] [Thread-16256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:03:30.350 [INFO] [Thread-16256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:03:30.357 [DEBUG] [Thread-16256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] client lang: <none>
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] server lang: <none>
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] kex follows: False
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:03:30.358 [DEBUG] [Thread-16256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:03:30.359 [DEBUG] [Thread-16256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:03:30.359 [DEBUG] [Thread-16256] [transport.py] [_log()] Compression: none
2025-11-12T13:03:30.359 [DEBUG] [Thread-16256] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:03:30.417 [DEBUG] [Thread-16256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:03:30.417 [DEBUG] [Thread-16256] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:03:30.418 [DEBUG] [Thread-16256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:03:30.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:03:30.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:03:30.473 [DEBUG] [Thread-16256] [transport.py] [_log()] userauth is OK
2025-11-12T13:03:30.474 [DEBUG] [Thread-16256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:03:30.474 [DEBUG] [Thread-16256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:03:30.474 [DEBUG] [Thread-16256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:03:30.474 [DEBUG] [Thread-16256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:03:30.493 [INFO] [Thread-16256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:03:30.494 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:03:30.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:03:31.372 [DEBUG] [Thread-16256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:03:31.373 [DEBUG] [Thread-16256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:03:31.420 [DEBUG] [Thread-16256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:03:31.421 [DEBUG] [Thread-16256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:03:31.430 [DEBUG] [Thread-16256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:03:31.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:03:31.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-11-12T13:03:31.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:03:31.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:03:31.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:03:31.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:03:31.467 [DEBUG] [Thread-16256] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:03:33.176 [DEBUG] [Thread-16258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:03:40.134 [DEBUG] [Thread-16259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:03:55.178 [DEBUG] [Thread-16260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:04:01.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:04:01.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:04:01.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-11-12T13:04:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 3, 33), 36.5, 8.57, 0.0, 30.17, 28.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:04:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:03:33
2025-11-12T13:04:02.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:04:02.382 [DEBUG] [Thread-16261] [transport.py] [_log()] starting thread (client mode): 0x149208b0
2025-11-12T13:04:02.382 [DEBUG] [Thread-16261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:04:02.404 [DEBUG] [Thread-16261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:04:02.405 [INFO] [Thread-16261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:04:02.407 [DEBUG] [Thread-16261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] client lang: <none>
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] server lang: <none>
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] kex follows: False
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] Compression: none
2025-11-12T13:04:02.408 [DEBUG] [Thread-16261] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:04:02.424 [DEBUG] [Thread-16261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:04:02.425 [DEBUG] [Thread-16261] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:04:02.425 [DEBUG] [Thread-16261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:04:02.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:04:02.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:04:02.427 [DEBUG] [Thread-16261] [transport.py] [_log()] userauth is OK
2025-11-12T13:04:02.427 [DEBUG] [Thread-16261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:04:02.428 [DEBUG] [Thread-16261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:04:02.428 [DEBUG] [Thread-16261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:04:02.428 [DEBUG] [Thread-16261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:04:02.452 [INFO] [Thread-16261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:04:02.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:04:03.209 [DEBUG] [Thread-16261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:04:03.210 [DEBUG] [Thread-16261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:04:03.210 [DEBUG] [Thread-16261] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:04:03.250 [DEBUG] [Thread-16261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:04:03.251 [DEBUG] [Thread-16261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:04:03.253 [DEBUG] [Thread-16261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:04:03.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:04:03.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:04:03.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:04:03.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:04:03.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:04:03.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:04:03.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:04:03.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:04:03.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:04:03.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.460852 -999.00  +26.60  32.70     14   -2.10 1 1 2 1 1   888    0 31.76 155.47 ----- 30.7 32.7 275.4 36.1 32.0 -27.3 31.3 -27.1 30.9 -29.4 31.7 -26.6
2025-11-12T13:04:03.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:04:03.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:04:03.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.460852
2025-11-12T13:04:03.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:04:03.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:04:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:04:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:04:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:04:03.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:03:33', tmtdew=36.5, humidity=8.57, cloud=0.0, wind=30.17, temperature=28.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:03:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:04:03.282 [DEBUG] [Thread-16261] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:04:03.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:04:03.377 [DEBUG] [Thread-16264] [transport.py] [_log()] starting thread (client mode): 0x14983280
2025-11-12T13:04:03.378 [DEBUG] [Thread-16264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:04:03.392 [DEBUG] [Thread-16264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:04:03.392 [INFO] [Thread-16264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] client lang: <none>
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] server lang: <none>
2025-11-12T13:04:03.400 [DEBUG] [Thread-16264] [transport.py] [_log()] kex follows: False
2025-11-12T13:04:03.401 [DEBUG] [Thread-16264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:04:03.401 [DEBUG] [Thread-16264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:04:03.401 [DEBUG] [Thread-16264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:04:03.401 [DEBUG] [Thread-16264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:04:03.401 [DEBUG] [Thread-16264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:04:03.401 [DEBUG] [Thread-16264] [transport.py] [_log()] Compression: none
2025-11-12T13:04:03.401 [DEBUG] [Thread-16264] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:04:03.461 [DEBUG] [Thread-16264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:04:03.462 [DEBUG] [Thread-16264] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:04:03.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:04:03.463 [DEBUG] [Thread-16264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:04:03.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:04:03.521 [DEBUG] [Thread-16264] [transport.py] [_log()] userauth is OK
2025-11-12T13:04:03.521 [DEBUG] [Thread-16264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:04:03.521 [DEBUG] [Thread-16264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:04:03.521 [DEBUG] [Thread-16264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:04:03.522 [DEBUG] [Thread-16264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:04:03.540 [INFO] [Thread-16264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:04:03.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:04:03.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:04:04.444 [DEBUG] [Thread-16264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:04:04.445 [DEBUG] [Thread-16264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:04:04.493 [DEBUG] [Thread-16264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:04:04.493 [DEBUG] [Thread-16264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:04:04.502 [DEBUG] [Thread-16264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:04:04.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:04:04.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:04:04.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-11-12T13:04:04.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:04:04.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:04:04.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:04:04.538 [DEBUG] [Thread-16264] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:04:10.215 [DEBUG] [Thread-16266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:04:15.838 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:04:15.839 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:04:25.264 [DEBUG] [Thread-16267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:04:33.210 [DEBUG] [Thread-16268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:04:34.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:04:34.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:04:34.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-11-12T13:04:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 4, 5), 34.97, 9.34, 0.0, 31.14, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:04:35.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:04:05
2025-11-12T13:04:35.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:04:35.440 [DEBUG] [Thread-16269] [transport.py] [_log()] starting thread (client mode): 0x149829e0
2025-11-12T13:04:35.441 [DEBUG] [Thread-16269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:04:35.461 [DEBUG] [Thread-16269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:04:35.461 [INFO] [Thread-16269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] client lang: <none>
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] server lang: <none>
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] kex follows: False
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:04:35.464 [DEBUG] [Thread-16269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:04:35.465 [DEBUG] [Thread-16269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:04:35.465 [DEBUG] [Thread-16269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:04:35.465 [DEBUG] [Thread-16269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:04:35.465 [DEBUG] [Thread-16269] [transport.py] [_log()] Compression: none
2025-11-12T13:04:35.465 [DEBUG] [Thread-16269] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:04:35.473 [DEBUG] [Thread-16269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:04:35.473 [DEBUG] [Thread-16269] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:04:35.474 [DEBUG] [Thread-16269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:04:35.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:04:35.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:04:35.475 [DEBUG] [Thread-16269] [transport.py] [_log()] userauth is OK
2025-11-12T13:04:35.475 [DEBUG] [Thread-16269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:04:35.475 [DEBUG] [Thread-16269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:04:35.476 [DEBUG] [Thread-16269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:04:35.476 [DEBUG] [Thread-16269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:04:35.493 [INFO] [Thread-16269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:04:35.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:04:36.042 [DEBUG] [Thread-16269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:04:36.042 [DEBUG] [Thread-16269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:04:36.043 [DEBUG] [Thread-16269] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:04:36.083 [DEBUG] [Thread-16269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:04:36.084 [DEBUG] [Thread-16269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:04:36.087 [DEBUG] [Thread-16269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:04:36.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:04:36.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:04:36.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:04:36.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:04:36.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:04:36.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:04:36.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:04:36.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:04:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:04:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.460852 -999.00  +26.60  32.70     14   -2.10 1 1 2 1 1   888    0 31.76 155.47 ----- 30.7 32.7 275.4 36.1 32.0 -27.3 31.3 -27.1 30.9 -29.4 31.7 -26.6
2025-11-12T13:04:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:04:36.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:04:36.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.460852
2025-11-12T13:04:36.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:04:36.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:04:36.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:04:36.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:04:36.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:04:36.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:04:05', tmtdew=34.97, humidity=9.34, cloud=0.0, wind=31.14, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:03:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:04:36.114 [DEBUG] [Thread-16269] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:04:36.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:04:36.210 [DEBUG] [Thread-16272] [transport.py] [_log()] starting thread (client mode): 0x14922110
2025-11-12T13:04:36.210 [DEBUG] [Thread-16272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:04:36.225 [DEBUG] [Thread-16272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:04:36.225 [INFO] [Thread-16272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] client lang: <none>
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] server lang: <none>
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] kex follows: False
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:04:36.233 [DEBUG] [Thread-16272] [transport.py] [_log()] Compression: none
2025-11-12T13:04:36.234 [DEBUG] [Thread-16272] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:04:36.293 [DEBUG] [Thread-16272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:04:36.293 [DEBUG] [Thread-16272] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:04:36.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:04:36.295 [DEBUG] [Thread-16272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:04:36.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:04:36.348 [DEBUG] [Thread-16272] [transport.py] [_log()] userauth is OK
2025-11-12T13:04:36.348 [DEBUG] [Thread-16272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:04:36.348 [DEBUG] [Thread-16272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:04:36.348 [DEBUG] [Thread-16272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:04:36.349 [DEBUG] [Thread-16272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:04:36.368 [INFO] [Thread-16272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:04:36.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:04:36.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:04:37.237 [DEBUG] [Thread-16272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:04:37.237 [DEBUG] [Thread-16272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:04:37.285 [DEBUG] [Thread-16272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:04:37.286 [DEBUG] [Thread-16272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:04:37.295 [DEBUG] [Thread-16272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:04:37.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:04:37.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-11-12T13:04:37.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:04:37.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:04:37.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:04:37.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:04:37.331 [DEBUG] [Thread-16272] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:04:40.297 [DEBUG] [Thread-16274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:04:55.360 [DEBUG] [Thread-16275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:05:07.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:05:07.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:05:07.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-11-12T13:05:07.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 4, 37), 34.83, 9.37, 0.0, 29.25, 26.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:05:07.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:04:37
2025-11-12T13:05:08.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:05:08.244 [DEBUG] [Thread-16276] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T13:05:08.244 [DEBUG] [Thread-16276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:05:08.265 [DEBUG] [Thread-16276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:05:08.265 [INFO] [Thread-16276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:05:08.268 [DEBUG] [Thread-16276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:05:08.268 [DEBUG] [Thread-16276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:05:08.268 [DEBUG] [Thread-16276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] client lang: <none>
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] server lang: <none>
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] kex follows: False
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:05:08.269 [DEBUG] [Thread-16276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:05:08.270 [DEBUG] [Thread-16276] [transport.py] [_log()] Compression: none
2025-11-12T13:05:08.270 [DEBUG] [Thread-16276] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:05:08.288 [DEBUG] [Thread-16276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:05:08.289 [DEBUG] [Thread-16276] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:05:08.290 [DEBUG] [Thread-16276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:05:08.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:05:08.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:05:08.292 [DEBUG] [Thread-16276] [transport.py] [_log()] userauth is OK
2025-11-12T13:05:08.293 [DEBUG] [Thread-16276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:05:08.293 [DEBUG] [Thread-16276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:05:08.293 [DEBUG] [Thread-16276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:05:08.293 [DEBUG] [Thread-16276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:05:08.306 [INFO] [Thread-16276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:05:08.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:05:10.389 [DEBUG] [Thread-16278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:05:10.707 [DEBUG] [Thread-16276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:05:10.707 [DEBUG] [Thread-16276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:05:10.707 [DEBUG] [Thread-16276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:05:10.748 [DEBUG] [Thread-16276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:05:10.748 [DEBUG] [Thread-16276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:05:10.749 [DEBUG] [Thread-16276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:05:10.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:05:10.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:05:10.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:05:10.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:05:10.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:05:10.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:05:10.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.461894 -999.00  +26.70  19.61     15   -1.70 1 1 1 1 1   888    0 31.52 135.33 ----- 15.8 19.6 284.2 30.6 32.0 -27.2 31.4 -24.9 31.0 -24.5 31.7 -26.3
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.461894
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:05:10.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:04:37', tmtdew=34.83, humidity=9.37, cloud=0.0, wind=29.25, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:05:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:05:10.768 [DEBUG] [Thread-16276] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:05:10.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:05:10.853 [DEBUG] [Thread-16280] [transport.py] [_log()] starting thread (client mode): 0x19dda9e0
2025-11-12T13:05:10.853 [DEBUG] [Thread-16280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:05:10.868 [DEBUG] [Thread-16280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:05:10.869 [INFO] [Thread-16280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] client lang: <none>
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] server lang: <none>
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] kex follows: False
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] Compression: none
2025-11-12T13:05:10.877 [DEBUG] [Thread-16280] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:05:10.935 [DEBUG] [Thread-16280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:05:10.936 [DEBUG] [Thread-16280] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:05:10.936 [DEBUG] [Thread-16280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:05:10.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:05:10.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:05:10.992 [DEBUG] [Thread-16280] [transport.py] [_log()] userauth is OK
2025-11-12T13:05:10.992 [DEBUG] [Thread-16280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:05:10.992 [DEBUG] [Thread-16280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:05:10.992 [DEBUG] [Thread-16280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:05:10.992 [DEBUG] [Thread-16280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:05:11.009 [INFO] [Thread-16280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:05:11.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:05:11.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:05:11.866 [DEBUG] [Thread-16280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:05:11.866 [DEBUG] [Thread-16280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:05:11.914 [DEBUG] [Thread-16280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:05:11.914 [DEBUG] [Thread-16280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:05:11.922 [DEBUG] [Thread-16280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:05:11.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:05: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')
2025-11-12T13:05:11.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-11-12T13:05:11.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:05:11.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:05:11.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:05:11.957 [DEBUG] [Thread-16280] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:05:15.980 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:05:15.981 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:05:25.424 [DEBUG] [Thread-16282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:05:33.255 [DEBUG] [Thread-16283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:05:40.477 [DEBUG] [Thread-16284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:05:41.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:05:41.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:05:41.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-11-12T13:05:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 5, 9), 34.42, 9.62, 0.0, 28.51, 26.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:05:42.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:05:09
2025-11-12T13:05:42.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:05:42.930 [DEBUG] [Thread-16285] [transport.py] [_log()] starting thread (client mode): 0x19dd96c0
2025-11-12T13:05:42.930 [DEBUG] [Thread-16285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:05:42.950 [DEBUG] [Thread-16285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:05:42.950 [INFO] [Thread-16285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] client lang: <none>
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] server lang: <none>
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] kex follows: False
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:05:42.953 [DEBUG] [Thread-16285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:05:42.954 [DEBUG] [Thread-16285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:05:42.954 [DEBUG] [Thread-16285] [transport.py] [_log()] Compression: none
2025-11-12T13:05:42.954 [DEBUG] [Thread-16285] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:05:42.967 [DEBUG] [Thread-16285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:05:42.967 [DEBUG] [Thread-16285] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:05:42.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:05:42.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:05:42.968 [DEBUG] [Thread-16285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:05:42.968 [DEBUG] [Thread-16285] [transport.py] [_log()] userauth is OK
2025-11-12T13:05:42.968 [DEBUG] [Thread-16285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:05:42.969 [DEBUG] [Thread-16285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:05:42.969 [DEBUG] [Thread-16285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:05:42.969 [DEBUG] [Thread-16285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:05:42.978 [INFO] [Thread-16285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:05:42.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:05:43.582 [DEBUG] [Thread-16285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:05:43.582 [DEBUG] [Thread-16285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:05:43.582 [DEBUG] [Thread-16285] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:05:43.623 [DEBUG] [Thread-16285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:05:43.623 [DEBUG] [Thread-16285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:05:43.625 [DEBUG] [Thread-16285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:05:43.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:05:43.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:05:43.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:05:43.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:05:43.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:05:43.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:05:43.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:05:43.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:05:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:05:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.461894 -999.00  +26.70  19.61     15   -1.70 1 1 1 1 1   888    0 31.52 135.33 ----- 15.8 19.6 284.2 30.6 32.0 -27.2 31.4 -24.9 31.0 -24.5 31.7 -26.3
2025-11-12T13:05:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:05:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:05:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.461894
2025-11-12T13:05:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:05:43.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:05:43.642 [DEBUG] [Thread-16285] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:05:43.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:05:43.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:05:43.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:05:43.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:05:09', tmtdew=34.42, humidity=9.62, cloud=0.0, wind=28.51, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:05:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:05:43.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:05:43.733 [DEBUG] [Thread-16288] [transport.py] [_log()] starting thread (client mode): 0x1493e950
2025-11-12T13:05:43.733 [DEBUG] [Thread-16288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:05:43.749 [DEBUG] [Thread-16288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:05:43.749 [INFO] [Thread-16288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] client lang: <none>
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] server lang: <none>
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] kex follows: False
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:05:43.757 [DEBUG] [Thread-16288] [transport.py] [_log()] Compression: none
2025-11-12T13:05:43.758 [DEBUG] [Thread-16288] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:05:43.815 [DEBUG] [Thread-16288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:05:43.815 [DEBUG] [Thread-16288] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:05:43.815 [DEBUG] [Thread-16288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:05:43.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:05:43.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:05:43.872 [DEBUG] [Thread-16288] [transport.py] [_log()] userauth is OK
2025-11-12T13:05:43.872 [DEBUG] [Thread-16288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:05:43.872 [DEBUG] [Thread-16288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:05:43.872 [DEBUG] [Thread-16288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:05:43.872 [DEBUG] [Thread-16288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:05:43.890 [INFO] [Thread-16288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:05:43.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:05:43.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:05:44.740 [DEBUG] [Thread-16288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:05:44.740 [DEBUG] [Thread-16288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:05:44.788 [DEBUG] [Thread-16288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:05:44.788 [DEBUG] [Thread-16288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:05:44.797 [DEBUG] [Thread-16288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:05:44.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:05:44.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-11-12T13:05: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') -> 00000000
2025-11-12T13:05:44.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:05:44.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:05:44.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:05:44.835 [DEBUG] [Thread-16288] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:05:55.513 [DEBUG] [Thread-16290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:06:10.563 [DEBUG] [Thread-16291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:06:14.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:06:14.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:06:14.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-11-12T13:06:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 5, 41), 34.5, 9.52, 0.0, 24.42, 26.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:06:15.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:05:41
2025-11-12T13:06:15.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:06:15.863 [DEBUG] [Thread-16292] [transport.py] [_log()] starting thread (client mode): 0x14980340
2025-11-12T13:06:15.864 [DEBUG] [Thread-16292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:06:15.883 [DEBUG] [Thread-16292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:06:15.883 [INFO] [Thread-16292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:06:15.886 [DEBUG] [Thread-16292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] client lang: <none>
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] server lang: <none>
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] kex follows: False
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] Compression: none
2025-11-12T13:06:15.887 [DEBUG] [Thread-16292] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:06:15.902 [DEBUG] [Thread-16292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:06:15.902 [DEBUG] [Thread-16292] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:06:15.903 [DEBUG] [Thread-16292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:06:15.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:06:15.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:06:15.904 [DEBUG] [Thread-16292] [transport.py] [_log()] userauth is OK
2025-11-12T13:06:15.904 [DEBUG] [Thread-16292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:06:15.904 [DEBUG] [Thread-16292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:06:15.904 [DEBUG] [Thread-16292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:06:15.904 [DEBUG] [Thread-16292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:06:15.920 [INFO] [Thread-16292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:06:15.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:06:16.124 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:06:16.125 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:06:16.672 [DEBUG] [Thread-16292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:06:16.672 [DEBUG] [Thread-16292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:06:16.672 [DEBUG] [Thread-16292] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:06:16.713 [DEBUG] [Thread-16292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:06:16.713 [DEBUG] [Thread-16292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:06:16.714 [DEBUG] [Thread-16292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:06:16.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:06:16.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:06:16.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:06:16.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:06:16.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:06:16.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:06:16.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.462241 -999.00  +26.90  23.65     15   -1.60 1 1 1 1 1   888    0 31.14 128.51 ----- 28.8 23.6 273.0 28.4 32.1 -26.4 31.5 -25.6 31.1 -25.1 31.9 -24.9
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.462241
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:06:16.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:05:41', tmtdew=34.5, humidity=9.52, cloud=0.0, wind=24.42, temperature=26.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:05:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:06:16.725 [DEBUG] [Thread-16292] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:06:16.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:06:16.812 [DEBUG] [Thread-16295] [transport.py] [_log()] starting thread (client mode): 0x14983fd0
2025-11-12T13:06:16.812 [DEBUG] [Thread-16295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:06:16.827 [DEBUG] [Thread-16295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:06:16.827 [INFO] [Thread-16295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] client lang: <none>
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] server lang: <none>
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] kex follows: False
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] Compression: none
2025-11-12T13:06:16.835 [DEBUG] [Thread-16295] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:06:16.891 [DEBUG] [Thread-16295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:06:16.891 [DEBUG] [Thread-16295] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:06:16.892 [DEBUG] [Thread-16295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:06:16.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:06:16.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:06:16.948 [DEBUG] [Thread-16295] [transport.py] [_log()] userauth is OK
2025-11-12T13:06:16.948 [DEBUG] [Thread-16295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:06:16.948 [DEBUG] [Thread-16295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:06:16.948 [DEBUG] [Thread-16295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:06:16.948 [DEBUG] [Thread-16295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:06:16.962 [INFO] [Thread-16295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:06:16.962 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:06:16.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:06:17.796 [DEBUG] [Thread-16295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:06:17.796 [DEBUG] [Thread-16295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:06:17.844 [DEBUG] [Thread-16295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:06:17.844 [DEBUG] [Thread-16295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:06:17.852 [DEBUG] [Thread-16295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:06:17.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:06:17.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-11-12T13:06:17.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-11-12T13:06:17.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:06:17.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:06:17.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:06:17.884 [DEBUG] [Thread-16295] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:06:25.598 [DEBUG] [Thread-16297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:06:33.298 [DEBUG] [Thread-16298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:06:40.645 [DEBUG] [Thread-16299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:06:47.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:06:47.906 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:06:47.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-11-12T13:06:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 6, 13), 34.4, 9.6, 0.0, 23.42, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:06:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:06:13
2025-11-12T13:06:48.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:06:48.805 [DEBUG] [Thread-16300] [transport.py] [_log()] starting thread (client mode): 0x17347130
2025-11-12T13:06:48.805 [DEBUG] [Thread-16300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:06:48.826 [DEBUG] [Thread-16300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:06:48.826 [INFO] [Thread-16300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] client lang: <none>
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] server lang: <none>
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] kex follows: False
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] Compression: none
2025-11-12T13:06:48.830 [DEBUG] [Thread-16300] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:06:48.846 [DEBUG] [Thread-16300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:06:48.846 [DEBUG] [Thread-16300] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:06:48.846 [DEBUG] [Thread-16300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:06:48.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:06:48.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:06:48.847 [DEBUG] [Thread-16300] [transport.py] [_log()] userauth is OK
2025-11-12T13:06:48.847 [DEBUG] [Thread-16300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:06:48.847 [DEBUG] [Thread-16300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:06:48.847 [DEBUG] [Thread-16300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:06:48.847 [DEBUG] [Thread-16300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:06:48.862 [INFO] [Thread-16300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:06:48.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:06:49.456 [DEBUG] [Thread-16300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:06:49.457 [DEBUG] [Thread-16300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:06:49.457 [DEBUG] [Thread-16300] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:06:49.497 [DEBUG] [Thread-16300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:06:49.498 [DEBUG] [Thread-16300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:06:49.501 [DEBUG] [Thread-16300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:06:49.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:06:49.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:06:49.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:06:49.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:06:49.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:06:49.526 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:06:49.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:06:49.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:06:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:06:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.462588 -999.00  +26.70  21.61     14   -2.10 1 1 1 1 1   888    0 30.81 121.30 ----- 18.5 21.6 260.4 26.4 32.1 -26.9 31.6 -25.5 31.2 -23.9 32.0 -26.7
2025-11-12T13:06:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:06:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:06:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.462588
2025-11-12T13:06:49.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:06:49.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:06:49.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:06:49.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:06:49.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:06:49.529 [DEBUG] [Thread-16300] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:06:49.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:06:13', tmtdew=34.4, humidity=9.6, cloud=0.0, wind=23.42, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:06:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:06:49.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:06:49.624 [DEBUG] [Thread-16303] [transport.py] [_log()] starting thread (client mode): 0x173be440
2025-11-12T13:06:49.624 [DEBUG] [Thread-16303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:06:49.639 [DEBUG] [Thread-16303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:06:49.639 [INFO] [Thread-16303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:06:49.646 [DEBUG] [Thread-16303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:06:49.646 [DEBUG] [Thread-16303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:06:49.646 [DEBUG] [Thread-16303] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] client lang: <none>
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] server lang: <none>
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] kex follows: False
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] Compression: none
2025-11-12T13:06:49.647 [DEBUG] [Thread-16303] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:06:49.705 [DEBUG] [Thread-16303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:06:49.705 [DEBUG] [Thread-16303] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:06:49.706 [DEBUG] [Thread-16303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:06:49.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:06:49.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:06:49.760 [DEBUG] [Thread-16303] [transport.py] [_log()] userauth is OK
2025-11-12T13:06:49.761 [DEBUG] [Thread-16303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:06:49.761 [DEBUG] [Thread-16303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:06:49.761 [DEBUG] [Thread-16303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:06:49.761 [DEBUG] [Thread-16303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:06:49.777 [INFO] [Thread-16303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:06: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-11-12T13:06:49.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:06:50.632 [DEBUG] [Thread-16303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:06:50.632 [DEBUG] [Thread-16303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:06:50.680 [DEBUG] [Thread-16303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:06:50.680 [DEBUG] [Thread-16303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:06:50.689 [DEBUG] [Thread-16303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:06:50.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:06:50.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-11-12T13:06:50.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-11-12T13:06:50.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:06:50.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:06:50.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:06:50.727 [DEBUG] [Thread-16303] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:06:55.676 [DEBUG] [Thread-16305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:07:10.718 [DEBUG] [Thread-16306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:07:16.266 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:07:16.267 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:07:20.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:07:20.749 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:07:20.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-11-12T13:07:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 7, 18), 34.41, 10.03, 0.0, 22.44, 26.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:07:21.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:07:18
2025-11-12T13:07:21.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:07:21.629 [DEBUG] [Thread-16307] [transport.py] [_log()] starting thread (client mode): 0x17346e00
2025-11-12T13:07:21.630 [DEBUG] [Thread-16307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:07:21.650 [DEBUG] [Thread-16307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:07:21.651 [INFO] [Thread-16307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] client lang: <none>
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] server lang: <none>
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] kex follows: False
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] Compression: none
2025-11-12T13:07:21.654 [DEBUG] [Thread-16307] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:07:21.672 [DEBUG] [Thread-16307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:07:21.673 [DEBUG] [Thread-16307] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:07:21.673 [DEBUG] [Thread-16307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:07:21.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:07:21.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:07:21.675 [DEBUG] [Thread-16307] [transport.py] [_log()] userauth is OK
2025-11-12T13:07:21.675 [DEBUG] [Thread-16307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:07:21.675 [DEBUG] [Thread-16307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:07:21.675 [DEBUG] [Thread-16307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:07:21.675 [DEBUG] [Thread-16307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:07:21.700 [INFO] [Thread-16307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:07:21.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:07:22.411 [DEBUG] [Thread-16307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:07:22.411 [DEBUG] [Thread-16307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:07:22.412 [DEBUG] [Thread-16307] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:07:22.453 [DEBUG] [Thread-16307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:07:22.453 [DEBUG] [Thread-16307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:07:22.454 [DEBUG] [Thread-16307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:07:22.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:07:22.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:07:22.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:07:22.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:07:22.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:07:22.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:07:22.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:07:22.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:07:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:07:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.462936 -999.00  +26.20  14.28     15   -2.00 1 1 1 1 1   888    0 31.10 117.01 ----- 12.7 14.3 277.4 25.4 32.2 -27.7 31.6 -25.2 31.1 -30.5 32.0 -26.3
2025-11-12T13:07:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:07:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:07:22.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.462936
2025-11-12T13:07:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:07:22.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:07:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:07:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:07:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:07:22.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:07:18', tmtdew=34.41, humidity=10.03, cloud=0.0, wind=22.44, temperature=26.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:06:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:07:22.474 [DEBUG] [Thread-16307] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:07:22.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:07:22.571 [DEBUG] [Thread-16310] [transport.py] [_log()] starting thread (client mode): 0x173fbf70
2025-11-12T13:07:22.571 [DEBUG] [Thread-16310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:07:22.586 [DEBUG] [Thread-16310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:07:22.586 [INFO] [Thread-16310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:07:22.593 [DEBUG] [Thread-16310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:07:22.594 [DEBUG] [Thread-16310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:07:22.594 [DEBUG] [Thread-16310] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:07:22.594 [DEBUG] [Thread-16310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:07:22.594 [DEBUG] [Thread-16310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:07:22.594 [DEBUG] [Thread-16310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:07:22.594 [DEBUG] [Thread-16310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:07:22.595 [DEBUG] [Thread-16310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:07:22.595 [DEBUG] [Thread-16310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:07:22.595 [DEBUG] [Thread-16310] [transport.py] [_log()] client lang: <none>
2025-11-12T13:07:22.595 [DEBUG] [Thread-16310] [transport.py] [_log()] server lang: <none>
2025-11-12T13:07:22.595 [DEBUG] [Thread-16310] [transport.py] [_log()] kex follows: False
2025-11-12T13:07:22.595 [DEBUG] [Thread-16310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:07:22.595 [DEBUG] [Thread-16310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:07:22.595 [DEBUG] [Thread-16310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:07:22.596 [DEBUG] [Thread-16310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:07:22.596 [DEBUG] [Thread-16310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:07:22.596 [DEBUG] [Thread-16310] [transport.py] [_log()] Compression: none
2025-11-12T13:07:22.596 [DEBUG] [Thread-16310] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:07:22.653 [DEBUG] [Thread-16310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:07:22.654 [DEBUG] [Thread-16310] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:07:22.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:07:22.655 [DEBUG] [Thread-16310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:07:22.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:07:22.712 [DEBUG] [Thread-16310] [transport.py] [_log()] userauth is OK
2025-11-12T13:07:22.713 [DEBUG] [Thread-16310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:07:22.713 [DEBUG] [Thread-16310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:07:22.713 [DEBUG] [Thread-16310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:07:22.713 [DEBUG] [Thread-16310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:07:22.731 [INFO] [Thread-16310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:07:22.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:07:22.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:07:23.568 [DEBUG] [Thread-16310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:07:23.569 [DEBUG] [Thread-16310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:07:23.619 [DEBUG] [Thread-16310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:07:23.619 [DEBUG] [Thread-16310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:07:23.628 [DEBUG] [Thread-16310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:07:23.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:07:23.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-11-12T13:07:23.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:07:23.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:07:23.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:07:23.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:07:23.664 [DEBUG] [Thread-16310] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:07:25.756 [DEBUG] [Thread-16312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:07:33.327 [DEBUG] [Thread-16313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:07:40.806 [DEBUG] [Thread-16314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:07:53.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:07:53.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:07:53.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-11-12T13:07:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 7, 50), 34.32, 10.07, 0.0, 27.01, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:07:54.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:07:50
2025-11-12T13:07:54.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:07:54.559 [DEBUG] [Thread-16315] [transport.py] [_log()] starting thread (client mode): 0x173461d0
2025-11-12T13:07:54.559 [DEBUG] [Thread-16315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:07:54.579 [DEBUG] [Thread-16315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:07:54.579 [INFO] [Thread-16315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:07:54.580 [DEBUG] [Thread-16315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] client lang: <none>
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] server lang: <none>
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] kex follows: False
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] Compression: none
2025-11-12T13:07:54.581 [DEBUG] [Thread-16315] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:07:54.589 [DEBUG] [Thread-16315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:07:54.589 [DEBUG] [Thread-16315] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:07:54.590 [DEBUG] [Thread-16315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:07:54.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:07:54.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:07:54.591 [DEBUG] [Thread-16315] [transport.py] [_log()] userauth is OK
2025-11-12T13:07:54.591 [DEBUG] [Thread-16315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:07:54.591 [DEBUG] [Thread-16315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:07:54.592 [DEBUG] [Thread-16315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:07:54.592 [DEBUG] [Thread-16315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:07:54.611 [INFO] [Thread-16315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:07:54.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:07:55.259 [DEBUG] [Thread-16315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:07:55.259 [DEBUG] [Thread-16315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:07:55.260 [DEBUG] [Thread-16315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:07:55.301 [DEBUG] [Thread-16315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:07:55.301 [DEBUG] [Thread-16315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:07:55.304 [DEBUG] [Thread-16315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:07:55.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:07:55.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:07:55.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:07:55.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:07:55.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:07:55.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:07:55.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:07:55.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:07:55.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:07:55.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.463283 -999.00  +26.70  31.09     15   -1.60 1 1 2 1 1   888    0 31.57 120.96 ----- 24.5 31.1 258.6 33.7 32.2 -27.3 31.6 -25.4 31.2 -24.2 32.1 -26.8
2025-11-12T13:07:55.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:07:55.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:07:55.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.463283
2025-11-12T13:07:55.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:07:55.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:07:55.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:07:55.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:07:55.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:07:55.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:07:50', tmtdew=34.32, humidity=10.07, cloud=0.0, wind=27.01, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:07:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:07:55.331 [DEBUG] [Thread-16315] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:07:55.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:07:55.843 [DEBUG] [Thread-16318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:08:10.891 [DEBUG] [Thread-16319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:08:16.407 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:08:16.408 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:08:25.927 [DEBUG] [Thread-16320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:08:33.361 [DEBUG] [Thread-16321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:08:40.960 [DEBUG] [Thread-16322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:08:55.993 [DEBUG] [Thread-16323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:09:11.029 [DEBUG] [Thread-16324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:09:16.549 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:09:16.551 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:09:26.069 [DEBUG] [Thread-16325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:09:33.400 [DEBUG] [Thread-16326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:09:41.102 [DEBUG] [Thread-16327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:09:56.142 [DEBUG] [Thread-16328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:10:07.035 [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-11-12T13:10:11.177 [DEBUG] [Thread-16329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:10:16.694 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:10:16.695 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:10:26.212 [DEBUG] [Thread-16330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:10:33.441 [DEBUG] [Thread-16331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:10:37.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:10:37.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:10:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:10:37.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 10, 30), 34.21, 10.22, 0.0, 27.88, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:10:37.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:10:30
2025-11-12T13:10:37.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:10:37.976 [DEBUG] [Thread-16332] [transport.py] [_log()] starting thread (client mode): 0x17360dc0
2025-11-12T13:10:37.977 [DEBUG] [Thread-16332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:10:37.999 [DEBUG] [Thread-16332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:10:37.999 [INFO] [Thread-16332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:10:38.001 [DEBUG] [Thread-16332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] client lang: <none>
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] server lang: <none>
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] kex follows: False
2025-11-12T13:10:38.002 [DEBUG] [Thread-16332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:10:38.003 [DEBUG] [Thread-16332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:10:38.003 [DEBUG] [Thread-16332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:10:38.003 [DEBUG] [Thread-16332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:10:38.003 [DEBUG] [Thread-16332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:10:38.003 [DEBUG] [Thread-16332] [transport.py] [_log()] Compression: none
2025-11-12T13:10:38.003 [DEBUG] [Thread-16332] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:10:38.019 [DEBUG] [Thread-16332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:10:38.020 [DEBUG] [Thread-16332] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:10:38.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:10:38.022 [DEBUG] [Thread-16332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:10:38.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:10:38.024 [DEBUG] [Thread-16332] [transport.py] [_log()] userauth is OK
2025-11-12T13:10:38.024 [DEBUG] [Thread-16332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:10:38.024 [DEBUG] [Thread-16332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:10:38.024 [DEBUG] [Thread-16332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:10:38.025 [DEBUG] [Thread-16332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:10:38.048 [INFO] [Thread-16332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:10:38.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:10:38.804 [DEBUG] [Thread-16332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:10:38.804 [DEBUG] [Thread-16332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:10:38.804 [DEBUG] [Thread-16332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:10:38.844 [DEBUG] [Thread-16332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:10:38.845 [DEBUG] [Thread-16332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:10:38.848 [DEBUG] [Thread-16332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:10:38.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:10:38.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:10:38.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:10:38.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:10:38.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:10:38.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:10:38.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:10:38.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:10:38.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:10:38.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.465019 -999.00  +26.80  28.91     15   -1.40 1 1 1 1 1   888    0 30.40 88.23 ----- 32.3 28.9 266.6 32.6 32.5 -25.2 31.8 -25.4 31.5 -25.3 32.2 -24.1
2025-11-12T13:10:38.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:10:38.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:10:38.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.465019
2025-11-12T13:10:38.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:10:38.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:10:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:10:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:10:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:10:38.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:10:30', tmtdew=34.21, humidity=10.22, cloud=0.0, wind=27.88, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:09:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:10:38.874 [DEBUG] [Thread-16332] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:10:38.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:10:38.969 [DEBUG] [Thread-16335] [transport.py] [_log()] starting thread (client mode): 0x19dd9120
2025-11-12T13:10:38.969 [DEBUG] [Thread-16335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:10:38.988 [DEBUG] [Thread-16335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:10:38.989 [INFO] [Thread-16335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:10:38.996 [DEBUG] [Thread-16335] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:10:38.996 [DEBUG] [Thread-16335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:10:38.996 [DEBUG] [Thread-16335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:10:38.996 [DEBUG] [Thread-16335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:10:38.996 [DEBUG] [Thread-16335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:10:38.996 [DEBUG] [Thread-16335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:10:38.996 [DEBUG] [Thread-16335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:10:38.996 [DEBUG] [Thread-16335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] client lang: <none>
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] server lang: <none>
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] kex follows: False
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] Compression: none
2025-11-12T13:10:38.997 [DEBUG] [Thread-16335] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:10:39.056 [DEBUG] [Thread-16335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:10:39.057 [DEBUG] [Thread-16335] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:10:39.057 [DEBUG] [Thread-16335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:10:39.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:10:39.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:10:39.113 [DEBUG] [Thread-16335] [transport.py] [_log()] userauth is OK
2025-11-12T13:10:39.114 [DEBUG] [Thread-16335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:10:39.114 [DEBUG] [Thread-16335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:10:39.114 [DEBUG] [Thread-16335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:10:39.114 [DEBUG] [Thread-16335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:10:39.133 [INFO] [Thread-16335] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:10:39.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:10:39.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:10:40.078 [DEBUG] [Thread-16335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:10:40.078 [DEBUG] [Thread-16335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:10:40.125 [DEBUG] [Thread-16335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:10:40.126 [DEBUG] [Thread-16335] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:10:40.135 [DEBUG] [Thread-16335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:10:40.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:10:40.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-11-12T13:10:40.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-11-12T13:10:40.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:10:40.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:10:40.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:10:40.171 [DEBUG] [Thread-16335] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:10:41.249 [DEBUG] [Thread-16337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:10:56.308 [DEBUG] [Thread-16338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:11:10.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:11:10.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:11:10.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:11:10.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 11, 2), 34.21, 10.22, 0.0, 27.88, 27.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:11:10.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:11:02
2025-11-12T13:11:10.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:11:11.073 [DEBUG] [Thread-16339] [transport.py] [_log()] starting thread (client mode): 0x14921cf0
2025-11-12T13:11:11.074 [DEBUG] [Thread-16339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:11:11.092 [DEBUG] [Thread-16339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:11:11.093 [INFO] [Thread-16339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] client lang: <none>
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] server lang: <none>
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] kex follows: False
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] Compression: none
2025-11-12T13:11:11.096 [DEBUG] [Thread-16339] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:11:11.113 [DEBUG] [Thread-16339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:11:11.113 [DEBUG] [Thread-16339] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:11:11.114 [DEBUG] [Thread-16339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:11:11.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:11:11.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:11:11.116 [DEBUG] [Thread-16339] [transport.py] [_log()] userauth is OK
2025-11-12T13:11:11.116 [DEBUG] [Thread-16339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:11:11.116 [DEBUG] [Thread-16339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:11:11.117 [DEBUG] [Thread-16339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:11:11.117 [DEBUG] [Thread-16339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:11:11.141 [INFO] [Thread-16339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:11:11.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:11:11.350 [DEBUG] [Thread-16341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:11:11.770 [DEBUG] [Thread-16339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:11:11.770 [DEBUG] [Thread-16339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:11:11.770 [DEBUG] [Thread-16339] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:11:11.810 [DEBUG] [Thread-16339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:11:11.811 [DEBUG] [Thread-16339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:11:11.814 [DEBUG] [Thread-16339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:11:11.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:11:11.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:11:11.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:11:11.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:11:11.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:11:11.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:11:11.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:11:11.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:11:11.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:11:11.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.465713 -999.00  +25.80  25.68     16   -1.60 1 1 1 1 1   888    0 30.69 74.67 ----- 31.8 25.7 277.8 41.7 31.8 -28.5 31.3 -25.8 30.4 -31.7 31.8 -26.2
2025-11-12T13:11:11.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:11:11.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:11:11.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.465713
2025-11-12T13:11:11.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:11:11.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:11:11.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:11:11.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:11:11.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:11:11.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:11:02', tmtdew=34.21, humidity=10.22, cloud=0.0, wind=27.88, temperature=27.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:10:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:11:11.839 [DEBUG] [Thread-16339] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:11:11.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:11:11.934 [DEBUG] [Thread-16343] [transport.py] [_log()] starting thread (client mode): 0x1493c6d0
2025-11-12T13:11:11.935 [DEBUG] [Thread-16343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:11:11.950 [DEBUG] [Thread-16343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:11:11.950 [INFO] [Thread-16343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:11:11.957 [DEBUG] [Thread-16343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] client lang: <none>
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] server lang: <none>
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] kex follows: False
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:11:11.958 [DEBUG] [Thread-16343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:11:11.959 [DEBUG] [Thread-16343] [transport.py] [_log()] Compression: none
2025-11-12T13:11:11.959 [DEBUG] [Thread-16343] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:11:12.017 [DEBUG] [Thread-16343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:11:12.017 [DEBUG] [Thread-16343] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:11:12.018 [DEBUG] [Thread-16343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:11:12.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:11:12.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:11:12.072 [DEBUG] [Thread-16343] [transport.py] [_log()] userauth is OK
2025-11-12T13:11:12.073 [DEBUG] [Thread-16343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:11:12.073 [DEBUG] [Thread-16343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:11:12.073 [DEBUG] [Thread-16343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:11:12.073 [DEBUG] [Thread-16343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:11:12.092 [INFO] [Thread-16343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:11:12.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:11:12.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:11:12.940 [DEBUG] [Thread-16343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:11:12.941 [DEBUG] [Thread-16343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:11:12.989 [DEBUG] [Thread-16343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:11:12.989 [DEBUG] [Thread-16343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:11:12.998 [DEBUG] [Thread-16343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:11:13.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:11:13.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-11-12T13:11:13.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-11-12T13:11:13.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:11:13.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:11:13.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:11:13.034 [DEBUG] [Thread-16343] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:11:16.839 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:11:16.840 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:11:26.388 [DEBUG] [Thread-16345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:11:33.475 [DEBUG] [Thread-16346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:11:41.436 [DEBUG] [Thread-16347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:11:43.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:11:43.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:11:43.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-11-12T13:11:43.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 11, 34), 36.26, 8.97, 0.0, 26.75, 29.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:11:43.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:11:34
2025-11-12T13:11:43.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:11:43.950 [DEBUG] [Thread-16348] [transport.py] [_log()] starting thread (client mode): 0x173f8940
2025-11-12T13:11:43.950 [DEBUG] [Thread-16348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:11:43.962 [DEBUG] [Thread-16348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:11:43.962 [INFO] [Thread-16348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] client lang: <none>
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] server lang: <none>
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] kex follows: False
2025-11-12T13:11:43.963 [DEBUG] [Thread-16348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:11:43.964 [DEBUG] [Thread-16348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:11:43.964 [DEBUG] [Thread-16348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:11:43.964 [DEBUG] [Thread-16348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:11:43.964 [DEBUG] [Thread-16348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:11:43.964 [DEBUG] [Thread-16348] [transport.py] [_log()] Compression: none
2025-11-12T13:11:43.964 [DEBUG] [Thread-16348] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:11:43.972 [DEBUG] [Thread-16348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:11:43.972 [DEBUG] [Thread-16348] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:11:43.973 [DEBUG] [Thread-16348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:11:43.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:11:43.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:11:43.974 [DEBUG] [Thread-16348] [transport.py] [_log()] userauth is OK
2025-11-12T13:11:43.974 [DEBUG] [Thread-16348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:11:43.974 [DEBUG] [Thread-16348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:11:43.974 [DEBUG] [Thread-16348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:11:43.974 [DEBUG] [Thread-16348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:11:43.995 [INFO] [Thread-16348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:11:43.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:11:44.771 [DEBUG] [Thread-16348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:11:44.771 [DEBUG] [Thread-16348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:11:44.772 [DEBUG] [Thread-16348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:11:44.812 [DEBUG] [Thread-16348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:11:44.812 [DEBUG] [Thread-16348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:11:44.815 [DEBUG] [Thread-16348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:11:44.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:11:44.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:11:44.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:11:44.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:11:44.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:11:44.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:11:44.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:11:44.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:11:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:11:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.466061 -999.00  +25.50  15.42     16   -1.60 1 1 1 1 1   888    0 29.92 60.23 ----- 13.1 15.4 287.2 38.3 31.9 -26.4 31.4 -25.3 30.9 -25.7 31.8 -25.2
2025-11-12T13:11:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:11:44.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:11:44.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.466061
2025-11-12T13:11:44.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:11:44.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:11:44.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:11:44.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:11:44.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:11:44.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:11:34', tmtdew=36.26, humidity=8.97, cloud=0.0, wind=26.75, temperature=29.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:11:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:11:44.841 [DEBUG] [Thread-16348] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:11: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-11-12T13:11:44.936 [DEBUG] [Thread-16351] [transport.py] [_log()] starting thread (client mode): 0x14982290
2025-11-12T13:11:44.937 [DEBUG] [Thread-16351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:11:44.954 [DEBUG] [Thread-16351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:11:44.954 [INFO] [Thread-16351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] client lang: <none>
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] server lang: <none>
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] kex follows: False
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:11:44.962 [DEBUG] [Thread-16351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:11:44.963 [DEBUG] [Thread-16351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:11:44.963 [DEBUG] [Thread-16351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:11:44.963 [DEBUG] [Thread-16351] [transport.py] [_log()] Compression: none
2025-11-12T13:11:44.963 [DEBUG] [Thread-16351] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:11:45.021 [DEBUG] [Thread-16351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:11:45.021 [DEBUG] [Thread-16351] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:11:45.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:11:45.022 [DEBUG] [Thread-16351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:11:45.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:11:45.076 [DEBUG] [Thread-16351] [transport.py] [_log()] userauth is OK
2025-11-12T13:11:45.077 [DEBUG] [Thread-16351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:11:45.077 [DEBUG] [Thread-16351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:11:45.077 [DEBUG] [Thread-16351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:11:45.077 [DEBUG] [Thread-16351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:11:45.097 [INFO] [Thread-16351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:11:45.097 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:11:45.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:11:45.958 [DEBUG] [Thread-16351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:11:45.959 [DEBUG] [Thread-16351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:11:46.007 [DEBUG] [Thread-16351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:11:46.007 [DEBUG] [Thread-16351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:11:46.016 [DEBUG] [Thread-16351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:11:46.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:11:46.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-11-12T13:11:46.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-11-12T13:11:46.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:11:46.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:11:46.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:11:46.053 [DEBUG] [Thread-16351] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:11:56.473 [DEBUG] [Thread-16353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:12:11.524 [DEBUG] [Thread-16354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:12:16.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:12:16.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:12:16.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-11-12T13:12:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 12, 6), 34.47, 10.02, 0.0, 23.98, 27.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:12:16.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:12:06
2025-11-12T13:12:16.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:12:16.971 [DEBUG] [Thread-16355] [transport.py] [_log()] starting thread (client mode): 0x149ab460
2025-11-12T13:12:16.971 [DEBUG] [Thread-16355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:12:16.980 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:12:16.981 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:12:16.992 [DEBUG] [Thread-16355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:12:16.992 [INFO] [Thread-16355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] client lang: <none>
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] server lang: <none>
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] kex follows: False
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:12:16.996 [DEBUG] [Thread-16355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:12:16.997 [DEBUG] [Thread-16355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:12:16.997 [DEBUG] [Thread-16355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:12:16.997 [DEBUG] [Thread-16355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:12:16.997 [DEBUG] [Thread-16355] [transport.py] [_log()] Compression: none
2025-11-12T13:12:16.997 [DEBUG] [Thread-16355] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:12:17.013 [DEBUG] [Thread-16355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:12:17.014 [DEBUG] [Thread-16355] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:12:17.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:12:17.015 [DEBUG] [Thread-16355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:12:17.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:12:17.017 [DEBUG] [Thread-16355] [transport.py] [_log()] userauth is OK
2025-11-12T13:12:17.017 [DEBUG] [Thread-16355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:12:17.017 [DEBUG] [Thread-16355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:12:17.017 [DEBUG] [Thread-16355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:12:17.017 [DEBUG] [Thread-16355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:12:17.041 [INFO] [Thread-16355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:12:17.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:12:17.686 [DEBUG] [Thread-16355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:12:17.686 [DEBUG] [Thread-16355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:12:17.687 [DEBUG] [Thread-16355] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:12:17.728 [DEBUG] [Thread-16355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:12:17.728 [DEBUG] [Thread-16355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:12:17.731 [DEBUG] [Thread-16355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:12:17.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:12:17.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:12:17.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:12:17.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:12:17.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:12:17.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:12:17.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:12:17.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:12:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:12:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.466408 -999.00  +25.70  19.17     16   -1.70 1 1 1 1 1   888    0 29.62 46.53 ----- 21.4 19.2 270.0 26.3 32.1 -27.8 31.4 -25.3 30.9 -28.9 31.9 -25.5
2025-11-12T13:12:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:12:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:12:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.466408
2025-11-12T13:12:17.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:12:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:12:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:12:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:12:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:12:17.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:12:06', tmtdew=34.47, humidity=10.02, cloud=0.0, wind=23.98, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:11:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:12:17.760 [DEBUG] [Thread-16355] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:12:17.843 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:12:17.856 [DEBUG] [Thread-16358] [transport.py] [_log()] starting thread (client mode): 0x1737c4c0
2025-11-12T13:12:17.856 [DEBUG] [Thread-16358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:12:17.872 [DEBUG] [Thread-16358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:12:17.872 [INFO] [Thread-16358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] client lang: <none>
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] server lang: <none>
2025-11-12T13:12:17.880 [DEBUG] [Thread-16358] [transport.py] [_log()] kex follows: False
2025-11-12T13:12:17.881 [DEBUG] [Thread-16358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:12:17.881 [DEBUG] [Thread-16358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:12:17.881 [DEBUG] [Thread-16358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:12:17.881 [DEBUG] [Thread-16358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:12:17.881 [DEBUG] [Thread-16358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:12:17.881 [DEBUG] [Thread-16358] [transport.py] [_log()] Compression: none
2025-11-12T13:12:17.881 [DEBUG] [Thread-16358] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:12:17.940 [DEBUG] [Thread-16358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:12:17.940 [DEBUG] [Thread-16358] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:12:17.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:12:17.942 [DEBUG] [Thread-16358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:12:17.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:12:17.996 [DEBUG] [Thread-16358] [transport.py] [_log()] userauth is OK
2025-11-12T13:12:17.996 [DEBUG] [Thread-16358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:12:17.997 [DEBUG] [Thread-16358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:12:17.997 [DEBUG] [Thread-16358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:12:17.997 [DEBUG] [Thread-16358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:12:18.015 [INFO] [Thread-16358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:12:18.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:12:18.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:12:18.882 [DEBUG] [Thread-16358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:12:18.882 [DEBUG] [Thread-16358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:12:18.930 [DEBUG] [Thread-16358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:12:18.930 [DEBUG] [Thread-16358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:12:18.940 [DEBUG] [Thread-16358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:12:18.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:12:18.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-11-12T13:12:18.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-11-12T13:12:18.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:12:18.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:12:18.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:12:18.977 [DEBUG] [Thread-16358] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:12:26.562 [DEBUG] [Thread-16360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:12:33.512 [DEBUG] [Thread-16361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:12:41.613 [DEBUG] [Thread-16362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:12:48.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:12:48.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:12:48.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-11-12T13:12:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 12, 38), 35.51, 9.02, 0.0, 34.05, 27.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:12:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:12:38
2025-11-12T13:12:49.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:12:49.884 [DEBUG] [Thread-16363] [transport.py] [_log()] starting thread (client mode): 0x149a9750
2025-11-12T13:12:49.884 [DEBUG] [Thread-16363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:12:49.904 [DEBUG] [Thread-16363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:12:49.904 [INFO] [Thread-16363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:12:49.907 [DEBUG] [Thread-16363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] client lang: <none>
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] server lang: <none>
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] kex follows: False
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] Compression: none
2025-11-12T13:12:49.908 [DEBUG] [Thread-16363] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:12:49.925 [DEBUG] [Thread-16363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:12:49.925 [DEBUG] [Thread-16363] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:12:49.926 [DEBUG] [Thread-16363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:12:49.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:12:49.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:12:49.928 [DEBUG] [Thread-16363] [transport.py] [_log()] userauth is OK
2025-11-12T13:12:49.929 [DEBUG] [Thread-16363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:12:49.929 [DEBUG] [Thread-16363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:12:49.929 [DEBUG] [Thread-16363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:12:49.929 [DEBUG] [Thread-16363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:12:49.943 [INFO] [Thread-16363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:12:49.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:12:50.587 [DEBUG] [Thread-16363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:12:50.587 [DEBUG] [Thread-16363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:12:50.587 [DEBUG] [Thread-16363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:12:50.628 [DEBUG] [Thread-16363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:12:50.628 [DEBUG] [Thread-16363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:12:50.632 [DEBUG] [Thread-16363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:12:50.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:12:50.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:12:50.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:12:50.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:12:50.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:12:50.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:12:50.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:12:50.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:12:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:12:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.466755 -999.00  +26.20  34.30     15   -1.90 1 1 2 1 1   888    0 29.01 38.49 ----- 27.5 34.3 282.4 36.5 32.0 -27.8 31.4 -25.5 30.8 -27.5 32.0 -24.2
2025-11-12T13:12:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:12:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:12:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.466755
2025-11-12T13:12:50.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:12:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:12:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:12:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:12:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:12:50.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:12:38', tmtdew=35.51, humidity=9.02, cloud=0.0, wind=34.05, temperature=27.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:12:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:12:50.659 [DEBUG] [Thread-16363] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:12:50.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:12:50.757 [DEBUG] [Thread-16366] [transport.py] [_log()] starting thread (client mode): 0x149abeb0
2025-11-12T13:12:50.757 [DEBUG] [Thread-16366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:12:50.772 [DEBUG] [Thread-16366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:12:50.772 [INFO] [Thread-16366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:12:50.779 [DEBUG] [Thread-16366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:12:50.779 [DEBUG] [Thread-16366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:12:50.779 [DEBUG] [Thread-16366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:12:50.779 [DEBUG] [Thread-16366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:12:50.779 [DEBUG] [Thread-16366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] client lang: <none>
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] server lang: <none>
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] kex follows: False
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] Compression: none
2025-11-12T13:12:50.780 [DEBUG] [Thread-16366] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:12:50.845 [DEBUG] [Thread-16366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:12:50.845 [DEBUG] [Thread-16366] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:12:50.846 [DEBUG] [Thread-16366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:12:50.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:12:50.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:12:50.903 [DEBUG] [Thread-16366] [transport.py] [_log()] userauth is OK
2025-11-12T13:12:50.903 [DEBUG] [Thread-16366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:12:50.904 [DEBUG] [Thread-16366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:12:50.904 [DEBUG] [Thread-16366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:12:50.904 [DEBUG] [Thread-16366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:12:50.922 [INFO] [Thread-16366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:12:50.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:12:50.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:12:51.828 [DEBUG] [Thread-16366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:12:51.829 [DEBUG] [Thread-16366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:12:51.877 [DEBUG] [Thread-16366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:12:51.877 [DEBUG] [Thread-16366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:12:51.886 [DEBUG] [Thread-16366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:12:51.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:12:51.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-11-12T13:12:51.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:12:51.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:12:51.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:12:51.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:12:51.921 [DEBUG] [Thread-16366] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:12:56.645 [DEBUG] [Thread-16368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:13:11.691 [DEBUG] [Thread-16369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:13:17.121 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:13:17.122 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:13:21.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:13:21.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:13:21.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:13:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 13, 10), 35.92, 8.75, 0.0, 35.9, 27.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:13:22.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:13:10
2025-11-12T13:13:22.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:13:22.917 [DEBUG] [Thread-16370] [transport.py] [_log()] starting thread (client mode): 0x14981660
2025-11-12T13:13:22.917 [DEBUG] [Thread-16370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:13:22.937 [DEBUG] [Thread-16370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:13:22.937 [INFO] [Thread-16370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] client lang: <none>
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] server lang: <none>
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] kex follows: False
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:13:22.939 [DEBUG] [Thread-16370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:13:22.940 [DEBUG] [Thread-16370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:13:22.940 [DEBUG] [Thread-16370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:13:22.940 [DEBUG] [Thread-16370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:13:22.940 [DEBUG] [Thread-16370] [transport.py] [_log()] Compression: none
2025-11-12T13:13:22.940 [DEBUG] [Thread-16370] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:13:22.949 [DEBUG] [Thread-16370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:13:22.949 [DEBUG] [Thread-16370] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:13:22.949 [DEBUG] [Thread-16370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:13:22.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:13:22.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:13:22.950 [DEBUG] [Thread-16370] [transport.py] [_log()] userauth is OK
2025-11-12T13:13:22.950 [DEBUG] [Thread-16370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:13:22.950 [DEBUG] [Thread-16370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:13:22.950 [DEBUG] [Thread-16370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:13:22.950 [DEBUG] [Thread-16370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:13:22.959 [INFO] [Thread-16370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:13:22.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:13:23.550 [DEBUG] [Thread-16370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:13:23.550 [DEBUG] [Thread-16370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:13:23.550 [DEBUG] [Thread-16370] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:13:23.591 [DEBUG] [Thread-16370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:13:23.591 [DEBUG] [Thread-16370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:13:23.593 [DEBUG] [Thread-16370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:13:23.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:13:23.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:13:23.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:13:23.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:13:23.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:13:23.610 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:13:23.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:13:23.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:13:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:13:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.467102 -999.00  +26.70  26.55     14   -2.30 1 1 1 1 1   888    0 28.97 31.71 ----- 29.7 26.6 311.6 36.6 32.1 -26.7 31.4 -24.9 31.0 -25.8 32.1 -25.1
2025-11-12T13:13:23.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:13:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:13:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.467102
2025-11-12T13:13:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:13:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:13:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:13:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:13:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:13:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:13:10', tmtdew=35.92, humidity=8.75, cloud=0.0, wind=35.9, temperature=27.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:12:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:13:23.611 [DEBUG] [Thread-16370] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:13:23.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:13:23.698 [DEBUG] [Thread-16373] [transport.py] [_log()] starting thread (client mode): 0x173bd4e0
2025-11-12T13:13:23.698 [DEBUG] [Thread-16373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:13:23.712 [DEBUG] [Thread-16373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:13:23.712 [INFO] [Thread-16373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] client lang: <none>
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] server lang: <none>
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] kex follows: False
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] Compression: none
2025-11-12T13:13:23.720 [DEBUG] [Thread-16373] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:13:23.778 [DEBUG] [Thread-16373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:13:23.778 [DEBUG] [Thread-16373] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:13:23.778 [DEBUG] [Thread-16373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:13:23.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:13:23.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:13:23.835 [DEBUG] [Thread-16373] [transport.py] [_log()] userauth is OK
2025-11-12T13:13:23.835 [DEBUG] [Thread-16373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:13:23.835 [DEBUG] [Thread-16373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:13:23.835 [DEBUG] [Thread-16373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:13:23.835 [DEBUG] [Thread-16373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:13:23.848 [INFO] [Thread-16373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:13:23.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:13:23.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:13:24.707 [DEBUG] [Thread-16373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:13:24.707 [DEBUG] [Thread-16373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:13:24.755 [DEBUG] [Thread-16373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:13:24.755 [DEBUG] [Thread-16373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:13:24.764 [DEBUG] [Thread-16373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:13:24.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:13:24.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:13:24.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-11-12T13:13:24.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:13:24.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:13:24.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:13:24.795 [DEBUG] [Thread-16373] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:13:26.719 [DEBUG] [Thread-16375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:13:33.545 [DEBUG] [Thread-16376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:13:41.763 [DEBUG] [Thread-16377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:13:54.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:13:54.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:13:54.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:13:55.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 13, 42), 36.17, 8.7, 0.0, 32.04, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:13:55.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:13:42
2025-11-12T13:13:55.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:13:55.748 [DEBUG] [Thread-16378] [transport.py] [_log()] starting thread (client mode): 0x1737ee00
2025-11-12T13:13:55.748 [DEBUG] [Thread-16378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:13:55.769 [DEBUG] [Thread-16378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:13:55.769 [INFO] [Thread-16378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] client lang: <none>
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] server lang: <none>
2025-11-12T13:13:55.772 [DEBUG] [Thread-16378] [transport.py] [_log()] kex follows: False
2025-11-12T13:13:55.773 [DEBUG] [Thread-16378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:13:55.773 [DEBUG] [Thread-16378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:13:55.773 [DEBUG] [Thread-16378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:13:55.773 [DEBUG] [Thread-16378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:13:55.773 [DEBUG] [Thread-16378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:13:55.773 [DEBUG] [Thread-16378] [transport.py] [_log()] Compression: none
2025-11-12T13:13:55.773 [DEBUG] [Thread-16378] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:13:55.791 [DEBUG] [Thread-16378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:13:55.792 [DEBUG] [Thread-16378] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:13:55.792 [DEBUG] [Thread-16378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:13:55.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:13:55.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:13:55.794 [DEBUG] [Thread-16378] [transport.py] [_log()] userauth is OK
2025-11-12T13:13:55.794 [DEBUG] [Thread-16378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:13:55.794 [DEBUG] [Thread-16378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:13:55.794 [DEBUG] [Thread-16378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:13:55.795 [DEBUG] [Thread-16378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:13:55.830 [INFO] [Thread-16378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:13:55.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:13:56.484 [DEBUG] [Thread-16378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:13:56.484 [DEBUG] [Thread-16378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:13:56.484 [DEBUG] [Thread-16378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:13:56.525 [DEBUG] [Thread-16378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:13:56.525 [DEBUG] [Thread-16378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:13:56.528 [DEBUG] [Thread-16378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:13:56.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:13:56.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:13:56.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:13:56.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:13:56.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:13:56.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:13:56.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:13:56.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:13:56.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:13:56.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.467449 -999.00  +27.00  31.23     13   -2.80 1 1 2 1 1   888    0 29.61 38.52 ----- 26.5 31.2 308.6 35.4 32.3 -26.9 31.6 -25.3 31.2 -25.4 32.2 -24.6
2025-11-12T13:13:56.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:13:56.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:13:56.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.467449
2025-11-12T13:13:56.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:13:56.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:13:56.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:13:56.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:13:56.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:13:56.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:13:42', tmtdew=36.17, humidity=8.7, cloud=0.0, wind=32.04, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:13:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:13:56.557 [DEBUG] [Thread-16378] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:13:56.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:13:56.655 [DEBUG] [Thread-16381] [transport.py] [_log()] starting thread (client mode): 0x173e93c0
2025-11-12T13:13:56.655 [DEBUG] [Thread-16381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:13:56.670 [DEBUG] [Thread-16381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:13:56.670 [INFO] [Thread-16381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:13:56.679 [DEBUG] [Thread-16381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] client lang: <none>
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] server lang: <none>
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] kex follows: False
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:13:56.680 [DEBUG] [Thread-16381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:13:56.681 [DEBUG] [Thread-16381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:13:56.681 [DEBUG] [Thread-16381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:13:56.681 [DEBUG] [Thread-16381] [transport.py] [_log()] Compression: none
2025-11-12T13:13:56.681 [DEBUG] [Thread-16381] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:13:56.740 [DEBUG] [Thread-16381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:13:56.740 [DEBUG] [Thread-16381] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:13:56.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:13:56.742 [DEBUG] [Thread-16381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:13:56.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:13:56.796 [DEBUG] [Thread-16381] [transport.py] [_log()] userauth is OK
2025-11-12T13:13:56.796 [DEBUG] [Thread-16381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:13:56.796 [DEBUG] [Thread-16381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:13:56.796 [DEBUG] [Thread-16381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:13:56.796 [DEBUG] [Thread-16381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:13:56.801 [DEBUG] [Thread-16383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:13:56.815 [INFO] [Thread-16381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:13:56.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:13:56.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:13:57.655 [DEBUG] [Thread-16381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:13:57.655 [DEBUG] [Thread-16381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:13:57.704 [DEBUG] [Thread-16381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:13:57.704 [DEBUG] [Thread-16381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:13:57.714 [DEBUG] [Thread-16381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:13:57.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:13:57.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-11-12T13:13:57.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-11-12T13:13:57.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:13:57.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:13:57.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:13:57.751 [DEBUG] [Thread-16381] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:14:11.848 [DEBUG] [Thread-16384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:14:17.264 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:14:17.265 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:14:26.888 [DEBUG] [Thread-16385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:14:27.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:14:27.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:14: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-11-12T13:14:28.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 14, 14), 36.27, 8.64, 0.0, 30.31, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:14:28.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:14:14
2025-11-12T13:14:28.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:14:28.684 [DEBUG] [Thread-16386] [transport.py] [_log()] starting thread (client mode): 0x173e9ff0
2025-11-12T13:14:28.684 [DEBUG] [Thread-16386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:14:28.704 [DEBUG] [Thread-16386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:14:28.704 [INFO] [Thread-16386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:14:28.707 [DEBUG] [Thread-16386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:14:28.707 [DEBUG] [Thread-16386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:14:28.707 [DEBUG] [Thread-16386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:14:28.707 [DEBUG] [Thread-16386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:14:28.707 [DEBUG] [Thread-16386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:14:28.707 [DEBUG] [Thread-16386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] client lang: <none>
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] server lang: <none>
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] kex follows: False
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] Compression: none
2025-11-12T13:14:28.708 [DEBUG] [Thread-16386] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:14:28.725 [DEBUG] [Thread-16386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:14:28.726 [DEBUG] [Thread-16386] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:14:28.726 [DEBUG] [Thread-16386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:14:28.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:14:28.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:14:28.729 [DEBUG] [Thread-16386] [transport.py] [_log()] userauth is OK
2025-11-12T13:14:28.729 [DEBUG] [Thread-16386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:14:28.729 [DEBUG] [Thread-16386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:14:28.729 [DEBUG] [Thread-16386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:14:28.729 [DEBUG] [Thread-16386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:14:28.750 [INFO] [Thread-16386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:14:28.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:14:29.410 [DEBUG] [Thread-16386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:14:29.410 [DEBUG] [Thread-16386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:14:29.411 [DEBUG] [Thread-16386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:14:29.451 [DEBUG] [Thread-16386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:14:29.452 [DEBUG] [Thread-16386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:14:29.454 [DEBUG] [Thread-16386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:14:29.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:14:29.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:14:29.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:14:29.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:14:29.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:14:29.477 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:14:29.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:14:29.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:14:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:14:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.467797 -999.00  +26.90  27.25     14   -2.40 1 1 1 1 1   888    0 29.83 42.69 ----- 25.6 27.2 311.8 32.4 32.4 -26.1 31.6 -24.9 31.5 -25.0 32.3 -24.5
2025-11-12T13:14:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:14:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:14:29.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.467797
2025-11-12T13:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:14:29.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:14:14', tmtdew=36.27, humidity=8.64, cloud=0.0, wind=30.31, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:13:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:14:29.480 [DEBUG] [Thread-16386] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:14:29.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:14:29.578 [DEBUG] [Thread-16389] [transport.py] [_log()] starting thread (client mode): 0x1737cac0
2025-11-12T13:14:29.578 [DEBUG] [Thread-16389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:14:29.596 [DEBUG] [Thread-16389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:14:29.596 [INFO] [Thread-16389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:14:29.606 [DEBUG] [Thread-16389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:14:29.606 [DEBUG] [Thread-16389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:14:29.606 [DEBUG] [Thread-16389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:14:29.606 [DEBUG] [Thread-16389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:14:29.606 [DEBUG] [Thread-16389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:14:29.606 [DEBUG] [Thread-16389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:14:29.606 [DEBUG] [Thread-16389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] client lang: <none>
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] server lang: <none>
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] kex follows: False
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] Compression: none
2025-11-12T13:14:29.607 [DEBUG] [Thread-16389] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:14:29.664 [DEBUG] [Thread-16389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:14:29.664 [DEBUG] [Thread-16389] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:14:29.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:14:29.665 [DEBUG] [Thread-16389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:14:29.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:14:29.719 [DEBUG] [Thread-16389] [transport.py] [_log()] userauth is OK
2025-11-12T13:14:29.720 [DEBUG] [Thread-16389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:14:29.720 [DEBUG] [Thread-16389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:14:29.720 [DEBUG] [Thread-16389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:14:29.720 [DEBUG] [Thread-16389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:14:29.738 [INFO] [Thread-16389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:14:29.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:14:29.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:14:30.583 [DEBUG] [Thread-16389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:14:30.583 [DEBUG] [Thread-16389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:14:30.631 [DEBUG] [Thread-16389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:14:30.632 [DEBUG] [Thread-16389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:14:30.641 [DEBUG] [Thread-16389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:14:30.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:14:30.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-11-12T13:14:30.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-11-12T13:14:30.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:14:30.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:14:30.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:14:30.677 [DEBUG] [Thread-16389] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:14:33.579 [DEBUG] [Thread-16391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:14:41.922 [DEBUG] [Thread-16392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:14:56.967 [DEBUG] [Thread-16393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:15:00.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:15:00.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:15:00.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-11-12T13:15:01.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 14, 46), 36.7, 8.47, 0.0, 28.51, 27.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:15:01.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:14:46
2025-11-12T13:15:01.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:15:01.640 [DEBUG] [Thread-16394] [transport.py] [_log()] starting thread (client mode): 0x173e80d0
2025-11-12T13:15:01.640 [DEBUG] [Thread-16394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:15:01.656 [DEBUG] [Thread-16394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:15:01.656 [INFO] [Thread-16394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] client lang: <none>
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] server lang: <none>
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] kex follows: False
2025-11-12T13:15:01.659 [DEBUG] [Thread-16394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:15:01.660 [DEBUG] [Thread-16394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:15:01.660 [DEBUG] [Thread-16394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:15:01.660 [DEBUG] [Thread-16394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:15:01.660 [DEBUG] [Thread-16394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:15:01.660 [DEBUG] [Thread-16394] [transport.py] [_log()] Compression: none
2025-11-12T13:15:01.660 [DEBUG] [Thread-16394] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:15:01.676 [DEBUG] [Thread-16394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:15:01.676 [DEBUG] [Thread-16394] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:15:01.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:15:01.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:15:01.677 [DEBUG] [Thread-16394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:15:01.677 [DEBUG] [Thread-16394] [transport.py] [_log()] userauth is OK
2025-11-12T13:15:01.677 [DEBUG] [Thread-16394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:15:01.677 [DEBUG] [Thread-16394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:15:01.678 [DEBUG] [Thread-16394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:15:01.678 [DEBUG] [Thread-16394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:15:01.686 [INFO] [Thread-16394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:15:01.687 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:15:02.318 [DEBUG] [Thread-16394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:15:02.319 [DEBUG] [Thread-16394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:15:02.319 [DEBUG] [Thread-16394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:15:02.359 [DEBUG] [Thread-16394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:15:02.359 [DEBUG] [Thread-16394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:15:02.361 [DEBUG] [Thread-16394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:15:02.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:15:02.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:15:02.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:15:02.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:15:02.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:15:02.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:15:02.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:15:02.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:15:02.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:15:02.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.468144 -999.00  +27.00  24.52     13   -3.00 1 1 1 1 1   888    0 29.08 42.03 ----- 23.1 24.5 300.8 34.3 32.4 -26.8 31.6 -26.1 31.6 -24.5 32.4 -25.9
2025-11-12T13:15:02.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:15:02.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:15:02.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.468144
2025-11-12T13:15:02.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:15:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:15:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:15:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:15:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:15:02.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:14:46', tmtdew=36.7, humidity=8.47, cloud=0.0, wind=28.51, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:14:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:15:02.375 [DEBUG] [Thread-16394] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:15:02.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:15:02.471 [DEBUG] [Thread-16397] [transport.py] [_log()] starting thread (client mode): 0x1737d720
2025-11-12T13:15:02.471 [DEBUG] [Thread-16397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:15:02.486 [DEBUG] [Thread-16397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:15:02.486 [INFO] [Thread-16397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:15:02.493 [DEBUG] [Thread-16397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:15:02.493 [DEBUG] [Thread-16397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:15:02.493 [DEBUG] [Thread-16397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:15:02.493 [DEBUG] [Thread-16397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] client lang: <none>
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] server lang: <none>
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] kex follows: False
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] Compression: none
2025-11-12T13:15:02.494 [DEBUG] [Thread-16397] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:15:02.550 [DEBUG] [Thread-16397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:15:02.550 [DEBUG] [Thread-16397] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:15:02.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:15:02.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:15:02.552 [DEBUG] [Thread-16397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:15:02.607 [DEBUG] [Thread-16397] [transport.py] [_log()] userauth is OK
2025-11-12T13:15:02.607 [DEBUG] [Thread-16397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:15:02.607 [DEBUG] [Thread-16397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:15:02.607 [DEBUG] [Thread-16397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:15:02.607 [DEBUG] [Thread-16397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:15:02.626 [INFO] [Thread-16397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:15:02.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:15:02.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:15:03.497 [DEBUG] [Thread-16397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:15:03.497 [DEBUG] [Thread-16397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:15:03.545 [DEBUG] [Thread-16397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:15:03.545 [DEBUG] [Thread-16397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:15:03.554 [DEBUG] [Thread-16397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:15:03.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:15:03.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-11-12T13:15:03.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-11-12T13:15:03.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:15:03.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:15:03.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:15:03.588 [DEBUG] [Thread-16397] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:15:12.001 [DEBUG] [Thread-16399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:15:17.406 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:15:17.407 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:15:27.048 [DEBUG] [Thread-16400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:15:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:15:33.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:15:33.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-11-12T13:15:33.621 [DEBUG] [Thread-16401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:15:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 15, 18), 36.66, 8.49, 0.0, 30.47, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:15:34.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:15:18
2025-11-12T13:15:34.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:15:34.504 [DEBUG] [Thread-16402] [transport.py] [_log()] starting thread (client mode): 0x1493d1b0
2025-11-12T13:15:34.505 [DEBUG] [Thread-16402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:15:34.527 [DEBUG] [Thread-16402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:15:34.527 [INFO] [Thread-16402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:15:34.530 [DEBUG] [Thread-16402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:15:34.530 [DEBUG] [Thread-16402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:15:34.530 [DEBUG] [Thread-16402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] client lang: <none>
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] server lang: <none>
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] kex follows: False
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] Compression: none
2025-11-12T13:15:34.531 [DEBUG] [Thread-16402] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:15:34.549 [DEBUG] [Thread-16402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:15:34.550 [DEBUG] [Thread-16402] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:15:34.550 [DEBUG] [Thread-16402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:15:34.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:15:34.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:15:34.552 [DEBUG] [Thread-16402] [transport.py] [_log()] userauth is OK
2025-11-12T13:15:34.552 [DEBUG] [Thread-16402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:15:34.553 [DEBUG] [Thread-16402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:15:34.553 [DEBUG] [Thread-16402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:15:34.553 [DEBUG] [Thread-16402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:15:34.589 [INFO] [Thread-16402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:15:34.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:15:35.240 [DEBUG] [Thread-16402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:15:35.241 [DEBUG] [Thread-16402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:15:35.241 [DEBUG] [Thread-16402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:15:35.281 [DEBUG] [Thread-16402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:15:35.282 [DEBUG] [Thread-16402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:15:35.285 [DEBUG] [Thread-16402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:15:35.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:15:35.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:15:35.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:15:35.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:15:35.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:15:35.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:15:35.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:15:35.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:15:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:15:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.468838 -999.00  +27.20  26.31     13   -2.90 1 1 1 1 1   888    0 30.16 55.82 ----- 22.8 26.3 293.0 38.3 32.5 -25.3 31.8 -24.8 31.7 -25.3 32.5 -24.9
2025-11-12T13:15:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:15:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:15:35.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.468838
2025-11-12T13:15:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:15:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:15:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:15:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:15:35.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:15:35.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:15:18', tmtdew=36.66, humidity=8.49, cloud=0.0, wind=30.47, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:15:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:15:35.313 [DEBUG] [Thread-16402] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:15:35.399 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:15:35.410 [DEBUG] [Thread-16405] [transport.py] [_log()] starting thread (client mode): 0x149aace0
2025-11-12T13:15:35.410 [DEBUG] [Thread-16405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:15:35.424 [DEBUG] [Thread-16405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:15:35.425 [INFO] [Thread-16405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] client lang: <none>
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] server lang: <none>
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] kex follows: False
2025-11-12T13:15:35.433 [DEBUG] [Thread-16405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:15:35.434 [DEBUG] [Thread-16405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:15:35.434 [DEBUG] [Thread-16405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:15:35.434 [DEBUG] [Thread-16405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:15:35.434 [DEBUG] [Thread-16405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:15:35.434 [DEBUG] [Thread-16405] [transport.py] [_log()] Compression: none
2025-11-12T13:15:35.434 [DEBUG] [Thread-16405] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:15:35.492 [DEBUG] [Thread-16405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:15:35.492 [DEBUG] [Thread-16405] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:15:35.493 [DEBUG] [Thread-16405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:15:35.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:15:35.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:15:35.551 [DEBUG] [Thread-16405] [transport.py] [_log()] userauth is OK
2025-11-12T13:15:35.551 [DEBUG] [Thread-16405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:15:35.552 [DEBUG] [Thread-16405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:15:35.552 [DEBUG] [Thread-16405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:15:35.552 [DEBUG] [Thread-16405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:15:35.570 [INFO] [Thread-16405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:15:35.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:15:35.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:15:36.410 [DEBUG] [Thread-16405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:15:36.411 [DEBUG] [Thread-16405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:15:36.459 [DEBUG] [Thread-16405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:15:36.459 [DEBUG] [Thread-16405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:15:36.468 [DEBUG] [Thread-16405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:15:36.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:15:36.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:15:36.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-11-12T13:15:36.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:15:36.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:15:36.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:15:36.505 [DEBUG] [Thread-16405] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:15:42.087 [DEBUG] [Thread-16407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:15:57.138 [DEBUG] [Thread-16408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:16:06.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:16:06.528 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:16:06.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-11-12T13:16:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 15, 50), 36.9, 7.89, 0.0, 30.81, 27.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:16:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:15:50
2025-11-12T13:16:07.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:16:07.429 [DEBUG] [Thread-16409] [transport.py] [_log()] starting thread (client mode): 0x173ebe20
2025-11-12T13:16:07.430 [DEBUG] [Thread-16409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:16:07.450 [DEBUG] [Thread-16409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:16:07.450 [INFO] [Thread-16409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] client lang: <none>
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] server lang: <none>
2025-11-12T13:16:07.453 [DEBUG] [Thread-16409] [transport.py] [_log()] kex follows: False
2025-11-12T13:16:07.454 [DEBUG] [Thread-16409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:16:07.454 [DEBUG] [Thread-16409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:16:07.454 [DEBUG] [Thread-16409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:16:07.454 [DEBUG] [Thread-16409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:16:07.454 [DEBUG] [Thread-16409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:16:07.454 [DEBUG] [Thread-16409] [transport.py] [_log()] Compression: none
2025-11-12T13:16:07.454 [DEBUG] [Thread-16409] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:16:07.472 [DEBUG] [Thread-16409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:16:07.473 [DEBUG] [Thread-16409] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:16:07.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:16:07.474 [DEBUG] [Thread-16409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:16:07.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:16:07.476 [DEBUG] [Thread-16409] [transport.py] [_log()] userauth is OK
2025-11-12T13:16:07.476 [DEBUG] [Thread-16409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:16:07.477 [DEBUG] [Thread-16409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:16:07.477 [DEBUG] [Thread-16409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:16:07.477 [DEBUG] [Thread-16409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:16:07.513 [INFO] [Thread-16409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:16:07.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:16:08.171 [DEBUG] [Thread-16409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:16:08.171 [DEBUG] [Thread-16409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:16:08.172 [DEBUG] [Thread-16409] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:16:08.213 [DEBUG] [Thread-16409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:16:08.213 [DEBUG] [Thread-16409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:16:08.216 [DEBUG] [Thread-16409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:16:08.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:16:08.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:16:08.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:16:08.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:16:08.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:16:08.239 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:16:08.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:16:08.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:16:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:16:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.469186 -999.00  +27.60  27.48     13   -2.80 1 1 1 1 1   888    0 29.74 60.39 ----- 30.0 27.5 295.2 32.1 32.6 -25.9 31.9 -25.8 31.9 -24.5 32.7 -24.7
2025-11-12T13:16:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:16:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:16:08.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.469186
2025-11-12T13:16:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:16:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:16:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:16:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:16:08.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:16:08.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:15:50', tmtdew=36.9, humidity=7.89, cloud=0.0, wind=30.81, temperature=27.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:15:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:16:08.242 [DEBUG] [Thread-16409] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:16:08.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:16:08.347 [DEBUG] [Thread-16412] [transport.py] [_log()] starting thread (client mode): 0x149824a0
2025-11-12T13:16:08.347 [DEBUG] [Thread-16412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:16:08.362 [DEBUG] [Thread-16412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:16:08.362 [INFO] [Thread-16412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:16:08.370 [DEBUG] [Thread-16412] [transport.py] [_log()] client lang: <none>
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] server lang: <none>
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] kex follows: False
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] Compression: none
2025-11-12T13:16:08.371 [DEBUG] [Thread-16412] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:16:08.425 [DEBUG] [Thread-16412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:16:08.425 [DEBUG] [Thread-16412] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:16:08.425 [DEBUG] [Thread-16412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:16:08.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:16:08.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:16:08.486 [DEBUG] [Thread-16412] [transport.py] [_log()] userauth is OK
2025-11-12T13:16:08.486 [DEBUG] [Thread-16412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:16:08.487 [DEBUG] [Thread-16412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:16:08.487 [DEBUG] [Thread-16412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:16:08.487 [DEBUG] [Thread-16412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:16:08.508 [INFO] [Thread-16412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:16:08.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:16:08.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:16:09.353 [DEBUG] [Thread-16412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:16:09.363 [DEBUG] [Thread-16412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:16:09.402 [DEBUG] [Thread-16412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:16:09.402 [DEBUG] [Thread-16412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:16:09.412 [DEBUG] [Thread-16412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:16:09.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:16:09.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-11-12T13:16:09.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:16:09.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:16:09.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:16:09.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:16:09.448 [DEBUG] [Thread-16412] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:16:12.170 [DEBUG] [Thread-16414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:16:17.548 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:16:17.550 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:16:27.220 [DEBUG] [Thread-16415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:16:33.655 [DEBUG] [Thread-16416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:16:39.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:16:39.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:16:39.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-11-12T13:16:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 16, 22), 37.07, 7.81, 0.0, 29.84, 27.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:16:40.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:16:22
2025-11-12T13:16:40.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:16:40.376 [DEBUG] [Thread-16417] [transport.py] [_log()] starting thread (client mode): 0x173e9a80
2025-11-12T13:16:40.377 [DEBUG] [Thread-16417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:16:40.396 [DEBUG] [Thread-16417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:16:40.396 [INFO] [Thread-16417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:16:40.399 [DEBUG] [Thread-16417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:16:40.399 [DEBUG] [Thread-16417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:16:40.399 [DEBUG] [Thread-16417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] client lang: <none>
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] server lang: <none>
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] kex follows: False
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] Compression: none
2025-11-12T13:16:40.400 [DEBUG] [Thread-16417] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:16:40.415 [DEBUG] [Thread-16417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:16:40.416 [DEBUG] [Thread-16417] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:16:40.416 [DEBUG] [Thread-16417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:16:40.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:16:40.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:16:40.418 [DEBUG] [Thread-16417] [transport.py] [_log()] userauth is OK
2025-11-12T13:16:40.418 [DEBUG] [Thread-16417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:16:40.418 [DEBUG] [Thread-16417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:16:40.418 [DEBUG] [Thread-16417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:16:40.418 [DEBUG] [Thread-16417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:16:40.443 [INFO] [Thread-16417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:16:40.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:16:41.085 [DEBUG] [Thread-16417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:16:41.085 [DEBUG] [Thread-16417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:16:41.085 [DEBUG] [Thread-16417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:16:41.126 [DEBUG] [Thread-16417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:16:41.126 [DEBUG] [Thread-16417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:16:41.129 [DEBUG] [Thread-16417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:16:41.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:16:41.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:16:41.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:16:41.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:16:41.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:16:41.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:16:41.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:16:41.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:16:41.163 [DEBUG] [Thread-16417] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:16:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:16:41.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.469533 -999.00  +27.70  22.25     13   -3.00 1 1 1 1 1   888    0 30.16 70.61 ----- 27.9 22.2 293.7 35.9 32.5 -27.6 31.9 -26.0 31.6 -26.5 32.6 -26.2
2025-11-12T13:16:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:16:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:16:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.469533
2025-11-12T13:16:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:16:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:16:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:16:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:16:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:16:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:16:22', tmtdew=37.07, humidity=7.81, cloud=0.0, wind=29.84, temperature=27.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:16:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:16:41.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:16:41.262 [DEBUG] [Thread-16420] [transport.py] [_log()] starting thread (client mode): 0x14920c10
2025-11-12T13:16:41.263 [DEBUG] [Thread-16420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:16:41.277 [DEBUG] [Thread-16420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:16:41.278 [INFO] [Thread-16420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:16:41.285 [DEBUG] [Thread-16420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:16:41.285 [DEBUG] [Thread-16420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:16:41.285 [DEBUG] [Thread-16420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] client lang: <none>
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] server lang: <none>
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] kex follows: False
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] Compression: none
2025-11-12T13:16:41.286 [DEBUG] [Thread-16420] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:16:41.343 [DEBUG] [Thread-16420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:16:41.344 [DEBUG] [Thread-16420] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:16:41.344 [DEBUG] [Thread-16420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:16:41.344 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:16:41.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:16:41.399 [DEBUG] [Thread-16420] [transport.py] [_log()] userauth is OK
2025-11-12T13:16:41.399 [DEBUG] [Thread-16420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:16:41.400 [DEBUG] [Thread-16420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:16:41.400 [DEBUG] [Thread-16420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:16:41.400 [DEBUG] [Thread-16420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:16:41.421 [INFO] [Thread-16420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:16:41.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:16:41.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:16:42.249 [DEBUG] [Thread-16420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:16:42.249 [DEBUG] [Thread-16420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:16:42.252 [DEBUG] [Thread-16422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:16:42.297 [DEBUG] [Thread-16420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:16:42.297 [DEBUG] [Thread-16420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:16:42.306 [DEBUG] [Thread-16420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:16:42.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:16:42.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-11-12T13:16:42.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:16:42.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:16:42.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:16:42.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:16:42.343 [DEBUG] [Thread-16420] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:16:57.303 [DEBUG] [Thread-16423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:17:12.341 [DEBUG] [Thread-16424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:17:12.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:17:12.365 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:17:12.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:17:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 16, 54), 36.69, 8.42, 0.0, 24.35, 26.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:17:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:16:54
2025-11-12T13:17:13.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:17:13.352 [DEBUG] [Thread-16425] [transport.py] [_log()] starting thread (client mode): 0x14957460
2025-11-12T13:17:13.352 [DEBUG] [Thread-16425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:17:13.372 [DEBUG] [Thread-16425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:17:13.372 [INFO] [Thread-16425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] client lang: <none>
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] server lang: <none>
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] kex follows: False
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:17:13.375 [DEBUG] [Thread-16425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:17:13.376 [DEBUG] [Thread-16425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:17:13.376 [DEBUG] [Thread-16425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:17:13.376 [DEBUG] [Thread-16425] [transport.py] [_log()] Compression: none
2025-11-12T13:17:13.376 [DEBUG] [Thread-16425] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:17:13.392 [DEBUG] [Thread-16425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:17:13.393 [DEBUG] [Thread-16425] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:17:13.393 [DEBUG] [Thread-16425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:17:13.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:17:13.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:17:13.394 [DEBUG] [Thread-16425] [transport.py] [_log()] userauth is OK
2025-11-12T13:17:13.394 [DEBUG] [Thread-16425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:17:13.394 [DEBUG] [Thread-16425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:17:13.394 [DEBUG] [Thread-16425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:17:13.394 [DEBUG] [Thread-16425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:17:13.411 [INFO] [Thread-16425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:17:13.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:17:14.057 [DEBUG] [Thread-16425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:17:14.057 [DEBUG] [Thread-16425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:17:14.057 [DEBUG] [Thread-16425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:17:14.098 [DEBUG] [Thread-16425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:17:14.098 [DEBUG] [Thread-16425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:17:14.100 [DEBUG] [Thread-16425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:17:14.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:17:14.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:17:14.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:17:14.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:17:14.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:17:14.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:17:14.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:17:14.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.469880 -999.00  +27.30  26.52     13   -3.40 1 1 1 1 1   888    0 31.16 83.77 ----- 19.6 26.5 286.8 29.9 32.5 -28.7 31.9 -25.8 31.6 -28.3 32.6 -28.7
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.469880
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:17:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:16:54', tmtdew=36.69, humidity=8.42, cloud=0.0, wind=24.35, temperature=26.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:16:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:17:14.136 [DEBUG] [Thread-16425] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:17:14.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:17:14.221 [DEBUG] [Thread-16428] [transport.py] [_log()] starting thread (client mode): 0x17398130
2025-11-12T13:17:14.221 [DEBUG] [Thread-16428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:17:14.236 [DEBUG] [Thread-16428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:17:14.236 [INFO] [Thread-16428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] client lang: <none>
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] server lang: <none>
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] kex follows: False
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] Compression: none
2025-11-12T13:17:14.244 [DEBUG] [Thread-16428] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:17:14.301 [DEBUG] [Thread-16428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:17:14.301 [DEBUG] [Thread-16428] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:17:14.302 [DEBUG] [Thread-16428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:17:14.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:17:14.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:17:14.358 [DEBUG] [Thread-16428] [transport.py] [_log()] userauth is OK
2025-11-12T13:17:14.358 [DEBUG] [Thread-16428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:17:14.358 [DEBUG] [Thread-16428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:17:14.358 [DEBUG] [Thread-16428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:17:14.358 [DEBUG] [Thread-16428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:17:14.372 [INFO] [Thread-16428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:17:14.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:17:14.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:17:15.267 [DEBUG] [Thread-16428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:17:15.268 [DEBUG] [Thread-16428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:17:15.316 [DEBUG] [Thread-16428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:17:15.316 [DEBUG] [Thread-16428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:17:15.324 [DEBUG] [Thread-16428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:17:15.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:17:15.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-11-12T13:17:15.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-11-12T13:17:15.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:17:15.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:17:15.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:17:15.357 [DEBUG] [Thread-16428] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:17:17.690 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:17:17.690 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:17:27.372 [DEBUG] [Thread-16430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:17:33.688 [DEBUG] [Thread-16431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:17:42.414 [DEBUG] [Thread-16432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:17:45.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:17:45.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:17:45.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-11-12T13:17:46.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 17, 26), 37.05, 8.22, 0.0, 25.74, 27.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:17:46.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:17:26
2025-11-12T13:17:46.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:17:46.285 [DEBUG] [Thread-16433] [transport.py] [_log()] starting thread (client mode): 0x173998a0
2025-11-12T13:17:46.285 [DEBUG] [Thread-16433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:17:46.298 [DEBUG] [Thread-16433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:17:46.298 [INFO] [Thread-16433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] client lang: <none>
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] server lang: <none>
2025-11-12T13:17:46.301 [DEBUG] [Thread-16433] [transport.py] [_log()] kex follows: False
2025-11-12T13:17:46.302 [DEBUG] [Thread-16433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:17:46.302 [DEBUG] [Thread-16433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:17:46.302 [DEBUG] [Thread-16433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:17:46.302 [DEBUG] [Thread-16433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:17:46.302 [DEBUG] [Thread-16433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:17:46.302 [DEBUG] [Thread-16433] [transport.py] [_log()] Compression: none
2025-11-12T13:17:46.302 [DEBUG] [Thread-16433] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:17:46.320 [DEBUG] [Thread-16433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:17:46.320 [DEBUG] [Thread-16433] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:17:46.321 [DEBUG] [Thread-16433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:17:46.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:17:46.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:17:46.324 [DEBUG] [Thread-16433] [transport.py] [_log()] userauth is OK
2025-11-12T13:17:46.324 [DEBUG] [Thread-16433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:17:46.324 [DEBUG] [Thread-16433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:17:46.324 [DEBUG] [Thread-16433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:17:46.324 [DEBUG] [Thread-16433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:17:46.361 [INFO] [Thread-16433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:17:46.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:17:46.992 [DEBUG] [Thread-16433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:17:46.993 [DEBUG] [Thread-16433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:17:46.993 [DEBUG] [Thread-16433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:17:47.034 [DEBUG] [Thread-16433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:17:47.034 [DEBUG] [Thread-16433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:17:47.038 [DEBUG] [Thread-16433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:17:47.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:17:47.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:17:47.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:17:47.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:17:47.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:17:47.061 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:17:47.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:17:47.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:17:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:17:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.470227 -999.00  +27.20  20.61     13   -3.20 1 1 1 1 1   888    0 31.28 99.46 ----- 24.9 20.6 291.8 24.8 32.7 -26.6 32.0 -25.6 31.9 -24.5 32.7 -25.4
2025-11-12T13:17:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:17:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:17:47.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.470227
2025-11-12T13:17:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:17:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:17:47.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:17:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:17:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:17:47.064 [DEBUG] [Thread-16433] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:17:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:17:26', tmtdew=37.05, humidity=8.22, cloud=0.0, wind=25.74, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:17:07.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:17: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-11-12T13:17:47.159 [DEBUG] [Thread-16436] [transport.py] [_log()] starting thread (client mode): 0x1739bac0
2025-11-12T13:17:47.159 [DEBUG] [Thread-16436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:17:47.174 [DEBUG] [Thread-16436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:17:47.175 [INFO] [Thread-16436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:17:47.182 [DEBUG] [Thread-16436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] client lang: <none>
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] server lang: <none>
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] kex follows: False
2025-11-12T13:17:47.183 [DEBUG] [Thread-16436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:17:47.184 [DEBUG] [Thread-16436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:17:47.184 [DEBUG] [Thread-16436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:17:47.184 [DEBUG] [Thread-16436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:17:47.184 [DEBUG] [Thread-16436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:17:47.184 [DEBUG] [Thread-16436] [transport.py] [_log()] Compression: none
2025-11-12T13:17:47.184 [DEBUG] [Thread-16436] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:17:47.243 [DEBUG] [Thread-16436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:17:47.244 [DEBUG] [Thread-16436] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:17:47.244 [DEBUG] [Thread-16436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:17:47.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:17:47.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:17:47.303 [DEBUG] [Thread-16436] [transport.py] [_log()] userauth is OK
2025-11-12T13:17:47.303 [DEBUG] [Thread-16436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:17:47.303 [DEBUG] [Thread-16436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:17:47.303 [DEBUG] [Thread-16436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:17:47.303 [DEBUG] [Thread-16436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:17:47.323 [INFO] [Thread-16436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:17:47.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:17:47.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:17:48.172 [DEBUG] [Thread-16436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:17:48.172 [DEBUG] [Thread-16436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:17:48.221 [DEBUG] [Thread-16436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:17:48.221 [DEBUG] [Thread-16436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:17:48.230 [DEBUG] [Thread-16436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:17:48.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:17:48.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:17:48.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-11-12T13:17:48.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:17:48.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:17:48.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:17:48.266 [DEBUG] [Thread-16436] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:17:57.449 [DEBUG] [Thread-16438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:18:12.499 [DEBUG] [Thread-16439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:18:17.831 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:18:17.832 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:18:18.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:18:18.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:18:18.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-11-12T13:18:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 17, 58), 37.47, 7.77, 0.0, 26.8, 27.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:18:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:17:58
2025-11-12T13:18:19.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:18:19.209 [DEBUG] [Thread-16440] [transport.py] [_log()] starting thread (client mode): 0x173990f0
2025-11-12T13:18:19.209 [DEBUG] [Thread-16440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:18:19.229 [DEBUG] [Thread-16440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:18:19.229 [INFO] [Thread-16440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:18:19.232 [DEBUG] [Thread-16440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] client lang: <none>
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] server lang: <none>
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] kex follows: False
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] Compression: none
2025-11-12T13:18:19.233 [DEBUG] [Thread-16440] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:18:19.250 [DEBUG] [Thread-16440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:18:19.250 [DEBUG] [Thread-16440] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:18:19.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:18:19.252 [DEBUG] [Thread-16440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:18:19.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:18:19.253 [DEBUG] [Thread-16440] [transport.py] [_log()] userauth is OK
2025-11-12T13:18:19.254 [DEBUG] [Thread-16440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:18:19.254 [DEBUG] [Thread-16440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:18:19.254 [DEBUG] [Thread-16440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:18:19.254 [DEBUG] [Thread-16440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:18:19.290 [INFO] [Thread-16440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:18:19.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:18:19.931 [DEBUG] [Thread-16440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:18:19.931 [DEBUG] [Thread-16440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:18:19.932 [DEBUG] [Thread-16440] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:18:19.973 [DEBUG] [Thread-16440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:18:19.973 [DEBUG] [Thread-16440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:18:19.976 [DEBUG] [Thread-16440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:18:19.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:18:19.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:18:19.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:18:19.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:18:19.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:18:20.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:18:20.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:18:20.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:18:20.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:18:20.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.470574 -999.00  +27.30  22.20     13   -3.10 1 1 1 1 1   888    0 30.96 96.97 ----- 24.0 22.2 295.6 34.5 32.7 -26.3 32.1 -24.7 31.9 -24.1 32.8 -25.5
2025-11-12T13:18:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:18:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:18:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.470574
2025-11-12T13:18:20.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:18:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:18:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:18:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:18:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:18:20.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:17:58', tmtdew=37.47, humidity=7.77, cloud=0.0, wind=26.8, temperature=27.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:17:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:18:20.003 [DEBUG] [Thread-16440] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:18:20.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:18:20.099 [DEBUG] [Thread-16443] [transport.py] [_log()] starting thread (client mode): 0x1737d8a0
2025-11-12T13:18:20.099 [DEBUG] [Thread-16443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:18:20.114 [DEBUG] [Thread-16443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:18:20.114 [INFO] [Thread-16443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:18:20.122 [DEBUG] [Thread-16443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:18:20.122 [DEBUG] [Thread-16443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:18:20.122 [DEBUG] [Thread-16443] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:18:20.122 [DEBUG] [Thread-16443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:18:20.122 [DEBUG] [Thread-16443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:18:20.122 [DEBUG] [Thread-16443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:18:20.123 [DEBUG] [Thread-16443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:18:20.123 [DEBUG] [Thread-16443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:18:20.123 [DEBUG] [Thread-16443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:18:20.123 [DEBUG] [Thread-16443] [transport.py] [_log()] client lang: <none>
2025-11-12T13:18:20.123 [DEBUG] [Thread-16443] [transport.py] [_log()] server lang: <none>
2025-11-12T13:18:20.123 [DEBUG] [Thread-16443] [transport.py] [_log()] kex follows: False
2025-11-12T13:18:20.123 [DEBUG] [Thread-16443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:18:20.123 [DEBUG] [Thread-16443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:18:20.124 [DEBUG] [Thread-16443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:18:20.124 [DEBUG] [Thread-16443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:18:20.124 [DEBUG] [Thread-16443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:18:20.124 [DEBUG] [Thread-16443] [transport.py] [_log()] Compression: none
2025-11-12T13:18:20.124 [DEBUG] [Thread-16443] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:18:20.183 [DEBUG] [Thread-16443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:18:20.184 [DEBUG] [Thread-16443] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:18:20.184 [DEBUG] [Thread-16443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:18:20.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:18:20.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:18:20.243 [DEBUG] [Thread-16443] [transport.py] [_log()] userauth is OK
2025-11-12T13:18:20.243 [DEBUG] [Thread-16443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:18:20.243 [DEBUG] [Thread-16443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:18:20.243 [DEBUG] [Thread-16443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:18:20.243 [DEBUG] [Thread-16443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:18:20.262 [INFO] [Thread-16443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:18:20.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:18:20.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:18:21.124 [DEBUG] [Thread-16443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:18:21.124 [DEBUG] [Thread-16443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:18:21.173 [DEBUG] [Thread-16443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:18:21.173 [DEBUG] [Thread-16443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:18:21.182 [DEBUG] [Thread-16443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:18:21.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:18:21.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-11-12T13:18:21.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-11-12T13:18:21.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:18:21.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:18:21.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:18:21.217 [DEBUG] [Thread-16443] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:18:27.538 [DEBUG] [Thread-16445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:18:33.722 [DEBUG] [Thread-16446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:18:42.589 [DEBUG] [Thread-16447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:18:51.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:18:51.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:18:51.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-11-12T13:18:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 18, 30), 37.53, 7.77, 0.0, 25.83, 28.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:18:51.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:18:30
2025-11-12T13:18:52.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:18:52.149 [DEBUG] [Thread-16448] [transport.py] [_log()] starting thread (client mode): 0x149227d0
2025-11-12T13:18:52.149 [DEBUG] [Thread-16448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:18:52.170 [DEBUG] [Thread-16448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:18:52.170 [INFO] [Thread-16448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:18:52.173 [DEBUG] [Thread-16448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:18:52.173 [DEBUG] [Thread-16448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] client lang: <none>
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] server lang: <none>
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] kex follows: False
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] Compression: none
2025-11-12T13:18:52.174 [DEBUG] [Thread-16448] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:18:52.194 [DEBUG] [Thread-16448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:18:52.194 [DEBUG] [Thread-16448] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:18:52.195 [DEBUG] [Thread-16448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:18:52.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:18:52.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:18:52.197 [DEBUG] [Thread-16448] [transport.py] [_log()] userauth is OK
2025-11-12T13:18:52.197 [DEBUG] [Thread-16448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:18:52.197 [DEBUG] [Thread-16448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:18:52.197 [DEBUG] [Thread-16448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:18:52.197 [DEBUG] [Thread-16448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:18:52.230 [INFO] [Thread-16448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:18:52.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:18:52.871 [DEBUG] [Thread-16448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:18:52.871 [DEBUG] [Thread-16448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:18:52.872 [DEBUG] [Thread-16448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:18:52.913 [DEBUG] [Thread-16448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:18:52.913 [DEBUG] [Thread-16448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:18:52.916 [DEBUG] [Thread-16448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:18:52.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:18:52.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:18:52.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:18:52.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:18:52.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:18:52.939 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:18:52.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:18:52.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:18:52.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:18:52.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.470923 -999.00  +27.50  26.83     13   -3.00 1 1 1 1 1   888    0 32.03 108.65 ----- 25.3 26.8 276.0 33.0 32.7 -28.5 32.1 -27.0 31.9 -26.1 32.9 -27.7
2025-11-12T13:18:52.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:18:52.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:18:52.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.470923
2025-11-12T13:18:52.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:18:52.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:18:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:18:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:18:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:18:52.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:18:30', tmtdew=37.53, humidity=7.77, cloud=0.0, wind=25.83, temperature=28.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:18:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:18:52.942 [DEBUG] [Thread-16448] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:18:53.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:18:53.035 [DEBUG] [Thread-16451] [transport.py] [_log()] starting thread (client mode): 0x173eab30
2025-11-12T13:18:53.035 [DEBUG] [Thread-16451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:18:53.049 [DEBUG] [Thread-16451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:18:53.050 [INFO] [Thread-16451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:18:53.057 [DEBUG] [Thread-16451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:18:53.057 [DEBUG] [Thread-16451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:18:53.057 [DEBUG] [Thread-16451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] client lang: <none>
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] server lang: <none>
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] kex follows: False
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] Compression: none
2025-11-12T13:18:53.058 [DEBUG] [Thread-16451] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:18:53.115 [DEBUG] [Thread-16451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:18:53.116 [DEBUG] [Thread-16451] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:18:53.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:18:53.117 [DEBUG] [Thread-16451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:18:53.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:18:53.170 [DEBUG] [Thread-16451] [transport.py] [_log()] userauth is OK
2025-11-12T13:18:53.171 [DEBUG] [Thread-16451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:18:53.171 [DEBUG] [Thread-16451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:18:53.171 [DEBUG] [Thread-16451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:18:53.171 [DEBUG] [Thread-16451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:18:53.190 [INFO] [Thread-16451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:18:53.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:18:53.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:18:54.033 [DEBUG] [Thread-16451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:18:54.033 [DEBUG] [Thread-16451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:18:54.080 [DEBUG] [Thread-16451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:18:54.081 [DEBUG] [Thread-16451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:18:54.090 [DEBUG] [Thread-16451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:18:54.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:18:54.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-11-12T13:18:54.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-11-12T13:18:54.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:18:54.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:18:54.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:18:54.126 [DEBUG] [Thread-16451] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:18:57.626 [DEBUG] [Thread-16453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:19:12.674 [DEBUG] [Thread-16454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:19:17.972 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:19:17.973 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:19:24.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:19:24.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:19:24.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-11-12T13:19:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 19, 2), 37.14, 8.0, 0.0, 29.62, 28.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:19:24.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:19:02
2025-11-12T13:19:24.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:19:25.062 [DEBUG] [Thread-16455] [transport.py] [_log()] starting thread (client mode): 0x1739b520
2025-11-12T13:19:25.062 [DEBUG] [Thread-16455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:19:25.083 [DEBUG] [Thread-16455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:19:25.083 [INFO] [Thread-16455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:19:25.086 [DEBUG] [Thread-16455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:19:25.086 [DEBUG] [Thread-16455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:19:25.086 [DEBUG] [Thread-16455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:19:25.086 [DEBUG] [Thread-16455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:19:25.086 [DEBUG] [Thread-16455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] client lang: <none>
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] server lang: <none>
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] kex follows: False
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] Compression: none
2025-11-12T13:19:25.087 [DEBUG] [Thread-16455] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:19:25.105 [DEBUG] [Thread-16455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:19:25.105 [DEBUG] [Thread-16455] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:19:25.106 [DEBUG] [Thread-16455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:19:25.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:19:25.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:19:25.108 [DEBUG] [Thread-16455] [transport.py] [_log()] userauth is OK
2025-11-12T13:19:25.108 [DEBUG] [Thread-16455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:19:25.108 [DEBUG] [Thread-16455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:19:25.108 [DEBUG] [Thread-16455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:19:25.108 [DEBUG] [Thread-16455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:19:25.134 [INFO] [Thread-16455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:19:25.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:19:25.770 [DEBUG] [Thread-16455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:19:25.770 [DEBUG] [Thread-16455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:19:25.770 [DEBUG] [Thread-16455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:19:25.811 [DEBUG] [Thread-16455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:19:25.811 [DEBUG] [Thread-16455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:19:25.814 [DEBUG] [Thread-16455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:19:25.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:19:25.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:19:25.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:19:25.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:19:25.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:19:25.831 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:19:25.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:19:25.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:19:25.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:19:25.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.471269 -999.00  +27.00  27.56     13   -3.00 1 1 1 1 1   888    0 31.78 120.52 ----- 27.2 27.6 281.8 37.0 32.5 -30.1 32.0 -26.0 31.6 -29.7 32.8 -27.4
2025-11-12T13:19:25.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:19:25.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:19:25.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.471269
2025-11-12T13:19:25.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:19:25.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:19:25.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:19:25.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:19:25.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:19:25.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:19:02', tmtdew=37.14, humidity=8.0, cloud=0.0, wind=29.62, temperature=28.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:18:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:19:25.834 [DEBUG] [Thread-16455] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:19:25.918 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:19:25.931 [DEBUG] [Thread-16458] [transport.py] [_log()] starting thread (client mode): 0x173f8550
2025-11-12T13:19:25.932 [DEBUG] [Thread-16458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:19:25.946 [DEBUG] [Thread-16458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:19:25.946 [INFO] [Thread-16458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:19:25.953 [DEBUG] [Thread-16458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:19:25.953 [DEBUG] [Thread-16458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:19:25.953 [DEBUG] [Thread-16458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:19:25.954 [DEBUG] [Thread-16458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:19:25.954 [DEBUG] [Thread-16458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:19:25.954 [DEBUG] [Thread-16458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:19:25.954 [DEBUG] [Thread-16458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:19:25.954 [DEBUG] [Thread-16458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:19:25.954 [DEBUG] [Thread-16458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:19:25.954 [DEBUG] [Thread-16458] [transport.py] [_log()] client lang: <none>
2025-11-12T13:19:25.954 [DEBUG] [Thread-16458] [transport.py] [_log()] server lang: <none>
2025-11-12T13:19:25.955 [DEBUG] [Thread-16458] [transport.py] [_log()] kex follows: False
2025-11-12T13:19:25.955 [DEBUG] [Thread-16458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:19:25.955 [DEBUG] [Thread-16458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:19:25.955 [DEBUG] [Thread-16458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:19:25.955 [DEBUG] [Thread-16458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:19:25.955 [DEBUG] [Thread-16458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:19:25.955 [DEBUG] [Thread-16458] [transport.py] [_log()] Compression: none
2025-11-12T13:19:25.955 [DEBUG] [Thread-16458] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:19:26.015 [DEBUG] [Thread-16458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:19:26.016 [DEBUG] [Thread-16458] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:19:26.017 [DEBUG] [Thread-16458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:19:26.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:19:26.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:19:26.075 [DEBUG] [Thread-16458] [transport.py] [_log()] userauth is OK
2025-11-12T13:19:26.075 [DEBUG] [Thread-16458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:19:26.075 [DEBUG] [Thread-16458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:19:26.075 [DEBUG] [Thread-16458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:19:26.075 [DEBUG] [Thread-16458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:19:26.094 [INFO] [Thread-16458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:19:26.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:19:26.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:19:27.057 [DEBUG] [Thread-16458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:19:27.057 [DEBUG] [Thread-16458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:19:27.104 [DEBUG] [Thread-16458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:19:27.105 [DEBUG] [Thread-16458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:19:27.114 [DEBUG] [Thread-16458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:19:27.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:19:27.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-11-12T13:19:27.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-11-12T13:19:27.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:19:27.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:19:27.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:19:27.151 [DEBUG] [Thread-16458] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:19:27.703 [DEBUG] [Thread-16460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:19:33.754 [DEBUG] [Thread-16461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:19:42.756 [DEBUG] [Thread-16462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:19:57.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:19:57.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:19:57.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-11-12T13:19:57.787 [DEBUG] [Thread-16463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:19:57.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 19, 34), 36.9, 7.97, 0.0, 27.6, 27.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:19:57.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:19:34
2025-11-12T13:19:57.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:19:58.070 [DEBUG] [Thread-16464] [transport.py] [_log()] starting thread (client mode): 0x149a8700
2025-11-12T13:19:58.070 [DEBUG] [Thread-16464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:19:58.091 [DEBUG] [Thread-16464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:19:58.091 [INFO] [Thread-16464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:19:58.094 [DEBUG] [Thread-16464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:19:58.094 [DEBUG] [Thread-16464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] client lang: <none>
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] server lang: <none>
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] kex follows: False
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] Compression: none
2025-11-12T13:19:58.095 [DEBUG] [Thread-16464] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:19:58.112 [DEBUG] [Thread-16464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:19:58.113 [DEBUG] [Thread-16464] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:19:58.113 [DEBUG] [Thread-16464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:19:58.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:19:58.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:19:58.116 [DEBUG] [Thread-16464] [transport.py] [_log()] userauth is OK
2025-11-12T13:19:58.116 [DEBUG] [Thread-16464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:19:58.116 [DEBUG] [Thread-16464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:19:58.116 [DEBUG] [Thread-16464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:19:58.116 [DEBUG] [Thread-16464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:19:58.140 [INFO] [Thread-16464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:19:58.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:19:58.728 [DEBUG] [Thread-16464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:19:58.728 [DEBUG] [Thread-16464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:19:58.729 [DEBUG] [Thread-16464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:19:58.770 [DEBUG] [Thread-16464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:19:58.770 [DEBUG] [Thread-16464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:19:58.773 [DEBUG] [Thread-16464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:19:58.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:19:58.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:19:58.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:19:58.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:19:58.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:19:58.798 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:19:58.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:19:58.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:19:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:19:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.471616 -999.00  +27.10  30.74     13   -2.90 1 1 2 1 1   888    0 32.09 115.12 ----- 25.0 30.7 287.0 33.2 32.8 -27.3 32.1 -26.4 31.9 -26.2 32.9 -25.6
2025-11-12T13:19:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:19:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:19:58.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.471616
2025-11-12T13:19:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:19:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:19:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:19:58.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:19:58.801 [DEBUG] [Thread-16464] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:19:58.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:19:58.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:19:34', tmtdew=36.9, humidity=7.97, cloud=0.0, wind=27.6, temperature=27.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:19:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:19:58.884 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:19:58.896 [DEBUG] [Thread-16467] [transport.py] [_log()] starting thread (client mode): 0x149aa9e0
2025-11-12T13:19:58.897 [DEBUG] [Thread-16467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:19:58.911 [DEBUG] [Thread-16467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:19:58.912 [INFO] [Thread-16467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:19:58.919 [DEBUG] [Thread-16467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] client lang: <none>
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] server lang: <none>
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] kex follows: False
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] Compression: none
2025-11-12T13:19:58.920 [DEBUG] [Thread-16467] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:19:58.983 [DEBUG] [Thread-16467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:19:58.983 [DEBUG] [Thread-16467] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:19:58.984 [DEBUG] [Thread-16467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:19:58.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:19:58.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:19:59.038 [DEBUG] [Thread-16467] [transport.py] [_log()] userauth is OK
2025-11-12T13:19:59.038 [DEBUG] [Thread-16467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:19:59.038 [DEBUG] [Thread-16467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:19:59.038 [DEBUG] [Thread-16467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:19:59.039 [DEBUG] [Thread-16467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:19:59.058 [INFO] [Thread-16467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:19:59.058 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:19:59.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:19:59.918 [DEBUG] [Thread-16467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:19:59.919 [DEBUG] [Thread-16467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:19:59.966 [DEBUG] [Thread-16467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:19:59.967 [DEBUG] [Thread-16467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:19:59.976 [DEBUG] [Thread-16467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:19:59.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:19:59.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-11-12T13:19:59.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-11-12T13:20:00.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:20:00.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:20:00.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:20:00.013 [DEBUG] [Thread-16467] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:20:12.819 [DEBUG] [Thread-16469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:20:18.115 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:20:18.116 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:20:27.879 [DEBUG] [Thread-16470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:20:30.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:20:30.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:20:30.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-11-12T13:20:30.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 20, 6), 37.15, 7.86, 0.0, 26.82, 28.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:20:30.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:20:06
2025-11-12T13:20:30.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:20:30.970 [DEBUG] [Thread-16471] [transport.py] [_log()] starting thread (client mode): 0x149a8ac0
2025-11-12T13:20:30.970 [DEBUG] [Thread-16471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:20:30.990 [DEBUG] [Thread-16471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:20:30.991 [INFO] [Thread-16471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] client lang: <none>
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] server lang: <none>
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] kex follows: False
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] Compression: none
2025-11-12T13:20:30.994 [DEBUG] [Thread-16471] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:20:31.010 [DEBUG] [Thread-16471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:20:31.010 [DEBUG] [Thread-16471] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:20:31.010 [DEBUG] [Thread-16471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:20:31.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:20:31.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:20:31.011 [DEBUG] [Thread-16471] [transport.py] [_log()] userauth is OK
2025-11-12T13:20:31.011 [DEBUG] [Thread-16471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:20:31.011 [DEBUG] [Thread-16471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:20:31.011 [DEBUG] [Thread-16471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:20:31.011 [DEBUG] [Thread-16471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:20:31.020 [INFO] [Thread-16471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:20:31.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:20:31.634 [DEBUG] [Thread-16471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:20:31.634 [DEBUG] [Thread-16471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:20:31.635 [DEBUG] [Thread-16471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:20:31.676 [DEBUG] [Thread-16471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:20:31.676 [DEBUG] [Thread-16471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:20:31.680 [DEBUG] [Thread-16471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:20:31.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:20:31.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:20:31.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:20:31.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:20:31.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:20:31.704 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:20:31.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:20:31.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:20:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:20:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.471963 -999.00  +27.00  19.43     13   -2.80 1 1 1 1 1   888    0 31.77 109.89 ----- 20.4 19.4 284.4 32.0 32.7 -26.3 32.1 -25.4 31.9 -28.0 32.8 -26.1
2025-11-12T13:20:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:20:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:20:31.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.471963
2025-11-12T13:20:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:20:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:20:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:20:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:20:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:20:31.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:20:06', tmtdew=37.15, humidity=7.86, cloud=0.0, wind=26.82, temperature=28.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:19:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:20:31.707 [DEBUG] [Thread-16471] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:20: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-11-12T13:20:31.805 [DEBUG] [Thread-16474] [transport.py] [_log()] starting thread (client mode): 0x173bc460
2025-11-12T13:20:31.806 [DEBUG] [Thread-16474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:20:31.820 [DEBUG] [Thread-16474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:20:31.821 [INFO] [Thread-16474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:20:31.828 [DEBUG] [Thread-16474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:20:31.828 [DEBUG] [Thread-16474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:20:31.828 [DEBUG] [Thread-16474] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] client lang: <none>
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] server lang: <none>
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] kex follows: False
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] Compression: none
2025-11-12T13:20:31.829 [DEBUG] [Thread-16474] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:20:31.887 [DEBUG] [Thread-16474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:20:31.887 [DEBUG] [Thread-16474] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:20:31.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:20:31.889 [DEBUG] [Thread-16474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:20:31.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:20:31.946 [DEBUG] [Thread-16474] [transport.py] [_log()] userauth is OK
2025-11-12T13:20:31.946 [DEBUG] [Thread-16474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:20:31.947 [DEBUG] [Thread-16474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:20:31.947 [DEBUG] [Thread-16474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:20:31.947 [DEBUG] [Thread-16474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:20:31.966 [INFO] [Thread-16474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:20:31.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:20:31.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:20:32.846 [DEBUG] [Thread-16474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:20:32.846 [DEBUG] [Thread-16474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:20:32.894 [DEBUG] [Thread-16474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:20:32.895 [DEBUG] [Thread-16474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:20:32.904 [DEBUG] [Thread-16474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:20:32.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:20:32.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:20:32.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-11-12T13:20:32.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:20:32.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:20:32.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:20:32.939 [DEBUG] [Thread-16474] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:20:33.798 [DEBUG] [Thread-16476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:20:42.911 [DEBUG] [Thread-16477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:20:57.974 [DEBUG] [Thread-16478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:21:02.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:21:02.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:21:02.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-11-12T13:21:03.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 20, 38), 37.62, 7.69, 0.0, 32.64, 28.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:21:03.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:20:38
2025-11-12T13:21:03.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:21:03.885 [DEBUG] [Thread-16479] [transport.py] [_log()] starting thread (client mode): 0x1739b8b0
2025-11-12T13:21:03.886 [DEBUG] [Thread-16479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:21:03.905 [DEBUG] [Thread-16479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:21:03.905 [INFO] [Thread-16479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] client lang: <none>
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] server lang: <none>
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] kex follows: False
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] Compression: none
2025-11-12T13:21:03.909 [DEBUG] [Thread-16479] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:21:03.928 [DEBUG] [Thread-16479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:21:03.928 [DEBUG] [Thread-16479] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:21:03.928 [DEBUG] [Thread-16479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:21:03.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:21:03.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:21:03.929 [DEBUG] [Thread-16479] [transport.py] [_log()] userauth is OK
2025-11-12T13:21:03.929 [DEBUG] [Thread-16479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:21:03.929 [DEBUG] [Thread-16479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:21:03.929 [DEBUG] [Thread-16479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:21:03.929 [DEBUG] [Thread-16479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:21:03.938 [INFO] [Thread-16479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:21:03.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:21:04.574 [DEBUG] [Thread-16479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:21:04.574 [DEBUG] [Thread-16479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:21:04.574 [DEBUG] [Thread-16479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:21:04.615 [DEBUG] [Thread-16479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:21:04.615 [DEBUG] [Thread-16479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:21:04.617 [DEBUG] [Thread-16479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:21:04.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:21:04.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:21:04.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:21:04.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:21:04.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:21:04.635 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:21:04.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:21:04.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:21:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:21:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.472658 -999.00  +27.00  27.01     13   -2.90 1 1 1 1 1   888    0 32.80 120.86 ----- 28.1 27.0 288.0 34.0 32.6 -26.8 32.1 -26.8 31.8 -25.3 32.8 -25.5
2025-11-12T13:21:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:21:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:21:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.472658
2025-11-12T13:21:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:21:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:21:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:21:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:21:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:21:04.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:20:38', tmtdew=37.62, humidity=7.69, cloud=0.0, wind=32.64, temperature=28.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:20:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:21:04.636 [DEBUG] [Thread-16479] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:21:04.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:21:04.722 [DEBUG] [Thread-16482] [transport.py] [_log()] starting thread (client mode): 0x1739bbe0
2025-11-12T13:21:04.722 [DEBUG] [Thread-16482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:21:04.738 [DEBUG] [Thread-16482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:21:04.738 [INFO] [Thread-16482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:21:04.745 [DEBUG] [Thread-16482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:21:04.745 [DEBUG] [Thread-16482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:21:04.745 [DEBUG] [Thread-16482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:21:04.745 [DEBUG] [Thread-16482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:21:04.745 [DEBUG] [Thread-16482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:21:04.745 [DEBUG] [Thread-16482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] client lang: <none>
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] server lang: <none>
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] kex follows: False
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] Compression: none
2025-11-12T13:21:04.746 [DEBUG] [Thread-16482] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:21:04.805 [DEBUG] [Thread-16482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:21:04.805 [DEBUG] [Thread-16482] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:21:04.805 [DEBUG] [Thread-16482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:21:04.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:21:04.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:21:04.861 [DEBUG] [Thread-16482] [transport.py] [_log()] userauth is OK
2025-11-12T13:21:04.861 [DEBUG] [Thread-16482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:21:04.861 [DEBUG] [Thread-16482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:21:04.861 [DEBUG] [Thread-16482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:21:04.862 [DEBUG] [Thread-16482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:21:04.876 [INFO] [Thread-16482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:21:04.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:21:04.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:21:05.777 [DEBUG] [Thread-16482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:21:05.778 [DEBUG] [Thread-16482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:21:05.825 [DEBUG] [Thread-16482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:21:05.825 [DEBUG] [Thread-16482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:21:05.833 [DEBUG] [Thread-16482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:21:05.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:21:05.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')
2025-11-12T13:21:05.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-11-12T13:21:05.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:21:05.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:21:05.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:21:05.864 [DEBUG] [Thread-16482] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:21:13.006 [DEBUG] [Thread-16484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:21:18.257 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:21:18.258 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:21:28.057 [DEBUG] [Thread-16485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:21:33.832 [DEBUG] [Thread-16486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:21:35.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:21:35.887 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:21:35.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-11-12T13:21:36.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 21, 10), 37.5, 7.74, 0.0, 27.37, 28.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:21:36.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:21:10
2025-11-12T13:21:36.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:21:36.791 [DEBUG] [Thread-16487] [transport.py] [_log()] starting thread (client mode): 0x14921660
2025-11-12T13:21:36.791 [DEBUG] [Thread-16487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:21:36.811 [DEBUG] [Thread-16487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:21:36.812 [INFO] [Thread-16487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:21:36.814 [DEBUG] [Thread-16487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] client lang: <none>
2025-11-12T13:21:36.815 [DEBUG] [Thread-16487] [transport.py] [_log()] server lang: <none>
2025-11-12T13:21:36.816 [DEBUG] [Thread-16487] [transport.py] [_log()] kex follows: False
2025-11-12T13:21:36.816 [DEBUG] [Thread-16487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:21:36.816 [DEBUG] [Thread-16487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:21:36.816 [DEBUG] [Thread-16487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:21:36.816 [DEBUG] [Thread-16487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:21:36.816 [DEBUG] [Thread-16487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:21:36.816 [DEBUG] [Thread-16487] [transport.py] [_log()] Compression: none
2025-11-12T13:21:36.816 [DEBUG] [Thread-16487] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:21:36.834 [DEBUG] [Thread-16487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:21:36.834 [DEBUG] [Thread-16487] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:21:36.835 [DEBUG] [Thread-16487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:21:36.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:21:36.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:21:36.876 [DEBUG] [Thread-16487] [transport.py] [_log()] userauth is OK
2025-11-12T13:21:36.876 [DEBUG] [Thread-16487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:21:36.877 [DEBUG] [Thread-16487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:21:36.877 [DEBUG] [Thread-16487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:21:36.877 [DEBUG] [Thread-16487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:21:36.897 [INFO] [Thread-16487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:21:36.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:21:37.515 [DEBUG] [Thread-16487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:21:37.515 [DEBUG] [Thread-16487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:21:37.525 [DEBUG] [Thread-16487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:21:37.557 [DEBUG] [Thread-16487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:21:37.557 [DEBUG] [Thread-16487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:21:37.560 [DEBUG] [Thread-16487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:21:37.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:21:37.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:21:37.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:21:37.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:21:37.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:21:37.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:21:37.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:21:37.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:21:37.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:21:37.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.473005 -999.00  +27.30  29.35     13   -2.80 1 1 1 1 1   888    0 32.72 126.62 ----- 32.4 29.4 284.4 38.5 32.6 -27.8 32.0 -26.7 31.7 -26.8 32.8 -25.5
2025-11-12T13:21:37.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:21:37.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:21:37.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.473005
2025-11-12T13:21:37.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:21:37.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:21:37.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:21:37.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:21:37.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:21:37.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:21:10', tmtdew=37.5, humidity=7.74, cloud=0.0, wind=27.37, temperature=28.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:21:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:21:37.588 [DEBUG] [Thread-16487] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:21:37.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:21:37.683 [DEBUG] [Thread-16490] [transport.py] [_log()] starting thread (client mode): 0x149a8880
2025-11-12T13:21:37.683 [DEBUG] [Thread-16490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:21:37.698 [DEBUG] [Thread-16490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:21:37.699 [INFO] [Thread-16490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:21:37.706 [DEBUG] [Thread-16490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] client lang: <none>
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] server lang: <none>
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] kex follows: False
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] Compression: none
2025-11-12T13:21:37.707 [DEBUG] [Thread-16490] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:21:37.770 [DEBUG] [Thread-16490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:21:37.771 [DEBUG] [Thread-16490] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:21:37.772 [DEBUG] [Thread-16490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:21:37.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:21:37.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:21:37.826 [DEBUG] [Thread-16490] [transport.py] [_log()] userauth is OK
2025-11-12T13:21:37.826 [DEBUG] [Thread-16490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:21:37.826 [DEBUG] [Thread-16490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:21:37.826 [DEBUG] [Thread-16490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:21:37.826 [DEBUG] [Thread-16490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:21:37.845 [INFO] [Thread-16490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:21:37.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:21:37.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:21:38.707 [DEBUG] [Thread-16490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:21:38.707 [DEBUG] [Thread-16490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:21:38.755 [DEBUG] [Thread-16490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:21:38.755 [DEBUG] [Thread-16490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:21:38.764 [DEBUG] [Thread-16490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:21:38.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:21:38.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:21:38.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-11-12T13:21:38.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:21:38.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:21:38.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:21:38.801 [DEBUG] [Thread-16490] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:21:43.087 [DEBUG] [Thread-16492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:21:58.126 [DEBUG] [Thread-16493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:22:08.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:22:08.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:22: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-11-12T13:22:09.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 21, 42), 37.72, 7.66, 0.0, 29.36, 27.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:22:09.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:21:42
2025-11-12T13:22:09.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:22:09.710 [DEBUG] [Thread-16494] [transport.py] [_log()] starting thread (client mode): 0x149a8c40
2025-11-12T13:22:09.710 [DEBUG] [Thread-16494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:22:09.732 [DEBUG] [Thread-16494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:22:09.732 [INFO] [Thread-16494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] client lang: <none>
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] server lang: <none>
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] kex follows: False
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] Compression: none
2025-11-12T13:22:09.735 [DEBUG] [Thread-16494] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:22:09.752 [DEBUG] [Thread-16494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:22:09.753 [DEBUG] [Thread-16494] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:22:09.753 [DEBUG] [Thread-16494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:22:09.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:22:09.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:22:09.755 [DEBUG] [Thread-16494] [transport.py] [_log()] userauth is OK
2025-11-12T13:22:09.756 [DEBUG] [Thread-16494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:22:09.756 [DEBUG] [Thread-16494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:22:09.756 [DEBUG] [Thread-16494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:22:09.756 [DEBUG] [Thread-16494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:22:09.779 [INFO] [Thread-16494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:22:09.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:22:10.413 [DEBUG] [Thread-16494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:22:10.414 [DEBUG] [Thread-16494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:22:10.414 [DEBUG] [Thread-16494] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:22:10.455 [DEBUG] [Thread-16494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:22:10.455 [DEBUG] [Thread-16494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:22:10.458 [DEBUG] [Thread-16494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:22:10.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:22:10.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:22:10.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:22:10.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:22:10.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:22:10.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:22:10.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:22:10.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:22:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:22:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.473352 -999.00  +27.30  20.91     13   -3.00 1 1 1 1 1   888    0 32.95 140.33 ----- 24.9 20.9 291.9 35.9 32.5 -25.8 32.0 -26.0 31.8 -27.8 32.7 -25.4
2025-11-12T13:22:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:22:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:22:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.473352
2025-11-12T13:22:10.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:22:10.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:22:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:22:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:22:10.487 [DEBUG] [Thread-16494] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:22:10.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:22:10.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:21:42', tmtdew=37.72, humidity=7.66, cloud=0.0, wind=29.36, temperature=27.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:21:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:22:10.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:22:10.583 [DEBUG] [Thread-16497] [transport.py] [_log()] starting thread (client mode): 0x1493d7b0
2025-11-12T13:22:10.583 [DEBUG] [Thread-16497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:22:10.600 [DEBUG] [Thread-16497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:22:10.600 [INFO] [Thread-16497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:22:10.608 [DEBUG] [Thread-16497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:22:10.608 [DEBUG] [Thread-16497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:22:10.608 [DEBUG] [Thread-16497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:22:10.608 [DEBUG] [Thread-16497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:22:10.608 [DEBUG] [Thread-16497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:22:10.608 [DEBUG] [Thread-16497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:22:10.608 [DEBUG] [Thread-16497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] client lang: <none>
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] server lang: <none>
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] kex follows: False
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] Compression: none
2025-11-12T13:22:10.609 [DEBUG] [Thread-16497] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:22:10.666 [DEBUG] [Thread-16497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:22:10.667 [DEBUG] [Thread-16497] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:22:10.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:22:10.668 [DEBUG] [Thread-16497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:22:10.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:22:10.722 [DEBUG] [Thread-16497] [transport.py] [_log()] userauth is OK
2025-11-12T13:22:10.722 [DEBUG] [Thread-16497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:22:10.722 [DEBUG] [Thread-16497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:22:10.723 [DEBUG] [Thread-16497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:22:10.723 [DEBUG] [Thread-16497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:22:10.742 [INFO] [Thread-16497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:22:10.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:22:10.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:22:11.623 [DEBUG] [Thread-16497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:22:11.623 [DEBUG] [Thread-16497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:22:11.671 [DEBUG] [Thread-16497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:22:11.672 [DEBUG] [Thread-16497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:22:11.681 [DEBUG] [Thread-16497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:22:11.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:22:11.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-11-12T13:22:11.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-11-12T13:22:11.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:22:11.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:22:11.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:22:11.716 [DEBUG] [Thread-16497] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:22:13.165 [DEBUG] [Thread-16499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:22:18.399 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:22:18.401 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:22:28.216 [DEBUG] [Thread-16500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:22:33.886 [DEBUG] [Thread-16501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:22:41.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:22:41.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:22:41.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-11-12T13:22:42.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 22, 14), 37.8, 7.61, 0.0, 31.62, 27.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:22:42.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:22:14
2025-11-12T13:22:42.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:22:42.622 [DEBUG] [Thread-16502] [transport.py] [_log()] starting thread (client mode): 0x173fb580
2025-11-12T13:22:42.623 [DEBUG] [Thread-16502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:22:42.644 [DEBUG] [Thread-16502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:22:42.644 [INFO] [Thread-16502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:22:42.648 [DEBUG] [Thread-16502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:22:42.648 [DEBUG] [Thread-16502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:22:42.648 [DEBUG] [Thread-16502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:22:42.648 [DEBUG] [Thread-16502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] client lang: <none>
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] server lang: <none>
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] kex follows: False
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:22:42.649 [DEBUG] [Thread-16502] [transport.py] [_log()] Compression: none
2025-11-12T13:22:42.650 [DEBUG] [Thread-16502] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:22:42.669 [DEBUG] [Thread-16502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:22:42.670 [DEBUG] [Thread-16502] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:22:42.670 [DEBUG] [Thread-16502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:22:42.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:22:42.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:22:42.674 [DEBUG] [Thread-16502] [transport.py] [_log()] userauth is OK
2025-11-12T13:22:42.674 [DEBUG] [Thread-16502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:22:42.674 [DEBUG] [Thread-16502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:22:42.674 [DEBUG] [Thread-16502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:22:42.675 [DEBUG] [Thread-16502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:22:42.700 [INFO] [Thread-16502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:22:42.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:22:43.255 [DEBUG] [Thread-16504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:22:43.349 [DEBUG] [Thread-16502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:22:43.349 [DEBUG] [Thread-16502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:22:43.350 [DEBUG] [Thread-16502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:22:43.390 [DEBUG] [Thread-16502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:22:43.390 [DEBUG] [Thread-16502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:22:43.393 [DEBUG] [Thread-16502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:22:43.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:22:43.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:22:43.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:22:43.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:22:43.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:22:43.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:22:43.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:22:43.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:22:43.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:22:43.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.473699 -999.00  +26.70  21.83     14   -2.80 1 1 1 1 1   888    0 32.93 138.33 ----- 19.1 21.8 279.2 30.2 32.3 -28.6 32.0 -25.5 31.2 -26.4 32.5 -28.5
2025-11-12T13:22:43.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:22:43.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:22:43.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.473699
2025-11-12T13:22:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:22:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:22:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:22:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:22:43.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:22:43.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:22:14', tmtdew=37.8, humidity=7.61, cloud=0.0, wind=31.62, temperature=27.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:22:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:22:43.421 [DEBUG] [Thread-16502] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:22:43.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:22:43.516 [DEBUG] [Thread-16506] [transport.py] [_log()] starting thread (client mode): 0x173be440
2025-11-12T13:22:43.516 [DEBUG] [Thread-16506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:22:43.531 [DEBUG] [Thread-16506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:22:43.531 [INFO] [Thread-16506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:22:43.538 [DEBUG] [Thread-16506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:22:43.538 [DEBUG] [Thread-16506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:22:43.538 [DEBUG] [Thread-16506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] client lang: <none>
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] server lang: <none>
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] kex follows: False
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] Compression: none
2025-11-12T13:22:43.539 [DEBUG] [Thread-16506] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:22:43.598 [DEBUG] [Thread-16506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:22:43.598 [DEBUG] [Thread-16506] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:22:43.608 [DEBUG] [Thread-16506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:22:43.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:22:43.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:22:43.654 [DEBUG] [Thread-16506] [transport.py] [_log()] userauth is OK
2025-11-12T13:22:43.654 [DEBUG] [Thread-16506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:22:43.654 [DEBUG] [Thread-16506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:22:43.654 [DEBUG] [Thread-16506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:22:43.655 [DEBUG] [Thread-16506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:22:43.674 [INFO] [Thread-16506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:22:43.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:22:43.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:22:44.516 [DEBUG] [Thread-16506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:22:44.516 [DEBUG] [Thread-16506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:22:44.564 [DEBUG] [Thread-16506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:22:44.565 [DEBUG] [Thread-16506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:22:44.573 [DEBUG] [Thread-16506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:22:44.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:22:44.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-11-12T13:22:44.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:22:44.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:22:44.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:22:44.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:22:44.610 [DEBUG] [Thread-16506] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:22:58.295 [DEBUG] [Thread-16508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:23:13.344 [DEBUG] [Thread-16509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:23:14.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:23:14.633 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:23:14.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-11-12T13:23:15.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 22, 46), 37.63, 7.76, 0.0, 23.75, 27.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:23:15.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:22:46
2025-11-12T13:23:15.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:23:15.539 [DEBUG] [Thread-16510] [transport.py] [_log()] starting thread (client mode): 0x17345d80
2025-11-12T13:23:15.539 [DEBUG] [Thread-16510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:23:15.559 [DEBUG] [Thread-16510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:23:15.560 [INFO] [Thread-16510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:23:15.563 [DEBUG] [Thread-16510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:23:15.563 [DEBUG] [Thread-16510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] client lang: <none>
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] server lang: <none>
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] kex follows: False
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] Compression: none
2025-11-12T13:23:15.564 [DEBUG] [Thread-16510] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:23:15.582 [DEBUG] [Thread-16510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:23:15.582 [DEBUG] [Thread-16510] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:23:15.583 [DEBUG] [Thread-16510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:23:15.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:23:15.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:23:15.585 [DEBUG] [Thread-16510] [transport.py] [_log()] userauth is OK
2025-11-12T13:23:15.585 [DEBUG] [Thread-16510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:23:15.585 [DEBUG] [Thread-16510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:23:15.586 [DEBUG] [Thread-16510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:23:15.586 [DEBUG] [Thread-16510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:23:15.600 [INFO] [Thread-16510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:23:15.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:23:16.221 [DEBUG] [Thread-16510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:23:16.221 [DEBUG] [Thread-16510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:23:16.222 [DEBUG] [Thread-16510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:23:16.263 [DEBUG] [Thread-16510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:23:16.263 [DEBUG] [Thread-16510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:23:16.266 [DEBUG] [Thread-16510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:23:16.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:23:16.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:23:16.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:23:16.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:23:16.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:23:16.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:23:16.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:23:16.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:23:16.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:23:16.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.474047 -999.00  +26.80  19.51     14   -2.00 1 1 1 1 1   888    0 32.92 135.31 ----- 17.9 19.5 291.6 22.8 32.6 -27.1 32.1 -25.4 31.7 -23.8 32.7 -26.0
2025-11-12T13:23:16.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:23:16.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:23:16.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.474047
2025-11-12T13:23:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:23:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:23:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:23:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:23:16.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:23:16.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:22:46', tmtdew=37.63, humidity=7.76, cloud=0.0, wind=23.75, temperature=27.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:22:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:23:16.295 [DEBUG] [Thread-16510] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:23:16.378 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:23:16.390 [DEBUG] [Thread-16513] [transport.py] [_log()] starting thread (client mode): 0x17347370
2025-11-12T13:23:16.390 [DEBUG] [Thread-16513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:23:16.405 [DEBUG] [Thread-16513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:23:16.405 [INFO] [Thread-16513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] client lang: <none>
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] server lang: <none>
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] kex follows: False
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:23:16.413 [DEBUG] [Thread-16513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:23:16.414 [DEBUG] [Thread-16513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:23:16.414 [DEBUG] [Thread-16513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:23:16.414 [DEBUG] [Thread-16513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:23:16.414 [DEBUG] [Thread-16513] [transport.py] [_log()] Compression: none
2025-11-12T13:23:16.414 [DEBUG] [Thread-16513] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:23:16.470 [DEBUG] [Thread-16513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:23:16.470 [DEBUG] [Thread-16513] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:23:16.471 [DEBUG] [Thread-16513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:23:16.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:23:16.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:23:16.526 [DEBUG] [Thread-16513] [transport.py] [_log()] userauth is OK
2025-11-12T13:23:16.526 [DEBUG] [Thread-16513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:23:16.526 [DEBUG] [Thread-16513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:23:16.526 [DEBUG] [Thread-16513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:23:16.527 [DEBUG] [Thread-16513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:23:16.545 [INFO] [Thread-16513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:23:16.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:23:16.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:23:17.403 [DEBUG] [Thread-16513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:23:17.403 [DEBUG] [Thread-16513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:23:17.452 [DEBUG] [Thread-16513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:23:17.452 [DEBUG] [Thread-16513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:23:17.463 [DEBUG] [Thread-16513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:23:17.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:23:17.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-11-12T13:23:17.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-11-12T13:23:17.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:23:17.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:23:17.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:23:17.500 [DEBUG] [Thread-16513] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:23:18.541 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:23:18.542 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:23:28.381 [DEBUG] [Thread-16515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:23:33.948 [DEBUG] [Thread-16516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:23:43.428 [DEBUG] [Thread-16517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:23:47.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:23:47.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:23:47.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:23:48.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 23, 18), 36.26, 8.54, 0.0, 21.84, 27.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:23:48.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:23:18
2025-11-12T13:23:48.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:23:48.429 [DEBUG] [Thread-16518] [transport.py] [_log()] starting thread (client mode): 0x173bd120
2025-11-12T13:23:48.429 [DEBUG] [Thread-16518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:23:48.450 [DEBUG] [Thread-16518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:23:48.450 [INFO] [Thread-16518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:23:48.453 [DEBUG] [Thread-16518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:23:48.453 [DEBUG] [Thread-16518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:23:48.453 [DEBUG] [Thread-16518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:23:48.453 [DEBUG] [Thread-16518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:23:48.453 [DEBUG] [Thread-16518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] client lang: <none>
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] server lang: <none>
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] kex follows: False
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] Compression: none
2025-11-12T13:23:48.454 [DEBUG] [Thread-16518] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:23:48.475 [DEBUG] [Thread-16518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:23:48.476 [DEBUG] [Thread-16518] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:23:48.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:23:48.477 [DEBUG] [Thread-16518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:23:48.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:23:48.479 [DEBUG] [Thread-16518] [transport.py] [_log()] userauth is OK
2025-11-12T13:23:48.479 [DEBUG] [Thread-16518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:23:48.479 [DEBUG] [Thread-16518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:23:48.479 [DEBUG] [Thread-16518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:23:48.479 [DEBUG] [Thread-16518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:23:48.513 [INFO] [Thread-16518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:23:48.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:23:49.146 [DEBUG] [Thread-16518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:23:49.146 [DEBUG] [Thread-16518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:23:49.147 [DEBUG] [Thread-16518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:23:49.187 [DEBUG] [Thread-16518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:23:49.187 [DEBUG] [Thread-16518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:23:49.190 [DEBUG] [Thread-16518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:23:49.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:23:49.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:23:49.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:23:49.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:23:49.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:23:49.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:23:49.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:23:49.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:23:49.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:23:49.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.474394 -999.00  +27.00  26.02     14   -1.80 1 1 1 1 1   888    0 32.27 125.80 ----- 22.4 26.0 271.8 30.9 32.6 -26.9 32.0 -25.7 31.8 -23.9 32.7 -26.6
2025-11-12T13:23:49.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:23:49.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:23:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.474394
2025-11-12T13:23:49.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:23:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:23:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:23:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:23:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:23:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:23:18', tmtdew=36.26, humidity=8.54, cloud=0.0, wind=21.84, temperature=27.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:23:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:23:49.217 [DEBUG] [Thread-16518] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:23:49.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:23:49.308 [DEBUG] [Thread-16521] [transport.py] [_log()] starting thread (client mode): 0x17347580
2025-11-12T13:23:49.308 [DEBUG] [Thread-16521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:23:49.323 [DEBUG] [Thread-16521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:23:49.323 [INFO] [Thread-16521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:23:49.330 [DEBUG] [Thread-16521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:23:49.330 [DEBUG] [Thread-16521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:23:49.330 [DEBUG] [Thread-16521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] client lang: <none>
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] server lang: <none>
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] kex follows: False
2025-11-12T13:23:49.331 [DEBUG] [Thread-16521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:23:49.332 [DEBUG] [Thread-16521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:23:49.332 [DEBUG] [Thread-16521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:23:49.332 [DEBUG] [Thread-16521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:23:49.332 [DEBUG] [Thread-16521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:23:49.332 [DEBUG] [Thread-16521] [transport.py] [_log()] Compression: none
2025-11-12T13:23:49.332 [DEBUG] [Thread-16521] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:23:49.394 [DEBUG] [Thread-16521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:23:49.395 [DEBUG] [Thread-16521] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:23:49.396 [DEBUG] [Thread-16521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:23:49.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:23:49.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:23:49.449 [DEBUG] [Thread-16521] [transport.py] [_log()] userauth is OK
2025-11-12T13:23:49.449 [DEBUG] [Thread-16521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:23:49.450 [DEBUG] [Thread-16521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:23:49.450 [DEBUG] [Thread-16521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:23:49.450 [DEBUG] [Thread-16521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:23:49.478 [INFO] [Thread-16521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:23:49.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:23:49.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:23:50.326 [DEBUG] [Thread-16521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:23:50.326 [DEBUG] [Thread-16521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:23:50.373 [DEBUG] [Thread-16521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:23:50.373 [DEBUG] [Thread-16521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:23:50.382 [DEBUG] [Thread-16521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:23:50.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:23:50.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:23:50.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-11-12T13:23:50.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:23:50.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:23:50.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:23:50.416 [DEBUG] [Thread-16521] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:23:58.465 [DEBUG] [Thread-16523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:24:13.516 [DEBUG] [Thread-16524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:24:18.682 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:24:18.683 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:24:20.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:24:20.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:24:20.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-11-12T13:24:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 23, 50), 34.99, 9.5, 0.0, 21.07, 27.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:24:21.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:23:50
2025-11-12T13:24:21.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:24:21.375 [DEBUG] [Thread-16525] [transport.py] [_log()] starting thread (client mode): 0x17344520
2025-11-12T13:24:21.376 [DEBUG] [Thread-16525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:24:21.396 [DEBUG] [Thread-16525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:24:21.396 [INFO] [Thread-16525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:24:21.399 [DEBUG] [Thread-16525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:24:21.399 [DEBUG] [Thread-16525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:24:21.399 [DEBUG] [Thread-16525] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:24:21.399 [DEBUG] [Thread-16525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:24:21.399 [DEBUG] [Thread-16525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:24:21.399 [DEBUG] [Thread-16525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:24:21.399 [DEBUG] [Thread-16525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] client lang: <none>
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] server lang: <none>
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] kex follows: False
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] Compression: none
2025-11-12T13:24:21.400 [DEBUG] [Thread-16525] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:24:21.414 [DEBUG] [Thread-16525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:24:21.415 [DEBUG] [Thread-16525] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:24:21.415 [DEBUG] [Thread-16525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:24:21.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:24:21.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:24:21.416 [DEBUG] [Thread-16525] [transport.py] [_log()] userauth is OK
2025-11-12T13:24:21.416 [DEBUG] [Thread-16525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:24:21.416 [DEBUG] [Thread-16525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:24:21.416 [DEBUG] [Thread-16525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:24:21.416 [DEBUG] [Thread-16525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:24:21.424 [INFO] [Thread-16525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:24:21.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:24:22.107 [DEBUG] [Thread-16525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:24:22.108 [DEBUG] [Thread-16525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:24:22.108 [DEBUG] [Thread-16525] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:24:22.149 [DEBUG] [Thread-16525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:24:22.149 [DEBUG] [Thread-16525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:24:22.152 [DEBUG] [Thread-16525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:24:22.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:24:22.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:24:22.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:24:22.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:24:22.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:24:22.179 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:24:22.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:24:22.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:24:22.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:24:22.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.474741 -999.00  +26.70  31.15     15   -1.60 1 1 2 1 1   888    0 32.75 124.08 ----- 24.1 31.1 272.4 39.8 32.5 -28.5 31.9 -25.5 31.6 -29.3 32.5 -26.8
2025-11-12T13:24:22.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:24:22.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:24:22.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.474741
2025-11-12T13:24:22.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:24:22.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:24:22.181 [DEBUG] [Thread-16525] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:24:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:24:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:24:22.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:24:22.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:23:50', tmtdew=34.99, humidity=9.5, cloud=0.0, wind=21.07, temperature=27.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:23:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:24:22.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:24:22.290 [DEBUG] [Thread-16528] [transport.py] [_log()] starting thread (client mode): 0x14922710
2025-11-12T13:24:22.290 [DEBUG] [Thread-16528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:24:22.304 [DEBUG] [Thread-16528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:24:22.305 [INFO] [Thread-16528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:24:22.312 [DEBUG] [Thread-16528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:24:22.312 [DEBUG] [Thread-16528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:24:22.312 [DEBUG] [Thread-16528] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:24:22.312 [DEBUG] [Thread-16528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:24:22.312 [DEBUG] [Thread-16528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] client lang: <none>
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] server lang: <none>
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] kex follows: False
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:24:22.313 [DEBUG] [Thread-16528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:24:22.314 [DEBUG] [Thread-16528] [transport.py] [_log()] Compression: none
2025-11-12T13:24:22.314 [DEBUG] [Thread-16528] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:24:22.369 [DEBUG] [Thread-16528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:24:22.369 [DEBUG] [Thread-16528] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:24:22.369 [DEBUG] [Thread-16528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:24:22.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:24:22.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:24:22.426 [DEBUG] [Thread-16528] [transport.py] [_log()] userauth is OK
2025-11-12T13:24:22.426 [DEBUG] [Thread-16528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:24:22.426 [DEBUG] [Thread-16528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:24:22.426 [DEBUG] [Thread-16528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:24:22.426 [DEBUG] [Thread-16528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:24:22.439 [INFO] [Thread-16528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:24:22.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:24:22.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:24:23.302 [DEBUG] [Thread-16528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:24:23.302 [DEBUG] [Thread-16528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:24:23.350 [DEBUG] [Thread-16528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:24:23.350 [DEBUG] [Thread-16528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:24:23.358 [DEBUG] [Thread-16528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:24:23.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:24:23.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-11-12T13:24:23.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:24:23.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:24:23.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:24:23.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:24:23.391 [DEBUG] [Thread-16528] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:24:28.545 [DEBUG] [Thread-16530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:24:34.006 [DEBUG] [Thread-16531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:24:43.602 [DEBUG] [Thread-16532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:24:53.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:24:53.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:24:53.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-11-12T13:24:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 24, 22), 34.77, 9.65, 0.0, 30.45, 27.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:24:54.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:24:22
2025-11-12T13:24:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:24:54.277 [DEBUG] [Thread-16533] [transport.py] [_log()] starting thread (client mode): 0x19dda170
2025-11-12T13:24:54.277 [DEBUG] [Thread-16533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:24:54.299 [DEBUG] [Thread-16533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:24:54.299 [INFO] [Thread-16533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] client lang: <none>
2025-11-12T13:24:54.303 [DEBUG] [Thread-16533] [transport.py] [_log()] server lang: <none>
2025-11-12T13:24:54.304 [DEBUG] [Thread-16533] [transport.py] [_log()] kex follows: False
2025-11-12T13:24:54.304 [DEBUG] [Thread-16533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:24:54.304 [DEBUG] [Thread-16533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:24:54.304 [DEBUG] [Thread-16533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:24:54.304 [DEBUG] [Thread-16533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:24:54.304 [DEBUG] [Thread-16533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:24:54.304 [DEBUG] [Thread-16533] [transport.py] [_log()] Compression: none
2025-11-12T13:24:54.304 [DEBUG] [Thread-16533] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:24:54.319 [DEBUG] [Thread-16533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:24:54.319 [DEBUG] [Thread-16533] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:24:54.319 [DEBUG] [Thread-16533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:24:54.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:24:54.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:24:54.320 [DEBUG] [Thread-16533] [transport.py] [_log()] userauth is OK
2025-11-12T13:24:54.320 [DEBUG] [Thread-16533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:24:54.320 [DEBUG] [Thread-16533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:24:54.320 [DEBUG] [Thread-16533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:24:54.320 [DEBUG] [Thread-16533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:24:54.335 [INFO] [Thread-16533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:24:54.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:24:54.958 [DEBUG] [Thread-16533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:24:54.958 [DEBUG] [Thread-16533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:24:54.958 [DEBUG] [Thread-16533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:24:55.000 [DEBUG] [Thread-16533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:24:55.000 [DEBUG] [Thread-16533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:24:55.002 [DEBUG] [Thread-16533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:24:55.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:24:55.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:24:55.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:24:55.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:24:55.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:24:55.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:24:55.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.475088 -999.00  +26.80  23.09     15   -1.50 1 1 1 1 1   888    0 32.83 116.39 ----- 23.5 23.1 274.2 31.4 32.6 -26.1 32.0 -24.9 31.6 -28.7 32.6 -24.8
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.475088
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:24:55.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:24:22', tmtdew=34.77, humidity=9.65, cloud=0.0, wind=30.45, temperature=27.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:24:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:24:55.022 [DEBUG] [Thread-16533] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:24:55.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:24:55.107 [DEBUG] [Thread-16536] [transport.py] [_log()] starting thread (client mode): 0x1493e710
2025-11-12T13:24:55.107 [DEBUG] [Thread-16536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:24:55.122 [DEBUG] [Thread-16536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:24:55.122 [INFO] [Thread-16536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] client lang: <none>
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] server lang: <none>
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] kex follows: False
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] Compression: none
2025-11-12T13:24:55.130 [DEBUG] [Thread-16536] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:24:55.188 [DEBUG] [Thread-16536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:24:55.188 [DEBUG] [Thread-16536] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:24:55.189 [DEBUG] [Thread-16536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:24:55.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:24:55.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:24:55.245 [DEBUG] [Thread-16536] [transport.py] [_log()] userauth is OK
2025-11-12T13:24:55.245 [DEBUG] [Thread-16536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:24:55.245 [DEBUG] [Thread-16536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:24:55.245 [DEBUG] [Thread-16536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:24:55.245 [DEBUG] [Thread-16536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:24:55.263 [INFO] [Thread-16536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:24:55.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:24:55.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:24:56.198 [DEBUG] [Thread-16536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:24:56.198 [DEBUG] [Thread-16536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:24:56.246 [DEBUG] [Thread-16536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:24:56.246 [DEBUG] [Thread-16536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:24:56.254 [DEBUG] [Thread-16536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:24:56.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:24:56.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-11-12T13:24:56.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-11-12T13:24:56.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:24:56.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:24:56.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:24:56.286 [DEBUG] [Thread-16536] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:24:58.636 [DEBUG] [Thread-16538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:25:13.686 [DEBUG] [Thread-16539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:25:18.829 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:25:18.830 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:25:26.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:25:26.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:25:26.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-11-12T13:25:26.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 24, 54), 35.66, 8.98, 0.0, 36.19, 27.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:25:26.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:24:54
2025-11-12T13:25:27.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:25:27.253 [DEBUG] [Thread-16540] [transport.py] [_log()] starting thread (client mode): 0x149202e0
2025-11-12T13:25:27.253 [DEBUG] [Thread-16540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:25:27.273 [DEBUG] [Thread-16540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:25:27.273 [INFO] [Thread-16540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] client lang: <none>
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] server lang: <none>
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] kex follows: False
2025-11-12T13:25:27.276 [DEBUG] [Thread-16540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:25:27.277 [DEBUG] [Thread-16540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:25:27.277 [DEBUG] [Thread-16540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:25:27.277 [DEBUG] [Thread-16540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:25:27.277 [DEBUG] [Thread-16540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:25:27.277 [DEBUG] [Thread-16540] [transport.py] [_log()] Compression: none
2025-11-12T13:25:27.277 [DEBUG] [Thread-16540] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:25:27.297 [DEBUG] [Thread-16540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:25:27.298 [DEBUG] [Thread-16540] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:25:27.298 [DEBUG] [Thread-16540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:25:27.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:25:27.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:25:27.299 [DEBUG] [Thread-16540] [transport.py] [_log()] userauth is OK
2025-11-12T13:25:27.299 [DEBUG] [Thread-16540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:25:27.299 [DEBUG] [Thread-16540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:25:27.299 [DEBUG] [Thread-16540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:25:27.299 [DEBUG] [Thread-16540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:25:27.312 [INFO] [Thread-16540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:25:27.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:25:27.934 [DEBUG] [Thread-16540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:25:27.934 [DEBUG] [Thread-16540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:25:27.934 [DEBUG] [Thread-16540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:25:27.975 [DEBUG] [Thread-16540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:25:27.975 [DEBUG] [Thread-16540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:25:27.978 [DEBUG] [Thread-16540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:25:27.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:25:27.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:25:27.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:25:27.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:25:27.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:25:27.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:25:27.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:25:27.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.475436 -999.00  +27.20  22.45     14   -1.90 1 1 1 1 1   888    0 32.81 108.03 ----- 23.4 22.4 279.6 31.1 32.4 -27.8 32.0 -24.7 31.5 -24.7 32.5 -26.8
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.475436
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:25:27.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:24:54', tmtdew=35.66, humidity=8.98, cloud=0.0, wind=36.19, temperature=27.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:24:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:25:27.998 [DEBUG] [Thread-16540] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:25:28.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:25:28.083 [DEBUG] [Thread-16543] [transport.py] [_log()] starting thread (client mode): 0x17398160
2025-11-12T13:25:28.083 [DEBUG] [Thread-16543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:25:28.098 [DEBUG] [Thread-16543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:25:28.098 [INFO] [Thread-16543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] client lang: <none>
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] server lang: <none>
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] kex follows: False
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] Compression: none
2025-11-12T13:25:28.106 [DEBUG] [Thread-16543] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:25:28.168 [DEBUG] [Thread-16543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:25:28.168 [DEBUG] [Thread-16543] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:25:28.168 [DEBUG] [Thread-16543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:25:28.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:25:28.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:25:28.225 [DEBUG] [Thread-16543] [transport.py] [_log()] userauth is OK
2025-11-12T13:25:28.225 [DEBUG] [Thread-16543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:25:28.225 [DEBUG] [Thread-16543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:25:28.225 [DEBUG] [Thread-16543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:25:28.225 [DEBUG] [Thread-16543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:25:28.239 [INFO] [Thread-16543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:25:28.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:25:28.239 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:25:28.722 [DEBUG] [Thread-16545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:25:29.129 [DEBUG] [Thread-16543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:25:29.129 [DEBUG] [Thread-16543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:25:29.177 [DEBUG] [Thread-16543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:25:29.177 [DEBUG] [Thread-16543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:25:29.185 [DEBUG] [Thread-16543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:25:29.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:25:29.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-11-12T13:25:29.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-11-12T13:25:29.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:25:29.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:25:29.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:25:29.217 [DEBUG] [Thread-16543] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:25:34.033 [DEBUG] [Thread-16546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:25:43.767 [DEBUG] [Thread-16547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:25:58.802 [DEBUG] [Thread-16548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:25:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:25:59.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:25:59.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-11-12T13:25:59.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 25, 26), 35.91, 8.79, 0.0, 34.21, 27.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:25:59.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:25:26
2025-11-12T13:26:00.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:26:00.188 [DEBUG] [Thread-16549] [transport.py] [_log()] starting thread (client mode): 0x173626e0
2025-11-12T13:26:00.188 [DEBUG] [Thread-16549] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:26:00.209 [DEBUG] [Thread-16549] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:26:00.209 [INFO] [Thread-16549] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] client lang: <none>
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] server lang: <none>
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] kex follows: False
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] Compression: none
2025-11-12T13:26:00.211 [DEBUG] [Thread-16549] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:26:00.227 [DEBUG] [Thread-16549] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:26:00.227 [DEBUG] [Thread-16549] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:26:00.228 [DEBUG] [Thread-16549] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:26:00.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:26:00.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:26:00.228 [DEBUG] [Thread-16549] [transport.py] [_log()] userauth is OK
2025-11-12T13:26:00.228 [DEBUG] [Thread-16549] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:26:00.228 [DEBUG] [Thread-16549] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:26:00.228 [DEBUG] [Thread-16549] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:26:00.228 [DEBUG] [Thread-16549] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:26:00.243 [INFO] [Thread-16549] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:26:00.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:26:00.885 [DEBUG] [Thread-16549] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:26:00.885 [DEBUG] [Thread-16549] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:26:00.885 [DEBUG] [Thread-16549] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:26:00.926 [DEBUG] [Thread-16549] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:26:00.926 [DEBUG] [Thread-16549] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:26:00.929 [DEBUG] [Thread-16549] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:26:00.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:26:00.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:26:00.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:26:00.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:26:00.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:26:00.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:26:00.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:26:00.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:26:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:26:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.476130 -999.00  +27.40  31.95     13   -2.60 1 1 2 1 1   888    0 31.75 98.58 ----- 24.0 31.9 268.4 40.6 32.5 -29.1 32.0 -26.0 31.8 -27.4 32.5 -29.6
2025-11-12T13:26:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:26:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:26:00.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.476130
2025-11-12T13:26:00.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:26:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:26:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:26:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:26:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:26:00.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:25:26', tmtdew=35.91, humidity=8.79, cloud=0.0, wind=34.21, temperature=27.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:25:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:26:00.957 [DEBUG] [Thread-16549] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:26:01.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:26:01.048 [DEBUG] [Thread-16552] [transport.py] [_log()] starting thread (client mode): 0x17360df0
2025-11-12T13:26:01.048 [DEBUG] [Thread-16552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:26:01.062 [DEBUG] [Thread-16552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:26:01.063 [INFO] [Thread-16552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] client lang: <none>
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] server lang: <none>
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] kex follows: False
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:26:01.070 [DEBUG] [Thread-16552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:26:01.071 [DEBUG] [Thread-16552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:26:01.071 [DEBUG] [Thread-16552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:26:01.071 [DEBUG] [Thread-16552] [transport.py] [_log()] Compression: none
2025-11-12T13:26:01.071 [DEBUG] [Thread-16552] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:26:01.130 [DEBUG] [Thread-16552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:26:01.131 [DEBUG] [Thread-16552] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:26:01.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:26:01.132 [DEBUG] [Thread-16552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:26:01.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:26:01.196 [DEBUG] [Thread-16552] [transport.py] [_log()] userauth is OK
2025-11-12T13:26:01.196 [DEBUG] [Thread-16552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:26:01.197 [DEBUG] [Thread-16552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:26:01.197 [DEBUG] [Thread-16552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:26:01.197 [DEBUG] [Thread-16552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:26:01.216 [INFO] [Thread-16552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:26:01.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:26:01.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:26:02.075 [DEBUG] [Thread-16552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:26:02.076 [DEBUG] [Thread-16552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:26:02.124 [DEBUG] [Thread-16552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:26:02.124 [DEBUG] [Thread-16552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:26:02.133 [DEBUG] [Thread-16552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:26:02.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:26:02.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-11-12T13: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') -> 00000000
2025-11-12T13:26:02.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:26:02.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:26:02.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:26:02.169 [DEBUG] [Thread-16552] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:26:13.833 [DEBUG] [Thread-16554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:26:18.970 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:26:18.972 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:26:28.876 [DEBUG] [Thread-16555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:26:32.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:26:32.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:26:32.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-11-12T13:26:32.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 25, 58), 36.08, 8.84, 0.0, 28.78, 27.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:26:32.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:25:58
2025-11-12T13:26:32.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:26:33.091 [DEBUG] [Thread-16556] [transport.py] [_log()] starting thread (client mode): 0x149aa1d0
2025-11-12T13:26:33.091 [DEBUG] [Thread-16556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:26:33.112 [DEBUG] [Thread-16556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:26:33.112 [INFO] [Thread-16556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] client lang: <none>
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] server lang: <none>
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] kex follows: False
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] Compression: none
2025-11-12T13:26:33.115 [DEBUG] [Thread-16556] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:26:33.132 [DEBUG] [Thread-16556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:26:33.133 [DEBUG] [Thread-16556] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:26:33.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:26:33.134 [DEBUG] [Thread-16556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:26:33.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:26:33.136 [DEBUG] [Thread-16556] [transport.py] [_log()] userauth is OK
2025-11-12T13:26:33.136 [DEBUG] [Thread-16556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:26:33.136 [DEBUG] [Thread-16556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:26:33.136 [DEBUG] [Thread-16556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:26:33.136 [DEBUG] [Thread-16556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:26:33.156 [INFO] [Thread-16556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:26:33.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:26:33.757 [DEBUG] [Thread-16556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:26:33.757 [DEBUG] [Thread-16556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:26:33.758 [DEBUG] [Thread-16556] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:26:33.798 [DEBUG] [Thread-16556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:26:33.798 [DEBUG] [Thread-16556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:26:33.801 [DEBUG] [Thread-16556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:26:33.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:26:33.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:26:33.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:26:33.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:26:33.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:26:33.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:26:33.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:26:33.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:26:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:26:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.476477 -999.00  +26.90  23.44     13   -2.90 1 1 1 1 1   888    0 32.00 98.22 ----- 32.2 23.4 252.8 46.4 32.4 -28.9 31.9 -27.2 31.6 -26.2 32.3 -28.8
2025-11-12T13:26:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:26:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:26:33.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.476477
2025-11-12T13:26:33.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:26:33.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:26:33.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:26:33.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:26:33.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:26:33.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:25:58', tmtdew=36.08, humidity=8.84, cloud=0.0, wind=28.78, temperature=27.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:26:07.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:26:33.828 [DEBUG] [Thread-16556] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:26:33.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:26:33.922 [DEBUG] [Thread-16559] [transport.py] [_log()] starting thread (client mode): 0x1739be20
2025-11-12T13:26:33.922 [DEBUG] [Thread-16559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:26:33.937 [DEBUG] [Thread-16559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:26:33.938 [INFO] [Thread-16559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:26:33.945 [DEBUG] [Thread-16559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:26:33.945 [DEBUG] [Thread-16559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:26:33.945 [DEBUG] [Thread-16559] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:26:33.945 [DEBUG] [Thread-16559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] client lang: <none>
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] server lang: <none>
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] kex follows: False
2025-11-12T13:26:33.946 [DEBUG] [Thread-16559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:26:33.947 [DEBUG] [Thread-16559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:26:33.947 [DEBUG] [Thread-16559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:26:33.947 [DEBUG] [Thread-16559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:26:33.947 [DEBUG] [Thread-16559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:26:33.947 [DEBUG] [Thread-16559] [transport.py] [_log()] Compression: none
2025-11-12T13:26:33.947 [DEBUG] [Thread-16559] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:26:34.005 [DEBUG] [Thread-16559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:26:34.006 [DEBUG] [Thread-16559] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:26:34.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:26:34.007 [DEBUG] [Thread-16559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:26:34.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:26:34.061 [DEBUG] [Thread-16559] [transport.py] [_log()] userauth is OK
2025-11-12T13:26:34.061 [DEBUG] [Thread-16559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:26:34.061 [DEBUG] [Thread-16559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:26:34.061 [DEBUG] [Thread-16559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:26:34.061 [DEBUG] [Thread-16559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:26:34.075 [INFO] [Thread-16559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:26:34.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:26:34.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:26:34.078 [DEBUG] [Thread-16561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:26:34.954 [DEBUG] [Thread-16559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:26:34.954 [DEBUG] [Thread-16559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:26:35.007 [DEBUG] [Thread-16559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:26:35.007 [DEBUG] [Thread-16559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:26:35.016 [DEBUG] [Thread-16559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:26:35.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:26:35.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-11-12T13:26:35.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-11-12T13:26:35.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:26:35.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:26:35.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:26:35.054 [DEBUG] [Thread-16559] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:26:43.912 [DEBUG] [Thread-16562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:26:58.959 [DEBUG] [Thread-16563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:27:05.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:27:05.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:27:05.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-11-12T13:27:05.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 27, 2), 36.81, 8.42, 0.0, 28.62, 27.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:27:05.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:27:02
2025-11-12T13:27:05.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:27:05.964 [DEBUG] [Thread-16564] [transport.py] [_log()] starting thread (client mode): 0x1739ad40
2025-11-12T13:27:05.964 [DEBUG] [Thread-16564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:27:05.984 [DEBUG] [Thread-16564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:27:05.985 [INFO] [Thread-16564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:27:05.986 [DEBUG] [Thread-16564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:27:05.986 [DEBUG] [Thread-16564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:27:05.986 [DEBUG] [Thread-16564] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:27:05.986 [DEBUG] [Thread-16564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:27:05.986 [DEBUG] [Thread-16564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:27:05.986 [DEBUG] [Thread-16564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:27:05.986 [DEBUG] [Thread-16564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:27:05.986 [DEBUG] [Thread-16564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] client lang: <none>
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] server lang: <none>
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] kex follows: False
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] Compression: none
2025-11-12T13:27:05.987 [DEBUG] [Thread-16564] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:27:05.996 [DEBUG] [Thread-16564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:27:05.996 [DEBUG] [Thread-16564] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:27:05.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:27:05.998 [DEBUG] [Thread-16564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:27:05.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:27:06.000 [DEBUG] [Thread-16564] [transport.py] [_log()] userauth is OK
2025-11-12T13:27:06.000 [DEBUG] [Thread-16564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:27:06.000 [DEBUG] [Thread-16564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:27:06.000 [DEBUG] [Thread-16564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:27:06.000 [DEBUG] [Thread-16564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:27:06.034 [INFO] [Thread-16564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:27:06.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:27:06.657 [DEBUG] [Thread-16564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:27:06.657 [DEBUG] [Thread-16564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:27:06.658 [DEBUG] [Thread-16564] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:27:06.698 [DEBUG] [Thread-16564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:27:06.698 [DEBUG] [Thread-16564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:27:06.701 [DEBUG] [Thread-16564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:27:06.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:27:06.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:27:06.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:27:06.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:27:06.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:27:06.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:27:06.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:27:06.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:27:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:27:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.476824 -999.00  +26.80  19.17     13   -2.90 1 1 1 1 1   888    0 32.30 111.65 ----- 17.0 19.2 258.4 35.3 32.4 -27.0 31.9 -26.3 31.7 -25.3 32.3 -26.9
2025-11-12T13:27:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:27:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:27:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.476824
2025-11-12T13:27:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:27:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:27:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:27:06.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:27:06.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:27:06.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:27:02', tmtdew=36.81, humidity=8.42, cloud=0.0, wind=28.62, temperature=27.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:26:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:27:06.728 [DEBUG] [Thread-16564] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:27:06.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:27:06.822 [DEBUG] [Thread-16567] [transport.py] [_log()] starting thread (client mode): 0x17399d20
2025-11-12T13:27:06.823 [DEBUG] [Thread-16567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:27:06.837 [DEBUG] [Thread-16567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:27:06.837 [INFO] [Thread-16567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:27:06.845 [DEBUG] [Thread-16567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:27:06.845 [DEBUG] [Thread-16567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:27:06.845 [DEBUG] [Thread-16567] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:27:06.845 [DEBUG] [Thread-16567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:27:06.845 [DEBUG] [Thread-16567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:27:06.845 [DEBUG] [Thread-16567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:27:06.845 [DEBUG] [Thread-16567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] client lang: <none>
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] server lang: <none>
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] kex follows: False
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] Compression: none
2025-11-12T13:27:06.846 [DEBUG] [Thread-16567] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:27:06.906 [DEBUG] [Thread-16567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:27:06.907 [DEBUG] [Thread-16567] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:27:06.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:27:06.908 [DEBUG] [Thread-16567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:27:06.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:27:06.968 [DEBUG] [Thread-16567] [transport.py] [_log()] userauth is OK
2025-11-12T13:27:06.968 [DEBUG] [Thread-16567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:27:06.968 [DEBUG] [Thread-16567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:27:06.968 [DEBUG] [Thread-16567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:27:06.968 [DEBUG] [Thread-16567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:27:06.987 [INFO] [Thread-16567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:27:06.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:27:06.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:27:07.844 [DEBUG] [Thread-16567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:27:07.845 [DEBUG] [Thread-16567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:27:07.893 [DEBUG] [Thread-16567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:27:07.893 [DEBUG] [Thread-16567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:27:07.902 [DEBUG] [Thread-16567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:27:07.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:27:07.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-11-12T13:27:07.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-11-12T13:27:07.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:27:07.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:27:07.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:27:07.940 [DEBUG] [Thread-16567] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:27:13.997 [DEBUG] [Thread-16569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:27:19.114 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:27:19.115 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:27:29.047 [DEBUG] [Thread-16570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:27:34.106 [DEBUG] [Thread-16571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:27:37.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:27:37.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:27:37.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-11-12T13:27:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 27, 34), 36.65, 8.42, 0.0, 25.99, 27.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:27:38.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:27:34
2025-11-12T13:27:38.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:27:38.862 [DEBUG] [Thread-16572] [transport.py] [_log()] starting thread (client mode): 0x14983fd0
2025-11-12T13:27:38.862 [DEBUG] [Thread-16572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:27:38.882 [DEBUG] [Thread-16572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:27:38.882 [INFO] [Thread-16572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:27:38.895 [DEBUG] [Thread-16572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:27:38.895 [DEBUG] [Thread-16572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:27:38.895 [DEBUG] [Thread-16572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:27:38.895 [DEBUG] [Thread-16572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:27:38.895 [DEBUG] [Thread-16572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:27:38.895 [DEBUG] [Thread-16572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] client lang: <none>
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] server lang: <none>
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] kex follows: False
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] Compression: none
2025-11-12T13:27:38.896 [DEBUG] [Thread-16572] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:27:38.914 [DEBUG] [Thread-16572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:27:38.915 [DEBUG] [Thread-16572] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:27:38.915 [DEBUG] [Thread-16572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:27:38.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:27:38.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:27:38.917 [DEBUG] [Thread-16572] [transport.py] [_log()] userauth is OK
2025-11-12T13:27:38.918 [DEBUG] [Thread-16572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:27:38.918 [DEBUG] [Thread-16572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:27:38.918 [DEBUG] [Thread-16572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:27:38.918 [DEBUG] [Thread-16572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:27:38.943 [INFO] [Thread-16572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:27:38.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:27:39.578 [DEBUG] [Thread-16572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:27:39.579 [DEBUG] [Thread-16572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:27:39.579 [DEBUG] [Thread-16572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:27:39.620 [DEBUG] [Thread-16572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:27:39.620 [DEBUG] [Thread-16572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:27:39.623 [DEBUG] [Thread-16572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:27:39.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:27:39.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:27:39.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:27:39.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:27:39.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:27:39.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:27:39.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:27:39.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:27:39.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:27:39.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.477172 -999.00  +26.80  26.30     13   -2.90 1 1 1 1 1   888    0 32.43 116.93 ----- 26.7 26.3 254.4 43.2 32.4 -28.5 31.9 -25.5 31.7 -24.9 32.2 -27.1
2025-11-12T13:27:39.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:27:39.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:27:39.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.477172
2025-11-12T13:27:39.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:27:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:27:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:27:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:27:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:27:39.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:27:34', tmtdew=36.65, humidity=8.42, cloud=0.0, wind=25.99, temperature=27.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:27:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:27:39.651 [DEBUG] [Thread-16572] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:27:39.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:27:39.747 [DEBUG] [Thread-16575] [transport.py] [_log()] starting thread (client mode): 0x14922d70
2025-11-12T13:27:39.747 [DEBUG] [Thread-16575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:27:39.761 [DEBUG] [Thread-16575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:27:39.762 [INFO] [Thread-16575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:27:39.771 [DEBUG] [Thread-16575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] client lang: <none>
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] server lang: <none>
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] kex follows: False
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] Compression: none
2025-11-12T13:27:39.772 [DEBUG] [Thread-16575] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:27:39.835 [DEBUG] [Thread-16575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:27:39.836 [DEBUG] [Thread-16575] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:27:39.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:27:39.837 [DEBUG] [Thread-16575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:27:39.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:27:39.898 [DEBUG] [Thread-16575] [transport.py] [_log()] userauth is OK
2025-11-12T13:27:39.899 [DEBUG] [Thread-16575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:27:39.899 [DEBUG] [Thread-16575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:27:39.899 [DEBUG] [Thread-16575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:27:39.899 [DEBUG] [Thread-16575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:27:39.927 [INFO] [Thread-16575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:27:39.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:27:39.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:27:40.785 [DEBUG] [Thread-16575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:27:40.785 [DEBUG] [Thread-16575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:27:40.826 [DEBUG] [Thread-16575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:27:40.826 [DEBUG] [Thread-16575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:27:40.837 [DEBUG] [Thread-16575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:27:40.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:27:40.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-11-12T13:27:40.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-11-12T13:27:40.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:27:40.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:27:40.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:27:40.875 [DEBUG] [Thread-16575] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:27:44.079 [DEBUG] [Thread-16577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:27:59.139 [DEBUG] [Thread-16578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:28:10.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:28:10.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:28:10.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:28:11.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 28, 6), 36.59, 8.42, 0.0, 32.54, 27.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:28:11.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:28:06
2025-11-12T13:28:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:28:11.793 [DEBUG] [Thread-16579] [transport.py] [_log()] starting thread (client mode): 0x173eb400
2025-11-12T13:28:11.793 [DEBUG] [Thread-16579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:28:11.813 [DEBUG] [Thread-16579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:28:11.813 [INFO] [Thread-16579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] client lang: <none>
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] server lang: <none>
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] kex follows: False
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] Compression: none
2025-11-12T13:28:11.816 [DEBUG] [Thread-16579] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:28:11.834 [DEBUG] [Thread-16579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:28:11.834 [DEBUG] [Thread-16579] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:28:11.834 [DEBUG] [Thread-16579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:28:11.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:28:11.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:28:11.835 [DEBUG] [Thread-16579] [transport.py] [_log()] userauth is OK
2025-11-12T13:28:11.835 [DEBUG] [Thread-16579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:28:11.835 [DEBUG] [Thread-16579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:28:11.835 [DEBUG] [Thread-16579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:28:11.835 [DEBUG] [Thread-16579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:28:11.846 [INFO] [Thread-16579] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:28:11.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:28:12.451 [DEBUG] [Thread-16579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:28:12.451 [DEBUG] [Thread-16579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:28:12.451 [DEBUG] [Thread-16579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:28:12.492 [DEBUG] [Thread-16579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:28:12.492 [DEBUG] [Thread-16579] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:28:12.494 [DEBUG] [Thread-16579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:28:12.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:28:12.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:28:12.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:28:12.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:28:12.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:28:12.513 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:28:12.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:28:12.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:28:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:28:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.477519 -999.00  +27.00  26.47     14   -2.70 1 1 1 1 1   888    0 32.64 116.22 ----- 26.7 26.5 263.6 29.2 32.4 -28.1 31.9 -26.4 31.7 -25.0 32.4 -26.7
2025-11-12T13:28:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:28:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:28:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.477519
2025-11-12T13:28:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:28:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:28:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:28:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:28:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:28:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:28:06', tmtdew=36.59, humidity=8.42, cloud=0.0, wind=32.54, temperature=27.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:27:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:28:12.514 [DEBUG] [Thread-16579] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:28:12.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:28:12.599 [DEBUG] [Thread-16582] [transport.py] [_log()] starting thread (client mode): 0x149622c0
2025-11-12T13:28:12.599 [DEBUG] [Thread-16582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:28:12.616 [DEBUG] [Thread-16582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:28:12.616 [INFO] [Thread-16582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] client lang: <none>
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] server lang: <none>
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] kex follows: False
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:28:12.626 [DEBUG] [Thread-16582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:28:12.627 [DEBUG] [Thread-16582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:28:12.627 [DEBUG] [Thread-16582] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:28:12.627 [DEBUG] [Thread-16582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:28:12.627 [DEBUG] [Thread-16582] [transport.py] [_log()] Compression: none
2025-11-12T13:28:12.627 [DEBUG] [Thread-16582] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:28:12.688 [DEBUG] [Thread-16582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:28:12.688 [DEBUG] [Thread-16582] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:28:12.688 [DEBUG] [Thread-16582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:28:12.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:28:12.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:28:12.745 [DEBUG] [Thread-16582] [transport.py] [_log()] userauth is OK
2025-11-12T13:28:12.745 [DEBUG] [Thread-16582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:28:12.745 [DEBUG] [Thread-16582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:28:12.745 [DEBUG] [Thread-16582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:28:12.745 [DEBUG] [Thread-16582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:28:12.760 [INFO] [Thread-16582] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:28:12.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:28:12.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:28:13.597 [DEBUG] [Thread-16582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:28:13.597 [DEBUG] [Thread-16582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:28:13.645 [DEBUG] [Thread-16582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:28:13.646 [DEBUG] [Thread-16582] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:28:13.655 [DEBUG] [Thread-16582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:28:13.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:28:13.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-11-12T13:28:13.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-11-12T13:28:13.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:28:13.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:28:13.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:28:13.691 [DEBUG] [Thread-16582] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:28:14.175 [DEBUG] [Thread-16584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:28:19.256 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:28:19.257 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:28:29.226 [DEBUG] [Thread-16585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:28:34.140 [DEBUG] [Thread-16586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:28:43.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:28:43.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:28:43.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-11-12T13:28:44.255 [DEBUG] [Thread-16587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:28:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 28, 38), 36.26, 8.52, 0.0, 27.0, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:28:44.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:28:38
2025-11-12T13:28:44.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:28:44.591 [DEBUG] [Thread-16588] [transport.py] [_log()] starting thread (client mode): 0x149227d0
2025-11-12T13:28:44.591 [DEBUG] [Thread-16588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:28:44.612 [DEBUG] [Thread-16588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:28:44.612 [INFO] [Thread-16588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] client lang: <none>
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] server lang: <none>
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] kex follows: False
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] Compression: none
2025-11-12T13:28:44.615 [DEBUG] [Thread-16588] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:28:44.633 [DEBUG] [Thread-16588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:28:44.633 [DEBUG] [Thread-16588] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:28:44.634 [DEBUG] [Thread-16588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:28:44.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:28:44.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:28:44.636 [DEBUG] [Thread-16588] [transport.py] [_log()] userauth is OK
2025-11-12T13:28:44.636 [DEBUG] [Thread-16588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:28:44.636 [DEBUG] [Thread-16588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:28:44.636 [DEBUG] [Thread-16588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:28:44.637 [DEBUG] [Thread-16588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:28:44.653 [INFO] [Thread-16588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:28:44.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:28:45.280 [DEBUG] [Thread-16588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:28:45.280 [DEBUG] [Thread-16588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:28:45.281 [DEBUG] [Thread-16588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:28:45.322 [DEBUG] [Thread-16588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:28:45.322 [DEBUG] [Thread-16588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:28:45.325 [DEBUG] [Thread-16588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:28:45.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:28:45.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:28:45.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:28:45.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:28:45.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:28:45.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:28:45.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:28:45.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:28:45.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:28:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.477866 -999.00  +27.30  15.83     13   -2.50 1 1 1 1 1   888    0 32.24 108.19 ----- 15.8 15.8 248.0 32.6 32.5 -28.0 32.0 -26.0 31.9 -24.7 32.5 -27.3
2025-11-12T13:28:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:28:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:28:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.477866
2025-11-12T13:28:45.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:28:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:28:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:28:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:28:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:28:45.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:28:38', tmtdew=36.26, humidity=8.52, cloud=0.0, wind=27.0, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:28:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:28:45.352 [DEBUG] [Thread-16588] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:28:45.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:28:45.447 [DEBUG] [Thread-16591] [transport.py] [_log()] starting thread (client mode): 0x173bc460
2025-11-12T13:28:45.447 [DEBUG] [Thread-16591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:28:45.461 [DEBUG] [Thread-16591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:28:45.462 [INFO] [Thread-16591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] client lang: <none>
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] server lang: <none>
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] kex follows: False
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:28:45.469 [DEBUG] [Thread-16591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:28:45.470 [DEBUG] [Thread-16591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:28:45.470 [DEBUG] [Thread-16591] [transport.py] [_log()] Compression: none
2025-11-12T13:28:45.470 [DEBUG] [Thread-16591] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:28:45.527 [DEBUG] [Thread-16591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:28:45.527 [DEBUG] [Thread-16591] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:28:45.528 [DEBUG] [Thread-16591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:28:45.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:28:45.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:28:45.585 [DEBUG] [Thread-16591] [transport.py] [_log()] userauth is OK
2025-11-12T13:28:45.585 [DEBUG] [Thread-16591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:28:45.585 [DEBUG] [Thread-16591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:28:45.585 [DEBUG] [Thread-16591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:28:45.585 [DEBUG] [Thread-16591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:28:45.598 [INFO] [Thread-16591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:28:45.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:28:45.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:28:46.464 [DEBUG] [Thread-16591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:28:46.464 [DEBUG] [Thread-16591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:28:46.512 [DEBUG] [Thread-16591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:28:46.512 [DEBUG] [Thread-16591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:28:46.521 [DEBUG] [Thread-16591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:28:46.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:28:46.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:28:46.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:28:46.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:28:46.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:28:46.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:28:46.553 [DEBUG] [Thread-16591] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:28:59.286 [DEBUG] [Thread-16593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:29:14.341 [DEBUG] [Thread-16594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:29:16.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:29:16.575 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:29:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:29:17.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 29, 10), 36.01, 8.67, 0.0, 26.92, 27.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:29:17.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:29:10
2025-11-12T13:29:17.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:29:17.457 [DEBUG] [Thread-16595] [transport.py] [_log()] starting thread (client mode): 0x14961de0
2025-11-12T13:29:17.457 [DEBUG] [Thread-16595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:29:17.478 [DEBUG] [Thread-16595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:29:17.478 [INFO] [Thread-16595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] client lang: <none>
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] server lang: <none>
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] kex follows: False
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] Compression: none
2025-11-12T13:29:17.480 [DEBUG] [Thread-16595] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:29:17.498 [DEBUG] [Thread-16595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:29:17.499 [DEBUG] [Thread-16595] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:29:17.500 [DEBUG] [Thread-16595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:29:17.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:29:17.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:29:17.502 [DEBUG] [Thread-16595] [transport.py] [_log()] userauth is OK
2025-11-12T13:29:17.502 [DEBUG] [Thread-16595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:29:17.502 [DEBUG] [Thread-16595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:29:17.502 [DEBUG] [Thread-16595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:29:17.502 [DEBUG] [Thread-16595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:29:17.537 [INFO] [Thread-16595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:29:17.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:29:18.180 [DEBUG] [Thread-16595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:29:18.180 [DEBUG] [Thread-16595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:29:18.181 [DEBUG] [Thread-16595] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:29:18.222 [DEBUG] [Thread-16595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:29:18.222 [DEBUG] [Thread-16595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:29:18.226 [DEBUG] [Thread-16595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:29:18.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:29:18.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:29:18.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:29:18.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:29:18.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:29:18.251 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:29:18.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:29:18.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:29:18.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:29:18.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.478213 -999.00  +27.20  20.91     14   -2.50 1 1 1 1 1   888    0 32.15 95.65 ----- 20.9 20.9 264.0 26.4 32.6 -26.5 32.1 -25.2 32.0 -24.4 32.5 -27.0
2025-11-12T13:29:18.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:29:18.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:29:18.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.478213
2025-11-12T13:29:18.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:29:18.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:29:18.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:29:18.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:29:18.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:29:18.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:29:10', tmtdew=36.01, humidity=8.67, cloud=0.0, wind=26.92, temperature=27.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:28:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:29:18.254 [DEBUG] [Thread-16595] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:29:18.337 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:29:18.348 [DEBUG] [Thread-16598] [transport.py] [_log()] starting thread (client mode): 0x173e9450
2025-11-12T13:29:18.348 [DEBUG] [Thread-16598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:29:18.371 [DEBUG] [Thread-16598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:29:18.371 [INFO] [Thread-16598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:29:18.378 [DEBUG] [Thread-16598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:29:18.379 [DEBUG] [Thread-16598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:29:18.379 [DEBUG] [Thread-16598] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:29:18.379 [DEBUG] [Thread-16598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:29:18.379 [DEBUG] [Thread-16598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:29:18.379 [DEBUG] [Thread-16598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:29:18.379 [DEBUG] [Thread-16598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:29:18.379 [DEBUG] [Thread-16598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:29:18.380 [DEBUG] [Thread-16598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:29:18.380 [DEBUG] [Thread-16598] [transport.py] [_log()] client lang: <none>
2025-11-12T13:29:18.380 [DEBUG] [Thread-16598] [transport.py] [_log()] server lang: <none>
2025-11-12T13:29:18.380 [DEBUG] [Thread-16598] [transport.py] [_log()] kex follows: False
2025-11-12T13:29:18.380 [DEBUG] [Thread-16598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:29:18.380 [DEBUG] [Thread-16598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:29:18.380 [DEBUG] [Thread-16598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:29:18.380 [DEBUG] [Thread-16598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:29:18.381 [DEBUG] [Thread-16598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:29:18.381 [DEBUG] [Thread-16598] [transport.py] [_log()] Compression: none
2025-11-12T13:29:18.381 [DEBUG] [Thread-16598] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:29:18.439 [DEBUG] [Thread-16598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:29:18.439 [DEBUG] [Thread-16598] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:29:18.440 [DEBUG] [Thread-16598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:29:18.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:29:18.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:29:18.499 [DEBUG] [Thread-16598] [transport.py] [_log()] userauth is OK
2025-11-12T13:29:18.499 [DEBUG] [Thread-16598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:29:18.500 [DEBUG] [Thread-16598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:29:18.500 [DEBUG] [Thread-16598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:29:18.500 [DEBUG] [Thread-16598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:29:18.518 [INFO] [Thread-16598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:29:18.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:29:18.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:29:19.391 [DEBUG] [Thread-16598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:29:19.392 [DEBUG] [Thread-16598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:29:19.399 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:29:19.402 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:29:19.440 [DEBUG] [Thread-16598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:29:19.440 [DEBUG] [Thread-16598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:29:19.449 [DEBUG] [Thread-16598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:29:19.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:29: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')
2025-11-12T13:29:19.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-11-12T13:29:19.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:29:19.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:29:19.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:29:19.486 [DEBUG] [Thread-16598] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:29:29.375 [DEBUG] [Thread-16600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:29:34.173 [DEBUG] [Thread-16601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:29:44.424 [DEBUG] [Thread-16602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:29:49.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:29:49.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:29:49.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-11-12T13:29:50.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 29, 42), 36.74, 8.15, 0.0, 30.75, 27.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:29:50.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:29:42
2025-11-12T13:29:50.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:29:50.393 [DEBUG] [Thread-16603] [transport.py] [_log()] starting thread (client mode): 0x14957ee0
2025-11-12T13:29:50.393 [DEBUG] [Thread-16603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:29:50.412 [DEBUG] [Thread-16603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:29:50.413 [INFO] [Thread-16603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:29:50.416 [DEBUG] [Thread-16603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:29:50.416 [DEBUG] [Thread-16603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:29:50.416 [DEBUG] [Thread-16603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:29:50.416 [DEBUG] [Thread-16603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:29:50.416 [DEBUG] [Thread-16603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:29:50.416 [DEBUG] [Thread-16603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] client lang: <none>
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] server lang: <none>
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] kex follows: False
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] Compression: none
2025-11-12T13:29:50.417 [DEBUG] [Thread-16603] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:29:50.434 [DEBUG] [Thread-16603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:29:50.434 [DEBUG] [Thread-16603] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:29:50.435 [DEBUG] [Thread-16603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:29:50.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:29:50.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:29:50.437 [DEBUG] [Thread-16603] [transport.py] [_log()] userauth is OK
2025-11-12T13:29:50.437 [DEBUG] [Thread-16603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:29:50.437 [DEBUG] [Thread-16603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:29:50.438 [DEBUG] [Thread-16603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:29:50.438 [DEBUG] [Thread-16603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:29:50.474 [INFO] [Thread-16603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:29:50.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:29:51.121 [DEBUG] [Thread-16603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:29:51.121 [DEBUG] [Thread-16603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:29:51.122 [DEBUG] [Thread-16603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:29:51.162 [DEBUG] [Thread-16603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:29:51.163 [DEBUG] [Thread-16603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:29:51.166 [DEBUG] [Thread-16603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:29:51.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:29:51.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:29:51.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:29:51.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:29:51.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:29:51.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:29:51.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:29:51.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:29:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:29:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.478561 -999.00  +27.10  19.59     14   -2.40 1 1 1 1 1   888    0 31.96 85.63 ----- 19.6 19.6 277.4 34.1 32.5 -28.5 32.1 -25.6 31.9 -25.2 32.5 -28.7
2025-11-12T13:29:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:29:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:29:51.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.478561
2025-11-12T13:29:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:29:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:29:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:29:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:29:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:29:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:29:42', tmtdew=36.74, humidity=8.15, cloud=0.0, wind=30.75, temperature=27.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:29:07.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:29:51.192 [DEBUG] [Thread-16603] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:29:51.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:29:51.287 [DEBUG] [Thread-16606] [transport.py] [_log()] starting thread (client mode): 0x173ea860
2025-11-12T13:29:51.287 [DEBUG] [Thread-16606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:29:51.303 [DEBUG] [Thread-16606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:29:51.304 [INFO] [Thread-16606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:29:51.311 [DEBUG] [Thread-16606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] client lang: <none>
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] server lang: <none>
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] kex follows: False
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:29:51.312 [DEBUG] [Thread-16606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:29:51.313 [DEBUG] [Thread-16606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:29:51.313 [DEBUG] [Thread-16606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:29:51.313 [DEBUG] [Thread-16606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:29:51.313 [DEBUG] [Thread-16606] [transport.py] [_log()] Compression: none
2025-11-12T13:29:51.313 [DEBUG] [Thread-16606] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:29:51.369 [DEBUG] [Thread-16606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:29:51.370 [DEBUG] [Thread-16606] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:29:51.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:29:51.371 [DEBUG] [Thread-16606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:29:51.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:29:51.426 [DEBUG] [Thread-16606] [transport.py] [_log()] userauth is OK
2025-11-12T13:29:51.426 [DEBUG] [Thread-16606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:29:51.426 [DEBUG] [Thread-16606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:29:51.426 [DEBUG] [Thread-16606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:29:51.426 [DEBUG] [Thread-16606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:29:51.445 [INFO] [Thread-16606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:29:51.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:29:51.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:29:52.312 [DEBUG] [Thread-16606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:29:52.312 [DEBUG] [Thread-16606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:29:52.359 [DEBUG] [Thread-16606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:29:52.359 [DEBUG] [Thread-16606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:29:52.368 [DEBUG] [Thread-16606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:29:52.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:29:52.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:29:52.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:29:52.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:29:52.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:29:52.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:29:52.402 [DEBUG] [Thread-16606] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:29:59.458 [DEBUG] [Thread-16608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:30:14.505 [DEBUG] [Thread-16609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:30:19.543 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:30:19.545 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:30:22.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:30:22.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:30:22.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-11-12T13:30:23.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 30, 14), 37.42, 7.74, 0.0, 31.67, 27.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:30:23.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:30:14
2025-11-12T13:30:23.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:30:23.289 [DEBUG] [Thread-16610] [transport.py] [_log()] starting thread (client mode): 0x14962f80
2025-11-12T13:30:23.289 [DEBUG] [Thread-16610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:30:23.309 [DEBUG] [Thread-16610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:30:23.309 [INFO] [Thread-16610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] client lang: <none>
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] server lang: <none>
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] kex follows: False
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] Compression: none
2025-11-12T13:30:23.312 [DEBUG] [Thread-16610] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:30:23.330 [DEBUG] [Thread-16610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:30:23.331 [DEBUG] [Thread-16610] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:30:23.331 [DEBUG] [Thread-16610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:30:23.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:30:23.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:30:23.333 [DEBUG] [Thread-16610] [transport.py] [_log()] userauth is OK
2025-11-12T13:30:23.333 [DEBUG] [Thread-16610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:30:23.334 [DEBUG] [Thread-16610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:30:23.334 [DEBUG] [Thread-16610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:30:23.334 [DEBUG] [Thread-16610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:30:23.359 [INFO] [Thread-16610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:30:23.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:30:24.001 [DEBUG] [Thread-16610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:30:24.001 [DEBUG] [Thread-16610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:30:24.002 [DEBUG] [Thread-16610] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:30:24.041 [DEBUG] [Thread-16610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:30:24.042 [DEBUG] [Thread-16610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:30:24.045 [DEBUG] [Thread-16610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:30:24.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:30:24.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:30:24.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:30:24.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:30:24.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:30:24.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:30:24.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:30:24.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:30:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:30:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.479255 -999.00  +26.90  17.32     13   -3.40 1 1 1 1 1   888    0 31.49 80.99 ----- 17.3 17.3 275.0 27.6 32.5 -27.2 32.1 -25.8 31.7 -27.4 32.6 -26.1
2025-11-12T13:30:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:30:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:30:24.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.479255
2025-11-12T13:30:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:30:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:30:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:30:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:30:24.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:30:24.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:30:14', tmtdew=37.42, humidity=7.74, cloud=0.0, wind=31.67, temperature=27.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:30:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:30:24.072 [DEBUG] [Thread-16610] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:30: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-11-12T13:30:24.168 [DEBUG] [Thread-16613] [transport.py] [_log()] starting thread (client mode): 0x14921a80
2025-11-12T13:30:24.168 [DEBUG] [Thread-16613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:30:24.183 [DEBUG] [Thread-16613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:30:24.183 [INFO] [Thread-16613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:30:24.191 [DEBUG] [Thread-16613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:30:24.191 [DEBUG] [Thread-16613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:30:24.191 [DEBUG] [Thread-16613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:30:24.191 [DEBUG] [Thread-16613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:30:24.191 [DEBUG] [Thread-16613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:30:24.191 [DEBUG] [Thread-16613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:30:24.191 [DEBUG] [Thread-16613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:30:24.191 [DEBUG] [Thread-16613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] client lang: <none>
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] server lang: <none>
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] kex follows: False
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] Compression: none
2025-11-12T13:30:24.192 [DEBUG] [Thread-16613] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:30:24.250 [DEBUG] [Thread-16613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:30:24.251 [DEBUG] [Thread-16613] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:30:24.251 [DEBUG] [Thread-16613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:30:24.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:30:24.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:30:24.310 [DEBUG] [Thread-16613] [transport.py] [_log()] userauth is OK
2025-11-12T13:30:24.310 [DEBUG] [Thread-16613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:30:24.310 [DEBUG] [Thread-16613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:30:24.311 [DEBUG] [Thread-16613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:30:24.311 [DEBUG] [Thread-16613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:30:24.330 [INFO] [Thread-16613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:30:24.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:30:24.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:30:25.172 [DEBUG] [Thread-16613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:30:25.173 [DEBUG] [Thread-16613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:30:25.221 [DEBUG] [Thread-16613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:30:25.221 [DEBUG] [Thread-16613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:30:25.230 [DEBUG] [Thread-16613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:30:25.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:30: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-11-12T13:30:25.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:30:25.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:30:25.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:30:25.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:30:25.268 [DEBUG] [Thread-16613] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:30:29.537 [DEBUG] [Thread-16615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:30:34.215 [DEBUG] [Thread-16616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:30:44.585 [DEBUG] [Thread-16617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:30:55.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:30:55.284 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:30:55.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:30:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 30, 46), 37.26, 7.87, 0.0, 22.76, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:30:55.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:30:46
2025-11-12T13:30:56.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:30:56.170 [DEBUG] [Thread-16618] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T13:30:56.170 [DEBUG] [Thread-16618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:30:56.191 [DEBUG] [Thread-16618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:30:56.191 [INFO] [Thread-16618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] client lang: <none>
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] server lang: <none>
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] kex follows: False
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:30:56.194 [DEBUG] [Thread-16618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:30:56.195 [DEBUG] [Thread-16618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:30:56.195 [DEBUG] [Thread-16618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:30:56.195 [DEBUG] [Thread-16618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:30:56.195 [DEBUG] [Thread-16618] [transport.py] [_log()] Compression: none
2025-11-12T13:30:56.195 [DEBUG] [Thread-16618] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:30:56.211 [DEBUG] [Thread-16618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:30:56.212 [DEBUG] [Thread-16618] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:30:56.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:30:56.212 [DEBUG] [Thread-16618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:30:56.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:30:56.214 [DEBUG] [Thread-16618] [transport.py] [_log()] userauth is OK
2025-11-12T13:30:56.214 [DEBUG] [Thread-16618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:30:56.214 [DEBUG] [Thread-16618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:30:56.214 [DEBUG] [Thread-16618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:30:56.214 [DEBUG] [Thread-16618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:30:56.227 [INFO] [Thread-16618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:30:56.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:30:56.871 [DEBUG] [Thread-16618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:30:56.871 [DEBUG] [Thread-16618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:30:56.871 [DEBUG] [Thread-16618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:30:56.912 [DEBUG] [Thread-16618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:30:56.912 [DEBUG] [Thread-16618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:30:56.915 [DEBUG] [Thread-16618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:30:56.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:30:56.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:30:56.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:30:56.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:30:56.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:30:56.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:30:56.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:30:56.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:30:56.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:30:56.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.479602 -999.00  +27.30  15.72     13   -2.90 1 1 1 1 1   888    0 31.67 79.24 ----- 15.7 15.7 267.2 24.2 32.8 -27.0 32.2 -25.4 32.0 -24.3 32.8 -26.9
2025-11-12T13:30:56.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:30:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:30:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.479602
2025-11-12T13:30:56.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:30:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:30:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:30:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:30:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:30:56.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:30:46', tmtdew=37.26, humidity=7.87, cloud=0.0, wind=22.76, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:30:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:30:56.943 [DEBUG] [Thread-16618] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:30:57.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:30:57.039 [DEBUG] [Thread-16621] [transport.py] [_log()] starting thread (client mode): 0x173eb0d0
2025-11-12T13:30:57.039 [DEBUG] [Thread-16621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:30:57.054 [DEBUG] [Thread-16621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:30:57.055 [INFO] [Thread-16621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:30:57.062 [DEBUG] [Thread-16621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:30:57.062 [DEBUG] [Thread-16621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:30:57.062 [DEBUG] [Thread-16621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] client lang: <none>
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] server lang: <none>
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] kex follows: False
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] Compression: none
2025-11-12T13:30:57.063 [DEBUG] [Thread-16621] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:30:57.122 [DEBUG] [Thread-16621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:30:57.122 [DEBUG] [Thread-16621] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:30:57.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:30:57.123 [DEBUG] [Thread-16621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:30:57.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:30:57.177 [DEBUG] [Thread-16621] [transport.py] [_log()] userauth is OK
2025-11-12T13:30:57.178 [DEBUG] [Thread-16621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:30:57.178 [DEBUG] [Thread-16621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:30:57.178 [DEBUG] [Thread-16621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:30:57.178 [DEBUG] [Thread-16621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:30:57.196 [INFO] [Thread-16621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:30:57.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:30:57.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:30:58.053 [DEBUG] [Thread-16621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:30:58.053 [DEBUG] [Thread-16621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:30:58.102 [DEBUG] [Thread-16621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:30:58.102 [DEBUG] [Thread-16621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:30:58.111 [DEBUG] [Thread-16621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:30:58.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:30:58.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-11-12T13:30:58.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-11-12T13:30:58.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:30:58.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:30:58.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:30:58.148 [DEBUG] [Thread-16621] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:30:59.619 [DEBUG] [Thread-16623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:31:14.679 [DEBUG] [Thread-16624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:31:19.688 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:31:19.689 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:31:28.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:31:28.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:31:28.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-11-12T13:31:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 31, 18), 37.16, 7.95, 0.0, 24.08, 27.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:31:28.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:31:18
2025-11-12T13:31:28.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:31:29.037 [DEBUG] [Thread-16625] [transport.py] [_log()] starting thread (client mode): 0x173ea2c0
2025-11-12T13:31:29.037 [DEBUG] [Thread-16625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:31:29.059 [DEBUG] [Thread-16625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:31:29.059 [INFO] [Thread-16625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:31:29.063 [DEBUG] [Thread-16625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] client lang: <none>
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] server lang: <none>
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] kex follows: False
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] Compression: none
2025-11-12T13:31:29.064 [DEBUG] [Thread-16625] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:31:29.082 [DEBUG] [Thread-16625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:31:29.083 [DEBUG] [Thread-16625] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:31:29.083 [DEBUG] [Thread-16625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:31:29.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:31:29.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:31:29.085 [DEBUG] [Thread-16625] [transport.py] [_log()] userauth is OK
2025-11-12T13:31:29.085 [DEBUG] [Thread-16625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:31:29.085 [DEBUG] [Thread-16625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:31:29.085 [DEBUG] [Thread-16625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:31:29.085 [DEBUG] [Thread-16625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:31:29.109 [INFO] [Thread-16625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:31:29.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:31:29.712 [DEBUG] [Thread-16627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:31:29.718 [DEBUG] [Thread-16625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:31:29.718 [DEBUG] [Thread-16625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:31:29.719 [DEBUG] [Thread-16625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:31:29.760 [DEBUG] [Thread-16625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:31:29.760 [DEBUG] [Thread-16625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:31:29.764 [DEBUG] [Thread-16625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:31:29.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:31:29.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:31:29.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:31:29.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:31:29.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:31:29.789 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:31:29.789 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:31:29.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:31:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:31:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.479949 -999.00  +28.00  25.21     11   -4.30 1 1 1 1 1   888    0 31.61 92.99 ----- 25.2 25.2 268.2 27.5 33.0 -26.8 32.3 -27.3 32.2 -29.0 33.0 -25.7
2025-11-12T13:31:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:31:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:31:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.479949
2025-11-12T13:31:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:31:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:31:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:31:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:31:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:31:29.792 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:31:18', tmtdew=37.16, humidity=7.95, cloud=0.0, wind=24.08, temperature=27.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:31:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:31:29.792 [DEBUG] [Thread-16625] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:31:29.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:31:29.888 [DEBUG] [Thread-16629] [transport.py] [_log()] starting thread (client mode): 0x17346cb0
2025-11-12T13:31:29.888 [DEBUG] [Thread-16629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:31:29.903 [DEBUG] [Thread-16629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:31:29.903 [INFO] [Thread-16629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:31:29.910 [DEBUG] [Thread-16629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] client lang: <none>
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] server lang: <none>
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] kex follows: False
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:31:29.911 [DEBUG] [Thread-16629] [transport.py] [_log()] Compression: none
2025-11-12T13:31:29.912 [DEBUG] [Thread-16629] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:31:29.974 [DEBUG] [Thread-16629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:31:29.974 [DEBUG] [Thread-16629] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:31:29.975 [DEBUG] [Thread-16629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:31:29.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:31:29.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:31:30.037 [DEBUG] [Thread-16629] [transport.py] [_log()] userauth is OK
2025-11-12T13:31:30.038 [DEBUG] [Thread-16629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:31:30.038 [DEBUG] [Thread-16629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:31:30.038 [DEBUG] [Thread-16629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:31:30.038 [DEBUG] [Thread-16629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:31:30.058 [INFO] [Thread-16629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:31:30.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:31:30.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:31:30.933 [DEBUG] [Thread-16629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:31:30.933 [DEBUG] [Thread-16629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:31:30.982 [DEBUG] [Thread-16629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:31:30.982 [DEBUG] [Thread-16629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:31:30.991 [DEBUG] [Thread-16629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:31:31.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:31:31.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-11-12T13:31:31.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:31:31.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:31:31.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:31:31.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:31:31.028 [DEBUG] [Thread-16629] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:31:34.250 [DEBUG] [Thread-16631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:31:44.751 [DEBUG] [Thread-16632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:31:59.802 [DEBUG] [Thread-16633 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:32:01.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:32:01.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:32:01.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:32:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 31, 50), 39.51, 6.66, 0.0, 25.44, 28.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:32:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:31:50
2025-11-12T13:32:01.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:32:01.954 [DEBUG] [Thread-16634] [transport.py] [_log()] starting thread (client mode): 0x14962080
2025-11-12T13:32:01.954 [DEBUG] [Thread-16634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:32:01.975 [DEBUG] [Thread-16634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:32:01.975 [INFO] [Thread-16634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] client lang: <none>
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] server lang: <none>
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] kex follows: False
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] Compression: none
2025-11-12T13:32:01.978 [DEBUG] [Thread-16634] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:32:01.995 [DEBUG] [Thread-16634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:32:01.995 [DEBUG] [Thread-16634] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:32:01.995 [DEBUG] [Thread-16634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:32:01.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:32:01.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:32:01.995 [DEBUG] [Thread-16634] [transport.py] [_log()] userauth is OK
2025-11-12T13:32:01.995 [DEBUG] [Thread-16634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:32:01.996 [DEBUG] [Thread-16634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:32:01.996 [DEBUG] [Thread-16634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:32:01.996 [DEBUG] [Thread-16634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:32:02.005 [INFO] [Thread-16634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:32:02.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:32:02.647 [DEBUG] [Thread-16634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:32:02.647 [DEBUG] [Thread-16634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:32:02.647 [DEBUG] [Thread-16634] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:32:02.689 [DEBUG] [Thread-16634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:32:02.689 [DEBUG] [Thread-16634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:32:02.691 [DEBUG] [Thread-16634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:32:02.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:32:02.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:32:02.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:32:02.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:32:02.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:32:02.713 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:32:02.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:32:02.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:32:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:32:02.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.480297 -999.00  +27.60  20.99     11   -5.10 1 1 1 1 1   888    0 32.79 100.83 ----- 21.0 21.0 269.1 35.4 32.7 -28.4 32.3 -26.1 31.9 -27.8 32.9 -27.3
2025-11-12T13:32:02.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:32:02.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:32:02.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.480297
2025-11-12T13:32:02.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:32:02.716 [DEBUG] [Thread-16634] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:32:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:32:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:32:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:32:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:32:02.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:31:50', tmtdew=39.51, humidity=6.66, cloud=0.0, wind=25.44, temperature=28.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:31:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:32:02.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:32:02.814 [DEBUG] [Thread-16637] [transport.py] [_log()] starting thread (client mode): 0x14960e50
2025-11-12T13:32:02.814 [DEBUG] [Thread-16637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:32:02.830 [DEBUG] [Thread-16637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:32:02.830 [INFO] [Thread-16637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:32:02.837 [DEBUG] [Thread-16637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:32:02.837 [DEBUG] [Thread-16637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:32:02.837 [DEBUG] [Thread-16637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] client lang: <none>
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] server lang: <none>
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] kex follows: False
2025-11-12T13:32:02.838 [DEBUG] [Thread-16637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:32:02.839 [DEBUG] [Thread-16637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:32:02.839 [DEBUG] [Thread-16637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:32:02.839 [DEBUG] [Thread-16637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:32:02.839 [DEBUG] [Thread-16637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:32:02.839 [DEBUG] [Thread-16637] [transport.py] [_log()] Compression: none
2025-11-12T13:32:02.839 [DEBUG] [Thread-16637] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:32:02.897 [DEBUG] [Thread-16637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:32:02.898 [DEBUG] [Thread-16637] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:32:02.899 [DEBUG] [Thread-16637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:32:02.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:32:02.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:32:02.953 [DEBUG] [Thread-16637] [transport.py] [_log()] userauth is OK
2025-11-12T13:32:02.953 [DEBUG] [Thread-16637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:32:02.953 [DEBUG] [Thread-16637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:32:02.953 [DEBUG] [Thread-16637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:32:02.953 [DEBUG] [Thread-16637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:32:02.972 [INFO] [Thread-16637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:32:02.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:32:02.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:32:03.823 [DEBUG] [Thread-16637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:32:03.823 [DEBUG] [Thread-16637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:32:03.871 [DEBUG] [Thread-16637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:32:03.872 [DEBUG] [Thread-16637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:32:03.880 [DEBUG] [Thread-16637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:32:03.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:32:03.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-11-12T13:32: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') -> 00000000
2025-11-12T13:32:03.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:32:03.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:32:03.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:32:03.914 [DEBUG] [Thread-16637] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:32:14.833 [DEBUG] [Thread-16639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:32:19.831 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:32:19.832 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:32:29.888 [DEBUG] [Thread-16640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:32:33.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:32:33.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:32:33.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-11-12T13:32:34.278 [DEBUG] [Thread-16641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:32:34.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 32, 22), 40.17, 6.31, 0.0, 28.37, 28.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:32:34.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:32:22
2025-11-12T13:32:34.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:32:34.801 [DEBUG] [Thread-16642] [transport.py] [_log()] starting thread (client mode): 0x14960a00
2025-11-12T13:32:34.801 [DEBUG] [Thread-16642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:32:34.821 [DEBUG] [Thread-16642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:32:34.821 [INFO] [Thread-16642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:32:34.822 [DEBUG] [Thread-16642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:32:34.822 [DEBUG] [Thread-16642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] client lang: <none>
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] server lang: <none>
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] kex follows: False
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] Compression: none
2025-11-12T13:32:34.823 [DEBUG] [Thread-16642] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:32:34.831 [DEBUG] [Thread-16642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:32:34.832 [DEBUG] [Thread-16642] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:32:34.832 [DEBUG] [Thread-16642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:32:34.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:32:34.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:32:34.834 [DEBUG] [Thread-16642] [transport.py] [_log()] userauth is OK
2025-11-12T13:32:34.834 [DEBUG] [Thread-16642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:32:34.834 [DEBUG] [Thread-16642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:32:34.834 [DEBUG] [Thread-16642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:32:34.834 [DEBUG] [Thread-16642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:32:34.870 [INFO] [Thread-16642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:32:34.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:32:35.512 [DEBUG] [Thread-16642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:32:35.512 [DEBUG] [Thread-16642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:32:35.513 [DEBUG] [Thread-16642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:32:35.552 [DEBUG] [Thread-16642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:32:35.553 [DEBUG] [Thread-16642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:32:35.556 [DEBUG] [Thread-16642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:32:35.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:32:35.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:32:35.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:32:35.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:32:35.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:32:35.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:32:35.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:32:35.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:32:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:32:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.480644 -999.00  +27.50  23.39     12   -4.30 1 1 1 1 1   888    0 32.60 105.82 ----- 23.4 23.4 277.7 35.9 32.7 -28.7 32.2 -27.4 31.9 -26.1 32.9 -26.9
2025-11-12T13:32:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:32:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:32:35.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.480644
2025-11-12T13:32:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:32:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:32:35.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:32:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:32:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:32:35.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:32:22', tmtdew=40.17, humidity=6.31, cloud=0.0, wind=28.37, temperature=28.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:32:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:32:35.586 [DEBUG] [Thread-16642] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:32:35.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:32:35.683 [DEBUG] [Thread-16645] [transport.py] [_log()] starting thread (client mode): 0x14920340
2025-11-12T13:32:35.683 [DEBUG] [Thread-16645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:32:35.698 [DEBUG] [Thread-16645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:32:35.698 [INFO] [Thread-16645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] client lang: <none>
2025-11-12T13:32:35.705 [DEBUG] [Thread-16645] [transport.py] [_log()] server lang: <none>
2025-11-12T13:32:35.706 [DEBUG] [Thread-16645] [transport.py] [_log()] kex follows: False
2025-11-12T13:32:35.706 [DEBUG] [Thread-16645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:32:35.706 [DEBUG] [Thread-16645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:32:35.706 [DEBUG] [Thread-16645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:32:35.706 [DEBUG] [Thread-16645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:32:35.706 [DEBUG] [Thread-16645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:32:35.706 [DEBUG] [Thread-16645] [transport.py] [_log()] Compression: none
2025-11-12T13:32:35.706 [DEBUG] [Thread-16645] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:32:35.765 [DEBUG] [Thread-16645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:32:35.766 [DEBUG] [Thread-16645] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:32:35.766 [DEBUG] [Thread-16645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:32:35.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:32:35.767 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:32:35.821 [DEBUG] [Thread-16645] [transport.py] [_log()] userauth is OK
2025-11-12T13:32:35.822 [DEBUG] [Thread-16645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:32:35.822 [DEBUG] [Thread-16645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:32:35.822 [DEBUG] [Thread-16645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:32:35.822 [DEBUG] [Thread-16645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:32:35.841 [INFO] [Thread-16645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:32:35.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:32:35.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:32:36.715 [DEBUG] [Thread-16645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:32:36.715 [DEBUG] [Thread-16645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:32:36.763 [DEBUG] [Thread-16645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:32:36.763 [DEBUG] [Thread-16645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:32:36.771 [DEBUG] [Thread-16645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:32:36.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:32:36.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-11-12T13:32:36.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-11-12T13:32:36.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:32:36.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:32:36.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:32:36.803 [DEBUG] [Thread-16645] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:32:44.922 [DEBUG] [Thread-16647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:32:59.975 [DEBUG] [Thread-16648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:33:06.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:33:06.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:33:06.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-11-12T13:33:07.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 32, 54), 40.48, 6.21, 0.0, 31.69, 28.51, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:33:07.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:32:54
2025-11-12T13:33:07.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:33:07.703 [DEBUG] [Thread-16649] [transport.py] [_log()] starting thread (client mode): 0x173bfa90
2025-11-12T13:33:07.703 [DEBUG] [Thread-16649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:33:07.723 [DEBUG] [Thread-16649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:33:07.723 [INFO] [Thread-16649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] client lang: <none>
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] server lang: <none>
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] kex follows: False
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] Compression: none
2025-11-12T13:33:07.726 [DEBUG] [Thread-16649] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:33:07.744 [DEBUG] [Thread-16649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:33:07.745 [DEBUG] [Thread-16649] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:33:07.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:33:07.746 [DEBUG] [Thread-16649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:33:07.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:33:07.749 [DEBUG] [Thread-16649] [transport.py] [_log()] userauth is OK
2025-11-12T13:33:07.749 [DEBUG] [Thread-16649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:33:07.749 [DEBUG] [Thread-16649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:33:07.749 [DEBUG] [Thread-16649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:33:07.749 [DEBUG] [Thread-16649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:33:07.768 [INFO] [Thread-16649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:33:07.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:33:08.410 [DEBUG] [Thread-16649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:33:08.410 [DEBUG] [Thread-16649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:33:08.411 [DEBUG] [Thread-16649] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:33:08.452 [DEBUG] [Thread-16649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:33:08.452 [DEBUG] [Thread-16649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:33:08.455 [DEBUG] [Thread-16649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:33:08.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:33:08.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:33:08.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:33:08.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:33:08.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:33:08.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:33:08.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:33:08.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:33:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:33:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.480991 -999.00  +27.40  34.14     12   -4.20 1 1 2 1 1   888    0 32.72 113.36 ----- 34.1 34.1 286.8 42.3 32.9 -28.1 32.2 -27.8 31.9 -28.7 33.0 -26.7
2025-11-12T13:33:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:33:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:33:08.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.480991
2025-11-12T13:33:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:33:08.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:33:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:33:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:33:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:33:08.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:32:54', tmtdew=40.48, humidity=6.21, cloud=0.0, wind=31.69, temperature=28.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:32:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:33:08.484 [DEBUG] [Thread-16649] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:33:08.567 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:33:08.579 [DEBUG] [Thread-16652] [transport.py] [_log()] starting thread (client mode): 0x17362b30
2025-11-12T13:33:08.580 [DEBUG] [Thread-16652] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:33:08.595 [DEBUG] [Thread-16652] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:33:08.595 [INFO] [Thread-16652] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] client lang: <none>
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] server lang: <none>
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] kex follows: False
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:33:08.603 [DEBUG] [Thread-16652] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:33:08.604 [DEBUG] [Thread-16652] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:33:08.604 [DEBUG] [Thread-16652] [transport.py] [_log()] Compression: none
2025-11-12T13:33:08.604 [DEBUG] [Thread-16652] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:33:08.661 [DEBUG] [Thread-16652] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:33:08.662 [DEBUG] [Thread-16652] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:33:08.663 [DEBUG] [Thread-16652] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:33:08.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:33:08.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:33:08.717 [DEBUG] [Thread-16652] [transport.py] [_log()] userauth is OK
2025-11-12T13:33:08.718 [DEBUG] [Thread-16652] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:33:08.718 [DEBUG] [Thread-16652] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:33:08.718 [DEBUG] [Thread-16652] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:33:08.718 [DEBUG] [Thread-16652] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:33:08.738 [INFO] [Thread-16652] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:33:08.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:33:08.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:33:09.583 [DEBUG] [Thread-16652] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:33:09.584 [DEBUG] [Thread-16652] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:33:09.633 [DEBUG] [Thread-16652] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:33:09.633 [DEBUG] [Thread-16652] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:33:09.642 [DEBUG] [Thread-16652] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:33:09.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:33:09.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-11-12T13:33:09.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-11-12T13:33:09.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:33:09.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:33:09.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:33:09.679 [DEBUG] [Thread-16652] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:33:15.012 [DEBUG] [Thread-16654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:33:19.972 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:33:19.973 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:33:30.049 [DEBUG] [Thread-16655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:33:34.318 [DEBUG] [Thread-16656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:33:39.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:33:39.702 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:33:39.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-11-12T13:33:40.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 33, 26), 40.05, 6.41, 0.0, 31.09, 28.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:33:40.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:33:26
2025-11-12T13:33:40.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:33:40.588 [DEBUG] [Thread-16657] [transport.py] [_log()] starting thread (client mode): 0x14921720
2025-11-12T13:33:40.588 [DEBUG] [Thread-16657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:33:40.608 [DEBUG] [Thread-16657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:33:40.608 [INFO] [Thread-16657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:33:40.611 [DEBUG] [Thread-16657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:33:40.611 [DEBUG] [Thread-16657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:33:40.611 [DEBUG] [Thread-16657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:33:40.611 [DEBUG] [Thread-16657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:33:40.611 [DEBUG] [Thread-16657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:33:40.611 [DEBUG] [Thread-16657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] client lang: <none>
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] server lang: <none>
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] kex follows: False
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:33:40.612 [DEBUG] [Thread-16657] [transport.py] [_log()] Compression: none
2025-11-12T13:33:40.613 [DEBUG] [Thread-16657] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:33:40.632 [DEBUG] [Thread-16657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:33:40.632 [DEBUG] [Thread-16657] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:33:40.633 [DEBUG] [Thread-16657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:33:40.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:33:40.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:33:40.635 [DEBUG] [Thread-16657] [transport.py] [_log()] userauth is OK
2025-11-12T13:33:40.635 [DEBUG] [Thread-16657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:33:40.635 [DEBUG] [Thread-16657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:33:40.635 [DEBUG] [Thread-16657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:33:40.635 [DEBUG] [Thread-16657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:33:40.671 [INFO] [Thread-16657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:33:40.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:33:41.273 [DEBUG] [Thread-16657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:33:41.273 [DEBUG] [Thread-16657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:33:41.274 [DEBUG] [Thread-16657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:33:41.314 [DEBUG] [Thread-16657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:33:41.315 [DEBUG] [Thread-16657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:33:41.318 [DEBUG] [Thread-16657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:33:41.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:33:41.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:33:41.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:33:41.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:33:41.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:33:41.341 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:33:41.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:33:41.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:33:41.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:33:41.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.481338 -999.00  +27.00  36.02     13   -3.60 1 1 2 1 1   888    0 33.03 122.17 ----- 36.0 36.0 271.6 38.0 32.6 -29.3 32.1 -26.7 31.8 -28.9 32.8 -27.0
2025-11-12T13:33:41.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:33:41.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:33:41.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.481338
2025-11-12T13:33:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:33:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:33:41.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:33:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:33:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:33:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:33:26', tmtdew=40.05, humidity=6.41, cloud=0.0, wind=31.09, temperature=28.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:33:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:33:41.344 [DEBUG] [Thread-16657] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:33:41.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:33:41.440 [DEBUG] [Thread-16660] [transport.py] [_log()] starting thread (client mode): 0x149609a0
2025-11-12T13:33:41.440 [DEBUG] [Thread-16660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:33:41.459 [DEBUG] [Thread-16660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:33:41.460 [INFO] [Thread-16660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:33:41.467 [DEBUG] [Thread-16660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:33:41.467 [DEBUG] [Thread-16660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:33:41.468 [DEBUG] [Thread-16660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:33:41.468 [DEBUG] [Thread-16660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:33:41.468 [DEBUG] [Thread-16660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:33:41.468 [DEBUG] [Thread-16660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:33:41.468 [DEBUG] [Thread-16660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:33:41.468 [DEBUG] [Thread-16660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:33:41.468 [DEBUG] [Thread-16660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:33:41.468 [DEBUG] [Thread-16660] [transport.py] [_log()] client lang: <none>
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] server lang: <none>
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] kex follows: False
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] Compression: none
2025-11-12T13:33:41.469 [DEBUG] [Thread-16660] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:33:41.532 [DEBUG] [Thread-16660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:33:41.533 [DEBUG] [Thread-16660] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:33:41.533 [DEBUG] [Thread-16660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:33:41.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:33:41.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:33:41.589 [DEBUG] [Thread-16660] [transport.py] [_log()] userauth is OK
2025-11-12T13:33:41.589 [DEBUG] [Thread-16660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:33:41.589 [DEBUG] [Thread-16660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:33:41.589 [DEBUG] [Thread-16660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:33:41.589 [DEBUG] [Thread-16660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:33:41.614 [INFO] [Thread-16660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:33:41.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:33:41.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:33:42.486 [DEBUG] [Thread-16660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:33:42.487 [DEBUG] [Thread-16660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:33:42.534 [DEBUG] [Thread-16660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:33:42.535 [DEBUG] [Thread-16660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:33:42.544 [DEBUG] [Thread-16660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:33:42.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:33:42.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:33:42.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-11-12T13:33:42.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:33:42.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:33:42.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:33:42.581 [DEBUG] [Thread-16660] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:33:45.087 [DEBUG] [Thread-16662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:34:00.144 [DEBUG] [Thread-16663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:34:12.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:34:12.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:34:12.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-11-12T13:34:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 33, 58), 38.57, 7.04, 0.0, 36.72, 27.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:34:13.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:33:58
2025-11-12T13:34:13.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:34:13.513 [DEBUG] [Thread-16664] [transport.py] [_log()] starting thread (client mode): 0x17361750
2025-11-12T13:34:13.513 [DEBUG] [Thread-16664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:34:13.531 [DEBUG] [Thread-16664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:34:13.531 [INFO] [Thread-16664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:34:13.534 [DEBUG] [Thread-16664] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:34:13.534 [DEBUG] [Thread-16664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] client lang: <none>
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] server lang: <none>
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] kex follows: False
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] Compression: none
2025-11-12T13:34:13.535 [DEBUG] [Thread-16664] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:34:13.553 [DEBUG] [Thread-16664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:34:13.553 [DEBUG] [Thread-16664] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:34:13.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:34:13.554 [DEBUG] [Thread-16664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:34:13.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:34:13.556 [DEBUG] [Thread-16664] [transport.py] [_log()] userauth is OK
2025-11-12T13:34:13.556 [DEBUG] [Thread-16664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:34:13.556 [DEBUG] [Thread-16664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:34:13.556 [DEBUG] [Thread-16664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:34:13.556 [DEBUG] [Thread-16664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:34:13.580 [INFO] [Thread-16664] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:34:13.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:34:14.209 [DEBUG] [Thread-16664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:34:14.209 [DEBUG] [Thread-16664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:34:14.210 [DEBUG] [Thread-16664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:34:14.250 [DEBUG] [Thread-16664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:34:14.251 [DEBUG] [Thread-16664] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:34:14.253 [DEBUG] [Thread-16664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:34:14.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:34:14.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:34:14.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:34:14.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:34:14.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:34:14.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:34:14.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:34:14.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:34:14.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:34:14.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.481686 -999.00  +27.20  28.98     13   -3.30 1 1 1 1 1   888    0 33.01 124.11 ----- 29.0 29.0 278.2 44.9 32.5 -29.2 32.0 -26.6 31.6 -28.8 32.7 -27.7
2025-11-12T13:34:14.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:34:14.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:34:14.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.481686
2025-11-12T13:34:14.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:34:14.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:34:14.276 [DEBUG] [Thread-16664] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:34:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:34:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:34:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:34:14.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:33:58', tmtdew=38.57, humidity=7.04, cloud=0.0, wind=36.72, temperature=27.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:33:37.670', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:34:14.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:34:14.365 [DEBUG] [Thread-16667] [transport.py] [_log()] starting thread (client mode): 0x173f89d0
2025-11-12T13:34:14.365 [DEBUG] [Thread-16667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:34:14.381 [DEBUG] [Thread-16667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:34:14.381 [INFO] [Thread-16667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] client lang: <none>
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] server lang: <none>
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] kex follows: False
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:34:14.389 [DEBUG] [Thread-16667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:34:14.390 [DEBUG] [Thread-16667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:34:14.390 [DEBUG] [Thread-16667] [transport.py] [_log()] Compression: none
2025-11-12T13:34:14.390 [DEBUG] [Thread-16667] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:34:14.448 [DEBUG] [Thread-16667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:34:14.448 [DEBUG] [Thread-16667] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:34:14.449 [DEBUG] [Thread-16667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:34:14.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:34:14.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:34:14.504 [DEBUG] [Thread-16667] [transport.py] [_log()] userauth is OK
2025-11-12T13:34:14.505 [DEBUG] [Thread-16667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:34:14.505 [DEBUG] [Thread-16667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:34:14.505 [DEBUG] [Thread-16667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:34:14.505 [DEBUG] [Thread-16667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:34:14.524 [INFO] [Thread-16667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:34:14.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:34:14.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:34:15.177 [DEBUG] [Thread-16669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:34:15.399 [DEBUG] [Thread-16667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:34:15.399 [DEBUG] [Thread-16667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:34:15.447 [DEBUG] [Thread-16667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:34:15.447 [DEBUG] [Thread-16667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:34:15.456 [DEBUG] [Thread-16667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:34:15.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:34:15.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-11-12T13:34:15.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-11-12T13:34:15.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:34:15.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:34:15.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:34:15.489 [DEBUG] [Thread-16667] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:34:20.113 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:34:20.115 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:34:30.229 [DEBUG] [Thread-16670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:34:34.346 [DEBUG] [Thread-16671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:34:45.262 [DEBUG] [Thread-16672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:34:45.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:34:45.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:34:45.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-11-12T13:34:46.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 34, 30), 38.24, 7.24, 0.0, 35.87, 27.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:34:46.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:34:30
2025-11-12T13:34:46.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:34:46.389 [DEBUG] [Thread-16673] [transport.py] [_log()] starting thread (client mode): 0x17344a60
2025-11-12T13:34:46.389 [DEBUG] [Thread-16673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:34:46.409 [DEBUG] [Thread-16673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:34:46.410 [INFO] [Thread-16673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] client lang: <none>
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] server lang: <none>
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] kex follows: False
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] Compression: none
2025-11-12T13:34:46.413 [DEBUG] [Thread-16673] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:34:46.431 [DEBUG] [Thread-16673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:34:46.431 [DEBUG] [Thread-16673] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:34:46.432 [DEBUG] [Thread-16673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:34:46.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:34:46.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:34:46.434 [DEBUG] [Thread-16673] [transport.py] [_log()] userauth is OK
2025-11-12T13:34:46.434 [DEBUG] [Thread-16673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:34:46.434 [DEBUG] [Thread-16673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:34:46.434 [DEBUG] [Thread-16673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:34:46.435 [DEBUG] [Thread-16673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:34:46.459 [INFO] [Thread-16673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:34:46.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:34:47.085 [DEBUG] [Thread-16673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:34:47.085 [DEBUG] [Thread-16673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:34:47.085 [DEBUG] [Thread-16673] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:34:47.126 [DEBUG] [Thread-16673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:34:47.126 [DEBUG] [Thread-16673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:34:47.129 [DEBUG] [Thread-16673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:34:47.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:34:47.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:34:47.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:34:47.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:34:47.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:34:47.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:34:47.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:34:47.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:34:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:34:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.482033 -999.00  +27.10  33.16     13   -3.20 1 1 2 1 1   888    0 32.98 123.05 ----- 33.2 33.2 278.3 45.2 32.4 -29.3 31.9 -26.5 31.4 -26.4 32.6 -28.0
2025-11-12T13:34:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:34:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:34:47.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.482033
2025-11-12T13:34:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:34:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:34:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:34:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:34:47.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:34:47.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:34:30', tmtdew=38.24, humidity=7.24, cloud=0.0, wind=35.87, temperature=27.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:34:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:34:47.155 [DEBUG] [Thread-16673] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:34:47.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:34:47.251 [DEBUG] [Thread-16676] [transport.py] [_log()] starting thread (client mode): 0x14983f70
2025-11-12T13:34:47.251 [DEBUG] [Thread-16676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:34:47.266 [DEBUG] [Thread-16676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:34:47.266 [INFO] [Thread-16676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:34:47.273 [DEBUG] [Thread-16676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] client lang: <none>
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] server lang: <none>
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] kex follows: False
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:34:47.274 [DEBUG] [Thread-16676] [transport.py] [_log()] Compression: none
2025-11-12T13:34:47.275 [DEBUG] [Thread-16676] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:34:47.333 [DEBUG] [Thread-16676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:34:47.333 [DEBUG] [Thread-16676] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:34:47.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:34:47.335 [DEBUG] [Thread-16676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:34:47.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:34:47.389 [DEBUG] [Thread-16676] [transport.py] [_log()] userauth is OK
2025-11-12T13:34:47.389 [DEBUG] [Thread-16676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:34:47.389 [DEBUG] [Thread-16676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:34:47.389 [DEBUG] [Thread-16676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:34:47.389 [DEBUG] [Thread-16676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:34:47.409 [INFO] [Thread-16676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:34:47.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:34:47.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:34:48.282 [DEBUG] [Thread-16676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:34:48.282 [DEBUG] [Thread-16676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:34:48.331 [DEBUG] [Thread-16676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:34:48.331 [DEBUG] [Thread-16676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:34:48.340 [DEBUG] [Thread-16676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:34:48.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:34:48.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-11-12T13:34:48.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-11-12T13:34:48.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:34:48.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:34:48.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:34:48.376 [DEBUG] [Thread-16676] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:35:00.298 [DEBUG] [Thread-16678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:35:15.345 [DEBUG] [Thread-16679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:35:18.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:35:18.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:35:18.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-11-12T13:35:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 35, 2), 38.15, 7.27, 0.0, 35.57, 27.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:35:18.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:35:02
2025-11-12T13:35:19.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:35:19.263 [DEBUG] [Thread-16680] [transport.py] [_log()] starting thread (client mode): 0x173441f0
2025-11-12T13:35:19.263 [DEBUG] [Thread-16680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:35:19.283 [DEBUG] [Thread-16680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:35:19.283 [INFO] [Thread-16680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] client lang: <none>
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] server lang: <none>
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] kex follows: False
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] Compression: none
2025-11-12T13:35:19.287 [DEBUG] [Thread-16680] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:35:19.303 [DEBUG] [Thread-16680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:35:19.304 [DEBUG] [Thread-16680] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:35:19.304 [DEBUG] [Thread-16680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:35:19.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:35:19.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:35:19.349 [DEBUG] [Thread-16680] [transport.py] [_log()] userauth is OK
2025-11-12T13:35:19.349 [DEBUG] [Thread-16680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:35:19.349 [DEBUG] [Thread-16680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:35:19.350 [DEBUG] [Thread-16680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:35:19.350 [DEBUG] [Thread-16680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:35:19.371 [INFO] [Thread-16680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:35:19.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:35:20.030 [DEBUG] [Thread-16680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:35:20.031 [DEBUG] [Thread-16680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:35:20.031 [DEBUG] [Thread-16680] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:35:20.072 [DEBUG] [Thread-16680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:35:20.072 [DEBUG] [Thread-16680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:35:20.075 [DEBUG] [Thread-16680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:35:20.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:35:20.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:35:20.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:35:20.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:35:20.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:35:20.100 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:35:20.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:35:20.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:35:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:35:20.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.482727 -999.00  +26.60  16.15     13   -3.30 1 1 1 1 1   888    0 33.24 114.48 ----- 16.1 16.1 287.6 25.1 32.5 -27.0 31.9 -26.1 31.7 -25.6 32.6 -25.5
2025-11-12T13:35:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:35:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:35:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.482727
2025-11-12T13:35:20.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:35:20.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:35:02', tmtdew=38.15, humidity=7.27, cloud=0.0, wind=35.57, temperature=27.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:35:07.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:35:20.103 [DEBUG] [Thread-16680] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:35:20.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:35:20.201 [DEBUG] [Thread-16683] [transport.py] [_log()] starting thread (client mode): 0x1737ead0
2025-11-12T13:35:20.202 [DEBUG] [Thread-16683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:35:20.216 [DEBUG] [Thread-16683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:35:20.217 [INFO] [Thread-16683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:35:20.225 [DEBUG] [Thread-16683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] client lang: <none>
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] server lang: <none>
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] kex follows: False
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:35:20.226 [DEBUG] [Thread-16683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:35:20.227 [DEBUG] [Thread-16683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:35:20.227 [DEBUG] [Thread-16683] [transport.py] [_log()] Compression: none
2025-11-12T13:35:20.227 [DEBUG] [Thread-16683] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:35:20.256 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:35:20.257 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:35:20.285 [DEBUG] [Thread-16683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:35:20.286 [DEBUG] [Thread-16683] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:35:20.287 [DEBUG] [Thread-16683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:35:20.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:35:20.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:35:20.340 [DEBUG] [Thread-16683] [transport.py] [_log()] userauth is OK
2025-11-12T13:35:20.340 [DEBUG] [Thread-16683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:35:20.341 [DEBUG] [Thread-16683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:35:20.341 [DEBUG] [Thread-16683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:35:20.341 [DEBUG] [Thread-16683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:35:20.355 [INFO] [Thread-16683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:35:20.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:35:20.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:35:21.202 [DEBUG] [Thread-16683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:35:21.202 [DEBUG] [Thread-16683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:35:21.249 [DEBUG] [Thread-16683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:35:21.250 [DEBUG] [Thread-16683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:35:21.264 [DEBUG] [Thread-16683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:35:21.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:35:21.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-11-12T13:35:21.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-11-12T13:35:21.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:35:21.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:35:21.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:35:21.300 [DEBUG] [Thread-16683] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:35:30.377 [DEBUG] [Thread-16685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:35:34.394 [DEBUG] [Thread-16686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:35:45.429 [DEBUG] [Thread-16687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:35:51.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:35:51.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:35:51.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-11-12T13:35:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 35, 34), 37.69, 7.74, 0.0, 29.55, 27.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:35:51.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:35:34
2025-11-12T13:35:52.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:35:52.238 [DEBUG] [Thread-16688] [transport.py] [_log()] starting thread (client mode): 0x14963910
2025-11-12T13:35:52.238 [DEBUG] [Thread-16688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:35:52.257 [DEBUG] [Thread-16688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:35:52.257 [INFO] [Thread-16688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] client lang: <none>
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] server lang: <none>
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] kex follows: False
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:35:52.260 [DEBUG] [Thread-16688] [transport.py] [_log()] Compression: none
2025-11-12T13:35:52.261 [DEBUG] [Thread-16688] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:35:52.274 [DEBUG] [Thread-16688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:35:52.274 [DEBUG] [Thread-16688] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:35:52.275 [DEBUG] [Thread-16688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:35:52.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:35:52.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:35:52.275 [DEBUG] [Thread-16688] [transport.py] [_log()] userauth is OK
2025-11-12T13:35:52.276 [DEBUG] [Thread-16688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:35:52.276 [DEBUG] [Thread-16688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:35:52.276 [DEBUG] [Thread-16688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:35:52.276 [DEBUG] [Thread-16688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:35:52.288 [INFO] [Thread-16688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:35:52.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:35:52.933 [DEBUG] [Thread-16688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:35:52.934 [DEBUG] [Thread-16688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:35:52.934 [DEBUG] [Thread-16688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:35:52.974 [DEBUG] [Thread-16688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:35:52.974 [DEBUG] [Thread-16688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:35:52.977 [DEBUG] [Thread-16688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:35:52.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:35:52.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:35:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:35:52.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:35:52.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:35:52.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:35:52.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:35:52.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:35:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:35:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.483074 -999.00  +26.70  17.37     13   -3.70 1 1 1 1 1   888    0 33.19 119.27 ----- 17.4 17.4 272.4 30.1 32.4 -28.1 31.9 -25.8 31.6 -24.6 32.5 -27.9
2025-11-12T13:35:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:35:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:35:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.483074
2025-11-12T13:35:52.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:35:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:35:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:35:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:35:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:35:52.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:35:34', tmtdew=37.69, humidity=7.74, cloud=0.0, wind=29.55, temperature=27.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:35:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:35:52.995 [DEBUG] [Thread-16688] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:35: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-11-12T13:35:53.080 [DEBUG] [Thread-16691] [transport.py] [_log()] starting thread (client mode): 0x14954d90
2025-11-12T13:35:53.081 [DEBUG] [Thread-16691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:35:53.095 [DEBUG] [Thread-16691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:35:53.095 [INFO] [Thread-16691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] client lang: <none>
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] server lang: <none>
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] kex follows: False
2025-11-12T13:35:53.103 [DEBUG] [Thread-16691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:35:53.104 [DEBUG] [Thread-16691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:35:53.104 [DEBUG] [Thread-16691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:35:53.104 [DEBUG] [Thread-16691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:35:53.104 [DEBUG] [Thread-16691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:35:53.104 [DEBUG] [Thread-16691] [transport.py] [_log()] Compression: none
2025-11-12T13:35:53.104 [DEBUG] [Thread-16691] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:35:53.163 [DEBUG] [Thread-16691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:35:53.163 [DEBUG] [Thread-16691] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:35:53.163 [DEBUG] [Thread-16691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:35:53.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:35:53.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:35:53.220 [DEBUG] [Thread-16691] [transport.py] [_log()] userauth is OK
2025-11-12T13:35:53.220 [DEBUG] [Thread-16691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:35:53.220 [DEBUG] [Thread-16691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:35:53.220 [DEBUG] [Thread-16691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:35:53.220 [DEBUG] [Thread-16691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:35:53.234 [INFO] [Thread-16691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:35:53.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:35:53.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:35:54.073 [DEBUG] [Thread-16691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:35:54.073 [DEBUG] [Thread-16691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:35:54.121 [DEBUG] [Thread-16691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:35:54.121 [DEBUG] [Thread-16691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:35:54.129 [DEBUG] [Thread-16691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:35:54.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:35:54.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-11-12T13:35:54.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:35:54.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:35:54.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:35:54.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:35:54.161 [DEBUG] [Thread-16691] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:36:00.466 [DEBUG] [Thread-16693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:36:15.522 [DEBUG] [Thread-16694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:36:20.399 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:36:20.400 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:36:24.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:36:24.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:36:24.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-11-12T13:36:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 36, 6), 37.34, 7.92, 0.0, 25.99, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:36:24.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:36:06
2025-11-12T13:36:24.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:36:25.070 [DEBUG] [Thread-16695] [transport.py] [_log()] starting thread (client mode): 0x17347370
2025-11-12T13:36:25.070 [DEBUG] [Thread-16695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:36:25.090 [DEBUG] [Thread-16695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:36:25.090 [INFO] [Thread-16695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:36:25.093 [DEBUG] [Thread-16695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:36:25.093 [DEBUG] [Thread-16695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:36:25.093 [DEBUG] [Thread-16695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] client lang: <none>
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] server lang: <none>
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] kex follows: False
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] Compression: none
2025-11-12T13:36:25.094 [DEBUG] [Thread-16695] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:36:25.113 [DEBUG] [Thread-16695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:36:25.113 [DEBUG] [Thread-16695] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:36:25.114 [DEBUG] [Thread-16695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:36:25.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:36:25.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:36:25.116 [DEBUG] [Thread-16695] [transport.py] [_log()] userauth is OK
2025-11-12T13:36:25.116 [DEBUG] [Thread-16695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:36:25.116 [DEBUG] [Thread-16695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:36:25.116 [DEBUG] [Thread-16695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:36:25.116 [DEBUG] [Thread-16695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:36:25.152 [INFO] [Thread-16695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:36:25.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:36:25.827 [DEBUG] [Thread-16695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:36:25.827 [DEBUG] [Thread-16695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:36:25.828 [DEBUG] [Thread-16695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:36:25.868 [DEBUG] [Thread-16695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:36:25.869 [DEBUG] [Thread-16695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:36:25.872 [DEBUG] [Thread-16695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:36:25.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:36:25.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:36:25.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:36:25.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:36:25.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:36:25.898 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:36:25.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:36:25.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:36:25.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:36:25.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.483422 -999.00  +27.10  23.57     12   -3.90 1 1 1 1 1   888    0 33.43 120.39 ----- 23.6 23.6 271.2 30.1 32.5 -28.7 32.0 -26.7 31.8 -25.0 32.6 -27.5
2025-11-12T13:36:25.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:36:25.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:36:25.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.483422
2025-11-12T13:36:25.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:36:25.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:36:25.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:36:25.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:36:25.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:36:25.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:36:06', tmtdew=37.34, humidity=7.92, cloud=0.0, wind=25.99, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:36:07.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:36:25.901 [DEBUG] [Thread-16695] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:36:25.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:36:26.012 [DEBUG] [Thread-16698] [transport.py] [_log()] starting thread (client mode): 0x173f80a0
2025-11-12T13:36:26.012 [DEBUG] [Thread-16698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:36:26.028 [DEBUG] [Thread-16698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:36:26.028 [INFO] [Thread-16698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] client lang: <none>
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] server lang: <none>
2025-11-12T13:36:26.035 [DEBUG] [Thread-16698] [transport.py] [_log()] kex follows: False
2025-11-12T13:36:26.036 [DEBUG] [Thread-16698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:36:26.036 [DEBUG] [Thread-16698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:36:26.036 [DEBUG] [Thread-16698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:36:26.036 [DEBUG] [Thread-16698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:36:26.036 [DEBUG] [Thread-16698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:36:26.036 [DEBUG] [Thread-16698] [transport.py] [_log()] Compression: none
2025-11-12T13:36:26.036 [DEBUG] [Thread-16698] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:36:26.093 [DEBUG] [Thread-16698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:36:26.093 [DEBUG] [Thread-16698] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:36:26.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:36:26.094 [DEBUG] [Thread-16698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:36:26.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:36:26.149 [DEBUG] [Thread-16698] [transport.py] [_log()] userauth is OK
2025-11-12T13:36:26.150 [DEBUG] [Thread-16698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:36:26.150 [DEBUG] [Thread-16698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:36:26.150 [DEBUG] [Thread-16698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:36:26.150 [DEBUG] [Thread-16698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:36:26.169 [INFO] [Thread-16698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:36:26.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:36:26.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:36:27.048 [DEBUG] [Thread-16698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:36:27.048 [DEBUG] [Thread-16698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:36:27.095 [DEBUG] [Thread-16698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:36:27.096 [DEBUG] [Thread-16698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:36:27.105 [DEBUG] [Thread-16698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:36:27.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:36:27.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:36:27.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-11-12T13:36:27.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:36:27.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:36:27.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:36:27.141 [DEBUG] [Thread-16698] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:36:30.551 [DEBUG] [Thread-16700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:36:34.422 [DEBUG] [Thread-16701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:36:45.590 [DEBUG] [Thread-16702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:36:57.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:36:57.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:36:57.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-11-12T13:36:57.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 36, 38), 37.86, 7.82, 0.0, 30.89, 27.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:36:57.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:36:38
2025-11-12T13:36:57.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:36:58.012 [DEBUG] [Thread-16703] [transport.py] [_log()] starting thread (client mode): 0x173bd780
2025-11-12T13:36:58.012 [DEBUG] [Thread-16703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:36:58.031 [DEBUG] [Thread-16703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:36:58.031 [INFO] [Thread-16703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:36:58.034 [DEBUG] [Thread-16703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] client lang: <none>
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] server lang: <none>
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] kex follows: False
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:36:58.035 [DEBUG] [Thread-16703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:36:58.036 [DEBUG] [Thread-16703] [transport.py] [_log()] Compression: none
2025-11-12T13:36:58.036 [DEBUG] [Thread-16703] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:36:58.045 [DEBUG] [Thread-16703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:36:58.046 [DEBUG] [Thread-16703] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:36:58.047 [DEBUG] [Thread-16703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:36:58.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:36:58.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:36:58.048 [DEBUG] [Thread-16703] [transport.py] [_log()] userauth is OK
2025-11-12T13:36:58.049 [DEBUG] [Thread-16703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:36:58.049 [DEBUG] [Thread-16703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:36:58.049 [DEBUG] [Thread-16703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:36:58.049 [DEBUG] [Thread-16703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:36:58.063 [INFO] [Thread-16703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:36:58.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:36:58.698 [DEBUG] [Thread-16703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:36:58.698 [DEBUG] [Thread-16703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:36:58.698 [DEBUG] [Thread-16703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:36:58.739 [DEBUG] [Thread-16703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:36:58.739 [DEBUG] [Thread-16703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:36:58.742 [DEBUG] [Thread-16703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:36:58.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:36:58.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:36:58.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:36:58.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:36:58.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:36:58.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:36:58.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:36:58.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:36:58.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:36:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.483769 -999.00  +27.10  32.86     12   -3.80 1 1 2 1 1   888    0 33.17 121.52 ----- 32.9 32.9 271.2 37.4 32.4 -28.5 31.9 -26.9 31.6 -26.2 32.6 -26.5
2025-11-12T13:36:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:36:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:36:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.483769
2025-11-12T13:36:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:36:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:36:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:36:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:36:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:36:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:36:38', tmtdew=37.86, humidity=7.82, cloud=0.0, wind=30.89, temperature=27.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:36:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:36:58.769 [DEBUG] [Thread-16703] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:36:58.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:36:58.865 [DEBUG] [Thread-16706] [transport.py] [_log()] starting thread (client mode): 0x1737cac0
2025-11-12T13:36:58.865 [DEBUG] [Thread-16706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:36:58.881 [DEBUG] [Thread-16706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:36:58.881 [INFO] [Thread-16706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:36:58.888 [DEBUG] [Thread-16706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] client lang: <none>
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] server lang: <none>
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] kex follows: False
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] Compression: none
2025-11-12T13:36:58.889 [DEBUG] [Thread-16706] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:36:58.949 [DEBUG] [Thread-16706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:36:58.949 [DEBUG] [Thread-16706] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:36:58.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:36:58.951 [DEBUG] [Thread-16706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:36:58.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:36:59.005 [DEBUG] [Thread-16706] [transport.py] [_log()] userauth is OK
2025-11-12T13:36:59.006 [DEBUG] [Thread-16706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:36:59.006 [DEBUG] [Thread-16706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:36:59.006 [DEBUG] [Thread-16706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:36:59.006 [DEBUG] [Thread-16706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:36:59.028 [INFO] [Thread-16706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:36:59.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:36:59.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:36:59.860 [DEBUG] [Thread-16706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:36:59.861 [DEBUG] [Thread-16706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:36:59.909 [DEBUG] [Thread-16706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:36:59.909 [DEBUG] [Thread-16706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:36:59.918 [DEBUG] [Thread-16706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:36:59.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:36:59.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-11-12T13:36:59.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-11-12T13:36:59.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:36:59.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:36:59.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:36:59.955 [DEBUG] [Thread-16706] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:37:00.627 [DEBUG] [Thread-16708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:37:15.684 [DEBUG] [Thread-16709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:37:20.541 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:37:20.542 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:37:29.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:37:29.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:37:29.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-11-12T13:37:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 37, 10), 38.36, 7.54, 0.0, 31.12, 27.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:37:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:37:10
2025-11-12T13:37:30.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:37:30.722 [DEBUG] [Thread-16710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:37:30.851 [DEBUG] [Thread-16711] [transport.py] [_log()] starting thread (client mode): 0x173f80d0
2025-11-12T13:37:30.851 [DEBUG] [Thread-16711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:37:30.871 [DEBUG] [Thread-16711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:37:30.871 [INFO] [Thread-16711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:37:30.874 [DEBUG] [Thread-16711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:37:30.874 [DEBUG] [Thread-16711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:37:30.874 [DEBUG] [Thread-16711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:37:30.874 [DEBUG] [Thread-16711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:37:30.874 [DEBUG] [Thread-16711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:37:30.874 [DEBUG] [Thread-16711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] client lang: <none>
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] server lang: <none>
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] kex follows: False
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:37:30.875 [DEBUG] [Thread-16711] [transport.py] [_log()] Compression: none
2025-11-12T13:37:30.876 [DEBUG] [Thread-16711] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:37:30.895 [DEBUG] [Thread-16711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:37:30.896 [DEBUG] [Thread-16711] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:37:30.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:37:30.898 [DEBUG] [Thread-16711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:37:30.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:37:30.900 [DEBUG] [Thread-16711] [transport.py] [_log()] userauth is OK
2025-11-12T13:37:30.900 [DEBUG] [Thread-16711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:37:30.900 [DEBUG] [Thread-16711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:37:30.900 [DEBUG] [Thread-16711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:37:30.900 [DEBUG] [Thread-16711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:37:30.925 [INFO] [Thread-16711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:37:30.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:37:31.523 [DEBUG] [Thread-16711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:37:31.523 [DEBUG] [Thread-16711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:37:31.523 [DEBUG] [Thread-16711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:37:31.565 [DEBUG] [Thread-16711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:37:31.565 [DEBUG] [Thread-16711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:37:31.569 [DEBUG] [Thread-16711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:37:31.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:37:31.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:37:31.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:37:31.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:37:31.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:37:31.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:37:31.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:37:31.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:37:31.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:37:31.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.484116 -999.00  +27.00  24.49     12   -4.30 1 1 1 1 1   888    0 34.34 135.13 ----- 24.5 24.5 279.2 33.5 32.3 -30.8 31.9 -27.7 31.4 -31.9 32.5 -28.2
2025-11-12T13:37:31.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:37:31.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:37:31.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.484116
2025-11-12T13:37:31.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:37:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:37:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:37:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:37:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:37:31.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:37:10', tmtdew=38.36, humidity=7.54, cloud=0.0, wind=31.12, temperature=27.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:37:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:37:31.594 [DEBUG] [Thread-16711] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:37:31.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:37:31.694 [DEBUG] [Thread-16714] [transport.py] [_log()] starting thread (client mode): 0x1739aec0
2025-11-12T13:37:31.694 [DEBUG] [Thread-16714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:37:31.712 [DEBUG] [Thread-16714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:37:31.712 [INFO] [Thread-16714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:37:31.720 [DEBUG] [Thread-16714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:37:31.720 [DEBUG] [Thread-16714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:37:31.720 [DEBUG] [Thread-16714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:37:31.720 [DEBUG] [Thread-16714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] client lang: <none>
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] server lang: <none>
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] kex follows: False
2025-11-12T13:37:31.721 [DEBUG] [Thread-16714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:37:31.722 [DEBUG] [Thread-16714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:37:31.722 [DEBUG] [Thread-16714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:37:31.722 [DEBUG] [Thread-16714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:37:31.722 [DEBUG] [Thread-16714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:37:31.722 [DEBUG] [Thread-16714] [transport.py] [_log()] Compression: none
2025-11-12T13:37:31.722 [DEBUG] [Thread-16714] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:37:31.777 [DEBUG] [Thread-16714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:37:31.778 [DEBUG] [Thread-16714] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:37:31.779 [DEBUG] [Thread-16714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:37:31.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:37:31.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:37:31.833 [DEBUG] [Thread-16714] [transport.py] [_log()] userauth is OK
2025-11-12T13:37:31.834 [DEBUG] [Thread-16714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:37:31.834 [DEBUG] [Thread-16714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:37:31.834 [DEBUG] [Thread-16714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:37:31.834 [DEBUG] [Thread-16714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:37:31.854 [INFO] [Thread-16714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:37:31.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:37:31.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:37:32.745 [DEBUG] [Thread-16714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:37:32.746 [DEBUG] [Thread-16714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:37:32.794 [DEBUG] [Thread-16714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:37:32.794 [DEBUG] [Thread-16714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:37:32.804 [DEBUG] [Thread-16714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:37:32.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:37:32.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-11-12T13:37:32.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:37:32.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:37:32.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:37:32.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:37:32.841 [DEBUG] [Thread-16714] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:37:34.459 [DEBUG] [Thread-16716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:37:45.757 [DEBUG] [Thread-16717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:38:00.803 [DEBUG] [Thread-16718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:38:02.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:38:02.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:38:02.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-11-12T13:38:03.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 37, 42), 38.51, 6.99, 0.0, 26.06, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:38:03.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:37:42
2025-11-12T13:38:03.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:38:03.753 [DEBUG] [Thread-16719] [transport.py] [_log()] starting thread (client mode): 0x14961720
2025-11-12T13:38:03.754 [DEBUG] [Thread-16719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:38:03.774 [DEBUG] [Thread-16719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:38:03.774 [INFO] [Thread-16719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] client lang: <none>
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] server lang: <none>
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] kex follows: False
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] Compression: none
2025-11-12T13:38:03.777 [DEBUG] [Thread-16719] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:38:03.796 [DEBUG] [Thread-16719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:38:03.797 [DEBUG] [Thread-16719] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:38:03.797 [DEBUG] [Thread-16719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:38:03.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:38:03.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:38:03.799 [DEBUG] [Thread-16719] [transport.py] [_log()] userauth is OK
2025-11-12T13:38:03.800 [DEBUG] [Thread-16719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:38:03.800 [DEBUG] [Thread-16719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:38:03.800 [DEBUG] [Thread-16719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:38:03.800 [DEBUG] [Thread-16719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:38:03.836 [INFO] [Thread-16719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:38:03.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:38:04.426 [DEBUG] [Thread-16719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:38:04.427 [DEBUG] [Thread-16719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:38:04.427 [DEBUG] [Thread-16719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:38:04.468 [DEBUG] [Thread-16719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:38:04.468 [DEBUG] [Thread-16719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:38:04.471 [DEBUG] [Thread-16719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:38:04.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:38:04.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:38:04.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:38:04.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:38:04.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:38:04.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:38:04.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:38:04.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:38:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:38:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.484463 -999.00  +26.90  21.93     12   -4.50 1 1 1 1 1   888    0 34.20 132.66 ----- 21.9 21.9 283.2 27.2 32.3 -29.0 31.9 -26.1 31.5 -30.1 32.6 -26.3
2025-11-12T13:38:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:38:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:38:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.484463
2025-11-12T13:38:04.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:38:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:38:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:38:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:38:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:38:04.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:37:42', tmtdew=38.51, humidity=6.99, cloud=0.0, wind=26.06, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:37:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:38:04.499 [DEBUG] [Thread-16719] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:38:04.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:38:04.593 [DEBUG] [Thread-16722] [transport.py] [_log()] starting thread (client mode): 0x17398520
2025-11-12T13:38:04.593 [DEBUG] [Thread-16722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:38:04.610 [DEBUG] [Thread-16722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:38:04.610 [INFO] [Thread-16722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:38:04.617 [DEBUG] [Thread-16722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:38:04.617 [DEBUG] [Thread-16722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:38:04.617 [DEBUG] [Thread-16722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:38:04.617 [DEBUG] [Thread-16722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:38:04.617 [DEBUG] [Thread-16722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] client lang: <none>
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] server lang: <none>
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] kex follows: False
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] Compression: none
2025-11-12T13:38:04.618 [DEBUG] [Thread-16722] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:38:04.678 [DEBUG] [Thread-16722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:38:04.678 [DEBUG] [Thread-16722] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:38:04.679 [DEBUG] [Thread-16722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:38:04.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:38:04.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:38:04.739 [DEBUG] [Thread-16722] [transport.py] [_log()] userauth is OK
2025-11-12T13:38:04.740 [DEBUG] [Thread-16722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:38:04.740 [DEBUG] [Thread-16722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:38:04.740 [DEBUG] [Thread-16722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:38:04.740 [DEBUG] [Thread-16722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:38:04.762 [INFO] [Thread-16722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:38:04.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:38:04.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:38:05.667 [DEBUG] [Thread-16722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:38:05.667 [DEBUG] [Thread-16722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:38:05.714 [DEBUG] [Thread-16722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:38:05.715 [DEBUG] [Thread-16722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:38:05.724 [DEBUG] [Thread-16722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:38:05.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:38:05.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-11-12T13:38:05.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-11-12T13:38:05.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:38:05.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:38:05.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:38:05.761 [DEBUG] [Thread-16722] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:38:15.839 [DEBUG] [Thread-16724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:38:20.685 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:38:20.686 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:38:31.013 [DEBUG] [Thread-16725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:38:34.501 [DEBUG] [Thread-16726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:38:35.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:38:35.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:38:35.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:38:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 38, 14), 38.85, 6.81, 0.0, 26.7, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:38:36.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:38:14
2025-11-12T13:38:36.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:38:36.657 [DEBUG] [Thread-16727] [transport.py] [_log()] starting thread (client mode): 0x14982710
2025-11-12T13:38:36.657 [DEBUG] [Thread-16727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:38:36.677 [DEBUG] [Thread-16727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:38:36.677 [INFO] [Thread-16727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:38:36.680 [DEBUG] [Thread-16727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:38:36.680 [DEBUG] [Thread-16727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] client lang: <none>
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] server lang: <none>
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] kex follows: False
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] Compression: none
2025-11-12T13:38:36.681 [DEBUG] [Thread-16727] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:38:36.698 [DEBUG] [Thread-16727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:38:36.699 [DEBUG] [Thread-16727] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:38:36.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:38:36.700 [DEBUG] [Thread-16727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:38:36.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:38:36.702 [DEBUG] [Thread-16727] [transport.py] [_log()] userauth is OK
2025-11-12T13:38:36.702 [DEBUG] [Thread-16727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:38:36.702 [DEBUG] [Thread-16727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:38:36.702 [DEBUG] [Thread-16727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:38:36.702 [DEBUG] [Thread-16727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:38:36.727 [INFO] [Thread-16727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:38:36.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:38:37.352 [DEBUG] [Thread-16727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:38:37.352 [DEBUG] [Thread-16727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:38:37.352 [DEBUG] [Thread-16727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:38:37.392 [DEBUG] [Thread-16727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:38:37.393 [DEBUG] [Thread-16727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:38:37.396 [DEBUG] [Thread-16727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:38:37.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:38:37.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:38:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:38:37.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:38:37.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:38:37.414 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:38:37.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:38:37.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:38:37.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:38:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.484810 -999.00  +26.70  27.53     12   -4.20 1 1 1 1 1   888    0 34.30 134.06 ----- 27.5 27.5 274.2 42.2 32.1 -31.4 31.7 -27.6 31.1 -36.6 32.5 -29.8
2025-11-12T13:38:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:38:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:38:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.484810
2025-11-12T13:38:37.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:38:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:38:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:38:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:38:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:38:37.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:38:14', tmtdew=38.85, humidity=6.81, cloud=0.0, wind=26.7, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:38:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:38:37.417 [DEBUG] [Thread-16727] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:38:37.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:38:37.512 [DEBUG] [Thread-16730] [transport.py] [_log()] starting thread (client mode): 0x149aa170
2025-11-12T13:38:37.512 [DEBUG] [Thread-16730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:38:37.526 [DEBUG] [Thread-16730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:38:37.526 [INFO] [Thread-16730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] client lang: <none>
2025-11-12T13:38:37.534 [DEBUG] [Thread-16730] [transport.py] [_log()] server lang: <none>
2025-11-12T13:38:37.535 [DEBUG] [Thread-16730] [transport.py] [_log()] kex follows: False
2025-11-12T13:38:37.535 [DEBUG] [Thread-16730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:38:37.535 [DEBUG] [Thread-16730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:38:37.535 [DEBUG] [Thread-16730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:38:37.535 [DEBUG] [Thread-16730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:38:37.535 [DEBUG] [Thread-16730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:38:37.535 [DEBUG] [Thread-16730] [transport.py] [_log()] Compression: none
2025-11-12T13:38:37.535 [DEBUG] [Thread-16730] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:38:37.593 [DEBUG] [Thread-16730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:38:37.594 [DEBUG] [Thread-16730] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:38:37.594 [DEBUG] [Thread-16730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:38:37.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:38:37.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:38:37.649 [DEBUG] [Thread-16730] [transport.py] [_log()] userauth is OK
2025-11-12T13:38:37.649 [DEBUG] [Thread-16730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:38:37.649 [DEBUG] [Thread-16730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:38:37.649 [DEBUG] [Thread-16730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:38:37.649 [DEBUG] [Thread-16730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:38:37.670 [INFO] [Thread-16730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:38:37.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:38:37.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:38:38.482 [DEBUG] [Thread-16730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:38:38.482 [DEBUG] [Thread-16730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:38:38.531 [DEBUG] [Thread-16730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:38:38.531 [DEBUG] [Thread-16730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:38:38.540 [DEBUG] [Thread-16730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:38:38.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:38:38.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-11-12T13:38:38.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-11-12T13:38:38.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:38:38.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:38:38.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:38:38.578 [DEBUG] [Thread-16730] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:38:46.054 [DEBUG] [Thread-16732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:39:01.114 [DEBUG] [Thread-16733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:39:08.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:39:08.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:39: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-11-12T13:39:09.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 38, 46), 38.4, 7.36, 0.0, 28.94, 27.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:39:09.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:38:46
2025-11-12T13:39:09.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:39:09.484 [DEBUG] [Thread-16734] [transport.py] [_log()] starting thread (client mode): 0x149abeb0
2025-11-12T13:39:09.484 [DEBUG] [Thread-16734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:39:09.503 [DEBUG] [Thread-16734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:39:09.503 [INFO] [Thread-16734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] client lang: <none>
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] server lang: <none>
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] kex follows: False
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:39:09.506 [DEBUG] [Thread-16734] [transport.py] [_log()] Compression: none
2025-11-12T13:39:09.507 [DEBUG] [Thread-16734] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:39:09.523 [DEBUG] [Thread-16734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:39:09.523 [DEBUG] [Thread-16734] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:39:09.524 [DEBUG] [Thread-16734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:39:09.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:39:09.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:39:09.526 [DEBUG] [Thread-16734] [transport.py] [_log()] userauth is OK
2025-11-12T13:39:09.526 [DEBUG] [Thread-16734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:39:09.526 [DEBUG] [Thread-16734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:39:09.526 [DEBUG] [Thread-16734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:39:09.526 [DEBUG] [Thread-16734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:39:09.545 [INFO] [Thread-16734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:39:09.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:39:10.153 [DEBUG] [Thread-16734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:39:10.154 [DEBUG] [Thread-16734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:39:10.154 [DEBUG] [Thread-16734] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:39:10.195 [DEBUG] [Thread-16734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:39:10.195 [DEBUG] [Thread-16734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:39:10.198 [DEBUG] [Thread-16734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:39:10.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:39:10.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:39:10.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:39:10.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:39:10.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:39:10.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:39:10.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:39:10.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:39:10.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:39:10.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.485158 -999.00  +26.50  23.72     13   -4.10 1 1 1 1 1   888    0 33.58 117.03 ----- 23.7 23.7 291.2 39.1 32.2 -27.8 31.7 -26.9 31.5 -26.1 32.4 -26.6
2025-11-12T13:39:10.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:39:10.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:39:10.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.485158
2025-11-12T13:39:10.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:39:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:39:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:39:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:39:10.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:39:10.223 [DEBUG] [Thread-16734] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:39:10.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:38:46', tmtdew=38.4, humidity=7.36, cloud=0.0, wind=28.94, temperature=27.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:38:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:39:10.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:39:10.319 [DEBUG] [Thread-16737] [transport.py] [_log()] starting thread (client mode): 0x149aac80
2025-11-12T13:39:10.320 [DEBUG] [Thread-16737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:39:10.334 [DEBUG] [Thread-16737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:39:10.334 [INFO] [Thread-16737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:39:10.342 [DEBUG] [Thread-16737] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:39:10.342 [DEBUG] [Thread-16737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] client lang: <none>
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] server lang: <none>
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] kex follows: False
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] Compression: none
2025-11-12T13:39:10.343 [DEBUG] [Thread-16737] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:39:10.401 [DEBUG] [Thread-16737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:39:10.402 [DEBUG] [Thread-16737] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:39:10.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:39:10.403 [DEBUG] [Thread-16737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:39:10.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:39:10.461 [DEBUG] [Thread-16737] [transport.py] [_log()] userauth is OK
2025-11-12T13:39:10.462 [DEBUG] [Thread-16737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:39:10.462 [DEBUG] [Thread-16737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:39:10.462 [DEBUG] [Thread-16737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:39:10.462 [DEBUG] [Thread-16737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:39:10.481 [INFO] [Thread-16737] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:39:10.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:39:10.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:39:11.320 [DEBUG] [Thread-16737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:39:11.321 [DEBUG] [Thread-16737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:39:11.369 [DEBUG] [Thread-16737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:39:11.369 [DEBUG] [Thread-16737] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:39:11.378 [DEBUG] [Thread-16737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:39:11.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:39:11.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:39:11.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-11-12T13:39:11.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:39:11.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:39:11.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:39:11.415 [DEBUG] [Thread-16737] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:39:16.148 [DEBUG] [Thread-16739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:39:20.826 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:39:20.827 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:39:31.200 [DEBUG] [Thread-16740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:39:34.533 [DEBUG] [Thread-16741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:39:41.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:39:41.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:39:41.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-11-12T13:39:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 39, 18), 38.33, 7.41, 0.0, 28.14, 27.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:39:42.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:39:18
2025-11-12T13:39:42.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:39:42.376 [DEBUG] [Thread-16742] [transport.py] [_log()] starting thread (client mode): 0x149a8520
2025-11-12T13:39:42.377 [DEBUG] [Thread-16742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:39:42.396 [DEBUG] [Thread-16742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:39:42.396 [INFO] [Thread-16742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] client lang: <none>
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] server lang: <none>
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] kex follows: False
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] Compression: none
2025-11-12T13:39:42.399 [DEBUG] [Thread-16742] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:39:42.414 [DEBUG] [Thread-16742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:39:42.414 [DEBUG] [Thread-16742] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:39:42.414 [DEBUG] [Thread-16742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:39:42.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:39:42.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:39:42.415 [DEBUG] [Thread-16742] [transport.py] [_log()] userauth is OK
2025-11-12T13:39:42.415 [DEBUG] [Thread-16742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:39:42.415 [DEBUG] [Thread-16742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:39:42.415 [DEBUG] [Thread-16742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:39:42.415 [DEBUG] [Thread-16742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:39:42.428 [INFO] [Thread-16742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:39:42.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:39:43.073 [DEBUG] [Thread-16742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:39:43.073 [DEBUG] [Thread-16742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:39:43.073 [DEBUG] [Thread-16742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:39:43.114 [DEBUG] [Thread-16742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:39:43.114 [DEBUG] [Thread-16742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:39:43.116 [DEBUG] [Thread-16742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:39:43.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:39:43.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:39:43.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:39:43.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:39:43.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:39:43.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:39:43.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.485505 -999.00  +26.20  20.15     12   -4.40 1 1 1 1 1   888    0 34.06 116.27 ----- 20.1 20.1 265.2 28.7 32.3 -27.3 31.9 -25.7 31.6 -28.0 32.5 -26.6
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.485505
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:39:43.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:39:18', tmtdew=38.33, humidity=7.41, cloud=0.0, wind=28.14, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:39:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:39:43.136 [DEBUG] [Thread-16742] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:39:43.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:39:43.221 [DEBUG] [Thread-16745] [transport.py] [_log()] starting thread (client mode): 0x149a9510
2025-11-12T13:39:43.221 [DEBUG] [Thread-16745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:39:43.236 [DEBUG] [Thread-16745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:39:43.236 [INFO] [Thread-16745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:39:43.243 [DEBUG] [Thread-16745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:39:43.243 [DEBUG] [Thread-16745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:39:43.243 [DEBUG] [Thread-16745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:39:43.243 [DEBUG] [Thread-16745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:39:43.243 [DEBUG] [Thread-16745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:39:43.243 [DEBUG] [Thread-16745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:39:43.243 [DEBUG] [Thread-16745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] client lang: <none>
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] server lang: <none>
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] kex follows: False
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] Compression: none
2025-11-12T13:39:43.244 [DEBUG] [Thread-16745] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:39:43.299 [DEBUG] [Thread-16745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:39:43.299 [DEBUG] [Thread-16745] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:39:43.299 [DEBUG] [Thread-16745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:39:43.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:39:43.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:39:43.356 [DEBUG] [Thread-16745] [transport.py] [_log()] userauth is OK
2025-11-12T13:39:43.356 [DEBUG] [Thread-16745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:39:43.356 [DEBUG] [Thread-16745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:39:43.356 [DEBUG] [Thread-16745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:39:43.356 [DEBUG] [Thread-16745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:39:43.370 [INFO] [Thread-16745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:39:43.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:39:43.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:39:44.204 [DEBUG] [Thread-16745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:39:44.204 [DEBUG] [Thread-16745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:39:44.252 [DEBUG] [Thread-16745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:39:44.252 [DEBUG] [Thread-16745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:39:44.260 [DEBUG] [Thread-16745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:39:44.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:39:44.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-11-12T13:39:44.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-11-12T13:39:44.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:39:44.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:39:44.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:39:44.291 [DEBUG] [Thread-16745] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:39:46.235 [DEBUG] [Thread-16747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:40:01.276 [DEBUG] [Thread-16748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:40:14.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:40:14.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:40:14.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-11-12T13:40:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 39, 50), 38.78, 7.34, 0.0, 24.54, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:40:14.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:39:50
2025-11-12T13:40:15.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:40:15.207 [DEBUG] [Thread-16749] [transport.py] [_log()] starting thread (client mode): 0x149a8a90
2025-11-12T13:40:15.207 [DEBUG] [Thread-16749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:40:15.227 [DEBUG] [Thread-16749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:40:15.227 [INFO] [Thread-16749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] client lang: <none>
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] server lang: <none>
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] kex follows: False
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] Compression: none
2025-11-12T13:40:15.230 [DEBUG] [Thread-16749] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:40:15.250 [DEBUG] [Thread-16749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:40:15.251 [DEBUG] [Thread-16749] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:40:15.251 [DEBUG] [Thread-16749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:40:15.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:40:15.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:40:15.253 [DEBUG] [Thread-16749] [transport.py] [_log()] userauth is OK
2025-11-12T13:40:15.254 [DEBUG] [Thread-16749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:40:15.254 [DEBUG] [Thread-16749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:40:15.254 [DEBUG] [Thread-16749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:40:15.254 [DEBUG] [Thread-16749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:40:15.276 [INFO] [Thread-16749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:40:15.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:40:16.313 [DEBUG] [Thread-16751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:40:16.967 [DEBUG] [Thread-16749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:40:16.968 [DEBUG] [Thread-16749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:40:16.968 [DEBUG] [Thread-16749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:40:17.008 [DEBUG] [Thread-16749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:40:17.008 [DEBUG] [Thread-16749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:40:17.010 [DEBUG] [Thread-16749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:40:17.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:40:17.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:40:17.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:40:17.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:40:17.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:40:17.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:40:17.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:40:17.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:40:17.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:40:17.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.485505 -999.00  +26.20  20.15     12   -4.40 1 1 1 1 1   888    0 34.06 116.27 ----- 20.1 20.1 265.2 28.7 32.3 -27.3 31.9 -25.7 31.6 -28.0 32.5 -26.6
2025-11-12T13:40:17.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:40:17.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:40:17.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.485505
2025-11-12T13:40:17.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:40:17.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:40:17.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:40:17.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:40:17.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:40:17.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:39:50', tmtdew=38.78, humidity=7.34, cloud=0.0, wind=24.54, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:39:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:40:17.029 [DEBUG] [Thread-16749] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:40:17.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:40:17.112 [DEBUG] [Thread-16753] [transport.py] [_log()] starting thread (client mode): 0x149abbb0
2025-11-12T13:40:17.112 [DEBUG] [Thread-16753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:40:17.127 [DEBUG] [Thread-16753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:40:17.127 [INFO] [Thread-16753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:40:17.134 [DEBUG] [Thread-16753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:40:17.134 [DEBUG] [Thread-16753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] client lang: <none>
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] server lang: <none>
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] kex follows: False
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] Compression: none
2025-11-12T13:40:17.135 [DEBUG] [Thread-16753] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:40:17.193 [DEBUG] [Thread-16753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:40:17.194 [DEBUG] [Thread-16753] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:40:17.194 [DEBUG] [Thread-16753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:40:17.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:40:17.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:40:17.249 [DEBUG] [Thread-16753] [transport.py] [_log()] userauth is OK
2025-11-12T13:40:17.249 [DEBUG] [Thread-16753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:40:17.250 [DEBUG] [Thread-16753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:40:17.250 [DEBUG] [Thread-16753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:40:17.250 [DEBUG] [Thread-16753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:40:17.269 [INFO] [Thread-16753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:40:17.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:40:17.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:40:18.123 [DEBUG] [Thread-16753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:40:18.123 [DEBUG] [Thread-16753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:40:18.172 [DEBUG] [Thread-16753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:40:18.172 [DEBUG] [Thread-16753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:40:18.181 [DEBUG] [Thread-16753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:40:18.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:40:18.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-11-12T13:40:18.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-11-12T13:40:18.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:40:18.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:40:18.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:40:18.218 [DEBUG] [Thread-16753] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:40:20.968 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:40:20.969 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:40:31.353 [DEBUG] [Thread-16755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:40:34.566 [DEBUG] [Thread-16756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:40:46.403 [DEBUG] [Thread-16757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:40:48.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:40:48.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:40:48.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-11-12T13:40:48.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 40, 22), 38.7, 7.39, 0.0, 30.49, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:40:48.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:40:22
2025-11-12T13:40:48.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:40:49.129 [DEBUG] [Thread-16758] [transport.py] [_log()] starting thread (client mode): 0x17399510
2025-11-12T13:40:49.129 [DEBUG] [Thread-16758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:40:49.149 [DEBUG] [Thread-16758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:40:49.150 [INFO] [Thread-16758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:40:49.152 [DEBUG] [Thread-16758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] client lang: <none>
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] server lang: <none>
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] kex follows: False
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] Compression: none
2025-11-12T13:40:49.153 [DEBUG] [Thread-16758] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:40:49.171 [DEBUG] [Thread-16758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:40:49.171 [DEBUG] [Thread-16758] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:40:49.172 [DEBUG] [Thread-16758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:40:49.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:40:49.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:40:49.174 [DEBUG] [Thread-16758] [transport.py] [_log()] userauth is OK
2025-11-12T13:40:49.174 [DEBUG] [Thread-16758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:40:49.174 [DEBUG] [Thread-16758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:40:49.174 [DEBUG] [Thread-16758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:40:49.174 [DEBUG] [Thread-16758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:40:49.199 [INFO] [Thread-16758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:40:49.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:40:49.790 [DEBUG] [Thread-16758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:40:49.790 [DEBUG] [Thread-16758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:40:49.790 [DEBUG] [Thread-16758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:40:49.831 [DEBUG] [Thread-16758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:40:49.831 [DEBUG] [Thread-16758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:40:49.835 [DEBUG] [Thread-16758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:40:49.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:40:49.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:40:49.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:40:49.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:40:49.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:40:49.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:40:49.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:40:49.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:40:49.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:40:49.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.486199 -999.00  +26.90  27.01     12   -4.20 1 1 1 1 1   888    0 33.34 114.49 ----- 27.0 27.0 266.2 31.2 32.4 -27.7 31.9 -26.7 31.8 -25.2 32.5 -27.2
2025-11-12T13:40:49.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:40:49.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:40:49.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.486199
2025-11-12T13:40:49.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:40:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:40:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:40:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:40:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:40:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:40:22', tmtdew=38.7, humidity=7.39, cloud=0.0, wind=30.49, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:40:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:40:49.865 [DEBUG] [Thread-16758] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:40:49.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:40:49.959 [DEBUG] [Thread-16761] [transport.py] [_log()] starting thread (client mode): 0x1739b5e0
2025-11-12T13:40:49.959 [DEBUG] [Thread-16761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:40:49.973 [DEBUG] [Thread-16761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:40:49.973 [INFO] [Thread-16761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] client lang: <none>
2025-11-12T13:40:49.981 [DEBUG] [Thread-16761] [transport.py] [_log()] server lang: <none>
2025-11-12T13:40:49.982 [DEBUG] [Thread-16761] [transport.py] [_log()] kex follows: False
2025-11-12T13:40:49.982 [DEBUG] [Thread-16761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:40:49.982 [DEBUG] [Thread-16761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:40:49.982 [DEBUG] [Thread-16761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:40:49.982 [DEBUG] [Thread-16761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:40:49.982 [DEBUG] [Thread-16761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:40:49.982 [DEBUG] [Thread-16761] [transport.py] [_log()] Compression: none
2025-11-12T13:40:49.982 [DEBUG] [Thread-16761] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:40:50.041 [DEBUG] [Thread-16761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:40:50.042 [DEBUG] [Thread-16761] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:40:50.042 [DEBUG] [Thread-16761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:40:50.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:40:50.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:40:50.101 [DEBUG] [Thread-16761] [transport.py] [_log()] userauth is OK
2025-11-12T13:40:50.101 [DEBUG] [Thread-16761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:40:50.101 [DEBUG] [Thread-16761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:40:50.101 [DEBUG] [Thread-16761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:40:50.102 [DEBUG] [Thread-16761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:40:50.121 [INFO] [Thread-16761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:40:50.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:40:50.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:40:50.978 [DEBUG] [Thread-16761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:40:50.979 [DEBUG] [Thread-16761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:40:51.027 [DEBUG] [Thread-16761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:40:51.027 [DEBUG] [Thread-16761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:40:51.036 [DEBUG] [Thread-16761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:40:51.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:40:51.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:40:51.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:40:51.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:40:51.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:40:51.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:40:51.072 [DEBUG] [Thread-16761] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:41:01.433 [DEBUG] [Thread-16763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:41:16.482 [DEBUG] [Thread-16764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:41:21.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:41:21.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:41:21.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-11-12T13:41:21.110 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:41:21.111 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:41:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 40, 54), 38.72, 7.42, 0.0, 26.82, 27.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:41:21.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:40:54
2025-11-12T13:41:21.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:41:21.995 [DEBUG] [Thread-16765] [transport.py] [_log()] starting thread (client mode): 0x173994e0
2025-11-12T13:41:21.995 [DEBUG] [Thread-16765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:41:22.015 [DEBUG] [Thread-16765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:41:22.016 [INFO] [Thread-16765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:41:22.018 [DEBUG] [Thread-16765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:41:22.018 [DEBUG] [Thread-16765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:41:22.018 [DEBUG] [Thread-16765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] client lang: <none>
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] server lang: <none>
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] kex follows: False
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] Compression: none
2025-11-12T13:41:22.019 [DEBUG] [Thread-16765] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:41:22.036 [DEBUG] [Thread-16765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:41:22.037 [DEBUG] [Thread-16765] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:41:22.037 [DEBUG] [Thread-16765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:41:22.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:41:22.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:41:22.081 [DEBUG] [Thread-16765] [transport.py] [_log()] userauth is OK
2025-11-12T13:41:22.081 [DEBUG] [Thread-16765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:41:22.081 [DEBUG] [Thread-16765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:41:22.082 [DEBUG] [Thread-16765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:41:22.082 [DEBUG] [Thread-16765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:41:22.102 [INFO] [Thread-16765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:41:22.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:41:22.759 [DEBUG] [Thread-16765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:41:22.759 [DEBUG] [Thread-16765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:41:22.759 [DEBUG] [Thread-16765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:41:22.800 [DEBUG] [Thread-16765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:41:22.800 [DEBUG] [Thread-16765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:41:22.803 [DEBUG] [Thread-16765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:41:22.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:41:22.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:41:22.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:41:22.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:41:22.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:41:22.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:41:22.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:41:22.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:41:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:41:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.486547 -999.00  +27.20  31.12     12   -4.10 1 1 2 1 1   888    0 33.63 108.15 ----- 31.1 31.1 269.8 35.3 32.4 -29.8 31.9 -26.8 31.6 -30.2 32.7 -26.9
2025-11-12T13:41:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:41:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:41:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.486547
2025-11-12T13:41:22.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:41:22.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:41:22.831 [DEBUG] [Thread-16765] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:41:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:41:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:41:22.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:41:22.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:40:54', tmtdew=38.72, humidity=7.42, cloud=0.0, wind=26.82, temperature=27.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:40:37.661', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:41:22.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:41:22.927 [DEBUG] [Thread-16768] [transport.py] [_log()] starting thread (client mode): 0x1737d180
2025-11-12T13:41:22.928 [DEBUG] [Thread-16768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:41:22.942 [DEBUG] [Thread-16768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:41:22.942 [INFO] [Thread-16768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:41:22.950 [DEBUG] [Thread-16768] [transport.py] [_log()] client lang: <none>
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] server lang: <none>
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] kex follows: False
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] Compression: none
2025-11-12T13:41:22.951 [DEBUG] [Thread-16768] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:41:23.009 [DEBUG] [Thread-16768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:41:23.010 [DEBUG] [Thread-16768] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:41:23.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:41:23.011 [DEBUG] [Thread-16768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:41:23.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:41:23.069 [DEBUG] [Thread-16768] [transport.py] [_log()] userauth is OK
2025-11-12T13:41:23.069 [DEBUG] [Thread-16768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:41:23.069 [DEBUG] [Thread-16768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:41:23.070 [DEBUG] [Thread-16768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:41:23.070 [DEBUG] [Thread-16768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:41:23.088 [INFO] [Thread-16768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:41:23.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:41:23.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:41:23.950 [DEBUG] [Thread-16768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:41:23.950 [DEBUG] [Thread-16768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:41:23.999 [DEBUG] [Thread-16768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:41:23.999 [DEBUG] [Thread-16768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:41:24.008 [DEBUG] [Thread-16768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:41:24.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:41:24.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-11-12T13:41:24.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-11-12T13:41:24.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:41:24.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:41:24.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:41:24.044 [DEBUG] [Thread-16768] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:41:31.518 [DEBUG] [Thread-16770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:41:34.599 [DEBUG] [Thread-16771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:41:46.576 [DEBUG] [Thread-16772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:41:54.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:41:54.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:41:54.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-11-12T13:41:54.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 41, 26), 38.74, 7.42, 0.0, 27.03, 27.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:41:54.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:41:26
2025-11-12T13:41:54.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:41:54.920 [DEBUG] [Thread-16773] [transport.py] [_log()] starting thread (client mode): 0x1737eec0
2025-11-12T13:41:54.920 [DEBUG] [Thread-16773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:41:54.940 [DEBUG] [Thread-16773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:41:54.941 [INFO] [Thread-16773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] client lang: <none>
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] server lang: <none>
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] kex follows: False
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] Compression: none
2025-11-12T13:41:54.944 [DEBUG] [Thread-16773] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:41:54.962 [DEBUG] [Thread-16773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:41:54.963 [DEBUG] [Thread-16773] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:41:54.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:41:54.964 [DEBUG] [Thread-16773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:41:54.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:41:54.966 [DEBUG] [Thread-16773] [transport.py] [_log()] userauth is OK
2025-11-12T13:41:54.966 [DEBUG] [Thread-16773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:41:54.966 [DEBUG] [Thread-16773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:41:54.966 [DEBUG] [Thread-16773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:41:54.966 [DEBUG] [Thread-16773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:41:54.989 [INFO] [Thread-16773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:41:54.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:41:55.623 [DEBUG] [Thread-16773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:41:55.623 [DEBUG] [Thread-16773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:41:55.623 [DEBUG] [Thread-16773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:41:55.664 [DEBUG] [Thread-16773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:41:55.664 [DEBUG] [Thread-16773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:41:55.666 [DEBUG] [Thread-16773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:41:55.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:41:55.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:41:55.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:41:55.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:41:55.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:41:55.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:41:55.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.486894 -999.00  +27.30  21.85     12   -3.80 1 1 1 1 1   888    0 33.42 98.27 ----- 21.9 21.9 268.0 28.3 32.5 -26.6 32.0 -26.1 31.9 -25.0 32.6 -26.1
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.486894
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:41:55.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:41:55.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:41:26', tmtdew=38.74, humidity=7.42, cloud=0.0, wind=27.03, temperature=27.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:41:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:41:55.687 [DEBUG] [Thread-16773] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:41:55.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:41:55.774 [DEBUG] [Thread-16776] [transport.py] [_log()] starting thread (client mode): 0x149aafb0
2025-11-12T13:41:55.774 [DEBUG] [Thread-16776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:41:55.789 [DEBUG] [Thread-16776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:41:55.790 [INFO] [Thread-16776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:41:55.797 [DEBUG] [Thread-16776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:41:55.797 [DEBUG] [Thread-16776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:41:55.797 [DEBUG] [Thread-16776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:41:55.797 [DEBUG] [Thread-16776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:41:55.797 [DEBUG] [Thread-16776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:41:55.797 [DEBUG] [Thread-16776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:41:55.797 [DEBUG] [Thread-16776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:41:55.797 [DEBUG] [Thread-16776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] client lang: <none>
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] server lang: <none>
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] kex follows: False
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] Compression: none
2025-11-12T13:41:55.798 [DEBUG] [Thread-16776] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:41:55.856 [DEBUG] [Thread-16776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:41:55.856 [DEBUG] [Thread-16776] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:41:55.857 [DEBUG] [Thread-16776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:41:55.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:41:55.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:41:55.913 [DEBUG] [Thread-16776] [transport.py] [_log()] userauth is OK
2025-11-12T13:41:55.913 [DEBUG] [Thread-16776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:41:55.913 [DEBUG] [Thread-16776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:41:55.913 [DEBUG] [Thread-16776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:41:55.913 [DEBUG] [Thread-16776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:41:55.933 [INFO] [Thread-16776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:41:55.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:41:55.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:41:56.800 [DEBUG] [Thread-16776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:41:56.800 [DEBUG] [Thread-16776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:41:56.847 [DEBUG] [Thread-16776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:41:56.848 [DEBUG] [Thread-16776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:41:56.857 [DEBUG] [Thread-16776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:41:56.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:41:56.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-11-12T13:41:56.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-11-12T13:41:56.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:41:56.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:41:56.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:41:56.892 [DEBUG] [Thread-16776] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:42:01.612 [DEBUG] [Thread-16778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:42:16.661 [DEBUG] [Thread-16779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:42:21.257 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:42:21.258 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:42:26.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:42:26.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:42:26.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-11-12T13:42:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 41, 58), 39.25, 6.88, 0.0, 35.27, 28.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:42:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:41:58
2025-11-12T13:42:27.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:42:27.798 [DEBUG] [Thread-16780] [transport.py] [_log()] starting thread (client mode): 0x1493ded0
2025-11-12T13:42:27.798 [DEBUG] [Thread-16780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:42:27.819 [DEBUG] [Thread-16780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:42:27.819 [INFO] [Thread-16780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:42:27.822 [DEBUG] [Thread-16780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:42:27.822 [DEBUG] [Thread-16780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:42:27.822 [DEBUG] [Thread-16780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:42:27.822 [DEBUG] [Thread-16780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:42:27.822 [DEBUG] [Thread-16780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:42:27.822 [DEBUG] [Thread-16780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:42:27.822 [DEBUG] [Thread-16780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] client lang: <none>
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] server lang: <none>
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] kex follows: False
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] Compression: none
2025-11-12T13:42:27.823 [DEBUG] [Thread-16780] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:42:27.842 [DEBUG] [Thread-16780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:42:27.843 [DEBUG] [Thread-16780] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:42:27.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:42:27.845 [DEBUG] [Thread-16780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:42:27.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:42:27.847 [DEBUG] [Thread-16780] [transport.py] [_log()] userauth is OK
2025-11-12T13:42:27.847 [DEBUG] [Thread-16780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:42:27.847 [DEBUG] [Thread-16780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:42:27.847 [DEBUG] [Thread-16780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:42:27.848 [DEBUG] [Thread-16780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:42:27.883 [INFO] [Thread-16780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:42:27.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:42:28.521 [DEBUG] [Thread-16780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:42:28.521 [DEBUG] [Thread-16780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:42:28.522 [DEBUG] [Thread-16780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:42:28.562 [DEBUG] [Thread-16780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:42:28.562 [DEBUG] [Thread-16780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:42:28.565 [DEBUG] [Thread-16780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:42:28.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:42:28.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:42:28.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:42:28.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:42:28.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:42:28.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:42:28.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:42:28.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:42:28.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:42:28.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.487241 -999.00  +27.50  18.49     12   -4.20 1 1 1 1 1   888    0 32.82 82.44 ----- 18.5 18.5 260.6 32.4 32.5 -28.3 32.1 -27.6 32.0 -25.6 32.6 -28.0
2025-11-12T13:42:28.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:42:28.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:42:28.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.487241
2025-11-12T13:42:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:42:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:42:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:42:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:42:28.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:42:28.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:41:58', tmtdew=39.25, humidity=6.88, cloud=0.0, wind=35.27, temperature=28.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:41:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:42:28.592 [DEBUG] [Thread-16780] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:42:28.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:42:28.687 [DEBUG] [Thread-16783] [transport.py] [_log()] starting thread (client mode): 0x149208b0
2025-11-12T13:42:28.687 [DEBUG] [Thread-16783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:42:28.702 [DEBUG] [Thread-16783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:42:28.702 [INFO] [Thread-16783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] client lang: <none>
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] server lang: <none>
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] kex follows: False
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:42:28.710 [DEBUG] [Thread-16783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:42:28.711 [DEBUG] [Thread-16783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:42:28.711 [DEBUG] [Thread-16783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:42:28.711 [DEBUG] [Thread-16783] [transport.py] [_log()] Compression: none
2025-11-12T13:42:28.711 [DEBUG] [Thread-16783] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:42:28.773 [DEBUG] [Thread-16783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:42:28.773 [DEBUG] [Thread-16783] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:42:28.774 [DEBUG] [Thread-16783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:42:28.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:42:28.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:42:28.829 [DEBUG] [Thread-16783] [transport.py] [_log()] userauth is OK
2025-11-12T13:42:28.829 [DEBUG] [Thread-16783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:42:28.829 [DEBUG] [Thread-16783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:42:28.829 [DEBUG] [Thread-16783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:42:28.829 [DEBUG] [Thread-16783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:42:28.848 [INFO] [Thread-16783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:42:28.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:42:28.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:42:29.822 [DEBUG] [Thread-16783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:42:29.822 [DEBUG] [Thread-16783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:42:29.869 [DEBUG] [Thread-16783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:42:29.870 [DEBUG] [Thread-16783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:42:29.879 [DEBUG] [Thread-16783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:42:29.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:42:29.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-11-12T13:42:29.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-11-12T13:42:29.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:42:29.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:42:29.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:42:29.916 [DEBUG] [Thread-16783] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:42:31.691 [DEBUG] [Thread-16785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:42:34.632 [DEBUG] [Thread-16786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:42:46.730 [DEBUG] [Thread-16787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:42:59.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:42:59.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:42:59.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-11-12T13:43:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 42, 30), 40.02, 6.53, 0.0, 32.29, 28.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:43:00.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:42:30
2025-11-12T13:43:00.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:43:00.811 [DEBUG] [Thread-16788] [transport.py] [_log()] starting thread (client mode): 0x149ab760
2025-11-12T13:43:00.812 [DEBUG] [Thread-16788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:43:00.833 [DEBUG] [Thread-16788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:43:00.833 [INFO] [Thread-16788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:43:00.836 [DEBUG] [Thread-16788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:43:00.836 [DEBUG] [Thread-16788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:43:00.836 [DEBUG] [Thread-16788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:43:00.836 [DEBUG] [Thread-16788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:43:00.836 [DEBUG] [Thread-16788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:43:00.836 [DEBUG] [Thread-16788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] client lang: <none>
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] server lang: <none>
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] kex follows: False
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] Compression: none
2025-11-12T13:43:00.837 [DEBUG] [Thread-16788] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:43:00.854 [DEBUG] [Thread-16788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:43:00.855 [DEBUG] [Thread-16788] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:43:00.855 [DEBUG] [Thread-16788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:43:00.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:43:00.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:43:00.857 [DEBUG] [Thread-16788] [transport.py] [_log()] userauth is OK
2025-11-12T13:43:00.858 [DEBUG] [Thread-16788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:43:00.858 [DEBUG] [Thread-16788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:43:00.858 [DEBUG] [Thread-16788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:43:00.858 [DEBUG] [Thread-16788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:43:00.884 [INFO] [Thread-16788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:43:00.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:43:01.470 [DEBUG] [Thread-16788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:43:01.470 [DEBUG] [Thread-16788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:43:01.471 [DEBUG] [Thread-16788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:43:01.511 [DEBUG] [Thread-16788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:43:01.512 [DEBUG] [Thread-16788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:43:01.515 [DEBUG] [Thread-16788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:43:01.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:43:01.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:43:01.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:43:01.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:43:01.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:43:01.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:43:01.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:43:01.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:43:01.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:43:01.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.487588 -999.00  +27.20  36.58     11   -5.20 1 1 2 1 1   888    0 32.42 82.42 ----- 36.6 36.6 273.4 40.2 32.4 -28.5 31.9 -27.6 31.6 -28.5 32.6 -26.9
2025-11-12T13:43:01.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:43:01.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:43:01.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.487588
2025-11-12T13:43:01.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:43:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:43:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:43:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:43:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:43:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:42:30', tmtdew=40.02, humidity=6.53, cloud=0.0, wind=32.29, temperature=28.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:42:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:43:01.536 [DEBUG] [Thread-16788] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:43:01.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:43:01.635 [DEBUG] [Thread-16791] [transport.py] [_log()] starting thread (client mode): 0x149a9900
2025-11-12T13:43:01.635 [DEBUG] [Thread-16791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:43:01.651 [DEBUG] [Thread-16791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:43:01.651 [INFO] [Thread-16791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:43:01.658 [DEBUG] [Thread-16791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:43:01.659 [DEBUG] [Thread-16791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:43:01.659 [DEBUG] [Thread-16791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:43:01.659 [DEBUG] [Thread-16791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:43:01.659 [DEBUG] [Thread-16791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:43:01.659 [DEBUG] [Thread-16791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:43:01.659 [DEBUG] [Thread-16791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:43:01.660 [DEBUG] [Thread-16791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:43:01.660 [DEBUG] [Thread-16791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:43:01.660 [DEBUG] [Thread-16791] [transport.py] [_log()] client lang: <none>
2025-11-12T13:43:01.660 [DEBUG] [Thread-16791] [transport.py] [_log()] server lang: <none>
2025-11-12T13:43:01.660 [DEBUG] [Thread-16791] [transport.py] [_log()] kex follows: False
2025-11-12T13:43:01.660 [DEBUG] [Thread-16791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:43:01.660 [DEBUG] [Thread-16791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:43:01.660 [DEBUG] [Thread-16791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:43:01.661 [DEBUG] [Thread-16791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:43:01.661 [DEBUG] [Thread-16791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:43:01.661 [DEBUG] [Thread-16791] [transport.py] [_log()] Compression: none
2025-11-12T13:43:01.661 [DEBUG] [Thread-16791] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:43:01.717 [DEBUG] [Thread-16791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:43:01.717 [DEBUG] [Thread-16791] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:43:01.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:43:01.717 [DEBUG] [Thread-16791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:43:01.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:43:01.763 [DEBUG] [Thread-16793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:43:01.772 [DEBUG] [Thread-16791] [transport.py] [_log()] userauth is OK
2025-11-12T13:43:01.772 [DEBUG] [Thread-16791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:43:01.772 [DEBUG] [Thread-16791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:43:01.772 [DEBUG] [Thread-16791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:43:01.772 [DEBUG] [Thread-16791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:43:01.787 [INFO] [Thread-16791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:43:01.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:43:01.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:43:02.703 [DEBUG] [Thread-16791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:43:02.703 [DEBUG] [Thread-16791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:43:02.752 [DEBUG] [Thread-16791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:43:02.752 [DEBUG] [Thread-16791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:43:02.760 [DEBUG] [Thread-16791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:43:02.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:43:02.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-11-12T13:43:02.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-11-12T13:43:02.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:43:02.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:43:02.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:43:02.802 [DEBUG] [Thread-16791] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:43:16.805 [DEBUG] [Thread-16794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:43:21.400 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:43:21.401 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:43:31.842 [DEBUG] [Thread-16795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:43:32.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:43:32.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:43:32.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:43:33.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 43, 2), 40.13, 6.48, 0.0, 33.72, 28.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:43:33.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:43:02
2025-11-12T13:43:33.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:43:33.767 [DEBUG] [Thread-16796] [transport.py] [_log()] starting thread (client mode): 0x1493ec50
2025-11-12T13:43:33.767 [DEBUG] [Thread-16796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:43:33.787 [DEBUG] [Thread-16796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:43:33.787 [INFO] [Thread-16796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:43:33.790 [DEBUG] [Thread-16796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:43:33.790 [DEBUG] [Thread-16796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:43:33.790 [DEBUG] [Thread-16796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:43:33.790 [DEBUG] [Thread-16796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:43:33.790 [DEBUG] [Thread-16796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:43:33.790 [DEBUG] [Thread-16796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:43:33.790 [DEBUG] [Thread-16796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] client lang: <none>
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] server lang: <none>
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] kex follows: False
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] Compression: none
2025-11-12T13:43:33.791 [DEBUG] [Thread-16796] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:43:33.809 [DEBUG] [Thread-16796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:43:33.809 [DEBUG] [Thread-16796] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:43:33.809 [DEBUG] [Thread-16796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:43:33.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:43:33.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:43:33.810 [DEBUG] [Thread-16796] [transport.py] [_log()] userauth is OK
2025-11-12T13:43:33.810 [DEBUG] [Thread-16796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:43:33.810 [DEBUG] [Thread-16796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:43:33.810 [DEBUG] [Thread-16796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:43:33.810 [DEBUG] [Thread-16796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:43:33.823 [INFO] [Thread-16796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:43:33.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:43:34.481 [DEBUG] [Thread-16796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:43:34.481 [DEBUG] [Thread-16796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:43:34.481 [DEBUG] [Thread-16796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:43:34.522 [DEBUG] [Thread-16796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:43:34.522 [DEBUG] [Thread-16796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:43:34.524 [DEBUG] [Thread-16796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:43:34.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:43:34.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:43:34.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:43:34.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:43:34.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:43:34.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:43:34.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.487935 -999.00  +26.80  33.52     11   -5.20 1 1 2 1 1   888    0 33.15 83.66 ----- 33.5 33.5 279.6 39.6 32.3 -29.4 31.9 -26.9 31.6 -30.6 32.5 -27.4
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.487935
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:43:34.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:43:02', tmtdew=40.13, humidity=6.48, cloud=0.0, wind=33.72, temperature=28.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:42:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:43:34.544 [DEBUG] [Thread-16796] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:43:34.616 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:43:34.630 [DEBUG] [Thread-16799] [transport.py] [_log()] starting thread (client mode): 0x1737f040
2025-11-12T13:43:34.630 [DEBUG] [Thread-16799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:43:34.645 [DEBUG] [Thread-16799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:43:34.645 [INFO] [Thread-16799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] client lang: <none>
2025-11-12T13:43:34.652 [DEBUG] [Thread-16799] [transport.py] [_log()] server lang: <none>
2025-11-12T13:43:34.653 [DEBUG] [Thread-16799] [transport.py] [_log()] kex follows: False
2025-11-12T13:43:34.653 [DEBUG] [Thread-16799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:43:34.653 [DEBUG] [Thread-16799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:43:34.653 [DEBUG] [Thread-16799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:43:34.653 [DEBUG] [Thread-16799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:43:34.653 [DEBUG] [Thread-16799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:43:34.653 [DEBUG] [Thread-16799] [transport.py] [_log()] Compression: none
2025-11-12T13:43:34.653 [DEBUG] [Thread-16799] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:43:34.661 [DEBUG] [Thread-16801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:43:34.707 [DEBUG] [Thread-16799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:43:34.707 [DEBUG] [Thread-16799] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:43:34.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:43:34.707 [DEBUG] [Thread-16799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:43:34.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:43:34.764 [DEBUG] [Thread-16799] [transport.py] [_log()] userauth is OK
2025-11-12T13:43:34.764 [DEBUG] [Thread-16799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:43:34.764 [DEBUG] [Thread-16799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:43:34.764 [DEBUG] [Thread-16799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:43:34.764 [DEBUG] [Thread-16799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:43:34.778 [INFO] [Thread-16799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:43:34.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:43:34.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:43:35.635 [DEBUG] [Thread-16799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:43:35.635 [DEBUG] [Thread-16799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:43:35.683 [DEBUG] [Thread-16799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:43:35.683 [DEBUG] [Thread-16799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:43:35.691 [DEBUG] [Thread-16799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:43:35.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:43:35.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-11-12T13:43: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-11-12T13:43:35.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:43:35.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:43:35.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:43:35.723 [DEBUG] [Thread-16799] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:43:46.877 [DEBUG] [Thread-16802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:44:01.930 [DEBUG] [Thread-16803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:44:05.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:44:05.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:44: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-11-12T13:44:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 43, 34), 39.77, 6.53, 0.0, 40.12, 27.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:44:06.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:43:34
2025-11-12T13:44:06.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:44:06.639 [DEBUG] [Thread-16804] [transport.py] [_log()] starting thread (client mode): 0x1493e710
2025-11-12T13:44:06.640 [DEBUG] [Thread-16804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:44:06.660 [DEBUG] [Thread-16804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:44:06.660 [INFO] [Thread-16804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:44:06.663 [DEBUG] [Thread-16804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:44:06.663 [DEBUG] [Thread-16804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:44:06.663 [DEBUG] [Thread-16804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] client lang: <none>
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] server lang: <none>
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] kex follows: False
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:44:06.664 [DEBUG] [Thread-16804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:44:06.665 [DEBUG] [Thread-16804] [transport.py] [_log()] Compression: none
2025-11-12T13:44:06.665 [DEBUG] [Thread-16804] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:44:06.683 [DEBUG] [Thread-16804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:44:06.684 [DEBUG] [Thread-16804] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:44:06.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:44:06.685 [DEBUG] [Thread-16804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:44:06.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:44:06.687 [DEBUG] [Thread-16804] [transport.py] [_log()] userauth is OK
2025-11-12T13:44:06.687 [DEBUG] [Thread-16804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:44:06.687 [DEBUG] [Thread-16804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:44:06.687 [DEBUG] [Thread-16804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:44:06.687 [DEBUG] [Thread-16804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:44:06.711 [INFO] [Thread-16804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:44:06.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:44:07.370 [DEBUG] [Thread-16804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:44:07.370 [DEBUG] [Thread-16804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:44:07.371 [DEBUG] [Thread-16804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:44:07.411 [DEBUG] [Thread-16804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:44:07.411 [DEBUG] [Thread-16804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:44:07.414 [DEBUG] [Thread-16804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:44:07.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:44:07.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:44:07.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:44:07.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:44:07.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:44:07.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:44:07.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.488283 -999.00  +26.90  32.16     12   -4.70 1 1 2 1 1   888    0 32.80 90.88 ----- 32.2 32.2 275.0 47.5 32.3 -28.0 31.9 -27.5 31.6 -27.4 32.5 -29.0
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.488283
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:44:07.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:43:34', tmtdew=39.77, humidity=6.53, cloud=0.0, wind=40.12, temperature=27.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:43:07.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:44:07.432 [DEBUG] [Thread-16804] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:44:07.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:44:07.517 [DEBUG] [Thread-16807] [transport.py] [_log()] starting thread (client mode): 0x19ddabf0
2025-11-12T13:44:07.517 [DEBUG] [Thread-16807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:44:07.532 [DEBUG] [Thread-16807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:44:07.532 [INFO] [Thread-16807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:44:07.539 [DEBUG] [Thread-16807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:44:07.539 [DEBUG] [Thread-16807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:44:07.539 [DEBUG] [Thread-16807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:44:07.539 [DEBUG] [Thread-16807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:44:07.539 [DEBUG] [Thread-16807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:44:07.539 [DEBUG] [Thread-16807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:44:07.539 [DEBUG] [Thread-16807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] client lang: <none>
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] server lang: <none>
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] kex follows: False
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] Compression: none
2025-11-12T13:44:07.540 [DEBUG] [Thread-16807] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:44:07.595 [DEBUG] [Thread-16807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:44:07.596 [DEBUG] [Thread-16807] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:44:07.596 [DEBUG] [Thread-16807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:44:07.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:44:07.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:44:07.652 [DEBUG] [Thread-16807] [transport.py] [_log()] userauth is OK
2025-11-12T13:44:07.652 [DEBUG] [Thread-16807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:44:07.652 [DEBUG] [Thread-16807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:44:07.652 [DEBUG] [Thread-16807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:44:07.653 [DEBUG] [Thread-16807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:44:07.667 [INFO] [Thread-16807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:44:07.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:44:07.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:44:08.525 [DEBUG] [Thread-16807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:44:08.525 [DEBUG] [Thread-16807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:44:08.574 [DEBUG] [Thread-16807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:44:08.574 [DEBUG] [Thread-16807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:44:08.581 [DEBUG] [Thread-16807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:44:08.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:44:08.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-11-12T13:44:08.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:44:08.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:44:08.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:44:08.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:44:08.613 [DEBUG] [Thread-16807] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:44:16.967 [DEBUG] [Thread-16809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:44:21.543 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:44:21.544 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:44:32.022 [DEBUG] [Thread-16810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:44:34.695 [DEBUG] [Thread-16811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:44:38.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:44:38.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:44:38.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:44:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 44, 6), 39.49, 6.64, 0.0, 37.55, 27.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:44:39.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:44:06
2025-11-12T13:44:39.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:44:39.587 [DEBUG] [Thread-16812] [transport.py] [_log()] starting thread (client mode): 0x1737f3d0
2025-11-12T13:44:39.587 [DEBUG] [Thread-16812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:44:39.608 [DEBUG] [Thread-16812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:44:39.608 [INFO] [Thread-16812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:44:39.611 [DEBUG] [Thread-16812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:44:39.611 [DEBUG] [Thread-16812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:44:39.611 [DEBUG] [Thread-16812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:44:39.611 [DEBUG] [Thread-16812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] client lang: <none>
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] server lang: <none>
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] kex follows: False
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] Compression: none
2025-11-12T13:44:39.612 [DEBUG] [Thread-16812] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:44:39.627 [DEBUG] [Thread-16812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:44:39.628 [DEBUG] [Thread-16812] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:44:39.628 [DEBUG] [Thread-16812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:44:39.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:44:39.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:44:39.628 [DEBUG] [Thread-16812] [transport.py] [_log()] userauth is OK
2025-11-12T13:44:39.628 [DEBUG] [Thread-16812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:44:39.629 [DEBUG] [Thread-16812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:44:39.629 [DEBUG] [Thread-16812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:44:39.629 [DEBUG] [Thread-16812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:44:39.644 [INFO] [Thread-16812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:44:39.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:44:40.252 [DEBUG] [Thread-16812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:44:40.252 [DEBUG] [Thread-16812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:44:40.252 [DEBUG] [Thread-16812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:44:40.293 [DEBUG] [Thread-16812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:44:40.293 [DEBUG] [Thread-16812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:44:40.295 [DEBUG] [Thread-16812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:44:40.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:44:40.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:44:40.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:44:40.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:44:40.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:44:40.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:44:40.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.488630 -999.00  +26.60  38.07     12   -4.70 1 1 2 1 1   888    0 33.51 89.44 ----- 38.1 38.1 276.6 45.0 31.9 -30.5 31.6 -28.1 31.0 -33.3 32.3 -29.9
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.488630
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:44:40.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:44:06', tmtdew=39.49, humidity=6.64, cloud=0.0, wind=37.55, temperature=27.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:43:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:44:40.305 [DEBUG] [Thread-16812] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:44:40.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:44:40.392 [DEBUG] [Thread-16815] [transport.py] [_log()] starting thread (client mode): 0x1737caf0
2025-11-12T13:44:40.392 [DEBUG] [Thread-16815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:44:40.407 [DEBUG] [Thread-16815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:44:40.407 [INFO] [Thread-16815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] client lang: <none>
2025-11-12T13:44:40.414 [DEBUG] [Thread-16815] [transport.py] [_log()] server lang: <none>
2025-11-12T13:44:40.415 [DEBUG] [Thread-16815] [transport.py] [_log()] kex follows: False
2025-11-12T13:44:40.415 [DEBUG] [Thread-16815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:44:40.415 [DEBUG] [Thread-16815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:44:40.415 [DEBUG] [Thread-16815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:44:40.415 [DEBUG] [Thread-16815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:44:40.415 [DEBUG] [Thread-16815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:44:40.415 [DEBUG] [Thread-16815] [transport.py] [_log()] Compression: none
2025-11-12T13:44:40.415 [DEBUG] [Thread-16815] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:44:40.471 [DEBUG] [Thread-16815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:44:40.472 [DEBUG] [Thread-16815] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:44:40.472 [DEBUG] [Thread-16815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:44:40.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:44:40.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:44:40.528 [DEBUG] [Thread-16815] [transport.py] [_log()] userauth is OK
2025-11-12T13:44:40.528 [DEBUG] [Thread-16815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:44:40.528 [DEBUG] [Thread-16815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:44:40.528 [DEBUG] [Thread-16815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:44:40.528 [DEBUG] [Thread-16815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:44:40.546 [INFO] [Thread-16815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:44:40.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:44:40.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:44:41.390 [DEBUG] [Thread-16815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:44:41.390 [DEBUG] [Thread-16815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:44:41.437 [DEBUG] [Thread-16815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:44:41.438 [DEBUG] [Thread-16815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:44:41.447 [DEBUG] [Thread-16815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:44:41.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:44:41.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-11-12T13:44:41.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-11-12T13:44:41.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:44:41.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:44:41.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:44:41.483 [DEBUG] [Thread-16815] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:44:47.058 [DEBUG] [Thread-16817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:45:02.102 [DEBUG] [Thread-16818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:45:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:45:11.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:45:11.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-11-12T13:45:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 44, 38), 38.84, 7.24, 0.0, 30.12, 27.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:45:12.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:44:38
2025-11-12T13:45:12.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:45:12.469 [DEBUG] [Thread-16819] [transport.py] [_log()] starting thread (client mode): 0x1737d300
2025-11-12T13:45:12.469 [DEBUG] [Thread-16819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:45:12.488 [DEBUG] [Thread-16819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:45:12.488 [INFO] [Thread-16819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] client lang: <none>
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] server lang: <none>
2025-11-12T13:45:12.491 [DEBUG] [Thread-16819] [transport.py] [_log()] kex follows: False
2025-11-12T13:45:12.492 [DEBUG] [Thread-16819] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:45:12.492 [DEBUG] [Thread-16819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:45:12.492 [DEBUG] [Thread-16819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:45:12.492 [DEBUG] [Thread-16819] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:45:12.492 [DEBUG] [Thread-16819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:45:12.492 [DEBUG] [Thread-16819] [transport.py] [_log()] Compression: none
2025-11-12T13:45:12.492 [DEBUG] [Thread-16819] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:45:12.507 [DEBUG] [Thread-16819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:45:12.507 [DEBUG] [Thread-16819] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:45:12.507 [DEBUG] [Thread-16819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:45:12.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:45:12.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:45:12.508 [DEBUG] [Thread-16819] [transport.py] [_log()] userauth is OK
2025-11-12T13:45:12.508 [DEBUG] [Thread-16819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:45:12.508 [DEBUG] [Thread-16819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:45:12.508 [DEBUG] [Thread-16819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:45:12.508 [DEBUG] [Thread-16819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:45:12.534 [INFO] [Thread-16819] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:45:12.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:45:13.180 [DEBUG] [Thread-16819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:45:13.180 [DEBUG] [Thread-16819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:45:13.181 [DEBUG] [Thread-16819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:45:13.221 [DEBUG] [Thread-16819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:45:13.222 [DEBUG] [Thread-16819] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:45:13.225 [DEBUG] [Thread-16819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:45:13.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:45:13.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:45:13.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:45:13.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:45:13.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:45:13.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:45:13.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:45:13.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:45:13.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:45:13.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.489324 -999.00  +26.20  30.39     12   -4.40 1 1 2 1 1   888    0 33.42 88.10 ----- 30.4 30.4 275.4 44.1 31.9 -28.8 31.5 -26.6 30.9 -29.7 32.1 -27.6
2025-11-12T13:45:13.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:45:13.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:45:13.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.489324
2025-11-12T13:45:13.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:45:13.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:45:13.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:45:13.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:45:13.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:45:13.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:44:38', tmtdew=38.84, humidity=7.24, cloud=0.0, wind=30.12, temperature=27.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:44:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:45:13.252 [DEBUG] [Thread-16819] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:45:13.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:45:13.348 [DEBUG] [Thread-16822] [transport.py] [_log()] starting thread (client mode): 0x173bcb50
2025-11-12T13:45:13.348 [DEBUG] [Thread-16822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:45:13.363 [DEBUG] [Thread-16822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:45:13.363 [INFO] [Thread-16822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:45:13.371 [DEBUG] [Thread-16822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] client lang: <none>
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] server lang: <none>
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] kex follows: False
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] Compression: none
2025-11-12T13:45:13.372 [DEBUG] [Thread-16822] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:45:13.429 [DEBUG] [Thread-16822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:45:13.430 [DEBUG] [Thread-16822] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:45:13.430 [DEBUG] [Thread-16822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:45:13.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:45:13.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:45:13.490 [DEBUG] [Thread-16822] [transport.py] [_log()] userauth is OK
2025-11-12T13:45:13.490 [DEBUG] [Thread-16822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:45:13.490 [DEBUG] [Thread-16822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:45:13.490 [DEBUG] [Thread-16822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:45:13.490 [DEBUG] [Thread-16822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:45:13.508 [INFO] [Thread-16822] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:45:13.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:45:13.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:45:14.344 [DEBUG] [Thread-16822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:45:14.344 [DEBUG] [Thread-16822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:45:14.392 [DEBUG] [Thread-16822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:45:14.392 [DEBUG] [Thread-16822] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:45:14.401 [DEBUG] [Thread-16822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:45:14.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:45:14.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:45:14.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-11-12T13:45:14.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:45:14.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:45:14.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:45:14.438 [DEBUG] [Thread-16822] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:45:17.136 [DEBUG] [Thread-16824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:45:21.685 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:45:21.686 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:45:32.195 [DEBUG] [Thread-16825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:45:34.729 [DEBUG] [Thread-16826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:45:44.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:45:44.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:45:44.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-11-12T13:45:45.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 45, 10), 38.94, 7.21, 0.0, 29.85, 27.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:45:45.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:45:10
2025-11-12T13:45:45.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:45:45.357 [DEBUG] [Thread-16827] [transport.py] [_log()] starting thread (client mode): 0x149abcd0
2025-11-12T13:45:45.357 [DEBUG] [Thread-16827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:45:45.377 [DEBUG] [Thread-16827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:45:45.377 [INFO] [Thread-16827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:45:45.380 [DEBUG] [Thread-16827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:45:45.380 [DEBUG] [Thread-16827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] client lang: <none>
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] server lang: <none>
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] kex follows: False
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] Compression: none
2025-11-12T13:45:45.381 [DEBUG] [Thread-16827] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:45:45.397 [DEBUG] [Thread-16827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:45:45.397 [DEBUG] [Thread-16827] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:45:45.398 [DEBUG] [Thread-16827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:45:45.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:45:45.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:45:45.399 [DEBUG] [Thread-16827] [transport.py] [_log()] userauth is OK
2025-11-12T13:45:45.400 [DEBUG] [Thread-16827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:45:45.400 [DEBUG] [Thread-16827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:45:45.400 [DEBUG] [Thread-16827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:45:45.400 [DEBUG] [Thread-16827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:45:45.431 [INFO] [Thread-16827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:45:45.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:45:46.067 [DEBUG] [Thread-16827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:45:46.067 [DEBUG] [Thread-16827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:45:46.068 [DEBUG] [Thread-16827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:45:46.109 [DEBUG] [Thread-16827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:45:46.109 [DEBUG] [Thread-16827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:45:46.113 [DEBUG] [Thread-16827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:45:46.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:45:46.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:45:46.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:45:46.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:45:46.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:45:46.137 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:45:46.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:45:46.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:45:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:45:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.489671 -999.00  +26.60  38.57     13   -3.90 1 1 2 1 1   888    0 33.40 84.03 ----- 38.6 38.6 277.8 43.1 31.8 -30.4 31.4 -28.0 30.9 -27.4 32.2 -27.8
2025-11-12T13:45:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:45:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:45:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.489671
2025-11-12T13:45:46.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:45:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:45:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:45:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:45:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:45:46.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:45:10', tmtdew=38.94, humidity=7.21, cloud=0.0, wind=29.85, temperature=27.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:45:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:45:46.139 [DEBUG] [Thread-16827] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:45:46.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:45:46.238 [DEBUG] [Thread-16830] [transport.py] [_log()] starting thread (client mode): 0x17398400
2025-11-12T13:45:46.238 [DEBUG] [Thread-16830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:45:46.253 [DEBUG] [Thread-16830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:45:46.253 [INFO] [Thread-16830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:45:46.260 [DEBUG] [Thread-16830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] client lang: <none>
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] server lang: <none>
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] kex follows: False
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] Compression: none
2025-11-12T13:45:46.261 [DEBUG] [Thread-16830] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:45:46.321 [DEBUG] [Thread-16830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:45:46.322 [DEBUG] [Thread-16830] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:45:46.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:45:46.323 [DEBUG] [Thread-16830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:45:46.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:45:46.377 [DEBUG] [Thread-16830] [transport.py] [_log()] userauth is OK
2025-11-12T13:45:46.378 [DEBUG] [Thread-16830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:45:46.378 [DEBUG] [Thread-16830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:45:46.378 [DEBUG] [Thread-16830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:45:46.378 [DEBUG] [Thread-16830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:45:46.398 [INFO] [Thread-16830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:45:46.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:45:46.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:45:47.227 [DEBUG] [Thread-16832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:45:47.293 [DEBUG] [Thread-16830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:45:47.294 [DEBUG] [Thread-16830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:45:47.341 [DEBUG] [Thread-16830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:45:47.341 [DEBUG] [Thread-16830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:45:47.350 [DEBUG] [Thread-16830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:45:47.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:45:47.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-11-12T13:45:47.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-11-12T13:45:47.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:45:47.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:45:47.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:45:47.384 [DEBUG] [Thread-16830] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:46:02.292 [DEBUG] [Thread-16833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:46:17.326 [DEBUG] [Thread-16834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:46:17.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:46:17.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:46:17.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-11-12T13:46:18.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 46, 14), 38.52, 7.36, 0.0, 27.77, 28.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:46:18.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:46:14
2025-11-12T13:46:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:46:18.297 [DEBUG] [Thread-16835] [transport.py] [_log()] starting thread (client mode): 0x149202e0
2025-11-12T13:46:18.297 [DEBUG] [Thread-16835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:46:18.316 [DEBUG] [Thread-16835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:46:18.316 [INFO] [Thread-16835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] client lang: <none>
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] server lang: <none>
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] kex follows: False
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] Compression: none
2025-11-12T13:46:18.320 [DEBUG] [Thread-16835] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:46:18.338 [DEBUG] [Thread-16835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:46:18.338 [DEBUG] [Thread-16835] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:46:18.339 [DEBUG] [Thread-16835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:46:18.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:46:18.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:46:18.341 [DEBUG] [Thread-16835] [transport.py] [_log()] userauth is OK
2025-11-12T13:46:18.341 [DEBUG] [Thread-16835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:46:18.341 [DEBUG] [Thread-16835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:46:18.342 [DEBUG] [Thread-16835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:46:18.342 [DEBUG] [Thread-16835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:46:18.367 [INFO] [Thread-16835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:46:18.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:46:19.005 [DEBUG] [Thread-16835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:46:19.005 [DEBUG] [Thread-16835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:46:19.005 [DEBUG] [Thread-16835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:46:19.046 [DEBUG] [Thread-16835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:46:19.046 [DEBUG] [Thread-16835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:46:19.049 [DEBUG] [Thread-16835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:46:19.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:46:19.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:46:19.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:46:19.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:46:19.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:46:19.073 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:46:19.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:46:19.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:46:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:46:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.490019 -999.00  +26.20  28.30     13   -3.90 1 1 1 1 1   888    0 32.66 79.42 ----- 28.3 28.3 269.0 33.5 31.9 -30.2 31.4 -27.2 30.9 -33.9 32.0 -27.2
2025-11-12T13:46:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:46:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:46:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.490019
2025-11-12T13:46:19.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:46:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:46:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:46:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:46:19.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:46:19.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:46:14', tmtdew=38.52, humidity=7.36, cloud=0.0, wind=27.77, temperature=28.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:45:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:46:19.076 [DEBUG] [Thread-16835] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:46:19.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:46:19.184 [DEBUG] [Thread-16838] [transport.py] [_log()] starting thread (client mode): 0x173f8820
2025-11-12T13:46:19.184 [DEBUG] [Thread-16838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:46:19.199 [DEBUG] [Thread-16838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:46:19.200 [INFO] [Thread-16838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] client lang: <none>
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] server lang: <none>
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] kex follows: False
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:46:19.207 [DEBUG] [Thread-16838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:46:19.208 [DEBUG] [Thread-16838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:46:19.208 [DEBUG] [Thread-16838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:46:19.208 [DEBUG] [Thread-16838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:46:19.208 [DEBUG] [Thread-16838] [transport.py] [_log()] Compression: none
2025-11-12T13:46:19.208 [DEBUG] [Thread-16838] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:46:19.265 [DEBUG] [Thread-16838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:46:19.265 [DEBUG] [Thread-16838] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:46:19.266 [DEBUG] [Thread-16838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:46:19.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:46:19.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:46:19.321 [DEBUG] [Thread-16838] [transport.py] [_log()] userauth is OK
2025-11-12T13:46:19.322 [DEBUG] [Thread-16838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:46:19.322 [DEBUG] [Thread-16838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:46:19.322 [DEBUG] [Thread-16838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:46:19.322 [DEBUG] [Thread-16838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:46:19.341 [INFO] [Thread-16838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:46:19.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:46:19.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:46:20.194 [DEBUG] [Thread-16838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:46:20.194 [DEBUG] [Thread-16838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:46:20.242 [DEBUG] [Thread-16838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:46:20.242 [DEBUG] [Thread-16838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:46:20.251 [DEBUG] [Thread-16838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:46:20.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:46:20.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-11-12T13:46:20.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-11-12T13:46:20.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:46:20.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:46:20.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:46:20.286 [DEBUG] [Thread-16838] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:46:21.828 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:46:21.829 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:46:32.363 [DEBUG] [Thread-16840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:46:34.763 [DEBUG] [Thread-16841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:46:47.414 [DEBUG] [Thread-16842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:46:50.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:46:50.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:46:50.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-11-12T13:46:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 46, 46), 38.21, 7.33, 0.0, 19.51, 27.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:46:50.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:46:46
2025-11-12T13:46:51.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:46:51.220 [DEBUG] [Thread-16843] [transport.py] [_log()] starting thread (client mode): 0x173bedd0
2025-11-12T13:46:51.220 [DEBUG] [Thread-16843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:46:51.241 [DEBUG] [Thread-16843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:46:51.241 [INFO] [Thread-16843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:46:51.244 [DEBUG] [Thread-16843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:46:51.244 [DEBUG] [Thread-16843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:46:51.244 [DEBUG] [Thread-16843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:46:51.244 [DEBUG] [Thread-16843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:46:51.244 [DEBUG] [Thread-16843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] client lang: <none>
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] server lang: <none>
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] kex follows: False
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] Compression: none
2025-11-12T13:46:51.245 [DEBUG] [Thread-16843] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:46:51.264 [DEBUG] [Thread-16843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:46:51.264 [DEBUG] [Thread-16843] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:46:51.265 [DEBUG] [Thread-16843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:46:51.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:46:51.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:46:51.267 [DEBUG] [Thread-16843] [transport.py] [_log()] userauth is OK
2025-11-12T13:46:51.267 [DEBUG] [Thread-16843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:46:51.267 [DEBUG] [Thread-16843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:46:51.267 [DEBUG] [Thread-16843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:46:51.267 [DEBUG] [Thread-16843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:46:51.302 [INFO] [Thread-16843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:46:51.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:46:51.962 [DEBUG] [Thread-16843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:46:51.962 [DEBUG] [Thread-16843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:46:51.962 [DEBUG] [Thread-16843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:46:52.003 [DEBUG] [Thread-16843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:46:52.003 [DEBUG] [Thread-16843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:46:52.006 [DEBUG] [Thread-16843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:46:52.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:46:52.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:46:52.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:46:52.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:46:52.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:46:52.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:46:52.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:46:52.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:46:52.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:46:52.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.490366 -999.00  +26.20  16.18     13   -3.80 1 1 1 1 1   888    0 33.29 86.86 ----- 16.2 16.2 295.2 20.6 32.1 -26.8 31.6 -25.5 31.4 -27.1 32.2 -25.3
2025-11-12T13:46:52.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:46:52.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:46:52.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.490366
2025-11-12T13:46:52.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:46:52.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:46:52.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:46:52.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:46:52.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:46:52.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:46:46', tmtdew=38.21, humidity=7.33, cloud=0.0, wind=19.51, temperature=27.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:46:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:46:52.036 [DEBUG] [Thread-16843] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:46:52.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:46:52.130 [DEBUG] [Thread-16846] [transport.py] [_log()] starting thread (client mode): 0x14963f10
2025-11-12T13:46:52.130 [DEBUG] [Thread-16846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:46:52.146 [DEBUG] [Thread-16846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:46:52.146 [INFO] [Thread-16846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:46:52.154 [DEBUG] [Thread-16846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:46:52.154 [DEBUG] [Thread-16846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:46:52.154 [DEBUG] [Thread-16846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:46:52.154 [DEBUG] [Thread-16846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:46:52.154 [DEBUG] [Thread-16846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:46:52.155 [DEBUG] [Thread-16846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:46:52.155 [DEBUG] [Thread-16846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:46:52.155 [DEBUG] [Thread-16846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:46:52.155 [DEBUG] [Thread-16846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:46:52.155 [DEBUG] [Thread-16846] [transport.py] [_log()] client lang: <none>
2025-11-12T13:46:52.155 [DEBUG] [Thread-16846] [transport.py] [_log()] server lang: <none>
2025-11-12T13:46:52.155 [DEBUG] [Thread-16846] [transport.py] [_log()] kex follows: False
2025-11-12T13:46:52.155 [DEBUG] [Thread-16846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:46:52.156 [DEBUG] [Thread-16846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:46:52.156 [DEBUG] [Thread-16846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:46:52.156 [DEBUG] [Thread-16846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:46:52.156 [DEBUG] [Thread-16846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:46:52.156 [DEBUG] [Thread-16846] [transport.py] [_log()] Compression: none
2025-11-12T13:46:52.156 [DEBUG] [Thread-16846] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:46:52.214 [DEBUG] [Thread-16846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:46:52.215 [DEBUG] [Thread-16846] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:46:52.215 [DEBUG] [Thread-16846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:46:52.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:46:52.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:46:52.274 [DEBUG] [Thread-16846] [transport.py] [_log()] userauth is OK
2025-11-12T13:46:52.274 [DEBUG] [Thread-16846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:46:52.274 [DEBUG] [Thread-16846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:46:52.274 [DEBUG] [Thread-16846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:46:52.274 [DEBUG] [Thread-16846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:46:52.292 [INFO] [Thread-16846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:46:52.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:46:52.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:46:53.130 [DEBUG] [Thread-16846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:46:53.130 [DEBUG] [Thread-16846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:46:53.178 [DEBUG] [Thread-16846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:46:53.178 [DEBUG] [Thread-16846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:46:53.187 [DEBUG] [Thread-16846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:46:53.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:46:53.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-11-12T13:46:53.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-11-12T13:46:53.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:46:53.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:46:53.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:46:53.223 [DEBUG] [Thread-16846] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:47:02.443 [DEBUG] [Thread-16848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:47:17.506 [DEBUG] [Thread-16849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:47:21.971 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:47:21.972 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:47:23.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:47:23.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:47:23.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-11-12T13:47:23.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 47, 18), 37.87, 7.47, 0.0, 16.29, 27.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:47:23.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:47:18
2025-11-12T13:47:24.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:47:24.168 [DEBUG] [Thread-16850] [transport.py] [_log()] starting thread (client mode): 0x173604f0
2025-11-12T13:47:24.169 [DEBUG] [Thread-16850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:47:24.189 [DEBUG] [Thread-16850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:47:24.189 [INFO] [Thread-16850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] client lang: <none>
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] server lang: <none>
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] kex follows: False
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] Compression: none
2025-11-12T13:47:24.192 [DEBUG] [Thread-16850] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:47:24.207 [DEBUG] [Thread-16850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:47:24.207 [DEBUG] [Thread-16850] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:47:24.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:47:24.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:47:24.208 [DEBUG] [Thread-16850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:47:24.208 [DEBUG] [Thread-16850] [transport.py] [_log()] userauth is OK
2025-11-12T13:47:24.208 [DEBUG] [Thread-16850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:47:24.208 [DEBUG] [Thread-16850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:47:24.208 [DEBUG] [Thread-16850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:47:24.208 [DEBUG] [Thread-16850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:47:24.218 [INFO] [Thread-16850] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:47:24.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:47:24.843 [DEBUG] [Thread-16850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:47:24.843 [DEBUG] [Thread-16850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:47:24.844 [DEBUG] [Thread-16850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:47:24.884 [DEBUG] [Thread-16850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:47:24.884 [DEBUG] [Thread-16850] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:47:24.886 [DEBUG] [Thread-16850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:47:24.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:47:24.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:47:24.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:47:24.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:47:24.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:47:24.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:47:24.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:47:24.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:47:24.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:47:24.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.490713 -999.00  +26.20  21.84     13   -3.90 1 1 1 1 1   888    0 32.99 82.74 ----- 21.8 21.8 298.2 27.0 32.1 -28.0 31.6 -26.2 31.5 -28.3 32.3 -26.0
2025-11-12T13:47:24.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:47:24.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:47:24.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.490713
2025-11-12T13:47:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:47:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:47:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:47:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:47:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:47:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:47:18', tmtdew=37.87, humidity=7.47, cloud=0.0, wind=16.29, temperature=27.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:46:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:47:24.907 [DEBUG] [Thread-16850] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:47:24.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:47:24.992 [DEBUG] [Thread-16853] [transport.py] [_log()] starting thread (client mode): 0x17363430
2025-11-12T13:47:24.992 [DEBUG] [Thread-16853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:47:25.012 [DEBUG] [Thread-16853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:47:25.012 [INFO] [Thread-16853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] client lang: <none>
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] server lang: <none>
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] kex follows: False
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] Compression: none
2025-11-12T13:47:25.020 [DEBUG] [Thread-16853] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:47:25.076 [DEBUG] [Thread-16853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:47:25.076 [DEBUG] [Thread-16853] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:47:25.076 [DEBUG] [Thread-16853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:47:25.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:47:25.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:47:25.133 [DEBUG] [Thread-16853] [transport.py] [_log()] userauth is OK
2025-11-12T13:47:25.133 [DEBUG] [Thread-16853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:47:25.133 [DEBUG] [Thread-16853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:47:25.133 [DEBUG] [Thread-16853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:47:25.133 [DEBUG] [Thread-16853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:47:25.149 [INFO] [Thread-16853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:47:25.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:47:25.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:47:26.026 [DEBUG] [Thread-16853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:47:26.026 [DEBUG] [Thread-16853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:47:26.075 [DEBUG] [Thread-16853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:47:26.075 [DEBUG] [Thread-16853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:47:26.083 [DEBUG] [Thread-16853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:47:26.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:47:26.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-11-12T13:47:26.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-11-12T13:47:26.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:47:26.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:47:26.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:47:26.114 [DEBUG] [Thread-16853] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:47:32.541 [DEBUG] [Thread-16855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:47:34.797 [DEBUG] [Thread-16856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:47:47.602 [DEBUG] [Thread-16857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:47:56.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:47:56.136 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:47:56.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:47:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 47, 50), 38.03, 7.67, 0.0, 29.08, 27.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:47:56.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:47:50
2025-11-12T13:47:56.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:47:57.046 [DEBUG] [Thread-16858] [transport.py] [_log()] starting thread (client mode): 0x17362b30
2025-11-12T13:47:57.046 [DEBUG] [Thread-16858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:47:57.066 [DEBUG] [Thread-16858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:47:57.066 [INFO] [Thread-16858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:47:57.069 [DEBUG] [Thread-16858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] client lang: <none>
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] server lang: <none>
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] kex follows: False
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] Compression: none
2025-11-12T13:47:57.070 [DEBUG] [Thread-16858] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:47:57.087 [DEBUG] [Thread-16858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:47:57.087 [DEBUG] [Thread-16858] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:47:57.088 [DEBUG] [Thread-16858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:47:57.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:47:57.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:47:57.090 [DEBUG] [Thread-16858] [transport.py] [_log()] userauth is OK
2025-11-12T13:47:57.090 [DEBUG] [Thread-16858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:47:57.090 [DEBUG] [Thread-16858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:47:57.090 [DEBUG] [Thread-16858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:47:57.090 [DEBUG] [Thread-16858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:47:57.126 [INFO] [Thread-16858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:47:57.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:47:57.794 [DEBUG] [Thread-16858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:47:57.794 [DEBUG] [Thread-16858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:47:57.794 [DEBUG] [Thread-16858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:47:57.834 [DEBUG] [Thread-16858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:47:57.835 [DEBUG] [Thread-16858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:47:57.838 [DEBUG] [Thread-16858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:47:57.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:47:57.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:47:57.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:47:57.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:47:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:47:57.863 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:47:57.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:47:57.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:47:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:47:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.491060 -999.00  +26.10  26.78     13   -3.90 1 1 1 1 1   888    0 32.61 71.21 ----- 26.8 26.8 299.2 36.9 32.1 -26.9 31.6 -25.7 31.6 -24.8 32.4 -26.5
2025-11-12T13:47:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:47:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:47:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.491060
2025-11-12T13:47:57.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:47:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:47:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:47:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:47:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:47:57.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:47:50', tmtdew=38.03, humidity=7.67, cloud=0.0, wind=29.08, temperature=27.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:47:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:47:57.866 [DEBUG] [Thread-16858] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:47:57.949 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:47:57.961 [DEBUG] [Thread-16861] [transport.py] [_log()] starting thread (client mode): 0x149a93c0
2025-11-12T13:47:57.961 [DEBUG] [Thread-16861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:47:57.976 [DEBUG] [Thread-16861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:47:57.976 [INFO] [Thread-16861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] client lang: <none>
2025-11-12T13:47:57.984 [DEBUG] [Thread-16861] [transport.py] [_log()] server lang: <none>
2025-11-12T13:47:57.985 [DEBUG] [Thread-16861] [transport.py] [_log()] kex follows: False
2025-11-12T13:47:57.985 [DEBUG] [Thread-16861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:47:57.985 [DEBUG] [Thread-16861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:47:57.985 [DEBUG] [Thread-16861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:47:57.985 [DEBUG] [Thread-16861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:47:57.985 [DEBUG] [Thread-16861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:47:57.985 [DEBUG] [Thread-16861] [transport.py] [_log()] Compression: none
2025-11-12T13:47:57.985 [DEBUG] [Thread-16861] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:47:58.042 [DEBUG] [Thread-16861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:47:58.042 [DEBUG] [Thread-16861] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:47:58.043 [DEBUG] [Thread-16861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:47:58.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:47:58.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:47:58.098 [DEBUG] [Thread-16861] [transport.py] [_log()] userauth is OK
2025-11-12T13:47:58.098 [DEBUG] [Thread-16861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:47:58.099 [DEBUG] [Thread-16861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:47:58.099 [DEBUG] [Thread-16861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:47:58.099 [DEBUG] [Thread-16861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:47:58.119 [INFO] [Thread-16861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:47:58.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:47:58.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:47:58.972 [DEBUG] [Thread-16861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:47:58.972 [DEBUG] [Thread-16861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:47:59.020 [DEBUG] [Thread-16861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:47:59.021 [DEBUG] [Thread-16861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:47:59.030 [DEBUG] [Thread-16861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:47:59.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:47:59.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-11-12T13:47:59.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-11-12T13:47:59.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:47:59.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:47:59.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:47:59.069 [DEBUG] [Thread-16861] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:48:02.637 [DEBUG] [Thread-16863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:48:17.686 [DEBUG] [Thread-16864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:48:22.113 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:48:22.114 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:48:29.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:48:29.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:48:29.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-11-12T13:48:29.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 48, 22), 38.19, 7.61, 0.0, 33.89, 27.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:48:29.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:48:22
2025-11-12T13:48:29.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:48:29.957 [DEBUG] [Thread-16865] [transport.py] [_log()] starting thread (client mode): 0x1737c910
2025-11-12T13:48:29.957 [DEBUG] [Thread-16865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:48:29.977 [DEBUG] [Thread-16865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:48:29.977 [INFO] [Thread-16865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:48:29.980 [DEBUG] [Thread-16865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] client lang: <none>
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] server lang: <none>
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] kex follows: False
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:48:29.981 [DEBUG] [Thread-16865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:48:29.982 [DEBUG] [Thread-16865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:48:29.982 [DEBUG] [Thread-16865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:48:29.982 [DEBUG] [Thread-16865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:48:29.982 [DEBUG] [Thread-16865] [transport.py] [_log()] Compression: none
2025-11-12T13:48:29.982 [DEBUG] [Thread-16865] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:48:29.999 [DEBUG] [Thread-16865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:48:29.999 [DEBUG] [Thread-16865] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:48:29.999 [DEBUG] [Thread-16865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:48:30.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:48:30.000 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:48:30.001 [DEBUG] [Thread-16865] [transport.py] [_log()] userauth is OK
2025-11-12T13:48:30.001 [DEBUG] [Thread-16865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:48:30.001 [DEBUG] [Thread-16865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:48:30.002 [DEBUG] [Thread-16865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:48:30.002 [DEBUG] [Thread-16865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:48:30.035 [INFO] [Thread-16865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:48:30.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:48:30.684 [DEBUG] [Thread-16865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:48:30.684 [DEBUG] [Thread-16865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:48:30.684 [DEBUG] [Thread-16865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:48:30.725 [DEBUG] [Thread-16865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:48:30.725 [DEBUG] [Thread-16865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:48:30.728 [DEBUG] [Thread-16865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:48:30.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:48:30.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:48:30.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:48:30.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:48:30.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:48:30.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:48:30.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:48:30.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:48:30.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:48:30.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.491408 -999.00  +26.60  32.97     12   -4.00 1 1 2 1 1   888    0 32.42 69.05 ----- 33.0 33.0 272.6 39.9 32.0 -30.2 31.6 -27.1 31.4 -30.0 32.5 -29.1
2025-11-12T13:48:30.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:48:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:48:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.491408
2025-11-12T13:48:30.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:48:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:48:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:48:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:48:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:48:30.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:48:22', tmtdew=38.19, humidity=7.61, cloud=0.0, wind=33.89, temperature=27.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:47:37.651', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:48:30.757 [DEBUG] [Thread-16865] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:48:30.841 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:48:30.854 [DEBUG] [Thread-16868] [transport.py] [_log()] starting thread (client mode): 0x17399ab0
2025-11-12T13:48:30.854 [DEBUG] [Thread-16868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:48:30.869 [DEBUG] [Thread-16868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:48:30.869 [INFO] [Thread-16868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:48:30.877 [DEBUG] [Thread-16868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:48:30.877 [DEBUG] [Thread-16868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:48:30.877 [DEBUG] [Thread-16868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:48:30.877 [DEBUG] [Thread-16868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:48:30.877 [DEBUG] [Thread-16868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:48:30.877 [DEBUG] [Thread-16868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:48:30.877 [DEBUG] [Thread-16868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] client lang: <none>
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] server lang: <none>
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] kex follows: False
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] Compression: none
2025-11-12T13:48:30.878 [DEBUG] [Thread-16868] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:48:30.934 [DEBUG] [Thread-16868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:48:30.935 [DEBUG] [Thread-16868] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:48:30.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:48:30.937 [DEBUG] [Thread-16868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:48:30.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:48:30.994 [DEBUG] [Thread-16868] [transport.py] [_log()] userauth is OK
2025-11-12T13:48:30.995 [DEBUG] [Thread-16868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:48:30.995 [DEBUG] [Thread-16868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:48:30.995 [DEBUG] [Thread-16868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:48:30.995 [DEBUG] [Thread-16868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:48:31.013 [INFO] [Thread-16868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:48:31.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:48:31.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:48:31.852 [DEBUG] [Thread-16868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:48:31.852 [DEBUG] [Thread-16868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:48:31.902 [DEBUG] [Thread-16868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:48:31.902 [DEBUG] [Thread-16868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:48:31.911 [DEBUG] [Thread-16868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:48:31.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:48:31.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-11-12T13:48: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') -> 00000000
2025-11-12T13:48:31.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:48:31.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:48:31.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:48:31.947 [DEBUG] [Thread-16868] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:48:32.723 [DEBUG] [Thread-16870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:48:34.842 [DEBUG] [Thread-16871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:48:47.771 [DEBUG] [Thread-16872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:49:01.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:49:01.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:49:01.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-11-12T13:49:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 48, 54), 38.36, 7.56, 0.0, 31.46, 27.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:49:02.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:48:54
2025-11-12T13:49:02.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:49:02.805 [DEBUG] [Thread-16873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:49:02.881 [DEBUG] [Thread-16874] [transport.py] [_log()] starting thread (client mode): 0x173bca00
2025-11-12T13:49:02.881 [DEBUG] [Thread-16874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:49:02.901 [DEBUG] [Thread-16874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:49:02.901 [INFO] [Thread-16874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:49:02.904 [DEBUG] [Thread-16874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:49:02.904 [DEBUG] [Thread-16874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:49:02.904 [DEBUG] [Thread-16874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] client lang: <none>
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] server lang: <none>
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] kex follows: False
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] Compression: none
2025-11-12T13:49:02.905 [DEBUG] [Thread-16874] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:49:02.914 [DEBUG] [Thread-16874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:49:02.914 [DEBUG] [Thread-16874] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:49:02.914 [DEBUG] [Thread-16874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:49:02.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:49:02.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:49:02.916 [DEBUG] [Thread-16874] [transport.py] [_log()] userauth is OK
2025-11-12T13:49:02.916 [DEBUG] [Thread-16874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:49:02.916 [DEBUG] [Thread-16874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:49:02.916 [DEBUG] [Thread-16874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:49:02.916 [DEBUG] [Thread-16874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:49:02.940 [INFO] [Thread-16874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:49:02.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:49:03.579 [DEBUG] [Thread-16874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:49:03.579 [DEBUG] [Thread-16874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:49:03.580 [DEBUG] [Thread-16874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:49:03.620 [DEBUG] [Thread-16874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:49:03.620 [DEBUG] [Thread-16874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:49:03.623 [DEBUG] [Thread-16874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:49:03.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:49:03.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:49:03.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:49:03.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:49:03.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:49:03.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:49:03.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:49:03.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:49:03.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:49:03.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.491755 -999.00  +26.90  33.31     12   -4.20 1 1 2 1 1   888    0 32.14 69.53 ----- 33.3 33.3 276.0 42.4 32.1 -30.3 31.6 -27.1 31.3 -32.6 32.4 -26.4
2025-11-12T13:49:03.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:49:03.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:49:03.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.491755
2025-11-12T13:49:03.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:49:03.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:49:03.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:49:03.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:49:03.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:49:03.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:48:54', tmtdew=38.36, humidity=7.56, cloud=0.0, wind=31.46, temperature=27.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:48:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:49:03.649 [DEBUG] [Thread-16874] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:49:03.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:49:03.749 [DEBUG] [Thread-16877] [transport.py] [_log()] starting thread (client mode): 0x19dd93f0
2025-11-12T13:49:03.749 [DEBUG] [Thread-16877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:49:03.764 [DEBUG] [Thread-16877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:49:03.764 [INFO] [Thread-16877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:49:03.771 [DEBUG] [Thread-16877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] client lang: <none>
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] server lang: <none>
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] kex follows: False
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] Compression: none
2025-11-12T13:49:03.772 [DEBUG] [Thread-16877] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:49:03.829 [DEBUG] [Thread-16877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:49:03.830 [DEBUG] [Thread-16877] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:49:03.830 [DEBUG] [Thread-16877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:49:03.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:49:03.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:49:03.885 [DEBUG] [Thread-16877] [transport.py] [_log()] userauth is OK
2025-11-12T13:49:03.886 [DEBUG] [Thread-16877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:49:03.886 [DEBUG] [Thread-16877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:49:03.886 [DEBUG] [Thread-16877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:49:03.886 [DEBUG] [Thread-16877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:49:03.905 [INFO] [Thread-16877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:49:03.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:49:03.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:49:04.788 [DEBUG] [Thread-16877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:49:04.788 [DEBUG] [Thread-16877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:49:04.836 [DEBUG] [Thread-16877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:49:04.836 [DEBUG] [Thread-16877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:49:04.845 [DEBUG] [Thread-16877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:49:04.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:49:04.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-11-12T13:49:04.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:49:04.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:49:04.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:49:04.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:49:04.878 [DEBUG] [Thread-16877] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:49:17.839 [DEBUG] [Thread-16879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:49:22.255 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:49:22.256 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:49:32.889 [DEBUG] [Thread-16880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:49:34.887 [DEBUG] [Thread-16881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:49:34.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:49:34.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:49:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:49:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 49, 26), 39.55, 6.99, 0.0, 36.95, 28.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:49:35.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:49:26
2025-11-12T13:49:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:49:35.783 [DEBUG] [Thread-16882] [transport.py] [_log()] starting thread (client mode): 0x14980610
2025-11-12T13:49:35.783 [DEBUG] [Thread-16882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:49:35.804 [DEBUG] [Thread-16882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:49:35.805 [INFO] [Thread-16882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] client lang: <none>
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] server lang: <none>
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] kex follows: False
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:49:35.815 [DEBUG] [Thread-16882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:49:35.816 [DEBUG] [Thread-16882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:49:35.816 [DEBUG] [Thread-16882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:49:35.816 [DEBUG] [Thread-16882] [transport.py] [_log()] Compression: none
2025-11-12T13:49:35.816 [DEBUG] [Thread-16882] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:49:35.836 [DEBUG] [Thread-16882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:49:35.837 [DEBUG] [Thread-16882] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:49:35.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:49:35.838 [DEBUG] [Thread-16882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:49:35.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:49:35.840 [DEBUG] [Thread-16882] [transport.py] [_log()] userauth is OK
2025-11-12T13:49:35.841 [DEBUG] [Thread-16882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:49:35.841 [DEBUG] [Thread-16882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:49:35.841 [DEBUG] [Thread-16882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:49:35.841 [DEBUG] [Thread-16882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:49:35.860 [INFO] [Thread-16882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:49:35.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:49:36.463 [DEBUG] [Thread-16882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:49:36.463 [DEBUG] [Thread-16882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:49:36.463 [DEBUG] [Thread-16882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:49:36.504 [DEBUG] [Thread-16882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:49:36.504 [DEBUG] [Thread-16882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:49:36.507 [DEBUG] [Thread-16882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:49:36.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:49:36.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:49:36.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:49:36.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:49:36.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:49:36.531 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:49:36.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:49:36.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:49:36.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:49:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.492102 -999.00  +27.20  17.78     12   -3.60 1 1 1 1 1   888    0 32.33 73.80 ----- 17.8 17.8 278.8 43.1 32.1 -27.1 31.6 -26.0 31.6 -24.7 32.3 -25.6
2025-11-12T13:49:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:49:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:49:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.492102
2025-11-12T13:49:36.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:49:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:49:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:49:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:49:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:49:36.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:49:26', tmtdew=39.55, humidity=6.99, cloud=0.0, wind=36.95, temperature=28.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:48:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:49:36.534 [DEBUG] [Thread-16882] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:49:36.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:49:36.631 [DEBUG] [Thread-16885] [transport.py] [_log()] starting thread (client mode): 0x173bf130
2025-11-12T13:49:36.631 [DEBUG] [Thread-16885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:49:36.646 [DEBUG] [Thread-16885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:49:36.647 [INFO] [Thread-16885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:49:36.654 [DEBUG] [Thread-16885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:49:36.654 [DEBUG] [Thread-16885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:49:36.654 [DEBUG] [Thread-16885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:49:36.654 [DEBUG] [Thread-16885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:49:36.654 [DEBUG] [Thread-16885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] client lang: <none>
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] server lang: <none>
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] kex follows: False
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] Compression: none
2025-11-12T13:49:36.655 [DEBUG] [Thread-16885] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:49:36.718 [DEBUG] [Thread-16885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:49:36.719 [DEBUG] [Thread-16885] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:49:36.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:49:36.720 [DEBUG] [Thread-16885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:49:36.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:49:36.775 [DEBUG] [Thread-16885] [transport.py] [_log()] userauth is OK
2025-11-12T13:49:36.775 [DEBUG] [Thread-16885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:49:36.775 [DEBUG] [Thread-16885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:49:36.775 [DEBUG] [Thread-16885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:49:36.775 [DEBUG] [Thread-16885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:49:36.795 [INFO] [Thread-16885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:49:36.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:49:36.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:49:37.678 [DEBUG] [Thread-16885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:49:37.678 [DEBUG] [Thread-16885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:49:37.727 [DEBUG] [Thread-16885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:49:37.727 [DEBUG] [Thread-16885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:49:37.736 [DEBUG] [Thread-16885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:49:37.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:49:37.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T13:49:37.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-11-12T13:49:37.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:49:37.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:49:37.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:49:37.774 [DEBUG] [Thread-16885] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:49:47.926 [DEBUG] [Thread-16887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:50:02.975 [DEBUG] [Thread-16888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:50:07.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:50:07.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:50:07.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-11-12T13:50:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 49, 58), 40.41, 6.19, 0.0, 31.97, 28.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:50:08.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:49:58
2025-11-12T13:50:08.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:50:08.677 [DEBUG] [Thread-16889] [transport.py] [_log()] starting thread (client mode): 0x173be590
2025-11-12T13:50:08.677 [DEBUG] [Thread-16889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:50:08.698 [DEBUG] [Thread-16889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:50:08.698 [INFO] [Thread-16889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:50:08.700 [DEBUG] [Thread-16889] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] client lang: <none>
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] server lang: <none>
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] kex follows: False
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] Compression: none
2025-11-12T13:50:08.701 [DEBUG] [Thread-16889] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:50:08.708 [DEBUG] [Thread-16889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:50:08.709 [DEBUG] [Thread-16889] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:50:08.709 [DEBUG] [Thread-16889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:50:08.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:50:08.709 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:50:08.710 [DEBUG] [Thread-16889] [transport.py] [_log()] userauth is OK
2025-11-12T13:50:08.710 [DEBUG] [Thread-16889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:50:08.710 [DEBUG] [Thread-16889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:50:08.710 [DEBUG] [Thread-16889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:50:08.710 [DEBUG] [Thread-16889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:50:08.723 [INFO] [Thread-16889] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:50:08.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:50:10.553 [DEBUG] [Thread-16889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:50:10.553 [DEBUG] [Thread-16889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:50:10.553 [DEBUG] [Thread-16889] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:50:10.593 [DEBUG] [Thread-16889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:50:10.593 [DEBUG] [Thread-16889] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:50:10.596 [DEBUG] [Thread-16889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:50:10.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:50:10.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:50:10.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:50:10.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:50:10.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:50:10.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:50:10.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:50:10.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:50:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:50:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.492796 -999.00  +27.50  30.33     11   -5.20 1 1 2 1 1   888    0 33.37 92.45 ----- 30.3 30.3 268.8 33.6 32.2 -28.4 31.8 -27.3 31.6 -27.2 32.4 -29.2
2025-11-12T13:50:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:50:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:50:10.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.492796
2025-11-12T13:50:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:50:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:50:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:50:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:50:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:50:10.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:49:58', tmtdew=40.41, humidity=6.19, cloud=0.0, wind=31.97, temperature=28.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:49:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:50:10.634 [DEBUG] [Thread-16889] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:50:10.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:50:10.731 [DEBUG] [Thread-16892] [transport.py] [_log()] starting thread (client mode): 0x149801f0
2025-11-12T13:50:10.731 [DEBUG] [Thread-16892] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:50:10.746 [DEBUG] [Thread-16892] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:50:10.746 [INFO] [Thread-16892] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] client lang: <none>
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] server lang: <none>
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] kex follows: False
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:50:10.754 [DEBUG] [Thread-16892] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:50:10.755 [DEBUG] [Thread-16892] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:50:10.755 [DEBUG] [Thread-16892] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:50:10.755 [DEBUG] [Thread-16892] [transport.py] [_log()] Compression: none
2025-11-12T13:50:10.755 [DEBUG] [Thread-16892] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:50:10.818 [DEBUG] [Thread-16892] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:50:10.819 [DEBUG] [Thread-16892] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:50:10.820 [DEBUG] [Thread-16892] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:50:10.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:50:10.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:50:10.874 [DEBUG] [Thread-16892] [transport.py] [_log()] userauth is OK
2025-11-12T13:50:10.874 [DEBUG] [Thread-16892] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:50:10.874 [DEBUG] [Thread-16892] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:50:10.874 [DEBUG] [Thread-16892] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:50:10.875 [DEBUG] [Thread-16892] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:50:10.901 [INFO] [Thread-16892] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:50:10.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:50:10.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:50:11.799 [DEBUG] [Thread-16892] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:50:11.799 [DEBUG] [Thread-16892] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:50:11.848 [DEBUG] [Thread-16892] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:50:11.848 [DEBUG] [Thread-16892] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:50:11.857 [DEBUG] [Thread-16892] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:50:11.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:50:11.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-11-12T13:50:11.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:50:11.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:50:11.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:50:11.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:50:11.899 [DEBUG] [Thread-16892] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:50:18.009 [DEBUG] [Thread-16894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:50:22.397 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:50:22.398 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:50:33.062 [DEBUG] [Thread-16895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:50:34.922 [DEBUG] [Thread-16896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:50:41.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:50:41.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:50:41.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-11-12T13:50:42.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 50, 30), 40.41, 6.18, 0.0, 31.87, 28.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:50:42.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:50:30
2025-11-12T13:50:42.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:50:42.794 [DEBUG] [Thread-16897] [transport.py] [_log()] starting thread (client mode): 0x149806a0
2025-11-12T13:50:42.794 [DEBUG] [Thread-16897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:50:42.815 [DEBUG] [Thread-16897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:50:42.815 [INFO] [Thread-16897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] client lang: <none>
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] server lang: <none>
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] kex follows: False
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] Compression: none
2025-11-12T13:50:42.819 [DEBUG] [Thread-16897] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:50:42.837 [DEBUG] [Thread-16897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:50:42.837 [DEBUG] [Thread-16897] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:50:42.838 [DEBUG] [Thread-16897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:50:42.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:50:42.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:50:42.840 [DEBUG] [Thread-16897] [transport.py] [_log()] userauth is OK
2025-11-12T13:50:42.840 [DEBUG] [Thread-16897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:50:42.840 [DEBUG] [Thread-16897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:50:42.840 [DEBUG] [Thread-16897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:50:42.841 [DEBUG] [Thread-16897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:50:42.865 [INFO] [Thread-16897] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:50:42.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:50:43.499 [DEBUG] [Thread-16897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:50:43.500 [DEBUG] [Thread-16897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:50:43.500 [DEBUG] [Thread-16897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:50:43.541 [DEBUG] [Thread-16897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:50:43.541 [DEBUG] [Thread-16897] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:50:43.545 [DEBUG] [Thread-16897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:50:43.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:50:43.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:50:43.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:50:43.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:50:43.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:50:43.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:50:43.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:50:43.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:50:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:50:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.493143 -999.00  +27.50  21.79     10   -5.60 1 1 1 1 1   888    0 33.83 108.05 ----- 21.8 21.8 265.0 35.1 32.2 -27.4 31.8 -27.3 31.7 -25.0 32.4 -27.6
2025-11-12T13:50:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:50:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:50:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.493143
2025-11-12T13:50:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:50:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:50:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:50:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:50:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:50:43.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:50:30', tmtdew=40.41, humidity=6.18, cloud=0.0, wind=31.87, temperature=28.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:50:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:50:43.571 [DEBUG] [Thread-16897] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:50:43.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:50:43.666 [DEBUG] [Thread-16900] [transport.py] [_log()] starting thread (client mode): 0x1737f160
2025-11-12T13:50:43.666 [DEBUG] [Thread-16900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:50:43.681 [DEBUG] [Thread-16900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:50:43.681 [INFO] [Thread-16900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] client lang: <none>
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] server lang: <none>
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] kex follows: False
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:50:43.689 [DEBUG] [Thread-16900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:50:43.690 [DEBUG] [Thread-16900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:50:43.690 [DEBUG] [Thread-16900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:50:43.690 [DEBUG] [Thread-16900] [transport.py] [_log()] Compression: none
2025-11-12T13:50:43.690 [DEBUG] [Thread-16900] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:50:43.752 [DEBUG] [Thread-16900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:50:43.753 [DEBUG] [Thread-16900] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:50:43.753 [DEBUG] [Thread-16900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:50:43.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:50:43.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:50:43.816 [DEBUG] [Thread-16900] [transport.py] [_log()] userauth is OK
2025-11-12T13:50:43.816 [DEBUG] [Thread-16900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:50:43.817 [DEBUG] [Thread-16900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:50:43.817 [DEBUG] [Thread-16900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:50:43.817 [DEBUG] [Thread-16900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:50:43.836 [INFO] [Thread-16900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:50:43.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:50:43.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:50:44.684 [DEBUG] [Thread-16900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:50:44.685 [DEBUG] [Thread-16900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:50:44.733 [DEBUG] [Thread-16900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:50:44.733 [DEBUG] [Thread-16900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:50:44.742 [DEBUG] [Thread-16900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:50:44.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:50:44.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-11-12T13:50: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-11-12T13:50:44.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:50:44.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:50:44.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:50:44.780 [DEBUG] [Thread-16900] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:50:48.097 [DEBUG] [Thread-16902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:51:03.156 [DEBUG] [Thread-16903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:51:14.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:51:14.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:51:14.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T13:51:15.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 51, 2), 40.91, 5.93, 0.0, 35.59, 28.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:51:15.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:51:02
2025-11-12T13:51:15.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:51:15.751 [DEBUG] [Thread-16904] [transport.py] [_log()] starting thread (client mode): 0x14982f80
2025-11-12T13:51:15.751 [DEBUG] [Thread-16904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:51:15.771 [DEBUG] [Thread-16904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:51:15.771 [INFO] [Thread-16904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] client lang: <none>
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] server lang: <none>
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] kex follows: False
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] Compression: none
2025-11-12T13:51:15.774 [DEBUG] [Thread-16904] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:51:15.793 [DEBUG] [Thread-16904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:51:15.793 [DEBUG] [Thread-16904] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:51:15.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:51:15.793 [DEBUG] [Thread-16904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:51:15.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:51:15.794 [DEBUG] [Thread-16904] [transport.py] [_log()] userauth is OK
2025-11-12T13:51:15.794 [DEBUG] [Thread-16904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:51:15.794 [DEBUG] [Thread-16904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:51:15.794 [DEBUG] [Thread-16904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:51:15.794 [DEBUG] [Thread-16904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:51:15.804 [INFO] [Thread-16904] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:51:15.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:51:16.416 [DEBUG] [Thread-16904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:51:16.416 [DEBUG] [Thread-16904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:51:16.416 [DEBUG] [Thread-16904] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:51:16.457 [DEBUG] [Thread-16904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:51:16.457 [DEBUG] [Thread-16904] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:51:16.459 [DEBUG] [Thread-16904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:51:16.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:51:16.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:51:16.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:51:16.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:51:16.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:51:16.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:51:16.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.493491 -999.00  +27.70  28.77     11   -4.80 1 1 1 1 1   888    0 34.07 105.58 ----- 28.8 28.8 258.0 31.4 32.4 -28.8 31.9 -26.2 31.9 -26.0 32.5 -27.5
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.493491
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:51:16.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:51:02', tmtdew=40.91, humidity=5.93, cloud=0.0, wind=35.59, temperature=28.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:50:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:51:16.479 [DEBUG] [Thread-16904] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:51:16.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:51:16.566 [DEBUG] [Thread-16907] [transport.py] [_log()] starting thread (client mode): 0x149208b0
2025-11-12T13:51:16.567 [DEBUG] [Thread-16907] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:51:16.583 [DEBUG] [Thread-16907] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:51:16.583 [INFO] [Thread-16907] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] client lang: <none>
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] server lang: <none>
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] kex follows: False
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] Compression: none
2025-11-12T13:51:16.591 [DEBUG] [Thread-16907] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:51:16.649 [DEBUG] [Thread-16907] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:51:16.649 [DEBUG] [Thread-16907] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:51:16.649 [DEBUG] [Thread-16907] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:51:16.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:51:16.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:51:16.706 [DEBUG] [Thread-16907] [transport.py] [_log()] userauth is OK
2025-11-12T13:51:16.706 [DEBUG] [Thread-16907] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:51:16.706 [DEBUG] [Thread-16907] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:51:16.706 [DEBUG] [Thread-16907] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:51:16.706 [DEBUG] [Thread-16907] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:51:16.720 [INFO] [Thread-16907] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:51:16.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:51:16.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:51:17.641 [DEBUG] [Thread-16907] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:51:17.641 [DEBUG] [Thread-16907] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:51:17.689 [DEBUG] [Thread-16907] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:51:17.689 [DEBUG] [Thread-16907] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:51:17.697 [DEBUG] [Thread-16907] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:51:17.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:51:17.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-11-12T13:51:17.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-11-12T13:51:17.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:51:17.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:51:17.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:51:17.728 [DEBUG] [Thread-16907] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:51:18.185 [DEBUG] [Thread-16909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:51:22.538 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:51:22.539 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:51:33.226 [DEBUG] [Thread-16910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:51:34.950 [DEBUG] [Thread-16911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:51:47.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:51:47.722 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:51:47.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-11-12T13:51:48.261 [DEBUG] [Thread-16912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:51:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 51, 34), 39.3, 7.01, 0.0, 26.47, 27.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:51:48.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:51:34
2025-11-12T13:51:48.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:51:48.614 [DEBUG] [Thread-16913] [transport.py] [_log()] starting thread (client mode): 0x14920340
2025-11-12T13:51:48.614 [DEBUG] [Thread-16913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:51:48.635 [DEBUG] [Thread-16913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:51:48.636 [INFO] [Thread-16913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:51:48.638 [DEBUG] [Thread-16913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:51:48.638 [DEBUG] [Thread-16913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:51:48.638 [DEBUG] [Thread-16913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:51:48.638 [DEBUG] [Thread-16913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] client lang: <none>
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] server lang: <none>
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] kex follows: False
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] Compression: none
2025-11-12T13:51:48.639 [DEBUG] [Thread-16913] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:51:48.656 [DEBUG] [Thread-16913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:51:48.656 [DEBUG] [Thread-16913] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:51:48.657 [DEBUG] [Thread-16913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:51:48.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:51:48.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:51:48.659 [DEBUG] [Thread-16913] [transport.py] [_log()] userauth is OK
2025-11-12T13:51:48.659 [DEBUG] [Thread-16913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:51:48.659 [DEBUG] [Thread-16913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:51:48.659 [DEBUG] [Thread-16913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:51:48.659 [DEBUG] [Thread-16913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:51:48.684 [INFO] [Thread-16913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:51:48.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:51:49.311 [DEBUG] [Thread-16913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:51:49.312 [DEBUG] [Thread-16913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:51:49.312 [DEBUG] [Thread-16913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:51:49.353 [DEBUG] [Thread-16913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:51:49.353 [DEBUG] [Thread-16913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:51:49.357 [DEBUG] [Thread-16913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:51:49.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:51:49.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:51:49.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:51:49.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:51:49.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:51:49.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:51:49.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:51:49.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:51:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:51:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.493838 -999.00  +26.90  24.73     11   -5.00 1 1 1 1 1   888    0 33.67 107.03 ----- 24.7 24.7 254.8 30.1 32.2 -29.2 31.9 -27.8 31.9 -25.9 32.4 -28.3
2025-11-12T13:51:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:51:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:51:49.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.493838
2025-11-12T13:51:49.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:51:49.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:51:49.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:51:49.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:51:49.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:51:49.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:51:34', tmtdew=39.3, humidity=7.01, cloud=0.0, wind=26.47, temperature=27.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:51:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:51:49.396 [DEBUG] [Thread-16913] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:51:49.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:52:03.298 [DEBUG] [Thread-16916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:52:18.354 [DEBUG] [Thread-16917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:52:22.685 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:52:22.686 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:52:33.389 [DEBUG] [Thread-16918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:52:34.978 [DEBUG] [Thread-16919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:52:48.423 [DEBUG] [Thread-16920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:53:03.461 [DEBUG] [Thread-16921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:53:18.496 [DEBUG] [Thread-16922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:53:22.826 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:53:22.827 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:53:33.532 [DEBUG] [Thread-16923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:53:35.012 [DEBUG] [Thread-16924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:53:48.569 [DEBUG] [Thread-16925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:54:03.604 [DEBUG] [Thread-16926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:54:04.859 [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-11-12T13:54:18.643 [DEBUG] [Thread-16927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:54:22.969 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:54:22.970 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:54:33.676 [DEBUG] [Thread-16928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:54:34.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:54:34.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:54:34.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-11-12T13:54:35.040 [DEBUG] [Thread-16929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:54:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 54, 14), 37.42, 7.72, 0.0, 31.97, 27.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:54:35.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:54:14
2025-11-12T13:54:35.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:54:35.795 [DEBUG] [Thread-16930] [transport.py] [_log()] starting thread (client mode): 0x173bf490
2025-11-12T13:54:35.796 [DEBUG] [Thread-16930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:54:35.816 [DEBUG] [Thread-16930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:54:35.816 [INFO] [Thread-16930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] client lang: <none>
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] server lang: <none>
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] kex follows: False
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] Compression: none
2025-11-12T13:54:35.819 [DEBUG] [Thread-16930] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:54:35.838 [DEBUG] [Thread-16930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:54:35.839 [DEBUG] [Thread-16930] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:54:35.840 [DEBUG] [Thread-16930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:54:35.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:54:35.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:54:35.881 [DEBUG] [Thread-16930] [transport.py] [_log()] userauth is OK
2025-11-12T13:54:35.881 [DEBUG] [Thread-16930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:54:35.881 [DEBUG] [Thread-16930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:54:35.881 [DEBUG] [Thread-16930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:54:35.882 [DEBUG] [Thread-16930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:54:35.914 [INFO] [Thread-16930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:54:35.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:54:36.743 [DEBUG] [Thread-16930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:54:36.744 [DEBUG] [Thread-16930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:54:36.744 [DEBUG] [Thread-16930] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:54:36.784 [DEBUG] [Thread-16930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:54:36.785 [DEBUG] [Thread-16930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:54:36.788 [DEBUG] [Thread-16930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:54:36.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:54:36.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:54:36.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:54:36.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:54:36.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:54:36.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:54:36.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:54:36.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:54:36.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:54:36.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.495574 -999.00  +27.00  22.52     13   -3.30 1 1 1 1 1   888    0 32.62 68.42 ----- 22.5 22.5 280.2 33.3 32.3 -27.1 31.9 -27.8 31.7 -25.2 32.6 -25.9
2025-11-12T13:54:36.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:54:36.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:54:36.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.495574
2025-11-12T13:54:36.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:54:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:54:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:54:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:54:36.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:54:36.816 [DEBUG] [Thread-16930] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:54:36.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:54:14', tmtdew=37.42, humidity=7.72, cloud=0.0, wind=31.97, temperature=27.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:53:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:54:36.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:54:36.914 [DEBUG] [Thread-16933] [transport.py] [_log()] starting thread (client mode): 0x14981c00
2025-11-12T13:54:36.915 [DEBUG] [Thread-16933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:54:36.931 [DEBUG] [Thread-16933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:54:36.931 [INFO] [Thread-16933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:54:36.938 [DEBUG] [Thread-16933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:54:36.938 [DEBUG] [Thread-16933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:54:36.938 [DEBUG] [Thread-16933] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:54:36.938 [DEBUG] [Thread-16933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] client lang: <none>
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] server lang: <none>
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] kex follows: False
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] Compression: none
2025-11-12T13:54:36.939 [DEBUG] [Thread-16933] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:54:36.995 [DEBUG] [Thread-16933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:54:36.996 [DEBUG] [Thread-16933] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:54:36.997 [DEBUG] [Thread-16933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:54:36.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:54:36.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:54:37.051 [DEBUG] [Thread-16933] [transport.py] [_log()] userauth is OK
2025-11-12T13:54:37.052 [DEBUG] [Thread-16933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:54:37.052 [DEBUG] [Thread-16933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:54:37.052 [DEBUG] [Thread-16933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:54:37.052 [DEBUG] [Thread-16933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:54:37.070 [INFO] [Thread-16933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:54:37.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:54:37.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:54:37.919 [DEBUG] [Thread-16933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:54:37.920 [DEBUG] [Thread-16933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:54:37.968 [DEBUG] [Thread-16933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:54:37.968 [DEBUG] [Thread-16933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:54:37.977 [DEBUG] [Thread-16933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:54:37.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:54:37.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-11-12T13:54:37.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-11-12T13:54:38.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:54:38.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:54:38.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:54:38.014 [DEBUG] [Thread-16933] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:54:48.710 [DEBUG] [Thread-16935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:55:03.765 [DEBUG] [Thread-16936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:55:08.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:55:08.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:55:08.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-11-12T13:55:08.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 54, 46), 37.84, 7.71, 0.0, 29.52, 28.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:55:08.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:54:46
2025-11-12T13:55:08.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:55:08.975 [DEBUG] [Thread-16937] [transport.py] [_log()] starting thread (client mode): 0x14961720
2025-11-12T13:55:08.975 [DEBUG] [Thread-16937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:55:08.995 [DEBUG] [Thread-16937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:55:08.995 [INFO] [Thread-16937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] client lang: <none>
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] server lang: <none>
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] kex follows: False
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:55:08.999 [DEBUG] [Thread-16937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:55:09.000 [DEBUG] [Thread-16937] [transport.py] [_log()] Compression: none
2025-11-12T13:55:09.000 [DEBUG] [Thread-16937] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:55:09.007 [DEBUG] [Thread-16937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:55:09.007 [DEBUG] [Thread-16937] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:55:09.007 [DEBUG] [Thread-16937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:55:09.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:55:09.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:55:09.008 [DEBUG] [Thread-16937] [transport.py] [_log()] userauth is OK
2025-11-12T13:55:09.008 [DEBUG] [Thread-16937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:55:09.008 [DEBUG] [Thread-16937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:55:09.008 [DEBUG] [Thread-16937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:55:09.008 [DEBUG] [Thread-16937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:55:09.021 [INFO] [Thread-16937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:55:09.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:55:11.383 [DEBUG] [Thread-16937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:55:11.383 [DEBUG] [Thread-16937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:55:11.383 [DEBUG] [Thread-16937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:55:11.424 [DEBUG] [Thread-16937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:55:11.424 [DEBUG] [Thread-16937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:55:11.427 [DEBUG] [Thread-16937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:55:11.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:55:11.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:55:11.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:55:11.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:55:11.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:55:11.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:55:11.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.495921 -999.00  +27.80  21.15     13   -2.80 1 1 1 1 1   888    0 32.60 60.58 ----- 21.1 21.1 279.2 29.9 32.5 -28.2 31.9 -25.7 31.9 -26.4 32.9 -25.7
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.495921
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:55:11.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:55:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:55:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:55:11.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:54:46', tmtdew=37.84, humidity=7.71, cloud=0.0, wind=29.52, temperature=28.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:54:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:55:11.506 [DEBUG] [Thread-16937] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:55:11.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:55:11.594 [DEBUG] [Thread-16940] [transport.py] [_log()] starting thread (client mode): 0x173e9750
2025-11-12T13:55:11.594 [DEBUG] [Thread-16940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:55:11.609 [DEBUG] [Thread-16940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:55:11.609 [INFO] [Thread-16940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] client lang: <none>
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] server lang: <none>
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] kex follows: False
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] Compression: none
2025-11-12T13:55:11.617 [DEBUG] [Thread-16940] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:55:11.675 [DEBUG] [Thread-16940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:55:11.676 [DEBUG] [Thread-16940] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:55:11.676 [DEBUG] [Thread-16940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:55:11.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:55:11.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:55:11.731 [DEBUG] [Thread-16940] [transport.py] [_log()] userauth is OK
2025-11-12T13:55:11.732 [DEBUG] [Thread-16940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:55:11.732 [DEBUG] [Thread-16940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:55:11.732 [DEBUG] [Thread-16940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:55:11.732 [DEBUG] [Thread-16940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:55:11.752 [INFO] [Thread-16940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:55:11.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:55:11.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:55:12.616 [DEBUG] [Thread-16940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:55:12.616 [DEBUG] [Thread-16940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:55:12.663 [DEBUG] [Thread-16940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:55:12.663 [DEBUG] [Thread-16940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:55:12.673 [DEBUG] [Thread-16940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:55:12.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:55: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-11-12T13:55: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-11-12T13:55:12.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:55:12.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:55:12.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:55:12.708 [DEBUG] [Thread-16940] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:55:18.797 [DEBUG] [Thread-16942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:55:23.111 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:55:23.113 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:55:33.836 [DEBUG] [Thread-16943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:55:35.095 [DEBUG] [Thread-16944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:55:42.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:55:42.731 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:55:42.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-11-12T13:55:43.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 55, 18), 37.53, 7.87, 0.0, 30.09, 28.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:55:43.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:55:18
2025-11-12T13:55:43.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:55:43.650 [DEBUG] [Thread-16945] [transport.py] [_log()] starting thread (client mode): 0x173bc9a0
2025-11-12T13:55:43.650 [DEBUG] [Thread-16945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:55:43.671 [DEBUG] [Thread-16945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:55:43.671 [INFO] [Thread-16945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:55:43.673 [DEBUG] [Thread-16945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] client lang: <none>
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] server lang: <none>
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] kex follows: False
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] Compression: none
2025-11-12T13:55:43.674 [DEBUG] [Thread-16945] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:55:43.691 [DEBUG] [Thread-16945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:55:43.691 [DEBUG] [Thread-16945] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:55:43.692 [DEBUG] [Thread-16945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:55:43.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:55:43.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:55:43.694 [DEBUG] [Thread-16945] [transport.py] [_log()] userauth is OK
2025-11-12T13:55:43.694 [DEBUG] [Thread-16945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:55:43.694 [DEBUG] [Thread-16945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:55:43.694 [DEBUG] [Thread-16945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:55:43.695 [DEBUG] [Thread-16945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:55:43.714 [INFO] [Thread-16945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:55:43.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:55:44.282 [DEBUG] [Thread-16945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:55:44.283 [DEBUG] [Thread-16945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:55:44.284 [DEBUG] [Thread-16945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:55:44.324 [DEBUG] [Thread-16945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:55:44.324 [DEBUG] [Thread-16945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:55:44.327 [DEBUG] [Thread-16945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:55:44.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:55:44.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:55:44.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:55:44.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:55:44.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:55:44.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:55:44.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:55:44.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:55:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:55:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.496615 -999.00  +28.20  21.10     13   -2.30 1 1 1 1 1   888    0 32.65 45.38 ----- 21.1 21.1 284.4 35.1 32.7 -27.7 32.1 -25.9 32.3 -26.8 33.1 -27.4
2025-11-12T13:55:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:55:44.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:55:44.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.496615
2025-11-12T13:55:44.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:55:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:55:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:55:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:55:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:55:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:55:18', tmtdew=37.53, humidity=7.87, cloud=0.0, wind=30.09, temperature=28.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:55:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:55:44.347 [DEBUG] [Thread-16945] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:55:44.421 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:55:44.434 [DEBUG] [Thread-16948] [transport.py] [_log()] starting thread (client mode): 0x149620e0
2025-11-12T13:55:44.434 [DEBUG] [Thread-16948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:55:44.449 [DEBUG] [Thread-16948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:55:44.449 [INFO] [Thread-16948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:55:44.457 [DEBUG] [Thread-16948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:55:44.457 [DEBUG] [Thread-16948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:55:44.457 [DEBUG] [Thread-16948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:55:44.457 [DEBUG] [Thread-16948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] client lang: <none>
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] server lang: <none>
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] kex follows: False
2025-11-12T13:55:44.458 [DEBUG] [Thread-16948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:55:44.459 [DEBUG] [Thread-16948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:55:44.459 [DEBUG] [Thread-16948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:55:44.459 [DEBUG] [Thread-16948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:55:44.459 [DEBUG] [Thread-16948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:55:44.459 [DEBUG] [Thread-16948] [transport.py] [_log()] Compression: none
2025-11-12T13:55:44.459 [DEBUG] [Thread-16948] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:55:44.516 [DEBUG] [Thread-16948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:55:44.517 [DEBUG] [Thread-16948] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:55:44.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:55:44.519 [DEBUG] [Thread-16948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:55:44.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:55:44.575 [DEBUG] [Thread-16948] [transport.py] [_log()] userauth is OK
2025-11-12T13:55:44.576 [DEBUG] [Thread-16948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:55:44.576 [DEBUG] [Thread-16948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:55:44.576 [DEBUG] [Thread-16948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:55:44.576 [DEBUG] [Thread-16948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:55:44.595 [INFO] [Thread-16948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:55:44.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:55:44.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:55:45.460 [DEBUG] [Thread-16948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:55:45.460 [DEBUG] [Thread-16948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:55:45.508 [DEBUG] [Thread-16948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:55:45.508 [DEBUG] [Thread-16948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:55:45.516 [DEBUG] [Thread-16948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:55:45.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:55:45.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-11-12T13:55:45.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T13:55:45.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:55:45.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:55:45.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:55:45.548 [DEBUG] [Thread-16948] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:55:48.869 [DEBUG] [Thread-16950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:56:03.915 [DEBUG] [Thread-16951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:56:15.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:56:15.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:56:15.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-11-12T13:56:16.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 55, 50), 36.48, 8.42, 0.0, 32.01, 27.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:56:16.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:55:50
2025-11-12T13:56:16.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:56:16.512 [DEBUG] [Thread-16952] [transport.py] [_log()] starting thread (client mode): 0x173bf820
2025-11-12T13:56:16.512 [DEBUG] [Thread-16952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:56:16.533 [DEBUG] [Thread-16952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:56:16.533 [INFO] [Thread-16952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:56:16.535 [DEBUG] [Thread-16952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:56:16.535 [DEBUG] [Thread-16952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:56:16.535 [DEBUG] [Thread-16952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] client lang: <none>
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] server lang: <none>
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] kex follows: False
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:56:16.536 [DEBUG] [Thread-16952] [transport.py] [_log()] Compression: none
2025-11-12T13:56:16.537 [DEBUG] [Thread-16952] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:56:16.550 [DEBUG] [Thread-16952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:56:16.550 [DEBUG] [Thread-16952] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:56:16.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:56:16.552 [DEBUG] [Thread-16952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:56:16.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:56:16.553 [DEBUG] [Thread-16952] [transport.py] [_log()] userauth is OK
2025-11-12T13:56:16.554 [DEBUG] [Thread-16952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:56:16.554 [DEBUG] [Thread-16952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:56:16.554 [DEBUG] [Thread-16952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:56:16.554 [DEBUG] [Thread-16952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:56:16.573 [INFO] [Thread-16952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:56:16.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:56:17.304 [DEBUG] [Thread-16952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:56:17.304 [DEBUG] [Thread-16952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:56:17.305 [DEBUG] [Thread-16952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:56:17.345 [DEBUG] [Thread-16952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:56:17.346 [DEBUG] [Thread-16952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:56:17.349 [DEBUG] [Thread-16952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:56:17.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:56:17.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:56:17.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:56:17.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:56:17.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:56:17.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:56:17.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:56:17.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:56:17.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:56:17.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.496963 -999.00  +28.00  19.66     13   -2.40 1 1 1 1 1   888    0 32.27 38.34 ----- 19.7 19.7 274.6 34.1 32.7 -28.2 32.2 -26.1 32.3 -26.7 33.1 -27.1
2025-11-12T13:56:17.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:56:17.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:56:17.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.496963
2025-11-12T13:56:17.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:56:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:56:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:56:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:56:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:56:17.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:55:50', tmtdew=36.48, humidity=8.42, cloud=0.0, wind=32.01, temperature=27.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:55:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:56:17.373 [DEBUG] [Thread-16952] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:56:17.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:56:17.471 [DEBUG] [Thread-16955] [transport.py] [_log()] starting thread (client mode): 0x14981ae0
2025-11-12T13:56:17.471 [DEBUG] [Thread-16955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:56:17.486 [DEBUG] [Thread-16955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:56:17.486 [INFO] [Thread-16955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:56:17.494 [DEBUG] [Thread-16955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:56:17.494 [DEBUG] [Thread-16955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:56:17.494 [DEBUG] [Thread-16955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] client lang: <none>
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] server lang: <none>
2025-11-12T13:56:17.495 [DEBUG] [Thread-16955] [transport.py] [_log()] kex follows: False
2025-11-12T13:56:17.496 [DEBUG] [Thread-16955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:56:17.496 [DEBUG] [Thread-16955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:56:17.496 [DEBUG] [Thread-16955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:56:17.496 [DEBUG] [Thread-16955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:56:17.496 [DEBUG] [Thread-16955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:56:17.496 [DEBUG] [Thread-16955] [transport.py] [_log()] Compression: none
2025-11-12T13:56:17.496 [DEBUG] [Thread-16955] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:56:17.552 [DEBUG] [Thread-16955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:56:17.553 [DEBUG] [Thread-16955] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:56:17.553 [DEBUG] [Thread-16955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:56:17.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:56:17.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:56:17.612 [DEBUG] [Thread-16955] [transport.py] [_log()] userauth is OK
2025-11-12T13:56:17.612 [DEBUG] [Thread-16955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:56:17.612 [DEBUG] [Thread-16955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:56:17.612 [DEBUG] [Thread-16955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:56:17.612 [DEBUG] [Thread-16955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:56:17.631 [INFO] [Thread-16955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:56:17.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:56:17.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:56:18.495 [DEBUG] [Thread-16955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:56:18.495 [DEBUG] [Thread-16955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:56:18.543 [DEBUG] [Thread-16955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:56:18.544 [DEBUG] [Thread-16955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:56:18.553 [DEBUG] [Thread-16955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:56:18.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:56:18.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-11-12T13:56:18.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-11-12T13:56:18.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:56:18.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:56:18.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:56:18.590 [DEBUG] [Thread-16955] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:56:18.953 [DEBUG] [Thread-16957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:56:23.254 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:56:23.254 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:56:34.005 [DEBUG] [Thread-16958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:56:35.147 [DEBUG] [Thread-16959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:56:48.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:56:48.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:56:48.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-11-12T13:56:49.045 [DEBUG] [Thread-16960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:56:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 56, 22), 36.29, 8.55, 0.0, 32.82, 27.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:56:49.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:56:22
2025-11-12T13:56:49.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:56:49.526 [DEBUG] [Thread-16961] [transport.py] [_log()] starting thread (client mode): 0x14980c70
2025-11-12T13:56:49.527 [DEBUG] [Thread-16961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:56:49.548 [DEBUG] [Thread-16961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:56:49.548 [INFO] [Thread-16961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] client lang: <none>
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] server lang: <none>
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] kex follows: False
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] Compression: none
2025-11-12T13:56:49.551 [DEBUG] [Thread-16961] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:56:49.569 [DEBUG] [Thread-16961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:56:49.569 [DEBUG] [Thread-16961] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:56:49.570 [DEBUG] [Thread-16961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:56:49.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:56:49.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:56:49.572 [DEBUG] [Thread-16961] [transport.py] [_log()] userauth is OK
2025-11-12T13:56:49.572 [DEBUG] [Thread-16961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:56:49.572 [DEBUG] [Thread-16961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:56:49.573 [DEBUG] [Thread-16961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:56:49.573 [DEBUG] [Thread-16961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:56:49.598 [INFO] [Thread-16961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:56:49.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:56:50.194 [DEBUG] [Thread-16961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:56:50.195 [DEBUG] [Thread-16961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:56:50.195 [DEBUG] [Thread-16961] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:56:50.236 [DEBUG] [Thread-16961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:56:50.236 [DEBUG] [Thread-16961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:56:50.240 [DEBUG] [Thread-16961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:56:50.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:56:50.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:56:50.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:56:50.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:56:50.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:56:50.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:56:50.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:56:50.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.497310 -999.00  +26.90  25.21     13   -3.00 1 1 1 1 1   888    0 31.55 32.19 ----- 25.2 25.2 272.0 46.6 32.3 -30.3 32.2 -26.3 31.7 -31.1 32.8 -28.6
2025-11-12T13:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:56:50.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.497310
2025-11-12T13:56:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:56:50.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:56:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:56:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:56:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:56:50.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:56:22', tmtdew=36.29, humidity=8.55, cloud=0.0, wind=32.82, temperature=27.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:56:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:56:50.265 [DEBUG] [Thread-16961] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:56:50.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:56:50.361 [DEBUG] [Thread-16964] [transport.py] [_log()] starting thread (client mode): 0x19dd8f10
2025-11-12T13:56:50.362 [DEBUG] [Thread-16964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:56:50.376 [DEBUG] [Thread-16964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:56:50.377 [INFO] [Thread-16964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:56:50.384 [DEBUG] [Thread-16964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:56:50.384 [DEBUG] [Thread-16964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:56:50.384 [DEBUG] [Thread-16964] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:56:50.384 [DEBUG] [Thread-16964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] client lang: <none>
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] server lang: <none>
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] kex follows: False
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] Compression: none
2025-11-12T13:56:50.385 [DEBUG] [Thread-16964] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:56:50.443 [DEBUG] [Thread-16964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:56:50.444 [DEBUG] [Thread-16964] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:56:50.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:56:50.445 [DEBUG] [Thread-16964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:56:50.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:56:50.500 [DEBUG] [Thread-16964] [transport.py] [_log()] userauth is OK
2025-11-12T13:56:50.500 [DEBUG] [Thread-16964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:56:50.500 [DEBUG] [Thread-16964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:56:50.500 [DEBUG] [Thread-16964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:56:50.500 [DEBUG] [Thread-16964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:56:50.519 [INFO] [Thread-16964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:56:50.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:56:50.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:56:51.419 [DEBUG] [Thread-16964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:56:51.419 [DEBUG] [Thread-16964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:56:51.466 [DEBUG] [Thread-16964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:56:51.467 [DEBUG] [Thread-16964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:56:51.475 [DEBUG] [Thread-16964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:56:51.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:56:51.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-11-12T13:56:51.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-11-12T13:56:51.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:56:51.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:56:51.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:56:51.511 [DEBUG] [Thread-16964] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:57:04.074 [DEBUG] [Thread-16966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:57:19.114 [DEBUG] [Thread-16967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:57:21.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:57:21.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:57:21.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-11-12T13:57:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 56, 54), 35.86, 8.92, 0.0, 30.31, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:57:22.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:56:54
2025-11-12T13:57:22.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:57:22.455 [DEBUG] [Thread-16968] [transport.py] [_log()] starting thread (client mode): 0x14980550
2025-11-12T13:57:22.455 [DEBUG] [Thread-16968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:57:22.471 [DEBUG] [Thread-16968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:57:22.471 [INFO] [Thread-16968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:57:22.473 [DEBUG] [Thread-16968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] client lang: <none>
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] server lang: <none>
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] kex follows: False
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] Compression: none
2025-11-12T13:57:22.474 [DEBUG] [Thread-16968] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:57:22.491 [DEBUG] [Thread-16968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:57:22.491 [DEBUG] [Thread-16968] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:57:22.492 [DEBUG] [Thread-16968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:57:22.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:57:22.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:57:22.494 [DEBUG] [Thread-16968] [transport.py] [_log()] userauth is OK
2025-11-12T13:57:22.494 [DEBUG] [Thread-16968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:57:22.495 [DEBUG] [Thread-16968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:57:22.495 [DEBUG] [Thread-16968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:57:22.495 [DEBUG] [Thread-16968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:57:22.520 [INFO] [Thread-16968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:57:22.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:57:23.298 [DEBUG] [Thread-16968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:57:23.298 [DEBUG] [Thread-16968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:57:23.299 [DEBUG] [Thread-16968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:57:23.340 [DEBUG] [Thread-16968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:57:23.340 [DEBUG] [Thread-16968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:57:23.343 [DEBUG] [Thread-16968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:57:23.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:57:23.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:57:23.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:57:23.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:57:23.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:57:23.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:57:23.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:57:23.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.497657 -999.00  +26.20  36.36     15   -2.20 1 1 2 1 1   888    0 31.33 19.27 ----- 36.4 36.4 278.0 47.3 31.9 -32.0 32.0 -26.8 31.0 -33.0 32.4 -27.8
2025-11-12T13:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:57:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.497657
2025-11-12T13:57:23.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:57:23.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:57:23.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:57:23.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:57:23.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:57:23.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:56:54', tmtdew=35.86, humidity=8.92, cloud=0.0, wind=30.31, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:56:37.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:57:23.369 [DEBUG] [Thread-16968] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:57:23.394 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:57:23.395 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:57:23.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:57:23.464 [DEBUG] [Thread-16971] [transport.py] [_log()] starting thread (client mode): 0x14982050
2025-11-12T13:57:23.464 [DEBUG] [Thread-16971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:57:23.479 [DEBUG] [Thread-16971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:57:23.479 [INFO] [Thread-16971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:57:23.487 [DEBUG] [Thread-16971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:57:23.487 [DEBUG] [Thread-16971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:57:23.487 [DEBUG] [Thread-16971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:57:23.487 [DEBUG] [Thread-16971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] client lang: <none>
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] server lang: <none>
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] kex follows: False
2025-11-12T13:57:23.488 [DEBUG] [Thread-16971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:57:23.489 [DEBUG] [Thread-16971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:57:23.489 [DEBUG] [Thread-16971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:57:23.489 [DEBUG] [Thread-16971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:57:23.489 [DEBUG] [Thread-16971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:57:23.489 [DEBUG] [Thread-16971] [transport.py] [_log()] Compression: none
2025-11-12T13:57:23.489 [DEBUG] [Thread-16971] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:57:23.544 [DEBUG] [Thread-16971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:57:23.545 [DEBUG] [Thread-16971] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:57:23.545 [DEBUG] [Thread-16971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:57:23.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:57:23.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:57:23.600 [DEBUG] [Thread-16971] [transport.py] [_log()] userauth is OK
2025-11-12T13:57:23.600 [DEBUG] [Thread-16971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:57:23.600 [DEBUG] [Thread-16971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:57:23.600 [DEBUG] [Thread-16971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:57:23.600 [DEBUG] [Thread-16971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:57:23.619 [INFO] [Thread-16971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:57:23.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:57:23.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:57:24.475 [DEBUG] [Thread-16971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:57:24.476 [DEBUG] [Thread-16971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:57:24.523 [DEBUG] [Thread-16971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:57:24.524 [DEBUG] [Thread-16971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:57:24.533 [DEBUG] [Thread-16971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:57:24.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:57:24.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-11-12T13:57:24.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-11-12T13:57:24.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:57:24.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:57:24.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:57:24.568 [DEBUG] [Thread-16971] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:57:34.151 [DEBUG] [Thread-16973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:57:35.189 [DEBUG] [Thread-16974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:57:49.200 [DEBUG] [Thread-16975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:57:54.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:57:54.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:57:54.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-11-12T13:57:55.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 57, 26), 35.44, 9.2, 0.0, 30.68, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:57:55.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:57:26
2025-11-12T13:57:55.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:57:55.476 [DEBUG] [Thread-16976] [transport.py] [_log()] starting thread (client mode): 0x1493cd60
2025-11-12T13:57:55.476 [DEBUG] [Thread-16976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:57:55.491 [DEBUG] [Thread-16976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:57:55.491 [INFO] [Thread-16976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:57:55.493 [DEBUG] [Thread-16976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] client lang: <none>
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] server lang: <none>
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] kex follows: False
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] Compression: none
2025-11-12T13:57:55.494 [DEBUG] [Thread-16976] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:57:55.512 [DEBUG] [Thread-16976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:57:55.512 [DEBUG] [Thread-16976] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:57:55.513 [DEBUG] [Thread-16976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:57:55.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:57:55.514 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:57:55.515 [DEBUG] [Thread-16976] [transport.py] [_log()] userauth is OK
2025-11-12T13:57:55.515 [DEBUG] [Thread-16976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:57:55.515 [DEBUG] [Thread-16976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:57:55.515 [DEBUG] [Thread-16976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:57:55.515 [DEBUG] [Thread-16976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:57:55.532 [INFO] [Thread-16976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:57:55.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:57:56.175 [DEBUG] [Thread-16976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:57:56.175 [DEBUG] [Thread-16976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:57:56.175 [DEBUG] [Thread-16976] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:57:56.215 [DEBUG] [Thread-16976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:57:56.215 [DEBUG] [Thread-16976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:57:56.218 [DEBUG] [Thread-16976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:57:56.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:57:56.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:57:56.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:57:56.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:57:56.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:57:56.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:57:56.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:57:56.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:57:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:57:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.498005 -999.00  +25.90  28.64     15   -2.10 1 1 1 1 1   888    0 31.35 1.45 ----- 28.6 28.6 277.6 33.6 32.0 -28.5 31.7 -28.6 31.2 -25.7 32.3 -26.1
2025-11-12T13:57:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:57:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:57:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.498005
2025-11-12T13:57:56.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:57:56.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:57:56.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:57:56.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:57:56.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:57:56.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:57:26', tmtdew=35.44, humidity=9.2, cloud=0.0, wind=30.68, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:57:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:57:56.232 [DEBUG] [Thread-16976] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:57:56.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:57:56.339 [DEBUG] [Thread-16979] [transport.py] [_log()] starting thread (client mode): 0x17362740
2025-11-12T13:57:56.340 [DEBUG] [Thread-16979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:57:56.355 [DEBUG] [Thread-16979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T13:57:56.355 [INFO] [Thread-16979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] client lang: <none>
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] server lang: <none>
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] kex follows: False
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] Compression: none
2025-11-12T13:57:56.363 [DEBUG] [Thread-16979] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:57:56.419 [DEBUG] [Thread-16979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:57:56.420 [DEBUG] [Thread-16979] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:57:56.421 [DEBUG] [Thread-16979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T13:57:56.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T13:57:56.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:57:56.476 [DEBUG] [Thread-16979] [transport.py] [_log()] userauth is OK
2025-11-12T13:57:56.477 [DEBUG] [Thread-16979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:57:56.477 [DEBUG] [Thread-16979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:57:56.477 [DEBUG] [Thread-16979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T13:57:56.477 [DEBUG] [Thread-16979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:57:56.502 [INFO] [Thread-16979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:57:56.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T13:57:56.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:57:57.353 [DEBUG] [Thread-16979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:57:57.353 [DEBUG] [Thread-16979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:57:57.401 [DEBUG] [Thread-16979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:57:57.401 [DEBUG] [Thread-16979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:57:57.410 [DEBUG] [Thread-16979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:57:57.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:57:57.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-11-12T13:57:57.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-11-12T13:57:57.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:57:57.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:57:57.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:57:57.445 [DEBUG] [Thread-16979] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:58:04.236 [DEBUG] [Thread-16981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:58:19.285 [DEBUG] [Thread-16982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:58:23.537 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:58:23.538 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:58:27.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T13:58:27.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T13:58:27.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-11-12T13:58:28.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 13, 57, 58), 35.88, 9.2, 0.0, 27.12, 27.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T13:58:28.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 13:57:58
2025-11-12T13:58:28.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T13:58:28.371 [DEBUG] [Thread-16983] [transport.py] [_log()] starting thread (client mode): 0x173e9120
2025-11-12T13:58:28.371 [DEBUG] [Thread-16983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T13:58:28.392 [DEBUG] [Thread-16983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T13:58:28.392 [INFO] [Thread-16983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] client lang: <none>
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] server lang: <none>
2025-11-12T13:58:28.395 [DEBUG] [Thread-16983] [transport.py] [_log()] kex follows: False
2025-11-12T13:58:28.396 [DEBUG] [Thread-16983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T13:58:28.396 [DEBUG] [Thread-16983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T13:58:28.396 [DEBUG] [Thread-16983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T13:58:28.396 [DEBUG] [Thread-16983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T13:58:28.396 [DEBUG] [Thread-16983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T13:58:28.396 [DEBUG] [Thread-16983] [transport.py] [_log()] Compression: none
2025-11-12T13:58:28.396 [DEBUG] [Thread-16983] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T13:58:28.411 [DEBUG] [Thread-16983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T13:58:28.412 [DEBUG] [Thread-16983] [transport.py] [_log()] Switch to new keys ...
2025-11-12T13:58:28.412 [DEBUG] [Thread-16983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T13:58:28.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T13:58:28.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T13:58:28.414 [DEBUG] [Thread-16983] [transport.py] [_log()] userauth is OK
2025-11-12T13:58:28.414 [DEBUG] [Thread-16983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T13:58:28.415 [DEBUG] [Thread-16983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T13:58:28.415 [DEBUG] [Thread-16983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T13:58:28.415 [DEBUG] [Thread-16983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T13:58:28.432 [INFO] [Thread-16983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T13:58:28.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T13:58:29.194 [DEBUG] [Thread-16983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T13:58:29.194 [DEBUG] [Thread-16983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T13:58:29.194 [DEBUG] [Thread-16983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T13:58:29.235 [DEBUG] [Thread-16983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T13:58:29.235 [DEBUG] [Thread-16983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T13:58:29.238 [DEBUG] [Thread-16983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T13:58:29.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T13:58:29.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T13:58:29.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T13:58:29.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T13:58:29.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T13:58:29.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T13:58:29.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.498352 -999.00  +26.50  23.09     15   -1.90 1 1 1 1 1   888    0 30.77 -15.83 ----- 23.1 23.1 274.9 32.0 32.3 -27.1 31.6 -27.0 31.6 -25.3 32.5 -24.5
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.498352
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T13:58:29.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T13:57:58', tmtdew=35.88, humidity=9.2, cloud=0.0, wind=27.12, temperature=27.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T11:57:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T13:58:29.247 [DEBUG] [Thread-16983] [transport.py] [_log()] EOF in transport thread
2025-11-12T13:58:29.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T13:58:34.310 [DEBUG] [Thread-16986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:58:35.222 [DEBUG] [Thread-16987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:58:49.366 [DEBUG] [Thread-16988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:59:04.396 [DEBUG] [Thread-16989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:59:19.429 [DEBUG] [Thread-16990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:59:23.681 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:59:23.682 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:59:34.470 [DEBUG] [Thread-16991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:59:35.260 [DEBUG] [Thread-16992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T13:59:49.501 [DEBUG] [Thread-16993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:00:04.536 [DEBUG] [Thread-16994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:00:19.569 [DEBUG] [Thread-16995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:00:23.824 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:00:23.825 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:00:34.602 [DEBUG] [Thread-16996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:00:35.305 [DEBUG] [Thread-16997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:00:42.171 [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-11-12T14:00:49.639 [DEBUG] [Thread-16998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:01:04.673 [DEBUG] [Thread-16999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:01:12.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:01:12.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:01:12.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-11-12T14:01:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 0, 39), 34.62, 9.53, 0.0, 30.56, 27.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:01:12.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:00:39
2025-11-12T14:01:13.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:01:13.194 [DEBUG] [Thread-17000] [transport.py] [_log()] starting thread (client mode): 0x14981c90
2025-11-12T14:01:13.194 [DEBUG] [Thread-17000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:01:13.215 [DEBUG] [Thread-17000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:01:13.215 [INFO] [Thread-17000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:01:13.218 [DEBUG] [Thread-17000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:01:13.218 [DEBUG] [Thread-17000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:01:13.218 [DEBUG] [Thread-17000] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:01:13.218 [DEBUG] [Thread-17000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:01:13.218 [DEBUG] [Thread-17000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:01:13.218 [DEBUG] [Thread-17000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] client lang: <none>
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] server lang: <none>
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] kex follows: False
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] Compression: none
2025-11-12T14:01:13.219 [DEBUG] [Thread-17000] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:01:13.236 [DEBUG] [Thread-17000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:01:13.237 [DEBUG] [Thread-17000] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:01:13.237 [DEBUG] [Thread-17000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:01:13.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:01:13.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:01:13.239 [DEBUG] [Thread-17000] [transport.py] [_log()] userauth is OK
2025-11-12T14:01:13.239 [DEBUG] [Thread-17000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:01:13.240 [DEBUG] [Thread-17000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:01:13.240 [DEBUG] [Thread-17000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:01:13.240 [DEBUG] [Thread-17000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:01:13.257 [INFO] [Thread-17000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:01:13.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:01:13.841 [DEBUG] [Thread-17000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:01:13.841 [DEBUG] [Thread-17000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:01:13.842 [DEBUG] [Thread-17000] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:01:13.882 [DEBUG] [Thread-17000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:01:13.882 [DEBUG] [Thread-17000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:01:13.886 [DEBUG] [Thread-17000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:01:13.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:01:13.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:01:13.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:01:13.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:01:13.908 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:01:13.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:01:13.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:01:13.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:01:13.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:01:13.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.500435 -999.00  +26.90  22.22     15   -1.40 1 1 1 1 1   888    0 27.42 -117.45 ----- 22.2 22.2 253.4 28.4 32.0 -29.1 31.7 -26.0 31.5 -28.7 32.5 -27.5
2025-11-12T14:01:13.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:01:13.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:01:13.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.500435
2025-11-12T14:01:13.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:01:13.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:01:13.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:01:13.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:01:13.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:01:13.913 [DEBUG] [Thread-17000] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:01:13.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:00:39', tmtdew=34.62, humidity=9.53, cloud=0.0, wind=30.56, temperature=27.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:00:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:01:13.997 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:01:19.711 [DEBUG] [Thread-17003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:01:23.967 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:01:23.968 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:01:34.763 [DEBUG] [Thread-17004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:01:35.334 [DEBUG] [Thread-17005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:01:49.789 [DEBUG] [Thread-17006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:02:04.825 [DEBUG] [Thread-17007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:02:19.858 [DEBUG] [Thread-17008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:02:24.111 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:02:24.112 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:02:34.895 [DEBUG] [Thread-17009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:02:35.366 [DEBUG] [Thread-17010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:02:49.932 [DEBUG] [Thread-17011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:03:04.967 [DEBUG] [Thread-17012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:03:20.002 [DEBUG] [Thread-17013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:03:24.263 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:03:24.264 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:03:26.011 [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-11-12T14:03:35.033 [DEBUG] [Thread-17014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:03:35.411 [DEBUG] [Thread-17015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:03:50.075 [DEBUG] [Thread-17016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:03:56.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:03:56.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:03:56.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:03:56.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 3, 50), 34.32, 9.77, 0.0, 26.62, 27.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:03:56.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:03:50
2025-11-12T14:03:56.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:03:57.005 [DEBUG] [Thread-17017] [transport.py] [_log()] starting thread (client mode): 0x14962410
2025-11-12T14:03:57.005 [DEBUG] [Thread-17017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:03:57.025 [DEBUG] [Thread-17017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:03:57.025 [INFO] [Thread-17017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:03:57.028 [DEBUG] [Thread-17017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:03:57.028 [DEBUG] [Thread-17017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:03:57.028 [DEBUG] [Thread-17017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:03:57.028 [DEBUG] [Thread-17017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:03:57.028 [DEBUG] [Thread-17017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] client lang: <none>
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] server lang: <none>
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] kex follows: False
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] Compression: none
2025-11-12T14:03:57.029 [DEBUG] [Thread-17017] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:03:57.047 [DEBUG] [Thread-17017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:03:57.047 [DEBUG] [Thread-17017] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:03:57.048 [DEBUG] [Thread-17017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:03:57.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:03:57.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:03:57.050 [DEBUG] [Thread-17017] [transport.py] [_log()] userauth is OK
2025-11-12T14:03:57.050 [DEBUG] [Thread-17017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:03:57.050 [DEBUG] [Thread-17017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:03:57.050 [DEBUG] [Thread-17017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:03:57.050 [DEBUG] [Thread-17017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:03:57.073 [INFO] [Thread-17017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:03:57.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:03:57.876 [DEBUG] [Thread-17017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:03:57.876 [DEBUG] [Thread-17017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:03:57.877 [DEBUG] [Thread-17017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:03:57.917 [DEBUG] [Thread-17017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:03:57.917 [DEBUG] [Thread-17017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:03:57.920 [DEBUG] [Thread-17017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:03:57.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:03:57.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:03:57.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:03:57.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:03:57.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:03:57.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:03:57.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:03:57.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:03:57.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:03:57.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.502171 -999.00  +26.40  23.93     16   -1.40 1 1 1 1 1   888    0 25.10 -160.50 ----- 23.9 23.9 270.6 31.2 31.8 -30.1 31.7 -27.5 31.3 -31.5 32.3 -27.9
2025-11-12T14:03:57.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:03:57.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:03:57.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.502171
2025-11-12T14:03:57.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:03:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:03:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:03:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:03:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:03:57.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:03:50', tmtdew=34.32, humidity=9.77, cloud=0.0, wind=26.62, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:03:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:03:57.945 [DEBUG] [Thread-17017] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:03:58.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:03:58.045 [DEBUG] [Thread-17020] [transport.py] [_log()] starting thread (client mode): 0x173bf580
2025-11-12T14:03:58.045 [DEBUG] [Thread-17020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:03:58.060 [DEBUG] [Thread-17020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:03:58.060 [INFO] [Thread-17020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:03:58.067 [DEBUG] [Thread-17020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] client lang: <none>
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] server lang: <none>
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] kex follows: False
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:03:58.068 [DEBUG] [Thread-17020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:03:58.069 [DEBUG] [Thread-17020] [transport.py] [_log()] Compression: none
2025-11-12T14:03:58.069 [DEBUG] [Thread-17020] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:03:58.123 [DEBUG] [Thread-17020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:03:58.124 [DEBUG] [Thread-17020] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:03:58.124 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:03:58.125 [DEBUG] [Thread-17020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:03:58.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:03:58.180 [DEBUG] [Thread-17020] [transport.py] [_log()] userauth is OK
2025-11-12T14:03:58.180 [DEBUG] [Thread-17020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:03:58.180 [DEBUG] [Thread-17020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:03:58.180 [DEBUG] [Thread-17020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:03:58.180 [DEBUG] [Thread-17020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:03:58.199 [INFO] [Thread-17020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:03:58.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:03:58.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:03:59.017 [DEBUG] [Thread-17020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:03:59.017 [DEBUG] [Thread-17020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:03:59.064 [DEBUG] [Thread-17020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:03:59.064 [DEBUG] [Thread-17020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:03:59.073 [DEBUG] [Thread-17020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:03:59.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:03:59.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-11-12T14:03:59.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-11-12T14:03:59.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:03:59.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:03:59.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:03:59.107 [DEBUG] [Thread-17020] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:04:05.109 [DEBUG] [Thread-17022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:04:20.161 [DEBUG] [Thread-17023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:04:24.404 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:04:24.405 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:04:29.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:04:29.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:04: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-11-12T14:04:29.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 4, 22), 34.54, 9.62, 0.0, 26.5, 27.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:04:29.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:04:22
2025-11-12T14:04:29.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:04:30.058 [DEBUG] [Thread-17024] [transport.py] [_log()] starting thread (client mode): 0x173eae00
2025-11-12T14:04:30.058 [DEBUG] [Thread-17024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:04:30.079 [DEBUG] [Thread-17024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:04:30.079 [INFO] [Thread-17024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] client lang: <none>
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] server lang: <none>
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] kex follows: False
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] Compression: none
2025-11-12T14:04:30.083 [DEBUG] [Thread-17024] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:04:30.099 [DEBUG] [Thread-17024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:04:30.100 [DEBUG] [Thread-17024] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:04:30.100 [DEBUG] [Thread-17024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:04:30.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:04:30.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:04:30.102 [DEBUG] [Thread-17024] [transport.py] [_log()] userauth is OK
2025-11-12T14:04:30.102 [DEBUG] [Thread-17024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:04:30.102 [DEBUG] [Thread-17024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:04:30.102 [DEBUG] [Thread-17024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:04:30.102 [DEBUG] [Thread-17024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:04:30.116 [INFO] [Thread-17024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:04:30.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:04:30.753 [DEBUG] [Thread-17024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:04:30.753 [DEBUG] [Thread-17024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:04:30.753 [DEBUG] [Thread-17024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:04:30.794 [DEBUG] [Thread-17024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:04:30.794 [DEBUG] [Thread-17024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:04:30.797 [DEBUG] [Thread-17024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:04:30.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:04:30.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:04:30.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:04:30.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:04:30.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:04:30.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:04:30.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:04:30.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:04:30.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:04:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.502519 -999.00  +26.40  22.18     15   -1.40 1 1 1 1 1   888    0 24.88 -169.12 ----- 22.2 22.2 273.0 35.2 31.9 -29.5 31.6 -26.5 31.4 -28.6 32.4 -26.5
2025-11-12T14:04:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:04:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:04:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.502519
2025-11-12T14:04:30.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:04:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:04:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:04:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:04:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:04:30.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:04:22', tmtdew=34.54, humidity=9.62, cloud=0.0, wind=26.5, temperature=27.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:03:37.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:04:30.824 [DEBUG] [Thread-17024] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:04:30.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:04:35.199 [DEBUG] [Thread-17027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:04:35.445 [DEBUG] [Thread-17028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:04:50.250 [DEBUG] [Thread-17029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:05:05.282 [DEBUG] [Thread-17030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:05:20.320 [DEBUG] [Thread-17031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:05:24.555 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:05:24.557 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:05:35.358 [DEBUG] [Thread-17032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:05:35.482 [DEBUG] [Thread-17033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:05:50.401 [DEBUG] [Thread-17034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:06:05.433 [DEBUG] [Thread-17035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:06:20.464 [DEBUG] [Thread-17036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:06:24.698 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:06:24.699 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:06:35.499 [DEBUG] [Thread-17037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:06:35.516 [DEBUG] [Thread-17038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:06:42.619 [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-11-12T14:06:50.533 [DEBUG] [Thread-17039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:07:05.569 [DEBUG] [Thread-17040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:07:12.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:07:12.624 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:07:12.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-11-12T14:07:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 7, 2), 34.9, 9.68, 0.0, 27.67, 27.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:07:13.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:07:02
2025-11-12T14:07:13.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:07:13.541 [DEBUG] [Thread-17041] [transport.py] [_log()] starting thread (client mode): 0x149205e0
2025-11-12T14:07:13.542 [DEBUG] [Thread-17041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:07:13.562 [DEBUG] [Thread-17041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:07:13.563 [INFO] [Thread-17041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:07:13.566 [DEBUG] [Thread-17041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] client lang: <none>
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] server lang: <none>
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] kex follows: False
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] Compression: none
2025-11-12T14:07:13.567 [DEBUG] [Thread-17041] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:07:13.585 [DEBUG] [Thread-17041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:07:13.586 [DEBUG] [Thread-17041] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:07:13.586 [DEBUG] [Thread-17041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:07:13.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:07:13.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:07:13.588 [DEBUG] [Thread-17041] [transport.py] [_log()] userauth is OK
2025-11-12T14:07:13.588 [DEBUG] [Thread-17041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:07:13.588 [DEBUG] [Thread-17041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:07:13.588 [DEBUG] [Thread-17041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:07:13.588 [DEBUG] [Thread-17041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:07:13.612 [INFO] [Thread-17041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:07:13.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:07:14.250 [DEBUG] [Thread-17041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:07:14.250 [DEBUG] [Thread-17041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:07:14.250 [DEBUG] [Thread-17041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:07:14.291 [DEBUG] [Thread-17041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:07:14.291 [DEBUG] [Thread-17041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:07:14.294 [DEBUG] [Thread-17041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:07:14.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:07:14.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:07:14.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:07:14.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:07:14.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:07:14.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:07:14.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:07:14.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:07:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:07:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.504602 -999.00  +27.00  20.79     15   -1.40 1 1 1 1 1   888    0 24.20 -197.36 ----- 20.8 20.8 298.6 28.1 32.0 -27.1 31.5 -26.3 31.5 -26.0 32.4 -24.5
2025-11-12T14:07:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:07:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:07:14.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.504602
2025-11-12T14:07:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:07:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:07:14.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:07:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:07:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:07:14.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:07:02', tmtdew=34.9, humidity=9.68, cloud=0.0, wind=27.67, temperature=27.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:06:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:07:14.321 [DEBUG] [Thread-17041] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:07:14.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:07:14.417 [DEBUG] [Thread-17044] [transport.py] [_log()] starting thread (client mode): 0x14963fd0
2025-11-12T14:07:14.417 [DEBUG] [Thread-17044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:07:14.432 [DEBUG] [Thread-17044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:07:14.432 [INFO] [Thread-17044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:07:14.440 [DEBUG] [Thread-17044] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:07:14.440 [DEBUG] [Thread-17044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:07:14.440 [DEBUG] [Thread-17044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] client lang: <none>
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] server lang: <none>
2025-11-12T14:07:14.441 [DEBUG] [Thread-17044] [transport.py] [_log()] kex follows: False
2025-11-12T14:07:14.442 [DEBUG] [Thread-17044] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:07:14.442 [DEBUG] [Thread-17044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:07:14.442 [DEBUG] [Thread-17044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:07:14.442 [DEBUG] [Thread-17044] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:07:14.442 [DEBUG] [Thread-17044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:07:14.442 [DEBUG] [Thread-17044] [transport.py] [_log()] Compression: none
2025-11-12T14:07:14.442 [DEBUG] [Thread-17044] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:07:14.501 [DEBUG] [Thread-17044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:07:14.502 [DEBUG] [Thread-17044] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:07:14.503 [DEBUG] [Thread-17044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:07:14.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:07:14.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:07:14.561 [DEBUG] [Thread-17044] [transport.py] [_log()] userauth is OK
2025-11-12T14:07:14.561 [DEBUG] [Thread-17044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:07:14.561 [DEBUG] [Thread-17044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:07:14.561 [DEBUG] [Thread-17044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:07:14.561 [DEBUG] [Thread-17044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:07:14.580 [INFO] [Thread-17044] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:07:14.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:07:14.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:07:15.396 [DEBUG] [Thread-17044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:07:15.396 [DEBUG] [Thread-17044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:07:15.445 [DEBUG] [Thread-17044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:07:15.445 [DEBUG] [Thread-17044] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:07:15.455 [DEBUG] [Thread-17044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:07:15.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:07:15.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-11-12T14:07:15.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-11-12T14:07:15.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:07:15.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:07:15.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:07:15.492 [DEBUG] [Thread-17044] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:07:20.607 [DEBUG] [Thread-17046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:07:24.839 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:07:24.840 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:07:35.546 [DEBUG] [Thread-17047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:07:35.659 [DEBUG] [Thread-17048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:07:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:07:45.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:07:45.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-11-12T14:07:46.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 7, 34), 34.58, 9.68, 0.0, 35.92, 27.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:07:46.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:07:34
2025-11-12T14:07:46.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:07:46.438 [DEBUG] [Thread-17049] [transport.py] [_log()] starting thread (client mode): 0x19dd8fa0
2025-11-12T14:07:46.438 [DEBUG] [Thread-17049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:07:46.458 [DEBUG] [Thread-17049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:07:46.459 [INFO] [Thread-17049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:07:46.462 [DEBUG] [Thread-17049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:07:46.462 [DEBUG] [Thread-17049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:07:46.462 [DEBUG] [Thread-17049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:07:46.462 [DEBUG] [Thread-17049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:07:46.462 [DEBUG] [Thread-17049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:07:46.462 [DEBUG] [Thread-17049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:07:46.462 [DEBUG] [Thread-17049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:07:46.462 [DEBUG] [Thread-17049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] client lang: <none>
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] server lang: <none>
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] kex follows: False
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] Compression: none
2025-11-12T14:07:46.463 [DEBUG] [Thread-17049] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:07:46.483 [DEBUG] [Thread-17049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:07:46.484 [DEBUG] [Thread-17049] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:07:46.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:07:46.485 [DEBUG] [Thread-17049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:07:46.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:07:46.488 [DEBUG] [Thread-17049] [transport.py] [_log()] userauth is OK
2025-11-12T14:07:46.488 [DEBUG] [Thread-17049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:07:46.488 [DEBUG] [Thread-17049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:07:46.488 [DEBUG] [Thread-17049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:07:46.488 [DEBUG] [Thread-17049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:07:46.516 [INFO] [Thread-17049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:07:46.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:07:47.157 [DEBUG] [Thread-17049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:07:47.157 [DEBUG] [Thread-17049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:07:47.158 [DEBUG] [Thread-17049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:07:47.198 [DEBUG] [Thread-17049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:07:47.199 [DEBUG] [Thread-17049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:07:47.202 [DEBUG] [Thread-17049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:07:47.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:07:47.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:07:47.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:07:47.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:07:47.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:07:47.225 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:07:47.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:07:47.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:07:47.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:07:47.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.504949 -999.00  +27.50  28.43     15   -1.10 1 1 1 1 1   888    0 24.36 -191.74 ----- 28.4 28.4 274.4 39.8 32.0 -27.0 31.6 -25.0 31.8 -25.6 32.6 -27.1
2025-11-12T14:07:47.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:07:47.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:07:47.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.504949
2025-11-12T14:07:47.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:07:47.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:07:47.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:07:47.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:07:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:07:47.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:07:34', tmtdew=34.58, humidity=9.68, cloud=0.0, wind=35.92, temperature=27.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:07:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:07:47.228 [DEBUG] [Thread-17049] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:07:47.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:07:47.324 [DEBUG] [Thread-17052] [transport.py] [_log()] starting thread (client mode): 0x173f80d0
2025-11-12T14:07:47.324 [DEBUG] [Thread-17052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:07:47.338 [DEBUG] [Thread-17052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:07:47.338 [INFO] [Thread-17052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:07:47.346 [DEBUG] [Thread-17052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:07:47.346 [DEBUG] [Thread-17052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] client lang: <none>
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] server lang: <none>
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] kex follows: False
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:07:47.347 [DEBUG] [Thread-17052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:07:47.348 [DEBUG] [Thread-17052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:07:47.348 [DEBUG] [Thread-17052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:07:47.348 [DEBUG] [Thread-17052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:07:47.348 [DEBUG] [Thread-17052] [transport.py] [_log()] Compression: none
2025-11-12T14:07:47.348 [DEBUG] [Thread-17052] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:07:47.405 [DEBUG] [Thread-17052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:07:47.406 [DEBUG] [Thread-17052] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:07:47.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:07:47.407 [DEBUG] [Thread-17052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:07:47.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:07:47.460 [DEBUG] [Thread-17052] [transport.py] [_log()] userauth is OK
2025-11-12T14:07:47.460 [DEBUG] [Thread-17052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:07:47.460 [DEBUG] [Thread-17052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:07:47.460 [DEBUG] [Thread-17052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:07:47.460 [DEBUG] [Thread-17052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:07:47.474 [INFO] [Thread-17052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:07:47.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:07:47.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:07:48.314 [DEBUG] [Thread-17052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:07:48.315 [DEBUG] [Thread-17052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:07:48.362 [DEBUG] [Thread-17052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:07:48.363 [DEBUG] [Thread-17052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:07:48.372 [DEBUG] [Thread-17052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:07:48.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:07:48.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:07:48.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-11-12T14:07:48.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:07:48.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:07:48.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:07:48.409 [DEBUG] [Thread-17052] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:07:50.693 [DEBUG] [Thread-17054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:08:05.752 [DEBUG] [Thread-17055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:08:18.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:08:18.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:08:18.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-11-12T14:08:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 8, 6), 34.31, 9.88, 0.0, 37.6, 27.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:08:19.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:08:06
2025-11-12T14:08:19.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:08:19.355 [DEBUG] [Thread-17056] [transport.py] [_log()] starting thread (client mode): 0x19ddbcd0
2025-11-12T14:08:19.355 [DEBUG] [Thread-17056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:08:19.375 [DEBUG] [Thread-17056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:08:19.376 [INFO] [Thread-17056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:08:19.378 [DEBUG] [Thread-17056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:08:19.378 [DEBUG] [Thread-17056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:08:19.378 [DEBUG] [Thread-17056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] client lang: <none>
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] server lang: <none>
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] kex follows: False
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] Compression: none
2025-11-12T14:08:19.379 [DEBUG] [Thread-17056] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:08:19.401 [DEBUG] [Thread-17056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:08:19.402 [DEBUG] [Thread-17056] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:08:19.402 [DEBUG] [Thread-17056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:08:19.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:08:19.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:08:19.405 [DEBUG] [Thread-17056] [transport.py] [_log()] userauth is OK
2025-11-12T14:08:19.405 [DEBUG] [Thread-17056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:08:19.405 [DEBUG] [Thread-17056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:08:19.405 [DEBUG] [Thread-17056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:08:19.406 [DEBUG] [Thread-17056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:08:19.431 [INFO] [Thread-17056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:08:19.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:08:20.011 [DEBUG] [Thread-17056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:08:20.012 [DEBUG] [Thread-17056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:08:20.012 [DEBUG] [Thread-17056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:08:20.053 [DEBUG] [Thread-17056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:08:20.053 [DEBUG] [Thread-17056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:08:20.057 [DEBUG] [Thread-17056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:08:20.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:08:20.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:08:20.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:08:20.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:08:20.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:08:20.081 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:08:20.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:08:20.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:08:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:08:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.505296 -999.00  +27.20  38.33     15   -1.00 1 1 2 1 1   888    0 23.60 -196.24 ----- 38.3 38.3 276.6 54.1 31.9 -29.4 31.6 -27.6 31.6 -28.4 32.2 -26.4
2025-11-12T14:08:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:08:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:08:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.505296
2025-11-12T14:08:20.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:08:20.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:08:20.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:08:20.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:08:20.083 [DEBUG] [Thread-17056] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:08:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:08:20.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:08:06', tmtdew=34.31, humidity=9.88, cloud=0.0, wind=37.6, temperature=27.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:07:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:08:20.168 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:08:20.181 [DEBUG] [Thread-17059] [transport.py] [_log()] starting thread (client mode): 0x19dd93c0
2025-11-12T14:08:20.181 [DEBUG] [Thread-17059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:08:20.196 [DEBUG] [Thread-17059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:08:20.196 [INFO] [Thread-17059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:08:20.208 [DEBUG] [Thread-17059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:08:20.208 [DEBUG] [Thread-17059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:08:20.208 [DEBUG] [Thread-17059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:08:20.208 [DEBUG] [Thread-17059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:08:20.208 [DEBUG] [Thread-17059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:08:20.208 [DEBUG] [Thread-17059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:08:20.208 [DEBUG] [Thread-17059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] client lang: <none>
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] server lang: <none>
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] kex follows: False
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] Compression: none
2025-11-12T14:08:20.209 [DEBUG] [Thread-17059] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:08:20.272 [DEBUG] [Thread-17059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:08:20.272 [DEBUG] [Thread-17059] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:08:20.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:08:20.273 [DEBUG] [Thread-17059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:08:20.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:08:20.335 [DEBUG] [Thread-17059] [transport.py] [_log()] userauth is OK
2025-11-12T14:08:20.335 [DEBUG] [Thread-17059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:08:20.336 [DEBUG] [Thread-17059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:08:20.336 [DEBUG] [Thread-17059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:08:20.336 [DEBUG] [Thread-17059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:08:20.359 [INFO] [Thread-17059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:08:20.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:08:20.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:08:20.787 [DEBUG] [Thread-17061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:08:21.169 [DEBUG] [Thread-17059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:08:21.170 [DEBUG] [Thread-17059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:08:21.217 [DEBUG] [Thread-17059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:08:21.218 [DEBUG] [Thread-17059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:08:21.227 [DEBUG] [Thread-17059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:08:21.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:08:21.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-11-12T14:08:21.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-11-12T14:08:21.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:08:21.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:08:21.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:08:21.264 [DEBUG] [Thread-17059] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:08:24.982 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:08:24.983 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:08:35.573 [DEBUG] [Thread-17062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:08:35.852 [DEBUG] [Thread-17063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:08:50.886 [DEBUG] [Thread-17064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:08:51.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:08:51.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:08:51.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-11-12T14:08:51.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 8, 38), 34.14, 10.35, 0.0, 34.02, 27.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:08:51.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:08:38
2025-11-12T14:08:52.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:08:52.181 [DEBUG] [Thread-17065] [transport.py] [_log()] starting thread (client mode): 0x19ddb430
2025-11-12T14:08:52.181 [DEBUG] [Thread-17065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:08:52.201 [DEBUG] [Thread-17065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:08:52.201 [INFO] [Thread-17065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:08:52.205 [DEBUG] [Thread-17065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] client lang: <none>
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] server lang: <none>
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] kex follows: False
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] Compression: none
2025-11-12T14:08:52.206 [DEBUG] [Thread-17065] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:08:52.225 [DEBUG] [Thread-17065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:08:52.226 [DEBUG] [Thread-17065] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:08:52.227 [DEBUG] [Thread-17065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:08:52.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:08:52.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:08:52.230 [DEBUG] [Thread-17065] [transport.py] [_log()] userauth is OK
2025-11-12T14:08:52.230 [DEBUG] [Thread-17065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:08:52.230 [DEBUG] [Thread-17065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:08:52.230 [DEBUG] [Thread-17065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:08:52.230 [DEBUG] [Thread-17065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:08:52.251 [INFO] [Thread-17065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:08:52.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:08:52.887 [DEBUG] [Thread-17065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:08:52.888 [DEBUG] [Thread-17065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:08:52.888 [DEBUG] [Thread-17065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:08:52.929 [DEBUG] [Thread-17065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:08:52.929 [DEBUG] [Thread-17065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:08:52.932 [DEBUG] [Thread-17065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:08:52.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:08:52.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:08:52.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:08:52.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:08:52.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:08:52.957 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:08:52.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:08:52.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:08:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:08:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.505644 -999.00  +27.00  37.95     15   -1.00 1 1 2 1 1   888    0 24.14 -191.14 ----- 38.0 38.0 275.2 49.1 31.8 -28.0 31.4 -26.2 31.2 -26.8 32.1 -27.0
2025-11-12T14:08:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:08:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:08:52.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.505644
2025-11-12T14:08:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:08:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:08:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:08:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:08:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:08:52.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:08:38', tmtdew=34.14, humidity=10.35, cloud=0.0, wind=34.02, temperature=27.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:08:07.642', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:08:52.960 [DEBUG] [Thread-17065] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:08:53.044 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:08:53.056 [DEBUG] [Thread-17068] [transport.py] [_log()] starting thread (client mode): 0x173bf640
2025-11-12T14:08:53.056 [DEBUG] [Thread-17068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:08:53.071 [DEBUG] [Thread-17068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:08:53.071 [INFO] [Thread-17068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] client lang: <none>
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] server lang: <none>
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] kex follows: False
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:08:53.079 [DEBUG] [Thread-17068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:08:53.080 [DEBUG] [Thread-17068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:08:53.080 [DEBUG] [Thread-17068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:08:53.080 [DEBUG] [Thread-17068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:08:53.080 [DEBUG] [Thread-17068] [transport.py] [_log()] Compression: none
2025-11-12T14:08:53.080 [DEBUG] [Thread-17068] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:08:53.140 [DEBUG] [Thread-17068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:08:53.141 [DEBUG] [Thread-17068] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:08:53.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:08:53.142 [DEBUG] [Thread-17068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:08:53.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:08:53.197 [DEBUG] [Thread-17068] [transport.py] [_log()] userauth is OK
2025-11-12T14:08:53.197 [DEBUG] [Thread-17068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:08:53.197 [DEBUG] [Thread-17068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:08:53.197 [DEBUG] [Thread-17068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:08:53.197 [DEBUG] [Thread-17068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:08:53.216 [INFO] [Thread-17068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:08:53.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:08:53.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:08:54.057 [DEBUG] [Thread-17068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:08:54.057 [DEBUG] [Thread-17068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:08:54.106 [DEBUG] [Thread-17068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:08:54.106 [DEBUG] [Thread-17068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:08:54.115 [DEBUG] [Thread-17068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:08:54.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:08:54.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-11-12T14:08:54.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-11-12T14:08:54.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:08:54.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:08:54.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:08:54.152 [DEBUG] [Thread-17068] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:09:05.925 [DEBUG] [Thread-17070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:09:20.974 [DEBUG] [Thread-17071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:09:24.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:09:24.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:09:24.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-11-12T14:09:24.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 9, 10), 34.29, 10.26, 0.0, 33.82, 27.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:09:24.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:09:10
2025-11-12T14:09:24.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:09:25.034 [DEBUG] [Thread-17072] [transport.py] [_log()] starting thread (client mode): 0x173ea920
2025-11-12T14:09:25.035 [DEBUG] [Thread-17072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:09:25.053 [DEBUG] [Thread-17072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:09:25.053 [INFO] [Thread-17072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:09:25.056 [DEBUG] [Thread-17072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] client lang: <none>
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] server lang: <none>
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] kex follows: False
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:09:25.057 [DEBUG] [Thread-17072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:09:25.058 [DEBUG] [Thread-17072] [transport.py] [_log()] Compression: none
2025-11-12T14:09:25.058 [DEBUG] [Thread-17072] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:09:25.076 [DEBUG] [Thread-17072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:09:25.077 [DEBUG] [Thread-17072] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:09:25.078 [DEBUG] [Thread-17072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:09:25.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:09:25.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:09:25.080 [DEBUG] [Thread-17072] [transport.py] [_log()] userauth is OK
2025-11-12T14:09:25.080 [DEBUG] [Thread-17072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:09:25.081 [DEBUG] [Thread-17072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:09:25.081 [DEBUG] [Thread-17072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:09:25.081 [DEBUG] [Thread-17072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:09:25.105 [INFO] [Thread-17072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:09:25.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:09:25.125 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:09:25.126 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:09:25.734 [DEBUG] [Thread-17072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:09:25.735 [DEBUG] [Thread-17072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:09:25.735 [DEBUG] [Thread-17072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:09:25.776 [DEBUG] [Thread-17072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:09:25.776 [DEBUG] [Thread-17072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:09:25.779 [DEBUG] [Thread-17072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:09:25.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:09:25.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:09:25.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:09:25.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:09:25.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:09:25.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:09:25.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:09:25.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:09:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:09:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.505991 -999.00  +26.40  37.50     16   -1.20 1 1 2 1 1   888    0 23.96 -194.36 ----- 37.5 37.5 276.2 45.8 31.5 -29.8 31.4 -27.2 31.0 -30.5 31.8 -29.8
2025-11-12T14:09:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:09:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:09:25.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.505991
2025-11-12T14:09:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:09:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:09:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:09:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:09:25.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:09:25.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:09:10', tmtdew=34.29, humidity=10.26, cloud=0.0, wind=33.82, temperature=27.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:08:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:09:25.798 [DEBUG] [Thread-17072] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:09:25.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:09:25.899 [DEBUG] [Thread-17075] [transport.py] [_log()] starting thread (client mode): 0x14963fd0
2025-11-12T14:09:25.899 [DEBUG] [Thread-17075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:09:25.914 [DEBUG] [Thread-17075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:09:25.915 [INFO] [Thread-17075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:09:25.922 [DEBUG] [Thread-17075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:09:25.923 [DEBUG] [Thread-17075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:09:25.923 [DEBUG] [Thread-17075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:09:25.923 [DEBUG] [Thread-17075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:09:25.923 [DEBUG] [Thread-17075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:09:25.923 [DEBUG] [Thread-17075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:09:25.923 [DEBUG] [Thread-17075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:09:25.923 [DEBUG] [Thread-17075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:09:25.923 [DEBUG] [Thread-17075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:09:25.924 [DEBUG] [Thread-17075] [transport.py] [_log()] client lang: <none>
2025-11-12T14:09:25.924 [DEBUG] [Thread-17075] [transport.py] [_log()] server lang: <none>
2025-11-12T14:09:25.924 [DEBUG] [Thread-17075] [transport.py] [_log()] kex follows: False
2025-11-12T14:09:25.924 [DEBUG] [Thread-17075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:09:25.924 [DEBUG] [Thread-17075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:09:25.924 [DEBUG] [Thread-17075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:09:25.924 [DEBUG] [Thread-17075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:09:25.924 [DEBUG] [Thread-17075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:09:25.925 [DEBUG] [Thread-17075] [transport.py] [_log()] Compression: none
2025-11-12T14:09:25.925 [DEBUG] [Thread-17075] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:09:25.981 [DEBUG] [Thread-17075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:09:25.982 [DEBUG] [Thread-17075] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:09:25.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:09:25.983 [DEBUG] [Thread-17075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:09:25.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:09:26.048 [DEBUG] [Thread-17075] [transport.py] [_log()] userauth is OK
2025-11-12T14:09:26.048 [DEBUG] [Thread-17075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:09:26.048 [DEBUG] [Thread-17075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:09:26.048 [DEBUG] [Thread-17075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:09:26.048 [DEBUG] [Thread-17075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:09:26.069 [INFO] [Thread-17075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:09:26.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:09:26.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:09:26.954 [DEBUG] [Thread-17075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:09:26.955 [DEBUG] [Thread-17075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:09:27.003 [DEBUG] [Thread-17075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:09:27.003 [DEBUG] [Thread-17075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:09:27.012 [DEBUG] [Thread-17075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:09:27.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:09:27.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-11-12T14:09:27.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-11-12T14:09:27.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:09:27.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:09:27.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:09:27.049 [DEBUG] [Thread-17075] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:09:35.607 [DEBUG] [Thread-17077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:09:36.005 [DEBUG] [Thread-17078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:09:51.055 [DEBUG] [Thread-17079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:09:57.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:09:57.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:09:57.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-11-12T14:09:57.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 9, 42), 34.02, 10.28, 0.0, 32.94, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:09:57.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:09:42
2025-11-12T14:09:57.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:09:58.021 [DEBUG] [Thread-17080] [transport.py] [_log()] starting thread (client mode): 0x173f8100
2025-11-12T14:09:58.021 [DEBUG] [Thread-17080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:09:58.037 [DEBUG] [Thread-17080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:09:58.037 [INFO] [Thread-17080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] client lang: <none>
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] server lang: <none>
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] kex follows: False
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] Compression: none
2025-11-12T14:09:58.041 [DEBUG] [Thread-17080] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:09:58.056 [DEBUG] [Thread-17080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:09:58.056 [DEBUG] [Thread-17080] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:09:58.056 [DEBUG] [Thread-17080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:09:58.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:09:58.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:09:58.057 [DEBUG] [Thread-17080] [transport.py] [_log()] userauth is OK
2025-11-12T14:09:58.057 [DEBUG] [Thread-17080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:09:58.057 [DEBUG] [Thread-17080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:09:58.057 [DEBUG] [Thread-17080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:09:58.057 [DEBUG] [Thread-17080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:09:58.067 [INFO] [Thread-17080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:09:58.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:09:58.718 [DEBUG] [Thread-17080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:09:58.718 [DEBUG] [Thread-17080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:09:58.718 [DEBUG] [Thread-17080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:09:58.759 [DEBUG] [Thread-17080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:09:58.759 [DEBUG] [Thread-17080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:09:58.760 [DEBUG] [Thread-17080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:09:58.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:09:58.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:09:58.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:09:58.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:09:58.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:09:58.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:09:58.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:09:58.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.506338 -999.00  +26.20  40.10     16   -1.20 1 1 2 1 1   888    0 24.20 -197.22 ----- 40.1 40.1 268.0 46.6 31.2 -31.0 31.1 -27.3 30.6 -31.8 31.7 -28.1
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.506338
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:09:58.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:09:42', tmtdew=34.02, humidity=10.28, cloud=0.0, wind=32.94, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:09:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:09:58.778 [DEBUG] [Thread-17080] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:09:58.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:09:58.866 [DEBUG] [Thread-17083] [transport.py] [_log()] starting thread (client mode): 0x173e9450
2025-11-12T14:09:58.866 [DEBUG] [Thread-17083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:09:58.880 [DEBUG] [Thread-17083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:09:58.881 [INFO] [Thread-17083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] client lang: <none>
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] server lang: <none>
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] kex follows: False
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:09:58.888 [DEBUG] [Thread-17083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:09:58.889 [DEBUG] [Thread-17083] [transport.py] [_log()] Compression: none
2025-11-12T14:09:58.889 [DEBUG] [Thread-17083] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:09:58.943 [DEBUG] [Thread-17083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:09:58.943 [DEBUG] [Thread-17083] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:09:58.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:09:58.943 [DEBUG] [Thread-17083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:09:58.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:09:59.000 [DEBUG] [Thread-17083] [transport.py] [_log()] userauth is OK
2025-11-12T14:09:59.000 [DEBUG] [Thread-17083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:09:59.000 [DEBUG] [Thread-17083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:09:59.000 [DEBUG] [Thread-17083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:09:59.001 [DEBUG] [Thread-17083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:09:59.016 [INFO] [Thread-17083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:09: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-11-12T14:09:59.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:09:59.869 [DEBUG] [Thread-17083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:09:59.869 [DEBUG] [Thread-17083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:09:59.917 [DEBUG] [Thread-17083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:09:59.917 [DEBUG] [Thread-17083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:09:59.925 [DEBUG] [Thread-17083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:09:59.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:09:59.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-11-12T14:09:59.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-11-12T14:09:59.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:09:59.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:09:59.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:09:59.958 [DEBUG] [Thread-17083] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:10:06.093 [DEBUG] [Thread-17085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:10:21.140 [DEBUG] [Thread-17086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:10:25.266 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:10:25.267 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:10:29.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:10:29.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:10:29.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-11-12T14:10:30.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 10, 14), 34.05, 10.28, 0.0, 30.97, 27.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:10:30.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:10:14
2025-11-12T14:10:30.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:10:30.900 [DEBUG] [Thread-17087] [transport.py] [_log()] starting thread (client mode): 0x173e80a0
2025-11-12T14:10:30.900 [DEBUG] [Thread-17087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:10:30.920 [DEBUG] [Thread-17087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:10:30.920 [INFO] [Thread-17087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:10:30.921 [DEBUG] [Thread-17087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:10:30.921 [DEBUG] [Thread-17087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:10:30.921 [DEBUG] [Thread-17087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:10:30.921 [DEBUG] [Thread-17087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:10:30.921 [DEBUG] [Thread-17087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] client lang: <none>
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] server lang: <none>
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] kex follows: False
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] Compression: none
2025-11-12T14:10:30.922 [DEBUG] [Thread-17087] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:10:30.931 [DEBUG] [Thread-17087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:10:30.932 [DEBUG] [Thread-17087] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:10:30.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:10:30.933 [DEBUG] [Thread-17087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:10:30.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:10:30.934 [DEBUG] [Thread-17087] [transport.py] [_log()] userauth is OK
2025-11-12T14:10:30.934 [DEBUG] [Thread-17087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:10:30.934 [DEBUG] [Thread-17087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:10:30.934 [DEBUG] [Thread-17087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:10:30.934 [DEBUG] [Thread-17087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:10:30.948 [INFO] [Thread-17087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:10:30.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:10:31.580 [DEBUG] [Thread-17087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:10:31.580 [DEBUG] [Thread-17087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:10:31.581 [DEBUG] [Thread-17087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:10:31.621 [DEBUG] [Thread-17087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:10:31.621 [DEBUG] [Thread-17087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:10:31.625 [DEBUG] [Thread-17087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:10:31.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:10:31.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:10:31.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:10:31.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:10:31.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:10:31.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:10:31.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:10:31.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:10:31.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:10:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.506685 -999.00  +26.20  26.87     16   -1.00 1 1 1 1 1   888    0 23.14 -201.67 ----- 26.9 26.9 266.4 33.7 31.3 -29.7 31.1 -26.3 30.6 -30.8 31.7 -26.6
2025-11-12T14:10:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:10:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:10:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.506685
2025-11-12T14:10:31.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:10:31.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:10:31.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:10:31.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:10:31.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:10:31.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:10:14', tmtdew=34.05, humidity=10.28, cloud=0.0, wind=30.97, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:09:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:10:31.652 [DEBUG] [Thread-17087] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:10:31.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:10:31.746 [DEBUG] [Thread-17090] [transport.py] [_log()] starting thread (client mode): 0x1493d180
2025-11-12T14:10:31.747 [DEBUG] [Thread-17090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:10:31.761 [DEBUG] [Thread-17090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:10:31.761 [INFO] [Thread-17090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] client lang: <none>
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] server lang: <none>
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] kex follows: False
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] Compression: none
2025-11-12T14:10:31.768 [DEBUG] [Thread-17090] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:10:31.825 [DEBUG] [Thread-17090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:10:31.825 [DEBUG] [Thread-17090] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:10:31.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:10:31.826 [DEBUG] [Thread-17090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:10:31.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:10:31.881 [DEBUG] [Thread-17090] [transport.py] [_log()] userauth is OK
2025-11-12T14:10:31.881 [DEBUG] [Thread-17090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:10:31.881 [DEBUG] [Thread-17090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:10:31.881 [DEBUG] [Thread-17090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:10:31.882 [DEBUG] [Thread-17090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:10:31.901 [INFO] [Thread-17090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:10:31.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:10:31.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:10:32.755 [DEBUG] [Thread-17090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:10:32.755 [DEBUG] [Thread-17090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:10:32.803 [DEBUG] [Thread-17090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:10:32.803 [DEBUG] [Thread-17090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:10:32.812 [DEBUG] [Thread-17090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:10:32.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:10:32.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:10: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') -> 00000000
2025-11-12T14:10:32.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:10:32.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:10:32.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:10:32.849 [DEBUG] [Thread-17090] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:10:35.635 [DEBUG] [Thread-17092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:10:36.174 [DEBUG] [Thread-17093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:10:51.219 [DEBUG] [Thread-17094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:11:02.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:11:02.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:11:02.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-11-12T14:11:03.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 10, 46), 33.7, 10.75, 0.0, 27.45, 27.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:11:03.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:10:46
2025-11-12T14:11:03.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:11:03.784 [DEBUG] [Thread-17095] [transport.py] [_log()] starting thread (client mode): 0x17398fd0
2025-11-12T14:11:03.784 [DEBUG] [Thread-17095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:11:03.805 [DEBUG] [Thread-17095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:11:03.805 [INFO] [Thread-17095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] client lang: <none>
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] server lang: <none>
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] kex follows: False
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] Compression: none
2025-11-12T14:11:03.808 [DEBUG] [Thread-17095] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:11:03.825 [DEBUG] [Thread-17095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:11:03.825 [DEBUG] [Thread-17095] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:11:03.826 [DEBUG] [Thread-17095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:11:03.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:11:03.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:11:03.828 [DEBUG] [Thread-17095] [transport.py] [_log()] userauth is OK
2025-11-12T14:11:03.828 [DEBUG] [Thread-17095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:11:03.828 [DEBUG] [Thread-17095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:11:03.828 [DEBUG] [Thread-17095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:11:03.828 [DEBUG] [Thread-17095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:11:03.865 [INFO] [Thread-17095] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:11:03.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:11:04.499 [DEBUG] [Thread-17095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:11:04.499 [DEBUG] [Thread-17095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:11:04.500 [DEBUG] [Thread-17095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:11:04.541 [DEBUG] [Thread-17095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:11:04.541 [DEBUG] [Thread-17095] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:11:04.544 [DEBUG] [Thread-17095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:11:04.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:11:04.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:11:04.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:11:04.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:11:04.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:11:04.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:11:04.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:11:04.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:11:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:11:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.507380 -999.00  +26.60  22.95     16   -1.00 1 1 1 1 1   888    0 23.00 -212.58 ----- 22.9 22.9 277.6 33.0 31.5 -27.7 31.2 -25.2 31.2 -28.0 31.9 -25.6
2025-11-12T14:11:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:11:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:11:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.507380
2025-11-12T14:11:04.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:11:04.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:11:04.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:11:04.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:11:04.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:11:04.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:10:46', tmtdew=33.7, humidity=10.75, cloud=0.0, wind=27.45, temperature=27.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:10:37.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:11:04.571 [DEBUG] [Thread-17095] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:11:04.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:11:04.665 [DEBUG] [Thread-17098] [transport.py] [_log()] starting thread (client mode): 0x1739a200
2025-11-12T14:11:04.665 [DEBUG] [Thread-17098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:11:04.679 [DEBUG] [Thread-17098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:11:04.679 [INFO] [Thread-17098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:11:04.687 [DEBUG] [Thread-17098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:11:04.687 [DEBUG] [Thread-17098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:11:04.687 [DEBUG] [Thread-17098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] client lang: <none>
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] server lang: <none>
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] kex follows: False
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:11:04.688 [DEBUG] [Thread-17098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:11:04.689 [DEBUG] [Thread-17098] [transport.py] [_log()] Compression: none
2025-11-12T14:11:04.689 [DEBUG] [Thread-17098] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:11:04.745 [DEBUG] [Thread-17098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:11:04.746 [DEBUG] [Thread-17098] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:11:04.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:11:04.747 [DEBUG] [Thread-17098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:11:04.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:11:04.800 [DEBUG] [Thread-17098] [transport.py] [_log()] userauth is OK
2025-11-12T14:11:04.800 [DEBUG] [Thread-17098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:11:04.800 [DEBUG] [Thread-17098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:11:04.800 [DEBUG] [Thread-17098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:11:04.800 [DEBUG] [Thread-17098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:11:04.815 [INFO] [Thread-17098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:11:04.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:11:04.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:11:05.662 [DEBUG] [Thread-17098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:11:05.662 [DEBUG] [Thread-17098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:11:05.711 [DEBUG] [Thread-17098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:11:05.711 [DEBUG] [Thread-17098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:11:05.720 [DEBUG] [Thread-17098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:11:05.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:11:05.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-11-12T14:11:05.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:11:05.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:11:05.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:11:05.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:11:05.757 [DEBUG] [Thread-17098] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:11:06.259 [DEBUG] [Thread-17100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:11:21.311 [DEBUG] [Thread-17101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:11:25.409 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:11:25.410 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:11:35.669 [DEBUG] [Thread-17102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:11:35.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:11:35.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:11:35.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-11-12T14:11:36.346 [DEBUG] [Thread-17103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:11:36.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 11, 18), 33.64, 10.78, 0.0, 27.45, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:11:36.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:11:18
2025-11-12T14:11:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:11:36.683 [DEBUG] [Thread-17104] [transport.py] [_log()] starting thread (client mode): 0x173eab30
2025-11-12T14:11:36.683 [DEBUG] [Thread-17104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:11:36.710 [DEBUG] [Thread-17104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:11:36.710 [INFO] [Thread-17104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:11:36.712 [DEBUG] [Thread-17104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] client lang: <none>
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] server lang: <none>
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] kex follows: False
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] Compression: none
2025-11-12T14:11:36.713 [DEBUG] [Thread-17104] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:11:36.727 [DEBUG] [Thread-17104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:11:36.727 [DEBUG] [Thread-17104] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:11:36.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:11:36.728 [DEBUG] [Thread-17104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:11:36.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:11:36.731 [DEBUG] [Thread-17104] [transport.py] [_log()] userauth is OK
2025-11-12T14:11:36.731 [DEBUG] [Thread-17104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:11:36.731 [DEBUG] [Thread-17104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:11:36.731 [DEBUG] [Thread-17104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:11:36.731 [DEBUG] [Thread-17104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:11:36.755 [INFO] [Thread-17104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:11:36.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:11:37.372 [DEBUG] [Thread-17104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:11:37.373 [DEBUG] [Thread-17104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:11:37.373 [DEBUG] [Thread-17104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:11:37.414 [DEBUG] [Thread-17104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:11:37.414 [DEBUG] [Thread-17104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:11:37.417 [DEBUG] [Thread-17104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:11:37.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:11:37.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:11:37.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:11:37.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:11:37.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:11:37.440 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:11:37.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:11:37.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:11:37.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:11:37.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.507727 -999.00  +26.90  22.77     16   -0.90 1 1 1 1 1   888    0 22.76 -209.05 ----- 22.8 22.8 278.0 30.2 31.5 -27.1 31.1 -25.1 31.1 -25.3 32.0 -25.3
2025-11-12T14:11:37.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:11:37.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:11:37.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.507727
2025-11-12T14:11:37.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:11:37.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:11:37.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:11:37.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:11:37.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:11:37.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:11:18', tmtdew=33.64, humidity=10.78, cloud=0.0, wind=27.45, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:11:07.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:11:37.443 [DEBUG] [Thread-17104] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:11:37.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:11:37.539 [DEBUG] [Thread-17107] [transport.py] [_log()] starting thread (client mode): 0x17346f20
2025-11-12T14:11:37.539 [DEBUG] [Thread-17107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:11:37.554 [DEBUG] [Thread-17107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:11:37.554 [INFO] [Thread-17107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:11:37.562 [DEBUG] [Thread-17107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:11:37.562 [DEBUG] [Thread-17107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:11:37.562 [DEBUG] [Thread-17107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:11:37.563 [DEBUG] [Thread-17107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:11:37.563 [DEBUG] [Thread-17107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:11:37.563 [DEBUG] [Thread-17107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:11:37.563 [DEBUG] [Thread-17107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:11:37.563 [DEBUG] [Thread-17107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:11:37.563 [DEBUG] [Thread-17107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:11:37.563 [DEBUG] [Thread-17107] [transport.py] [_log()] client lang: <none>
2025-11-12T14:11:37.563 [DEBUG] [Thread-17107] [transport.py] [_log()] server lang: <none>
2025-11-12T14:11:37.564 [DEBUG] [Thread-17107] [transport.py] [_log()] kex follows: False
2025-11-12T14:11:37.564 [DEBUG] [Thread-17107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:11:37.564 [DEBUG] [Thread-17107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:11:37.564 [DEBUG] [Thread-17107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:11:37.564 [DEBUG] [Thread-17107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:11:37.564 [DEBUG] [Thread-17107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:11:37.564 [DEBUG] [Thread-17107] [transport.py] [_log()] Compression: none
2025-11-12T14:11:37.565 [DEBUG] [Thread-17107] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:11:37.621 [DEBUG] [Thread-17107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:11:37.622 [DEBUG] [Thread-17107] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:11:37.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:11:37.623 [DEBUG] [Thread-17107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:11:37.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:11:37.685 [DEBUG] [Thread-17107] [transport.py] [_log()] userauth is OK
2025-11-12T14:11:37.686 [DEBUG] [Thread-17107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:11:37.686 [DEBUG] [Thread-17107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:11:37.686 [DEBUG] [Thread-17107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:11:37.686 [DEBUG] [Thread-17107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:11:37.704 [INFO] [Thread-17107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:11:37.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:11:37.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:11:38.532 [DEBUG] [Thread-17107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:11:38.532 [DEBUG] [Thread-17107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:11:38.581 [DEBUG] [Thread-17107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:11:38.581 [DEBUG] [Thread-17107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:11:38.591 [DEBUG] [Thread-17107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:11:38.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:11:38.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-11-12T14:11:38.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-11-12T14:11:38.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:11:38.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:11:38.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:11:38.628 [DEBUG] [Thread-17107] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:11:51.378 [DEBUG] [Thread-17109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:12:06.419 [DEBUG] [Thread-17110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:12:08.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:12:08.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:12:08.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-11-12T14:12:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 11, 50), 33.63, 10.51, 0.0, 27.33, 27.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:12:09.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:11:50
2025-11-12T14:12:09.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:12:09.543 [DEBUG] [Thread-17111] [transport.py] [_log()] starting thread (client mode): 0x173e8580
2025-11-12T14:12:09.543 [DEBUG] [Thread-17111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:12:09.563 [DEBUG] [Thread-17111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:12:09.563 [INFO] [Thread-17111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:12:09.566 [DEBUG] [Thread-17111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:12:09.566 [DEBUG] [Thread-17111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:12:09.566 [DEBUG] [Thread-17111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:12:09.566 [DEBUG] [Thread-17111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:12:09.566 [DEBUG] [Thread-17111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:12:09.566 [DEBUG] [Thread-17111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:12:09.566 [DEBUG] [Thread-17111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] client lang: <none>
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] server lang: <none>
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] kex follows: False
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] Compression: none
2025-11-12T14:12:09.567 [DEBUG] [Thread-17111] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:12:09.586 [DEBUG] [Thread-17111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:12:09.587 [DEBUG] [Thread-17111] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:12:09.587 [DEBUG] [Thread-17111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:12:09.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:12:09.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:12:09.590 [DEBUG] [Thread-17111] [transport.py] [_log()] userauth is OK
2025-11-12T14:12:09.590 [DEBUG] [Thread-17111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:12:09.590 [DEBUG] [Thread-17111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:12:09.590 [DEBUG] [Thread-17111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:12:09.590 [DEBUG] [Thread-17111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:12:09.609 [INFO] [Thread-17111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:12:09.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:12:10.225 [DEBUG] [Thread-17111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:12:10.226 [DEBUG] [Thread-17111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:12:10.226 [DEBUG] [Thread-17111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:12:10.267 [DEBUG] [Thread-17111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:12:10.267 [DEBUG] [Thread-17111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:12:10.270 [DEBUG] [Thread-17111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:12:10.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:12:10.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:12:10.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:12:10.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:12:10.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:12:10.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:12:10.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:12:10.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:12:10.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:12:10.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.508074 -999.00  +27.40  14.97     16   -0.50 1 1 1 1 1   888    0 22.62 -221.72 ----- 15.0 15.0 289.8 26.8 31.5 -27.3 31.2 -25.0 30.9 -25.3 32.3 -24.3
2025-11-12T14:12:10.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:12:10.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:12:10.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.508074
2025-11-12T14:12:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:12:10.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:12:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:12:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:12:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:12:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:11:50', tmtdew=33.63, humidity=10.51, cloud=0.0, wind=27.33, temperature=27.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:11:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:12:10.298 [DEBUG] [Thread-17111] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:12: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-11-12T14:12:10.395 [DEBUG] [Thread-17114] [transport.py] [_log()] starting thread (client mode): 0x173ea950
2025-11-12T14:12:10.395 [DEBUG] [Thread-17114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:12:10.410 [DEBUG] [Thread-17114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:12:10.410 [INFO] [Thread-17114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] client lang: <none>
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] server lang: <none>
2025-11-12T14:12:10.419 [DEBUG] [Thread-17114] [transport.py] [_log()] kex follows: False
2025-11-12T14:12:10.420 [DEBUG] [Thread-17114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:12:10.420 [DEBUG] [Thread-17114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:12:10.420 [DEBUG] [Thread-17114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:12:10.420 [DEBUG] [Thread-17114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:12:10.420 [DEBUG] [Thread-17114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:12:10.420 [DEBUG] [Thread-17114] [transport.py] [_log()] Compression: none
2025-11-12T14:12:10.420 [DEBUG] [Thread-17114] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:12:10.481 [DEBUG] [Thread-17114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:12:10.482 [DEBUG] [Thread-17114] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:12:10.482 [DEBUG] [Thread-17114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:12:10.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:12:10.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:12:10.538 [DEBUG] [Thread-17114] [transport.py] [_log()] userauth is OK
2025-11-12T14:12:10.538 [DEBUG] [Thread-17114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:12:10.538 [DEBUG] [Thread-17114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:12:10.538 [DEBUG] [Thread-17114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:12:10.538 [DEBUG] [Thread-17114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:12:10.558 [INFO] [Thread-17114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:12:10.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:12:10.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:12:11.390 [DEBUG] [Thread-17114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:12:11.390 [DEBUG] [Thread-17114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:12:11.438 [DEBUG] [Thread-17114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:12:11.438 [DEBUG] [Thread-17114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:12:11.448 [DEBUG] [Thread-17114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:12:11.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:12:11.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-11-12T14:12:11.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-11-12T14:12:11.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:12:11.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:12:11.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:12:11.485 [DEBUG] [Thread-17114] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:12:21.457 [DEBUG] [Thread-17116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:12:25.551 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:12:25.552 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:12:35.714 [DEBUG] [Thread-17117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:12:36.505 [DEBUG] [Thread-17118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:12:41.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:12:41.507 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:12:41.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:12:42.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 12, 22), 33.88, 10.35, 0.0, 24.63, 27.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:12:42.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:12:22
2025-11-12T14:12:42.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:12:42.412 [DEBUG] [Thread-17119] [transport.py] [_log()] starting thread (client mode): 0x1493e9b0
2025-11-12T14:12:42.412 [DEBUG] [Thread-17119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:12:42.431 [DEBUG] [Thread-17119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:12:42.432 [INFO] [Thread-17119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:12:42.434 [DEBUG] [Thread-17119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] client lang: <none>
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] server lang: <none>
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] kex follows: False
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] Compression: none
2025-11-12T14:12:42.435 [DEBUG] [Thread-17119] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:12:42.454 [DEBUG] [Thread-17119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:12:42.454 [DEBUG] [Thread-17119] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:12:42.455 [DEBUG] [Thread-17119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:12:42.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:12:42.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:12:42.457 [DEBUG] [Thread-17119] [transport.py] [_log()] userauth is OK
2025-11-12T14:12:42.457 [DEBUG] [Thread-17119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:12:42.457 [DEBUG] [Thread-17119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:12:42.457 [DEBUG] [Thread-17119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:12:42.457 [DEBUG] [Thread-17119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:12:42.493 [INFO] [Thread-17119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:12:42.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:12:43.112 [DEBUG] [Thread-17119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:12:43.112 [DEBUG] [Thread-17119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:12:43.113 [DEBUG] [Thread-17119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:12:43.153 [DEBUG] [Thread-17119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:12:43.154 [DEBUG] [Thread-17119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:12:43.157 [DEBUG] [Thread-17119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:12:43.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:12:43.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:12:43.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:12:43.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:12:43.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:12:43.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:12:43.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:12:43.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:12:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:12:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.508421 -999.00  +27.20  26.01     15   -1.30 1 1 1 1 1   888    0 21.79 -249.18 ----- 26.0 26.0 268.2 48.6 31.8 -27.2 31.4 -24.8 31.6 -24.1 32.1 -25.6
2025-11-12T14:12:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:12:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:12:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.508421
2025-11-12T14:12:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:12:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:12:43.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:12:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:12:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:12:43.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:12:22', tmtdew=33.88, humidity=10.35, cloud=0.0, wind=24.63, temperature=27.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:12:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:12:43.183 [DEBUG] [Thread-17119] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:12:43.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:12:43.279 [DEBUG] [Thread-17122] [transport.py] [_log()] starting thread (client mode): 0x1493d1e0
2025-11-12T14:12:43.280 [DEBUG] [Thread-17122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:12:43.298 [DEBUG] [Thread-17122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:12:43.298 [INFO] [Thread-17122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] client lang: <none>
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] server lang: <none>
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] kex follows: False
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:12:43.306 [DEBUG] [Thread-17122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:12:43.307 [DEBUG] [Thread-17122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:12:43.307 [DEBUG] [Thread-17122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:12:43.307 [DEBUG] [Thread-17122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:12:43.307 [DEBUG] [Thread-17122] [transport.py] [_log()] Compression: none
2025-11-12T14:12:43.307 [DEBUG] [Thread-17122] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:12:43.365 [DEBUG] [Thread-17122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:12:43.365 [DEBUG] [Thread-17122] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:12:43.366 [DEBUG] [Thread-17122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:12:43.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:12:43.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:12:43.421 [DEBUG] [Thread-17122] [transport.py] [_log()] userauth is OK
2025-11-12T14:12:43.421 [DEBUG] [Thread-17122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:12:43.421 [DEBUG] [Thread-17122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:12:43.421 [DEBUG] [Thread-17122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:12:43.421 [DEBUG] [Thread-17122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:12:43.444 [INFO] [Thread-17122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:12:43.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:12:43.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:12:44.313 [DEBUG] [Thread-17122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:12:44.313 [DEBUG] [Thread-17122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:12:44.361 [DEBUG] [Thread-17122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:12:44.361 [DEBUG] [Thread-17122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:12:44.370 [DEBUG] [Thread-17122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:12:44.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:12:44.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-11-12T14:12:44.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-11-12T14:12:44.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:12:44.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:12:44.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:12:44.405 [DEBUG] [Thread-17122] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:12:51.542 [DEBUG] [Thread-17124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:13:06.602 [DEBUG] [Thread-17125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:13:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:13:14.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:13:14.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-11-12T14:13:15.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 12, 54), 34.58, 9.93, 0.0, 29.93, 27.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:13:15.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:12:54
2025-11-12T14:13:15.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:13:15.331 [DEBUG] [Thread-17126] [transport.py] [_log()] starting thread (client mode): 0x17399e70
2025-11-12T14:13:15.331 [DEBUG] [Thread-17126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:13:15.350 [DEBUG] [Thread-17126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:13:15.350 [INFO] [Thread-17126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] client lang: <none>
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] server lang: <none>
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] kex follows: False
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] Compression: none
2025-11-12T14:13:15.354 [DEBUG] [Thread-17126] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:13:15.371 [DEBUG] [Thread-17126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:13:15.372 [DEBUG] [Thread-17126] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:13:15.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:13:15.372 [DEBUG] [Thread-17126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:13:15.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:13:15.375 [DEBUG] [Thread-17126] [transport.py] [_log()] userauth is OK
2025-11-12T14:13:15.375 [DEBUG] [Thread-17126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:13:15.375 [DEBUG] [Thread-17126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:13:15.375 [DEBUG] [Thread-17126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:13:15.375 [DEBUG] [Thread-17126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:13:15.402 [INFO] [Thread-17126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:13:15.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:13:16.039 [DEBUG] [Thread-17126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:13:16.039 [DEBUG] [Thread-17126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:13:16.040 [DEBUG] [Thread-17126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:13:16.081 [DEBUG] [Thread-17126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:13:16.081 [DEBUG] [Thread-17126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:13:16.084 [DEBUG] [Thread-17126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:13:16.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:13:16.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:13:16.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:13:16.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:13:16.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:13:16.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:13:16.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:13:16.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:13:16.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:13:16.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.508768 -999.00  +27.10  31.75     15   -1.40 1 1 2 1 1   888    0 21.99 -246.83 ----- 31.8 31.8 267.0 39.7 31.7 -26.7 31.3 -25.3 31.4 -24.7 32.1 -25.6
2025-11-12T14:13:16.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:13:16.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:13:16.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.508768
2025-11-12T14:13:16.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:13:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:13:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:13:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:13:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:13:16.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:12:54', tmtdew=34.58, humidity=9.93, cloud=0.0, wind=29.93, temperature=27.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:12:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:13:16.111 [DEBUG] [Thread-17126] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:13:16.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:13:16.210 [DEBUG] [Thread-17129] [transport.py] [_log()] starting thread (client mode): 0x149a9060
2025-11-12T14:13:16.210 [DEBUG] [Thread-17129] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:13:16.230 [DEBUG] [Thread-17129] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:13:16.230 [INFO] [Thread-17129] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:13:16.237 [DEBUG] [Thread-17129] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] client lang: <none>
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] server lang: <none>
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] kex follows: False
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:13:16.238 [DEBUG] [Thread-17129] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:13:16.239 [DEBUG] [Thread-17129] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:13:16.239 [DEBUG] [Thread-17129] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:13:16.239 [DEBUG] [Thread-17129] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:13:16.239 [DEBUG] [Thread-17129] [transport.py] [_log()] Compression: none
2025-11-12T14:13:16.239 [DEBUG] [Thread-17129] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:13:16.299 [DEBUG] [Thread-17129] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:13:16.300 [DEBUG] [Thread-17129] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:13:16.300 [DEBUG] [Thread-17129] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:13:16.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:13:16.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:13:16.357 [DEBUG] [Thread-17129] [transport.py] [_log()] userauth is OK
2025-11-12T14:13:16.358 [DEBUG] [Thread-17129] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:13:16.358 [DEBUG] [Thread-17129] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:13:16.358 [DEBUG] [Thread-17129] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:13:16.358 [DEBUG] [Thread-17129] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:13:16.376 [INFO] [Thread-17129] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:13:16.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:13:16.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:13:17.263 [DEBUG] [Thread-17129] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:13:17.263 [DEBUG] [Thread-17129] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:13:17.311 [DEBUG] [Thread-17129] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:13:17.311 [DEBUG] [Thread-17129] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:13:17.320 [DEBUG] [Thread-17129] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:13:17.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:13:17.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:13:17.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-11-12T14:13:17.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:13:17.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:13:17.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:13:17.357 [DEBUG] [Thread-17129] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:13:21.639 [DEBUG] [Thread-17131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:13:25.695 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:13:25.696 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:13:35.768 [DEBUG] [Thread-17132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:13:36.695 [DEBUG] [Thread-17133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:13:47.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:13:47.380 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:13:47.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-11-12T14:13:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 13, 26), 34.74, 9.83, 0.0, 33.74, 27.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:13:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:13:26
2025-11-12T14:13:48.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:13:48.348 [DEBUG] [Thread-17134] [transport.py] [_log()] starting thread (client mode): 0x149a8e20
2025-11-12T14:13:48.349 [DEBUG] [Thread-17134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:13:48.368 [DEBUG] [Thread-17134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:13:48.368 [INFO] [Thread-17134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] client lang: <none>
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] server lang: <none>
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] kex follows: False
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:13:48.371 [DEBUG] [Thread-17134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:13:48.372 [DEBUG] [Thread-17134] [transport.py] [_log()] Compression: none
2025-11-12T14:13:48.372 [DEBUG] [Thread-17134] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:13:48.388 [DEBUG] [Thread-17134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:13:48.388 [DEBUG] [Thread-17134] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:13:48.388 [DEBUG] [Thread-17134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:13:48.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:13:48.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:13:48.389 [DEBUG] [Thread-17134] [transport.py] [_log()] userauth is OK
2025-11-12T14:13:48.389 [DEBUG] [Thread-17134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:13:48.389 [DEBUG] [Thread-17134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:13:48.389 [DEBUG] [Thread-17134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:13:48.389 [DEBUG] [Thread-17134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:13:48.398 [INFO] [Thread-17134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:13:48.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:13:49.037 [DEBUG] [Thread-17134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:13:49.038 [DEBUG] [Thread-17134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:13:49.038 [DEBUG] [Thread-17134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:13:49.079 [DEBUG] [Thread-17134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:13:49.079 [DEBUG] [Thread-17134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:13:49.081 [DEBUG] [Thread-17134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:13:49.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:13:49.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:13:49.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:13:49.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:13:49.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:13:49.098 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:13:49.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:13:49.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:13:49.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:13:49.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.509116 -999.00  +26.70  26.43     15   -1.50 1 1 1 1 1   888    0 22.32 -225.59 ----- 26.4 26.4 276.8 38.1 31.6 -29.3 31.4 -25.4 31.2 -30.0 32.1 -26.3
2025-11-12T14:13:49.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:13:49.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:13:49.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.509116
2025-11-12T14:13:49.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:13:49.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:13:49.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:13:49.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:13:49.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:13:49.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:13:26', tmtdew=34.74, humidity=9.83, cloud=0.0, wind=33.74, temperature=27.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:13:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:13:49.099 [DEBUG] [Thread-17134] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:13:49.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:13:49.186 [DEBUG] [Thread-17137] [transport.py] [_log()] starting thread (client mode): 0x1493f100
2025-11-12T14:13:49.187 [DEBUG] [Thread-17137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:13:49.202 [DEBUG] [Thread-17137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:13:49.202 [INFO] [Thread-17137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] client lang: <none>
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] server lang: <none>
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] kex follows: False
2025-11-12T14:13:49.209 [DEBUG] [Thread-17137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:13:49.210 [DEBUG] [Thread-17137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:13:49.210 [DEBUG] [Thread-17137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:13:49.210 [DEBUG] [Thread-17137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:13:49.210 [DEBUG] [Thread-17137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:13:49.210 [DEBUG] [Thread-17137] [transport.py] [_log()] Compression: none
2025-11-12T14:13:49.210 [DEBUG] [Thread-17137] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:13:49.268 [DEBUG] [Thread-17137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:13:49.268 [DEBUG] [Thread-17137] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:13:49.268 [DEBUG] [Thread-17137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:13:49.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:13:49.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:13:49.324 [DEBUG] [Thread-17137] [transport.py] [_log()] userauth is OK
2025-11-12T14:13:49.324 [DEBUG] [Thread-17137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:13:49.324 [DEBUG] [Thread-17137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:13:49.324 [DEBUG] [Thread-17137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:13:49.324 [DEBUG] [Thread-17137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:13:49.338 [INFO] [Thread-17137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:13:49.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:13:49.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:13:50.207 [DEBUG] [Thread-17137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:13:50.207 [DEBUG] [Thread-17137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:13:50.255 [DEBUG] [Thread-17137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:13:50.255 [DEBUG] [Thread-17137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:13:50.263 [DEBUG] [Thread-17137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:13:50.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:13:50.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:13:50.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-11-12T14:13:50.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:13:50.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:13:50.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:13:50.295 [DEBUG] [Thread-17137] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:13:51.727 [DEBUG] [Thread-17139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:14:06.769 [DEBUG] [Thread-17140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:14:20.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:14:20.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:14:20.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-11-12T14:14:20.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 13, 58), 35.01, 9.63, 0.0, 22.57, 28.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:14:20.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:13:58
2025-11-12T14:14:21.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:14:21.217 [DEBUG] [Thread-17141] [transport.py] [_log()] starting thread (client mode): 0x173f8850
2025-11-12T14:14:21.217 [DEBUG] [Thread-17141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:14:21.236 [DEBUG] [Thread-17141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:14:21.236 [INFO] [Thread-17141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] client lang: <none>
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] server lang: <none>
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] kex follows: False
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] Compression: none
2025-11-12T14:14:21.239 [DEBUG] [Thread-17141] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:14:21.256 [DEBUG] [Thread-17141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:14:21.257 [DEBUG] [Thread-17141] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:14:21.257 [DEBUG] [Thread-17141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:14:21.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:14:21.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:14:21.259 [DEBUG] [Thread-17141] [transport.py] [_log()] userauth is OK
2025-11-12T14:14:21.260 [DEBUG] [Thread-17141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:14:21.260 [DEBUG] [Thread-17141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:14:21.260 [DEBUG] [Thread-17141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:14:21.260 [DEBUG] [Thread-17141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:14:21.297 [INFO] [Thread-17141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:14:21.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:14:21.808 [DEBUG] [Thread-17143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:14:21.931 [DEBUG] [Thread-17141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:14:21.931 [DEBUG] [Thread-17141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:14:21.931 [DEBUG] [Thread-17141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:14:21.972 [DEBUG] [Thread-17141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:14:21.972 [DEBUG] [Thread-17141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:14:21.976 [DEBUG] [Thread-17141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:14:21.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:14:21.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:14:21.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:14:21.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:14:21.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:14:21.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:14:21.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:14:21.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:14:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:14:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.509463 -999.00  +26.80  23.23     15   -1.50 1 1 1 1 1   888    0 22.97 -227.11 ----- 23.2 23.2 279.4 29.3 31.5 -27.4 31.2 -25.8 31.0 -25.8 32.0 -25.2
2025-11-12T14:14:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:14:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:14:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.509463
2025-11-12T14:14:21.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:14:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:14:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:14:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:14:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:14:22.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:13:58', tmtdew=35.01, humidity=9.63, cloud=0.0, wind=22.57, temperature=28.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:13:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:14:22.001 [DEBUG] [Thread-17141] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:14:22.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:14:22.098 [DEBUG] [Thread-17145] [transport.py] [_log()] starting thread (client mode): 0x173f85e0
2025-11-12T14:14:22.098 [DEBUG] [Thread-17145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:14:22.112 [DEBUG] [Thread-17145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:14:22.113 [INFO] [Thread-17145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:14:22.120 [DEBUG] [Thread-17145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:14:22.120 [DEBUG] [Thread-17145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] client lang: <none>
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] server lang: <none>
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] kex follows: False
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] Compression: none
2025-11-12T14:14:22.121 [DEBUG] [Thread-17145] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:14:22.181 [DEBUG] [Thread-17145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:14:22.181 [DEBUG] [Thread-17145] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:14:22.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:14:22.182 [DEBUG] [Thread-17145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:14:22.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:14:22.241 [DEBUG] [Thread-17145] [transport.py] [_log()] userauth is OK
2025-11-12T14:14:22.241 [DEBUG] [Thread-17145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:14:22.241 [DEBUG] [Thread-17145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:14:22.242 [DEBUG] [Thread-17145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:14:22.242 [DEBUG] [Thread-17145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:14:22.260 [INFO] [Thread-17145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:14:22.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:14:22.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:14:23.102 [DEBUG] [Thread-17145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:14:23.103 [DEBUG] [Thread-17145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:14:23.151 [DEBUG] [Thread-17145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:14:23.151 [DEBUG] [Thread-17145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:14:23.160 [DEBUG] [Thread-17145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:14:23.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:14:23.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-11-12T14:14:23.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-11-12T14:14:23.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:14:23.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:14:23.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:14:23.193 [DEBUG] [Thread-17145] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:14:25.838 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:14:25.840 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:14:35.812 [DEBUG] [Thread-17147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:14:36.838 [DEBUG] [Thread-17148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:14:51.886 [DEBUG] [Thread-17149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:14:53.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:14:53.217 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:14:53.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-11-12T14:14:53.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 14, 30), 35.45, 9.37, 0.0, 22.88, 28.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:14:53.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:14:30
2025-11-12T14:14:53.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:14:54.129 [DEBUG] [Thread-17150] [transport.py] [_log()] starting thread (client mode): 0x1739a590
2025-11-12T14:14:54.129 [DEBUG] [Thread-17150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:14:54.149 [DEBUG] [Thread-17150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:14:54.149 [INFO] [Thread-17150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:14:54.152 [DEBUG] [Thread-17150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:14:54.152 [DEBUG] [Thread-17150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:14:54.152 [DEBUG] [Thread-17150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:14:54.152 [DEBUG] [Thread-17150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:14:54.152 [DEBUG] [Thread-17150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] client lang: <none>
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] server lang: <none>
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] kex follows: False
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] Compression: none
2025-11-12T14:14:54.153 [DEBUG] [Thread-17150] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:14:54.171 [DEBUG] [Thread-17150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:14:54.171 [DEBUG] [Thread-17150] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:14:54.172 [DEBUG] [Thread-17150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:14:54.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:14:54.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:14:54.173 [DEBUG] [Thread-17150] [transport.py] [_log()] userauth is OK
2025-11-12T14:14:54.174 [DEBUG] [Thread-17150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:14:54.174 [DEBUG] [Thread-17150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:14:54.174 [DEBUG] [Thread-17150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:14:54.174 [DEBUG] [Thread-17150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:14:54.188 [INFO] [Thread-17150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:14:54.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:14:54.812 [DEBUG] [Thread-17150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:14:54.812 [DEBUG] [Thread-17150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:14:54.812 [DEBUG] [Thread-17150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:14:54.853 [DEBUG] [Thread-17150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:14:54.853 [DEBUG] [Thread-17150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:14:54.856 [DEBUG] [Thread-17150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:14:54.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:14:54.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:14:54.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:14:54.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:14:54.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:14:54.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:14:54.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:14:54.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:14:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:14:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.509810 -999.00  +26.80  19.25     15   -1.40 1 1 1 1 1   888    0 22.85 -213.87 ----- 19.2 19.2 270.8 27.0 31.6 -27.4 31.3 -25.6 31.0 -26.1 32.0 -26.0
2025-11-12T14:14:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:14:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:14:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.509810
2025-11-12T14:14:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:14:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:14:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:14:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:14:54.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:14:54.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:14:30', tmtdew=35.45, humidity=9.37, cloud=0.0, wind=22.88, temperature=28.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:14:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:14:54.884 [DEBUG] [Thread-17150] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:14:54.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:14:54.979 [DEBUG] [Thread-17153] [transport.py] [_log()] starting thread (client mode): 0x149ab910
2025-11-12T14:14:54.979 [DEBUG] [Thread-17153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:14:54.994 [DEBUG] [Thread-17153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:14:54.994 [INFO] [Thread-17153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:14:55.002 [DEBUG] [Thread-17153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:14:55.002 [DEBUG] [Thread-17153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:14:55.002 [DEBUG] [Thread-17153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:14:55.002 [DEBUG] [Thread-17153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:14:55.002 [DEBUG] [Thread-17153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:14:55.002 [DEBUG] [Thread-17153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:14:55.003 [DEBUG] [Thread-17153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:14:55.003 [DEBUG] [Thread-17153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:14:55.003 [DEBUG] [Thread-17153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:14:55.003 [DEBUG] [Thread-17153] [transport.py] [_log()] client lang: <none>
2025-11-12T14:14:55.003 [DEBUG] [Thread-17153] [transport.py] [_log()] server lang: <none>
2025-11-12T14:14:55.003 [DEBUG] [Thread-17153] [transport.py] [_log()] kex follows: False
2025-11-12T14:14:55.003 [DEBUG] [Thread-17153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:14:55.004 [DEBUG] [Thread-17153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:14:55.004 [DEBUG] [Thread-17153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:14:55.004 [DEBUG] [Thread-17153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:14:55.004 [DEBUG] [Thread-17153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:14:55.004 [DEBUG] [Thread-17153] [transport.py] [_log()] Compression: none
2025-11-12T14:14:55.004 [DEBUG] [Thread-17153] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:14:55.061 [DEBUG] [Thread-17153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:14:55.062 [DEBUG] [Thread-17153] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:14:55.062 [DEBUG] [Thread-17153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:14:55.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:14:55.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:14:55.117 [DEBUG] [Thread-17153] [transport.py] [_log()] userauth is OK
2025-11-12T14:14:55.117 [DEBUG] [Thread-17153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:14:55.118 [DEBUG] [Thread-17153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:14:55.118 [DEBUG] [Thread-17153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:14:55.118 [DEBUG] [Thread-17153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:14:55.136 [INFO] [Thread-17153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:14: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-11-12T14:14:55.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:14:55.974 [DEBUG] [Thread-17153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:14:55.974 [DEBUG] [Thread-17153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:14:56.022 [DEBUG] [Thread-17153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:14:56.022 [DEBUG] [Thread-17153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:14:56.031 [DEBUG] [Thread-17153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:14:56.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:14:56.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-11-12T14:14:56.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-11-12T14:14:56.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:14:56.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:14:56.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:14:56.080 [DEBUG] [Thread-17153] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:15:06.922 [DEBUG] [Thread-17155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:15:21.962 [DEBUG] [Thread-17156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:15:25.992 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:15:25.993 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:15:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:15:26.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:15:26.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-11-12T14:15:26.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 15, 2), 35.02, 9.6, 0.0, 24.82, 28.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:15:26.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:15:02
2025-11-12T14:15:26.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:15:27.003 [DEBUG] [Thread-17157] [transport.py] [_log()] starting thread (client mode): 0x17360250
2025-11-12T14:15:27.003 [DEBUG] [Thread-17157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:15:27.027 [DEBUG] [Thread-17157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:15:27.027 [INFO] [Thread-17157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:15:27.031 [DEBUG] [Thread-17157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] client lang: <none>
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] server lang: <none>
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] kex follows: False
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] Compression: none
2025-11-12T14:15:27.032 [DEBUG] [Thread-17157] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:15:27.051 [DEBUG] [Thread-17157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:15:27.052 [DEBUG] [Thread-17157] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:15:27.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:15:27.053 [DEBUG] [Thread-17157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:15:27.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:15:27.055 [DEBUG] [Thread-17157] [transport.py] [_log()] userauth is OK
2025-11-12T14:15:27.055 [DEBUG] [Thread-17157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:15:27.055 [DEBUG] [Thread-17157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:15:27.055 [DEBUG] [Thread-17157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:15:27.055 [DEBUG] [Thread-17157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:15:27.077 [INFO] [Thread-17157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:15:27.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:15:27.699 [DEBUG] [Thread-17157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:15:27.700 [DEBUG] [Thread-17157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:15:27.700 [DEBUG] [Thread-17157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:15:27.741 [DEBUG] [Thread-17157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:15:27.741 [DEBUG] [Thread-17157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:15:27.744 [DEBUG] [Thread-17157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:15:27.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:15:27.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:15:27.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:15:27.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:15:27.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:15:27.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:15:27.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:15:27.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:15:27.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:15:27.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.510157 -999.00  +27.50  22.87     15   -1.20 1 1 1 1 1   888    0 22.79 -225.97 ----- 22.9 22.9 284.2 28.3 31.6 -26.3 31.3 -24.9 31.3 -24.2 32.1 -25.2
2025-11-12T14:15:27.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:15:27.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:15:27.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.510157
2025-11-12T14:15:27.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:15:27.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:15:27.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:15:27.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:15:27.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:15:27.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:15:02', tmtdew=35.02, humidity=9.6, cloud=0.0, wind=24.82, temperature=28.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:14:37.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:15:27.772 [DEBUG] [Thread-17157] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:15:27.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:15:27.865 [DEBUG] [Thread-17160] [transport.py] [_log()] starting thread (client mode): 0x173634f0
2025-11-12T14:15:27.866 [DEBUG] [Thread-17160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:15:27.880 [DEBUG] [Thread-17160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:15:27.881 [INFO] [Thread-17160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] client lang: <none>
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] server lang: <none>
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] kex follows: False
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:15:27.888 [DEBUG] [Thread-17160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:15:27.889 [DEBUG] [Thread-17160] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:15:27.889 [DEBUG] [Thread-17160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:15:27.889 [DEBUG] [Thread-17160] [transport.py] [_log()] Compression: none
2025-11-12T14:15:27.889 [DEBUG] [Thread-17160] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:15:27.945 [DEBUG] [Thread-17160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:15:27.946 [DEBUG] [Thread-17160] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:15:27.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:15:27.947 [DEBUG] [Thread-17160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:15:27.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:15:28.001 [DEBUG] [Thread-17160] [transport.py] [_log()] userauth is OK
2025-11-12T14:15:28.002 [DEBUG] [Thread-17160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:15:28.002 [DEBUG] [Thread-17160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:15:28.002 [DEBUG] [Thread-17160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:15:28.002 [DEBUG] [Thread-17160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:15:28.021 [INFO] [Thread-17160] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:15:28.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:15:28.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:15:28.871 [DEBUG] [Thread-17160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:15:28.872 [DEBUG] [Thread-17160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:15:28.920 [DEBUG] [Thread-17160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:15:28.920 [DEBUG] [Thread-17160] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:15:28.929 [DEBUG] [Thread-17160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:15:28.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:15:28.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-11-12T14:15:28.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-11-12T14:15:28.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:15:28.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:15:28.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:15:28.965 [DEBUG] [Thread-17160] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:15:35.840 [DEBUG] [Thread-17162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:15:36.995 [DEBUG] [Thread-17163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:15:52.046 [DEBUG] [Thread-17164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:15:58.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:15:58.985 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:15:58.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-11-12T14:15:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 15, 34), 34.95, 9.67, 0.0, 32.82, 27.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:15:59.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:15:34
2025-11-12T14:15:59.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:15:59.906 [DEBUG] [Thread-17165] [transport.py] [_log()] starting thread (client mode): 0x1737de40
2025-11-12T14:15:59.906 [DEBUG] [Thread-17165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:15:59.926 [DEBUG] [Thread-17165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:15:59.926 [INFO] [Thread-17165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] client lang: <none>
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] server lang: <none>
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] kex follows: False
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] Compression: none
2025-11-12T14:15:59.929 [DEBUG] [Thread-17165] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:15:59.946 [DEBUG] [Thread-17165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:15:59.947 [DEBUG] [Thread-17165] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:15:59.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:15:59.947 [DEBUG] [Thread-17165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:15:59.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:15:59.949 [DEBUG] [Thread-17165] [transport.py] [_log()] userauth is OK
2025-11-12T14:15:59.949 [DEBUG] [Thread-17165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:15:59.949 [DEBUG] [Thread-17165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:15:59.949 [DEBUG] [Thread-17165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:15:59.949 [DEBUG] [Thread-17165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:15:59.965 [INFO] [Thread-17165] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:15:59.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:16:00.601 [DEBUG] [Thread-17165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:16:00.601 [DEBUG] [Thread-17165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:16:00.602 [DEBUG] [Thread-17165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:16:00.643 [DEBUG] [Thread-17165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:16:00.643 [DEBUG] [Thread-17165] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:16:00.646 [DEBUG] [Thread-17165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:16:00.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:16:00.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:16:00.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:16:00.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:16:00.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:16:00.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:16:00.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:16:00.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:16:00.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:16:00.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.510852 -999.00  +27.00  26.48     15   -1.30 1 1 1 1 1   888    0 21.74 -260.97 ----- 26.5 26.5 278.4 41.9 31.6 -27.1 31.4 -25.4 31.3 -27.0 32.2 -26.3
2025-11-12T14:16:00.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:16:00.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:16:00.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.510852
2025-11-12T14:16:00.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:16:00.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:16:00.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:16:00.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:16:00.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:16:00.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:15:34', tmtdew=34.95, humidity=9.67, cloud=0.0, wind=32.82, temperature=27.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:15:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:16:00.674 [DEBUG] [Thread-17165] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:16:00.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:16:00.769 [DEBUG] [Thread-17168] [transport.py] [_log()] starting thread (client mode): 0x1737cd60
2025-11-12T14:16:00.769 [DEBUG] [Thread-17168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:16:00.784 [DEBUG] [Thread-17168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:16:00.785 [INFO] [Thread-17168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:16:00.792 [DEBUG] [Thread-17168] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:16:00.792 [DEBUG] [Thread-17168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:16:00.792 [DEBUG] [Thread-17168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] client lang: <none>
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] server lang: <none>
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] kex follows: False
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] Compression: none
2025-11-12T14:16:00.793 [DEBUG] [Thread-17168] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:16:00.857 [DEBUG] [Thread-17168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:16:00.857 [DEBUG] [Thread-17168] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:16:00.858 [DEBUG] [Thread-17168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:16:00.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:16:00.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:16:00.918 [DEBUG] [Thread-17168] [transport.py] [_log()] userauth is OK
2025-11-12T14:16:00.918 [DEBUG] [Thread-17168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:16:00.919 [DEBUG] [Thread-17168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:16:00.919 [DEBUG] [Thread-17168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:16:00.919 [DEBUG] [Thread-17168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:16:00.939 [INFO] [Thread-17168] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:16:00.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:16:00.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:16:01.761 [DEBUG] [Thread-17168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:16:01.761 [DEBUG] [Thread-17168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:16:01.809 [DEBUG] [Thread-17168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:16:01.809 [DEBUG] [Thread-17168] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:16:01.818 [DEBUG] [Thread-17168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:16:01.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:16:01.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-11-12T14:16:01.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-11-12T14:16:01.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:16:01.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:16:01.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:16:01.855 [DEBUG] [Thread-17168] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:16:07.080 [DEBUG] [Thread-17170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:16:22.119 [DEBUG] [Thread-17171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:16:26.135 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:16:26.136 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:16:31.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:16:31.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:16:31.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-11-12T14:16:32.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 16, 6), 35.03, 9.63, 0.0, 36.43, 27.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:16:32.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:16:06
2025-11-12T14:16:32.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:16:32.788 [DEBUG] [Thread-17172] [transport.py] [_log()] starting thread (client mode): 0x173619f0
2025-11-12T14:16:32.789 [DEBUG] [Thread-17172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:16:32.809 [DEBUG] [Thread-17172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:16:32.809 [INFO] [Thread-17172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:16:32.812 [DEBUG] [Thread-17172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:16:32.812 [DEBUG] [Thread-17172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:16:32.812 [DEBUG] [Thread-17172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] client lang: <none>
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] server lang: <none>
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] kex follows: False
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] Compression: none
2025-11-12T14:16:32.813 [DEBUG] [Thread-17172] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:16:32.830 [DEBUG] [Thread-17172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:16:32.831 [DEBUG] [Thread-17172] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:16:32.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:16:32.832 [DEBUG] [Thread-17172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:16:32.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:16:32.834 [DEBUG] [Thread-17172] [transport.py] [_log()] userauth is OK
2025-11-12T14:16:32.835 [DEBUG] [Thread-17172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:16:32.835 [DEBUG] [Thread-17172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:16:32.835 [DEBUG] [Thread-17172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:16:32.835 [DEBUG] [Thread-17172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:16:32.873 [INFO] [Thread-17172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:16:32.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:16:33.502 [DEBUG] [Thread-17172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:16:33.502 [DEBUG] [Thread-17172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:16:33.502 [DEBUG] [Thread-17172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:16:33.543 [DEBUG] [Thread-17172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:16:33.543 [DEBUG] [Thread-17172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:16:33.546 [DEBUG] [Thread-17172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:16:33.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:16:33.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:16:33.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:16:33.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:16:33.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:16:33.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:16:33.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:16:33.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:16:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:16:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.511199 -999.00  +27.10  19.22     15   -1.20 1 1 1 1 1   888    0 21.85 -231.82 ----- 19.2 19.2 286.4 30.2 31.6 -27.3 31.3 -25.1 31.2 -27.3 32.1 -25.0
2025-11-12T14:16:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:16:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:16:33.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.511199
2025-11-12T14:16:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:16:33.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:16:33.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:16:33.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:16:33.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:16:33.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:16:06', tmtdew=35.03, humidity=9.63, cloud=0.0, wind=36.43, temperature=27.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:16:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:16:33.575 [DEBUG] [Thread-17172] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:16:33.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:16:33.670 [DEBUG] [Thread-17175] [transport.py] [_log()] starting thread (client mode): 0x173620e0
2025-11-12T14:16:33.671 [DEBUG] [Thread-17175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:16:33.685 [DEBUG] [Thread-17175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:16:33.685 [INFO] [Thread-17175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] client lang: <none>
2025-11-12T14:16:33.693 [DEBUG] [Thread-17175] [transport.py] [_log()] server lang: <none>
2025-11-12T14:16:33.694 [DEBUG] [Thread-17175] [transport.py] [_log()] kex follows: False
2025-11-12T14:16:33.694 [DEBUG] [Thread-17175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:16:33.694 [DEBUG] [Thread-17175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:16:33.694 [DEBUG] [Thread-17175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:16:33.694 [DEBUG] [Thread-17175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:16:33.694 [DEBUG] [Thread-17175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:16:33.694 [DEBUG] [Thread-17175] [transport.py] [_log()] Compression: none
2025-11-12T14:16:33.694 [DEBUG] [Thread-17175] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:16:33.753 [DEBUG] [Thread-17175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:16:33.754 [DEBUG] [Thread-17175] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:16:33.755 [DEBUG] [Thread-17175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:16:33.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:16:33.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:16:33.817 [DEBUG] [Thread-17175] [transport.py] [_log()] userauth is OK
2025-11-12T14:16:33.817 [DEBUG] [Thread-17175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:16:33.817 [DEBUG] [Thread-17175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:16:33.817 [DEBUG] [Thread-17175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:16:33.817 [DEBUG] [Thread-17175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:16:33.837 [INFO] [Thread-17175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:16:33.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:16:33.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:16:34.676 [DEBUG] [Thread-17175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:16:34.677 [DEBUG] [Thread-17175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:16:34.725 [DEBUG] [Thread-17175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:16:34.725 [DEBUG] [Thread-17175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:16:34.734 [DEBUG] [Thread-17175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:16:34.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:16:34.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:16:34.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:16:34.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:16:34.763 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:16:34.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:16:34.772 [DEBUG] [Thread-17175] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:16:35.874 [DEBUG] [Thread-17177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:16:37.152 [DEBUG] [Thread-17178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:16:52.213 [DEBUG] [Thread-17179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:17:04.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:17:04.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:17:04.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-11-12T14:17:05.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 16, 38), 34.82, 9.55, 0.0, 28.87, 27.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:17:05.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:16:38
2025-11-12T14:17:05.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:17:05.763 [DEBUG] [Thread-17180] [transport.py] [_log()] starting thread (client mode): 0x17362c50
2025-11-12T14:17:05.763 [DEBUG] [Thread-17180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:17:05.783 [DEBUG] [Thread-17180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:17:05.783 [INFO] [Thread-17180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] client lang: <none>
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] server lang: <none>
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] kex follows: False
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:17:05.786 [DEBUG] [Thread-17180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:17:05.787 [DEBUG] [Thread-17180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:17:05.787 [DEBUG] [Thread-17180] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:17:05.787 [DEBUG] [Thread-17180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:17:05.787 [DEBUG] [Thread-17180] [transport.py] [_log()] Compression: none
2025-11-12T14:17:05.787 [DEBUG] [Thread-17180] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:17:05.802 [DEBUG] [Thread-17180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:17:05.802 [DEBUG] [Thread-17180] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:17:05.802 [DEBUG] [Thread-17180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:17:05.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:17:05.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:17:05.844 [DEBUG] [Thread-17180] [transport.py] [_log()] userauth is OK
2025-11-12T14:17:05.844 [DEBUG] [Thread-17180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:17:05.844 [DEBUG] [Thread-17180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:17:05.845 [DEBUG] [Thread-17180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:17:05.845 [DEBUG] [Thread-17180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:17:05.871 [INFO] [Thread-17180] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:17:05.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:17:06.515 [DEBUG] [Thread-17180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:17:06.515 [DEBUG] [Thread-17180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:17:06.516 [DEBUG] [Thread-17180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:17:06.556 [DEBUG] [Thread-17180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:17:06.556 [DEBUG] [Thread-17180] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:17:06.559 [DEBUG] [Thread-17180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:17:06.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:17:06.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:17:06.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:17:06.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:17:06.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:17:06.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:17:06.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:17:06.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:17:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:17:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.511546 -999.00  +27.60  26.78     15   -1.10 1 1 1 1 1   888    0 20.81 -245.42 ----- 26.8 26.8 283.2 34.0 31.9 -25.8 31.4 -24.2 31.6 -23.0 32.3 -24.3
2025-11-12T14:17:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:17:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:17:06.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.511546
2025-11-12T14:17:06.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:17:06.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:17:06.585 [DEBUG] [Thread-17180] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:17:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:17:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:17:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:17:06.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:16:38', tmtdew=34.82, humidity=9.55, cloud=0.0, wind=28.87, temperature=27.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:16:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:17:06.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:17:06.679 [DEBUG] [Thread-17183] [transport.py] [_log()] starting thread (client mode): 0x173bfc70
2025-11-12T14:17:06.679 [DEBUG] [Thread-17183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:17:06.695 [DEBUG] [Thread-17183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:17:06.695 [INFO] [Thread-17183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:17:06.703 [DEBUG] [Thread-17183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] client lang: <none>
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] server lang: <none>
2025-11-12T14:17:06.704 [DEBUG] [Thread-17183] [transport.py] [_log()] kex follows: False
2025-11-12T14:17:06.705 [DEBUG] [Thread-17183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:17:06.705 [DEBUG] [Thread-17183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:17:06.705 [DEBUG] [Thread-17183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:17:06.705 [DEBUG] [Thread-17183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:17:06.705 [DEBUG] [Thread-17183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:17:06.705 [DEBUG] [Thread-17183] [transport.py] [_log()] Compression: none
2025-11-12T14:17:06.705 [DEBUG] [Thread-17183] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:17:06.769 [DEBUG] [Thread-17183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:17:06.770 [DEBUG] [Thread-17183] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:17:06.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:17:06.771 [DEBUG] [Thread-17183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:17:06.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:17:06.829 [DEBUG] [Thread-17183] [transport.py] [_log()] userauth is OK
2025-11-12T14:17:06.829 [DEBUG] [Thread-17183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:17:06.829 [DEBUG] [Thread-17183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:17:06.829 [DEBUG] [Thread-17183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:17:06.829 [DEBUG] [Thread-17183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:17:06.848 [INFO] [Thread-17183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:17:06.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:17:06.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:17:07.247 [DEBUG] [Thread-17185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:17:07.688 [DEBUG] [Thread-17183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:17:07.689 [DEBUG] [Thread-17183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:17:07.737 [DEBUG] [Thread-17183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:17:07.737 [DEBUG] [Thread-17183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:17:07.746 [DEBUG] [Thread-17183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:17:07.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:17: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')
2025-11-12T14:17:07.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:17:07.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:17:07.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:17:07.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:17:07.786 [DEBUG] [Thread-17183] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:17:22.299 [DEBUG] [Thread-17186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:17:26.286 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:17:26.287 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:17:35.926 [DEBUG] [Thread-17187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:17:37.340 [DEBUG] [Thread-17188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:17:37.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:17:37.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:17:37.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-11-12T14:17:38.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 17, 10), 34.2, 9.93, 0.0, 29.4, 27.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:17:38.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:17:10
2025-11-12T14:17:38.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:17:38.734 [DEBUG] [Thread-17189] [transport.py] [_log()] starting thread (client mode): 0x149aa7d0
2025-11-12T14:17:38.734 [DEBUG] [Thread-17189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:17:38.754 [DEBUG] [Thread-17189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:17:38.754 [INFO] [Thread-17189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] client lang: <none>
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] server lang: <none>
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] kex follows: False
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] Compression: none
2025-11-12T14:17:38.758 [DEBUG] [Thread-17189] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:17:38.771 [DEBUG] [Thread-17189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:17:38.772 [DEBUG] [Thread-17189] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:17:38.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:17:38.772 [DEBUG] [Thread-17189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:17:38.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:17:38.773 [DEBUG] [Thread-17189] [transport.py] [_log()] userauth is OK
2025-11-12T14:17:38.773 [DEBUG] [Thread-17189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:17:38.773 [DEBUG] [Thread-17189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:17:38.773 [DEBUG] [Thread-17189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:17:38.773 [DEBUG] [Thread-17189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:17:38.792 [INFO] [Thread-17189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:17:38.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:17:39.438 [DEBUG] [Thread-17189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:17:39.438 [DEBUG] [Thread-17189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:17:39.438 [DEBUG] [Thread-17189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:17:39.479 [DEBUG] [Thread-17189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:17:39.479 [DEBUG] [Thread-17189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:17:39.482 [DEBUG] [Thread-17189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:17:39.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:17:39.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:17:39.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:17:39.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:17:39.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:17:39.499 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:17:39.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:17:39.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.511893 -999.00  +27.90  24.59     15   -1.10 1 2 1 1 1   888    0 20.70 -258.39 ----- 24.6 24.6 288.2 28.4 32.0 -24.8 31.6 -23.9 31.8 -22.0 32.4 -24.0
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.511893
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:17:39.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:17:10', tmtdew=34.2, humidity=9.93, cloud=0.0, wind=29.4, temperature=27.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:17:07.555', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:17:39.500 [DEBUG] [Thread-17189] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:17: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-11-12T14:17:39.587 [DEBUG] [Thread-17192] [transport.py] [_log()] starting thread (client mode): 0x173983d0
2025-11-12T14:17:39.587 [DEBUG] [Thread-17192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:17:39.602 [DEBUG] [Thread-17192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:17:39.602 [INFO] [Thread-17192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] client lang: <none>
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] server lang: <none>
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] kex follows: False
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] Compression: none
2025-11-12T14:17:39.610 [DEBUG] [Thread-17192] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:17:39.671 [DEBUG] [Thread-17192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:17:39.671 [DEBUG] [Thread-17192] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:17:39.672 [DEBUG] [Thread-17192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:17:39.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:17:39.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:17:39.728 [DEBUG] [Thread-17192] [transport.py] [_log()] userauth is OK
2025-11-12T14:17:39.729 [DEBUG] [Thread-17192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:17:39.729 [DEBUG] [Thread-17192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:17:39.729 [DEBUG] [Thread-17192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:17:39.729 [DEBUG] [Thread-17192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:17:39.743 [INFO] [Thread-17192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:17:39.743 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:17:39.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:17:40.633 [DEBUG] [Thread-17192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:17:40.633 [DEBUG] [Thread-17192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:17:40.681 [DEBUG] [Thread-17192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:17:40.681 [DEBUG] [Thread-17192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:17:40.690 [DEBUG] [Thread-17192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:17:40.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:17:40.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-11-12T14:17:40.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-11-12T14:17:40.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:17:40.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:17:40.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:17:40.721 [DEBUG] [Thread-17192] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:17:52.377 [DEBUG] [Thread-17194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:18:07.425 [DEBUG] [Thread-17195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:18:10.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:18:10.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:18:10.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-11-12T14:18:11.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 17, 42), 34.71, 9.88, 0.0, 31.07, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:18:11.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:17:42
2025-11-12T14:18:11.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:18:11.642 [DEBUG] [Thread-17196] [transport.py] [_log()] starting thread (client mode): 0x173f84f0
2025-11-12T14:18:11.642 [DEBUG] [Thread-17196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:18:11.662 [DEBUG] [Thread-17196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:18:11.662 [INFO] [Thread-17196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:18:11.665 [DEBUG] [Thread-17196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:18:11.665 [DEBUG] [Thread-17196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] client lang: <none>
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] server lang: <none>
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] kex follows: False
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:18:11.666 [DEBUG] [Thread-17196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:18:11.667 [DEBUG] [Thread-17196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:18:11.667 [DEBUG] [Thread-17196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:18:11.667 [DEBUG] [Thread-17196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:18:11.667 [DEBUG] [Thread-17196] [transport.py] [_log()] Compression: none
2025-11-12T14:18:11.667 [DEBUG] [Thread-17196] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:18:11.685 [DEBUG] [Thread-17196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:18:11.686 [DEBUG] [Thread-17196] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:18:11.687 [DEBUG] [Thread-17196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:18:11.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:18:11.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:18:11.689 [DEBUG] [Thread-17196] [transport.py] [_log()] userauth is OK
2025-11-12T14:18:11.689 [DEBUG] [Thread-17196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:18:11.690 [DEBUG] [Thread-17196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:18:11.690 [DEBUG] [Thread-17196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:18:11.690 [DEBUG] [Thread-17196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:18:11.713 [INFO] [Thread-17196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:18:11.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:18:12.374 [DEBUG] [Thread-17196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:18:12.375 [DEBUG] [Thread-17196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:18:12.375 [DEBUG] [Thread-17196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:18:12.415 [DEBUG] [Thread-17196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:18:12.416 [DEBUG] [Thread-17196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:18:12.418 [DEBUG] [Thread-17196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:18:12.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:18:12.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:18:12.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:18:12.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:18:12.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:18:12.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:18:12.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:18:12.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:18:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:18:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.512241 -999.00  +27.60  39.07     15   -1.20 1 1 2 1 1   888    0 21.92 -231.11 ----- 39.1 39.1 266.4 46.1 31.9 -28.2 31.6 -25.6 31.6 -29.5 32.5 -26.3
2025-11-12T14:18:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:18:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:18:12.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.512241
2025-11-12T14:18:12.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:18:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:18:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:18:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:18:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:18:12.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:17:42', tmtdew=34.71, humidity=9.88, cloud=0.0, wind=31.07, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:17:37.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:18:12.447 [DEBUG] [Thread-17196] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:18:12.531 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:18:12.544 [DEBUG] [Thread-17199] [transport.py] [_log()] starting thread (client mode): 0x14922d70
2025-11-12T14:18:12.544 [DEBUG] [Thread-17199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:18:12.559 [DEBUG] [Thread-17199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:18:12.559 [INFO] [Thread-17199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] client lang: <none>
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] server lang: <none>
2025-11-12T14:18:12.567 [DEBUG] [Thread-17199] [transport.py] [_log()] kex follows: False
2025-11-12T14:18:12.568 [DEBUG] [Thread-17199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:18:12.568 [DEBUG] [Thread-17199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:18:12.568 [DEBUG] [Thread-17199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:18:12.568 [DEBUG] [Thread-17199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:18:12.568 [DEBUG] [Thread-17199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:18:12.568 [DEBUG] [Thread-17199] [transport.py] [_log()] Compression: none
2025-11-12T14:18:12.568 [DEBUG] [Thread-17199] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:18:12.625 [DEBUG] [Thread-17199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:18:12.626 [DEBUG] [Thread-17199] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:18:12.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:18:12.627 [DEBUG] [Thread-17199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:18:12.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:18:12.682 [DEBUG] [Thread-17199] [transport.py] [_log()] userauth is OK
2025-11-12T14:18:12.682 [DEBUG] [Thread-17199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:18:12.682 [DEBUG] [Thread-17199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:18:12.682 [DEBUG] [Thread-17199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:18:12.682 [DEBUG] [Thread-17199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:18:12.700 [INFO] [Thread-17199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:18:12.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:18:12.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:18:13.526 [DEBUG] [Thread-17199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:18:13.526 [DEBUG] [Thread-17199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:18:13.577 [DEBUG] [Thread-17199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:18:13.577 [DEBUG] [Thread-17199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:18:13.591 [DEBUG] [Thread-17199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:18:13.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:18:13.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-11-12T14:18:13.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-11-12T14:18:13.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:18:13.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:18:13.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:18:13.629 [DEBUG] [Thread-17199] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:18:22.460 [DEBUG] [Thread-17201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:18:26.430 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:18:26.431 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:18:35.971 [DEBUG] [Thread-17202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:18:37.505 [DEBUG] [Thread-17203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:18:43.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:18:43.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:18: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-11-12T14:18:44.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 18, 14), 34.91, 9.75, 0.0, 29.03, 27.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:18:44.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:18:14
2025-11-12T14:18:44.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:18:44.538 [DEBUG] [Thread-17204] [transport.py] [_log()] starting thread (client mode): 0x173bef50
2025-11-12T14:18:44.538 [DEBUG] [Thread-17204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:18:44.558 [DEBUG] [Thread-17204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:18:44.558 [INFO] [Thread-17204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:18:44.561 [DEBUG] [Thread-17204] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] client lang: <none>
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] server lang: <none>
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] kex follows: False
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:18:44.562 [DEBUG] [Thread-17204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:18:44.563 [DEBUG] [Thread-17204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:18:44.563 [DEBUG] [Thread-17204] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:18:44.563 [DEBUG] [Thread-17204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:18:44.563 [DEBUG] [Thread-17204] [transport.py] [_log()] Compression: none
2025-11-12T14:18:44.563 [DEBUG] [Thread-17204] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:18:44.582 [DEBUG] [Thread-17204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:18:44.583 [DEBUG] [Thread-17204] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:18:44.583 [DEBUG] [Thread-17204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:18:44.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:18:44.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:18:44.585 [DEBUG] [Thread-17204] [transport.py] [_log()] userauth is OK
2025-11-12T14:18:44.586 [DEBUG] [Thread-17204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:18:44.586 [DEBUG] [Thread-17204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:18:44.586 [DEBUG] [Thread-17204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:18:44.586 [DEBUG] [Thread-17204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:18:44.604 [INFO] [Thread-17204] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:18:44.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:18:45.251 [DEBUG] [Thread-17204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:18:45.251 [DEBUG] [Thread-17204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:18:45.251 [DEBUG] [Thread-17204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:18:45.292 [DEBUG] [Thread-17204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:18:45.292 [DEBUG] [Thread-17204] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:18:45.295 [DEBUG] [Thread-17204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:18:45.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:18:45.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:18:45.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:18:45.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:18:45.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:18:45.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:18:45.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:18:45.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:18:45.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:18:45.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.512588 -999.00  +27.20  30.59     15   -1.30 1 1 2 1 1   888    0 22.64 -200.29 ----- 30.6 30.6 255.6 39.0 31.8 -27.4 31.6 -25.4 31.8 -23.7 32.2 -25.5
2025-11-12T14:18:45.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:18:45.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:18:45.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.512588
2025-11-12T14:18:45.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:18:45.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:18:45.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:18:45.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:18:45.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:18:45.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:18:14', tmtdew=34.91, humidity=9.75, cloud=0.0, wind=29.03, temperature=27.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:18:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:18:45.324 [DEBUG] [Thread-17204] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:18:45.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:18:45.419 [DEBUG] [Thread-17207] [transport.py] [_log()] starting thread (client mode): 0x14983eb0
2025-11-12T14:18:45.420 [DEBUG] [Thread-17207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:18:45.434 [DEBUG] [Thread-17207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:18:45.434 [INFO] [Thread-17207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] client lang: <none>
2025-11-12T14:18:45.442 [DEBUG] [Thread-17207] [transport.py] [_log()] server lang: <none>
2025-11-12T14:18:45.443 [DEBUG] [Thread-17207] [transport.py] [_log()] kex follows: False
2025-11-12T14:18:45.443 [DEBUG] [Thread-17207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:18:45.443 [DEBUG] [Thread-17207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:18:45.443 [DEBUG] [Thread-17207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:18:45.443 [DEBUG] [Thread-17207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:18:45.443 [DEBUG] [Thread-17207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:18:45.443 [DEBUG] [Thread-17207] [transport.py] [_log()] Compression: none
2025-11-12T14:18:45.443 [DEBUG] [Thread-17207] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:18:45.502 [DEBUG] [Thread-17207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:18:45.503 [DEBUG] [Thread-17207] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:18:45.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:18:45.504 [DEBUG] [Thread-17207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:18:45.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:18:45.561 [DEBUG] [Thread-17207] [transport.py] [_log()] userauth is OK
2025-11-12T14:18:45.562 [DEBUG] [Thread-17207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:18:45.562 [DEBUG] [Thread-17207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:18:45.562 [DEBUG] [Thread-17207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:18:45.562 [DEBUG] [Thread-17207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:18:45.580 [INFO] [Thread-17207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:18:45.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:18:45.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:18:46.428 [DEBUG] [Thread-17207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:18:46.429 [DEBUG] [Thread-17207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:18:46.477 [DEBUG] [Thread-17207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:18:46.477 [DEBUG] [Thread-17207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:18:46.486 [DEBUG] [Thread-17207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:18:46.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:18:46.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-11-12T14:18:46.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-11-12T14:18:46.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:18:46.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:18:46.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:18:46.522 [DEBUG] [Thread-17207] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:18:52.542 [DEBUG] [Thread-17209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:19:07.589 [DEBUG] [Thread-17210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:19:16.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:19:16.529 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:19:16.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-11-12T14:19:17.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 18, 46), 34.41, 9.76, 0.0, 32.55, 27.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:19:17.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:18:46
2025-11-12T14:19:17.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:19:17.438 [DEBUG] [Thread-17211] [transport.py] [_log()] starting thread (client mode): 0x173bda50
2025-11-12T14:19:17.438 [DEBUG] [Thread-17211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:19:17.458 [DEBUG] [Thread-17211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:19:17.458 [INFO] [Thread-17211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] client lang: <none>
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] server lang: <none>
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] kex follows: False
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] Compression: none
2025-11-12T14:19:17.461 [DEBUG] [Thread-17211] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:19:17.478 [DEBUG] [Thread-17211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:19:17.479 [DEBUG] [Thread-17211] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:19:17.479 [DEBUG] [Thread-17211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:19:17.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:19:17.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:19:17.481 [DEBUG] [Thread-17211] [transport.py] [_log()] userauth is OK
2025-11-12T14:19:17.482 [DEBUG] [Thread-17211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:19:17.482 [DEBUG] [Thread-17211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:19:17.482 [DEBUG] [Thread-17211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:19:17.482 [DEBUG] [Thread-17211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:19:17.518 [INFO] [Thread-17211] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:19:17.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:19:18.123 [DEBUG] [Thread-17211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:19:18.123 [DEBUG] [Thread-17211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:19:18.123 [DEBUG] [Thread-17211] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:19:18.164 [DEBUG] [Thread-17211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:19:18.164 [DEBUG] [Thread-17211] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:19:18.167 [DEBUG] [Thread-17211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:19:18.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:19:18.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:19:18.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:19:18.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:19:18.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:19:18.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:19:18.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:19:18.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:19:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:19:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.512935 -999.00  +27.10  34.25     15   -1.20 1 1 2 1 1   888    0 22.87 -196.52 ----- 34.2 34.2 263.0 38.2 31.9 -28.3 31.6 -25.2 31.8 -23.7 32.1 -26.6
2025-11-12T14:19:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:19:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:19:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.512935
2025-11-12T14:19:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:19:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:19:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:19:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:19:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:19:18.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:18:46', tmtdew=34.41, humidity=9.76, cloud=0.0, wind=32.55, temperature=27.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:18:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:19:18.193 [DEBUG] [Thread-17211] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:19:18.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:19:18.288 [DEBUG] [Thread-17214] [transport.py] [_log()] starting thread (client mode): 0x173bf130
2025-11-12T14:19:18.288 [DEBUG] [Thread-17214] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:19:18.305 [DEBUG] [Thread-17214] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:19:18.305 [INFO] [Thread-17214] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:19:18.312 [DEBUG] [Thread-17214] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:19:18.312 [DEBUG] [Thread-17214] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] client lang: <none>
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] server lang: <none>
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] kex follows: False
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] Compression: none
2025-11-12T14:19:18.313 [DEBUG] [Thread-17214] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:19:18.368 [DEBUG] [Thread-17214] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:19:18.369 [DEBUG] [Thread-17214] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:19:18.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:19:18.370 [DEBUG] [Thread-17214] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:19:18.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:19:18.425 [DEBUG] [Thread-17214] [transport.py] [_log()] userauth is OK
2025-11-12T14:19:18.425 [DEBUG] [Thread-17214] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:19:18.425 [DEBUG] [Thread-17214] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:19:18.425 [DEBUG] [Thread-17214] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:19:18.425 [DEBUG] [Thread-17214] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:19:18.444 [INFO] [Thread-17214] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:19:18.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:19:18.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:19:19.288 [DEBUG] [Thread-17214] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:19:19.288 [DEBUG] [Thread-17214] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:19:19.336 [DEBUG] [Thread-17214] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:19:19.336 [DEBUG] [Thread-17214] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:19:19.344 [DEBUG] [Thread-17214] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:19:19.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:19:19.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-11-12T14:19:19.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-11-12T14:19:19.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:19:19.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:19:19.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:19:19.375 [DEBUG] [Thread-17214] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:19:22.625 [DEBUG] [Thread-17216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:19:26.573 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:19:26.574 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:19:36.000 [DEBUG] [Thread-17217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:19:37.679 [DEBUG] [Thread-17218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:19:49.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:19:49.392 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:19: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-11-12T14:19:50.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 19, 18), 34.74, 9.55, 0.0, 32.89, 27.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:19:50.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:19:18
2025-11-12T14:19:50.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:19:50.298 [DEBUG] [Thread-17219] [transport.py] [_log()] starting thread (client mode): 0x1737f0d0
2025-11-12T14:19:50.298 [DEBUG] [Thread-17219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:19:50.312 [DEBUG] [Thread-17219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:19:50.312 [INFO] [Thread-17219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:19:50.316 [DEBUG] [Thread-17219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] client lang: <none>
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] server lang: <none>
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] kex follows: False
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] Compression: none
2025-11-12T14:19:50.317 [DEBUG] [Thread-17219] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:19:50.333 [DEBUG] [Thread-17219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:19:50.334 [DEBUG] [Thread-17219] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:19:50.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:19:50.334 [DEBUG] [Thread-17219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:19:50.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:19:50.336 [DEBUG] [Thread-17219] [transport.py] [_log()] userauth is OK
2025-11-12T14:19:50.336 [DEBUG] [Thread-17219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:19:50.336 [DEBUG] [Thread-17219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:19:50.337 [DEBUG] [Thread-17219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:19:50.337 [DEBUG] [Thread-17219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:19:50.373 [INFO] [Thread-17219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:19:50.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:19:50.985 [DEBUG] [Thread-17219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:19:50.985 [DEBUG] [Thread-17219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:19:50.985 [DEBUG] [Thread-17219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:19:51.026 [DEBUG] [Thread-17219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:19:51.026 [DEBUG] [Thread-17219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:19:51.028 [DEBUG] [Thread-17219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:19:51.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:19:51.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:19:51.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:19:51.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:19:51.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:19:51.047 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:19:51.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.513282 -999.00  +26.90  22.79     15   -1.00 1 1 1 1 1   888    0 23.88 -173.35 ----- 22.8 22.8 278.0 34.6 31.8 -28.2 31.6 -26.1 31.7 -25.5 32.1 -26.9
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.513282
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:19:51.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:19:18', tmtdew=34.74, humidity=9.55, cloud=0.0, wind=32.89, temperature=27.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:19:07.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:19:51.048 [DEBUG] [Thread-17219] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:19:51.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:19:51.133 [DEBUG] [Thread-17222] [transport.py] [_log()] starting thread (client mode): 0x173bd300
2025-11-12T14:19:51.133 [DEBUG] [Thread-17222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:19:51.149 [DEBUG] [Thread-17222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:19:51.149 [INFO] [Thread-17222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] client lang: <none>
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] server lang: <none>
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] kex follows: False
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:19:51.156 [DEBUG] [Thread-17222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:19:51.157 [DEBUG] [Thread-17222] [transport.py] [_log()] Compression: none
2025-11-12T14:19:51.157 [DEBUG] [Thread-17222] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:19:51.211 [DEBUG] [Thread-17222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:19:51.211 [DEBUG] [Thread-17222] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:19:51.211 [DEBUG] [Thread-17222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:19:51.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:19:51.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:19:51.268 [DEBUG] [Thread-17222] [transport.py] [_log()] userauth is OK
2025-11-12T14:19:51.268 [DEBUG] [Thread-17222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:19:51.268 [DEBUG] [Thread-17222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:19:51.268 [DEBUG] [Thread-17222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:19:51.268 [DEBUG] [Thread-17222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:19:51.283 [INFO] [Thread-17222] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:19:51.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:19:51.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:19:52.131 [DEBUG] [Thread-17222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:19:52.131 [DEBUG] [Thread-17222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:19:52.179 [DEBUG] [Thread-17222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:19:52.179 [DEBUG] [Thread-17222] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:19:52.187 [DEBUG] [Thread-17222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:19:52.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:19:52.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-11-12T14:19:52.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-11-12T14:19:52.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:19:52.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:19:52.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:19:52.220 [DEBUG] [Thread-17222] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:19:52.711 [DEBUG] [Thread-17224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:20:07.766 [DEBUG] [Thread-17225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:20:22.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:20:22.243 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:20:22.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-11-12T14:20:22.798 [DEBUG] [Thread-17226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:20:22.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 19, 50), 34.46, 10.2, 0.0, 32.31, 27.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:20:22.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:19:50
2025-11-12T14:20:23.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:20:23.220 [DEBUG] [Thread-17227] [transport.py] [_log()] starting thread (client mode): 0x149aab30
2025-11-12T14:20:23.220 [DEBUG] [Thread-17227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:20:23.240 [DEBUG] [Thread-17227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:20:23.240 [INFO] [Thread-17227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] client lang: <none>
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] server lang: <none>
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] kex follows: False
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] Compression: none
2025-11-12T14:20:23.243 [DEBUG] [Thread-17227] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:20:23.258 [DEBUG] [Thread-17227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:20:23.258 [DEBUG] [Thread-17227] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:20:23.258 [DEBUG] [Thread-17227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:20:23.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:20:23.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:20:23.259 [DEBUG] [Thread-17227] [transport.py] [_log()] userauth is OK
2025-11-12T14:20:23.259 [DEBUG] [Thread-17227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:20:23.259 [DEBUG] [Thread-17227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:20:23.259 [DEBUG] [Thread-17227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:20:23.259 [DEBUG] [Thread-17227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:20:23.277 [INFO] [Thread-17227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:20:23.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:20:23.906 [DEBUG] [Thread-17227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:20:23.906 [DEBUG] [Thread-17227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:20:23.906 [DEBUG] [Thread-17227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:20:23.947 [DEBUG] [Thread-17227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:20:23.947 [DEBUG] [Thread-17227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:20:23.949 [DEBUG] [Thread-17227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:20:23.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:20:23.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:20:23.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:20:23.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:20:23.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:20:23.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:20:23.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:20:23.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:20:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:20:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.513976 -999.00  +27.00  21.58     15   -1.00 1 1 1 1 1   888    0 23.37 -167.82 ----- 21.6 21.6 273.4 34.7 31.7 -27.7 31.4 -25.0 31.3 -26.9 32.1 -24.6
2025-11-12T14:20:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:20:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:20:23.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.513976
2025-11-12T14:20:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:20:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:20:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:20:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:20:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:20:23.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:19:50', tmtdew=34.46, humidity=10.2, cloud=0.0, wind=32.31, temperature=27.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:20:07.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:20:23.970 [DEBUG] [Thread-17227] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:20:24.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:20:24.054 [DEBUG] [Thread-17230] [transport.py] [_log()] starting thread (client mode): 0x17360dc0
2025-11-12T14:20:24.054 [DEBUG] [Thread-17230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:20:24.069 [DEBUG] [Thread-17230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:20:24.069 [INFO] [Thread-17230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:20:24.076 [DEBUG] [Thread-17230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:20:24.076 [DEBUG] [Thread-17230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] client lang: <none>
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] server lang: <none>
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] kex follows: False
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] Compression: none
2025-11-12T14:20:24.077 [DEBUG] [Thread-17230] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:20:24.139 [DEBUG] [Thread-17230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:20:24.139 [DEBUG] [Thread-17230] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:20:24.139 [DEBUG] [Thread-17230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:20:24.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:20:24.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:20:24.196 [DEBUG] [Thread-17230] [transport.py] [_log()] userauth is OK
2025-11-12T14:20:24.196 [DEBUG] [Thread-17230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:20:24.196 [DEBUG] [Thread-17230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:20:24.196 [DEBUG] [Thread-17230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:20:24.196 [DEBUG] [Thread-17230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:20:24.210 [INFO] [Thread-17230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:20:24.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:20:24.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:20:25.066 [DEBUG] [Thread-17230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:20:25.066 [DEBUG] [Thread-17230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:20:25.115 [DEBUG] [Thread-17230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:20:25.115 [DEBUG] [Thread-17230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:20:25.124 [DEBUG] [Thread-17230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:20:25.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:20: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')
2025-11-12T14:20:25.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-11-12T14:20:25.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:20:25.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:20:25.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:20:25.160 [DEBUG] [Thread-17230] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:20:26.716 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:20:26.717 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:20:36.037 [DEBUG] [Thread-17232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:20:37.834 [DEBUG] [Thread-17233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:20:52.896 [DEBUG] [Thread-17234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:20:55.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:20:55.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:20:55.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-11-12T14:20:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 20, 22), 34.34, 10.26, 0.0, 30.9, 27.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:20:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:20:22
2025-11-12T14:20:56.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:20:56.184 [DEBUG] [Thread-17235] [transport.py] [_log()] starting thread (client mode): 0x173bc370
2025-11-12T14:20:56.185 [DEBUG] [Thread-17235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:20:56.206 [DEBUG] [Thread-17235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:20:56.207 [INFO] [Thread-17235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] client lang: <none>
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] server lang: <none>
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] kex follows: False
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:20:56.210 [DEBUG] [Thread-17235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:20:56.211 [DEBUG] [Thread-17235] [transport.py] [_log()] Compression: none
2025-11-12T14:20:56.211 [DEBUG] [Thread-17235] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:20:56.229 [DEBUG] [Thread-17235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:20:56.229 [DEBUG] [Thread-17235] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:20:56.230 [DEBUG] [Thread-17235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:20:56.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:20:56.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:20:56.230 [DEBUG] [Thread-17235] [transport.py] [_log()] userauth is OK
2025-11-12T14:20:56.230 [DEBUG] [Thread-17235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:20:56.230 [DEBUG] [Thread-17235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:20:56.231 [DEBUG] [Thread-17235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:20:56.231 [DEBUG] [Thread-17235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:20:56.247 [INFO] [Thread-17235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:20:56.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:20:56.889 [DEBUG] [Thread-17235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:20:56.889 [DEBUG] [Thread-17235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:20:56.889 [DEBUG] [Thread-17235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:20:56.930 [DEBUG] [Thread-17235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:20:56.930 [DEBUG] [Thread-17235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:20:56.932 [DEBUG] [Thread-17235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:20:56.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:20:56.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:20:56.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:20:56.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:20:56.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:20:56.949 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:20:56.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.514324 -999.00  +27.10  25.68     15   -1.00 1 1 1 1 1   888    0 23.71 -149.19 ----- 25.7 25.7 273.0 41.6 31.6 -26.7 31.4 -25.7 31.2 -25.9 31.9 -26.9
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.514324
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:20:56.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:20:22', tmtdew=34.34, humidity=10.26, cloud=0.0, wind=30.9, temperature=27.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:20:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:20:56.950 [DEBUG] [Thread-17235] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:20:57.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:20:57.035 [DEBUG] [Thread-17238] [transport.py] [_log()] starting thread (client mode): 0x14982fe0
2025-11-12T14:20:57.035 [DEBUG] [Thread-17238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:20:57.050 [DEBUG] [Thread-17238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:20:57.050 [INFO] [Thread-17238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:20:57.057 [DEBUG] [Thread-17238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] client lang: <none>
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] server lang: <none>
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] kex follows: False
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] Compression: none
2025-11-12T14:20:57.058 [DEBUG] [Thread-17238] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:20:57.114 [DEBUG] [Thread-17238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:20:57.115 [DEBUG] [Thread-17238] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:20:57.115 [DEBUG] [Thread-17238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:20:57.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:20:57.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:20:57.174 [DEBUG] [Thread-17238] [transport.py] [_log()] userauth is OK
2025-11-12T14:20:57.174 [DEBUG] [Thread-17238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:20:57.175 [DEBUG] [Thread-17238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:20:57.175 [DEBUG] [Thread-17238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:20:57.175 [DEBUG] [Thread-17238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:20:57.188 [INFO] [Thread-17238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:20:57.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:20:57.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:20:58.054 [DEBUG] [Thread-17238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:20:58.054 [DEBUG] [Thread-17238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:20:58.101 [DEBUG] [Thread-17238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:20:58.101 [DEBUG] [Thread-17238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:20:58.110 [DEBUG] [Thread-17238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:20:58.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:20:58.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-11-12T14:20:58.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-11-12T14:20:58.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:20:58.136 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:20:58.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:20:58.144 [DEBUG] [Thread-17238] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:21:07.929 [DEBUG] [Thread-17240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:21:22.984 [DEBUG] [Thread-17241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:21:26.857 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:21:26.858 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:21:28.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:21:28.167 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:21:28.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-11-12T14:21:28.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 20, 54), 33.99, 10.05, 0.0, 35.29, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:21:28.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:20:54
2025-11-12T14:21:28.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:21:29.087 [DEBUG] [Thread-17242] [transport.py] [_log()] starting thread (client mode): 0x17399fc0
2025-11-12T14:21:29.087 [DEBUG] [Thread-17242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:21:29.107 [DEBUG] [Thread-17242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:21:29.107 [INFO] [Thread-17242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:21:29.110 [DEBUG] [Thread-17242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:21:29.110 [DEBUG] [Thread-17242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] client lang: <none>
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] server lang: <none>
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] kex follows: False
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:21:29.111 [DEBUG] [Thread-17242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:21:29.112 [DEBUG] [Thread-17242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:21:29.112 [DEBUG] [Thread-17242] [transport.py] [_log()] Compression: none
2025-11-12T14:21:29.112 [DEBUG] [Thread-17242] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:21:29.129 [DEBUG] [Thread-17242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:21:29.130 [DEBUG] [Thread-17242] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:21:29.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:21:29.131 [DEBUG] [Thread-17242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:21:29.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:21:29.132 [DEBUG] [Thread-17242] [transport.py] [_log()] userauth is OK
2025-11-12T14:21:29.133 [DEBUG] [Thread-17242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:21:29.133 [DEBUG] [Thread-17242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:21:29.133 [DEBUG] [Thread-17242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:21:29.133 [DEBUG] [Thread-17242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:21:29.148 [INFO] [Thread-17242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:21:29.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:21:29.774 [DEBUG] [Thread-17242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:21:29.775 [DEBUG] [Thread-17242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:21:29.775 [DEBUG] [Thread-17242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:21:29.816 [DEBUG] [Thread-17242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:21:29.816 [DEBUG] [Thread-17242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:21:29.820 [DEBUG] [Thread-17242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:21:29.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:21:29.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:21:29.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:21:29.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:21:29.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:21:29.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:21:29.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:21:29.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:21:29.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:21:29.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.514671 -999.00  +27.00  30.54     16   -0.60 1 1 2 1 1   888    0 24.77 -125.30 ----- 30.5 30.5 272.4 35.3 31.6 -26.8 31.4 -24.5 31.1 -26.4 31.9 -24.5
2025-11-12T14:21:29.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:21:29.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:21:29.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.514671
2025-11-12T14:21:29.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:21:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:21:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:21:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:21:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:21:29.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:20:54', tmtdew=33.99, humidity=10.05, cloud=0.0, wind=35.29, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:21:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:21:29.848 [DEBUG] [Thread-17242] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:21:29.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:21:29.940 [DEBUG] [Thread-17245] [transport.py] [_log()] starting thread (client mode): 0x1499f610
2025-11-12T14:21:29.941 [DEBUG] [Thread-17245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:21:29.955 [DEBUG] [Thread-17245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:21:29.955 [INFO] [Thread-17245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] client lang: <none>
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] server lang: <none>
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] kex follows: False
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:21:29.963 [DEBUG] [Thread-17245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:21:29.964 [DEBUG] [Thread-17245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:21:29.964 [DEBUG] [Thread-17245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:21:29.964 [DEBUG] [Thread-17245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:21:29.964 [DEBUG] [Thread-17245] [transport.py] [_log()] Compression: none
2025-11-12T14:21:29.964 [DEBUG] [Thread-17245] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:21:30.025 [DEBUG] [Thread-17245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:21:30.026 [DEBUG] [Thread-17245] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:21:30.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:21:30.027 [DEBUG] [Thread-17245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:21:30.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:21:30.084 [DEBUG] [Thread-17245] [transport.py] [_log()] userauth is OK
2025-11-12T14:21:30.084 [DEBUG] [Thread-17245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:21:30.084 [DEBUG] [Thread-17245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:21:30.085 [DEBUG] [Thread-17245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:21:30.085 [DEBUG] [Thread-17245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:21:30.110 [INFO] [Thread-17245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:21:30.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:21:30.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:21:31.016 [DEBUG] [Thread-17245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:21:31.017 [DEBUG] [Thread-17245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:21:31.056 [DEBUG] [Thread-17245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:21:31.056 [DEBUG] [Thread-17245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:21:31.064 [DEBUG] [Thread-17245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:21:31.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:21: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')
2025-11-12T14:21:31.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-11-12T14:21:31.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:21:31.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:21:31.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:21:31.096 [DEBUG] [Thread-17245] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:21:36.065 [DEBUG] [Thread-17247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:21:38.017 [DEBUG] [Thread-17248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:21:53.073 [DEBUG] [Thread-17249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:22:01.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:22:01.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:22:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:22:01.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 21, 58), 33.7, 10.65, 0.0, 32.52, 27.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:22:01.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:21:58
2025-11-12T14:22:01.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:22:02.042 [DEBUG] [Thread-17250] [transport.py] [_log()] starting thread (client mode): 0x14960d60
2025-11-12T14:22:02.042 [DEBUG] [Thread-17250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:22:02.063 [DEBUG] [Thread-17250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:22:02.063 [INFO] [Thread-17250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:22:02.066 [DEBUG] [Thread-17250] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:22:02.066 [DEBUG] [Thread-17250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:22:02.066 [DEBUG] [Thread-17250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:22:02.066 [DEBUG] [Thread-17250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:22:02.066 [DEBUG] [Thread-17250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] client lang: <none>
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] server lang: <none>
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] kex follows: False
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] Compression: none
2025-11-12T14:22:02.067 [DEBUG] [Thread-17250] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:22:02.079 [DEBUG] [Thread-17250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:22:02.080 [DEBUG] [Thread-17250] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:22:02.080 [DEBUG] [Thread-17250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:22:02.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:22:02.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:22:02.083 [DEBUG] [Thread-17250] [transport.py] [_log()] userauth is OK
2025-11-12T14:22:02.083 [DEBUG] [Thread-17250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:22:02.083 [DEBUG] [Thread-17250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:22:02.083 [DEBUG] [Thread-17250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:22:02.083 [DEBUG] [Thread-17250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:22:02.120 [INFO] [Thread-17250] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:22:02.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:22:02.712 [DEBUG] [Thread-17250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:22:02.713 [DEBUG] [Thread-17250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:22:02.713 [DEBUG] [Thread-17250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:22:02.753 [DEBUG] [Thread-17250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:22:02.754 [DEBUG] [Thread-17250] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:22:02.757 [DEBUG] [Thread-17250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:22:02.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:22:02.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:22:02.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:22:02.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:22:02.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:22:02.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:22:02.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:22:02.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:22:02.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:22:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.515018 -999.00  +27.10  28.44     16   -0.50 1 1 1 1 1   888    0 24.85 -124.24 ----- 28.4 28.4 275.4 34.1 31.6 -26.0 31.3 -25.0 31.1 -22.5 31.9 -24.4
2025-11-12T14:22:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:22:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:22:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.515018
2025-11-12T14:22:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:22:02.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:22:02.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:22:02.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:22:02.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:22:02.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:21:58', tmtdew=33.7, humidity=10.65, cloud=0.0, wind=32.52, temperature=27.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:21:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:22:02.783 [DEBUG] [Thread-17250] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:22:02.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:22:02.878 [DEBUG] [Thread-17253] [transport.py] [_log()] starting thread (client mode): 0x14960850
2025-11-12T14:22:02.879 [DEBUG] [Thread-17253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:22:02.893 [DEBUG] [Thread-17253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:22:02.893 [INFO] [Thread-17253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:22:02.901 [DEBUG] [Thread-17253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:22:02.901 [DEBUG] [Thread-17253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:22:02.902 [DEBUG] [Thread-17253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:22:02.902 [DEBUG] [Thread-17253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:22:02.902 [DEBUG] [Thread-17253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:22:02.902 [DEBUG] [Thread-17253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:22:02.902 [DEBUG] [Thread-17253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:22:02.902 [DEBUG] [Thread-17253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:22:02.902 [DEBUG] [Thread-17253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:22:02.902 [DEBUG] [Thread-17253] [transport.py] [_log()] client lang: <none>
2025-11-12T14:22:02.903 [DEBUG] [Thread-17253] [transport.py] [_log()] server lang: <none>
2025-11-12T14:22:02.903 [DEBUG] [Thread-17253] [transport.py] [_log()] kex follows: False
2025-11-12T14:22:02.903 [DEBUG] [Thread-17253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:22:02.903 [DEBUG] [Thread-17253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:22:02.903 [DEBUG] [Thread-17253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:22:02.903 [DEBUG] [Thread-17253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:22:02.903 [DEBUG] [Thread-17253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:22:02.903 [DEBUG] [Thread-17253] [transport.py] [_log()] Compression: none
2025-11-12T14:22:02.904 [DEBUG] [Thread-17253] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:22:02.959 [DEBUG] [Thread-17253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:22:02.960 [DEBUG] [Thread-17253] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:22:02.960 [DEBUG] [Thread-17253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:22:02.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:22:02.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:22:03.015 [DEBUG] [Thread-17253] [transport.py] [_log()] userauth is OK
2025-11-12T14:22:03.016 [DEBUG] [Thread-17253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:22:03.016 [DEBUG] [Thread-17253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:22:03.016 [DEBUG] [Thread-17253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:22:03.016 [DEBUG] [Thread-17253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:22:03.035 [INFO] [Thread-17253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:22:03.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:22:03.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:22:03.892 [DEBUG] [Thread-17253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:22:03.892 [DEBUG] [Thread-17253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:22:03.939 [DEBUG] [Thread-17253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:22:03.940 [DEBUG] [Thread-17253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:22:03.949 [DEBUG] [Thread-17253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:22:03.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:22:03.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-11-12T14:22:03.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-11-12T14:22:03.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:22:03.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:22:03.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:22:03.986 [DEBUG] [Thread-17253] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:22:08.109 [DEBUG] [Thread-17255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:22:23.169 [DEBUG] [Thread-17256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:22:26.999 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:22:27.000 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:22:34.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:22:34.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:22:34.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-11-12T14:22:34.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 22, 30), 33.7, 10.65, 0.0, 38.48, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:22:34.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:22:30
2025-11-12T14:22:34.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:22:34.918 [DEBUG] [Thread-17257] [transport.py] [_log()] starting thread (client mode): 0x14960a00
2025-11-12T14:22:34.919 [DEBUG] [Thread-17257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:22:34.939 [DEBUG] [Thread-17257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:22:34.939 [INFO] [Thread-17257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] client lang: <none>
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] server lang: <none>
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] kex follows: False
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:22:34.940 [DEBUG] [Thread-17257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:22:34.941 [DEBUG] [Thread-17257] [transport.py] [_log()] Compression: none
2025-11-12T14:22:34.941 [DEBUG] [Thread-17257] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:22:34.948 [DEBUG] [Thread-17257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:22:34.948 [DEBUG] [Thread-17257] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:22:34.949 [DEBUG] [Thread-17257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:22:34.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:22:34.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:22:34.950 [DEBUG] [Thread-17257] [transport.py] [_log()] userauth is OK
2025-11-12T14:22:34.950 [DEBUG] [Thread-17257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:22:34.950 [DEBUG] [Thread-17257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:22:34.950 [DEBUG] [Thread-17257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:22:34.950 [DEBUG] [Thread-17257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:22:34.962 [INFO] [Thread-17257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:22:34.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:22:35.605 [DEBUG] [Thread-17257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:22:35.605 [DEBUG] [Thread-17257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:22:35.605 [DEBUG] [Thread-17257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:22:35.646 [DEBUG] [Thread-17257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:22:35.646 [DEBUG] [Thread-17257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:22:35.650 [DEBUG] [Thread-17257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:22:35.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:22:35.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:22:35.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:22:35.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:22:35.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:22:35.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:22:35.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:22:35.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:22:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:22:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.515366 -999.00  +27.30  31.45     15   -0.90 1 1 2 1 1   888    0 24.52 -123.03 ----- 31.4 31.4 278.6 40.2 31.6 -26.1 31.3 -24.4 31.2 -23.6 31.9 -24.3
2025-11-12T14:22:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:22:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:22:35.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.515366
2025-11-12T14:22:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:22:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:22:35.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:22:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:22:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:22:35.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:22:30', tmtdew=33.7, humidity=10.65, cloud=0.0, wind=38.48, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:22:07.622', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:22:35.678 [DEBUG] [Thread-17257] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:22:35.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:22:35.774 [DEBUG] [Thread-17260] [transport.py] [_log()] starting thread (client mode): 0x14961750
2025-11-12T14:22:35.775 [DEBUG] [Thread-17260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:22:35.789 [DEBUG] [Thread-17260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:22:35.789 [INFO] [Thread-17260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:22:35.797 [DEBUG] [Thread-17260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:22:35.797 [DEBUG] [Thread-17260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:22:35.797 [DEBUG] [Thread-17260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:22:35.797 [DEBUG] [Thread-17260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:22:35.797 [DEBUG] [Thread-17260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:22:35.797 [DEBUG] [Thread-17260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:22:35.797 [DEBUG] [Thread-17260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:22:35.797 [DEBUG] [Thread-17260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] client lang: <none>
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] server lang: <none>
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] kex follows: False
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] Compression: none
2025-11-12T14:22:35.798 [DEBUG] [Thread-17260] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:22:35.855 [DEBUG] [Thread-17260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:22:35.856 [DEBUG] [Thread-17260] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:22:35.856 [DEBUG] [Thread-17260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:22:35.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:22:35.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:22:35.912 [DEBUG] [Thread-17260] [transport.py] [_log()] userauth is OK
2025-11-12T14:22:35.912 [DEBUG] [Thread-17260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:22:35.912 [DEBUG] [Thread-17260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:22:35.912 [DEBUG] [Thread-17260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:22:35.912 [DEBUG] [Thread-17260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:22:35.936 [INFO] [Thread-17260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:22:35.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:22:35.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:22:36.121 [DEBUG] [Thread-17262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:22:36.835 [DEBUG] [Thread-17260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:22:36.835 [DEBUG] [Thread-17260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:22:36.884 [DEBUG] [Thread-17260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:22:36.884 [DEBUG] [Thread-17260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:22:36.893 [DEBUG] [Thread-17260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:22:36.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:22:36.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-11-12T14:22:36.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:22:36.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:22:36.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:22:36.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:22:36.934 [DEBUG] [Thread-17260] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:22:38.205 [DEBUG] [Thread-17263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:22:53.259 [DEBUG] [Thread-17264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:23:06.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:23:06.943 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:23:06.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-11-12T14:23:07.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 23, 2), 33.63, 10.68, 0.0, 32.69, 27.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:23:07.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:23:02
2025-11-12T14:23:07.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:23:07.872 [DEBUG] [Thread-17265] [transport.py] [_log()] starting thread (client mode): 0x1499e200
2025-11-12T14:23:07.872 [DEBUG] [Thread-17265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:23:07.892 [DEBUG] [Thread-17265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:23:07.892 [INFO] [Thread-17265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] client lang: <none>
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] server lang: <none>
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] kex follows: False
2025-11-12T14:23:07.896 [DEBUG] [Thread-17265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:23:07.897 [DEBUG] [Thread-17265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:23:07.897 [DEBUG] [Thread-17265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:23:07.897 [DEBUG] [Thread-17265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:23:07.897 [DEBUG] [Thread-17265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:23:07.897 [DEBUG] [Thread-17265] [transport.py] [_log()] Compression: none
2025-11-12T14:23:07.897 [DEBUG] [Thread-17265] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:23:07.916 [DEBUG] [Thread-17265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:23:07.917 [DEBUG] [Thread-17265] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:23:07.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:23:07.919 [DEBUG] [Thread-17265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:23:07.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:23:07.921 [DEBUG] [Thread-17265] [transport.py] [_log()] userauth is OK
2025-11-12T14:23:07.921 [DEBUG] [Thread-17265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:23:07.922 [DEBUG] [Thread-17265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:23:07.922 [DEBUG] [Thread-17265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:23:07.922 [DEBUG] [Thread-17265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:23:07.943 [INFO] [Thread-17265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:23:07.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:23:08.289 [DEBUG] [Thread-17267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:23:08.600 [DEBUG] [Thread-17265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:23:08.600 [DEBUG] [Thread-17265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:23:08.601 [DEBUG] [Thread-17265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:23:08.641 [DEBUG] [Thread-17265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:23:08.642 [DEBUG] [Thread-17265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:23:08.644 [DEBUG] [Thread-17265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:23:08.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:23:08.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:23:08.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:23:08.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:23:08.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:23:08.666 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:23:08.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:23:08.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:23:08.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:23:08.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.515712 -999.00  +27.10  25.84     16   -0.80 1 1 1 1 1   888    0 24.66 -96.42 ----- 25.8 25.8 287.1 38.1 31.4 -26.9 31.2 -25.2 30.9 -25.5 31.8 -25.7
2025-11-12T14:23:08.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:23:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:23:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.515712
2025-11-12T14:23:08.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:23:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:23:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:23:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:23:08.669 [DEBUG] [Thread-17265] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:23:08.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:23:08.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:23:02', tmtdew=33.63, humidity=10.68, cloud=0.0, wind=32.69, temperature=27.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:22:37.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:23:08.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:23:08.764 [DEBUG] [Thread-17269] [transport.py] [_log()] starting thread (client mode): 0x1737e890
2025-11-12T14:23:08.765 [DEBUG] [Thread-17269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:23:08.780 [DEBUG] [Thread-17269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:23:08.780 [INFO] [Thread-17269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] client lang: <none>
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] server lang: <none>
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] kex follows: False
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:23:08.788 [DEBUG] [Thread-17269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:23:08.789 [DEBUG] [Thread-17269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:23:08.789 [DEBUG] [Thread-17269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:23:08.789 [DEBUG] [Thread-17269] [transport.py] [_log()] Compression: none
2025-11-12T14:23:08.789 [DEBUG] [Thread-17269] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:23:08.848 [DEBUG] [Thread-17269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:23:08.849 [DEBUG] [Thread-17269] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:23:08.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:23:08.850 [DEBUG] [Thread-17269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:23:08.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:23:08.904 [DEBUG] [Thread-17269] [transport.py] [_log()] userauth is OK
2025-11-12T14:23:08.904 [DEBUG] [Thread-17269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:23:08.904 [DEBUG] [Thread-17269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:23:08.905 [DEBUG] [Thread-17269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:23:08.905 [DEBUG] [Thread-17269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:23:08.923 [INFO] [Thread-17269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:23:08.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:23:08.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:23:09.766 [DEBUG] [Thread-17269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:23:09.766 [DEBUG] [Thread-17269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:23:09.814 [DEBUG] [Thread-17269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:23:09.814 [DEBUG] [Thread-17269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:23:09.823 [DEBUG] [Thread-17269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:23:09.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:23:09.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-11-12T14:23:09.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-11-12T14:23:09.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:23:09.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:23:09.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:23:09.860 [DEBUG] [Thread-17269] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:23:23.328 [DEBUG] [Thread-17271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:23:27.142 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:23:27.143 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:23:36.148 [DEBUG] [Thread-17272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:23:38.381 [DEBUG] [Thread-17273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:23:39.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:23:39.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:23:39.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-11-12T14:23:40.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 23, 34), 34.08, 10.23, 0.0, 34.62, 27.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:23:40.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:23:34
2025-11-12T14:23:40.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:23:40.791 [DEBUG] [Thread-17274] [transport.py] [_log()] starting thread (client mode): 0x1737dcf0
2025-11-12T14:23:40.791 [DEBUG] [Thread-17274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:23:40.811 [DEBUG] [Thread-17274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:23:40.811 [INFO] [Thread-17274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:23:40.814 [DEBUG] [Thread-17274] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:23:40.814 [DEBUG] [Thread-17274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:23:40.814 [DEBUG] [Thread-17274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] client lang: <none>
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] server lang: <none>
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] kex follows: False
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:23:40.815 [DEBUG] [Thread-17274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:23:40.816 [DEBUG] [Thread-17274] [transport.py] [_log()] Compression: none
2025-11-12T14:23:40.816 [DEBUG] [Thread-17274] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:23:40.834 [DEBUG] [Thread-17274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:23:40.835 [DEBUG] [Thread-17274] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:23:40.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:23:40.836 [DEBUG] [Thread-17274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:23:40.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:23:40.838 [DEBUG] [Thread-17274] [transport.py] [_log()] userauth is OK
2025-11-12T14:23:40.838 [DEBUG] [Thread-17274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:23:40.839 [DEBUG] [Thread-17274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:23:40.839 [DEBUG] [Thread-17274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:23:40.839 [DEBUG] [Thread-17274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:23:40.875 [INFO] [Thread-17274] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:23:40.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:23:41.492 [DEBUG] [Thread-17274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:23:41.492 [DEBUG] [Thread-17274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:23:41.492 [DEBUG] [Thread-17274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:23:41.533 [DEBUG] [Thread-17274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:23:41.533 [DEBUG] [Thread-17274] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:23:41.536 [DEBUG] [Thread-17274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:23:41.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:23:41.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:23:41.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:23:41.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:23:41.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:23:41.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:23:41.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:23:41.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:23:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:23:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.516060 -999.00  +27.20  30.03     15   -1.00 1 1 2 1 1   888    0 25.58 -88.86 ----- 30.0 30.0 271.4 35.5 31.4 -26.1 31.2 -23.8 31.0 -25.8 31.8 -23.7
2025-11-12T14:23:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:23:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:23:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.516060
2025-11-12T14:23:41.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:23:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:23:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:23:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:23:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:23:41.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:23:34', tmtdew=34.08, humidity=10.23, cloud=0.0, wind=34.62, temperature=27.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:23:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:23:41.557 [DEBUG] [Thread-17274] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:23:41.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:23:41.653 [DEBUG] [Thread-17277] [transport.py] [_log()] starting thread (client mode): 0x14960c10
2025-11-12T14:23:41.653 [DEBUG] [Thread-17277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:23:41.668 [DEBUG] [Thread-17277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:23:41.669 [INFO] [Thread-17277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:23:41.675 [DEBUG] [Thread-17277] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] client lang: <none>
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] server lang: <none>
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] kex follows: False
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] Compression: none
2025-11-12T14:23:41.676 [DEBUG] [Thread-17277] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:23:41.735 [DEBUG] [Thread-17277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:23:41.735 [DEBUG] [Thread-17277] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:23:41.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:23:41.736 [DEBUG] [Thread-17277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:23:41.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:23:41.791 [DEBUG] [Thread-17277] [transport.py] [_log()] userauth is OK
2025-11-12T14:23:41.791 [DEBUG] [Thread-17277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:23:41.791 [DEBUG] [Thread-17277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:23:41.791 [DEBUG] [Thread-17277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:23:41.791 [DEBUG] [Thread-17277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:23:41.814 [INFO] [Thread-17277] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:23:41.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:23:41.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:23:42.662 [DEBUG] [Thread-17277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:23:42.663 [DEBUG] [Thread-17277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:23:42.712 [DEBUG] [Thread-17277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:23:42.712 [DEBUG] [Thread-17277] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:23:42.721 [DEBUG] [Thread-17277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:23:42.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:23:42.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:23:42.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:23:42.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:23:42.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:23:42.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:23:42.758 [DEBUG] [Thread-17277] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:23:53.424 [DEBUG] [Thread-17279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:24:08.473 [DEBUG] [Thread-17280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:24:12.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:24:12.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:24:12.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-11-12T14:24:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 24, 6), 34.22, 10.11, 0.0, 31.5, 27.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:24:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:24:06
2025-11-12T14:24:13.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:24:13.683 [DEBUG] [Thread-17281] [transport.py] [_log()] starting thread (client mode): 0x149202e0
2025-11-12T14:24:13.683 [DEBUG] [Thread-17281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:24:13.704 [DEBUG] [Thread-17281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:24:13.705 [INFO] [Thread-17281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:24:13.707 [DEBUG] [Thread-17281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] client lang: <none>
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] server lang: <none>
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] kex follows: False
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] Compression: none
2025-11-12T14:24:13.708 [DEBUG] [Thread-17281] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:24:13.726 [DEBUG] [Thread-17281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:24:13.726 [DEBUG] [Thread-17281] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:24:13.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:24:13.728 [DEBUG] [Thread-17281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:24:13.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:24:13.730 [DEBUG] [Thread-17281] [transport.py] [_log()] userauth is OK
2025-11-12T14:24:13.730 [DEBUG] [Thread-17281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:24:13.730 [DEBUG] [Thread-17281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:24:13.730 [DEBUG] [Thread-17281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:24:13.730 [DEBUG] [Thread-17281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:24:13.750 [INFO] [Thread-17281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:24:13.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:24:14.391 [DEBUG] [Thread-17281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:24:14.391 [DEBUG] [Thread-17281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:24:14.392 [DEBUG] [Thread-17281] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:24:14.433 [DEBUG] [Thread-17281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:24:14.433 [DEBUG] [Thread-17281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:24:14.436 [DEBUG] [Thread-17281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:24:14.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:24:14.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:24:14.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:24:14.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:24:14.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:24:14.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:24:14.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:24:14.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:24:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:24:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.516407 -999.00  +27.20  38.29     15   -0.80 1 1 2 1 1   888    0 25.64 -77.99 ----- 38.3 38.3 270.0 46.3 31.4 -26.0 31.2 -24.4 30.9 -25.8 31.8 -25.8
2025-11-12T14:24:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:24:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:24:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.516407
2025-11-12T14:24:14.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:24:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:24:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:24:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:24:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:24:14.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:24:06', tmtdew=34.22, humidity=10.11, cloud=0.0, wind=31.5, temperature=27.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:23:37.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:24:14.463 [DEBUG] [Thread-17281] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:24: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-11-12T14:24:14.560 [DEBUG] [Thread-17284] [transport.py] [_log()] starting thread (client mode): 0x173bc370
2025-11-12T14:24:14.561 [DEBUG] [Thread-17284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:24:14.575 [DEBUG] [Thread-17284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:24:14.576 [INFO] [Thread-17284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:24:14.583 [DEBUG] [Thread-17284] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:24:14.583 [DEBUG] [Thread-17284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:24:14.583 [DEBUG] [Thread-17284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:24:14.583 [DEBUG] [Thread-17284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:24:14.583 [DEBUG] [Thread-17284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] client lang: <none>
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] server lang: <none>
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] kex follows: False
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] Compression: none
2025-11-12T14:24:14.584 [DEBUG] [Thread-17284] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:24:14.643 [DEBUG] [Thread-17284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:24:14.644 [DEBUG] [Thread-17284] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:24:14.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:24:14.645 [DEBUG] [Thread-17284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:24:14.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:24:14.699 [DEBUG] [Thread-17284] [transport.py] [_log()] userauth is OK
2025-11-12T14:24:14.700 [DEBUG] [Thread-17284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:24:14.700 [DEBUG] [Thread-17284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:24:14.700 [DEBUG] [Thread-17284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:24:14.700 [DEBUG] [Thread-17284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:24:14.718 [INFO] [Thread-17284] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:24:14.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:24:14.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:24:15.591 [DEBUG] [Thread-17284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:24:15.591 [DEBUG] [Thread-17284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:24:15.638 [DEBUG] [Thread-17284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:24:15.638 [DEBUG] [Thread-17284] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:24:15.647 [DEBUG] [Thread-17284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:24:15.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:24:15.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-11-12T14:24:15.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:24:15.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:24:15.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:24:15.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:24:15.681 [DEBUG] [Thread-17284] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:24:23.506 [DEBUG] [Thread-17286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:24:27.283 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:24:27.285 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:24:36.181 [DEBUG] [Thread-17287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:24:38.560 [DEBUG] [Thread-17288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:24:45.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:24:45.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:24:45.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-11-12T14:24:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 24, 38), 33.19, 10.7, 0.0, 29.8, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:24:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:24:38
2025-11-12T14:24:46.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:24:46.646 [DEBUG] [Thread-17289] [transport.py] [_log()] starting thread (client mode): 0x14920c10
2025-11-12T14:24:46.646 [DEBUG] [Thread-17289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:24:46.667 [DEBUG] [Thread-17289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:24:46.667 [INFO] [Thread-17289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:24:46.670 [DEBUG] [Thread-17289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:24:46.670 [DEBUG] [Thread-17289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] client lang: <none>
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] server lang: <none>
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] kex follows: False
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] Compression: none
2025-11-12T14:24:46.671 [DEBUG] [Thread-17289] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:24:46.682 [DEBUG] [Thread-17289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:24:46.683 [DEBUG] [Thread-17289] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:24:46.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:24:46.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:24:46.692 [DEBUG] [Thread-17289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:24:46.692 [DEBUG] [Thread-17289] [transport.py] [_log()] userauth is OK
2025-11-12T14:24:46.692 [DEBUG] [Thread-17289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:24:46.692 [DEBUG] [Thread-17289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:24:46.692 [DEBUG] [Thread-17289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:24:46.692 [DEBUG] [Thread-17289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:24:46.701 [INFO] [Thread-17289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:24:46.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:24:47.354 [DEBUG] [Thread-17289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:24:47.354 [DEBUG] [Thread-17289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:24:47.354 [DEBUG] [Thread-17289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:24:47.395 [DEBUG] [Thread-17289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:24:47.395 [DEBUG] [Thread-17289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:24:47.397 [DEBUG] [Thread-17289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:24:47.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:24:47.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:24:47.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:24:47.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:24:47.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:24:47.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:24:47.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.516754 -999.00  +26.30  37.42     16   -0.90 1 1 2 1 1   888    0 25.96 -67.56 ----- 37.4 37.4 275.8 45.5 31.2 -28.3 31.1 -26.5 30.7 -24.1 31.6 -27.2
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.516754
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:24:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:24:38', tmtdew=33.19, humidity=10.7, cloud=0.0, wind=29.8, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:24:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:24:47.417 [DEBUG] [Thread-17289] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:24:47.489 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:24:47.501 [DEBUG] [Thread-17292] [transport.py] [_log()] starting thread (client mode): 0x14980c70
2025-11-12T14:24:47.501 [DEBUG] [Thread-17292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:24:47.515 [DEBUG] [Thread-17292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:24:47.515 [INFO] [Thread-17292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:24:47.523 [DEBUG] [Thread-17292] [transport.py] [_log()] client lang: <none>
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] server lang: <none>
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] kex follows: False
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] Compression: none
2025-11-12T14:24:47.524 [DEBUG] [Thread-17292] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:24:47.581 [DEBUG] [Thread-17292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:24:47.581 [DEBUG] [Thread-17292] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:24:47.581 [DEBUG] [Thread-17292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:24:47.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:24:47.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:24:47.643 [DEBUG] [Thread-17292] [transport.py] [_log()] userauth is OK
2025-11-12T14:24:47.643 [DEBUG] [Thread-17292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:24:47.643 [DEBUG] [Thread-17292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:24:47.643 [DEBUG] [Thread-17292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:24:47.643 [DEBUG] [Thread-17292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:24:47.657 [INFO] [Thread-17292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:24:47.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:24:47.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:24:48.512 [DEBUG] [Thread-17292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:24:48.512 [DEBUG] [Thread-17292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:24:48.560 [DEBUG] [Thread-17292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:24:48.560 [DEBUG] [Thread-17292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:24:48.568 [DEBUG] [Thread-17292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:24:48.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:24:48.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-11-12T14:24:48.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-11-12T14:24:48.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:24:48.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:24:48.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:24:48.600 [DEBUG] [Thread-17292] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:24:53.589 [DEBUG] [Thread-17294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:25:08.643 [DEBUG] [Thread-17295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:25:18.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:25:18.623 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:25:18.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-11-12T14:25:19.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 25, 10), 33.21, 10.73, 0.0, 26.36, 27.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:25:19.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:25:10
2025-11-12T14:25:19.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:25:19.541 [DEBUG] [Thread-17296] [transport.py] [_log()] starting thread (client mode): 0x19dda320
2025-11-12T14:25:19.541 [DEBUG] [Thread-17296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:25:19.561 [DEBUG] [Thread-17296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:25:19.561 [INFO] [Thread-17296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:25:19.565 [DEBUG] [Thread-17296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:25:19.565 [DEBUG] [Thread-17296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:25:19.565 [DEBUG] [Thread-17296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:25:19.565 [DEBUG] [Thread-17296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:25:19.565 [DEBUG] [Thread-17296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:25:19.565 [DEBUG] [Thread-17296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] client lang: <none>
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] server lang: <none>
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] kex follows: False
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] Compression: none
2025-11-12T14:25:19.566 [DEBUG] [Thread-17296] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:25:19.586 [DEBUG] [Thread-17296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:25:19.587 [DEBUG] [Thread-17296] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:25:19.587 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:25:19.588 [DEBUG] [Thread-17296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:25:19.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:25:19.590 [DEBUG] [Thread-17296] [transport.py] [_log()] userauth is OK
2025-11-12T14:25:19.590 [DEBUG] [Thread-17296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:25:19.590 [DEBUG] [Thread-17296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:25:19.590 [DEBUG] [Thread-17296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:25:19.590 [DEBUG] [Thread-17296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:25:19.606 [INFO] [Thread-17296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:25:19.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:25:20.210 [DEBUG] [Thread-17296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:25:20.211 [DEBUG] [Thread-17296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:25:20.211 [DEBUG] [Thread-17296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:25:20.251 [DEBUG] [Thread-17296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:25:20.252 [DEBUG] [Thread-17296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:25:20.255 [DEBUG] [Thread-17296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:25:20.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:25:20.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:25:20.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:25:20.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:25:20.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:25:20.280 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:25:20.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:25:20.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:25:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:25:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.517448 -999.00  +26.00  18.16     17   -0.70 1 1 1 1 1   888    0 26.25 -55.97 ----- 18.2 18.2 275.4 28.1 31.0 -26.7 30.9 -24.3 30.5 -28.0 31.4 -24.4
2025-11-12T14:25:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:25:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:25:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.517448
2025-11-12T14:25:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:25:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:25:20.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:25:20.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:25:20.283 [DEBUG] [Thread-17296] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:25:20.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:25:20.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:25:10', tmtdew=33.21, humidity=10.73, cloud=0.0, wind=26.36, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:25:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:25:20.366 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:25:20.379 [DEBUG] [Thread-17299] [transport.py] [_log()] starting thread (client mode): 0x19dd96c0
2025-11-12T14:25:20.379 [DEBUG] [Thread-17299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:25:20.396 [DEBUG] [Thread-17299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:25:20.396 [INFO] [Thread-17299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:25:20.404 [DEBUG] [Thread-17299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:25:20.404 [DEBUG] [Thread-17299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:25:20.404 [DEBUG] [Thread-17299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:25:20.404 [DEBUG] [Thread-17299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:25:20.404 [DEBUG] [Thread-17299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:25:20.404 [DEBUG] [Thread-17299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:25:20.405 [DEBUG] [Thread-17299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:25:20.405 [DEBUG] [Thread-17299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:25:20.405 [DEBUG] [Thread-17299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:25:20.405 [DEBUG] [Thread-17299] [transport.py] [_log()] client lang: <none>
2025-11-12T14:25:20.405 [DEBUG] [Thread-17299] [transport.py] [_log()] server lang: <none>
2025-11-12T14:25:20.405 [DEBUG] [Thread-17299] [transport.py] [_log()] kex follows: False
2025-11-12T14:25:20.405 [DEBUG] [Thread-17299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:25:20.405 [DEBUG] [Thread-17299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:25:20.406 [DEBUG] [Thread-17299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:25:20.406 [DEBUG] [Thread-17299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:25:20.406 [DEBUG] [Thread-17299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:25:20.406 [DEBUG] [Thread-17299] [transport.py] [_log()] Compression: none
2025-11-12T14:25:20.406 [DEBUG] [Thread-17299] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:25:20.463 [DEBUG] [Thread-17299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:25:20.464 [DEBUG] [Thread-17299] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:25:20.464 [DEBUG] [Thread-17299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:25:20.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:25:20.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:25:20.519 [DEBUG] [Thread-17299] [transport.py] [_log()] userauth is OK
2025-11-12T14:25:20.519 [DEBUG] [Thread-17299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:25:20.519 [DEBUG] [Thread-17299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:25:20.520 [DEBUG] [Thread-17299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:25:20.520 [DEBUG] [Thread-17299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:25:20.539 [INFO] [Thread-17299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:25:20.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:25:20.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:25:21.429 [DEBUG] [Thread-17299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:25:21.429 [DEBUG] [Thread-17299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:25:21.478 [DEBUG] [Thread-17299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:25:21.478 [DEBUG] [Thread-17299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:25:21.487 [DEBUG] [Thread-17299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:25:21.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:25:21.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-11-12T14:25:21.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-11-12T14:25:21.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:25:21.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:25:21.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:25:21.525 [DEBUG] [Thread-17299] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:25:23.673 [DEBUG] [Thread-17301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:25:27.427 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:25:27.428 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:25:36.215 [DEBUG] [Thread-17302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:25:38.715 [DEBUG] [Thread-17303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:25:51.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:25:51.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:25:51.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-11-12T14:25:52.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 25, 42), 33.78, 10.43, 0.0, 23.47, 27.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:25:52.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:25:42
2025-11-12T14:25:52.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:25:52.456 [DEBUG] [Thread-17304] [transport.py] [_log()] starting thread (client mode): 0x14983b80
2025-11-12T14:25:52.457 [DEBUG] [Thread-17304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:25:52.476 [DEBUG] [Thread-17304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:25:52.477 [INFO] [Thread-17304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:25:52.477 [DEBUG] [Thread-17304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] client lang: <none>
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] server lang: <none>
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] kex follows: False
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] Compression: none
2025-11-12T14:25:52.478 [DEBUG] [Thread-17304] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:25:52.486 [DEBUG] [Thread-17304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:25:52.486 [DEBUG] [Thread-17304] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:25:52.487 [DEBUG] [Thread-17304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:25:52.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:25:52.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:25:52.488 [DEBUG] [Thread-17304] [transport.py] [_log()] userauth is OK
2025-11-12T14:25:52.488 [DEBUG] [Thread-17304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:25:52.489 [DEBUG] [Thread-17304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:25:52.489 [DEBUG] [Thread-17304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:25:52.489 [DEBUG] [Thread-17304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:25:52.512 [INFO] [Thread-17304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:25:52.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:25:53.164 [DEBUG] [Thread-17304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:25:53.164 [DEBUG] [Thread-17304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:25:53.164 [DEBUG] [Thread-17304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:25:53.204 [DEBUG] [Thread-17304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:25:53.205 [DEBUG] [Thread-17304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:25:53.208 [DEBUG] [Thread-17304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:25:53.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:25:53.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:25:53.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:25:53.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:25:53.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:25:53.234 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:25:53.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:25:53.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:25:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:25:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.517796 -999.00  +26.50  20.24     16   -0.70 1 1 1 1 1   888    0 26.46 -51.87 ----- 20.2 20.2 275.6 31.5 31.0 -25.8 30.9 -24.5 30.6 -22.4 31.3 -25.2
2025-11-12T14:25:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:25:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:25:53.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.517796
2025-11-12T14:25:53.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:25:53.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:25:53.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:25:53.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:25:53.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:25:53.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:25:42', tmtdew=33.78, humidity=10.43, cloud=0.0, wind=23.47, temperature=27.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:25:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:25:53.237 [DEBUG] [Thread-17304] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:25:53.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:25:53.331 [DEBUG] [Thread-17307] [transport.py] [_log()] starting thread (client mode): 0x149806d0
2025-11-12T14:25:53.332 [DEBUG] [Thread-17307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:25:53.346 [DEBUG] [Thread-17307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:25:53.346 [INFO] [Thread-17307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:25:53.354 [DEBUG] [Thread-17307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:25:53.354 [DEBUG] [Thread-17307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:25:53.354 [DEBUG] [Thread-17307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:25:53.354 [DEBUG] [Thread-17307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:25:53.354 [DEBUG] [Thread-17307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:25:53.354 [DEBUG] [Thread-17307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:25:53.354 [DEBUG] [Thread-17307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] client lang: <none>
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] server lang: <none>
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] kex follows: False
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:25:53.355 [DEBUG] [Thread-17307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:25:53.356 [DEBUG] [Thread-17307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:25:53.356 [DEBUG] [Thread-17307] [transport.py] [_log()] Compression: none
2025-11-12T14:25:53.356 [DEBUG] [Thread-17307] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:25:53.411 [DEBUG] [Thread-17307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:25:53.412 [DEBUG] [Thread-17307] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:25:53.413 [DEBUG] [Thread-17307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:25:53.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:25:53.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:25:53.467 [DEBUG] [Thread-17307] [transport.py] [_log()] userauth is OK
2025-11-12T14:25:53.467 [DEBUG] [Thread-17307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:25:53.467 [DEBUG] [Thread-17307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:25:53.467 [DEBUG] [Thread-17307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:25:53.467 [DEBUG] [Thread-17307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:25:53.486 [INFO] [Thread-17307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:25:53.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:25:53.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:25:53.752 [DEBUG] [Thread-17309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:25:54.347 [DEBUG] [Thread-17307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:25:54.347 [DEBUG] [Thread-17307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:25:54.396 [DEBUG] [Thread-17307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:25:54.396 [DEBUG] [Thread-17307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:25:54.405 [DEBUG] [Thread-17307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:25:54.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:25:54.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:25:54.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:25:54.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:25:54.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:25:54.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:25:54.441 [DEBUG] [Thread-17307] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:26:08.808 [DEBUG] [Thread-17310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:26:23.846 [DEBUG] [Thread-17311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:26:24.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:26:24.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:26:24.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:26:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 26, 14), 33.63, 10.51, 0.0, 22.6, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:26:25.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:26:14
2025-11-12T14:26:25.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:26:25.369 [DEBUG] [Thread-17312] [transport.py] [_log()] starting thread (client mode): 0x173be5f0
2025-11-12T14:26:25.369 [DEBUG] [Thread-17312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:26:25.390 [DEBUG] [Thread-17312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:26:25.390 [INFO] [Thread-17312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:26:25.393 [DEBUG] [Thread-17312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] client lang: <none>
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] server lang: <none>
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] kex follows: False
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:26:25.394 [DEBUG] [Thread-17312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:26:25.395 [DEBUG] [Thread-17312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:26:25.395 [DEBUG] [Thread-17312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:26:25.395 [DEBUG] [Thread-17312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:26:25.395 [DEBUG] [Thread-17312] [transport.py] [_log()] Compression: none
2025-11-12T14:26:25.395 [DEBUG] [Thread-17312] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:26:25.412 [DEBUG] [Thread-17312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:26:25.413 [DEBUG] [Thread-17312] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:26:25.413 [DEBUG] [Thread-17312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:26:25.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:26:25.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:26:25.415 [DEBUG] [Thread-17312] [transport.py] [_log()] userauth is OK
2025-11-12T14:26:25.416 [DEBUG] [Thread-17312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:26:25.416 [DEBUG] [Thread-17312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:26:25.416 [DEBUG] [Thread-17312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:26:25.416 [DEBUG] [Thread-17312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:26:25.439 [INFO] [Thread-17312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:26:25.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:26:26.076 [DEBUG] [Thread-17312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:26:26.076 [DEBUG] [Thread-17312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:26:26.077 [DEBUG] [Thread-17312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:26:26.117 [DEBUG] [Thread-17312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:26:26.117 [DEBUG] [Thread-17312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:26:26.120 [DEBUG] [Thread-17312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:26:26.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:26:26.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:26:26.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:26:26.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:26:26.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:26:26.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:26:26.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:26:26.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:26:26.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:26:26.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.518143 -999.00  +26.70  20.10     16   -0.80 1 1 1 1 1   888    0 26.18 -40.19 ----- 20.1 20.1 283.2 39.3 31.1 -26.2 30.9 -23.7 30.7 -24.9 31.4 -24.9
2025-11-12T14:26:26.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:26:26.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:26:26.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.518143
2025-11-12T14:26:26.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:26:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:26:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:26:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:26:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:26:26.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:26:14', tmtdew=33.63, humidity=10.51, cloud=0.0, wind=22.6, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:26:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:26:26.148 [DEBUG] [Thread-17312] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:26:26.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:26:26.245 [DEBUG] [Thread-17315] [transport.py] [_log()] starting thread (client mode): 0x14960b80
2025-11-12T14:26:26.245 [DEBUG] [Thread-17315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:26:26.260 [DEBUG] [Thread-17315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:26:26.261 [INFO] [Thread-17315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:26:26.268 [DEBUG] [Thread-17315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:26:26.269 [DEBUG] [Thread-17315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:26:26.269 [DEBUG] [Thread-17315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:26:26.269 [DEBUG] [Thread-17315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:26:26.269 [DEBUG] [Thread-17315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:26:26.269 [DEBUG] [Thread-17315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:26:26.269 [DEBUG] [Thread-17315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:26:26.270 [DEBUG] [Thread-17315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:26:26.270 [DEBUG] [Thread-17315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:26:26.270 [DEBUG] [Thread-17315] [transport.py] [_log()] client lang: <none>
2025-11-12T14:26:26.270 [DEBUG] [Thread-17315] [transport.py] [_log()] server lang: <none>
2025-11-12T14:26:26.270 [DEBUG] [Thread-17315] [transport.py] [_log()] kex follows: False
2025-11-12T14:26:26.270 [DEBUG] [Thread-17315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:26:26.270 [DEBUG] [Thread-17315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:26:26.270 [DEBUG] [Thread-17315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:26:26.271 [DEBUG] [Thread-17315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:26:26.271 [DEBUG] [Thread-17315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:26:26.271 [DEBUG] [Thread-17315] [transport.py] [_log()] Compression: none
2025-11-12T14:26:26.271 [DEBUG] [Thread-17315] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:26:26.328 [DEBUG] [Thread-17315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:26:26.328 [DEBUG] [Thread-17315] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:26:26.329 [DEBUG] [Thread-17315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:26:26.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:26:26.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:26:26.387 [DEBUG] [Thread-17315] [transport.py] [_log()] userauth is OK
2025-11-12T14:26:26.388 [DEBUG] [Thread-17315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:26:26.388 [DEBUG] [Thread-17315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:26:26.388 [DEBUG] [Thread-17315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:26:26.388 [DEBUG] [Thread-17315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:26:26.407 [INFO] [Thread-17315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:26:26.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:26:26.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:26:27.263 [DEBUG] [Thread-17315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:26:27.263 [DEBUG] [Thread-17315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:26:27.311 [DEBUG] [Thread-17315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:26:27.311 [DEBUG] [Thread-17315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:26:27.321 [DEBUG] [Thread-17315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:26:27.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:26:27.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-11-12T14:26:27.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-11-12T14:26:27.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:26:27.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:26:27.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:26:27.359 [DEBUG] [Thread-17315] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:26:27.569 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:26:27.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:26:36.248 [DEBUG] [Thread-17317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:26:38.885 [DEBUG] [Thread-17318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:26:53.932 [DEBUG] [Thread-17319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:26:57.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:26:57.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:26:57.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-11-12T14:26:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 26, 46), 33.97, 10.56, 0.0, 33.51, 28.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:26:58.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:26:46
2025-11-12T14:26:58.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:26:58.271 [DEBUG] [Thread-17320] [transport.py] [_log()] starting thread (client mode): 0x173628c0
2025-11-12T14:26:58.272 [DEBUG] [Thread-17320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:26:58.290 [DEBUG] [Thread-17320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:26:58.291 [INFO] [Thread-17320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] client lang: <none>
2025-11-12T14:26:58.294 [DEBUG] [Thread-17320] [transport.py] [_log()] server lang: <none>
2025-11-12T14:26:58.295 [DEBUG] [Thread-17320] [transport.py] [_log()] kex follows: False
2025-11-12T14:26:58.295 [DEBUG] [Thread-17320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:26:58.295 [DEBUG] [Thread-17320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:26:58.295 [DEBUG] [Thread-17320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:26:58.295 [DEBUG] [Thread-17320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:26:58.295 [DEBUG] [Thread-17320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:26:58.295 [DEBUG] [Thread-17320] [transport.py] [_log()] Compression: none
2025-11-12T14:26:58.295 [DEBUG] [Thread-17320] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:26:58.313 [DEBUG] [Thread-17320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:26:58.314 [DEBUG] [Thread-17320] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:26:58.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:26:58.315 [DEBUG] [Thread-17320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:26:58.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:26:58.317 [DEBUG] [Thread-17320] [transport.py] [_log()] userauth is OK
2025-11-12T14:26:58.317 [DEBUG] [Thread-17320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:26:58.317 [DEBUG] [Thread-17320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:26:58.317 [DEBUG] [Thread-17320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:26:58.317 [DEBUG] [Thread-17320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:26:58.332 [INFO] [Thread-17320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:26:58.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:26:58.955 [DEBUG] [Thread-17320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:26:58.955 [DEBUG] [Thread-17320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:26:58.955 [DEBUG] [Thread-17320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:26:58.996 [DEBUG] [Thread-17320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:26:58.996 [DEBUG] [Thread-17320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:26:59.000 [DEBUG] [Thread-17320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:26:59.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:26:59.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:26:59.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:26:59.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:26:59.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:26:59.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:26:59.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:26:59.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:26:59.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:26:59.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.518490 -999.00  +27.10  35.82     16   -0.50 1 1 2 1 1   888    0 26.97 -36.07 ----- 35.8 35.8 281.0 46.4 30.9 -25.6 30.8 -24.8 30.6 -23.5 31.1 -24.9
2025-11-12T14:26:59.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:26:59.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:26:59.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.518490
2025-11-12T14:26:59.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:26:59.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:26:59.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:26:59.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:26:59.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:26:59.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:26:46', tmtdew=33.97, humidity=10.56, cloud=0.0, wind=33.51, temperature=28.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:26:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:26:59.026 [DEBUG] [Thread-17320] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:26:59.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:26:59.132 [DEBUG] [Thread-17323] [transport.py] [_log()] starting thread (client mode): 0x173f8790
2025-11-12T14:26:59.132 [DEBUG] [Thread-17323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:26:59.146 [DEBUG] [Thread-17323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:26:59.147 [INFO] [Thread-17323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:26:59.154 [DEBUG] [Thread-17323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:26:59.155 [DEBUG] [Thread-17323] [transport.py] [_log()] client lang: <none>
2025-11-12T14:26:59.156 [DEBUG] [Thread-17323] [transport.py] [_log()] server lang: <none>
2025-11-12T14:26:59.156 [DEBUG] [Thread-17323] [transport.py] [_log()] kex follows: False
2025-11-12T14:26:59.156 [DEBUG] [Thread-17323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:26:59.156 [DEBUG] [Thread-17323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:26:59.156 [DEBUG] [Thread-17323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:26:59.156 [DEBUG] [Thread-17323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:26:59.156 [DEBUG] [Thread-17323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:26:59.157 [DEBUG] [Thread-17323] [transport.py] [_log()] Compression: none
2025-11-12T14:26:59.157 [DEBUG] [Thread-17323] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:26:59.215 [DEBUG] [Thread-17323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:26:59.216 [DEBUG] [Thread-17323] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:26:59.217 [DEBUG] [Thread-17323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:26:59.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:26:59.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:26:59.275 [DEBUG] [Thread-17323] [transport.py] [_log()] userauth is OK
2025-11-12T14:26:59.275 [DEBUG] [Thread-17323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:26:59.276 [DEBUG] [Thread-17323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:26:59.276 [DEBUG] [Thread-17323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:26:59.276 [DEBUG] [Thread-17323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:26:59.300 [INFO] [Thread-17323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:26:59.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:26:59.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:27:00.180 [DEBUG] [Thread-17323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:27:00.180 [DEBUG] [Thread-17323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:27:00.228 [DEBUG] [Thread-17323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:27:00.229 [DEBUG] [Thread-17323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:27:00.238 [DEBUG] [Thread-17323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:27:00.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:27:00.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:27:00.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-11-12T14:27:00.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:27:00.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:27:00.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:27:00.275 [DEBUG] [Thread-17323] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:27:08.971 [DEBUG] [Thread-17325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:27:24.017 [DEBUG] [Thread-17326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:27:27.715 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:27:27.716 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:27:30.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:27:30.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:27:30.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-11-12T14:27:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 27, 18), 33.87, 10.66, 0.0, 35.08, 28.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:27:30.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:27:18
2025-11-12T14:27:31.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:27:31.191 [DEBUG] [Thread-17327] [transport.py] [_log()] starting thread (client mode): 0x173f8940
2025-11-12T14:27:31.191 [DEBUG] [Thread-17327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:27:31.211 [DEBUG] [Thread-17327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:27:31.211 [INFO] [Thread-17327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:27:31.214 [DEBUG] [Thread-17327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] client lang: <none>
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] server lang: <none>
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] kex follows: False
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] Compression: none
2025-11-12T14:27:31.215 [DEBUG] [Thread-17327] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:27:31.234 [DEBUG] [Thread-17327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:27:31.234 [DEBUG] [Thread-17327] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:27:31.235 [DEBUG] [Thread-17327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:27:31.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:27:31.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:27:31.277 [DEBUG] [Thread-17327] [transport.py] [_log()] userauth is OK
2025-11-12T14:27:31.277 [DEBUG] [Thread-17327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:27:31.277 [DEBUG] [Thread-17327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:27:31.277 [DEBUG] [Thread-17327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:27:31.277 [DEBUG] [Thread-17327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:27:31.299 [INFO] [Thread-17327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:27:31.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:27:31.964 [DEBUG] [Thread-17327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:27:31.964 [DEBUG] [Thread-17327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:27:31.965 [DEBUG] [Thread-17327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:27:32.006 [DEBUG] [Thread-17327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:27:32.006 [DEBUG] [Thread-17327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:27:32.010 [DEBUG] [Thread-17327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:27:32.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:27:32.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:27:32.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:27:32.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:27:32.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:27:32.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:27:32.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:27:32.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:27:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:27:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.518838 -999.00  +26.70  45.81     17   +0.30 1 1 2 1 1   888    0 26.54 -41.14 ----- 45.8 45.8 272.6 50.3 30.8 -28.0 30.8 -24.6 30.4 -28.7 31.1 -26.2
2025-11-12T14:27:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:27:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:27:32.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.518838
2025-11-12T14:27:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:27:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:27:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:27:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:27:32.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:27:32.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:27:18', tmtdew=33.87, humidity=10.66, cloud=0.0, wind=35.08, temperature=28.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:27:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:27:32.036 [DEBUG] [Thread-17327] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:27:32.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:27:32.133 [DEBUG] [Thread-17330] [transport.py] [_log()] starting thread (client mode): 0x173bf2e0
2025-11-12T14:27:32.133 [DEBUG] [Thread-17330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:27:32.148 [DEBUG] [Thread-17330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:27:32.149 [INFO] [Thread-17330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:27:32.156 [DEBUG] [Thread-17330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:27:32.156 [DEBUG] [Thread-17330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:27:32.156 [DEBUG] [Thread-17330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:27:32.156 [DEBUG] [Thread-17330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] client lang: <none>
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] server lang: <none>
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] kex follows: False
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:27:32.157 [DEBUG] [Thread-17330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:27:32.158 [DEBUG] [Thread-17330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:27:32.158 [DEBUG] [Thread-17330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:27:32.158 [DEBUG] [Thread-17330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:27:32.158 [DEBUG] [Thread-17330] [transport.py] [_log()] Compression: none
2025-11-12T14:27:32.158 [DEBUG] [Thread-17330] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:27:32.215 [DEBUG] [Thread-17330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:27:32.215 [DEBUG] [Thread-17330] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:27:32.216 [DEBUG] [Thread-17330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:27:32.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:27:32.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:27:32.274 [DEBUG] [Thread-17330] [transport.py] [_log()] userauth is OK
2025-11-12T14:27:32.274 [DEBUG] [Thread-17330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:27:32.274 [DEBUG] [Thread-17330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:27:32.274 [DEBUG] [Thread-17330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:27:32.274 [DEBUG] [Thread-17330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:27:32.294 [INFO] [Thread-17330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:27:32.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:27:32.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:27:33.160 [DEBUG] [Thread-17330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:27:33.160 [DEBUG] [Thread-17330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:27:33.211 [DEBUG] [Thread-17330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:27:33.211 [DEBUG] [Thread-17330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:27:33.224 [DEBUG] [Thread-17330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:27:33.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:27:33.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-11-12T14:27:33.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-11-12T14:27:33.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:27:33.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:27:33.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:27:33.271 [DEBUG] [Thread-17330] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:27:36.286 [DEBUG] [Thread-17332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:27:39.056 [DEBUG] [Thread-17333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:27:54.108 [DEBUG] [Thread-17334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:28:03.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:28:03.289 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:28:03.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-11-12T14:28:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 27, 50), 32.59, 11.26, 0.0, 33.4, 27.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:28:03.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:27:50
2025-11-12T14:28:04.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:28:04.188 [DEBUG] [Thread-17335] [transport.py] [_log()] starting thread (client mode): 0x173ebb20
2025-11-12T14:28:04.188 [DEBUG] [Thread-17335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:28:04.208 [DEBUG] [Thread-17335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:28:04.208 [INFO] [Thread-17335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:28:04.211 [DEBUG] [Thread-17335] [transport.py] [_log()] client lang: <none>
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] server lang: <none>
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] kex follows: False
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] Compression: none
2025-11-12T14:28:04.212 [DEBUG] [Thread-17335] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:28:04.221 [DEBUG] [Thread-17335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:28:04.222 [DEBUG] [Thread-17335] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:28:04.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:28:04.224 [DEBUG] [Thread-17335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:28:04.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:28:04.226 [DEBUG] [Thread-17335] [transport.py] [_log()] userauth is OK
2025-11-12T14:28:04.226 [DEBUG] [Thread-17335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:28:04.226 [DEBUG] [Thread-17335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:28:04.226 [DEBUG] [Thread-17335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:28:04.227 [DEBUG] [Thread-17335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:28:04.249 [INFO] [Thread-17335] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:28:04.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:28:04.899 [DEBUG] [Thread-17335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:28:04.899 [DEBUG] [Thread-17335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:28:04.900 [DEBUG] [Thread-17335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:28:04.941 [DEBUG] [Thread-17335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:28:04.941 [DEBUG] [Thread-17335] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:28:04.944 [DEBUG] [Thread-17335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:28:04.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:28:04.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:28:04.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:28:04.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:28:04.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:28:04.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:28:04.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:28:04.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:28:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:28:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.519185 -999.00  +26.20  35.84     18   +0.20 1 1 2 1 1   888    0 27.18 -47.99 ----- 35.8 35.8 276.6 45.9 30.5 -29.1 30.5 -25.0 29.9 -29.5 30.8 -24.7
2025-11-12T14:28:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:28:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:28:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.519185
2025-11-12T14:28:04.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:28:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:28:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:28:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:28:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:28:04.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:27:50', tmtdew=32.59, humidity=11.26, cloud=0.0, wind=33.4, temperature=27.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:27:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:28:04.971 [DEBUG] [Thread-17335] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:28:05.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:28:05.064 [DEBUG] [Thread-17338] [transport.py] [_log()] starting thread (client mode): 0x173bc940
2025-11-12T14:28:05.064 [DEBUG] [Thread-17338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:28:05.079 [DEBUG] [Thread-17338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:28:05.079 [INFO] [Thread-17338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:28:05.087 [DEBUG] [Thread-17338] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:28:05.087 [DEBUG] [Thread-17338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:28:05.087 [DEBUG] [Thread-17338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:28:05.087 [DEBUG] [Thread-17338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] client lang: <none>
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] server lang: <none>
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] kex follows: False
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:28:05.088 [DEBUG] [Thread-17338] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:28:05.089 [DEBUG] [Thread-17338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:28:05.089 [DEBUG] [Thread-17338] [transport.py] [_log()] Compression: none
2025-11-12T14:28:05.089 [DEBUG] [Thread-17338] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:28:05.151 [DEBUG] [Thread-17338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:28:05.152 [DEBUG] [Thread-17338] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:28:05.153 [DEBUG] [Thread-17338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:28:05.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:28:05.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:28:05.211 [DEBUG] [Thread-17338] [transport.py] [_log()] userauth is OK
2025-11-12T14:28:05.211 [DEBUG] [Thread-17338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:28:05.211 [DEBUG] [Thread-17338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:28:05.211 [DEBUG] [Thread-17338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:28:05.212 [DEBUG] [Thread-17338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:28:05.230 [INFO] [Thread-17338] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:28:05.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:28:05.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:28:06.088 [DEBUG] [Thread-17338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:28:06.088 [DEBUG] [Thread-17338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:28:06.136 [DEBUG] [Thread-17338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:28:06.137 [DEBUG] [Thread-17338] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:28:06.146 [DEBUG] [Thread-17338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:28:06.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:28:06.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:28:06.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-11-12T14:28:06.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:28:06.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:28:06.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:28:06.183 [DEBUG] [Thread-17338] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:28:09.147 [DEBUG] [Thread-17340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:28:24.196 [DEBUG] [Thread-17341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:28:27.858 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:28:27.859 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:28:36.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:28:36.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:28:36.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-11-12T14:28:36.326 [DEBUG] [Thread-17342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:28:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 28, 22), 32.73, 11.18, 0.0, 41.62, 27.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:28:36.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:28:22
2025-11-12T14:28:36.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:28:37.120 [DEBUG] [Thread-17343] [transport.py] [_log()] starting thread (client mode): 0x17361c30
2025-11-12T14:28:37.120 [DEBUG] [Thread-17343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:28:37.140 [DEBUG] [Thread-17343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:28:37.140 [INFO] [Thread-17343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] client lang: <none>
2025-11-12T14:28:37.143 [DEBUG] [Thread-17343] [transport.py] [_log()] server lang: <none>
2025-11-12T14:28:37.144 [DEBUG] [Thread-17343] [transport.py] [_log()] kex follows: False
2025-11-12T14:28:37.144 [DEBUG] [Thread-17343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:28:37.144 [DEBUG] [Thread-17343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:28:37.144 [DEBUG] [Thread-17343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:28:37.144 [DEBUG] [Thread-17343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:28:37.144 [DEBUG] [Thread-17343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:28:37.144 [DEBUG] [Thread-17343] [transport.py] [_log()] Compression: none
2025-11-12T14:28:37.144 [DEBUG] [Thread-17343] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:28:37.160 [DEBUG] [Thread-17343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:28:37.161 [DEBUG] [Thread-17343] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:28:37.161 [DEBUG] [Thread-17343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:28:37.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:28:37.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:28:37.162 [DEBUG] [Thread-17343] [transport.py] [_log()] userauth is OK
2025-11-12T14:28:37.162 [DEBUG] [Thread-17343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:28:37.162 [DEBUG] [Thread-17343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:28:37.162 [DEBUG] [Thread-17343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:28:37.162 [DEBUG] [Thread-17343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:28:37.171 [INFO] [Thread-17343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:28:37.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:28:37.789 [DEBUG] [Thread-17343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:28:37.790 [DEBUG] [Thread-17343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:28:37.790 [DEBUG] [Thread-17343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:28:37.831 [DEBUG] [Thread-17343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:28:37.831 [DEBUG] [Thread-17343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:28:37.833 [DEBUG] [Thread-17343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:28:37.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:28:37.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:28:37.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:28:37.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:28:37.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:28:37.852 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:28:37.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.519532 -999.00  +26.50  28.11     17   +0.10 1 1 1 1 1   888    0 26.33 -53.87 ----- 28.1 28.1 285.6 51.1 30.5 -26.0 30.4 -23.9 29.9 -24.5 30.6 -25.3
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.519532
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:28:37.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:28:22', tmtdew=32.73, humidity=11.18, cloud=0.0, wind=41.62, temperature=27.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:28:07.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:28:37.854 [DEBUG] [Thread-17343] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:28:37.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:28:37.940 [DEBUG] [Thread-17346] [transport.py] [_log()] starting thread (client mode): 0x14961b40
2025-11-12T14:28:37.940 [DEBUG] [Thread-17346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:28:37.955 [DEBUG] [Thread-17346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:28:37.955 [INFO] [Thread-17346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:28:37.962 [DEBUG] [Thread-17346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] client lang: <none>
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] server lang: <none>
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] kex follows: False
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] Compression: none
2025-11-12T14:28:37.963 [DEBUG] [Thread-17346] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:28:38.029 [DEBUG] [Thread-17346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:28:38.029 [DEBUG] [Thread-17346] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:28:38.029 [DEBUG] [Thread-17346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:28:38.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:28:38.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:28:38.086 [DEBUG] [Thread-17346] [transport.py] [_log()] userauth is OK
2025-11-12T14:28:38.086 [DEBUG] [Thread-17346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:28:38.086 [DEBUG] [Thread-17346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:28:38.086 [DEBUG] [Thread-17346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:28:38.086 [DEBUG] [Thread-17346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:28:38.100 [INFO] [Thread-17346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:28:38.100 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:28:38.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:28:38.943 [DEBUG] [Thread-17346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:28:38.943 [DEBUG] [Thread-17346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:28:38.991 [DEBUG] [Thread-17346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:28:38.991 [DEBUG] [Thread-17346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:28:38.999 [DEBUG] [Thread-17346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:28:39.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:28:39.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-11-12T14:28:39.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-11-12T14:28:39.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:28:39.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:28:39.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:28:39.030 [DEBUG] [Thread-17346] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:28:39.227 [DEBUG] [Thread-17348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:28:54.269 [DEBUG] [Thread-17349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:29:09.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:29:09.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:29:09.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-11-12T14:29:09.307 [DEBUG] [Thread-17350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:29:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 28, 54), 32.51, 11.74, 0.0, 35.68, 27.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:29:09.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:28:54
2025-11-12T14:29:09.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:29:09.966 [DEBUG] [Thread-17351] [transport.py] [_log()] starting thread (client mode): 0x173be950
2025-11-12T14:29:09.966 [DEBUG] [Thread-17351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:29:09.986 [DEBUG] [Thread-17351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:29:09.986 [INFO] [Thread-17351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:29:09.989 [DEBUG] [Thread-17351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:29:09.989 [DEBUG] [Thread-17351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] client lang: <none>
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] server lang: <none>
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] kex follows: False
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] Compression: none
2025-11-12T14:29:09.990 [DEBUG] [Thread-17351] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:29:10.007 [DEBUG] [Thread-17351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:29:10.007 [DEBUG] [Thread-17351] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:29:10.008 [DEBUG] [Thread-17351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:29:10.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:29:10.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:29:10.010 [DEBUG] [Thread-17351] [transport.py] [_log()] userauth is OK
2025-11-12T14:29:10.010 [DEBUG] [Thread-17351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:29:10.010 [DEBUG] [Thread-17351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:29:10.011 [DEBUG] [Thread-17351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:29:10.011 [DEBUG] [Thread-17351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:29:10.038 [INFO] [Thread-17351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:29:10.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:29:10.639 [DEBUG] [Thread-17351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:29:10.639 [DEBUG] [Thread-17351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:29:10.639 [DEBUG] [Thread-17351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:29:10.680 [DEBUG] [Thread-17351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:29:10.680 [DEBUG] [Thread-17351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:29:10.683 [DEBUG] [Thread-17351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:29:10.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:29:10.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:29:10.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:29:10.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:29:10.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:29:10.709 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:29:10.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:29:10.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:29:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:29:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.519879 -999.00  +26.30  38.82     17   +0.00 1 1 2 1 1   888    0 26.30 -58.63 ----- 38.8 38.8 277.0 45.9 30.4 -28.0 30.3 -24.1 29.9 -27.6 30.6 -25.5
2025-11-12T14:29:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:29:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:29:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.519879
2025-11-12T14:29:10.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:29:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:29:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:29:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:29:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:29:10.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:28:54', tmtdew=32.51, humidity=11.74, cloud=0.0, wind=35.68, temperature=27.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:28:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:29:10.712 [DEBUG] [Thread-17351] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:29:10.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:29:10.807 [DEBUG] [Thread-17354] [transport.py] [_log()] starting thread (client mode): 0x14980430
2025-11-12T14:29:10.808 [DEBUG] [Thread-17354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:29:10.822 [DEBUG] [Thread-17354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:29:10.823 [INFO] [Thread-17354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:29:10.830 [DEBUG] [Thread-17354] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:29:10.830 [DEBUG] [Thread-17354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:29:10.830 [DEBUG] [Thread-17354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:29:10.830 [DEBUG] [Thread-17354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:29:10.830 [DEBUG] [Thread-17354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:29:10.830 [DEBUG] [Thread-17354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] client lang: <none>
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] server lang: <none>
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] kex follows: False
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] Compression: none
2025-11-12T14:29:10.831 [DEBUG] [Thread-17354] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:29:10.890 [DEBUG] [Thread-17354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:29:10.891 [DEBUG] [Thread-17354] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:29:10.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:29:10.892 [DEBUG] [Thread-17354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:29:10.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:29:10.947 [DEBUG] [Thread-17354] [transport.py] [_log()] userauth is OK
2025-11-12T14:29:10.947 [DEBUG] [Thread-17354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:29:10.947 [DEBUG] [Thread-17354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:29:10.947 [DEBUG] [Thread-17354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:29:10.947 [DEBUG] [Thread-17354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:29:10.966 [INFO] [Thread-17354] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:29: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-11-12T14:29:10.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:29:11.806 [DEBUG] [Thread-17354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:29:11.806 [DEBUG] [Thread-17354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:29:11.854 [DEBUG] [Thread-17354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:29:11.854 [DEBUG] [Thread-17354] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:29:11.863 [DEBUG] [Thread-17354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:29:11.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:29:11.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-11-12T14:29:11.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-11-12T14:29:11.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:29:11.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:29:11.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:29:11.900 [DEBUG] [Thread-17354] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:29:24.336 [DEBUG] [Thread-17356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:29:27.999 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:29:28.000 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:29:36.372 [DEBUG] [Thread-17357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:29:39.389 [DEBUG] [Thread-17358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:29:41.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:29:41.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:29:41.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-11-12T14:29:42.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 29, 26), 32.25, 11.93, 0.0, 42.7, 27.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:29:42.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:29:26
2025-11-12T14:29:42.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:29:42.817 [DEBUG] [Thread-17359] [transport.py] [_log()] starting thread (client mode): 0x173e90f0
2025-11-12T14:29:42.817 [DEBUG] [Thread-17359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:29:42.837 [DEBUG] [Thread-17359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:29:42.838 [INFO] [Thread-17359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:29:42.841 [DEBUG] [Thread-17359] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:29:42.841 [DEBUG] [Thread-17359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:29:42.841 [DEBUG] [Thread-17359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:29:42.841 [DEBUG] [Thread-17359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:29:42.841 [DEBUG] [Thread-17359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:29:42.841 [DEBUG] [Thread-17359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] client lang: <none>
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] server lang: <none>
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] kex follows: False
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] Compression: none
2025-11-12T14:29:42.842 [DEBUG] [Thread-17359] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:29:42.860 [DEBUG] [Thread-17359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:29:42.861 [DEBUG] [Thread-17359] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:29:42.861 [DEBUG] [Thread-17359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:29:42.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:29:42.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:29:42.863 [DEBUG] [Thread-17359] [transport.py] [_log()] userauth is OK
2025-11-12T14:29:42.863 [DEBUG] [Thread-17359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:29:42.863 [DEBUG] [Thread-17359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:29:42.863 [DEBUG] [Thread-17359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:29:42.864 [DEBUG] [Thread-17359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:29:42.889 [INFO] [Thread-17359] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:29:42.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:29:43.534 [DEBUG] [Thread-17359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:29:43.534 [DEBUG] [Thread-17359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:29:43.534 [DEBUG] [Thread-17359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:29:43.575 [DEBUG] [Thread-17359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:29:43.575 [DEBUG] [Thread-17359] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:29:43.578 [DEBUG] [Thread-17359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:29:43.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:29:43.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:29:43.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:29:43.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:29:43.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:29:43.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:29:43.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:29:43.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:29:43.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:29:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.520227 -999.00  +26.50  29.48     17   +0.10 1 1 1 1 1   888    0 26.20 -59.97 ----- 29.5 29.5 293.4 45.2 30.2 -25.9 30.1 -24.1 29.6 -23.5 30.3 -24.2
2025-11-12T14:29:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:29:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:29:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.520227
2025-11-12T14:29:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:29:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:29:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:29:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:29:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:29:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:29:26', tmtdew=32.25, humidity=11.93, cloud=0.0, wind=42.7, temperature=27.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:29:07.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:29:43.606 [DEBUG] [Thread-17359] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:29:43.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:29:43.701 [DEBUG] [Thread-17362] [transport.py] [_log()] starting thread (client mode): 0x173994b0
2025-11-12T14:29:43.702 [DEBUG] [Thread-17362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:29:43.716 [DEBUG] [Thread-17362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:29:43.716 [INFO] [Thread-17362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:29:43.724 [DEBUG] [Thread-17362] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:29:43.724 [DEBUG] [Thread-17362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:29:43.724 [DEBUG] [Thread-17362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:29:43.724 [DEBUG] [Thread-17362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:29:43.724 [DEBUG] [Thread-17362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:29:43.724 [DEBUG] [Thread-17362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:29:43.725 [DEBUG] [Thread-17362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:29:43.725 [DEBUG] [Thread-17362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:29:43.725 [DEBUG] [Thread-17362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:29:43.725 [DEBUG] [Thread-17362] [transport.py] [_log()] client lang: <none>
2025-11-12T14:29:43.725 [DEBUG] [Thread-17362] [transport.py] [_log()] server lang: <none>
2025-11-12T14:29:43.725 [DEBUG] [Thread-17362] [transport.py] [_log()] kex follows: False
2025-11-12T14:29:43.725 [DEBUG] [Thread-17362] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:29:43.725 [DEBUG] [Thread-17362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:29:43.726 [DEBUG] [Thread-17362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:29:43.726 [DEBUG] [Thread-17362] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:29:43.726 [DEBUG] [Thread-17362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:29:43.726 [DEBUG] [Thread-17362] [transport.py] [_log()] Compression: none
2025-11-12T14:29:43.726 [DEBUG] [Thread-17362] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:29:43.783 [DEBUG] [Thread-17362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:29:43.784 [DEBUG] [Thread-17362] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:29:43.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:29:43.785 [DEBUG] [Thread-17362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:29:43.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:29:43.842 [DEBUG] [Thread-17362] [transport.py] [_log()] userauth is OK
2025-11-12T14:29:43.842 [DEBUG] [Thread-17362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:29:43.842 [DEBUG] [Thread-17362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:29:43.843 [DEBUG] [Thread-17362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:29:43.843 [DEBUG] [Thread-17362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:29:43.862 [INFO] [Thread-17362] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:29:43.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:29:43.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:29:44.781 [DEBUG] [Thread-17362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:29:44.781 [DEBUG] [Thread-17362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:29:44.828 [DEBUG] [Thread-17362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:29:44.829 [DEBUG] [Thread-17362] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:29:44.838 [DEBUG] [Thread-17362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:29:44.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:29:44.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-11-12T14:29:44.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-11-12T14:29:44.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:29:44.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:29:44.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:29:44.875 [DEBUG] [Thread-17362] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:29:54.421 [DEBUG] [Thread-17364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:30:09.466 [DEBUG] [Thread-17365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:30:14.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:30:14.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:30:14.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-11-12T14:30:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 29, 58), 32.24, 11.59, 0.0, 42.58, 27.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:30:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:29:58
2025-11-12T14:30:15.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:30:15.798 [DEBUG] [Thread-17366] [transport.py] [_log()] starting thread (client mode): 0x173477f0
2025-11-12T14:30:15.798 [DEBUG] [Thread-17366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:30:15.818 [DEBUG] [Thread-17366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:30:15.818 [INFO] [Thread-17366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:30:15.821 [DEBUG] [Thread-17366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:30:15.821 [DEBUG] [Thread-17366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:30:15.821 [DEBUG] [Thread-17366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:30:15.821 [DEBUG] [Thread-17366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] client lang: <none>
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] server lang: <none>
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] kex follows: False
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:30:15.822 [DEBUG] [Thread-17366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:30:15.823 [DEBUG] [Thread-17366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:30:15.823 [DEBUG] [Thread-17366] [transport.py] [_log()] Compression: none
2025-11-12T14:30:15.823 [DEBUG] [Thread-17366] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:30:15.841 [DEBUG] [Thread-17366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:30:15.841 [DEBUG] [Thread-17366] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:30:15.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:30:15.843 [DEBUG] [Thread-17366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:30:15.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:30:15.845 [DEBUG] [Thread-17366] [transport.py] [_log()] userauth is OK
2025-11-12T14:30:15.845 [DEBUG] [Thread-17366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:30:15.845 [DEBUG] [Thread-17366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:30:15.845 [DEBUG] [Thread-17366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:30:15.845 [DEBUG] [Thread-17366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:30:15.868 [INFO] [Thread-17366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:30:15.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:30:16.455 [DEBUG] [Thread-17366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:30:16.455 [DEBUG] [Thread-17366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:30:16.456 [DEBUG] [Thread-17366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:30:16.497 [DEBUG] [Thread-17366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:30:16.497 [DEBUG] [Thread-17366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:30:16.500 [DEBUG] [Thread-17366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:30:16.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:30:16.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:30:16.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:30:16.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:30:16.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:30:16.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:30:16.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:30:16.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:30:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:30:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.520921 -999.00  +26.40  29.34     17   +0.10 1 1 1 1 1   888    0 25.34 -74.22 ----- 29.3 29.3 278.0 37.4 30.2 -25.5 30.1 -23.4 29.7 -24.6 30.4 -23.4
2025-11-12T14:30:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:30:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:30:16.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.520921
2025-11-12T14:30:16.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:30:16.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:30:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:30:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:30:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:30:16.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:29:58', tmtdew=32.24, humidity=11.59, cloud=0.0, wind=42.58, temperature=27.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:30:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:30:16.522 [DEBUG] [Thread-17366] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:30:16.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:30:16.618 [DEBUG] [Thread-17369] [transport.py] [_log()] starting thread (client mode): 0x17345810
2025-11-12T14:30:16.618 [DEBUG] [Thread-17369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:30:16.632 [DEBUG] [Thread-17369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:30:16.633 [INFO] [Thread-17369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:30:16.640 [DEBUG] [Thread-17369] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:30:16.641 [DEBUG] [Thread-17369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:30:16.641 [DEBUG] [Thread-17369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:30:16.641 [DEBUG] [Thread-17369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:30:16.641 [DEBUG] [Thread-17369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:30:16.641 [DEBUG] [Thread-17369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:30:16.641 [DEBUG] [Thread-17369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:30:16.641 [DEBUG] [Thread-17369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:30:16.641 [DEBUG] [Thread-17369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:30:16.642 [DEBUG] [Thread-17369] [transport.py] [_log()] client lang: <none>
2025-11-12T14:30:16.642 [DEBUG] [Thread-17369] [transport.py] [_log()] server lang: <none>
2025-11-12T14:30:16.642 [DEBUG] [Thread-17369] [transport.py] [_log()] kex follows: False
2025-11-12T14:30:16.642 [DEBUG] [Thread-17369] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:30:16.642 [DEBUG] [Thread-17369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:30:16.642 [DEBUG] [Thread-17369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:30:16.642 [DEBUG] [Thread-17369] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:30:16.642 [DEBUG] [Thread-17369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:30:16.643 [DEBUG] [Thread-17369] [transport.py] [_log()] Compression: none
2025-11-12T14:30:16.643 [DEBUG] [Thread-17369] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:30:16.698 [DEBUG] [Thread-17369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:30:16.699 [DEBUG] [Thread-17369] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:30:16.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:30:16.700 [DEBUG] [Thread-17369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:30:16.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:30:16.754 [DEBUG] [Thread-17369] [transport.py] [_log()] userauth is OK
2025-11-12T14:30:16.754 [DEBUG] [Thread-17369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:30:16.754 [DEBUG] [Thread-17369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:30:16.755 [DEBUG] [Thread-17369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:30:16.755 [DEBUG] [Thread-17369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:30:16.774 [INFO] [Thread-17369] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:30:16.774 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:30:16.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:30:17.621 [DEBUG] [Thread-17369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:30:17.621 [DEBUG] [Thread-17369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:30:17.670 [DEBUG] [Thread-17369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:30:17.670 [DEBUG] [Thread-17369] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:30:17.679 [DEBUG] [Thread-17369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:30:17.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:30:17.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-11-12T14:30:17.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-11-12T14:30:17.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:30:17.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:30:17.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:30:17.715 [DEBUG] [Thread-17369] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:30:24.503 [DEBUG] [Thread-17371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:30:28.140 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:30:28.141 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:30:36.404 [DEBUG] [Thread-17372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:30:39.555 [DEBUG] [Thread-17373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:30:47.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:30:47.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:30:47.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-11-12T14:30:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 30, 30), 31.87, 11.84, 0.0, 36.72, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:30:48.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:30:30
2025-11-12T14:30:48.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:30:48.640 [DEBUG] [Thread-17374] [transport.py] [_log()] starting thread (client mode): 0x17347580
2025-11-12T14:30:48.640 [DEBUG] [Thread-17374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:30:48.661 [DEBUG] [Thread-17374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:30:48.661 [INFO] [Thread-17374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:30:48.664 [DEBUG] [Thread-17374] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:30:48.664 [DEBUG] [Thread-17374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:30:48.664 [DEBUG] [Thread-17374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:30:48.664 [DEBUG] [Thread-17374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] client lang: <none>
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] server lang: <none>
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] kex follows: False
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] Compression: none
2025-11-12T14:30:48.665 [DEBUG] [Thread-17374] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:30:48.682 [DEBUG] [Thread-17374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:30:48.682 [DEBUG] [Thread-17374] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:30:48.683 [DEBUG] [Thread-17374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:30:48.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:30:48.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:30:48.685 [DEBUG] [Thread-17374] [transport.py] [_log()] userauth is OK
2025-11-12T14:30:48.685 [DEBUG] [Thread-17374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:30:48.685 [DEBUG] [Thread-17374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:30:48.685 [DEBUG] [Thread-17374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:30:48.685 [DEBUG] [Thread-17374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:30:48.709 [INFO] [Thread-17374] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:30:48.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:30:49.342 [DEBUG] [Thread-17374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:30:49.343 [DEBUG] [Thread-17374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:30:49.343 [DEBUG] [Thread-17374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:30:49.384 [DEBUG] [Thread-17374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:30:49.384 [DEBUG] [Thread-17374] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:30:49.387 [DEBUG] [Thread-17374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:30:49.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:30:49.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:30:49.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:30:49.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:30:49.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:30:49.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:30:49.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:30:49.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:30:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:30:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.521268 -999.00  +26.20  22.85     17   +0.00 1 1 1 1 1   888    0 24.91 -80.87 ----- 22.9 22.9 270.6 25.8 30.2 -24.3 30.1 -22.9 29.5 -23.4 30.3 -23.7
2025-11-12T14:30:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:30:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:30:49.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.521268
2025-11-12T14:30:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:30:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:30:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:30:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:30:49.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:30:49.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:30:30', tmtdew=31.87, humidity=11.84, cloud=0.0, wind=36.72, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:30:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:30:49.425 [DEBUG] [Thread-17374] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:30:49.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:30:49.521 [DEBUG] [Thread-17377] [transport.py] [_log()] starting thread (client mode): 0x17344c40
2025-11-12T14:30:49.521 [DEBUG] [Thread-17377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:30:49.538 [DEBUG] [Thread-17377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:30:49.539 [INFO] [Thread-17377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:30:49.546 [DEBUG] [Thread-17377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:30:49.546 [DEBUG] [Thread-17377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:30:49.546 [DEBUG] [Thread-17377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] client lang: <none>
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] server lang: <none>
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] kex follows: False
2025-11-12T14:30:49.547 [DEBUG] [Thread-17377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:30:49.548 [DEBUG] [Thread-17377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:30:49.548 [DEBUG] [Thread-17377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:30:49.548 [DEBUG] [Thread-17377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:30:49.548 [DEBUG] [Thread-17377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:30:49.548 [DEBUG] [Thread-17377] [transport.py] [_log()] Compression: none
2025-11-12T14:30:49.548 [DEBUG] [Thread-17377] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:30:49.606 [DEBUG] [Thread-17377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:30:49.607 [DEBUG] [Thread-17377] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:30:49.607 [DEBUG] [Thread-17377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:30:49.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:30:49.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:30:49.662 [DEBUG] [Thread-17377] [transport.py] [_log()] userauth is OK
2025-11-12T14:30:49.663 [DEBUG] [Thread-17377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:30:49.663 [DEBUG] [Thread-17377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:30:49.663 [DEBUG] [Thread-17377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:30:49.663 [DEBUG] [Thread-17377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:30:49.683 [INFO] [Thread-17377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:30:49.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:30:49.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:30:50.574 [DEBUG] [Thread-17377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:30:50.574 [DEBUG] [Thread-17377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:30:50.623 [DEBUG] [Thread-17377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:30:50.623 [DEBUG] [Thread-17377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:30:50.632 [DEBUG] [Thread-17377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:30:50.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:30:50.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-11-12T14:30:50.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-11-12T14:30:50.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:30:50.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:30:50.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:30:50.669 [DEBUG] [Thread-17377] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:30:54.595 [DEBUG] [Thread-17379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:31:09.647 [DEBUG] [Thread-17380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:31:20.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:31:20.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:31:20.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-11-12T14:31:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 31, 2), 32.1, 11.64, 0.0, 33.88, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:31:21.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:31:02
2025-11-12T14:31:21.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:31:21.590 [DEBUG] [Thread-17381] [transport.py] [_log()] starting thread (client mode): 0x17362dd0
2025-11-12T14:31:21.590 [DEBUG] [Thread-17381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:31:21.610 [DEBUG] [Thread-17381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:31:21.610 [INFO] [Thread-17381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:31:21.613 [DEBUG] [Thread-17381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] client lang: <none>
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] server lang: <none>
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] kex follows: False
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] Compression: none
2025-11-12T14:31:21.614 [DEBUG] [Thread-17381] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:31:21.633 [DEBUG] [Thread-17381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:31:21.634 [DEBUG] [Thread-17381] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:31:21.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:31:21.634 [DEBUG] [Thread-17381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:31:21.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:31:21.636 [DEBUG] [Thread-17381] [transport.py] [_log()] userauth is OK
2025-11-12T14:31:21.637 [DEBUG] [Thread-17381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:31:21.637 [DEBUG] [Thread-17381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:31:21.637 [DEBUG] [Thread-17381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:31:21.637 [DEBUG] [Thread-17381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:31:21.662 [INFO] [Thread-17381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:31:21.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:31:22.298 [DEBUG] [Thread-17381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:31:22.299 [DEBUG] [Thread-17381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:31:22.299 [DEBUG] [Thread-17381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:31:22.339 [DEBUG] [Thread-17381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:31:22.340 [DEBUG] [Thread-17381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:31:22.345 [DEBUG] [Thread-17381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:31:22.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:31:22.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:31:22.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:31:22.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:31:22.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:31:22.367 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:31:22.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:31:22.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:31:22.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:31:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.521616 -999.00  +26.50  25.08     17   -0.20 1 2 1 1 1   888    0 25.18 -77.22 ----- 25.1 25.1 279.4 37.3 30.3 -23.5 30.2 -22.2 29.8 -22.4 30.5 -23.1
2025-11-12T14:31:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:31:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:31:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.521616
2025-11-12T14:31:22.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:31:22.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:31:22.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:31:22.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:31:22.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:31:22.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:31:02', tmtdew=32.1, humidity=11.64, cloud=0.0, wind=33.88, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:31:07.622', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:31:22.370 [DEBUG] [Thread-17381] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:31:22.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:31:22.467 [DEBUG] [Thread-17384] [transport.py] [_log()] starting thread (client mode): 0x173e9120
2025-11-12T14:31:22.467 [DEBUG] [Thread-17384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:31:22.482 [DEBUG] [Thread-17384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:31:22.482 [INFO] [Thread-17384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:31:22.489 [DEBUG] [Thread-17384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] client lang: <none>
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] server lang: <none>
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] kex follows: False
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:31:22.490 [DEBUG] [Thread-17384] [transport.py] [_log()] Compression: none
2025-11-12T14:31:22.491 [DEBUG] [Thread-17384] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:31:22.554 [DEBUG] [Thread-17384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:31:22.554 [DEBUG] [Thread-17384] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:31:22.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:31:22.556 [DEBUG] [Thread-17384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:31:22.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:31:22.610 [DEBUG] [Thread-17384] [transport.py] [_log()] userauth is OK
2025-11-12T14:31:22.611 [DEBUG] [Thread-17384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:31:22.611 [DEBUG] [Thread-17384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:31:22.611 [DEBUG] [Thread-17384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:31:22.611 [DEBUG] [Thread-17384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:31:22.630 [INFO] [Thread-17384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:31:22.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:31:22.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:31:23.442 [DEBUG] [Thread-17384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:31:23.442 [DEBUG] [Thread-17384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:31:23.489 [DEBUG] [Thread-17384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:31:23.490 [DEBUG] [Thread-17384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:31:23.499 [DEBUG] [Thread-17384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:31:23.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:31:23.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-11-12T14:31:23.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-11-12T14:31:23.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:31:23.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:31:23.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:31:23.536 [DEBUG] [Thread-17384] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:31:24.680 [DEBUG] [Thread-17386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:31:28.283 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:31:28.284 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:31:36.435 [DEBUG] [Thread-17387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:31:39.733 [DEBUG] [Thread-17388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:31:53.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:31:53.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:31:53.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-11-12T14:31:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 31, 34), 32.04, 11.53, 0.0, 28.87, 26.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:31:54.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:31:34
2025-11-12T14:31:54.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:31:54.461 [DEBUG] [Thread-17389] [transport.py] [_log()] starting thread (client mode): 0x17361690
2025-11-12T14:31:54.461 [DEBUG] [Thread-17389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:31:54.484 [DEBUG] [Thread-17389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:31:54.484 [INFO] [Thread-17389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:31:54.485 [DEBUG] [Thread-17389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:31:54.485 [DEBUG] [Thread-17389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:31:54.485 [DEBUG] [Thread-17389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:31:54.485 [DEBUG] [Thread-17389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:31:54.485 [DEBUG] [Thread-17389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:31:54.485 [DEBUG] [Thread-17389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] client lang: <none>
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] server lang: <none>
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] kex follows: False
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] Compression: none
2025-11-12T14:31:54.486 [DEBUG] [Thread-17389] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:31:54.497 [DEBUG] [Thread-17389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:31:54.497 [DEBUG] [Thread-17389] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:31:54.498 [DEBUG] [Thread-17389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:31:54.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:31:54.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:31:54.500 [DEBUG] [Thread-17389] [transport.py] [_log()] userauth is OK
2025-11-12T14:31:54.501 [DEBUG] [Thread-17389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:31:54.501 [DEBUG] [Thread-17389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:31:54.501 [DEBUG] [Thread-17389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:31:54.501 [DEBUG] [Thread-17389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:31:54.526 [INFO] [Thread-17389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:31:54.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:31:54.766 [DEBUG] [Thread-17391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:31:55.168 [DEBUG] [Thread-17389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:31:55.168 [DEBUG] [Thread-17389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:31:55.169 [DEBUG] [Thread-17389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:31:55.209 [DEBUG] [Thread-17389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:31:55.210 [DEBUG] [Thread-17389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:31:55.213 [DEBUG] [Thread-17389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:31:55.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:31:55.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:31:55.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:31:55.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:31:55.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:31:55.238 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:31:55.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:31:55.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:31:55.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:31:55.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.521963 -999.00  +26.50  29.87     16   -0.50 1 2 1 1 1   888    0 24.96 -82.30 ----- 29.9 29.9 260.4 38.0 30.4 -25.0 30.2 -22.6 30.1 -21.8 30.6 -24.1
2025-11-12T14:31:55.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:31:55.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:31:55.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.521963
2025-11-12T14:31:55.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:31:55.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:31:55.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:31:55.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:31:55.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:31:55.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:31:34', tmtdew=32.04, humidity=11.53, cloud=0.0, wind=28.87, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:31:37.603', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:31:55.241 [DEBUG] [Thread-17389] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:31:55.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:31:55.337 [DEBUG] [Thread-17393] [transport.py] [_log()] starting thread (client mode): 0x17398c10
2025-11-12T14:31:55.338 [DEBUG] [Thread-17393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:31:55.352 [DEBUG] [Thread-17393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:31:55.352 [INFO] [Thread-17393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] client lang: <none>
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] server lang: <none>
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] kex follows: False
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:31:55.360 [DEBUG] [Thread-17393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:31:55.361 [DEBUG] [Thread-17393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:31:55.361 [DEBUG] [Thread-17393] [transport.py] [_log()] Compression: none
2025-11-12T14:31:55.361 [DEBUG] [Thread-17393] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:31:55.418 [DEBUG] [Thread-17393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:31:55.419 [DEBUG] [Thread-17393] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:31:55.420 [DEBUG] [Thread-17393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:31:55.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:31:55.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:31:55.474 [DEBUG] [Thread-17393] [transport.py] [_log()] userauth is OK
2025-11-12T14:31:55.475 [DEBUG] [Thread-17393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:31:55.475 [DEBUG] [Thread-17393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:31:55.475 [DEBUG] [Thread-17393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:31:55.475 [DEBUG] [Thread-17393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:31:55.494 [INFO] [Thread-17393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:31:55.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:31:55.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:31:56.309 [DEBUG] [Thread-17393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:31:56.310 [DEBUG] [Thread-17393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:31:56.357 [DEBUG] [Thread-17393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:31:56.357 [DEBUG] [Thread-17393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:31:56.365 [DEBUG] [Thread-17393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:31:56.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:31:56.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-11-12T14:31:56.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-11-12T14:31:56.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:31:56.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:31:56.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:31:56.397 [DEBUG] [Thread-17393] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:32:09.805 [DEBUG] [Thread-17395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:32:24.860 [DEBUG] [Thread-17396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:32:26.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:32:26.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:32:26.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-11-12T14:32:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 32, 6), 32.39, 11.26, 0.0, 28.99, 26.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:32:27.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:32:06
2025-11-12T14:32:27.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:32:27.380 [DEBUG] [Thread-17397] [transport.py] [_log()] starting thread (client mode): 0x149aa1a0
2025-11-12T14:32:27.380 [DEBUG] [Thread-17397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:32:27.397 [DEBUG] [Thread-17397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:32:27.397 [INFO] [Thread-17397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] client lang: <none>
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] server lang: <none>
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] kex follows: False
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] Compression: none
2025-11-12T14:32:27.400 [DEBUG] [Thread-17397] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:32:27.414 [DEBUG] [Thread-17397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:32:27.414 [DEBUG] [Thread-17397] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:32:27.414 [DEBUG] [Thread-17397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:32:27.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:32:27.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:32:27.415 [DEBUG] [Thread-17397] [transport.py] [_log()] userauth is OK
2025-11-12T14:32:27.415 [DEBUG] [Thread-17397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:32:27.415 [DEBUG] [Thread-17397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:32:27.415 [DEBUG] [Thread-17397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:32:27.415 [DEBUG] [Thread-17397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:32:27.424 [INFO] [Thread-17397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:32:27.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:32:27.998 [DEBUG] [Thread-17397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:32:27.999 [DEBUG] [Thread-17397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:32:27.999 [DEBUG] [Thread-17397] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:32:28.039 [DEBUG] [Thread-17397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:32:28.039 [DEBUG] [Thread-17397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:32:28.046 [DEBUG] [Thread-17397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:32:28.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:32:28.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:32:28.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:32:28.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:32:28.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:32:28.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:32:28.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.522310 -999.00  +26.20  20.94     17   -0.20 1 1 1 1 1   888    0 24.95 -93.75 ----- 20.9 20.9 273.6 33.2 30.2 -25.2 30.2 -23.2 30.1 -26.6 30.4 -24.4
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.522310
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:32:28.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:32:06', tmtdew=32.39, humidity=11.26, cloud=0.0, wind=28.99, temperature=26.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:32:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:32:28.084 [DEBUG] [Thread-17397] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:32:28.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:32:28.166 [DEBUG] [Thread-17400] [transport.py] [_log()] starting thread (client mode): 0x1499dff0
2025-11-12T14:32:28.167 [DEBUG] [Thread-17400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:32:28.185 [DEBUG] [Thread-17400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:32:28.185 [INFO] [Thread-17400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:32:28.196 [DEBUG] [Thread-17400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] client lang: <none>
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] server lang: <none>
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] kex follows: False
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] Compression: none
2025-11-12T14:32:28.197 [DEBUG] [Thread-17400] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:32:28.252 [DEBUG] [Thread-17400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:32:28.252 [DEBUG] [Thread-17400] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:32:28.252 [DEBUG] [Thread-17400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:32:28.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:32:28.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:32:28.315 [DEBUG] [Thread-17400] [transport.py] [_log()] userauth is OK
2025-11-12T14:32:28.315 [DEBUG] [Thread-17400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:32:28.315 [DEBUG] [Thread-17400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:32:28.315 [DEBUG] [Thread-17400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:32:28.315 [DEBUG] [Thread-17400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:32:28.329 [INFO] [Thread-17400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:32:28.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:32:28.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:32:28.425 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:32:28.426 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:32:29.179 [DEBUG] [Thread-17400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:32:29.179 [DEBUG] [Thread-17400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:32:29.227 [DEBUG] [Thread-17400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:32:29.227 [DEBUG] [Thread-17400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:32:29.235 [DEBUG] [Thread-17400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:32:29.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:32:29.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-11-12T14:32:29.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-11-12T14:32:29.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:32:29.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:32:29.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:32:29.267 [DEBUG] [Thread-17400] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:32:36.484 [DEBUG] [Thread-17402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:32:39.896 [DEBUG] [Thread-17403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:32:54.938 [DEBUG] [Thread-17404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:32:59.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:32:59.264 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:32:59.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-11-12T14:32:59.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 32, 38), 32.77, 11.15, 0.0, 28.07, 27.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:32:59.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:32:38
2025-11-12T14:33:00.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:33:00.169 [DEBUG] [Thread-17405] [transport.py] [_log()] starting thread (client mode): 0x149aa380
2025-11-12T14:33:00.169 [DEBUG] [Thread-17405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:33:00.187 [DEBUG] [Thread-17405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:33:00.187 [INFO] [Thread-17405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:33:00.189 [DEBUG] [Thread-17405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:33:00.189 [DEBUG] [Thread-17405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:33:00.189 [DEBUG] [Thread-17405] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:33:00.189 [DEBUG] [Thread-17405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:33:00.189 [DEBUG] [Thread-17405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:33:00.189 [DEBUG] [Thread-17405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] client lang: <none>
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] server lang: <none>
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] kex follows: False
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] Compression: none
2025-11-12T14:33:00.190 [DEBUG] [Thread-17405] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:33:00.206 [DEBUG] [Thread-17405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:33:00.206 [DEBUG] [Thread-17405] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:33:00.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:33:00.207 [DEBUG] [Thread-17405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:33:00.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:33:00.208 [DEBUG] [Thread-17405] [transport.py] [_log()] userauth is OK
2025-11-12T14:33:00.208 [DEBUG] [Thread-17405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:33:00.209 [DEBUG] [Thread-17405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:33:00.209 [DEBUG] [Thread-17405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:33:00.209 [DEBUG] [Thread-17405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:33:00.228 [INFO] [Thread-17405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:33:00.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:33:00.874 [DEBUG] [Thread-17405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:33:00.874 [DEBUG] [Thread-17405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:33:00.874 [DEBUG] [Thread-17405] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:33:00.915 [DEBUG] [Thread-17405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:33:00.915 [DEBUG] [Thread-17405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:33:00.918 [DEBUG] [Thread-17405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:33:00.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:33:00.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:33:00.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:33:00.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:33:00.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:33:00.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:33:00.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:33:00.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:33:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:33:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.522657 -999.00  +26.30  26.10     17   -0.40 1 2 1 1 1   888    0 24.29 -102.16 ----- 26.1 26.1 251.2 29.9 30.4 -24.7 30.2 -23.2 30.0 -22.8 30.6 -23.7
2025-11-12T14:33:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:33:00.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:33:00.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.522657
2025-11-12T14:33:00.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:33:00.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:33:00.943 [DEBUG] [Thread-17405] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:33:00.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:33:00.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:33:00.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:33:00.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:32:38', tmtdew=32.77, humidity=11.15, cloud=0.0, wind=28.07, temperature=27.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:32:37.565', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:33:01.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:33:01.036 [DEBUG] [Thread-17408] [transport.py] [_log()] starting thread (client mode): 0x149aa3e0
2025-11-12T14:33:01.036 [DEBUG] [Thread-17408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:33:01.051 [DEBUG] [Thread-17408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:33:01.051 [INFO] [Thread-17408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] client lang: <none>
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] server lang: <none>
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] kex follows: False
2025-11-12T14:33:01.059 [DEBUG] [Thread-17408] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:33:01.060 [DEBUG] [Thread-17408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:33:01.060 [DEBUG] [Thread-17408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:33:01.060 [DEBUG] [Thread-17408] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:33:01.060 [DEBUG] [Thread-17408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:33:01.060 [DEBUG] [Thread-17408] [transport.py] [_log()] Compression: none
2025-11-12T14:33:01.060 [DEBUG] [Thread-17408] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:33:01.116 [DEBUG] [Thread-17408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:33:01.116 [DEBUG] [Thread-17408] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:33:01.116 [DEBUG] [Thread-17408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:33:01.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:33:01.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:33:01.173 [DEBUG] [Thread-17408] [transport.py] [_log()] userauth is OK
2025-11-12T14:33:01.174 [DEBUG] [Thread-17408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:33:01.174 [DEBUG] [Thread-17408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:33:01.174 [DEBUG] [Thread-17408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:33:01.174 [DEBUG] [Thread-17408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:33:01.193 [INFO] [Thread-17408] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:33:01.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:33:01.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:33:02.044 [DEBUG] [Thread-17408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:33:02.045 [DEBUG] [Thread-17408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:33:02.092 [DEBUG] [Thread-17408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:33:02.093 [DEBUG] [Thread-17408] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:33:02.102 [DEBUG] [Thread-17408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:33:02.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:33:02.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:33:02.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-11-12T14:33:02.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:33:02.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:33:02.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:33:02.141 [DEBUG] [Thread-17408] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:33:09.974 [DEBUG] [Thread-17410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:33:25.025 [DEBUG] [Thread-17411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:33:28.569 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:33:28.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:33:32.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:33:32.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:33:32.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-11-12T14:33:32.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 33, 10), 32.8, 11.15, 0.0, 25.99, 27.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:33:32.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:33:10
2025-11-12T14:33:32.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:33:33.058 [DEBUG] [Thread-17412] [transport.py] [_log()] starting thread (client mode): 0x149ab1f0
2025-11-12T14:33:33.058 [DEBUG] [Thread-17412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:33:33.078 [DEBUG] [Thread-17412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:33:33.078 [INFO] [Thread-17412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] client lang: <none>
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] server lang: <none>
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] kex follows: False
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] Compression: none
2025-11-12T14:33:33.081 [DEBUG] [Thread-17412] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:33:33.090 [DEBUG] [Thread-17412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:33:33.090 [DEBUG] [Thread-17412] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:33:33.090 [DEBUG] [Thread-17412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:33:33.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:33:33.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:33:33.092 [DEBUG] [Thread-17412] [transport.py] [_log()] userauth is OK
2025-11-12T14:33:33.092 [DEBUG] [Thread-17412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:33:33.092 [DEBUG] [Thread-17412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:33:33.092 [DEBUG] [Thread-17412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:33:33.092 [DEBUG] [Thread-17412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:33:33.128 [INFO] [Thread-17412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:33:33.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:33:33.752 [DEBUG] [Thread-17412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:33:33.753 [DEBUG] [Thread-17412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:33:33.753 [DEBUG] [Thread-17412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:33:33.794 [DEBUG] [Thread-17412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:33:33.794 [DEBUG] [Thread-17412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:33:33.797 [DEBUG] [Thread-17412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:33:33.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:33:33.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:33:33.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:33:33.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:33:33.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:33:33.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:33:33.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:33:33.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:33:33.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:33:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.523004 -999.00  +26.40  29.43     17   -0.30 1 1 1 1 1   888    0 24.46 -103.55 ----- 29.4 29.4 276.2 34.4 30.3 -24.9 30.2 -23.8 30.1 -22.7 30.4 -25.0
2025-11-12T14:33:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:33:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:33:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.523004
2025-11-12T14:33:33.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:33:33.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:33:33.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:33:33.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:33:33.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:33:33.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:33:10', tmtdew=32.8, humidity=11.15, cloud=0.0, wind=25.99, temperature=27.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:33:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:33:33.824 [DEBUG] [Thread-17412] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:33:33.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:33:33.920 [DEBUG] [Thread-17415] [transport.py] [_log()] starting thread (client mode): 0x149a9450
2025-11-12T14:33:33.920 [DEBUG] [Thread-17415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:33:33.934 [DEBUG] [Thread-17415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:33:33.934 [INFO] [Thread-17415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] client lang: <none>
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] server lang: <none>
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] kex follows: False
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:33:33.942 [DEBUG] [Thread-17415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:33:33.943 [DEBUG] [Thread-17415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:33:33.943 [DEBUG] [Thread-17415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:33:33.943 [DEBUG] [Thread-17415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:33:33.943 [DEBUG] [Thread-17415] [transport.py] [_log()] Compression: none
2025-11-12T14:33:33.943 [DEBUG] [Thread-17415] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:33:34.002 [DEBUG] [Thread-17415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:33:34.002 [DEBUG] [Thread-17415] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:33:34.003 [DEBUG] [Thread-17415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:33:34.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:33:34.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:33:34.059 [DEBUG] [Thread-17415] [transport.py] [_log()] userauth is OK
2025-11-12T14:33:34.059 [DEBUG] [Thread-17415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:33:34.059 [DEBUG] [Thread-17415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:33:34.059 [DEBUG] [Thread-17415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:33:34.059 [DEBUG] [Thread-17415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:33:34.081 [INFO] [Thread-17415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:33:34.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:33:34.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:33:34.914 [DEBUG] [Thread-17415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:33:34.914 [DEBUG] [Thread-17415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:33:34.962 [DEBUG] [Thread-17415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:33:34.962 [DEBUG] [Thread-17415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:33:34.971 [DEBUG] [Thread-17415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:33:34.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:33:34.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-11-12T14:33:34.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-11-12T14:33:34.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:33:34.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:33:34.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:33:35.005 [DEBUG] [Thread-17415] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:33:36.517 [DEBUG] [Thread-17417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:33:40.060 [DEBUG] [Thread-17418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:33:55.104 [DEBUG] [Thread-17419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:34:05.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:34:05.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:34:05.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-11-12T14:34:05.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 33, 42), 33.17, 11.03, 0.0, 40.03, 27.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:34:05.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:33:42
2025-11-12T14:34:05.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:34:05.924 [DEBUG] [Thread-17420] [transport.py] [_log()] starting thread (client mode): 0x173e9cf0
2025-11-12T14:34:05.924 [DEBUG] [Thread-17420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:34:05.945 [DEBUG] [Thread-17420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:34:05.945 [INFO] [Thread-17420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] client lang: <none>
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] server lang: <none>
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] kex follows: False
2025-11-12T14:34:05.948 [DEBUG] [Thread-17420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:34:05.949 [DEBUG] [Thread-17420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:34:05.949 [DEBUG] [Thread-17420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:34:05.949 [DEBUG] [Thread-17420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:34:05.949 [DEBUG] [Thread-17420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:34:05.949 [DEBUG] [Thread-17420] [transport.py] [_log()] Compression: none
2025-11-12T14:34:05.949 [DEBUG] [Thread-17420] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:34:05.967 [DEBUG] [Thread-17420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:34:05.968 [DEBUG] [Thread-17420] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:34:05.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:34:05.968 [DEBUG] [Thread-17420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:34:05.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:34:05.970 [DEBUG] [Thread-17420] [transport.py] [_log()] userauth is OK
2025-11-12T14:34:05.970 [DEBUG] [Thread-17420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:34:05.971 [DEBUG] [Thread-17420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:34:05.971 [DEBUG] [Thread-17420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:34:05.971 [DEBUG] [Thread-17420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:34:05.992 [INFO] [Thread-17420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:34:05.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:34:06.575 [DEBUG] [Thread-17420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:34:06.575 [DEBUG] [Thread-17420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:34:06.575 [DEBUG] [Thread-17420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:34:06.616 [DEBUG] [Thread-17420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:34:06.616 [DEBUG] [Thread-17420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:34:06.619 [DEBUG] [Thread-17420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:34:06.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:34:06.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:34:06.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:34:06.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:34:06.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:34:06.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:34:06.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:34:06.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:34:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:34:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.523352 -999.00  +26.20  37.99     17   -0.40 1 1 2 1 1   888    0 24.13 -110.93 ----- 38.0 38.0 276.2 48.5 30.3 -24.5 30.2 -23.6 29.7 -26.4 30.4 -24.4
2025-11-12T14:34:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:34:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:34:06.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.523352
2025-11-12T14:34:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:34:06.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:34:06.644 [DEBUG] [Thread-17420] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:34:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:34:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:34:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:34:06.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:33:42', tmtdew=33.17, humidity=11.03, cloud=0.0, wind=40.03, temperature=27.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:33:37.613', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:34:06.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:34:06.736 [DEBUG] [Thread-17423] [transport.py] [_log()] starting thread (client mode): 0x149abee0
2025-11-12T14:34:06.737 [DEBUG] [Thread-17423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:34:06.751 [DEBUG] [Thread-17423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:34:06.751 [INFO] [Thread-17423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:34:06.759 [DEBUG] [Thread-17423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:34:06.759 [DEBUG] [Thread-17423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:34:06.759 [DEBUG] [Thread-17423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] client lang: <none>
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] server lang: <none>
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] kex follows: False
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] Compression: none
2025-11-12T14:34:06.760 [DEBUG] [Thread-17423] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:34:06.818 [DEBUG] [Thread-17423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:34:06.819 [DEBUG] [Thread-17423] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:34:06.820 [DEBUG] [Thread-17423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:34:06.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:34:06.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:34:06.878 [DEBUG] [Thread-17423] [transport.py] [_log()] userauth is OK
2025-11-12T14:34:06.878 [DEBUG] [Thread-17423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:34:06.878 [DEBUG] [Thread-17423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:34:06.879 [DEBUG] [Thread-17423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:34:06.879 [DEBUG] [Thread-17423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:34:06.899 [INFO] [Thread-17423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:34:06.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:34:06.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:34:07.755 [DEBUG] [Thread-17423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:34:07.756 [DEBUG] [Thread-17423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:34:07.803 [DEBUG] [Thread-17423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:34:07.804 [DEBUG] [Thread-17423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:34:07.814 [DEBUG] [Thread-17423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:34:07.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:34:07.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-11-12T14:34:07.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-11-12T14:34:07.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:34:07.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:34:07.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:34:07.850 [DEBUG] [Thread-17423] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:34:10.141 [DEBUG] [Thread-17425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:34:25.187 [DEBUG] [Thread-17426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:34:28.716 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:34:28.718 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:34:36.551 [DEBUG] [Thread-17427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:34:37.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:34:37.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:34:37.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-11-12T14:34:38.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 34, 14), 33.12, 11.06, 0.0, 39.06, 27.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:34:38.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:34:14
2025-11-12T14:34:38.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:34:38.800 [DEBUG] [Thread-17428] [transport.py] [_log()] starting thread (client mode): 0x17398f70
2025-11-12T14:34:38.801 [DEBUG] [Thread-17428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:34:38.817 [DEBUG] [Thread-17428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:34:38.817 [INFO] [Thread-17428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:34:38.820 [DEBUG] [Thread-17428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:34:38.820 [DEBUG] [Thread-17428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] client lang: <none>
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] server lang: <none>
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] kex follows: False
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] Compression: none
2025-11-12T14:34:38.821 [DEBUG] [Thread-17428] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:34:38.845 [DEBUG] [Thread-17428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:34:38.846 [DEBUG] [Thread-17428] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:34:38.847 [DEBUG] [Thread-17428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:34:38.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:34:38.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:34:38.850 [DEBUG] [Thread-17428] [transport.py] [_log()] userauth is OK
2025-11-12T14:34:38.850 [DEBUG] [Thread-17428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:34:38.850 [DEBUG] [Thread-17428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:34:38.850 [DEBUG] [Thread-17428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:34:38.850 [DEBUG] [Thread-17428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:34:38.875 [INFO] [Thread-17428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:34:38.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:34:39.505 [DEBUG] [Thread-17428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:34:39.505 [DEBUG] [Thread-17428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:34:39.505 [DEBUG] [Thread-17428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:34:39.546 [DEBUG] [Thread-17428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:34:39.546 [DEBUG] [Thread-17428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:34:39.549 [DEBUG] [Thread-17428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:34:39.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:34:39.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:34:39.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:34:39.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:34:39.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:34:39.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:34:39.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:34:39.572 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:34:39.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:34:39.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.523699 -999.00  +26.00  30.49     17   -0.40 1 1 2 1 1   888    0 24.75 -105.61 ----- 30.5 30.5 295.8 43.0 30.1 -25.5 30.1 -23.5 29.5 -26.6 30.4 -24.9
2025-11-12T14:34:39.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:34:39.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:34:39.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.523699
2025-11-12T14:34:39.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:34:39.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:34:39.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:34:39.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:34:39.574 [DEBUG] [Thread-17428] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:34:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:34:39.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:34:14', tmtdew=33.12, humidity=11.06, cloud=0.0, wind=39.06, temperature=27.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:34:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:34:39.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:34:39.667 [DEBUG] [Thread-17431] [transport.py] [_log()] starting thread (client mode): 0x1739bd00
2025-11-12T14:34:39.667 [DEBUG] [Thread-17431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:34:39.681 [DEBUG] [Thread-17431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:34:39.682 [INFO] [Thread-17431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:34:39.689 [DEBUG] [Thread-17431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] client lang: <none>
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] server lang: <none>
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] kex follows: False
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:34:39.690 [DEBUG] [Thread-17431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:34:39.691 [DEBUG] [Thread-17431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:34:39.691 [DEBUG] [Thread-17431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:34:39.691 [DEBUG] [Thread-17431] [transport.py] [_log()] Compression: none
2025-11-12T14:34:39.691 [DEBUG] [Thread-17431] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:34:39.750 [DEBUG] [Thread-17431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:34:39.750 [DEBUG] [Thread-17431] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:34:39.751 [DEBUG] [Thread-17431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:34:39.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:34:39.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:34:39.806 [DEBUG] [Thread-17431] [transport.py] [_log()] userauth is OK
2025-11-12T14:34:39.806 [DEBUG] [Thread-17431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:34:39.806 [DEBUG] [Thread-17431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:34:39.806 [DEBUG] [Thread-17431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:34:39.807 [DEBUG] [Thread-17431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:34:39.826 [INFO] [Thread-17431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:34:39.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:34:39.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:34:40.221 [DEBUG] [Thread-17433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:34:40.693 [DEBUG] [Thread-17431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:34:40.693 [DEBUG] [Thread-17431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:34:40.740 [DEBUG] [Thread-17431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:34:40.741 [DEBUG] [Thread-17431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:34:40.750 [DEBUG] [Thread-17431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:34:40.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:34:40.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:34:40.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:34:40.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:34:40.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:34:40.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:34:40.787 [DEBUG] [Thread-17431] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:34:55.282 [DEBUG] [Thread-17434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:35:10.316 [DEBUG] [Thread-17435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:35:10.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:35:10.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:35:10.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-11-12T14:35:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 34, 46), 32.79, 11.24, 0.0, 28.76, 27.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:35:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:34:46
2025-11-12T14:35:11.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:35:11.692 [DEBUG] [Thread-17436] [transport.py] [_log()] starting thread (client mode): 0x173462f0
2025-11-12T14:35:11.692 [DEBUG] [Thread-17436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:35:11.712 [DEBUG] [Thread-17436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:35:11.712 [INFO] [Thread-17436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:35:11.715 [DEBUG] [Thread-17436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] client lang: <none>
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] server lang: <none>
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] kex follows: False
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] Compression: none
2025-11-12T14:35:11.716 [DEBUG] [Thread-17436] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:35:11.726 [DEBUG] [Thread-17436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:35:11.726 [DEBUG] [Thread-17436] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:35:11.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:35:11.727 [DEBUG] [Thread-17436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:35:11.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:35:11.730 [DEBUG] [Thread-17436] [transport.py] [_log()] userauth is OK
2025-11-12T14:35:11.730 [DEBUG] [Thread-17436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:35:11.730 [DEBUG] [Thread-17436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:35:11.730 [DEBUG] [Thread-17436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:35:11.730 [DEBUG] [Thread-17436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:35:11.749 [INFO] [Thread-17436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:35:11.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:35:12.339 [DEBUG] [Thread-17436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:35:12.340 [DEBUG] [Thread-17436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:35:12.340 [DEBUG] [Thread-17436] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:35:12.380 [DEBUG] [Thread-17436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:35:12.381 [DEBUG] [Thread-17436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:35:12.383 [DEBUG] [Thread-17436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:35:12.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:35:12.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:35:12.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:35:12.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:35:12.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:35:12.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:35:12.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:35:12.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:35:12.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:35:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.524393 -999.00  +26.80  38.31     17   -0.10 1 1 2 1 1   888    0 24.16 -122.83 ----- 38.3 38.3 279.8 44.3 30.5 -24.2 30.3 -22.2 30.1 -24.0 30.8 -23.1
2025-11-12T14:35:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:35:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:35:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.524393
2025-11-12T14:35:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:35:12.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:35:12.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:35:12.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:35:12.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:35:12.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:34:46', tmtdew=32.79, humidity=11.24, cloud=0.0, wind=28.76, temperature=27.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:35:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:35:12.403 [DEBUG] [Thread-17436] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:35:12.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:35:12.496 [DEBUG] [Thread-17439] [transport.py] [_log()] starting thread (client mode): 0x17347640
2025-11-12T14:35:12.497 [DEBUG] [Thread-17439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:35:12.513 [DEBUG] [Thread-17439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:35:12.513 [INFO] [Thread-17439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:35:12.524 [DEBUG] [Thread-17439] [transport.py] [_log()] client lang: <none>
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] server lang: <none>
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] kex follows: False
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] Compression: none
2025-11-12T14:35:12.525 [DEBUG] [Thread-17439] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:35:12.582 [DEBUG] [Thread-17439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:35:12.582 [DEBUG] [Thread-17439] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:35:12.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:35:12.584 [DEBUG] [Thread-17439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:35:12.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:35:12.638 [DEBUG] [Thread-17439] [transport.py] [_log()] userauth is OK
2025-11-12T14:35:12.638 [DEBUG] [Thread-17439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:35:12.638 [DEBUG] [Thread-17439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:35:12.638 [DEBUG] [Thread-17439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:35:12.638 [DEBUG] [Thread-17439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:35:12.658 [INFO] [Thread-17439] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:35:12.658 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:35:12.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:35:13.504 [DEBUG] [Thread-17439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:35:13.504 [DEBUG] [Thread-17439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:35:13.551 [DEBUG] [Thread-17439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:35:13.551 [DEBUG] [Thread-17439] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:35:13.560 [DEBUG] [Thread-17439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:35:13.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:35:13.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-11-12T14:35:13.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:35:13.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:35:13.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:35:13.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:35:13.595 [DEBUG] [Thread-17439] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:35:25.352 [DEBUG] [Thread-17441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:35:28.860 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:35:28.861 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:35:36.584 [DEBUG] [Thread-17442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:35:40.405 [DEBUG] [Thread-17443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:35:43.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:35:43.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:35:43.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-11-12T14:35:44.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 35, 18), 32.93, 11.15, 0.0, 28.27, 27.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:35:44.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:35:18
2025-11-12T14:35:44.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:35:44.558 [DEBUG] [Thread-17444] [transport.py] [_log()] starting thread (client mode): 0x149abeb0
2025-11-12T14:35:44.558 [DEBUG] [Thread-17444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:35:44.572 [DEBUG] [Thread-17444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:35:44.572 [INFO] [Thread-17444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:35:44.573 [DEBUG] [Thread-17444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:35:44.573 [DEBUG] [Thread-17444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] client lang: <none>
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] server lang: <none>
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] kex follows: False
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] Compression: none
2025-11-12T14:35:44.574 [DEBUG] [Thread-17444] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:35:44.582 [DEBUG] [Thread-17444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:35:44.582 [DEBUG] [Thread-17444] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:35:44.582 [DEBUG] [Thread-17444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:35:44.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:35:44.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:35:44.583 [DEBUG] [Thread-17444] [transport.py] [_log()] userauth is OK
2025-11-12T14:35:44.583 [DEBUG] [Thread-17444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:35:44.583 [DEBUG] [Thread-17444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:35:44.583 [DEBUG] [Thread-17444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:35:44.584 [DEBUG] [Thread-17444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:35:44.597 [INFO] [Thread-17444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:35:44.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:35:45.191 [DEBUG] [Thread-17444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:35:45.191 [DEBUG] [Thread-17444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:35:45.191 [DEBUG] [Thread-17444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:35:45.232 [DEBUG] [Thread-17444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:35:45.232 [DEBUG] [Thread-17444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:35:45.235 [DEBUG] [Thread-17444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:35:45.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:35:45.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:35:45.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:35:45.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:35:45.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:35:45.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:35:45.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:35:45.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:35:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:35:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.524740 -999.00  +26.50  26.74     17   -0.20 1 1 1 1 1   888    0 24.09 -113.45 ----- 26.7 26.7 295.6 52.4 30.4 -25.9 30.2 -23.1 29.9 -27.1 30.8 -23.1
2025-11-12T14:35:45.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:35:45.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:35:45.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.524740
2025-11-12T14:35:45.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:35:45.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:35:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:35:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:35:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:35:45.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:35:18', tmtdew=32.93, humidity=11.15, cloud=0.0, wind=28.27, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:35:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:35:45.254 [DEBUG] [Thread-17444] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:35:45.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:35:45.349 [DEBUG] [Thread-17447] [transport.py] [_log()] starting thread (client mode): 0x149aa3b0
2025-11-12T14:35:45.349 [DEBUG] [Thread-17447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:35:45.364 [DEBUG] [Thread-17447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:35:45.365 [INFO] [Thread-17447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:35:45.372 [DEBUG] [Thread-17447] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:35:45.372 [DEBUG] [Thread-17447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:35:45.372 [DEBUG] [Thread-17447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:35:45.372 [DEBUG] [Thread-17447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] client lang: <none>
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] server lang: <none>
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] kex follows: False
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] Compression: none
2025-11-12T14:35:45.373 [DEBUG] [Thread-17447] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:35:45.428 [DEBUG] [Thread-17447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:35:45.429 [DEBUG] [Thread-17447] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:35:45.429 [DEBUG] [Thread-17447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:35:45.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:35:45.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:35:45.485 [DEBUG] [Thread-17447] [transport.py] [_log()] userauth is OK
2025-11-12T14:35:45.485 [DEBUG] [Thread-17447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:35:45.485 [DEBUG] [Thread-17447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:35:45.485 [DEBUG] [Thread-17447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:35:45.486 [DEBUG] [Thread-17447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:35:45.504 [INFO] [Thread-17447] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:35:45.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:35:45.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:35:46.381 [DEBUG] [Thread-17447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:35:46.381 [DEBUG] [Thread-17447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:35:46.429 [DEBUG] [Thread-17447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:35:46.430 [DEBUG] [Thread-17447] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:35:46.438 [DEBUG] [Thread-17447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:35:46.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:35:46.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-11-12T14:35:46.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-11-12T14:35:46.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:35:46.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:35:46.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:35:46.472 [DEBUG] [Thread-17447] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:35:55.432 [DEBUG] [Thread-17449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:36:10.491 [DEBUG] [Thread-17450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:36:16.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:36:16.495 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:36:16.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-11-12T14:36:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 35, 50), 32.7, 11.23, 0.0, 35.04, 27.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:36:17.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:35:50
2025-11-12T14:36:17.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:36:17.433 [DEBUG] [Thread-17451] [transport.py] [_log()] starting thread (client mode): 0x173f8070
2025-11-12T14:36:17.433 [DEBUG] [Thread-17451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:36:17.452 [DEBUG] [Thread-17451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:36:17.452 [INFO] [Thread-17451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] client lang: <none>
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] server lang: <none>
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] kex follows: False
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:36:17.455 [DEBUG] [Thread-17451] [transport.py] [_log()] Compression: none
2025-11-12T14:36:17.456 [DEBUG] [Thread-17451] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:36:17.473 [DEBUG] [Thread-17451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:36:17.473 [DEBUG] [Thread-17451] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:36:17.474 [DEBUG] [Thread-17451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:36:17.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:36:17.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:36:17.475 [DEBUG] [Thread-17451] [transport.py] [_log()] userauth is OK
2025-11-12T14:36:17.475 [DEBUG] [Thread-17451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:36:17.475 [DEBUG] [Thread-17451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:36:17.475 [DEBUG] [Thread-17451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:36:17.475 [DEBUG] [Thread-17451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:36:17.485 [INFO] [Thread-17451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:36:17.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:36:18.092 [DEBUG] [Thread-17451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:36:18.092 [DEBUG] [Thread-17451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:36:18.092 [DEBUG] [Thread-17451] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:36:18.133 [DEBUG] [Thread-17451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:36:18.133 [DEBUG] [Thread-17451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:36:18.135 [DEBUG] [Thread-17451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:36:18.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:36:18.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:36:18.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:36:18.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:36:18.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:36:18.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:36:18.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:36:18.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:36:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:36:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.525088 -999.00  +26.60  34.26     17   -0.10 1 2 2 1 1   888    0 23.15 -120.86 ----- 34.3 34.3 278.6 43.9 30.6 -24.3 30.3 -22.1 30.2 -21.1 30.9 -21.9
2025-11-12T14:36:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:36:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:36:18.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.525088
2025-11-12T14:36:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:36:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:36:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:36:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:36:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:36:18.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:35:50', tmtdew=32.7, humidity=11.23, cloud=0.0, wind=35.04, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:36:07.603', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:36:18.153 [DEBUG] [Thread-17451] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:36: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-11-12T14:36:18.238 [DEBUG] [Thread-17454] [transport.py] [_log()] starting thread (client mode): 0x1499dfc0
2025-11-12T14:36:18.239 [DEBUG] [Thread-17454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:36:18.253 [DEBUG] [Thread-17454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:36:18.253 [INFO] [Thread-17454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] client lang: <none>
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] server lang: <none>
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] kex follows: False
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] Compression: none
2025-11-12T14:36:18.261 [DEBUG] [Thread-17454] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:36:18.316 [DEBUG] [Thread-17454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:36:18.316 [DEBUG] [Thread-17454] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:36:18.316 [DEBUG] [Thread-17454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:36:18.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:36:18.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:36:18.373 [DEBUG] [Thread-17454] [transport.py] [_log()] userauth is OK
2025-11-12T14:36:18.373 [DEBUG] [Thread-17454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:36:18.373 [DEBUG] [Thread-17454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:36:18.373 [DEBUG] [Thread-17454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:36:18.373 [DEBUG] [Thread-17454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:36:18.387 [INFO] [Thread-17454] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:36:18.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:36:18.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:36:19.232 [DEBUG] [Thread-17454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:36:19.232 [DEBUG] [Thread-17454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:36:19.280 [DEBUG] [Thread-17454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:36:19.280 [DEBUG] [Thread-17454] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:36:19.288 [DEBUG] [Thread-17454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:36:19.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:36:19.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-11-12T14:36:19.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-11-12T14:36:19.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:36:19.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:36:19.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:36:19.320 [DEBUG] [Thread-17454] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:36:25.528 [DEBUG] [Thread-17456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:36:29.000 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:36:29.002 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:36:36.623 [DEBUG] [Thread-17457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:36:40.583 [DEBUG] [Thread-17458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:36:49.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:36:49.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:36:49.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-11-12T14:36:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 36, 22), 32.77, 11.16, 0.0, 36.58, 27.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:36:49.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:36:22
2025-11-12T14:36:50.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:36:50.256 [DEBUG] [Thread-17459] [transport.py] [_log()] starting thread (client mode): 0x149a8790
2025-11-12T14:36:50.256 [DEBUG] [Thread-17459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:36:50.277 [DEBUG] [Thread-17459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:36:50.278 [INFO] [Thread-17459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] client lang: <none>
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] server lang: <none>
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] kex follows: False
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:36:50.281 [DEBUG] [Thread-17459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:36:50.282 [DEBUG] [Thread-17459] [transport.py] [_log()] Compression: none
2025-11-12T14:36:50.282 [DEBUG] [Thread-17459] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:36:50.298 [DEBUG] [Thread-17459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:36:50.299 [DEBUG] [Thread-17459] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:36:50.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:36:50.300 [DEBUG] [Thread-17459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:36:50.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:36:50.302 [DEBUG] [Thread-17459] [transport.py] [_log()] userauth is OK
2025-11-12T14:36:50.302 [DEBUG] [Thread-17459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:36:50.303 [DEBUG] [Thread-17459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:36:50.303 [DEBUG] [Thread-17459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:36:50.303 [DEBUG] [Thread-17459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:36:50.335 [INFO] [Thread-17459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:36:50.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:36:50.903 [DEBUG] [Thread-17459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:36:50.904 [DEBUG] [Thread-17459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:36:50.904 [DEBUG] [Thread-17459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:36:50.945 [DEBUG] [Thread-17459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:36:50.945 [DEBUG] [Thread-17459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:36:50.948 [DEBUG] [Thread-17459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:36:50.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:36:50.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:36:50.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:36:50.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:36:50.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:36:50.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:36:50.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:36:50.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:36:50.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:36:50.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.525435 -999.00  +26.50  31.77     17   -0.20 1 1 2 1 1   888    0 24.09 -113.64 ----- 31.8 31.8 275.8 48.6 30.4 -25.6 30.3 -22.7 30.0 -24.9 30.9 -23.8
2025-11-12T14:36:50.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:36:50.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:36:50.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.525435
2025-11-12T14:36:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:36:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:36:50.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:36:50.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:36:50.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:36:50.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:36:22', tmtdew=32.77, humidity=11.16, cloud=0.0, wind=36.58, temperature=27.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:36:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:36:50.970 [DEBUG] [Thread-17459] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:36:51.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:36:51.065 [DEBUG] [Thread-17462] [transport.py] [_log()] starting thread (client mode): 0x149ab6a0
2025-11-12T14:36:51.065 [DEBUG] [Thread-17462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:36:51.080 [DEBUG] [Thread-17462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:36:51.080 [INFO] [Thread-17462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] client lang: <none>
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] server lang: <none>
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] kex follows: False
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:36:51.088 [DEBUG] [Thread-17462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:36:51.089 [DEBUG] [Thread-17462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:36:51.089 [DEBUG] [Thread-17462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:36:51.089 [DEBUG] [Thread-17462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:36:51.089 [DEBUG] [Thread-17462] [transport.py] [_log()] Compression: none
2025-11-12T14:36:51.089 [DEBUG] [Thread-17462] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:36:51.145 [DEBUG] [Thread-17462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:36:51.145 [DEBUG] [Thread-17462] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:36:51.146 [DEBUG] [Thread-17462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:36:51.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:36:51.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:36:51.202 [DEBUG] [Thread-17462] [transport.py] [_log()] userauth is OK
2025-11-12T14:36:51.203 [DEBUG] [Thread-17462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:36:51.203 [DEBUG] [Thread-17462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:36:51.203 [DEBUG] [Thread-17462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:36:51.203 [DEBUG] [Thread-17462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:36:51.222 [INFO] [Thread-17462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:36:51.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:36:51.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:36:52.111 [DEBUG] [Thread-17462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:36:52.112 [DEBUG] [Thread-17462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:36:52.159 [DEBUG] [Thread-17462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:36:52.159 [DEBUG] [Thread-17462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:36:52.168 [DEBUG] [Thread-17462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:36:52.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:36:52.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-11-12T14:36:52.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:36:52.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:36:52.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:36:52.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:36:52.204 [DEBUG] [Thread-17462] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:36:55.615 [DEBUG] [Thread-17464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:37:10.657 [DEBUG] [Thread-17465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:37:22.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:37:22.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:37:22.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:37:22.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 36, 54), 32.72, 11.24, 0.0, 39.29, 27.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:37:22.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:36:54
2025-11-12T14:37:23.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:37:23.147 [DEBUG] [Thread-17466] [transport.py] [_log()] starting thread (client mode): 0x17399b10
2025-11-12T14:37:23.148 [DEBUG] [Thread-17466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:37:23.167 [DEBUG] [Thread-17466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:37:23.167 [INFO] [Thread-17466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:37:23.170 [DEBUG] [Thread-17466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] client lang: <none>
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] server lang: <none>
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] kex follows: False
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:37:23.171 [DEBUG] [Thread-17466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:37:23.172 [DEBUG] [Thread-17466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:37:23.172 [DEBUG] [Thread-17466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:37:23.172 [DEBUG] [Thread-17466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:37:23.172 [DEBUG] [Thread-17466] [transport.py] [_log()] Compression: none
2025-11-12T14:37:23.172 [DEBUG] [Thread-17466] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:37:23.189 [DEBUG] [Thread-17466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:37:23.190 [DEBUG] [Thread-17466] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:37:23.191 [DEBUG] [Thread-17466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:37:23.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:37:23.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:37:23.193 [DEBUG] [Thread-17466] [transport.py] [_log()] userauth is OK
2025-11-12T14:37:23.193 [DEBUG] [Thread-17466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:37:23.194 [DEBUG] [Thread-17466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:37:23.194 [DEBUG] [Thread-17466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:37:23.194 [DEBUG] [Thread-17466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:37:23.216 [INFO] [Thread-17466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:37:23.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:37:23.813 [DEBUG] [Thread-17466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:37:23.813 [DEBUG] [Thread-17466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:37:23.813 [DEBUG] [Thread-17466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:37:23.853 [DEBUG] [Thread-17466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:37:23.854 [DEBUG] [Thread-17466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:37:23.857 [DEBUG] [Thread-17466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:37:23.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:37:23.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:37:23.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:37:23.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:37:23.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:37:23.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:37:23.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:37:23.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:37:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:37:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.525782 -999.00  +26.20  38.30     17   -0.30 1 1 2 1 1   888    0 24.07 -101.32 ----- 38.3 38.3 272.4 46.6 30.2 -26.5 30.2 -23.6 29.8 -29.7 30.7 -26.5
2025-11-12T14:37:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:37:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:37:23.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.525782
2025-11-12T14:37:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:37:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:37:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:37:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:37:23.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:37:23.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:36:54', tmtdew=32.72, humidity=11.24, cloud=0.0, wind=39.29, temperature=27.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:37:07.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:37:23.883 [DEBUG] [Thread-17466] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:37:23.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:37:23.979 [DEBUG] [Thread-17469] [transport.py] [_log()] starting thread (client mode): 0x17347640
2025-11-12T14:37:23.979 [DEBUG] [Thread-17469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:37:23.995 [DEBUG] [Thread-17469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:37:23.995 [INFO] [Thread-17469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] client lang: <none>
2025-11-12T14:37:24.003 [DEBUG] [Thread-17469] [transport.py] [_log()] server lang: <none>
2025-11-12T14:37:24.004 [DEBUG] [Thread-17469] [transport.py] [_log()] kex follows: False
2025-11-12T14:37:24.004 [DEBUG] [Thread-17469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:37:24.004 [DEBUG] [Thread-17469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:37:24.004 [DEBUG] [Thread-17469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:37:24.004 [DEBUG] [Thread-17469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:37:24.004 [DEBUG] [Thread-17469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:37:24.004 [DEBUG] [Thread-17469] [transport.py] [_log()] Compression: none
2025-11-12T14:37:24.004 [DEBUG] [Thread-17469] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:37:24.062 [DEBUG] [Thread-17469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:37:24.063 [DEBUG] [Thread-17469] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:37:24.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:37:24.064 [DEBUG] [Thread-17469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:37:24.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:37:24.122 [DEBUG] [Thread-17469] [transport.py] [_log()] userauth is OK
2025-11-12T14:37:24.122 [DEBUG] [Thread-17469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:37:24.122 [DEBUG] [Thread-17469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:37:24.122 [DEBUG] [Thread-17469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:37:24.122 [DEBUG] [Thread-17469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:37:24.141 [INFO] [Thread-17469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:37:24.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:37:24.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:37:24.967 [DEBUG] [Thread-17469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:37:24.967 [DEBUG] [Thread-17469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:37:25.014 [DEBUG] [Thread-17469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:37:25.015 [DEBUG] [Thread-17469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:37:25.024 [DEBUG] [Thread-17469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:37:25.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:37:25.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-11-12T14:37:25.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-11-12T14:37:25.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:37:25.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:37:25.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:37:25.060 [DEBUG] [Thread-17469] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:37:25.694 [DEBUG] [Thread-17471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:37:29.145 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:37:29.146 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:37:36.651 [DEBUG] [Thread-17472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:37:40.741 [DEBUG] [Thread-17473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:37:55.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:37:55.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:37:55.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:37:55.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 37, 26), 32.68, 11.26, 0.0, 31.44, 27.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:37:55.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:37:26
2025-11-12T14:37:55.772 [DEBUG] [Thread-17474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:37:55.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:37:56.015 [DEBUG] [Thread-17475] [transport.py] [_log()] starting thread (client mode): 0x1739af20
2025-11-12T14:37:56.016 [DEBUG] [Thread-17475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:37:56.036 [DEBUG] [Thread-17475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:37:56.036 [INFO] [Thread-17475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] client lang: <none>
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] server lang: <none>
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] kex follows: False
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:37:56.039 [DEBUG] [Thread-17475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:37:56.040 [DEBUG] [Thread-17475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:37:56.040 [DEBUG] [Thread-17475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:37:56.040 [DEBUG] [Thread-17475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:37:56.040 [DEBUG] [Thread-17475] [transport.py] [_log()] Compression: none
2025-11-12T14:37:56.040 [DEBUG] [Thread-17475] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:37:56.057 [DEBUG] [Thread-17475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:37:56.058 [DEBUG] [Thread-17475] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:37:56.059 [DEBUG] [Thread-17475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:37:56.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:37:56.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:37:56.061 [DEBUG] [Thread-17475] [transport.py] [_log()] userauth is OK
2025-11-12T14:37:56.061 [DEBUG] [Thread-17475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:37:56.061 [DEBUG] [Thread-17475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:37:56.062 [DEBUG] [Thread-17475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:37:56.062 [DEBUG] [Thread-17475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:37:56.079 [INFO] [Thread-17475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:37:56.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:37:56.676 [DEBUG] [Thread-17475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:37:56.676 [DEBUG] [Thread-17475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:37:56.676 [DEBUG] [Thread-17475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:37:56.716 [DEBUG] [Thread-17475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:37:56.716 [DEBUG] [Thread-17475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:37:56.719 [DEBUG] [Thread-17475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:37:56.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:37:56.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:37:56.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:37:56.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:37:56.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:37:56.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:37:56.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:37:56.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:37:56.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:37:56.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.526129 -999.00  +26.20  27.68     17   +0.00 1 1 1 1 1   888    0 24.53 -97.29 ----- 27.7 27.7 281.0 35.5 30.4 -23.4 30.1 -22.6 29.8 -23.7 30.6 -22.6
2025-11-12T14:37:56.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:37:56.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:37:56.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.526129
2025-11-12T14:37:56.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:37:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:37:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:37:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:37:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:37:56.742 [DEBUG] [Thread-17475] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:37:56.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:37:26', tmtdew=32.68, humidity=11.26, cloud=0.0, wind=31.44, temperature=27.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:37:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:37:56.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:37:56.839 [DEBUG] [Thread-17478] [transport.py] [_log()] starting thread (client mode): 0x19dd8fa0
2025-11-12T14:37:56.839 [DEBUG] [Thread-17478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:37:56.853 [DEBUG] [Thread-17478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:37:56.853 [INFO] [Thread-17478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:37:56.860 [DEBUG] [Thread-17478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] client lang: <none>
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] server lang: <none>
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] kex follows: False
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] Compression: none
2025-11-12T14:37:56.861 [DEBUG] [Thread-17478] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:37:56.917 [DEBUG] [Thread-17478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:37:56.917 [DEBUG] [Thread-17478] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:37:56.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:37:56.918 [DEBUG] [Thread-17478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:37:56.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:37:56.973 [DEBUG] [Thread-17478] [transport.py] [_log()] userauth is OK
2025-11-12T14:37:56.973 [DEBUG] [Thread-17478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:37:56.973 [DEBUG] [Thread-17478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:37:56.973 [DEBUG] [Thread-17478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:37:56.973 [DEBUG] [Thread-17478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:37:56.995 [INFO] [Thread-17478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:37:56.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:37:56.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:37:57.830 [DEBUG] [Thread-17478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:37:57.830 [DEBUG] [Thread-17478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:37:57.878 [DEBUG] [Thread-17478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:37:57.879 [DEBUG] [Thread-17478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:37:57.887 [DEBUG] [Thread-17478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:37:57.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:37: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')
2025-11-12T14:37:57.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:37:57.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:37:57.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:37:57.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:37:57.921 [DEBUG] [Thread-17478] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:38:10.805 [DEBUG] [Thread-17480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:38:25.862 [DEBUG] [Thread-17481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:38:27.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:38:27.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:38:27.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-11-12T14:38:28.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 37, 58), 32.6, 11.26, 0.0, 33.03, 27.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:38:28.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:37:58
2025-11-12T14:38:28.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:38:28.848 [DEBUG] [Thread-17482] [transport.py] [_log()] starting thread (client mode): 0x19ddb4c0
2025-11-12T14:38:28.848 [DEBUG] [Thread-17482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:38:28.866 [DEBUG] [Thread-17482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:38:28.866 [INFO] [Thread-17482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:38:28.869 [DEBUG] [Thread-17482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:38:28.869 [DEBUG] [Thread-17482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:38:28.869 [DEBUG] [Thread-17482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:38:28.869 [DEBUG] [Thread-17482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:38:28.869 [DEBUG] [Thread-17482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] client lang: <none>
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] server lang: <none>
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] kex follows: False
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] Compression: none
2025-11-12T14:38:28.870 [DEBUG] [Thread-17482] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:38:28.878 [DEBUG] [Thread-17482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:38:28.879 [DEBUG] [Thread-17482] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:38:28.879 [DEBUG] [Thread-17482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:38:28.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:38:28.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:38:28.886 [DEBUG] [Thread-17482] [transport.py] [_log()] userauth is OK
2025-11-12T14:38:28.886 [DEBUG] [Thread-17482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:38:28.886 [DEBUG] [Thread-17482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:38:28.887 [DEBUG] [Thread-17482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:38:28.887 [DEBUG] [Thread-17482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:38:28.905 [INFO] [Thread-17482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:38:28.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:38:29.289 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:38:29.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:38:29.482 [DEBUG] [Thread-17482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:38:29.483 [DEBUG] [Thread-17482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:38:29.483 [DEBUG] [Thread-17482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:38:29.523 [DEBUG] [Thread-17482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:38:29.523 [DEBUG] [Thread-17482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:38:29.526 [DEBUG] [Thread-17482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:38:29.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:38:29.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:38:29.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:38:29.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:38:29.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:38:29.547 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:38:29.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:38:29.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:38:29.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:38:29.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.526477 -999.00  +26.00  30.59     17   -0.10 1 2 2 1 1   888    0 23.70 -99.92 ----- 30.6 30.6 278.2 35.0 30.5 -23.2 30.1 -22.3 29.9 -23.7 30.8 -22.0
2025-11-12T14:38:29.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:38:29.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:38:29.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.526477
2025-11-12T14:38:29.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:38:29.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:38:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:38:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:38:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:38:29.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:37:58', tmtdew=32.6, humidity=11.26, cloud=0.0, wind=33.03, temperature=27.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:38:07.613', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:38:29.549 [DEBUG] [Thread-17482] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:38:29.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:38:29.642 [DEBUG] [Thread-17485] [transport.py] [_log()] starting thread (client mode): 0x17398520
2025-11-12T14:38:29.643 [DEBUG] [Thread-17485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:38:29.658 [DEBUG] [Thread-17485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:38:29.658 [INFO] [Thread-17485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:38:29.665 [DEBUG] [Thread-17485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] client lang: <none>
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] server lang: <none>
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] kex follows: False
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:38:29.666 [DEBUG] [Thread-17485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:38:29.667 [DEBUG] [Thread-17485] [transport.py] [_log()] Compression: none
2025-11-12T14:38:29.667 [DEBUG] [Thread-17485] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:38:29.725 [DEBUG] [Thread-17485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:38:29.726 [DEBUG] [Thread-17485] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:38:29.727 [DEBUG] [Thread-17485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:38:29.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:38:29.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:38:29.782 [DEBUG] [Thread-17485] [transport.py] [_log()] userauth is OK
2025-11-12T14:38:29.782 [DEBUG] [Thread-17485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:38:29.782 [DEBUG] [Thread-17485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:38:29.782 [DEBUG] [Thread-17485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:38:29.782 [DEBUG] [Thread-17485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:38:29.801 [INFO] [Thread-17485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:38:29.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:38:29.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:38:30.657 [DEBUG] [Thread-17485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:38:30.657 [DEBUG] [Thread-17485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:38:30.705 [DEBUG] [Thread-17485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:38:30.705 [DEBUG] [Thread-17485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:38:30.714 [DEBUG] [Thread-17485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:38:30.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:38:30.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-11-12T14:38:30.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:38:30.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:38:30.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:38:30.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:38:30.751 [DEBUG] [Thread-17485] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:38:36.685 [DEBUG] [Thread-17487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:38:40.898 [DEBUG] [Thread-17488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:38:55.946 [DEBUG] [Thread-17489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:39:00.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:39:00.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:39:00.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-11-12T14:39:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 38, 30), 32.47, 11.38, 0.0, 29.84, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:39:01.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:38:30
2025-11-12T14:39:01.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:39:01.704 [DEBUG] [Thread-17490] [transport.py] [_log()] starting thread (client mode): 0x1737dde0
2025-11-12T14:39:01.704 [DEBUG] [Thread-17490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:39:01.715 [DEBUG] [Thread-17490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:39:01.715 [INFO] [Thread-17490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] client lang: <none>
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] server lang: <none>
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] kex follows: False
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] Compression: none
2025-11-12T14:39:01.716 [DEBUG] [Thread-17490] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:39:01.725 [DEBUG] [Thread-17490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:39:01.725 [DEBUG] [Thread-17490] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:39:01.725 [DEBUG] [Thread-17490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:39:01.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:39:01.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:39:01.726 [DEBUG] [Thread-17490] [transport.py] [_log()] userauth is OK
2025-11-12T14:39:01.726 [DEBUG] [Thread-17490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:39:01.726 [DEBUG] [Thread-17490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:39:01.726 [DEBUG] [Thread-17490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:39:01.726 [DEBUG] [Thread-17490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:39:01.739 [INFO] [Thread-17490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:39:01.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:39:02.359 [DEBUG] [Thread-17490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:39:02.359 [DEBUG] [Thread-17490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:39:02.360 [DEBUG] [Thread-17490] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:39:02.401 [DEBUG] [Thread-17490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:39:02.401 [DEBUG] [Thread-17490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:39:02.404 [DEBUG] [Thread-17490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:39:02.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:39:02.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:39:02.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:39:02.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:39:02.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:39:02.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:39:02.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:39:02.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:39:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:39:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.526824 -999.00  +26.20  28.99     17   -0.30 1 2 1 1 1   888    0 24.35 -103.33 ----- 29.0 29.0 275.8 35.2 30.6 -22.2 30.3 -21.7 30.1 -21.2 30.9 -22.5
2025-11-12T14:39:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:39:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:39:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.526824
2025-11-12T14:39:02.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:39:02.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:39:02.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:39:02.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:39:02.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:39:02.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:38:30', tmtdew=32.47, humidity=11.38, cloud=0.0, wind=29.84, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:38:37.594', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:39:02.427 [DEBUG] [Thread-17490] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:39:02.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:39:02.521 [DEBUG] [Thread-17493] [transport.py] [_log()] starting thread (client mode): 0x1737d8a0
2025-11-12T14:39:02.521 [DEBUG] [Thread-17493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:39:02.535 [DEBUG] [Thread-17493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:39:02.536 [INFO] [Thread-17493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:39:02.543 [DEBUG] [Thread-17493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:39:02.543 [DEBUG] [Thread-17493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] client lang: <none>
2025-11-12T14:39:02.544 [DEBUG] [Thread-17493] [transport.py] [_log()] server lang: <none>
2025-11-12T14:39:02.545 [DEBUG] [Thread-17493] [transport.py] [_log()] kex follows: False
2025-11-12T14:39:02.545 [DEBUG] [Thread-17493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:39:02.545 [DEBUG] [Thread-17493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:39:02.545 [DEBUG] [Thread-17493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:39:02.545 [DEBUG] [Thread-17493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:39:02.545 [DEBUG] [Thread-17493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:39:02.545 [DEBUG] [Thread-17493] [transport.py] [_log()] Compression: none
2025-11-12T14:39:02.546 [DEBUG] [Thread-17493] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:39:02.602 [DEBUG] [Thread-17493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:39:02.603 [DEBUG] [Thread-17493] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:39:02.603 [DEBUG] [Thread-17493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:39:02.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:39:02.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:39:02.661 [DEBUG] [Thread-17493] [transport.py] [_log()] userauth is OK
2025-11-12T14:39:02.662 [DEBUG] [Thread-17493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:39:02.662 [DEBUG] [Thread-17493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:39:02.662 [DEBUG] [Thread-17493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:39:02.662 [DEBUG] [Thread-17493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:39:02.681 [INFO] [Thread-17493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:39:02.682 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:39:02.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:39:03.538 [DEBUG] [Thread-17493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:39:03.538 [DEBUG] [Thread-17493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:39:03.586 [DEBUG] [Thread-17493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:39:03.586 [DEBUG] [Thread-17493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:39:03.594 [DEBUG] [Thread-17493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:39:03.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:39:03.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:39:03.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-11-12T14:39:03.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:39:03.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:39:03.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:39:03.630 [DEBUG] [Thread-17493] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:39:10.980 [DEBUG] [Thread-17495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:39:26.034 [DEBUG] [Thread-17496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:39:29.439 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:39:29.440 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:39:33.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:39:33.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:39:33.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-11-12T14:39:34.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 39, 2), 32.51, 11.34, 0.0, 32.52, 27.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:39:34.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:39:02
2025-11-12T14:39:34.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:39:34.590 [DEBUG] [Thread-17497] [transport.py] [_log()] starting thread (client mode): 0x17344070
2025-11-12T14:39:34.590 [DEBUG] [Thread-17497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:39:34.610 [DEBUG] [Thread-17497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:39:34.610 [INFO] [Thread-17497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] client lang: <none>
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] server lang: <none>
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] kex follows: False
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] Compression: none
2025-11-12T14:39:34.612 [DEBUG] [Thread-17497] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:39:34.620 [DEBUG] [Thread-17497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:39:34.620 [DEBUG] [Thread-17497] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:39:34.620 [DEBUG] [Thread-17497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:39:34.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:39:34.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:39:34.621 [DEBUG] [Thread-17497] [transport.py] [_log()] userauth is OK
2025-11-12T14:39:34.621 [DEBUG] [Thread-17497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:39:34.621 [DEBUG] [Thread-17497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:39:34.621 [DEBUG] [Thread-17497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:39:34.622 [DEBUG] [Thread-17497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:39:34.631 [INFO] [Thread-17497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:39:34.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:39:35.244 [DEBUG] [Thread-17497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:39:35.244 [DEBUG] [Thread-17497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:39:35.244 [DEBUG] [Thread-17497] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:39:35.285 [DEBUG] [Thread-17497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:39:35.285 [DEBUG] [Thread-17497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:39:35.286 [DEBUG] [Thread-17497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:39:35.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:39:35.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:39:35.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:39:35.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:39:35.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:39:35.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:39:35.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.527171 -999.00  +26.20  35.50     17   -0.50 1 2 2 1 1   888    0 23.83 -106.57 ----- 35.5 35.5 271.6 43.9 30.8 -22.2 30.4 -21.8 30.3 -19.9 31.1 -21.5
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.527171
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:39:35.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:39:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:39:02', tmtdew=32.51, humidity=11.34, cloud=0.0, wind=32.52, temperature=27.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:39:07.574', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:39:35.303 [DEBUG] [Thread-17497] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:39:35.386 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:39:35.398 [DEBUG] [Thread-17500] [transport.py] [_log()] starting thread (client mode): 0x173f8430
2025-11-12T14:39:35.398 [DEBUG] [Thread-17500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:39:35.412 [DEBUG] [Thread-17500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:39:35.412 [INFO] [Thread-17500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:39:35.419 [DEBUG] [Thread-17500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] client lang: <none>
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] server lang: <none>
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] kex follows: False
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] Compression: none
2025-11-12T14:39:35.420 [DEBUG] [Thread-17500] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:39:35.476 [DEBUG] [Thread-17500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:39:35.476 [DEBUG] [Thread-17500] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:39:35.476 [DEBUG] [Thread-17500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:39:35.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:39:35.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:39:35.537 [DEBUG] [Thread-17500] [transport.py] [_log()] userauth is OK
2025-11-12T14:39:35.537 [DEBUG] [Thread-17500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:39:35.537 [DEBUG] [Thread-17500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:39:35.537 [DEBUG] [Thread-17500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:39:35.537 [DEBUG] [Thread-17500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:39:35.555 [INFO] [Thread-17500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:39:35.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:39:35.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:39:36.382 [DEBUG] [Thread-17500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:39:36.382 [DEBUG] [Thread-17500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:39:36.430 [DEBUG] [Thread-17500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:39:36.430 [DEBUG] [Thread-17500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:39:36.438 [DEBUG] [Thread-17500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:39:36.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:39:36.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-11-12T14:39:36.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-11-12T14:39:36.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:39:36.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:39:36.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:39:36.469 [DEBUG] [Thread-17500] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:39:36.713 [DEBUG] [Thread-17502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:39:41.067 [DEBUG] [Thread-17503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:39:56.126 [DEBUG] [Thread-17504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:40:06.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:40:06.475 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:40:06.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-11-12T14:40:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 39, 34), 32.81, 11.39, 0.0, 27.23, 27.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:40:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:39:34
2025-11-12T14:40:07.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:40:07.455 [DEBUG] [Thread-17505] [transport.py] [_log()] starting thread (client mode): 0x149227a0
2025-11-12T14:40:07.455 [DEBUG] [Thread-17505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:40:07.476 [DEBUG] [Thread-17505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:40:07.476 [INFO] [Thread-17505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] client lang: <none>
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] server lang: <none>
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] kex follows: False
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] Compression: none
2025-11-12T14:40:07.479 [DEBUG] [Thread-17505] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:40:07.495 [DEBUG] [Thread-17505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:40:07.495 [DEBUG] [Thread-17505] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:40:07.496 [DEBUG] [Thread-17505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:40:07.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:40:07.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:40:07.496 [DEBUG] [Thread-17505] [transport.py] [_log()] userauth is OK
2025-11-12T14:40:07.496 [DEBUG] [Thread-17505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:40:07.496 [DEBUG] [Thread-17505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:40:07.496 [DEBUG] [Thread-17505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:40:07.497 [DEBUG] [Thread-17505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:40:07.515 [INFO] [Thread-17505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:40:07.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:40:09.159 [DEBUG] [Thread-17505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:40:09.159 [DEBUG] [Thread-17505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:40:09.159 [DEBUG] [Thread-17505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:40:09.200 [DEBUG] [Thread-17505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:40:09.200 [DEBUG] [Thread-17505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:40:09.204 [DEBUG] [Thread-17505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:40:09.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:40:09.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:40:09.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:40:09.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:40:09.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:40:09.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:40:09.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.527518 -999.00  +26.30  31.27     17   -0.30 1 1 2 1 1   888    0 23.39 -114.25 ----- 31.3 31.3 272.4 40.0 30.7 -23.5 30.4 -22.3 30.1 -24.6 31.0 -21.9
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.527518
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:40:09.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:39:34', tmtdew=32.81, humidity=11.39, cloud=0.0, wind=27.23, temperature=27.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:39:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:40:09.225 [DEBUG] [Thread-17505] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:40:09.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:40:09.310 [DEBUG] [Thread-17508] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T14:40:09.310 [DEBUG] [Thread-17508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:40:09.325 [DEBUG] [Thread-17508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:40:09.325 [INFO] [Thread-17508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:40:09.332 [DEBUG] [Thread-17508] [transport.py] [_log()] client lang: <none>
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] server lang: <none>
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] kex follows: False
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] Compression: none
2025-11-12T14:40:09.333 [DEBUG] [Thread-17508] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:40:09.388 [DEBUG] [Thread-17508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:40:09.388 [DEBUG] [Thread-17508] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:40:09.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:40:09.389 [DEBUG] [Thread-17508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:40:09.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:40:09.445 [DEBUG] [Thread-17508] [transport.py] [_log()] userauth is OK
2025-11-12T14:40:09.445 [DEBUG] [Thread-17508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:40:09.445 [DEBUG] [Thread-17508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:40:09.445 [DEBUG] [Thread-17508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:40:09.445 [DEBUG] [Thread-17508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:40:09.463 [INFO] [Thread-17508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:40:09.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:40:09.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:40:10.303 [DEBUG] [Thread-17508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:40:10.304 [DEBUG] [Thread-17508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:40:10.351 [DEBUG] [Thread-17508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:40:10.351 [DEBUG] [Thread-17508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:40:10.359 [DEBUG] [Thread-17508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:40:10.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:40: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-11-12T14:40: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-11-12T14:40:10.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:40:10.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:40:10.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:40:10.391 [DEBUG] [Thread-17508] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:40:11.158 [DEBUG] [Thread-17510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:40:26.199 [DEBUG] [Thread-17511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:40:29.581 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:40:29.583 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:40:36.747 [DEBUG] [Thread-17512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:40:40.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:40:40.388 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:40:40.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:40:41.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 40, 6), 32.78, 11.46, 0.0, 31.85, 27.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:40:41.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:40:06
2025-11-12T14:40:41.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:40:41.232 [DEBUG] [Thread-17513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:40:41.343 [DEBUG] [Thread-17514] [transport.py] [_log()] starting thread (client mode): 0x1493de70
2025-11-12T14:40:41.343 [DEBUG] [Thread-17514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:40:41.363 [DEBUG] [Thread-17514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:40:41.364 [INFO] [Thread-17514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] client lang: <none>
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] server lang: <none>
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] kex follows: False
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:40:41.367 [DEBUG] [Thread-17514] [transport.py] [_log()] Compression: none
2025-11-12T14:40:41.368 [DEBUG] [Thread-17514] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:40:41.384 [DEBUG] [Thread-17514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:40:41.384 [DEBUG] [Thread-17514] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:40:41.385 [DEBUG] [Thread-17514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:40:41.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:40:41.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:40:41.387 [DEBUG] [Thread-17514] [transport.py] [_log()] userauth is OK
2025-11-12T14:40:41.387 [DEBUG] [Thread-17514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:40:41.387 [DEBUG] [Thread-17514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:40:41.387 [DEBUG] [Thread-17514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:40:41.387 [DEBUG] [Thread-17514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:40:41.405 [INFO] [Thread-17514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:40:41.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:40:42.055 [DEBUG] [Thread-17514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:40:42.055 [DEBUG] [Thread-17514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:40:42.056 [DEBUG] [Thread-17514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:40:42.096 [DEBUG] [Thread-17514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:40:42.097 [DEBUG] [Thread-17514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:40:42.100 [DEBUG] [Thread-17514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:40:42.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:40:42.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:40:42.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:40:42.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:40:42.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:40:42.125 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:40:42.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:40:42.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:40:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:40:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.527518 -999.00  +26.30  31.27     17   -0.30 1 1 2 1 1   888    0 23.39 -114.25 ----- 31.3 31.3 272.4 40.0 30.7 -23.5 30.4 -22.3 30.1 -24.6 31.0 -21.9
2025-11-12T14:40:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:40:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:40:42.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.527518
2025-11-12T14:40:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:40:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:40:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:40:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:40:42.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:40:42.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:40:06', tmtdew=32.78, humidity=11.46, cloud=0.0, wind=31.85, temperature=27.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:39:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:40:42.128 [DEBUG] [Thread-17514] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:40:42.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:40:42.223 [DEBUG] [Thread-17517] [transport.py] [_log()] starting thread (client mode): 0x14963e20
2025-11-12T14:40:42.223 [DEBUG] [Thread-17517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:40:42.238 [DEBUG] [Thread-17517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:40:42.238 [INFO] [Thread-17517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] client lang: <none>
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] server lang: <none>
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] kex follows: False
2025-11-12T14:40:42.246 [DEBUG] [Thread-17517] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:40:42.247 [DEBUG] [Thread-17517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:40:42.247 [DEBUG] [Thread-17517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:40:42.247 [DEBUG] [Thread-17517] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:40:42.247 [DEBUG] [Thread-17517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:40:42.247 [DEBUG] [Thread-17517] [transport.py] [_log()] Compression: none
2025-11-12T14:40:42.247 [DEBUG] [Thread-17517] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:40:42.305 [DEBUG] [Thread-17517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:40:42.306 [DEBUG] [Thread-17517] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:40:42.307 [DEBUG] [Thread-17517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:40:42.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:40:42.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:40:42.361 [DEBUG] [Thread-17517] [transport.py] [_log()] userauth is OK
2025-11-12T14:40:42.362 [DEBUG] [Thread-17517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:40:42.362 [DEBUG] [Thread-17517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:40:42.362 [DEBUG] [Thread-17517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:40:42.362 [DEBUG] [Thread-17517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:40:42.380 [INFO] [Thread-17517] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:40:42.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:40:42.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:40:43.208 [DEBUG] [Thread-17517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:40:43.208 [DEBUG] [Thread-17517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:40:43.257 [DEBUG] [Thread-17517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:40:43.257 [DEBUG] [Thread-17517] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:40:43.266 [DEBUG] [Thread-17517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:40:43.275 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:40:43.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-11-12T14:40:43.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-11-12T14:40:43.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:40:43.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:40:43.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:40:43.303 [DEBUG] [Thread-17517] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:40:56.262 [DEBUG] [Thread-17519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:41:11.317 [DEBUG] [Thread-17520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:41:13.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:41:13.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:41:13.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-11-12T14:41:13.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 41, 10), 33.03, 11.39, 0.0, 30.7, 28.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:41:13.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:41:10
2025-11-12T14:41:14.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:41:14.222 [DEBUG] [Thread-17521] [transport.py] [_log()] starting thread (client mode): 0x173f80d0
2025-11-12T14:41:14.222 [DEBUG] [Thread-17521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:41:14.243 [DEBUG] [Thread-17521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:41:14.244 [INFO] [Thread-17521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] client lang: <none>
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] server lang: <none>
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] kex follows: False
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] Compression: none
2025-11-12T14:41:14.247 [DEBUG] [Thread-17521] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:41:14.265 [DEBUG] [Thread-17521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:41:14.265 [DEBUG] [Thread-17521] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:41:14.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:41:14.266 [DEBUG] [Thread-17521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:41:14.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:41:14.268 [DEBUG] [Thread-17521] [transport.py] [_log()] userauth is OK
2025-11-12T14:41:14.268 [DEBUG] [Thread-17521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:41:14.269 [DEBUG] [Thread-17521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:41:14.269 [DEBUG] [Thread-17521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:41:14.269 [DEBUG] [Thread-17521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:41:14.304 [INFO] [Thread-17521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:41:14.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:41:14.925 [DEBUG] [Thread-17521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:41:14.925 [DEBUG] [Thread-17521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:41:14.925 [DEBUG] [Thread-17521] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:41:14.966 [DEBUG] [Thread-17521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:41:14.966 [DEBUG] [Thread-17521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:41:14.969 [DEBUG] [Thread-17521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:41:14.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:41:14.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:41:14.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:41:14.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:41:14.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:41:14.992 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:41:14.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:41:14.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:41:14.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:41:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.528213 -999.00  +26.40  18.47     18   +0.20 1 1 1 1 1   888    0 23.48 -127.05 ----- 18.5 18.5 271.0 35.3 30.8 -24.3 30.5 -23.1 30.2 -26.8 31.2 -23.5
2025-11-12T14:41:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:41:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:41:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.528213
2025-11-12T14:41:14.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:41:14.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:41:14.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:41:14.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:41:14.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:41:14.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:41:10', tmtdew=33.03, humidity=11.39, cloud=0.0, wind=30.7, temperature=28.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:40:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:41:14.994 [DEBUG] [Thread-17521] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:41:15.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:41:15.087 [DEBUG] [Thread-17524] [transport.py] [_log()] starting thread (client mode): 0x1737d0f0
2025-11-12T14:41:15.087 [DEBUG] [Thread-17524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:41:15.101 [DEBUG] [Thread-17524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:41:15.101 [INFO] [Thread-17524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:41:15.109 [DEBUG] [Thread-17524] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:41:15.110 [DEBUG] [Thread-17524] [transport.py] [_log()] client lang: <none>
2025-11-12T14:41:15.111 [DEBUG] [Thread-17524] [transport.py] [_log()] server lang: <none>
2025-11-12T14:41:15.111 [DEBUG] [Thread-17524] [transport.py] [_log()] kex follows: False
2025-11-12T14:41:15.111 [DEBUG] [Thread-17524] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:41:15.111 [DEBUG] [Thread-17524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:41:15.111 [DEBUG] [Thread-17524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:41:15.111 [DEBUG] [Thread-17524] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:41:15.111 [DEBUG] [Thread-17524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:41:15.112 [DEBUG] [Thread-17524] [transport.py] [_log()] Compression: none
2025-11-12T14:41:15.112 [DEBUG] [Thread-17524] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:41:15.169 [DEBUG] [Thread-17524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:41:15.170 [DEBUG] [Thread-17524] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:41:15.170 [DEBUG] [Thread-17524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:41:15.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:41:15.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:41:15.225 [DEBUG] [Thread-17524] [transport.py] [_log()] userauth is OK
2025-11-12T14:41:15.226 [DEBUG] [Thread-17524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:41:15.226 [DEBUG] [Thread-17524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:41:15.226 [DEBUG] [Thread-17524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:41:15.226 [DEBUG] [Thread-17524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:41:15.246 [INFO] [Thread-17524] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:41:15.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:41:15.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:41:16.122 [DEBUG] [Thread-17524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:41:16.122 [DEBUG] [Thread-17524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:41:16.174 [DEBUG] [Thread-17524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:41:16.175 [DEBUG] [Thread-17524] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:41:16.183 [DEBUG] [Thread-17524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:41:16.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:41:16.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-11-12T14:41: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') -> 00000000
2025-11-12T14:41:16.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:41:16.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:41:16.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:41:16.219 [DEBUG] [Thread-17524] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:41:26.347 [DEBUG] [Thread-17526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:41:29.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:41:29.725 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:41:36.784 [DEBUG] [Thread-17527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:41:41.387 [DEBUG] [Thread-17528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:41:46.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:41:46.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:41:46.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-11-12T14:41:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 41, 42), 32.44, 11.49, 0.0, 38.08, 28.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:41:46.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:41:42
2025-11-12T14:41:46.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:41:47.137 [DEBUG] [Thread-17529] [transport.py] [_log()] starting thread (client mode): 0x14961db0
2025-11-12T14:41:47.137 [DEBUG] [Thread-17529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:41:47.157 [DEBUG] [Thread-17529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:41:47.158 [INFO] [Thread-17529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] client lang: <none>
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] server lang: <none>
2025-11-12T14:41:47.159 [DEBUG] [Thread-17529] [transport.py] [_log()] kex follows: False
2025-11-12T14:41:47.160 [DEBUG] [Thread-17529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:41:47.160 [DEBUG] [Thread-17529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:41:47.160 [DEBUG] [Thread-17529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:41:47.160 [DEBUG] [Thread-17529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:41:47.160 [DEBUG] [Thread-17529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:41:47.160 [DEBUG] [Thread-17529] [transport.py] [_log()] Compression: none
2025-11-12T14:41:47.160 [DEBUG] [Thread-17529] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:41:47.179 [DEBUG] [Thread-17529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:41:47.180 [DEBUG] [Thread-17529] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:41:47.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:41:47.181 [DEBUG] [Thread-17529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:41:47.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:41:47.183 [DEBUG] [Thread-17529] [transport.py] [_log()] userauth is OK
2025-11-12T14:41:47.183 [DEBUG] [Thread-17529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:41:47.183 [DEBUG] [Thread-17529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:41:47.183 [DEBUG] [Thread-17529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:41:47.183 [DEBUG] [Thread-17529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:41:47.215 [INFO] [Thread-17529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:41:47.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:41:47.845 [DEBUG] [Thread-17529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:41:47.846 [DEBUG] [Thread-17529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:41:47.846 [DEBUG] [Thread-17529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:41:47.887 [DEBUG] [Thread-17529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:41:47.887 [DEBUG] [Thread-17529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:41:47.890 [DEBUG] [Thread-17529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:41:47.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:41:47.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:41:47.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:41:47.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:41:47.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:41:47.914 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:41:47.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:41:47.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:41:47.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:41:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.528560 -999.00  +26.40  29.65     18   +0.30 1 2 1 1 1   888    0 23.03 -129.68 ----- 29.6 29.6 275.8 44.8 30.9 -22.4 30.6 -21.9 30.5 -24.0 31.3 -22.3
2025-11-12T14:41:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:41:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:41:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.528560
2025-11-12T14:41:47.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:41:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:41:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:41:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:41:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:41:47.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:41:42', tmtdew=32.44, humidity=11.49, cloud=0.0, wind=38.08, temperature=28.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:41:07.584', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:41:47.917 [DEBUG] [Thread-17529] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:41:48.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:41:48.011 [DEBUG] [Thread-17532] [transport.py] [_log()] starting thread (client mode): 0x17345bd0
2025-11-12T14:41:48.011 [DEBUG] [Thread-17532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:41:48.026 [DEBUG] [Thread-17532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:41:48.026 [INFO] [Thread-17532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:41:48.035 [DEBUG] [Thread-17532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] client lang: <none>
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] server lang: <none>
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] kex follows: False
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:41:48.036 [DEBUG] [Thread-17532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:41:48.037 [DEBUG] [Thread-17532] [transport.py] [_log()] Compression: none
2025-11-12T14:41:48.037 [DEBUG] [Thread-17532] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:41:48.094 [DEBUG] [Thread-17532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:41:48.094 [DEBUG] [Thread-17532] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:41:48.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:41:48.096 [DEBUG] [Thread-17532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:41:48.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:41:48.158 [DEBUG] [Thread-17532] [transport.py] [_log()] userauth is OK
2025-11-12T14:41:48.158 [DEBUG] [Thread-17532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:41:48.158 [DEBUG] [Thread-17532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:41:48.158 [DEBUG] [Thread-17532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:41:48.158 [DEBUG] [Thread-17532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:41:48.177 [INFO] [Thread-17532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:41:48.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:41:48.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:41:49.047 [DEBUG] [Thread-17532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:41:49.048 [DEBUG] [Thread-17532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:41:49.096 [DEBUG] [Thread-17532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:41:49.096 [DEBUG] [Thread-17532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:41:49.105 [DEBUG] [Thread-17532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:41:49.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:41: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')
2025-11-12T14:41:49.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-11-12T14:41:49.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:41:49.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:41:49.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:41:49.141 [DEBUG] [Thread-17532] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:41:56.427 [DEBUG] [Thread-17534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:42:11.488 [DEBUG] [Thread-17535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:42:19.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:42:19.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:42:19.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-11-12T14:42:19.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 42, 14), 32.37, 11.54, 0.0, 37.11, 28.03, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:42:19.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:42:14
2025-11-12T14:42:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:42:20.071 [DEBUG] [Thread-17536] [transport.py] [_log()] starting thread (client mode): 0x149ab0d0
2025-11-12T14:42:20.071 [DEBUG] [Thread-17536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:42:20.092 [DEBUG] [Thread-17536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:42:20.092 [INFO] [Thread-17536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] client lang: <none>
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] server lang: <none>
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] kex follows: False
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] Compression: none
2025-11-12T14:42:20.095 [DEBUG] [Thread-17536] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:42:20.113 [DEBUG] [Thread-17536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:42:20.113 [DEBUG] [Thread-17536] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:42:20.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:42:20.114 [DEBUG] [Thread-17536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:42:20.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:42:20.117 [DEBUG] [Thread-17536] [transport.py] [_log()] userauth is OK
2025-11-12T14:42:20.117 [DEBUG] [Thread-17536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:42:20.117 [DEBUG] [Thread-17536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:42:20.117 [DEBUG] [Thread-17536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:42:20.117 [DEBUG] [Thread-17536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:42:20.140 [INFO] [Thread-17536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:42:20.140 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:42:20.776 [DEBUG] [Thread-17536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:42:20.776 [DEBUG] [Thread-17536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:42:20.777 [DEBUG] [Thread-17536] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:42:20.819 [DEBUG] [Thread-17536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:42:20.819 [DEBUG] [Thread-17536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:42:20.822 [DEBUG] [Thread-17536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:42:20.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:42:20.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:42:20.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:42:20.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:42:20.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:42:20.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:42:20.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:42:20.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:42:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:42:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.528907 -999.00  +26.80  26.94     18   +0.60 1 2 1 1 1   888    0 23.35 -134.75 ----- 26.9 26.9 266.2 33.4 31.1 -22.6 30.7 -21.5 30.8 -20.6 31.6 -20.6
2025-11-12T14:42:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:42:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:42:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.528907
2025-11-12T14:42:20.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:42:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:42:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:42:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:42:20.846 [DEBUG] [Thread-17536] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:42:20.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:42:20.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:42:14', tmtdew=32.37, humidity=11.54, cloud=0.0, wind=37.11, temperature=28.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:41:37.565', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:42:20.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:42:20.939 [DEBUG] [Thread-17539] [transport.py] [_log()] starting thread (client mode): 0x19dda320
2025-11-12T14:42:20.939 [DEBUG] [Thread-17539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:42:20.953 [DEBUG] [Thread-17539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:42:20.953 [INFO] [Thread-17539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] client lang: <none>
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] server lang: <none>
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] kex follows: False
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:42:20.966 [DEBUG] [Thread-17539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:42:20.967 [DEBUG] [Thread-17539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:42:20.967 [DEBUG] [Thread-17539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:42:20.967 [DEBUG] [Thread-17539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:42:20.967 [DEBUG] [Thread-17539] [transport.py] [_log()] Compression: none
2025-11-12T14:42:20.967 [DEBUG] [Thread-17539] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:42:21.022 [DEBUG] [Thread-17539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:42:21.022 [DEBUG] [Thread-17539] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:42:21.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:42:21.023 [DEBUG] [Thread-17539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:42:21.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:42:21.079 [DEBUG] [Thread-17539] [transport.py] [_log()] userauth is OK
2025-11-12T14:42:21.079 [DEBUG] [Thread-17539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:42:21.079 [DEBUG] [Thread-17539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:42:21.079 [DEBUG] [Thread-17539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:42:21.079 [DEBUG] [Thread-17539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:42:21.098 [INFO] [Thread-17539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:42:21.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:42:21.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:42:21.984 [DEBUG] [Thread-17539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:42:21.984 [DEBUG] [Thread-17539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:42:22.032 [DEBUG] [Thread-17539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:42:22.032 [DEBUG] [Thread-17539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:42:22.041 [DEBUG] [Thread-17539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:42:22.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:42:22.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:42:22.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:42:22.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:42:22.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:42:22.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:42:22.075 [DEBUG] [Thread-17539] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:42:26.524 [DEBUG] [Thread-17541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:42:29.866 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:42:29.867 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:42:36.823 [DEBUG] [Thread-17542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:42:41.577 [DEBUG] [Thread-17543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:42:52.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:42:52.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:42:52.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-11-12T14:42:52.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 42, 46), 32.27, 11.58, 0.0, 34.25, 27.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:42:52.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:42:46
2025-11-12T14:42:52.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:42:52.998 [DEBUG] [Thread-17544] [transport.py] [_log()] starting thread (client mode): 0x14961ab0
2025-11-12T14:42:52.998 [DEBUG] [Thread-17544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:42:53.018 [DEBUG] [Thread-17544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:42:53.018 [INFO] [Thread-17544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:42:53.021 [DEBUG] [Thread-17544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] client lang: <none>
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] server lang: <none>
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] kex follows: False
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:42:53.022 [DEBUG] [Thread-17544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:42:53.023 [DEBUG] [Thread-17544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:42:53.023 [DEBUG] [Thread-17544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:42:53.023 [DEBUG] [Thread-17544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:42:53.023 [DEBUG] [Thread-17544] [transport.py] [_log()] Compression: none
2025-11-12T14:42:53.023 [DEBUG] [Thread-17544] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:42:53.041 [DEBUG] [Thread-17544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:42:53.042 [DEBUG] [Thread-17544] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:42:53.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:42:53.043 [DEBUG] [Thread-17544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:42:53.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:42:53.045 [DEBUG] [Thread-17544] [transport.py] [_log()] userauth is OK
2025-11-12T14:42:53.046 [DEBUG] [Thread-17544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:42:53.046 [DEBUG] [Thread-17544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:42:53.046 [DEBUG] [Thread-17544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:42:53.046 [DEBUG] [Thread-17544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:42:53.060 [INFO] [Thread-17544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:42:53.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:42:53.681 [DEBUG] [Thread-17544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:42:53.682 [DEBUG] [Thread-17544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:42:53.682 [DEBUG] [Thread-17544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:42:53.723 [DEBUG] [Thread-17544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:42:53.723 [DEBUG] [Thread-17544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:42:53.726 [DEBUG] [Thread-17544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:42:53.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:42:53.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:42:53.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:42:53.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:42:53.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:42:53.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:42:53.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:42:53.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:42:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:42:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.529254 -999.00  +27.30  21.11     17   +0.60 1 2 1 1 1   888    0 23.74 -131.10 ----- 21.1 21.1 284.5 42.7 31.4 -23.1 30.9 -21.9 31.1 -20.8 31.7 -22.8
2025-11-12T14:42:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:42:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:42:53.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.529254
2025-11-12T14:42:53.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:42:53.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:42:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:42:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:42:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:42:53.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:42:46', tmtdew=32.27, humidity=11.58, cloud=0.0, wind=34.25, temperature=27.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:42:07.546', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:42:53.752 [DEBUG] [Thread-17544] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:42:53.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:42:53.843 [DEBUG] [Thread-17547] [transport.py] [_log()] starting thread (client mode): 0x173600a0
2025-11-12T14:42:53.843 [DEBUG] [Thread-17547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:42:53.858 [DEBUG] [Thread-17547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:42:53.858 [INFO] [Thread-17547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:42:53.866 [DEBUG] [Thread-17547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:42:53.866 [DEBUG] [Thread-17547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:42:53.866 [DEBUG] [Thread-17547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:42:53.866 [DEBUG] [Thread-17547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:42:53.866 [DEBUG] [Thread-17547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] client lang: <none>
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] server lang: <none>
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] kex follows: False
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:42:53.867 [DEBUG] [Thread-17547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:42:53.868 [DEBUG] [Thread-17547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:42:53.868 [DEBUG] [Thread-17547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:42:53.868 [DEBUG] [Thread-17547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:42:53.868 [DEBUG] [Thread-17547] [transport.py] [_log()] Compression: none
2025-11-12T14:42:53.868 [DEBUG] [Thread-17547] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:42:53.926 [DEBUG] [Thread-17547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:42:53.927 [DEBUG] [Thread-17547] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:42:53.928 [DEBUG] [Thread-17547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:42:53.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:42:53.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:42:53.986 [DEBUG] [Thread-17547] [transport.py] [_log()] userauth is OK
2025-11-12T14:42:53.986 [DEBUG] [Thread-17547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:42:53.986 [DEBUG] [Thread-17547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:42:53.987 [DEBUG] [Thread-17547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:42:53.987 [DEBUG] [Thread-17547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:42:54.009 [INFO] [Thread-17547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:42:54.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:42:54.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:42:54.852 [DEBUG] [Thread-17547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:42:54.852 [DEBUG] [Thread-17547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:42:54.900 [DEBUG] [Thread-17547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:42:54.900 [DEBUG] [Thread-17547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:42:54.909 [DEBUG] [Thread-17547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:42:54.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:42: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')
2025-11-12T14:42:54.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-11-12T14:42:54.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:42:54.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:42:54.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:42:54.945 [DEBUG] [Thread-17547] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:42:56.614 [DEBUG] [Thread-17549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:43:11.668 [DEBUG] [Thread-17550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:43:24.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:43:24.967 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:43:24.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-11-12T14:43:25.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 43, 18), 32.25, 11.59, 0.0, 31.05, 27.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:43:25.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:43:18
2025-11-12T14:43:25.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:43:25.929 [DEBUG] [Thread-17551] [transport.py] [_log()] starting thread (client mode): 0x1737fdf0
2025-11-12T14:43:25.929 [DEBUG] [Thread-17551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:43:25.948 [DEBUG] [Thread-17551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:43:25.948 [INFO] [Thread-17551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] client lang: <none>
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] server lang: <none>
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] kex follows: False
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] Compression: none
2025-11-12T14:43:25.951 [DEBUG] [Thread-17551] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:43:25.966 [DEBUG] [Thread-17551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:43:25.966 [DEBUG] [Thread-17551] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:43:25.966 [DEBUG] [Thread-17551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:43:25.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:43:25.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:43:25.967 [DEBUG] [Thread-17551] [transport.py] [_log()] userauth is OK
2025-11-12T14:43:25.967 [DEBUG] [Thread-17551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:43:25.967 [DEBUG] [Thread-17551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:43:25.967 [DEBUG] [Thread-17551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:43:25.967 [DEBUG] [Thread-17551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:43:25.982 [INFO] [Thread-17551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:43:25.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:43:26.629 [DEBUG] [Thread-17551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:43:26.629 [DEBUG] [Thread-17551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:43:26.630 [DEBUG] [Thread-17551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:43:26.669 [DEBUG] [Thread-17551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:43:26.669 [DEBUG] [Thread-17551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:43:26.672 [DEBUG] [Thread-17551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:43:26.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:43:26.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:43:26.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:43:26.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:43:26.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:43:26.695 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:43:26.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:43:26.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:43:26.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:43:26.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.529602 -999.00  +27.60  32.21     17   +0.40 1 2 2 1 1   888    0 23.77 -119.83 ----- 32.2 32.2 272.6 40.2 31.6 -23.0 31.2 -21.6 31.4 -22.4 32.0 -22.4
2025-11-12T14:43:26.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:43:26.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:43:26.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.529602
2025-11-12T14:43:26.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:43:26.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:43:26.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:43:26.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:43:26.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:43:26.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:43:18', tmtdew=32.25, humidity=11.59, cloud=0.0, wind=31.05, temperature=27.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:42:37.613', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:43:26.698 [DEBUG] [Thread-17551] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:43:26.702 [DEBUG] [Thread-17554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:43:26.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:43:26.794 [DEBUG] [Thread-17555] [transport.py] [_log()] starting thread (client mode): 0x1737d7b0
2025-11-12T14:43:26.794 [DEBUG] [Thread-17555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:43:26.811 [DEBUG] [Thread-17555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:43:26.811 [INFO] [Thread-17555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:43:26.819 [DEBUG] [Thread-17555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] client lang: <none>
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] server lang: <none>
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] kex follows: False
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] Compression: none
2025-11-12T14:43:26.820 [DEBUG] [Thread-17555] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:43:26.877 [DEBUG] [Thread-17555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:43:26.878 [DEBUG] [Thread-17555] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:43:26.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:43:26.879 [DEBUG] [Thread-17555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:43:26.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:43:26.934 [DEBUG] [Thread-17555] [transport.py] [_log()] userauth is OK
2025-11-12T14:43:26.934 [DEBUG] [Thread-17555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:43:26.934 [DEBUG] [Thread-17555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:43:26.934 [DEBUG] [Thread-17555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:43:26.934 [DEBUG] [Thread-17555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:43:26.954 [INFO] [Thread-17555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:43:26.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:43:26.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:43:27.872 [DEBUG] [Thread-17555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:43:27.872 [DEBUG] [Thread-17555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:43:27.911 [DEBUG] [Thread-17555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:43:27.911 [DEBUG] [Thread-17555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:43:27.921 [DEBUG] [Thread-17555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:43:27.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:43:27.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:43:27.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-11-12T14:43:27.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:43:27.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:43:27.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:43:27.957 [DEBUG] [Thread-17555] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:43:30.010 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:43:30.012 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:43:36.857 [DEBUG] [Thread-17557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:43:41.747 [DEBUG] [Thread-17558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:43:56.781 [DEBUG] [Thread-17559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:43:57.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:43:57.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:43:57.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-11-12T14:43:58.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 43, 50), 32.54, 11.46, 0.0, 41.46, 28.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:43:58.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:43:50
2025-11-12T14:43:58.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:43:58.879 [DEBUG] [Thread-17560] [transport.py] [_log()] starting thread (client mode): 0x1737d780
2025-11-12T14:43:58.879 [DEBUG] [Thread-17560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:43:58.900 [DEBUG] [Thread-17560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:43:58.900 [INFO] [Thread-17560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:43:58.903 [DEBUG] [Thread-17560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:43:58.903 [DEBUG] [Thread-17560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:43:58.903 [DEBUG] [Thread-17560] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:43:58.903 [DEBUG] [Thread-17560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:43:58.903 [DEBUG] [Thread-17560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:43:58.903 [DEBUG] [Thread-17560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] client lang: <none>
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] server lang: <none>
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] kex follows: False
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] Compression: none
2025-11-12T14:43:58.904 [DEBUG] [Thread-17560] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:43:58.923 [DEBUG] [Thread-17560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:43:58.924 [DEBUG] [Thread-17560] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:43:58.924 [DEBUG] [Thread-17560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:43:58.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:43:58.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:43:58.927 [DEBUG] [Thread-17560] [transport.py] [_log()] userauth is OK
2025-11-12T14:43:58.927 [DEBUG] [Thread-17560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:43:58.927 [DEBUG] [Thread-17560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:43:58.927 [DEBUG] [Thread-17560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:43:58.927 [DEBUG] [Thread-17560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:43:58.946 [INFO] [Thread-17560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:43:58.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:43:59.595 [DEBUG] [Thread-17560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:43:59.595 [DEBUG] [Thread-17560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:43:59.595 [DEBUG] [Thread-17560] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:43:59.636 [DEBUG] [Thread-17560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:43:59.636 [DEBUG] [Thread-17560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:43:59.638 [DEBUG] [Thread-17560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:43:59.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:43:59.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:43:59.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:43:59.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:43:59.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:43:59.656 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:43:59.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:43:59.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.529949 -999.00  +27.10  41.31     17   +0.40 1 1 2 1 1   888    0 23.94 -109.38 ----- 41.3 41.3 276.8 45.9 31.4 -24.9 31.1 -23.3 31.1 -26.3 32.0 -25.2
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.529949
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:43:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:43:50', tmtdew=32.54, humidity=11.46, cloud=0.0, wind=41.46, temperature=28.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:43:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:43:59.658 [DEBUG] [Thread-17560] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:43:59.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:43:59.743 [DEBUG] [Thread-17563] [transport.py] [_log()] starting thread (client mode): 0x1737e8c0
2025-11-12T14:43:59.743 [DEBUG] [Thread-17563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:43:59.758 [DEBUG] [Thread-17563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:43:59.758 [INFO] [Thread-17563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:43:59.765 [DEBUG] [Thread-17563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:43:59.765 [DEBUG] [Thread-17563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:43:59.765 [DEBUG] [Thread-17563] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] client lang: <none>
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] server lang: <none>
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] kex follows: False
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] Compression: none
2025-11-12T14:43:59.766 [DEBUG] [Thread-17563] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:43:59.824 [DEBUG] [Thread-17563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:43:59.824 [DEBUG] [Thread-17563] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:43:59.824 [DEBUG] [Thread-17563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:43:59.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:43:59.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:43:59.880 [DEBUG] [Thread-17563] [transport.py] [_log()] userauth is OK
2025-11-12T14:43:59.880 [DEBUG] [Thread-17563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:43:59.880 [DEBUG] [Thread-17563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:43:59.880 [DEBUG] [Thread-17563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:43:59.881 [DEBUG] [Thread-17563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:43:59.894 [INFO] [Thread-17563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:43:59.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:43:59.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:44:00.756 [DEBUG] [Thread-17563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:44:00.756 [DEBUG] [Thread-17563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:44:00.804 [DEBUG] [Thread-17563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:44:00.804 [DEBUG] [Thread-17563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:44:00.812 [DEBUG] [Thread-17563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:44:00.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:44:00.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-11-12T14:44:00.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-11-12T14:44:00.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:44:00.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:44:00.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:44:00.843 [DEBUG] [Thread-17563] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:44:11.814 [DEBUG] [Thread-17565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:44:26.863 [DEBUG] [Thread-17566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:44:30.153 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:44:30.154 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:44:30.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:44:30.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:44:30.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-11-12T14:44:31.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 44, 22), 32.65, 11.39, 0.0, 39.4, 28.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:44:31.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:44:22
2025-11-12T14:44:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:44:31.751 [DEBUG] [Thread-17567] [transport.py] [_log()] starting thread (client mode): 0x14980220
2025-11-12T14:44:31.751 [DEBUG] [Thread-17567] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:44:31.771 [DEBUG] [Thread-17567] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:44:31.772 [INFO] [Thread-17567] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:44:31.775 [DEBUG] [Thread-17567] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:44:31.775 [DEBUG] [Thread-17567] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:44:31.775 [DEBUG] [Thread-17567] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:44:31.775 [DEBUG] [Thread-17567] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:44:31.775 [DEBUG] [Thread-17567] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:44:31.775 [DEBUG] [Thread-17567] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:44:31.775 [DEBUG] [Thread-17567] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:44:31.775 [DEBUG] [Thread-17567] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] client lang: <none>
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] server lang: <none>
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] kex follows: False
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] Compression: none
2025-11-12T14:44:31.776 [DEBUG] [Thread-17567] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:44:31.794 [DEBUG] [Thread-17567] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:44:31.795 [DEBUG] [Thread-17567] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:44:31.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:44:31.797 [DEBUG] [Thread-17567] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:44:31.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:44:31.837 [DEBUG] [Thread-17567] [transport.py] [_log()] userauth is OK
2025-11-12T14:44:31.837 [DEBUG] [Thread-17567] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:44:31.837 [DEBUG] [Thread-17567] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:44:31.838 [DEBUG] [Thread-17567] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:44:31.838 [DEBUG] [Thread-17567] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:44:31.869 [INFO] [Thread-17567] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:44:31.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:44:32.499 [DEBUG] [Thread-17567] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:44:32.499 [DEBUG] [Thread-17567] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:44:32.499 [DEBUG] [Thread-17567] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:44:32.540 [DEBUG] [Thread-17567] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:44:32.540 [DEBUG] [Thread-17567] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:44:32.543 [DEBUG] [Thread-17567] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:44:32.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:44:32.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:44:32.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:44:32.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:44:32.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:44:32.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:44:32.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:44:32.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:44:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:44:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.530296 -999.00  +26.60  39.69     17   +0.20 1 1 2 1 1   888    0 24.38 -104.07 ----- 39.7 39.7 273.6 50.0 31.3 -26.2 31.1 -24.4 30.9 -28.0 31.9 -25.7
2025-11-12T14:44:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:44:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:44:32.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.530296
2025-11-12T14:44:32.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:44:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:44:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:44:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:44:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:44:32.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:44:22', tmtdew=32.65, humidity=11.39, cloud=0.0, wind=39.4, temperature=28.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:43:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:44:32.573 [DEBUG] [Thread-17567] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:44:32.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:44:32.669 [DEBUG] [Thread-17570] [transport.py] [_log()] starting thread (client mode): 0x14982290
2025-11-12T14:44:32.670 [DEBUG] [Thread-17570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:44:32.685 [DEBUG] [Thread-17570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:44:32.685 [INFO] [Thread-17570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:44:32.692 [DEBUG] [Thread-17570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] client lang: <none>
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] server lang: <none>
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] kex follows: False
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:44:32.693 [DEBUG] [Thread-17570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:44:32.694 [DEBUG] [Thread-17570] [transport.py] [_log()] Compression: none
2025-11-12T14:44:32.694 [DEBUG] [Thread-17570] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:44:32.753 [DEBUG] [Thread-17570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:44:32.753 [DEBUG] [Thread-17570] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:44:32.754 [DEBUG] [Thread-17570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:44:32.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:44:32.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:44:32.809 [DEBUG] [Thread-17570] [transport.py] [_log()] userauth is OK
2025-11-12T14:44:32.810 [DEBUG] [Thread-17570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:44:32.810 [DEBUG] [Thread-17570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:44:32.810 [DEBUG] [Thread-17570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:44:32.810 [DEBUG] [Thread-17570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:44:32.828 [INFO] [Thread-17570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:44:32.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:44:32.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:44:33.657 [DEBUG] [Thread-17570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:44:33.657 [DEBUG] [Thread-17570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:44:33.707 [DEBUG] [Thread-17570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:44:33.707 [DEBUG] [Thread-17570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:44:33.716 [DEBUG] [Thread-17570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:44:33.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:44:33.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-11-12T14:44:33.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-11-12T14:44:33.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:44:33.743 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:44:33.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:44:33.753 [DEBUG] [Thread-17570] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:44:36.889 [DEBUG] [Thread-17572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:44:41.899 [DEBUG] [Thread-17573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:44:56.947 [DEBUG] [Thread-17574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:45:03.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:45:03.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:45:03.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-11-12T14:45:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 44, 54), 32.33, 11.93, 0.0, 31.28, 27.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:45:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:44:54
2025-11-12T14:45:04.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:45:04.680 [DEBUG] [Thread-17575] [transport.py] [_log()] starting thread (client mode): 0x14983490
2025-11-12T14:45:04.680 [DEBUG] [Thread-17575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:45:04.700 [DEBUG] [Thread-17575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:45:04.701 [INFO] [Thread-17575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:45:04.704 [DEBUG] [Thread-17575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:45:04.704 [DEBUG] [Thread-17575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:45:04.704 [DEBUG] [Thread-17575] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:45:04.704 [DEBUG] [Thread-17575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:45:04.704 [DEBUG] [Thread-17575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:45:04.704 [DEBUG] [Thread-17575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] client lang: <none>
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] server lang: <none>
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] kex follows: False
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] Compression: none
2025-11-12T14:45:04.705 [DEBUG] [Thread-17575] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:45:04.723 [DEBUG] [Thread-17575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:45:04.724 [DEBUG] [Thread-17575] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:45:04.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:45:04.726 [DEBUG] [Thread-17575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:45:04.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:45:04.728 [DEBUG] [Thread-17575] [transport.py] [_log()] userauth is OK
2025-11-12T14:45:04.728 [DEBUG] [Thread-17575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:45:04.729 [DEBUG] [Thread-17575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:45:04.729 [DEBUG] [Thread-17575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:45:04.729 [DEBUG] [Thread-17575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:45:04.752 [INFO] [Thread-17575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:45:04.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:45:08.582 [DEBUG] [Thread-17575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:45:08.582 [DEBUG] [Thread-17575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:45:08.583 [DEBUG] [Thread-17575] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:45:08.623 [DEBUG] [Thread-17575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:45:08.623 [DEBUG] [Thread-17575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:45:08.626 [DEBUG] [Thread-17575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:45:08.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:45:08.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:45:08.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:45:08.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:45:08.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:45:08.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:45:08.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:45:08.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:45:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:45:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.530990 -999.00  +26.10  28.91     18   +0.30 1 1 1 1 1   888    0 23.74 -100.13 ----- 28.9 28.9 270.8 44.3 30.7 -28.7 30.6 -25.3 30.2 -31.6 31.3 -26.6
2025-11-12T14:45:08.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:45:08.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:45:08.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.530990
2025-11-12T14:45:08.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:45:08.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:45:08.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:45:08.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:45:08.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:45:08.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:44:54', tmtdew=32.33, humidity=11.93, cloud=0.0, wind=31.28, temperature=27.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:44:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:45:08.708 [DEBUG] [Thread-17575] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:45:08.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:45:08.802 [DEBUG] [Thread-17578] [transport.py] [_log()] starting thread (client mode): 0x1737e7d0
2025-11-12T14:45:08.802 [DEBUG] [Thread-17578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:45:08.819 [DEBUG] [Thread-17578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:45:08.819 [INFO] [Thread-17578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:45:08.826 [DEBUG] [Thread-17578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:45:08.827 [DEBUG] [Thread-17578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:45:08.827 [DEBUG] [Thread-17578] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:45:08.827 [DEBUG] [Thread-17578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:45:08.827 [DEBUG] [Thread-17578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:45:08.827 [DEBUG] [Thread-17578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:45:08.827 [DEBUG] [Thread-17578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:45:08.828 [DEBUG] [Thread-17578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:45:08.828 [DEBUG] [Thread-17578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:45:08.828 [DEBUG] [Thread-17578] [transport.py] [_log()] client lang: <none>
2025-11-12T14:45:08.828 [DEBUG] [Thread-17578] [transport.py] [_log()] server lang: <none>
2025-11-12T14:45:08.828 [DEBUG] [Thread-17578] [transport.py] [_log()] kex follows: False
2025-11-12T14:45:08.828 [DEBUG] [Thread-17578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:45:08.828 [DEBUG] [Thread-17578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:45:08.828 [DEBUG] [Thread-17578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:45:08.829 [DEBUG] [Thread-17578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:45:08.829 [DEBUG] [Thread-17578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:45:08.829 [DEBUG] [Thread-17578] [transport.py] [_log()] Compression: none
2025-11-12T14:45:08.829 [DEBUG] [Thread-17578] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:45:08.886 [DEBUG] [Thread-17578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:45:08.886 [DEBUG] [Thread-17578] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:45:08.886 [DEBUG] [Thread-17578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:45:08.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:45:08.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:45:08.945 [DEBUG] [Thread-17578] [transport.py] [_log()] userauth is OK
2025-11-12T14:45:08.946 [DEBUG] [Thread-17578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:45:08.946 [DEBUG] [Thread-17578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:45:08.946 [DEBUG] [Thread-17578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:45:08.946 [DEBUG] [Thread-17578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:45:08.967 [INFO] [Thread-17578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:45:08.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:45:08.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:45:09.797 [DEBUG] [Thread-17578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:45:09.797 [DEBUG] [Thread-17578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:45:09.845 [DEBUG] [Thread-17578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:45:09.846 [DEBUG] [Thread-17578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:45:09.855 [DEBUG] [Thread-17578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:45:09.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:45:09.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:45: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') -> 00000000
2025-11-12T14:45:09.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:45:09.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:45:09.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:45:09.892 [DEBUG] [Thread-17578] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:45:11.984 [DEBUG] [Thread-17580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:45:27.040 [DEBUG] [Thread-17581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:45:30.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:45:30.296 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:45:36.933 [DEBUG] [Thread-17582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:45:39.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:45:39.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:45:39.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-11-12T14:45:40.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 45, 26), 32.39, 11.89, 0.0, 28.95, 27.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:45:40.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:45:26
2025-11-12T14:45:40.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:45:40.826 [DEBUG] [Thread-17583] [transport.py] [_log()] starting thread (client mode): 0x14983910
2025-11-12T14:45:40.826 [DEBUG] [Thread-17583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:45:40.848 [DEBUG] [Thread-17583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:45:40.848 [INFO] [Thread-17583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] client lang: <none>
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] server lang: <none>
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] kex follows: False
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:45:40.849 [DEBUG] [Thread-17583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:45:40.850 [DEBUG] [Thread-17583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:45:40.850 [DEBUG] [Thread-17583] [transport.py] [_log()] Compression: none
2025-11-12T14:45:40.850 [DEBUG] [Thread-17583] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:45:40.858 [DEBUG] [Thread-17583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:45:40.858 [DEBUG] [Thread-17583] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:45:40.859 [DEBUG] [Thread-17583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:45:40.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:45:40.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:45:40.860 [DEBUG] [Thread-17583] [transport.py] [_log()] userauth is OK
2025-11-12T14:45:40.860 [DEBUG] [Thread-17583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:45:40.860 [DEBUG] [Thread-17583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:45:40.860 [DEBUG] [Thread-17583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:45:40.860 [DEBUG] [Thread-17583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:45:40.878 [INFO] [Thread-17583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:45:40.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:45:41.455 [DEBUG] [Thread-17583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:45:41.455 [DEBUG] [Thread-17583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:45:41.456 [DEBUG] [Thread-17583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:45:41.496 [DEBUG] [Thread-17583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:45:41.496 [DEBUG] [Thread-17583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:45:41.498 [DEBUG] [Thread-17583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:45:41.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:45:41.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:45:41.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:45:41.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:45:41.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:45:41.522 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:45:41.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:45:41.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:45:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:45:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.530990 -999.00  +26.10  28.91     18   +0.30 1 1 1 1 1   888    0 23.74 -100.13 ----- 28.9 28.9 270.8 44.3 30.7 -28.7 30.6 -25.3 30.2 -31.6 31.3 -26.6
2025-11-12T14:45:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:45:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:45:41.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.530990
2025-11-12T14:45:41.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:45:41.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:45:41.525 [DEBUG] [Thread-17583] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:45:41.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:45:41.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:45:41.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:45:41.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:45:26', tmtdew=32.39, humidity=11.89, cloud=0.0, wind=28.95, temperature=27.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:44:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:45:41.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:45:41.633 [DEBUG] [Thread-17586] [transport.py] [_log()] starting thread (client mode): 0x149815a0
2025-11-12T14:45:41.634 [DEBUG] [Thread-17586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:45:41.649 [DEBUG] [Thread-17586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:45:41.649 [INFO] [Thread-17586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:45:41.656 [DEBUG] [Thread-17586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] client lang: <none>
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] server lang: <none>
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] kex follows: False
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:45:41.657 [DEBUG] [Thread-17586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:45:41.658 [DEBUG] [Thread-17586] [transport.py] [_log()] Compression: none
2025-11-12T14:45:41.658 [DEBUG] [Thread-17586] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:45:41.716 [DEBUG] [Thread-17586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:45:41.716 [DEBUG] [Thread-17586] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:45:41.717 [DEBUG] [Thread-17586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:45:41.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:45:41.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:45:41.773 [DEBUG] [Thread-17586] [transport.py] [_log()] userauth is OK
2025-11-12T14:45:41.774 [DEBUG] [Thread-17586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:45:41.774 [DEBUG] [Thread-17586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:45:41.774 [DEBUG] [Thread-17586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:45:41.774 [DEBUG] [Thread-17586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:45:41.794 [INFO] [Thread-17586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:45:41.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:45:41.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:45:42.073 [DEBUG] [Thread-17588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:45:42.634 [DEBUG] [Thread-17586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:45:42.634 [DEBUG] [Thread-17586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:45:42.682 [DEBUG] [Thread-17586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:45:42.682 [DEBUG] [Thread-17586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:45:42.691 [DEBUG] [Thread-17586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:45:42.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:45:42.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:45:42.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-11-12T14:45:42.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:45:42.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:45:42.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:45:42.727 [DEBUG] [Thread-17586] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:45:57.127 [DEBUG] [Thread-17589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:46:12.161 [DEBUG] [Thread-17590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:46:12.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:46:12.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:46:12.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:46:13.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 45, 58), 32.19, 11.89, 0.0, 33.49, 27.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:46:13.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:45:58
2025-11-12T14:46:13.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:46:13.669 [DEBUG] [Thread-17591] [transport.py] [_log()] starting thread (client mode): 0x14961d20
2025-11-12T14:46:13.669 [DEBUG] [Thread-17591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:46:13.684 [DEBUG] [Thread-17591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:46:13.684 [INFO] [Thread-17591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:46:13.687 [DEBUG] [Thread-17591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:46:13.687 [DEBUG] [Thread-17591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:46:13.687 [DEBUG] [Thread-17591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:46:13.687 [DEBUG] [Thread-17591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:46:13.687 [DEBUG] [Thread-17591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:46:13.687 [DEBUG] [Thread-17591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:46:13.687 [DEBUG] [Thread-17591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] client lang: <none>
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] server lang: <none>
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] kex follows: False
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] Compression: none
2025-11-12T14:46:13.688 [DEBUG] [Thread-17591] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:46:13.709 [DEBUG] [Thread-17591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:46:13.709 [DEBUG] [Thread-17591] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:46:13.710 [DEBUG] [Thread-17591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:46:13.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:46:13.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:46:13.712 [DEBUG] [Thread-17591] [transport.py] [_log()] userauth is OK
2025-11-12T14:46:13.712 [DEBUG] [Thread-17591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:46:13.712 [DEBUG] [Thread-17591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:46:13.712 [DEBUG] [Thread-17591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:46:13.712 [DEBUG] [Thread-17591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:46:13.747 [INFO] [Thread-17591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:46:13.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:46:14.404 [DEBUG] [Thread-17591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:46:14.404 [DEBUG] [Thread-17591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:46:14.405 [DEBUG] [Thread-17591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:46:14.445 [DEBUG] [Thread-17591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:46:14.445 [DEBUG] [Thread-17591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:46:14.449 [DEBUG] [Thread-17591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:46:14.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:46:14.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:46:14.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:46:14.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:46:14.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:46:14.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:46:14.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:46:14.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:46:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:46:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.531685 -999.00  +26.40  22.22     18   +0.40 1 1 1 1 1   888    0 23.63 -103.92 ----- 22.2 22.2 285.4 31.0 30.9 -25.1 30.5 -24.3 30.4 -23.6 31.2 -23.4
2025-11-12T14:46:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:46:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:46:14.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.531685
2025-11-12T14:46:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:46:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:46:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:46:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:46:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:46:14.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:45:58', tmtdew=32.19, humidity=11.89, cloud=0.0, wind=33.49, temperature=27.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:45:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:46:14.475 [DEBUG] [Thread-17591] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:46:14.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:46:14.558 [DEBUG] [Thread-17594] [transport.py] [_log()] starting thread (client mode): 0x173bf490
2025-11-12T14:46:14.559 [DEBUG] [Thread-17594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:46:14.574 [DEBUG] [Thread-17594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:46:14.574 [INFO] [Thread-17594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:46:14.581 [DEBUG] [Thread-17594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] client lang: <none>
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] server lang: <none>
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] kex follows: False
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] Compression: none
2025-11-12T14:46:14.582 [DEBUG] [Thread-17594] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:46:14.641 [DEBUG] [Thread-17594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:46:14.642 [DEBUG] [Thread-17594] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:46:14.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:46:14.643 [DEBUG] [Thread-17594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:46:14.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:46:14.697 [DEBUG] [Thread-17594] [transport.py] [_log()] userauth is OK
2025-11-12T14:46:14.698 [DEBUG] [Thread-17594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:46:14.698 [DEBUG] [Thread-17594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:46:14.698 [DEBUG] [Thread-17594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:46:14.698 [DEBUG] [Thread-17594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:46:14.717 [INFO] [Thread-17594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:46:14.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:46:14.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:46:15.559 [DEBUG] [Thread-17594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:46:15.559 [DEBUG] [Thread-17594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:46:15.606 [DEBUG] [Thread-17594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:46:15.606 [DEBUG] [Thread-17594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:46:15.616 [DEBUG] [Thread-17594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:46:15.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:46:15.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-11-12T14:46: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-11-12T14:46:15.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:46:15.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:46:15.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:46:15.652 [DEBUG] [Thread-17594] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:46:27.193 [DEBUG] [Thread-17596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:46:30.436 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:46:30.437 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:46:36.961 [DEBUG] [Thread-17597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:46:42.250 [DEBUG] [Thread-17598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:46:45.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:46:45.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:46:45.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-11-12T14:46:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 46, 30), 32.04, 11.99, 0.0, 31.74, 27.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:46:46.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:46:30
2025-11-12T14:46:46.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:46:46.557 [DEBUG] [Thread-17599] [transport.py] [_log()] starting thread (client mode): 0x1737e4d0
2025-11-12T14:46:46.558 [DEBUG] [Thread-17599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:46:46.579 [DEBUG] [Thread-17599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:46:46.580 [INFO] [Thread-17599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:46:46.580 [DEBUG] [Thread-17599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:46:46.580 [DEBUG] [Thread-17599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:46:46.580 [DEBUG] [Thread-17599] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:46:46.580 [DEBUG] [Thread-17599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:46:46.580 [DEBUG] [Thread-17599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:46:46.580 [DEBUG] [Thread-17599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:46:46.580 [DEBUG] [Thread-17599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] client lang: <none>
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] server lang: <none>
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] kex follows: False
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] Compression: none
2025-11-12T14:46:46.581 [DEBUG] [Thread-17599] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:46:46.591 [DEBUG] [Thread-17599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:46:46.591 [DEBUG] [Thread-17599] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:46:46.591 [DEBUG] [Thread-17599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:46:46.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:46:46.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:46:46.593 [DEBUG] [Thread-17599] [transport.py] [_log()] userauth is OK
2025-11-12T14:46:46.593 [DEBUG] [Thread-17599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:46:46.594 [DEBUG] [Thread-17599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:46:46.594 [DEBUG] [Thread-17599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:46:46.594 [DEBUG] [Thread-17599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:46:46.611 [INFO] [Thread-17599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:46:46.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:46:47.347 [DEBUG] [Thread-17599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:46:47.347 [DEBUG] [Thread-17599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:46:47.347 [DEBUG] [Thread-17599] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:46:47.388 [DEBUG] [Thread-17599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:46:47.388 [DEBUG] [Thread-17599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:46:47.391 [DEBUG] [Thread-17599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:46:47.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:46:47.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:46:47.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:46:47.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:46:47.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:46:47.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:46:47.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:46:47.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:46:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:46:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.532032 -999.00  +26.80  19.09     18   +0.60 1 2 1 1 1   888    0 23.98 -93.66 ----- 19.1 19.1 263.6 35.2 31.0 -24.4 30.6 -22.6 30.5 -20.8 31.3 -22.4
2025-11-12T14:46:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:46:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:46:47.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.532032
2025-11-12T14:46:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:46:47.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:46:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:46:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:46:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:46:47.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:46:30', tmtdew=32.04, humidity=11.99, cloud=0.0, wind=31.74, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:46:07.565', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:46:47.418 [DEBUG] [Thread-17599] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:46:47.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:46:47.513 [DEBUG] [Thread-17602] [transport.py] [_log()] starting thread (client mode): 0x14960b50
2025-11-12T14:46:47.513 [DEBUG] [Thread-17602] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:46:47.528 [DEBUG] [Thread-17602] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:46:47.528 [INFO] [Thread-17602] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] client lang: <none>
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] server lang: <none>
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] kex follows: False
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:46:47.536 [DEBUG] [Thread-17602] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:46:47.537 [DEBUG] [Thread-17602] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:46:47.537 [DEBUG] [Thread-17602] [transport.py] [_log()] Compression: none
2025-11-12T14:46:47.537 [DEBUG] [Thread-17602] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:46:47.592 [DEBUG] [Thread-17602] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:46:47.592 [DEBUG] [Thread-17602] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:46:47.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:46:47.592 [DEBUG] [Thread-17602] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:46:47.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:46:47.649 [DEBUG] [Thread-17602] [transport.py] [_log()] userauth is OK
2025-11-12T14:46:47.650 [DEBUG] [Thread-17602] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:46:47.650 [DEBUG] [Thread-17602] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:46:47.650 [DEBUG] [Thread-17602] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:46:47.650 [DEBUG] [Thread-17602] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:46:47.668 [INFO] [Thread-17602] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:46:47.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:46:47.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:46:48.529 [DEBUG] [Thread-17602] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:46:48.529 [DEBUG] [Thread-17602] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:46:48.576 [DEBUG] [Thread-17602] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:46:48.577 [DEBUG] [Thread-17602] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:46:48.586 [DEBUG] [Thread-17602] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:46:48.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:46:48.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-11-12T14:46:48.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-11-12T14:46:48.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:46:48.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:46:48.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:46:48.623 [DEBUG] [Thread-17602] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:46:57.284 [DEBUG] [Thread-17604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:47:12.334 [DEBUG] [Thread-17605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:47:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:47:18.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:47: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-11-12T14:47:19.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 47, 2), 31.71, 12.22, 0.0, 30.12, 27.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:47:19.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:47:02
2025-11-12T14:47:19.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:47:19.540 [DEBUG] [Thread-17606] [transport.py] [_log()] starting thread (client mode): 0x14980d60
2025-11-12T14:47:19.540 [DEBUG] [Thread-17606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:47:19.561 [DEBUG] [Thread-17606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:47:19.561 [INFO] [Thread-17606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:47:19.564 [DEBUG] [Thread-17606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] client lang: <none>
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] server lang: <none>
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] kex follows: False
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] Compression: none
2025-11-12T14:47:19.565 [DEBUG] [Thread-17606] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:47:19.583 [DEBUG] [Thread-17606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:47:19.583 [DEBUG] [Thread-17606] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:47:19.584 [DEBUG] [Thread-17606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:47:19.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:47:19.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:47:19.586 [DEBUG] [Thread-17606] [transport.py] [_log()] userauth is OK
2025-11-12T14:47:19.586 [DEBUG] [Thread-17606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:47:19.586 [DEBUG] [Thread-17606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:47:19.586 [DEBUG] [Thread-17606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:47:19.586 [DEBUG] [Thread-17606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:47:19.611 [INFO] [Thread-17606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:47:19.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:47:20.211 [DEBUG] [Thread-17606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:47:20.211 [DEBUG] [Thread-17606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:47:20.212 [DEBUG] [Thread-17606] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:47:20.253 [DEBUG] [Thread-17606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:47:20.253 [DEBUG] [Thread-17606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:47:20.256 [DEBUG] [Thread-17606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:47:20.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:47:20.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:47:20.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:47:20.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:47:20.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:47:20.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:47:20.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:47:20.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:47:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:47:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.532380 -999.00  +27.10  28.15     17   +0.50 1 2 1 1 1   888    0 23.93 -92.31 ----- 28.1 28.1 275.0 32.7 31.2 -24.4 30.8 -22.8 31.0 -21.5 31.5 -22.9
2025-11-12T14:47:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:47:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:47:20.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.532380
2025-11-12T14:47:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:47:20.281 [DEBUG] [Thread-17606] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:47:20.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:47:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:47:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:47:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:47:20.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:47:02', tmtdew=31.71, humidity=12.22, cloud=0.0, wind=30.12, temperature=27.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:46:37.632', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:47:20.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:47:20.377 [DEBUG] [Thread-17609] [transport.py] [_log()] starting thread (client mode): 0x19ddb430
2025-11-12T14:47:20.377 [DEBUG] [Thread-17609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:47:20.392 [DEBUG] [Thread-17609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:47:20.392 [INFO] [Thread-17609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:47:20.400 [DEBUG] [Thread-17609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] client lang: <none>
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] server lang: <none>
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] kex follows: False
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] Compression: none
2025-11-12T14:47:20.401 [DEBUG] [Thread-17609] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:47:20.457 [DEBUG] [Thread-17609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:47:20.457 [DEBUG] [Thread-17609] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:47:20.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:47:20.459 [DEBUG] [Thread-17609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:47:20.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:47:20.513 [DEBUG] [Thread-17609] [transport.py] [_log()] userauth is OK
2025-11-12T14:47:20.513 [DEBUG] [Thread-17609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:47:20.513 [DEBUG] [Thread-17609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:47:20.514 [DEBUG] [Thread-17609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:47:20.514 [DEBUG] [Thread-17609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:47:20.532 [INFO] [Thread-17609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:47:20.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:47:20.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:47:21.356 [DEBUG] [Thread-17609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:47:21.356 [DEBUG] [Thread-17609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:47:21.403 [DEBUG] [Thread-17609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:47:21.404 [DEBUG] [Thread-17609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:47:21.413 [DEBUG] [Thread-17609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:47:21.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:47:21.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:47:21.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:47:21.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:47:21.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:47:21.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:47:21.449 [DEBUG] [Thread-17609] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:47:27.364 [DEBUG] [Thread-17611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:47:30.578 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:47:30.580 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:47:37.005 [DEBUG] [Thread-17612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:47:42.425 [DEBUG] [Thread-17613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:47:51.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:47:51.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:47:51.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:47:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 47, 34), 32.05, 12.13, 0.0, 32.11, 27.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:47:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:47:34
2025-11-12T14:47:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:47:52.425 [DEBUG] [Thread-17614] [transport.py] [_log()] starting thread (client mode): 0x14961180
2025-11-12T14:47:52.425 [DEBUG] [Thread-17614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:47:52.446 [DEBUG] [Thread-17614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:47:52.447 [INFO] [Thread-17614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] client lang: <none>
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] server lang: <none>
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] kex follows: False
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] Compression: none
2025-11-12T14:47:52.450 [DEBUG] [Thread-17614] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:47:52.465 [DEBUG] [Thread-17614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:47:52.465 [DEBUG] [Thread-17614] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:47:52.465 [DEBUG] [Thread-17614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:47:52.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:47:52.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:47:52.466 [DEBUG] [Thread-17614] [transport.py] [_log()] userauth is OK
2025-11-12T14:47:52.466 [DEBUG] [Thread-17614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:47:52.466 [DEBUG] [Thread-17614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:47:52.466 [DEBUG] [Thread-17614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:47:52.466 [DEBUG] [Thread-17614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:47:52.475 [INFO] [Thread-17614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:47:52.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:47:53.254 [DEBUG] [Thread-17614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:47:53.255 [DEBUG] [Thread-17614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:47:53.255 [DEBUG] [Thread-17614] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:47:53.296 [DEBUG] [Thread-17614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:47:53.296 [DEBUG] [Thread-17614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:47:53.298 [DEBUG] [Thread-17614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:47:53.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:47:53.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:47:53.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:47:53.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:47:53.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:47:53.316 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:47:53.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.532726 -999.00  +26.70  28.83     17   +0.40 1 1 1 1 1   888    0 24.71 -82.76 ----- 28.8 28.8 279.4 34.6 31.0 -25.6 30.8 -23.6 30.6 -26.6 31.6 -24.1
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.532726
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:47:53.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:47:34', tmtdew=32.05, humidity=12.13, cloud=0.0, wind=32.11, temperature=27.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:47:07.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:47:53.317 [DEBUG] [Thread-17614] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:47:53.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:47:53.402 [DEBUG] [Thread-17617] [transport.py] [_log()] starting thread (client mode): 0x149622f0
2025-11-12T14:47:53.402 [DEBUG] [Thread-17617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:47:53.419 [DEBUG] [Thread-17617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:47:53.419 [INFO] [Thread-17617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:47:53.426 [DEBUG] [Thread-17617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:47:53.426 [DEBUG] [Thread-17617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:47:53.426 [DEBUG] [Thread-17617] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:47:53.426 [DEBUG] [Thread-17617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:47:53.426 [DEBUG] [Thread-17617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:47:53.426 [DEBUG] [Thread-17617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:47:53.426 [DEBUG] [Thread-17617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] client lang: <none>
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] server lang: <none>
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] kex follows: False
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] Compression: none
2025-11-12T14:47:53.427 [DEBUG] [Thread-17617] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:47:53.484 [DEBUG] [Thread-17617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:47:53.484 [DEBUG] [Thread-17617] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:47:53.484 [DEBUG] [Thread-17617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:47:53.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:47:53.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:47:53.541 [DEBUG] [Thread-17617] [transport.py] [_log()] userauth is OK
2025-11-12T14:47:53.541 [DEBUG] [Thread-17617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:47:53.542 [DEBUG] [Thread-17617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:47:53.542 [DEBUG] [Thread-17617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:47:53.542 [DEBUG] [Thread-17617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:47:53.556 [INFO] [Thread-17617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:47:53.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:47:53.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:47:54.452 [DEBUG] [Thread-17617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:47:54.453 [DEBUG] [Thread-17617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:47:54.500 [DEBUG] [Thread-17617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:47:54.500 [DEBUG] [Thread-17617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:47:54.508 [DEBUG] [Thread-17617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:47:54.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:47:54.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-11-12T14:47:54.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:47:54.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:47:54.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:47:54.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:47:54.540 [DEBUG] [Thread-17617] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:47:57.461 [DEBUG] [Thread-17619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:48:12.523 [DEBUG] [Thread-17620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:48:24.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:48:24.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:48:24.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-11-12T14:48:25.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 48, 6), 32.18, 12.03, 0.0, 35.23, 27.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:48:25.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:48:06
2025-11-12T14:48:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:48:25.463 [DEBUG] [Thread-17621] [transport.py] [_log()] starting thread (client mode): 0x17363f40
2025-11-12T14:48:25.463 [DEBUG] [Thread-17621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:48:25.484 [DEBUG] [Thread-17621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:48:25.484 [INFO] [Thread-17621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:48:25.486 [DEBUG] [Thread-17621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] client lang: <none>
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] server lang: <none>
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] kex follows: False
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] Compression: none
2025-11-12T14:48:25.487 [DEBUG] [Thread-17621] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:48:25.508 [DEBUG] [Thread-17621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:48:25.509 [DEBUG] [Thread-17621] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:48:25.509 [DEBUG] [Thread-17621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:48:25.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:48:25.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:48:25.553 [DEBUG] [Thread-17621] [transport.py] [_log()] userauth is OK
2025-11-12T14:48:25.553 [DEBUG] [Thread-17621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:48:25.553 [DEBUG] [Thread-17621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:48:25.554 [DEBUG] [Thread-17621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:48:25.554 [DEBUG] [Thread-17621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:48:25.585 [INFO] [Thread-17621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:48:25.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:48:26.211 [DEBUG] [Thread-17621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:48:26.211 [DEBUG] [Thread-17621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:48:26.211 [DEBUG] [Thread-17621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:48:26.252 [DEBUG] [Thread-17621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:48:26.253 [DEBUG] [Thread-17621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:48:26.256 [DEBUG] [Thread-17621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:48:26.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:48:26.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:48:26.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:48:26.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:48:26.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:48:26.274 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:48:26.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.533074 -999.00  +26.70  34.64     17   +0.20 1 1 2 1 1   888    0 24.06 -79.35 ----- 34.6 34.6 275.4 40.8 31.1 -27.2 30.8 -23.3 30.8 -25.9 31.6 -23.5
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.533074
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:48:26.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:48:26.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:48:06', tmtdew=32.18, humidity=12.03, cloud=0.0, wind=35.23, temperature=27.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:47:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:48:26.275 [DEBUG] [Thread-17621] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:48:26.348 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:48:26.360 [DEBUG] [Thread-17624] [transport.py] [_log()] starting thread (client mode): 0x173bd9f0
2025-11-12T14:48:26.360 [DEBUG] [Thread-17624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:48:26.374 [DEBUG] [Thread-17624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:48:26.374 [INFO] [Thread-17624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:48:26.381 [DEBUG] [Thread-17624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:48:26.382 [DEBUG] [Thread-17624] [transport.py] [_log()] client lang: <none>
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] server lang: <none>
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] kex follows: False
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] Compression: none
2025-11-12T14:48:26.383 [DEBUG] [Thread-17624] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:48:26.441 [DEBUG] [Thread-17624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:48:26.441 [DEBUG] [Thread-17624] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:48:26.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:48:26.442 [DEBUG] [Thread-17624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:48:26.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:48:26.497 [DEBUG] [Thread-17624] [transport.py] [_log()] userauth is OK
2025-11-12T14:48:26.497 [DEBUG] [Thread-17624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:48:26.497 [DEBUG] [Thread-17624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:48:26.497 [DEBUG] [Thread-17624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:48:26.498 [DEBUG] [Thread-17624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:48:26.519 [INFO] [Thread-17624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:48:26.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:48:26.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:48:27.370 [DEBUG] [Thread-17624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:48:27.371 [DEBUG] [Thread-17624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:48:27.418 [DEBUG] [Thread-17624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:48:27.419 [DEBUG] [Thread-17624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:48:27.428 [DEBUG] [Thread-17624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:48:27.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:48:27.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')
2025-11-12T14:48:27.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-11-12T14:48:27.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:48:27.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:48:27.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:48:27.465 [DEBUG] [Thread-17624] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:48:27.559 [DEBUG] [Thread-17626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:48:30.720 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:48:30.721 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:48:37.037 [DEBUG] [Thread-17627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:48:42.606 [DEBUG] [Thread-17628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:48:57.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:48:57.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:48:57.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-11-12T14:48:57.642 [DEBUG] [Thread-17629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:48:58.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 48, 38), 32.39, 11.43, 0.0, 34.49, 27.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:48:58.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:48:38
2025-11-12T14:48:58.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:48:58.401 [DEBUG] [Thread-17630] [transport.py] [_log()] starting thread (client mode): 0x1737dea0
2025-11-12T14:48:58.402 [DEBUG] [Thread-17630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:48:58.422 [DEBUG] [Thread-17630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:48:58.423 [INFO] [Thread-17630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:48:58.426 [DEBUG] [Thread-17630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] client lang: <none>
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] server lang: <none>
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] kex follows: False
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] Compression: none
2025-11-12T14:48:58.427 [DEBUG] [Thread-17630] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:48:58.444 [DEBUG] [Thread-17630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:48:58.445 [DEBUG] [Thread-17630] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:48:58.445 [DEBUG] [Thread-17630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:48:58.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:48:58.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:48:58.447 [DEBUG] [Thread-17630] [transport.py] [_log()] userauth is OK
2025-11-12T14:48:58.448 [DEBUG] [Thread-17630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:48:58.448 [DEBUG] [Thread-17630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:48:58.448 [DEBUG] [Thread-17630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:48:58.448 [DEBUG] [Thread-17630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:48:58.466 [INFO] [Thread-17630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:48:58.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:48:59.187 [DEBUG] [Thread-17630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:48:59.187 [DEBUG] [Thread-17630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:48:59.188 [DEBUG] [Thread-17630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:48:59.229 [DEBUG] [Thread-17630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:48:59.229 [DEBUG] [Thread-17630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:48:59.231 [DEBUG] [Thread-17630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:48:59.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:48:59.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:48:59.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:48:59.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:48:59.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:48:59.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:48:59.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:48:59.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:48:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:48:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.533421 -999.00  +26.50  29.64     18   +0.20 1 1 1 1 1   888    0 24.77 -70.97 ----- 29.6 29.6 287.7 40.5 30.9 -25.4 30.6 -23.8 30.4 -25.3 31.3 -25.2
2025-11-12T14:48:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:48:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:48:59.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.533421
2025-11-12T14:48:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:48:59.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:48:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:48:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:48:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:48:59.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:48:38', tmtdew=32.39, humidity=11.43, cloud=0.0, wind=34.49, temperature=27.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:48:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:48:59.253 [DEBUG] [Thread-17630] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:48:59.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:48:59.348 [DEBUG] [Thread-17633] [transport.py] [_log()] starting thread (client mode): 0x173f8430
2025-11-12T14:48:59.348 [DEBUG] [Thread-17633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:48:59.363 [DEBUG] [Thread-17633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:48:59.363 [INFO] [Thread-17633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:48:59.370 [DEBUG] [Thread-17633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] client lang: <none>
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] server lang: <none>
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] kex follows: False
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] Compression: none
2025-11-12T14:48:59.371 [DEBUG] [Thread-17633] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:48:59.429 [DEBUG] [Thread-17633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:48:59.430 [DEBUG] [Thread-17633] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:48:59.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:48:59.431 [DEBUG] [Thread-17633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:48:59.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:48:59.485 [DEBUG] [Thread-17633] [transport.py] [_log()] userauth is OK
2025-11-12T14:48:59.485 [DEBUG] [Thread-17633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:48:59.486 [DEBUG] [Thread-17633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:48:59.486 [DEBUG] [Thread-17633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:48:59.486 [DEBUG] [Thread-17633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:48:59.504 [INFO] [Thread-17633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:48:59.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:48:59.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:49:00.368 [DEBUG] [Thread-17633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:49:00.369 [DEBUG] [Thread-17633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:49:00.417 [DEBUG] [Thread-17633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:49:00.418 [DEBUG] [Thread-17633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:49:00.428 [DEBUG] [Thread-17633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:49:00.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:49:00.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-11-12T14:49:00.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:49:00.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:49:00.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:49:00.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:49:00.465 [DEBUG] [Thread-17633] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:49:12.670 [DEBUG] [Thread-17635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:49:27.712 [DEBUG] [Thread-17636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:49:30.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:49:30.488 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:49:30.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-11-12T14:49:30.861 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:49:30.862 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:49:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 49, 10), 32.12, 11.61, 29.3, 30.91, 27.41, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:49:31.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:49:10
2025-11-12T14:49:31.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:49:31.406 [DEBUG] [Thread-17637] [transport.py] [_log()] starting thread (client mode): 0x17362020
2025-11-12T14:49:31.406 [DEBUG] [Thread-17637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:49:31.427 [DEBUG] [Thread-17637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:49:31.427 [INFO] [Thread-17637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:49:31.430 [DEBUG] [Thread-17637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] client lang: <none>
2025-11-12T14:49:31.431 [DEBUG] [Thread-17637] [transport.py] [_log()] server lang: <none>
2025-11-12T14:49:31.432 [DEBUG] [Thread-17637] [transport.py] [_log()] kex follows: False
2025-11-12T14:49:31.432 [DEBUG] [Thread-17637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:49:31.432 [DEBUG] [Thread-17637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:49:31.432 [DEBUG] [Thread-17637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:49:31.432 [DEBUG] [Thread-17637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:49:31.432 [DEBUG] [Thread-17637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:49:31.432 [DEBUG] [Thread-17637] [transport.py] [_log()] Compression: none
2025-11-12T14:49:31.432 [DEBUG] [Thread-17637] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:49:31.450 [DEBUG] [Thread-17637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:49:31.451 [DEBUG] [Thread-17637] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:49:31.451 [DEBUG] [Thread-17637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:49:31.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:49:31.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:49:31.453 [DEBUG] [Thread-17637] [transport.py] [_log()] userauth is OK
2025-11-12T14:49:31.454 [DEBUG] [Thread-17637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:49:31.454 [DEBUG] [Thread-17637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:49:31.454 [DEBUG] [Thread-17637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:49:31.454 [DEBUG] [Thread-17637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:49:31.479 [INFO] [Thread-17637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:49:31.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:49:32.087 [DEBUG] [Thread-17637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:49:32.087 [DEBUG] [Thread-17637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:49:32.088 [DEBUG] [Thread-17637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:49:32.128 [DEBUG] [Thread-17637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:49:32.128 [DEBUG] [Thread-17637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:49:32.131 [DEBUG] [Thread-17637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:49:32.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:49:32.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:49:32.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:49:32.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:49:32.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:49:32.155 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:49:32.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:49:32.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:49:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:49:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.533768 -999.00  +26.20  27.40     18   +0.10 1 1 1 1 1   888    0 24.37 -78.70 ----- 27.4 27.4 278.2 37.1 30.9 -27.5 30.6 -24.6 30.4 -25.0 31.3 -24.1
2025-11-12T14:49:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:49:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:49:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.533768
2025-11-12T14:49:32.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:49:32.157 [DEBUG] [Thread-17637] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:49:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:49:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:49:32.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:49:32.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:49:32.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:49:10', tmtdew=32.12, humidity=11.61, cloud=29.3, wind=30.91, temperature=27.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:48:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:49:32.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:49:32.253 [DEBUG] [Thread-17640] [transport.py] [_log()] starting thread (client mode): 0x173bd300
2025-11-12T14:49:32.254 [DEBUG] [Thread-17640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:49:32.268 [DEBUG] [Thread-17640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:49:32.269 [INFO] [Thread-17640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:49:32.276 [DEBUG] [Thread-17640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:49:32.276 [DEBUG] [Thread-17640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:49:32.276 [DEBUG] [Thread-17640] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:49:32.276 [DEBUG] [Thread-17640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] client lang: <none>
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] server lang: <none>
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] kex follows: False
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] Compression: none
2025-11-12T14:49:32.277 [DEBUG] [Thread-17640] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:49:32.332 [DEBUG] [Thread-17640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:49:32.333 [DEBUG] [Thread-17640] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:49:32.333 [DEBUG] [Thread-17640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:49:32.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:49:32.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:49:32.389 [DEBUG] [Thread-17640] [transport.py] [_log()] userauth is OK
2025-11-12T14:49:32.390 [DEBUG] [Thread-17640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:49:32.390 [DEBUG] [Thread-17640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:49:32.390 [DEBUG] [Thread-17640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:49:32.390 [DEBUG] [Thread-17640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:49:32.409 [INFO] [Thread-17640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:49: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-11-12T14:49:32.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:49:33.285 [DEBUG] [Thread-17640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:49:33.286 [DEBUG] [Thread-17640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:49:33.334 [DEBUG] [Thread-17640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:49:33.334 [DEBUG] [Thread-17640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:49:33.343 [DEBUG] [Thread-17640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:49:33.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:49:33.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-11-12T14:49:33.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-11-12T14:49:33.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:49:33.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:49:33.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:49:33.381 [DEBUG] [Thread-17640] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:49:37.071 [DEBUG] [Thread-17642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:49:42.749 [DEBUG] [Thread-17643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:49:57.799 [DEBUG] [Thread-17644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:50:03.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:50:03.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:50:03.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-11-12T14:50:04.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 49, 42), 32.08, 11.58, 29.3, 27.14, 27.18, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:50:04.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:49:42
2025-11-12T14:50:04.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:50:04.306 [DEBUG] [Thread-17645] [transport.py] [_log()] starting thread (client mode): 0x173e88e0
2025-11-12T14:50:04.306 [DEBUG] [Thread-17645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:50:04.317 [DEBUG] [Thread-17645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:50:04.317 [INFO] [Thread-17645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:50:04.320 [DEBUG] [Thread-17645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:50:04.320 [DEBUG] [Thread-17645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:50:04.320 [DEBUG] [Thread-17645] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:50:04.320 [DEBUG] [Thread-17645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:50:04.320 [DEBUG] [Thread-17645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:50:04.320 [DEBUG] [Thread-17645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:50:04.320 [DEBUG] [Thread-17645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:50:04.320 [DEBUG] [Thread-17645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] client lang: <none>
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] server lang: <none>
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] kex follows: False
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] Compression: none
2025-11-12T14:50:04.321 [DEBUG] [Thread-17645] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:50:04.336 [DEBUG] [Thread-17645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:50:04.337 [DEBUG] [Thread-17645] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:50:04.337 [DEBUG] [Thread-17645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:50:04.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:50:04.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:50:04.339 [DEBUG] [Thread-17645] [transport.py] [_log()] userauth is OK
2025-11-12T14:50:04.339 [DEBUG] [Thread-17645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:50:04.339 [DEBUG] [Thread-17645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:50:04.339 [DEBUG] [Thread-17645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:50:04.339 [DEBUG] [Thread-17645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:50:04.374 [INFO] [Thread-17645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:50:04.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:50:06.494 [DEBUG] [Thread-17645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:50:06.494 [DEBUG] [Thread-17645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:50:06.495 [DEBUG] [Thread-17645] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:50:06.535 [DEBUG] [Thread-17645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:50:06.536 [DEBUG] [Thread-17645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:50:06.539 [DEBUG] [Thread-17645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:50:06.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:50:06.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:50:06.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:50:06.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:50:06.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:50:06.563 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:50:06.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:50:06.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:50:06.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:50:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.534115 -999.00  +26.20  37.22     18   +0.00 1 1 2 1 1   888    0 24.68 -75.05 ----- 37.2 37.2 269.6 42.5 30.7 -26.9 30.6 -23.9 30.2 -24.2 31.2 -26.3
2025-11-12T14:50:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:50:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:50:06.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.534115
2025-11-12T14:50:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:50:06.565 [DEBUG] [Thread-17645] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:50:06.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:50:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:50:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:50:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:50:06.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:49:42', tmtdew=32.08, humidity=11.58, cloud=29.3, wind=27.14, temperature=27.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:49:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:50:06.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:50:06.665 [DEBUG] [Thread-17648] [transport.py] [_log()] starting thread (client mode): 0x14955de0
2025-11-12T14:50:06.665 [DEBUG] [Thread-17648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:50:06.680 [DEBUG] [Thread-17648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:50:06.681 [INFO] [Thread-17648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:50:06.688 [DEBUG] [Thread-17648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:50:06.688 [DEBUG] [Thread-17648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:50:06.688 [DEBUG] [Thread-17648] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:50:06.688 [DEBUG] [Thread-17648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:50:06.688 [DEBUG] [Thread-17648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:50:06.688 [DEBUG] [Thread-17648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:50:06.688 [DEBUG] [Thread-17648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] client lang: <none>
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] server lang: <none>
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] kex follows: False
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] Compression: none
2025-11-12T14:50:06.689 [DEBUG] [Thread-17648] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:50:06.749 [DEBUG] [Thread-17648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:50:06.750 [DEBUG] [Thread-17648] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:50:06.751 [DEBUG] [Thread-17648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:50:06.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:50:06.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:50:06.814 [DEBUG] [Thread-17648] [transport.py] [_log()] userauth is OK
2025-11-12T14:50:06.814 [DEBUG] [Thread-17648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:50:06.814 [DEBUG] [Thread-17648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:50:06.814 [DEBUG] [Thread-17648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:50:06.814 [DEBUG] [Thread-17648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:50:06.833 [INFO] [Thread-17648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:50:06.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:50:06.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:50:07.678 [DEBUG] [Thread-17648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:50:07.678 [DEBUG] [Thread-17648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:50:07.726 [DEBUG] [Thread-17648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:50:07.726 [DEBUG] [Thread-17648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:50:07.735 [DEBUG] [Thread-17648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:50:07.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:50:07.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-11-12T14:50:07.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-11-12T14:50:07.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:50:07.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:50:07.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:50:07.774 [DEBUG] [Thread-17648] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:50:12.836 [DEBUG] [Thread-17650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:50:27.893 [DEBUG] [Thread-17651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:50:31.002 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:50:31.003 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:50:37.114 [DEBUG] [Thread-17652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:50:37.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:50:37.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:50:37.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-11-12T14:50:38.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 50, 14), 31.93, 11.69, 29.3, 22.14, 27.1, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:50:38.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:50:14
2025-11-12T14:50:38.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:50:38.710 [DEBUG] [Thread-17653] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T14:50:38.710 [DEBUG] [Thread-17653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:50:38.730 [DEBUG] [Thread-17653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:50:38.730 [INFO] [Thread-17653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:50:38.733 [DEBUG] [Thread-17653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] client lang: <none>
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] server lang: <none>
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] kex follows: False
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:50:38.734 [DEBUG] [Thread-17653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:50:38.735 [DEBUG] [Thread-17653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:50:38.735 [DEBUG] [Thread-17653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:50:38.735 [DEBUG] [Thread-17653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:50:38.735 [DEBUG] [Thread-17653] [transport.py] [_log()] Compression: none
2025-11-12T14:50:38.735 [DEBUG] [Thread-17653] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:50:38.744 [DEBUG] [Thread-17653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:50:38.745 [DEBUG] [Thread-17653] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:50:38.746 [DEBUG] [Thread-17653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:50:38.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:50:38.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:50:38.748 [DEBUG] [Thread-17653] [transport.py] [_log()] userauth is OK
2025-11-12T14:50:38.749 [DEBUG] [Thread-17653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:50:38.749 [DEBUG] [Thread-17653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:50:38.749 [DEBUG] [Thread-17653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:50:38.749 [DEBUG] [Thread-17653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:50:38.772 [INFO] [Thread-17653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:50:38.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:50:39.401 [DEBUG] [Thread-17653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:50:39.402 [DEBUG] [Thread-17653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:50:39.402 [DEBUG] [Thread-17653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:50:39.442 [DEBUG] [Thread-17653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:50:39.443 [DEBUG] [Thread-17653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:50:39.445 [DEBUG] [Thread-17653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:50:39.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:50:39.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:50:39.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:50:39.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:50:39.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:50:39.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:50:39.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:50:39.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:50:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:50:39.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.534463 -999.00  +26.70  19.97     17   +0.30 1 2 1 1 1   888    0 24.42 -74.46 ----- 20.0 20.0 294.6 29.9 30.9 -24.5 30.4 -23.3 30.4 -22.4 31.2 -22.9
2025-11-12T14:50:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:50:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:50:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.534463
2025-11-12T14:50:39.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:50:39.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:50:39.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:50:39.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:50:39.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:50:39.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:50:14', tmtdew=31.93, humidity=11.69, cloud=29.3, wind=22.14, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:49:37.603', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:50:39.468 [DEBUG] [Thread-17653] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:50:39.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:50:39.563 [DEBUG] [Thread-17656] [transport.py] [_log()] starting thread (client mode): 0x173621a0
2025-11-12T14:50:39.563 [DEBUG] [Thread-17656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:50:39.577 [DEBUG] [Thread-17656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:50:39.577 [INFO] [Thread-17656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] client lang: <none>
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] server lang: <none>
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] kex follows: False
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:50:39.585 [DEBUG] [Thread-17656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:50:39.586 [DEBUG] [Thread-17656] [transport.py] [_log()] Compression: none
2025-11-12T14:50:39.586 [DEBUG] [Thread-17656] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:50:39.644 [DEBUG] [Thread-17656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:50:39.644 [DEBUG] [Thread-17656] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:50:39.644 [DEBUG] [Thread-17656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:50:39.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:50:39.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:50:39.700 [DEBUG] [Thread-17656] [transport.py] [_log()] userauth is OK
2025-11-12T14:50:39.700 [DEBUG] [Thread-17656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:50:39.701 [DEBUG] [Thread-17656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:50:39.701 [DEBUG] [Thread-17656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:50:39.701 [DEBUG] [Thread-17656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:50:39.720 [INFO] [Thread-17656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:50:39.720 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:50:39.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:50:40.532 [DEBUG] [Thread-17656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:50:40.532 [DEBUG] [Thread-17656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:50:40.579 [DEBUG] [Thread-17656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:50:40.579 [DEBUG] [Thread-17656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:50:40.588 [DEBUG] [Thread-17656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:50:40.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:50:40.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:50:40.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-11-12T14:50:40.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:50:40.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:50:40.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:50:40.623 [DEBUG] [Thread-17656] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:50:42.920 [DEBUG] [Thread-17658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:50:57.973 [DEBUG] [Thread-17659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:51:10.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:51:10.645 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:51:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:51:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 50, 46), 32.26, 11.64, 29.3, 27.19, 27.26, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:51:11.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:50:46
2025-11-12T14:51:11.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:51:11.562 [DEBUG] [Thread-17660] [transport.py] [_log()] starting thread (client mode): 0x173be5f0
2025-11-12T14:51:11.562 [DEBUG] [Thread-17660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:51:11.583 [DEBUG] [Thread-17660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:51:11.584 [INFO] [Thread-17660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:51:11.586 [DEBUG] [Thread-17660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] client lang: <none>
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] server lang: <none>
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] kex follows: False
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] Compression: none
2025-11-12T14:51:11.587 [DEBUG] [Thread-17660] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:51:11.603 [DEBUG] [Thread-17660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:51:11.604 [DEBUG] [Thread-17660] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:51:11.604 [DEBUG] [Thread-17660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:51:11.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:51:11.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:51:11.606 [DEBUG] [Thread-17660] [transport.py] [_log()] userauth is OK
2025-11-12T14:51:11.607 [DEBUG] [Thread-17660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:51:11.607 [DEBUG] [Thread-17660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:51:11.607 [DEBUG] [Thread-17660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:51:11.607 [DEBUG] [Thread-17660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:51:11.630 [INFO] [Thread-17660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:51:11.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:51:12.367 [DEBUG] [Thread-17660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:51:12.367 [DEBUG] [Thread-17660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:51:12.368 [DEBUG] [Thread-17660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:51:12.408 [DEBUG] [Thread-17660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:51:12.409 [DEBUG] [Thread-17660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:51:12.412 [DEBUG] [Thread-17660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:51:12.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:51:12.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:51:12.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:51:12.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:51:12.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:51:12.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:51:12.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:51:12.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:51:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:51:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.535157 -999.00  +27.20  22.66     17   +0.20 1 2 1 1 1   888    0 24.89 -59.75 ----- 22.7 22.7 273.6 28.2 31.1 -23.9 30.7 -23.0 30.8 -22.7 31.5 -22.9
2025-11-12T14:51:12.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:51:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:51:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.535157
2025-11-12T14:51:12.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:51:12.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:51:12.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:51:12.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:51:12.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:51:12.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:50:46', tmtdew=32.26, humidity=11.64, cloud=29.3, wind=27.19, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:50:37.565', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:51:12.433 [DEBUG] [Thread-17660] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:51:12.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:51:12.528 [DEBUG] [Thread-17663] [transport.py] [_log()] starting thread (client mode): 0x173fa1a0
2025-11-12T14:51:12.529 [DEBUG] [Thread-17663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:51:12.548 [DEBUG] [Thread-17663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:51:12.548 [INFO] [Thread-17663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] client lang: <none>
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] server lang: <none>
2025-11-12T14:51:12.559 [DEBUG] [Thread-17663] [transport.py] [_log()] kex follows: False
2025-11-12T14:51:12.560 [DEBUG] [Thread-17663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:51:12.560 [DEBUG] [Thread-17663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:51:12.560 [DEBUG] [Thread-17663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:51:12.560 [DEBUG] [Thread-17663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:51:12.560 [DEBUG] [Thread-17663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:51:12.560 [DEBUG] [Thread-17663] [transport.py] [_log()] Compression: none
2025-11-12T14:51:12.560 [DEBUG] [Thread-17663] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:51:12.613 [DEBUG] [Thread-17663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:51:12.614 [DEBUG] [Thread-17663] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:51:12.614 [DEBUG] [Thread-17663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:51:12.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:51:12.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:51:12.669 [DEBUG] [Thread-17663] [transport.py] [_log()] userauth is OK
2025-11-12T14:51:12.669 [DEBUG] [Thread-17663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:51:12.669 [DEBUG] [Thread-17663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:51:12.669 [DEBUG] [Thread-17663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:51:12.669 [DEBUG] [Thread-17663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:51:12.688 [INFO] [Thread-17663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:51:12.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:51:12.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:51:13.006 [DEBUG] [Thread-17665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:51:13.523 [DEBUG] [Thread-17663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:51:13.523 [DEBUG] [Thread-17663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:51:13.570 [DEBUG] [Thread-17663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:51:13.571 [DEBUG] [Thread-17663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:51:13.580 [DEBUG] [Thread-17663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:51:13.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:51:13.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-11-12T14:51:13.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-11-12T14:51:13.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:51:13.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:51:13.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:51:13.616 [DEBUG] [Thread-17663] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:51:28.057 [DEBUG] [Thread-17666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:51:31.144 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:51:31.145 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:51:37.154 [DEBUG] [Thread-17667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:51:43.089 [DEBUG] [Thread-17668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:51:43.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:51:43.622 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:51:43.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-11-12T14:51:44.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 51, 18), 32.25, 11.64, 29.3, 26.2, 27.21, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:51:44.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:51:18
2025-11-12T14:51:44.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:51:44.565 [DEBUG] [Thread-17669] [transport.py] [_log()] starting thread (client mode): 0x17362c50
2025-11-12T14:51:44.565 [DEBUG] [Thread-17669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:51:44.585 [DEBUG] [Thread-17669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:51:44.585 [INFO] [Thread-17669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] client lang: <none>
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] server lang: <none>
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] kex follows: False
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] Compression: none
2025-11-12T14:51:44.588 [DEBUG] [Thread-17669] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:51:44.603 [DEBUG] [Thread-17669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:51:44.604 [DEBUG] [Thread-17669] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:51:44.604 [DEBUG] [Thread-17669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:51:44.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:51:44.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:51:44.605 [DEBUG] [Thread-17669] [transport.py] [_log()] userauth is OK
2025-11-12T14:51:44.605 [DEBUG] [Thread-17669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:51:44.605 [DEBUG] [Thread-17669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:51:44.605 [DEBUG] [Thread-17669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:51:44.605 [DEBUG] [Thread-17669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:51:44.614 [INFO] [Thread-17669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:51:44.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:51:45.232 [DEBUG] [Thread-17669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:51:45.232 [DEBUG] [Thread-17669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:51:45.232 [DEBUG] [Thread-17669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:51:45.273 [DEBUG] [Thread-17669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:51:45.273 [DEBUG] [Thread-17669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:51:45.275 [DEBUG] [Thread-17669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:51:45.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:51:45.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:51:45.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:51:45.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:51:45.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:51:45.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:51:45.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:51:45.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.535504 -999.00  +27.20  26.78     17   +0.20 1 1 1 1 1   888    0 25.37 -53.91 ----- 26.8 26.8 275.8 29.9 31.1 -24.7 30.8 -23.0 30.7 -24.9 31.6 -23.4
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.535504
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:51:45.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:51:18', tmtdew=32.25, humidity=11.64, cloud=29.3, wind=26.2, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:51:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:51:45.293 [DEBUG] [Thread-17669] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:51:45.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:51:45.378 [DEBUG] [Thread-17672] [transport.py] [_log()] starting thread (client mode): 0x17362950
2025-11-12T14:51:45.378 [DEBUG] [Thread-17672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:51:45.396 [DEBUG] [Thread-17672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:51:45.397 [INFO] [Thread-17672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] client lang: <none>
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] server lang: <none>
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] kex follows: False
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] Compression: none
2025-11-12T14:51:45.404 [DEBUG] [Thread-17672] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:51:45.459 [DEBUG] [Thread-17672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:51:45.459 [DEBUG] [Thread-17672] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:51:45.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:51:45.460 [DEBUG] [Thread-17672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:51:45.460 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:51:45.516 [DEBUG] [Thread-17672] [transport.py] [_log()] userauth is OK
2025-11-12T14:51:45.516 [DEBUG] [Thread-17672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:51:45.516 [DEBUG] [Thread-17672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:51:45.516 [DEBUG] [Thread-17672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:51:45.516 [DEBUG] [Thread-17672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:51:45.534 [INFO] [Thread-17672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:51:45.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:51:45.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:51:46.352 [DEBUG] [Thread-17672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:51:46.353 [DEBUG] [Thread-17672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:51:46.400 [DEBUG] [Thread-17672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:51:46.400 [DEBUG] [Thread-17672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:51:46.408 [DEBUG] [Thread-17672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:51:46.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:51:46.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:51:46.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:51:46.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:51:46.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:51:46.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:51:46.440 [DEBUG] [Thread-17672] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:51:58.121 [DEBUG] [Thread-17674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:52:13.175 [DEBUG] [Thread-17675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:52:16.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:52:16.463 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:52:16.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-11-12T14:52:17.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 51, 50), 32.57, 11.61, 29.3, 26.77, 27.8, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:52:17.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:51:50
2025-11-12T14:52:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:52:17.377 [DEBUG] [Thread-17676] [transport.py] [_log()] starting thread (client mode): 0x173f86d0
2025-11-12T14:52:17.377 [DEBUG] [Thread-17676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:52:17.396 [DEBUG] [Thread-17676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:52:17.396 [INFO] [Thread-17676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:52:17.399 [DEBUG] [Thread-17676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:52:17.399 [DEBUG] [Thread-17676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:52:17.399 [DEBUG] [Thread-17676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] client lang: <none>
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] server lang: <none>
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] kex follows: False
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] Compression: none
2025-11-12T14:52:17.400 [DEBUG] [Thread-17676] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:52:17.417 [DEBUG] [Thread-17676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:52:17.418 [DEBUG] [Thread-17676] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:52:17.418 [DEBUG] [Thread-17676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:52:17.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:52:17.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:52:17.420 [DEBUG] [Thread-17676] [transport.py] [_log()] userauth is OK
2025-11-12T14:52:17.420 [DEBUG] [Thread-17676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:52:17.420 [DEBUG] [Thread-17676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:52:17.420 [DEBUG] [Thread-17676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:52:17.420 [DEBUG] [Thread-17676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:52:17.435 [INFO] [Thread-17676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:52:17.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:52:18.149 [DEBUG] [Thread-17676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:52:18.149 [DEBUG] [Thread-17676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:52:18.150 [DEBUG] [Thread-17676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:52:18.190 [DEBUG] [Thread-17676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:52:18.190 [DEBUG] [Thread-17676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:52:18.192 [DEBUG] [Thread-17676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:52:18.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:52:18.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:52:18.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:52:18.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:52:18.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:52:18.212 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:52:18.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.535851 -999.00  +27.30  25.21     17   +0.20 1 2 1 1 1   888    0 25.11 -45.58 ----- 25.2 25.2 277.2 31.3 31.1 -25.0 30.9 -23.2 30.7 -22.4 31.6 -23.5
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.535851
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:52:18.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:51:50', tmtdew=32.57, humidity=11.61, cloud=29.3, wind=26.77, temperature=27.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:51:37.526', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:52:18.213 [DEBUG] [Thread-17676] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:52:18.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:52:18.295 [DEBUG] [Thread-17679] [transport.py] [_log()] starting thread (client mode): 0x173f89d0
2025-11-12T14:52:18.296 [DEBUG] [Thread-17679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:52:18.310 [DEBUG] [Thread-17679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:52:18.310 [INFO] [Thread-17679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] client lang: <none>
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] server lang: <none>
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] kex follows: False
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:52:18.318 [DEBUG] [Thread-17679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:52:18.319 [DEBUG] [Thread-17679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:52:18.319 [DEBUG] [Thread-17679] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:52:18.319 [DEBUG] [Thread-17679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:52:18.319 [DEBUG] [Thread-17679] [transport.py] [_log()] Compression: none
2025-11-12T14:52:18.319 [DEBUG] [Thread-17679] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:52:18.377 [DEBUG] [Thread-17679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:52:18.378 [DEBUG] [Thread-17679] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:52:18.378 [DEBUG] [Thread-17679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:52:18.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:52:18.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:52:18.433 [DEBUG] [Thread-17679] [transport.py] [_log()] userauth is OK
2025-11-12T14:52:18.434 [DEBUG] [Thread-17679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:52:18.434 [DEBUG] [Thread-17679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:52:18.434 [DEBUG] [Thread-17679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:52:18.434 [DEBUG] [Thread-17679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:52:18.453 [INFO] [Thread-17679] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:52:18.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:52:18.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:52:19.282 [DEBUG] [Thread-17679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:52:19.282 [DEBUG] [Thread-17679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:52:19.331 [DEBUG] [Thread-17679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:52:19.331 [DEBUG] [Thread-17679] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:52:19.340 [DEBUG] [Thread-17679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:52:19.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:52:19.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-11-12T14:52:19.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-11-12T14:52:19.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:52:19.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:52:19.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:52:19.375 [DEBUG] [Thread-17679] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:52:28.207 [DEBUG] [Thread-17681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:52:31.287 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:52:31.288 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:52:37.188 [DEBUG] [Thread-17682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:52:43.257 [DEBUG] [Thread-17683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:52:49.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:52:49.397 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:52:49.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-11-12T14:52:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 52, 22), 32.97, 11.33, 29.3, 29.57, 28.06, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:52:50.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:52:22
2025-11-12T14:52:50.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:52:50.296 [DEBUG] [Thread-17684] [transport.py] [_log()] starting thread (client mode): 0x149aa710
2025-11-12T14:52:50.297 [DEBUG] [Thread-17684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:52:50.316 [DEBUG] [Thread-17684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:52:50.316 [INFO] [Thread-17684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] client lang: <none>
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] server lang: <none>
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] kex follows: False
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] Compression: none
2025-11-12T14:52:50.319 [DEBUG] [Thread-17684] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:52:50.336 [DEBUG] [Thread-17684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:52:50.337 [DEBUG] [Thread-17684] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:52:50.337 [DEBUG] [Thread-17684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:52:50.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:52:50.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:52:50.339 [DEBUG] [Thread-17684] [transport.py] [_log()] userauth is OK
2025-11-12T14:52:50.339 [DEBUG] [Thread-17684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:52:50.340 [DEBUG] [Thread-17684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:52:50.340 [DEBUG] [Thread-17684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:52:50.340 [DEBUG] [Thread-17684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:52:50.375 [INFO] [Thread-17684] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:52:50.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:52:51.030 [DEBUG] [Thread-17684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:52:51.030 [DEBUG] [Thread-17684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:52:51.030 [DEBUG] [Thread-17684] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:52:51.071 [DEBUG] [Thread-17684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:52:51.071 [DEBUG] [Thread-17684] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:52:51.074 [DEBUG] [Thread-17684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:52:51.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:52:51.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:52:51.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:52:51.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:52:51.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:52:51.101 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:52:51.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:52:51.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:52:51.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:52:51.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.536199 -999.00  +27.50  33.06     16   +0.00 1 1 2 1 1   888    0 25.42 -35.10 ----- 33.1 33.1 273.4 39.5 31.3 -25.2 30.9 -23.7 31.0 -23.9 31.6 -24.1
2025-11-12T14:52:51.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:52:51.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:52:51.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.536199
2025-11-12T14:52:51.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:52:51.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:52:51.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:52:51.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:52:51.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:52:51.104 [DEBUG] [Thread-17684] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:52:51.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:52:22', tmtdew=32.97, humidity=11.33, cloud=29.3, wind=29.57, temperature=28.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:52:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:52:51.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:52:51.199 [DEBUG] [Thread-17687] [transport.py] [_log()] starting thread (client mode): 0x17346bc0
2025-11-12T14:52:51.199 [DEBUG] [Thread-17687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:52:51.214 [DEBUG] [Thread-17687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:52:51.214 [INFO] [Thread-17687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] client lang: <none>
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] server lang: <none>
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] kex follows: False
2025-11-12T14:52:51.222 [DEBUG] [Thread-17687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:52:51.223 [DEBUG] [Thread-17687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:52:51.223 [DEBUG] [Thread-17687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:52:51.223 [DEBUG] [Thread-17687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:52:51.223 [DEBUG] [Thread-17687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:52:51.223 [DEBUG] [Thread-17687] [transport.py] [_log()] Compression: none
2025-11-12T14:52:51.223 [DEBUG] [Thread-17687] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:52:51.282 [DEBUG] [Thread-17687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:52:51.282 [DEBUG] [Thread-17687] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:52:51.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:52:51.283 [DEBUG] [Thread-17687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:52:51.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:52:51.341 [DEBUG] [Thread-17687] [transport.py] [_log()] userauth is OK
2025-11-12T14:52:51.341 [DEBUG] [Thread-17687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:52:51.341 [DEBUG] [Thread-17687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:52:51.342 [DEBUG] [Thread-17687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:52:51.342 [DEBUG] [Thread-17687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:52:51.361 [INFO] [Thread-17687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:52:51.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:52:51.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:52:52.214 [DEBUG] [Thread-17687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:52:52.215 [DEBUG] [Thread-17687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:52:52.263 [DEBUG] [Thread-17687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:52:52.263 [DEBUG] [Thread-17687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:52:52.273 [DEBUG] [Thread-17687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:52:52.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:52:52.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-11-12T14:52:52.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-11-12T14:52:52.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:52:52.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:52:52.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:52:52.310 [DEBUG] [Thread-17687] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:52:58.288 [DEBUG] [Thread-17689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:53:13.339 [DEBUG] [Thread-17690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:53:22.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:53:22.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:53:22.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-11-12T14:53:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 52, 54), 32.74, 11.31, 29.3, 40.49, 27.34, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:53:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:52:54
2025-11-12T14:53:23.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:53:23.227 [DEBUG] [Thread-17691] [transport.py] [_log()] starting thread (client mode): 0x14960730
2025-11-12T14:53:23.227 [DEBUG] [Thread-17691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:53:23.249 [DEBUG] [Thread-17691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:53:23.249 [INFO] [Thread-17691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] client lang: <none>
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] server lang: <none>
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] kex follows: False
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] Compression: none
2025-11-12T14:53:23.252 [DEBUG] [Thread-17691] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:53:23.270 [DEBUG] [Thread-17691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:53:23.271 [DEBUG] [Thread-17691] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:53:23.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:53:23.272 [DEBUG] [Thread-17691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:53:23.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:53:23.274 [DEBUG] [Thread-17691] [transport.py] [_log()] userauth is OK
2025-11-12T14:53:23.274 [DEBUG] [Thread-17691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:53:23.274 [DEBUG] [Thread-17691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:53:23.274 [DEBUG] [Thread-17691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:53:23.274 [DEBUG] [Thread-17691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:53:23.310 [INFO] [Thread-17691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:53:23.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:53:24.034 [DEBUG] [Thread-17691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:53:24.034 [DEBUG] [Thread-17691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:53:24.035 [DEBUG] [Thread-17691] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:53:24.075 [DEBUG] [Thread-17691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:53:24.076 [DEBUG] [Thread-17691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:53:24.079 [DEBUG] [Thread-17691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:53:24.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:53:24.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:53:24.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:53:24.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:53:24.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:53:24.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:53:24.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:53:24.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:53:24.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:53:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.536546 -999.00  +26.80  43.16     17   -0.10 1 1 2 1 1   888    0 25.95 -25.82 ----- 43.2 43.2 275.0 51.7 30.8 -26.3 30.8 -25.8 30.2 -25.3 31.3 -26.2
2025-11-12T14:53:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:53:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:53:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.536546
2025-11-12T14:53:24.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:53:24.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:53:24.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:53:24.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:53:24.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:53:24.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:52:54', tmtdew=32.74, humidity=11.31, cloud=29.3, wind=40.49, temperature=27.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:52:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:53:24.107 [DEBUG] [Thread-17691] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:53:24.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:53:24.202 [DEBUG] [Thread-17694] [transport.py] [_log()] starting thread (client mode): 0x149a9c00
2025-11-12T14:53:24.203 [DEBUG] [Thread-17694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:53:24.218 [DEBUG] [Thread-17694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:53:24.218 [INFO] [Thread-17694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] client lang: <none>
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] server lang: <none>
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] kex follows: False
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:53:24.226 [DEBUG] [Thread-17694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:53:24.227 [DEBUG] [Thread-17694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:53:24.227 [DEBUG] [Thread-17694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:53:24.227 [DEBUG] [Thread-17694] [transport.py] [_log()] Compression: none
2025-11-12T14:53:24.227 [DEBUG] [Thread-17694] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:53:24.285 [DEBUG] [Thread-17694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:53:24.286 [DEBUG] [Thread-17694] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:53:24.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:53:24.287 [DEBUG] [Thread-17694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:53:24.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:53:24.341 [DEBUG] [Thread-17694] [transport.py] [_log()] userauth is OK
2025-11-12T14:53:24.341 [DEBUG] [Thread-17694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:53:24.342 [DEBUG] [Thread-17694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:53:24.342 [DEBUG] [Thread-17694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:53:24.342 [DEBUG] [Thread-17694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:53:24.360 [INFO] [Thread-17694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:53:24.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:53:24.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:53:25.188 [DEBUG] [Thread-17694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:53:25.189 [DEBUG] [Thread-17694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:53:25.237 [DEBUG] [Thread-17694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:53:25.237 [DEBUG] [Thread-17694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:53:25.247 [DEBUG] [Thread-17694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:53:25.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:53:25.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-11-12T14:53:25.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-11-12T14:53:25.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:53:25.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:53:25.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:53:25.285 [DEBUG] [Thread-17694] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:53:28.378 [DEBUG] [Thread-17696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:53:31.429 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:53:31.430 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:53:37.221 [DEBUG] [Thread-17697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:53:43.418 [DEBUG] [Thread-17698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:53:55.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:53:55.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:53:55.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-11-12T14:53:55.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 53, 26), 32.62, 11.36, 29.3, 37.0, 27.11, 0, 0, 0, 0, 0, 0),)
2025-11-12T14:53:55.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:53:26
2025-11-12T14:53:56.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:53:56.224 [DEBUG] [Thread-17699] [transport.py] [_log()] starting thread (client mode): 0x173fabf0
2025-11-12T14:53:56.224 [DEBUG] [Thread-17699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:53:56.244 [DEBUG] [Thread-17699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:53:56.245 [INFO] [Thread-17699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:53:56.247 [DEBUG] [Thread-17699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] client lang: <none>
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] server lang: <none>
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] kex follows: False
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:53:56.248 [DEBUG] [Thread-17699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:53:56.249 [DEBUG] [Thread-17699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:53:56.249 [DEBUG] [Thread-17699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:53:56.249 [DEBUG] [Thread-17699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:53:56.249 [DEBUG] [Thread-17699] [transport.py] [_log()] Compression: none
2025-11-12T14:53:56.249 [DEBUG] [Thread-17699] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:53:56.266 [DEBUG] [Thread-17699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:53:56.267 [DEBUG] [Thread-17699] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:53:56.267 [DEBUG] [Thread-17699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:53:56.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:53:56.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:53:56.269 [DEBUG] [Thread-17699] [transport.py] [_log()] userauth is OK
2025-11-12T14:53:56.269 [DEBUG] [Thread-17699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:53:56.269 [DEBUG] [Thread-17699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:53:56.269 [DEBUG] [Thread-17699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:53:56.269 [DEBUG] [Thread-17699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:53:56.279 [INFO] [Thread-17699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:53:56.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:53:56.919 [DEBUG] [Thread-17699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:53:56.919 [DEBUG] [Thread-17699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:53:56.920 [DEBUG] [Thread-17699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:53:56.961 [DEBUG] [Thread-17699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:53:56.961 [DEBUG] [Thread-17699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:53:56.965 [DEBUG] [Thread-17699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:53:56.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:53:56.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:53:56.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:53:56.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:53:56.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:53:56.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:53:56.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:53:56.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:53:56.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:53:56.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.536893 -999.00  +26.10  30.84     17   -0.20 1 1 2 1 1   888    0 25.83 -20.32 ----- 30.8 30.8 274.4 44.4 30.6 -28.8 30.5 -25.8 30.2 -26.7 31.1 -25.3
2025-11-12T14:53:56.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:53:56.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:53:56.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.536893
2025-11-12T14:53:56.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:53:56.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:53:56.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:53:56.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:53:56.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:53:56.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:53:26', tmtdew=32.62, humidity=11.36, cloud=29.3, wind=37.0, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=0, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:53:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:53:56.992 [DEBUG] [Thread-17699] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:53:57.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:53:57.087 [DEBUG] [Thread-17702] [transport.py] [_log()] starting thread (client mode): 0x149abc10
2025-11-12T14:53:57.087 [DEBUG] [Thread-17702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:53:57.101 [DEBUG] [Thread-17702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:53:57.101 [INFO] [Thread-17702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] client lang: <none>
2025-11-12T14:53:57.109 [DEBUG] [Thread-17702] [transport.py] [_log()] server lang: <none>
2025-11-12T14:53:57.110 [DEBUG] [Thread-17702] [transport.py] [_log()] kex follows: False
2025-11-12T14:53:57.110 [DEBUG] [Thread-17702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:53:57.110 [DEBUG] [Thread-17702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:53:57.110 [DEBUG] [Thread-17702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:53:57.110 [DEBUG] [Thread-17702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:53:57.110 [DEBUG] [Thread-17702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:53:57.110 [DEBUG] [Thread-17702] [transport.py] [_log()] Compression: none
2025-11-12T14:53:57.110 [DEBUG] [Thread-17702] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:53:57.169 [DEBUG] [Thread-17702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:53:57.170 [DEBUG] [Thread-17702] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:53:57.170 [DEBUG] [Thread-17702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:53:57.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:53:57.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:53:57.225 [DEBUG] [Thread-17702] [transport.py] [_log()] userauth is OK
2025-11-12T14:53:57.226 [DEBUG] [Thread-17702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:53:57.226 [DEBUG] [Thread-17702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:53:57.226 [DEBUG] [Thread-17702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:53:57.226 [DEBUG] [Thread-17702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:53:57.246 [INFO] [Thread-17702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:53:57.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:53:57.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:53:58.089 [DEBUG] [Thread-17702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:53:58.089 [DEBUG] [Thread-17702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:53:58.136 [DEBUG] [Thread-17702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:53:58.137 [DEBUG] [Thread-17702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:53:58.147 [DEBUG] [Thread-17702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:53:58.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:53:58.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:53:58.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:53:58.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:53:58.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:53:58.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:53:58.188 [DEBUG] [Thread-17702] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:53:58.458 [DEBUG] [Thread-17704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:54:13.524 [DEBUG] [Thread-17705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:54:28.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:54:28.199 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:54:28.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-11-12T14:54:28.555 [DEBUG] [Thread-17706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:54:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 53, 58), 32.34, 11.49, 0.0, 26.1, 26.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:54:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:53:58
2025-11-12T14:54:28.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:54:29.102 [DEBUG] [Thread-17707] [transport.py] [_log()] starting thread (client mode): 0x173633d0
2025-11-12T14:54:29.102 [DEBUG] [Thread-17707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:54:29.113 [DEBUG] [Thread-17707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:54:29.113 [INFO] [Thread-17707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:54:29.116 [DEBUG] [Thread-17707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:54:29.116 [DEBUG] [Thread-17707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:54:29.116 [DEBUG] [Thread-17707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:54:29.116 [DEBUG] [Thread-17707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] client lang: <none>
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] server lang: <none>
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] kex follows: False
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] Compression: none
2025-11-12T14:54:29.117 [DEBUG] [Thread-17707] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:54:29.137 [DEBUG] [Thread-17707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:54:29.137 [DEBUG] [Thread-17707] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:54:29.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:54:29.139 [DEBUG] [Thread-17707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:54:29.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:54:29.141 [DEBUG] [Thread-17707] [transport.py] [_log()] userauth is OK
2025-11-12T14:54:29.142 [DEBUG] [Thread-17707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:54:29.142 [DEBUG] [Thread-17707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:54:29.142 [DEBUG] [Thread-17707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:54:29.142 [DEBUG] [Thread-17707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:54:29.156 [INFO] [Thread-17707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:54:29.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:54:29.898 [DEBUG] [Thread-17707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:54:29.898 [DEBUG] [Thread-17707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:54:29.899 [DEBUG] [Thread-17707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:54:29.939 [DEBUG] [Thread-17707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:54:29.940 [DEBUG] [Thread-17707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:54:29.944 [DEBUG] [Thread-17707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:54:29.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:54:29.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:54:29.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:54:29.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:54:29.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:54:29.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:54:29.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:54:29.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:54:29.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:54:29.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.537240 -999.00  +26.00  23.68     17   -0.30 1 1 1 1 1   888    0 26.07 -16.09 ----- 23.7 23.7 275.6 32.0 30.5 -26.7 30.3 -25.3 30.1 -26.1 30.8 -26.3
2025-11-12T14:54:29.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:54:29.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:54:29.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.537240
2025-11-12T14:54:29.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:54:29.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:54:29.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:54:29.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:54:29.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:54:29.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:53:58', tmtdew=32.34, humidity=11.49, cloud=0.0, wind=26.1, temperature=26.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:53:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:54:29.971 [DEBUG] [Thread-17707] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:54:30.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:54:30.069 [DEBUG] [Thread-17710] [transport.py] [_log()] starting thread (client mode): 0x1499ece0
2025-11-12T14:54:30.069 [DEBUG] [Thread-17710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:54:30.084 [DEBUG] [Thread-17710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:54:30.084 [INFO] [Thread-17710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:54:30.092 [DEBUG] [Thread-17710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:54:30.092 [DEBUG] [Thread-17710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:54:30.092 [DEBUG] [Thread-17710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] client lang: <none>
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] server lang: <none>
2025-11-12T14:54:30.093 [DEBUG] [Thread-17710] [transport.py] [_log()] kex follows: False
2025-11-12T14:54:30.094 [DEBUG] [Thread-17710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:54:30.094 [DEBUG] [Thread-17710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:54:30.094 [DEBUG] [Thread-17710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:54:30.094 [DEBUG] [Thread-17710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:54:30.094 [DEBUG] [Thread-17710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:54:30.094 [DEBUG] [Thread-17710] [transport.py] [_log()] Compression: none
2025-11-12T14:54:30.094 [DEBUG] [Thread-17710] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:54:30.154 [DEBUG] [Thread-17710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:54:30.155 [DEBUG] [Thread-17710] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:54:30.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:54:30.156 [DEBUG] [Thread-17710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:54:30.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:54:30.213 [DEBUG] [Thread-17710] [transport.py] [_log()] userauth is OK
2025-11-12T14:54:30.213 [DEBUG] [Thread-17710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:54:30.214 [DEBUG] [Thread-17710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:54:30.214 [DEBUG] [Thread-17710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:54:30.214 [DEBUG] [Thread-17710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:54:30.233 [INFO] [Thread-17710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:54:30.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:54:30.234 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:54:31.122 [DEBUG] [Thread-17710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:54:31.122 [DEBUG] [Thread-17710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:54:31.170 [DEBUG] [Thread-17710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:54:31.170 [DEBUG] [Thread-17710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:54:31.179 [DEBUG] [Thread-17710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:54:31.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:54:31.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-11-12T14:54:31.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-11-12T14:54:31.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:54:31.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:54:31.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:54:31.211 [DEBUG] [Thread-17710] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:54:31.569 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:54:31.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:54:37.256 [DEBUG] [Thread-17712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:54:43.589 [DEBUG] [Thread-17713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:54:58.636 [DEBUG] [Thread-17714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:55:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:55:01.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:55:01.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-11-12T14:55:01.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 54, 30), 32.49, 11.39, 0.0, 27.23, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:55:01.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:54:30
2025-11-12T14:55:02.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:55:02.150 [DEBUG] [Thread-17715] [transport.py] [_log()] starting thread (client mode): 0x17398520
2025-11-12T14:55:02.150 [DEBUG] [Thread-17715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:55:02.166 [DEBUG] [Thread-17715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:55:02.166 [INFO] [Thread-17715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] client lang: <none>
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] server lang: <none>
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] kex follows: False
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:55:02.170 [DEBUG] [Thread-17715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:55:02.171 [DEBUG] [Thread-17715] [transport.py] [_log()] Compression: none
2025-11-12T14:55:02.171 [DEBUG] [Thread-17715] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:55:02.188 [DEBUG] [Thread-17715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:55:02.189 [DEBUG] [Thread-17715] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:55:02.189 [DEBUG] [Thread-17715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:55:02.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:55:02.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:55:02.191 [DEBUG] [Thread-17715] [transport.py] [_log()] userauth is OK
2025-11-12T14:55:02.191 [DEBUG] [Thread-17715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:55:02.191 [DEBUG] [Thread-17715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:55:02.192 [DEBUG] [Thread-17715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:55:02.192 [DEBUG] [Thread-17715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:55:02.216 [INFO] [Thread-17715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:55:02.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:55:02.856 [DEBUG] [Thread-17715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:55:02.856 [DEBUG] [Thread-17715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:55:02.857 [DEBUG] [Thread-17715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:55:02.897 [DEBUG] [Thread-17715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:55:02.898 [DEBUG] [Thread-17715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:55:02.901 [DEBUG] [Thread-17715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:55:02.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:55:02.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:55:02.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:55:02.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:55:02.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:55:02.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:55:02.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:55:02.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:55:02.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:55:02.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.537588 -999.00  +26.00  24.51     17   -0.30 1 1 1 1 1   888    0 26.32 -11.73 ----- 24.5 24.5 272.0 28.6 30.4 -26.2 30.2 -24.7 29.8 -28.4 30.6 -25.1
2025-11-12T14:55:02.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:55:02.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:55:02.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.537588
2025-11-12T14:55:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:55:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:55:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:55:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:55:02.921 [DEBUG] [Thread-17715] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:55:02.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:55:02.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:54:30', tmtdew=32.49, humidity=11.39, cloud=0.0, wind=27.23, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:54:07.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:55:03.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:55:03.012 [DEBUG] [Thread-17718] [transport.py] [_log()] starting thread (client mode): 0x17399570
2025-11-12T14:55:03.012 [DEBUG] [Thread-17718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:55:03.027 [DEBUG] [Thread-17718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:55:03.027 [INFO] [Thread-17718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] client lang: <none>
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] server lang: <none>
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] kex follows: False
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] Compression: none
2025-11-12T14:55:03.034 [DEBUG] [Thread-17718] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:55:03.096 [DEBUG] [Thread-17718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:55:03.096 [DEBUG] [Thread-17718] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:55:03.096 [DEBUG] [Thread-17718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:55:03.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:55:03.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:55:03.153 [DEBUG] [Thread-17718] [transport.py] [_log()] userauth is OK
2025-11-12T14:55:03.153 [DEBUG] [Thread-17718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:55:03.153 [DEBUG] [Thread-17718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:55:03.153 [DEBUG] [Thread-17718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:55:03.153 [DEBUG] [Thread-17718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:55:03.167 [INFO] [Thread-17718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:55:03.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:55:03.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:55:03.999 [DEBUG] [Thread-17718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:55:03.999 [DEBUG] [Thread-17718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:55:04.047 [DEBUG] [Thread-17718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:55:04.047 [DEBUG] [Thread-17718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:55:04.056 [DEBUG] [Thread-17718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:55:04.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:55: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')
2025-11-12T14:55:04.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-11-12T14:55:04.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:55:04.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:55:04.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:55:04.087 [DEBUG] [Thread-17718] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:55:13.668 [DEBUG] [Thread-17720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:55:28.732 [DEBUG] [Thread-17721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:55:31.710 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:55:31.711 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:55:34.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:55:34.109 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:55:34.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-11-12T14:55:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 55, 2), 32.41, 11.43, 0.0, 26.84, 26.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:55:34.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:55:02
2025-11-12T14:55:34.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:55:35.066 [DEBUG] [Thread-17722] [transport.py] [_log()] starting thread (client mode): 0x1739a680
2025-11-12T14:55:35.066 [DEBUG] [Thread-17722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:55:35.085 [DEBUG] [Thread-17722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:55:35.085 [INFO] [Thread-17722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] client lang: <none>
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] server lang: <none>
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] kex follows: False
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:55:35.088 [DEBUG] [Thread-17722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:55:35.089 [DEBUG] [Thread-17722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:55:35.089 [DEBUG] [Thread-17722] [transport.py] [_log()] Compression: none
2025-11-12T14:55:35.089 [DEBUG] [Thread-17722] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:55:35.096 [DEBUG] [Thread-17722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:55:35.096 [DEBUG] [Thread-17722] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:55:35.096 [DEBUG] [Thread-17722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:55:35.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:55:35.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:55:35.097 [DEBUG] [Thread-17722] [transport.py] [_log()] userauth is OK
2025-11-12T14:55:35.097 [DEBUG] [Thread-17722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:55:35.097 [DEBUG] [Thread-17722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:55:35.097 [DEBUG] [Thread-17722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:55:35.097 [DEBUG] [Thread-17722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:55:35.113 [INFO] [Thread-17722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:55:35.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:55:35.832 [DEBUG] [Thread-17722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:55:35.832 [DEBUG] [Thread-17722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:55:35.832 [DEBUG] [Thread-17722] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:55:35.873 [DEBUG] [Thread-17722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:55:35.873 [DEBUG] [Thread-17722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:55:35.875 [DEBUG] [Thread-17722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:55:35.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:55:35.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:55:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:55:35.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:55:35.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:55:35.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:55:35.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.537935 -999.00  +26.00  24.67     17   -0.20 1 1 1 1 1   888    0 26.04 -11.52 ----- 24.7 24.7 270.2 34.2 30.2 -26.8 30.1 -25.3 29.6 -25.4 30.4 -25.5
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.537935
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:55:35.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:55:02', tmtdew=32.41, humidity=11.43, cloud=0.0, wind=26.84, temperature=26.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:54:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:55:35.894 [DEBUG] [Thread-17722] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:55:35.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:55:35.980 [DEBUG] [Thread-17725] [transport.py] [_log()] starting thread (client mode): 0x17398490
2025-11-12T14:55:35.980 [DEBUG] [Thread-17725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:55:35.995 [DEBUG] [Thread-17725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:55:35.995 [INFO] [Thread-17725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] client lang: <none>
2025-11-12T14:55:36.002 [DEBUG] [Thread-17725] [transport.py] [_log()] server lang: <none>
2025-11-12T14:55:36.003 [DEBUG] [Thread-17725] [transport.py] [_log()] kex follows: False
2025-11-12T14:55:36.003 [DEBUG] [Thread-17725] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:55:36.003 [DEBUG] [Thread-17725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:55:36.003 [DEBUG] [Thread-17725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:55:36.003 [DEBUG] [Thread-17725] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:55:36.003 [DEBUG] [Thread-17725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:55:36.003 [DEBUG] [Thread-17725] [transport.py] [_log()] Compression: none
2025-11-12T14:55:36.003 [DEBUG] [Thread-17725] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:55:36.062 [DEBUG] [Thread-17725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:55:36.062 [DEBUG] [Thread-17725] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:55:36.062 [DEBUG] [Thread-17725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:55:36.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:55:36.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:55:36.117 [DEBUG] [Thread-17725] [transport.py] [_log()] userauth is OK
2025-11-12T14:55:36.117 [DEBUG] [Thread-17725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:55:36.117 [DEBUG] [Thread-17725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:55:36.117 [DEBUG] [Thread-17725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:55:36.117 [DEBUG] [Thread-17725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:55:36.131 [INFO] [Thread-17725] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:55:36.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:55:36.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:55:36.954 [DEBUG] [Thread-17725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:55:36.954 [DEBUG] [Thread-17725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:55:37.002 [DEBUG] [Thread-17725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:55:37.002 [DEBUG] [Thread-17725] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:55:37.010 [DEBUG] [Thread-17725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:55:37.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:55:37.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-11-12T14:55:37.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-11-12T14:55:37.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:55:37.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:55:37.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:55:37.042 [DEBUG] [Thread-17725] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:55:37.284 [DEBUG] [Thread-17727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:55:43.765 [DEBUG] [Thread-17728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:55:58.826 [DEBUG] [Thread-17729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:56:07.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:56:07.065 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:56:07.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-11-12T14:56:07.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 55, 34), 32.74, 11.41, 0.0, 30.1, 27.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:56:07.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:55:34
2025-11-12T14:56:07.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:56:08.032 [DEBUG] [Thread-17730] [transport.py] [_log()] starting thread (client mode): 0x17398be0
2025-11-12T14:56:08.032 [DEBUG] [Thread-17730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:56:08.050 [DEBUG] [Thread-17730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:56:08.050 [INFO] [Thread-17730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:56:08.053 [DEBUG] [Thread-17730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] client lang: <none>
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] server lang: <none>
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] kex follows: False
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] Compression: none
2025-11-12T14:56:08.054 [DEBUG] [Thread-17730] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:56:08.070 [DEBUG] [Thread-17730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:56:08.070 [DEBUG] [Thread-17730] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:56:08.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:56:08.070 [DEBUG] [Thread-17730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:56:08.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:56:08.071 [DEBUG] [Thread-17730] [transport.py] [_log()] userauth is OK
2025-11-12T14:56:08.071 [DEBUG] [Thread-17730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:56:08.071 [DEBUG] [Thread-17730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:56:08.071 [DEBUG] [Thread-17730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:56:08.071 [DEBUG] [Thread-17730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:56:08.080 [INFO] [Thread-17730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:56:08.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:56:08.725 [DEBUG] [Thread-17730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:56:08.725 [DEBUG] [Thread-17730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:56:08.726 [DEBUG] [Thread-17730] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:56:08.766 [DEBUG] [Thread-17730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:56:08.766 [DEBUG] [Thread-17730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:56:08.769 [DEBUG] [Thread-17730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:56:08.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:56:08.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:56:08.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:56:08.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:56:08.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:56:08.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:56:08.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.538629 -999.00  +26.50  21.26     17   -0.20 1 1 1 1 1   888    0 26.71 -8.21 ----- 21.3 21.3 278.8 36.5 30.3 -25.7 30.1 -24.5 29.8 -23.2 30.4 -25.9
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.538629
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:56:08.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:55:34', tmtdew=32.74, humidity=11.41, cloud=0.0, wind=30.1, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:55:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:56:08.786 [DEBUG] [Thread-17730] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:56:08.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:56:08.870 [DEBUG] [Thread-17733] [transport.py] [_log()] starting thread (client mode): 0x14921660
2025-11-12T14:56:08.870 [DEBUG] [Thread-17733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:56:08.885 [DEBUG] [Thread-17733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:56:08.885 [INFO] [Thread-17733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] client lang: <none>
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] server lang: <none>
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] kex follows: False
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] Compression: none
2025-11-12T14:56:08.893 [DEBUG] [Thread-17733] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:56:08.948 [DEBUG] [Thread-17733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:56:08.948 [DEBUG] [Thread-17733] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:56:08.948 [DEBUG] [Thread-17733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:56:08.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:56:08.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:56:09.005 [DEBUG] [Thread-17733] [transport.py] [_log()] userauth is OK
2025-11-12T14:56:09.005 [DEBUG] [Thread-17733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:56:09.005 [DEBUG] [Thread-17733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:56:09.005 [DEBUG] [Thread-17733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:56:09.006 [DEBUG] [Thread-17733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:56:09.020 [INFO] [Thread-17733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:56:09.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:56:09.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:56:09.846 [DEBUG] [Thread-17733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:56:09.846 [DEBUG] [Thread-17733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:56:09.894 [DEBUG] [Thread-17733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:56:09.894 [DEBUG] [Thread-17733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:56:09.903 [DEBUG] [Thread-17733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:56:09.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:56:09.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-11-12T14:56:09.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-11-12T14:56:09.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:56:09.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:56:09.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:56:09.940 [DEBUG] [Thread-17733] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:56:13.859 [DEBUG] [Thread-17735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:56:28.900 [DEBUG] [Thread-17736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:56:31.853 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:56:31.854 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:56:37.324 [DEBUG] [Thread-17737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:56:39.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:56:39.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:56: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-11-12T14:56:40.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 56, 6), 32.76, 11.41, 0.0, 33.38, 27.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:56:40.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:56:06
2025-11-12T14:56:40.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:56:40.912 [DEBUG] [Thread-17738] [transport.py] [_log()] starting thread (client mode): 0x17344070
2025-11-12T14:56:40.912 [DEBUG] [Thread-17738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:56:40.933 [DEBUG] [Thread-17738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:56:40.933 [INFO] [Thread-17738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:56:40.936 [DEBUG] [Thread-17738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:56:40.936 [DEBUG] [Thread-17738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:56:40.936 [DEBUG] [Thread-17738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:56:40.936 [DEBUG] [Thread-17738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:56:40.936 [DEBUG] [Thread-17738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] client lang: <none>
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] server lang: <none>
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] kex follows: False
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] Compression: none
2025-11-12T14:56:40.937 [DEBUG] [Thread-17738] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:56:40.952 [DEBUG] [Thread-17738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:56:40.952 [DEBUG] [Thread-17738] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:56:40.952 [DEBUG] [Thread-17738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:56:40.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:56:40.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:56:40.953 [DEBUG] [Thread-17738] [transport.py] [_log()] userauth is OK
2025-11-12T14:56:40.953 [DEBUG] [Thread-17738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:56:40.953 [DEBUG] [Thread-17738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:56:40.953 [DEBUG] [Thread-17738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:56:40.953 [DEBUG] [Thread-17738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:56:40.962 [INFO] [Thread-17738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:56:40.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:56:42.089 [DEBUG] [Thread-17738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:56:42.089 [DEBUG] [Thread-17738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:56:42.090 [DEBUG] [Thread-17738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:56:42.131 [DEBUG] [Thread-17738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:56:42.131 [DEBUG] [Thread-17738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:56:42.134 [DEBUG] [Thread-17738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:56:42.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:56:42.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:56:42.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:56:42.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:56:42.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:56:42.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:56:42.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:56:42.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:56:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:56:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.538976 -999.00  +26.50  27.31     17   -0.20 1 1 1 1 1   888    0 26.00 -2.66 ----- 27.3 27.3 274.6 34.1 30.4 -25.1 30.1 -24.3 29.9 -22.8 30.6 -24.0
2025-11-12T14:56:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:56:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:56:42.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.538976
2025-11-12T14:56:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:56:42.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:56:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:56:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:56:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:56:42.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:56:06', tmtdew=32.76, humidity=11.41, cloud=0.0, wind=33.38, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:56:07.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:56:42.162 [DEBUG] [Thread-17738] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:56: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-11-12T14:56:42.258 [DEBUG] [Thread-17741] [transport.py] [_log()] starting thread (client mode): 0x17398f10
2025-11-12T14:56:42.258 [DEBUG] [Thread-17741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:56:42.274 [DEBUG] [Thread-17741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:56:42.274 [INFO] [Thread-17741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:56:42.281 [DEBUG] [Thread-17741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:56:42.282 [DEBUG] [Thread-17741] [transport.py] [_log()] client lang: <none>
2025-11-12T14:56:42.283 [DEBUG] [Thread-17741] [transport.py] [_log()] server lang: <none>
2025-11-12T14:56:42.283 [DEBUG] [Thread-17741] [transport.py] [_log()] kex follows: False
2025-11-12T14:56:42.283 [DEBUG] [Thread-17741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:56:42.283 [DEBUG] [Thread-17741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:56:42.283 [DEBUG] [Thread-17741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:56:42.283 [DEBUG] [Thread-17741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:56:42.283 [DEBUG] [Thread-17741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:56:42.284 [DEBUG] [Thread-17741] [transport.py] [_log()] Compression: none
2025-11-12T14:56:42.284 [DEBUG] [Thread-17741] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:56:42.353 [DEBUG] [Thread-17741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:56:42.354 [DEBUG] [Thread-17741] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:56:42.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:56:42.355 [DEBUG] [Thread-17741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:56:42.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:56:42.410 [DEBUG] [Thread-17741] [transport.py] [_log()] userauth is OK
2025-11-12T14:56:42.410 [DEBUG] [Thread-17741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:56:42.411 [DEBUG] [Thread-17741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:56:42.411 [DEBUG] [Thread-17741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:56:42.411 [DEBUG] [Thread-17741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:56:42.430 [INFO] [Thread-17741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:56:42.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:56:42.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:56:43.241 [DEBUG] [Thread-17741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:56:43.241 [DEBUG] [Thread-17741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:56:43.289 [DEBUG] [Thread-17741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:56:43.289 [DEBUG] [Thread-17741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:56:43.298 [DEBUG] [Thread-17741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:56:43.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:56:43.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:56:43.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-11-12T14:56:43.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:56:43.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:56:43.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:56:43.335 [DEBUG] [Thread-17741] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:56:43.935 [DEBUG] [Thread-17743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:56:58.984 [DEBUG] [Thread-17744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:57:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:57:13.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:57: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-11-12T14:57:13.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 57, 11), 32.48, 11.41, 0.0, 25.32, 27.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:57:13.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:57:11
2025-11-12T14:57:14.017 [DEBUG] [Thread-17745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:57:14.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:57:14.236 [DEBUG] [Thread-17746] [transport.py] [_log()] starting thread (client mode): 0x14921a80
2025-11-12T14:57:14.236 [DEBUG] [Thread-17746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:57:14.258 [DEBUG] [Thread-17746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:57:14.258 [INFO] [Thread-17746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:57:14.261 [DEBUG] [Thread-17746] [transport.py] [_log()] client lang: <none>
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] server lang: <none>
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] kex follows: False
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] Compression: none
2025-11-12T14:57:14.262 [DEBUG] [Thread-17746] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:57:14.290 [DEBUG] [Thread-17746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:57:14.291 [DEBUG] [Thread-17746] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:57:14.291 [DEBUG] [Thread-17746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:57:14.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:57:14.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:57:14.293 [DEBUG] [Thread-17746] [transport.py] [_log()] userauth is OK
2025-11-12T14:57:14.293 [DEBUG] [Thread-17746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:57:14.293 [DEBUG] [Thread-17746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:57:14.294 [DEBUG] [Thread-17746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:57:14.294 [DEBUG] [Thread-17746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:57:14.330 [INFO] [Thread-17746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:57:14.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:57:14.970 [DEBUG] [Thread-17746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:57:14.970 [DEBUG] [Thread-17746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:57:14.971 [DEBUG] [Thread-17746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:57:15.011 [DEBUG] [Thread-17746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:57:15.011 [DEBUG] [Thread-17746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:57:15.014 [DEBUG] [Thread-17746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:57:15.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:57:15.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:57:15.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:57:15.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:57:15.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:57:15.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:57:15.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:57:15.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:57:15.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:57:15.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.539324 -999.00  +26.70  30.56     17   +0.00 1 1 2 1 1   888    0 26.59 4.50 ----- 30.6 30.6 268.6 37.6 30.4 -24.6 30.2 -23.6 30.0 -23.1 30.6 -22.9
2025-11-12T14:57:15.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:57:15.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:57:15.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.539324
2025-11-12T14:57:15.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:57:15.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:57:15.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:57:15.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:57:15.041 [DEBUG] [Thread-17746] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:57:15.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:57:15.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:57:11', tmtdew=32.48, humidity=11.41, cloud=0.0, wind=25.32, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:56:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:57:15.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:57:15.136 [DEBUG] [Thread-17749] [transport.py] [_log()] starting thread (client mode): 0x173e8220
2025-11-12T14:57:15.136 [DEBUG] [Thread-17749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:57:15.151 [DEBUG] [Thread-17749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:57:15.151 [INFO] [Thread-17749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] client lang: <none>
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] server lang: <none>
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] kex follows: False
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:57:15.159 [DEBUG] [Thread-17749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:57:15.160 [DEBUG] [Thread-17749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:57:15.160 [DEBUG] [Thread-17749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:57:15.160 [DEBUG] [Thread-17749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:57:15.160 [DEBUG] [Thread-17749] [transport.py] [_log()] Compression: none
2025-11-12T14:57:15.160 [DEBUG] [Thread-17749] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:57:15.218 [DEBUG] [Thread-17749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:57:15.219 [DEBUG] [Thread-17749] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:57:15.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:57:15.220 [DEBUG] [Thread-17749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:57:15.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:57:15.278 [DEBUG] [Thread-17749] [transport.py] [_log()] userauth is OK
2025-11-12T14:57:15.278 [DEBUG] [Thread-17749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:57:15.278 [DEBUG] [Thread-17749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:57:15.278 [DEBUG] [Thread-17749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:57:15.278 [DEBUG] [Thread-17749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:57:15.297 [INFO] [Thread-17749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:57:15.297 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:57:15.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:57:16.149 [DEBUG] [Thread-17749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:57:16.150 [DEBUG] [Thread-17749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:57:16.198 [DEBUG] [Thread-17749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:57:16.198 [DEBUG] [Thread-17749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:57:16.207 [DEBUG] [Thread-17749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:57:16.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:57:16.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-11-12T14:57:16.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-11-12T14:57:16.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:57:16.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:57:16.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:57:16.244 [DEBUG] [Thread-17749] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:57:29.048 [DEBUG] [Thread-17751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:57:32.004 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:57:32.005 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:57:37.356 [DEBUG] [Thread-17752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:57:44.086 [DEBUG] [Thread-17753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:57:46.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:57:46.267 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:57:46.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-11-12T14:57:46.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 57, 43), 32.34, 11.36, 0.0, 29.64, 27.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:57:46.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:57:43
2025-11-12T14:57:47.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:57:47.165 [DEBUG] [Thread-17754] [transport.py] [_log()] starting thread (client mode): 0x149abbe0
2025-11-12T14:57:47.165 [DEBUG] [Thread-17754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:57:47.185 [DEBUG] [Thread-17754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:57:47.185 [INFO] [Thread-17754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:57:47.188 [DEBUG] [Thread-17754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] client lang: <none>
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] server lang: <none>
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] kex follows: False
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:57:47.189 [DEBUG] [Thread-17754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:57:47.190 [DEBUG] [Thread-17754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:57:47.190 [DEBUG] [Thread-17754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:57:47.190 [DEBUG] [Thread-17754] [transport.py] [_log()] Compression: none
2025-11-12T14:57:47.190 [DEBUG] [Thread-17754] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:57:47.201 [DEBUG] [Thread-17754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:57:47.201 [DEBUG] [Thread-17754] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:57:47.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:57:47.203 [DEBUG] [Thread-17754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:57:47.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:57:47.205 [DEBUG] [Thread-17754] [transport.py] [_log()] userauth is OK
2025-11-12T14:57:47.205 [DEBUG] [Thread-17754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:57:47.205 [DEBUG] [Thread-17754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:57:47.205 [DEBUG] [Thread-17754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:57:47.206 [DEBUG] [Thread-17754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:57:47.232 [INFO] [Thread-17754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:57:47.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:57:47.862 [DEBUG] [Thread-17754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:57:47.863 [DEBUG] [Thread-17754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:57:47.863 [DEBUG] [Thread-17754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:57:47.904 [DEBUG] [Thread-17754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:57:47.904 [DEBUG] [Thread-17754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:57:47.907 [DEBUG] [Thread-17754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:57:47.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:57:47.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:57:47.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:57:47.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:57:47.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:57:47.933 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:57:47.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:57:47.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:57:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:57:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.539671 -999.00  +26.50  23.77     17   +0.00 1 1 1 1 1   888    0 26.51 7.17 ----- 23.8 23.8 279.4 41.4 30.4 -25.1 30.2 -24.5 30.0 -28.2 30.6 -25.1
2025-11-12T14:57:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:57:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:57:47.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.539671
2025-11-12T14:57:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:57:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:57:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:57:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:57:47.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:57:47.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:57:43', tmtdew=32.34, humidity=11.36, cloud=0.0, wind=29.64, temperature=27.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:57:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:57:47.936 [DEBUG] [Thread-17754] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:57:48.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:57:48.030 [DEBUG] [Thread-17757] [transport.py] [_log()] starting thread (client mode): 0x149aa080
2025-11-12T14:57:48.031 [DEBUG] [Thread-17757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:57:48.045 [DEBUG] [Thread-17757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:57:48.046 [INFO] [Thread-17757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:57:48.053 [DEBUG] [Thread-17757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:57:48.053 [DEBUG] [Thread-17757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:57:48.053 [DEBUG] [Thread-17757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:57:48.053 [DEBUG] [Thread-17757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:57:48.053 [DEBUG] [Thread-17757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:57:48.053 [DEBUG] [Thread-17757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] client lang: <none>
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] server lang: <none>
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] kex follows: False
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] Compression: none
2025-11-12T14:57:48.054 [DEBUG] [Thread-17757] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:57:48.110 [DEBUG] [Thread-17757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:57:48.110 [DEBUG] [Thread-17757] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:57:48.111 [DEBUG] [Thread-17757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:57:48.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:57:48.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:57:48.166 [DEBUG] [Thread-17757] [transport.py] [_log()] userauth is OK
2025-11-12T14:57:48.167 [DEBUG] [Thread-17757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:57:48.167 [DEBUG] [Thread-17757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:57:48.167 [DEBUG] [Thread-17757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:57:48.167 [DEBUG] [Thread-17757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:57:48.186 [INFO] [Thread-17757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:57:48.186 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:57:48.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:57:49.032 [DEBUG] [Thread-17757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:57:49.033 [DEBUG] [Thread-17757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:57:49.080 [DEBUG] [Thread-17757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:57:49.081 [DEBUG] [Thread-17757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:57:49.090 [DEBUG] [Thread-17757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:57:49.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:57:49.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-11-12T14:57:49.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-11-12T14:57:49.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:57:49.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:57:49.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:57:49.126 [DEBUG] [Thread-17757] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:57:59.118 [DEBUG] [Thread-17759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:58:14.166 [DEBUG] [Thread-17760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:58:19.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:58:19.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:58:19.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-11-12T14:58:19.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 58, 15), 32.07, 11.54, 0.0, 27.49, 26.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:58:19.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:58:15
2025-11-12T14:58:19.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:58:20.012 [DEBUG] [Thread-17761] [transport.py] [_log()] starting thread (client mode): 0x149a8e20
2025-11-12T14:58:20.013 [DEBUG] [Thread-17761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:58:20.033 [DEBUG] [Thread-17761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:58:20.033 [INFO] [Thread-17761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] client lang: <none>
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] server lang: <none>
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] kex follows: False
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] Compression: none
2025-11-12T14:58:20.037 [DEBUG] [Thread-17761] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:58:20.056 [DEBUG] [Thread-17761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:58:20.056 [DEBUG] [Thread-17761] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:58:20.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:58:20.057 [DEBUG] [Thread-17761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:58:20.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:58:20.059 [DEBUG] [Thread-17761] [transport.py] [_log()] userauth is OK
2025-11-12T14:58:20.059 [DEBUG] [Thread-17761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:58:20.060 [DEBUG] [Thread-17761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:58:20.060 [DEBUG] [Thread-17761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:58:20.060 [DEBUG] [Thread-17761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:58:20.084 [INFO] [Thread-17761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:58:20.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:58:20.731 [DEBUG] [Thread-17761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:58:20.732 [DEBUG] [Thread-17761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:58:20.732 [DEBUG] [Thread-17761] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:58:20.773 [DEBUG] [Thread-17761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:58:20.774 [DEBUG] [Thread-17761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:58:20.777 [DEBUG] [Thread-17761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:58:20.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:58:20.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:58:20.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:58:20.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:58:20.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:58:20.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:58:20.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:58:20.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:58:20.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:58:20.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.540018 -999.00  +26.50  23.36     17   +0.00 1 2 1 1 1   888    0 26.94 5.29 ----- 23.4 23.4 272.2 32.5 30.6 -23.9 30.2 -23.2 30.2 -22.4 30.8 -22.4
2025-11-12T14:58:20.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:58:20.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:58:20.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.540018
2025-11-12T14:58:20.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:58:20.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:58:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:58:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:58:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T14:58:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:58:15', tmtdew=32.07, humidity=11.54, cloud=0.0, wind=27.49, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:57:37.555', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:58:20.809 [DEBUG] [Thread-17761] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:58:20.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:58:20.906 [DEBUG] [Thread-17764] [transport.py] [_log()] starting thread (client mode): 0x173f94e0
2025-11-12T14:58:20.906 [DEBUG] [Thread-17764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:58:20.923 [DEBUG] [Thread-17764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:58:20.924 [INFO] [Thread-17764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:58:20.931 [DEBUG] [Thread-17764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:58:20.931 [DEBUG] [Thread-17764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] client lang: <none>
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] server lang: <none>
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] kex follows: False
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] Compression: none
2025-11-12T14:58:20.932 [DEBUG] [Thread-17764] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:58:20.990 [DEBUG] [Thread-17764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:58:20.990 [DEBUG] [Thread-17764] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:58:20.991 [DEBUG] [Thread-17764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:58:20.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:58:20.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:58:21.046 [DEBUG] [Thread-17764] [transport.py] [_log()] userauth is OK
2025-11-12T14:58:21.047 [DEBUG] [Thread-17764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:58:21.047 [DEBUG] [Thread-17764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:58:21.047 [DEBUG] [Thread-17764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:58:21.047 [DEBUG] [Thread-17764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:58:21.066 [INFO] [Thread-17764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:58:21.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:58:21.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:58:21.929 [DEBUG] [Thread-17764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:58:21.929 [DEBUG] [Thread-17764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:58:21.976 [DEBUG] [Thread-17764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:58:21.977 [DEBUG] [Thread-17764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:58:21.986 [DEBUG] [Thread-17764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:58:21.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:58:21.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T14:58:22.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T14:58:22.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:58:22.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:58:22.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:58:22.023 [DEBUG] [Thread-17764] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:58:29.201 [DEBUG] [Thread-17766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:58:32.147 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:58:32.148 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:58:37.390 [DEBUG] [Thread-17767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:58:44.249 [DEBUG] [Thread-17768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:58:52.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:58:52.045 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:58:52.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-11-12T14:58:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 58, 47), 32.27, 11.66, 0.0, 27.67, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:58:52.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:58:47
2025-11-12T14:58:52.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:58:52.939 [DEBUG] [Thread-17769] [transport.py] [_log()] starting thread (client mode): 0x149a86a0
2025-11-12T14:58:52.939 [DEBUG] [Thread-17769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:58:52.955 [DEBUG] [Thread-17769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:58:52.955 [INFO] [Thread-17769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:58:52.957 [DEBUG] [Thread-17769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] client lang: <none>
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] server lang: <none>
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] kex follows: False
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] Compression: none
2025-11-12T14:58:52.958 [DEBUG] [Thread-17769] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:58:52.969 [DEBUG] [Thread-17769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:58:52.969 [DEBUG] [Thread-17769] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:58:52.970 [DEBUG] [Thread-17769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:58:52.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:58:52.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:58:52.971 [DEBUG] [Thread-17769] [transport.py] [_log()] userauth is OK
2025-11-12T14:58:52.971 [DEBUG] [Thread-17769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:58:52.971 [DEBUG] [Thread-17769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:58:52.972 [DEBUG] [Thread-17769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:58:52.972 [DEBUG] [Thread-17769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:58:52.986 [INFO] [Thread-17769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:58:52.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:58:53.573 [DEBUG] [Thread-17769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:58:53.574 [DEBUG] [Thread-17769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:58:53.574 [DEBUG] [Thread-17769] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:58:53.614 [DEBUG] [Thread-17769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:58:53.615 [DEBUG] [Thread-17769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:58:53.618 [DEBUG] [Thread-17769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:58:53.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:58:53.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:58:53.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:58:53.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:58:53.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:58:53.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:58:53.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:58:53.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:58:53.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:58:53.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.540365 -999.00  +26.20  23.80     17   -0.10 1 1 1 1 1   888    0 26.77 2.43 ----- 23.8 23.8 272.2 34.7 30.5 -25.6 30.4 -23.4 30.1 -25.8 30.9 -23.1
2025-11-12T14:58:53.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:58:53.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:58:53.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.540365
2025-11-12T14:58:53.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:58:53.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:58:53.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:58:53.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:58:53.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:58:53.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:58:47', tmtdew=32.27, humidity=11.66, cloud=0.0, wind=27.67, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:58:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:58:53.639 [DEBUG] [Thread-17769] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:58:53.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:58:53.736 [DEBUG] [Thread-17772] [transport.py] [_log()] starting thread (client mode): 0x149ab7f0
2025-11-12T14:58:53.736 [DEBUG] [Thread-17772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:58:53.752 [DEBUG] [Thread-17772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:58:53.752 [INFO] [Thread-17772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] client lang: <none>
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] server lang: <none>
2025-11-12T14:58:53.760 [DEBUG] [Thread-17772] [transport.py] [_log()] kex follows: False
2025-11-12T14:58:53.761 [DEBUG] [Thread-17772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:58:53.761 [DEBUG] [Thread-17772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:58:53.761 [DEBUG] [Thread-17772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:58:53.761 [DEBUG] [Thread-17772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:58:53.761 [DEBUG] [Thread-17772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:58:53.761 [DEBUG] [Thread-17772] [transport.py] [_log()] Compression: none
2025-11-12T14:58:53.761 [DEBUG] [Thread-17772] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:58:53.819 [DEBUG] [Thread-17772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:58:53.819 [DEBUG] [Thread-17772] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:58:53.820 [DEBUG] [Thread-17772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:58:53.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:58:53.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:58:53.875 [DEBUG] [Thread-17772] [transport.py] [_log()] userauth is OK
2025-11-12T14:58:53.875 [DEBUG] [Thread-17772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:58:53.875 [DEBUG] [Thread-17772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:58:53.875 [DEBUG] [Thread-17772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:58:53.876 [DEBUG] [Thread-17772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:58:53.894 [INFO] [Thread-17772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:58:53.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:58:53.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:58:54.778 [DEBUG] [Thread-17772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:58:54.778 [DEBUG] [Thread-17772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:58:54.827 [DEBUG] [Thread-17772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:58:54.827 [DEBUG] [Thread-17772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:58:54.836 [DEBUG] [Thread-17772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:58:54.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:58:54.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-11-12T14:58:54.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-11-12T14:58:54.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:58:54.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:58:54.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:58:54.874 [DEBUG] [Thread-17772] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:58:59.286 [DEBUG] [Thread-17774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:59:14.336 [DEBUG] [Thread-17775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:59:24.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:59:24.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:59:24.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-11-12T14:59:25.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 59, 19), 32.34, 11.61, 0.0, 32.01, 27.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:59:25.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:59:19
2025-11-12T14:59:25.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:59:25.801 [DEBUG] [Thread-17776] [transport.py] [_log()] starting thread (client mode): 0x1493cac0
2025-11-12T14:59:25.801 [DEBUG] [Thread-17776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:59:25.821 [DEBUG] [Thread-17776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:59:25.821 [INFO] [Thread-17776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] client lang: <none>
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] server lang: <none>
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] kex follows: False
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] Compression: none
2025-11-12T14:59:25.824 [DEBUG] [Thread-17776] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:59:25.840 [DEBUG] [Thread-17776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:59:25.840 [DEBUG] [Thread-17776] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:59:25.841 [DEBUG] [Thread-17776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:59:25.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:59:25.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:59:25.841 [DEBUG] [Thread-17776] [transport.py] [_log()] userauth is OK
2025-11-12T14:59:25.841 [DEBUG] [Thread-17776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:59:25.841 [DEBUG] [Thread-17776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:59:25.841 [DEBUG] [Thread-17776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:59:25.841 [DEBUG] [Thread-17776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:59:25.852 [INFO] [Thread-17776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:59:25.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:59:26.487 [DEBUG] [Thread-17776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:59:26.487 [DEBUG] [Thread-17776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:59:26.487 [DEBUG] [Thread-17776] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:59:26.528 [DEBUG] [Thread-17776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:59:26.528 [DEBUG] [Thread-17776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:59:26.530 [DEBUG] [Thread-17776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:59:26.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:59:26.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:59:26.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:59:26.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:59:26.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:59:26.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:59:26.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.540713 -999.00  +26.20  20.89     17   +0.00 1 1 1 1 1   888    0 26.96 0.02 ----- 20.9 20.9 275.0 33.0 30.5 -24.5 30.2 -24.7 29.9 -23.8 30.7 -23.0
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.540713
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:59:26.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:59:19', tmtdew=32.34, humidity=11.61, cloud=0.0, wind=32.01, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:58:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:59:26.550 [DEBUG] [Thread-17776] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:59:26.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:59:26.637 [DEBUG] [Thread-17779] [transport.py] [_log()] starting thread (client mode): 0x149ab850
2025-11-12T14:59:26.637 [DEBUG] [Thread-17779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:59:26.652 [DEBUG] [Thread-17779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:59:26.653 [INFO] [Thread-17779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] client lang: <none>
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] server lang: <none>
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] kex follows: False
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:59:26.660 [DEBUG] [Thread-17779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:59:26.661 [DEBUG] [Thread-17779] [transport.py] [_log()] Compression: none
2025-11-12T14:59:26.661 [DEBUG] [Thread-17779] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:59:26.725 [DEBUG] [Thread-17779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:59:26.725 [DEBUG] [Thread-17779] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:59:26.725 [DEBUG] [Thread-17779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:59:26.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:59:26.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:59:26.782 [DEBUG] [Thread-17779] [transport.py] [_log()] userauth is OK
2025-11-12T14:59:26.782 [DEBUG] [Thread-17779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:59:26.782 [DEBUG] [Thread-17779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:59:26.782 [DEBUG] [Thread-17779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:59:26.782 [DEBUG] [Thread-17779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:59:26.796 [INFO] [Thread-17779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:59:26.796 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:59:26.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:59:27.649 [DEBUG] [Thread-17779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:59:27.649 [DEBUG] [Thread-17779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:59:27.697 [DEBUG] [Thread-17779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:59:27.697 [DEBUG] [Thread-17779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:59:27.705 [DEBUG] [Thread-17779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:59:27.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:59:27.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-11-12T14:59:27.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-11-12T14:59:27.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:59:27.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:59:27.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:59:27.737 [DEBUG] [Thread-17779] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:59:29.368 [DEBUG] [Thread-17781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:59:32.293 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:59:32.294 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:59:37.438 [DEBUG] [Thread-17782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:59:44.421 [DEBUG] [Thread-17783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:59:57.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T14:59:57.760 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T14:59:57.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T14:59:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 14, 59, 51), 32.72, 11.48, 0.0, 39.38, 27.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T14:59:58.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 14:59:51
2025-11-12T14:59:58.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T14:59:58.654 [DEBUG] [Thread-17784] [transport.py] [_log()] starting thread (client mode): 0x149a8520
2025-11-12T14:59:58.654 [DEBUG] [Thread-17784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:59:58.674 [DEBUG] [Thread-17784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T14:59:58.674 [INFO] [Thread-17784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:59:58.677 [DEBUG] [Thread-17784] [transport.py] [_log()] client lang: <none>
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] server lang: <none>
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] kex follows: False
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] Compression: none
2025-11-12T14:59:58.678 [DEBUG] [Thread-17784] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:59:58.687 [DEBUG] [Thread-17784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:59:58.687 [DEBUG] [Thread-17784] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:59:58.688 [DEBUG] [Thread-17784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T14:59:58.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T14:59:58.689 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:59:58.690 [DEBUG] [Thread-17784] [transport.py] [_log()] userauth is OK
2025-11-12T14:59:58.690 [DEBUG] [Thread-17784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:59:58.690 [DEBUG] [Thread-17784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:59:58.690 [DEBUG] [Thread-17784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T14:59:58.690 [DEBUG] [Thread-17784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:59:58.713 [INFO] [Thread-17784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:59:58.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T14:59:59.275 [DEBUG] [Thread-17784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T14:59:59.276 [DEBUG] [Thread-17784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T14:59:59.276 [DEBUG] [Thread-17784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T14:59:59.316 [DEBUG] [Thread-17784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T14:59:59.317 [DEBUG] [Thread-17784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T14:59:59.319 [DEBUG] [Thread-17784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T14:59:59.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T14:59:59.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T14:59:59.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T14:59:59.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T14:59:59.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T14:59:59.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T14:59:59.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T14:59:59.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T14:59:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T14:59:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.541060 -999.00  +26.70  24.52     17   +0.00 1 1 1 1 1   888    0 26.56 -1.04 ----- 24.5 24.5 275.4 35.4 30.7 -23.5 30.4 -23.0 30.3 -23.2 31.0 -23.0
2025-11-12T14:59:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T14:59:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T14:59:59.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.541060
2025-11-12T14:59:59.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T14:59:59.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T14:59:59.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T14:59:59.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T14:59:59.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T14:59:59.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T14:59:51', tmtdew=32.72, humidity=11.48, cloud=0.0, wind=39.38, temperature=27.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:59:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T14:59:59.345 [DEBUG] [Thread-17784] [transport.py] [_log()] EOF in transport thread
2025-11-12T14:59:59.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T14:59:59.444 [DEBUG] [Thread-17787] [transport.py] [_log()] starting thread (client mode): 0x19dd9030
2025-11-12T14:59:59.445 [DEBUG] [Thread-17787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T14:59:59.458 [DEBUG] [Thread-17788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T14:59:59.462 [DEBUG] [Thread-17787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T14:59:59.463 [INFO] [Thread-17787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T14:59:59.473 [DEBUG] [Thread-17787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T14:59:59.473 [DEBUG] [Thread-17787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T14:59:59.473 [DEBUG] [Thread-17787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] client lang: <none>
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] server lang: <none>
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] kex follows: False
2025-11-12T14:59:59.474 [DEBUG] [Thread-17787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T14:59:59.475 [DEBUG] [Thread-17787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T14:59:59.475 [DEBUG] [Thread-17787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T14:59:59.475 [DEBUG] [Thread-17787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T14:59:59.475 [DEBUG] [Thread-17787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T14:59:59.475 [DEBUG] [Thread-17787] [transport.py] [_log()] Compression: none
2025-11-12T14:59:59.475 [DEBUG] [Thread-17787] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T14:59:59.531 [DEBUG] [Thread-17787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T14:59:59.531 [DEBUG] [Thread-17787] [transport.py] [_log()] Switch to new keys ...
2025-11-12T14:59:59.532 [DEBUG] [Thread-17787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T14:59:59.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T14:59:59.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T14:59:59.587 [DEBUG] [Thread-17787] [transport.py] [_log()] userauth is OK
2025-11-12T14:59:59.587 [DEBUG] [Thread-17787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T14:59:59.587 [DEBUG] [Thread-17787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T14:59:59.588 [DEBUG] [Thread-17787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T14:59:59.588 [DEBUG] [Thread-17787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T14:59:59.606 [INFO] [Thread-17787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T14:59:59.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T14:59:59.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:00:00.420 [DEBUG] [Thread-17787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:00:00.420 [DEBUG] [Thread-17787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:00:00.467 [DEBUG] [Thread-17787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:00:00.468 [DEBUG] [Thread-17787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:00:00.477 [DEBUG] [Thread-17787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:00:00.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:00:00.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:00:00.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-11-12T15:00:00.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:00:00.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:00:00.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:00:00.513 [DEBUG] [Thread-17787] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:00:14.502 [DEBUG] [Thread-17790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:00:29.537 [DEBUG] [Thread-17791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:00:30.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:00:30.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:00:30.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-11-12T15:00:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 0, 23), 32.95, 11.33, 0.0, 41.52, 27.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:00:31.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:00:23
2025-11-12T15:00:31.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:00:31.430 [DEBUG] [Thread-17792] [transport.py] [_log()] starting thread (client mode): 0x17363910
2025-11-12T15:00:31.430 [DEBUG] [Thread-17792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:00:31.449 [DEBUG] [Thread-17792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:00:31.450 [INFO] [Thread-17792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:00:31.452 [DEBUG] [Thread-17792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] client lang: <none>
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] server lang: <none>
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] kex follows: False
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] Compression: none
2025-11-12T15:00:31.453 [DEBUG] [Thread-17792] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:00:31.472 [DEBUG] [Thread-17792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:00:31.472 [DEBUG] [Thread-17792] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:00:31.473 [DEBUG] [Thread-17792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:00:31.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:00:31.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:00:31.475 [DEBUG] [Thread-17792] [transport.py] [_log()] userauth is OK
2025-11-12T15:00:31.475 [DEBUG] [Thread-17792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:00:31.475 [DEBUG] [Thread-17792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:00:31.475 [DEBUG] [Thread-17792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:00:31.476 [DEBUG] [Thread-17792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:00:31.494 [INFO] [Thread-17792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:00:31.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:00:32.117 [DEBUG] [Thread-17792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:00:32.117 [DEBUG] [Thread-17792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:00:32.117 [DEBUG] [Thread-17792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:00:32.157 [DEBUG] [Thread-17792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:00:32.157 [DEBUG] [Thread-17792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:00:32.160 [DEBUG] [Thread-17792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:00:32.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:00:32.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:00:32.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:00:32.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:00:32.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:00:32.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:00:32.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:00:32.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:00:32.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:00:32.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.541407 -999.00  +27.00  38.46     16   -0.30 1 1 2 1 1   888    0 26.56 0.65 ----- 38.5 38.5 280.8 51.5 30.6 -24.6 30.4 -23.6 30.3 -23.1 30.9 -23.2
2025-11-12T15:00:32.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:00:32.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:00:32.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.541407
2025-11-12T15:00:32.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:00:32.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:00:32.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:00:32.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:00:32.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:00:32.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:00:23', tmtdew=32.95, humidity=11.33, cloud=0.0, wind=41.52, temperature=27.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T12:59:37.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:00:32.184 [DEBUG] [Thread-17792] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:00:32.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:00:32.281 [DEBUG] [Thread-17795] [transport.py] [_log()] starting thread (client mode): 0x149aa4d0
2025-11-12T15:00:32.281 [DEBUG] [Thread-17795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:00:32.297 [DEBUG] [Thread-17795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:00:32.298 [INFO] [Thread-17795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:00:32.305 [DEBUG] [Thread-17795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:00:32.305 [DEBUG] [Thread-17795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:00:32.305 [DEBUG] [Thread-17795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] client lang: <none>
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] server lang: <none>
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] kex follows: False
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:00:32.306 [DEBUG] [Thread-17795] [transport.py] [_log()] Compression: none
2025-11-12T15:00:32.314 [DEBUG] [Thread-17795] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:00:32.363 [DEBUG] [Thread-17795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:00:32.364 [DEBUG] [Thread-17795] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:00:32.365 [DEBUG] [Thread-17795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:00:32.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:00:32.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:00:32.419 [DEBUG] [Thread-17795] [transport.py] [_log()] userauth is OK
2025-11-12T15:00:32.419 [DEBUG] [Thread-17795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:00:32.419 [DEBUG] [Thread-17795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:00:32.420 [DEBUG] [Thread-17795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:00:32.420 [DEBUG] [Thread-17795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:00:32.436 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:00:32.437 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:00:32.439 [INFO] [Thread-17795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:00:32.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:00:32.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:00:33.300 [DEBUG] [Thread-17795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:00:33.300 [DEBUG] [Thread-17795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:00:33.348 [DEBUG] [Thread-17795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:00:33.349 [DEBUG] [Thread-17795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:00:33.357 [DEBUG] [Thread-17795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:00:33.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:00:33.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:00:33.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-11-12T15:00:33.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:00:33.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:00:33.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:00:33.392 [DEBUG] [Thread-17795] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:00:37.476 [DEBUG] [Thread-17797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:00:44.571 [DEBUG] [Thread-17798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:00:59.611 [DEBUG] [Thread-17799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:01:03.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:01:03.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:01:03.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:01:04.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 0, 55), 33.25, 11.01, 0.0, 43.56, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:01:04.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:00:55
2025-11-12T15:01:04.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:01:04.307 [DEBUG] [Thread-17800] [transport.py] [_log()] starting thread (client mode): 0x173bcee0
2025-11-12T15:01:04.307 [DEBUG] [Thread-17800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:01:04.327 [DEBUG] [Thread-17800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:01:04.327 [INFO] [Thread-17800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:01:04.330 [DEBUG] [Thread-17800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:01:04.330 [DEBUG] [Thread-17800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] client lang: <none>
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] server lang: <none>
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] kex follows: False
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:01:04.331 [DEBUG] [Thread-17800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:01:04.332 [DEBUG] [Thread-17800] [transport.py] [_log()] Compression: none
2025-11-12T15:01:04.332 [DEBUG] [Thread-17800] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:01:04.351 [DEBUG] [Thread-17800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:01:04.352 [DEBUG] [Thread-17800] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:01:04.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:01:04.354 [DEBUG] [Thread-17800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:01:04.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:01:04.356 [DEBUG] [Thread-17800] [transport.py] [_log()] userauth is OK
2025-11-12T15:01:04.356 [DEBUG] [Thread-17800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:01:04.356 [DEBUG] [Thread-17800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:01:04.356 [DEBUG] [Thread-17800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:01:04.356 [DEBUG] [Thread-17800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:01:04.380 [INFO] [Thread-17800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:01:04.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:01:05.154 [DEBUG] [Thread-17800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:01:05.154 [DEBUG] [Thread-17800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:01:05.155 [DEBUG] [Thread-17800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:01:05.196 [DEBUG] [Thread-17800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:01:05.196 [DEBUG] [Thread-17800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:01:05.199 [DEBUG] [Thread-17800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:01:05.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:01:05.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:01:05.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:01:05.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:01:05.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:01:05.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:01:05.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:01:05.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:01:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:01:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.542101 -999.00  +26.80  26.78     17   -0.10 1 1 1 1 1   888    0 27.07 4.23 ----- 26.8 26.8 281.4 41.0 30.5 -24.8 30.2 -24.2 30.1 -23.1 30.9 -23.2
2025-11-12T15:01:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:01:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:01:05.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.542101
2025-11-12T15:01:05.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:01:05.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:01:05.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:01:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:01:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:01:05.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:00:55', tmtdew=33.25, humidity=11.01, cloud=0.0, wind=43.56, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:00:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:01:05.219 [DEBUG] [Thread-17800] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:01:05.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:01:05.313 [DEBUG] [Thread-17803] [transport.py] [_log()] starting thread (client mode): 0x1737e4d0
2025-11-12T15:01:05.313 [DEBUG] [Thread-17803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:01:05.328 [DEBUG] [Thread-17803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:01:05.328 [INFO] [Thread-17803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:01:05.336 [DEBUG] [Thread-17803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] client lang: <none>
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] server lang: <none>
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] kex follows: False
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] Compression: none
2025-11-12T15:01:05.337 [DEBUG] [Thread-17803] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:01:05.395 [DEBUG] [Thread-17803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:01:05.395 [DEBUG] [Thread-17803] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:01:05.395 [DEBUG] [Thread-17803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:01:05.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:01:05.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:01:05.452 [DEBUG] [Thread-17803] [transport.py] [_log()] userauth is OK
2025-11-12T15:01:05.453 [DEBUG] [Thread-17803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:01:05.453 [DEBUG] [Thread-17803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:01:05.453 [DEBUG] [Thread-17803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:01:05.453 [DEBUG] [Thread-17803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:01:05.472 [INFO] [Thread-17803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:01:05.472 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:01:05.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:01:06.315 [DEBUG] [Thread-17803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:01:06.316 [DEBUG] [Thread-17803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:01:06.364 [DEBUG] [Thread-17803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:01:06.364 [DEBUG] [Thread-17803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:01:06.373 [DEBUG] [Thread-17803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:01:06.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:01:06.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:01:06.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-11-12T15:01:06.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:01:06.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:01:06.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:01:06.411 [DEBUG] [Thread-17803] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:01:14.648 [DEBUG] [Thread-17805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:01:29.691 [DEBUG] [Thread-17806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:01:32.578 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:01:32.579 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:01:36.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:01:36.433 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:01:36.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-11-12T15:01:37.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 1, 27), 32.9, 11.26, 0.0, 42.95, 27.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:01:37.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:01:27
2025-11-12T15:01:37.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:01:37.325 [DEBUG] [Thread-17807] [transport.py] [_log()] starting thread (client mode): 0x1737e140
2025-11-12T15:01:37.325 [DEBUG] [Thread-17807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:01:37.345 [DEBUG] [Thread-17807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:01:37.346 [INFO] [Thread-17807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] client lang: <none>
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] server lang: <none>
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] kex follows: False
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] Compression: none
2025-11-12T15:01:37.349 [DEBUG] [Thread-17807] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:01:37.369 [DEBUG] [Thread-17807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:01:37.369 [DEBUG] [Thread-17807] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:01:37.370 [DEBUG] [Thread-17807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:01:37.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:01:37.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:01:37.372 [DEBUG] [Thread-17807] [transport.py] [_log()] userauth is OK
2025-11-12T15:01:37.372 [DEBUG] [Thread-17807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:01:37.372 [DEBUG] [Thread-17807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:01:37.373 [DEBUG] [Thread-17807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:01:37.373 [DEBUG] [Thread-17807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:01:37.397 [INFO] [Thread-17807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:01:37.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:01:37.508 [DEBUG] [Thread-17809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:01:38.032 [DEBUG] [Thread-17807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:01:38.032 [DEBUG] [Thread-17807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:01:38.032 [DEBUG] [Thread-17807] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:01:38.073 [DEBUG] [Thread-17807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:01:38.073 [DEBUG] [Thread-17807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:01:38.077 [DEBUG] [Thread-17807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:01:38.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:01:38.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:01:38.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:01:38.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:01:38.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:01:38.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:01:38.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:01:38.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:01:38.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:01:38.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.542449 -999.00  +26.70  36.27     17   +0.00 1 1 2 1 1   888    0 26.47 5.44 ----- 36.3 36.3 275.2 41.5 30.2 -27.5 30.1 -25.4 29.9 -31.1 30.8 -24.2
2025-11-12T15:01:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:01:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:01:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.542449
2025-11-12T15:01:38.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:01:38.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:01:38.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:01:38.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:01:38.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:01:38.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:01:27', tmtdew=32.9, humidity=11.26, cloud=0.0, wind=42.95, temperature=27.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:01:07.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:01:38.108 [DEBUG] [Thread-17807] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:01:38.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:01:38.208 [DEBUG] [Thread-17811] [transport.py] [_log()] starting thread (client mode): 0x1739bf10
2025-11-12T15:01:38.208 [DEBUG] [Thread-17811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:01:38.223 [DEBUG] [Thread-17811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:01:38.223 [INFO] [Thread-17811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:01:38.231 [DEBUG] [Thread-17811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:01:38.231 [DEBUG] [Thread-17811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:01:38.231 [DEBUG] [Thread-17811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] client lang: <none>
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] server lang: <none>
2025-11-12T15:01:38.232 [DEBUG] [Thread-17811] [transport.py] [_log()] kex follows: False
2025-11-12T15:01:38.233 [DEBUG] [Thread-17811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:01:38.233 [DEBUG] [Thread-17811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:01:38.233 [DEBUG] [Thread-17811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:01:38.233 [DEBUG] [Thread-17811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:01:38.233 [DEBUG] [Thread-17811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:01:38.233 [DEBUG] [Thread-17811] [transport.py] [_log()] Compression: none
2025-11-12T15:01:38.233 [DEBUG] [Thread-17811] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:01:38.291 [DEBUG] [Thread-17811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:01:38.292 [DEBUG] [Thread-17811] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:01:38.293 [DEBUG] [Thread-17811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:01:38.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:01:38.294 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:01:38.347 [DEBUG] [Thread-17811] [transport.py] [_log()] userauth is OK
2025-11-12T15:01:38.347 [DEBUG] [Thread-17811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:01:38.348 [DEBUG] [Thread-17811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:01:38.348 [DEBUG] [Thread-17811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:01:38.348 [DEBUG] [Thread-17811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:01:38.366 [INFO] [Thread-17811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:01:38.367 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:01:38.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:01:39.187 [DEBUG] [Thread-17811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:01:39.187 [DEBUG] [Thread-17811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:01:39.235 [DEBUG] [Thread-17811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:01:39.236 [DEBUG] [Thread-17811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:01:39.245 [DEBUG] [Thread-17811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:01:39.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:01:39.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-11-12T15:01:39.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-11-12T15:01:39.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:01:39.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:01:39.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:01:39.282 [DEBUG] [Thread-17811] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:01:44.726 [DEBUG] [Thread-17813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:01:59.775 [DEBUG] [Thread-17814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:02:09.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:02:09.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:02:09.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-11-12T15:02:09.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 1, 59), 32.28, 11.46, 0.0, 39.84, 27.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:02:09.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:01:59
2025-11-12T15:02:10.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:02:10.189 [DEBUG] [Thread-17815] [transport.py] [_log()] starting thread (client mode): 0x17363760
2025-11-12T15:02:10.189 [DEBUG] [Thread-17815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:02:10.209 [DEBUG] [Thread-17815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:02:10.209 [INFO] [Thread-17815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] client lang: <none>
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] server lang: <none>
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] kex follows: False
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:02:10.212 [DEBUG] [Thread-17815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:02:10.213 [DEBUG] [Thread-17815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:02:10.213 [DEBUG] [Thread-17815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:02:10.213 [DEBUG] [Thread-17815] [transport.py] [_log()] Compression: none
2025-11-12T15:02:10.213 [DEBUG] [Thread-17815] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:02:10.232 [DEBUG] [Thread-17815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:02:10.233 [DEBUG] [Thread-17815] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:02:10.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:02:10.234 [DEBUG] [Thread-17815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:02:10.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:02:10.236 [DEBUG] [Thread-17815] [transport.py] [_log()] userauth is OK
2025-11-12T15:02:10.236 [DEBUG] [Thread-17815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:02:10.236 [DEBUG] [Thread-17815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:02:10.236 [DEBUG] [Thread-17815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:02:10.236 [DEBUG] [Thread-17815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:02:10.261 [INFO] [Thread-17815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:02:10.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:02:11.023 [DEBUG] [Thread-17815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:02:11.024 [DEBUG] [Thread-17815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:02:11.024 [DEBUG] [Thread-17815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:02:11.065 [DEBUG] [Thread-17815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:02:11.065 [DEBUG] [Thread-17815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:02:11.068 [DEBUG] [Thread-17815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:02:11.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:02:11.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:02:11.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:02:11.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:02:11.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:02:11.091 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:02:11.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:02:11.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:02:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:02:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.542796 -999.00  +26.20  38.73     17   -0.10 1 1 2 1 1   888    0 27.31 6.51 ----- 38.7 38.7 277.0 46.8 30.1 -27.7 29.9 -26.7 29.6 -26.3 30.4 -25.6
2025-11-12T15:02:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:02:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:02:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.542796
2025-11-12T15:02:11.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:02:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:02:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:02:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:02:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:02:11.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:01:59', tmtdew=32.28, humidity=11.46, cloud=0.0, wind=39.84, temperature=27.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:01:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:02:11.094 [DEBUG] [Thread-17815] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:02:11.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:02:11.189 [DEBUG] [Thread-17818] [transport.py] [_log()] starting thread (client mode): 0x173bdff0
2025-11-12T15:02:11.189 [DEBUG] [Thread-17818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:02:11.204 [DEBUG] [Thread-17818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:02:11.205 [INFO] [Thread-17818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:02:11.212 [DEBUG] [Thread-17818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:02:11.212 [DEBUG] [Thread-17818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:02:11.212 [DEBUG] [Thread-17818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:02:11.212 [DEBUG] [Thread-17818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:02:11.212 [DEBUG] [Thread-17818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:02:11.212 [DEBUG] [Thread-17818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:02:11.212 [DEBUG] [Thread-17818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] client lang: <none>
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] server lang: <none>
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] kex follows: False
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] Compression: none
2025-11-12T15:02:11.213 [DEBUG] [Thread-17818] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:02:11.271 [DEBUG] [Thread-17818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:02:11.271 [DEBUG] [Thread-17818] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:02:11.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:02:11.273 [DEBUG] [Thread-17818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:02:11.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:02:11.327 [DEBUG] [Thread-17818] [transport.py] [_log()] userauth is OK
2025-11-12T15:02:11.327 [DEBUG] [Thread-17818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:02:11.328 [DEBUG] [Thread-17818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:02:11.328 [DEBUG] [Thread-17818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:02:11.328 [DEBUG] [Thread-17818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:02:11.347 [INFO] [Thread-17818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:02:11.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:02:11.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:02:12.186 [DEBUG] [Thread-17818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:02:12.187 [DEBUG] [Thread-17818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:02:12.235 [DEBUG] [Thread-17818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:02:12.235 [DEBUG] [Thread-17818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:02:12.244 [DEBUG] [Thread-17818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:02:12.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:02:12.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:02:12.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:02:12.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:02:12.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:02:12.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:02:12.281 [DEBUG] [Thread-17818] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:02:14.807 [DEBUG] [Thread-17820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:02:29.860 [DEBUG] [Thread-17821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:02:32.721 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:02:32.721 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:02:37.541 [DEBUG] [Thread-17822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:02:42.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:02:42.297 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:02:42.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-11-12T15:02:42.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 2, 31), 31.91, 11.71, 0.0, 38.29, 27.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:02:42.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:02:31
2025-11-12T15:02:43.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:02:43.231 [DEBUG] [Thread-17823] [transport.py] [_log()] starting thread (client mode): 0x173bcb50
2025-11-12T15:02:43.231 [DEBUG] [Thread-17823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:02:43.251 [DEBUG] [Thread-17823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:02:43.251 [INFO] [Thread-17823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] client lang: <none>
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] server lang: <none>
2025-11-12T15:02:43.254 [DEBUG] [Thread-17823] [transport.py] [_log()] kex follows: False
2025-11-12T15:02:43.255 [DEBUG] [Thread-17823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:02:43.255 [DEBUG] [Thread-17823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:02:43.255 [DEBUG] [Thread-17823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:02:43.255 [DEBUG] [Thread-17823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:02:43.255 [DEBUG] [Thread-17823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:02:43.255 [DEBUG] [Thread-17823] [transport.py] [_log()] Compression: none
2025-11-12T15:02:43.255 [DEBUG] [Thread-17823] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:02:43.269 [DEBUG] [Thread-17823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:02:43.269 [DEBUG] [Thread-17823] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:02:43.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:02:43.269 [DEBUG] [Thread-17823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:02:43.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:02:43.270 [DEBUG] [Thread-17823] [transport.py] [_log()] userauth is OK
2025-11-12T15:02:43.270 [DEBUG] [Thread-17823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:02:43.270 [DEBUG] [Thread-17823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:02:43.270 [DEBUG] [Thread-17823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:02:43.270 [DEBUG] [Thread-17823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:02:43.288 [INFO] [Thread-17823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:02:43.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:02:43.944 [DEBUG] [Thread-17823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:02:43.944 [DEBUG] [Thread-17823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:02:43.944 [DEBUG] [Thread-17823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:02:43.985 [DEBUG] [Thread-17823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:02:43.985 [DEBUG] [Thread-17823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:02:43.988 [DEBUG] [Thread-17823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:02:44.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:02:44.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:02:44.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:02:44.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:02:44.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:02:44.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:02:44.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:02:44.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:02:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:02:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.543143 -999.00  +26.20  36.81     17   +0.00 1 1 2 1 1   888    0 26.65 5.75 ----- 36.8 36.8 275.0 49.5 29.8 -28.3 29.8 -26.7 29.4 -27.9 30.1 -27.2
2025-11-12T15:02:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:02:44.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:02:44.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.543143
2025-11-12T15:02:44.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:02:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:02:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:02:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:02:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:02:44.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:02:31', tmtdew=31.91, humidity=11.71, cloud=0.0, wind=38.29, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:02:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:02:44.015 [DEBUG] [Thread-17823] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:02:44.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:02:44.117 [DEBUG] [Thread-17826] [transport.py] [_log()] starting thread (client mode): 0x14982f80
2025-11-12T15:02:44.117 [DEBUG] [Thread-17826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:02:44.132 [DEBUG] [Thread-17826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:02:44.133 [INFO] [Thread-17826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:02:44.140 [DEBUG] [Thread-17826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:02:44.140 [DEBUG] [Thread-17826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:02:44.140 [DEBUG] [Thread-17826] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:02:44.140 [DEBUG] [Thread-17826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:02:44.140 [DEBUG] [Thread-17826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:02:44.140 [DEBUG] [Thread-17826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:02:44.140 [DEBUG] [Thread-17826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:02:44.140 [DEBUG] [Thread-17826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] client lang: <none>
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] server lang: <none>
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] kex follows: False
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] Compression: none
2025-11-12T15:02:44.141 [DEBUG] [Thread-17826] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:02:44.198 [DEBUG] [Thread-17826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:02:44.199 [DEBUG] [Thread-17826] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:02:44.200 [DEBUG] [Thread-17826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:02:44.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:02:44.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:02:44.256 [DEBUG] [Thread-17826] [transport.py] [_log()] userauth is OK
2025-11-12T15:02:44.256 [DEBUG] [Thread-17826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:02:44.256 [DEBUG] [Thread-17826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:02:44.256 [DEBUG] [Thread-17826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:02:44.256 [DEBUG] [Thread-17826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:02:44.275 [INFO] [Thread-17826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:02:44.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:02:44.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:02:44.893 [DEBUG] [Thread-17828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:02:45.087 [DEBUG] [Thread-17826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:02:45.088 [DEBUG] [Thread-17826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:02:45.135 [DEBUG] [Thread-17826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:02:45.135 [DEBUG] [Thread-17826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:02:45.143 [DEBUG] [Thread-17826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:02:45.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:02:45.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-11-12T15:02:45.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-11-12T15:02:45.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:02:45.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:02:45.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:02:45.177 [DEBUG] [Thread-17826] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:02:59.956 [DEBUG] [Thread-17829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:03:14.993 [DEBUG] [Thread-17830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:03:15.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:03:15.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:03:15.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-11-12T15:03:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 3, 3), 31.82, 11.77, 0.0, 39.65, 26.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:03:15.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:03:03
2025-11-12T15:03:15.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:03:16.076 [DEBUG] [Thread-17831] [transport.py] [_log()] starting thread (client mode): 0x173eab30
2025-11-12T15:03:16.077 [DEBUG] [Thread-17831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:03:16.092 [DEBUG] [Thread-17831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:03:16.092 [INFO] [Thread-17831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] client lang: <none>
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] server lang: <none>
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] kex follows: False
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:03:16.095 [DEBUG] [Thread-17831] [transport.py] [_log()] Compression: none
2025-11-12T15:03:16.096 [DEBUG] [Thread-17831] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:03:16.109 [DEBUG] [Thread-17831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:03:16.109 [DEBUG] [Thread-17831] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:03:16.110 [DEBUG] [Thread-17831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:03:16.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:03:16.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:03:16.112 [DEBUG] [Thread-17831] [transport.py] [_log()] userauth is OK
2025-11-12T15:03:16.112 [DEBUG] [Thread-17831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:03:16.112 [DEBUG] [Thread-17831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:03:16.112 [DEBUG] [Thread-17831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:03:16.112 [DEBUG] [Thread-17831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:03:16.131 [INFO] [Thread-17831] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:03:16.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:03:16.875 [DEBUG] [Thread-17831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:03:16.875 [DEBUG] [Thread-17831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:03:16.876 [DEBUG] [Thread-17831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:03:16.916 [DEBUG] [Thread-17831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:03:16.916 [DEBUG] [Thread-17831] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:03:16.918 [DEBUG] [Thread-17831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:03:16.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:03:16.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:03:16.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:03:16.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:03:16.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:03:16.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:03:16.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:03:16.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:03:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:03:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.543490 -999.00  +26.20  33.79     18   +0.10 1 1 2 1 1   888    0 26.38 3.01 ----- 33.8 33.8 273.8 44.1 29.7 -27.2 29.5 -26.3 29.1 -27.4 29.9 -26.5
2025-11-12T15:03:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:03:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:03:16.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.543490
2025-11-12T15:03:16.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:03:16.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:03:16.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:03:16.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:03:16.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:03:16.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:03:03', tmtdew=31.82, humidity=11.77, cloud=0.0, wind=39.65, temperature=26.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:02:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:03:16.936 [DEBUG] [Thread-17831] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:03:17.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:03:17.022 [DEBUG] [Thread-17834] [transport.py] [_log()] starting thread (client mode): 0x173fbf70
2025-11-12T15:03:17.022 [DEBUG] [Thread-17834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:03:17.036 [DEBUG] [Thread-17834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:03:17.036 [INFO] [Thread-17834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] client lang: <none>
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] server lang: <none>
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] kex follows: False
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:03:17.044 [DEBUG] [Thread-17834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:03:17.045 [DEBUG] [Thread-17834] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:03:17.045 [DEBUG] [Thread-17834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:03:17.045 [DEBUG] [Thread-17834] [transport.py] [_log()] Compression: none
2025-11-12T15:03:17.045 [DEBUG] [Thread-17834] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:03:17.103 [DEBUG] [Thread-17834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:03:17.103 [DEBUG] [Thread-17834] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:03:17.103 [DEBUG] [Thread-17834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:03:17.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:03:17.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:03:17.159 [DEBUG] [Thread-17834] [transport.py] [_log()] userauth is OK
2025-11-12T15:03:17.159 [DEBUG] [Thread-17834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:03:17.159 [DEBUG] [Thread-17834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:03:17.159 [DEBUG] [Thread-17834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:03:17.159 [DEBUG] [Thread-17834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:03:17.172 [INFO] [Thread-17834] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:03:17.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:03:17.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:03:17.996 [DEBUG] [Thread-17834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:03:17.996 [DEBUG] [Thread-17834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:03:18.045 [DEBUG] [Thread-17834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:03:18.045 [DEBUG] [Thread-17834] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:03:18.055 [DEBUG] [Thread-17834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:03:18.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:03:18.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-11-12T15:03:18.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-11-12T15:03:18.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:03:18.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:03:18.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:03:18.087 [DEBUG] [Thread-17834] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:03:30.024 [DEBUG] [Thread-17836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:03:32.864 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:03:32.865 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:03:37.574 [DEBUG] [Thread-17837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:03:45.077 [DEBUG] [Thread-17838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:03:48.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:03:48.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:03:48.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-11-12T15:03:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 3, 35), 31.19, 12.37, 0.0, 37.6, 26.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:03:48.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:03:35
2025-11-12T15:03:48.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:03:49.008 [DEBUG] [Thread-17839] [transport.py] [_log()] starting thread (client mode): 0x173eb0d0
2025-11-12T15:03:49.008 [DEBUG] [Thread-17839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:03:49.030 [DEBUG] [Thread-17839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:03:49.030 [INFO] [Thread-17839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:03:49.031 [DEBUG] [Thread-17839] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:03:49.031 [DEBUG] [Thread-17839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:03:49.031 [DEBUG] [Thread-17839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:03:49.031 [DEBUG] [Thread-17839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] client lang: <none>
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] server lang: <none>
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] kex follows: False
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] Compression: none
2025-11-12T15:03:49.032 [DEBUG] [Thread-17839] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:03:49.050 [DEBUG] [Thread-17839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:03:49.051 [DEBUG] [Thread-17839] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:03:49.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:03:49.052 [DEBUG] [Thread-17839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:03:49.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:03:49.054 [DEBUG] [Thread-17839] [transport.py] [_log()] userauth is OK
2025-11-12T15:03:49.054 [DEBUG] [Thread-17839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:03:49.054 [DEBUG] [Thread-17839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:03:49.054 [DEBUG] [Thread-17839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:03:49.055 [DEBUG] [Thread-17839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:03:49.091 [INFO] [Thread-17839] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:03:49.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:03:49.738 [DEBUG] [Thread-17839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:03:49.738 [DEBUG] [Thread-17839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:03:49.739 [DEBUG] [Thread-17839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:03:49.780 [DEBUG] [Thread-17839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:03:49.780 [DEBUG] [Thread-17839] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:03:49.783 [DEBUG] [Thread-17839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:03:49.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:03:49.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:03:49.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:03:49.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:03:49.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:03:49.810 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:03:49.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:03:49.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:03:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:03:49.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.543837 -999.00  +26.00  23.57     18   +0.10 1 1 1 1 1   888    0 26.34 0.78 ----- 23.6 23.6 279.8 34.5 29.4 -27.6 29.4 -26.0 28.9 -26.9 29.6 -26.1
2025-11-12T15:03:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:03:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:03:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.543837
2025-11-12T15:03:49.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:03:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:03:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:03:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:03:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:03:49.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:03:35', tmtdew=31.19, humidity=12.37, cloud=0.0, wind=37.6, temperature=26.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:03:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:03:49.814 [DEBUG] [Thread-17839] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:03:49.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:03:49.911 [DEBUG] [Thread-17842] [transport.py] [_log()] starting thread (client mode): 0x173639d0
2025-11-12T15:03:49.911 [DEBUG] [Thread-17842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:03:49.925 [DEBUG] [Thread-17842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:03:49.925 [INFO] [Thread-17842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] client lang: <none>
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] server lang: <none>
2025-11-12T15:03:49.933 [DEBUG] [Thread-17842] [transport.py] [_log()] kex follows: False
2025-11-12T15:03:49.934 [DEBUG] [Thread-17842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:03:49.934 [DEBUG] [Thread-17842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:03:49.934 [DEBUG] [Thread-17842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:03:49.934 [DEBUG] [Thread-17842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:03:49.934 [DEBUG] [Thread-17842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:03:49.934 [DEBUG] [Thread-17842] [transport.py] [_log()] Compression: none
2025-11-12T15:03:49.934 [DEBUG] [Thread-17842] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:03:49.990 [DEBUG] [Thread-17842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:03:49.991 [DEBUG] [Thread-17842] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:03:49.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:03:49.992 [DEBUG] [Thread-17842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:03:49.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:03:50.047 [DEBUG] [Thread-17842] [transport.py] [_log()] userauth is OK
2025-11-12T15:03:50.047 [DEBUG] [Thread-17842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:03:50.047 [DEBUG] [Thread-17842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:03:50.047 [DEBUG] [Thread-17842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:03:50.047 [DEBUG] [Thread-17842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:03:50.068 [INFO] [Thread-17842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:03:50.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:03:50.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:03:50.930 [DEBUG] [Thread-17842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:03:50.930 [DEBUG] [Thread-17842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:03:50.979 [DEBUG] [Thread-17842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:03:50.979 [DEBUG] [Thread-17842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:03:50.989 [DEBUG] [Thread-17842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:03:50.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:03:50.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-11-12T15:03:51.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-11-12T15:03:51.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:03:51.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:03:51.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:03:51.026 [DEBUG] [Thread-17842] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:04:00.113 [DEBUG] [Thread-17844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:04:15.155 [DEBUG] [Thread-17845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:04:21.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:04:21.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:04:21.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:04:21.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 4, 7), 31.12, 12.42, 0.0, 35.48, 26.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:04:21.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:04:07
2025-11-12T15:04:21.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:04:21.926 [DEBUG] [Thread-17846] [transport.py] [_log()] starting thread (client mode): 0x1739a140
2025-11-12T15:04:21.926 [DEBUG] [Thread-17846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:04:21.942 [DEBUG] [Thread-17846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:04:21.942 [INFO] [Thread-17846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] client lang: <none>
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] server lang: <none>
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] kex follows: False
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:04:21.943 [DEBUG] [Thread-17846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:04:21.944 [DEBUG] [Thread-17846] [transport.py] [_log()] Compression: none
2025-11-12T15:04:21.944 [DEBUG] [Thread-17846] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:04:21.952 [DEBUG] [Thread-17846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:04:21.952 [DEBUG] [Thread-17846] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:04:21.952 [DEBUG] [Thread-17846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:04:21.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:04:21.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:04:21.953 [DEBUG] [Thread-17846] [transport.py] [_log()] userauth is OK
2025-11-12T15:04:21.954 [DEBUG] [Thread-17846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:04:21.954 [DEBUG] [Thread-17846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:04:21.954 [DEBUG] [Thread-17846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:04:21.954 [DEBUG] [Thread-17846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:04:21.968 [INFO] [Thread-17846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:04:21.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:04:22.578 [DEBUG] [Thread-17846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:04:22.578 [DEBUG] [Thread-17846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:04:22.579 [DEBUG] [Thread-17846] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:04:22.619 [DEBUG] [Thread-17846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:04:22.619 [DEBUG] [Thread-17846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:04:22.621 [DEBUG] [Thread-17846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:04:22.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:04:22.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:04:22.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:04:22.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:04:22.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:04:22.643 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:04:22.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:04:22.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:04:22.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:04:22.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.544185 -999.00  +26.20  29.30     18   +0.30 1 1 1 1 1   888    0 26.41 -0.56 ----- 29.3 29.3 285.6 38.1 29.4 -26.8 29.3 -25.8 28.9 -26.5 29.6 -25.4
2025-11-12T15:04:22.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:04:22.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:04:22.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.544185
2025-11-12T15:04:22.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:04:22.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:04:22.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:04:22.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:04:22.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:04:22.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:04:07', tmtdew=31.12, humidity=12.42, cloud=0.0, wind=35.48, temperature=26.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:03:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:04:22.646 [DEBUG] [Thread-17846] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:04:22.729 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:04:22.742 [DEBUG] [Thread-17849] [transport.py] [_log()] starting thread (client mode): 0x14982c20
2025-11-12T15:04:22.742 [DEBUG] [Thread-17849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:04:22.761 [DEBUG] [Thread-17849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:04:22.762 [INFO] [Thread-17849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:04:22.769 [DEBUG] [Thread-17849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:04:22.769 [DEBUG] [Thread-17849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:04:22.769 [DEBUG] [Thread-17849] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:04:22.769 [DEBUG] [Thread-17849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:04:22.769 [DEBUG] [Thread-17849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:04:22.769 [DEBUG] [Thread-17849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:04:22.769 [DEBUG] [Thread-17849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] client lang: <none>
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] server lang: <none>
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] kex follows: False
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:04:22.770 [DEBUG] [Thread-17849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:04:22.771 [DEBUG] [Thread-17849] [transport.py] [_log()] Compression: none
2025-11-12T15:04:22.771 [DEBUG] [Thread-17849] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:04:22.828 [DEBUG] [Thread-17849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:04:22.829 [DEBUG] [Thread-17849] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:04:22.829 [DEBUG] [Thread-17849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:04:22.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:04:22.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:04:22.888 [DEBUG] [Thread-17849] [transport.py] [_log()] userauth is OK
2025-11-12T15:04:22.888 [DEBUG] [Thread-17849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:04:22.888 [DEBUG] [Thread-17849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:04:22.888 [DEBUG] [Thread-17849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:04:22.888 [DEBUG] [Thread-17849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:04:22.922 [INFO] [Thread-17849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:04:22.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:04:22.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:04:23.734 [DEBUG] [Thread-17849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:04:23.735 [DEBUG] [Thread-17849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:04:23.783 [DEBUG] [Thread-17849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:04:23.783 [DEBUG] [Thread-17849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:04:23.792 [DEBUG] [Thread-17849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:04:23.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:04:23.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:04:23.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:04:23.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:04:23.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:04:23.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:04:23.829 [DEBUG] [Thread-17849] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:04:30.196 [DEBUG] [Thread-17851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:04:33.006 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:04:33.007 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:04:37.607 [DEBUG] [Thread-17852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:04:45.245 [DEBUG] [Thread-17853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:04:53.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:04:53.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:04:53.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-11-12T15:04:54.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 4, 39), 31.05, 12.47, 0.0, 32.31, 26.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:04:54.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:04:39
2025-11-12T15:04:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:04:54.709 [DEBUG] [Thread-17854] [transport.py] [_log()] starting thread (client mode): 0x149abbe0
2025-11-12T15:04:54.709 [DEBUG] [Thread-17854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:04:54.729 [DEBUG] [Thread-17854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:04:54.729 [INFO] [Thread-17854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] client lang: <none>
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] server lang: <none>
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] kex follows: False
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] Compression: none
2025-11-12T15:04:54.734 [DEBUG] [Thread-17854] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:04:54.753 [DEBUG] [Thread-17854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:04:54.753 [DEBUG] [Thread-17854] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:04:54.754 [DEBUG] [Thread-17854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:04:54.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:04:54.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:04:54.756 [DEBUG] [Thread-17854] [transport.py] [_log()] userauth is OK
2025-11-12T15:04:54.756 [DEBUG] [Thread-17854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:04:54.756 [DEBUG] [Thread-17854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:04:54.756 [DEBUG] [Thread-17854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:04:54.757 [DEBUG] [Thread-17854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:04:54.781 [INFO] [Thread-17854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:04:54.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:04:55.422 [DEBUG] [Thread-17854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:04:55.422 [DEBUG] [Thread-17854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:04:55.423 [DEBUG] [Thread-17854] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:04:55.464 [DEBUG] [Thread-17854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:04:55.464 [DEBUG] [Thread-17854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:04:55.468 [DEBUG] [Thread-17854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:04:55.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:04:55.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:04:55.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:04:55.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:04:55.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:04:55.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:04:55.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:04:55.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:04:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:04:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.544532 -999.00  +25.80  30.05     18   +0.00 1 1 2 1 1   888    0 26.63 -2.79 ----- 30.1 30.1 273.4 37.5 29.2 -26.8 29.2 -26.9 28.7 -25.4 29.4 -25.3
2025-11-12T15:04:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:04:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:04:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.544532
2025-11-12T15:04:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:04:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:04:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:04:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:04:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:04:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:04:39', tmtdew=31.05, humidity=12.47, cloud=0.0, wind=32.31, temperature=26.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:04:07.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:04:55.498 [DEBUG] [Thread-17854] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:04:55.572 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:04:55.584 [DEBUG] [Thread-17857] [transport.py] [_log()] starting thread (client mode): 0x1737ff10
2025-11-12T15:04:55.584 [DEBUG] [Thread-17857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:04:55.598 [DEBUG] [Thread-17857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:04:55.599 [INFO] [Thread-17857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] client lang: <none>
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] server lang: <none>
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] kex follows: False
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:04:55.606 [DEBUG] [Thread-17857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:04:55.607 [DEBUG] [Thread-17857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:04:55.607 [DEBUG] [Thread-17857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:04:55.607 [DEBUG] [Thread-17857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:04:55.607 [DEBUG] [Thread-17857] [transport.py] [_log()] Compression: none
2025-11-12T15:04:55.607 [DEBUG] [Thread-17857] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:04:55.662 [DEBUG] [Thread-17857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:04:55.662 [DEBUG] [Thread-17857] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:04:55.662 [DEBUG] [Thread-17857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:04:55.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:04:55.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:04:55.719 [DEBUG] [Thread-17857] [transport.py] [_log()] userauth is OK
2025-11-12T15:04:55.719 [DEBUG] [Thread-17857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:04:55.719 [DEBUG] [Thread-17857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:04:55.719 [DEBUG] [Thread-17857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:04:55.719 [DEBUG] [Thread-17857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:04:55.733 [INFO] [Thread-17857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:04:55.733 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:04:55.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:04:56.568 [DEBUG] [Thread-17857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:04:56.568 [DEBUG] [Thread-17857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:04:56.617 [DEBUG] [Thread-17857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:04:56.617 [DEBUG] [Thread-17857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:04:56.626 [DEBUG] [Thread-17857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:04:56.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:04:56.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-11-12T15:04:56.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-11-12T15:04:56.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:04:56.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:04:56.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:04:56.662 [DEBUG] [Thread-17857] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:05:00.282 [DEBUG] [Thread-17859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:05:15.337 [DEBUG] [Thread-17860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:05:26.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:05:26.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:05:26.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-11-12T15:05:27.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 5, 11), 30.92, 12.56, 0.0, 29.13, 26.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:05:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:05:11
2025-11-12T15:05:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:05:27.552 [DEBUG] [Thread-17861] [transport.py] [_log()] starting thread (client mode): 0x14982bc0
2025-11-12T15:05:27.552 [DEBUG] [Thread-17861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:05:27.563 [DEBUG] [Thread-17861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:05:27.563 [INFO] [Thread-17861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] client lang: <none>
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] server lang: <none>
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] kex follows: False
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] Compression: none
2025-11-12T15:05:27.565 [DEBUG] [Thread-17861] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:05:27.574 [DEBUG] [Thread-17861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:05:27.574 [DEBUG] [Thread-17861] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:05:27.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:05:27.574 [DEBUG] [Thread-17861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:05:27.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:05:27.575 [DEBUG] [Thread-17861] [transport.py] [_log()] userauth is OK
2025-11-12T15:05:27.575 [DEBUG] [Thread-17861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:05:27.575 [DEBUG] [Thread-17861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:05:27.575 [DEBUG] [Thread-17861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:05:27.575 [DEBUG] [Thread-17861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:05:27.587 [INFO] [Thread-17861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:05:27.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:05:28.294 [DEBUG] [Thread-17861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:05:28.294 [DEBUG] [Thread-17861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:05:28.294 [DEBUG] [Thread-17861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:05:28.334 [DEBUG] [Thread-17861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:05:28.334 [DEBUG] [Thread-17861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:05:28.337 [DEBUG] [Thread-17861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:05:28.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:05:28.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:05:28.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:05:28.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:05:28.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:05:28.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:05:28.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:05:28.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:05:28.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:05:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.544879 -999.00  +25.70  26.02     18   +0.20 1 1 1 1 1   888    0 26.50 -6.12 ----- 26.0 26.0 272.4 31.1 29.2 -26.6 29.1 -25.8 28.6 -28.2 29.2 -25.4
2025-11-12T15:05:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:05:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:05:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.544879
2025-11-12T15:05:28.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:05:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:05:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:05:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:05:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:05:28.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:05:11', tmtdew=30.92, humidity=12.56, cloud=0.0, wind=29.13, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:04:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:05:28.360 [DEBUG] [Thread-17861] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:05: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-11-12T15:05:28.457 [DEBUG] [Thread-17864] [transport.py] [_log()] starting thread (client mode): 0x1494f0a0
2025-11-12T15:05:28.457 [DEBUG] [Thread-17864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:05:28.475 [DEBUG] [Thread-17864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:05:28.475 [INFO] [Thread-17864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:05:28.483 [DEBUG] [Thread-17864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:05:28.483 [DEBUG] [Thread-17864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:05:28.483 [DEBUG] [Thread-17864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:05:28.483 [DEBUG] [Thread-17864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] client lang: <none>
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] server lang: <none>
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] kex follows: False
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:05:28.484 [DEBUG] [Thread-17864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:05:28.485 [DEBUG] [Thread-17864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:05:28.485 [DEBUG] [Thread-17864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:05:28.485 [DEBUG] [Thread-17864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:05:28.485 [DEBUG] [Thread-17864] [transport.py] [_log()] Compression: none
2025-11-12T15:05:28.485 [DEBUG] [Thread-17864] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:05:28.543 [DEBUG] [Thread-17864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:05:28.544 [DEBUG] [Thread-17864] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:05:28.544 [DEBUG] [Thread-17864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:05:28.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:05:28.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:05:28.599 [DEBUG] [Thread-17864] [transport.py] [_log()] userauth is OK
2025-11-12T15:05:28.599 [DEBUG] [Thread-17864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:05:28.599 [DEBUG] [Thread-17864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:05:28.599 [DEBUG] [Thread-17864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:05:28.599 [DEBUG] [Thread-17864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:05:28.618 [INFO] [Thread-17864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:05:28.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:05:28.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:05:29.520 [DEBUG] [Thread-17864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:05:29.520 [DEBUG] [Thread-17864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:05:29.559 [DEBUG] [Thread-17864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:05:29.559 [DEBUG] [Thread-17864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:05:29.568 [DEBUG] [Thread-17864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:05:29.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:05:29.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-11-12T15:05: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') -> 00000000
2025-11-12T15:05:29.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:05:29.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:05:29.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:05:29.608 [DEBUG] [Thread-17864] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:05:30.370 [DEBUG] [Thread-17866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:05:33.149 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:05:33.150 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:05:37.641 [DEBUG] [Thread-17867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:05:45.419 [DEBUG] [Thread-17868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:05:59.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:05:59.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:05:59.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-11-12T15:06:00.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 5, 43), 30.93, 12.69, 0.0, 31.23, 26.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:06:00.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:05:43
2025-11-12T15:06:00.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:06:00.452 [DEBUG] [Thread-17869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:06:00.519 [DEBUG] [Thread-17870] [transport.py] [_log()] starting thread (client mode): 0x1737f0d0
2025-11-12T15:06:00.519 [DEBUG] [Thread-17870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:06:00.540 [DEBUG] [Thread-17870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:06:00.540 [INFO] [Thread-17870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:06:00.543 [DEBUG] [Thread-17870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:06:00.543 [DEBUG] [Thread-17870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:06:00.543 [DEBUG] [Thread-17870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:06:00.543 [DEBUG] [Thread-17870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] client lang: <none>
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] server lang: <none>
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] kex follows: False
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] Compression: none
2025-11-12T15:06:00.544 [DEBUG] [Thread-17870] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:06:00.561 [DEBUG] [Thread-17870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:06:00.561 [DEBUG] [Thread-17870] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:06:00.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:06:00.562 [DEBUG] [Thread-17870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:06:00.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:06:00.564 [DEBUG] [Thread-17870] [transport.py] [_log()] userauth is OK
2025-11-12T15:06:00.564 [DEBUG] [Thread-17870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:06:00.564 [DEBUG] [Thread-17870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:06:00.564 [DEBUG] [Thread-17870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:06:00.564 [DEBUG] [Thread-17870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:06:00.585 [INFO] [Thread-17870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:06:00.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:06:01.211 [DEBUG] [Thread-17870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:06:01.211 [DEBUG] [Thread-17870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:06:01.212 [DEBUG] [Thread-17870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:06:01.253 [DEBUG] [Thread-17870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:06:01.253 [DEBUG] [Thread-17870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:06:01.257 [DEBUG] [Thread-17870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:06:01.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:06:01.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:06:01.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:06:01.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:06:01.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:06:01.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:06:01.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:06:01.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:06:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:06:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.545574 -999.00  +25.70  28.87     18   +0.20 1 1 1 1 1   888    0 26.65 -10.14 ----- 28.9 28.9 282.9 38.6 29.1 -26.1 29.0 -24.9 28.4 -26.6 29.2 -23.9
2025-11-12T15:06:01.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:06:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:06:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.545574
2025-11-12T15:06:01.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:06:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:06:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:06:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:06:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:06:01.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:05:43', tmtdew=30.93, humidity=12.69, cloud=0.0, wind=31.23, temperature=26.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:05:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:06:01.282 [DEBUG] [Thread-17870] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:06:01.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:06:01.389 [DEBUG] [Thread-17873] [transport.py] [_log()] starting thread (client mode): 0x14960c70
2025-11-12T15:06:01.389 [DEBUG] [Thread-17873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:06:01.404 [DEBUG] [Thread-17873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:06:01.404 [INFO] [Thread-17873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:06:01.411 [DEBUG] [Thread-17873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:06:01.411 [DEBUG] [Thread-17873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:06:01.411 [DEBUG] [Thread-17873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] client lang: <none>
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] server lang: <none>
2025-11-12T15:06:01.412 [DEBUG] [Thread-17873] [transport.py] [_log()] kex follows: False
2025-11-12T15:06:01.413 [DEBUG] [Thread-17873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:06:01.413 [DEBUG] [Thread-17873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:06:01.413 [DEBUG] [Thread-17873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:06:01.413 [DEBUG] [Thread-17873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:06:01.413 [DEBUG] [Thread-17873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:06:01.413 [DEBUG] [Thread-17873] [transport.py] [_log()] Compression: none
2025-11-12T15:06:01.413 [DEBUG] [Thread-17873] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:06:01.472 [DEBUG] [Thread-17873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:06:01.473 [DEBUG] [Thread-17873] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:06:01.474 [DEBUG] [Thread-17873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:06:01.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:06:01.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:06:01.532 [DEBUG] [Thread-17873] [transport.py] [_log()] userauth is OK
2025-11-12T15:06:01.532 [DEBUG] [Thread-17873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:06:01.532 [DEBUG] [Thread-17873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:06:01.533 [DEBUG] [Thread-17873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:06:01.533 [DEBUG] [Thread-17873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:06:01.551 [INFO] [Thread-17873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:06:01.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:06:01.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:06:02.396 [DEBUG] [Thread-17873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:06:02.396 [DEBUG] [Thread-17873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:06:02.445 [DEBUG] [Thread-17873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:06:02.445 [DEBUG] [Thread-17873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:06:02.454 [DEBUG] [Thread-17873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:06:02.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:06:02.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-11-12T15:06:02.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-11-12T15:06:02.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:06:02.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:06:02.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:06:02.491 [DEBUG] [Thread-17873] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:06:15.485 [DEBUG] [Thread-17875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:06:30.523 [DEBUG] [Thread-17876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:06:32.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:06:32.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:06:32.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-11-12T15:06:33.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 6, 15), 31.02, 12.62, 0.0, 31.2, 26.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:06:33.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:06:15
2025-11-12T15:06:33.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:06:33.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:06:33.291 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:06:33.440 [DEBUG] [Thread-17877] [transport.py] [_log()] starting thread (client mode): 0x173fbfd0
2025-11-12T15:06:33.440 [DEBUG] [Thread-17877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:06:33.460 [DEBUG] [Thread-17877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:06:33.460 [INFO] [Thread-17877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:06:33.461 [DEBUG] [Thread-17877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:06:33.461 [DEBUG] [Thread-17877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:06:33.461 [DEBUG] [Thread-17877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:06:33.461 [DEBUG] [Thread-17877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] client lang: <none>
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] server lang: <none>
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] kex follows: False
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] Compression: none
2025-11-12T15:06:33.462 [DEBUG] [Thread-17877] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:06:33.473 [DEBUG] [Thread-17877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:06:33.473 [DEBUG] [Thread-17877] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:06:33.473 [DEBUG] [Thread-17877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:06:33.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:06:33.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:06:33.474 [DEBUG] [Thread-17877] [transport.py] [_log()] userauth is OK
2025-11-12T15:06:33.474 [DEBUG] [Thread-17877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:06:33.475 [DEBUG] [Thread-17877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:06:33.475 [DEBUG] [Thread-17877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:06:33.475 [DEBUG] [Thread-17877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:06:33.486 [INFO] [Thread-17877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:06:33.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:06:34.130 [DEBUG] [Thread-17877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:06:34.130 [DEBUG] [Thread-17877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:06:34.130 [DEBUG] [Thread-17877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:06:34.172 [DEBUG] [Thread-17877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:06:34.172 [DEBUG] [Thread-17877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:06:34.174 [DEBUG] [Thread-17877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:06:34.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:06:34.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:06:34.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:06:34.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:06:34.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:06:34.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:06:34.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:06:34.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.545921 -999.00  +25.80  25.53     18   +0.20 1 1 1 1 1   888    0 26.13 -12.20 ----- 25.5 25.5 274.0 33.3 29.1 -25.7 28.9 -25.1 28.6 -25.7 29.2 -24.2
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.545921
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:06:34.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:06:15', tmtdew=31.02, humidity=12.62, cloud=0.0, wind=31.2, temperature=26.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:06:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:06:34.196 [DEBUG] [Thread-17877] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:06:34.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:06:34.282 [DEBUG] [Thread-17880] [transport.py] [_log()] starting thread (client mode): 0x173f8490
2025-11-12T15:06:34.282 [DEBUG] [Thread-17880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:06:34.297 [DEBUG] [Thread-17880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:06:34.297 [INFO] [Thread-17880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:06:34.305 [DEBUG] [Thread-17880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:06:34.305 [DEBUG] [Thread-17880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:06:34.305 [DEBUG] [Thread-17880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] client lang: <none>
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] server lang: <none>
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] kex follows: False
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] Compression: none
2025-11-12T15:06:34.306 [DEBUG] [Thread-17880] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:06:34.362 [DEBUG] [Thread-17880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:06:34.362 [DEBUG] [Thread-17880] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:06:34.362 [DEBUG] [Thread-17880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:06:34.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:06:34.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:06:34.419 [DEBUG] [Thread-17880] [transport.py] [_log()] userauth is OK
2025-11-12T15:06:34.419 [DEBUG] [Thread-17880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:06:34.419 [DEBUG] [Thread-17880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:06:34.419 [DEBUG] [Thread-17880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:06:34.419 [DEBUG] [Thread-17880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:06:34.433 [INFO] [Thread-17880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:06:34.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:06:34.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:06:35.277 [DEBUG] [Thread-17880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:06:35.277 [DEBUG] [Thread-17880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:06:35.326 [DEBUG] [Thread-17880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:06:35.326 [DEBUG] [Thread-17880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:06:35.335 [DEBUG] [Thread-17880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:06:35.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:06:35.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-11-12T15:06:35.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-11-12T15:06:35.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:06:35.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:06:35.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:06:35.372 [DEBUG] [Thread-17880] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:06:37.681 [DEBUG] [Thread-17882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:06:45.556 [DEBUG] [Thread-17883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:07:00.610 [DEBUG] [Thread-17884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:07:05.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:07:05.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:07:05.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:07:06.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 6, 47), 31.14, 12.52, 0.0, 35.47, 26.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:07:06.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:06:47
2025-11-12T15:07:06.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:07:06.283 [DEBUG] [Thread-17885] [transport.py] [_log()] starting thread (client mode): 0x14962c20
2025-11-12T15:07:06.284 [DEBUG] [Thread-17885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:07:06.303 [DEBUG] [Thread-17885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:07:06.303 [INFO] [Thread-17885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:07:06.306 [DEBUG] [Thread-17885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:07:06.306 [DEBUG] [Thread-17885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:07:06.306 [DEBUG] [Thread-17885] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:07:06.306 [DEBUG] [Thread-17885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:07:06.306 [DEBUG] [Thread-17885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:07:06.306 [DEBUG] [Thread-17885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:07:06.306 [DEBUG] [Thread-17885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] client lang: <none>
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] server lang: <none>
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] kex follows: False
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] Compression: none
2025-11-12T15:07:06.307 [DEBUG] [Thread-17885] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:07:06.324 [DEBUG] [Thread-17885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:07:06.324 [DEBUG] [Thread-17885] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:07:06.325 [DEBUG] [Thread-17885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:07:06.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:07:06.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:07:06.369 [DEBUG] [Thread-17885] [transport.py] [_log()] userauth is OK
2025-11-12T15:07:06.369 [DEBUG] [Thread-17885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:07:06.370 [DEBUG] [Thread-17885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:07:06.370 [DEBUG] [Thread-17885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:07:06.370 [DEBUG] [Thread-17885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:07:06.391 [INFO] [Thread-17885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:07:06.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:07:07.044 [DEBUG] [Thread-17885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:07:07.045 [DEBUG] [Thread-17885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:07:07.045 [DEBUG] [Thread-17885] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:07:07.086 [DEBUG] [Thread-17885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:07:07.086 [DEBUG] [Thread-17885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:07:07.089 [DEBUG] [Thread-17885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:07:07.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:07:07.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:07:07.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:07:07.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:07:07.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:07:07.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:07:07.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:07:07.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:07:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:07:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.546268 -999.00  +26.10  29.45     18   +0.00 1 1 1 1 1   888    0 25.90 -14.85 ----- 29.4 29.4 282.4 36.1 29.2 -25.1 29.0 -24.4 28.6 -25.5 29.3 -23.5
2025-11-12T15:07:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:07:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:07:07.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.546268
2025-11-12T15:07:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:07:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:07:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:07:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:07:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:07:07.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:06:47', tmtdew=31.14, humidity=12.52, cloud=0.0, wind=35.47, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:06:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:07:07.118 [DEBUG] [Thread-17885] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:07:07.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:07:07.212 [DEBUG] [Thread-17888] [transport.py] [_log()] starting thread (client mode): 0x1737ff10
2025-11-12T15:07:07.212 [DEBUG] [Thread-17888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:07:07.227 [DEBUG] [Thread-17888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:07:07.227 [INFO] [Thread-17888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:07:07.234 [DEBUG] [Thread-17888] [transport.py] [_log()] client lang: <none>
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] server lang: <none>
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] kex follows: False
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] Compression: none
2025-11-12T15:07:07.235 [DEBUG] [Thread-17888] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:07:07.291 [DEBUG] [Thread-17888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:07:07.292 [DEBUG] [Thread-17888] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:07:07.293 [DEBUG] [Thread-17888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:07:07.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:07:07.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:07:07.348 [DEBUG] [Thread-17888] [transport.py] [_log()] userauth is OK
2025-11-12T15:07:07.348 [DEBUG] [Thread-17888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:07:07.348 [DEBUG] [Thread-17888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:07:07.348 [DEBUG] [Thread-17888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:07:07.348 [DEBUG] [Thread-17888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:07:07.368 [INFO] [Thread-17888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:07:07.368 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:07:07.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:07:08.223 [DEBUG] [Thread-17888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:07:08.223 [DEBUG] [Thread-17888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:07:08.271 [DEBUG] [Thread-17888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:07:08.271 [DEBUG] [Thread-17888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:07:08.279 [DEBUG] [Thread-17888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:07:08.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:07:08.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-11-12T15:07:08.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:07:08.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:07:08.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:07:08.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:07:08.311 [DEBUG] [Thread-17888] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:07:15.644 [DEBUG] [Thread-17890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:07:30.701 [DEBUG] [Thread-17891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:07:33.432 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:07:33.433 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:07:37.717 [DEBUG] [Thread-17892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:07:38.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:07:38.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:07:38.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-11-12T15:07:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 7, 19), 31.27, 12.41, 0.0, 39.05, 26.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:07:38.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:07:19
2025-11-12T15:07:39.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:07:39.229 [DEBUG] [Thread-17893] [transport.py] [_log()] starting thread (client mode): 0x1737d960
2025-11-12T15:07:39.229 [DEBUG] [Thread-17893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:07:39.249 [DEBUG] [Thread-17893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:07:39.249 [INFO] [Thread-17893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:07:39.256 [DEBUG] [Thread-17893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] client lang: <none>
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] server lang: <none>
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] kex follows: False
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] Compression: none
2025-11-12T15:07:39.257 [DEBUG] [Thread-17893] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:07:39.267 [DEBUG] [Thread-17893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:07:39.267 [DEBUG] [Thread-17893] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:07:39.268 [DEBUG] [Thread-17893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:07:39.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:07:39.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:07:39.270 [DEBUG] [Thread-17893] [transport.py] [_log()] userauth is OK
2025-11-12T15:07:39.270 [DEBUG] [Thread-17893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:07:39.270 [DEBUG] [Thread-17893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:07:39.270 [DEBUG] [Thread-17893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:07:39.270 [DEBUG] [Thread-17893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:07:39.288 [INFO] [Thread-17893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:07:39.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:07:39.949 [DEBUG] [Thread-17893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:07:39.949 [DEBUG] [Thread-17893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:07:39.949 [DEBUG] [Thread-17893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:07:39.990 [DEBUG] [Thread-17893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:07:39.990 [DEBUG] [Thread-17893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:07:39.993 [DEBUG] [Thread-17893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:07:40.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:07:40.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:07:40.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:07:40.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:07:40.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:07:40.017 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:07:40.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:07:40.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:07:40.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:07:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.546615 -999.00  +26.20  34.90     17   -0.30 1 1 2 1 1   888    0 25.81 -14.12 ----- 34.9 34.9 280.0 41.3 29.2 -24.9 29.0 -24.4 28.6 -25.5 29.3 -24.1
2025-11-12T15:07:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:07:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:07:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.546615
2025-11-12T15:07:40.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:07:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:07:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:07:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:07:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:07:40.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:07:19', tmtdew=31.27, humidity=12.41, cloud=0.0, wind=39.05, temperature=26.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:07:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:07:40.019 [DEBUG] [Thread-17893] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:07:40.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:07:40.111 [DEBUG] [Thread-17896] [transport.py] [_log()] starting thread (client mode): 0x1737dde0
2025-11-12T15:07:40.111 [DEBUG] [Thread-17896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:07:40.125 [DEBUG] [Thread-17896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:07:40.125 [INFO] [Thread-17896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:07:40.133 [DEBUG] [Thread-17896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:07:40.133 [DEBUG] [Thread-17896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:07:40.133 [DEBUG] [Thread-17896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:07:40.133 [DEBUG] [Thread-17896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:07:40.133 [DEBUG] [Thread-17896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:07:40.133 [DEBUG] [Thread-17896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] client lang: <none>
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] server lang: <none>
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] kex follows: False
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] Compression: none
2025-11-12T15:07:40.134 [DEBUG] [Thread-17896] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:07:40.190 [DEBUG] [Thread-17896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:07:40.191 [DEBUG] [Thread-17896] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:07:40.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:07:40.192 [DEBUG] [Thread-17896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:07:40.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:07:40.247 [DEBUG] [Thread-17896] [transport.py] [_log()] userauth is OK
2025-11-12T15:07:40.247 [DEBUG] [Thread-17896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:07:40.247 [DEBUG] [Thread-17896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:07:40.247 [DEBUG] [Thread-17896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:07:40.248 [DEBUG] [Thread-17896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:07:40.270 [INFO] [Thread-17896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:07:40.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:07:40.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:07:41.117 [DEBUG] [Thread-17896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:07:41.117 [DEBUG] [Thread-17896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:07:41.165 [DEBUG] [Thread-17896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:07:41.165 [DEBUG] [Thread-17896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:07:41.174 [DEBUG] [Thread-17896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:07:41.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:07:41.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:07:41.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:07:41.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:07:41.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:07:41.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:07:41.208 [DEBUG] [Thread-17896] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:07:45.735 [DEBUG] [Thread-17898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:08:00.781 [DEBUG] [Thread-17899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:08:11.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:08:11.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:08:11.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-11-12T15:08:11.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 7, 51), 32.26, 11.51, 0.0, 41.85, 26.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:08:11.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:07:51
2025-11-12T15:08:11.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:08:12.110 [DEBUG] [Thread-17900] [transport.py] [_log()] starting thread (client mode): 0x14961990
2025-11-12T15:08:12.111 [DEBUG] [Thread-17900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:08:12.129 [DEBUG] [Thread-17900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:08:12.129 [INFO] [Thread-17900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:08:12.132 [DEBUG] [Thread-17900] [transport.py] [_log()] client lang: <none>
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] server lang: <none>
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] kex follows: False
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] Compression: none
2025-11-12T15:08:12.133 [DEBUG] [Thread-17900] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:08:12.150 [DEBUG] [Thread-17900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:08:12.151 [DEBUG] [Thread-17900] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:08:12.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:08:12.152 [DEBUG] [Thread-17900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:08:12.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:08:12.154 [DEBUG] [Thread-17900] [transport.py] [_log()] userauth is OK
2025-11-12T15:08:12.154 [DEBUG] [Thread-17900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:08:12.154 [DEBUG] [Thread-17900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:08:12.154 [DEBUG] [Thread-17900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:08:12.154 [DEBUG] [Thread-17900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:08:12.174 [INFO] [Thread-17900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:08:12.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:08:12.827 [DEBUG] [Thread-17900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:08:12.827 [DEBUG] [Thread-17900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:08:12.828 [DEBUG] [Thread-17900] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:08:12.868 [DEBUG] [Thread-17900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:08:12.868 [DEBUG] [Thread-17900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:08:12.871 [DEBUG] [Thread-17900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:08:12.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:08:12.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:08:12.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:08:12.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:08:12.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:08:12.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:08:12.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:08:12.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:08:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:08:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.546963 -999.00  +26.30  28.07     17   -0.30 1 1 1 1 1   888    0 26.37 -12.71 ----- 28.1 28.1 273.6 37.7 29.4 -24.2 29.0 -24.4 28.9 -23.2 29.5 -23.1
2025-11-12T15:08:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:08:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:08:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.546963
2025-11-12T15:08:12.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:08:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:08:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:08:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:08:12.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:08:12.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:07:51', tmtdew=32.26, humidity=11.51, cloud=0.0, wind=41.85, temperature=26.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:07:37.603', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:08:12.900 [DEBUG] [Thread-17900] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:08:12.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:08:13.008 [DEBUG] [Thread-17903] [transport.py] [_log()] starting thread (client mode): 0x173beec0
2025-11-12T15:08:13.008 [DEBUG] [Thread-17903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:08:13.023 [DEBUG] [Thread-17903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:08:13.023 [INFO] [Thread-17903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:08:13.031 [DEBUG] [Thread-17903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:08:13.031 [DEBUG] [Thread-17903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:08:13.031 [DEBUG] [Thread-17903] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:08:13.031 [DEBUG] [Thread-17903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:08:13.031 [DEBUG] [Thread-17903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:08:13.031 [DEBUG] [Thread-17903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:08:13.031 [DEBUG] [Thread-17903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:08:13.032 [DEBUG] [Thread-17903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:08:13.032 [DEBUG] [Thread-17903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:08:13.032 [DEBUG] [Thread-17903] [transport.py] [_log()] client lang: <none>
2025-11-12T15:08:13.032 [DEBUG] [Thread-17903] [transport.py] [_log()] server lang: <none>
2025-11-12T15:08:13.032 [DEBUG] [Thread-17903] [transport.py] [_log()] kex follows: False
2025-11-12T15:08:13.032 [DEBUG] [Thread-17903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:08:13.032 [DEBUG] [Thread-17903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:08:13.032 [DEBUG] [Thread-17903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:08:13.033 [DEBUG] [Thread-17903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:08:13.033 [DEBUG] [Thread-17903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:08:13.033 [DEBUG] [Thread-17903] [transport.py] [_log()] Compression: none
2025-11-12T15:08:13.033 [DEBUG] [Thread-17903] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:08:13.087 [DEBUG] [Thread-17903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:08:13.088 [DEBUG] [Thread-17903] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:08:13.089 [DEBUG] [Thread-17903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:08:13.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:08:13.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:08:13.148 [DEBUG] [Thread-17903] [transport.py] [_log()] userauth is OK
2025-11-12T15:08:13.148 [DEBUG] [Thread-17903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:08:13.148 [DEBUG] [Thread-17903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:08:13.148 [DEBUG] [Thread-17903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:08:13.148 [DEBUG] [Thread-17903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:08:13.167 [INFO] [Thread-17903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:08:13.167 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:08:13.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:08:13.999 [DEBUG] [Thread-17903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:08:13.999 [DEBUG] [Thread-17903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:08:14.048 [DEBUG] [Thread-17903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:08:14.048 [DEBUG] [Thread-17903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:08:14.057 [DEBUG] [Thread-17903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:08:14.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:08:14.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-11-12T15:08:14.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:08:14.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:08:14.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:08:14.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:08:14.094 [DEBUG] [Thread-17903] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:08:15.819 [DEBUG] [Thread-17905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:08:30.869 [DEBUG] [Thread-17906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:08:33.575 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:08:33.576 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:08:37.753 [DEBUG] [Thread-17907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:08:44.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:08:44.096 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:08:44.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-11-12T15:08:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 8, 23), 32.24, 11.51, 0.0, 37.42, 26.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:08:44.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:08:23
2025-11-12T15:08:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:08:44.995 [DEBUG] [Thread-17908] [transport.py] [_log()] starting thread (client mode): 0x14983fa0
2025-11-12T15:08:44.995 [DEBUG] [Thread-17908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:08:45.016 [DEBUG] [Thread-17908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:08:45.016 [INFO] [Thread-17908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:08:45.018 [DEBUG] [Thread-17908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:08:45.018 [DEBUG] [Thread-17908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:08:45.018 [DEBUG] [Thread-17908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:08:45.018 [DEBUG] [Thread-17908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:08:45.018 [DEBUG] [Thread-17908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:08:45.018 [DEBUG] [Thread-17908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:08:45.018 [DEBUG] [Thread-17908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:08:45.018 [DEBUG] [Thread-17908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] client lang: <none>
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] server lang: <none>
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] kex follows: False
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] Compression: none
2025-11-12T15:08:45.019 [DEBUG] [Thread-17908] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:08:45.030 [DEBUG] [Thread-17908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:08:45.031 [DEBUG] [Thread-17908] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:08:45.031 [DEBUG] [Thread-17908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:08:45.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:08:45.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:08:45.032 [DEBUG] [Thread-17908] [transport.py] [_log()] userauth is OK
2025-11-12T15:08:45.032 [DEBUG] [Thread-17908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:08:45.032 [DEBUG] [Thread-17908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:08:45.032 [DEBUG] [Thread-17908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:08:45.033 [DEBUG] [Thread-17908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:08:45.046 [INFO] [Thread-17908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:08:45.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:08:45.680 [DEBUG] [Thread-17908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:08:45.680 [DEBUG] [Thread-17908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:08:45.680 [DEBUG] [Thread-17908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:08:45.721 [DEBUG] [Thread-17908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:08:45.721 [DEBUG] [Thread-17908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:08:45.725 [DEBUG] [Thread-17908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:08:45.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:08:45.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:08:45.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:08:45.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:08:45.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:08:45.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:08:45.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:08:45.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:08:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:08:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.547310 -999.00  +26.20  32.19     17   -0.40 1 1 2 1 1   888    0 26.22 -12.84 ----- 32.2 32.2 280.6 40.8 29.3 -26.6 29.1 -24.8 28.9 -26.5 29.5 -24.5
2025-11-12T15:08:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:08:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:08:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.547310
2025-11-12T15:08:45.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:08:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:08:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:08:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:08:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:08:45.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:08:23', tmtdew=32.24, humidity=11.51, cloud=0.0, wind=37.42, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:08:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:08:45.752 [DEBUG] [Thread-17908] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:08:45.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:08:45.847 [DEBUG] [Thread-17911] [transport.py] [_log()] starting thread (client mode): 0x1737f580
2025-11-12T15:08:45.848 [DEBUG] [Thread-17911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:08:45.863 [DEBUG] [Thread-17911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:08:45.863 [INFO] [Thread-17911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:08:45.871 [DEBUG] [Thread-17911] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:08:45.871 [DEBUG] [Thread-17911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:08:45.871 [DEBUG] [Thread-17911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:08:45.871 [DEBUG] [Thread-17911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:08:45.872 [DEBUG] [Thread-17911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:08:45.872 [DEBUG] [Thread-17911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:08:45.872 [DEBUG] [Thread-17911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:08:45.872 [DEBUG] [Thread-17911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:08:45.872 [DEBUG] [Thread-17911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:08:45.872 [DEBUG] [Thread-17911] [transport.py] [_log()] client lang: <none>
2025-11-12T15:08:45.872 [DEBUG] [Thread-17911] [transport.py] [_log()] server lang: <none>
2025-11-12T15:08:45.872 [DEBUG] [Thread-17911] [transport.py] [_log()] kex follows: False
2025-11-12T15:08:45.873 [DEBUG] [Thread-17911] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:08:45.873 [DEBUG] [Thread-17911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:08:45.873 [DEBUG] [Thread-17911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:08:45.873 [DEBUG] [Thread-17911] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:08:45.873 [DEBUG] [Thread-17911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:08:45.873 [DEBUG] [Thread-17911] [transport.py] [_log()] Compression: none
2025-11-12T15:08:45.873 [DEBUG] [Thread-17911] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:08:45.908 [DEBUG] [Thread-17913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:08:45.928 [DEBUG] [Thread-17911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:08:45.929 [DEBUG] [Thread-17911] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:08:45.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:08:45.930 [DEBUG] [Thread-17911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:08:45.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:08:45.984 [DEBUG] [Thread-17911] [transport.py] [_log()] userauth is OK
2025-11-12T15:08:45.984 [DEBUG] [Thread-17911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:08:45.985 [DEBUG] [Thread-17911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:08:45.985 [DEBUG] [Thread-17911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:08:45.985 [DEBUG] [Thread-17911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:08:46.005 [INFO] [Thread-17911] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:08:46.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:08:46.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:08:46.864 [DEBUG] [Thread-17911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:08:46.864 [DEBUG] [Thread-17911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:08:46.911 [DEBUG] [Thread-17911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:08:46.912 [DEBUG] [Thread-17911] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:08:46.921 [DEBUG] [Thread-17911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:08:46.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:08:46.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-11-12T15:08:46.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:08:46.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:08:46.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:08:46.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:08:46.958 [DEBUG] [Thread-17911] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:09:00.959 [DEBUG] [Thread-17914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:09:15.994 [DEBUG] [Thread-17915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:09:16.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:09:16.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:09:16.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-11-12T15:09:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 8, 55), 32.25, 11.63, 0.0, 38.22, 26.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:09:17.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:08:55
2025-11-12T15:09:17.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:09:17.879 [DEBUG] [Thread-17916] [transport.py] [_log()] starting thread (client mode): 0x1737dd50
2025-11-12T15:09:17.879 [DEBUG] [Thread-17916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:09:17.899 [DEBUG] [Thread-17916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:09:17.900 [INFO] [Thread-17916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:09:17.902 [DEBUG] [Thread-17916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:09:17.902 [DEBUG] [Thread-17916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] client lang: <none>
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] server lang: <none>
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] kex follows: False
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] Compression: none
2025-11-12T15:09:17.903 [DEBUG] [Thread-17916] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:09:17.922 [DEBUG] [Thread-17916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:09:17.923 [DEBUG] [Thread-17916] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:09:17.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:09:17.924 [DEBUG] [Thread-17916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:09:17.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:09:17.965 [DEBUG] [Thread-17916] [transport.py] [_log()] userauth is OK
2025-11-12T15:09:17.965 [DEBUG] [Thread-17916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:09:17.965 [DEBUG] [Thread-17916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:09:17.965 [DEBUG] [Thread-17916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:09:17.965 [DEBUG] [Thread-17916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:09:17.987 [INFO] [Thread-17916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:09:17.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:09:18.599 [DEBUG] [Thread-17916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:09:18.599 [DEBUG] [Thread-17916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:09:18.600 [DEBUG] [Thread-17916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:09:18.641 [DEBUG] [Thread-17916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:09:18.641 [DEBUG] [Thread-17916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:09:18.644 [DEBUG] [Thread-17916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:09:18.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:09:18.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:09:18.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:09:18.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:09:18.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:09:18.668 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:09:18.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:09:18.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:09:18.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:09:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.547657 -999.00  +26.20  35.90     17   -0.50 1 1 2 1 1   888    0 26.04 -13.59 ----- 35.9 35.9 275.5 41.9 29.3 -25.4 29.1 -24.6 28.9 -27.9 29.6 -24.3
2025-11-12T15:09:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:09:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:09:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.547657
2025-11-12T15:09:18.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:09:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:09:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:09:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:09:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:09:18.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:08:55', tmtdew=32.25, humidity=11.63, cloud=0.0, wind=38.22, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:08:37.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:09:18.671 [DEBUG] [Thread-17916] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:09:18.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:09:18.767 [DEBUG] [Thread-17919] [transport.py] [_log()] starting thread (client mode): 0x19ddbfa0
2025-11-12T15:09:18.767 [DEBUG] [Thread-17919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:09:18.781 [DEBUG] [Thread-17919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:09:18.781 [INFO] [Thread-17919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:09:18.789 [DEBUG] [Thread-17919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:09:18.789 [DEBUG] [Thread-17919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:09:18.789 [DEBUG] [Thread-17919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:09:18.789 [DEBUG] [Thread-17919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] client lang: <none>
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] server lang: <none>
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] kex follows: False
2025-11-12T15:09:18.790 [DEBUG] [Thread-17919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:09:18.791 [DEBUG] [Thread-17919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:09:18.791 [DEBUG] [Thread-17919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:09:18.791 [DEBUG] [Thread-17919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:09:18.791 [DEBUG] [Thread-17919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:09:18.791 [DEBUG] [Thread-17919] [transport.py] [_log()] Compression: none
2025-11-12T15:09:18.791 [DEBUG] [Thread-17919] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:09:18.848 [DEBUG] [Thread-17919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:09:18.849 [DEBUG] [Thread-17919] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:09:18.850 [DEBUG] [Thread-17919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:09:18.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:09:18.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:09:18.904 [DEBUG] [Thread-17919] [transport.py] [_log()] userauth is OK
2025-11-12T15:09:18.905 [DEBUG] [Thread-17919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:09:18.905 [DEBUG] [Thread-17919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:09:18.905 [DEBUG] [Thread-17919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:09:18.905 [DEBUG] [Thread-17919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:09:18.927 [INFO] [Thread-17919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:09:18.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:09:18.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:09:19.779 [DEBUG] [Thread-17919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:09:19.779 [DEBUG] [Thread-17919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:09:19.827 [DEBUG] [Thread-17919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:09:19.828 [DEBUG] [Thread-17919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:09:19.837 [DEBUG] [Thread-17919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:09:19.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:09:19.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-11-12T15:09:19.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:09:19.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:09:19.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:09:19.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:09:19.874 [DEBUG] [Thread-17919] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:09:31.033 [DEBUG] [Thread-17921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:09:33.718 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:09:33.719 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:09:37.787 [DEBUG] [Thread-17922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:09:46.083 [DEBUG] [Thread-17923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:09:49.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:09:49.883 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:09:49.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-11-12T15:09:50.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 9, 27), 32.65, 11.34, 0.0, 39.4, 27.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:09:50.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:09:27
2025-11-12T15:09:50.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:09:50.783 [DEBUG] [Thread-17924] [transport.py] [_log()] starting thread (client mode): 0x149614e0
2025-11-12T15:09:50.784 [DEBUG] [Thread-17924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:09:50.804 [DEBUG] [Thread-17924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:09:50.804 [INFO] [Thread-17924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:09:50.805 [DEBUG] [Thread-17924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:09:50.805 [DEBUG] [Thread-17924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] client lang: <none>
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] server lang: <none>
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] kex follows: False
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] Compression: none
2025-11-12T15:09:50.806 [DEBUG] [Thread-17924] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:09:50.818 [DEBUG] [Thread-17924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:09:50.819 [DEBUG] [Thread-17924] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:09:50.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:09:50.820 [DEBUG] [Thread-17924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:09:50.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:09:50.822 [DEBUG] [Thread-17924] [transport.py] [_log()] userauth is OK
2025-11-12T15:09:50.822 [DEBUG] [Thread-17924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:09:50.822 [DEBUG] [Thread-17924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:09:50.823 [DEBUG] [Thread-17924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:09:50.823 [DEBUG] [Thread-17924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:09:50.847 [INFO] [Thread-17924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:09:50.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:09:51.489 [DEBUG] [Thread-17924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:09:51.489 [DEBUG] [Thread-17924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:09:51.489 [DEBUG] [Thread-17924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:09:51.530 [DEBUG] [Thread-17924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:09:51.530 [DEBUG] [Thread-17924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:09:51.533 [DEBUG] [Thread-17924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:09:51.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:09:51.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:09:51.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:09:51.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:09:51.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:09:51.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:09:51.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:09:51.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:09:51.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:09:51.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.548004 -999.00  +26.20  24.49     17   -0.40 1 1 1 1 1   888    0 26.49 -12.68 ----- 24.5 24.5 278.4 34.3 29.4 -24.9 29.1 -24.1 29.1 -24.3 29.8 -23.2
2025-11-12T15:09:51.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:09:51.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:09:51.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.548004
2025-11-12T15:09:51.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:09:51.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:09:51.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:09:51.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:09:51.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:09:51.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:09:27', tmtdew=32.65, humidity=11.34, cloud=0.0, wind=39.4, temperature=27.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:09:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:09:51.563 [DEBUG] [Thread-17924] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:09:51.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:09:51.663 [DEBUG] [Thread-17927] [transport.py] [_log()] starting thread (client mode): 0x14961de0
2025-11-12T15:09:51.663 [DEBUG] [Thread-17927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:09:51.678 [DEBUG] [Thread-17927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:09:51.678 [INFO] [Thread-17927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:09:51.686 [DEBUG] [Thread-17927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:09:51.686 [DEBUG] [Thread-17927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:09:51.686 [DEBUG] [Thread-17927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:09:51.686 [DEBUG] [Thread-17927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:09:51.686 [DEBUG] [Thread-17927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] client lang: <none>
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] server lang: <none>
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] kex follows: False
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:09:51.687 [DEBUG] [Thread-17927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:09:51.688 [DEBUG] [Thread-17927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:09:51.688 [DEBUG] [Thread-17927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:09:51.688 [DEBUG] [Thread-17927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:09:51.688 [DEBUG] [Thread-17927] [transport.py] [_log()] Compression: none
2025-11-12T15:09:51.688 [DEBUG] [Thread-17927] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:09:51.745 [DEBUG] [Thread-17927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:09:51.745 [DEBUG] [Thread-17927] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:09:51.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:09:51.747 [DEBUG] [Thread-17927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:09:51.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:09:51.809 [DEBUG] [Thread-17927] [transport.py] [_log()] userauth is OK
2025-11-12T15:09:51.809 [DEBUG] [Thread-17927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:09:51.809 [DEBUG] [Thread-17927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:09:51.809 [DEBUG] [Thread-17927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:09:51.809 [DEBUG] [Thread-17927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:09:51.828 [INFO] [Thread-17927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:09:51.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:09:51.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:09:52.668 [DEBUG] [Thread-17927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:09:52.669 [DEBUG] [Thread-17927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:09:52.717 [DEBUG] [Thread-17927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:09:52.717 [DEBUG] [Thread-17927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:09:52.726 [DEBUG] [Thread-17927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:09:52.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:09:52.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-11-12T15:09:52.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-11-12T15:09:52.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:09:52.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:09:52.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:09:52.983 [DEBUG] [Thread-17927] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:10:01.111 [DEBUG] [Thread-17929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:10:16.155 [DEBUG] [Thread-17930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:10:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:10:23.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:10:23.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-11-12T15:10:23.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 9, 59), 32.6, 11.34, 0.0, 33.05, 27.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:10:23.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:09:59
2025-11-12T15:10:23.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:10:23.935 [DEBUG] [Thread-17931] [transport.py] [_log()] starting thread (client mode): 0x173bcfa0
2025-11-12T15:10:23.935 [DEBUG] [Thread-17931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:10:23.957 [DEBUG] [Thread-17931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:10:23.958 [INFO] [Thread-17931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] client lang: <none>
2025-11-12T15:10:23.961 [DEBUG] [Thread-17931] [transport.py] [_log()] server lang: <none>
2025-11-12T15:10:23.962 [DEBUG] [Thread-17931] [transport.py] [_log()] kex follows: False
2025-11-12T15:10:23.962 [DEBUG] [Thread-17931] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:10:23.962 [DEBUG] [Thread-17931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:10:23.962 [DEBUG] [Thread-17931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:10:23.962 [DEBUG] [Thread-17931] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:10:23.962 [DEBUG] [Thread-17931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:10:23.962 [DEBUG] [Thread-17931] [transport.py] [_log()] Compression: none
2025-11-12T15:10:23.962 [DEBUG] [Thread-17931] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:10:23.978 [DEBUG] [Thread-17931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:10:23.978 [DEBUG] [Thread-17931] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:10:23.978 [DEBUG] [Thread-17931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:10:23.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:10:23.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:10:23.979 [DEBUG] [Thread-17931] [transport.py] [_log()] userauth is OK
2025-11-12T15:10:23.979 [DEBUG] [Thread-17931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:10:23.979 [DEBUG] [Thread-17931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:10:23.979 [DEBUG] [Thread-17931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:10:23.979 [DEBUG] [Thread-17931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:10:23.995 [INFO] [Thread-17931] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:10:23.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:10:24.617 [DEBUG] [Thread-17931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:10:24.618 [DEBUG] [Thread-17931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:10:24.618 [DEBUG] [Thread-17931] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:10:24.658 [DEBUG] [Thread-17931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:10:24.658 [DEBUG] [Thread-17931] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:10:24.660 [DEBUG] [Thread-17931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:10:24.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:10:24.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:10:24.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:10:24.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:10:24.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:10:24.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:10:24.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:10:24.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.548351 -999.00  +26.40  30.80     17   -0.40 1 2 2 1 1   888    0 26.05 -10.24 ----- 30.8 30.8 278.0 36.9 29.7 -23.5 29.3 -23.5 29.4 -21.1 30.0 -21.2
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.548351
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T15:10:24.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:09:59', tmtdew=32.6, humidity=11.34, cloud=0.0, wind=33.05, temperature=27.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:09:37.526', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:10:24.680 [DEBUG] [Thread-17931] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:10:24.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:10:24.764 [DEBUG] [Thread-17934] [transport.py] [_log()] starting thread (client mode): 0x14982c80
2025-11-12T15:10:24.764 [DEBUG] [Thread-17934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:10:24.779 [DEBUG] [Thread-17934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:10:24.779 [INFO] [Thread-17934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] client lang: <none>
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] server lang: <none>
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] kex follows: False
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] Compression: none
2025-11-12T15:10:24.787 [DEBUG] [Thread-17934] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:10:24.843 [DEBUG] [Thread-17934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:10:24.843 [DEBUG] [Thread-17934] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:10:24.843 [DEBUG] [Thread-17934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:10:24.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:10:24.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:10:24.900 [DEBUG] [Thread-17934] [transport.py] [_log()] userauth is OK
2025-11-12T15:10:24.900 [DEBUG] [Thread-17934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:10:24.900 [DEBUG] [Thread-17934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:10:24.900 [DEBUG] [Thread-17934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:10:24.900 [DEBUG] [Thread-17934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:10:24.914 [INFO] [Thread-17934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:10:24.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:10:24.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:10:25.805 [DEBUG] [Thread-17934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:10:25.805 [DEBUG] [Thread-17934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:10:25.854 [DEBUG] [Thread-17934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:10:25.854 [DEBUG] [Thread-17934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:10:25.862 [DEBUG] [Thread-17934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:10:25.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:10:25.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-11-12T15:10:25.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:10:25.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:10:25.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:10:25.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:10:25.894 [DEBUG] [Thread-17934] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:10:31.185 [DEBUG] [Thread-17936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:10:33.860 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:10:33.861 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:10:37.830 [DEBUG] [Thread-17937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:10:46.234 [DEBUG] [Thread-17938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:10:55.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:10:55.896 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:10:55.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-11-12T15:10:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 10, 31), 32.52, 11.39, 0.0, 30.03, 27.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:10:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:10:31
2025-11-12T15:10:56.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:10:56.813 [DEBUG] [Thread-17939] [transport.py] [_log()] starting thread (client mode): 0x19dd9690
2025-11-12T15:10:56.813 [DEBUG] [Thread-17939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:10:56.834 [DEBUG] [Thread-17939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:10:56.835 [INFO] [Thread-17939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:10:56.837 [DEBUG] [Thread-17939] [transport.py] [_log()] client lang: <none>
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] server lang: <none>
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] kex follows: False
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] Compression: none
2025-11-12T15:10:56.838 [DEBUG] [Thread-17939] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:10:56.855 [DEBUG] [Thread-17939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:10:56.855 [DEBUG] [Thread-17939] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:10:56.856 [DEBUG] [Thread-17939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:10:56.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:10:56.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:10:56.858 [DEBUG] [Thread-17939] [transport.py] [_log()] userauth is OK
2025-11-12T15:10:56.858 [DEBUG] [Thread-17939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:10:56.858 [DEBUG] [Thread-17939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:10:56.858 [DEBUG] [Thread-17939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:10:56.858 [DEBUG] [Thread-17939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:10:56.882 [INFO] [Thread-17939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:10:56.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:10:57.628 [DEBUG] [Thread-17939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:10:57.628 [DEBUG] [Thread-17939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:10:57.628 [DEBUG] [Thread-17939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:10:57.668 [DEBUG] [Thread-17939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:10:57.669 [DEBUG] [Thread-17939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:10:57.673 [DEBUG] [Thread-17939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:10:57.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:10:57.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:10:57.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:10:57.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:10:57.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:10:57.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:10:57.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:10:57.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:10:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:10:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.549046 -999.00  +26.60  32.46     17   -0.30 1 1 2 1 1   888    0 26.62 -5.33 ----- 32.5 32.5 279.0 43.1 29.7 -26.1 29.4 -24.9 29.4 -26.1 30.1 -24.4
2025-11-12T15:10:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:10:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:10:57.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.549046
2025-11-12T15:10:57.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:10:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:10:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:10:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:10:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:10:57.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:10:31', tmtdew=32.52, humidity=11.39, cloud=0.0, wind=30.03, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:10:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:10:57.701 [DEBUG] [Thread-17939] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:10:57.785 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:10:57.796 [DEBUG] [Thread-17942] [transport.py] [_log()] starting thread (client mode): 0x17398e50
2025-11-12T15:10:57.797 [DEBUG] [Thread-17942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:10:57.811 [DEBUG] [Thread-17942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:10:57.812 [INFO] [Thread-17942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:10:57.820 [DEBUG] [Thread-17942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:10:57.821 [DEBUG] [Thread-17942] [transport.py] [_log()] client lang: <none>
2025-11-12T15:10:57.822 [DEBUG] [Thread-17942] [transport.py] [_log()] server lang: <none>
2025-11-12T15:10:57.822 [DEBUG] [Thread-17942] [transport.py] [_log()] kex follows: False
2025-11-12T15:10:57.822 [DEBUG] [Thread-17942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:10:57.822 [DEBUG] [Thread-17942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:10:57.822 [DEBUG] [Thread-17942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:10:57.822 [DEBUG] [Thread-17942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:10:57.822 [DEBUG] [Thread-17942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:10:57.823 [DEBUG] [Thread-17942] [transport.py] [_log()] Compression: none
2025-11-12T15:10:57.823 [DEBUG] [Thread-17942] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:10:57.884 [DEBUG] [Thread-17942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:10:57.885 [DEBUG] [Thread-17942] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:10:57.885 [DEBUG] [Thread-17942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:10:57.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:10:57.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:10:57.942 [DEBUG] [Thread-17942] [transport.py] [_log()] userauth is OK
2025-11-12T15:10:57.942 [DEBUG] [Thread-17942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:10:57.942 [DEBUG] [Thread-17942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:10:57.943 [DEBUG] [Thread-17942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:10:57.943 [DEBUG] [Thread-17942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:10:57.966 [INFO] [Thread-17942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:10:57.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:10:57.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:10:58.839 [DEBUG] [Thread-17942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:10:58.840 [DEBUG] [Thread-17942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:10:58.893 [DEBUG] [Thread-17942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:10:58.893 [DEBUG] [Thread-17942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:10:58.905 [DEBUG] [Thread-17942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:10:58.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:10:58.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:10:58.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:10:59.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:10:59.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:10:59.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:10:59.165 [DEBUG] [Thread-17942] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:11:01.271 [DEBUG] [Thread-17944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:11:16.323 [DEBUG] [Thread-17945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:11:29.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:11:29.179 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:11:29.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:11:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 11, 2), 32.62, 11.34, 0.0, 31.69, 27.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:11:29.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:11:02
2025-11-12T15:11:29.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:11:30.062 [DEBUG] [Thread-17946] [transport.py] [_log()] starting thread (client mode): 0x14961a80
2025-11-12T15:11:30.062 [DEBUG] [Thread-17946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:11:30.082 [DEBUG] [Thread-17946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:11:30.082 [INFO] [Thread-17946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] client lang: <none>
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] server lang: <none>
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] kex follows: False
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:11:30.085 [DEBUG] [Thread-17946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:11:30.086 [DEBUG] [Thread-17946] [transport.py] [_log()] Compression: none
2025-11-12T15:11:30.086 [DEBUG] [Thread-17946] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:11:30.093 [DEBUG] [Thread-17946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:11:30.094 [DEBUG] [Thread-17946] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:11:30.094 [DEBUG] [Thread-17946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:11:30.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:11:30.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:11:30.096 [DEBUG] [Thread-17946] [transport.py] [_log()] userauth is OK
2025-11-12T15:11:30.096 [DEBUG] [Thread-17946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:11:30.096 [DEBUG] [Thread-17946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:11:30.096 [DEBUG] [Thread-17946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:11:30.096 [DEBUG] [Thread-17946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:11:30.115 [INFO] [Thread-17946] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:11:30.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:11:30.728 [DEBUG] [Thread-17946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:11:30.728 [DEBUG] [Thread-17946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:11:30.729 [DEBUG] [Thread-17946] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:11:30.769 [DEBUG] [Thread-17946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:11:30.769 [DEBUG] [Thread-17946] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:11:30.772 [DEBUG] [Thread-17946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:11:30.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:11:30.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:11:30.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:11:30.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:11:30.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:11:30.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:11:30.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:11:30.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:11:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:11:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.549393 -999.00  +26.70  23.93     17   -0.30 1 1 1 1 1   888    0 25.87 -4.03 ----- 23.9 23.9 275.0 36.1 29.9 -24.9 29.4 -25.1 29.6 -22.7 30.2 -23.2
2025-11-12T15:11:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:11:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:11:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.549393
2025-11-12T15:11:30.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:11:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:11:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:11:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:11:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:11:30.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:11:02', tmtdew=32.62, humidity=11.34, cloud=0.0, wind=31.69, temperature=27.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:11:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:11:30.798 [DEBUG] [Thread-17946] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:11:30.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:11:30.899 [DEBUG] [Thread-17949] [transport.py] [_log()] starting thread (client mode): 0x173981f0
2025-11-12T15:11:30.899 [DEBUG] [Thread-17949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:11:30.914 [DEBUG] [Thread-17949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:11:30.914 [INFO] [Thread-17949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] client lang: <none>
2025-11-12T15:11:30.922 [DEBUG] [Thread-17949] [transport.py] [_log()] server lang: <none>
2025-11-12T15:11:30.923 [DEBUG] [Thread-17949] [transport.py] [_log()] kex follows: False
2025-11-12T15:11:30.923 [DEBUG] [Thread-17949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:11:30.923 [DEBUG] [Thread-17949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:11:30.923 [DEBUG] [Thread-17949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:11:30.923 [DEBUG] [Thread-17949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:11:30.923 [DEBUG] [Thread-17949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:11:30.923 [DEBUG] [Thread-17949] [transport.py] [_log()] Compression: none
2025-11-12T15:11:30.923 [DEBUG] [Thread-17949] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:11:30.979 [DEBUG] [Thread-17949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:11:30.979 [DEBUG] [Thread-17949] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:11:30.980 [DEBUG] [Thread-17949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:11:30.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:11:30.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:11:31.040 [DEBUG] [Thread-17949] [transport.py] [_log()] userauth is OK
2025-11-12T15:11:31.040 [DEBUG] [Thread-17949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:11:31.041 [DEBUG] [Thread-17949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:11:31.041 [DEBUG] [Thread-17949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:11:31.041 [DEBUG] [Thread-17949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:11:31.060 [INFO] [Thread-17949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:11:31.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:11:31.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:11:31.361 [DEBUG] [Thread-17951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:11:31.913 [DEBUG] [Thread-17949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:11:31.914 [DEBUG] [Thread-17949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:11:32.185 [DEBUG] [Thread-17949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:11:32.185 [DEBUG] [Thread-17949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:11:32.195 [DEBUG] [Thread-17949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:11:32.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:11:32.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:11:32.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-11-12T15:11:32.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:11:32.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:11:32.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:11:32.232 [DEBUG] [Thread-17949] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:11:34.002 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:11:34.003 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:11:37.864 [DEBUG] [Thread-17952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:11:46.407 [DEBUG] [Thread-17953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:12:01.441 [DEBUG] [Thread-17954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:12:02.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:12:02.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:12:02.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-11-12T15:12:02.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 11, 35), 33.07, 11.21, 0.0, 36.24, 27.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:12:02.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:11:35
2025-11-12T15:12:02.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:12:03.135 [DEBUG] [Thread-17955] [transport.py] [_log()] starting thread (client mode): 0x17361e40
2025-11-12T15:12:03.136 [DEBUG] [Thread-17955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:12:03.155 [DEBUG] [Thread-17955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:12:03.155 [INFO] [Thread-17955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] client lang: <none>
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] server lang: <none>
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] kex follows: False
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] Compression: none
2025-11-12T15:12:03.158 [DEBUG] [Thread-17955] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:12:03.174 [DEBUG] [Thread-17955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:12:03.175 [DEBUG] [Thread-17955] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:12:03.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:12:03.176 [DEBUG] [Thread-17955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:12:03.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:12:03.178 [DEBUG] [Thread-17955] [transport.py] [_log()] userauth is OK
2025-11-12T15:12:03.178 [DEBUG] [Thread-17955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:12:03.178 [DEBUG] [Thread-17955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:12:03.178 [DEBUG] [Thread-17955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:12:03.178 [DEBUG] [Thread-17955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:12:03.202 [INFO] [Thread-17955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:12:03.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:12:03.767 [DEBUG] [Thread-17955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:12:03.767 [DEBUG] [Thread-17955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:12:03.768 [DEBUG] [Thread-17955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:12:03.809 [DEBUG] [Thread-17955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:12:03.809 [DEBUG] [Thread-17955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:12:03.813 [DEBUG] [Thread-17955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:12:03.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:12:03.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:12:03.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:12:03.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:12:03.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:12:03.836 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:12:03.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:12:03.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:12:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:12:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.549740 -999.00  +26.90  17.87     16   -0.20 1 1 1 1 1   888    0 27.26 -2.42 ----- 17.9 17.9 281.3 34.8 29.9 -26.0 29.6 -23.8 29.8 -23.1 30.4 -24.1
2025-11-12T15:12:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:12:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:12:03.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.549740
2025-11-12T15:12:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:12:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:12:03.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:12:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:12:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:12:03.839 [DEBUG] [Thread-17955] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:12:03.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:11:35', tmtdew=33.07, humidity=11.21, cloud=0.0, wind=36.24, temperature=27.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:11:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:12:03.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:12:03.942 [DEBUG] [Thread-17958] [transport.py] [_log()] starting thread (client mode): 0x173f8730
2025-11-12T15:12:03.943 [DEBUG] [Thread-17958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:12:03.960 [DEBUG] [Thread-17958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:12:03.960 [INFO] [Thread-17958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:12:03.967 [DEBUG] [Thread-17958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:12:03.967 [DEBUG] [Thread-17958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:12:03.967 [DEBUG] [Thread-17958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:12:03.967 [DEBUG] [Thread-17958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:12:03.967 [DEBUG] [Thread-17958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:12:03.967 [DEBUG] [Thread-17958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] client lang: <none>
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] server lang: <none>
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] kex follows: False
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] Compression: none
2025-11-12T15:12:03.968 [DEBUG] [Thread-17958] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:12:04.033 [DEBUG] [Thread-17958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:12:04.033 [DEBUG] [Thread-17958] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:12:04.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:12:04.034 [DEBUG] [Thread-17958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:12:04.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:12:04.087 [DEBUG] [Thread-17958] [transport.py] [_log()] userauth is OK
2025-11-12T15:12:04.088 [DEBUG] [Thread-17958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:12:04.088 [DEBUG] [Thread-17958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:12:04.088 [DEBUG] [Thread-17958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:12:04.088 [DEBUG] [Thread-17958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:12:04.107 [INFO] [Thread-17958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:12:04.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:12:04.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:12:04.982 [DEBUG] [Thread-17958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:12:04.982 [DEBUG] [Thread-17958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:12:05.031 [DEBUG] [Thread-17958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:12:05.031 [DEBUG] [Thread-17958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:12:05.040 [DEBUG] [Thread-17958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:12:05.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:12:05.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-11-12T15:12:05.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-11-12T15:12:05.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:12:05.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:12:05.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:12:05.082 [DEBUG] [Thread-17958] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:12:16.482 [DEBUG] [Thread-17960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:12:31.532 [DEBUG] [Thread-17961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:12:34.147 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:12:34.148 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:12:35.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:12:35.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:12:35.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-11-12T15:12:35.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 12, 7), 32.9, 11.33, 0.0, 33.65, 27.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:12:35.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:12:07
2025-11-12T15:12:35.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:12:35.993 [DEBUG] [Thread-17962] [transport.py] [_log()] starting thread (client mode): 0x173be950
2025-11-12T15:12:35.993 [DEBUG] [Thread-17962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:12:36.013 [DEBUG] [Thread-17962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:12:36.014 [INFO] [Thread-17962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] client lang: <none>
2025-11-12T15:12:36.016 [DEBUG] [Thread-17962] [transport.py] [_log()] server lang: <none>
2025-11-12T15:12:36.017 [DEBUG] [Thread-17962] [transport.py] [_log()] kex follows: False
2025-11-12T15:12:36.017 [DEBUG] [Thread-17962] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:12:36.017 [DEBUG] [Thread-17962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:12:36.017 [DEBUG] [Thread-17962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:12:36.017 [DEBUG] [Thread-17962] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:12:36.017 [DEBUG] [Thread-17962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:12:36.017 [DEBUG] [Thread-17962] [transport.py] [_log()] Compression: none
2025-11-12T15:12:36.017 [DEBUG] [Thread-17962] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:12:36.034 [DEBUG] [Thread-17962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:12:36.035 [DEBUG] [Thread-17962] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:12:36.035 [DEBUG] [Thread-17962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:12:36.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:12:36.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:12:36.037 [DEBUG] [Thread-17962] [transport.py] [_log()] userauth is OK
2025-11-12T15:12:36.038 [DEBUG] [Thread-17962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:12:36.038 [DEBUG] [Thread-17962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:12:36.038 [DEBUG] [Thread-17962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:12:36.038 [DEBUG] [Thread-17962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:12:36.072 [INFO] [Thread-17962] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:12:36.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:12:36.711 [DEBUG] [Thread-17962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:12:36.711 [DEBUG] [Thread-17962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:12:36.712 [DEBUG] [Thread-17962] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:12:36.752 [DEBUG] [Thread-17962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:12:36.752 [DEBUG] [Thread-17962] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:12:36.755 [DEBUG] [Thread-17962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:12:36.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:12:36.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:12:36.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:12:36.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:12:36.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:12:36.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:12:36.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:12:36.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:12:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:12:36.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.550087 -999.00  +27.00  22.71     16   -0.10 1 1 1 1 1   888    0 26.25 1.37 ----- 22.7 22.7 267.6 33.2 30.1 -24.2 29.8 -23.8 29.9 -25.2 30.6 -24.4
2025-11-12T15:12:36.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:12:36.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:12:36.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.550087
2025-11-12T15:12:36.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:12:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:12:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:12:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:12:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:12:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:12:07', tmtdew=32.9, humidity=11.33, cloud=0.0, wind=33.65, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:12:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:12:36.784 [DEBUG] [Thread-17962] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:12:36.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:12:36.877 [DEBUG] [Thread-17965] [transport.py] [_log()] starting thread (client mode): 0x14980c10
2025-11-12T15:12:36.877 [DEBUG] [Thread-17965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:12:36.895 [DEBUG] [Thread-17965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:12:36.895 [INFO] [Thread-17965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:12:36.903 [DEBUG] [Thread-17965] [transport.py] [_log()] client lang: <none>
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] server lang: <none>
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] kex follows: False
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] Compression: none
2025-11-12T15:12:36.904 [DEBUG] [Thread-17965] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:12:36.960 [DEBUG] [Thread-17965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:12:36.961 [DEBUG] [Thread-17965] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:12:36.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:12:36.962 [DEBUG] [Thread-17965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:12:36.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:12:37.016 [DEBUG] [Thread-17965] [transport.py] [_log()] userauth is OK
2025-11-12T15:12:37.017 [DEBUG] [Thread-17965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:12:37.017 [DEBUG] [Thread-17965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:12:37.017 [DEBUG] [Thread-17965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:12:37.017 [DEBUG] [Thread-17965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:12:37.036 [INFO] [Thread-17965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:12:37.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:12:37.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:12:37.867 [DEBUG] [Thread-17965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:12:37.867 [DEBUG] [Thread-17965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:12:37.900 [DEBUG] [Thread-17967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:12:37.914 [DEBUG] [Thread-17965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:12:37.914 [DEBUG] [Thread-17965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:12:38.141 [DEBUG] [Thread-17965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:12:38.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:12:38.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-11-12T15:12:38.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-11-12T15:12:38.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:12:38.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:12:38.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:12:38.180 [DEBUG] [Thread-17965] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:12:46.572 [DEBUG] [Thread-17968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:13:01.621 [DEBUG] [Thread-17969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:13:08.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:13:08.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:13:08.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-11-12T15:13:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 12, 39), 32.51, 11.43, 0.0, 33.0, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:13:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:12:39
2025-11-12T15:13:08.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:13:09.092 [DEBUG] [Thread-17970] [transport.py] [_log()] starting thread (client mode): 0x1739ab00
2025-11-12T15:13:09.093 [DEBUG] [Thread-17970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:13:09.116 [DEBUG] [Thread-17970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:13:09.117 [INFO] [Thread-17970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] client lang: <none>
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] server lang: <none>
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] kex follows: False
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] Compression: none
2025-11-12T15:13:09.120 [DEBUG] [Thread-17970] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:13:09.137 [DEBUG] [Thread-17970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:13:09.138 [DEBUG] [Thread-17970] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:13:09.138 [DEBUG] [Thread-17970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:13:09.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:13:09.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:13:09.140 [DEBUG] [Thread-17970] [transport.py] [_log()] userauth is OK
2025-11-12T15:13:09.140 [DEBUG] [Thread-17970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:13:09.141 [DEBUG] [Thread-17970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:13:09.141 [DEBUG] [Thread-17970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:13:09.141 [DEBUG] [Thread-17970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:13:09.159 [INFO] [Thread-17970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:13:09.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:13:09.791 [DEBUG] [Thread-17970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:13:09.791 [DEBUG] [Thread-17970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:13:09.792 [DEBUG] [Thread-17970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:13:09.832 [DEBUG] [Thread-17970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:13:09.832 [DEBUG] [Thread-17970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:13:09.836 [DEBUG] [Thread-17970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:13:09.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:13:09.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:13:09.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:13:09.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:13:09.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:13:09.869 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:13:09.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:13:09.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:13:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:13:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.550435 -999.00  +27.40  29.17     16   +0.00 1 2 1 1 1   888    0 26.52 7.49 ----- 29.2 29.2 273.8 39.4 30.4 -23.1 29.9 -23.4 30.2 -21.4 30.9 -21.6
2025-11-12T15:13:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:13:09.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:13:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.550435
2025-11-12T15:13:09.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:13:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:13:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:13:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:13:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T15:13:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:12:39', tmtdew=32.51, humidity=11.43, cloud=0.0, wind=33.0, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:12:37.584', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:13:09.872 [DEBUG] [Thread-17970] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:13:09.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:13:09.969 [DEBUG] [Thread-17973] [transport.py] [_log()] starting thread (client mode): 0x17398f10
2025-11-12T15:13:09.969 [DEBUG] [Thread-17973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:13:09.983 [DEBUG] [Thread-17973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:13:09.984 [INFO] [Thread-17973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:13:09.991 [DEBUG] [Thread-17973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:13:09.991 [DEBUG] [Thread-17973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] client lang: <none>
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] server lang: <none>
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] kex follows: False
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] Compression: none
2025-11-12T15:13:09.992 [DEBUG] [Thread-17973] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:13:10.048 [DEBUG] [Thread-17973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:13:10.049 [DEBUG] [Thread-17973] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:13:10.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:13:10.050 [DEBUG] [Thread-17973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:13:10.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:13:10.108 [DEBUG] [Thread-17973] [transport.py] [_log()] userauth is OK
2025-11-12T15:13:10.108 [DEBUG] [Thread-17973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:13:10.108 [DEBUG] [Thread-17973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:13:10.109 [DEBUG] [Thread-17973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:13:10.109 [DEBUG] [Thread-17973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:13:10.128 [INFO] [Thread-17973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:13:10.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:13:10.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:13:10.982 [DEBUG] [Thread-17973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:13:10.982 [DEBUG] [Thread-17973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:13:11.030 [DEBUG] [Thread-17973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:13:11.030 [DEBUG] [Thread-17973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:13:11.045 [DEBUG] [Thread-17973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:13:11.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:13:11.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-11-12T15:13:11.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-11-12T15:13:11.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:13:11.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:13:11.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:13:11.085 [DEBUG] [Thread-17973] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:13:16.653 [DEBUG] [Thread-17975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:13:31.707 [DEBUG] [Thread-17976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:13:34.289 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:13:34.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:13:37.927 [DEBUG] [Thread-17977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:13:41.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:13:41.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:13:41.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:13:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 13, 11), 32.69, 11.33, 0.0, 37.83, 27.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:13:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:13:11
2025-11-12T15:13:41.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:13:42.016 [DEBUG] [Thread-17978] [transport.py] [_log()] starting thread (client mode): 0x1493dea0
2025-11-12T15:13:42.016 [DEBUG] [Thread-17978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:13:42.035 [DEBUG] [Thread-17978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:13:42.035 [INFO] [Thread-17978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:13:42.038 [DEBUG] [Thread-17978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] client lang: <none>
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] server lang: <none>
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] kex follows: False
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] Compression: none
2025-11-12T15:13:42.039 [DEBUG] [Thread-17978] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:13:42.057 [DEBUG] [Thread-17978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:13:42.057 [DEBUG] [Thread-17978] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:13:42.057 [DEBUG] [Thread-17978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:13:42.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:13:42.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:13:42.058 [DEBUG] [Thread-17978] [transport.py] [_log()] userauth is OK
2025-11-12T15:13:42.058 [DEBUG] [Thread-17978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:13:42.058 [DEBUG] [Thread-17978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:13:42.058 [DEBUG] [Thread-17978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:13:42.058 [DEBUG] [Thread-17978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:13:42.068 [INFO] [Thread-17978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:13:42.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:13:42.677 [DEBUG] [Thread-17978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:13:42.677 [DEBUG] [Thread-17978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:13:42.677 [DEBUG] [Thread-17978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:13:42.718 [DEBUG] [Thread-17978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:13:42.718 [DEBUG] [Thread-17978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:13:42.721 [DEBUG] [Thread-17978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:13:42.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:13:42.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:13:42.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:13:42.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:13:42.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:13:42.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:13:42.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.550782 -999.00  +27.70  31.72     16   +0.30 1 2 2 1 1   888    0 26.45 15.40 ----- 31.7 31.7 297.0 37.3 30.5 -24.6 30.1 -23.1 30.5 -22.5 31.1 -22.9
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.550782
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T15:13:42.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:13:11', tmtdew=32.69, humidity=11.33, cloud=0.0, wind=37.83, temperature=27.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:13:07.565', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:13:42.738 [DEBUG] [Thread-17978] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:13:42.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:13:42.825 [DEBUG] [Thread-17981] [transport.py] [_log()] starting thread (client mode): 0x173eb400
2025-11-12T15:13:42.825 [DEBUG] [Thread-17981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:13:42.839 [DEBUG] [Thread-17981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:13:42.840 [INFO] [Thread-17981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] client lang: <none>
2025-11-12T15:13:42.847 [DEBUG] [Thread-17981] [transport.py] [_log()] server lang: <none>
2025-11-12T15:13:42.848 [DEBUG] [Thread-17981] [transport.py] [_log()] kex follows: False
2025-11-12T15:13:42.848 [DEBUG] [Thread-17981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:13:42.848 [DEBUG] [Thread-17981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:13:42.848 [DEBUG] [Thread-17981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:13:42.848 [DEBUG] [Thread-17981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:13:42.848 [DEBUG] [Thread-17981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:13:42.848 [DEBUG] [Thread-17981] [transport.py] [_log()] Compression: none
2025-11-12T15:13:42.848 [DEBUG] [Thread-17981] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:13:42.904 [DEBUG] [Thread-17981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:13:42.904 [DEBUG] [Thread-17981] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:13:42.905 [DEBUG] [Thread-17981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:13:42.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:13:42.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:13:42.960 [DEBUG] [Thread-17981] [transport.py] [_log()] userauth is OK
2025-11-12T15:13:42.960 [DEBUG] [Thread-17981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:13:42.961 [DEBUG] [Thread-17981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:13:42.961 [DEBUG] [Thread-17981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:13:42.961 [DEBUG] [Thread-17981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:13:42.980 [INFO] [Thread-17981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:13:42.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:13:42.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:13:43.818 [DEBUG] [Thread-17981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:13:43.818 [DEBUG] [Thread-17981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:13:43.866 [DEBUG] [Thread-17981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:13:43.866 [DEBUG] [Thread-17981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:13:43.874 [DEBUG] [Thread-17981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:13:43.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:13:43.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:13:43.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:13:43.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:13:43.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:13:43.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:13:43.906 [DEBUG] [Thread-17981] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:13:46.739 [DEBUG] [Thread-17983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:14:01.795 [DEBUG] [Thread-17984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:14:13.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:14:13.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:14:13.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-11-12T15:14:14.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 13, 42), 32.9, 10.99, 0.0, 41.04, 27.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:14:14.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:13:42
2025-11-12T15:14:14.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:14:14.822 [DEBUG] [Thread-17985] [transport.py] [_log()] starting thread (client mode): 0x1493c430
2025-11-12T15:14:14.822 [DEBUG] [Thread-17985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:14:14.833 [DEBUG] [Thread-17985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:14:14.833 [INFO] [Thread-17985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] client lang: <none>
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] server lang: <none>
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] kex follows: False
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:14:14.836 [DEBUG] [Thread-17985] [transport.py] [_log()] Compression: none
2025-11-12T15:14:14.837 [DEBUG] [Thread-17985] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:14:14.858 [DEBUG] [Thread-17985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:14:14.858 [DEBUG] [Thread-17985] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:14:14.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:14:14.859 [DEBUG] [Thread-17985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:14:14.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:14:14.860 [DEBUG] [Thread-17985] [transport.py] [_log()] userauth is OK
2025-11-12T15:14:14.860 [DEBUG] [Thread-17985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:14:14.860 [DEBUG] [Thread-17985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:14:14.861 [DEBUG] [Thread-17985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:14:14.861 [DEBUG] [Thread-17985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:14:14.880 [INFO] [Thread-17985] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:14:14.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:14:15.488 [DEBUG] [Thread-17985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:14:15.488 [DEBUG] [Thread-17985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:14:15.488 [DEBUG] [Thread-17985] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:14:15.529 [DEBUG] [Thread-17985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:14:15.529 [DEBUG] [Thread-17985] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:14:15.531 [DEBUG] [Thread-17985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:14:15.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:14:15.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:14:15.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:14:15.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:14:15.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:14:15.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:14:15.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.551129 -999.00  +27.30  35.16     16   +0.00 1 1 2 1 1   888    0 27.38 21.64 ----- 35.2 35.2 282.6 51.4 30.4 -27.0 30.2 -24.9 30.4 -26.1 31.2 -24.8
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.551129
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:14:15.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:13:42', tmtdew=32.9, humidity=10.99, cloud=0.0, wind=41.04, temperature=27.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:13:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:14:15.552 [DEBUG] [Thread-17985] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:14:15.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:14:15.637 [DEBUG] [Thread-17988] [transport.py] [_log()] starting thread (client mode): 0x1493fd30
2025-11-12T15:14:15.637 [DEBUG] [Thread-17988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:14:15.655 [DEBUG] [Thread-17988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:14:15.655 [INFO] [Thread-17988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] client lang: <none>
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] server lang: <none>
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] kex follows: False
2025-11-12T15:14:15.662 [DEBUG] [Thread-17988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:14:15.663 [DEBUG] [Thread-17988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:14:15.663 [DEBUG] [Thread-17988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:14:15.663 [DEBUG] [Thread-17988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:14:15.663 [DEBUG] [Thread-17988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:14:15.663 [DEBUG] [Thread-17988] [transport.py] [_log()] Compression: none
2025-11-12T15:14:15.663 [DEBUG] [Thread-17988] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:14:15.718 [DEBUG] [Thread-17988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:14:15.718 [DEBUG] [Thread-17988] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:14:15.719 [DEBUG] [Thread-17988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:14:15.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:14:15.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:14:15.776 [DEBUG] [Thread-17988] [transport.py] [_log()] userauth is OK
2025-11-12T15:14:15.776 [DEBUG] [Thread-17988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:14:15.776 [DEBUG] [Thread-17988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:14:15.776 [DEBUG] [Thread-17988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:14:15.776 [DEBUG] [Thread-17988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:14:15.795 [INFO] [Thread-17988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:14:15.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:14:15.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:14:16.621 [DEBUG] [Thread-17988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:14:16.621 [DEBUG] [Thread-17988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:14:16.672 [DEBUG] [Thread-17988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:14:16.672 [DEBUG] [Thread-17988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:14:16.680 [DEBUG] [Thread-17988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:14:16.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:14:16.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-11-12T15:14:16.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-11-12T15:14:16.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:14:16.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:14:16.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:14:16.712 [DEBUG] [Thread-17988] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:14:16.829 [DEBUG] [Thread-17990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:14:31.867 [DEBUG] [Thread-17991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:14:34.431 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:14:34.432 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:14:37.967 [DEBUG] [Thread-17992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:14:46.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:14:46.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:14:46.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-11-12T15:14:46.901 [DEBUG] [Thread-17993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:14:47.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 14, 14), 32.94, 10.94, 0.0, 39.63, 27.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:14:47.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:14:14
2025-11-12T15:14:47.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:14:47.639 [DEBUG] [Thread-17994] [transport.py] [_log()] starting thread (client mode): 0x1737de40
2025-11-12T15:14:47.639 [DEBUG] [Thread-17994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:14:47.659 [DEBUG] [Thread-17994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:14:47.659 [INFO] [Thread-17994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] client lang: <none>
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] server lang: <none>
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] kex follows: False
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] Compression: none
2025-11-12T15:14:47.663 [DEBUG] [Thread-17994] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:14:47.679 [DEBUG] [Thread-17994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:14:47.679 [DEBUG] [Thread-17994] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:14:47.679 [DEBUG] [Thread-17994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:14:47.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:14:47.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:14:47.680 [DEBUG] [Thread-17994] [transport.py] [_log()] userauth is OK
2025-11-12T15:14:47.680 [DEBUG] [Thread-17994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:14:47.680 [DEBUG] [Thread-17994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:14:47.680 [DEBUG] [Thread-17994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:14:47.680 [DEBUG] [Thread-17994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:14:47.696 [INFO] [Thread-17994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:14:47.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:14:48.344 [DEBUG] [Thread-17994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:14:48.344 [DEBUG] [Thread-17994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:14:48.344 [DEBUG] [Thread-17994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:14:48.385 [DEBUG] [Thread-17994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:14:48.385 [DEBUG] [Thread-17994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:14:48.387 [DEBUG] [Thread-17994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:14:48.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:14:48.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:14:48.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:14:48.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:14:48.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:14:48.405 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:14:48.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.551476 -999.00  +27.10  27.48     17   +0.00 1 1 1 1 1   888    0 27.14 23.10 ----- 27.5 27.5 285.0 38.1 30.4 -26.5 30.2 -24.6 30.4 -26.3 31.2 -24.0
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.551476
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:14:48.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:14:14', tmtdew=32.94, humidity=10.94, cloud=0.0, wind=39.63, temperature=27.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:14:07.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:14:48.406 [DEBUG] [Thread-17994] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:14:48.480 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:14:48.492 [DEBUG] [Thread-17997] [transport.py] [_log()] starting thread (client mode): 0x173be950
2025-11-12T15:14:48.492 [DEBUG] [Thread-17997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:14:48.508 [DEBUG] [Thread-17997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:14:48.508 [INFO] [Thread-17997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] client lang: <none>
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] server lang: <none>
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] kex follows: False
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] Compression: none
2025-11-12T15:14:48.516 [DEBUG] [Thread-17997] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:14:48.579 [DEBUG] [Thread-17997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:14:48.579 [DEBUG] [Thread-17997] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:14:48.580 [DEBUG] [Thread-17997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:14:48.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:14:48.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:14:48.636 [DEBUG] [Thread-17997] [transport.py] [_log()] userauth is OK
2025-11-12T15:14:48.636 [DEBUG] [Thread-17997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:14:48.636 [DEBUG] [Thread-17997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:14:48.636 [DEBUG] [Thread-17997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:14:48.636 [DEBUG] [Thread-17997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:14:48.650 [INFO] [Thread-17997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:14:48.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:14:48.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:14:49.498 [DEBUG] [Thread-17997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:14:49.498 [DEBUG] [Thread-17997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:14:49.545 [DEBUG] [Thread-17997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:14:49.546 [DEBUG] [Thread-17997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:14:49.555 [DEBUG] [Thread-17997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:14:49.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:14:49.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-11-12T15:14:49.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-11-12T15:14:49.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:14:49.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:14:49.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:14:49.593 [DEBUG] [Thread-17997] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:15:01.931 [DEBUG] [Thread-17999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:15:16.975 [DEBUG] [Thread-18000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:15:19.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:15:19.613 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:15:19.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-11-12T15:15:20.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 14, 47), 32.3, 11.53, 0.0, 37.62, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:15:20.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:14:47
2025-11-12T15:15:20.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:15:20.584 [DEBUG] [Thread-18001] [transport.py] [_log()] starting thread (client mode): 0x173998a0
2025-11-12T15:15:20.584 [DEBUG] [Thread-18001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:15:20.604 [DEBUG] [Thread-18001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:15:20.604 [INFO] [Thread-18001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] client lang: <none>
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] server lang: <none>
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] kex follows: False
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] Compression: none
2025-11-12T15:15:20.607 [DEBUG] [Thread-18001] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:15:20.627 [DEBUG] [Thread-18001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:15:20.627 [DEBUG] [Thread-18001] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:15:20.627 [DEBUG] [Thread-18001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:15:20.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:15:20.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:15:20.628 [DEBUG] [Thread-18001] [transport.py] [_log()] userauth is OK
2025-11-12T15:15:20.628 [DEBUG] [Thread-18001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:15:20.628 [DEBUG] [Thread-18001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:15:20.628 [DEBUG] [Thread-18001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:15:20.628 [DEBUG] [Thread-18001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:15:20.636 [INFO] [Thread-18001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:15:20.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:15:21.401 [DEBUG] [Thread-18001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:15:21.401 [DEBUG] [Thread-18001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:15:21.401 [DEBUG] [Thread-18001] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:15:21.442 [DEBUG] [Thread-18001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:15:21.442 [DEBUG] [Thread-18001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:15:21.445 [DEBUG] [Thread-18001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:15:21.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:15:21.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:15:21.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:15:21.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:15:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:15:21.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:15:21.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:15:21.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:15:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:15:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.551824 -999.00  +27.10  24.18     17   +0.20 1 1 1 1 1   888    0 27.76 23.92 ----- 24.2 24.2 282.3 36.1 30.6 -24.8 30.2 -24.7 30.4 -23.9 31.3 -23.7
2025-11-12T15:15:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:15:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:15:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.551824
2025-11-12T15:15:21.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:15:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:15:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:15:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:15:21.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:15:21.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:14:47', tmtdew=32.3, humidity=11.53, cloud=0.0, wind=37.62, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:14:37.594', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:15:21.496 [DEBUG] [Thread-18001] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:15:21.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:15:21.591 [DEBUG] [Thread-18004] [transport.py] [_log()] starting thread (client mode): 0x17398250
2025-11-12T15:15:21.591 [DEBUG] [Thread-18004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:15:21.609 [DEBUG] [Thread-18004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:15:21.609 [INFO] [Thread-18004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] client lang: <none>
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] server lang: <none>
2025-11-12T15:15:21.617 [DEBUG] [Thread-18004] [transport.py] [_log()] kex follows: False
2025-11-12T15:15:21.618 [DEBUG] [Thread-18004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:15:21.618 [DEBUG] [Thread-18004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:15:21.618 [DEBUG] [Thread-18004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:15:21.618 [DEBUG] [Thread-18004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:15:21.618 [DEBUG] [Thread-18004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:15:21.618 [DEBUG] [Thread-18004] [transport.py] [_log()] Compression: none
2025-11-12T15:15:21.618 [DEBUG] [Thread-18004] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:15:21.676 [DEBUG] [Thread-18004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:15:21.677 [DEBUG] [Thread-18004] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:15:21.678 [DEBUG] [Thread-18004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:15:21.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:15:21.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:15:21.733 [DEBUG] [Thread-18004] [transport.py] [_log()] userauth is OK
2025-11-12T15:15:21.733 [DEBUG] [Thread-18004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:15:21.733 [DEBUG] [Thread-18004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:15:21.733 [DEBUG] [Thread-18004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:15:21.733 [DEBUG] [Thread-18004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:15:21.751 [INFO] [Thread-18004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:15:21.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:15:21.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:15:22.572 [DEBUG] [Thread-18004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:15:22.572 [DEBUG] [Thread-18004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:15:22.621 [DEBUG] [Thread-18004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:15:22.621 [DEBUG] [Thread-18004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:15:22.630 [DEBUG] [Thread-18004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:15:22.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:15:22.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-11-12T15:15:22.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-11-12T15:15:22.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:15:22.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:15:22.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:15:22.665 [DEBUG] [Thread-18004] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:15:32.016 [DEBUG] [Thread-18006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:15:34.575 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:15:34.576 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:15:37.995 [DEBUG] [Thread-18007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:15:47.067 [DEBUG] [Thread-18008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:15:52.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:15:52.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:15:52.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-11-12T15:15:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 15, 19), 32.39, 11.48, 0.0, 38.5, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:15:53.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:15:19
2025-11-12T15:15:53.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:15:53.603 [DEBUG] [Thread-18009] [transport.py] [_log()] starting thread (client mode): 0x1737dd20
2025-11-12T15:15:53.603 [DEBUG] [Thread-18009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:15:53.623 [DEBUG] [Thread-18009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:15:53.623 [INFO] [Thread-18009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:15:53.626 [DEBUG] [Thread-18009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:15:53.626 [DEBUG] [Thread-18009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:15:53.626 [DEBUG] [Thread-18009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:15:53.626 [DEBUG] [Thread-18009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] client lang: <none>
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] server lang: <none>
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] kex follows: False
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] Compression: none
2025-11-12T15:15:53.627 [DEBUG] [Thread-18009] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:15:53.647 [DEBUG] [Thread-18009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:15:53.648 [DEBUG] [Thread-18009] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:15:53.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:15:53.649 [DEBUG] [Thread-18009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:15:53.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:15:53.689 [DEBUG] [Thread-18009] [transport.py] [_log()] userauth is OK
2025-11-12T15:15:53.689 [DEBUG] [Thread-18009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:15:53.690 [DEBUG] [Thread-18009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:15:53.690 [DEBUG] [Thread-18009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:15:53.690 [DEBUG] [Thread-18009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:15:53.711 [INFO] [Thread-18009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:15:53.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:15:54.352 [DEBUG] [Thread-18009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:15:54.352 [DEBUG] [Thread-18009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:15:54.353 [DEBUG] [Thread-18009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:15:54.394 [DEBUG] [Thread-18009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:15:54.394 [DEBUG] [Thread-18009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:15:54.397 [DEBUG] [Thread-18009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:15:54.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:15:54.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:15:54.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:15:54.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:15:54.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:15:54.422 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:15:54.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:15:54.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:15:54.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:15:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.552518 -999.00  +26.50  32.92     18   +0.50 1 1 2 1 1   888    0 26.35 13.33 ----- 32.9 32.9 277.1 38.3 30.4 -25.6 30.2 -25.2 30.2 -28.4 31.1 -26.6
2025-11-12T15:15:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:15:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:15:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.552518
2025-11-12T15:15:54.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:15:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:15:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:15:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:15:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:15:54.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:15:19', tmtdew=32.39, humidity=11.48, cloud=0.0, wind=38.5, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:15:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:15:54.426 [DEBUG] [Thread-18009] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:15:54.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:15:54.521 [DEBUG] [Thread-18012] [transport.py] [_log()] starting thread (client mode): 0x14982e60
2025-11-12T15:15:54.521 [DEBUG] [Thread-18012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:15:54.536 [DEBUG] [Thread-18012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:15:54.537 [INFO] [Thread-18012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:15:54.546 [DEBUG] [Thread-18012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:15:54.546 [DEBUG] [Thread-18012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:15:54.546 [DEBUG] [Thread-18012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:15:54.546 [DEBUG] [Thread-18012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] client lang: <none>
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] server lang: <none>
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] kex follows: False
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:15:54.547 [DEBUG] [Thread-18012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:15:54.548 [DEBUG] [Thread-18012] [transport.py] [_log()] Compression: none
2025-11-12T15:15:54.548 [DEBUG] [Thread-18012] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:15:54.604 [DEBUG] [Thread-18012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:15:54.605 [DEBUG] [Thread-18012] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:15:54.606 [DEBUG] [Thread-18012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:15:54.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:15:54.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:15:54.661 [DEBUG] [Thread-18012] [transport.py] [_log()] userauth is OK
2025-11-12T15:15:54.661 [DEBUG] [Thread-18012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:15:54.661 [DEBUG] [Thread-18012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:15:54.661 [DEBUG] [Thread-18012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:15:54.661 [DEBUG] [Thread-18012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:15:54.681 [INFO] [Thread-18012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:15:54.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:15:54.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:15:55.544 [DEBUG] [Thread-18012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:15:55.544 [DEBUG] [Thread-18012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:15:55.592 [DEBUG] [Thread-18012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:15:55.592 [DEBUG] [Thread-18012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:15:55.601 [DEBUG] [Thread-18012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:15:55.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:15:55.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-11-12T15:15:55.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:15:55.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:15:55.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:15:55.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:15:55.647 [DEBUG] [Thread-18012] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:16:02.104 [DEBUG] [Thread-18014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:16:17.154 [DEBUG] [Thread-18015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:16:25.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:16:25.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:16:25.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-11-12T15:16:26.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 16, 23), 31.31, 12.37, 0.0, 33.4, 27.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:16:26.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:16:23
2025-11-12T15:16:26.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:16:26.573 [DEBUG] [Thread-18016] [transport.py] [_log()] starting thread (client mode): 0x149a8040
2025-11-12T15:16:26.573 [DEBUG] [Thread-18016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:16:26.603 [DEBUG] [Thread-18016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:16:26.603 [INFO] [Thread-18016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:16:26.604 [DEBUG] [Thread-18016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] client lang: <none>
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] server lang: <none>
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] kex follows: False
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] Compression: none
2025-11-12T15:16:26.605 [DEBUG] [Thread-18016] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:16:26.614 [DEBUG] [Thread-18016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:16:26.615 [DEBUG] [Thread-18016] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:16:26.615 [DEBUG] [Thread-18016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:16:26.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:16:26.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:16:26.617 [DEBUG] [Thread-18016] [transport.py] [_log()] userauth is OK
2025-11-12T15:16:26.618 [DEBUG] [Thread-18016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:16:26.618 [DEBUG] [Thread-18016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:16:26.618 [DEBUG] [Thread-18016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:16:26.618 [DEBUG] [Thread-18016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:16:26.643 [INFO] [Thread-18016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:16:26.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:16:27.198 [DEBUG] [Thread-18016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:16:27.199 [DEBUG] [Thread-18016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:16:27.199 [DEBUG] [Thread-18016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:16:27.239 [DEBUG] [Thread-18016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:16:27.240 [DEBUG] [Thread-18016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:16:27.245 [DEBUG] [Thread-18016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:16:27.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:16:27.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:16:27.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:16:27.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:16:27.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:16:27.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:16:27.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:16:27.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:16:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:16:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.552865 -999.00  +26.70  37.35     18   +0.40 1 1 2 1 1   888    0 26.87 8.26 ----- 37.4 37.4 276.0 42.2 30.4 -27.1 30.2 -24.8 30.4 -26.4 31.1 -25.1
2025-11-12T15:16:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:16:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:16:27.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.552865
2025-11-12T15:16:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:16:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:16:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:16:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:16:27.274 [DEBUG] [Thread-18016] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:16:27.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:16:27.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:16:23', tmtdew=31.31, humidity=12.37, cloud=0.0, wind=33.4, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:16:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:16:27.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:16:27.371 [DEBUG] [Thread-18019] [transport.py] [_log()] starting thread (client mode): 0x14955de0
2025-11-12T15:16:27.371 [DEBUG] [Thread-18019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:16:27.386 [DEBUG] [Thread-18019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:16:27.386 [INFO] [Thread-18019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] client lang: <none>
2025-11-12T15:16:27.394 [DEBUG] [Thread-18019] [transport.py] [_log()] server lang: <none>
2025-11-12T15:16:27.395 [DEBUG] [Thread-18019] [transport.py] [_log()] kex follows: False
2025-11-12T15:16:27.395 [DEBUG] [Thread-18019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:16:27.395 [DEBUG] [Thread-18019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:16:27.395 [DEBUG] [Thread-18019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:16:27.395 [DEBUG] [Thread-18019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:16:27.395 [DEBUG] [Thread-18019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:16:27.395 [DEBUG] [Thread-18019] [transport.py] [_log()] Compression: none
2025-11-12T15:16:27.395 [DEBUG] [Thread-18019] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:16:27.453 [DEBUG] [Thread-18019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:16:27.453 [DEBUG] [Thread-18019] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:16:27.454 [DEBUG] [Thread-18019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:16:27.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:16:27.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:16:27.513 [DEBUG] [Thread-18019] [transport.py] [_log()] userauth is OK
2025-11-12T15:16:27.513 [DEBUG] [Thread-18019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:16:27.513 [DEBUG] [Thread-18019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:16:27.513 [DEBUG] [Thread-18019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:16:27.513 [DEBUG] [Thread-18019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:16:27.532 [INFO] [Thread-18019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:16:27.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:16:27.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:16:28.406 [DEBUG] [Thread-18019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:16:28.406 [DEBUG] [Thread-18019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:16:28.453 [DEBUG] [Thread-18019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:16:28.453 [DEBUG] [Thread-18019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:16:28.462 [DEBUG] [Thread-18019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:16:28.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:16:28.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-11-12T15:16:28.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:16:28.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:16:28.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:16:28.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:16:28.497 [DEBUG] [Thread-18019] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:16:32.194 [DEBUG] [Thread-18021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:16:34.716 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:16:34.717 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:16:38.028 [DEBUG] [Thread-18022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:16:47.246 [DEBUG] [Thread-18023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:16:58.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:16:58.519 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:16:58.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-11-12T15:16:59.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 16, 55), 31.65, 12.22, 0.0, 37.21, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:16:59.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:16:55
2025-11-12T15:16:59.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:16:59.435 [DEBUG] [Thread-18024] [transport.py] [_log()] starting thread (client mode): 0x149a8c70
2025-11-12T15:16:59.435 [DEBUG] [Thread-18024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:16:59.455 [DEBUG] [Thread-18024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:16:59.456 [INFO] [Thread-18024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:16:59.458 [DEBUG] [Thread-18024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:16:59.458 [DEBUG] [Thread-18024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] client lang: <none>
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] server lang: <none>
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] kex follows: False
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:16:59.459 [DEBUG] [Thread-18024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:16:59.460 [DEBUG] [Thread-18024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:16:59.460 [DEBUG] [Thread-18024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:16:59.460 [DEBUG] [Thread-18024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:16:59.460 [DEBUG] [Thread-18024] [transport.py] [_log()] Compression: none
2025-11-12T15:16:59.460 [DEBUG] [Thread-18024] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:16:59.479 [DEBUG] [Thread-18024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:16:59.480 [DEBUG] [Thread-18024] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:16:59.481 [DEBUG] [Thread-18024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:16:59.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:16:59.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:16:59.525 [DEBUG] [Thread-18024] [transport.py] [_log()] userauth is OK
2025-11-12T15:16:59.526 [DEBUG] [Thread-18024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:16:59.526 [DEBUG] [Thread-18024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:16:59.526 [DEBUG] [Thread-18024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:16:59.526 [DEBUG] [Thread-18024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:16:59.551 [INFO] [Thread-18024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:16:59.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:17:00.157 [DEBUG] [Thread-18024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:17:00.158 [DEBUG] [Thread-18024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:17:00.158 [DEBUG] [Thread-18024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:17:00.198 [DEBUG] [Thread-18024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:17:00.199 [DEBUG] [Thread-18024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:17:00.202 [DEBUG] [Thread-18024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:17:00.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:17:00.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:17:00.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:17:00.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:17:00.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:17:00.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:17:00.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:17:00.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:17:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:17:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.553212 -999.00  +26.20  33.97     18   +0.30 1 1 2 1 1   888    0 26.43 4.89 ----- 34.0 34.0 275.8 45.6 30.3 -27.1 30.1 -25.7 29.9 -27.3 30.9 -26.1
2025-11-12T15:17:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:17:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:17:00.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.553212
2025-11-12T15:17:00.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:17:00.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:17:00.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:17:00.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:17:00.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:17:00.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:16:55', tmtdew=31.65, humidity=12.22, cloud=0.0, wind=37.21, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:16:37.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:17:00.226 [DEBUG] [Thread-18024] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:17:00.309 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:17:00.322 [DEBUG] [Thread-18027] [transport.py] [_log()] starting thread (client mode): 0x149aae00
2025-11-12T15:17:00.322 [DEBUG] [Thread-18027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:17:00.336 [DEBUG] [Thread-18027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:17:00.336 [INFO] [Thread-18027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:17:00.344 [DEBUG] [Thread-18027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:17:00.344 [DEBUG] [Thread-18027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:17:00.344 [DEBUG] [Thread-18027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:17:00.344 [DEBUG] [Thread-18027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:17:00.344 [DEBUG] [Thread-18027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:17:00.344 [DEBUG] [Thread-18027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:17:00.344 [DEBUG] [Thread-18027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] client lang: <none>
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] server lang: <none>
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] kex follows: False
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] Compression: none
2025-11-12T15:17:00.345 [DEBUG] [Thread-18027] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:17:00.405 [DEBUG] [Thread-18027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:17:00.405 [DEBUG] [Thread-18027] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:17:00.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:17:00.407 [DEBUG] [Thread-18027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:17:00.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:17:00.464 [DEBUG] [Thread-18027] [transport.py] [_log()] userauth is OK
2025-11-12T15:17:00.465 [DEBUG] [Thread-18027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:17:00.465 [DEBUG] [Thread-18027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:17:00.465 [DEBUG] [Thread-18027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:17:00.465 [DEBUG] [Thread-18027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:17:00.484 [INFO] [Thread-18027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:17:00.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:17:00.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:17:01.312 [DEBUG] [Thread-18027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:17:01.313 [DEBUG] [Thread-18027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:17:01.360 [DEBUG] [Thread-18027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:17:01.361 [DEBUG] [Thread-18027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:17:01.370 [DEBUG] [Thread-18027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:17:01.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:17:01.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:17:01.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:17:01.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:17:01.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:17:01.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:17:01.406 [DEBUG] [Thread-18027] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:17:02.278 [DEBUG] [Thread-18029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:17:17.333 [DEBUG] [Thread-18030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:17:31.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:17:31.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:17:31.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-11-12T15:17:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 17, 27), 31.98, 11.93, 0.0, 37.86, 27.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:17:32.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:17:27
2025-11-12T15:17:32.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:17:32.357 [DEBUG] [Thread-18031] [transport.py] [_log()] starting thread (client mode): 0x149ab5b0
2025-11-12T15:17:32.358 [DEBUG] [Thread-18031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:17:32.365 [DEBUG] [Thread-18032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:17:32.382 [DEBUG] [Thread-18031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:17:32.382 [INFO] [Thread-18031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] client lang: <none>
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] server lang: <none>
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] kex follows: False
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:17:32.384 [DEBUG] [Thread-18031] [transport.py] [_log()] Compression: none
2025-11-12T15:17:32.385 [DEBUG] [Thread-18031] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:17:32.392 [DEBUG] [Thread-18031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:17:32.393 [DEBUG] [Thread-18031] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:17:32.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:17:32.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:17:32.393 [DEBUG] [Thread-18031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:17:32.393 [DEBUG] [Thread-18031] [transport.py] [_log()] userauth is OK
2025-11-12T15:17:32.394 [DEBUG] [Thread-18031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:17:32.394 [DEBUG] [Thread-18031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:17:32.394 [DEBUG] [Thread-18031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:17:32.394 [DEBUG] [Thread-18031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:17:32.406 [INFO] [Thread-18031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:17:32.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:17:33.088 [DEBUG] [Thread-18031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:17:33.088 [DEBUG] [Thread-18031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:17:33.088 [DEBUG] [Thread-18031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:17:33.129 [DEBUG] [Thread-18031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:17:33.129 [DEBUG] [Thread-18031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:17:33.132 [DEBUG] [Thread-18031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:17:33.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:17:33.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:17:33.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:17:33.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:17:33.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:17:33.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:17:33.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:17:33.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:17:33.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:17:33.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.553560 -999.00  +26.60  37.54     17   +0.00 1 1 2 1 1   888    0 26.52 2.92 ----- 37.5 37.5 295.0 41.6 30.5 -25.5 30.0 -25.3 30.2 -22.5 31.1 -23.2
2025-11-12T15:17:33.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:17:33.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:17:33.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.553560
2025-11-12T15:17:33.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:17:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:17:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:17:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:17:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:17:33.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:17:27', tmtdew=31.98, humidity=11.93, cloud=0.0, wind=37.86, temperature=27.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:17:07.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:17:33.151 [DEBUG] [Thread-18031] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:17:33.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:17:33.245 [DEBUG] [Thread-18035] [transport.py] [_log()] starting thread (client mode): 0x19dd95a0
2025-11-12T15:17:33.245 [DEBUG] [Thread-18035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:17:33.259 [DEBUG] [Thread-18035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:17:33.260 [INFO] [Thread-18035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:17:33.267 [DEBUG] [Thread-18035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:17:33.267 [DEBUG] [Thread-18035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:17:33.267 [DEBUG] [Thread-18035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:17:33.267 [DEBUG] [Thread-18035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:17:33.267 [DEBUG] [Thread-18035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:17:33.267 [DEBUG] [Thread-18035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:17:33.267 [DEBUG] [Thread-18035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] client lang: <none>
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] server lang: <none>
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] kex follows: False
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] Compression: none
2025-11-12T15:17:33.268 [DEBUG] [Thread-18035] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:17:33.323 [DEBUG] [Thread-18035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:17:33.323 [DEBUG] [Thread-18035] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:17:33.323 [DEBUG] [Thread-18035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:17:33.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:17:33.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:17:33.381 [DEBUG] [Thread-18035] [transport.py] [_log()] userauth is OK
2025-11-12T15:17:33.381 [DEBUG] [Thread-18035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:17:33.381 [DEBUG] [Thread-18035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:17:33.381 [DEBUG] [Thread-18035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:17:33.381 [DEBUG] [Thread-18035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:17:33.395 [INFO] [Thread-18035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:17:33.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:17:33.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:17:34.220 [DEBUG] [Thread-18035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:17:34.220 [DEBUG] [Thread-18035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:17:34.268 [DEBUG] [Thread-18035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:17:34.268 [DEBUG] [Thread-18035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:17:34.277 [DEBUG] [Thread-18035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:17:34.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:17:34.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-11-12T15:17:34.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-11-12T15:17:34.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:17:34.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:17:34.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:17:34.314 [DEBUG] [Thread-18035] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:17:34.860 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:17:34.861 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:17:38.073 [DEBUG] [Thread-18037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:17:47.399 [DEBUG] [Thread-18038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:18:02.462 [DEBUG] [Thread-18039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:18:04.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:18:04.321 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:18:04.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-11-12T15:18:04.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 17, 59), 32.52, 11.43, 0.0, 32.2, 27.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:18:04.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:17:59
2025-11-12T15:18:05.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:18:05.231 [DEBUG] [Thread-18040] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T15:18:05.232 [DEBUG] [Thread-18040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:18:05.251 [DEBUG] [Thread-18040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:18:05.251 [INFO] [Thread-18040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:18:05.254 [DEBUG] [Thread-18040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:18:05.254 [DEBUG] [Thread-18040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:18:05.254 [DEBUG] [Thread-18040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] client lang: <none>
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] server lang: <none>
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] kex follows: False
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] Compression: none
2025-11-12T15:18:05.255 [DEBUG] [Thread-18040] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:18:05.272 [DEBUG] [Thread-18040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:18:05.272 [DEBUG] [Thread-18040] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:18:05.273 [DEBUG] [Thread-18040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:18:05.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:18:05.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:18:05.317 [DEBUG] [Thread-18040] [transport.py] [_log()] userauth is OK
2025-11-12T15:18:05.317 [DEBUG] [Thread-18040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:18:05.317 [DEBUG] [Thread-18040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:18:05.317 [DEBUG] [Thread-18040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:18:05.317 [DEBUG] [Thread-18040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:18:05.349 [INFO] [Thread-18040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:18:05.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:18:06.001 [DEBUG] [Thread-18040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:18:06.002 [DEBUG] [Thread-18040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:18:06.002 [DEBUG] [Thread-18040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:18:06.043 [DEBUG] [Thread-18040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:18:06.043 [DEBUG] [Thread-18040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:18:06.046 [DEBUG] [Thread-18040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:18:06.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:18:06.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:18:06.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:18:06.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:18:06.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:18:06.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:18:06.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:18:06.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:18:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:18:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.553907 -999.00  +26.80  27.86     16   -0.30 1 1 1 1 1   888    0 27.50 6.15 ----- 27.9 27.9 300.0 43.1 30.5 -26.1 30.1 -24.9 30.4 -24.4 31.1 -24.4
2025-11-12T15:18:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:18:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:18:06.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.553907
2025-11-12T15:18:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:18:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:18:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:18:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:18:06.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:18:06.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:17:59', tmtdew=32.52, humidity=11.43, cloud=0.0, wind=32.2, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:17:37.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:18:06.074 [DEBUG] [Thread-18040] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:18:06.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:18:06.169 [DEBUG] [Thread-18043] [transport.py] [_log()] starting thread (client mode): 0x1499f0d0
2025-11-12T15:18:06.170 [DEBUG] [Thread-18043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:18:06.184 [DEBUG] [Thread-18043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:18:06.184 [INFO] [Thread-18043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] client lang: <none>
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] server lang: <none>
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] kex follows: False
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:18:06.192 [DEBUG] [Thread-18043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:18:06.193 [DEBUG] [Thread-18043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:18:06.193 [DEBUG] [Thread-18043] [transport.py] [_log()] Compression: none
2025-11-12T15:18:06.193 [DEBUG] [Thread-18043] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:18:06.249 [DEBUG] [Thread-18043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:18:06.249 [DEBUG] [Thread-18043] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:18:06.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:18:06.251 [DEBUG] [Thread-18043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:18:06.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:18:06.304 [DEBUG] [Thread-18043] [transport.py] [_log()] userauth is OK
2025-11-12T15:18:06.305 [DEBUG] [Thread-18043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:18:06.305 [DEBUG] [Thread-18043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:18:06.305 [DEBUG] [Thread-18043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:18:06.305 [DEBUG] [Thread-18043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:18:06.324 [INFO] [Thread-18043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:18:06.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:18:06.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:18:07.182 [DEBUG] [Thread-18043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:18:07.182 [DEBUG] [Thread-18043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:18:07.230 [DEBUG] [Thread-18043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:18:07.230 [DEBUG] [Thread-18043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:18:07.238 [DEBUG] [Thread-18043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:18:07.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:18:07.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:18:07.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-11-12T15:18:07.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:18:07.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:18:07.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:18:07.270 [DEBUG] [Thread-18043] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:18:17.495 [DEBUG] [Thread-18045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:18:32.545 [DEBUG] [Thread-18046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:18:35.001 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:18:35.002 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:18:37.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:18:37.293 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:18:37.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-11-12T15:18:37.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 18, 31), 32.75, 11.26, 0.0, 31.9, 27.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:18:37.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:18:31
2025-11-12T15:18:38.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:18:38.101 [DEBUG] [Thread-18047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:18:38.213 [DEBUG] [Thread-18048] [transport.py] [_log()] starting thread (client mode): 0x17344250
2025-11-12T15:18:38.214 [DEBUG] [Thread-18048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:18:38.227 [DEBUG] [Thread-18048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:18:38.227 [INFO] [Thread-18048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] client lang: <none>
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] server lang: <none>
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] kex follows: False
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] Compression: none
2025-11-12T15:18:38.228 [DEBUG] [Thread-18048] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:18:38.236 [DEBUG] [Thread-18048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:18:38.236 [DEBUG] [Thread-18048] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:18:38.237 [DEBUG] [Thread-18048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:18:38.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:18:38.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:18:38.238 [DEBUG] [Thread-18048] [transport.py] [_log()] userauth is OK
2025-11-12T15:18:38.238 [DEBUG] [Thread-18048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:18:38.238 [DEBUG] [Thread-18048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:18:38.238 [DEBUG] [Thread-18048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:18:38.238 [DEBUG] [Thread-18048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:18:38.251 [INFO] [Thread-18048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:18:38.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:18:38.901 [DEBUG] [Thread-18048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:18:38.901 [DEBUG] [Thread-18048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:18:38.901 [DEBUG] [Thread-18048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:18:38.941 [DEBUG] [Thread-18048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:18:38.942 [DEBUG] [Thread-18048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:18:38.945 [DEBUG] [Thread-18048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:18:38.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:18:38.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:18:38.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:18:38.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:18:38.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:18:38.970 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:18:38.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:18:38.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:18:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:18:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.554255 -999.00  +26.90  31.07     17   -0.10 1 1 2 1 1   888    0 26.85 7.14 ----- 31.1 31.1 280.2 39.1 30.6 -25.5 30.2 -24.8 30.6 -23.5 31.3 -23.6
2025-11-12T15:18:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:18:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:18:38.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.554255
2025-11-12T15:18:38.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:18:38.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:18:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:18:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:18:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:18:38.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:18:31', tmtdew=32.75, humidity=11.26, cloud=0.0, wind=31.9, temperature=27.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:18:07.632', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:18:38.973 [DEBUG] [Thread-18048] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:18:39.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:18:39.069 [DEBUG] [Thread-18051] [transport.py] [_log()] starting thread (client mode): 0x149208b0
2025-11-12T15:18:39.069 [DEBUG] [Thread-18051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:18:39.084 [DEBUG] [Thread-18051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:18:39.084 [INFO] [Thread-18051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] client lang: <none>
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] server lang: <none>
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] kex follows: False
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:18:39.092 [DEBUG] [Thread-18051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:18:39.093 [DEBUG] [Thread-18051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:18:39.093 [DEBUG] [Thread-18051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:18:39.093 [DEBUG] [Thread-18051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:18:39.093 [DEBUG] [Thread-18051] [transport.py] [_log()] Compression: none
2025-11-12T15:18:39.093 [DEBUG] [Thread-18051] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:18:39.149 [DEBUG] [Thread-18051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:18:39.149 [DEBUG] [Thread-18051] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:18:39.150 [DEBUG] [Thread-18051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:18:39.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:18:39.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:18:39.205 [DEBUG] [Thread-18051] [transport.py] [_log()] userauth is OK
2025-11-12T15:18:39.206 [DEBUG] [Thread-18051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:18:39.206 [DEBUG] [Thread-18051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:18:39.206 [DEBUG] [Thread-18051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:18:39.206 [DEBUG] [Thread-18051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:18:39.224 [INFO] [Thread-18051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:18: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-11-12T15:18:39.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:18:40.060 [DEBUG] [Thread-18051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:18:40.060 [DEBUG] [Thread-18051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:18:40.108 [DEBUG] [Thread-18051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:18:40.109 [DEBUG] [Thread-18051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:18:40.118 [DEBUG] [Thread-18051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:18:40.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:18:40.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:18: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-11-12T15:18:40.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:18:40.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:18:40.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:18:40.160 [DEBUG] [Thread-18051] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:18:47.575 [DEBUG] [Thread-18053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:19:02.619 [DEBUG] [Thread-18054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:19:10.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:19:10.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:19:10.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-11-12T15:19:10.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 19, 2), 32.67, 11.34, 0.0, 36.96, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:19:10.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:19:02
2025-11-12T15:19:10.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:19:11.099 [DEBUG] [Thread-18055] [transport.py] [_log()] starting thread (client mode): 0x149aa9e0
2025-11-12T15:19:11.099 [DEBUG] [Thread-18055] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:19:11.119 [DEBUG] [Thread-18055] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:19:11.120 [INFO] [Thread-18055] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:19:11.123 [DEBUG] [Thread-18055] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:19:11.123 [DEBUG] [Thread-18055] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:19:11.123 [DEBUG] [Thread-18055] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:19:11.123 [DEBUG] [Thread-18055] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:19:11.123 [DEBUG] [Thread-18055] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:19:11.123 [DEBUG] [Thread-18055] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] client lang: <none>
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] server lang: <none>
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] kex follows: False
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] Compression: none
2025-11-12T15:19:11.124 [DEBUG] [Thread-18055] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:19:11.142 [DEBUG] [Thread-18055] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:19:11.142 [DEBUG] [Thread-18055] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:19:11.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:19:11.144 [DEBUG] [Thread-18055] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:19:11.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:19:11.185 [DEBUG] [Thread-18055] [transport.py] [_log()] userauth is OK
2025-11-12T15:19:11.185 [DEBUG] [Thread-18055] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:19:11.185 [DEBUG] [Thread-18055] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:19:11.185 [DEBUG] [Thread-18055] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:19:11.185 [DEBUG] [Thread-18055] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:19:11.216 [INFO] [Thread-18055] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:19:11.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:19:11.831 [DEBUG] [Thread-18055] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:19:11.832 [DEBUG] [Thread-18055] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:19:11.832 [DEBUG] [Thread-18055] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:19:11.873 [DEBUG] [Thread-18055] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:19:11.873 [DEBUG] [Thread-18055] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:19:11.876 [DEBUG] [Thread-18055] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:19:11.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:19:11.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:19:11.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:19:11.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:19:11.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:19:11.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:19:11.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:19:11.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:19:11.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:19:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.554601 -999.00  +26.70  27.83     17   +0.00 1 1 1 1 1   888    0 26.57 6.20 ----- 27.8 27.8 283.0 46.7 30.5 -26.0 30.2 -25.9 30.3 -25.3 31.1 -24.8
2025-11-12T15:19:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:19:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:19:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.554601
2025-11-12T15:19:11.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:19:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:19:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:19:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:19:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:19:11.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:19:02', tmtdew=32.67, humidity=11.34, cloud=0.0, wind=36.96, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:18:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:19:11.903 [DEBUG] [Thread-18055] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:19: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-11-12T15:19:11.999 [DEBUG] [Thread-18058] [transport.py] [_log()] starting thread (client mode): 0x173eab30
2025-11-12T15:19:12.000 [DEBUG] [Thread-18058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:19:12.014 [DEBUG] [Thread-18058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:19:12.015 [INFO] [Thread-18058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:19:12.022 [DEBUG] [Thread-18058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:19:12.022 [DEBUG] [Thread-18058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:19:12.022 [DEBUG] [Thread-18058] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:19:12.022 [DEBUG] [Thread-18058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] client lang: <none>
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] server lang: <none>
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] kex follows: False
2025-11-12T15:19:12.023 [DEBUG] [Thread-18058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:19:12.024 [DEBUG] [Thread-18058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:19:12.024 [DEBUG] [Thread-18058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:19:12.024 [DEBUG] [Thread-18058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:19:12.024 [DEBUG] [Thread-18058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:19:12.024 [DEBUG] [Thread-18058] [transport.py] [_log()] Compression: none
2025-11-12T15:19:12.024 [DEBUG] [Thread-18058] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:19:12.082 [DEBUG] [Thread-18058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:19:12.082 [DEBUG] [Thread-18058] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:19:12.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:19:12.084 [DEBUG] [Thread-18058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:19:12.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:19:12.140 [DEBUG] [Thread-18058] [transport.py] [_log()] userauth is OK
2025-11-12T15:19:12.140 [DEBUG] [Thread-18058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:19:12.141 [DEBUG] [Thread-18058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:19:12.141 [DEBUG] [Thread-18058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:19:12.141 [DEBUG] [Thread-18058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:19:12.162 [INFO] [Thread-18058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:19: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-11-12T15:19:12.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:19:12.983 [DEBUG] [Thread-18058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:19:12.984 [DEBUG] [Thread-18058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:19:13.031 [DEBUG] [Thread-18058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:19:13.032 [DEBUG] [Thread-18058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:19:13.041 [DEBUG] [Thread-18058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:19:13.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:19:13.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-11-12T15:19:13.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-11-12T15:19:13.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:19:13.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:19:13.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:19:13.078 [DEBUG] [Thread-18058] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:19:17.658 [DEBUG] [Thread-18060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:19:32.708 [DEBUG] [Thread-18061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:19:35.144 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:19:35.145 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:19:38.139 [DEBUG] [Thread-18062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:19:43.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:19:43.099 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:19:43.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-11-12T15:19:43.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 19, 35), 31.69, 12.03, 0.0, 37.78, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:19:43.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:19:35
2025-11-12T15:19:43.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:19:44.016 [DEBUG] [Thread-18063] [transport.py] [_log()] starting thread (client mode): 0x19ddaa10
2025-11-12T15:19:44.017 [DEBUG] [Thread-18063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:19:44.037 [DEBUG] [Thread-18063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:19:44.037 [INFO] [Thread-18063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] client lang: <none>
2025-11-12T15:19:44.040 [DEBUG] [Thread-18063] [transport.py] [_log()] server lang: <none>
2025-11-12T15:19:44.041 [DEBUG] [Thread-18063] [transport.py] [_log()] kex follows: False
2025-11-12T15:19:44.041 [DEBUG] [Thread-18063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:19:44.041 [DEBUG] [Thread-18063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:19:44.041 [DEBUG] [Thread-18063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:19:44.041 [DEBUG] [Thread-18063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:19:44.041 [DEBUG] [Thread-18063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:19:44.041 [DEBUG] [Thread-18063] [transport.py] [_log()] Compression: none
2025-11-12T15:19:44.041 [DEBUG] [Thread-18063] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:19:44.058 [DEBUG] [Thread-18063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:19:44.058 [DEBUG] [Thread-18063] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:19:44.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:19:44.060 [DEBUG] [Thread-18063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:19:44.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:19:44.061 [DEBUG] [Thread-18063] [transport.py] [_log()] userauth is OK
2025-11-12T15:19:44.062 [DEBUG] [Thread-18063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:19:44.062 [DEBUG] [Thread-18063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:19:44.062 [DEBUG] [Thread-18063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:19:44.062 [DEBUG] [Thread-18063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:19:44.086 [INFO] [Thread-18063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:19:44.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:19:44.700 [DEBUG] [Thread-18063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:19:44.701 [DEBUG] [Thread-18063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:19:44.701 [DEBUG] [Thread-18063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:19:44.742 [DEBUG] [Thread-18063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:19:44.742 [DEBUG] [Thread-18063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:19:44.746 [DEBUG] [Thread-18063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:19:44.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:19:44.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:19:44.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:19:44.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:19:44.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:19:44.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:19:44.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:19:44.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:19:44.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:19:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.554948 -999.00  +26.90  28.75     18   +0.60 1 1 1 1 1   888    0 26.94 3.99 ----- 28.8 28.8 279.0 38.5 30.6 -26.1 30.2 -25.0 30.4 -24.3 31.2 -24.3
2025-11-12T15:19:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:19:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:19:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.554948
2025-11-12T15:19:44.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:19:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:19:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:19:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:19:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:19:44.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:19:35', tmtdew=31.69, humidity=12.03, cloud=0.0, wind=37.78, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:19:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:19:44.773 [DEBUG] [Thread-18063] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:19:44.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:19:44.868 [DEBUG] [Thread-18066] [transport.py] [_log()] starting thread (client mode): 0x19dd95d0
2025-11-12T15:19:44.869 [DEBUG] [Thread-18066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:19:44.884 [DEBUG] [Thread-18066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:19:44.884 [INFO] [Thread-18066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:19:44.891 [DEBUG] [Thread-18066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] client lang: <none>
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] server lang: <none>
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] kex follows: False
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] Compression: none
2025-11-12T15:19:44.892 [DEBUG] [Thread-18066] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:19:44.949 [DEBUG] [Thread-18066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:19:44.950 [DEBUG] [Thread-18066] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:19:44.950 [DEBUG] [Thread-18066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:19:44.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:19:44.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:19:45.005 [DEBUG] [Thread-18066] [transport.py] [_log()] userauth is OK
2025-11-12T15:19:45.005 [DEBUG] [Thread-18066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:19:45.005 [DEBUG] [Thread-18066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:19:45.006 [DEBUG] [Thread-18066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:19:45.006 [DEBUG] [Thread-18066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:19:45.025 [INFO] [Thread-18066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:19:45.026 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:19:45.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:19:45.878 [DEBUG] [Thread-18066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:19:45.878 [DEBUG] [Thread-18066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:19:45.926 [DEBUG] [Thread-18066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:19:45.926 [DEBUG] [Thread-18066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:19:45.935 [DEBUG] [Thread-18066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:19:45.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:19:45.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-11-12T15:19: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') -> 00000000
2025-11-12T15:19:45.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:19:45.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:19:45.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:19:45.972 [DEBUG] [Thread-18066] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:19:47.745 [DEBUG] [Thread-18068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:20:02.806 [DEBUG] [Thread-18069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:20:15.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:20:15.977 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:20:15.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-11-12T15:20:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 20, 7), 31.46, 12.22, 0.0, 40.67, 27.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:20:16.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:20:07
2025-11-12T15:20:16.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:20:16.894 [DEBUG] [Thread-18070] [transport.py] [_log()] starting thread (client mode): 0x19dd9a80
2025-11-12T15:20:16.895 [DEBUG] [Thread-18070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:20:16.906 [DEBUG] [Thread-18070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:20:16.906 [INFO] [Thread-18070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] client lang: <none>
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] server lang: <none>
2025-11-12T15:20:16.909 [DEBUG] [Thread-18070] [transport.py] [_log()] kex follows: False
2025-11-12T15:20:16.910 [DEBUG] [Thread-18070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:20:16.910 [DEBUG] [Thread-18070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:20:16.910 [DEBUG] [Thread-18070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:20:16.910 [DEBUG] [Thread-18070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:20:16.910 [DEBUG] [Thread-18070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:20:16.910 [DEBUG] [Thread-18070] [transport.py] [_log()] Compression: none
2025-11-12T15:20:16.910 [DEBUG] [Thread-18070] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:20:16.931 [DEBUG] [Thread-18070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:20:16.931 [DEBUG] [Thread-18070] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:20:16.932 [DEBUG] [Thread-18070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:20:16.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:20:16.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:20:16.934 [DEBUG] [Thread-18070] [transport.py] [_log()] userauth is OK
2025-11-12T15:20:16.934 [DEBUG] [Thread-18070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:20:16.934 [DEBUG] [Thread-18070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:20:16.934 [DEBUG] [Thread-18070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:20:16.935 [DEBUG] [Thread-18070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:20:16.970 [INFO] [Thread-18070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:20:16.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:20:17.571 [DEBUG] [Thread-18070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:20:17.571 [DEBUG] [Thread-18070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:20:17.571 [DEBUG] [Thread-18070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:20:17.611 [DEBUG] [Thread-18070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:20:17.612 [DEBUG] [Thread-18070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:20:17.615 [DEBUG] [Thread-18070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:20:17.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:20:17.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:20:17.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:20:17.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:20:17.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:20:17.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:20:17.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:20:17.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:20:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:20:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.555296 -999.00  +27.00  34.47     18   +0.90 1 1 2 1 1   888    0 26.24 -0.43 ----- 34.5 34.5 275.8 43.2 30.5 -26.0 30.3 -25.3 30.2 -28.8 31.1 -25.8
2025-11-12T15:20:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:20:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:20:17.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.555296
2025-11-12T15:20:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:20:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:20:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:20:17.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:20:17.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:20:17.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:20:07', tmtdew=31.46, humidity=12.22, cloud=0.0, wind=40.67, temperature=27.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:19:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:20:17.643 [DEBUG] [Thread-18070] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:20:17.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:20:17.739 [DEBUG] [Thread-18073] [transport.py] [_log()] starting thread (client mode): 0x19dda020
2025-11-12T15:20:17.740 [DEBUG] [Thread-18073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:20:17.754 [DEBUG] [Thread-18073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:20:17.754 [INFO] [Thread-18073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:20:17.762 [DEBUG] [Thread-18073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] client lang: <none>
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] server lang: <none>
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] kex follows: False
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] Compression: none
2025-11-12T15:20:17.763 [DEBUG] [Thread-18073] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:20:17.821 [DEBUG] [Thread-18073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:20:17.821 [DEBUG] [Thread-18073] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:20:17.822 [DEBUG] [Thread-18073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:20:17.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:20:17.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:20:17.833 [DEBUG] [Thread-18075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:20:17.876 [DEBUG] [Thread-18073] [transport.py] [_log()] userauth is OK
2025-11-12T15:20:17.876 [DEBUG] [Thread-18073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:20:17.877 [DEBUG] [Thread-18073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:20:17.877 [DEBUG] [Thread-18073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:20:17.877 [DEBUG] [Thread-18073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:20:17.900 [INFO] [Thread-18073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:20:17.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:20:17.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:20:18.772 [DEBUG] [Thread-18073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:20:18.772 [DEBUG] [Thread-18073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:20:18.821 [DEBUG] [Thread-18073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:20:18.821 [DEBUG] [Thread-18073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:20:18.830 [DEBUG] [Thread-18073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:20:18.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:20:18.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-11-12T15:20:18.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-11-12T15:20:18.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:20:18.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:20:18.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:20:18.867 [DEBUG] [Thread-18073] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:20:32.888 [DEBUG] [Thread-18076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:20:35.286 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:20:35.287 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:20:38.173 [DEBUG] [Thread-18077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:20:47.921 [DEBUG] [Thread-18078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:20:48.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:20:48.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:20:48.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-11-12T15:20:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 20, 39), 31.12, 12.84, 0.0, 38.16, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:20:49.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:20:39
2025-11-12T15:20:49.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:20:49.795 [DEBUG] [Thread-18079] [transport.py] [_log()] starting thread (client mode): 0x14921cf0
2025-11-12T15:20:49.796 [DEBUG] [Thread-18079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:20:49.816 [DEBUG] [Thread-18079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:20:49.817 [INFO] [Thread-18079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] client lang: <none>
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] server lang: <none>
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] kex follows: False
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] Compression: none
2025-11-12T15:20:49.818 [DEBUG] [Thread-18079] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:20:49.838 [DEBUG] [Thread-18079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:20:49.838 [DEBUG] [Thread-18079] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:20:49.839 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:20:49.839 [DEBUG] [Thread-18079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:20:49.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:20:49.842 [DEBUG] [Thread-18079] [transport.py] [_log()] userauth is OK
2025-11-12T15:20:49.842 [DEBUG] [Thread-18079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:20:49.842 [DEBUG] [Thread-18079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:20:49.842 [DEBUG] [Thread-18079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:20:49.842 [DEBUG] [Thread-18079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:20:49.867 [INFO] [Thread-18079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:20:49.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:20:50.485 [DEBUG] [Thread-18079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:20:50.486 [DEBUG] [Thread-18079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:20:50.486 [DEBUG] [Thread-18079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:20:50.526 [DEBUG] [Thread-18079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:20:50.527 [DEBUG] [Thread-18079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:20:50.529 [DEBUG] [Thread-18079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:20:50.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:20:50.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:20:50.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:20:50.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:20:50.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:20:50.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:20:50.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:20:50.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:20:50.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:20:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.555990 -999.00  +26.30  30.31     19   +0.80 1 1 2 1 1   888    0 26.34 -7.10 ----- 30.3 30.3 277.2 49.2 30.3 -27.2 30.1 -26.5 30.0 -26.2 31.0 -25.0
2025-11-12T15:20:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:20:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:20:50.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.555990
2025-11-12T15:20:50.553 [DEBUG] [Thread-18079] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:20:50.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:20:50.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:20:50.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:20:50.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:20:50.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:20:50.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:20:39', tmtdew=31.12, humidity=12.84, cloud=0.0, wind=38.16, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:20:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:20:50.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:20:50.652 [DEBUG] [Thread-18082] [transport.py] [_log()] starting thread (client mode): 0x17361e40
2025-11-12T15:20:50.652 [DEBUG] [Thread-18082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:20:50.666 [DEBUG] [Thread-18082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:20:50.667 [INFO] [Thread-18082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:20:50.674 [DEBUG] [Thread-18082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] client lang: <none>
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] server lang: <none>
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] kex follows: False
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] Compression: none
2025-11-12T15:20:50.675 [DEBUG] [Thread-18082] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:20:50.733 [DEBUG] [Thread-18082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:20:50.733 [DEBUG] [Thread-18082] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:20:50.734 [DEBUG] [Thread-18082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:20:50.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:20:50.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:20:50.788 [DEBUG] [Thread-18082] [transport.py] [_log()] userauth is OK
2025-11-12T15:20:50.789 [DEBUG] [Thread-18082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:20:50.789 [DEBUG] [Thread-18082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:20:50.789 [DEBUG] [Thread-18082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:20:50.789 [DEBUG] [Thread-18082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:20:50.808 [INFO] [Thread-18082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:20:50.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:20:50.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:20:51.685 [DEBUG] [Thread-18082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:20:51.685 [DEBUG] [Thread-18082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:20:51.735 [DEBUG] [Thread-18082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:20:51.735 [DEBUG] [Thread-18082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:20:51.744 [DEBUG] [Thread-18082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:20:51.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:20:51.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-11-12T15:20:51.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-11-12T15:20:51.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:20:51.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:20:51.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:20:51.782 [DEBUG] [Thread-18082] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:21:02.956 [DEBUG] [Thread-18084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:21:18.007 [DEBUG] [Thread-18085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:21:21.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:21:21.804 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:21:21.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-11-12T15:21:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 21, 11), 30.98, 12.96, 0.0, 37.79, 27.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:21:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:21:11
2025-11-12T15:21:22.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:21:22.751 [DEBUG] [Thread-18086] [transport.py] [_log()] starting thread (client mode): 0x1493eef0
2025-11-12T15:21:22.751 [DEBUG] [Thread-18086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:21:22.771 [DEBUG] [Thread-18086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:21:22.771 [INFO] [Thread-18086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:21:22.774 [DEBUG] [Thread-18086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] client lang: <none>
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] server lang: <none>
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] kex follows: False
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] Compression: none
2025-11-12T15:21:22.775 [DEBUG] [Thread-18086] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:21:22.790 [DEBUG] [Thread-18086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:21:22.790 [DEBUG] [Thread-18086] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:21:22.790 [DEBUG] [Thread-18086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:21:22.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:21:22.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:21:22.791 [DEBUG] [Thread-18086] [transport.py] [_log()] userauth is OK
2025-11-12T15:21:22.791 [DEBUG] [Thread-18086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:21:22.791 [DEBUG] [Thread-18086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:21:22.791 [DEBUG] [Thread-18086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:21:22.791 [DEBUG] [Thread-18086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:21:22.801 [INFO] [Thread-18086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:21:22.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:21:23.435 [DEBUG] [Thread-18086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:21:23.435 [DEBUG] [Thread-18086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:21:23.435 [DEBUG] [Thread-18086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:21:23.476 [DEBUG] [Thread-18086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:21:23.476 [DEBUG] [Thread-18086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:21:23.479 [DEBUG] [Thread-18086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:21:23.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:21:23.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:21:23.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:21:23.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:21:23.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:21:23.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:21:23.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.556337 -999.00  +26.20  35.96     18   +0.70 1 1 2 1 1   888    0 25.98 -10.70 ----- 36.0 36.0 271.8 44.0 30.2 -29.3 30.0 -25.2 29.9 -27.7 30.9 -24.5
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.556337
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:21:23.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:21:23.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:21:11', tmtdew=30.98, humidity=12.96, cloud=0.0, wind=37.79, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:21:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:21:23.496 [DEBUG] [Thread-18086] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:21:23.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:21:23.581 [DEBUG] [Thread-18089] [transport.py] [_log()] starting thread (client mode): 0x173e87c0
2025-11-12T15:21:23.581 [DEBUG] [Thread-18089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:21:23.596 [DEBUG] [Thread-18089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:21:23.596 [INFO] [Thread-18089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] client lang: <none>
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] server lang: <none>
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] kex follows: False
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] Compression: none
2025-11-12T15:21:23.604 [DEBUG] [Thread-18089] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:21:23.662 [DEBUG] [Thread-18089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:21:23.663 [DEBUG] [Thread-18089] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:21:23.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:21:23.663 [DEBUG] [Thread-18089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:21:23.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:21:23.720 [DEBUG] [Thread-18089] [transport.py] [_log()] userauth is OK
2025-11-12T15:21:23.720 [DEBUG] [Thread-18089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:21:23.720 [DEBUG] [Thread-18089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:21:23.720 [DEBUG] [Thread-18089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:21:23.720 [DEBUG] [Thread-18089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:21:23.734 [INFO] [Thread-18089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:21:23.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:21:23.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:21:24.588 [DEBUG] [Thread-18089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:21:24.588 [DEBUG] [Thread-18089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:21:24.636 [DEBUG] [Thread-18089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:21:24.636 [DEBUG] [Thread-18089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:21:24.644 [DEBUG] [Thread-18089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:21:24.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:21:24.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-11-12T15:21:24.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-11-12T15:21:24.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:21:24.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:21:24.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:21:24.695 [DEBUG] [Thread-18089] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:21:33.040 [DEBUG] [Thread-18091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:21:35.428 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:21:35.429 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:21:38.212 [DEBUG] [Thread-18092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:21:48.094 [DEBUG] [Thread-18093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:21:54.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:21:54.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:21:54.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-11-12T15:21:55.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 21, 43), 31.43, 12.29, 0.0, 34.46, 27.51, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:21:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:21:43
2025-11-12T15:21:55.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:21:55.617 [DEBUG] [Thread-18094] [transport.py] [_log()] starting thread (client mode): 0x149a8a60
2025-11-12T15:21:55.617 [DEBUG] [Thread-18094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:21:55.632 [DEBUG] [Thread-18094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:21:55.632 [INFO] [Thread-18094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] client lang: <none>
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] server lang: <none>
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] kex follows: False
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] Compression: none
2025-11-12T15:21:55.636 [DEBUG] [Thread-18094] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:21:55.651 [DEBUG] [Thread-18094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:21:55.651 [DEBUG] [Thread-18094] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:21:55.651 [DEBUG] [Thread-18094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:21:55.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:21:55.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:21:55.652 [DEBUG] [Thread-18094] [transport.py] [_log()] userauth is OK
2025-11-12T15:21:55.652 [DEBUG] [Thread-18094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:21:55.652 [DEBUG] [Thread-18094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:21:55.652 [DEBUG] [Thread-18094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:21:55.652 [DEBUG] [Thread-18094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:21:55.667 [INFO] [Thread-18094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:21:55.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:21:56.319 [DEBUG] [Thread-18094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:21:56.319 [DEBUG] [Thread-18094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:21:56.320 [DEBUG] [Thread-18094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:21:56.361 [DEBUG] [Thread-18094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:21:56.361 [DEBUG] [Thread-18094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:21:56.363 [DEBUG] [Thread-18094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:21:56.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:21:56.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:21:56.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:21:56.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:21:56.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:21:56.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:21:56.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.556685 -999.00  +26.30  30.73     19   +0.90 1 1 2 1 1   888    0 25.67 -14.35 ----- 30.7 30.7 297.0 35.6 30.4 -24.2 30.0 -24.7 30.0 -24.6 30.9 -23.5
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.556685
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:21:56.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:21:43', tmtdew=31.43, humidity=12.29, cloud=0.0, wind=34.46, temperature=27.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:21:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:21:56.384 [DEBUG] [Thread-18094] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:21: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-11-12T15:22:03.127 [DEBUG] [Thread-18097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:22:18.168 [DEBUG] [Thread-18098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:22:33.206 [DEBUG] [Thread-18099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:22:35.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:22:35.572 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:22:38.241 [DEBUG] [Thread-18100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:22:48.241 [DEBUG] [Thread-18101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:23:03.274 [DEBUG] [Thread-18102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:23:18.305 [DEBUG] [Thread-18103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:23:33.336 [DEBUG] [Thread-18104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:23:35.713 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:23:35.714 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:23:38.275 [DEBUG] [Thread-18105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:23:48.375 [DEBUG] [Thread-18106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:24:03.406 [DEBUG] [Thread-18107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:24:11.579 [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-11-12T15:24:18.445 [DEBUG] [Thread-18108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:24:33.478 [DEBUG] [Thread-18109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:24:35.858 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:24:35.859 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:24:38.303 [DEBUG] [Thread-18110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:24:41.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:24:41.610 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:24:41.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-11-12T15:24:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 24, 23), 31.75, 12.14, 0.0, 34.74, 27.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:24:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:24:23
2025-11-12T15:24:42.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:24:42.542 [DEBUG] [Thread-18111] [transport.py] [_log()] starting thread (client mode): 0x17360a90
2025-11-12T15:24:42.542 [DEBUG] [Thread-18111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:24:42.562 [DEBUG] [Thread-18111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:24:42.562 [INFO] [Thread-18111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:24:42.565 [DEBUG] [Thread-18111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:24:42.565 [DEBUG] [Thread-18111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:24:42.565 [DEBUG] [Thread-18111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:24:42.565 [DEBUG] [Thread-18111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:24:42.565 [DEBUG] [Thread-18111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:24:42.565 [DEBUG] [Thread-18111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] client lang: <none>
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] server lang: <none>
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] kex follows: False
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] Compression: none
2025-11-12T15:24:42.566 [DEBUG] [Thread-18111] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:24:42.576 [DEBUG] [Thread-18111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:24:42.576 [DEBUG] [Thread-18111] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:24:42.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:24:42.577 [DEBUG] [Thread-18111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:24:42.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:24:42.579 [DEBUG] [Thread-18111] [transport.py] [_log()] userauth is OK
2025-11-12T15:24:42.579 [DEBUG] [Thread-18111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:24:42.579 [DEBUG] [Thread-18111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:24:42.579 [DEBUG] [Thread-18111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:24:42.579 [DEBUG] [Thread-18111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:24:42.599 [INFO] [Thread-18111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:24:42.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:24:43.209 [DEBUG] [Thread-18111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:24:43.209 [DEBUG] [Thread-18111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:24:43.209 [DEBUG] [Thread-18111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:24:43.250 [DEBUG] [Thread-18111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:24:43.250 [DEBUG] [Thread-18111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:24:43.253 [DEBUG] [Thread-18111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:24:43.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:24:43.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:24:43.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:24:43.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:24:43.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:24:43.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:24:43.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:24:43.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:24:43.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:24:43.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.558421 -999.00  +26.90  29.46     18   +0.70 1 1 1 1 1   888    0 26.13 -12.98 ----- 29.5 29.5 283.0 43.0 30.9 -24.8 30.5 -24.1 30.9 -24.8 31.7 -23.4
2025-11-12T15:24:43.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:24:43.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:24:43.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.558421
2025-11-12T15:24:43.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:24:43.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:24:43.278 [DEBUG] [Thread-18111] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:24:43.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:24:43.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:24:43.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:24:43.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:24:23', tmtdew=31.75, humidity=12.14, cloud=0.0, wind=34.74, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:24:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:24:43.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:24:43.371 [DEBUG] [Thread-18114] [transport.py] [_log()] starting thread (client mode): 0x1493c580
2025-11-12T15:24:43.371 [DEBUG] [Thread-18114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:24:43.387 [DEBUG] [Thread-18114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:24:43.387 [INFO] [Thread-18114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] client lang: <none>
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] server lang: <none>
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] kex follows: False
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:24:43.395 [DEBUG] [Thread-18114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:24:43.396 [DEBUG] [Thread-18114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:24:43.396 [DEBUG] [Thread-18114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:24:43.396 [DEBUG] [Thread-18114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:24:43.396 [DEBUG] [Thread-18114] [transport.py] [_log()] Compression: none
2025-11-12T15:24:43.396 [DEBUG] [Thread-18114] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:24:43.453 [DEBUG] [Thread-18114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:24:43.453 [DEBUG] [Thread-18114] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:24:43.454 [DEBUG] [Thread-18114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:24:43.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:24:43.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:24:43.509 [DEBUG] [Thread-18114] [transport.py] [_log()] userauth is OK
2025-11-12T15:24:43.509 [DEBUG] [Thread-18114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:24:43.509 [DEBUG] [Thread-18114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:24:43.509 [DEBUG] [Thread-18114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:24:43.509 [DEBUG] [Thread-18114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:24:43.529 [INFO] [Thread-18114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:24:43.529 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:24:43.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:24:44.356 [DEBUG] [Thread-18114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:24:44.356 [DEBUG] [Thread-18114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:24:44.403 [DEBUG] [Thread-18114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:24:44.404 [DEBUG] [Thread-18114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:24:44.413 [DEBUG] [Thread-18114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:24:44.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:24:44.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:24:44.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:24:44.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:24:44.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:24:44.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:24:44.449 [DEBUG] [Thread-18114] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:24:48.513 [DEBUG] [Thread-18116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:25:03.565 [DEBUG] [Thread-18117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:25:14.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:25:14.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:25:14.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-11-12T15:25:15.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 24, 54), 32.07, 11.98, 0.0, 43.72, 27.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:25:15.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:24:54
2025-11-12T15:25:15.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:25:15.465 [DEBUG] [Thread-18118] [transport.py] [_log()] starting thread (client mode): 0x19dd8fa0
2025-11-12T15:25:15.465 [DEBUG] [Thread-18118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:25:15.485 [DEBUG] [Thread-18118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:25:15.485 [INFO] [Thread-18118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:25:15.488 [DEBUG] [Thread-18118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] client lang: <none>
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] server lang: <none>
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] kex follows: False
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] Compression: none
2025-11-12T15:25:15.489 [DEBUG] [Thread-18118] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:25:15.507 [DEBUG] [Thread-18118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:25:15.507 [DEBUG] [Thread-18118] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:25:15.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:25:15.507 [DEBUG] [Thread-18118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:25:15.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:25:15.508 [DEBUG] [Thread-18118] [transport.py] [_log()] userauth is OK
2025-11-12T15:25:15.508 [DEBUG] [Thread-18118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:25:15.508 [DEBUG] [Thread-18118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:25:15.508 [DEBUG] [Thread-18118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:25:15.508 [DEBUG] [Thread-18118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:25:15.518 [INFO] [Thread-18118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:25:15.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:25:16.125 [DEBUG] [Thread-18118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:25:16.125 [DEBUG] [Thread-18118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:25:16.125 [DEBUG] [Thread-18118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:25:16.166 [DEBUG] [Thread-18118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:25:16.166 [DEBUG] [Thread-18118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:25:16.168 [DEBUG] [Thread-18118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:25:16.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:25:16.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:25:16.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:25:16.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:25:16.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:25:16.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:25:16.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:25:16.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:25:16.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:25:16.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.559115 -999.00  +26.60  34.03     17   +0.20 1 1 2 1 1   888    0 25.95 -12.25 ----- 34.0 34.0 278.0 51.3 30.6 -27.7 30.5 -25.8 30.7 -25.9 31.6 -24.6
2025-11-12T15:25:16.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:25:16.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:25:16.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.559115
2025-11-12T15:25:16.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:25:16.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:25:16.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:25:16.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:25:16.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:25:16.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:24:54', tmtdew=32.07, humidity=11.98, cloud=0.0, wind=43.72, temperature=27.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:25:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:25:16.181 [DEBUG] [Thread-18118] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:25:16.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:25:16.267 [DEBUG] [Thread-18121] [transport.py] [_log()] starting thread (client mode): 0x149abf40
2025-11-12T15:25:16.267 [DEBUG] [Thread-18121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:25:16.282 [DEBUG] [Thread-18121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:25:16.282 [INFO] [Thread-18121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] client lang: <none>
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] server lang: <none>
2025-11-12T15:25:16.289 [DEBUG] [Thread-18121] [transport.py] [_log()] kex follows: False
2025-11-12T15:25:16.290 [DEBUG] [Thread-18121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:25:16.290 [DEBUG] [Thread-18121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:25:16.290 [DEBUG] [Thread-18121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:25:16.290 [DEBUG] [Thread-18121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:25:16.290 [DEBUG] [Thread-18121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:25:16.290 [DEBUG] [Thread-18121] [transport.py] [_log()] Compression: none
2025-11-12T15:25:16.290 [DEBUG] [Thread-18121] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:25:16.347 [DEBUG] [Thread-18121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:25:16.347 [DEBUG] [Thread-18121] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:25:16.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:25:16.348 [DEBUG] [Thread-18121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:25:16.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:25:16.409 [DEBUG] [Thread-18121] [transport.py] [_log()] userauth is OK
2025-11-12T15:25:16.410 [DEBUG] [Thread-18121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:25:16.410 [DEBUG] [Thread-18121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:25:16.410 [DEBUG] [Thread-18121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:25:16.410 [DEBUG] [Thread-18121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:25:16.427 [INFO] [Thread-18121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:25:16.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:25:16.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:25:17.255 [DEBUG] [Thread-18121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:25:17.255 [DEBUG] [Thread-18121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:25:17.303 [DEBUG] [Thread-18121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:25:17.303 [DEBUG] [Thread-18121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:25:17.311 [DEBUG] [Thread-18121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:25:17.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:25:17.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:25:17.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-11-12T15:25:17.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:25:17.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:25:17.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:25:17.342 [DEBUG] [Thread-18121] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:25:18.596 [DEBUG] [Thread-18123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:25:33.649 [DEBUG] [Thread-18124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:25:35.999 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:25:36.000 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:25:38.336 [DEBUG] [Thread-18125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:25:47.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:25:47.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:25:47.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-11-12T15:25:48.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 25, 26), 32.31, 11.78, 0.0, 45.59, 27.44, 0, 0, 0, 2, 1, 0),)
2025-11-12T15:25:48.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:25:26
2025-11-12T15:25:48.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:25:48.281 [DEBUG] [Thread-18126] [transport.py] [_log()] starting thread (client mode): 0x17362e30
2025-11-12T15:25:48.281 [DEBUG] [Thread-18126] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:25:48.303 [DEBUG] [Thread-18126] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:25:48.303 [INFO] [Thread-18126] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:25:48.306 [DEBUG] [Thread-18126] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] client lang: <none>
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] server lang: <none>
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] kex follows: False
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] Compression: none
2025-11-12T15:25:48.307 [DEBUG] [Thread-18126] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:25:48.324 [DEBUG] [Thread-18126] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:25:48.324 [DEBUG] [Thread-18126] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:25:48.324 [DEBUG] [Thread-18126] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:25:48.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:25:48.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:25:48.326 [DEBUG] [Thread-18126] [transport.py] [_log()] userauth is OK
2025-11-12T15:25:48.326 [DEBUG] [Thread-18126] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:25:48.326 [DEBUG] [Thread-18126] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:25:48.326 [DEBUG] [Thread-18126] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:25:48.326 [DEBUG] [Thread-18126] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:25:48.344 [INFO] [Thread-18126] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:25:48.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:25:48.689 [DEBUG] [Thread-18128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:25:48.949 [DEBUG] [Thread-18126] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:25:48.949 [DEBUG] [Thread-18126] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:25:48.949 [DEBUG] [Thread-18126] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:25:48.989 [DEBUG] [Thread-18126] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:25:48.990 [DEBUG] [Thread-18126] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:25:48.993 [DEBUG] [Thread-18126] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:25:49.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:25:49.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:25:49.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:25:49.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:25:49.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:25:49.015 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:25:49.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:25:49.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:25:49.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:25:49.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.559462 -999.00  +26.70  36.10     18   +0.60 1 1 2 1 1   888    0 26.18 -11.67 ----- 36.1 36.1 292.2 46.9 30.8 -26.7 30.5 -24.2 30.9 -26.0 31.6 -24.7
2025-11-12T15:25:49.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:25:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:25:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.559462
2025-11-12T15:25:49.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:25:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:25:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:25:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:25:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:25:49.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:25:26', tmtdew=32.31, humidity=11.78, cloud=0.0, wind=45.59, temperature=27.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=1, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:25:37.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:25:49.018 [DEBUG] [Thread-18126] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:25:49.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:25:49.115 [DEBUG] [Thread-18130] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T15:25:49.115 [DEBUG] [Thread-18130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:25:49.132 [DEBUG] [Thread-18130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:25:49.132 [INFO] [Thread-18130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:25:49.139 [DEBUG] [Thread-18130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] client lang: <none>
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] server lang: <none>
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] kex follows: False
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:25:49.140 [DEBUG] [Thread-18130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:25:49.141 [DEBUG] [Thread-18130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:25:49.141 [DEBUG] [Thread-18130] [transport.py] [_log()] Compression: none
2025-11-12T15:25:49.141 [DEBUG] [Thread-18130] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:25:49.201 [DEBUG] [Thread-18130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:25:49.201 [DEBUG] [Thread-18130] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:25:49.202 [DEBUG] [Thread-18130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:25:49.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:25:49.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:25:49.256 [DEBUG] [Thread-18130] [transport.py] [_log()] userauth is OK
2025-11-12T15:25:49.257 [DEBUG] [Thread-18130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:25:49.257 [DEBUG] [Thread-18130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:25:49.257 [DEBUG] [Thread-18130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:25:49.257 [DEBUG] [Thread-18130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:25:49.277 [INFO] [Thread-18130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:25:49.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:25:49.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:25:50.181 [DEBUG] [Thread-18130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:25:50.181 [DEBUG] [Thread-18130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:25:50.229 [DEBUG] [Thread-18130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:25:50.230 [DEBUG] [Thread-18130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:25:50.239 [DEBUG] [Thread-18130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:25:50.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:25:50.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-11-12T15:25:50.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-11-12T15:25:50.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:25:50.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:25:50.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:25:50.276 [DEBUG] [Thread-18130] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:26:03.724 [DEBUG] [Thread-18132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:26:18.778 [DEBUG] [Thread-18133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:26:20.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:26:20.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:26:20.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-11-12T15:26:20.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 25, 58), 32.19, 11.63, 0.0, 44.02, 27.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:26:20.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:25:58
2025-11-12T15:26:21.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:26:21.219 [DEBUG] [Thread-18134] [transport.py] [_log()] starting thread (client mode): 0x19dda8c0
2025-11-12T15:26:21.219 [DEBUG] [Thread-18134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:26:21.238 [DEBUG] [Thread-18134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:26:21.238 [INFO] [Thread-18134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:26:21.241 [DEBUG] [Thread-18134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:26:21.241 [DEBUG] [Thread-18134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:26:21.241 [DEBUG] [Thread-18134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:26:21.241 [DEBUG] [Thread-18134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] client lang: <none>
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] server lang: <none>
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] kex follows: False
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] Compression: none
2025-11-12T15:26:21.242 [DEBUG] [Thread-18134] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:26:21.261 [DEBUG] [Thread-18134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:26:21.261 [DEBUG] [Thread-18134] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:26:21.262 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:26:21.262 [DEBUG] [Thread-18134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:26:21.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:26:21.264 [DEBUG] [Thread-18134] [transport.py] [_log()] userauth is OK
2025-11-12T15:26:21.265 [DEBUG] [Thread-18134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:26:21.265 [DEBUG] [Thread-18134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:26:21.265 [DEBUG] [Thread-18134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:26:21.265 [DEBUG] [Thread-18134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:26:21.289 [INFO] [Thread-18134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:26:21.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:26:21.896 [DEBUG] [Thread-18134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:26:21.896 [DEBUG] [Thread-18134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:26:21.897 [DEBUG] [Thread-18134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:26:21.937 [DEBUG] [Thread-18134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:26:21.937 [DEBUG] [Thread-18134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:26:21.940 [DEBUG] [Thread-18134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:26:21.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:26:21.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:26:21.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:26:21.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:26:21.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:26:21.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:26:21.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:26:21.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:26:21.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:26:21.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.559809 -999.00  +26.70  30.10     18   +0.70 1 1 2 1 1   888    0 26.23 -12.23 ----- 30.1 30.1 267.4 42.6 30.8 -26.4 30.5 -24.1 30.8 -24.3 31.6 -24.3
2025-11-12T15:26:21.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:26:21.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:26:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.559809
2025-11-12T15:26:21.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:26:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:26:21.966 [DEBUG] [Thread-18134] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:26:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:26:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:26:21.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:26:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:25:58', tmtdew=32.19, humidity=11.63, cloud=0.0, wind=44.02, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:26:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:26:22.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:26:22.060 [DEBUG] [Thread-18137] [transport.py] [_log()] starting thread (client mode): 0x1493c580
2025-11-12T15:26:22.060 [DEBUG] [Thread-18137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:26:22.075 [DEBUG] [Thread-18137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:26:22.075 [INFO] [Thread-18137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:26:22.083 [DEBUG] [Thread-18137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:26:22.083 [DEBUG] [Thread-18137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:26:22.083 [DEBUG] [Thread-18137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:26:22.083 [DEBUG] [Thread-18137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:26:22.083 [DEBUG] [Thread-18137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:26:22.083 [DEBUG] [Thread-18137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:26:22.083 [DEBUG] [Thread-18137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:26:22.083 [DEBUG] [Thread-18137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] client lang: <none>
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] server lang: <none>
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] kex follows: False
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] Compression: none
2025-11-12T15:26:22.084 [DEBUG] [Thread-18137] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:26:22.141 [DEBUG] [Thread-18137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:26:22.141 [DEBUG] [Thread-18137] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:26:22.142 [DEBUG] [Thread-18137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:26:22.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:26:22.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:26:22.198 [DEBUG] [Thread-18137] [transport.py] [_log()] userauth is OK
2025-11-12T15:26:22.198 [DEBUG] [Thread-18137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:26:22.199 [DEBUG] [Thread-18137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:26:22.199 [DEBUG] [Thread-18137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:26:22.199 [DEBUG] [Thread-18137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:26:22.221 [INFO] [Thread-18137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:26:22.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:26:22.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:26:23.064 [DEBUG] [Thread-18137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:26:23.065 [DEBUG] [Thread-18137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:26:23.113 [DEBUG] [Thread-18137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:26:23.113 [DEBUG] [Thread-18137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:26:23.122 [DEBUG] [Thread-18137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:26:23.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:26:23.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-11-12T15:26:23.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:26:23.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:26:23.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:26:23.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:26:23.158 [DEBUG] [Thread-18137] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:26:33.816 [DEBUG] [Thread-18139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:26:36.152 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:26:36.153 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:26:38.382 [DEBUG] [Thread-18140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:26:48.872 [DEBUG] [Thread-18141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:26:53.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:26:53.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:26:53.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-11-12T15:26:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 26, 30), 31.58, 12.13, 0.0, 39.3, 27.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:26:53.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:26:30
2025-11-12T15:26:53.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:26:54.092 [DEBUG] [Thread-18142] [transport.py] [_log()] starting thread (client mode): 0x1737d120
2025-11-12T15:26:54.092 [DEBUG] [Thread-18142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:26:54.112 [DEBUG] [Thread-18142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:26:54.112 [INFO] [Thread-18142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] client lang: <none>
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] server lang: <none>
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] kex follows: False
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:26:54.115 [DEBUG] [Thread-18142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:26:54.116 [DEBUG] [Thread-18142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:26:54.116 [DEBUG] [Thread-18142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:26:54.116 [DEBUG] [Thread-18142] [transport.py] [_log()] Compression: none
2025-11-12T15:26:54.116 [DEBUG] [Thread-18142] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:26:54.131 [DEBUG] [Thread-18142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:26:54.132 [DEBUG] [Thread-18142] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:26:54.132 [DEBUG] [Thread-18142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:26:54.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:26:54.133 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:26:54.135 [DEBUG] [Thread-18142] [transport.py] [_log()] userauth is OK
2025-11-12T15:26:54.135 [DEBUG] [Thread-18142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:26:54.135 [DEBUG] [Thread-18142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:26:54.135 [DEBUG] [Thread-18142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:26:54.135 [DEBUG] [Thread-18142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:26:54.161 [INFO] [Thread-18142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:26:54.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:26:54.796 [DEBUG] [Thread-18142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:26:54.796 [DEBUG] [Thread-18142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:26:54.796 [DEBUG] [Thread-18142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:26:54.837 [DEBUG] [Thread-18142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:26:54.837 [DEBUG] [Thread-18142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:26:54.841 [DEBUG] [Thread-18142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:26:54.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:26:54.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:26:54.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:26:54.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:26:54.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:26:54.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:26:54.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:26:54.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:26:54.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:26:54.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.560157 -999.00  +26.60  27.50     18   +0.80 1 1 1 1 1   888    0 25.97 -12.23 ----- 27.5 27.5 288.6 34.0 30.9 -25.3 30.6 -24.5 30.9 -24.4 31.7 -24.0
2025-11-12T15:26:54.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:26:54.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:26:54.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.560157
2025-11-12T15:26:54.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:26:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:26:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:26:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:26:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:26:54.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:26:30', tmtdew=31.58, humidity=12.13, cloud=0.0, wind=39.3, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:26:37.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:26:54.867 [DEBUG] [Thread-18142] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:26:54.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:26:54.963 [DEBUG] [Thread-18145] [transport.py] [_log()] starting thread (client mode): 0x17398fa0
2025-11-12T15:26:54.963 [DEBUG] [Thread-18145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:26:54.977 [DEBUG] [Thread-18145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:26:54.978 [INFO] [Thread-18145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:26:54.985 [DEBUG] [Thread-18145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:26:54.985 [DEBUG] [Thread-18145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] client lang: <none>
2025-11-12T15:26:54.986 [DEBUG] [Thread-18145] [transport.py] [_log()] server lang: <none>
2025-11-12T15:26:54.987 [DEBUG] [Thread-18145] [transport.py] [_log()] kex follows: False
2025-11-12T15:26:54.987 [DEBUG] [Thread-18145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:26:54.987 [DEBUG] [Thread-18145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:26:54.987 [DEBUG] [Thread-18145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:26:54.987 [DEBUG] [Thread-18145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:26:54.987 [DEBUG] [Thread-18145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:26:54.987 [DEBUG] [Thread-18145] [transport.py] [_log()] Compression: none
2025-11-12T15:26:54.988 [DEBUG] [Thread-18145] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:26:55.047 [DEBUG] [Thread-18145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:26:55.048 [DEBUG] [Thread-18145] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:26:55.049 [DEBUG] [Thread-18145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:26:55.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:26:55.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:26:55.106 [DEBUG] [Thread-18145] [transport.py] [_log()] userauth is OK
2025-11-12T15:26:55.106 [DEBUG] [Thread-18145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:26:55.106 [DEBUG] [Thread-18145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:26:55.106 [DEBUG] [Thread-18145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:26:55.107 [DEBUG] [Thread-18145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:26:55.126 [INFO] [Thread-18145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:26:55.127 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:26:55.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:26:55.950 [DEBUG] [Thread-18145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:26:55.950 [DEBUG] [Thread-18145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:26:55.998 [DEBUG] [Thread-18145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:26:55.998 [DEBUG] [Thread-18145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:26:56.006 [DEBUG] [Thread-18145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:26:56.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:26:56.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-11-12T15:26:56.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-11-12T15:26:56.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:26:56.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:26:56.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:26:56.040 [DEBUG] [Thread-18145] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:27:03.908 [DEBUG] [Thread-18147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:27:18.948 [DEBUG] [Thread-18148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:27:26.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:27:26.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:27:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:27:26.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 2), 31.38, 12.31, 0.0, 39.74, 27.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:27:26.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:02
2025-11-12T15:27:26.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:27:26.985 [DEBUG] [Thread-18149] [transport.py] [_log()] starting thread (client mode): 0x1493cd90
2025-11-12T15:27:26.985 [DEBUG] [Thread-18149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:27:27.005 [DEBUG] [Thread-18149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:27:27.006 [INFO] [Thread-18149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] client lang: <none>
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] server lang: <none>
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] kex follows: False
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] Compression: none
2025-11-12T15:27:27.009 [DEBUG] [Thread-18149] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:27:27.026 [DEBUG] [Thread-18149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:27:27.026 [DEBUG] [Thread-18149] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:27:27.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:27:27.027 [DEBUG] [Thread-18149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:27:27.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:27:27.029 [DEBUG] [Thread-18149] [transport.py] [_log()] userauth is OK
2025-11-12T15:27:27.030 [DEBUG] [Thread-18149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:27:27.030 [DEBUG] [Thread-18149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:27:27.030 [DEBUG] [Thread-18149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:27:27.030 [DEBUG] [Thread-18149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:27:27.046 [INFO] [Thread-18149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:27:27.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:27:27.661 [DEBUG] [Thread-18149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:27:27.661 [DEBUG] [Thread-18149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:27:27.661 [DEBUG] [Thread-18149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:27:27.702 [DEBUG] [Thread-18149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:27:27.702 [DEBUG] [Thread-18149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:27:27.705 [DEBUG] [Thread-18149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:27:27.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:27:27.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:27:27.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:27:27.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:27:27.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:27:27.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:27:27.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:27:27.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:27:27.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:27:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.560504 -999.00  +26.90  30.56     18   +1.00 1 1 2 1 1   888    0 26.28 -14.46 ----- 30.6 30.6 276.8 40.8 30.8 -27.4 30.7 -24.3 31.0 -27.2 31.8 -25.5
2025-11-12T15:27:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:27:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:27:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.560504
2025-11-12T15:27:27.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:27:27.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:27:27.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:27:27.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:27:27.731 [DEBUG] [Thread-18149] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:27:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:27:27.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:02', tmtdew=31.38, humidity=12.31, cloud=0.0, wind=39.74, temperature=27.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:27:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:27:27.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:27:27.827 [DEBUG] [Thread-18152] [transport.py] [_log()] starting thread (client mode): 0x173e9d50
2025-11-12T15:27:27.827 [DEBUG] [Thread-18152] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:27:27.842 [DEBUG] [Thread-18152] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:27:27.842 [INFO] [Thread-18152] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] client lang: <none>
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] server lang: <none>
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] kex follows: False
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:27:27.850 [DEBUG] [Thread-18152] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:27:27.851 [DEBUG] [Thread-18152] [transport.py] [_log()] Compression: none
2025-11-12T15:27:27.851 [DEBUG] [Thread-18152] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:27:27.909 [DEBUG] [Thread-18152] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:27:27.910 [DEBUG] [Thread-18152] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:27:27.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:27:27.911 [DEBUG] [Thread-18152] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:27:27.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:27:27.965 [DEBUG] [Thread-18152] [transport.py] [_log()] userauth is OK
2025-11-12T15:27:27.966 [DEBUG] [Thread-18152] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:27:27.966 [DEBUG] [Thread-18152] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:27:27.966 [DEBUG] [Thread-18152] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:27:27.966 [DEBUG] [Thread-18152] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:27:27.985 [INFO] [Thread-18152] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:27:27.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:27:27.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:27:28.875 [DEBUG] [Thread-18152] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:27:28.876 [DEBUG] [Thread-18152] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:27:28.924 [DEBUG] [Thread-18152] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:27:28.924 [DEBUG] [Thread-18152] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:27:28.933 [DEBUG] [Thread-18152] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:27:28.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:27:28.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-11-12T15:27:28.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-11-12T15:27:28.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:27:28.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:27:28.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:27:28.969 [DEBUG] [Thread-18152] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:27:33.980 [DEBUG] [Thread-18154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:27:36.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:27:36.296 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:27:38.419 [DEBUG] [Thread-18155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:27:49.025 [DEBUG] [Thread-18156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:27:58.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:27:58.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:27:58.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-11-12T15:27:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 16), 31.88, 12.31, 0.0, 32.54, 28.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:27:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:16
2025-11-12T15:27:59.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:27:59.907 [DEBUG] [Thread-18157] [transport.py] [_log()] starting thread (client mode): 0x173bcf70
2025-11-12T15:27:59.908 [DEBUG] [Thread-18157] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:27:59.929 [DEBUG] [Thread-18157] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:27:59.929 [INFO] [Thread-18157] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] client lang: <none>
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] server lang: <none>
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] kex follows: False
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] Compression: none
2025-11-12T15:27:59.933 [DEBUG] [Thread-18157] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:27:59.951 [DEBUG] [Thread-18157] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:27:59.952 [DEBUG] [Thread-18157] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:27:59.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:27:59.953 [DEBUG] [Thread-18157] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:27:59.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:27:59.955 [DEBUG] [Thread-18157] [transport.py] [_log()] userauth is OK
2025-11-12T15:27:59.955 [DEBUG] [Thread-18157] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:27:59.955 [DEBUG] [Thread-18157] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:27:59.955 [DEBUG] [Thread-18157] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:27:59.955 [DEBUG] [Thread-18157] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:27:59.980 [INFO] [Thread-18157] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:27:59.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:28:00.620 [DEBUG] [Thread-18157] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:28:00.620 [DEBUG] [Thread-18157] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:28:00.621 [DEBUG] [Thread-18157] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:28:00.661 [DEBUG] [Thread-18157] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:28:00.661 [DEBUG] [Thread-18157] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:28:00.664 [DEBUG] [Thread-18157] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:28:00.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:28:00.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:28:00.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:28:00.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:28:00.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:28:00.686 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:28:00.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:28:00.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:28:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:28:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.560851 -999.00  +27.20  35.79     18   +1.10 1 1 2 1 1   888    0 25.90 -15.27 ----- 35.8 35.8 296.8 39.6 31.1 -25.8 30.7 -23.9 31.3 -25.1 31.9 -24.9
2025-11-12T15:28:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:28:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:28:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.560851
2025-11-12T15:28:00.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:28:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:28:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:28:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:28:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:28:00.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:16', tmtdew=31.88, humidity=12.31, cloud=0.0, wind=32.54, temperature=28.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:27:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:28:00.688 [DEBUG] [Thread-18157] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:28:00.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:28:00.783 [DEBUG] [Thread-18160] [transport.py] [_log()] starting thread (client mode): 0x173f89d0
2025-11-12T15:28:00.783 [DEBUG] [Thread-18160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:28:00.798 [DEBUG] [Thread-18160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:28:00.798 [INFO] [Thread-18160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:28:00.806 [DEBUG] [Thread-18160] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:28:00.806 [DEBUG] [Thread-18160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:28:00.806 [DEBUG] [Thread-18160] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] client lang: <none>
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] server lang: <none>
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] kex follows: False
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:28:00.807 [DEBUG] [Thread-18160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:28:00.808 [DEBUG] [Thread-18160] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:28:00.808 [DEBUG] [Thread-18160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:28:00.808 [DEBUG] [Thread-18160] [transport.py] [_log()] Compression: none
2025-11-12T15:28:00.808 [DEBUG] [Thread-18160] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:28:00.865 [DEBUG] [Thread-18160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:28:00.866 [DEBUG] [Thread-18160] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:28:00.867 [DEBUG] [Thread-18160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:28:00.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:28:00.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:28:00.921 [DEBUG] [Thread-18160] [transport.py] [_log()] userauth is OK
2025-11-12T15:28:00.922 [DEBUG] [Thread-18160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:28:00.922 [DEBUG] [Thread-18160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:28:00.922 [DEBUG] [Thread-18160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:28:00.922 [DEBUG] [Thread-18160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:28:00.942 [INFO] [Thread-18160] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:28:00.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:28:00.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:28:01.811 [DEBUG] [Thread-18160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:28:01.811 [DEBUG] [Thread-18160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:28:01.859 [DEBUG] [Thread-18160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:28:01.859 [DEBUG] [Thread-18160] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:28:01.868 [DEBUG] [Thread-18160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:28:01.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:28:01.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-11-12T15:28:01.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-11-12T15:28:01.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:28:01.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:28:01.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:28:01.906 [DEBUG] [Thread-18160] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:28:04.055 [DEBUG] [Thread-18162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:28:19.110 [DEBUG] [Thread-18163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:28:31.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:28:31.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:28:31.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-11-12T15:28:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 16), 31.88, 12.31, 0.0, 32.54, 28.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:28:32.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:16
2025-11-12T15:28:32.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:28:32.809 [DEBUG] [Thread-18164] [transport.py] [_log()] starting thread (client mode): 0x1737d120
2025-11-12T15:28:32.810 [DEBUG] [Thread-18164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:28:32.829 [DEBUG] [Thread-18164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:28:32.830 [INFO] [Thread-18164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:28:32.832 [DEBUG] [Thread-18164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] client lang: <none>
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] server lang: <none>
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] kex follows: False
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:28:32.833 [DEBUG] [Thread-18164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:28:32.834 [DEBUG] [Thread-18164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:28:32.834 [DEBUG] [Thread-18164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:28:32.834 [DEBUG] [Thread-18164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:28:32.834 [DEBUG] [Thread-18164] [transport.py] [_log()] Compression: none
2025-11-12T15:28:32.834 [DEBUG] [Thread-18164] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:28:32.852 [DEBUG] [Thread-18164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:28:32.852 [DEBUG] [Thread-18164] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:28:32.853 [DEBUG] [Thread-18164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:28:32.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:28:32.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:28:32.854 [DEBUG] [Thread-18164] [transport.py] [_log()] userauth is OK
2025-11-12T15:28:32.854 [DEBUG] [Thread-18164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:28:32.854 [DEBUG] [Thread-18164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:28:32.854 [DEBUG] [Thread-18164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:28:32.854 [DEBUG] [Thread-18164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:28:32.871 [INFO] [Thread-18164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:28:32.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:28:33.538 [DEBUG] [Thread-18164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:28:33.538 [DEBUG] [Thread-18164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:28:33.539 [DEBUG] [Thread-18164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:28:33.580 [DEBUG] [Thread-18164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:28:33.580 [DEBUG] [Thread-18164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:28:33.584 [DEBUG] [Thread-18164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:28:33.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:28:33.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:28:33.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:28:33.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:28:33.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:28:33.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:28:33.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:28:33.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:28:33.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:28:33.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.561198 -999.00  +26.80  32.44     18   +1.10 1 1 2 1 1   888    0 25.48 -18.18 ----- 32.4 32.4 288.8 41.3 31.0 -25.9 30.7 -24.5 31.2 -24.4 31.9 -25.2
2025-11-12T15:28:33.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:28:33.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:28:33.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.561198
2025-11-12T15:28:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:28:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:28:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:28:33.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:28:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:28:33.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:16', tmtdew=31.88, humidity=12.31, cloud=0.0, wind=32.54, temperature=28.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:28:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:28:33.608 [DEBUG] [Thread-18164] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:28:33.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:28:33.705 [DEBUG] [Thread-18167] [transport.py] [_log()] starting thread (client mode): 0x1737d720
2025-11-12T15:28:33.705 [DEBUG] [Thread-18167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:28:33.720 [DEBUG] [Thread-18167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:28:33.720 [INFO] [Thread-18167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:28:33.727 [DEBUG] [Thread-18167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:28:33.727 [DEBUG] [Thread-18167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:28:33.727 [DEBUG] [Thread-18167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:28:33.727 [DEBUG] [Thread-18167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:28:33.727 [DEBUG] [Thread-18167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] client lang: <none>
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] server lang: <none>
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] kex follows: False
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] Compression: none
2025-11-12T15:28:33.728 [DEBUG] [Thread-18167] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:28:33.785 [DEBUG] [Thread-18167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:28:33.785 [DEBUG] [Thread-18167] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:28:33.786 [DEBUG] [Thread-18167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:28:33.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:28:33.787 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:28:33.844 [DEBUG] [Thread-18167] [transport.py] [_log()] userauth is OK
2025-11-12T15:28:33.844 [DEBUG] [Thread-18167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:28:33.844 [DEBUG] [Thread-18167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:28:33.844 [DEBUG] [Thread-18167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:28:33.844 [DEBUG] [Thread-18167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:28:33.879 [INFO] [Thread-18167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:28:33.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:28:33.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:28:34.142 [DEBUG] [Thread-18169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:28:34.733 [DEBUG] [Thread-18167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:28:34.734 [DEBUG] [Thread-18167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:28:34.782 [DEBUG] [Thread-18167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:28:34.782 [DEBUG] [Thread-18167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:28:34.791 [DEBUG] [Thread-18167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:28:34.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:28:34.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-11-12T15:28:34.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:28:34.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:28:34.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:28:34.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:28:34.828 [DEBUG] [Thread-18167] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:28:36.443 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:28:36.444 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:28:38.452 [DEBUG] [Thread-18170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:28:49.194 [DEBUG] [Thread-18171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:29:04.230 [DEBUG] [Thread-18172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:29:04.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:29:04.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:29:04.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:29:05.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 16), 31.83, 12.31, 0.0, 32.54, 28.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:29:05.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:16
2025-11-12T15:29:05.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:29:05.806 [DEBUG] [Thread-18173] [transport.py] [_log()] starting thread (client mode): 0x1493e110
2025-11-12T15:29:05.807 [DEBUG] [Thread-18173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:29:05.827 [DEBUG] [Thread-18173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:29:05.827 [INFO] [Thread-18173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] client lang: <none>
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] server lang: <none>
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] kex follows: False
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:29:05.830 [DEBUG] [Thread-18173] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:29:05.831 [DEBUG] [Thread-18173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:29:05.831 [DEBUG] [Thread-18173] [transport.py] [_log()] Compression: none
2025-11-12T15:29:05.831 [DEBUG] [Thread-18173] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:29:05.846 [DEBUG] [Thread-18173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:29:05.846 [DEBUG] [Thread-18173] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:29:05.846 [DEBUG] [Thread-18173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:29:05.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:29:05.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:29:05.847 [DEBUG] [Thread-18173] [transport.py] [_log()] userauth is OK
2025-11-12T15:29:05.847 [DEBUG] [Thread-18173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:29:05.847 [DEBUG] [Thread-18173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:29:05.847 [DEBUG] [Thread-18173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:29:05.847 [DEBUG] [Thread-18173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:29:05.857 [INFO] [Thread-18173] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:29:05.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:29:06.463 [DEBUG] [Thread-18173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:29:06.463 [DEBUG] [Thread-18173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:29:06.463 [DEBUG] [Thread-18173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:29:06.504 [DEBUG] [Thread-18173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:29:06.504 [DEBUG] [Thread-18173] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:29:06.506 [DEBUG] [Thread-18173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:29:06.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:29:06.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:29:06.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:29:06.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:29:06.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:29:06.521 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:29:06.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:29:06.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.561546 -999.00  +26.90  32.17     18   +1.20 1 1 2 1 1   888    0 25.13 -22.57 ----- 32.2 32.2 283.4 38.7 31.1 -25.7 30.8 -24.2 31.3 -23.6 32.0 -24.0
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.561546
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:29:06.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:16', tmtdew=31.83, humidity=12.31, cloud=0.0, wind=32.54, temperature=28.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:28:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:29:06.522 [DEBUG] [Thread-18173] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:29:06.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:29:06.616 [DEBUG] [Thread-18176] [transport.py] [_log()] starting thread (client mode): 0x14982530
2025-11-12T15:29:06.616 [DEBUG] [Thread-18176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:29:06.632 [DEBUG] [Thread-18176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:29:06.632 [INFO] [Thread-18176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] client lang: <none>
2025-11-12T15:29:06.639 [DEBUG] [Thread-18176] [transport.py] [_log()] server lang: <none>
2025-11-12T15:29:06.640 [DEBUG] [Thread-18176] [transport.py] [_log()] kex follows: False
2025-11-12T15:29:06.640 [DEBUG] [Thread-18176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:29:06.640 [DEBUG] [Thread-18176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:29:06.640 [DEBUG] [Thread-18176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:29:06.640 [DEBUG] [Thread-18176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:29:06.640 [DEBUG] [Thread-18176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:29:06.640 [DEBUG] [Thread-18176] [transport.py] [_log()] Compression: none
2025-11-12T15:29:06.640 [DEBUG] [Thread-18176] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:29:06.695 [DEBUG] [Thread-18176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:29:06.695 [DEBUG] [Thread-18176] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:29:06.695 [DEBUG] [Thread-18176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:29:06.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:29:06.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:29:06.752 [DEBUG] [Thread-18176] [transport.py] [_log()] userauth is OK
2025-11-12T15:29:06.752 [DEBUG] [Thread-18176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:29:06.752 [DEBUG] [Thread-18176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:29:06.752 [DEBUG] [Thread-18176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:29:06.752 [DEBUG] [Thread-18176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:29:06.766 [INFO] [Thread-18176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:29:06.766 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:29:06.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:29:07.646 [DEBUG] [Thread-18176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:29:07.647 [DEBUG] [Thread-18176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:29:07.694 [DEBUG] [Thread-18176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:29:07.694 [DEBUG] [Thread-18176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:29:07.702 [DEBUG] [Thread-18176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:29:07.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:29:07.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:29:07.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-11-12T15:29:07.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:29:07.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:29:07.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:29:07.735 [DEBUG] [Thread-18176] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:29:19.263 [DEBUG] [Thread-18178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:29:34.311 [DEBUG] [Thread-18179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:29:36.585 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:29:36.587 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:29:37.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:29:37.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:29:37.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-11-12T15:29:38.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 16), 31.83, 12.31, 0.0, 32.54, 28.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:29:38.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:16
2025-11-12T15:29:38.480 [DEBUG] [Thread-18180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:29:38.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:29:38.659 [DEBUG] [Thread-18181] [transport.py] [_log()] starting thread (client mode): 0x1739a200
2025-11-12T15:29:38.659 [DEBUG] [Thread-18181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:29:38.680 [DEBUG] [Thread-18181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:29:38.680 [INFO] [Thread-18181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] client lang: <none>
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] server lang: <none>
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] kex follows: False
2025-11-12T15:29:38.683 [DEBUG] [Thread-18181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:29:38.684 [DEBUG] [Thread-18181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:29:38.684 [DEBUG] [Thread-18181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:29:38.684 [DEBUG] [Thread-18181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:29:38.684 [DEBUG] [Thread-18181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:29:38.684 [DEBUG] [Thread-18181] [transport.py] [_log()] Compression: none
2025-11-12T15:29:38.684 [DEBUG] [Thread-18181] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:29:38.696 [DEBUG] [Thread-18181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:29:38.697 [DEBUG] [Thread-18181] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:29:38.698 [DEBUG] [Thread-18181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:29:38.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:29:38.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:29:38.700 [DEBUG] [Thread-18181] [transport.py] [_log()] userauth is OK
2025-11-12T15:29:38.700 [DEBUG] [Thread-18181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:29:38.700 [DEBUG] [Thread-18181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:29:38.700 [DEBUG] [Thread-18181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:29:38.700 [DEBUG] [Thread-18181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:29:38.723 [INFO] [Thread-18181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:29:38.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:29:39.350 [DEBUG] [Thread-18181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:29:39.350 [DEBUG] [Thread-18181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:29:39.351 [DEBUG] [Thread-18181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:29:39.391 [DEBUG] [Thread-18181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:29:39.392 [DEBUG] [Thread-18181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:29:39.394 [DEBUG] [Thread-18181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:29:39.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:29:39.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:29:39.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:29:39.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:29:39.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:29:39.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:29:39.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:29:39.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:29:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:29:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.561893 -999.00  +27.20  25.24     18   +1.30 1 1 1 1 1   888    0 25.24 -22.57 ----- 25.2 25.2 269.7 33.0 31.1 -28.1 30.9 -24.5 31.4 -26.8 32.1 -24.9
2025-11-12T15:29:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:29:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:29:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.561893
2025-11-12T15:29:39.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:29:39.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:29:39.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:29:39.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:29:39.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:29:39.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:16', tmtdew=31.83, humidity=12.31, cloud=0.0, wind=32.54, temperature=28.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:29:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:29:39.422 [DEBUG] [Thread-18181] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:29:39.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:29:39.516 [DEBUG] [Thread-18184] [transport.py] [_log()] starting thread (client mode): 0x149618d0
2025-11-12T15:29:39.516 [DEBUG] [Thread-18184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:29:39.530 [DEBUG] [Thread-18184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:29:39.530 [INFO] [Thread-18184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] client lang: <none>
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] server lang: <none>
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] kex follows: False
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:29:39.538 [DEBUG] [Thread-18184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:29:39.539 [DEBUG] [Thread-18184] [transport.py] [_log()] Compression: none
2025-11-12T15:29:39.539 [DEBUG] [Thread-18184] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:29:39.596 [DEBUG] [Thread-18184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:29:39.597 [DEBUG] [Thread-18184] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:29:39.597 [DEBUG] [Thread-18184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:29:39.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:29:39.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:29:39.655 [DEBUG] [Thread-18184] [transport.py] [_log()] userauth is OK
2025-11-12T15:29:39.655 [DEBUG] [Thread-18184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:29:39.655 [DEBUG] [Thread-18184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:29:39.655 [DEBUG] [Thread-18184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:29:39.655 [DEBUG] [Thread-18184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:29:39.674 [INFO] [Thread-18184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:29:39.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:29:39.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:29:40.546 [DEBUG] [Thread-18184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:29:40.546 [DEBUG] [Thread-18184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:29:40.594 [DEBUG] [Thread-18184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:29:40.594 [DEBUG] [Thread-18184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:29:40.606 [DEBUG] [Thread-18184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:29:40.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:29:40.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-11-12T15:29:40.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-11-12T15:29:40.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:29:40.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:29:40.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:29:40.644 [DEBUG] [Thread-18184] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:29:49.344 [DEBUG] [Thread-18186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:30:04.393 [DEBUG] [Thread-18187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:30:10.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:30:10.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:30:10.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-11-12T15:30:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 16), 31.48, 12.31, 0.0, 30.74, 27.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:30:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:16
2025-11-12T15:30:11.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:30:11.576 [DEBUG] [Thread-18188] [transport.py] [_log()] starting thread (client mode): 0x1737f0d0
2025-11-12T15:30:11.577 [DEBUG] [Thread-18188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:30:11.603 [DEBUG] [Thread-18188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:30:11.603 [INFO] [Thread-18188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:30:11.606 [DEBUG] [Thread-18188] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:30:11.606 [DEBUG] [Thread-18188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:30:11.606 [DEBUG] [Thread-18188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:30:11.606 [DEBUG] [Thread-18188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:30:11.606 [DEBUG] [Thread-18188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] client lang: <none>
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] server lang: <none>
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] kex follows: False
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] Compression: none
2025-11-12T15:30:11.607 [DEBUG] [Thread-18188] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:30:11.618 [DEBUG] [Thread-18188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:30:11.618 [DEBUG] [Thread-18188] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:30:11.619 [DEBUG] [Thread-18188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:30:11.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:30:11.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:30:11.622 [DEBUG] [Thread-18188] [transport.py] [_log()] userauth is OK
2025-11-12T15:30:11.622 [DEBUG] [Thread-18188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:30:11.622 [DEBUG] [Thread-18188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:30:11.622 [DEBUG] [Thread-18188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:30:11.622 [DEBUG] [Thread-18188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:30:11.643 [INFO] [Thread-18188] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:30:11.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:30:12.317 [DEBUG] [Thread-18188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:30:12.317 [DEBUG] [Thread-18188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:30:12.317 [DEBUG] [Thread-18188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:30:12.358 [DEBUG] [Thread-18188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:30:12.358 [DEBUG] [Thread-18188] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:30:12.361 [DEBUG] [Thread-18188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:30:12.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:30:12.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:30:12.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:30:12.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:30:12.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:30:12.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:30:12.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:30:12.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:30:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:30:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.562587 -999.00  +27.30  28.47     18   +1.30 1 2 1 1 1   888    0 25.37 -23.81 ----- 28.5 28.5 270.6 32.6 31.3 -26.2 30.9 -23.8 31.5 -21.9 32.2 -23.1
2025-11-12T15:30:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:30:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:30:12.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.562587
2025-11-12T15:30:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:30:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:30:12.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:30:12.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:30:12.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T15:30:12.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:16', tmtdew=31.48, humidity=12.31, cloud=0.0, wind=30.74, temperature=27.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:30:07.517', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:30:12.386 [DEBUG] [Thread-18188] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:30:12.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:30:12.483 [DEBUG] [Thread-18191] [transport.py] [_log()] starting thread (client mode): 0x1737e140
2025-11-12T15:30:12.483 [DEBUG] [Thread-18191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:30:12.498 [DEBUG] [Thread-18191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:30:12.498 [INFO] [Thread-18191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:30:12.505 [DEBUG] [Thread-18191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] client lang: <none>
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] server lang: <none>
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] kex follows: False
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:30:12.506 [DEBUG] [Thread-18191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:30:12.507 [DEBUG] [Thread-18191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:30:12.507 [DEBUG] [Thread-18191] [transport.py] [_log()] Compression: none
2025-11-12T15:30:12.507 [DEBUG] [Thread-18191] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:30:12.564 [DEBUG] [Thread-18191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:30:12.565 [DEBUG] [Thread-18191] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:30:12.565 [DEBUG] [Thread-18191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:30:12.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:30:12.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:30:12.621 [DEBUG] [Thread-18191] [transport.py] [_log()] userauth is OK
2025-11-12T15:30:12.621 [DEBUG] [Thread-18191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:30:12.622 [DEBUG] [Thread-18191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:30:12.622 [DEBUG] [Thread-18191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:30:12.622 [DEBUG] [Thread-18191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:30:12.644 [INFO] [Thread-18191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:30:12.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:30:12.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:30:13.458 [DEBUG] [Thread-18191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:30:13.458 [DEBUG] [Thread-18191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:30:13.507 [DEBUG] [Thread-18191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:30:13.507 [DEBUG] [Thread-18191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:30:13.516 [DEBUG] [Thread-18191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:30:13.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:30:13.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-11-12T15:30:13.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-11-12T15:30:13.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:30:13.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:30:13.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:30:13.553 [DEBUG] [Thread-18191] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:30:19.428 [DEBUG] [Thread-18193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:30:34.482 [DEBUG] [Thread-18194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:30:36.727 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:30:36.728 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:30:38.543 [DEBUG] [Thread-18195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:30:43.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:30:43.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:30:43.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:30:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 16), 31.48, 12.31, 0.0, 30.74, 27.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:30:44.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:16
2025-11-12T15:30:44.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:30:44.506 [DEBUG] [Thread-18196] [transport.py] [_log()] starting thread (client mode): 0x1737c7f0
2025-11-12T15:30:44.506 [DEBUG] [Thread-18196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:30:44.527 [DEBUG] [Thread-18196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:30:44.528 [INFO] [Thread-18196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] client lang: <none>
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] server lang: <none>
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] kex follows: False
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] Compression: none
2025-11-12T15:30:44.531 [DEBUG] [Thread-18196] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:30:44.548 [DEBUG] [Thread-18196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:30:44.549 [DEBUG] [Thread-18196] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:30:44.549 [DEBUG] [Thread-18196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:30:44.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:30:44.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:30:44.551 [DEBUG] [Thread-18196] [transport.py] [_log()] userauth is OK
2025-11-12T15:30:44.551 [DEBUG] [Thread-18196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:30:44.551 [DEBUG] [Thread-18196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:30:44.552 [DEBUG] [Thread-18196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:30:44.552 [DEBUG] [Thread-18196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:30:44.575 [INFO] [Thread-18196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:30:44.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:30:45.198 [DEBUG] [Thread-18196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:30:45.198 [DEBUG] [Thread-18196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:30:45.199 [DEBUG] [Thread-18196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:30:45.240 [DEBUG] [Thread-18196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:30:45.240 [DEBUG] [Thread-18196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:30:45.243 [DEBUG] [Thread-18196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:30:45.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:30:45.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:30:45.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:30:45.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:30:45.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:30:45.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:30:45.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:30:45.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:30:45.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:30:45.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.562587 -999.00  +27.30  28.47     18   +1.30 1 2 1 1 1   888    0 25.37 -23.81 ----- 28.5 28.5 270.6 32.6 31.3 -26.2 30.9 -23.8 31.5 -21.9 32.2 -23.1
2025-11-12T15:30:45.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:30:45.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:30:45.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.562587
2025-11-12T15:30:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:30:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:30:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:30:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:30:45.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T15:30:45.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:16', tmtdew=31.48, humidity=12.31, cloud=0.0, wind=30.74, temperature=27.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:30:07.517', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:30:45.262 [DEBUG] [Thread-18196] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:30:45.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:30:45.358 [DEBUG] [Thread-18199] [transport.py] [_log()] starting thread (client mode): 0x19dd8f10
2025-11-12T15:30:45.359 [DEBUG] [Thread-18199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:30:45.373 [DEBUG] [Thread-18199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:30:45.373 [INFO] [Thread-18199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:30:45.381 [DEBUG] [Thread-18199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:30:45.381 [DEBUG] [Thread-18199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:30:45.381 [DEBUG] [Thread-18199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:30:45.381 [DEBUG] [Thread-18199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:30:45.381 [DEBUG] [Thread-18199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] client lang: <none>
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] server lang: <none>
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] kex follows: False
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:30:45.382 [DEBUG] [Thread-18199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:30:45.383 [DEBUG] [Thread-18199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:30:45.383 [DEBUG] [Thread-18199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:30:45.383 [DEBUG] [Thread-18199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:30:45.383 [DEBUG] [Thread-18199] [transport.py] [_log()] Compression: none
2025-11-12T15:30:45.383 [DEBUG] [Thread-18199] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:30:45.441 [DEBUG] [Thread-18199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:30:45.442 [DEBUG] [Thread-18199] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:30:45.443 [DEBUG] [Thread-18199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:30:45.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:30:45.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:30:45.497 [DEBUG] [Thread-18199] [transport.py] [_log()] userauth is OK
2025-11-12T15:30:45.497 [DEBUG] [Thread-18199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:30:45.497 [DEBUG] [Thread-18199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:30:45.497 [DEBUG] [Thread-18199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:30:45.497 [DEBUG] [Thread-18199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:30:45.517 [INFO] [Thread-18199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:30:45.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:30:45.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:30:46.355 [DEBUG] [Thread-18199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:30:46.355 [DEBUG] [Thread-18199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:30:46.402 [DEBUG] [Thread-18199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:30:46.403 [DEBUG] [Thread-18199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:30:46.412 [DEBUG] [Thread-18199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:30:46.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:30:46.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-11-12T15:30:46.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:30:46.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:30:46.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:30:46.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:30:46.448 [DEBUG] [Thread-18199] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:30:49.521 [DEBUG] [Thread-18201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:31:04.554 [DEBUG] [Thread-18202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:31:16.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:31:16.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:31:16.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-11-12T15:31:17.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 16), 31.78, 12.31, 0.0, 36.14, 27.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:31:17.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:16
2025-11-12T15:31:17.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:31:17.390 [DEBUG] [Thread-18203] [transport.py] [_log()] starting thread (client mode): 0x1737dde0
2025-11-12T15:31:17.390 [DEBUG] [Thread-18203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:31:17.410 [DEBUG] [Thread-18203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:31:17.410 [INFO] [Thread-18203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:31:17.413 [DEBUG] [Thread-18203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] client lang: <none>
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] server lang: <none>
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] kex follows: False
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:31:17.414 [DEBUG] [Thread-18203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:31:17.415 [DEBUG] [Thread-18203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:31:17.415 [DEBUG] [Thread-18203] [transport.py] [_log()] Compression: none
2025-11-12T15:31:17.415 [DEBUG] [Thread-18203] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:31:17.424 [DEBUG] [Thread-18203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:31:17.425 [DEBUG] [Thread-18203] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:31:17.426 [DEBUG] [Thread-18203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:31:17.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:31:17.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:31:17.428 [DEBUG] [Thread-18203] [transport.py] [_log()] userauth is OK
2025-11-12T15:31:17.429 [DEBUG] [Thread-18203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:31:17.429 [DEBUG] [Thread-18203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:31:17.429 [DEBUG] [Thread-18203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:31:17.429 [DEBUG] [Thread-18203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:31:17.449 [INFO] [Thread-18203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:31:17.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:31:18.044 [DEBUG] [Thread-18203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:31:18.045 [DEBUG] [Thread-18203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:31:18.045 [DEBUG] [Thread-18203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:31:18.086 [DEBUG] [Thread-18203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:31:18.086 [DEBUG] [Thread-18203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:31:18.089 [DEBUG] [Thread-18203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:31:18.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:31:18.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:31:18.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:31:18.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:31:18.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:31:18.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:31:18.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:31:18.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:31:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:31:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.562935 -999.00  +27.20  25.94     18   +0.90 1 1 1 1 1   888    0 25.75 -18.76 ----- 25.9 25.9 269.2 38.5 31.3 -26.0 31.1 -24.4 31.6 -23.0 32.0 -25.4
2025-11-12T15:31:18.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:31:18.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:31:18.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.562935
2025-11-12T15:31:18.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:31:18.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:31:18.114 [DEBUG] [Thread-18203] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:31:18.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:31:18.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:31:18.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:31:18.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:16', tmtdew=31.78, humidity=12.31, cloud=0.0, wind=36.14, temperature=27.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:30:37.584', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:31:18.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:31:18.207 [DEBUG] [Thread-18206] [transport.py] [_log()] starting thread (client mode): 0x1737d240
2025-11-12T15:31:18.208 [DEBUG] [Thread-18206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:31:18.222 [DEBUG] [Thread-18206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:31:18.222 [INFO] [Thread-18206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:31:18.230 [DEBUG] [Thread-18206] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:31:18.230 [DEBUG] [Thread-18206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:31:18.230 [DEBUG] [Thread-18206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:31:18.230 [DEBUG] [Thread-18206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:31:18.230 [DEBUG] [Thread-18206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:31:18.230 [DEBUG] [Thread-18206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:31:18.230 [DEBUG] [Thread-18206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:31:18.230 [DEBUG] [Thread-18206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] client lang: <none>
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] server lang: <none>
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] kex follows: False
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] Compression: none
2025-11-12T15:31:18.231 [DEBUG] [Thread-18206] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:31:18.288 [DEBUG] [Thread-18206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:31:18.289 [DEBUG] [Thread-18206] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:31:18.290 [DEBUG] [Thread-18206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:31:18.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:31:18.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:31:18.345 [DEBUG] [Thread-18206] [transport.py] [_log()] userauth is OK
2025-11-12T15:31:18.345 [DEBUG] [Thread-18206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:31:18.345 [DEBUG] [Thread-18206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:31:18.345 [DEBUG] [Thread-18206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:31:18.345 [DEBUG] [Thread-18206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:31:18.363 [INFO] [Thread-18206] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:31:18.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:31:18.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:31:19.184 [DEBUG] [Thread-18206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:31:19.184 [DEBUG] [Thread-18206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:31:19.232 [DEBUG] [Thread-18206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:31:19.232 [DEBUG] [Thread-18206] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:31:19.240 [DEBUG] [Thread-18206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:31:19.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:31:19.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-11-12T15:31:19.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-11-12T15:31:19.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:31:19.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:31:19.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:31:19.272 [DEBUG] [Thread-18206] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:31:19.585 [DEBUG] [Thread-18208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:31:34.625 [DEBUG] [Thread-18209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:31:36.867 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:31:36.868 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:31:38.571 [DEBUG] [Thread-18210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:31:49.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:31:49.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:31:49.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-11-12T15:31:49.656 [DEBUG] [Thread-18211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:31:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 27, 16), 31.78, 12.31, 0.0, 36.14, 27.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:31:49.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:27:16
2025-11-12T15:31:50.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:31:50.205 [DEBUG] [Thread-18212] [transport.py] [_log()] starting thread (client mode): 0x1494faf0
2025-11-12T15:31:50.206 [DEBUG] [Thread-18212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:31:50.226 [DEBUG] [Thread-18212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:31:50.226 [INFO] [Thread-18212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] client lang: <none>
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] server lang: <none>
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] kex follows: False
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] Compression: none
2025-11-12T15:31:50.229 [DEBUG] [Thread-18212] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:31:50.247 [DEBUG] [Thread-18212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:31:50.248 [DEBUG] [Thread-18212] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:31:50.248 [DEBUG] [Thread-18212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:31:50.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:31:50.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:31:50.251 [DEBUG] [Thread-18212] [transport.py] [_log()] userauth is OK
2025-11-12T15:31:50.251 [DEBUG] [Thread-18212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:31:50.251 [DEBUG] [Thread-18212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:31:50.251 [DEBUG] [Thread-18212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:31:50.251 [DEBUG] [Thread-18212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:31:50.272 [INFO] [Thread-18212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:31:50.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:31:50.922 [DEBUG] [Thread-18212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:31:50.922 [DEBUG] [Thread-18212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:31:50.922 [DEBUG] [Thread-18212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:31:50.963 [DEBUG] [Thread-18212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:31:50.963 [DEBUG] [Thread-18212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:31:50.965 [DEBUG] [Thread-18212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:31:50.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:31:50.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:31:50.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:31:50.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:31:50.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:31:50.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:31:50.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.563282 -999.00  +27.20  24.87     18   +0.90 1 1 1 1 1   888    0 25.41 -15.41 ----- 24.9 24.9 255.4 38.5 31.3 -26.2 31.1 -24.7 31.8 -22.6 32.2 -25.8
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.563282
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:31:50.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:27:16', tmtdew=31.78, humidity=12.31, cloud=0.0, wind=36.14, temperature=27.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:31:07.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:31:50.983 [DEBUG] [Thread-18212] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:31:51.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:31:51.067 [DEBUG] [Thread-18215] [transport.py] [_log()] starting thread (client mode): 0x173fbbb0
2025-11-12T15:31:51.068 [DEBUG] [Thread-18215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:31:51.083 [DEBUG] [Thread-18215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:31:51.083 [INFO] [Thread-18215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] client lang: <none>
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] server lang: <none>
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] kex follows: False
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:31:51.091 [DEBUG] [Thread-18215] [transport.py] [_log()] Compression: none
2025-11-12T15:31:51.092 [DEBUG] [Thread-18215] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:31:51.147 [DEBUG] [Thread-18215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:31:51.147 [DEBUG] [Thread-18215] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:31:51.147 [DEBUG] [Thread-18215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:31:51.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:31:51.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:31:51.204 [DEBUG] [Thread-18215] [transport.py] [_log()] userauth is OK
2025-11-12T15:31:51.204 [DEBUG] [Thread-18215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:31:51.204 [DEBUG] [Thread-18215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:31:51.204 [DEBUG] [Thread-18215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:31:51.204 [DEBUG] [Thread-18215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:31:51.222 [INFO] [Thread-18215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:31:51.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:31:51.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:31:52.104 [DEBUG] [Thread-18215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:31:52.104 [DEBUG] [Thread-18215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:31:52.152 [DEBUG] [Thread-18215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:31:52.152 [DEBUG] [Thread-18215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:31:52.164 [DEBUG] [Thread-18215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:31:52.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:31:52.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-11-12T15:31:52.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-11-12T15:31:52.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:31:52.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:31:52.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:31:52.195 [DEBUG] [Thread-18215] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:32:04.690 [DEBUG] [Thread-18217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:32:19.747 [DEBUG] [Thread-18218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:32:22.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:32:22.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:32:22.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-11-12T15:32:22.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 31, 50), 31.44, 12.39, 0.0, 24.95, 27.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:32:22.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:31:50
2025-11-12T15:32:22.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:32:23.139 [DEBUG] [Thread-18219] [transport.py] [_log()] starting thread (client mode): 0x1737dea0
2025-11-12T15:32:23.139 [DEBUG] [Thread-18219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:32:23.150 [DEBUG] [Thread-18219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:32:23.150 [INFO] [Thread-18219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:32:23.153 [DEBUG] [Thread-18219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:32:23.153 [DEBUG] [Thread-18219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:32:23.153 [DEBUG] [Thread-18219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:32:23.153 [DEBUG] [Thread-18219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:32:23.153 [DEBUG] [Thread-18219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] client lang: <none>
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] server lang: <none>
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] kex follows: False
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] Compression: none
2025-11-12T15:32:23.154 [DEBUG] [Thread-18219] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:32:23.167 [DEBUG] [Thread-18219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:32:23.167 [DEBUG] [Thread-18219] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:32:23.167 [DEBUG] [Thread-18219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:32:23.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:32:23.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:32:23.168 [DEBUG] [Thread-18219] [transport.py] [_log()] userauth is OK
2025-11-12T15:32:23.168 [DEBUG] [Thread-18219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:32:23.168 [DEBUG] [Thread-18219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:32:23.168 [DEBUG] [Thread-18219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:32:23.168 [DEBUG] [Thread-18219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:32:23.183 [INFO] [Thread-18219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:32:23.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:32:23.721 [DEBUG] [Thread-18219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:32:23.721 [DEBUG] [Thread-18219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:32:23.722 [DEBUG] [Thread-18219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:32:23.762 [DEBUG] [Thread-18219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:32:23.762 [DEBUG] [Thread-18219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:32:23.764 [DEBUG] [Thread-18219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:32:23.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:32:23.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:32:23.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:32:23.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:32:23.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:32:23.781 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:32:23.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.563629 -999.00  +27.00  16.11     18   +0.80 1 1 1 1 1   888    0 25.71 -14.50 ----- 16.1 16.1 273.0 27.4 31.4 -25.6 31.2 -23.9 31.8 -23.4 32.2 -25.8
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.563629
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:32:23.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:31:50', tmtdew=31.44, humidity=12.39, cloud=0.0, wind=24.95, temperature=27.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:31:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:32:23.782 [DEBUG] [Thread-18219] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:32:23.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:32:23.868 [DEBUG] [Thread-18222] [transport.py] [_log()] starting thread (client mode): 0x19ddbcd0
2025-11-12T15:32:23.869 [DEBUG] [Thread-18222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:32:23.883 [DEBUG] [Thread-18222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:32:23.883 [INFO] [Thread-18222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:32:23.891 [DEBUG] [Thread-18222] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:32:23.891 [DEBUG] [Thread-18222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:32:23.891 [DEBUG] [Thread-18222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:32:23.891 [DEBUG] [Thread-18222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] client lang: <none>
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] server lang: <none>
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] kex follows: False
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] Compression: none
2025-11-12T15:32:23.892 [DEBUG] [Thread-18222] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:32:23.946 [DEBUG] [Thread-18222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:32:23.947 [DEBUG] [Thread-18222] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:32:23.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:32:23.947 [DEBUG] [Thread-18222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:32:23.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:32:24.004 [DEBUG] [Thread-18222] [transport.py] [_log()] userauth is OK
2025-11-12T15:32:24.004 [DEBUG] [Thread-18222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:32:24.004 [DEBUG] [Thread-18222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:32:24.004 [DEBUG] [Thread-18222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:32:24.004 [DEBUG] [Thread-18222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:32:24.018 [INFO] [Thread-18222] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:32:24.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:32:24.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:32:24.894 [DEBUG] [Thread-18222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:32:24.894 [DEBUG] [Thread-18222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:32:24.942 [DEBUG] [Thread-18222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:32:24.942 [DEBUG] [Thread-18222] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:32:24.951 [DEBUG] [Thread-18222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:32:24.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:32:24.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-11-12T15:32:24.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-11-12T15:32:24.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:32:24.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:32:24.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:32:24.987 [DEBUG] [Thread-18222] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:32:34.776 [DEBUG] [Thread-18224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:32:37.009 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:32:37.011 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:32:38.612 [DEBUG] [Thread-18225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:32:49.827 [DEBUG] [Thread-18226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:32:54.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:32:54.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:32:54.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-11-12T15:32:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 32, 22), 31.41, 12.39, 0.0, 25.34, 27.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:32:55.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:32:22
2025-11-12T15:32:55.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:32:55.989 [DEBUG] [Thread-18227] [transport.py] [_log()] starting thread (client mode): 0x1737e4d0
2025-11-12T15:32:55.989 [DEBUG] [Thread-18227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:32:56.011 [DEBUG] [Thread-18227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:32:56.011 [INFO] [Thread-18227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:32:56.014 [DEBUG] [Thread-18227] [transport.py] [_log()] client lang: <none>
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] server lang: <none>
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] kex follows: False
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] Compression: none
2025-11-12T15:32:56.015 [DEBUG] [Thread-18227] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:32:56.029 [DEBUG] [Thread-18227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:32:56.029 [DEBUG] [Thread-18227] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:32:56.029 [DEBUG] [Thread-18227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:32:56.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:32:56.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:32:56.030 [DEBUG] [Thread-18227] [transport.py] [_log()] userauth is OK
2025-11-12T15:32:56.030 [DEBUG] [Thread-18227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:32:56.030 [DEBUG] [Thread-18227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:32:56.030 [DEBUG] [Thread-18227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:32:56.030 [DEBUG] [Thread-18227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:32:56.039 [INFO] [Thread-18227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:32:56.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:32:56.654 [DEBUG] [Thread-18227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:32:56.654 [DEBUG] [Thread-18227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:32:56.655 [DEBUG] [Thread-18227] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:32:56.695 [DEBUG] [Thread-18227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:32:56.695 [DEBUG] [Thread-18227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:32:56.697 [DEBUG] [Thread-18227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:32:56.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:32:56.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:32:56.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:32:56.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:32:56.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:32:56.717 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:32:56.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:32:56.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:32:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:32:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.563976 -999.00  +27.30  21.98     18   +1.00 1 1 1 1 1   888    0 25.84 -14.02 ----- 22.0 22.0 284.1 24.8 31.6 -26.4 31.3 -23.5 32.0 -23.0 32.5 -24.6
2025-11-12T15:32:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:32:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:32:56.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.563976
2025-11-12T15:32:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:32:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:32:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:32:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:32:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:32:56.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:32:22', tmtdew=31.41, humidity=12.39, cloud=0.0, wind=25.34, temperature=27.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:32:07.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:32:56.719 [DEBUG] [Thread-18227] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:32:56.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:32:56.804 [DEBUG] [Thread-18230] [transport.py] [_log()] starting thread (client mode): 0x19dda080
2025-11-12T15:32:56.804 [DEBUG] [Thread-18230] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:32:56.822 [DEBUG] [Thread-18230] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:32:56.822 [INFO] [Thread-18230] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] client lang: <none>
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] server lang: <none>
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] kex follows: False
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:32:56.829 [DEBUG] [Thread-18230] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:32:56.830 [DEBUG] [Thread-18230] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:32:56.830 [DEBUG] [Thread-18230] [transport.py] [_log()] Compression: none
2025-11-12T15:32:56.830 [DEBUG] [Thread-18230] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:32:56.887 [DEBUG] [Thread-18230] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:32:56.887 [DEBUG] [Thread-18230] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:32:56.887 [DEBUG] [Thread-18230] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:32:56.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:32:56.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:32:56.944 [DEBUG] [Thread-18230] [transport.py] [_log()] userauth is OK
2025-11-12T15:32:56.944 [DEBUG] [Thread-18230] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:32:56.944 [DEBUG] [Thread-18230] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:32:56.944 [DEBUG] [Thread-18230] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:32:56.944 [DEBUG] [Thread-18230] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:32:56.963 [INFO] [Thread-18230] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:32:56.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:32:56.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:32:57.818 [DEBUG] [Thread-18230] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:32:57.818 [DEBUG] [Thread-18230] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:32:57.866 [DEBUG] [Thread-18230] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:32:57.866 [DEBUG] [Thread-18230] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:32:57.875 [DEBUG] [Thread-18230] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:32:57.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:32:57.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-11-12T15:32:57.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-11-12T15:32:57.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:32:57.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:32:57.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:32:57.907 [DEBUG] [Thread-18230] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:33:04.857 [DEBUG] [Thread-18232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:33:19.901 [DEBUG] [Thread-18233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:33:27.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:33:27.910 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:33:27.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:33:28.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 32, 54), 31.72, 12.47, 0.0, 27.0, 27.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:33:28.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:32:54
2025-11-12T15:33:28.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:33:28.882 [DEBUG] [Thread-18234] [transport.py] [_log()] starting thread (client mode): 0x149620b0
2025-11-12T15:33:28.882 [DEBUG] [Thread-18234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:33:28.903 [DEBUG] [Thread-18234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:33:28.904 [INFO] [Thread-18234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:33:28.907 [DEBUG] [Thread-18234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] client lang: <none>
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] server lang: <none>
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] kex follows: False
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:33:28.908 [DEBUG] [Thread-18234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:33:28.909 [DEBUG] [Thread-18234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:33:28.909 [DEBUG] [Thread-18234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:33:28.909 [DEBUG] [Thread-18234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:33:28.909 [DEBUG] [Thread-18234] [transport.py] [_log()] Compression: none
2025-11-12T15:33:28.909 [DEBUG] [Thread-18234] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:33:28.927 [DEBUG] [Thread-18234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:33:28.928 [DEBUG] [Thread-18234] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:33:28.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:33:28.929 [DEBUG] [Thread-18234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:33:28.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:33:28.931 [DEBUG] [Thread-18234] [transport.py] [_log()] userauth is OK
2025-11-12T15:33:28.931 [DEBUG] [Thread-18234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:33:28.931 [DEBUG] [Thread-18234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:33:28.931 [DEBUG] [Thread-18234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:33:28.931 [DEBUG] [Thread-18234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:33:28.949 [INFO] [Thread-18234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:33:28.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:33:29.672 [DEBUG] [Thread-18234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:33:29.672 [DEBUG] [Thread-18234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:33:29.673 [DEBUG] [Thread-18234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:33:29.714 [DEBUG] [Thread-18234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:33:29.714 [DEBUG] [Thread-18234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:33:29.717 [DEBUG] [Thread-18234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:33:29.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:33:29.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:33:29.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:33:29.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:33:29.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:33:29.746 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:33:29.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:33:29.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:33:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:33:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.564323 -999.00  +27.30  18.91     18   +0.90 1 1 1 1 1   888    0 25.99 -13.73 ----- 18.9 18.9 262.2 44.4 31.6 -25.5 31.4 -24.6 31.9 -22.4 32.4 -24.6
2025-11-12T15:33:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:33:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:33:29.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.564323
2025-11-12T15:33:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:33:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:33:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:33:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:33:29.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:33:29.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:32:54', tmtdew=31.72, humidity=12.47, cloud=0.0, wind=27.0, temperature=27.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:32:37.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:33:29.749 [DEBUG] [Thread-18234] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:33:29.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:33:29.845 [DEBUG] [Thread-18237] [transport.py] [_log()] starting thread (client mode): 0x149576d0
2025-11-12T15:33:29.845 [DEBUG] [Thread-18237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:33:29.861 [DEBUG] [Thread-18237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:33:29.861 [INFO] [Thread-18237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:33:29.868 [DEBUG] [Thread-18237] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:33:29.869 [DEBUG] [Thread-18237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:33:29.869 [DEBUG] [Thread-18237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:33:29.869 [DEBUG] [Thread-18237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:33:29.869 [DEBUG] [Thread-18237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:33:29.869 [DEBUG] [Thread-18237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:33:29.869 [DEBUG] [Thread-18237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:33:29.870 [DEBUG] [Thread-18237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:33:29.870 [DEBUG] [Thread-18237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:33:29.870 [DEBUG] [Thread-18237] [transport.py] [_log()] client lang: <none>
2025-11-12T15:33:29.870 [DEBUG] [Thread-18237] [transport.py] [_log()] server lang: <none>
2025-11-12T15:33:29.870 [DEBUG] [Thread-18237] [transport.py] [_log()] kex follows: False
2025-11-12T15:33:29.870 [DEBUG] [Thread-18237] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:33:29.870 [DEBUG] [Thread-18237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:33:29.870 [DEBUG] [Thread-18237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:33:29.871 [DEBUG] [Thread-18237] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:33:29.871 [DEBUG] [Thread-18237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:33:29.871 [DEBUG] [Thread-18237] [transport.py] [_log()] Compression: none
2025-11-12T15:33:29.871 [DEBUG] [Thread-18237] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:33:29.929 [DEBUG] [Thread-18237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:33:29.930 [DEBUG] [Thread-18237] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:33:29.930 [DEBUG] [Thread-18237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:33:29.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:33:29.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:33:29.989 [DEBUG] [Thread-18237] [transport.py] [_log()] userauth is OK
2025-11-12T15:33:29.989 [DEBUG] [Thread-18237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:33:29.989 [DEBUG] [Thread-18237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:33:29.989 [DEBUG] [Thread-18237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:33:29.990 [DEBUG] [Thread-18237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:33:30.009 [INFO] [Thread-18237] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:33:30.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:33:30.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:33:30.872 [DEBUG] [Thread-18237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:33:30.872 [DEBUG] [Thread-18237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:33:30.921 [DEBUG] [Thread-18237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:33:30.921 [DEBUG] [Thread-18237] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:33:30.930 [DEBUG] [Thread-18237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:33:30.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:33:30.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-11-12T15:33:30.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-11-12T15:33:30.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:33:30.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:33:30.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:33:30.967 [DEBUG] [Thread-18237] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:33:34.934 [DEBUG] [Thread-18239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:33:37.152 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:33:37.153 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:33:38.641 [DEBUG] [Thread-18240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:33:49.970 [DEBUG] [Thread-18241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:34:00.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:34:00.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:34:00.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-11-12T15:34:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 33, 58), 33.18, 11.31, 0.0, 36.31, 28.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:34:01.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:33:58
2025-11-12T15:34:01.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:34:01.926 [DEBUG] [Thread-18242] [transport.py] [_log()] starting thread (client mode): 0x173f89d0
2025-11-12T15:34:01.926 [DEBUG] [Thread-18242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:34:01.947 [DEBUG] [Thread-18242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:34:01.948 [INFO] [Thread-18242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:34:01.950 [DEBUG] [Thread-18242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] client lang: <none>
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] server lang: <none>
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] kex follows: False
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] Compression: none
2025-11-12T15:34:01.951 [DEBUG] [Thread-18242] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:34:01.969 [DEBUG] [Thread-18242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:34:01.969 [DEBUG] [Thread-18242] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:34:01.970 [DEBUG] [Thread-18242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:34:01.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:34:01.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:34:01.972 [DEBUG] [Thread-18242] [transport.py] [_log()] userauth is OK
2025-11-12T15:34:01.972 [DEBUG] [Thread-18242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:34:01.972 [DEBUG] [Thread-18242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:34:01.972 [DEBUG] [Thread-18242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:34:01.973 [DEBUG] [Thread-18242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:34:01.997 [INFO] [Thread-18242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:34:01.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:34:02.657 [DEBUG] [Thread-18242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:34:02.657 [DEBUG] [Thread-18242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:34:02.657 [DEBUG] [Thread-18242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:34:02.698 [DEBUG] [Thread-18242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:34:02.698 [DEBUG] [Thread-18242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:34:02.701 [DEBUG] [Thread-18242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:34:02.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:34:02.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:34:02.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:34:02.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:34:02.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:34:02.726 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:34:02.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:34:02.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:34:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:34:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.564670 -999.00  +27.70  33.50     17   +0.80 1 1 2 1 1   888    0 26.08 -13.66 ----- 33.5 33.5 275.6 37.9 31.6 -27.3 31.4 -24.1 31.9 -25.5 32.6 -25.9
2025-11-12T15:34:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:34:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:34:02.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.564670
2025-11-12T15:34:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:34:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:34:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:34:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:34:02.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:34:02.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:33:58', tmtdew=33.18, humidity=11.31, cloud=0.0, wind=36.31, temperature=28.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:33:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:34:02.729 [DEBUG] [Thread-18242] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:34:02.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:34:02.823 [DEBUG] [Thread-18245] [transport.py] [_log()] starting thread (client mode): 0x14961ba0
2025-11-12T15:34:02.823 [DEBUG] [Thread-18245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:34:02.838 [DEBUG] [Thread-18245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:34:02.838 [INFO] [Thread-18245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:34:02.846 [DEBUG] [Thread-18245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:34:02.846 [DEBUG] [Thread-18245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:34:02.846 [DEBUG] [Thread-18245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:34:02.846 [DEBUG] [Thread-18245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:34:02.846 [DEBUG] [Thread-18245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:34:02.846 [DEBUG] [Thread-18245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:34:02.846 [DEBUG] [Thread-18245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] client lang: <none>
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] server lang: <none>
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] kex follows: False
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] Compression: none
2025-11-12T15:34:02.847 [DEBUG] [Thread-18245] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:34:02.905 [DEBUG] [Thread-18245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:34:02.905 [DEBUG] [Thread-18245] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:34:02.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:34:02.907 [DEBUG] [Thread-18245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:34:02.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:34:02.961 [DEBUG] [Thread-18245] [transport.py] [_log()] userauth is OK
2025-11-12T15:34:02.961 [DEBUG] [Thread-18245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:34:02.961 [DEBUG] [Thread-18245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:34:02.961 [DEBUG] [Thread-18245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:34:02.962 [DEBUG] [Thread-18245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:34:02.980 [INFO] [Thread-18245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:34:02.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:34:02.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:34:03.885 [DEBUG] [Thread-18245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:34:03.886 [DEBUG] [Thread-18245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:34:03.935 [DEBUG] [Thread-18245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:34:03.935 [DEBUG] [Thread-18245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:34:03.944 [DEBUG] [Thread-18245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:34:03.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:34:03.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-11-12T15:34:03.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-11-12T15:34:03.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:34:03.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:34:03.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:34:03.985 [DEBUG] [Thread-18245] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:34:05.003 [DEBUG] [Thread-18247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:34:20.049 [DEBUG] [Thread-18248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:34:34.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:34:34.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:34:34.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-11-12T15:34:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 33, 58), 33.18, 11.31, 0.0, 36.31, 28.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:34:34.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:33:58
2025-11-12T15:34:34.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:34:34.925 [DEBUG] [Thread-18249] [transport.py] [_log()] starting thread (client mode): 0x1739b8b0
2025-11-12T15:34:34.925 [DEBUG] [Thread-18249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:34:34.934 [DEBUG] [Thread-18249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:34:34.934 [INFO] [Thread-18249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] client lang: <none>
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] server lang: <none>
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] kex follows: False
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] Compression: none
2025-11-12T15:34:34.936 [DEBUG] [Thread-18249] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:34:34.948 [DEBUG] [Thread-18249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:34:34.948 [DEBUG] [Thread-18249] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:34:34.948 [DEBUG] [Thread-18249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:34:34.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:34:34.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:34:34.949 [DEBUG] [Thread-18249] [transport.py] [_log()] userauth is OK
2025-11-12T15:34:34.949 [DEBUG] [Thread-18249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:34:34.950 [DEBUG] [Thread-18249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:34:34.950 [DEBUG] [Thread-18249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:34:34.950 [DEBUG] [Thread-18249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:34:34.962 [INFO] [Thread-18249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:34:34.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:34:35.086 [DEBUG] [Thread-18251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:34:35.569 [DEBUG] [Thread-18249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:34:35.569 [DEBUG] [Thread-18249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:34:35.569 [DEBUG] [Thread-18249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:34:35.610 [DEBUG] [Thread-18249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:34:35.610 [DEBUG] [Thread-18249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:34:35.613 [DEBUG] [Thread-18249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:34:35.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:34:35.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:34:35.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:34:35.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:34:35.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:34:35.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:34:35.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:34:35.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:34:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:34:35.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.565018 -999.00  +27.50  29.51     17   +0.90 1 1 1 1 1   888    0 26.37 -12.93 ----- 29.5 29.5 277.0 39.9 31.6 -26.6 31.4 -24.4 31.6 -26.8 32.5 -24.9
2025-11-12T15:34:35.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:34:35.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:34:35.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.565018
2025-11-12T15:34:35.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:34:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:34:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:34:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:34:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:34:35.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:33:58', tmtdew=33.18, humidity=11.31, cloud=0.0, wind=36.31, temperature=28.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:33:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:34:35.640 [DEBUG] [Thread-18249] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:34:35.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:34:35.738 [DEBUG] [Thread-18253] [transport.py] [_log()] starting thread (client mode): 0x1739ad10
2025-11-12T15:34:35.738 [DEBUG] [Thread-18253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:34:35.754 [DEBUG] [Thread-18253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:34:35.754 [INFO] [Thread-18253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:34:35.761 [DEBUG] [Thread-18253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] client lang: <none>
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] server lang: <none>
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] kex follows: False
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:34:35.762 [DEBUG] [Thread-18253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:34:35.763 [DEBUG] [Thread-18253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:34:35.763 [DEBUG] [Thread-18253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:34:35.763 [DEBUG] [Thread-18253] [transport.py] [_log()] Compression: none
2025-11-12T15:34:35.763 [DEBUG] [Thread-18253] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:34:35.821 [DEBUG] [Thread-18253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:34:35.821 [DEBUG] [Thread-18253] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:34:35.822 [DEBUG] [Thread-18253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:34:35.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:34:35.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:34:35.876 [DEBUG] [Thread-18253] [transport.py] [_log()] userauth is OK
2025-11-12T15:34:35.877 [DEBUG] [Thread-18253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:34:35.877 [DEBUG] [Thread-18253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:34:35.877 [DEBUG] [Thread-18253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:34:35.877 [DEBUG] [Thread-18253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:34:35.896 [INFO] [Thread-18253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:34:35.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:34:35.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:34:36.716 [DEBUG] [Thread-18253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:34:36.716 [DEBUG] [Thread-18253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:34:36.764 [DEBUG] [Thread-18253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:34:36.765 [DEBUG] [Thread-18253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:34:36.774 [DEBUG] [Thread-18253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:34:36.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:34:36.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:34: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') -> 00000000
2025-11-12T15:34:36.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:34:36.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:34:36.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:34:36.811 [DEBUG] [Thread-18253] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:34:37.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:34:37.296 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:34:38.671 [DEBUG] [Thread-18255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:34:50.124 [DEBUG] [Thread-18256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:35:05.171 [DEBUG] [Thread-18257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:35:06.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:35:06.809 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:35:06.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-11-12T15:35:07.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 35, 3), 32.96, 11.48, 0.0, 33.42, 28.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:35:07.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:35:03
2025-11-12T15:35:07.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:35:07.715 [DEBUG] [Thread-18258] [transport.py] [_log()] starting thread (client mode): 0x14961f90
2025-11-12T15:35:07.716 [DEBUG] [Thread-18258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:35:07.732 [DEBUG] [Thread-18258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:35:07.732 [INFO] [Thread-18258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] client lang: <none>
2025-11-12T15:35:07.735 [DEBUG] [Thread-18258] [transport.py] [_log()] server lang: <none>
2025-11-12T15:35:07.736 [DEBUG] [Thread-18258] [transport.py] [_log()] kex follows: False
2025-11-12T15:35:07.736 [DEBUG] [Thread-18258] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:35:07.736 [DEBUG] [Thread-18258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:35:07.736 [DEBUG] [Thread-18258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:35:07.736 [DEBUG] [Thread-18258] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:35:07.736 [DEBUG] [Thread-18258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:35:07.736 [DEBUG] [Thread-18258] [transport.py] [_log()] Compression: none
2025-11-12T15:35:07.736 [DEBUG] [Thread-18258] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:35:07.754 [DEBUG] [Thread-18258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:35:07.755 [DEBUG] [Thread-18258] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:35:07.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:35:07.757 [DEBUG] [Thread-18258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:35:07.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:35:07.759 [DEBUG] [Thread-18258] [transport.py] [_log()] userauth is OK
2025-11-12T15:35:07.759 [DEBUG] [Thread-18258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:35:07.759 [DEBUG] [Thread-18258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:35:07.759 [DEBUG] [Thread-18258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:35:07.760 [DEBUG] [Thread-18258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:35:07.783 [INFO] [Thread-18258] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:35:07.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:35:14.542 [DEBUG] [Thread-18258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:35:14.542 [DEBUG] [Thread-18258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:35:14.543 [DEBUG] [Thread-18258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:35:14.582 [DEBUG] [Thread-18258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:35:14.583 [DEBUG] [Thread-18258] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:35:14.586 [DEBUG] [Thread-18258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:35:14.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:35:14.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:35:14.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:35:14.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:35:14.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:35:14.956 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:35:14.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:35:14.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:35:14.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:35:14.966 [DEBUG] [Thread-18258] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:35:14.966 [WARNING] [poll_weather_worker] [driver.py] [poll_weather_state()] Unable to get atlas cloud data: list index out of range
2025-11-12T15:35:14.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:35:03', tmtdew=32.96, humidity=11.48, cloud=0.0, wind=33.42, temperature=28.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp=None, atlas_cloud=None, atlas_rain=None, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:35:15.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:35:15.065 [DEBUG] [Thread-18261] [transport.py] [_log()] starting thread (client mode): 0x17360fa0
2025-11-12T15:35:15.065 [DEBUG] [Thread-18261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:35:15.080 [DEBUG] [Thread-18261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:35:15.080 [INFO] [Thread-18261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:35:15.087 [DEBUG] [Thread-18261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:35:15.087 [DEBUG] [Thread-18261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] client lang: <none>
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] server lang: <none>
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] kex follows: False
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] Compression: none
2025-11-12T15:35:15.088 [DEBUG] [Thread-18261] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:35:15.144 [DEBUG] [Thread-18261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:35:15.145 [DEBUG] [Thread-18261] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:35:15.145 [DEBUG] [Thread-18261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:35:15.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:35:15.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:35:15.201 [DEBUG] [Thread-18261] [transport.py] [_log()] userauth is OK
2025-11-12T15:35:15.201 [DEBUG] [Thread-18261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:35:15.201 [DEBUG] [Thread-18261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:35:15.201 [DEBUG] [Thread-18261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:35:15.201 [DEBUG] [Thread-18261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:35:15.221 [INFO] [Thread-18261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:35:15.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:35:15.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:35:16.060 [DEBUG] [Thread-18261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:35:16.061 [DEBUG] [Thread-18261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:35:16.108 [DEBUG] [Thread-18261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:35:16.109 [DEBUG] [Thread-18261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:35:16.117 [DEBUG] [Thread-18261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:35:16.126 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:35:16.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-11-12T15:35:16.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-11-12T15:35:16.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:35:16.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:35:16.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:35:16.162 [DEBUG] [Thread-18261] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:35:20.204 [DEBUG] [Thread-18263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:35:35.256 [DEBUG] [Thread-18264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:35:37.437 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:35:37.438 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:35:38.704 [DEBUG] [Thread-18265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:35:46.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:35:46.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:35:46.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-11-12T15:35:46.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 35, 35), 32.18, 11.96, 0.0, 34.99, 27.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:35:46.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:35:35
2025-11-12T15:35:46.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:35:47.079 [DEBUG] [Thread-18266] [transport.py] [_log()] starting thread (client mode): 0x1737d0f0
2025-11-12T15:35:47.079 [DEBUG] [Thread-18266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:35:47.099 [DEBUG] [Thread-18266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:35:47.100 [INFO] [Thread-18266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:35:47.102 [DEBUG] [Thread-18266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] client lang: <none>
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] server lang: <none>
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] kex follows: False
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:35:47.103 [DEBUG] [Thread-18266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:35:47.104 [DEBUG] [Thread-18266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:35:47.104 [DEBUG] [Thread-18266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:35:47.104 [DEBUG] [Thread-18266] [transport.py] [_log()] Compression: none
2025-11-12T15:35:47.104 [DEBUG] [Thread-18266] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:35:47.124 [DEBUG] [Thread-18266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:35:47.124 [DEBUG] [Thread-18266] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:35:47.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:35:47.126 [DEBUG] [Thread-18266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:35:47.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:35:47.128 [DEBUG] [Thread-18266] [transport.py] [_log()] userauth is OK
2025-11-12T15:35:47.128 [DEBUG] [Thread-18266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:35:47.128 [DEBUG] [Thread-18266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:35:47.128 [DEBUG] [Thread-18266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:35:47.128 [DEBUG] [Thread-18266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:35:47.152 [INFO] [Thread-18266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:35:47.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:35:47.762 [DEBUG] [Thread-18266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:35:47.763 [DEBUG] [Thread-18266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:35:47.763 [DEBUG] [Thread-18266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:35:47.803 [DEBUG] [Thread-18266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:35:47.804 [DEBUG] [Thread-18266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:35:47.807 [DEBUG] [Thread-18266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:35:47.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:35:47.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:35:47.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:35:47.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:35:47.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:35:47.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:35:47.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:35:47.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:35:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:35:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.566059 -999.00  +27.70  25.52     17   +0.80 1 1 1 1 1   888    0 26.19 -13.66 ----- 25.5 25.5 272.7 34.5 31.8 -25.8 31.4 -25.3 31.8 -22.7 32.6 -24.1
2025-11-12T15:35:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:35:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:35:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.566059
2025-11-12T15:35:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:35:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:35:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:35:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:35:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:35:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:35:35', tmtdew=32.18, humidity=11.96, cloud=0.0, wind=34.99, temperature=27.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:35:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:35:47.831 [DEBUG] [Thread-18266] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:35:47.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:35:47.926 [DEBUG] [Thread-18269] [transport.py] [_log()] starting thread (client mode): 0x173bdff0
2025-11-12T15:35:47.927 [DEBUG] [Thread-18269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:35:47.942 [DEBUG] [Thread-18269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:35:47.942 [INFO] [Thread-18269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:35:47.949 [DEBUG] [Thread-18269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] client lang: <none>
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] server lang: <none>
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] kex follows: False
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] Compression: none
2025-11-12T15:35:47.950 [DEBUG] [Thread-18269] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:35:48.009 [DEBUG] [Thread-18269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:35:48.010 [DEBUG] [Thread-18269] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:35:48.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:35:48.011 [DEBUG] [Thread-18269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:35:48.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:35:48.068 [DEBUG] [Thread-18269] [transport.py] [_log()] userauth is OK
2025-11-12T15:35:48.069 [DEBUG] [Thread-18269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:35:48.069 [DEBUG] [Thread-18269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:35:48.069 [DEBUG] [Thread-18269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:35:48.069 [DEBUG] [Thread-18269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:35:48.088 [INFO] [Thread-18269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:35:48.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:35:48.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:35:48.923 [DEBUG] [Thread-18269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:35:48.924 [DEBUG] [Thread-18269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:35:48.972 [DEBUG] [Thread-18269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:35:48.972 [DEBUG] [Thread-18269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:35:48.981 [DEBUG] [Thread-18269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:35:48.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:35:48.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:35:49.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-11-12T15:35:49.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:35:49.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:35:49.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:35:49.018 [DEBUG] [Thread-18269] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:35:50.287 [DEBUG] [Thread-18271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:36:05.336 [DEBUG] [Thread-18272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:36:19.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:36:19.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:36:19.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:36:19.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 36, 7), 32.1, 12.01, 0.0, 33.47, 27.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:36:19.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:36:07
2025-11-12T15:36:19.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:36:19.926 [DEBUG] [Thread-18273] [transport.py] [_log()] starting thread (client mode): 0x17362980
2025-11-12T15:36:19.926 [DEBUG] [Thread-18273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:36:19.946 [DEBUG] [Thread-18273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:36:19.947 [INFO] [Thread-18273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:36:19.949 [DEBUG] [Thread-18273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:36:19.949 [DEBUG] [Thread-18273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:36:19.949 [DEBUG] [Thread-18273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] client lang: <none>
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] server lang: <none>
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] kex follows: False
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] Compression: none
2025-11-12T15:36:19.950 [DEBUG] [Thread-18273] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:36:19.968 [DEBUG] [Thread-18273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:36:19.968 [DEBUG] [Thread-18273] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:36:19.969 [DEBUG] [Thread-18273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:36:19.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:36:19.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:36:19.971 [DEBUG] [Thread-18273] [transport.py] [_log()] userauth is OK
2025-11-12T15:36:19.971 [DEBUG] [Thread-18273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:36:19.971 [DEBUG] [Thread-18273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:36:19.971 [DEBUG] [Thread-18273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:36:19.971 [DEBUG] [Thread-18273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:36:19.996 [INFO] [Thread-18273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:36:19.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:36:20.370 [DEBUG] [Thread-18275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:36:20.784 [DEBUG] [Thread-18273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:36:20.784 [DEBUG] [Thread-18273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:36:20.784 [DEBUG] [Thread-18273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:36:20.825 [DEBUG] [Thread-18273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:36:20.825 [DEBUG] [Thread-18273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:36:20.828 [DEBUG] [Thread-18273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:36:20.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:36:20.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:36:20.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:36:20.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:36:20.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:36:20.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:36:20.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:36:20.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:36:20.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:36:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.566407 -999.00  +28.00  20.51     17   +0.90 1 1 1 1 1   888    0 26.07 -13.57 ----- 20.5 20.5 285.0 29.8 31.9 -26.4 31.7 -24.3 32.2 -24.4 32.8 -24.0
2025-11-12T15:36:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:36:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:36:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.566407
2025-11-12T15:36:20.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:36:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:36:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:36:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:36:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:36:20.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:36:07', tmtdew=32.1, humidity=12.01, cloud=0.0, wind=33.47, temperature=27.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:35:37.565', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:36:20.854 [DEBUG] [Thread-18273] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:36:20.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:36:20.949 [DEBUG] [Thread-18277] [transport.py] [_log()] starting thread (client mode): 0x17363ac0
2025-11-12T15:36:20.949 [DEBUG] [Thread-18277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:36:20.967 [DEBUG] [Thread-18277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:36:20.967 [INFO] [Thread-18277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:36:20.974 [DEBUG] [Thread-18277] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] client lang: <none>
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] server lang: <none>
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] kex follows: False
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:36:20.975 [DEBUG] [Thread-18277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:36:20.976 [DEBUG] [Thread-18277] [transport.py] [_log()] Compression: none
2025-11-12T15:36:20.976 [DEBUG] [Thread-18277] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:36:21.032 [DEBUG] [Thread-18277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:36:21.033 [DEBUG] [Thread-18277] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:36:21.034 [DEBUG] [Thread-18277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:36:21.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:36:21.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:36:21.089 [DEBUG] [Thread-18277] [transport.py] [_log()] userauth is OK
2025-11-12T15:36:21.089 [DEBUG] [Thread-18277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:36:21.089 [DEBUG] [Thread-18277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:36:21.089 [DEBUG] [Thread-18277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:36:21.089 [DEBUG] [Thread-18277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:36:21.108 [INFO] [Thread-18277] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:36:21.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:36:21.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:36:21.983 [DEBUG] [Thread-18277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:36:21.983 [DEBUG] [Thread-18277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:36:22.031 [DEBUG] [Thread-18277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:36:22.031 [DEBUG] [Thread-18277] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:36:22.040 [DEBUG] [Thread-18277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:36:22.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:36:22.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:36:22.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-11-12T15:36:22.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:36:22.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:36:22.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:36:22.080 [DEBUG] [Thread-18277] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:36:35.409 [DEBUG] [Thread-18279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:36:37.576 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:36:37.577 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:36:38.754 [DEBUG] [Thread-18280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:36:50.455 [DEBUG] [Thread-18281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:36:52.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:36:52.101 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:36:52.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-11-12T15:36:52.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 36, 39), 32.91, 11.34, 0.0, 34.39, 27.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:36:52.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:36:39
2025-11-12T15:36:52.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:36:53.035 [DEBUG] [Thread-18282] [transport.py] [_log()] starting thread (client mode): 0x17398f10
2025-11-12T15:36:53.036 [DEBUG] [Thread-18282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:36:53.057 [DEBUG] [Thread-18282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:36:53.057 [INFO] [Thread-18282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:36:53.061 [DEBUG] [Thread-18282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:36:53.061 [DEBUG] [Thread-18282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:36:53.061 [DEBUG] [Thread-18282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:36:53.061 [DEBUG] [Thread-18282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:36:53.061 [DEBUG] [Thread-18282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:36:53.061 [DEBUG] [Thread-18282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:36:53.061 [DEBUG] [Thread-18282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:36:53.061 [DEBUG] [Thread-18282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] client lang: <none>
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] server lang: <none>
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] kex follows: False
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] Compression: none
2025-11-12T15:36:53.062 [DEBUG] [Thread-18282] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:36:53.083 [DEBUG] [Thread-18282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:36:53.084 [DEBUG] [Thread-18282] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:36:53.084 [DEBUG] [Thread-18282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:36:53.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:36:53.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:36:53.086 [DEBUG] [Thread-18282] [transport.py] [_log()] userauth is OK
2025-11-12T15:36:53.087 [DEBUG] [Thread-18282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:36:53.087 [DEBUG] [Thread-18282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:36:53.087 [DEBUG] [Thread-18282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:36:53.087 [DEBUG] [Thread-18282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:36:53.110 [INFO] [Thread-18282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:36:53.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:36:53.726 [DEBUG] [Thread-18282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:36:53.727 [DEBUG] [Thread-18282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:36:53.727 [DEBUG] [Thread-18282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:36:53.767 [DEBUG] [Thread-18282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:36:53.768 [DEBUG] [Thread-18282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:36:53.771 [DEBUG] [Thread-18282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:36:53.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:36:53.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:36:53.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:36:53.787 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:36:53.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:36:53.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:36:53.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:36:53.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:36:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:36:53.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.566754 -999.00  +27.90  25.87     16   +0.30 1 1 1 1 1   888    0 25.83 -12.94 ----- 25.9 25.9 277.0 36.4 31.9 -27.5 -999.0 -999.0 32.1 -28.4 32.8 -25.4
2025-11-12T15:36:53.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:36:53.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:36:53.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.566754
2025-11-12T15:36:53.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:36:53.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:36:53.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:36:53.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:36:53.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:36:53.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:36:39', tmtdew=32.91, humidity=11.34, cloud=0.0, wind=34.39, temperature=27.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:36:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:36:53.799 [DEBUG] [Thread-18282] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:36:53.879 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:36:53.890 [DEBUG] [Thread-18285] [transport.py] [_log()] starting thread (client mode): 0x14983730
2025-11-12T15:36:53.891 [DEBUG] [Thread-18285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:36:53.908 [DEBUG] [Thread-18285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:36:53.908 [INFO] [Thread-18285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:36:53.916 [DEBUG] [Thread-18285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:36:53.916 [DEBUG] [Thread-18285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:36:53.916 [DEBUG] [Thread-18285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:36:53.916 [DEBUG] [Thread-18285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:36:53.916 [DEBUG] [Thread-18285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:36:53.917 [DEBUG] [Thread-18285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:36:53.917 [DEBUG] [Thread-18285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:36:53.917 [DEBUG] [Thread-18285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:36:53.917 [DEBUG] [Thread-18285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:36:53.917 [DEBUG] [Thread-18285] [transport.py] [_log()] client lang: <none>
2025-11-12T15:36:53.917 [DEBUG] [Thread-18285] [transport.py] [_log()] server lang: <none>
2025-11-12T15:36:53.917 [DEBUG] [Thread-18285] [transport.py] [_log()] kex follows: False
2025-11-12T15:36:53.918 [DEBUG] [Thread-18285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:36:53.918 [DEBUG] [Thread-18285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:36:53.918 [DEBUG] [Thread-18285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:36:53.918 [DEBUG] [Thread-18285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:36:53.918 [DEBUG] [Thread-18285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:36:53.918 [DEBUG] [Thread-18285] [transport.py] [_log()] Compression: none
2025-11-12T15:36:53.919 [DEBUG] [Thread-18285] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:36:53.977 [DEBUG] [Thread-18285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:36:53.978 [DEBUG] [Thread-18285] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:36:53.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:36:53.980 [DEBUG] [Thread-18285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:36:53.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:36:54.036 [DEBUG] [Thread-18285] [transport.py] [_log()] userauth is OK
2025-11-12T15:36:54.037 [DEBUG] [Thread-18285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:36:54.037 [DEBUG] [Thread-18285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:36:54.037 [DEBUG] [Thread-18285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:36:54.037 [DEBUG] [Thread-18285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:36:54.056 [INFO] [Thread-18285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:36:54.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:36:54.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:36:54.946 [DEBUG] [Thread-18285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:36:54.946 [DEBUG] [Thread-18285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:36:54.994 [DEBUG] [Thread-18285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:36:54.994 [DEBUG] [Thread-18285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:36:55.004 [DEBUG] [Thread-18285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:36:55.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:36:55.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-11-12T15:36:55.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-11-12T15:36:55.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:36:55.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:36:55.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:36:55.040 [DEBUG] [Thread-18285] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:37:05.487 [DEBUG] [Thread-18287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:37:20.538 [DEBUG] [Thread-18288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:37:25.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:37:25.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:37:25.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-11-12T15:37:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 37, 11), 33.05, 11.24, 0.0, 32.09, 28.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:37:25.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:37:11
2025-11-12T15:37:25.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:37:25.986 [DEBUG] [Thread-18289] [transport.py] [_log()] starting thread (client mode): 0x17399630
2025-11-12T15:37:25.986 [DEBUG] [Thread-18289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:37:26.005 [DEBUG] [Thread-18289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:37:26.005 [INFO] [Thread-18289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:37:26.008 [DEBUG] [Thread-18289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:37:26.008 [DEBUG] [Thread-18289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:37:26.008 [DEBUG] [Thread-18289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:37:26.008 [DEBUG] [Thread-18289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:37:26.008 [DEBUG] [Thread-18289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:37:26.008 [DEBUG] [Thread-18289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] client lang: <none>
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] server lang: <none>
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] kex follows: False
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] Compression: none
2025-11-12T15:37:26.009 [DEBUG] [Thread-18289] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:37:26.024 [DEBUG] [Thread-18289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:37:26.024 [DEBUG] [Thread-18289] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:37:26.025 [DEBUG] [Thread-18289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:37:26.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:37:26.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:37:26.026 [DEBUG] [Thread-18289] [transport.py] [_log()] userauth is OK
2025-11-12T15:37:26.026 [DEBUG] [Thread-18289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:37:26.026 [DEBUG] [Thread-18289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:37:26.026 [DEBUG] [Thread-18289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:37:26.026 [DEBUG] [Thread-18289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:37:26.036 [INFO] [Thread-18289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:37:26.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:37:26.792 [DEBUG] [Thread-18289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:37:26.792 [DEBUG] [Thread-18289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:37:26.792 [DEBUG] [Thread-18289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:37:26.833 [DEBUG] [Thread-18289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:37:26.833 [DEBUG] [Thread-18289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:37:26.836 [DEBUG] [Thread-18289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:37:26.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:37:26.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:37:26.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:37:26.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:37:26.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:37:26.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:37:26.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.567101 -999.00  +27.50  26.70     16   +0.20 1 1 1 1 1   888    0 26.49 -12.06 ----- 26.7 26.7 283.6 31.1 31.8 -26.6 31.7 -25.1 32.0 -25.8 32.8 -25.1
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.567101
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:37:26.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:37:26.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:37:11', tmtdew=33.05, humidity=11.24, cloud=0.0, wind=32.09, temperature=28.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:36:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:37:26.854 [DEBUG] [Thread-18289] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:37:26.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:37:26.940 [DEBUG] [Thread-18292] [transport.py] [_log()] starting thread (client mode): 0x149817e0
2025-11-12T15:37:26.940 [DEBUG] [Thread-18292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:37:26.955 [DEBUG] [Thread-18292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:37:26.955 [INFO] [Thread-18292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] client lang: <none>
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] server lang: <none>
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] kex follows: False
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] Compression: none
2025-11-12T15:37:26.963 [DEBUG] [Thread-18292] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:37:27.022 [DEBUG] [Thread-18292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:37:27.022 [DEBUG] [Thread-18292] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:37:27.023 [DEBUG] [Thread-18292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:37:27.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:37:27.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:37:27.080 [DEBUG] [Thread-18292] [transport.py] [_log()] userauth is OK
2025-11-12T15:37:27.080 [DEBUG] [Thread-18292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:37:27.080 [DEBUG] [Thread-18292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:37:27.080 [DEBUG] [Thread-18292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:37:27.080 [DEBUG] [Thread-18292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:37:27.094 [INFO] [Thread-18292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:37:27.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:37:27.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:37:27.957 [DEBUG] [Thread-18292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:37:27.957 [DEBUG] [Thread-18292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:37:28.005 [DEBUG] [Thread-18292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:37:28.005 [DEBUG] [Thread-18292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:37:28.013 [DEBUG] [Thread-18292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:37:28.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:37:28.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-11-12T15:37:28.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-11-12T15:37:28.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:37:28.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:37:28.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:37:28.044 [DEBUG] [Thread-18292] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:37:35.571 [DEBUG] [Thread-18294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:37:37.718 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:37:37.719 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:37:38.788 [DEBUG] [Thread-18295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:37:50.625 [DEBUG] [Thread-18296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:37:58.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:37:58.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:37:58.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:37:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 37, 43), 33.1, 11.11, 0.0, 34.09, 28.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:37:58.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:37:43
2025-11-12T15:37:58.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:37:58.968 [DEBUG] [Thread-18297] [transport.py] [_log()] starting thread (client mode): 0x17399030
2025-11-12T15:37:58.968 [DEBUG] [Thread-18297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:37:58.989 [DEBUG] [Thread-18297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:37:58.990 [INFO] [Thread-18297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:37:58.993 [DEBUG] [Thread-18297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:37:58.993 [DEBUG] [Thread-18297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:37:58.993 [DEBUG] [Thread-18297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:37:58.993 [DEBUG] [Thread-18297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:37:58.993 [DEBUG] [Thread-18297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:37:58.993 [DEBUG] [Thread-18297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:37:58.993 [DEBUG] [Thread-18297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] client lang: <none>
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] server lang: <none>
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] kex follows: False
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] Compression: none
2025-11-12T15:37:58.994 [DEBUG] [Thread-18297] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:37:59.011 [DEBUG] [Thread-18297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:37:59.012 [DEBUG] [Thread-18297] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:37:59.012 [DEBUG] [Thread-18297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:37:59.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:37:59.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:37:59.014 [DEBUG] [Thread-18297] [transport.py] [_log()] userauth is OK
2025-11-12T15:37:59.014 [DEBUG] [Thread-18297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:37:59.014 [DEBUG] [Thread-18297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:37:59.014 [DEBUG] [Thread-18297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:37:59.015 [DEBUG] [Thread-18297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:37:59.038 [INFO] [Thread-18297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:37:59.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:37:59.664 [DEBUG] [Thread-18297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:37:59.665 [DEBUG] [Thread-18297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:37:59.665 [DEBUG] [Thread-18297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:37:59.705 [DEBUG] [Thread-18297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:37:59.705 [DEBUG] [Thread-18297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:37:59.708 [DEBUG] [Thread-18297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:37:59.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:37:59.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:37:59.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:37:59.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:37:59.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:37:59.730 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:37:59.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:37:59.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:37:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:37:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.567448 -999.00  +27.60  23.38     17   +0.40 1 1 1 1 1   888    0 26.20 -9.44 ----- 23.4 23.4 266.6 27.3 31.8 -27.5 31.6 -24.1 32.1 -27.7 32.9 -25.5
2025-11-12T15:37:59.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:37:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:37:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.567448
2025-11-12T15:37:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:37:59.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:37:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:37:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:37:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:37:59.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:37:43', tmtdew=33.1, humidity=11.11, cloud=0.0, wind=34.09, temperature=28.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:37:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:37:59.732 [DEBUG] [Thread-18297] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:37:59.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:37:59.835 [DEBUG] [Thread-18300] [transport.py] [_log()] starting thread (client mode): 0x17363280
2025-11-12T15:37:59.835 [DEBUG] [Thread-18300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:37:59.850 [DEBUG] [Thread-18300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:37:59.850 [INFO] [Thread-18300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:37:59.858 [DEBUG] [Thread-18300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:37:59.858 [DEBUG] [Thread-18300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:37:59.858 [DEBUG] [Thread-18300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:37:59.858 [DEBUG] [Thread-18300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:37:59.858 [DEBUG] [Thread-18300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] client lang: <none>
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] server lang: <none>
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] kex follows: False
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] Compression: none
2025-11-12T15:37:59.859 [DEBUG] [Thread-18300] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:37:59.919 [DEBUG] [Thread-18300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:37:59.920 [DEBUG] [Thread-18300] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:37:59.920 [DEBUG] [Thread-18300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:37:59.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:37:59.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:37:59.976 [DEBUG] [Thread-18300] [transport.py] [_log()] userauth is OK
2025-11-12T15:37:59.976 [DEBUG] [Thread-18300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:37:59.976 [DEBUG] [Thread-18300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:37:59.976 [DEBUG] [Thread-18300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:37:59.976 [DEBUG] [Thread-18300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:37:59.996 [INFO] [Thread-18300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:37:59.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:37:59.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:38:00.822 [DEBUG] [Thread-18300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:38:00.822 [DEBUG] [Thread-18300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:38:00.869 [DEBUG] [Thread-18300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:38:00.869 [DEBUG] [Thread-18300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:38:00.878 [DEBUG] [Thread-18300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:38:00.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:38:00.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-11-12T15:38:00.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-11-12T15:38:00.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:38:00.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:38:00.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:38:00.915 [DEBUG] [Thread-18300] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:38:05.656 [DEBUG] [Thread-18302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:38:20.692 [DEBUG] [Thread-18303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:38:30.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:38:30.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:38:30.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-11-12T15:38:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 38, 15), 33.05, 11.15, 0.0, 30.14, 28.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:38:31.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:38:15
2025-11-12T15:38:31.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:38:31.851 [DEBUG] [Thread-18304] [transport.py] [_log()] starting thread (client mode): 0x1493cd60
2025-11-12T15:38:31.852 [DEBUG] [Thread-18304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:38:31.872 [DEBUG] [Thread-18304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:38:31.872 [INFO] [Thread-18304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] client lang: <none>
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] server lang: <none>
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] kex follows: False
2025-11-12T15:38:31.875 [DEBUG] [Thread-18304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:38:31.876 [DEBUG] [Thread-18304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:38:31.876 [DEBUG] [Thread-18304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:38:31.876 [DEBUG] [Thread-18304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:38:31.876 [DEBUG] [Thread-18304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:38:31.876 [DEBUG] [Thread-18304] [transport.py] [_log()] Compression: none
2025-11-12T15:38:31.876 [DEBUG] [Thread-18304] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:38:31.892 [DEBUG] [Thread-18304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:38:31.893 [DEBUG] [Thread-18304] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:38:31.893 [DEBUG] [Thread-18304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:38:31.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:38:31.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:38:31.895 [DEBUG] [Thread-18304] [transport.py] [_log()] userauth is OK
2025-11-12T15:38:31.896 [DEBUG] [Thread-18304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:38:31.896 [DEBUG] [Thread-18304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:38:31.896 [DEBUG] [Thread-18304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:38:31.896 [DEBUG] [Thread-18304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:38:31.914 [INFO] [Thread-18304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:38:31.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:38:32.699 [DEBUG] [Thread-18304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:38:32.699 [DEBUG] [Thread-18304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:38:32.699 [DEBUG] [Thread-18304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:38:32.739 [DEBUG] [Thread-18304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:38:32.740 [DEBUG] [Thread-18304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:38:32.743 [DEBUG] [Thread-18304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:38:32.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:38:32.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:38:32.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:38:32.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:38:32.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:38:32.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:38:32.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:38:32.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:38:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:38:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.567795 -999.00  +27.30  23.46     17   +0.50 1 1 1 1 1   888    0 26.41 -6.38 ----- 23.5 23.5 275.3 27.2 31.8 -26.6 31.7 -24.8 31.8 -27.6 32.7 -25.9
2025-11-12T15:38:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:38:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:38:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.567795
2025-11-12T15:38:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:38:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:38:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:38:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:38:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:38:32.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:38:15', tmtdew=33.05, humidity=11.15, cloud=0.0, wind=30.14, temperature=28.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:37:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:38:32.763 [DEBUG] [Thread-18304] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:38:32.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:38:32.862 [DEBUG] [Thread-18307] [transport.py] [_log()] starting thread (client mode): 0x1739a350
2025-11-12T15:38:32.862 [DEBUG] [Thread-18307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:38:32.877 [DEBUG] [Thread-18307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:38:32.877 [INFO] [Thread-18307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:38:32.885 [DEBUG] [Thread-18307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:38:32.885 [DEBUG] [Thread-18307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:38:32.885 [DEBUG] [Thread-18307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] client lang: <none>
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] server lang: <none>
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] kex follows: False
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:38:32.886 [DEBUG] [Thread-18307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:38:32.887 [DEBUG] [Thread-18307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:38:32.887 [DEBUG] [Thread-18307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:38:32.887 [DEBUG] [Thread-18307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:38:32.887 [DEBUG] [Thread-18307] [transport.py] [_log()] Compression: none
2025-11-12T15:38:32.887 [DEBUG] [Thread-18307] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:38:32.945 [DEBUG] [Thread-18307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:38:32.945 [DEBUG] [Thread-18307] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:38:32.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:38:32.947 [DEBUG] [Thread-18307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:38:32.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:38:33.001 [DEBUG] [Thread-18307] [transport.py] [_log()] userauth is OK
2025-11-12T15:38:33.001 [DEBUG] [Thread-18307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:38:33.001 [DEBUG] [Thread-18307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:38:33.001 [DEBUG] [Thread-18307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:38:33.001 [DEBUG] [Thread-18307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:38:33.019 [INFO] [Thread-18307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:38:33.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:38:33.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:38:33.840 [DEBUG] [Thread-18307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:38:33.840 [DEBUG] [Thread-18307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:38:33.887 [DEBUG] [Thread-18307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:38:33.888 [DEBUG] [Thread-18307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:38:33.897 [DEBUG] [Thread-18307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:38:33.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:38:33.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-11-12T15:38:33.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-11-12T15:38:33.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:38:33.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:38:33.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:38:33.933 [DEBUG] [Thread-18307] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:38:35.729 [DEBUG] [Thread-18309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:38:37.871 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:38:37.872 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:38:38.821 [DEBUG] [Thread-18310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:38:50.777 [DEBUG] [Thread-18311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:39:03.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:39:03.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:39:03.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-11-12T15:39:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 38, 47), 33.12, 11.33, 0.0, 36.51, 28.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:39:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:38:47
2025-11-12T15:39:04.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:39:04.869 [DEBUG] [Thread-18312] [transport.py] [_log()] starting thread (client mode): 0x1737d780
2025-11-12T15:39:04.870 [DEBUG] [Thread-18312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:39:04.889 [DEBUG] [Thread-18312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:39:04.889 [INFO] [Thread-18312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:39:04.890 [DEBUG] [Thread-18312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] client lang: <none>
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] server lang: <none>
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] kex follows: False
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] Compression: none
2025-11-12T15:39:04.891 [DEBUG] [Thread-18312] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:39:04.910 [DEBUG] [Thread-18312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:39:04.910 [DEBUG] [Thread-18312] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:39:04.911 [DEBUG] [Thread-18312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:39:04.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:39:04.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:39:04.913 [DEBUG] [Thread-18312] [transport.py] [_log()] userauth is OK
2025-11-12T15:39:04.913 [DEBUG] [Thread-18312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:39:04.913 [DEBUG] [Thread-18312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:39:04.913 [DEBUG] [Thread-18312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:39:04.913 [DEBUG] [Thread-18312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:39:04.951 [INFO] [Thread-18312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:39:04.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:39:05.578 [DEBUG] [Thread-18312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:39:05.578 [DEBUG] [Thread-18312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:39:05.579 [DEBUG] [Thread-18312] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:39:05.618 [DEBUG] [Thread-18312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:39:05.619 [DEBUG] [Thread-18312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:39:05.622 [DEBUG] [Thread-18312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:39:05.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:39:05.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:39:05.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:39:05.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:39:05.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:39:05.645 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:39:05.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:39:05.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:39:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:39:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.568143 -999.00  +27.60  29.61     17   +0.50 1 1 1 1 1   888    0 26.71 -3.77 ----- 29.6 29.6 266.2 39.1 31.8 -27.6 31.7 -23.9 31.9 -27.2 32.8 -25.0
2025-11-12T15:39:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:39:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:39:05.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.568143
2025-11-12T15:39:05.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:39:05.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:39:05.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:39:05.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:39:05.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:39:05.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:38:47', tmtdew=33.12, humidity=11.33, cloud=0.0, wind=36.51, temperature=28.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:38:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:39:05.648 [DEBUG] [Thread-18312] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:39:05.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:39:05.734 [DEBUG] [Thread-18315] [transport.py] [_log()] starting thread (client mode): 0x173e9d50
2025-11-12T15:39:05.734 [DEBUG] [Thread-18315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:39:05.748 [DEBUG] [Thread-18315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:39:05.749 [INFO] [Thread-18315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] client lang: <none>
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] server lang: <none>
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] kex follows: False
2025-11-12T15:39:05.757 [DEBUG] [Thread-18315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:39:05.758 [DEBUG] [Thread-18315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:39:05.758 [DEBUG] [Thread-18315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:39:05.758 [DEBUG] [Thread-18315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:39:05.758 [DEBUG] [Thread-18315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:39:05.758 [DEBUG] [Thread-18315] [transport.py] [_log()] Compression: none
2025-11-12T15:39:05.758 [DEBUG] [Thread-18315] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:39:05.816 [DEBUG] [Thread-18315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:39:05.817 [DEBUG] [Thread-18315] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:39:05.818 [DEBUG] [Thread-18315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:39:05.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:39:05.819 [DEBUG] [Thread-18317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:39:05.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:39:05.872 [DEBUG] [Thread-18315] [transport.py] [_log()] userauth is OK
2025-11-12T15:39:05.873 [DEBUG] [Thread-18315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:39:05.873 [DEBUG] [Thread-18315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:39:05.873 [DEBUG] [Thread-18315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:39:05.873 [DEBUG] [Thread-18315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:39:05.896 [INFO] [Thread-18315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:39:05.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:39:05.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:39:06.727 [DEBUG] [Thread-18315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:39:06.727 [DEBUG] [Thread-18315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:39:06.774 [DEBUG] [Thread-18315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:39:06.774 [DEBUG] [Thread-18315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:39:06.784 [DEBUG] [Thread-18315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:39:06.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:39:06.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-11-12T15:39:06.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:39:06.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:39:06.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:39:06.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:39:06.825 [DEBUG] [Thread-18315] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:39:20.878 [DEBUG] [Thread-18318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:39:35.907 [DEBUG] [Thread-18319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:39:36.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:39:36.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:39:36.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-11-12T15:39:37.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 39, 19), 33.27, 11.23, 0.0, 39.52, 28.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:39:37.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:39:19
2025-11-12T15:39:37.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:39:37.733 [DEBUG] [Thread-18320] [transport.py] [_log()] starting thread (client mode): 0x17398670
2025-11-12T15:39:37.734 [DEBUG] [Thread-18320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:39:37.754 [DEBUG] [Thread-18320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:39:37.754 [INFO] [Thread-18320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:39:37.757 [DEBUG] [Thread-18320] [transport.py] [_log()] client lang: <none>
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] server lang: <none>
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] kex follows: False
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] Compression: none
2025-11-12T15:39:37.758 [DEBUG] [Thread-18320] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:39:37.775 [DEBUG] [Thread-18320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:39:37.776 [DEBUG] [Thread-18320] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:39:37.776 [DEBUG] [Thread-18320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:39:37.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:39:37.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:39:37.778 [DEBUG] [Thread-18320] [transport.py] [_log()] userauth is OK
2025-11-12T15:39:37.779 [DEBUG] [Thread-18320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:39:37.779 [DEBUG] [Thread-18320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:39:37.779 [DEBUG] [Thread-18320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:39:37.779 [DEBUG] [Thread-18320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:39:37.803 [INFO] [Thread-18320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:39:37.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:39:38.013 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:39:38.014 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:39:38.558 [DEBUG] [Thread-18320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:39:38.558 [DEBUG] [Thread-18320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:39:38.559 [DEBUG] [Thread-18320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:39:38.599 [DEBUG] [Thread-18320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:39:38.600 [DEBUG] [Thread-18320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:39:38.602 [DEBUG] [Thread-18320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:39:38.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:39:38.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:39:38.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:39:38.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:39:38.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:39:38.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:39:38.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:39:38.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:39:38.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:39:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.568490 -999.00  +27.60  37.15     16   +0.10 1 1 2 1 1   888    0 26.52 0.22 ----- 37.1 37.1 283.3 46.9 31.6 -28.5 31.6 -25.0 31.8 -25.7 32.6 -27.0
2025-11-12T15:39:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:39:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:39:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.568490
2025-11-12T15:39:38.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:39:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:39:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:39:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:39:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:39:38.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:39:19', tmtdew=33.27, humidity=11.23, cloud=0.0, wind=39.52, temperature=28.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:38:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:39:38.626 [DEBUG] [Thread-18320] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:39:38.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:39:38.723 [DEBUG] [Thread-18323] [transport.py] [_log()] starting thread (client mode): 0x17399d20
2025-11-12T15:39:38.723 [DEBUG] [Thread-18323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:39:38.740 [DEBUG] [Thread-18323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:39:38.740 [INFO] [Thread-18323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:39:38.752 [DEBUG] [Thread-18323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:39:38.752 [DEBUG] [Thread-18323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] client lang: <none>
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] server lang: <none>
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] kex follows: False
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:39:38.753 [DEBUG] [Thread-18323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:39:38.754 [DEBUG] [Thread-18323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:39:38.754 [DEBUG] [Thread-18323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:39:38.754 [DEBUG] [Thread-18323] [transport.py] [_log()] Compression: none
2025-11-12T15:39:38.754 [DEBUG] [Thread-18323] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:39:38.809 [DEBUG] [Thread-18323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:39:38.809 [DEBUG] [Thread-18323] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:39:38.810 [DEBUG] [Thread-18323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:39:38.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:39:38.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:39:38.860 [DEBUG] [Thread-18325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:39:38.864 [DEBUG] [Thread-18323] [transport.py] [_log()] userauth is OK
2025-11-12T15:39:38.864 [DEBUG] [Thread-18323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:39:38.864 [DEBUG] [Thread-18323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:39:38.864 [DEBUG] [Thread-18323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:39:38.864 [DEBUG] [Thread-18323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:39:38.877 [INFO] [Thread-18323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:39:38.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:39:38.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:39:39.746 [DEBUG] [Thread-18323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:39:39.746 [DEBUG] [Thread-18323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:39:39.793 [DEBUG] [Thread-18323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:39:39.794 [DEBUG] [Thread-18323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:39:39.803 [DEBUG] [Thread-18323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:39:39.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:39:39.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-11-12T15:39:39.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-11-12T15:39:39.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:39:39.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:39:39.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:39:39.841 [DEBUG] [Thread-18323] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:39:50.944 [DEBUG] [Thread-18326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:40:05.987 [DEBUG] [Thread-18327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:40:09.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:40:09.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:40:09.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-11-12T15:40:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 39, 51), 33.36, 11.11, 0.0, 36.29, 27.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:40:10.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:39:51
2025-11-12T15:40:10.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:40:10.784 [DEBUG] [Thread-18328] [transport.py] [_log()] starting thread (client mode): 0x149a9db0
2025-11-12T15:40:10.784 [DEBUG] [Thread-18328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:40:10.804 [DEBUG] [Thread-18328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:40:10.804 [INFO] [Thread-18328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:40:10.807 [DEBUG] [Thread-18328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] client lang: <none>
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] server lang: <none>
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] kex follows: False
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] Compression: none
2025-11-12T15:40:10.808 [DEBUG] [Thread-18328] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:40:10.825 [DEBUG] [Thread-18328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:40:10.826 [DEBUG] [Thread-18328] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:40:10.826 [DEBUG] [Thread-18328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:40:10.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:40:10.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:40:10.828 [DEBUG] [Thread-18328] [transport.py] [_log()] userauth is OK
2025-11-12T15:40:10.829 [DEBUG] [Thread-18328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:40:10.829 [DEBUG] [Thread-18328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:40:10.829 [DEBUG] [Thread-18328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:40:10.829 [DEBUG] [Thread-18328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:40:10.852 [INFO] [Thread-18328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:40:10.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:40:12.006 [DEBUG] [Thread-18328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:40:12.007 [DEBUG] [Thread-18328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:40:12.007 [DEBUG] [Thread-18328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:40:12.048 [DEBUG] [Thread-18328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:40:12.048 [DEBUG] [Thread-18328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:40:12.051 [DEBUG] [Thread-18328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:40:12.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:40:12.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:40:12.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:40:12.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:40:12.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:40:12.075 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:40:12.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:40:12.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:40:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:40:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.569184 -999.00  +26.50  32.08     17   -0.30 1 1 2 1 1   888    0 26.41 7.75 ----- 32.1 32.1 275.0 45.4 31.3 -26.0 31.2 -26.6 30.9 -28.3 32.0 -25.5
2025-11-12T15:40:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:40:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:40:12.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.569184
2025-11-12T15:40:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:40:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:40:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:40:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:40:12.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:40:12.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:39:51', tmtdew=33.36, humidity=11.11, cloud=0.0, wind=36.29, temperature=27.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:39:37.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:40:12.078 [DEBUG] [Thread-18328] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:40:12.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:40:12.192 [DEBUG] [Thread-18331] [transport.py] [_log()] starting thread (client mode): 0x14983820
2025-11-12T15:40:12.192 [DEBUG] [Thread-18331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:40:12.207 [DEBUG] [Thread-18331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:40:12.208 [INFO] [Thread-18331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:40:12.215 [DEBUG] [Thread-18331] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:40:12.215 [DEBUG] [Thread-18331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] client lang: <none>
2025-11-12T15:40:12.216 [DEBUG] [Thread-18331] [transport.py] [_log()] server lang: <none>
2025-11-12T15:40:12.217 [DEBUG] [Thread-18331] [transport.py] [_log()] kex follows: False
2025-11-12T15:40:12.217 [DEBUG] [Thread-18331] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:40:12.217 [DEBUG] [Thread-18331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:40:12.217 [DEBUG] [Thread-18331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:40:12.217 [DEBUG] [Thread-18331] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:40:12.217 [DEBUG] [Thread-18331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:40:12.217 [DEBUG] [Thread-18331] [transport.py] [_log()] Compression: none
2025-11-12T15:40:12.218 [DEBUG] [Thread-18331] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:40:12.271 [DEBUG] [Thread-18331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:40:12.272 [DEBUG] [Thread-18331] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:40:12.273 [DEBUG] [Thread-18331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:40:12.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:40:12.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:40:12.328 [DEBUG] [Thread-18331] [transport.py] [_log()] userauth is OK
2025-11-12T15:40:12.328 [DEBUG] [Thread-18331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:40:12.328 [DEBUG] [Thread-18331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:40:12.328 [DEBUG] [Thread-18331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:40:12.328 [DEBUG] [Thread-18331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:40:12.348 [INFO] [Thread-18331] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:40:12.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:40:12.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:40:13.199 [DEBUG] [Thread-18331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:40:13.200 [DEBUG] [Thread-18331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:40:13.248 [DEBUG] [Thread-18331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:40:13.248 [DEBUG] [Thread-18331] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:40:13.257 [DEBUG] [Thread-18331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:40:13.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:40:13.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-11-12T15:40: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') -> 00000000
2025-11-12T15:40:13.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:40:13.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:40:13.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:40:13.294 [DEBUG] [Thread-18331] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:40:21.022 [DEBUG] [Thread-18333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:40:36.074 [DEBUG] [Thread-18334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:40:38.161 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:40:38.162 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:40:38.889 [DEBUG] [Thread-18335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:40:43.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:40:43.315 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:40:43.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-11-12T15:40:43.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 40, 23), 33.12, 11.28, 0.0, 35.84, 27.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:40:43.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:40:23
2025-11-12T15:40:44.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:40:44.244 [DEBUG] [Thread-18336] [transport.py] [_log()] starting thread (client mode): 0x149abb80
2025-11-12T15:40:44.244 [DEBUG] [Thread-18336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:40:44.264 [DEBUG] [Thread-18336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:40:44.264 [INFO] [Thread-18336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] client lang: <none>
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] server lang: <none>
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] kex follows: False
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] Compression: none
2025-11-12T15:40:44.267 [DEBUG] [Thread-18336] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:40:44.283 [DEBUG] [Thread-18336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:40:44.283 [DEBUG] [Thread-18336] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:40:44.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:40:44.284 [DEBUG] [Thread-18336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:40:44.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:40:44.285 [DEBUG] [Thread-18336] [transport.py] [_log()] userauth is OK
2025-11-12T15:40:44.285 [DEBUG] [Thread-18336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:40:44.285 [DEBUG] [Thread-18336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:40:44.285 [DEBUG] [Thread-18336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:40:44.285 [DEBUG] [Thread-18336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:40:44.300 [INFO] [Thread-18336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:40:44.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:40:44.949 [DEBUG] [Thread-18336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:40:44.949 [DEBUG] [Thread-18336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:40:44.950 [DEBUG] [Thread-18336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:40:44.991 [DEBUG] [Thread-18336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:40:44.991 [DEBUG] [Thread-18336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:40:44.994 [DEBUG] [Thread-18336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:40:45.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:40:45.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:40:45.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:40:45.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:40:45.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:40:45.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:40:45.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:40:45.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:40:45.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:40:45.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.569531 -999.00  +26.40  27.88     17   -0.20 1 1 1 1 1   888    0 26.48 10.28 ----- 27.9 27.9 273.4 38.5 31.2 -27.1 31.1 -25.4 30.9 -26.3 31.8 -26.5
2025-11-12T15:40:45.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:40:45.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:40:45.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.569531
2025-11-12T15:40:45.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:40:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:40:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:40:45.022 [DEBUG] [Thread-18336] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:40:45.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:40:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:40:45.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:40:23', tmtdew=33.12, humidity=11.28, cloud=0.0, wind=35.84, temperature=27.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:40:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:40:45.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:40:45.124 [DEBUG] [Thread-18339] [transport.py] [_log()] starting thread (client mode): 0x17399270
2025-11-12T15:40:45.125 [DEBUG] [Thread-18339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:40:45.140 [DEBUG] [Thread-18339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:40:45.140 [INFO] [Thread-18339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:40:45.157 [DEBUG] [Thread-18339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] client lang: <none>
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] server lang: <none>
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] kex follows: False
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] Compression: none
2025-11-12T15:40:45.158 [DEBUG] [Thread-18339] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:40:45.204 [DEBUG] [Thread-18339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:40:45.205 [DEBUG] [Thread-18339] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:40:45.206 [DEBUG] [Thread-18339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:40:45.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:40:45.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:40:45.260 [DEBUG] [Thread-18339] [transport.py] [_log()] userauth is OK
2025-11-12T15:40:45.260 [DEBUG] [Thread-18339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:40:45.261 [DEBUG] [Thread-18339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:40:45.261 [DEBUG] [Thread-18339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:40:45.261 [DEBUG] [Thread-18339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:40:45.281 [INFO] [Thread-18339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:40:45.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:40:45.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:40:46.111 [DEBUG] [Thread-18339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:40:46.111 [DEBUG] [Thread-18339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:40:46.158 [DEBUG] [Thread-18339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:40:46.159 [DEBUG] [Thread-18339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:40:46.168 [DEBUG] [Thread-18339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:40:46.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:40:46.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-11-12T15:40:46.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-11-12T15:40:46.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:40:46.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:40:46.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:40:46.206 [DEBUG] [Thread-18339] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:40:51.107 [DEBUG] [Thread-18341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:41:06.159 [DEBUG] [Thread-18342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:41:16.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:41:16.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:41:16.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-11-12T15:41:16.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 40, 55), 32.87, 11.31, 0.0, 35.64, 27.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:41:16.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:40:55
2025-11-12T15:41:17.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:41:17.145 [DEBUG] [Thread-18343] [transport.py] [_log()] starting thread (client mode): 0x1499f190
2025-11-12T15:41:17.145 [DEBUG] [Thread-18343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:41:17.165 [DEBUG] [Thread-18343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:41:17.165 [INFO] [Thread-18343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:41:17.168 [DEBUG] [Thread-18343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:41:17.168 [DEBUG] [Thread-18343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:41:17.168 [DEBUG] [Thread-18343] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:41:17.168 [DEBUG] [Thread-18343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:41:17.168 [DEBUG] [Thread-18343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:41:17.168 [DEBUG] [Thread-18343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:41:17.168 [DEBUG] [Thread-18343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:41:17.168 [DEBUG] [Thread-18343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] client lang: <none>
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] server lang: <none>
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] kex follows: False
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] Compression: none
2025-11-12T15:41:17.169 [DEBUG] [Thread-18343] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:41:17.183 [DEBUG] [Thread-18343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:41:17.183 [DEBUG] [Thread-18343] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:41:17.183 [DEBUG] [Thread-18343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:41:17.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:41:17.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:41:17.184 [DEBUG] [Thread-18343] [transport.py] [_log()] userauth is OK
2025-11-12T15:41:17.184 [DEBUG] [Thread-18343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:41:17.184 [DEBUG] [Thread-18343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:41:17.184 [DEBUG] [Thread-18343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:41:17.184 [DEBUG] [Thread-18343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:41:17.215 [INFO] [Thread-18343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:41:17.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:41:17.847 [DEBUG] [Thread-18343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:41:17.847 [DEBUG] [Thread-18343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:41:17.847 [DEBUG] [Thread-18343] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:41:17.888 [DEBUG] [Thread-18343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:41:17.888 [DEBUG] [Thread-18343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:41:17.890 [DEBUG] [Thread-18343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:41:17.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:41:17.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:41:17.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:41:17.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:41:17.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:41:17.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:41:17.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:41:17.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.569879 -999.00  +26.70  48.00     17   -0.20 1 1 2 1 1   888    0 26.82 12.93 ----- 48.0 48.0 273.0 55.8 30.8 -31.1 31.1 -24.1 30.6 -33.0 31.7 -28.7
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.569879
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:41:17.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:40:55', tmtdew=32.87, humidity=11.31, cloud=0.0, wind=35.64, temperature=27.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:40:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:41:17.908 [DEBUG] [Thread-18343] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:41:17.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:41:17.994 [DEBUG] [Thread-18346] [transport.py] [_log()] starting thread (client mode): 0x17346bf0
2025-11-12T15:41:17.995 [DEBUG] [Thread-18346] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:41:18.009 [DEBUG] [Thread-18346] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:41:18.009 [INFO] [Thread-18346] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:41:18.017 [DEBUG] [Thread-18346] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:41:18.017 [DEBUG] [Thread-18346] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:41:18.017 [DEBUG] [Thread-18346] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:41:18.017 [DEBUG] [Thread-18346] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:41:18.017 [DEBUG] [Thread-18346] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:41:18.017 [DEBUG] [Thread-18346] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] client lang: <none>
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] server lang: <none>
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] kex follows: False
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] Compression: none
2025-11-12T15:41:18.018 [DEBUG] [Thread-18346] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:41:18.075 [DEBUG] [Thread-18346] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:41:18.075 [DEBUG] [Thread-18346] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:41:18.075 [DEBUG] [Thread-18346] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:41:18.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:41:18.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:41:18.132 [DEBUG] [Thread-18346] [transport.py] [_log()] userauth is OK
2025-11-12T15:41:18.132 [DEBUG] [Thread-18346] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:41:18.132 [DEBUG] [Thread-18346] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:41:18.132 [DEBUG] [Thread-18346] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:41:18.132 [DEBUG] [Thread-18346] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:41:18.149 [INFO] [Thread-18346] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:41:18.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:41:18.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:41:18.948 [DEBUG] [Thread-18346] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:41:18.948 [DEBUG] [Thread-18346] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:41:18.995 [DEBUG] [Thread-18346] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:41:18.995 [DEBUG] [Thread-18346] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:41:19.004 [DEBUG] [Thread-18346] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:41:19.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:41:19.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-11-12T15:41:19.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-11-12T15:41:19.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:41:19.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:41:19.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:41:19.043 [DEBUG] [Thread-18346] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:41:21.190 [DEBUG] [Thread-18348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:41:36.234 [DEBUG] [Thread-18349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:41:38.303 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:41:38.304 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:41:38.931 [DEBUG] [Thread-18350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:41:49.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:41:49.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:41:49.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-11-12T15:41:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 41, 27), 32.92, 11.26, 0.0, 34.97, 27.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:41:49.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:41:27
2025-11-12T15:41:49.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:41:49.989 [DEBUG] [Thread-18351] [transport.py] [_log()] starting thread (client mode): 0x1494f6a0
2025-11-12T15:41:49.989 [DEBUG] [Thread-18351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:41:50.010 [DEBUG] [Thread-18351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:41:50.010 [INFO] [Thread-18351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:41:50.013 [DEBUG] [Thread-18351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:41:50.013 [DEBUG] [Thread-18351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:41:50.013 [DEBUG] [Thread-18351] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:41:50.013 [DEBUG] [Thread-18351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:41:50.013 [DEBUG] [Thread-18351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:41:50.013 [DEBUG] [Thread-18351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] client lang: <none>
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] server lang: <none>
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] kex follows: False
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] Compression: none
2025-11-12T15:41:50.014 [DEBUG] [Thread-18351] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:41:50.030 [DEBUG] [Thread-18351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:41:50.031 [DEBUG] [Thread-18351] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:41:50.031 [DEBUG] [Thread-18351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:41:50.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:41:50.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:41:50.033 [DEBUG] [Thread-18351] [transport.py] [_log()] userauth is OK
2025-11-12T15:41:50.033 [DEBUG] [Thread-18351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:41:50.034 [DEBUG] [Thread-18351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:41:50.034 [DEBUG] [Thread-18351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:41:50.034 [DEBUG] [Thread-18351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:41:50.048 [INFO] [Thread-18351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:41:50.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:41:50.684 [DEBUG] [Thread-18351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:41:50.685 [DEBUG] [Thread-18351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:41:50.685 [DEBUG] [Thread-18351] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:41:50.726 [DEBUG] [Thread-18351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:41:50.726 [DEBUG] [Thread-18351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:41:50.729 [DEBUG] [Thread-18351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:41:50.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:41:50.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:41:50.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:41:50.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:41:50.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:41:50.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:41:50.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:41:50.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:41:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:41:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.570226 -999.00  +26.60  29.92     17   -0.10 1 1 1 1 1   888    0 26.98 15.73 ----- 29.9 29.9 274.8 48.0 31.1 -26.8 30.8 -25.5 30.9 -22.2 31.6 -25.7
2025-11-12T15:41:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:41:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:41:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.570226
2025-11-12T15:41:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:41:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:41:50.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:41:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:41:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:41:50.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:41:27', tmtdew=32.92, humidity=11.26, cloud=0.0, wind=34.97, temperature=27.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:41:07.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:41:50.756 [DEBUG] [Thread-18351] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:41:50.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:41:50.850 [DEBUG] [Thread-18354] [transport.py] [_log()] starting thread (client mode): 0x173e8190
2025-11-12T15:41:50.850 [DEBUG] [Thread-18354] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:41:50.867 [DEBUG] [Thread-18354] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:41:50.867 [INFO] [Thread-18354] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:41:50.874 [DEBUG] [Thread-18354] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] client lang: <none>
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] server lang: <none>
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] kex follows: False
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:41:50.875 [DEBUG] [Thread-18354] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:41:50.876 [DEBUG] [Thread-18354] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:41:50.876 [DEBUG] [Thread-18354] [transport.py] [_log()] Compression: none
2025-11-12T15:41:50.876 [DEBUG] [Thread-18354] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:41:50.932 [DEBUG] [Thread-18354] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:41:50.933 [DEBUG] [Thread-18354] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:41:50.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:41:50.934 [DEBUG] [Thread-18354] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:41:50.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:41:50.988 [DEBUG] [Thread-18354] [transport.py] [_log()] userauth is OK
2025-11-12T15:41:50.988 [DEBUG] [Thread-18354] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:41:50.988 [DEBUG] [Thread-18354] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:41:50.988 [DEBUG] [Thread-18354] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:41:50.988 [DEBUG] [Thread-18354] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:41:51.011 [INFO] [Thread-18354] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:41:51.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:41:51.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:41:51.275 [DEBUG] [Thread-18356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:41:51.881 [DEBUG] [Thread-18354] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:41:51.882 [DEBUG] [Thread-18354] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:41:51.929 [DEBUG] [Thread-18354] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:41:51.930 [DEBUG] [Thread-18354] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:41:51.939 [DEBUG] [Thread-18354] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:41:51.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:41:51.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-11-12T15:41:51.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-11-12T15:41:51.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:41:51.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:41:51.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:41:51.976 [DEBUG] [Thread-18354] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:42:06.324 [DEBUG] [Thread-18357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:42:21.358 [DEBUG] [Thread-18358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:42:21.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:42:21.971 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:42:21.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-11-12T15:42:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 41, 59), 32.8, 11.31, 0.0, 38.75, 27.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:42:22.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:41:59
2025-11-12T15:42:22.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:42:22.905 [DEBUG] [Thread-18359] [transport.py] [_log()] starting thread (client mode): 0x1493de10
2025-11-12T15:42:22.905 [DEBUG] [Thread-18359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:42:22.925 [DEBUG] [Thread-18359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:42:22.925 [INFO] [Thread-18359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] client lang: <none>
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] server lang: <none>
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] kex follows: False
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:42:22.929 [DEBUG] [Thread-18359] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:42:22.930 [DEBUG] [Thread-18359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:42:22.930 [DEBUG] [Thread-18359] [transport.py] [_log()] Compression: none
2025-11-12T15:42:22.930 [DEBUG] [Thread-18359] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:42:22.946 [DEBUG] [Thread-18359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:42:22.947 [DEBUG] [Thread-18359] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:42:22.947 [DEBUG] [Thread-18359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:42:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:42:22.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:42:22.949 [DEBUG] [Thread-18359] [transport.py] [_log()] userauth is OK
2025-11-12T15:42:22.949 [DEBUG] [Thread-18359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:42:22.950 [DEBUG] [Thread-18359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:42:22.950 [DEBUG] [Thread-18359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:42:22.950 [DEBUG] [Thread-18359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:42:22.966 [INFO] [Thread-18359] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:42:22.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:42:23.606 [DEBUG] [Thread-18359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:42:23.606 [DEBUG] [Thread-18359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:42:23.606 [DEBUG] [Thread-18359] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:42:23.647 [DEBUG] [Thread-18359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:42:23.647 [DEBUG] [Thread-18359] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:42:23.649 [DEBUG] [Thread-18359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:42:23.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:42:23.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:42:23.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:42:23.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:42:23.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:42:23.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:42:23.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:42:23.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:42:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:42:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.570573 -999.00  +26.60  35.34     17   +0.00 1 1 2 1 1   888    0 27.05 18.04 ----- 35.3 35.3 275.6 46.4 30.9 -27.8 30.9 -23.9 30.9 -25.5 31.6 -25.0
2025-11-12T15:42:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:42:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:42:23.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.570573
2025-11-12T15:42:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:42:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:42:23.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:42:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:42:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:42:23.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:41:59', tmtdew=32.8, humidity=11.31, cloud=0.0, wind=38.75, temperature=27.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:41:37.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:42:23.674 [DEBUG] [Thread-18359] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:42:23.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:42:23.779 [DEBUG] [Thread-18362] [transport.py] [_log()] starting thread (client mode): 0x149ab820
2025-11-12T15:42:23.779 [DEBUG] [Thread-18362] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:42:23.794 [DEBUG] [Thread-18362] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:42:23.794 [INFO] [Thread-18362] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:42:23.801 [DEBUG] [Thread-18362] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] client lang: <none>
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] server lang: <none>
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] kex follows: False
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] Compression: none
2025-11-12T15:42:23.802 [DEBUG] [Thread-18362] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:42:23.860 [DEBUG] [Thread-18362] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:42:23.861 [DEBUG] [Thread-18362] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:42:23.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:42:23.862 [DEBUG] [Thread-18362] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:42:23.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:42:23.916 [DEBUG] [Thread-18362] [transport.py] [_log()] userauth is OK
2025-11-12T15:42:23.917 [DEBUG] [Thread-18362] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:42:23.917 [DEBUG] [Thread-18362] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:42:23.917 [DEBUG] [Thread-18362] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:42:23.917 [DEBUG] [Thread-18362] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:42:23.936 [INFO] [Thread-18362] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:42:23.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:42:23.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:42:24.762 [DEBUG] [Thread-18362] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:42:24.762 [DEBUG] [Thread-18362] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:42:24.810 [DEBUG] [Thread-18362] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:42:24.811 [DEBUG] [Thread-18362] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:42:24.820 [DEBUG] [Thread-18362] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:42:24.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:42:24.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-11-12T15:42:24.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-11-12T15:42:24.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:42:24.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:42:24.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:42:24.857 [DEBUG] [Thread-18362] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:42:36.389 [DEBUG] [Thread-18364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:42:38.444 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:42:38.445 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:42:38.959 [DEBUG] [Thread-18365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:42:51.427 [DEBUG] [Thread-18366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:42:54.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:42:54.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:42:54.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-11-12T15:42:55.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 42, 31), 32.64, 11.43, 0.0, 32.48, 27.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:42:55.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:42:31
2025-11-12T15:42:55.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:42:55.807 [DEBUG] [Thread-18367] [transport.py] [_log()] starting thread (client mode): 0x173be590
2025-11-12T15:42:55.807 [DEBUG] [Thread-18367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:42:55.827 [DEBUG] [Thread-18367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:42:55.827 [INFO] [Thread-18367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:42:55.830 [DEBUG] [Thread-18367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] client lang: <none>
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] server lang: <none>
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] kex follows: False
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] Compression: none
2025-11-12T15:42:55.831 [DEBUG] [Thread-18367] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:42:55.847 [DEBUG] [Thread-18367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:42:55.847 [DEBUG] [Thread-18367] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:42:55.848 [DEBUG] [Thread-18367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:42:55.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:42:55.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:42:55.850 [DEBUG] [Thread-18367] [transport.py] [_log()] userauth is OK
2025-11-12T15:42:55.850 [DEBUG] [Thread-18367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:42:55.850 [DEBUG] [Thread-18367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:42:55.850 [DEBUG] [Thread-18367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:42:55.850 [DEBUG] [Thread-18367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:42:55.873 [INFO] [Thread-18367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:42:55.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:42:56.480 [DEBUG] [Thread-18367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:42:56.480 [DEBUG] [Thread-18367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:42:56.480 [DEBUG] [Thread-18367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:42:56.521 [DEBUG] [Thread-18367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:42:56.521 [DEBUG] [Thread-18367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:42:56.524 [DEBUG] [Thread-18367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:42:56.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:42:56.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:42:56.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:42:56.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:42:56.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:42:56.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:42:56.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:42:56.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:42:56.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:42:56.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.570921 -999.00  +26.20  28.40     17   -0.20 1 1 1 1 1   888    0 27.05 21.63 ----- 28.4 28.4 275.2 36.0 30.8 -27.7 30.9 -24.2 30.5 -28.7 31.4 -25.4
2025-11-12T15:42:56.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:42:56.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:42:56.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.570921
2025-11-12T15:42:56.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:42:56.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:42:56.546 [DEBUG] [Thread-18367] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:42:56.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:42:56.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:42:56.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:42:56.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:42:31', tmtdew=32.64, humidity=11.43, cloud=0.0, wind=32.48, temperature=27.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:42:07.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:42:56.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:42:56.643 [DEBUG] [Thread-18370] [transport.py] [_log()] starting thread (client mode): 0x173bca00
2025-11-12T15:42:56.643 [DEBUG] [Thread-18370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:42:56.658 [DEBUG] [Thread-18370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:42:56.659 [INFO] [Thread-18370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:42:56.666 [DEBUG] [Thread-18370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:42:56.666 [DEBUG] [Thread-18370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:42:56.666 [DEBUG] [Thread-18370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:42:56.666 [DEBUG] [Thread-18370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:42:56.666 [DEBUG] [Thread-18370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:42:56.666 [DEBUG] [Thread-18370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:42:56.666 [DEBUG] [Thread-18370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] client lang: <none>
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] server lang: <none>
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] kex follows: False
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] Compression: none
2025-11-12T15:42:56.667 [DEBUG] [Thread-18370] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:42:56.725 [DEBUG] [Thread-18370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:42:56.726 [DEBUG] [Thread-18370] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:42:56.726 [DEBUG] [Thread-18370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:42:56.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:42:56.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:42:56.785 [DEBUG] [Thread-18370] [transport.py] [_log()] userauth is OK
2025-11-12T15:42:56.785 [DEBUG] [Thread-18370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:42:56.785 [DEBUG] [Thread-18370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:42:56.785 [DEBUG] [Thread-18370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:42:56.785 [DEBUG] [Thread-18370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:42:56.804 [INFO] [Thread-18370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:42:56.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:42:56.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:42:57.649 [DEBUG] [Thread-18370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:42:57.650 [DEBUG] [Thread-18370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:42:57.698 [DEBUG] [Thread-18370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:42:57.698 [DEBUG] [Thread-18370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:42:57.707 [DEBUG] [Thread-18370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:42:57.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:42:57.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-11-12T15:42:57.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-11-12T15:42:57.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:42:57.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:42:57.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:42:57.744 [DEBUG] [Thread-18370] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:43:06.461 [DEBUG] [Thread-18372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:43:21.508 [DEBUG] [Thread-18373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:43:27.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:43:27.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:43:27.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-11-12T15:43:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 43, 3), 32.64, 11.39, 0.0, 25.45, 27.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:43:28.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:43:03
2025-11-12T15:43:28.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:43:28.694 [DEBUG] [Thread-18374] [transport.py] [_log()] starting thread (client mode): 0x1499dfc0
2025-11-12T15:43:28.694 [DEBUG] [Thread-18374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:43:28.713 [DEBUG] [Thread-18374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:43:28.713 [INFO] [Thread-18374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] client lang: <none>
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] server lang: <none>
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] kex follows: False
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:43:28.716 [DEBUG] [Thread-18374] [transport.py] [_log()] Compression: none
2025-11-12T15:43:28.717 [DEBUG] [Thread-18374] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:43:28.734 [DEBUG] [Thread-18374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:43:28.734 [DEBUG] [Thread-18374] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:43:28.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:43:28.735 [DEBUG] [Thread-18374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:43:28.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:43:28.737 [DEBUG] [Thread-18374] [transport.py] [_log()] userauth is OK
2025-11-12T15:43:28.737 [DEBUG] [Thread-18374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:43:28.737 [DEBUG] [Thread-18374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:43:28.737 [DEBUG] [Thread-18374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:43:28.737 [DEBUG] [Thread-18374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:43:28.761 [INFO] [Thread-18374] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:43:28.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:43:29.390 [DEBUG] [Thread-18374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:43:29.390 [DEBUG] [Thread-18374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:43:29.390 [DEBUG] [Thread-18374] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:43:29.431 [DEBUG] [Thread-18374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:43:29.431 [DEBUG] [Thread-18374] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:43:29.434 [DEBUG] [Thread-18374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:43:29.445 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:43:29.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:43:29.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:43:29.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:43:29.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:43:29.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:43:29.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:43:29.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:43:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:43:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.571268 -999.00  +26.10  18.72     17   -0.10 1 1 1 1 1   888    0 27.39 26.27 ----- 18.7 18.7 269.8 30.8 30.8 -27.7 30.8 -24.1 30.9 -22.7 31.4 -25.3
2025-11-12T15:43:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:43:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:43:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.571268
2025-11-12T15:43:29.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:43:29.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:43:29.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:43:29.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:43:29.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:43:29.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:43:03', tmtdew=32.64, humidity=11.39, cloud=0.0, wind=25.45, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:42:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:43:29.459 [DEBUG] [Thread-18374] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:43:29.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:43:29.553 [DEBUG] [Thread-18377] [transport.py] [_log()] starting thread (client mode): 0x14954d90
2025-11-12T15:43:29.553 [DEBUG] [Thread-18377] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:43:29.568 [DEBUG] [Thread-18377] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:43:29.569 [INFO] [Thread-18377] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:43:29.576 [DEBUG] [Thread-18377] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:43:29.576 [DEBUG] [Thread-18377] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:43:29.576 [DEBUG] [Thread-18377] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] client lang: <none>
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] server lang: <none>
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] kex follows: False
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] Compression: none
2025-11-12T15:43:29.577 [DEBUG] [Thread-18377] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:43:29.641 [DEBUG] [Thread-18377] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:43:29.641 [DEBUG] [Thread-18377] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:43:29.641 [DEBUG] [Thread-18377] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:43:29.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:43:29.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:43:29.700 [DEBUG] [Thread-18377] [transport.py] [_log()] userauth is OK
2025-11-12T15:43:29.700 [DEBUG] [Thread-18377] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:43:29.700 [DEBUG] [Thread-18377] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:43:29.700 [DEBUG] [Thread-18377] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:43:29.700 [DEBUG] [Thread-18377] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:43:29.719 [INFO] [Thread-18377] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:43:29.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:43:29.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:43:30.550 [DEBUG] [Thread-18377] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:43:30.550 [DEBUG] [Thread-18377] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:43:30.598 [DEBUG] [Thread-18377] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:43:30.598 [DEBUG] [Thread-18377] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:43:30.607 [DEBUG] [Thread-18377] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:43:30.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:43:30.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-11-12T15:43:30.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-11-12T15:43:30.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:43:30.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:43:30.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:43:30.642 [DEBUG] [Thread-18377] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:43:36.545 [DEBUG] [Thread-18379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:43:38.587 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:43:38.588 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:43:38.993 [DEBUG] [Thread-18380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:43:51.587 [DEBUG] [Thread-18381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:44:00.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:44:00.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:44:00.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-11-12T15:44:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 43, 35), 32.39, 11.49, 0.0, 18.95, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:44:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:43:35
2025-11-12T15:44:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:44:01.569 [DEBUG] [Thread-18382] [transport.py] [_log()] starting thread (client mode): 0x173634f0
2025-11-12T15:44:01.569 [DEBUG] [Thread-18382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:44:01.591 [DEBUG] [Thread-18382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:44:01.592 [INFO] [Thread-18382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:44:01.594 [DEBUG] [Thread-18382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] client lang: <none>
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] server lang: <none>
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] kex follows: False
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] Compression: none
2025-11-12T15:44:01.595 [DEBUG] [Thread-18382] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:44:01.612 [DEBUG] [Thread-18382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:44:01.613 [DEBUG] [Thread-18382] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:44:01.614 [DEBUG] [Thread-18382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:44:01.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:44:01.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:44:01.615 [DEBUG] [Thread-18382] [transport.py] [_log()] userauth is OK
2025-11-12T15:44:01.616 [DEBUG] [Thread-18382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:44:01.616 [DEBUG] [Thread-18382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:44:01.616 [DEBUG] [Thread-18382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:44:01.616 [DEBUG] [Thread-18382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:44:01.634 [INFO] [Thread-18382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:44:01.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:44:02.237 [DEBUG] [Thread-18382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:44:02.237 [DEBUG] [Thread-18382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:44:02.238 [DEBUG] [Thread-18382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:44:02.278 [DEBUG] [Thread-18382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:44:02.278 [DEBUG] [Thread-18382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:44:02.282 [DEBUG] [Thread-18382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:44:02.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:44:02.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:44:02.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:44:02.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:44:02.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:44:02.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:44:02.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:44:02.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:44:02.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:44:02.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.571615 -999.00  +26.20  22.38     17   -0.10 1 1 1 1 1   888    0 27.45 29.58 ----- 22.4 22.4 266.6 25.7 30.9 -25.9 30.9 -23.9 31.0 -23.7 31.4 -26.4
2025-11-12T15:44:02.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:44:02.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:44:02.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.571615
2025-11-12T15:44:02.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:44:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:44:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:44:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:44:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:44:02.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:43:35', tmtdew=32.39, humidity=11.49, cloud=0.0, wind=18.95, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:43:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:44:02.307 [DEBUG] [Thread-18382] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:44:02.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:44:02.403 [DEBUG] [Thread-18385] [transport.py] [_log()] starting thread (client mode): 0x173ea470
2025-11-12T15:44:02.403 [DEBUG] [Thread-18385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:44:02.418 [DEBUG] [Thread-18385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:44:02.418 [INFO] [Thread-18385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:44:02.425 [DEBUG] [Thread-18385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:44:02.425 [DEBUG] [Thread-18385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:44:02.425 [DEBUG] [Thread-18385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:44:02.425 [DEBUG] [Thread-18385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:44:02.425 [DEBUG] [Thread-18385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] client lang: <none>
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] server lang: <none>
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] kex follows: False
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] Compression: none
2025-11-12T15:44:02.426 [DEBUG] [Thread-18385] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:44:02.485 [DEBUG] [Thread-18385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:44:02.486 [DEBUG] [Thread-18385] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:44:02.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:44:02.487 [DEBUG] [Thread-18385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:44:02.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:44:02.544 [DEBUG] [Thread-18385] [transport.py] [_log()] userauth is OK
2025-11-12T15:44:02.545 [DEBUG] [Thread-18385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:44:02.545 [DEBUG] [Thread-18385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:44:02.545 [DEBUG] [Thread-18385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:44:02.545 [DEBUG] [Thread-18385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:44:02.564 [INFO] [Thread-18385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:44:02.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:44:02.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:44:03.412 [DEBUG] [Thread-18385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:44:03.412 [DEBUG] [Thread-18385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:44:03.460 [DEBUG] [Thread-18385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:44:03.460 [DEBUG] [Thread-18385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:44:03.469 [DEBUG] [Thread-18385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:44:03.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:44:03.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:44:03.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:44:03.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:44:03.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:44:03.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:44:03.506 [DEBUG] [Thread-18385] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:44:06.616 [DEBUG] [Thread-18387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:44:21.663 [DEBUG] [Thread-18388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:44:33.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:44:33.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:44:33.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-11-12T15:44:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 44, 7), 32.39, 11.53, 0.0, 26.54, 27.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:44:34.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:44:07
2025-11-12T15:44:34.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:44:34.468 [DEBUG] [Thread-18389] [transport.py] [_log()] starting thread (client mode): 0x173bf250
2025-11-12T15:44:34.468 [DEBUG] [Thread-18389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:44:34.489 [DEBUG] [Thread-18389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:44:34.489 [INFO] [Thread-18389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] client lang: <none>
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] server lang: <none>
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] kex follows: False
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] Compression: none
2025-11-12T15:44:34.492 [DEBUG] [Thread-18389] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:44:34.501 [DEBUG] [Thread-18389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:44:34.501 [DEBUG] [Thread-18389] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:44:34.501 [DEBUG] [Thread-18389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:44:34.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:44:34.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:44:34.502 [DEBUG] [Thread-18389] [transport.py] [_log()] userauth is OK
2025-11-12T15:44:34.502 [DEBUG] [Thread-18389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:44:34.502 [DEBUG] [Thread-18389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:44:34.502 [DEBUG] [Thread-18389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:44:34.502 [DEBUG] [Thread-18389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:44:34.518 [INFO] [Thread-18389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:44:34.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:44:35.130 [DEBUG] [Thread-18389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:44:35.130 [DEBUG] [Thread-18389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:44:35.130 [DEBUG] [Thread-18389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:44:35.171 [DEBUG] [Thread-18389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:44:35.171 [DEBUG] [Thread-18389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:44:35.174 [DEBUG] [Thread-18389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:44:35.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:44:35.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:44:35.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:44:35.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:44:35.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:44:35.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:44:35.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.571962 -999.00  +26.40  20.19     17   -0.00 1 1 1 1 1   888    0 26.99 33.88 ----- 20.2 20.2 269.2 24.4 30.9 -26.5 30.9 -24.0 31.0 -26.4 31.5 -24.7
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.571962
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:44:35.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:44:35.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:44:07', tmtdew=32.39, humidity=11.53, cloud=0.0, wind=26.54, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:43:37.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:44:35.194 [DEBUG] [Thread-18389] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:44:35.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:44:35.279 [DEBUG] [Thread-18392] [transport.py] [_log()] starting thread (client mode): 0x1739bdc0
2025-11-12T15:44:35.279 [DEBUG] [Thread-18392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:44:35.294 [DEBUG] [Thread-18392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:44:35.294 [INFO] [Thread-18392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] client lang: <none>
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] server lang: <none>
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] kex follows: False
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] Compression: none
2025-11-12T15:44:35.302 [DEBUG] [Thread-18392] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:44:35.359 [DEBUG] [Thread-18392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:44:35.359 [DEBUG] [Thread-18392] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:44:35.359 [DEBUG] [Thread-18392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:44:35.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:44:35.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:44:35.416 [DEBUG] [Thread-18392] [transport.py] [_log()] userauth is OK
2025-11-12T15:44:35.416 [DEBUG] [Thread-18392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:44:35.416 [DEBUG] [Thread-18392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:44:35.416 [DEBUG] [Thread-18392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:44:35.416 [DEBUG] [Thread-18392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:44:35.435 [INFO] [Thread-18392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:44:35.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:44:35.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:44:36.291 [DEBUG] [Thread-18392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:44:36.291 [DEBUG] [Thread-18392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:44:36.339 [DEBUG] [Thread-18392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:44:36.339 [DEBUG] [Thread-18392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:44:36.348 [DEBUG] [Thread-18392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:44:36.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:44:36.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-11-12T15:44:36.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-11-12T15:44:36.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:44:36.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:44:36.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:44:36.388 [DEBUG] [Thread-18392] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:44:36.694 [DEBUG] [Thread-18394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:44:38.728 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:44:38.729 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:44:39.030 [DEBUG] [Thread-18395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:44:51.746 [DEBUG] [Thread-18396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:45:06.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:45:06.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:45: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-11-12T15:45:06.781 [DEBUG] [Thread-18397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:45:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 44, 39), 32.38, 11.51, 0.0, 28.18, 27.51, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:45:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:44:39
2025-11-12T15:45:07.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:45:07.322 [DEBUG] [Thread-18398] [transport.py] [_log()] starting thread (client mode): 0x1493de70
2025-11-12T15:45:07.322 [DEBUG] [Thread-18398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:45:07.346 [DEBUG] [Thread-18398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:45:07.346 [INFO] [Thread-18398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:45:07.350 [DEBUG] [Thread-18398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:45:07.350 [DEBUG] [Thread-18398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:45:07.350 [DEBUG] [Thread-18398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] client lang: <none>
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] server lang: <none>
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] kex follows: False
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:45:07.351 [DEBUG] [Thread-18398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:45:07.352 [DEBUG] [Thread-18398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:45:07.352 [DEBUG] [Thread-18398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:45:07.352 [DEBUG] [Thread-18398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:45:07.352 [DEBUG] [Thread-18398] [transport.py] [_log()] Compression: none
2025-11-12T15:45:07.352 [DEBUG] [Thread-18398] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:45:07.371 [DEBUG] [Thread-18398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:45:07.372 [DEBUG] [Thread-18398] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:45:07.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:45:07.373 [DEBUG] [Thread-18398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:45:07.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:45:07.375 [DEBUG] [Thread-18398] [transport.py] [_log()] userauth is OK
2025-11-12T15:45:07.375 [DEBUG] [Thread-18398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:45:07.375 [DEBUG] [Thread-18398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:45:07.375 [DEBUG] [Thread-18398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:45:07.376 [DEBUG] [Thread-18398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:45:07.399 [INFO] [Thread-18398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:45:07.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:45:09.915 [DEBUG] [Thread-18398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:45:09.916 [DEBUG] [Thread-18398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:45:09.916 [DEBUG] [Thread-18398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:45:09.956 [DEBUG] [Thread-18398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:45:09.957 [DEBUG] [Thread-18398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:45:09.959 [DEBUG] [Thread-18398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:45:10.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:45:10.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:45:10.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:45:10.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:45:10.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:45:10.016 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:45:10.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:45:10.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:45:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:45:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.572309 -999.00  +26.30  17.25     17   -0.40 1 1 1 1 1   888    0 27.39 45.60 ----- 17.2 17.2 285.1 29.3 31.0 -26.9 30.9 -24.1 -999.0 -999.0 31.4 -24.2
2025-11-12T15:45:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:45:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:45:10.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.572309
2025-11-12T15:45:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:45:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:45:10.018 [DEBUG] [Thread-18398] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:45:10.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:45:10.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:45:10.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:45:10.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:44:39', tmtdew=32.38, humidity=11.51, cloud=0.0, wind=28.18, temperature=27.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:44:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:45:10.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:45:10.125 [DEBUG] [Thread-18401] [transport.py] [_log()] starting thread (client mode): 0x173993c0
2025-11-12T15:45:10.125 [DEBUG] [Thread-18401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:45:10.140 [DEBUG] [Thread-18401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:45:10.140 [INFO] [Thread-18401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:45:10.147 [DEBUG] [Thread-18401] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] client lang: <none>
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] server lang: <none>
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] kex follows: False
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:45:10.148 [DEBUG] [Thread-18401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:45:10.149 [DEBUG] [Thread-18401] [transport.py] [_log()] Compression: none
2025-11-12T15:45:10.149 [DEBUG] [Thread-18401] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:45:10.204 [DEBUG] [Thread-18401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:45:10.204 [DEBUG] [Thread-18401] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:45:10.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:45:10.205 [DEBUG] [Thread-18401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:45:10.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:45:10.261 [DEBUG] [Thread-18401] [transport.py] [_log()] userauth is OK
2025-11-12T15:45:10.261 [DEBUG] [Thread-18401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:45:10.261 [DEBUG] [Thread-18401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:45:10.261 [DEBUG] [Thread-18401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:45:10.262 [DEBUG] [Thread-18401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:45:10.280 [INFO] [Thread-18401] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:45:10.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:45:10.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:45:11.095 [DEBUG] [Thread-18401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:45:11.095 [DEBUG] [Thread-18401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:45:11.143 [DEBUG] [Thread-18401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:45:11.143 [DEBUG] [Thread-18401] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:45:11.151 [DEBUG] [Thread-18401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:45:11.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:45:11.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-11-12T15:45:11.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-11-12T15:45:11.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:45:11.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:45:11.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:45:11.183 [DEBUG] [Thread-18401] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:45:21.810 [DEBUG] [Thread-18403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:45:36.862 [DEBUG] [Thread-18404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:45:38.870 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:45:38.872 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:45:39.063 [DEBUG] [Thread-18405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:45:41.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:45:41.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:45:41.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-11-12T15:45:41.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 45, 11), 32.1, 11.72, 0.0, 23.63, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:45:41.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:45:11
2025-11-12T15:45:41.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:45:42.122 [DEBUG] [Thread-18406] [transport.py] [_log()] starting thread (client mode): 0x17362fe0
2025-11-12T15:45:42.122 [DEBUG] [Thread-18406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:45:42.142 [DEBUG] [Thread-18406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:45:42.142 [INFO] [Thread-18406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:45:42.145 [DEBUG] [Thread-18406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] client lang: <none>
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] server lang: <none>
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] kex follows: False
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:45:42.146 [DEBUG] [Thread-18406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:45:42.147 [DEBUG] [Thread-18406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:45:42.147 [DEBUG] [Thread-18406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:45:42.147 [DEBUG] [Thread-18406] [transport.py] [_log()] Compression: none
2025-11-12T15:45:42.147 [DEBUG] [Thread-18406] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:45:42.165 [DEBUG] [Thread-18406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:45:42.166 [DEBUG] [Thread-18406] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:45:42.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:45:42.168 [DEBUG] [Thread-18406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:45:42.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:45:42.170 [DEBUG] [Thread-18406] [transport.py] [_log()] userauth is OK
2025-11-12T15:45:42.170 [DEBUG] [Thread-18406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:45:42.170 [DEBUG] [Thread-18406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:45:42.170 [DEBUG] [Thread-18406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:45:42.170 [DEBUG] [Thread-18406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:45:42.194 [INFO] [Thread-18406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:45:42.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:45:42.861 [DEBUG] [Thread-18406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:45:42.862 [DEBUG] [Thread-18406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:45:42.862 [DEBUG] [Thread-18406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:45:42.903 [DEBUG] [Thread-18406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:45:42.903 [DEBUG] [Thread-18406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:45:42.906 [DEBUG] [Thread-18406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:45:42.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:45:42.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:45:42.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:45:42.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:45:42.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:45:42.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:45:42.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:45:42.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:45:42.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:45:42.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.573003 -999.00  +26.40  26.19     18   +0.30 1 1 1 1 1   888    0 28.16 51.37 ----- 26.2 26.2 283.8 30.9 31.1 -25.5 30.9 -24.1 31.0 -24.3 31.6 -24.3
2025-11-12T15:45:42.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:45:42.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:45:42.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.573003
2025-11-12T15:45:42.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:45:42.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:45:42.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:45:42.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:45:42.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:45:42.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:45:11', tmtdew=32.1, humidity=11.72, cloud=0.0, wind=23.63, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:45:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:45:42.930 [DEBUG] [Thread-18406] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:45:43.016 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:45:43.029 [DEBUG] [Thread-18409] [transport.py] [_log()] starting thread (client mode): 0x17362590
2025-11-12T15:45:43.029 [DEBUG] [Thread-18409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:45:43.044 [DEBUG] [Thread-18409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:45:43.045 [INFO] [Thread-18409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:45:43.052 [DEBUG] [Thread-18409] [transport.py] [_log()] client lang: <none>
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] server lang: <none>
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] kex follows: False
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] Compression: none
2025-11-12T15:45:43.053 [DEBUG] [Thread-18409] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:45:43.116 [DEBUG] [Thread-18409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:45:43.116 [DEBUG] [Thread-18409] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:45:43.117 [DEBUG] [Thread-18409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:45:43.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:45:43.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:45:43.172 [DEBUG] [Thread-18409] [transport.py] [_log()] userauth is OK
2025-11-12T15:45:43.173 [DEBUG] [Thread-18409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:45:43.173 [DEBUG] [Thread-18409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:45:43.173 [DEBUG] [Thread-18409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:45:43.173 [DEBUG] [Thread-18409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:45:43.197 [INFO] [Thread-18409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:45:43.198 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:45:43.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:45:44.053 [DEBUG] [Thread-18409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:45:44.053 [DEBUG] [Thread-18409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:45:44.101 [DEBUG] [Thread-18409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:45:44.102 [DEBUG] [Thread-18409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:45:44.111 [DEBUG] [Thread-18409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:45:44.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:45:44.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-11-12T15:45:44.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-11-12T15:45:44.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:45:44.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:45:44.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:45:44.147 [DEBUG] [Thread-18409] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:45:51.899 [DEBUG] [Thread-18411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:46:06.943 [DEBUG] [Thread-18412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:46:14.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:46:14.157 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:46:14.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-11-12T15:46:14.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 45, 43), 32.16, 11.84, 0.0, 30.51, 27.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:46:14.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:45:43
2025-11-12T15:46:14.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:46:15.076 [DEBUG] [Thread-18413] [transport.py] [_log()] starting thread (client mode): 0x149aa9b0
2025-11-12T15:46:15.076 [DEBUG] [Thread-18413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:46:15.097 [DEBUG] [Thread-18413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:46:15.097 [INFO] [Thread-18413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:46:15.100 [DEBUG] [Thread-18413] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] client lang: <none>
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] server lang: <none>
2025-11-12T15:46:15.101 [DEBUG] [Thread-18413] [transport.py] [_log()] kex follows: False
2025-11-12T15:46:15.102 [DEBUG] [Thread-18413] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:46:15.102 [DEBUG] [Thread-18413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:46:15.102 [DEBUG] [Thread-18413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:46:15.102 [DEBUG] [Thread-18413] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:46:15.102 [DEBUG] [Thread-18413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:46:15.102 [DEBUG] [Thread-18413] [transport.py] [_log()] Compression: none
2025-11-12T15:46:15.102 [DEBUG] [Thread-18413] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:46:15.120 [DEBUG] [Thread-18413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:46:15.121 [DEBUG] [Thread-18413] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:46:15.122 [DEBUG] [Thread-18413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:46:15.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:46:15.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:46:15.124 [DEBUG] [Thread-18413] [transport.py] [_log()] userauth is OK
2025-11-12T15:46:15.124 [DEBUG] [Thread-18413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:46:15.124 [DEBUG] [Thread-18413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:46:15.125 [DEBUG] [Thread-18413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:46:15.125 [DEBUG] [Thread-18413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:46:15.161 [INFO] [Thread-18413] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:46:15.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:46:15.790 [DEBUG] [Thread-18413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:46:15.791 [DEBUG] [Thread-18413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:46:15.791 [DEBUG] [Thread-18413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:46:15.832 [DEBUG] [Thread-18413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:46:15.832 [DEBUG] [Thread-18413] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:46:15.836 [DEBUG] [Thread-18413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:46:15.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:46:15.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:46:15.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:46:15.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:46:15.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:46:15.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:46:15.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:46:15.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:46:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:46:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.573351 -999.00  +26.90  33.49     17   +0.40 1 1 2 1 1   888    0 28.10 47.77 ----- 33.5 33.5 299.8 35.6 30.9 -24.8 30.9 -23.5 31.1 -23.6 31.6 -23.9
2025-11-12T15:46:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:46:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:46:15.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.573351
2025-11-12T15:46:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:46:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:46:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:46:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:46:15.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:46:15.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:45:43', tmtdew=32.16, humidity=11.84, cloud=0.0, wind=30.51, temperature=27.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:45:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:46:15.863 [DEBUG] [Thread-18413] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:46:15.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:46:15.964 [DEBUG] [Thread-18416] [transport.py] [_log()] starting thread (client mode): 0x17361540
2025-11-12T15:46:15.964 [DEBUG] [Thread-18416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:46:15.980 [DEBUG] [Thread-18416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:46:15.980 [INFO] [Thread-18416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:46:15.987 [DEBUG] [Thread-18416] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:46:15.987 [DEBUG] [Thread-18416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] client lang: <none>
2025-11-12T15:46:15.988 [DEBUG] [Thread-18416] [transport.py] [_log()] server lang: <none>
2025-11-12T15:46:15.989 [DEBUG] [Thread-18416] [transport.py] [_log()] kex follows: False
2025-11-12T15:46:15.989 [DEBUG] [Thread-18416] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:46:15.989 [DEBUG] [Thread-18416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:46:15.989 [DEBUG] [Thread-18416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:46:15.989 [DEBUG] [Thread-18416] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:46:15.989 [DEBUG] [Thread-18416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:46:15.989 [DEBUG] [Thread-18416] [transport.py] [_log()] Compression: none
2025-11-12T15:46:15.990 [DEBUG] [Thread-18416] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:46:16.044 [DEBUG] [Thread-18416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:46:16.045 [DEBUG] [Thread-18416] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:46:16.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:46:16.046 [DEBUG] [Thread-18416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:46:16.047 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:46:16.100 [DEBUG] [Thread-18416] [transport.py] [_log()] userauth is OK
2025-11-12T15:46:16.100 [DEBUG] [Thread-18416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:46:16.100 [DEBUG] [Thread-18416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:46:16.100 [DEBUG] [Thread-18416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:46:16.100 [DEBUG] [Thread-18416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:46:16.119 [INFO] [Thread-18416] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:46:16.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:46:16.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:46:16.971 [DEBUG] [Thread-18416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:46:16.971 [DEBUG] [Thread-18416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:46:17.021 [DEBUG] [Thread-18416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:46:17.021 [DEBUG] [Thread-18416] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:46:17.029 [DEBUG] [Thread-18416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:46:17.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:46:17.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-11-12T15:46:17.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:46:17.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:46:17.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:46:17.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:46:17.065 [DEBUG] [Thread-18416] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:46:21.981 [DEBUG] [Thread-18418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:46:37.034 [DEBUG] [Thread-18419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:46:39.014 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:46:39.015 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:46:39.097 [DEBUG] [Thread-18420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:46:47.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:46:47.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:46:47.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-11-12T15:46:47.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 46, 15), 32.22, 11.81, 0.0, 33.05, 27.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:46:47.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:46:15
2025-11-12T15:46:47.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:46:47.982 [DEBUG] [Thread-18421] [transport.py] [_log()] starting thread (client mode): 0x17360160
2025-11-12T15:46:47.982 [DEBUG] [Thread-18421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:46:48.003 [DEBUG] [Thread-18421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:46:48.003 [INFO] [Thread-18421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] client lang: <none>
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] server lang: <none>
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] kex follows: False
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:46:48.006 [DEBUG] [Thread-18421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:46:48.007 [DEBUG] [Thread-18421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:46:48.007 [DEBUG] [Thread-18421] [transport.py] [_log()] Compression: none
2025-11-12T15:46:48.007 [DEBUG] [Thread-18421] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:46:48.025 [DEBUG] [Thread-18421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:46:48.025 [DEBUG] [Thread-18421] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:46:48.026 [DEBUG] [Thread-18421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:46:48.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:46:48.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:46:48.028 [DEBUG] [Thread-18421] [transport.py] [_log()] userauth is OK
2025-11-12T15:46:48.028 [DEBUG] [Thread-18421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:46:48.028 [DEBUG] [Thread-18421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:46:48.028 [DEBUG] [Thread-18421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:46:48.028 [DEBUG] [Thread-18421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:46:48.063 [INFO] [Thread-18421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:46:48.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:46:48.683 [DEBUG] [Thread-18421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:46:48.683 [DEBUG] [Thread-18421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:46:48.683 [DEBUG] [Thread-18421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:46:48.725 [DEBUG] [Thread-18421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:46:48.725 [DEBUG] [Thread-18421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:46:48.727 [DEBUG] [Thread-18421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:46:48.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:46:48.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:46:48.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:46:48.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:46:48.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:46:48.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:46:48.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:46:48.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.573698 -999.00  +27.00  28.04     17   +0.40 1 1 1 1 1   888    0 28.01 45.15 ----- 28.0 28.0 289.4 40.3 31.1 -25.1 30.9 -23.8 31.1 -27.3 31.6 -25.4
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.573698
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:46:48.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:46:15', tmtdew=32.22, humidity=11.81, cloud=0.0, wind=33.05, temperature=27.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:46:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:46:48.747 [DEBUG] [Thread-18421] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:46:48.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:46:48.832 [DEBUG] [Thread-18424] [transport.py] [_log()] starting thread (client mode): 0x17399960
2025-11-12T15:46:48.832 [DEBUG] [Thread-18424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:46:48.847 [DEBUG] [Thread-18424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:46:48.847 [INFO] [Thread-18424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] client lang: <none>
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] server lang: <none>
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] kex follows: False
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] Compression: none
2025-11-12T15:46:48.855 [DEBUG] [Thread-18424] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:46:48.915 [DEBUG] [Thread-18424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:46:48.915 [DEBUG] [Thread-18424] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:46:48.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:46:48.915 [DEBUG] [Thread-18424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:46:48.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:46:48.972 [DEBUG] [Thread-18424] [transport.py] [_log()] userauth is OK
2025-11-12T15:46:48.972 [DEBUG] [Thread-18424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:46:48.972 [DEBUG] [Thread-18424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:46:48.972 [DEBUG] [Thread-18424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:46:48.972 [DEBUG] [Thread-18424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:46:48.986 [INFO] [Thread-18424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:46:48.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:46:48.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:46:49.824 [DEBUG] [Thread-18424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:46:49.824 [DEBUG] [Thread-18424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:46:49.872 [DEBUG] [Thread-18424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:46:49.872 [DEBUG] [Thread-18424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:46:49.880 [DEBUG] [Thread-18424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:46:49.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:46:49.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:46:49.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-11-12T15:46:49.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:46:49.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:46:49.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:46:49.912 [DEBUG] [Thread-18424] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:46:52.073 [DEBUG] [Thread-18426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:47:07.122 [DEBUG] [Thread-18427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:47:19.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:47:19.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:47:19.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-11-12T15:47:20.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 46, 47), 31.82, 11.77, 0.0, 30.86, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:47:20.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:46:47
2025-11-12T15:47:20.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:47:20.899 [DEBUG] [Thread-18428] [transport.py] [_log()] starting thread (client mode): 0x149aa380
2025-11-12T15:47:20.899 [DEBUG] [Thread-18428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:47:20.920 [DEBUG] [Thread-18428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:47:20.920 [INFO] [Thread-18428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:47:20.923 [DEBUG] [Thread-18428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:47:20.923 [DEBUG] [Thread-18428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:47:20.923 [DEBUG] [Thread-18428] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:47:20.923 [DEBUG] [Thread-18428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:47:20.923 [DEBUG] [Thread-18428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] client lang: <none>
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] server lang: <none>
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] kex follows: False
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] Compression: none
2025-11-12T15:47:20.924 [DEBUG] [Thread-18428] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:47:20.938 [DEBUG] [Thread-18428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:47:20.938 [DEBUG] [Thread-18428] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:47:20.938 [DEBUG] [Thread-18428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:47:20.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:47:20.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:47:20.939 [DEBUG] [Thread-18428] [transport.py] [_log()] userauth is OK
2025-11-12T15:47:20.939 [DEBUG] [Thread-18428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:47:20.939 [DEBUG] [Thread-18428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:47:20.939 [DEBUG] [Thread-18428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:47:20.939 [DEBUG] [Thread-18428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:47:20.949 [INFO] [Thread-18428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:47:20.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:47:21.589 [DEBUG] [Thread-18428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:47:21.589 [DEBUG] [Thread-18428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:47:21.589 [DEBUG] [Thread-18428] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:47:21.630 [DEBUG] [Thread-18428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:47:21.630 [DEBUG] [Thread-18428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:47:21.632 [DEBUG] [Thread-18428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:47:21.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:47:21.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:47:21.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:47:21.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:47:21.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:47:21.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:47:21.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:47:21.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:47:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:47:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.574045 -999.00  +26.80  31.52     17   +0.40 1 1 2 1 1   888    0 27.42 42.99 ----- 31.5 31.5 297.2 40.6 31.0 -24.9 30.9 -23.6 31.2 -24.5 31.6 -24.0
2025-11-12T15:47:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:47:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:47:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.574045
2025-11-12T15:47:21.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:47:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:47:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:47:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:47:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:47:21.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:46:47', tmtdew=31.82, humidity=11.77, cloud=0.0, wind=30.86, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:46:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:47:21.652 [DEBUG] [Thread-18428] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:47:21.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:47:21.740 [DEBUG] [Thread-18431] [transport.py] [_log()] starting thread (client mode): 0x173e9ff0
2025-11-12T15:47:21.740 [DEBUG] [Thread-18431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:47:21.759 [DEBUG] [Thread-18431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:47:21.759 [INFO] [Thread-18431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:47:21.766 [DEBUG] [Thread-18431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] client lang: <none>
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] server lang: <none>
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] kex follows: False
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] Compression: none
2025-11-12T15:47:21.767 [DEBUG] [Thread-18431] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:47:21.827 [DEBUG] [Thread-18431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:47:21.827 [DEBUG] [Thread-18431] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:47:21.827 [DEBUG] [Thread-18431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:47:21.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:47:21.827 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:47:21.887 [DEBUG] [Thread-18431] [transport.py] [_log()] userauth is OK
2025-11-12T15:47:21.887 [DEBUG] [Thread-18431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:47:21.887 [DEBUG] [Thread-18431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:47:21.887 [DEBUG] [Thread-18431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:47:21.887 [DEBUG] [Thread-18431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:47:21.902 [INFO] [Thread-18431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:47:21.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:47:21.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:47:22.151 [DEBUG] [Thread-18433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:47:22.763 [DEBUG] [Thread-18431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:47:22.763 [DEBUG] [Thread-18431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:47:22.811 [DEBUG] [Thread-18431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:47:22.811 [DEBUG] [Thread-18431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:47:22.820 [DEBUG] [Thread-18431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:47:22.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:47:22.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:47:22.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-11-12T15:47:22.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:47:22.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:47:22.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:47:22.856 [DEBUG] [Thread-18431] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:47:37.193 [DEBUG] [Thread-18434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:47:39.129 [DEBUG] [Thread-18435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:47:39.155 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:47:39.157 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:47:52.226 [DEBUG] [Thread-18436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:47:52.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:47:52.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:47:52.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-11-12T15:47:53.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 47, 19), 31.82, 11.77, 0.0, 31.81, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:47:53.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:47:19
2025-11-12T15:47:53.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:47:53.858 [DEBUG] [Thread-18437] [transport.py] [_log()] starting thread (client mode): 0x173e8190
2025-11-12T15:47:53.858 [DEBUG] [Thread-18437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:47:53.877 [DEBUG] [Thread-18437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:47:53.877 [INFO] [Thread-18437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:47:53.880 [DEBUG] [Thread-18437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:47:53.880 [DEBUG] [Thread-18437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:47:53.880 [DEBUG] [Thread-18437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:47:53.880 [DEBUG] [Thread-18437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:47:53.880 [DEBUG] [Thread-18437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:47:53.880 [DEBUG] [Thread-18437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:47:53.880 [DEBUG] [Thread-18437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:47:53.880 [DEBUG] [Thread-18437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] client lang: <none>
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] server lang: <none>
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] kex follows: False
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] Compression: none
2025-11-12T15:47:53.881 [DEBUG] [Thread-18437] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:47:53.894 [DEBUG] [Thread-18437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:47:53.894 [DEBUG] [Thread-18437] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:47:53.895 [DEBUG] [Thread-18437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:47:53.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:47:53.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:47:53.895 [DEBUG] [Thread-18437] [transport.py] [_log()] userauth is OK
2025-11-12T15:47:53.895 [DEBUG] [Thread-18437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:47:53.896 [DEBUG] [Thread-18437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:47:53.896 [DEBUG] [Thread-18437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:47:53.896 [DEBUG] [Thread-18437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:47:53.912 [INFO] [Thread-18437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:47:53.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:47:54.550 [DEBUG] [Thread-18437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:47:54.550 [DEBUG] [Thread-18437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:47:54.550 [DEBUG] [Thread-18437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:47:54.591 [DEBUG] [Thread-18437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:47:54.591 [DEBUG] [Thread-18437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:47:54.594 [DEBUG] [Thread-18437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:47:54.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:47:54.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:47:54.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:47:54.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:47:54.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:47:54.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:47:54.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:47:54.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:47:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:47:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.574393 -999.00  +26.40  32.01     18   +0.10 1 1 2 1 1   888    0 27.66 39.25 ----- 32.0 32.0 301.4 39.6 31.0 -26.8 30.9 -24.5 30.9 -25.1 31.5 -24.5
2025-11-12T15:47:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:47:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:47:54.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.574393
2025-11-12T15:47:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:47:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:47:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:47:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:47:54.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:47:54.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:47:19', tmtdew=31.82, humidity=11.77, cloud=0.0, wind=31.81, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:47:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:47:54.620 [DEBUG] [Thread-18437] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:47:54.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:47:54.716 [DEBUG] [Thread-18440] [transport.py] [_log()] starting thread (client mode): 0x173473d0
2025-11-12T15:47:54.716 [DEBUG] [Thread-18440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:47:54.731 [DEBUG] [Thread-18440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:47:54.731 [INFO] [Thread-18440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:47:54.738 [DEBUG] [Thread-18440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:47:54.738 [DEBUG] [Thread-18440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:47:54.738 [DEBUG] [Thread-18440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] client lang: <none>
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] server lang: <none>
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] kex follows: False
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] Compression: none
2025-11-12T15:47:54.739 [DEBUG] [Thread-18440] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:47:54.796 [DEBUG] [Thread-18440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:47:54.797 [DEBUG] [Thread-18440] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:47:54.797 [DEBUG] [Thread-18440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:47:54.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:47:54.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:47:54.852 [DEBUG] [Thread-18440] [transport.py] [_log()] userauth is OK
2025-11-12T15:47:54.853 [DEBUG] [Thread-18440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:47:54.853 [DEBUG] [Thread-18440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:47:54.853 [DEBUG] [Thread-18440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:47:54.853 [DEBUG] [Thread-18440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:47:54.872 [INFO] [Thread-18440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:47: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-11-12T15:47:54.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:47:55.713 [DEBUG] [Thread-18440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:47:55.713 [DEBUG] [Thread-18440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:47:55.761 [DEBUG] [Thread-18440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:47:55.761 [DEBUG] [Thread-18440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:47:55.770 [DEBUG] [Thread-18440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:47:55.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:47:55.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:47:55.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-11-12T15:47:55.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:47:55.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:47:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:47:55.806 [DEBUG] [Thread-18440] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:48:07.262 [DEBUG] [Thread-18442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:48:22.314 [DEBUG] [Thread-18443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:48:25.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:48:25.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:48:25.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-11-12T15:48:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 47, 51), 31.84, 11.79, 0.0, 33.74, 27.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:48:26.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:47:51
2025-11-12T15:48:26.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:48:26.809 [DEBUG] [Thread-18444] [transport.py] [_log()] starting thread (client mode): 0x149824a0
2025-11-12T15:48:26.810 [DEBUG] [Thread-18444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:48:26.829 [DEBUG] [Thread-18444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:48:26.829 [INFO] [Thread-18444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] client lang: <none>
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] server lang: <none>
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] kex follows: False
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:48:26.832 [DEBUG] [Thread-18444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:48:26.833 [DEBUG] [Thread-18444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:48:26.833 [DEBUG] [Thread-18444] [transport.py] [_log()] Compression: none
2025-11-12T15:48:26.833 [DEBUG] [Thread-18444] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:48:26.848 [DEBUG] [Thread-18444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:48:26.848 [DEBUG] [Thread-18444] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:48:26.848 [DEBUG] [Thread-18444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:48:26.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:48:26.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:48:26.849 [DEBUG] [Thread-18444] [transport.py] [_log()] userauth is OK
2025-11-12T15:48:26.849 [DEBUG] [Thread-18444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:48:26.849 [DEBUG] [Thread-18444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:48:26.849 [DEBUG] [Thread-18444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:48:26.849 [DEBUG] [Thread-18444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:48:26.858 [INFO] [Thread-18444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:48:26.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:48:27.513 [DEBUG] [Thread-18444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:48:27.513 [DEBUG] [Thread-18444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:48:27.513 [DEBUG] [Thread-18444] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:48:27.554 [DEBUG] [Thread-18444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:48:27.554 [DEBUG] [Thread-18444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:48:27.557 [DEBUG] [Thread-18444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:48:27.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:48:27.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:48:27.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:48:27.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:48:27.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:48:27.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:48:27.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.574740 -999.00  +26.60  32.46     18   +0.40 1 1 2 1 1   888    0 27.85 40.78 ----- 32.5 32.5 313.8 39.6 30.9 -25.9 30.7 -24.2 31.1 -25.8 31.5 -24.5
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.574740
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:48:27.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:47:51', tmtdew=31.84, humidity=11.79, cloud=0.0, wind=33.74, temperature=27.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:47:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:48:27.576 [DEBUG] [Thread-18444] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:48:27.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:48:27.661 [DEBUG] [Thread-18447] [transport.py] [_log()] starting thread (client mode): 0x14961420
2025-11-12T15:48:27.661 [DEBUG] [Thread-18447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:48:27.677 [DEBUG] [Thread-18447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:48:27.677 [INFO] [Thread-18447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] client lang: <none>
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] server lang: <none>
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] kex follows: False
2025-11-12T15:48:27.684 [DEBUG] [Thread-18447] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:48:27.685 [DEBUG] [Thread-18447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:48:27.685 [DEBUG] [Thread-18447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:48:27.685 [DEBUG] [Thread-18447] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:48:27.685 [DEBUG] [Thread-18447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:48:27.685 [DEBUG] [Thread-18447] [transport.py] [_log()] Compression: none
2025-11-12T15:48:27.685 [DEBUG] [Thread-18447] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:48:27.742 [DEBUG] [Thread-18447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:48:27.743 [DEBUG] [Thread-18447] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:48:27.743 [DEBUG] [Thread-18447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:48:27.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:48:27.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:48:27.800 [DEBUG] [Thread-18447] [transport.py] [_log()] userauth is OK
2025-11-12T15:48:27.800 [DEBUG] [Thread-18447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:48:27.800 [DEBUG] [Thread-18447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:48:27.800 [DEBUG] [Thread-18447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:48:27.800 [DEBUG] [Thread-18447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:48:27.814 [INFO] [Thread-18447] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:48:27.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:48:27.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:48:28.660 [DEBUG] [Thread-18447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:48:28.661 [DEBUG] [Thread-18447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:48:28.708 [DEBUG] [Thread-18447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:48:28.708 [DEBUG] [Thread-18447] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:48:28.716 [DEBUG] [Thread-18447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:48:28.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:48:28.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-11-12T15:48:28.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:48:28.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:48:28.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:48:28.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:48:28.749 [DEBUG] [Thread-18447] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:48:37.350 [DEBUG] [Thread-18449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:48:39.180 [DEBUG] [Thread-18450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:48:39.296 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:48:39.297 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:48:52.402 [DEBUG] [Thread-18451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:48:58.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:48:58.772 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:48:58.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-11-12T15:48:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 48, 55), 32.7, 11.34, 0.0, 37.97, 27.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:48:59.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:48:55
2025-11-12T15:48:59.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:48:59.681 [DEBUG] [Thread-18452] [transport.py] [_log()] starting thread (client mode): 0x1739a200
2025-11-12T15:48:59.682 [DEBUG] [Thread-18452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:48:59.701 [DEBUG] [Thread-18452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:48:59.701 [INFO] [Thread-18452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:48:59.704 [DEBUG] [Thread-18452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] client lang: <none>
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] server lang: <none>
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] kex follows: False
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] Compression: none
2025-11-12T15:48:59.705 [DEBUG] [Thread-18452] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:48:59.723 [DEBUG] [Thread-18452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:48:59.724 [DEBUG] [Thread-18452] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:48:59.724 [DEBUG] [Thread-18452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:48:59.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:48:59.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:48:59.726 [DEBUG] [Thread-18452] [transport.py] [_log()] userauth is OK
2025-11-12T15:48:59.726 [DEBUG] [Thread-18452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:48:59.727 [DEBUG] [Thread-18452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:48:59.727 [DEBUG] [Thread-18452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:48:59.727 [DEBUG] [Thread-18452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:48:59.762 [INFO] [Thread-18452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:48:59.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:49:00.420 [DEBUG] [Thread-18452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:49:00.420 [DEBUG] [Thread-18452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:49:00.421 [DEBUG] [Thread-18452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:49:00.461 [DEBUG] [Thread-18452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:49:00.462 [DEBUG] [Thread-18452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:49:00.465 [DEBUG] [Thread-18452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:49:00.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:49:00.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:49:00.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:49:00.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:49:00.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:49:00.487 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:49:00.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:49:00.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:49:00.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:49:00.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.575087 -999.00  +27.20  33.42     17   +0.40 1 1 2 1 1   888    0 28.12 46.33 ----- 33.4 33.4 290.2 39.4 30.9 -24.6 30.8 -23.5 31.2 -25.2 31.6 -24.4
2025-11-12T15:49:00.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:49:00.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:49:00.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.575087
2025-11-12T15:49:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:49:00.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:49:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:49:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:49:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:49:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:48:55', tmtdew=32.7, humidity=11.34, cloud=0.0, wind=37.97, temperature=27.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:48:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:49:00.490 [DEBUG] [Thread-18452] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:49:00.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:49:00.582 [DEBUG] [Thread-18455] [transport.py] [_log()] starting thread (client mode): 0x14980190
2025-11-12T15:49:00.582 [DEBUG] [Thread-18455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:49:00.604 [DEBUG] [Thread-18455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:49:00.605 [INFO] [Thread-18455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] client lang: <none>
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] server lang: <none>
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] kex follows: False
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] Compression: none
2025-11-12T15:49:00.616 [DEBUG] [Thread-18455] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:49:00.672 [DEBUG] [Thread-18455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:49:00.672 [DEBUG] [Thread-18455] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:49:00.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:49:00.673 [DEBUG] [Thread-18455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:49:00.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:49:00.729 [DEBUG] [Thread-18455] [transport.py] [_log()] userauth is OK
2025-11-12T15:49:00.729 [DEBUG] [Thread-18455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:49:00.729 [DEBUG] [Thread-18455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:49:00.729 [DEBUG] [Thread-18455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:49:00.729 [DEBUG] [Thread-18455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:49:00.748 [INFO] [Thread-18455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:49:00.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:49:00.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:49:01.568 [DEBUG] [Thread-18455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:49:01.568 [DEBUG] [Thread-18455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:49:01.616 [DEBUG] [Thread-18455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:49:01.616 [DEBUG] [Thread-18455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:49:01.625 [DEBUG] [Thread-18455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:49:01.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:49:01.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-11-12T15:49:01.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:49:01.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:49:01.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:49:01.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:49:01.661 [DEBUG] [Thread-18455] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:49:07.435 [DEBUG] [Thread-18457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:49:22.487 [DEBUG] [Thread-18458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:49:31.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:49:31.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:49:31.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-11-12T15:49:32.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 49, 27), 32.68, 11.36, 0.0, 35.29, 27.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:49:32.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:49:27
2025-11-12T15:49:32.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:49:32.595 [DEBUG] [Thread-18459] [transport.py] [_log()] starting thread (client mode): 0x149abd60
2025-11-12T15:49:32.595 [DEBUG] [Thread-18459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:49:32.617 [DEBUG] [Thread-18459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:49:32.617 [INFO] [Thread-18459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:49:32.619 [DEBUG] [Thread-18459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:49:32.619 [DEBUG] [Thread-18459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:49:32.619 [DEBUG] [Thread-18459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:49:32.619 [DEBUG] [Thread-18459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:49:32.619 [DEBUG] [Thread-18459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:49:32.619 [DEBUG] [Thread-18459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:49:32.619 [DEBUG] [Thread-18459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] client lang: <none>
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] server lang: <none>
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] kex follows: False
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] Compression: none
2025-11-12T15:49:32.620 [DEBUG] [Thread-18459] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:49:32.638 [DEBUG] [Thread-18459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:49:32.638 [DEBUG] [Thread-18459] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:49:32.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:49:32.639 [DEBUG] [Thread-18459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:49:32.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:49:32.641 [DEBUG] [Thread-18459] [transport.py] [_log()] userauth is OK
2025-11-12T15:49:32.641 [DEBUG] [Thread-18459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:49:32.641 [DEBUG] [Thread-18459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:49:32.641 [DEBUG] [Thread-18459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:49:32.641 [DEBUG] [Thread-18459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:49:32.663 [INFO] [Thread-18459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:49:32.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:49:33.327 [DEBUG] [Thread-18459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:49:33.328 [DEBUG] [Thread-18459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:49:33.328 [DEBUG] [Thread-18459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:49:33.368 [DEBUG] [Thread-18459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:49:33.369 [DEBUG] [Thread-18459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:49:33.371 [DEBUG] [Thread-18459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:49:33.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:49:33.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:49:33.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:49:33.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:49:33.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:49:33.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:49:33.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:49:33.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:49:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:49:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.575434 -999.00  +27.20  39.20     17   +0.30 1 1 2 1 1   888    0 28.48 52.01 ----- 39.2 39.2 277.6 43.7 31.0 -24.8 30.8 -23.7 30.9 -29.1 31.5 -26.2
2025-11-12T15:49:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:49:33.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:49:33.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.575434
2025-11-12T15:49:33.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:49:33.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:49:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:49:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:49:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:49:33.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:49:27', tmtdew=32.68, humidity=11.36, cloud=0.0, wind=35.29, temperature=27.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:48:37.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:49:33.399 [DEBUG] [Thread-18459] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:49:33.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:49:33.496 [DEBUG] [Thread-18462] [transport.py] [_log()] starting thread (client mode): 0x173e8220
2025-11-12T15:49:33.496 [DEBUG] [Thread-18462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:49:33.510 [DEBUG] [Thread-18462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:49:33.510 [INFO] [Thread-18462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:49:33.518 [DEBUG] [Thread-18462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:49:33.518 [DEBUG] [Thread-18462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:49:33.518 [DEBUG] [Thread-18462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:49:33.518 [DEBUG] [Thread-18462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:49:33.519 [DEBUG] [Thread-18462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:49:33.519 [DEBUG] [Thread-18462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:49:33.519 [DEBUG] [Thread-18462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:49:33.519 [DEBUG] [Thread-18462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:49:33.519 [DEBUG] [Thread-18462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:49:33.519 [DEBUG] [Thread-18462] [transport.py] [_log()] client lang: <none>
2025-11-12T15:49:33.519 [DEBUG] [Thread-18462] [transport.py] [_log()] server lang: <none>
2025-11-12T15:49:33.519 [DEBUG] [Thread-18462] [transport.py] [_log()] kex follows: False
2025-11-12T15:49:33.520 [DEBUG] [Thread-18462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:49:33.520 [DEBUG] [Thread-18462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:49:33.520 [DEBUG] [Thread-18462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:49:33.520 [DEBUG] [Thread-18462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:49:33.520 [DEBUG] [Thread-18462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:49:33.520 [DEBUG] [Thread-18462] [transport.py] [_log()] Compression: none
2025-11-12T15:49:33.520 [DEBUG] [Thread-18462] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:49:33.577 [DEBUG] [Thread-18462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:49:33.577 [DEBUG] [Thread-18462] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:49:33.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:49:33.579 [DEBUG] [Thread-18462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:49:33.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:49:33.633 [DEBUG] [Thread-18462] [transport.py] [_log()] userauth is OK
2025-11-12T15:49:33.633 [DEBUG] [Thread-18462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:49:33.633 [DEBUG] [Thread-18462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:49:33.633 [DEBUG] [Thread-18462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:49:33.634 [DEBUG] [Thread-18462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:49:33.653 [INFO] [Thread-18462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:49:33.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:49:33.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:49:34.474 [DEBUG] [Thread-18462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:49:34.475 [DEBUG] [Thread-18462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:49:34.523 [DEBUG] [Thread-18462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:49:34.523 [DEBUG] [Thread-18462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:49:34.532 [DEBUG] [Thread-18462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:49:34.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:49:34.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-11-12T15:49:34.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:49:34.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:49:34.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:49:34.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:49:34.569 [DEBUG] [Thread-18462] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:49:37.523 [DEBUG] [Thread-18464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:49:39.216 [DEBUG] [Thread-18465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:49:39.438 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:49:39.440 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:49:52.577 [DEBUG] [Thread-18466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:50:04.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:50:04.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:50:04.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-11-12T15:50:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 49, 59), 32.61, 11.51, 0.0, 39.31, 27.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:50:05.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:49:59
2025-11-12T15:50:05.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:50:05.505 [DEBUG] [Thread-18467] [transport.py] [_log()] starting thread (client mode): 0x149abb80
2025-11-12T15:50:05.505 [DEBUG] [Thread-18467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:50:05.527 [DEBUG] [Thread-18467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:50:05.527 [INFO] [Thread-18467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:50:05.530 [DEBUG] [Thread-18467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] client lang: <none>
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] server lang: <none>
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] kex follows: False
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] Compression: none
2025-11-12T15:50:05.531 [DEBUG] [Thread-18467] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:50:05.551 [DEBUG] [Thread-18467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:50:05.552 [DEBUG] [Thread-18467] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:50:05.552 [DEBUG] [Thread-18467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:50:05.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:50:05.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:50:05.555 [DEBUG] [Thread-18467] [transport.py] [_log()] userauth is OK
2025-11-12T15:50:05.555 [DEBUG] [Thread-18467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:50:05.555 [DEBUG] [Thread-18467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:50:05.555 [DEBUG] [Thread-18467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:50:05.555 [DEBUG] [Thread-18467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:50:05.591 [INFO] [Thread-18467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:50:05.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:50:07.363 [DEBUG] [Thread-18467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:50:07.364 [DEBUG] [Thread-18467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:50:07.364 [DEBUG] [Thread-18467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:50:07.405 [DEBUG] [Thread-18467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:50:07.405 [DEBUG] [Thread-18467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:50:07.408 [DEBUG] [Thread-18467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:50:07.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:50:07.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:50:07.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:50:07.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:50:07.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:50:07.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:50:07.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:50:07.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:50:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:50:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.575781 -999.00  +26.70  35.44     17   +0.30 1 1 2 1 1   888    0 28.13 53.69 ----- 35.4 35.4 276.5 44.4 30.7 -27.2 30.7 -24.4 30.7 -25.8 31.4 -24.9
2025-11-12T15:50:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:50:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:50:07.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.575781
2025-11-12T15:50:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:50:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:50:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:50:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:50:07.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:50:07.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:49:59', tmtdew=32.61, humidity=11.51, cloud=0.0, wind=39.31, temperature=27.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:49:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:50:07.435 [DEBUG] [Thread-18467] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:50:07.518 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:50:07.530 [DEBUG] [Thread-18470] [transport.py] [_log()] starting thread (client mode): 0x19ddabf0
2025-11-12T15:50:07.531 [DEBUG] [Thread-18470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:50:07.545 [DEBUG] [Thread-18470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:50:07.545 [INFO] [Thread-18470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] client lang: <none>
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] server lang: <none>
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] kex follows: False
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:50:07.553 [DEBUG] [Thread-18470] [transport.py] [_log()] Compression: none
2025-11-12T15:50:07.554 [DEBUG] [Thread-18470] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:50:07.613 [DEBUG] [Thread-18470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:50:07.614 [DEBUG] [Thread-18470] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:50:07.615 [DEBUG] [Thread-18472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:50:07.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:50:07.616 [DEBUG] [Thread-18470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:50:07.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:50:07.672 [DEBUG] [Thread-18470] [transport.py] [_log()] userauth is OK
2025-11-12T15:50:07.672 [DEBUG] [Thread-18470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:50:07.673 [DEBUG] [Thread-18470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:50:07.673 [DEBUG] [Thread-18470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:50:07.673 [DEBUG] [Thread-18470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:50:07.691 [INFO] [Thread-18470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:50:07.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:50:07.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:50:08.534 [DEBUG] [Thread-18470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:50:08.534 [DEBUG] [Thread-18470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:50:08.585 [DEBUG] [Thread-18470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:50:08.586 [DEBUG] [Thread-18470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:50:08.595 [DEBUG] [Thread-18470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:50:08.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:50:08.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:50:08.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:50:08.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:50:08.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:50:08.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:50:08.645 [DEBUG] [Thread-18470] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:50:22.661 [DEBUG] [Thread-18473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:50:37.692 [DEBUG] [Thread-18474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:50:38.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:50:38.664 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:50: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-11-12T15:50:39.251 [DEBUG] [Thread-18475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:50:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 50, 31), 32.75, 11.41, 0.0, 39.72, 27.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:50:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:50:31
2025-11-12T15:50:39.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:50:39.581 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:50:39.581 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:50:39.586 [DEBUG] [Thread-18476] [transport.py] [_log()] starting thread (client mode): 0x19ddb7c0
2025-11-12T15:50:39.586 [DEBUG] [Thread-18476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:50:39.606 [DEBUG] [Thread-18476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:50:39.607 [INFO] [Thread-18476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:50:39.609 [DEBUG] [Thread-18476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] client lang: <none>
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] server lang: <none>
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] kex follows: False
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] Compression: none
2025-11-12T15:50:39.610 [DEBUG] [Thread-18476] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:50:39.627 [DEBUG] [Thread-18476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:50:39.628 [DEBUG] [Thread-18476] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:50:39.628 [DEBUG] [Thread-18476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:50:39.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:50:39.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:50:39.631 [DEBUG] [Thread-18476] [transport.py] [_log()] userauth is OK
2025-11-12T15:50:39.631 [DEBUG] [Thread-18476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:50:39.631 [DEBUG] [Thread-18476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:50:39.632 [DEBUG] [Thread-18476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:50:39.632 [DEBUG] [Thread-18476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:50:39.656 [INFO] [Thread-18476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:50:39.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:50:40.305 [DEBUG] [Thread-18476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:50:40.305 [DEBUG] [Thread-18476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:50:40.306 [DEBUG] [Thread-18476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:50:40.347 [DEBUG] [Thread-18476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:50:40.347 [DEBUG] [Thread-18476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:50:40.350 [DEBUG] [Thread-18476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:50:40.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:50:40.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:50:40.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:50:40.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:50:40.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:50:40.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:50:40.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:50:40.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:50:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:50:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.576129 -999.00  +27.00  36.66     17   +0.10 1 1 2 1 1   888    0 28.28 50.21 ----- 36.7 36.7 290.8 44.5 30.7 -25.4 30.7 -23.3 30.9 -22.8 31.4 -24.2
2025-11-12T15:50:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:50:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:50:40.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.576129
2025-11-12T15:50:40.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:50:40.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:50:40.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:50:40.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:50:40.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:50:40.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:50:31', tmtdew=32.75, humidity=11.41, cloud=0.0, wind=39.72, temperature=27.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:49:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:50:40.377 [DEBUG] [Thread-18476] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:50:40.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:50:40.474 [DEBUG] [Thread-18479] [transport.py] [_log()] starting thread (client mode): 0x173f8a60
2025-11-12T15:50:40.474 [DEBUG] [Thread-18479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:50:40.488 [DEBUG] [Thread-18479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:50:40.488 [INFO] [Thread-18479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] client lang: <none>
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] server lang: <none>
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] kex follows: False
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:50:40.496 [DEBUG] [Thread-18479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:50:40.497 [DEBUG] [Thread-18479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:50:40.497 [DEBUG] [Thread-18479] [transport.py] [_log()] Compression: none
2025-11-12T15:50:40.497 [DEBUG] [Thread-18479] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:50:40.555 [DEBUG] [Thread-18479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:50:40.556 [DEBUG] [Thread-18479] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:50:40.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:50:40.557 [DEBUG] [Thread-18479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:50:40.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:50:40.612 [DEBUG] [Thread-18479] [transport.py] [_log()] userauth is OK
2025-11-12T15:50:40.613 [DEBUG] [Thread-18479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:50:40.613 [DEBUG] [Thread-18479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:50:40.613 [DEBUG] [Thread-18479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:50:40.613 [DEBUG] [Thread-18479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:50:40.631 [INFO] [Thread-18479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:50:40.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:50:40.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:50:41.486 [DEBUG] [Thread-18479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:50:41.487 [DEBUG] [Thread-18479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:50:41.534 [DEBUG] [Thread-18479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:50:41.534 [DEBUG] [Thread-18479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:50:41.543 [DEBUG] [Thread-18479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:50:41.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:50:41.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-11-12T15:50:41.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-11-12T15:50:41.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:50:41.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:50:41.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:50:41.577 [DEBUG] [Thread-18479] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:50:52.726 [DEBUG] [Thread-18481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:51:07.776 [DEBUG] [Thread-18482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:51:11.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:51:11.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:51:11.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:51:12.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 51, 3), 32.73, 11.43, 0.0, 38.53, 27.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:51:12.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:51:03
2025-11-12T15:51:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:51:12.506 [DEBUG] [Thread-18483] [transport.py] [_log()] starting thread (client mode): 0x173ea470
2025-11-12T15:51:12.506 [DEBUG] [Thread-18483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:51:12.526 [DEBUG] [Thread-18483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:51:12.526 [INFO] [Thread-18483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:51:12.529 [DEBUG] [Thread-18483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] client lang: <none>
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] server lang: <none>
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] kex follows: False
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] Compression: none
2025-11-12T15:51:12.530 [DEBUG] [Thread-18483] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:51:12.547 [DEBUG] [Thread-18483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:51:12.548 [DEBUG] [Thread-18483] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:51:12.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:51:12.548 [DEBUG] [Thread-18483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:51:12.549 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:51:12.551 [DEBUG] [Thread-18483] [transport.py] [_log()] userauth is OK
2025-11-12T15:51:12.551 [DEBUG] [Thread-18483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:51:12.551 [DEBUG] [Thread-18483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:51:12.551 [DEBUG] [Thread-18483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:51:12.551 [DEBUG] [Thread-18483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:51:12.569 [INFO] [Thread-18483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:51:12.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:51:13.211 [DEBUG] [Thread-18483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:51:13.212 [DEBUG] [Thread-18483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:51:13.212 [DEBUG] [Thread-18483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:51:13.253 [DEBUG] [Thread-18483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:51:13.253 [DEBUG] [Thread-18483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:51:13.256 [DEBUG] [Thread-18483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:51:13.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:51:13.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:51:13.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:51:13.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:51:13.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:51:13.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:51:13.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:51:13.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:51:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:51:13.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.576823 -999.00  +26.60  36.76     17   +0.10 1 1 2 1 1   888    0 27.87 42.16 ----- 36.8 36.8 275.4 47.6 30.5 -26.8 30.5 -24.4 30.1 -29.2 31.0 -26.2
2025-11-12T15:51:13.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:51:13.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:51:13.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.576823
2025-11-12T15:51:13.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:51:13.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:51:13.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:51:13.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:51:13.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:51:13.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:51:03', tmtdew=32.73, humidity=11.43, cloud=0.0, wind=38.53, temperature=27.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:50:37.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:51:13.279 [DEBUG] [Thread-18483] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:51:13.357 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:51:13.370 [DEBUG] [Thread-18486] [transport.py] [_log()] starting thread (client mode): 0x173e81f0
2025-11-12T15:51:13.370 [DEBUG] [Thread-18486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:51:13.388 [DEBUG] [Thread-18486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:51:13.388 [INFO] [Thread-18486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:51:13.395 [DEBUG] [Thread-18486] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] client lang: <none>
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] server lang: <none>
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] kex follows: False
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:51:13.396 [DEBUG] [Thread-18486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:51:13.397 [DEBUG] [Thread-18486] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:51:13.397 [DEBUG] [Thread-18486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:51:13.397 [DEBUG] [Thread-18486] [transport.py] [_log()] Compression: none
2025-11-12T15:51:13.397 [DEBUG] [Thread-18486] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:51:13.456 [DEBUG] [Thread-18486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:51:13.457 [DEBUG] [Thread-18486] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:51:13.458 [DEBUG] [Thread-18486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:51:13.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:51:13.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:51:13.512 [DEBUG] [Thread-18486] [transport.py] [_log()] userauth is OK
2025-11-12T15:51:13.513 [DEBUG] [Thread-18486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:51:13.513 [DEBUG] [Thread-18486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:51:13.513 [DEBUG] [Thread-18486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:51:13.513 [DEBUG] [Thread-18486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:51:13.531 [INFO] [Thread-18486] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:51:13.532 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:51:13.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:51:14.340 [DEBUG] [Thread-18486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:51:14.341 [DEBUG] [Thread-18486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:51:14.389 [DEBUG] [Thread-18486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:51:14.389 [DEBUG] [Thread-18486] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:51:14.398 [DEBUG] [Thread-18486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:51:14.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:51:14.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-11-12T15:51:14.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-11-12T15:51:14.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:51:14.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:51:14.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:51:14.435 [DEBUG] [Thread-18486] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:51:22.817 [DEBUG] [Thread-18488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:51:37.869 [DEBUG] [Thread-18489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:51:39.294 [DEBUG] [Thread-18490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:51:39.721 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:51:39.721 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:51:44.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:51:44.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:51:44.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-11-12T15:51:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 51, 35), 31.86, 12.03, 0.0, 34.32, 27.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:51:45.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:51:35
2025-11-12T15:51:45.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:51:45.347 [DEBUG] [Thread-18491] [transport.py] [_log()] starting thread (client mode): 0x14983bb0
2025-11-12T15:51:45.347 [DEBUG] [Thread-18491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:51:45.368 [DEBUG] [Thread-18491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:51:45.368 [INFO] [Thread-18491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:51:45.371 [DEBUG] [Thread-18491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:51:45.371 [DEBUG] [Thread-18491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:51:45.371 [DEBUG] [Thread-18491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:51:45.371 [DEBUG] [Thread-18491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:51:45.371 [DEBUG] [Thread-18491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:51:45.371 [DEBUG] [Thread-18491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] client lang: <none>
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] server lang: <none>
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] kex follows: False
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] Compression: none
2025-11-12T15:51:45.372 [DEBUG] [Thread-18491] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:51:45.389 [DEBUG] [Thread-18491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:51:45.390 [DEBUG] [Thread-18491] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:51:45.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:51:45.391 [DEBUG] [Thread-18491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:51:45.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:51:45.393 [DEBUG] [Thread-18491] [transport.py] [_log()] userauth is OK
2025-11-12T15:51:45.393 [DEBUG] [Thread-18491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:51:45.393 [DEBUG] [Thread-18491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:51:45.393 [DEBUG] [Thread-18491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:51:45.393 [DEBUG] [Thread-18491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:51:45.426 [INFO] [Thread-18491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:51:45.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:51:46.076 [DEBUG] [Thread-18491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:51:46.076 [DEBUG] [Thread-18491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:51:46.077 [DEBUG] [Thread-18491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:51:46.118 [DEBUG] [Thread-18491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:51:46.118 [DEBUG] [Thread-18491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:51:46.121 [DEBUG] [Thread-18491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:51:46.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:51:46.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:51:46.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:51:46.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:51:46.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:51:46.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:51:46.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:51:46.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:51:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:51:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.577170 -999.00  +26.40  29.88     18   +0.20 1 1 1 1 1   888    0 27.67 33.30 ----- 29.9 29.9 278.9 39.3 30.3 -27.2 30.3 -24.0 30.4 -23.8 30.9 -26.4
2025-11-12T15:51:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:51:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:51:46.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.577170
2025-11-12T15:51:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:51:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:51:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:51:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:51:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:51:46.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:51:35', tmtdew=31.86, humidity=12.03, cloud=0.0, wind=34.32, temperature=27.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:51:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:51:46.149 [DEBUG] [Thread-18491] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:51: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-11-12T15:51:46.249 [DEBUG] [Thread-18494] [transport.py] [_log()] starting thread (client mode): 0x14981000
2025-11-12T15:51:46.249 [DEBUG] [Thread-18494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:51:46.269 [DEBUG] [Thread-18494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:51:46.270 [INFO] [Thread-18494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:51:46.282 [DEBUG] [Thread-18494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:51:46.283 [DEBUG] [Thread-18494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:51:46.283 [DEBUG] [Thread-18494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:51:46.283 [DEBUG] [Thread-18494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:51:46.283 [DEBUG] [Thread-18494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:51:46.283 [DEBUG] [Thread-18494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:51:46.283 [DEBUG] [Thread-18494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:51:46.283 [DEBUG] [Thread-18494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:51:46.283 [DEBUG] [Thread-18494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] client lang: <none>
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] server lang: <none>
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] kex follows: False
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] Compression: none
2025-11-12T15:51:46.284 [DEBUG] [Thread-18494] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:51:46.337 [DEBUG] [Thread-18494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:51:46.338 [DEBUG] [Thread-18494] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:51:46.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:51:46.339 [DEBUG] [Thread-18494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:51:46.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:51:46.396 [DEBUG] [Thread-18494] [transport.py] [_log()] userauth is OK
2025-11-12T15:51:46.397 [DEBUG] [Thread-18494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:51:46.397 [DEBUG] [Thread-18494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:51:46.397 [DEBUG] [Thread-18494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:51:46.397 [DEBUG] [Thread-18494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:51:46.415 [INFO] [Thread-18494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:51:46.416 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:51:46.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:51:47.261 [DEBUG] [Thread-18494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:51:47.262 [DEBUG] [Thread-18494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:51:47.310 [DEBUG] [Thread-18494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:51:47.310 [DEBUG] [Thread-18494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:51:47.319 [DEBUG] [Thread-18494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:51:47.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:51:47.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:51:47.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:51:47.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:51:47.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:51:47.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:51:47.356 [DEBUG] [Thread-18494] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:51:52.900 [DEBUG] [Thread-18496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:52:07.958 [DEBUG] [Thread-18497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:52:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:52:17.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:52:17.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:52:18.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 52, 7), 31.79, 12.08, 0.0, 34.23, 27.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:52:18.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:52:07
2025-11-12T15:52:18.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:52:18.327 [DEBUG] [Thread-18498] [transport.py] [_log()] starting thread (client mode): 0x149228c0
2025-11-12T15:52:18.327 [DEBUG] [Thread-18498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:52:18.345 [DEBUG] [Thread-18498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:52:18.345 [INFO] [Thread-18498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:52:18.348 [DEBUG] [Thread-18498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] client lang: <none>
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] server lang: <none>
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] kex follows: False
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] Compression: none
2025-11-12T15:52:18.349 [DEBUG] [Thread-18498] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:52:18.365 [DEBUG] [Thread-18498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:52:18.365 [DEBUG] [Thread-18498] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:52:18.365 [DEBUG] [Thread-18498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:52:18.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:52:18.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:52:18.366 [DEBUG] [Thread-18498] [transport.py] [_log()] userauth is OK
2025-11-12T15:52:18.366 [DEBUG] [Thread-18498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:52:18.367 [DEBUG] [Thread-18498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:52:18.367 [DEBUG] [Thread-18498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:52:18.367 [DEBUG] [Thread-18498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:52:18.380 [INFO] [Thread-18498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:52:18.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:52:19.018 [DEBUG] [Thread-18498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:52:19.018 [DEBUG] [Thread-18498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:52:19.018 [DEBUG] [Thread-18498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:52:19.059 [DEBUG] [Thread-18498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:52:19.059 [DEBUG] [Thread-18498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:52:19.061 [DEBUG] [Thread-18498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:52:19.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:52:19.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:52:19.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:52:19.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:52:19.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:52:19.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:52:19.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:52:19.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:52:19.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:52:19.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.577518 -999.00  +26.40  27.45     18   +0.40 1 1 1 1 1   888    0 27.20 26.46 ----- 27.4 27.4 279.4 36.6 30.3 -27.2 30.2 -24.1 30.1 -23.7 30.9 -24.1
2025-11-12T15:52:19.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:52:19.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:52:19.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.577518
2025-11-12T15:52:19.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:52:19.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:52:19.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:52:19.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:52:19.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:52:19.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:52:07', tmtdew=31.79, humidity=12.08, cloud=0.0, wind=34.23, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:51:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:52:19.080 [DEBUG] [Thread-18498] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:52:19.153 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:52:19.164 [DEBUG] [Thread-18501] [transport.py] [_log()] starting thread (client mode): 0x173ea320
2025-11-12T15:52:19.164 [DEBUG] [Thread-18501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:52:19.179 [DEBUG] [Thread-18501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:52:19.179 [INFO] [Thread-18501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] client lang: <none>
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] server lang: <none>
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] kex follows: False
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] Compression: none
2025-11-12T15:52:19.187 [DEBUG] [Thread-18501] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:52:19.243 [DEBUG] [Thread-18501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:52:19.243 [DEBUG] [Thread-18501] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:52:19.243 [DEBUG] [Thread-18501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:52:19.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:52:19.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:52:19.300 [DEBUG] [Thread-18501] [transport.py] [_log()] userauth is OK
2025-11-12T15:52:19.300 [DEBUG] [Thread-18501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:52:19.300 [DEBUG] [Thread-18501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:52:19.300 [DEBUG] [Thread-18501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:52:19.300 [DEBUG] [Thread-18501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:52:19.314 [INFO] [Thread-18501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:52:19.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:52:19.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:52:20.131 [DEBUG] [Thread-18501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:52:20.132 [DEBUG] [Thread-18501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:52:20.179 [DEBUG] [Thread-18501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:52:20.179 [DEBUG] [Thread-18501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:52:20.187 [DEBUG] [Thread-18501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:52:20.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:52:20.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-11-12T15:52:20.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-11-12T15:52:20.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:52:20.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:52:20.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:52:20.218 [DEBUG] [Thread-18501] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:52:22.991 [DEBUG] [Thread-18503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:52:38.056 [DEBUG] [Thread-18504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:52:39.329 [DEBUG] [Thread-18505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:52:39.861 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:52:39.862 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:52:50.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:52:50.241 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:52:50.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-11-12T15:52:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 52, 39), 32.02, 12.09, 0.0, 33.14, 27.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:52:50.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:52:39
2025-11-12T15:52:51.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:52:51.159 [DEBUG] [Thread-18506] [transport.py] [_log()] starting thread (client mode): 0x149dabc0
2025-11-12T15:52:51.159 [DEBUG] [Thread-18506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:52:51.178 [DEBUG] [Thread-18506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:52:51.178 [INFO] [Thread-18506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] client lang: <none>
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] server lang: <none>
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] kex follows: False
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] Compression: none
2025-11-12T15:52:51.182 [DEBUG] [Thread-18506] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:52:51.198 [DEBUG] [Thread-18506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:52:51.199 [DEBUG] [Thread-18506] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:52:51.199 [DEBUG] [Thread-18506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:52:51.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:52:51.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:52:51.240 [DEBUG] [Thread-18506] [transport.py] [_log()] userauth is OK
2025-11-12T15:52:51.240 [DEBUG] [Thread-18506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:52:51.240 [DEBUG] [Thread-18506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:52:51.241 [DEBUG] [Thread-18506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:52:51.241 [DEBUG] [Thread-18506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:52:51.272 [INFO] [Thread-18506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:52:51.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:52:51.872 [DEBUG] [Thread-18506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:52:51.872 [DEBUG] [Thread-18506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:52:51.873 [DEBUG] [Thread-18506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:52:51.913 [DEBUG] [Thread-18506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:52:51.914 [DEBUG] [Thread-18506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:52:51.917 [DEBUG] [Thread-18506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:52:51.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:52:51.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:52:51.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:52:51.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:52:51.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:52:51.937 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:52:51.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:52:51.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:52:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:52:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.577865 -999.00  +26.60  21.44     18   +0.40 1 1 1 1 1   888    0 27.46 20.27 ----- 21.4 21.4 285.8 37.9 30.3 -25.8 30.2 -24.1 30.4 -22.5 30.9 -23.7
2025-11-12T15:52:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:52:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:52:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.577865
2025-11-12T15:52:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:52:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:52:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:52:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:52:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:52:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:52:39', tmtdew=32.02, humidity=12.09, cloud=0.0, wind=33.14, temperature=27.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:52:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:52:51.940 [DEBUG] [Thread-18506] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:52:52.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:52:52.039 [DEBUG] [Thread-18509] [transport.py] [_log()] starting thread (client mode): 0x19ddabf0
2025-11-12T15:52:52.039 [DEBUG] [Thread-18509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:52:52.054 [DEBUG] [Thread-18509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:52:52.055 [INFO] [Thread-18509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:52:52.062 [DEBUG] [Thread-18509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] client lang: <none>
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] server lang: <none>
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] kex follows: False
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] Compression: none
2025-11-12T15:52:52.063 [DEBUG] [Thread-18509] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:52:52.119 [DEBUG] [Thread-18509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:52:52.120 [DEBUG] [Thread-18509] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:52:52.120 [DEBUG] [Thread-18509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:52:52.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:52:52.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:52:52.176 [DEBUG] [Thread-18509] [transport.py] [_log()] userauth is OK
2025-11-12T15:52:52.176 [DEBUG] [Thread-18509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:52:52.176 [DEBUG] [Thread-18509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:52:52.176 [DEBUG] [Thread-18509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:52:52.176 [DEBUG] [Thread-18509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:52:52.197 [INFO] [Thread-18509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:52:52.197 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:52:52.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:52:53.028 [DEBUG] [Thread-18509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:52:53.028 [DEBUG] [Thread-18509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:52:53.075 [DEBUG] [Thread-18509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:52:53.075 [DEBUG] [Thread-18509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:52:53.084 [DEBUG] [Thread-18509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:52:53.089 [DEBUG] [Thread-18511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:52:53.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:52:53.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:52:53.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-11-12T15:52:53.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:52:53.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:52:53.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:52:53.117 [DEBUG] [Thread-18509] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:53:08.136 [DEBUG] [Thread-18512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:53:23.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:53:23.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:53:23.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-11-12T15:53:23.172 [DEBUG] [Thread-18513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:53:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 53, 11), 31.96, 12.14, 0.0, 29.77, 27.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:53:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:53:11
2025-11-12T15:53:23.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:53:23.998 [DEBUG] [Thread-18514] [transport.py] [_log()] starting thread (client mode): 0x19dda020
2025-11-12T15:53:23.998 [DEBUG] [Thread-18514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:53:24.019 [DEBUG] [Thread-18514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:53:24.020 [INFO] [Thread-18514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] client lang: <none>
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] server lang: <none>
2025-11-12T15:53:24.021 [DEBUG] [Thread-18514] [transport.py] [_log()] kex follows: False
2025-11-12T15:53:24.022 [DEBUG] [Thread-18514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:53:24.022 [DEBUG] [Thread-18514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:53:24.022 [DEBUG] [Thread-18514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:53:24.022 [DEBUG] [Thread-18514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:53:24.022 [DEBUG] [Thread-18514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:53:24.022 [DEBUG] [Thread-18514] [transport.py] [_log()] Compression: none
2025-11-12T15:53:24.022 [DEBUG] [Thread-18514] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:53:24.033 [DEBUG] [Thread-18514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:53:24.034 [DEBUG] [Thread-18514] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:53:24.034 [DEBUG] [Thread-18514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:53:24.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:53:24.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:53:24.036 [DEBUG] [Thread-18514] [transport.py] [_log()] userauth is OK
2025-11-12T15:53:24.037 [DEBUG] [Thread-18514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:53:24.037 [DEBUG] [Thread-18514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:53:24.037 [DEBUG] [Thread-18514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:53:24.037 [DEBUG] [Thread-18514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:53:24.073 [INFO] [Thread-18514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:53:24.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:53:24.705 [DEBUG] [Thread-18514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:53:24.705 [DEBUG] [Thread-18514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:53:24.706 [DEBUG] [Thread-18514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:53:24.746 [DEBUG] [Thread-18514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:53:24.747 [DEBUG] [Thread-18514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:53:24.750 [DEBUG] [Thread-18514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:53:24.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:53:24.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:53:24.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:53:24.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:53:24.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:53:24.774 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:53:24.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:53:24.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:53:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:53:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.578212 -999.00  +26.40  20.33     18   +0.30 1 1 1 1 1   888    0 27.15 17.32 ----- 20.3 20.3 279.7 35.1 30.4 -25.5 30.2 -24.4 30.1 -23.8 30.7 -24.2
2025-11-12T15:53:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:53:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:53:24.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.578212
2025-11-12T15:53:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:53:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:53:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:53:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:53:24.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:53:24.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:53:11', tmtdew=31.96, humidity=12.14, cloud=0.0, wind=29.77, temperature=27.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:52:37.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:53:24.777 [DEBUG] [Thread-18514] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:53:24.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:53:24.874 [DEBUG] [Thread-18517] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T15:53:24.874 [DEBUG] [Thread-18517] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:53:24.888 [DEBUG] [Thread-18517] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:53:24.889 [INFO] [Thread-18517] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:53:24.896 [DEBUG] [Thread-18517] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] client lang: <none>
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] server lang: <none>
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] kex follows: False
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] Compression: none
2025-11-12T15:53:24.897 [DEBUG] [Thread-18517] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:53:24.957 [DEBUG] [Thread-18517] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:53:24.957 [DEBUG] [Thread-18517] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:53:24.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:53:24.958 [DEBUG] [Thread-18517] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:53:24.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:53:25.013 [DEBUG] [Thread-18517] [transport.py] [_log()] userauth is OK
2025-11-12T15:53:25.013 [DEBUG] [Thread-18517] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:53:25.013 [DEBUG] [Thread-18517] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:53:25.013 [DEBUG] [Thread-18517] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:53:25.013 [DEBUG] [Thread-18517] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:53:25.033 [INFO] [Thread-18517] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:53:25.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:53:25.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:53:25.838 [DEBUG] [Thread-18517] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:53:25.839 [DEBUG] [Thread-18517] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:53:25.887 [DEBUG] [Thread-18517] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:53:25.888 [DEBUG] [Thread-18517] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:53:25.897 [DEBUG] [Thread-18517] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:53:25.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:53:25.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-11-12T15:53:25.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:53:25.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:53:25.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:53:25.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:53:25.933 [DEBUG] [Thread-18517] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:53:38.203 [DEBUG] [Thread-18519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:53:39.366 [DEBUG] [Thread-18520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:53:40.005 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:53:40.006 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:53:53.257 [DEBUG] [Thread-18521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:53:55.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:53:55.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:53:55.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-11-12T15:53:56.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 53, 43), 31.41, 12.39, 0.0, 27.75, 27.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:53:56.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:53:43
2025-11-12T15:53:56.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:53:56.865 [DEBUG] [Thread-18522] [transport.py] [_log()] starting thread (client mode): 0x149dae60
2025-11-12T15:53:56.865 [DEBUG] [Thread-18522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:53:56.885 [DEBUG] [Thread-18522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:53:56.885 [INFO] [Thread-18522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] client lang: <none>
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] server lang: <none>
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] kex follows: False
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] Compression: none
2025-11-12T15:53:56.888 [DEBUG] [Thread-18522] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:53:56.905 [DEBUG] [Thread-18522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:53:56.906 [DEBUG] [Thread-18522] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:53:56.906 [DEBUG] [Thread-18522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:53:56.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:53:56.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:53:56.908 [DEBUG] [Thread-18522] [transport.py] [_log()] userauth is OK
2025-11-12T15:53:56.908 [DEBUG] [Thread-18522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:53:56.909 [DEBUG] [Thread-18522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:53:56.909 [DEBUG] [Thread-18522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:53:56.909 [DEBUG] [Thread-18522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:53:56.934 [INFO] [Thread-18522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:53:56.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:53:57.562 [DEBUG] [Thread-18522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:53:57.562 [DEBUG] [Thread-18522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:53:57.563 [DEBUG] [Thread-18522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:53:57.604 [DEBUG] [Thread-18522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:53:57.604 [DEBUG] [Thread-18522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:53:57.607 [DEBUG] [Thread-18522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:53:57.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:53:57.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:53:57.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:53:57.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:53:57.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:53:57.631 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:53:57.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:53:57.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:53:57.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:53:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.578559 -999.00  +26.10  23.94     18   +0.40 1 1 1 1 1   888    0 26.49 12.66 ----- 23.9 23.9 279.2 30.7 30.2 -26.7 30.1 -24.3 29.8 -25.7 30.6 -24.4
2025-11-12T15:53:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:53:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:53:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.578559
2025-11-12T15:53:57.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:53:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:53:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:53:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:53:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:53:57.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:53:43', tmtdew=31.41, humidity=12.39, cloud=0.0, wind=27.75, temperature=27.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:53:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:53:57.634 [DEBUG] [Thread-18522] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:53:57.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:53:57.733 [DEBUG] [Thread-18525] [transport.py] [_log()] starting thread (client mode): 0x149611e0
2025-11-12T15:53:57.733 [DEBUG] [Thread-18525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:53:57.748 [DEBUG] [Thread-18525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:53:57.748 [INFO] [Thread-18525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:53:57.755 [DEBUG] [Thread-18525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:53:57.755 [DEBUG] [Thread-18525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:53:57.755 [DEBUG] [Thread-18525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] client lang: <none>
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] server lang: <none>
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] kex follows: False
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] Compression: none
2025-11-12T15:53:57.756 [DEBUG] [Thread-18525] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:53:57.811 [DEBUG] [Thread-18525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:53:57.812 [DEBUG] [Thread-18525] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:53:57.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:53:57.813 [DEBUG] [Thread-18525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:53:57.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:53:57.869 [DEBUG] [Thread-18525] [transport.py] [_log()] userauth is OK
2025-11-12T15:53:57.869 [DEBUG] [Thread-18525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:53:57.869 [DEBUG] [Thread-18525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:53:57.869 [DEBUG] [Thread-18525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:53:57.869 [DEBUG] [Thread-18525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:53:57.887 [INFO] [Thread-18525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:53:57.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:53:57.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:53:58.695 [DEBUG] [Thread-18525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:53:58.695 [DEBUG] [Thread-18525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:53:58.743 [DEBUG] [Thread-18525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:53:58.744 [DEBUG] [Thread-18525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:53:58.753 [DEBUG] [Thread-18525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:53:58.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:53:58.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-11-12T15:53:58.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-11-12T15:53:58.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:53:58.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:53:58.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:53:58.789 [DEBUG] [Thread-18525] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:54:08.293 [DEBUG] [Thread-18527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:54:23.332 [DEBUG] [Thread-18528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:54:28.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:54:28.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:54:28.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-11-12T15:54:29.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 54, 17), 31.35, 12.42, 0.0, 24.12, 27.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:54:29.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:54:17
2025-11-12T15:54:29.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:54:29.716 [DEBUG] [Thread-18529] [transport.py] [_log()] starting thread (client mode): 0x149da950
2025-11-12T15:54:29.716 [DEBUG] [Thread-18529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:54:29.736 [DEBUG] [Thread-18529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:54:29.736 [INFO] [Thread-18529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:54:29.739 [DEBUG] [Thread-18529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:54:29.739 [DEBUG] [Thread-18529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:54:29.739 [DEBUG] [Thread-18529] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:54:29.739 [DEBUG] [Thread-18529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:54:29.739 [DEBUG] [Thread-18529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] client lang: <none>
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] server lang: <none>
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] kex follows: False
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] Compression: none
2025-11-12T15:54:29.740 [DEBUG] [Thread-18529] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:54:29.757 [DEBUG] [Thread-18529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:54:29.757 [DEBUG] [Thread-18529] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:54:29.757 [DEBUG] [Thread-18529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:54:29.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:54:29.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:54:29.758 [DEBUG] [Thread-18529] [transport.py] [_log()] userauth is OK
2025-11-12T15:54:29.758 [DEBUG] [Thread-18529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:54:29.758 [DEBUG] [Thread-18529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:54:29.758 [DEBUG] [Thread-18529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:54:29.758 [DEBUG] [Thread-18529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:54:29.768 [INFO] [Thread-18529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:54:29.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:54:30.391 [DEBUG] [Thread-18529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:54:30.391 [DEBUG] [Thread-18529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:54:30.391 [DEBUG] [Thread-18529] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:54:30.432 [DEBUG] [Thread-18529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:54:30.432 [DEBUG] [Thread-18529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:54:30.436 [DEBUG] [Thread-18529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:54:30.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:54:30.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:54:30.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:54:30.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:54:30.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:54:30.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:54:30.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:54:30.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:54:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:54:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.578906 -999.00  +26.20  29.37     18   +0.40 1 1 1 1 1   888    0 27.33 8.63 ----- 29.4 29.4 294.2 36.2 30.1 -25.8 30.0 -24.4 30.0 -25.4 30.6 -24.3
2025-11-12T15:54:30.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:54:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:54:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.578906
2025-11-12T15:54:30.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:54:30.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:54:30.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:54:30.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:54:30.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:54:30.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:54:17', tmtdew=31.35, humidity=12.42, cloud=0.0, wind=24.12, temperature=27.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:53:37.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:54:30.463 [DEBUG] [Thread-18529] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:54:30.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:54:30.561 [DEBUG] [Thread-18532] [transport.py] [_log()] starting thread (client mode): 0x149db490
2025-11-12T15:54:30.561 [DEBUG] [Thread-18532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:54:30.576 [DEBUG] [Thread-18532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:54:30.576 [INFO] [Thread-18532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:54:30.583 [DEBUG] [Thread-18532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:54:30.584 [DEBUG] [Thread-18532] [transport.py] [_log()] client lang: <none>
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] server lang: <none>
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] kex follows: False
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] Compression: none
2025-11-12T15:54:30.585 [DEBUG] [Thread-18532] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:54:30.645 [DEBUG] [Thread-18532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:54:30.646 [DEBUG] [Thread-18532] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:54:30.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:54:30.647 [DEBUG] [Thread-18532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:54:30.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:54:30.700 [DEBUG] [Thread-18532] [transport.py] [_log()] userauth is OK
2025-11-12T15:54:30.701 [DEBUG] [Thread-18532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:54:30.701 [DEBUG] [Thread-18532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:54:30.701 [DEBUG] [Thread-18532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:54:30.701 [DEBUG] [Thread-18532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:54:30.720 [INFO] [Thread-18532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:54:30.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:54:30.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:54:31.538 [DEBUG] [Thread-18532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:54:31.538 [DEBUG] [Thread-18532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:54:31.587 [DEBUG] [Thread-18532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:54:31.587 [DEBUG] [Thread-18532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:54:31.596 [DEBUG] [Thread-18532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:54:31.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:54:31.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-11-12T15:54:31.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-11-12T15:54:31.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:54:31.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:54:31.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:54:31.632 [DEBUG] [Thread-18532] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:54:38.370 [DEBUG] [Thread-18534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:54:39.405 [DEBUG] [Thread-18535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:54:40.148 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:54:40.149 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:54:53.419 [DEBUG] [Thread-18536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:55:01.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:55:01.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:55:01.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-11-12T15:55:02.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 54, 49), 32.0, 11.82, 0.0, 23.27, 27.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:55:02.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:54:49
2025-11-12T15:55:02.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:55:02.573 [DEBUG] [Thread-18537] [transport.py] [_log()] starting thread (client mode): 0x19ddb7c0
2025-11-12T15:55:02.573 [DEBUG] [Thread-18537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:55:02.594 [DEBUG] [Thread-18537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:55:02.594 [INFO] [Thread-18537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:55:02.596 [DEBUG] [Thread-18537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:55:02.596 [DEBUG] [Thread-18537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:55:02.596 [DEBUG] [Thread-18537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] client lang: <none>
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] server lang: <none>
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] kex follows: False
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:55:02.597 [DEBUG] [Thread-18537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:55:02.598 [DEBUG] [Thread-18537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:55:02.598 [DEBUG] [Thread-18537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:55:02.598 [DEBUG] [Thread-18537] [transport.py] [_log()] Compression: none
2025-11-12T15:55:02.598 [DEBUG] [Thread-18537] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:55:02.611 [DEBUG] [Thread-18537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:55:02.612 [DEBUG] [Thread-18537] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:55:02.613 [DEBUG] [Thread-18537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:55:02.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:55:02.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:55:02.614 [DEBUG] [Thread-18537] [transport.py] [_log()] userauth is OK
2025-11-12T15:55:02.615 [DEBUG] [Thread-18537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:55:02.615 [DEBUG] [Thread-18537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:55:02.615 [DEBUG] [Thread-18537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:55:02.615 [DEBUG] [Thread-18537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:55:02.633 [INFO] [Thread-18537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:55:02.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:55:03.235 [DEBUG] [Thread-18537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:55:03.235 [DEBUG] [Thread-18537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:55:03.236 [DEBUG] [Thread-18537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:55:03.276 [DEBUG] [Thread-18537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:55:03.276 [DEBUG] [Thread-18537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:55:03.279 [DEBUG] [Thread-18537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:55:03.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:55:03.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:55:03.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:55:03.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:55:03.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:55:03.312 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:55:03.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:55:03.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:55:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:55:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.579254 -999.00  +26.30  19.65     18   +0.40 1 1 1 1 1   888    0 26.84 3.91 ----- 19.6 19.6 297.3 36.4 30.2 -25.1 30.1 -24.1 30.1 -24.9 30.5 -24.2
2025-11-12T15:55:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:55:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:55:03.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.579254
2025-11-12T15:55:03.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:55:03.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:55:03.315 [DEBUG] [Thread-18537] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:55:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:55:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:55:03.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:55:03.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:54:49', tmtdew=32.0, humidity=11.82, cloud=0.0, wind=23.27, temperature=27.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:54:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:55:03.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:55:03.409 [DEBUG] [Thread-18540] [transport.py] [_log()] starting thread (client mode): 0x173eaf20
2025-11-12T15:55:03.410 [DEBUG] [Thread-18540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:55:03.424 [DEBUG] [Thread-18540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:55:03.425 [INFO] [Thread-18540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:55:03.432 [DEBUG] [Thread-18540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:55:03.432 [DEBUG] [Thread-18540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:55:03.432 [DEBUG] [Thread-18540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:55:03.432 [DEBUG] [Thread-18540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:55:03.432 [DEBUG] [Thread-18540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] client lang: <none>
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] server lang: <none>
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] kex follows: False
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:55:03.433 [DEBUG] [Thread-18540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:55:03.434 [DEBUG] [Thread-18540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:55:03.434 [DEBUG] [Thread-18540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:55:03.434 [DEBUG] [Thread-18540] [transport.py] [_log()] Compression: none
2025-11-12T15:55:03.434 [DEBUG] [Thread-18540] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:55:03.491 [DEBUG] [Thread-18540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:55:03.491 [DEBUG] [Thread-18540] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:55:03.491 [DEBUG] [Thread-18540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:55:03.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:55:03.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:55:03.548 [DEBUG] [Thread-18540] [transport.py] [_log()] userauth is OK
2025-11-12T15:55:03.548 [DEBUG] [Thread-18540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:55:03.548 [DEBUG] [Thread-18540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:55:03.548 [DEBUG] [Thread-18540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:55:03.548 [DEBUG] [Thread-18540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:55:03.563 [INFO] [Thread-18540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:55:03.563 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:55:03.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:55:04.400 [DEBUG] [Thread-18540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:55:04.400 [DEBUG] [Thread-18540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:55:04.447 [DEBUG] [Thread-18540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:55:04.448 [DEBUG] [Thread-18540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:55:04.459 [DEBUG] [Thread-18540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:55:04.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:55:04.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')
2025-11-12T15:55:04.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-11-12T15:55:04.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:55:04.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:55:04.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:55:04.508 [DEBUG] [Thread-18540] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:55:08.450 [DEBUG] [Thread-18542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:55:23.501 [DEBUG] [Thread-18543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:55:34.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:55:34.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:55:34.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-11-12T15:55:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 55, 21), 32.0, 11.81, 0.0, 23.15, 27.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:55:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:55:21
2025-11-12T15:55:35.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:55:35.431 [DEBUG] [Thread-18544] [transport.py] [_log()] starting thread (client mode): 0x149601f0
2025-11-12T15:55:35.431 [DEBUG] [Thread-18544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:55:35.452 [DEBUG] [Thread-18544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:55:35.452 [INFO] [Thread-18544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:55:35.455 [DEBUG] [Thread-18544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:55:35.455 [DEBUG] [Thread-18544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:55:35.455 [DEBUG] [Thread-18544] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:55:35.455 [DEBUG] [Thread-18544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:55:35.455 [DEBUG] [Thread-18544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] client lang: <none>
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] server lang: <none>
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] kex follows: False
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] Compression: none
2025-11-12T15:55:35.456 [DEBUG] [Thread-18544] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:55:35.471 [DEBUG] [Thread-18544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:55:35.472 [DEBUG] [Thread-18544] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:55:35.472 [DEBUG] [Thread-18544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:55:35.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:55:35.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:55:35.474 [DEBUG] [Thread-18544] [transport.py] [_log()] userauth is OK
2025-11-12T15:55:35.475 [DEBUG] [Thread-18544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:55:35.475 [DEBUG] [Thread-18544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:55:35.475 [DEBUG] [Thread-18544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:55:35.475 [DEBUG] [Thread-18544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:55:35.494 [INFO] [Thread-18544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:55:35.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:55:36.315 [DEBUG] [Thread-18544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:55:36.315 [DEBUG] [Thread-18544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:55:36.315 [DEBUG] [Thread-18544] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:55:36.357 [DEBUG] [Thread-18544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:55:36.357 [DEBUG] [Thread-18544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:55:36.360 [DEBUG] [Thread-18544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:55:36.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:55:36.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:55:36.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:55:36.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:55:36.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:55:36.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:55:36.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:55:36.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:55:36.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:55:36.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.579601 -999.00  +26.30  21.68     18   +0.30 1 1 1 1 1   888    0 26.95 1.75 ----- 21.7 21.7 281.6 31.4 30.2 -24.7 30.0 -24.7 29.7 -25.0 30.4 -26.0
2025-11-12T15:55:36.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:55:36.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:55:36.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.579601
2025-11-12T15:55:36.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:55:36.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:55:36.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:55:36.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:55:36.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:55:36.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:55:21', tmtdew=32.0, humidity=11.81, cloud=0.0, wind=23.15, temperature=27.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:54:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:55:36.386 [DEBUG] [Thread-18544] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:55:36.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:55:36.482 [DEBUG] [Thread-18547] [transport.py] [_log()] starting thread (client mode): 0x14983c10
2025-11-12T15:55:36.482 [DEBUG] [Thread-18547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:55:36.499 [DEBUG] [Thread-18547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:55:36.499 [INFO] [Thread-18547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] client lang: <none>
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] server lang: <none>
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] kex follows: False
2025-11-12T15:55:36.509 [DEBUG] [Thread-18547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:55:36.510 [DEBUG] [Thread-18547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:55:36.510 [DEBUG] [Thread-18547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:55:36.510 [DEBUG] [Thread-18547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:55:36.510 [DEBUG] [Thread-18547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:55:36.510 [DEBUG] [Thread-18547] [transport.py] [_log()] Compression: none
2025-11-12T15:55:36.510 [DEBUG] [Thread-18547] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:55:36.567 [DEBUG] [Thread-18547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:55:36.568 [DEBUG] [Thread-18547] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:55:36.568 [DEBUG] [Thread-18547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:55:36.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:55:36.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:55:36.625 [DEBUG] [Thread-18547] [transport.py] [_log()] userauth is OK
2025-11-12T15:55:36.625 [DEBUG] [Thread-18547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:55:36.625 [DEBUG] [Thread-18547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:55:36.625 [DEBUG] [Thread-18547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:55:36.625 [DEBUG] [Thread-18547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:55:36.644 [INFO] [Thread-18547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:55:36.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:55:36.645 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:55:37.437 [DEBUG] [Thread-18547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:55:37.438 [DEBUG] [Thread-18547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:55:37.485 [DEBUG] [Thread-18547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:55:37.486 [DEBUG] [Thread-18547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:55:37.495 [DEBUG] [Thread-18547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:55:37.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:55:37.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-11-12T15:55:37.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-11-12T15:55:37.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:55:37.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:55:37.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:55:37.532 [DEBUG] [Thread-18547] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:55:38.535 [DEBUG] [Thread-18549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:55:39.438 [DEBUG] [Thread-18550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:55:40.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:55:40.292 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:55:53.599 [DEBUG] [Thread-18551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:56:07.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:56:07.553 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:56:07.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:56:08.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 55, 53), 31.53, 12.37, 0.0, 23.01, 27.03, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:56:08.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:55:53
2025-11-12T15:56:08.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:56:08.513 [DEBUG] [Thread-18552] [transport.py] [_log()] starting thread (client mode): 0x19dd91e0
2025-11-12T15:56:08.513 [DEBUG] [Thread-18552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:56:08.532 [DEBUG] [Thread-18552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:56:08.533 [INFO] [Thread-18552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] client lang: <none>
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] server lang: <none>
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] kex follows: False
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:56:08.536 [DEBUG] [Thread-18552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:56:08.537 [DEBUG] [Thread-18552] [transport.py] [_log()] Compression: none
2025-11-12T15:56:08.537 [DEBUG] [Thread-18552] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:56:08.553 [DEBUG] [Thread-18552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:56:08.554 [DEBUG] [Thread-18552] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:56:08.554 [DEBUG] [Thread-18552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:56:08.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:56:08.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:56:08.554 [DEBUG] [Thread-18552] [transport.py] [_log()] userauth is OK
2025-11-12T15:56:08.554 [DEBUG] [Thread-18552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:56:08.554 [DEBUG] [Thread-18552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:56:08.554 [DEBUG] [Thread-18552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:56:08.554 [DEBUG] [Thread-18552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:56:08.563 [INFO] [Thread-18552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:56:08.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:56:08.632 [DEBUG] [Thread-18554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:56:09.197 [DEBUG] [Thread-18552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:56:09.197 [DEBUG] [Thread-18552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:56:09.197 [DEBUG] [Thread-18552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:56:09.238 [DEBUG] [Thread-18552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:56:09.238 [DEBUG] [Thread-18552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:56:09.240 [DEBUG] [Thread-18552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:56:09.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:56:09.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:56:09.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:56:09.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:56:09.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:56:09.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:56:09.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:56:09.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:56:09.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.580295 -999.00  +26.20  18.17     18   +0.40 1 1 1 1 1   888    0 26.26 -2.87 ----- 18.2 18.2 278.4 25.9 29.9 -26.5 29.9 -24.4 29.7 -27.0 30.2 -24.7
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.580295
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:56:09.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:55:53', tmtdew=31.53, humidity=12.37, cloud=0.0, wind=23.01, temperature=27.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:55:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:56:09.258 [DEBUG] [Thread-18552] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:56:09.333 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:56:09.345 [DEBUG] [Thread-18556] [transport.py] [_log()] starting thread (client mode): 0x173e8190
2025-11-12T15:56:09.345 [DEBUG] [Thread-18556] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:56:09.360 [DEBUG] [Thread-18556] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:56:09.360 [INFO] [Thread-18556] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] client lang: <none>
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] server lang: <none>
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] kex follows: False
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] Compression: none
2025-11-12T15:56:09.368 [DEBUG] [Thread-18556] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:56:09.423 [DEBUG] [Thread-18556] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:56:09.423 [DEBUG] [Thread-18556] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:56:09.423 [DEBUG] [Thread-18556] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:56:09.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:56:09.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:56:09.480 [DEBUG] [Thread-18556] [transport.py] [_log()] userauth is OK
2025-11-12T15:56:09.480 [DEBUG] [Thread-18556] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:56:09.480 [DEBUG] [Thread-18556] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:56:09.480 [DEBUG] [Thread-18556] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:56:09.480 [DEBUG] [Thread-18556] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:56:09.494 [INFO] [Thread-18556] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:56:09.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:56:09.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:56:10.324 [DEBUG] [Thread-18556] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:56:10.324 [DEBUG] [Thread-18556] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:56:10.372 [DEBUG] [Thread-18556] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:56:10.372 [DEBUG] [Thread-18556] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:56:10.380 [DEBUG] [Thread-18556] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:56:10.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:56:10.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:56: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') -> 00000000
2025-11-12T15:56:10.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:56:10.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:56:10.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:56:10.412 [DEBUG] [Thread-18556] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:56:23.666 [DEBUG] [Thread-18558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:56:38.719 [DEBUG] [Thread-18559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:56:39.484 [DEBUG] [Thread-18560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:56:40.433 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:56:40.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:56:40.434 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:56:40.442 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:56:40.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T15:56:41.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 56, 25), 31.44, 12.44, 0.0, 23.04, 26.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:56:41.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:56:25
2025-11-12T15:56:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:56:41.354 [DEBUG] [Thread-18561] [transport.py] [_log()] starting thread (client mode): 0x1499f190
2025-11-12T15:56:41.354 [DEBUG] [Thread-18561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:56:41.374 [DEBUG] [Thread-18561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:56:41.374 [INFO] [Thread-18561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] client lang: <none>
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] server lang: <none>
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] kex follows: False
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:56:41.375 [DEBUG] [Thread-18561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:56:41.376 [DEBUG] [Thread-18561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:56:41.376 [DEBUG] [Thread-18561] [transport.py] [_log()] Compression: none
2025-11-12T15:56:41.376 [DEBUG] [Thread-18561] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:56:41.384 [DEBUG] [Thread-18561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:56:41.384 [DEBUG] [Thread-18561] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:56:41.385 [DEBUG] [Thread-18561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:56:41.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:56:41.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:56:41.386 [DEBUG] [Thread-18561] [transport.py] [_log()] userauth is OK
2025-11-12T15:56:41.387 [DEBUG] [Thread-18561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:56:41.387 [DEBUG] [Thread-18561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:56:41.387 [DEBUG] [Thread-18561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:56:41.387 [DEBUG] [Thread-18561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:56:41.405 [INFO] [Thread-18561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:56:41.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:56:42.699 [DEBUG] [Thread-18561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:56:42.700 [DEBUG] [Thread-18561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:56:42.700 [DEBUG] [Thread-18561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:56:42.741 [DEBUG] [Thread-18561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:56:42.741 [DEBUG] [Thread-18561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:56:42.744 [DEBUG] [Thread-18561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:56:42.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:56:42.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:56:42.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:56:42.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:56:42.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:56:42.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:56:42.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:56:42.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:56:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:56:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.580643 -999.00  +26.20  22.23     18   +0.10 1 1 1 1 1   888    0 25.82 -6.93 ----- 22.2 22.2 275.2 27.5 29.8 -26.1 29.8 -24.1 29.4 -27.9 30.1 -24.6
2025-11-12T15:56:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:56:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:56:42.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.580643
2025-11-12T15:56:42.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:56:42.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:56:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:56:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:56:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:56:42.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:56:25', tmtdew=31.44, humidity=12.44, cloud=0.0, wind=23.04, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:56:07.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:56:42.771 [DEBUG] [Thread-18561] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:56:42.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:56:42.868 [DEBUG] [Thread-18564] [transport.py] [_log()] starting thread (client mode): 0x173e9120
2025-11-12T15:56:42.868 [DEBUG] [Thread-18564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:56:42.883 [DEBUG] [Thread-18564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:56:42.883 [INFO] [Thread-18564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:56:42.890 [DEBUG] [Thread-18564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:56:42.890 [DEBUG] [Thread-18564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] client lang: <none>
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] server lang: <none>
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] kex follows: False
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] Compression: none
2025-11-12T15:56:42.891 [DEBUG] [Thread-18564] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:56:42.948 [DEBUG] [Thread-18564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:56:42.949 [DEBUG] [Thread-18564] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:56:42.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:56:42.950 [DEBUG] [Thread-18564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:56:42.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:56:43.004 [DEBUG] [Thread-18564] [transport.py] [_log()] userauth is OK
2025-11-12T15:56:43.005 [DEBUG] [Thread-18564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:56:43.005 [DEBUG] [Thread-18564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:56:43.005 [DEBUG] [Thread-18564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:56:43.005 [DEBUG] [Thread-18564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:56:43.024 [INFO] [Thread-18564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:56:43.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:56:43.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:56:43.822 [DEBUG] [Thread-18564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:56:43.822 [DEBUG] [Thread-18564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:56:43.871 [DEBUG] [Thread-18564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:56:43.871 [DEBUG] [Thread-18564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:56:43.880 [DEBUG] [Thread-18564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:56:43.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:56:43.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T15:56:43.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T15:56:43.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:56:43.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:56:43.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:56:43.917 [DEBUG] [Thread-18564] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:56:53.752 [DEBUG] [Thread-18566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:57:08.801 [DEBUG] [Thread-18567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:57:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:57:13.940 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:57:13.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-11-12T15:57:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 56, 57), 31.36, 12.41, 0.0, 25.69, 26.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:57:14.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:56:57
2025-11-12T15:57:14.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:57:14.861 [DEBUG] [Thread-18568] [transport.py] [_log()] starting thread (client mode): 0x14961900
2025-11-12T15:57:14.861 [DEBUG] [Thread-18568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:57:14.881 [DEBUG] [Thread-18568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:57:14.882 [INFO] [Thread-18568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:57:14.884 [DEBUG] [Thread-18568] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] client lang: <none>
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] server lang: <none>
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] kex follows: False
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] Compression: none
2025-11-12T15:57:14.885 [DEBUG] [Thread-18568] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:57:14.902 [DEBUG] [Thread-18568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:57:14.903 [DEBUG] [Thread-18568] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:57:14.903 [DEBUG] [Thread-18568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:57:14.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:57:14.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:57:14.905 [DEBUG] [Thread-18568] [transport.py] [_log()] userauth is OK
2025-11-12T15:57:14.905 [DEBUG] [Thread-18568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:57:14.905 [DEBUG] [Thread-18568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:57:14.905 [DEBUG] [Thread-18568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:57:14.906 [DEBUG] [Thread-18568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:57:14.931 [INFO] [Thread-18568] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:57:14.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:57:15.559 [DEBUG] [Thread-18568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:57:15.559 [DEBUG] [Thread-18568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:57:15.559 [DEBUG] [Thread-18568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:57:15.600 [DEBUG] [Thread-18568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:57:15.600 [DEBUG] [Thread-18568] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:57:15.603 [DEBUG] [Thread-18568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:57:15.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:57:15.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:57:15.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:57:15.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:57:15.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:57:15.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:57:15.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:57:15.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:57:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:57:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.580990 -999.00  +26.00  21.07     18   +0.30 1 1 1 1 1   888    0 26.07 -12.31 ----- 21.1 21.1 276.4 27.8 29.8 -25.7 29.7 -24.9 29.4 -26.0 30.0 -23.9
2025-11-12T15:57:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:57:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:57:15.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.580990
2025-11-12T15:57:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:57:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:57:15.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:57:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:57:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:57:15.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:56:57', tmtdew=31.36, humidity=12.41, cloud=0.0, wind=25.69, temperature=26.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:56:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:57:15.630 [DEBUG] [Thread-18568] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:57:15.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:57:15.726 [DEBUG] [Thread-18571] [transport.py] [_log()] starting thread (client mode): 0x19dd9690
2025-11-12T15:57:15.726 [DEBUG] [Thread-18571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:57:15.744 [DEBUG] [Thread-18571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T15:57:15.744 [INFO] [Thread-18571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T15:57:15.752 [DEBUG] [Thread-18571] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:57:15.752 [DEBUG] [Thread-18571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] client lang: <none>
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] server lang: <none>
2025-11-12T15:57:15.753 [DEBUG] [Thread-18571] [transport.py] [_log()] kex follows: False
2025-11-12T15:57:15.754 [DEBUG] [Thread-18571] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:57:15.754 [DEBUG] [Thread-18571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:57:15.754 [DEBUG] [Thread-18571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:57:15.754 [DEBUG] [Thread-18571] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:57:15.754 [DEBUG] [Thread-18571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:57:15.754 [DEBUG] [Thread-18571] [transport.py] [_log()] Compression: none
2025-11-12T15:57:15.754 [DEBUG] [Thread-18571] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:57:15.813 [DEBUG] [Thread-18571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:57:15.814 [DEBUG] [Thread-18571] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:57:15.814 [DEBUG] [Thread-18571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T15:57:15.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T15:57:15.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:57:15.873 [DEBUG] [Thread-18571] [transport.py] [_log()] userauth is OK
2025-11-12T15:57:15.873 [DEBUG] [Thread-18571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:57:15.873 [DEBUG] [Thread-18571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:57:15.873 [DEBUG] [Thread-18571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T15:57:15.873 [DEBUG] [Thread-18571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:57:15.892 [INFO] [Thread-18571] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:57:15.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T15:57:15.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:57:16.761 [DEBUG] [Thread-18571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:57:16.761 [DEBUG] [Thread-18571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:57:16.809 [DEBUG] [Thread-18571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:57:16.810 [DEBUG] [Thread-18571] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:57:16.820 [DEBUG] [Thread-18571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:57:16.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:57:16.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-11-12T15:57:16.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-11-12T15:57:16.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:57:16.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:57:16.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:57:16.866 [DEBUG] [Thread-18571] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:57:23.835 [DEBUG] [Thread-18573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:57:38.874 [DEBUG] [Thread-18574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:57:39.529 [DEBUG] [Thread-18575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:57:40.586 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:57:40.587 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:57:46.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T15:57:46.879 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T15:57:46.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-11-12T15:57:47.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 15, 57, 29), 31.34, 12.42, 0.0, 26.01, 26.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T15:57:47.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 15:57:29
2025-11-12T15:57:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T15:57:47.796 [DEBUG] [Thread-18576] [transport.py] [_log()] starting thread (client mode): 0x19dd96f0
2025-11-12T15:57:47.796 [DEBUG] [Thread-18576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T15:57:47.814 [DEBUG] [Thread-18576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T15:57:47.815 [INFO] [Thread-18576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T15:57:47.816 [DEBUG] [Thread-18576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T15:57:47.816 [DEBUG] [Thread-18576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] client lang: <none>
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] server lang: <none>
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] kex follows: False
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] Compression: none
2025-11-12T15:57:47.817 [DEBUG] [Thread-18576] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T15:57:47.824 [DEBUG] [Thread-18576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T15:57:47.825 [DEBUG] [Thread-18576] [transport.py] [_log()] Switch to new keys ...
2025-11-12T15:57:47.825 [DEBUG] [Thread-18576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T15:57:47.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T15:57:47.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T15:57:47.826 [DEBUG] [Thread-18576] [transport.py] [_log()] userauth is OK
2025-11-12T15:57:47.826 [DEBUG] [Thread-18576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T15:57:47.826 [DEBUG] [Thread-18576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T15:57:47.827 [DEBUG] [Thread-18576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T15:57:47.827 [DEBUG] [Thread-18576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T15:57:47.842 [INFO] [Thread-18576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T15:57:47.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T15:57:48.449 [DEBUG] [Thread-18576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T15:57:48.449 [DEBUG] [Thread-18576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T15:57:48.450 [DEBUG] [Thread-18576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T15:57:48.491 [DEBUG] [Thread-18576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T15:57:48.491 [DEBUG] [Thread-18576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T15:57:48.494 [DEBUG] [Thread-18576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T15:57:48.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T15:57:48.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T15:57:48.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T15:57:48.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T15:57:48.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T15:57:48.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T15:57:48.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T15:57:48.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T15:57:48.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T15:57:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.581337 -999.00  +26.20  20.28     18   +0.40 1 1 1 1 1   888    0 25.63 -18.32 ----- 20.3 20.3 275.4 32.8 29.8 -25.5 29.7 -24.0 29.5 -23.5 30.0 -23.8
2025-11-12T15:57:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T15:57:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T15:57:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.581337
2025-11-12T15:57:48.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T15:57:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T15:57:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T15:57:48.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T15:57:48.521 [DEBUG] [Thread-18576] [transport.py] [_log()] EOF in transport thread
2025-11-12T15:57:48.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T15:57:48.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T15:57:29', tmtdew=31.34, humidity=12.42, cloud=0.0, wind=26.01, temperature=26.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T13:57:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T15:57:48.605 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T15:57:53.910 [DEBUG] [Thread-18579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:58:08.958 [DEBUG] [Thread-18580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:58:23.996 [DEBUG] [Thread-18581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:58:39.030 [DEBUG] [Thread-18582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:58:39.563 [DEBUG] [Thread-18583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:58:40.728 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:58:40.729 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:58:54.061 [DEBUG] [Thread-18584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:59:09.098 [DEBUG] [Thread-18585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:59:24.126 [DEBUG] [Thread-18586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:59:39.157 [DEBUG] [Thread-18587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:59:39.609 [DEBUG] [Thread-18588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:59:40.871 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:59:40.872 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T15:59:54.190 [DEBUG] [Thread-18589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:00:01.979 [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-11-12T16:00:09.229 [DEBUG] [Thread-18590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:00:24.267 [DEBUG] [Thread-18591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:00:32.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:00:32.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:00:32.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-11-12T16:00:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 0, 9), 32.1, 11.69, 0.0, 37.83, 27.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:00:32.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:00:09
2025-11-12T16:00:32.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:00:32.947 [DEBUG] [Thread-18592] [transport.py] [_log()] starting thread (client mode): 0x17399720
2025-11-12T16:00:32.947 [DEBUG] [Thread-18592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:00:32.967 [DEBUG] [Thread-18592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:00:32.967 [INFO] [Thread-18592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:00:32.970 [DEBUG] [Thread-18592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:00:32.970 [DEBUG] [Thread-18592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] client lang: <none>
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] server lang: <none>
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] kex follows: False
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:00:32.971 [DEBUG] [Thread-18592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:00:32.972 [DEBUG] [Thread-18592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:00:32.972 [DEBUG] [Thread-18592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:00:32.972 [DEBUG] [Thread-18592] [transport.py] [_log()] Compression: none
2025-11-12T16:00:32.972 [DEBUG] [Thread-18592] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:00:32.992 [DEBUG] [Thread-18592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:00:32.993 [DEBUG] [Thread-18592] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:00:32.993 [DEBUG] [Thread-18592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:00:32.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:00:32.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:00:33.037 [DEBUG] [Thread-18592] [transport.py] [_log()] userauth is OK
2025-11-12T16:00:33.037 [DEBUG] [Thread-18592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:00:33.037 [DEBUG] [Thread-18592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:00:33.037 [DEBUG] [Thread-18592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:00:33.037 [DEBUG] [Thread-18592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:00:33.063 [INFO] [Thread-18592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:00:33.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:00:33.681 [DEBUG] [Thread-18592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:00:33.682 [DEBUG] [Thread-18592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:00:33.682 [DEBUG] [Thread-18592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:00:33.723 [DEBUG] [Thread-18592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:00:33.723 [DEBUG] [Thread-18592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:00:33.726 [DEBUG] [Thread-18592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:00:33.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:00:33.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:00:33.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:00:33.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:00:33.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:00:33.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:00:33.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:00:33.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:00:33.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:00:33.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.583420 -999.00  +26.50  39.36     18   +0.30 1 1 2 1 1   888    0 25.46 -38.04 ----- 39.4 39.4 279.9 46.2 29.6 -25.3 29.6 -24.1 29.3 -23.8 30.0 -24.1
2025-11-12T16:00:33.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:00:33.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:00:33.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.583420
2025-11-12T16:00:33.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:00:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:00:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:00:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:00:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:00:33.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:00:09', tmtdew=32.1, humidity=11.69, cloud=0.0, wind=37.83, temperature=27.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:00:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:00:33.750 [DEBUG] [Thread-18592] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:00:33.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:00:33.848 [DEBUG] [Thread-18595] [transport.py] [_log()] starting thread (client mode): 0x173996c0
2025-11-12T16:00:33.848 [DEBUG] [Thread-18595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:00:33.863 [DEBUG] [Thread-18595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:00:33.864 [INFO] [Thread-18595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:00:33.871 [DEBUG] [Thread-18595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:00:33.871 [DEBUG] [Thread-18595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:00:33.872 [DEBUG] [Thread-18595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:00:33.872 [DEBUG] [Thread-18595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:00:33.872 [DEBUG] [Thread-18595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:00:33.872 [DEBUG] [Thread-18595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:00:33.872 [DEBUG] [Thread-18595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:00:33.872 [DEBUG] [Thread-18595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:00:33.872 [DEBUG] [Thread-18595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:00:33.872 [DEBUG] [Thread-18595] [transport.py] [_log()] client lang: <none>
2025-11-12T16:00:33.873 [DEBUG] [Thread-18595] [transport.py] [_log()] server lang: <none>
2025-11-12T16:00:33.873 [DEBUG] [Thread-18595] [transport.py] [_log()] kex follows: False
2025-11-12T16:00:33.873 [DEBUG] [Thread-18595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:00:33.873 [DEBUG] [Thread-18595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:00:33.873 [DEBUG] [Thread-18595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:00:33.873 [DEBUG] [Thread-18595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:00:33.873 [DEBUG] [Thread-18595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:00:33.873 [DEBUG] [Thread-18595] [transport.py] [_log()] Compression: none
2025-11-12T16:00:33.874 [DEBUG] [Thread-18595] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:00:33.928 [DEBUG] [Thread-18595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:00:33.929 [DEBUG] [Thread-18595] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:00:33.930 [DEBUG] [Thread-18595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:00:33.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:00:33.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:00:33.985 [DEBUG] [Thread-18595] [transport.py] [_log()] userauth is OK
2025-11-12T16:00:33.985 [DEBUG] [Thread-18595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:00:33.985 [DEBUG] [Thread-18595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:00:33.985 [DEBUG] [Thread-18595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:00:33.985 [DEBUG] [Thread-18595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:00:34.004 [INFO] [Thread-18595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:00:34.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:00:34.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:00:34.832 [DEBUG] [Thread-18595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:00:34.832 [DEBUG] [Thread-18595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:00:34.880 [DEBUG] [Thread-18595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:00:34.881 [DEBUG] [Thread-18595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:00:34.890 [DEBUG] [Thread-18595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:00:34.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:00:34.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-11-12T16:00: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') -> 00000000
2025-11-12T16:00:34.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:00:34.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:00:34.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:00:34.928 [DEBUG] [Thread-18595] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:00:39.300 [DEBUG] [Thread-18597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:00:39.637 [DEBUG] [Thread-18598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:00:41.014 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:00:41.015 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:00:54.341 [DEBUG] [Thread-18599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:01:04.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:01:04.942 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:01:04.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-11-12T16:01:05.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 0, 41), 31.5, 12.39, 0.0, 40.76, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:01:05.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:00:41
2025-11-12T16:01:05.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:01:05.874 [DEBUG] [Thread-18600] [transport.py] [_log()] starting thread (client mode): 0x1739b100
2025-11-12T16:01:05.874 [DEBUG] [Thread-18600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:01:05.894 [DEBUG] [Thread-18600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:01:05.894 [INFO] [Thread-18600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] client lang: <none>
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] server lang: <none>
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] kex follows: False
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] Compression: none
2025-11-12T16:01:05.898 [DEBUG] [Thread-18600] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:01:05.915 [DEBUG] [Thread-18600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:01:05.915 [DEBUG] [Thread-18600] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:01:05.916 [DEBUG] [Thread-18600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:01:05.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:01:05.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:01:05.918 [DEBUG] [Thread-18600] [transport.py] [_log()] userauth is OK
2025-11-12T16:01:05.918 [DEBUG] [Thread-18600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:01:05.918 [DEBUG] [Thread-18600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:01:05.918 [DEBUG] [Thread-18600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:01:05.918 [DEBUG] [Thread-18600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:01:05.943 [INFO] [Thread-18600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:01:05.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:01:07.764 [DEBUG] [Thread-18600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:01:07.764 [DEBUG] [Thread-18600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:01:07.765 [DEBUG] [Thread-18600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:01:07.806 [DEBUG] [Thread-18600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:01:07.806 [DEBUG] [Thread-18600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:01:07.809 [DEBUG] [Thread-18600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:01:07.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:01:07.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:01:07.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:01:07.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:01:07.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:01:07.829 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:01:07.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:01:07.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:01:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:01:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.583768 -999.00  +26.60  27.89     18   +0.50 1 1 1 1 1   888    0 25.50 -41.85 ----- 27.9 27.9 280.4 41.9 29.6 -25.2 29.5 -24.8 29.5 -23.3 30.0 -23.6
2025-11-12T16:01:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:01:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:01:07.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.583768
2025-11-12T16:01:07.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:01:07.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:01:07.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:01:07.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:01:07.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:01:07.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:00:41', tmtdew=31.5, humidity=12.39, cloud=0.0, wind=40.76, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:00:37.555', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:01:07.832 [DEBUG] [Thread-18600] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:01:07.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:01:07.929 [DEBUG] [Thread-18603] [transport.py] [_log()] starting thread (client mode): 0x17360eb0
2025-11-12T16:01:07.930 [DEBUG] [Thread-18603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:01:07.948 [DEBUG] [Thread-18603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:01:07.948 [INFO] [Thread-18603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:01:07.956 [DEBUG] [Thread-18603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:01:07.956 [DEBUG] [Thread-18603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:01:07.956 [DEBUG] [Thread-18603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:01:07.956 [DEBUG] [Thread-18603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:01:07.956 [DEBUG] [Thread-18603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] client lang: <none>
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] server lang: <none>
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] kex follows: False
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] Compression: none
2025-11-12T16:01:07.957 [DEBUG] [Thread-18603] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:01:08.016 [DEBUG] [Thread-18603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:01:08.017 [DEBUG] [Thread-18603] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:01:08.018 [DEBUG] [Thread-18603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:01:08.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:01:08.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:01:08.074 [DEBUG] [Thread-18603] [transport.py] [_log()] userauth is OK
2025-11-12T16:01:08.074 [DEBUG] [Thread-18603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:01:08.075 [DEBUG] [Thread-18603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:01:08.075 [DEBUG] [Thread-18603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:01:08.075 [DEBUG] [Thread-18603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:01:08.093 [INFO] [Thread-18603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:01:08.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:01:08.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:01:08.895 [DEBUG] [Thread-18603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:01:08.896 [DEBUG] [Thread-18603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:01:08.944 [DEBUG] [Thread-18603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:01:08.945 [DEBUG] [Thread-18603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:01:08.954 [DEBUG] [Thread-18603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:01:08.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:01:08.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:01:08.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-11-12T16:01:08.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:01:08.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:01:08.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:01:08.994 [DEBUG] [Thread-18603] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:01:09.381 [DEBUG] [Thread-18605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:01:24.439 [DEBUG] [Thread-18606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:01:39.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:01:39.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:01:39.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-11-12T16:01:39.476 [DEBUG] [Thread-18607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:01:39.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 1, 13), 31.4, 12.47, 0.0, 41.8, 27.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:01:39.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:01:13
2025-11-12T16:01:39.674 [DEBUG] [Thread-18608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:01:39.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:01:39.932 [DEBUG] [Thread-18609] [transport.py] [_log()] starting thread (client mode): 0x173604f0
2025-11-12T16:01:39.932 [DEBUG] [Thread-18609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:01:39.953 [DEBUG] [Thread-18609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:01:39.954 [INFO] [Thread-18609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:01:39.957 [DEBUG] [Thread-18609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:01:39.957 [DEBUG] [Thread-18609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:01:39.957 [DEBUG] [Thread-18609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:01:39.957 [DEBUG] [Thread-18609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] client lang: <none>
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] server lang: <none>
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] kex follows: False
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:01:39.958 [DEBUG] [Thread-18609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:01:39.959 [DEBUG] [Thread-18609] [transport.py] [_log()] Compression: none
2025-11-12T16:01:39.959 [DEBUG] [Thread-18609] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:01:39.977 [DEBUG] [Thread-18609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:01:39.977 [DEBUG] [Thread-18609] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:01:39.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:01:39.978 [DEBUG] [Thread-18609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:01:39.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:01:39.980 [DEBUG] [Thread-18609] [transport.py] [_log()] userauth is OK
2025-11-12T16:01:39.981 [DEBUG] [Thread-18609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:01:39.981 [DEBUG] [Thread-18609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:01:39.981 [DEBUG] [Thread-18609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:01:39.981 [DEBUG] [Thread-18609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:01:40.001 [INFO] [Thread-18609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:01:40.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:01:40.661 [DEBUG] [Thread-18609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:01:40.661 [DEBUG] [Thread-18609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:01:40.661 [DEBUG] [Thread-18609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:01:40.702 [DEBUG] [Thread-18609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:01:40.702 [DEBUG] [Thread-18609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:01:40.706 [DEBUG] [Thread-18609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:01:40.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:01:40.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:01:40.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:01:40.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:01:40.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:01:40.732 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:01:40.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:01:40.732 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:01:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:01:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.584115 -999.00  +26.60  30.36     18   +0.70 1 1 2 1 1   888    0 24.63 -45.51 ----- 30.4 30.4 284.0 39.3 29.7 -25.0 29.5 -24.2 29.3 -25.1 30.0 -23.8
2025-11-12T16:01:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:01:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:01:40.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.584115
2025-11-12T16:01:40.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:01:40.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:01:40.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:01:40.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:01:40.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:01:40.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:01:13', tmtdew=31.4, humidity=12.47, cloud=0.0, wind=41.8, temperature=27.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:01:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:01:40.735 [DEBUG] [Thread-18609] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:01:40.818 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:01:40.830 [DEBUG] [Thread-18612] [transport.py] [_log()] starting thread (client mode): 0x17346f20
2025-11-12T16:01:40.831 [DEBUG] [Thread-18612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:01:40.844 [DEBUG] [Thread-18612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:01:40.844 [INFO] [Thread-18612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] client lang: <none>
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] server lang: <none>
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] kex follows: False
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:01:40.852 [DEBUG] [Thread-18612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:01:40.853 [DEBUG] [Thread-18612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:01:40.853 [DEBUG] [Thread-18612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:01:40.853 [DEBUG] [Thread-18612] [transport.py] [_log()] Compression: none
2025-11-12T16:01:40.853 [DEBUG] [Thread-18612] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:01:40.907 [DEBUG] [Thread-18612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:01:40.908 [DEBUG] [Thread-18612] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:01:40.908 [DEBUG] [Thread-18612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:01:40.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:01:40.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:01:40.964 [DEBUG] [Thread-18612] [transport.py] [_log()] userauth is OK
2025-11-12T16:01:40.964 [DEBUG] [Thread-18612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:01:40.964 [DEBUG] [Thread-18612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:01:40.964 [DEBUG] [Thread-18612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:01:40.965 [DEBUG] [Thread-18612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:01:40.983 [INFO] [Thread-18612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:01:40.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:01:40.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:01:41.156 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:01:41.157 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:01:41.793 [DEBUG] [Thread-18612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:01:41.793 [DEBUG] [Thread-18612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:01:41.841 [DEBUG] [Thread-18612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:01:41.842 [DEBUG] [Thread-18612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:01:41.851 [DEBUG] [Thread-18612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:01:41.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:01:41.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-11-12T16:01:41.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-11-12T16:01:41.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:01:41.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:01:41.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:01:41.888 [DEBUG] [Thread-18612] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:01:54.507 [DEBUG] [Thread-18614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:02:09.548 [DEBUG] [Thread-18615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:02:11.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:02:11.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:02:11.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-11-12T16:02:12.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 1, 45), 30.67, 13.12, 0.0, 31.46, 26.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:02:12.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:01:45
2025-11-12T16:02:12.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:02:12.825 [DEBUG] [Thread-18616] [transport.py] [_log()] starting thread (client mode): 0x17347f10
2025-11-12T16:02:12.825 [DEBUG] [Thread-18616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:02:12.845 [DEBUG] [Thread-18616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:02:12.846 [INFO] [Thread-18616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] client lang: <none>
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] server lang: <none>
2025-11-12T16:02:12.849 [DEBUG] [Thread-18616] [transport.py] [_log()] kex follows: False
2025-11-12T16:02:12.850 [DEBUG] [Thread-18616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:02:12.850 [DEBUG] [Thread-18616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:02:12.850 [DEBUG] [Thread-18616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:02:12.850 [DEBUG] [Thread-18616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:02:12.850 [DEBUG] [Thread-18616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:02:12.850 [DEBUG] [Thread-18616] [transport.py] [_log()] Compression: none
2025-11-12T16:02:12.850 [DEBUG] [Thread-18616] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:02:12.868 [DEBUG] [Thread-18616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:02:12.869 [DEBUG] [Thread-18616] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:02:12.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:02:12.870 [DEBUG] [Thread-18616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:02:12.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:02:12.872 [DEBUG] [Thread-18616] [transport.py] [_log()] userauth is OK
2025-11-12T16:02:12.872 [DEBUG] [Thread-18616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:02:12.872 [DEBUG] [Thread-18616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:02:12.872 [DEBUG] [Thread-18616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:02:12.872 [DEBUG] [Thread-18616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:02:12.899 [INFO] [Thread-18616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:02:12.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:02:13.679 [DEBUG] [Thread-18616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:02:13.679 [DEBUG] [Thread-18616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:02:13.679 [DEBUG] [Thread-18616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:02:13.719 [DEBUG] [Thread-18616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:02:13.720 [DEBUG] [Thread-18616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:02:13.722 [DEBUG] [Thread-18616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:02:13.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:02:13.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:02:13.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:02:13.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:02:13.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:02:13.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:02:13.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:02:13.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:02:13.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:02:13.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.584462 -999.00  +26.50  24.65     18   +0.70 1 1 1 1 1   888    0 24.61 -57.03 ----- 24.6 24.6 284.8 30.6 29.6 -24.6 29.5 -23.8 29.7 -24.7 30.0 -23.6
2025-11-12T16:02:13.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:02:13.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:02:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.584462
2025-11-12T16:02:13.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:02:13.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:02:13.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:02:13.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:02:13.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:02:13.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:01:45', tmtdew=30.67, humidity=13.12, cloud=0.0, wind=31.46, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:01:37.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:02:13.753 [DEBUG] [Thread-18616] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:02:13.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:02:13.849 [DEBUG] [Thread-18619] [transport.py] [_log()] starting thread (client mode): 0x14982800
2025-11-12T16:02:13.849 [DEBUG] [Thread-18619] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:02:13.864 [DEBUG] [Thread-18619] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:02:13.864 [INFO] [Thread-18619] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:02:13.872 [DEBUG] [Thread-18619] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] client lang: <none>
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] server lang: <none>
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] kex follows: False
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] Compression: none
2025-11-12T16:02:13.873 [DEBUG] [Thread-18619] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:02:13.933 [DEBUG] [Thread-18619] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:02:13.933 [DEBUG] [Thread-18619] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:02:13.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:02:13.934 [DEBUG] [Thread-18619] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:02:13.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:02:13.988 [DEBUG] [Thread-18619] [transport.py] [_log()] userauth is OK
2025-11-12T16:02:13.989 [DEBUG] [Thread-18619] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:02:13.989 [DEBUG] [Thread-18619] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:02:13.989 [DEBUG] [Thread-18619] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:02:13.989 [DEBUG] [Thread-18619] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:02:14.008 [INFO] [Thread-18619] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:02:14.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:02:14.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:02:14.886 [DEBUG] [Thread-18619] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:02:14.886 [DEBUG] [Thread-18619] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:02:14.934 [DEBUG] [Thread-18619] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:02:14.934 [DEBUG] [Thread-18619] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:02:14.943 [DEBUG] [Thread-18619] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:02:14.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:02:14.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-11-12T16:02:14.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-11-12T16:02:14.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:02:14.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:02:14.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:02:14.984 [DEBUG] [Thread-18619] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:02:24.583 [DEBUG] [Thread-18621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:02:39.643 [DEBUG] [Thread-18622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:02:39.708 [DEBUG] [Thread-18623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:02:41.299 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:02:41.300 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:02:44.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:02:44.975 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:02: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-11-12T16:02:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 2, 17), 30.55, 13.22, 0.0, 29.71, 26.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:02:45.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:02:17
2025-11-12T16:02:45.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:02:45.910 [DEBUG] [Thread-18624] [transport.py] [_log()] starting thread (client mode): 0x17360fa0
2025-11-12T16:02:45.910 [DEBUG] [Thread-18624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:02:45.930 [DEBUG] [Thread-18624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:02:45.931 [INFO] [Thread-18624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:02:45.933 [DEBUG] [Thread-18624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] client lang: <none>
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] server lang: <none>
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] kex follows: False
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] Compression: none
2025-11-12T16:02:45.934 [DEBUG] [Thread-18624] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:02:45.951 [DEBUG] [Thread-18624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:02:45.952 [DEBUG] [Thread-18624] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:02:45.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:02:45.953 [DEBUG] [Thread-18624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:02:45.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:02:45.955 [DEBUG] [Thread-18624] [transport.py] [_log()] userauth is OK
2025-11-12T16:02:45.955 [DEBUG] [Thread-18624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:02:45.955 [DEBUG] [Thread-18624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:02:45.955 [DEBUG] [Thread-18624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:02:45.955 [DEBUG] [Thread-18624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:02:45.980 [INFO] [Thread-18624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:02:45.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:02:46.606 [DEBUG] [Thread-18624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:02:46.606 [DEBUG] [Thread-18624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:02:46.607 [DEBUG] [Thread-18624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:02:46.647 [DEBUG] [Thread-18624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:02:46.647 [DEBUG] [Thread-18624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:02:46.651 [DEBUG] [Thread-18624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:02:46.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:02:46.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:02:46.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:02:46.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:02:46.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:02:46.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:02:46.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:02:46.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:02:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:02:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.584809 -999.00  +26.70  23.64     18   +1.00 1 1 1 1 1   888    0 24.09 -73.08 ----- 23.6 23.6 277.6 40.0 29.7 -25.2 29.6 -24.3 29.7 -24.9 30.1 -23.8
2025-11-12T16:02:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:02:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:02:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.584809
2025-11-12T16:02:46.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:02:46.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:02:46.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:02:46.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:02:46.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:02:46.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:02:17', tmtdew=30.55, humidity=13.22, cloud=0.0, wind=29.71, temperature=26.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:02:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:02:46.676 [DEBUG] [Thread-18624] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:02:46.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:02:46.771 [DEBUG] [Thread-18627] [transport.py] [_log()] starting thread (client mode): 0x173bf130
2025-11-12T16:02:46.771 [DEBUG] [Thread-18627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:02:46.785 [DEBUG] [Thread-18627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:02:46.785 [INFO] [Thread-18627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:02:46.793 [DEBUG] [Thread-18627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:02:46.793 [DEBUG] [Thread-18627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:02:46.793 [DEBUG] [Thread-18627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:02:46.793 [DEBUG] [Thread-18627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] client lang: <none>
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] server lang: <none>
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] kex follows: False
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:02:46.794 [DEBUG] [Thread-18627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:02:46.795 [DEBUG] [Thread-18627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:02:46.795 [DEBUG] [Thread-18627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:02:46.795 [DEBUG] [Thread-18627] [transport.py] [_log()] Compression: none
2025-11-12T16:02:46.795 [DEBUG] [Thread-18627] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:02:46.852 [DEBUG] [Thread-18627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:02:46.853 [DEBUG] [Thread-18627] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:02:46.854 [DEBUG] [Thread-18627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:02:46.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:02:46.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:02:46.909 [DEBUG] [Thread-18627] [transport.py] [_log()] userauth is OK
2025-11-12T16:02:46.909 [DEBUG] [Thread-18627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:02:46.909 [DEBUG] [Thread-18627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:02:46.909 [DEBUG] [Thread-18627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:02:46.909 [DEBUG] [Thread-18627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:02:46.928 [INFO] [Thread-18627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:02:46.928 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:02:46.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:02:47.773 [DEBUG] [Thread-18627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:02:47.773 [DEBUG] [Thread-18627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:02:47.821 [DEBUG] [Thread-18627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:02:47.821 [DEBUG] [Thread-18627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:02:47.830 [DEBUG] [Thread-18627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:02:47.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:02:47.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-11-12T16:02:47.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-11-12T16:02:47.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:02:47.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:02:47.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:02:47.865 [DEBUG] [Thread-18627] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:02:54.679 [DEBUG] [Thread-18629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:03:09.733 [DEBUG] [Thread-18630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:03:17.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:03:17.876 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:03:17.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-11-12T16:03:18.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 2, 49), 30.44, 13.35, 0.0, 37.32, 26.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:03:18.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:02:49
2025-11-12T16:03:18.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:03:18.802 [DEBUG] [Thread-18631] [transport.py] [_log()] starting thread (client mode): 0x17347f10
2025-11-12T16:03:18.803 [DEBUG] [Thread-18631] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:03:18.822 [DEBUG] [Thread-18631] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:03:18.823 [INFO] [Thread-18631] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:03:18.826 [DEBUG] [Thread-18631] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:03:18.826 [DEBUG] [Thread-18631] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:03:18.826 [DEBUG] [Thread-18631] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] client lang: <none>
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] server lang: <none>
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] kex follows: False
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] Compression: none
2025-11-12T16:03:18.827 [DEBUG] [Thread-18631] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:03:18.849 [DEBUG] [Thread-18631] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:03:18.849 [DEBUG] [Thread-18631] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:03:18.850 [DEBUG] [Thread-18631] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:03:18.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:03:18.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:03:18.852 [DEBUG] [Thread-18631] [transport.py] [_log()] userauth is OK
2025-11-12T16:03:18.852 [DEBUG] [Thread-18631] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:03:18.853 [DEBUG] [Thread-18631] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:03:18.853 [DEBUG] [Thread-18631] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:03:18.853 [DEBUG] [Thread-18631] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:03:18.888 [INFO] [Thread-18631] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:03:18.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:03:19.628 [DEBUG] [Thread-18631] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:03:19.628 [DEBUG] [Thread-18631] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:03:19.629 [DEBUG] [Thread-18631] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:03:19.670 [DEBUG] [Thread-18631] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:03:19.670 [DEBUG] [Thread-18631] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:03:19.673 [DEBUG] [Thread-18631] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:03:19.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:03:19.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:03:19.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:03:19.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:03:19.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:03:19.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:03:19.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:03:19.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:03:19.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:03:19.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.585156 -999.00  +26.90  31.66     18   +1.00 1 2 2 1 1   888    0 23.86 -80.45 ----- 31.7 31.7 301.0 43.2 29.8 -24.2 29.6 -23.2 29.9 -22.2 30.2 -23.2
2025-11-12T16:03:19.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:03:19.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:03:19.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.585156
2025-11-12T16:03:19.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:03:19.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:03:19.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:03:19.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:03:19.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:03:19.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:02:49', tmtdew=30.44, humidity=13.35, cloud=0.0, wind=37.32, temperature=26.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:02:37.478', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:03:19.699 [DEBUG] [Thread-18631] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:03:19.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:03:19.795 [DEBUG] [Thread-18634] [transport.py] [_log()] starting thread (client mode): 0x14980dc0
2025-11-12T16:03:19.795 [DEBUG] [Thread-18634] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:03:19.809 [DEBUG] [Thread-18634] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:03:19.809 [INFO] [Thread-18634] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:03:19.817 [DEBUG] [Thread-18634] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:03:19.817 [DEBUG] [Thread-18634] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:03:19.817 [DEBUG] [Thread-18634] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:03:19.826 [DEBUG] [Thread-18634] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:03:19.826 [DEBUG] [Thread-18634] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:03:19.826 [DEBUG] [Thread-18634] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] client lang: <none>
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] server lang: <none>
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] kex follows: False
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] Compression: none
2025-11-12T16:03:19.827 [DEBUG] [Thread-18634] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:03:19.877 [DEBUG] [Thread-18634] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:03:19.878 [DEBUG] [Thread-18634] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:03:19.878 [DEBUG] [Thread-18634] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:03:19.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:03:19.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:03:19.936 [DEBUG] [Thread-18634] [transport.py] [_log()] userauth is OK
2025-11-12T16:03:19.937 [DEBUG] [Thread-18634] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:03:19.937 [DEBUG] [Thread-18634] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:03:19.937 [DEBUG] [Thread-18634] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:03:19.937 [DEBUG] [Thread-18634] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:03:19.959 [INFO] [Thread-18634] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:03:19.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:03:19.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:03:20.781 [DEBUG] [Thread-18634] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:03:20.781 [DEBUG] [Thread-18634] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:03:20.829 [DEBUG] [Thread-18634] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:03:20.830 [DEBUG] [Thread-18634] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:03:20.839 [DEBUG] [Thread-18634] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:03:20.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:03:20.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:03:20.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-11-12T16:03:20.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:03:20.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:03:20.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:03:20.875 [DEBUG] [Thread-18634] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:03:24.763 [DEBUG] [Thread-18636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:03:39.741 [DEBUG] [Thread-18637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:03:39.813 [DEBUG] [Thread-18638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:03:41.441 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:03:41.442 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:03:50.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:03:50.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:03:50.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:03:51.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 3, 21), 30.63, 13.22, 0.0, 39.35, 27.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:03:51.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:03:21
2025-11-12T16:03:51.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:03:51.880 [DEBUG] [Thread-18639] [transport.py] [_log()] starting thread (client mode): 0x17361510
2025-11-12T16:03:51.880 [DEBUG] [Thread-18639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:03:51.901 [DEBUG] [Thread-18639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:03:51.901 [INFO] [Thread-18639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:03:51.904 [DEBUG] [Thread-18639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:03:51.904 [DEBUG] [Thread-18639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:03:51.904 [DEBUG] [Thread-18639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:03:51.904 [DEBUG] [Thread-18639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:03:51.904 [DEBUG] [Thread-18639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:03:51.904 [DEBUG] [Thread-18639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] client lang: <none>
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] server lang: <none>
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] kex follows: False
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] Compression: none
2025-11-12T16:03:51.905 [DEBUG] [Thread-18639] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:03:51.921 [DEBUG] [Thread-18639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:03:51.921 [DEBUG] [Thread-18639] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:03:51.921 [DEBUG] [Thread-18639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:03:51.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:03:51.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:03:51.922 [DEBUG] [Thread-18639] [transport.py] [_log()] userauth is OK
2025-11-12T16:03:51.922 [DEBUG] [Thread-18639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:03:51.922 [DEBUG] [Thread-18639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:03:51.922 [DEBUG] [Thread-18639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:03:51.922 [DEBUG] [Thread-18639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:03:51.940 [INFO] [Thread-18639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:03:51.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:03:52.573 [DEBUG] [Thread-18639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:03:52.573 [DEBUG] [Thread-18639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:03:52.573 [DEBUG] [Thread-18639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:03:52.614 [DEBUG] [Thread-18639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:03:52.614 [DEBUG] [Thread-18639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:03:52.616 [DEBUG] [Thread-18639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:03:52.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:03:52.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:03:52.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:03:52.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:03:52.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:03:52.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:03:52.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.585504 -999.00  +27.00  24.26     18   +1.00 1 1 1 1 1   888    0 24.13 -81.69 ----- 24.3 24.3 294.6 35.7 29.9 -24.3 29.7 -24.2 29.9 -23.9 30.4 -23.0
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.585504
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:03:52.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:03:21', tmtdew=30.63, humidity=13.22, cloud=0.0, wind=39.35, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:03:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:03:52.638 [DEBUG] [Thread-18639] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:03:52.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:03:52.722 [DEBUG] [Thread-18642] [transport.py] [_log()] starting thread (client mode): 0x149a85b0
2025-11-12T16:03:52.722 [DEBUG] [Thread-18642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:03:52.736 [DEBUG] [Thread-18642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:03:52.736 [INFO] [Thread-18642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:03:52.743 [DEBUG] [Thread-18642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] client lang: <none>
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] server lang: <none>
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] kex follows: False
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] Compression: none
2025-11-12T16:03:52.744 [DEBUG] [Thread-18642] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:03:52.798 [DEBUG] [Thread-18642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:03:52.798 [DEBUG] [Thread-18642] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:03:52.799 [DEBUG] [Thread-18642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:03:52.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:03:52.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:03:52.856 [DEBUG] [Thread-18642] [transport.py] [_log()] userauth is OK
2025-11-12T16:03:52.856 [DEBUG] [Thread-18642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:03:52.856 [DEBUG] [Thread-18642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:03:52.856 [DEBUG] [Thread-18642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:03:52.856 [DEBUG] [Thread-18642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:03:52.873 [INFO] [Thread-18642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:03:52.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:03:52.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:03:53.674 [DEBUG] [Thread-18642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:03:53.674 [DEBUG] [Thread-18642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:03:53.723 [DEBUG] [Thread-18642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:03:53.723 [DEBUG] [Thread-18642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:03:53.731 [DEBUG] [Thread-18642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:03:53.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:03:53.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-11-12T16:03:53.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-11-12T16:03:53.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:03:53.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:03:53.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:03:53.763 [DEBUG] [Thread-18642] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:03:54.844 [DEBUG] [Thread-18644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:04:09.895 [DEBUG] [Thread-18645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:04:23.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:04:23.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:04:23.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:04:24.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 3, 52), 30.69, 13.09, 0.0, 33.08, 26.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:04:24.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:03:52
2025-11-12T16:04:24.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:04:24.677 [DEBUG] [Thread-18646] [transport.py] [_log()] starting thread (client mode): 0x14982290
2025-11-12T16:04:24.677 [DEBUG] [Thread-18646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:04:24.687 [DEBUG] [Thread-18646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:04:24.687 [INFO] [Thread-18646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] client lang: <none>
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] server lang: <none>
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] kex follows: False
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:04:24.689 [DEBUG] [Thread-18646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:04:24.690 [DEBUG] [Thread-18646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:04:24.690 [DEBUG] [Thread-18646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:04:24.690 [DEBUG] [Thread-18646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:04:24.690 [DEBUG] [Thread-18646] [transport.py] [_log()] Compression: none
2025-11-12T16:04:24.690 [DEBUG] [Thread-18646] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:04:24.701 [DEBUG] [Thread-18646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:04:24.702 [DEBUG] [Thread-18646] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:04:24.702 [DEBUG] [Thread-18646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:04:24.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:04:24.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:04:24.703 [DEBUG] [Thread-18646] [transport.py] [_log()] userauth is OK
2025-11-12T16:04:24.703 [DEBUG] [Thread-18646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:04:24.703 [DEBUG] [Thread-18646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:04:24.703 [DEBUG] [Thread-18646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:04:24.703 [DEBUG] [Thread-18646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:04:24.720 [INFO] [Thread-18646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:04:24.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:04:24.930 [DEBUG] [Thread-18648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:04:25.400 [DEBUG] [Thread-18646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:04:25.400 [DEBUG] [Thread-18646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:04:25.401 [DEBUG] [Thread-18646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:04:25.442 [DEBUG] [Thread-18646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:04:25.442 [DEBUG] [Thread-18646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:04:25.445 [DEBUG] [Thread-18646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:04:25.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:04:25.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:04:25.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:04:25.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:04:25.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:04:25.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:04:25.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:04:25.471 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:04:25.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:04:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.585851 -999.00  +26.90  29.59     18   +0.90 1 1 1 1 1   888    0 24.21 -76.39 ----- 29.6 29.6 291.8 35.5 29.9 -24.4 29.7 -23.7 30.1 -24.5 30.4 -23.0
2025-11-12T16:04:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:04:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:04:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.585851
2025-11-12T16:04:25.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:04:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:04:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:04:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:04:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:04:25.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:03:52', tmtdew=30.69, humidity=13.09, cloud=0.0, wind=33.08, temperature=26.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:03:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:04:25.474 [DEBUG] [Thread-18646] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:04:25.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:04:25.572 [DEBUG] [Thread-18650] [transport.py] [_log()] starting thread (client mode): 0x14961330
2025-11-12T16:04:25.572 [DEBUG] [Thread-18650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:04:25.586 [DEBUG] [Thread-18650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:04:25.586 [INFO] [Thread-18650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:04:25.593 [DEBUG] [Thread-18650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] client lang: <none>
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] server lang: <none>
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] kex follows: False
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] Compression: none
2025-11-12T16:04:25.594 [DEBUG] [Thread-18650] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:04:25.650 [DEBUG] [Thread-18650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:04:25.650 [DEBUG] [Thread-18650] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:04:25.651 [DEBUG] [Thread-18650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:04:25.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:04:25.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:04:25.708 [DEBUG] [Thread-18650] [transport.py] [_log()] userauth is OK
2025-11-12T16:04:25.708 [DEBUG] [Thread-18650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:04:25.708 [DEBUG] [Thread-18650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:04:25.708 [DEBUG] [Thread-18650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:04:25.708 [DEBUG] [Thread-18650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:04:25.722 [INFO] [Thread-18650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:04:25.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:04:25.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:04:26.582 [DEBUG] [Thread-18650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:04:26.582 [DEBUG] [Thread-18650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:04:26.630 [DEBUG] [Thread-18650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:04:26.630 [DEBUG] [Thread-18650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:04:26.639 [DEBUG] [Thread-18650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:04:26.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:04:26.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-11-12T16:04:26.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-11-12T16:04:26.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:04:26.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:04:26.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:04:26.670 [DEBUG] [Thread-18650] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:04:39.774 [DEBUG] [Thread-18652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:04:39.963 [DEBUG] [Thread-18653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:04:41.584 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:04:41.585 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:04:55.019 [DEBUG] [Thread-18654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:04:56.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:04:56.672 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:04:56.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:04:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 4, 25), 30.68, 13.07, 0.0, 38.43, 26.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:04:57.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:04:25
2025-11-12T16:04:57.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:04:57.608 [DEBUG] [Thread-18655] [transport.py] [_log()] starting thread (client mode): 0x14960670
2025-11-12T16:04:57.608 [DEBUG] [Thread-18655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:04:57.628 [DEBUG] [Thread-18655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:04:57.628 [INFO] [Thread-18655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:04:57.631 [DEBUG] [Thread-18655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:04:57.631 [DEBUG] [Thread-18655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] client lang: <none>
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] server lang: <none>
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] kex follows: False
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] Compression: none
2025-11-12T16:04:57.632 [DEBUG] [Thread-18655] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:04:57.647 [DEBUG] [Thread-18655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:04:57.647 [DEBUG] [Thread-18655] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:04:57.647 [DEBUG] [Thread-18655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:04:57.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:04:57.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:04:57.648 [DEBUG] [Thread-18655] [transport.py] [_log()] userauth is OK
2025-11-12T16:04:57.648 [DEBUG] [Thread-18655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:04:57.648 [DEBUG] [Thread-18655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:04:57.648 [DEBUG] [Thread-18655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:04:57.648 [DEBUG] [Thread-18655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:04:57.663 [INFO] [Thread-18655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:04:57.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:04:58.311 [DEBUG] [Thread-18655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:04:58.311 [DEBUG] [Thread-18655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:04:58.311 [DEBUG] [Thread-18655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:04:58.352 [DEBUG] [Thread-18655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:04:58.352 [DEBUG] [Thread-18655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:04:58.355 [DEBUG] [Thread-18655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:04:58.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:04:58.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:04:58.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:04:58.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:04:58.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:04:58.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:04:58.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:04:58.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:04:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:04:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.586545 -999.00  +26.90  32.36     18   +0.70 1 1 2 1 1   888    0 24.15 -78.12 ----- 32.4 32.4 285.6 41.5 29.8 -25.6 29.8 -24.1 29.9 -27.0 30.5 -23.5
2025-11-12T16:04:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:04:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:04:58.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.586545
2025-11-12T16:04:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:04:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:04:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:04:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:04:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:04:58.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:04:25', tmtdew=30.68, humidity=13.07, cloud=0.0, wind=38.43, temperature=26.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:04:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:04:58.374 [DEBUG] [Thread-18655] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:04:58.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:04:58.470 [DEBUG] [Thread-18658] [transport.py] [_log()] starting thread (client mode): 0x173984f0
2025-11-12T16:04:58.471 [DEBUG] [Thread-18658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:04:58.485 [DEBUG] [Thread-18658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:04:58.485 [INFO] [Thread-18658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] client lang: <none>
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] server lang: <none>
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] kex follows: False
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] Compression: none
2025-11-12T16:04:58.493 [DEBUG] [Thread-18658] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:04:58.551 [DEBUG] [Thread-18658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:04:58.551 [DEBUG] [Thread-18658] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:04:58.551 [DEBUG] [Thread-18658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:04:58.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:04:58.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:04:58.608 [DEBUG] [Thread-18658] [transport.py] [_log()] userauth is OK
2025-11-12T16:04:58.608 [DEBUG] [Thread-18658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:04:58.608 [DEBUG] [Thread-18658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:04:58.608 [DEBUG] [Thread-18658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:04:58.608 [DEBUG] [Thread-18658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:04:58.623 [INFO] [Thread-18658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:04:58.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:04:58.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:04:59.501 [DEBUG] [Thread-18658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:04:59.501 [DEBUG] [Thread-18658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:04:59.549 [DEBUG] [Thread-18658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:04:59.549 [DEBUG] [Thread-18658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:04:59.558 [DEBUG] [Thread-18658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:04:59.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:04:59.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-11-12T16:04:59.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:04:59.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:04:59.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:04:59.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:04:59.595 [DEBUG] [Thread-18658] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:05:10.051 [DEBUG] [Thread-18660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:05:25.094 [DEBUG] [Thread-18661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:05:29.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:05:29.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:05:29.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-11-12T16:05:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 4, 56), 31.52, 12.07, 0.0, 39.93, 27.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:05:30.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:04:56
2025-11-12T16:05:30.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:05:30.607 [DEBUG] [Thread-18662] [transport.py] [_log()] starting thread (client mode): 0x17347730
2025-11-12T16:05:30.607 [DEBUG] [Thread-18662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:05:30.626 [DEBUG] [Thread-18662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:05:30.626 [INFO] [Thread-18662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:05:30.629 [DEBUG] [Thread-18662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] client lang: <none>
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] server lang: <none>
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] kex follows: False
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] Compression: none
2025-11-12T16:05:30.630 [DEBUG] [Thread-18662] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:05:30.642 [DEBUG] [Thread-18662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:05:30.642 [DEBUG] [Thread-18662] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:05:30.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:05:30.642 [DEBUG] [Thread-18662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:05:30.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:05:30.643 [DEBUG] [Thread-18662] [transport.py] [_log()] userauth is OK
2025-11-12T16:05:30.643 [DEBUG] [Thread-18662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:05:30.643 [DEBUG] [Thread-18662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:05:30.643 [DEBUG] [Thread-18662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:05:30.643 [DEBUG] [Thread-18662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:05:30.659 [INFO] [Thread-18662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:05:30.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:05:31.484 [DEBUG] [Thread-18662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:05:31.484 [DEBUG] [Thread-18662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:05:31.485 [DEBUG] [Thread-18662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:05:31.525 [DEBUG] [Thread-18662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:05:31.526 [DEBUG] [Thread-18662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:05:31.529 [DEBUG] [Thread-18662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:05:31.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:05:31.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:05:31.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:05:31.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:05:31.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:05:31.551 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:05:31.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:05:31.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:05:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:05:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.586892 -999.00  +26.80  29.47     18   +0.60 1 1 1 1 1   888    0 24.76 -81.28 ----- 29.5 29.5 290.4 38.2 29.8 -26.3 29.8 -24.2 29.9 -24.3 30.5 -24.7
2025-11-12T16:05:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:05:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:05:31.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.586892
2025-11-12T16:05:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:05:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:05:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:05:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:05:31.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:05:31.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:04:56', tmtdew=31.52, humidity=12.07, cloud=0.0, wind=39.93, temperature=27.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:05:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:05:31.554 [DEBUG] [Thread-18662] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:05:31.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:05:31.654 [DEBUG] [Thread-18665] [transport.py] [_log()] starting thread (client mode): 0x14922c80
2025-11-12T16:05:31.654 [DEBUG] [Thread-18665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:05:31.668 [DEBUG] [Thread-18665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:05:31.669 [INFO] [Thread-18665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:05:31.676 [DEBUG] [Thread-18665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] client lang: <none>
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] server lang: <none>
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] kex follows: False
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:05:31.677 [DEBUG] [Thread-18665] [transport.py] [_log()] Compression: none
2025-11-12T16:05:31.678 [DEBUG] [Thread-18665] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:05:31.736 [DEBUG] [Thread-18665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:05:31.737 [DEBUG] [Thread-18665] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:05:31.738 [DEBUG] [Thread-18665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:05:31.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:05:31.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:05:31.793 [DEBUG] [Thread-18665] [transport.py] [_log()] userauth is OK
2025-11-12T16:05:31.793 [DEBUG] [Thread-18665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:05:31.793 [DEBUG] [Thread-18665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:05:31.793 [DEBUG] [Thread-18665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:05:31.793 [DEBUG] [Thread-18665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:05:31.817 [INFO] [Thread-18665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:05:31.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:05:31.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:05:32.619 [DEBUG] [Thread-18665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:05:32.620 [DEBUG] [Thread-18665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:05:32.670 [DEBUG] [Thread-18665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:05:32.671 [DEBUG] [Thread-18665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:05:32.680 [DEBUG] [Thread-18665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:05:32.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:05:32.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-11-12T16:05:32.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-11-12T16:05:32.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:05:32.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:05:32.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:05:32.717 [DEBUG] [Thread-18665] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:05:39.808 [DEBUG] [Thread-18667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:05:40.125 [DEBUG] [Thread-18668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:05:41.726 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:05:41.727 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:05:55.174 [DEBUG] [Thread-18669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:06:02.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:06:02.738 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:06:02.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-11-12T16:06:03.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 5, 28), 31.73, 11.92, 0.0, 41.41, 27.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:06:03.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:05:28
2025-11-12T16:06:03.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:06:03.698 [DEBUG] [Thread-18670] [transport.py] [_log()] starting thread (client mode): 0x149a9930
2025-11-12T16:06:03.698 [DEBUG] [Thread-18670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:06:03.718 [DEBUG] [Thread-18670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:06:03.718 [INFO] [Thread-18670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:06:03.721 [DEBUG] [Thread-18670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] client lang: <none>
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] server lang: <none>
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] kex follows: False
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:06:03.722 [DEBUG] [Thread-18670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:06:03.723 [DEBUG] [Thread-18670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:06:03.723 [DEBUG] [Thread-18670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:06:03.723 [DEBUG] [Thread-18670] [transport.py] [_log()] Compression: none
2025-11-12T16:06:03.723 [DEBUG] [Thread-18670] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:06:03.741 [DEBUG] [Thread-18670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:06:03.742 [DEBUG] [Thread-18670] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:06:03.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:06:03.744 [DEBUG] [Thread-18670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:06:03.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:06:03.746 [DEBUG] [Thread-18670] [transport.py] [_log()] userauth is OK
2025-11-12T16:06:03.747 [DEBUG] [Thread-18670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:06:03.747 [DEBUG] [Thread-18670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:06:03.747 [DEBUG] [Thread-18670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:06:03.747 [DEBUG] [Thread-18670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:06:03.771 [INFO] [Thread-18670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:06:03.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:06:04.422 [DEBUG] [Thread-18670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:06:04.422 [DEBUG] [Thread-18670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:06:04.422 [DEBUG] [Thread-18670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:06:04.463 [DEBUG] [Thread-18670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:06:04.463 [DEBUG] [Thread-18670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:06:04.466 [DEBUG] [Thread-18670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:06:04.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:06:04.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:06:04.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:06:04.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:06:04.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:06:04.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:06:04.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:06:04.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:06:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:06:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.587240 -999.00  +26.90  34.30     18   +0.70 1 1 2 1 1   888    0 24.53 -84.42 ----- 34.3 34.3 279.4 40.7 29.9 -25.2 29.8 -24.6 29.8 -27.7 30.5 -23.8
2025-11-12T16:06:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:06:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:06:04.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.587240
2025-11-12T16:06:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:06:04.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:06:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:06:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:06:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:06:04.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:05:28', tmtdew=31.73, humidity=11.92, cloud=0.0, wind=41.41, temperature=27.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:05:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:06:04.492 [DEBUG] [Thread-18670] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:06:04.576 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:06:04.587 [DEBUG] [Thread-18673] [transport.py] [_log()] starting thread (client mode): 0x149a8e20
2025-11-12T16:06:04.587 [DEBUG] [Thread-18673] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:06:04.602 [DEBUG] [Thread-18673] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:06:04.603 [INFO] [Thread-18673] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] client lang: <none>
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] server lang: <none>
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] kex follows: False
2025-11-12T16:06:04.611 [DEBUG] [Thread-18673] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:06:04.612 [DEBUG] [Thread-18673] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:06:04.612 [DEBUG] [Thread-18673] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:06:04.612 [DEBUG] [Thread-18673] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:06:04.612 [DEBUG] [Thread-18673] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:06:04.612 [DEBUG] [Thread-18673] [transport.py] [_log()] Compression: none
2025-11-12T16:06:04.612 [DEBUG] [Thread-18673] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:06:04.669 [DEBUG] [Thread-18673] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:06:04.669 [DEBUG] [Thread-18673] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:06:04.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:06:04.670 [DEBUG] [Thread-18673] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:06:04.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:06:04.728 [DEBUG] [Thread-18673] [transport.py] [_log()] userauth is OK
2025-11-12T16:06:04.729 [DEBUG] [Thread-18673] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:06:04.729 [DEBUG] [Thread-18673] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:06:04.729 [DEBUG] [Thread-18673] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:06:04.729 [DEBUG] [Thread-18673] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:06:04.748 [INFO] [Thread-18673] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:06:04.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:06:04.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:06:05.619 [DEBUG] [Thread-18673] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:06:05.620 [DEBUG] [Thread-18673] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:06:05.667 [DEBUG] [Thread-18673] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:06:05.667 [DEBUG] [Thread-18673] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:06:05.676 [DEBUG] [Thread-18673] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:06:05.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:06:05.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-11-12T16:06:05.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:06:05.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:06:05.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:06:05.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:06:05.713 [DEBUG] [Thread-18673] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:06:10.218 [DEBUG] [Thread-18675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:06:25.278 [DEBUG] [Thread-18676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:06:35.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:06:35.727 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:06:35.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-11-12T16:06:36.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 6, 32), 31.38, 12.42, 0.0, 44.09, 27.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:06:36.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:06:32
2025-11-12T16:06:36.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:06:36.662 [DEBUG] [Thread-18677] [transport.py] [_log()] starting thread (client mode): 0x1493cd60
2025-11-12T16:06:36.662 [DEBUG] [Thread-18677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:06:36.681 [DEBUG] [Thread-18677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:06:36.681 [INFO] [Thread-18677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] client lang: <none>
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] server lang: <none>
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] kex follows: False
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:06:36.685 [DEBUG] [Thread-18677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:06:36.686 [DEBUG] [Thread-18677] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:06:36.686 [DEBUG] [Thread-18677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:06:36.686 [DEBUG] [Thread-18677] [transport.py] [_log()] Compression: none
2025-11-12T16:06:36.686 [DEBUG] [Thread-18677] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:06:36.695 [DEBUG] [Thread-18677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:06:36.695 [DEBUG] [Thread-18677] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:06:36.695 [DEBUG] [Thread-18677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:06:36.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:06:36.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:06:36.697 [DEBUG] [Thread-18677] [transport.py] [_log()] userauth is OK
2025-11-12T16:06:36.697 [DEBUG] [Thread-18677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:06:36.697 [DEBUG] [Thread-18677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:06:36.697 [DEBUG] [Thread-18677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:06:36.697 [DEBUG] [Thread-18677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:06:36.715 [INFO] [Thread-18677] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:06:36.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:06:37.511 [DEBUG] [Thread-18677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:06:37.511 [DEBUG] [Thread-18677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:06:37.512 [DEBUG] [Thread-18677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:06:37.552 [DEBUG] [Thread-18677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:06:37.552 [DEBUG] [Thread-18677] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:06:37.555 [DEBUG] [Thread-18677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:06:37.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:06:37.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:06:37.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:06:37.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:06:37.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:06:37.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:06:37.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:06:37.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:06:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:06:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.587587 -999.00  +26.70  35.32     18   +0.60 1 1 2 1 1   888    0 24.86 -69.55 ----- 35.3 35.3 294.2 48.6 29.8 -25.2 29.7 -25.4 29.8 -27.7 30.4 -25.3
2025-11-12T16:06:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:06:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:06:37.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.587587
2025-11-12T16:06:37.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:06:37.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:06:37.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:06:37.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:06:37.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:06:37.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:06:32', tmtdew=31.38, humidity=12.42, cloud=0.0, wind=44.09, temperature=27.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:06:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:06:37.581 [DEBUG] [Thread-18677] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:06:37.664 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:06:37.679 [DEBUG] [Thread-18680] [transport.py] [_log()] starting thread (client mode): 0x1493d7b0
2025-11-12T16:06:37.679 [DEBUG] [Thread-18680] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:06:37.696 [DEBUG] [Thread-18680] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:06:37.696 [INFO] [Thread-18680] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:06:37.705 [DEBUG] [Thread-18680] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:06:37.705 [DEBUG] [Thread-18680] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:06:37.705 [DEBUG] [Thread-18680] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:06:37.705 [DEBUG] [Thread-18680] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:06:37.705 [DEBUG] [Thread-18680] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:06:37.705 [DEBUG] [Thread-18680] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:06:37.706 [DEBUG] [Thread-18680] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:06:37.706 [DEBUG] [Thread-18680] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:06:37.706 [DEBUG] [Thread-18680] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:06:37.706 [DEBUG] [Thread-18680] [transport.py] [_log()] client lang: <none>
2025-11-12T16:06:37.706 [DEBUG] [Thread-18680] [transport.py] [_log()] server lang: <none>
2025-11-12T16:06:37.706 [DEBUG] [Thread-18680] [transport.py] [_log()] kex follows: False
2025-11-12T16:06:37.706 [DEBUG] [Thread-18680] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:06:37.706 [DEBUG] [Thread-18680] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:06:37.707 [DEBUG] [Thread-18680] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:06:37.707 [DEBUG] [Thread-18680] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:06:37.707 [DEBUG] [Thread-18680] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:06:37.707 [DEBUG] [Thread-18680] [transport.py] [_log()] Compression: none
2025-11-12T16:06:37.707 [DEBUG] [Thread-18680] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:06:37.764 [DEBUG] [Thread-18680] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:06:37.765 [DEBUG] [Thread-18680] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:06:37.766 [DEBUG] [Thread-18680] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:06:37.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:06:37.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:06:37.820 [DEBUG] [Thread-18680] [transport.py] [_log()] userauth is OK
2025-11-12T16:06:37.820 [DEBUG] [Thread-18680] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:06:37.820 [DEBUG] [Thread-18680] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:06:37.820 [DEBUG] [Thread-18680] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:06:37.820 [DEBUG] [Thread-18680] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:06:37.839 [INFO] [Thread-18680] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:06:37.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:06:37.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:06:38.657 [DEBUG] [Thread-18680] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:06:38.657 [DEBUG] [Thread-18680] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:06:38.706 [DEBUG] [Thread-18680] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:06:38.706 [DEBUG] [Thread-18680] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:06:38.716 [DEBUG] [Thread-18680] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:06:38.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:06:38.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-11-12T16:06:38.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-11-12T16:06:38.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:06:38.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:06:38.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:06:38.754 [DEBUG] [Thread-18680] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:06:39.842 [DEBUG] [Thread-18682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:06:40.306 [DEBUG] [Thread-18683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:06:41.869 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:06:41.870 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:06:55.360 [DEBUG] [Thread-18684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:07:08.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:07:08.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:07:08.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-11-12T16:07:09.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 7, 4), 31.14, 12.59, 0.0, 41.18, 26.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:07:09.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:07:04
2025-11-12T16:07:09.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:07:09.719 [DEBUG] [Thread-18685] [transport.py] [_log()] starting thread (client mode): 0x149aa020
2025-11-12T16:07:09.719 [DEBUG] [Thread-18685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:07:09.739 [DEBUG] [Thread-18685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:07:09.739 [INFO] [Thread-18685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] client lang: <none>
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] server lang: <none>
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] kex follows: False
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] Compression: none
2025-11-12T16:07:09.742 [DEBUG] [Thread-18685] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:07:09.759 [DEBUG] [Thread-18685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:07:09.760 [DEBUG] [Thread-18685] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:07:09.761 [DEBUG] [Thread-18685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:07:09.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:07:09.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:07:09.762 [DEBUG] [Thread-18685] [transport.py] [_log()] userauth is OK
2025-11-12T16:07:09.762 [DEBUG] [Thread-18685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:07:09.763 [DEBUG] [Thread-18685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:07:09.763 [DEBUG] [Thread-18685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:07:09.763 [DEBUG] [Thread-18685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:07:09.781 [INFO] [Thread-18685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:07:09.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:07:10.387 [DEBUG] [Thread-18685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:07:10.388 [DEBUG] [Thread-18685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:07:10.388 [DEBUG] [Thread-18685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:07:10.399 [DEBUG] [Thread-18687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:07:10.428 [DEBUG] [Thread-18685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:07:10.428 [DEBUG] [Thread-18685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:07:10.432 [DEBUG] [Thread-18685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:07:10.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:07:10.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:07:10.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:07:10.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:07:10.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:07:10.454 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:07:10.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:07:10.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:07:10.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:07:10.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.587934 -999.00  +26.50  28.26     18   +0.60 1 1 1 1 1   888    0 25.13 -60.08 ----- 28.3 28.3 287.4 37.7 29.7 -25.7 29.6 -24.6 29.8 -25.2 30.4 -24.8
2025-11-12T16:07:10.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:07:10.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:07:10.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.587934
2025-11-12T16:07:10.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:07:10.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:07:10.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:07:10.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:07:10.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:07:10.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:07:04', tmtdew=31.14, humidity=12.59, cloud=0.0, wind=41.18, temperature=26.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:06:37.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:07:10.457 [DEBUG] [Thread-18685] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:07:10.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:07:10.552 [DEBUG] [Thread-18689] [transport.py] [_log()] starting thread (client mode): 0x17361990
2025-11-12T16:07:10.552 [DEBUG] [Thread-18689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:07:10.569 [DEBUG] [Thread-18689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:07:10.569 [INFO] [Thread-18689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:07:10.576 [DEBUG] [Thread-18689] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:07:10.576 [DEBUG] [Thread-18689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] client lang: <none>
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] server lang: <none>
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] kex follows: False
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:07:10.577 [DEBUG] [Thread-18689] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:07:10.578 [DEBUG] [Thread-18689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:07:10.578 [DEBUG] [Thread-18689] [transport.py] [_log()] Compression: none
2025-11-12T16:07:10.578 [DEBUG] [Thread-18689] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:07:10.636 [DEBUG] [Thread-18689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:07:10.637 [DEBUG] [Thread-18689] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:07:10.638 [DEBUG] [Thread-18689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:07:10.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:07:10.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:07:10.692 [DEBUG] [Thread-18689] [transport.py] [_log()] userauth is OK
2025-11-12T16:07:10.693 [DEBUG] [Thread-18689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:07:10.693 [DEBUG] [Thread-18689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:07:10.693 [DEBUG] [Thread-18689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:07:10.693 [DEBUG] [Thread-18689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:07:10.718 [INFO] [Thread-18689] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:07:10.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:07:10.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:07:11.619 [DEBUG] [Thread-18689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:07:11.620 [DEBUG] [Thread-18689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:07:11.668 [DEBUG] [Thread-18689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:07:11.668 [DEBUG] [Thread-18689] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:07:11.678 [DEBUG] [Thread-18689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:07:11.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:07:11.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-11-12T16:07:11.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-11-12T16:07:11.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:07:11.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:07:11.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:07:11.717 [DEBUG] [Thread-18689] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:07:25.438 [DEBUG] [Thread-18691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:07:39.877 [DEBUG] [Thread-18692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:07:40.500 [DEBUG] [Thread-18693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:07:41.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:07:41.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:07:41.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-11-12T16:07:42.011 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:07:42.012 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:07:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 7, 36), 30.78, 12.69, 0.0, 39.81, 26.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:07:42.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:07:36
2025-11-12T16:07:42.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:07:42.675 [DEBUG] [Thread-18694] [transport.py] [_log()] starting thread (client mode): 0x149227a0
2025-11-12T16:07:42.675 [DEBUG] [Thread-18694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:07:42.696 [DEBUG] [Thread-18694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:07:42.696 [INFO] [Thread-18694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] client lang: <none>
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] server lang: <none>
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] kex follows: False
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] Compression: none
2025-11-12T16:07:42.699 [DEBUG] [Thread-18694] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:07:42.717 [DEBUG] [Thread-18694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:07:42.717 [DEBUG] [Thread-18694] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:07:42.717 [DEBUG] [Thread-18694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:07:42.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:07:42.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:07:42.718 [DEBUG] [Thread-18694] [transport.py] [_log()] userauth is OK
2025-11-12T16:07:42.718 [DEBUG] [Thread-18694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:07:42.718 [DEBUG] [Thread-18694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:07:42.718 [DEBUG] [Thread-18694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:07:42.718 [DEBUG] [Thread-18694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:07:42.727 [INFO] [Thread-18694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:07:42.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:07:43.543 [DEBUG] [Thread-18694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:07:43.543 [DEBUG] [Thread-18694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:07:43.543 [DEBUG] [Thread-18694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:07:43.584 [DEBUG] [Thread-18694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:07:43.584 [DEBUG] [Thread-18694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:07:43.586 [DEBUG] [Thread-18694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:07:43.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:07:43.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:07:43.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:07:43.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:07:43.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:07:43.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:07:43.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:07:43.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:07:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:07:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.588281 -999.00  +26.40  35.06     18   +0.60 1 1 2 1 1   888    0 24.62 -58.22 ----- 35.1 35.1 286.8 40.8 29.7 -25.8 29.6 -24.7 29.8 -26.0 30.3 -24.8
2025-11-12T16:07:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:07:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:07:43.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.588281
2025-11-12T16:07:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:07:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:07:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:07:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:07:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:07:43.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:07:36', tmtdew=30.78, humidity=12.69, cloud=0.0, wind=39.81, temperature=26.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:07:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:07:43.605 [DEBUG] [Thread-18694] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:07:43.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:07:43.691 [DEBUG] [Thread-18697] [transport.py] [_log()] starting thread (client mode): 0x17362980
2025-11-12T16:07:43.691 [DEBUG] [Thread-18697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:07:43.706 [DEBUG] [Thread-18697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:07:43.706 [INFO] [Thread-18697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] client lang: <none>
2025-11-12T16:07:43.713 [DEBUG] [Thread-18697] [transport.py] [_log()] server lang: <none>
2025-11-12T16:07:43.714 [DEBUG] [Thread-18697] [transport.py] [_log()] kex follows: False
2025-11-12T16:07:43.714 [DEBUG] [Thread-18697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:07:43.714 [DEBUG] [Thread-18697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:07:43.714 [DEBUG] [Thread-18697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:07:43.714 [DEBUG] [Thread-18697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:07:43.714 [DEBUG] [Thread-18697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:07:43.714 [DEBUG] [Thread-18697] [transport.py] [_log()] Compression: none
2025-11-12T16:07:43.714 [DEBUG] [Thread-18697] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:07:43.775 [DEBUG] [Thread-18697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:07:43.775 [DEBUG] [Thread-18697] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:07:43.775 [DEBUG] [Thread-18697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:07:43.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:07:43.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:07:43.831 [DEBUG] [Thread-18697] [transport.py] [_log()] userauth is OK
2025-11-12T16:07:43.831 [DEBUG] [Thread-18697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:07:43.832 [DEBUG] [Thread-18697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:07:43.832 [DEBUG] [Thread-18697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:07:43.832 [DEBUG] [Thread-18697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:07:43.848 [INFO] [Thread-18697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:07:43.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:07:43.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:07:44.699 [DEBUG] [Thread-18697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:07:44.699 [DEBUG] [Thread-18697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:07:44.747 [DEBUG] [Thread-18697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:07:44.747 [DEBUG] [Thread-18697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:07:44.755 [DEBUG] [Thread-18697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:07:44.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:07:44.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-11-12T16:07:44.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-11-12T16:07:44.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:07:44.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:07:44.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:07:44.786 [DEBUG] [Thread-18697] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:07:55.532 [DEBUG] [Thread-18699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:08:10.594 [DEBUG] [Thread-18700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:08:14.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:08:14.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:08:14.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-11-12T16:08:15.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 8, 8), 30.69, 12.75, 0.0, 40.09, 26.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:08:15.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:08:08
2025-11-12T16:08:15.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:08:15.710 [DEBUG] [Thread-18701] [transport.py] [_log()] starting thread (client mode): 0x149202e0
2025-11-12T16:08:15.711 [DEBUG] [Thread-18701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:08:15.732 [DEBUG] [Thread-18701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:08:15.732 [INFO] [Thread-18701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] client lang: <none>
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] server lang: <none>
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] kex follows: False
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] Compression: none
2025-11-12T16:08:15.735 [DEBUG] [Thread-18701] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:08:15.754 [DEBUG] [Thread-18701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:08:15.754 [DEBUG] [Thread-18701] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:08:15.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:08:15.755 [DEBUG] [Thread-18701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:08:15.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:08:15.757 [DEBUG] [Thread-18701] [transport.py] [_log()] userauth is OK
2025-11-12T16:08:15.757 [DEBUG] [Thread-18701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:08:15.757 [DEBUG] [Thread-18701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:08:15.757 [DEBUG] [Thread-18701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:08:15.758 [DEBUG] [Thread-18701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:08:15.792 [INFO] [Thread-18701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:08:15.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:08:16.393 [DEBUG] [Thread-18701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:08:16.393 [DEBUG] [Thread-18701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:08:16.394 [DEBUG] [Thread-18701] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:08:16.435 [DEBUG] [Thread-18701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:08:16.435 [DEBUG] [Thread-18701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:08:16.438 [DEBUG] [Thread-18701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:08:16.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:08:16.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:08:16.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:08:16.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:08:16.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:08:16.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:08:16.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:08:16.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:08:16.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:08:16.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.588629 -999.00  +26.20  37.27     18   +0.60 1 1 2 1 1   888    0 25.24 -60.08 ----- 37.3 37.3 293.0 42.0 29.6 -26.1 29.5 -24.8 29.7 -25.1 30.2 -25.1
2025-11-12T16:08:16.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:08:16.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:08:16.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.588629
2025-11-12T16:08:16.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:08:16.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:08:16.466 [DEBUG] [Thread-18701] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:08:16.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:08:16.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:08:16.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:08:16.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:08:08', tmtdew=30.69, humidity=12.75, cloud=0.0, wind=40.09, temperature=26.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:07:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:08:16.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:08:16.559 [DEBUG] [Thread-18704] [transport.py] [_log()] starting thread (client mode): 0x173bf640
2025-11-12T16:08:16.560 [DEBUG] [Thread-18704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:08:16.575 [DEBUG] [Thread-18704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:08:16.576 [INFO] [Thread-18704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] client lang: <none>
2025-11-12T16:08:16.583 [DEBUG] [Thread-18704] [transport.py] [_log()] server lang: <none>
2025-11-12T16:08:16.584 [DEBUG] [Thread-18704] [transport.py] [_log()] kex follows: False
2025-11-12T16:08:16.584 [DEBUG] [Thread-18704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:08:16.584 [DEBUG] [Thread-18704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:08:16.584 [DEBUG] [Thread-18704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:08:16.584 [DEBUG] [Thread-18704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:08:16.584 [DEBUG] [Thread-18704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:08:16.584 [DEBUG] [Thread-18704] [transport.py] [_log()] Compression: none
2025-11-12T16:08:16.584 [DEBUG] [Thread-18704] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:08:16.640 [DEBUG] [Thread-18704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:08:16.641 [DEBUG] [Thread-18704] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:08:16.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:08:16.642 [DEBUG] [Thread-18704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:08:16.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:08:16.696 [DEBUG] [Thread-18704] [transport.py] [_log()] userauth is OK
2025-11-12T16:08:16.697 [DEBUG] [Thread-18704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:08:16.697 [DEBUG] [Thread-18704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:08:16.697 [DEBUG] [Thread-18704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:08:16.697 [DEBUG] [Thread-18704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:08:16.723 [INFO] [Thread-18704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:08:16.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:08:16.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:08:17.565 [DEBUG] [Thread-18704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:08:17.566 [DEBUG] [Thread-18704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:08:17.613 [DEBUG] [Thread-18704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:08:17.613 [DEBUG] [Thread-18704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:08:17.622 [DEBUG] [Thread-18704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:08:17.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:08:17.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:08:17.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-11-12T16:08:17.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:08:17.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:08:17.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:08:17.658 [DEBUG] [Thread-18704] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:08:25.626 [DEBUG] [Thread-18706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:08:39.911 [DEBUG] [Thread-18707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:08:40.675 [DEBUG] [Thread-18708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:08:42.152 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:08:42.153 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:08:47.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:08:47.675 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:08:47.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-11-12T16:08:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 8, 40), 30.98, 12.77, 0.0, 36.29, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:08:48.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:08:40
2025-11-12T16:08:48.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:08:48.580 [DEBUG] [Thread-18709] [transport.py] [_log()] starting thread (client mode): 0x14922d70
2025-11-12T16:08:48.580 [DEBUG] [Thread-18709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:08:48.601 [DEBUG] [Thread-18709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:08:48.601 [INFO] [Thread-18709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] client lang: <none>
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] server lang: <none>
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] kex follows: False
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] Compression: none
2025-11-12T16:08:48.604 [DEBUG] [Thread-18709] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:08:48.623 [DEBUG] [Thread-18709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:08:48.623 [DEBUG] [Thread-18709] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:08:48.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:08:48.624 [DEBUG] [Thread-18709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:08:48.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:08:48.626 [DEBUG] [Thread-18709] [transport.py] [_log()] userauth is OK
2025-11-12T16:08:48.626 [DEBUG] [Thread-18709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:08:48.627 [DEBUG] [Thread-18709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:08:48.627 [DEBUG] [Thread-18709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:08:48.627 [DEBUG] [Thread-18709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:08:48.651 [INFO] [Thread-18709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:08:48.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:08:49.433 [DEBUG] [Thread-18709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:08:49.433 [DEBUG] [Thread-18709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:08:49.433 [DEBUG] [Thread-18709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:08:49.474 [DEBUG] [Thread-18709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:08:49.474 [DEBUG] [Thread-18709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:08:49.477 [DEBUG] [Thread-18709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:08:49.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:08:49.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:08:49.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:08:49.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:08:49.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:08:49.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:08:49.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:08:49.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:08:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:08:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.588976 -999.00  +26.20  31.57     18   +0.70 1 1 2 1 1   888    0 24.43 -63.94 ----- 31.6 31.6 298.4 43.6 29.6 -25.9 29.5 -24.7 29.7 -25.2 30.1 -24.5
2025-11-12T16:08:49.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:08:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:08:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.588976
2025-11-12T16:08:49.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:08:49.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:08:49.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:08:49.503 [DEBUG] [Thread-18709] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:08:49.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:08:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:08:49.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:08:40', tmtdew=30.98, humidity=12.77, cloud=0.0, wind=36.29, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:08:07.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:08:49.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:08:49.599 [DEBUG] [Thread-18712] [transport.py] [_log()] starting thread (client mode): 0x17346830
2025-11-12T16:08:49.599 [DEBUG] [Thread-18712] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:08:49.614 [DEBUG] [Thread-18712] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:08:49.614 [INFO] [Thread-18712] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:08:49.621 [DEBUG] [Thread-18712] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:08:49.621 [DEBUG] [Thread-18712] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] client lang: <none>
2025-11-12T16:08:49.622 [DEBUG] [Thread-18712] [transport.py] [_log()] server lang: <none>
2025-11-12T16:08:49.623 [DEBUG] [Thread-18712] [transport.py] [_log()] kex follows: False
2025-11-12T16:08:49.623 [DEBUG] [Thread-18712] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:08:49.623 [DEBUG] [Thread-18712] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:08:49.623 [DEBUG] [Thread-18712] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:08:49.623 [DEBUG] [Thread-18712] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:08:49.623 [DEBUG] [Thread-18712] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:08:49.623 [DEBUG] [Thread-18712] [transport.py] [_log()] Compression: none
2025-11-12T16:08:49.624 [DEBUG] [Thread-18712] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:08:49.681 [DEBUG] [Thread-18712] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:08:49.682 [DEBUG] [Thread-18712] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:08:49.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:08:49.683 [DEBUG] [Thread-18712] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:08:49.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:08:49.740 [DEBUG] [Thread-18712] [transport.py] [_log()] userauth is OK
2025-11-12T16:08:49.741 [DEBUG] [Thread-18712] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:08:49.741 [DEBUG] [Thread-18712] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:08:49.741 [DEBUG] [Thread-18712] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:08:49.741 [DEBUG] [Thread-18712] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:08:49.759 [INFO] [Thread-18712] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:08:49.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:08:49.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:08:50.573 [DEBUG] [Thread-18712] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:08:50.573 [DEBUG] [Thread-18712] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:08:50.621 [DEBUG] [Thread-18712] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:08:50.621 [DEBUG] [Thread-18712] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:08:50.630 [DEBUG] [Thread-18712] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:08:50.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:08:50.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-11-12T16:08:50.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-11-12T16:08:50.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:08:50.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:08:50.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:08:50.666 [DEBUG] [Thread-18712] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:08:55.711 [DEBUG] [Thread-18714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:09:10.751 [DEBUG] [Thread-18715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:09:20.689 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:09:20.689 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:09:20.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-11-12T16:09:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 9, 12), 31.15, 12.64, 0.0, 37.49, 27.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:09:21.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:09:12
2025-11-12T16:09:21.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:09:21.605 [DEBUG] [Thread-18716] [transport.py] [_log()] starting thread (client mode): 0x173e87c0
2025-11-12T16:09:21.606 [DEBUG] [Thread-18716] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:09:21.625 [DEBUG] [Thread-18716] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:09:21.626 [INFO] [Thread-18716] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:09:21.629 [DEBUG] [Thread-18716] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:09:21.629 [DEBUG] [Thread-18716] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:09:21.629 [DEBUG] [Thread-18716] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:09:21.629 [DEBUG] [Thread-18716] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:09:21.629 [DEBUG] [Thread-18716] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:09:21.629 [DEBUG] [Thread-18716] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:09:21.629 [DEBUG] [Thread-18716] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] client lang: <none>
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] server lang: <none>
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] kex follows: False
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] Compression: none
2025-11-12T16:09:21.630 [DEBUG] [Thread-18716] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:09:21.651 [DEBUG] [Thread-18716] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:09:21.652 [DEBUG] [Thread-18716] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:09:21.652 [DEBUG] [Thread-18716] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:09:21.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:09:21.653 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:09:21.654 [DEBUG] [Thread-18716] [transport.py] [_log()] userauth is OK
2025-11-12T16:09:21.655 [DEBUG] [Thread-18716] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:09:21.655 [DEBUG] [Thread-18716] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:09:21.655 [DEBUG] [Thread-18716] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:09:21.655 [DEBUG] [Thread-18716] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:09:21.680 [INFO] [Thread-18716] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:09:21.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:09:22.283 [DEBUG] [Thread-18716] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:09:22.284 [DEBUG] [Thread-18716] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:09:22.284 [DEBUG] [Thread-18716] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:09:22.325 [DEBUG] [Thread-18716] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:09:22.325 [DEBUG] [Thread-18716] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:09:22.328 [DEBUG] [Thread-18716] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:09:22.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:09:22.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:09:22.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:09:22.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:09:22.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:09:22.353 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:09:22.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:09:22.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:09:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:09:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.589323 -999.00  +26.60  33.29     18   +0.90 1 1 2 1 1   888    0 24.54 -59.87 ----- 33.3 33.3 290.3 39.5 29.6 -25.1 29.5 -23.8 29.7 -23.5 30.1 -24.0
2025-11-12T16:09:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:09:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:09:22.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.589323
2025-11-12T16:09:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:09:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:09:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:09:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:09:22.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:09:22.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:09:12', tmtdew=31.15, humidity=12.64, cloud=0.0, wind=37.49, temperature=27.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:08:37.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:09:22.356 [DEBUG] [Thread-18716] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:09:22.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:09:22.453 [DEBUG] [Thread-18719] [transport.py] [_log()] starting thread (client mode): 0x173e8e80
2025-11-12T16:09:22.453 [DEBUG] [Thread-18719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:09:22.467 [DEBUG] [Thread-18719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:09:22.467 [INFO] [Thread-18719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:09:22.475 [DEBUG] [Thread-18719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:09:22.475 [DEBUG] [Thread-18719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:09:22.475 [DEBUG] [Thread-18719] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:09:22.475 [DEBUG] [Thread-18719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] client lang: <none>
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] server lang: <none>
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] kex follows: False
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:09:22.476 [DEBUG] [Thread-18719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:09:22.477 [DEBUG] [Thread-18719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:09:22.477 [DEBUG] [Thread-18719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:09:22.477 [DEBUG] [Thread-18719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:09:22.477 [DEBUG] [Thread-18719] [transport.py] [_log()] Compression: none
2025-11-12T16:09:22.477 [DEBUG] [Thread-18719] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:09:22.536 [DEBUG] [Thread-18719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:09:22.536 [DEBUG] [Thread-18719] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:09:22.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:09:22.537 [DEBUG] [Thread-18719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:09:22.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:09:22.592 [DEBUG] [Thread-18719] [transport.py] [_log()] userauth is OK
2025-11-12T16:09:22.592 [DEBUG] [Thread-18719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:09:22.593 [DEBUG] [Thread-18719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:09:22.593 [DEBUG] [Thread-18719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:09:22.593 [DEBUG] [Thread-18719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:09:22.618 [INFO] [Thread-18719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:09:22.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:09:22.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:09:23.433 [DEBUG] [Thread-18719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:09:23.433 [DEBUG] [Thread-18719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:09:23.480 [DEBUG] [Thread-18719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:09:23.481 [DEBUG] [Thread-18719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:09:23.490 [DEBUG] [Thread-18719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:09:23.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:09:23.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-11-12T16:09:23.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-11-12T16:09:23.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:09:23.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:09:23.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:09:23.525 [DEBUG] [Thread-18719] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:09:25.788 [DEBUG] [Thread-18721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:09:39.939 [DEBUG] [Thread-18722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:09:40.837 [DEBUG] [Thread-18723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:09:42.293 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:09:42.294 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:09:53.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:09:53.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:09:53.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-11-12T16:09:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 9, 44), 31.06, 12.62, 0.0, 40.46, 26.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:09:54.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:09:44
2025-11-12T16:09:54.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:09:54.482 [DEBUG] [Thread-18724] [transport.py] [_log()] starting thread (client mode): 0x17361ba0
2025-11-12T16:09:54.482 [DEBUG] [Thread-18724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:09:54.502 [DEBUG] [Thread-18724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:09:54.502 [INFO] [Thread-18724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:09:54.505 [DEBUG] [Thread-18724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:09:54.505 [DEBUG] [Thread-18724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] client lang: <none>
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] server lang: <none>
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] kex follows: False
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:09:54.506 [DEBUG] [Thread-18724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:09:54.507 [DEBUG] [Thread-18724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:09:54.507 [DEBUG] [Thread-18724] [transport.py] [_log()] Compression: none
2025-11-12T16:09:54.507 [DEBUG] [Thread-18724] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:09:54.526 [DEBUG] [Thread-18724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:09:54.526 [DEBUG] [Thread-18724] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:09:54.527 [DEBUG] [Thread-18724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:09:54.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:09:54.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:09:54.529 [DEBUG] [Thread-18724] [transport.py] [_log()] userauth is OK
2025-11-12T16:09:54.529 [DEBUG] [Thread-18724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:09:54.529 [DEBUG] [Thread-18724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:09:54.529 [DEBUG] [Thread-18724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:09:54.529 [DEBUG] [Thread-18724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:09:54.546 [INFO] [Thread-18724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:09:54.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:09:55.317 [DEBUG] [Thread-18724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:09:55.317 [DEBUG] [Thread-18724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:09:55.317 [DEBUG] [Thread-18724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:09:55.358 [DEBUG] [Thread-18724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:09:55.358 [DEBUG] [Thread-18724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:09:55.361 [DEBUG] [Thread-18724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:09:55.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:09:55.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:09:55.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:09:55.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:09:55.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:09:55.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:09:55.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:09:55.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:09:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:09:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.589670 -999.00  +26.90  38.08     18   +0.80 1 1 2 1 1   888    0 25.04 -49.53 ----- 38.1 38.1 301.0 45.0 29.7 -25.5 29.6 -24.0 29.8 -23.9 30.2 -23.9
2025-11-12T16:09:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:09:55.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:09:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.589670
2025-11-12T16:09:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:09:55.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:09:55.385 [DEBUG] [Thread-18724] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:09:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:09:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:09:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:09:55.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:09:44', tmtdew=31.06, humidity=12.62, cloud=0.0, wind=40.46, temperature=26.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:09:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:09:55.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:09:55.477 [DEBUG] [Thread-18727] [transport.py] [_log()] starting thread (client mode): 0x149a94e0
2025-11-12T16:09:55.477 [DEBUG] [Thread-18727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:09:55.491 [DEBUG] [Thread-18727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:09:55.492 [INFO] [Thread-18727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:09:55.499 [DEBUG] [Thread-18727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:09:55.499 [DEBUG] [Thread-18727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:09:55.499 [DEBUG] [Thread-18727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:09:55.499 [DEBUG] [Thread-18727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:09:55.499 [DEBUG] [Thread-18727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] client lang: <none>
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] server lang: <none>
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] kex follows: False
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] Compression: none
2025-11-12T16:09:55.500 [DEBUG] [Thread-18727] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:09:55.555 [DEBUG] [Thread-18727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:09:55.556 [DEBUG] [Thread-18727] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:09:55.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:09:55.557 [DEBUG] [Thread-18727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:09:55.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:09:55.613 [DEBUG] [Thread-18727] [transport.py] [_log()] userauth is OK
2025-11-12T16:09:55.613 [DEBUG] [Thread-18727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:09:55.614 [DEBUG] [Thread-18727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:09:55.614 [DEBUG] [Thread-18727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:09:55.614 [DEBUG] [Thread-18727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:09:55.634 [INFO] [Thread-18727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:09:55.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:09:55.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:09:55.864 [DEBUG] [Thread-18729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:09:56.467 [DEBUG] [Thread-18727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:09:56.467 [DEBUG] [Thread-18727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:09:56.516 [DEBUG] [Thread-18727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:09:56.517 [DEBUG] [Thread-18727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:09:56.524 [DEBUG] [Thread-18727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:09:56.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:09:56.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-11-12T16:09:56.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-11-12T16:09:56.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:09:56.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:09:56.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:09:56.559 [DEBUG] [Thread-18727] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:10:10.919 [DEBUG] [Thread-18730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:10:25.956 [DEBUG] [Thread-18731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:10:26.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:10:26.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:10:26.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-11-12T16:10:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 10, 16), 31.01, 12.69, 0.0, 37.07, 26.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:10:27.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:10:16
2025-11-12T16:10:27.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:10:27.483 [DEBUG] [Thread-18732] [transport.py] [_log()] starting thread (client mode): 0x1739bbe0
2025-11-12T16:10:27.483 [DEBUG] [Thread-18732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:10:27.502 [DEBUG] [Thread-18732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:10:27.503 [INFO] [Thread-18732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] client lang: <none>
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] server lang: <none>
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] kex follows: False
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] Compression: none
2025-11-12T16:10:27.506 [DEBUG] [Thread-18732] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:10:27.522 [DEBUG] [Thread-18732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:10:27.523 [DEBUG] [Thread-18732] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:10:27.523 [DEBUG] [Thread-18732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:10:27.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:10:27.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:10:27.565 [DEBUG] [Thread-18732] [transport.py] [_log()] userauth is OK
2025-11-12T16:10:27.565 [DEBUG] [Thread-18732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:10:27.565 [DEBUG] [Thread-18732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:10:27.565 [DEBUG] [Thread-18732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:10:27.565 [DEBUG] [Thread-18732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:10:27.585 [INFO] [Thread-18732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:10:27.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:10:28.225 [DEBUG] [Thread-18732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:10:28.225 [DEBUG] [Thread-18732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:10:28.226 [DEBUG] [Thread-18732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:10:28.265 [DEBUG] [Thread-18732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:10:28.266 [DEBUG] [Thread-18732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:10:28.269 [DEBUG] [Thread-18732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:10:28.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:10:28.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:10:28.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:10:28.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:10:28.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:10:28.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:10:28.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:10:28.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:10:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:10:28.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.590364 -999.00  +26.90  27.89     18   +0.80 1 2 1 1 1   888    0 25.02 -39.10 ----- 27.9 27.9 300.0 36.8 29.9 -24.7 29.8 -23.3 30.1 -21.7 30.5 -22.9
2025-11-12T16:10:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:10:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:10:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.590364
2025-11-12T16:10:28.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:10:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:10:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:10:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:10:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:10:28.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:10:16', tmtdew=31.01, humidity=12.69, cloud=0.0, wind=37.07, temperature=26.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:10:07.450', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:10:28.294 [DEBUG] [Thread-18732] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:10:28.389 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:10:28.401 [DEBUG] [Thread-18735] [transport.py] [_log()] starting thread (client mode): 0x173619f0
2025-11-12T16:10:28.401 [DEBUG] [Thread-18735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:10:28.416 [DEBUG] [Thread-18735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:10:28.416 [INFO] [Thread-18735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:10:28.424 [DEBUG] [Thread-18735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:10:28.424 [DEBUG] [Thread-18735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:10:28.424 [DEBUG] [Thread-18735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:10:28.424 [DEBUG] [Thread-18735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] client lang: <none>
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] server lang: <none>
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] kex follows: False
2025-11-12T16:10:28.425 [DEBUG] [Thread-18735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:10:28.426 [DEBUG] [Thread-18735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:10:28.426 [DEBUG] [Thread-18735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:10:28.426 [DEBUG] [Thread-18735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:10:28.426 [DEBUG] [Thread-18735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:10:28.426 [DEBUG] [Thread-18735] [transport.py] [_log()] Compression: none
2025-11-12T16:10:28.426 [DEBUG] [Thread-18735] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:10:28.487 [DEBUG] [Thread-18735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:10:28.487 [DEBUG] [Thread-18735] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:10:28.488 [DEBUG] [Thread-18735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:10:28.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:10:28.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:10:28.544 [DEBUG] [Thread-18735] [transport.py] [_log()] userauth is OK
2025-11-12T16:10:28.544 [DEBUG] [Thread-18735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:10:28.544 [DEBUG] [Thread-18735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:10:28.544 [DEBUG] [Thread-18735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:10:28.544 [DEBUG] [Thread-18735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:10:28.564 [INFO] [Thread-18735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:10:28.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:10:28.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:10:29.402 [DEBUG] [Thread-18735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:10:29.402 [DEBUG] [Thread-18735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:10:29.450 [DEBUG] [Thread-18735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:10:29.450 [DEBUG] [Thread-18735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:10:29.460 [DEBUG] [Thread-18735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:10:29.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:10:29.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-11-12T16:10:29.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:10:29.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:10:29.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:10:29.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:10:29.495 [DEBUG] [Thread-18735] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:10:39.979 [DEBUG] [Thread-18737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:10:40.996 [DEBUG] [Thread-18738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:10:42.435 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:10:42.436 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:10:56.056 [DEBUG] [Thread-18739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:10:59.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:10:59.494 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:10:59.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:11:00.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 10, 48), 31.14, 12.94, 0.0, 34.57, 27.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:11:00.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:10:48
2025-11-12T16:11:00.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:11:00.443 [DEBUG] [Thread-18740] [transport.py] [_log()] starting thread (client mode): 0x173e8b20
2025-11-12T16:11:00.443 [DEBUG] [Thread-18740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:11:00.464 [DEBUG] [Thread-18740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:11:00.464 [INFO] [Thread-18740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] client lang: <none>
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] server lang: <none>
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] kex follows: False
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] Compression: none
2025-11-12T16:11:00.467 [DEBUG] [Thread-18740] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:11:00.482 [DEBUG] [Thread-18740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:11:00.482 [DEBUG] [Thread-18740] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:11:00.483 [DEBUG] [Thread-18740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:11:00.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:11:00.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:11:00.483 [DEBUG] [Thread-18740] [transport.py] [_log()] userauth is OK
2025-11-12T16:11:00.483 [DEBUG] [Thread-18740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:11:00.483 [DEBUG] [Thread-18740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:11:00.483 [DEBUG] [Thread-18740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:11:00.483 [DEBUG] [Thread-18740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:11:00.492 [INFO] [Thread-18740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:11:00.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:11:01.319 [DEBUG] [Thread-18740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:11:01.319 [DEBUG] [Thread-18740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:11:01.320 [DEBUG] [Thread-18740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:11:01.360 [DEBUG] [Thread-18740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:11:01.361 [DEBUG] [Thread-18740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:11:01.364 [DEBUG] [Thread-18740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:11:01.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:11:01.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:11:01.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:11:01.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:11:01.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:11:01.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:11:01.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:11:01.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:11:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:11:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.590712 -999.00  +26.90  32.76     18   +0.80 1 2 2 1 1   888    0 25.02 -38.53 ----- 32.8 32.8 292.4 38.2 30.0 -24.3 29.9 -23.4 30.2 -22.2 30.6 -22.6
2025-11-12T16:11:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:11:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:11:01.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.590712
2025-11-12T16:11:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:11:01.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:11:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:11:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:11:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:11:01.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:10:48', tmtdew=31.14, humidity=12.94, cloud=0.0, wind=34.57, temperature=27.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:10:37.517', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:11:01.390 [DEBUG] [Thread-18740] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:11:01.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:11:01.486 [DEBUG] [Thread-18743] [transport.py] [_log()] starting thread (client mode): 0x1493e110
2025-11-12T16:11:01.487 [DEBUG] [Thread-18743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:11:01.501 [DEBUG] [Thread-18743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:11:01.501 [INFO] [Thread-18743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:11:01.508 [DEBUG] [Thread-18743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] client lang: <none>
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] server lang: <none>
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] kex follows: False
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:11:01.509 [DEBUG] [Thread-18743] [transport.py] [_log()] Compression: none
2025-11-12T16:11:01.510 [DEBUG] [Thread-18743] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:11:01.572 [DEBUG] [Thread-18743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:11:01.573 [DEBUG] [Thread-18743] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:11:01.573 [DEBUG] [Thread-18743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:11:01.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:11:01.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:11:01.628 [DEBUG] [Thread-18743] [transport.py] [_log()] userauth is OK
2025-11-12T16:11:01.628 [DEBUG] [Thread-18743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:11:01.629 [DEBUG] [Thread-18743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:11:01.629 [DEBUG] [Thread-18743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:11:01.629 [DEBUG] [Thread-18743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:11:01.647 [INFO] [Thread-18743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:11:01.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:11:01.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:11:02.490 [DEBUG] [Thread-18743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:11:02.490 [DEBUG] [Thread-18743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:11:02.538 [DEBUG] [Thread-18743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:11:02.538 [DEBUG] [Thread-18743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:11:02.548 [DEBUG] [Thread-18743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:11:02.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:11:02.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-11-12T16:11:02.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:11:02.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:11:02.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:11:02.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:11:02.586 [DEBUG] [Thread-18743] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:11:11.090 [DEBUG] [Thread-18745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:11:26.145 [DEBUG] [Thread-18746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:11:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:11:32.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:11:32.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-11-12T16:11:33.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 11, 20), 31.05, 13.01, 0.0, 33.26, 27.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:11:33.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:11:20
2025-11-12T16:11:33.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:11:33.505 [DEBUG] [Thread-18747] [transport.py] [_log()] starting thread (client mode): 0x173e9b70
2025-11-12T16:11:33.505 [DEBUG] [Thread-18747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:11:33.525 [DEBUG] [Thread-18747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:11:33.525 [INFO] [Thread-18747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] client lang: <none>
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] server lang: <none>
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] kex follows: False
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] Compression: none
2025-11-12T16:11:33.529 [DEBUG] [Thread-18747] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:11:33.547 [DEBUG] [Thread-18747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:11:33.547 [DEBUG] [Thread-18747] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:11:33.547 [DEBUG] [Thread-18747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:11:33.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:11:33.548 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:11:33.549 [DEBUG] [Thread-18747] [transport.py] [_log()] userauth is OK
2025-11-12T16:11:33.550 [DEBUG] [Thread-18747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:11:33.550 [DEBUG] [Thread-18747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:11:33.550 [DEBUG] [Thread-18747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:11:33.550 [DEBUG] [Thread-18747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:11:33.564 [INFO] [Thread-18747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:11:33.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:11:34.199 [DEBUG] [Thread-18747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:11:34.200 [DEBUG] [Thread-18747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:11:34.200 [DEBUG] [Thread-18747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:11:34.240 [DEBUG] [Thread-18747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:11:34.240 [DEBUG] [Thread-18747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:11:34.243 [DEBUG] [Thread-18747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:11:34.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:11:34.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:11:34.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:11:34.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:11:34.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:11:34.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:11:34.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:11:34.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:11:34.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.591059 -999.00  +26.30  29.48     18   +0.70 1 1 1 1 1   888    0 24.53 -38.29 ----- 29.5 29.5 298.4 43.0 29.9 -25.6 29.8 -25.3 30.3 -23.9 30.7 -24.0
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.591059
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:11:34.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:11:20', tmtdew=31.05, humidity=13.01, cloud=0.0, wind=33.26, temperature=27.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:11:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:11:34.264 [DEBUG] [Thread-18747] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:11:34.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:11:34.357 [DEBUG] [Thread-18750] [transport.py] [_log()] starting thread (client mode): 0x173e9ff0
2025-11-12T16:11:34.358 [DEBUG] [Thread-18750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:11:34.372 [DEBUG] [Thread-18750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:11:34.372 [INFO] [Thread-18750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] client lang: <none>
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] server lang: <none>
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] kex follows: False
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] Compression: none
2025-11-12T16:11:34.380 [DEBUG] [Thread-18750] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:11:34.438 [DEBUG] [Thread-18750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:11:34.438 [DEBUG] [Thread-18750] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:11:34.438 [DEBUG] [Thread-18750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:11:34.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:11:34.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:11:34.495 [DEBUG] [Thread-18750] [transport.py] [_log()] userauth is OK
2025-11-12T16:11:34.495 [DEBUG] [Thread-18750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:11:34.495 [DEBUG] [Thread-18750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:11:34.495 [DEBUG] [Thread-18750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:11:34.495 [DEBUG] [Thread-18750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:11:34.509 [INFO] [Thread-18750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:11:34.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:11:34.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:11:35.363 [DEBUG] [Thread-18750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:11:35.363 [DEBUG] [Thread-18750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:11:35.411 [DEBUG] [Thread-18750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:11:35.411 [DEBUG] [Thread-18750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:11:35.419 [DEBUG] [Thread-18750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:11:35.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:11:35.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-11-12T16:11:35.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-11-12T16:11:35.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:11:35.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:11:35.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:11:35.450 [DEBUG] [Thread-18750] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:11:40.015 [DEBUG] [Thread-18752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:11:41.176 [DEBUG] [Thread-18753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:11:42.578 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:11:42.579 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:11:56.236 [DEBUG] [Thread-18754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:12:05.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:12:05.469 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:12:05.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-11-12T16:12:06.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 11, 52), 31.09, 12.62, 0.0, 29.43, 27.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:12:06.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:11:52
2025-11-12T16:12:06.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:12:06.381 [DEBUG] [Thread-18755] [transport.py] [_log()] starting thread (client mode): 0x149abe20
2025-11-12T16:12:06.381 [DEBUG] [Thread-18755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:12:06.400 [DEBUG] [Thread-18755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:12:06.400 [INFO] [Thread-18755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] client lang: <none>
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] server lang: <none>
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] kex follows: False
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] Compression: none
2025-11-12T16:12:06.403 [DEBUG] [Thread-18755] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:12:06.412 [DEBUG] [Thread-18755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:12:06.412 [DEBUG] [Thread-18755] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:12:06.412 [DEBUG] [Thread-18755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:12:06.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:12:06.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:12:06.414 [DEBUG] [Thread-18755] [transport.py] [_log()] userauth is OK
2025-11-12T16:12:06.414 [DEBUG] [Thread-18755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:12:06.414 [DEBUG] [Thread-18755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:12:06.414 [DEBUG] [Thread-18755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:12:06.415 [DEBUG] [Thread-18755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:12:06.433 [INFO] [Thread-18755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:12:06.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:12:07.231 [DEBUG] [Thread-18755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:12:07.231 [DEBUG] [Thread-18755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:12:07.231 [DEBUG] [Thread-18755] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:12:07.272 [DEBUG] [Thread-18755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:12:07.272 [DEBUG] [Thread-18755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:12:07.275 [DEBUG] [Thread-18755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:12:07.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:12:07.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:12:07.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:12:07.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:12:07.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:12:07.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:12:07.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:12:07.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:12:07.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:12:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.591406 -999.00  +26.40  35.78     18   +0.80 1 1 2 1 1   888    0 24.56 -36.27 ----- 35.8 35.8 293.8 38.6 29.8 -26.1 29.7 -24.7 30.0 -24.1 30.5 -25.2
2025-11-12T16:12:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:12:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:12:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.591406
2025-11-12T16:12:07.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:12:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:12:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:12:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:12:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:12:07.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:11:52', tmtdew=31.09, humidity=12.62, cloud=0.0, wind=29.43, temperature=27.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:11:37.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:12:07.305 [DEBUG] [Thread-18755] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:12:07.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:12:07.400 [DEBUG] [Thread-18758] [transport.py] [_log()] starting thread (client mode): 0x14980850
2025-11-12T16:12:07.400 [DEBUG] [Thread-18758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:12:07.414 [DEBUG] [Thread-18758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:12:07.414 [INFO] [Thread-18758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] client lang: <none>
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] server lang: <none>
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] kex follows: False
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:12:07.422 [DEBUG] [Thread-18758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:12:07.423 [DEBUG] [Thread-18758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:12:07.423 [DEBUG] [Thread-18758] [transport.py] [_log()] Compression: none
2025-11-12T16:12:07.423 [DEBUG] [Thread-18758] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:12:07.480 [DEBUG] [Thread-18758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:12:07.481 [DEBUG] [Thread-18758] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:12:07.481 [DEBUG] [Thread-18758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:12:07.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:12:07.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:12:07.536 [DEBUG] [Thread-18758] [transport.py] [_log()] userauth is OK
2025-11-12T16:12:07.537 [DEBUG] [Thread-18758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:12:07.537 [DEBUG] [Thread-18758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:12:07.537 [DEBUG] [Thread-18758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:12:07.537 [DEBUG] [Thread-18758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:12:07.556 [INFO] [Thread-18758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:12:07.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:12:07.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:12:08.383 [DEBUG] [Thread-18758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:12:08.383 [DEBUG] [Thread-18758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:12:08.431 [DEBUG] [Thread-18758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:12:08.431 [DEBUG] [Thread-18758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:12:08.440 [DEBUG] [Thread-18758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:12:08.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:12:08.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-11-12T16:12:08.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-11-12T16:12:08.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:12:08.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:12:08.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:12:08.477 [DEBUG] [Thread-18758] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:12:11.276 [DEBUG] [Thread-18760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:12:26.323 [DEBUG] [Thread-18761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:12:38.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:12:38.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:12:38.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-11-12T16:12:39.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 12, 24), 30.89, 12.77, 0.0, 31.27, 27.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:12:39.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:12:24
2025-11-12T16:12:39.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:12:39.386 [DEBUG] [Thread-18762] [transport.py] [_log()] starting thread (client mode): 0x173ea4a0
2025-11-12T16:12:39.386 [DEBUG] [Thread-18762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:12:39.404 [DEBUG] [Thread-18762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:12:39.405 [INFO] [Thread-18762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] client lang: <none>
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] server lang: <none>
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] kex follows: False
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] Compression: none
2025-11-12T16:12:39.407 [DEBUG] [Thread-18762] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:12:39.418 [DEBUG] [Thread-18762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:12:39.418 [DEBUG] [Thread-18762] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:12:39.419 [DEBUG] [Thread-18762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:12:39.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:12:39.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:12:39.420 [DEBUG] [Thread-18762] [transport.py] [_log()] userauth is OK
2025-11-12T16:12:39.421 [DEBUG] [Thread-18762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:12:39.421 [DEBUG] [Thread-18762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:12:39.421 [DEBUG] [Thread-18762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:12:39.421 [DEBUG] [Thread-18762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:12:39.456 [INFO] [Thread-18762] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:12:39.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:12:40.059 [DEBUG] [Thread-18762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:12:40.059 [DEBUG] [Thread-18762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:12:40.059 [DEBUG] [Thread-18762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:12:40.070 [DEBUG] [Thread-18764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:12:40.101 [DEBUG] [Thread-18762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:12:40.101 [DEBUG] [Thread-18762] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:12:40.104 [DEBUG] [Thread-18762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:12:40.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:12:40.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:12:40.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:12:40.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:12:40.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:12:40.128 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:12:40.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:12:40.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:12:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:12:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.591754 -999.00  +26.20  28.26     18   +0.60 1 1 1 1 1   888    0 25.35 -35.13 ----- 28.3 28.3 296.6 31.4 29.7 -25.9 29.6 -24.8 29.9 -24.5 30.3 -25.3
2025-11-12T16:12:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:12:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:12:40.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.591754
2025-11-12T16:12:40.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:12:40.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:12:40.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:12:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:12:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:12:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:12:24', tmtdew=30.89, humidity=12.77, cloud=0.0, wind=31.27, temperature=27.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:12:07.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:12:40.131 [DEBUG] [Thread-18762] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:12:40.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:12:40.229 [DEBUG] [Thread-18766] [transport.py] [_log()] starting thread (client mode): 0x173be890
2025-11-12T16:12:40.229 [DEBUG] [Thread-18766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:12:40.244 [DEBUG] [Thread-18766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:12:40.244 [INFO] [Thread-18766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] client lang: <none>
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] server lang: <none>
2025-11-12T16:12:40.252 [DEBUG] [Thread-18766] [transport.py] [_log()] kex follows: False
2025-11-12T16:12:40.253 [DEBUG] [Thread-18766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:12:40.253 [DEBUG] [Thread-18766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:12:40.253 [DEBUG] [Thread-18766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:12:40.253 [DEBUG] [Thread-18766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:12:40.253 [DEBUG] [Thread-18766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:12:40.253 [DEBUG] [Thread-18766] [transport.py] [_log()] Compression: none
2025-11-12T16:12:40.253 [DEBUG] [Thread-18766] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:12:40.315 [DEBUG] [Thread-18766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:12:40.316 [DEBUG] [Thread-18766] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:12:40.316 [DEBUG] [Thread-18766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:12:40.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:12:40.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:12:40.372 [DEBUG] [Thread-18766] [transport.py] [_log()] userauth is OK
2025-11-12T16:12:40.372 [DEBUG] [Thread-18766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:12:40.373 [DEBUG] [Thread-18766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:12:40.373 [DEBUG] [Thread-18766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:12:40.373 [DEBUG] [Thread-18766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:12:40.393 [INFO] [Thread-18766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:12:40.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:12:40.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:12:41.220 [DEBUG] [Thread-18766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:12:41.220 [DEBUG] [Thread-18766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:12:41.267 [DEBUG] [Thread-18766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:12:41.268 [DEBUG] [Thread-18766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:12:41.277 [DEBUG] [Thread-18766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:12:41.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:12:41.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-11-12T16:12:41.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-11-12T16:12:41.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:12:41.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:12:41.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:12:41.314 [DEBUG] [Thread-18766] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:12:41.358 [DEBUG] [Thread-18768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:12:42.720 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:12:42.721 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:12:56.405 [DEBUG] [Thread-18769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:13:11.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:13:11.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:13:11.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-11-12T16:13:11.438 [DEBUG] [Thread-18770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:13:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 12, 56), 30.52, 13.27, 0.0, 28.16, 26.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:13:11.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:12:56
2025-11-12T16:13:12.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:13:12.242 [DEBUG] [Thread-18771] [transport.py] [_log()] starting thread (client mode): 0x1493fd30
2025-11-12T16:13:12.242 [DEBUG] [Thread-18771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:13:12.263 [DEBUG] [Thread-18771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:13:12.264 [INFO] [Thread-18771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:13:12.267 [DEBUG] [Thread-18771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:13:12.267 [DEBUG] [Thread-18771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:13:12.267 [DEBUG] [Thread-18771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:13:12.267 [DEBUG] [Thread-18771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:13:12.267 [DEBUG] [Thread-18771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:13:12.267 [DEBUG] [Thread-18771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:13:12.267 [DEBUG] [Thread-18771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] client lang: <none>
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] server lang: <none>
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] kex follows: False
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:13:12.268 [DEBUG] [Thread-18771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:13:12.269 [DEBUG] [Thread-18771] [transport.py] [_log()] Compression: none
2025-11-12T16:13:12.269 [DEBUG] [Thread-18771] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:13:12.288 [DEBUG] [Thread-18771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:13:12.289 [DEBUG] [Thread-18771] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:13:12.289 [DEBUG] [Thread-18771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:13:12.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:13:12.290 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:13:12.291 [DEBUG] [Thread-18771] [transport.py] [_log()] userauth is OK
2025-11-12T16:13:12.292 [DEBUG] [Thread-18771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:13:12.292 [DEBUG] [Thread-18771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:13:12.292 [DEBUG] [Thread-18771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:13:12.292 [DEBUG] [Thread-18771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:13:12.310 [INFO] [Thread-18771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:13:12.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:13:13.126 [DEBUG] [Thread-18771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:13:13.126 [DEBUG] [Thread-18771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:13:13.127 [DEBUG] [Thread-18771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:13:13.168 [DEBUG] [Thread-18771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:13:13.168 [DEBUG] [Thread-18771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:13:13.170 [DEBUG] [Thread-18771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:13:13.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:13:13.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:13:13.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:13:13.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:13:13.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:13:13.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:13:13.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:13:13.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:13:13.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:13:13.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.592101 -999.00  +26.20  32.95     19   +0.80 1 1 2 1 1   888    0 24.82 -36.75 ----- 33.0 33.0 292.2 39.0 29.7 -26.3 29.6 -25.2 29.9 -24.9 30.3 -25.1
2025-11-12T16:13:13.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:13:13.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:13:13.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.592101
2025-11-12T16:13:13.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:13:13.195 [DEBUG] [Thread-18771] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:13:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:13:13.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:13:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:13:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:13:13.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:12:56', tmtdew=30.52, humidity=13.27, cloud=0.0, wind=28.16, temperature=26.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:12:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:13:13.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:13:13.291 [DEBUG] [Thread-18774] [transport.py] [_log()] starting thread (client mode): 0x173eab30
2025-11-12T16:13:13.291 [DEBUG] [Thread-18774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:13:13.307 [DEBUG] [Thread-18774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:13:13.308 [INFO] [Thread-18774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:13:13.315 [DEBUG] [Thread-18774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:13:13.315 [DEBUG] [Thread-18774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] client lang: <none>
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] server lang: <none>
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] kex follows: False
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] Compression: none
2025-11-12T16:13:13.316 [DEBUG] [Thread-18774] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:13:13.376 [DEBUG] [Thread-18774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:13:13.377 [DEBUG] [Thread-18774] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:13:13.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:13:13.378 [DEBUG] [Thread-18774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:13:13.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:13:13.435 [DEBUG] [Thread-18774] [transport.py] [_log()] userauth is OK
2025-11-12T16:13:13.436 [DEBUG] [Thread-18774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:13:13.436 [DEBUG] [Thread-18774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:13:13.436 [DEBUG] [Thread-18774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:13:13.436 [DEBUG] [Thread-18774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:13:13.459 [INFO] [Thread-18774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:13:13.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:13:13.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:13:14.295 [DEBUG] [Thread-18774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:13:14.296 [DEBUG] [Thread-18774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:13:14.344 [DEBUG] [Thread-18774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:13:14.344 [DEBUG] [Thread-18774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:13:14.353 [DEBUG] [Thread-18774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:13:14.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:13:14.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-11-12T16:13:14.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-11-12T16:13:14.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:13:14.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:13:14.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:13:14.393 [DEBUG] [Thread-18774] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:13:26.471 [DEBUG] [Thread-18776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:13:40.114 [DEBUG] [Thread-18777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:13:41.517 [DEBUG] [Thread-18778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:13:42.863 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:13:42.864 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:13:44.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:13:44.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:13:44.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-11-12T16:13:45.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 13, 28), 30.52, 13.27, 0.0, 29.59, 26.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:13:45.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:13:28
2025-11-12T16:13:45.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:13:45.317 [DEBUG] [Thread-18779] [transport.py] [_log()] starting thread (client mode): 0x14980b50
2025-11-12T16:13:45.317 [DEBUG] [Thread-18779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:13:45.337 [DEBUG] [Thread-18779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:13:45.338 [INFO] [Thread-18779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:13:45.340 [DEBUG] [Thread-18779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] client lang: <none>
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] server lang: <none>
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] kex follows: False
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] Compression: none
2025-11-12T16:13:45.341 [DEBUG] [Thread-18779] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:13:45.360 [DEBUG] [Thread-18779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:13:45.360 [DEBUG] [Thread-18779] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:13:45.361 [DEBUG] [Thread-18779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:13:45.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:13:45.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:13:45.363 [DEBUG] [Thread-18779] [transport.py] [_log()] userauth is OK
2025-11-12T16:13:45.363 [DEBUG] [Thread-18779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:13:45.363 [DEBUG] [Thread-18779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:13:45.363 [DEBUG] [Thread-18779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:13:45.364 [DEBUG] [Thread-18779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:13:45.389 [INFO] [Thread-18779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:13:45.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:13:46.031 [DEBUG] [Thread-18779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:13:46.031 [DEBUG] [Thread-18779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:13:46.032 [DEBUG] [Thread-18779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:13:46.073 [DEBUG] [Thread-18779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:13:46.073 [DEBUG] [Thread-18779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:13:46.076 [DEBUG] [Thread-18779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:13:46.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:13:46.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:13:46.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:13:46.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:13:46.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:13:46.102 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:13:46.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:13:46.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:13:46.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:13:46.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.592448 -999.00  +26.20  26.06     19   +0.80 1 1 1 1 1   888    0 24.45 -37.87 ----- 26.1 26.1 294.0 32.9 29.6 -25.7 29.6 -24.3 29.7 -25.0 30.2 -24.7
2025-11-12T16:13:46.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:13:46.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:13:46.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.592448
2025-11-12T16:13:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:13:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:13:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:13:46.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:13:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:13:46.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:13:28', tmtdew=30.52, humidity=13.27, cloud=0.0, wind=29.59, temperature=26.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:13:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:13:46.105 [DEBUG] [Thread-18779] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:13:46.188 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:13:46.200 [DEBUG] [Thread-18782] [transport.py] [_log()] starting thread (client mode): 0x1493d810
2025-11-12T16:13:46.200 [DEBUG] [Thread-18782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:13:46.214 [DEBUG] [Thread-18782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:13:46.215 [INFO] [Thread-18782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:13:46.222 [DEBUG] [Thread-18782] [transport.py] [_log()] client lang: <none>
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] server lang: <none>
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] kex follows: False
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] Compression: none
2025-11-12T16:13:46.223 [DEBUG] [Thread-18782] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:13:46.280 [DEBUG] [Thread-18782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:13:46.281 [DEBUG] [Thread-18782] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:13:46.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:13:46.282 [DEBUG] [Thread-18782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:13:46.284 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:13:46.335 [DEBUG] [Thread-18782] [transport.py] [_log()] userauth is OK
2025-11-12T16:13:46.336 [DEBUG] [Thread-18782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:13:46.336 [DEBUG] [Thread-18782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:13:46.336 [DEBUG] [Thread-18782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:13:46.336 [DEBUG] [Thread-18782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:13:46.359 [INFO] [Thread-18782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:13:46.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:13:46.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:13:47.227 [DEBUG] [Thread-18782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:13:47.228 [DEBUG] [Thread-18782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:13:47.275 [DEBUG] [Thread-18782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:13:47.276 [DEBUG] [Thread-18782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:13:47.285 [DEBUG] [Thread-18782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:13:47.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:13:47.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-11-12T16:13:47.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-11-12T16:13:47.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:13:47.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:13:47.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:13:47.321 [DEBUG] [Thread-18782] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:13:56.554 [DEBUG] [Thread-18784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:14:11.601 [DEBUG] [Thread-18785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:14:17.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:14:17.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:14:17.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-11-12T16:14:17.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 14), 31.15, 12.77, 0.0, 34.07, 27.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:14:17.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:14:00
2025-11-12T16:14:18.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:14:18.241 [DEBUG] [Thread-18786] [transport.py] [_log()] starting thread (client mode): 0x173bfa90
2025-11-12T16:14:18.241 [DEBUG] [Thread-18786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:14:18.262 [DEBUG] [Thread-18786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:14:18.262 [INFO] [Thread-18786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:14:18.264 [DEBUG] [Thread-18786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] client lang: <none>
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] server lang: <none>
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] kex follows: False
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] Compression: none
2025-11-12T16:14:18.265 [DEBUG] [Thread-18786] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:14:18.283 [DEBUG] [Thread-18786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:14:18.284 [DEBUG] [Thread-18786] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:14:18.285 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:14:18.285 [DEBUG] [Thread-18786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:14:18.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:14:18.287 [DEBUG] [Thread-18786] [transport.py] [_log()] userauth is OK
2025-11-12T16:14:18.288 [DEBUG] [Thread-18786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:14:18.288 [DEBUG] [Thread-18786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:14:18.288 [DEBUG] [Thread-18786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:14:18.288 [DEBUG] [Thread-18786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:14:18.306 [INFO] [Thread-18786] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:14:18.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:14:19.021 [DEBUG] [Thread-18786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:14:19.021 [DEBUG] [Thread-18786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:14:19.022 [DEBUG] [Thread-18786] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:14:19.063 [DEBUG] [Thread-18786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:14:19.063 [DEBUG] [Thread-18786] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:14:19.066 [DEBUG] [Thread-18786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:14:19.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:14:19.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:14:19.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:14:19.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:14:19.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:14:19.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:14:19.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:14:19.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:14:19.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:14:19.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.592796 -999.00  +26.50  25.19     18   +0.80 1 1 1 1 1   888    0 24.37 -41.98 ----- 25.2 25.2 300.2 36.8 29.7 -25.7 29.6 -24.2 29.8 -23.6 30.1 -24.1
2025-11-12T16:14:19.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:14:19.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:14:19.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.592796
2025-11-12T16:14:19.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:14:19.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:14:19.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:14:19.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:14:19.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:14:19.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:14:00', tmtdew=31.15, humidity=12.77, cloud=0.0, wind=34.07, temperature=27.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:13:37.574', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:14:19.093 [DEBUG] [Thread-18786] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:14:19.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:14:19.188 [DEBUG] [Thread-18789] [transport.py] [_log()] starting thread (client mode): 0x1739a920
2025-11-12T16:14:19.189 [DEBUG] [Thread-18789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:14:19.203 [DEBUG] [Thread-18789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:14:19.203 [INFO] [Thread-18789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] client lang: <none>
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] server lang: <none>
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] kex follows: False
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:14:19.211 [DEBUG] [Thread-18789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:14:19.212 [DEBUG] [Thread-18789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:14:19.212 [DEBUG] [Thread-18789] [transport.py] [_log()] Compression: none
2025-11-12T16:14:19.212 [DEBUG] [Thread-18789] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:14:19.268 [DEBUG] [Thread-18789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:14:19.269 [DEBUG] [Thread-18789] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:14:19.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:14:19.270 [DEBUG] [Thread-18789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:14:19.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:14:19.324 [DEBUG] [Thread-18789] [transport.py] [_log()] userauth is OK
2025-11-12T16:14:19.324 [DEBUG] [Thread-18789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:14:19.325 [DEBUG] [Thread-18789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:14:19.325 [DEBUG] [Thread-18789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:14:19.325 [DEBUG] [Thread-18789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:14:19.343 [INFO] [Thread-18789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:14:19.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:14:19.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:14:20.137 [DEBUG] [Thread-18789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:14:20.137 [DEBUG] [Thread-18789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:14:20.185 [DEBUG] [Thread-18789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:14:20.185 [DEBUG] [Thread-18789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:14:20.194 [DEBUG] [Thread-18789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:14:20.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:14:20.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:14:20.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-11-12T16:14:20.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:14:20.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:14:20.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:14:20.232 [DEBUG] [Thread-18789] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:14:26.635 [DEBUG] [Thread-18791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:14:40.153 [DEBUG] [Thread-18792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:14:41.689 [DEBUG] [Thread-18793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:14:43.004 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:14:43.006 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:14:50.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:14:50.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:14:50.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:14:50.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 14, 32), 31.35, 12.61, 0.0, 37.37, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:14:50.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:14:32
2025-11-12T16:14:51.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:14:51.211 [DEBUG] [Thread-18794] [transport.py] [_log()] starting thread (client mode): 0x17398550
2025-11-12T16:14:51.211 [DEBUG] [Thread-18794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:14:51.231 [DEBUG] [Thread-18794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:14:51.232 [INFO] [Thread-18794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] client lang: <none>
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] server lang: <none>
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] kex follows: False
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:14:51.235 [DEBUG] [Thread-18794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:14:51.236 [DEBUG] [Thread-18794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:14:51.236 [DEBUG] [Thread-18794] [transport.py] [_log()] Compression: none
2025-11-12T16:14:51.236 [DEBUG] [Thread-18794] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:14:51.253 [DEBUG] [Thread-18794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:14:51.253 [DEBUG] [Thread-18794] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:14:51.253 [DEBUG] [Thread-18794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:14:51.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:14:51.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:14:51.254 [DEBUG] [Thread-18794] [transport.py] [_log()] userauth is OK
2025-11-12T16:14:51.254 [DEBUG] [Thread-18794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:14:51.254 [DEBUG] [Thread-18794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:14:51.254 [DEBUG] [Thread-18794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:14:51.254 [DEBUG] [Thread-18794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:14:51.263 [INFO] [Thread-18794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:14:51.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:14:51.842 [DEBUG] [Thread-18794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:14:51.842 [DEBUG] [Thread-18794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:14:51.842 [DEBUG] [Thread-18794] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:14:51.883 [DEBUG] [Thread-18794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:14:51.883 [DEBUG] [Thread-18794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:14:51.884 [DEBUG] [Thread-18794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:14:51.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:14:51.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:14:51.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:14:51.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:14:51.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:14:51.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:14:51.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:14:51.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:14:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:14:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.593142 -999.00  +26.90  32.26     18   +0.90 1 1 2 1 1   888    0 24.92 -40.41 ----- 32.3 32.3 292.4 40.0 29.7 -25.7 29.7 -24.0 29.9 -23.2 30.2 -24.3
2025-11-12T16:14:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:14:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:14:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.593142
2025-11-12T16:14:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:14:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:14:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:14:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:14:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:14:51.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:14:32', tmtdew=31.35, humidity=12.61, cloud=0.0, wind=37.37, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:14:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:14:51.903 [DEBUG] [Thread-18794] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:14:51.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:14:51.990 [DEBUG] [Thread-18797] [transport.py] [_log()] starting thread (client mode): 0x173e9ff0
2025-11-12T16:14:51.990 [DEBUG] [Thread-18797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:14:52.005 [DEBUG] [Thread-18797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:14:52.005 [INFO] [Thread-18797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:14:52.012 [DEBUG] [Thread-18797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] client lang: <none>
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] server lang: <none>
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] kex follows: False
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] Compression: none
2025-11-12T16:14:52.013 [DEBUG] [Thread-18797] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:14:52.070 [DEBUG] [Thread-18797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:14:52.070 [DEBUG] [Thread-18797] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:14:52.071 [DEBUG] [Thread-18797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:14:52.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:14:52.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:14:52.127 [DEBUG] [Thread-18797] [transport.py] [_log()] userauth is OK
2025-11-12T16:14:52.127 [DEBUG] [Thread-18797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:14:52.127 [DEBUG] [Thread-18797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:14:52.127 [DEBUG] [Thread-18797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:14:52.127 [DEBUG] [Thread-18797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:14:52.145 [INFO] [Thread-18797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:14:52.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:14:52.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:14:52.973 [DEBUG] [Thread-18797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:14:52.974 [DEBUG] [Thread-18797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:14:53.022 [DEBUG] [Thread-18797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:14:53.022 [DEBUG] [Thread-18797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:14:53.031 [DEBUG] [Thread-18797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:14:53.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:14:53.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-11-12T16:14:53.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-11-12T16:14:53.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:14:53.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:14:53.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:14:53.066 [DEBUG] [Thread-18797] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:14:56.721 [DEBUG] [Thread-18799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:15:11.771 [DEBUG] [Thread-18800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:15:23.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:15:23.077 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:15:23.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-11-12T16:15:23.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 15, 4), 31.17, 12.77, 0.0, 35.36, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:15:23.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:15:04
2025-11-12T16:15:23.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:15:23.979 [DEBUG] [Thread-18801] [transport.py] [_log()] starting thread (client mode): 0x149db880
2025-11-12T16:15:23.979 [DEBUG] [Thread-18801] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:15:23.998 [DEBUG] [Thread-18801] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:15:23.998 [INFO] [Thread-18801] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:15:24.001 [DEBUG] [Thread-18801] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:15:24.001 [DEBUG] [Thread-18801] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:15:24.001 [DEBUG] [Thread-18801] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:15:24.001 [DEBUG] [Thread-18801] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:15:24.001 [DEBUG] [Thread-18801] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:15:24.001 [DEBUG] [Thread-18801] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] client lang: <none>
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] server lang: <none>
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] kex follows: False
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] Compression: none
2025-11-12T16:15:24.002 [DEBUG] [Thread-18801] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:15:24.019 [DEBUG] [Thread-18801] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:15:24.020 [DEBUG] [Thread-18801] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:15:24.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:15:24.020 [DEBUG] [Thread-18801] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:15:24.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:15:24.023 [DEBUG] [Thread-18801] [transport.py] [_log()] userauth is OK
2025-11-12T16:15:24.023 [DEBUG] [Thread-18801] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:15:24.023 [DEBUG] [Thread-18801] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:15:24.023 [DEBUG] [Thread-18801] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:15:24.023 [DEBUG] [Thread-18801] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:15:24.037 [INFO] [Thread-18801] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:15:24.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:15:24.678 [DEBUG] [Thread-18801] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:15:24.678 [DEBUG] [Thread-18801] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:15:24.679 [DEBUG] [Thread-18801] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:15:24.720 [DEBUG] [Thread-18801] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:15:24.720 [DEBUG] [Thread-18801] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:15:24.723 [DEBUG] [Thread-18801] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:15:24.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:15:24.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:15:24.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:15:24.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:15:24.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:15:24.749 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:15:24.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:15:24.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:15:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:15:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.593836 -999.00  +26.50  30.72     19   +1.00 1 1 2 1 1   888    0 25.07 -38.30 ----- 30.7 30.7 291.8 46.1 29.7 -26.2 29.6 -24.4 29.9 -25.0 30.2 -24.8
2025-11-12T16:15:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:15:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:15:24.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.593836
2025-11-12T16:15:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:15:24.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:15:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:15:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:15:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:15:24.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:15:04', tmtdew=31.17, humidity=12.77, cloud=0.0, wind=35.36, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:15:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:15:24.752 [DEBUG] [Thread-18801] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:15:24.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:15:24.847 [DEBUG] [Thread-18804] [transport.py] [_log()] starting thread (client mode): 0x149da440
2025-11-12T16:15:24.848 [DEBUG] [Thread-18804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:15:24.863 [DEBUG] [Thread-18804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:15:24.863 [INFO] [Thread-18804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:15:24.870 [DEBUG] [Thread-18804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] client lang: <none>
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] server lang: <none>
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] kex follows: False
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] Compression: none
2025-11-12T16:15:24.871 [DEBUG] [Thread-18804] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:15:24.928 [DEBUG] [Thread-18804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:15:24.929 [DEBUG] [Thread-18804] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:15:24.930 [DEBUG] [Thread-18804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:15:24.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:15:24.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:15:24.984 [DEBUG] [Thread-18804] [transport.py] [_log()] userauth is OK
2025-11-12T16:15:24.984 [DEBUG] [Thread-18804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:15:24.984 [DEBUG] [Thread-18804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:15:24.984 [DEBUG] [Thread-18804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:15:24.984 [DEBUG] [Thread-18804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:15:25.004 [INFO] [Thread-18804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:15:25.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:15:25.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:15:25.825 [DEBUG] [Thread-18804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:15:25.825 [DEBUG] [Thread-18804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:15:25.873 [DEBUG] [Thread-18804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:15:25.873 [DEBUG] [Thread-18804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:15:25.881 [DEBUG] [Thread-18804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:15:25.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:15:25.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:15:25.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:15:25.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:15:25.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:15:25.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:15:25.913 [DEBUG] [Thread-18804] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:15:26.806 [DEBUG] [Thread-18806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:15:40.187 [DEBUG] [Thread-18807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:15:41.846 [DEBUG] [Thread-18808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:15:43.148 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:15:43.149 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:15:55.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:15:55.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:15:55.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-11-12T16:15:56.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 15, 36), 31.2, 12.79, 0.0, 36.51, 27.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:15:56.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:15:36
2025-11-12T16:15:56.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:15:56.860 [DEBUG] [Thread-18809] [transport.py] [_log()] starting thread (client mode): 0x149aa050
2025-11-12T16:15:56.860 [DEBUG] [Thread-18809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:15:56.880 [DEBUG] [Thread-18809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:15:56.880 [INFO] [Thread-18809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] client lang: <none>
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] server lang: <none>
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] kex follows: False
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] Compression: none
2025-11-12T16:15:56.883 [DEBUG] [Thread-18809] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:15:56.884 [DEBUG] [Thread-18811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:15:56.900 [DEBUG] [Thread-18809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:15:56.900 [DEBUG] [Thread-18809] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:15:56.901 [DEBUG] [Thread-18809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:15:56.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:15:56.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:15:56.903 [DEBUG] [Thread-18809] [transport.py] [_log()] userauth is OK
2025-11-12T16:15:56.903 [DEBUG] [Thread-18809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:15:56.903 [DEBUG] [Thread-18809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:15:56.903 [DEBUG] [Thread-18809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:15:56.903 [DEBUG] [Thread-18809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:15:56.928 [INFO] [Thread-18809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:15:56.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:15:57.572 [DEBUG] [Thread-18809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:15:57.572 [DEBUG] [Thread-18809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:15:57.573 [DEBUG] [Thread-18809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:15:57.613 [DEBUG] [Thread-18809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:15:57.614 [DEBUG] [Thread-18809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:15:57.617 [DEBUG] [Thread-18809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:15:57.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:15:57.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:15:57.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:15:57.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:15:57.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:15:57.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:15:57.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:15:57.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:15:57.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:15:57.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.594184 -999.00  +26.80  35.11     18   +1.00 1 1 2 1 1   888    0 25.26 -42.46 ----- 35.1 35.1 267.4 42.3 29.6 -25.1 29.6 -23.7 29.8 -23.6 30.1 -24.1
2025-11-12T16:15:57.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:15:57.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:15:57.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.594184
2025-11-12T16:15:57.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:15:57.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:15:57.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:15:57.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:15:57.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:15:57.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:15:36', tmtdew=31.2, humidity=12.79, cloud=0.0, wind=36.51, temperature=27.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:15:37.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:15:57.644 [DEBUG] [Thread-18809] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:15:57.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:15:57.741 [DEBUG] [Thread-18813] [transport.py] [_log()] starting thread (client mode): 0x173f8220
2025-11-12T16:15:57.741 [DEBUG] [Thread-18813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:15:57.756 [DEBUG] [Thread-18813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:15:57.756 [INFO] [Thread-18813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:15:57.764 [DEBUG] [Thread-18813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:15:57.764 [DEBUG] [Thread-18813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:15:57.765 [DEBUG] [Thread-18813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:15:57.765 [DEBUG] [Thread-18813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:15:57.765 [DEBUG] [Thread-18813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:15:57.765 [DEBUG] [Thread-18813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:15:57.765 [DEBUG] [Thread-18813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:15:57.765 [DEBUG] [Thread-18813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:15:57.765 [DEBUG] [Thread-18813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:15:57.765 [DEBUG] [Thread-18813] [transport.py] [_log()] client lang: <none>
2025-11-12T16:15:57.766 [DEBUG] [Thread-18813] [transport.py] [_log()] server lang: <none>
2025-11-12T16:15:57.766 [DEBUG] [Thread-18813] [transport.py] [_log()] kex follows: False
2025-11-12T16:15:57.766 [DEBUG] [Thread-18813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:15:57.766 [DEBUG] [Thread-18813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:15:57.766 [DEBUG] [Thread-18813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:15:57.766 [DEBUG] [Thread-18813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:15:57.766 [DEBUG] [Thread-18813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:15:57.767 [DEBUG] [Thread-18813] [transport.py] [_log()] Compression: none
2025-11-12T16:15:57.767 [DEBUG] [Thread-18813] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:15:57.828 [DEBUG] [Thread-18813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:15:57.829 [DEBUG] [Thread-18813] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:15:57.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:15:57.831 [DEBUG] [Thread-18813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:15:57.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:15:57.884 [DEBUG] [Thread-18813] [transport.py] [_log()] userauth is OK
2025-11-12T16:15:57.884 [DEBUG] [Thread-18813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:15:57.884 [DEBUG] [Thread-18813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:15:57.884 [DEBUG] [Thread-18813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:15:57.885 [DEBUG] [Thread-18813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:15:57.903 [INFO] [Thread-18813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:15:57.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:15:57.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:15:58.751 [DEBUG] [Thread-18813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:15:58.751 [DEBUG] [Thread-18813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:15:58.799 [DEBUG] [Thread-18813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:15:58.800 [DEBUG] [Thread-18813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:15:58.809 [DEBUG] [Thread-18813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:15:58.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:15:58.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-11-12T16:15:58.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-11-12T16:15:58.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:15:58.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:15:58.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:15:58.845 [DEBUG] [Thread-18813] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:16:11.918 [DEBUG] [Thread-18815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:16:26.966 [DEBUG] [Thread-18816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:16:28.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:16:28.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:16:28.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-11-12T16:16:29.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 16, 8), 31.09, 12.87, 0.0, 36.03, 27.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:16:29.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:16:08
2025-11-12T16:16:29.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:16:29.785 [DEBUG] [Thread-18817] [transport.py] [_log()] starting thread (client mode): 0x17398520
2025-11-12T16:16:29.786 [DEBUG] [Thread-18817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:16:29.805 [DEBUG] [Thread-18817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:16:29.805 [INFO] [Thread-18817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:16:29.808 [DEBUG] [Thread-18817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] client lang: <none>
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] server lang: <none>
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] kex follows: False
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] Compression: none
2025-11-12T16:16:29.809 [DEBUG] [Thread-18817] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:16:29.822 [DEBUG] [Thread-18817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:16:29.822 [DEBUG] [Thread-18817] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:16:29.823 [DEBUG] [Thread-18817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:16:29.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:16:29.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:16:29.825 [DEBUG] [Thread-18817] [transport.py] [_log()] userauth is OK
2025-11-12T16:16:29.825 [DEBUG] [Thread-18817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:16:29.825 [DEBUG] [Thread-18817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:16:29.825 [DEBUG] [Thread-18817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:16:29.825 [DEBUG] [Thread-18817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:16:29.843 [INFO] [Thread-18817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:16:29.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:16:30.514 [DEBUG] [Thread-18817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:16:30.514 [DEBUG] [Thread-18817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:16:30.515 [DEBUG] [Thread-18817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:16:30.554 [DEBUG] [Thread-18817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:16:30.555 [DEBUG] [Thread-18817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:16:30.557 [DEBUG] [Thread-18817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:16:30.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:16:30.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:16:30.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:16:30.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:16:30.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:16:30.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:16:30.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:16:30.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:16:30.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:16:30.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.594531 -999.00  +26.80  25.66     18   +0.90 1 1 1 1 1   888    0 24.69 -38.53 ----- 25.7 25.7 274.6 39.7 29.7 -25.9 29.7 -25.0 29.7 -23.0 30.2 -23.4
2025-11-12T16:16:30.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:16:30.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:16:30.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.594531
2025-11-12T16:16:30.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:16:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:16:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:16:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:16:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:16:30.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:16:08', tmtdew=31.09, humidity=12.87, cloud=0.0, wind=36.03, temperature=27.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:16:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:16:30.581 [DEBUG] [Thread-18817] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:16:30.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:16:30.679 [DEBUG] [Thread-18820] [transport.py] [_log()] starting thread (client mode): 0x1737e4d0
2025-11-12T16:16:30.680 [DEBUG] [Thread-18820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:16:30.694 [DEBUG] [Thread-18820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:16:30.694 [INFO] [Thread-18820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] client lang: <none>
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] server lang: <none>
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] kex follows: False
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:16:30.702 [DEBUG] [Thread-18820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:16:30.703 [DEBUG] [Thread-18820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:16:30.703 [DEBUG] [Thread-18820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:16:30.703 [DEBUG] [Thread-18820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:16:30.703 [DEBUG] [Thread-18820] [transport.py] [_log()] Compression: none
2025-11-12T16:16:30.703 [DEBUG] [Thread-18820] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:16:30.759 [DEBUG] [Thread-18820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:16:30.759 [DEBUG] [Thread-18820] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:16:30.760 [DEBUG] [Thread-18820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:16:30.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:16:30.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:16:30.816 [DEBUG] [Thread-18820] [transport.py] [_log()] userauth is OK
2025-11-12T16:16:30.816 [DEBUG] [Thread-18820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:16:30.816 [DEBUG] [Thread-18820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:16:30.816 [DEBUG] [Thread-18820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:16:30.816 [DEBUG] [Thread-18820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:16:30.836 [INFO] [Thread-18820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:16:30.836 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:16:30.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:16:31.655 [DEBUG] [Thread-18820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:16:31.655 [DEBUG] [Thread-18820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:16:31.704 [DEBUG] [Thread-18820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:16:31.704 [DEBUG] [Thread-18820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:16:31.716 [DEBUG] [Thread-18820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:16:31.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:16:31.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-11-12T16:16:31.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-11-12T16:16:31.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:16:31.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:16:31.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:16:31.757 [DEBUG] [Thread-18820] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:16:40.221 [DEBUG] [Thread-18822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:16:42.001 [DEBUG] [Thread-18823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:16:43.289 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:16:43.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:16:57.042 [DEBUG] [Thread-18824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:17:01.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:17:01.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:17:01.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-11-12T16:17:02.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 16, 40), 30.66, 12.87, 0.0, 33.26, 26.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:17:02.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:16:40
2025-11-12T16:17:02.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:17:02.659 [DEBUG] [Thread-18825] [transport.py] [_log()] starting thread (client mode): 0x1493ee00
2025-11-12T16:17:02.659 [DEBUG] [Thread-18825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:17:02.679 [DEBUG] [Thread-18825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:17:02.679 [INFO] [Thread-18825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:17:02.682 [DEBUG] [Thread-18825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] client lang: <none>
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] server lang: <none>
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] kex follows: False
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] Compression: none
2025-11-12T16:17:02.683 [DEBUG] [Thread-18825] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:17:02.698 [DEBUG] [Thread-18825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:17:02.699 [DEBUG] [Thread-18825] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:17:02.699 [DEBUG] [Thread-18825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:17:02.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:17:02.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:17:02.741 [DEBUG] [Thread-18825] [transport.py] [_log()] userauth is OK
2025-11-12T16:17:02.741 [DEBUG] [Thread-18825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:17:02.741 [DEBUG] [Thread-18825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:17:02.741 [DEBUG] [Thread-18825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:17:02.741 [DEBUG] [Thread-18825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:17:02.775 [INFO] [Thread-18825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:17:02.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:17:03.405 [DEBUG] [Thread-18825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:17:03.405 [DEBUG] [Thread-18825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:17:03.405 [DEBUG] [Thread-18825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:17:03.446 [DEBUG] [Thread-18825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:17:03.446 [DEBUG] [Thread-18825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:17:03.449 [DEBUG] [Thread-18825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:17:03.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:17:03.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:17:03.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:17:03.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:17:03.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:17:03.469 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:17:03.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:17:03.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:17:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:17:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.594879 -999.00  +27.00  28.09     18   +1.10 1 1 1 1 1   888    0 24.96 -35.39 ----- 28.1 28.1 296.2 33.0 29.7 -25.3 29.6 -23.4 29.6 -23.9 30.2 -24.6
2025-11-12T16:17:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:17:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:17:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.594879
2025-11-12T16:17:03.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:17:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:17:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:17:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:17:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:17:03.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:16:40', tmtdew=30.66, humidity=12.87, cloud=0.0, wind=33.26, temperature=26.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:16:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:17:03.472 [DEBUG] [Thread-18825] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:17:03.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:17:03.565 [DEBUG] [Thread-18828] [transport.py] [_log()] starting thread (client mode): 0x19dd9d50
2025-11-12T16:17:03.565 [DEBUG] [Thread-18828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:17:03.579 [DEBUG] [Thread-18828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:17:03.579 [INFO] [Thread-18828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] client lang: <none>
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] server lang: <none>
2025-11-12T16:17:03.587 [DEBUG] [Thread-18828] [transport.py] [_log()] kex follows: False
2025-11-12T16:17:03.588 [DEBUG] [Thread-18828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:17:03.588 [DEBUG] [Thread-18828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:17:03.588 [DEBUG] [Thread-18828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:17:03.588 [DEBUG] [Thread-18828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:17:03.588 [DEBUG] [Thread-18828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:17:03.588 [DEBUG] [Thread-18828] [transport.py] [_log()] Compression: none
2025-11-12T16:17:03.588 [DEBUG] [Thread-18828] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:17:03.643 [DEBUG] [Thread-18828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:17:03.644 [DEBUG] [Thread-18828] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:17:03.645 [DEBUG] [Thread-18828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:17:03.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:17:03.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:17:03.700 [DEBUG] [Thread-18828] [transport.py] [_log()] userauth is OK
2025-11-12T16:17:03.700 [DEBUG] [Thread-18828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:17:03.700 [DEBUG] [Thread-18828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:17:03.701 [DEBUG] [Thread-18828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:17:03.701 [DEBUG] [Thread-18828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:17:03.718 [INFO] [Thread-18828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:17:03.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:17:03.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:17:04.566 [DEBUG] [Thread-18828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:17:04.566 [DEBUG] [Thread-18828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:17:04.614 [DEBUG] [Thread-18828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:17:04.615 [DEBUG] [Thread-18828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:17:04.624 [DEBUG] [Thread-18828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:17:04.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:17:04.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-11-12T16:17:04.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-11-12T16:17:04.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:17:04.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:17:04.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:17:04.661 [DEBUG] [Thread-18828] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:17:12.078 [DEBUG] [Thread-18830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:17:27.127 [DEBUG] [Thread-18831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:17:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:17:34.684 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:17:34.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-11-12T16:17:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 17, 12), 30.78, 12.79, 0.0, 33.7, 26.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:17:35.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:17:12
2025-11-12T16:17:35.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:17:35.611 [DEBUG] [Thread-18832] [transport.py] [_log()] starting thread (client mode): 0x173becb0
2025-11-12T16:17:35.611 [DEBUG] [Thread-18832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:17:35.627 [DEBUG] [Thread-18832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:17:35.627 [INFO] [Thread-18832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] client lang: <none>
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] server lang: <none>
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] kex follows: False
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:17:35.630 [DEBUG] [Thread-18832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:17:35.631 [DEBUG] [Thread-18832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:17:35.631 [DEBUG] [Thread-18832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:17:35.631 [DEBUG] [Thread-18832] [transport.py] [_log()] Compression: none
2025-11-12T16:17:35.631 [DEBUG] [Thread-18832] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:17:35.647 [DEBUG] [Thread-18832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:17:35.648 [DEBUG] [Thread-18832] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:17:35.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:17:35.649 [DEBUG] [Thread-18832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:17:35.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:17:35.693 [DEBUG] [Thread-18832] [transport.py] [_log()] userauth is OK
2025-11-12T16:17:35.693 [DEBUG] [Thread-18832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:17:35.693 [DEBUG] [Thread-18832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:17:35.693 [DEBUG] [Thread-18832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:17:35.693 [DEBUG] [Thread-18832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:17:35.725 [INFO] [Thread-18832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:17:35.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:17:36.397 [DEBUG] [Thread-18832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:17:36.398 [DEBUG] [Thread-18832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:17:36.398 [DEBUG] [Thread-18832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:17:36.439 [DEBUG] [Thread-18832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:17:36.439 [DEBUG] [Thread-18832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:17:36.442 [DEBUG] [Thread-18832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:17:36.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:17:36.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:17:36.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:17:36.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:17:36.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:17:36.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:17:36.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:17:36.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:17:36.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:17:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.595226 -999.00  +26.80  29.39     18   +0.90 1 1 1 1 1   888    0 24.80 -39.11 ----- 29.4 29.4 285.6 40.8 29.8 -25.1 29.7 -23.7 29.8 -23.4 30.3 -23.4
2025-11-12T16:17:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:17:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:17:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.595226
2025-11-12T16:17:36.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:17:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:17:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:17:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:17:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:17:36.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:17:12', tmtdew=30.78, humidity=12.79, cloud=0.0, wind=33.7, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:17:07.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:17:36.462 [DEBUG] [Thread-18832] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:17:36.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:17:36.558 [DEBUG] [Thread-18835] [transport.py] [_log()] starting thread (client mode): 0x173bf8b0
2025-11-12T16:17:36.558 [DEBUG] [Thread-18835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:17:36.573 [DEBUG] [Thread-18835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:17:36.573 [INFO] [Thread-18835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:17:36.580 [DEBUG] [Thread-18835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] client lang: <none>
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] server lang: <none>
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] kex follows: False
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] Compression: none
2025-11-12T16:17:36.581 [DEBUG] [Thread-18835] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:17:36.640 [DEBUG] [Thread-18835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:17:36.641 [DEBUG] [Thread-18835] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:17:36.641 [DEBUG] [Thread-18835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:17:36.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:17:36.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:17:36.696 [DEBUG] [Thread-18835] [transport.py] [_log()] userauth is OK
2025-11-12T16:17:36.696 [DEBUG] [Thread-18835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:17:36.696 [DEBUG] [Thread-18835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:17:36.696 [DEBUG] [Thread-18835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:17:36.696 [DEBUG] [Thread-18835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:17:36.714 [INFO] [Thread-18835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:17:36.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:17:36.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:17:37.539 [DEBUG] [Thread-18835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:17:37.539 [DEBUG] [Thread-18835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:17:37.588 [DEBUG] [Thread-18835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:17:37.588 [DEBUG] [Thread-18835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:17:37.597 [DEBUG] [Thread-18835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:17:37.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:17:37.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:17:37.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-11-12T16:17:37.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:17:37.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:17:37.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:17:37.634 [DEBUG] [Thread-18835] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:17:40.254 [DEBUG] [Thread-18837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:17:42.165 [DEBUG] [Thread-18838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:17:43.429 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:17:43.430 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:17:57.217 [DEBUG] [Thread-18839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:18:07.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:18:07.656 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:18:07.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-11-12T16:18:08.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 17, 44), 31.66, 12.4, 0.0, 37.09, 27.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:18:08.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:17:44
2025-11-12T16:18:08.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:18:08.590 [DEBUG] [Thread-18840] [transport.py] [_log()] starting thread (client mode): 0x173f8490
2025-11-12T16:18:08.590 [DEBUG] [Thread-18840] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:18:08.610 [DEBUG] [Thread-18840] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:18:08.610 [INFO] [Thread-18840] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] client lang: <none>
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] server lang: <none>
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] kex follows: False
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] Compression: none
2025-11-12T16:18:08.613 [DEBUG] [Thread-18840] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:18:08.632 [DEBUG] [Thread-18840] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:18:08.633 [DEBUG] [Thread-18840] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:18:08.633 [DEBUG] [Thread-18840] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:18:08.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:18:08.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:18:08.635 [DEBUG] [Thread-18840] [transport.py] [_log()] userauth is OK
2025-11-12T16:18:08.635 [DEBUG] [Thread-18840] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:18:08.635 [DEBUG] [Thread-18840] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:18:08.636 [DEBUG] [Thread-18840] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:18:08.636 [DEBUG] [Thread-18840] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:18:08.659 [INFO] [Thread-18840] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:18:08.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:18:09.275 [DEBUG] [Thread-18840] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:18:09.275 [DEBUG] [Thread-18840] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:18:09.276 [DEBUG] [Thread-18840] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:18:09.317 [DEBUG] [Thread-18840] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:18:09.317 [DEBUG] [Thread-18840] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:18:09.320 [DEBUG] [Thread-18840] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:18:09.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:18:09.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:18:09.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:18:09.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:18:09.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:18:09.346 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:18:09.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:18:09.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:18:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:18:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.595573 -999.00  +26.90  29.85     17   +0.10 1 1 1 1 1   888    0 25.54 -34.23 ----- 29.9 29.9 279.6 41.9 29.8 -25.7 29.6 -23.7 29.8 -25.4 30.3 -23.3
2025-11-12T16:18:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:18:09.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:18:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.595573
2025-11-12T16:18:09.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:18:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:18:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:18:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:18:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:18:09.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:17:44', tmtdew=31.66, humidity=12.4, cloud=0.0, wind=37.09, temperature=27.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:17:37.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:18:09.349 [DEBUG] [Thread-18840] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:18:09.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:18:09.445 [DEBUG] [Thread-18843] [transport.py] [_log()] starting thread (client mode): 0x1494f460
2025-11-12T16:18:09.445 [DEBUG] [Thread-18843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:18:09.462 [DEBUG] [Thread-18843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:18:09.462 [INFO] [Thread-18843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:18:09.470 [DEBUG] [Thread-18843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:18:09.470 [DEBUG] [Thread-18843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] client lang: <none>
2025-11-12T16:18:09.471 [DEBUG] [Thread-18843] [transport.py] [_log()] server lang: <none>
2025-11-12T16:18:09.472 [DEBUG] [Thread-18843] [transport.py] [_log()] kex follows: False
2025-11-12T16:18:09.472 [DEBUG] [Thread-18843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:18:09.472 [DEBUG] [Thread-18843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:18:09.472 [DEBUG] [Thread-18843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:18:09.472 [DEBUG] [Thread-18843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:18:09.472 [DEBUG] [Thread-18843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:18:09.472 [DEBUG] [Thread-18843] [transport.py] [_log()] Compression: none
2025-11-12T16:18:09.473 [DEBUG] [Thread-18843] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:18:09.528 [DEBUG] [Thread-18843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:18:09.529 [DEBUG] [Thread-18843] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:18:09.530 [DEBUG] [Thread-18843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:18:09.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:18:09.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:18:09.584 [DEBUG] [Thread-18843] [transport.py] [_log()] userauth is OK
2025-11-12T16:18:09.584 [DEBUG] [Thread-18843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:18:09.585 [DEBUG] [Thread-18843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:18:09.585 [DEBUG] [Thread-18843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:18:09.585 [DEBUG] [Thread-18843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:18:09.604 [INFO] [Thread-18843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:18:09.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:18:09.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:18:10.453 [DEBUG] [Thread-18843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:18:10.453 [DEBUG] [Thread-18843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:18:10.502 [DEBUG] [Thread-18843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:18:10.502 [DEBUG] [Thread-18843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:18:10.512 [DEBUG] [Thread-18843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:18:10.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:18:10.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-11-12T16:18:10.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-11-12T16:18:10.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:18:10.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:18:10.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:18:10.547 [DEBUG] [Thread-18843] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:18:12.250 [DEBUG] [Thread-18845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:18:27.297 [DEBUG] [Thread-18846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:18:40.284 [DEBUG] [Thread-18847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:18:40.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:18:40.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:18:40.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-11-12T16:18:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 18, 16), 31.6, 12.45, 0.0, 36.6, 27.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:18:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:18:16
2025-11-12T16:18:41.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:18:41.550 [DEBUG] [Thread-18848] [transport.py] [_log()] starting thread (client mode): 0x173eaf20
2025-11-12T16:18:41.550 [DEBUG] [Thread-18848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:18:41.569 [DEBUG] [Thread-18848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:18:41.569 [INFO] [Thread-18848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] client lang: <none>
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] server lang: <none>
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] kex follows: False
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] Compression: none
2025-11-12T16:18:41.573 [DEBUG] [Thread-18848] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:18:41.590 [DEBUG] [Thread-18848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:18:41.590 [DEBUG] [Thread-18848] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:18:41.590 [DEBUG] [Thread-18848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:18:41.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:18:41.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:18:41.591 [DEBUG] [Thread-18848] [transport.py] [_log()] userauth is OK
2025-11-12T16:18:41.591 [DEBUG] [Thread-18848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:18:41.591 [DEBUG] [Thread-18848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:18:41.591 [DEBUG] [Thread-18848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:18:41.591 [DEBUG] [Thread-18848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:18:41.602 [INFO] [Thread-18848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:18:41.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:18:42.243 [DEBUG] [Thread-18848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:18:42.243 [DEBUG] [Thread-18848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:18:42.243 [DEBUG] [Thread-18848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:18:42.284 [DEBUG] [Thread-18848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:18:42.284 [DEBUG] [Thread-18848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:18:42.286 [DEBUG] [Thread-18848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:18:42.299 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:18:42.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:18:42.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:18:42.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:18:42.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:18:42.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:18:42.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:18:42.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.595920 -999.00  +26.90  35.83     17   +0.10 1 1 2 1 1   888    0 24.87 -27.93 ----- 35.8 35.8 278.0 44.1 29.7 -25.8 29.6 -23.7 29.6 -25.5 30.2 -24.8
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.595920
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:18:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:18:16', tmtdew=31.6, humidity=12.45, cloud=0.0, wind=36.6, temperature=27.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:18:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:18:42.306 [DEBUG] [Thread-18848] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:18:42.331 [DEBUG] [Thread-18851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:18:42.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:18:42.392 [DEBUG] [Thread-18852] [transport.py] [_log()] starting thread (client mode): 0x1499f0d0
2025-11-12T16:18:42.392 [DEBUG] [Thread-18852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:18:42.407 [DEBUG] [Thread-18852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:18:42.407 [INFO] [Thread-18852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] client lang: <none>
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] server lang: <none>
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] kex follows: False
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] Compression: none
2025-11-12T16:18:42.415 [DEBUG] [Thread-18852] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:18:42.470 [DEBUG] [Thread-18852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:18:42.470 [DEBUG] [Thread-18852] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:18:42.470 [DEBUG] [Thread-18852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:18:42.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:18:42.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:18:42.531 [DEBUG] [Thread-18852] [transport.py] [_log()] userauth is OK
2025-11-12T16:18:42.531 [DEBUG] [Thread-18852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:18:42.531 [DEBUG] [Thread-18852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:18:42.531 [DEBUG] [Thread-18852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:18:42.531 [DEBUG] [Thread-18852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:18:42.549 [INFO] [Thread-18852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:18:42.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:18:42.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:18:43.368 [DEBUG] [Thread-18852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:18:43.368 [DEBUG] [Thread-18852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:18:43.416 [DEBUG] [Thread-18852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:18:43.416 [DEBUG] [Thread-18852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:18:43.425 [DEBUG] [Thread-18852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:18:43.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:18:43.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')
2025-11-12T16:18:43.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-11-12T16:18:43.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:18:43.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:18:43.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:18:43.457 [DEBUG] [Thread-18852] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:18:43.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:18:43.571 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:18:57.376 [DEBUG] [Thread-18854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:19:12.414 [DEBUG] [Thread-18855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:19:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:19:13.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:19:13.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-11-12T16:19:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 18, 48), 31.51, 12.41, 0.0, 38.31, 26.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:19:14.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:18:48
2025-11-12T16:19:14.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:19:14.410 [DEBUG] [Thread-18856] [transport.py] [_log()] starting thread (client mode): 0x173be890
2025-11-12T16:19:14.410 [DEBUG] [Thread-18856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:19:14.429 [DEBUG] [Thread-18856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:19:14.429 [INFO] [Thread-18856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:19:14.432 [DEBUG] [Thread-18856] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:19:14.432 [DEBUG] [Thread-18856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:19:14.432 [DEBUG] [Thread-18856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:19:14.432 [DEBUG] [Thread-18856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] client lang: <none>
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] server lang: <none>
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] kex follows: False
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:19:14.433 [DEBUG] [Thread-18856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:19:14.434 [DEBUG] [Thread-18856] [transport.py] [_log()] Compression: none
2025-11-12T16:19:14.434 [DEBUG] [Thread-18856] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:19:14.452 [DEBUG] [Thread-18856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:19:14.453 [DEBUG] [Thread-18856] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:19:14.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:19:14.455 [DEBUG] [Thread-18856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:19:14.456 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:19:14.457 [DEBUG] [Thread-18856] [transport.py] [_log()] userauth is OK
2025-11-12T16:19:14.457 [DEBUG] [Thread-18856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:19:14.457 [DEBUG] [Thread-18856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:19:14.458 [DEBUG] [Thread-18856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:19:14.458 [DEBUG] [Thread-18856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:19:14.493 [INFO] [Thread-18856] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:19:14.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:19:15.135 [DEBUG] [Thread-18856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:19:15.135 [DEBUG] [Thread-18856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:19:15.136 [DEBUG] [Thread-18856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:19:15.177 [DEBUG] [Thread-18856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:19:15.177 [DEBUG] [Thread-18856] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:19:15.180 [DEBUG] [Thread-18856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:19:15.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:19:15.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:19:15.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:19:15.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:19:15.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:19:15.204 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:19:15.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:19:15.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:19:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:19:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.596267 -999.00  +26.50  34.77     18   +0.30 1 1 2 1 1   888    0 25.49 -23.49 ----- 34.8 34.8 277.2 42.7 29.6 -26.2 29.6 -24.0 29.7 -24.7 30.2 -25.5
2025-11-12T16:19:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:19:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:19:15.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.596267
2025-11-12T16:19:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:19:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:19:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:19:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:19:15.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:19:15.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:18:48', tmtdew=31.51, humidity=12.41, cloud=0.0, wind=38.31, temperature=26.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:18:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:19:15.207 [DEBUG] [Thread-18856] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:19:15.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:19:15.308 [DEBUG] [Thread-18859] [transport.py] [_log()] starting thread (client mode): 0x14961840
2025-11-12T16:19:15.308 [DEBUG] [Thread-18859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:19:15.323 [DEBUG] [Thread-18859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:19:15.323 [INFO] [Thread-18859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:19:15.331 [DEBUG] [Thread-18859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] client lang: <none>
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] server lang: <none>
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] kex follows: False
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] Compression: none
2025-11-12T16:19:15.332 [DEBUG] [Thread-18859] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:19:15.391 [DEBUG] [Thread-18859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:19:15.392 [DEBUG] [Thread-18859] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:19:15.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:19:15.393 [DEBUG] [Thread-18859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:19:15.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:19:15.448 [DEBUG] [Thread-18859] [transport.py] [_log()] userauth is OK
2025-11-12T16:19:15.448 [DEBUG] [Thread-18859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:19:15.448 [DEBUG] [Thread-18859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:19:15.448 [DEBUG] [Thread-18859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:19:15.449 [DEBUG] [Thread-18859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:19:15.467 [INFO] [Thread-18859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:19:15.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:19:15.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:19:16.292 [DEBUG] [Thread-18859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:19:16.292 [DEBUG] [Thread-18859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:19:16.340 [DEBUG] [Thread-18859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:19:16.340 [DEBUG] [Thread-18859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:19:16.349 [DEBUG] [Thread-18859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:19:16.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:19:16.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-11-12T16:19:16.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-11-12T16:19:16.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:19:16.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:19:16.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:19:16.386 [DEBUG] [Thread-18859] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:19:27.446 [DEBUG] [Thread-18861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:19:40.328 [DEBUG] [Thread-18862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:19:42.502 [DEBUG] [Thread-18863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:19:43.712 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:19:43.713 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:19:46.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:19:46.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:19:46.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-11-12T16:19:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 19, 20), 31.56, 12.37, 0.0, 32.1, 26.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:19:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:19:20
2025-11-12T16:19:47.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:19:47.322 [DEBUG] [Thread-18864] [transport.py] [_log()] starting thread (client mode): 0x173e8b20
2025-11-12T16:19:47.323 [DEBUG] [Thread-18864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:19:47.338 [DEBUG] [Thread-18864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:19:47.338 [INFO] [Thread-18864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] client lang: <none>
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] server lang: <none>
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] kex follows: False
2025-11-12T16:19:47.341 [DEBUG] [Thread-18864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:19:47.342 [DEBUG] [Thread-18864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:19:47.342 [DEBUG] [Thread-18864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:19:47.342 [DEBUG] [Thread-18864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:19:47.342 [DEBUG] [Thread-18864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:19:47.342 [DEBUG] [Thread-18864] [transport.py] [_log()] Compression: none
2025-11-12T16:19:47.342 [DEBUG] [Thread-18864] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:19:47.359 [DEBUG] [Thread-18864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:19:47.359 [DEBUG] [Thread-18864] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:19:47.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:19:47.360 [DEBUG] [Thread-18864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:19:47.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:19:47.362 [DEBUG] [Thread-18864] [transport.py] [_log()] userauth is OK
2025-11-12T16:19:47.362 [DEBUG] [Thread-18864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:19:47.362 [DEBUG] [Thread-18864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:19:47.363 [DEBUG] [Thread-18864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:19:47.363 [DEBUG] [Thread-18864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:19:47.398 [INFO] [Thread-18864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:19:47.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:19:47.995 [DEBUG] [Thread-18864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:19:47.995 [DEBUG] [Thread-18864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:19:47.995 [DEBUG] [Thread-18864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:19:48.036 [DEBUG] [Thread-18864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:19:48.036 [DEBUG] [Thread-18864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:19:48.039 [DEBUG] [Thread-18864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:19:48.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:19:48.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:19:48.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:19:48.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:19:48.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:19:48.055 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:19:48.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:19:48.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:19:48.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:19:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.596615 -999.00  +26.20  28.25     18   +0.60 1 1 1 1 1   888    0 25.40 -18.90 ----- 28.2 28.2 282.8 49.7 29.6 -25.6 29.5 -23.9 29.3 -24.2 30.1 -24.0
2025-11-12T16:19:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:19:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:19:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.596615
2025-11-12T16:19:48.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:19:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:19:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:19:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:19:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:19:48.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:19:20', tmtdew=31.56, humidity=12.37, cloud=0.0, wind=32.1, temperature=26.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:19:07.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:19:48.059 [DEBUG] [Thread-18864] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:19:48.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:19:48.154 [DEBUG] [Thread-18867] [transport.py] [_log()] starting thread (client mode): 0x1737d8a0
2025-11-12T16:19:48.154 [DEBUG] [Thread-18867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:19:48.170 [DEBUG] [Thread-18867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:19:48.170 [INFO] [Thread-18867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:19:48.178 [DEBUG] [Thread-18867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:19:48.178 [DEBUG] [Thread-18867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:19:48.178 [DEBUG] [Thread-18867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:19:48.178 [DEBUG] [Thread-18867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:19:48.178 [DEBUG] [Thread-18867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:19:48.178 [DEBUG] [Thread-18867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:19:48.179 [DEBUG] [Thread-18867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:19:48.179 [DEBUG] [Thread-18867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:19:48.179 [DEBUG] [Thread-18867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:19:48.179 [DEBUG] [Thread-18867] [transport.py] [_log()] client lang: <none>
2025-11-12T16:19:48.179 [DEBUG] [Thread-18867] [transport.py] [_log()] server lang: <none>
2025-11-12T16:19:48.179 [DEBUG] [Thread-18867] [transport.py] [_log()] kex follows: False
2025-11-12T16:19:48.179 [DEBUG] [Thread-18867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:19:48.179 [DEBUG] [Thread-18867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:19:48.180 [DEBUG] [Thread-18867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:19:48.180 [DEBUG] [Thread-18867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:19:48.180 [DEBUG] [Thread-18867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:19:48.180 [DEBUG] [Thread-18867] [transport.py] [_log()] Compression: none
2025-11-12T16:19:48.180 [DEBUG] [Thread-18867] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:19:48.237 [DEBUG] [Thread-18867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:19:48.238 [DEBUG] [Thread-18867] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:19:48.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:19:48.239 [DEBUG] [Thread-18867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:19:48.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:19:48.296 [DEBUG] [Thread-18867] [transport.py] [_log()] userauth is OK
2025-11-12T16:19:48.296 [DEBUG] [Thread-18867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:19:48.296 [DEBUG] [Thread-18867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:19:48.296 [DEBUG] [Thread-18867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:19:48.297 [DEBUG] [Thread-18867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:19:48.315 [INFO] [Thread-18867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:19:48.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:19:48.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:19:49.180 [DEBUG] [Thread-18867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:19:49.180 [DEBUG] [Thread-18867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:19:49.228 [DEBUG] [Thread-18867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:19:49.228 [DEBUG] [Thread-18867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:19:49.237 [DEBUG] [Thread-18867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:19:49.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:19:49.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-11-12T16:19:49.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-11-12T16:19:49.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:19:49.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:19:49.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:19:49.271 [DEBUG] [Thread-18867] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:19:57.537 [DEBUG] [Thread-18869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:20:12.587 [DEBUG] [Thread-18870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:20:19.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:20:19.295 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:20:19.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-11-12T16:20:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 19, 52), 31.03, 12.96, 0.0, 35.27, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:20:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:19:52
2025-11-12T16:20:20.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:20:20.204 [DEBUG] [Thread-18871] [transport.py] [_log()] starting thread (client mode): 0x1737ec20
2025-11-12T16:20:20.204 [DEBUG] [Thread-18871] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:20:20.225 [DEBUG] [Thread-18871] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:20:20.225 [INFO] [Thread-18871] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] client lang: <none>
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] server lang: <none>
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] kex follows: False
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] Compression: none
2025-11-12T16:20:20.228 [DEBUG] [Thread-18871] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:20:20.246 [DEBUG] [Thread-18871] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:20:20.247 [DEBUG] [Thread-18871] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:20:20.247 [DEBUG] [Thread-18871] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:20:20.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:20:20.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:20:20.249 [DEBUG] [Thread-18871] [transport.py] [_log()] userauth is OK
2025-11-12T16:20:20.249 [DEBUG] [Thread-18871] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:20:20.250 [DEBUG] [Thread-18871] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:20:20.250 [DEBUG] [Thread-18871] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:20:20.250 [DEBUG] [Thread-18871] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:20:20.286 [INFO] [Thread-18871] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:20:20.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:20:20.920 [DEBUG] [Thread-18871] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:20:20.921 [DEBUG] [Thread-18871] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:20:20.921 [DEBUG] [Thread-18871] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:20:20.962 [DEBUG] [Thread-18871] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:20:20.962 [DEBUG] [Thread-18871] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:20:20.966 [DEBUG] [Thread-18871] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:20:20.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:20:20.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:20:20.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:20:20.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:20:20.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:20:20.991 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:20:20.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:20:20.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:20:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:20:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.597309 -999.00  +26.20  28.42     19   +0.80 1 1 1 1 1   888    0 25.52 -16.53 ----- 28.4 28.4 284.2 50.9 29.4 -26.5 29.4 -24.0 29.3 -24.7 30.0 -24.5
2025-11-12T16:20:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:20:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:20:20.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.597309
2025-11-12T16:20:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:20:20.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:20:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:20:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:20:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:20:20.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:19:52', tmtdew=31.03, humidity=12.96, cloud=0.0, wind=35.27, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:20:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:20:20.994 [DEBUG] [Thread-18871] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:20:21.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:20:21.092 [DEBUG] [Thread-18874] [transport.py] [_log()] starting thread (client mode): 0x14981660
2025-11-12T16:20:21.092 [DEBUG] [Thread-18874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:20:21.106 [DEBUG] [Thread-18874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:20:21.107 [INFO] [Thread-18874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:20:21.114 [DEBUG] [Thread-18874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:20:21.114 [DEBUG] [Thread-18874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:20:21.114 [DEBUG] [Thread-18874] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] client lang: <none>
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] server lang: <none>
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] kex follows: False
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] Compression: none
2025-11-12T16:20:21.115 [DEBUG] [Thread-18874] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:20:21.172 [DEBUG] [Thread-18874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:20:21.173 [DEBUG] [Thread-18874] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:20:21.173 [DEBUG] [Thread-18874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:20:21.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:20:21.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:20:21.229 [DEBUG] [Thread-18874] [transport.py] [_log()] userauth is OK
2025-11-12T16:20:21.229 [DEBUG] [Thread-18874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:20:21.229 [DEBUG] [Thread-18874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:20:21.229 [DEBUG] [Thread-18874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:20:21.230 [DEBUG] [Thread-18874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:20:21.250 [INFO] [Thread-18874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:20:21.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:20:21.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:20:22.078 [DEBUG] [Thread-18874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:20:22.079 [DEBUG] [Thread-18874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:20:22.127 [DEBUG] [Thread-18874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:20:22.127 [DEBUG] [Thread-18874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:20:22.136 [DEBUG] [Thread-18874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:20:22.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:20:22.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-11-12T16:20:22.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-11-12T16:20:22.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:20:22.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:20:22.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:20:22.173 [DEBUG] [Thread-18874] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:20:27.623 [DEBUG] [Thread-18876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:20:40.362 [DEBUG] [Thread-18877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:20:42.680 [DEBUG] [Thread-18878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:20:43.855 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:20:43.856 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:20:52.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:20:52.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:20:52.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:20:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 20, 24), 31.08, 12.91, 0.0, 36.63, 27.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:20:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:20:24
2025-11-12T16:20:52.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:20:53.103 [DEBUG] [Thread-18879] [transport.py] [_log()] starting thread (client mode): 0x1493d7b0
2025-11-12T16:20:53.103 [DEBUG] [Thread-18879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:20:53.123 [DEBUG] [Thread-18879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:20:53.123 [INFO] [Thread-18879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:20:53.126 [DEBUG] [Thread-18879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] client lang: <none>
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] server lang: <none>
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] kex follows: False
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:20:53.127 [DEBUG] [Thread-18879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:20:53.128 [DEBUG] [Thread-18879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:20:53.128 [DEBUG] [Thread-18879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:20:53.128 [DEBUG] [Thread-18879] [transport.py] [_log()] Compression: none
2025-11-12T16:20:53.128 [DEBUG] [Thread-18879] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:20:53.145 [DEBUG] [Thread-18879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:20:53.146 [DEBUG] [Thread-18879] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:20:53.147 [DEBUG] [Thread-18879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:20:53.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:20:53.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:20:53.188 [DEBUG] [Thread-18879] [transport.py] [_log()] userauth is OK
2025-11-12T16:20:53.189 [DEBUG] [Thread-18879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:20:53.189 [DEBUG] [Thread-18879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:20:53.189 [DEBUG] [Thread-18879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:20:53.189 [DEBUG] [Thread-18879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:20:53.220 [INFO] [Thread-18879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:20:53.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:20:53.849 [DEBUG] [Thread-18879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:20:53.849 [DEBUG] [Thread-18879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:20:53.850 [DEBUG] [Thread-18879] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:20:53.891 [DEBUG] [Thread-18879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:20:53.891 [DEBUG] [Thread-18879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:20:53.894 [DEBUG] [Thread-18879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:20:53.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:20:53.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:20:53.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:20:53.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:20:53.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:20:53.917 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:20:53.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:20:53.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:20:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:20:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.597656 -999.00  +26.20  36.22     19   +0.90 1 1 2 1 1   888    0 25.97 -16.25 ----- 36.2 36.2 279.6 45.8 29.4 -25.5 29.3 -24.0 29.3 -25.9 29.9 -24.3
2025-11-12T16:20:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:20:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:20:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.597656
2025-11-12T16:20:53.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:20:53.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:20:53.919 [DEBUG] [Thread-18879] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:20:53.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:20:53.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:20:53.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:20:53.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:20:24', tmtdew=31.08, humidity=12.91, cloud=0.0, wind=36.63, temperature=27.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:20:37.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:20:54.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:20:54.017 [DEBUG] [Thread-18882] [transport.py] [_log()] starting thread (client mode): 0x173bc490
2025-11-12T16:20:54.017 [DEBUG] [Thread-18882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:20:54.031 [DEBUG] [Thread-18882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:20:54.031 [INFO] [Thread-18882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] client lang: <none>
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] server lang: <none>
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] kex follows: False
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:20:54.039 [DEBUG] [Thread-18882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:20:54.040 [DEBUG] [Thread-18882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:20:54.040 [DEBUG] [Thread-18882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:20:54.040 [DEBUG] [Thread-18882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:20:54.040 [DEBUG] [Thread-18882] [transport.py] [_log()] Compression: none
2025-11-12T16:20:54.040 [DEBUG] [Thread-18882] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:20:54.095 [DEBUG] [Thread-18882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:20:54.096 [DEBUG] [Thread-18882] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:20:54.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:20:54.097 [DEBUG] [Thread-18882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:20:54.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:20:54.152 [DEBUG] [Thread-18882] [transport.py] [_log()] userauth is OK
2025-11-12T16:20:54.152 [DEBUG] [Thread-18882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:20:54.152 [DEBUG] [Thread-18882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:20:54.152 [DEBUG] [Thread-18882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:20:54.152 [DEBUG] [Thread-18882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:20:54.171 [INFO] [Thread-18882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:20:54.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:20:54.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:20:55.055 [DEBUG] [Thread-18882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:20:55.056 [DEBUG] [Thread-18882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:20:55.102 [DEBUG] [Thread-18882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:20:55.102 [DEBUG] [Thread-18882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:20:55.112 [DEBUG] [Thread-18882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:20:55.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:20:55.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-11-12T16:20:55.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-11-12T16:20:55.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:20:55.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:20:55.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:20:55.147 [DEBUG] [Thread-18882] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:20:57.717 [DEBUG] [Thread-18884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:21:12.758 [DEBUG] [Thread-18885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:21:25.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:21:25.170 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:21:25.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-11-12T16:21:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 20, 56), 30.99, 13.01, 0.0, 37.21, 27.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:21:25.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:20:56
2025-11-12T16:21:25.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:21:26.082 [DEBUG] [Thread-18886] [transport.py] [_log()] starting thread (client mode): 0x173fb760
2025-11-12T16:21:26.082 [DEBUG] [Thread-18886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:21:26.102 [DEBUG] [Thread-18886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:21:26.102 [INFO] [Thread-18886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:21:26.105 [DEBUG] [Thread-18886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:21:26.105 [DEBUG] [Thread-18886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:21:26.105 [DEBUG] [Thread-18886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:21:26.105 [DEBUG] [Thread-18886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:21:26.105 [DEBUG] [Thread-18886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:21:26.105 [DEBUG] [Thread-18886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] client lang: <none>
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] server lang: <none>
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] kex follows: False
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] Compression: none
2025-11-12T16:21:26.106 [DEBUG] [Thread-18886] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:21:26.124 [DEBUG] [Thread-18886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:21:26.125 [DEBUG] [Thread-18886] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:21:26.125 [DEBUG] [Thread-18886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:21:26.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:21:26.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:21:26.127 [DEBUG] [Thread-18886] [transport.py] [_log()] userauth is OK
2025-11-12T16:21:26.127 [DEBUG] [Thread-18886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:21:26.127 [DEBUG] [Thread-18886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:21:26.128 [DEBUG] [Thread-18886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:21:26.128 [DEBUG] [Thread-18886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:21:26.149 [INFO] [Thread-18886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:21:26.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:21:26.746 [DEBUG] [Thread-18886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:21:26.747 [DEBUG] [Thread-18886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:21:26.747 [DEBUG] [Thread-18886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:21:26.788 [DEBUG] [Thread-18886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:21:26.788 [DEBUG] [Thread-18886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:21:26.791 [DEBUG] [Thread-18886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:21:26.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:21:26.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:21:26.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:21:26.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:21:26.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:21:26.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:21:26.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:21:26.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:21:26.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:21:26.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.598003 -999.00  +25.80  25.40     19   +0.90 1 1 1 1 1   888    0 25.32 -20.50 ----- 25.4 25.4 278.4 43.9 29.2 -25.7 29.1 -23.9 29.0 -27.4 29.7 -24.1
2025-11-12T16:21:26.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:21:26.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:21:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.598003
2025-11-12T16:21:26.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:21:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:21:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:21:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:21:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:21:26.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:20:56', tmtdew=30.99, humidity=13.01, cloud=0.0, wind=37.21, temperature=27.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:21:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:21:26.819 [DEBUG] [Thread-18886] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:21:26.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:21:26.914 [DEBUG] [Thread-18889] [transport.py] [_log()] starting thread (client mode): 0x173f9480
2025-11-12T16:21:26.915 [DEBUG] [Thread-18889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:21:26.929 [DEBUG] [Thread-18889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:21:26.930 [INFO] [Thread-18889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] client lang: <none>
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] server lang: <none>
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] kex follows: False
2025-11-12T16:21:26.937 [DEBUG] [Thread-18889] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:21:26.938 [DEBUG] [Thread-18889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:21:26.938 [DEBUG] [Thread-18889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:21:26.938 [DEBUG] [Thread-18889] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:21:26.938 [DEBUG] [Thread-18889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:21:26.938 [DEBUG] [Thread-18889] [transport.py] [_log()] Compression: none
2025-11-12T16:21:26.938 [DEBUG] [Thread-18889] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:21:26.996 [DEBUG] [Thread-18889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:21:26.997 [DEBUG] [Thread-18889] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:21:26.997 [DEBUG] [Thread-18889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:21:26.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:21:26.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:21:27.052 [DEBUG] [Thread-18889] [transport.py] [_log()] userauth is OK
2025-11-12T16:21:27.052 [DEBUG] [Thread-18889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:21:27.053 [DEBUG] [Thread-18889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:21:27.053 [DEBUG] [Thread-18889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:21:27.053 [DEBUG] [Thread-18889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:21:27.073 [INFO] [Thread-18889] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:21:27.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:21:27.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:21:27.787 [DEBUG] [Thread-18891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:21:27.923 [DEBUG] [Thread-18889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:21:27.923 [DEBUG] [Thread-18889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:21:27.971 [DEBUG] [Thread-18889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:21:27.971 [DEBUG] [Thread-18889] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:21:27.980 [DEBUG] [Thread-18889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:21:27.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:21:27.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-11-12T16:21:27.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-11-12T16:21:28.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:21:28.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:21:28.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:21:28.016 [DEBUG] [Thread-18889] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:21:40.396 [DEBUG] [Thread-18892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:21:42.843 [DEBUG] [Thread-18893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:21:43.997 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:21:43.998 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:21:57.882 [DEBUG] [Thread-18894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:21:58.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:21:58.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:21:58.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-11-12T16:21:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 21, 28), 30.68, 13.27, 0.0, 37.46, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:21:58.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:21:28
2025-11-12T16:21:58.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:21:58.929 [DEBUG] [Thread-18895] [transport.py] [_log()] starting thread (client mode): 0x173be290
2025-11-12T16:21:58.929 [DEBUG] [Thread-18895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:21:58.950 [DEBUG] [Thread-18895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:21:58.951 [INFO] [Thread-18895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:21:58.954 [DEBUG] [Thread-18895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] client lang: <none>
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] server lang: <none>
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] kex follows: False
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] Compression: none
2025-11-12T16:21:58.955 [DEBUG] [Thread-18895] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:21:58.972 [DEBUG] [Thread-18895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:21:58.973 [DEBUG] [Thread-18895] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:21:58.973 [DEBUG] [Thread-18895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:21:58.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:21:58.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:21:58.975 [DEBUG] [Thread-18895] [transport.py] [_log()] userauth is OK
2025-11-12T16:21:58.975 [DEBUG] [Thread-18895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:21:58.976 [DEBUG] [Thread-18895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:21:58.976 [DEBUG] [Thread-18895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:21:58.976 [DEBUG] [Thread-18895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:21:59.000 [INFO] [Thread-18895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:21:59.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:21:59.570 [DEBUG] [Thread-18895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:21:59.570 [DEBUG] [Thread-18895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:21:59.570 [DEBUG] [Thread-18895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:21:59.610 [DEBUG] [Thread-18895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:21:59.611 [DEBUG] [Thread-18895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:21:59.614 [DEBUG] [Thread-18895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:21:59.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:21:59.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:21:59.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:21:59.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:21:59.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:21:59.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:21:59.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:21:59.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:21:59.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:21:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.598351 -999.00  +25.90  38.79     19   +0.90 1 1 2 1 1   888    0 24.78 -25.92 ----- 38.8 38.8 274.0 44.7 29.1 -25.1 29.1 -23.6 28.9 -24.0 29.6 -24.1
2025-11-12T16:21:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:21:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:21:59.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.598351
2025-11-12T16:21:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:21:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:21:59.642 [DEBUG] [Thread-18895] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:21:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:21:59.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:21:59.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:21:59.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:21:28', tmtdew=30.68, humidity=13.27, cloud=0.0, wind=37.46, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:21:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:21:59.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:21:59.751 [DEBUG] [Thread-18898] [transport.py] [_log()] starting thread (client mode): 0x149db730
2025-11-12T16:21:59.751 [DEBUG] [Thread-18898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:21:59.766 [DEBUG] [Thread-18898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:21:59.766 [INFO] [Thread-18898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:21:59.773 [DEBUG] [Thread-18898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] client lang: <none>
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] server lang: <none>
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] kex follows: False
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:21:59.774 [DEBUG] [Thread-18898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:21:59.775 [DEBUG] [Thread-18898] [transport.py] [_log()] Compression: none
2025-11-12T16:21:59.775 [DEBUG] [Thread-18898] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:21:59.832 [DEBUG] [Thread-18898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:21:59.833 [DEBUG] [Thread-18898] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:21:59.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:21:59.834 [DEBUG] [Thread-18898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:21:59.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:21:59.892 [DEBUG] [Thread-18898] [transport.py] [_log()] userauth is OK
2025-11-12T16:21:59.892 [DEBUG] [Thread-18898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:21:59.892 [DEBUG] [Thread-18898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:21:59.892 [DEBUG] [Thread-18898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:21:59.893 [DEBUG] [Thread-18898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:21:59.911 [INFO] [Thread-18898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:21:59.911 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:21:59.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:22:00.767 [DEBUG] [Thread-18898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:22:00.768 [DEBUG] [Thread-18898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:22:00.815 [DEBUG] [Thread-18898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:22:00.816 [DEBUG] [Thread-18898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:22:00.825 [DEBUG] [Thread-18898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:22:00.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:22:00.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-11-12T16:22:00.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-11-12T16:22:00.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:22:00.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:22:00.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:22:00.862 [DEBUG] [Thread-18898] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:22:12.918 [DEBUG] [Thread-18900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:22:27.969 [DEBUG] [Thread-18901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:22:30.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:22:30.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:22:30.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-11-12T16:22:31.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 22), 30.72, 13.29, 0.0, 36.37, 27.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:22:31.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:22:00
2025-11-12T16:22:31.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:22:31.806 [DEBUG] [Thread-18902] [transport.py] [_log()] starting thread (client mode): 0x19ddb430
2025-11-12T16:22:31.806 [DEBUG] [Thread-18902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:22:31.825 [DEBUG] [Thread-18902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:22:31.825 [INFO] [Thread-18902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] client lang: <none>
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] server lang: <none>
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] kex follows: False
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:22:31.828 [DEBUG] [Thread-18902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:22:31.829 [DEBUG] [Thread-18902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:22:31.829 [DEBUG] [Thread-18902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:22:31.829 [DEBUG] [Thread-18902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:22:31.829 [DEBUG] [Thread-18902] [transport.py] [_log()] Compression: none
2025-11-12T16:22:31.829 [DEBUG] [Thread-18902] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:22:31.844 [DEBUG] [Thread-18902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:22:31.845 [DEBUG] [Thread-18902] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:22:31.845 [DEBUG] [Thread-18902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:22:31.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:22:31.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:22:31.845 [DEBUG] [Thread-18902] [transport.py] [_log()] userauth is OK
2025-11-12T16:22:31.845 [DEBUG] [Thread-18902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:22:31.845 [DEBUG] [Thread-18902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:22:31.845 [DEBUG] [Thread-18902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:22:31.845 [DEBUG] [Thread-18902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:22:31.854 [INFO] [Thread-18902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:22:31.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:22:32.492 [DEBUG] [Thread-18902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:22:32.493 [DEBUG] [Thread-18902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:22:32.493 [DEBUG] [Thread-18902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:22:32.534 [DEBUG] [Thread-18902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:22:32.534 [DEBUG] [Thread-18902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:22:32.537 [DEBUG] [Thread-18902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:22:32.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:22:32.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:22:32.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:22:32.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:22:32.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:22:32.554 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:22:32.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.598698 -999.00  +25.70  34.57     19   +0.80 1 1 2 1 1   888    0 25.20 -29.58 ----- 34.6 34.6 280.0 45.8 28.9 -25.6 28.9 -23.4 28.6 -27.4 29.4 -24.9
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.598698
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:22:32.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:22:00', tmtdew=30.72, humidity=13.29, cloud=0.0, wind=36.37, temperature=27.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:22:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:22:32.555 [DEBUG] [Thread-18902] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:22:32.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:22:32.639 [DEBUG] [Thread-18905] [transport.py] [_log()] starting thread (client mode): 0x1493c580
2025-11-12T16:22:32.639 [DEBUG] [Thread-18905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:22:32.657 [DEBUG] [Thread-18905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:22:32.657 [INFO] [Thread-18905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] client lang: <none>
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] server lang: <none>
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] kex follows: False
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] Compression: none
2025-11-12T16:22:32.665 [DEBUG] [Thread-18905] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:22:32.722 [DEBUG] [Thread-18905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:22:32.722 [DEBUG] [Thread-18905] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:22:32.722 [DEBUG] [Thread-18905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:22:32.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:22:32.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:22:32.779 [DEBUG] [Thread-18905] [transport.py] [_log()] userauth is OK
2025-11-12T16:22:32.779 [DEBUG] [Thread-18905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:22:32.779 [DEBUG] [Thread-18905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:22:32.779 [DEBUG] [Thread-18905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:22:32.779 [DEBUG] [Thread-18905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:22:32.793 [INFO] [Thread-18905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:22:32.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:22:32.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:22:33.664 [DEBUG] [Thread-18905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:22:33.664 [DEBUG] [Thread-18905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:22:33.712 [DEBUG] [Thread-18905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:22:33.713 [DEBUG] [Thread-18905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:22:33.721 [DEBUG] [Thread-18905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:22:33.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:22:33.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-11-12T16:22:33.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-11-12T16:22:33.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:22:33.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:22:33.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:22:33.754 [DEBUG] [Thread-18905] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:22:40.432 [DEBUG] [Thread-18907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:22:43.005 [DEBUG] [Thread-18908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:22:44.137 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:22:44.138 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:22:58.057 [DEBUG] [Thread-18909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:23:03.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:23:03.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:23:03.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:23:04.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 22, 32), 30.82, 13.19, 0.0, 39.73, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:23:04.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:22:32
2025-11-12T16:23:04.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:23:04.709 [DEBUG] [Thread-18910] [transport.py] [_log()] starting thread (client mode): 0x17398400
2025-11-12T16:23:04.710 [DEBUG] [Thread-18910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:23:04.728 [DEBUG] [Thread-18910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:23:04.728 [INFO] [Thread-18910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] client lang: <none>
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] server lang: <none>
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] kex follows: False
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:23:04.731 [DEBUG] [Thread-18910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:23:04.732 [DEBUG] [Thread-18910] [transport.py] [_log()] Compression: none
2025-11-12T16:23:04.732 [DEBUG] [Thread-18910] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:23:04.748 [DEBUG] [Thread-18910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:23:04.748 [DEBUG] [Thread-18910] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:23:04.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:23:04.749 [DEBUG] [Thread-18910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:23:04.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:23:04.751 [DEBUG] [Thread-18910] [transport.py] [_log()] userauth is OK
2025-11-12T16:23:04.751 [DEBUG] [Thread-18910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:23:04.752 [DEBUG] [Thread-18910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:23:04.752 [DEBUG] [Thread-18910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:23:04.752 [DEBUG] [Thread-18910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:23:04.770 [INFO] [Thread-18910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:23:04.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:23:05.420 [DEBUG] [Thread-18910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:23:05.420 [DEBUG] [Thread-18910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:23:05.420 [DEBUG] [Thread-18910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:23:05.461 [DEBUG] [Thread-18910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:23:05.461 [DEBUG] [Thread-18910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:23:05.463 [DEBUG] [Thread-18910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:23:05.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:23:05.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:23:05.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:23:05.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:23:05.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:23:05.481 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:23:05.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:23:05.481 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.599045 -999.00  +25.70  24.01     19   +0.80 1 1 1 1 1   888    0 24.51 -31.89 ----- 24.0 24.0 275.8 38.1 28.8 -24.7 28.8 -23.5 28.6 -26.7 29.2 -25.0
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.599045
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:23:05.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:22:32', tmtdew=30.82, humidity=13.19, cloud=0.0, wind=39.73, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:22:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:23:05.483 [DEBUG] [Thread-18910] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:23:05.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:23:05.568 [DEBUG] [Thread-18913] [transport.py] [_log()] starting thread (client mode): 0x17398820
2025-11-12T16:23:05.568 [DEBUG] [Thread-18913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:23:05.583 [DEBUG] [Thread-18913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:23:05.583 [INFO] [Thread-18913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] client lang: <none>
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] server lang: <none>
2025-11-12T16:23:05.590 [DEBUG] [Thread-18913] [transport.py] [_log()] kex follows: False
2025-11-12T16:23:05.591 [DEBUG] [Thread-18913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:23:05.591 [DEBUG] [Thread-18913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:23:05.591 [DEBUG] [Thread-18913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:23:05.591 [DEBUG] [Thread-18913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:23:05.591 [DEBUG] [Thread-18913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:23:05.591 [DEBUG] [Thread-18913] [transport.py] [_log()] Compression: none
2025-11-12T16:23:05.591 [DEBUG] [Thread-18913] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:23:05.646 [DEBUG] [Thread-18913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:23:05.646 [DEBUG] [Thread-18913] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:23:05.647 [DEBUG] [Thread-18913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:23:05.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:23:05.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:23:05.703 [DEBUG] [Thread-18913] [transport.py] [_log()] userauth is OK
2025-11-12T16:23:05.703 [DEBUG] [Thread-18913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:23:05.703 [DEBUG] [Thread-18913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:23:05.703 [DEBUG] [Thread-18913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:23:05.703 [DEBUG] [Thread-18913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:23:05.717 [INFO] [Thread-18913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:23:05.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:23:05.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:23:06.552 [DEBUG] [Thread-18913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:23:06.552 [DEBUG] [Thread-18913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:23:06.600 [DEBUG] [Thread-18913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:23:06.600 [DEBUG] [Thread-18913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:23:06.608 [DEBUG] [Thread-18913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:23:06.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:23:06.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:23:06.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-11-12T16:23:06.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:23:06.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:23:06.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:23:06.640 [DEBUG] [Thread-18913] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:23:13.090 [DEBUG] [Thread-18915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:23:28.140 [DEBUG] [Thread-18916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:23:36.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:23:36.635 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:23:36.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-11-12T16:23:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 23, 4), 30.65, 13.32, 0.0, 37.04, 26.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:23:37.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:23:04
2025-11-12T16:23:37.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:23:37.619 [DEBUG] [Thread-18917] [transport.py] [_log()] starting thread (client mode): 0x1493d1e0
2025-11-12T16:23:37.619 [DEBUG] [Thread-18917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:23:37.639 [DEBUG] [Thread-18917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:23:37.639 [INFO] [Thread-18917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] client lang: <none>
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] server lang: <none>
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] kex follows: False
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] Compression: none
2025-11-12T16:23:37.643 [DEBUG] [Thread-18917] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:23:37.659 [DEBUG] [Thread-18917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:23:37.659 [DEBUG] [Thread-18917] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:23:37.659 [DEBUG] [Thread-18917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:23:37.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:23:37.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:23:37.660 [DEBUG] [Thread-18917] [transport.py] [_log()] userauth is OK
2025-11-12T16:23:37.660 [DEBUG] [Thread-18917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:23:37.660 [DEBUG] [Thread-18917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:23:37.660 [DEBUG] [Thread-18917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:23:37.660 [DEBUG] [Thread-18917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:23:37.675 [INFO] [Thread-18917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:23:37.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:23:38.303 [DEBUG] [Thread-18917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:23:38.303 [DEBUG] [Thread-18917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:23:38.303 [DEBUG] [Thread-18917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:23:38.344 [DEBUG] [Thread-18917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:23:38.344 [DEBUG] [Thread-18917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:23:38.346 [DEBUG] [Thread-18917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:23:38.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:23:38.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:23:38.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:23:38.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:23:38.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:23:38.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:23:38.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.599392 -999.00  +25.70  24.51     19   +0.80 1 1 1 1 1   888    0 24.14 -37.25 ----- 24.5 24.5 278.2 36.2 28.8 -25.1 28.8 -23.1 28.6 -25.1 29.1 -23.8
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.599392
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:23:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:23:04', tmtdew=30.65, humidity=13.32, cloud=0.0, wind=37.04, temperature=26.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:23:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:23:38.367 [DEBUG] [Thread-18917] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:23:38.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:23:38.452 [DEBUG] [Thread-18920] [transport.py] [_log()] starting thread (client mode): 0x14960670
2025-11-12T16:23:38.452 [DEBUG] [Thread-18920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:23:38.467 [DEBUG] [Thread-18920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:23:38.467 [INFO] [Thread-18920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:23:38.475 [DEBUG] [Thread-18920] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:23:38.475 [DEBUG] [Thread-18920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:23:38.475 [DEBUG] [Thread-18920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:23:38.475 [DEBUG] [Thread-18920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:23:38.475 [DEBUG] [Thread-18920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:23:38.475 [DEBUG] [Thread-18920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:23:38.475 [DEBUG] [Thread-18920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:23:38.475 [DEBUG] [Thread-18920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] client lang: <none>
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] server lang: <none>
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] kex follows: False
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] Compression: none
2025-11-12T16:23:38.476 [DEBUG] [Thread-18920] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:23:38.531 [DEBUG] [Thread-18920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:23:38.531 [DEBUG] [Thread-18920] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:23:38.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:23:38.532 [DEBUG] [Thread-18920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:23:38.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:23:38.587 [DEBUG] [Thread-18920] [transport.py] [_log()] userauth is OK
2025-11-12T16:23:38.587 [DEBUG] [Thread-18920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:23:38.587 [DEBUG] [Thread-18920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:23:38.587 [DEBUG] [Thread-18920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:23:38.587 [DEBUG] [Thread-18920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:23:38.604 [INFO] [Thread-18920] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:23:38.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:23:38.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:23:39.444 [DEBUG] [Thread-18920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:23:39.445 [DEBUG] [Thread-18920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:23:39.492 [DEBUG] [Thread-18920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:23:39.493 [DEBUG] [Thread-18920] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:23:39.502 [DEBUG] [Thread-18920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:23:39.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:23:39.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:23:39.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-11-12T16:23:39.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:23:39.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:23:39.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:23:39.539 [DEBUG] [Thread-18920] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:23:40.483 [DEBUG] [Thread-18922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:23:43.179 [DEBUG] [Thread-18923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:23:44.281 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:23:44.282 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:23:58.226 [DEBUG] [Thread-18924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:24:09.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:24:09.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:24:09.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-11-12T16:24:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 23, 36), 30.58, 13.25, 0.0, 37.25, 26.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:24:10.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:23:36
2025-11-12T16:24:10.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:24:10.535 [DEBUG] [Thread-18925] [transport.py] [_log()] starting thread (client mode): 0x14982950
2025-11-12T16:24:10.535 [DEBUG] [Thread-18925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:24:10.555 [DEBUG] [Thread-18925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:24:10.555 [INFO] [Thread-18925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] client lang: <none>
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] server lang: <none>
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] kex follows: False
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:24:10.558 [DEBUG] [Thread-18925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:24:10.559 [DEBUG] [Thread-18925] [transport.py] [_log()] Compression: none
2025-11-12T16:24:10.559 [DEBUG] [Thread-18925] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:24:10.574 [DEBUG] [Thread-18925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:24:10.574 [DEBUG] [Thread-18925] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:24:10.574 [DEBUG] [Thread-18925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:24:10.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:24:10.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:24:10.616 [DEBUG] [Thread-18925] [transport.py] [_log()] userauth is OK
2025-11-12T16:24:10.616 [DEBUG] [Thread-18925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:24:10.616 [DEBUG] [Thread-18925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:24:10.616 [DEBUG] [Thread-18925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:24:10.616 [DEBUG] [Thread-18925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:24:10.644 [INFO] [Thread-18925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:24:10.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:24:11.291 [DEBUG] [Thread-18925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:24:11.292 [DEBUG] [Thread-18925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:24:11.292 [DEBUG] [Thread-18925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:24:11.333 [DEBUG] [Thread-18925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:24:11.333 [DEBUG] [Thread-18925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:24:11.336 [DEBUG] [Thread-18925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:24:11.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:24:11.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:24:11.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:24:11.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:24:11.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:24:11.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:24:11.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:24:11.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:24:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:24:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.599740 -999.00  +25.90  35.39     19   +0.80 1 1 2 1 1   888    0 24.47 -41.93 ----- 35.4 35.4 272.2 44.8 28.8 -25.4 28.8 -23.7 28.6 -23.1 29.2 -24.0
2025-11-12T16:24:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:24:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:24:11.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.599740
2025-11-12T16:24:11.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:24:11.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:24:11.360 [DEBUG] [Thread-18925] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:24:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:24:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:24:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:24:11.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:23:36', tmtdew=30.58, humidity=13.25, cloud=0.0, wind=37.25, temperature=26.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:23:37.536', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:24:11.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:24:11.457 [DEBUG] [Thread-18928] [transport.py] [_log()] starting thread (client mode): 0x1493e710
2025-11-12T16:24:11.458 [DEBUG] [Thread-18928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:24:11.471 [DEBUG] [Thread-18928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:24:11.472 [INFO] [Thread-18928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] client lang: <none>
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] server lang: <none>
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] kex follows: False
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] Compression: none
2025-11-12T16:24:11.479 [DEBUG] [Thread-18928] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:24:11.540 [DEBUG] [Thread-18928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:24:11.540 [DEBUG] [Thread-18928] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:24:11.541 [DEBUG] [Thread-18928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:24:11.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:24:11.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:24:11.595 [DEBUG] [Thread-18928] [transport.py] [_log()] userauth is OK
2025-11-12T16:24:11.596 [DEBUG] [Thread-18928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:24:11.596 [DEBUG] [Thread-18928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:24:11.596 [DEBUG] [Thread-18928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:24:11.596 [DEBUG] [Thread-18928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:24:11.614 [INFO] [Thread-18928] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:24:11.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:24:11.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:24:12.446 [DEBUG] [Thread-18928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:24:12.446 [DEBUG] [Thread-18928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:24:12.493 [DEBUG] [Thread-18928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:24:12.494 [DEBUG] [Thread-18928] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:24:12.503 [DEBUG] [Thread-18928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:24:12.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:24:12.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:24:12.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-11-12T16:24:12.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:24:12.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:24:12.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:24:12.539 [DEBUG] [Thread-18928] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:24:13.264 [DEBUG] [Thread-18930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:24:28.313 [DEBUG] [Thread-18931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:24:40.516 [DEBUG] [Thread-18932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:24:42.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:24:42.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:24:42.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-11-12T16:24:43.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 24, 8), 30.54, 13.29, 0.0, 35.36, 26.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:24:43.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:24:08
2025-11-12T16:24:43.343 [DEBUG] [Thread-18933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:24:43.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:24:43.523 [DEBUG] [Thread-18934] [transport.py] [_log()] starting thread (client mode): 0x149610f0
2025-11-12T16:24:43.523 [DEBUG] [Thread-18934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:24:43.543 [DEBUG] [Thread-18934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:24:43.543 [INFO] [Thread-18934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:24:43.546 [DEBUG] [Thread-18934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:24:43.546 [DEBUG] [Thread-18934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:24:43.546 [DEBUG] [Thread-18934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:24:43.546 [DEBUG] [Thread-18934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] client lang: <none>
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] server lang: <none>
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] kex follows: False
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] Compression: none
2025-11-12T16:24:43.547 [DEBUG] [Thread-18934] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:24:43.566 [DEBUG] [Thread-18934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:24:43.566 [DEBUG] [Thread-18934] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:24:43.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:24:43.567 [DEBUG] [Thread-18934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:24:43.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:24:43.569 [DEBUG] [Thread-18934] [transport.py] [_log()] userauth is OK
2025-11-12T16:24:43.569 [DEBUG] [Thread-18934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:24:43.569 [DEBUG] [Thread-18934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:24:43.569 [DEBUG] [Thread-18934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:24:43.569 [DEBUG] [Thread-18934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:24:43.604 [INFO] [Thread-18934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:24:43.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:24:44.243 [DEBUG] [Thread-18934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:24:44.244 [DEBUG] [Thread-18934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:24:44.244 [DEBUG] [Thread-18934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:24:44.284 [DEBUG] [Thread-18934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:24:44.285 [DEBUG] [Thread-18934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:24:44.288 [DEBUG] [Thread-18934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:24:44.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:24:44.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:24:44.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:24:44.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:24:44.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:24:44.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:24:44.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:24:44.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:24:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:24:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.600087 -999.00  +25.70  39.28     19   +0.70 1 1 2 1 1   888    0 24.35 -42.61 ----- 39.3 39.3 269.4 42.1 28.6 -25.9 28.6 -23.3 28.3 -25.1 29.0 -23.6
2025-11-12T16:24:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:24:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:24:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.600087
2025-11-12T16:24:44.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:24:44.311 [DEBUG] [Thread-18934] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:24:44.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:24:44.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:24:44.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:24:44.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:24:44.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:24:08', tmtdew=30.54, humidity=13.29, cloud=0.0, wind=35.36, temperature=26.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:24:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:24:44.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:24:44.410 [DEBUG] [Thread-18937] [transport.py] [_log()] starting thread (client mode): 0x14961480
2025-11-12T16:24:44.410 [DEBUG] [Thread-18937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:24:44.423 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:24:44.423 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:24:44.424 [DEBUG] [Thread-18937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:24:44.424 [INFO] [Thread-18937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] client lang: <none>
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] server lang: <none>
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] kex follows: False
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:24:44.432 [DEBUG] [Thread-18937] [transport.py] [_log()] Compression: none
2025-11-12T16:24:44.433 [DEBUG] [Thread-18937] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:24:44.491 [DEBUG] [Thread-18937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:24:44.491 [DEBUG] [Thread-18937] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:24:44.492 [DEBUG] [Thread-18937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:24:44.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:24:44.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:24:44.547 [DEBUG] [Thread-18937] [transport.py] [_log()] userauth is OK
2025-11-12T16:24:44.547 [DEBUG] [Thread-18937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:24:44.547 [DEBUG] [Thread-18937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:24:44.548 [DEBUG] [Thread-18937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:24:44.548 [DEBUG] [Thread-18937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:24:44.566 [INFO] [Thread-18937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:24:44.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:24:44.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:24:45.401 [DEBUG] [Thread-18937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:24:45.402 [DEBUG] [Thread-18937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:24:45.449 [DEBUG] [Thread-18937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:24:45.449 [DEBUG] [Thread-18937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:24:45.458 [DEBUG] [Thread-18937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:24:45.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:24:45.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-11-12T16:24:45.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-11-12T16:24:45.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:24:45.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:24:45.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:24:45.491 [DEBUG] [Thread-18937] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:24:58.377 [DEBUG] [Thread-18939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:25:13.424 [DEBUG] [Thread-18940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:25:15.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:25:15.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:25:15.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-11-12T16:25:16.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 25, 12), 30.68, 13.11, 0.0, 40.83, 26.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:25:16.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:25:12
2025-11-12T16:25:16.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:25:16.442 [DEBUG] [Thread-18941] [transport.py] [_log()] starting thread (client mode): 0x14982f80
2025-11-12T16:25:16.442 [DEBUG] [Thread-18941] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:25:16.463 [DEBUG] [Thread-18941] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:25:16.463 [INFO] [Thread-18941] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:25:16.464 [DEBUG] [Thread-18941] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:25:16.464 [DEBUG] [Thread-18941] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:25:16.464 [DEBUG] [Thread-18941] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:25:16.464 [DEBUG] [Thread-18941] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:25:16.464 [DEBUG] [Thread-18941] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:25:16.464 [DEBUG] [Thread-18941] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:25:16.464 [DEBUG] [Thread-18941] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] client lang: <none>
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] server lang: <none>
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] kex follows: False
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] Compression: none
2025-11-12T16:25:16.465 [DEBUG] [Thread-18941] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:25:16.472 [DEBUG] [Thread-18941] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:25:16.473 [DEBUG] [Thread-18941] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:25:16.473 [DEBUG] [Thread-18941] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:25:16.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:25:16.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:25:16.474 [DEBUG] [Thread-18941] [transport.py] [_log()] userauth is OK
2025-11-12T16:25:16.474 [DEBUG] [Thread-18941] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:25:16.475 [DEBUG] [Thread-18941] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:25:16.475 [DEBUG] [Thread-18941] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:25:16.475 [DEBUG] [Thread-18941] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:25:16.491 [INFO] [Thread-18941] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:25:16.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:25:17.152 [DEBUG] [Thread-18941] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:25:17.153 [DEBUG] [Thread-18941] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:25:17.153 [DEBUG] [Thread-18941] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:25:17.193 [DEBUG] [Thread-18941] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:25:17.194 [DEBUG] [Thread-18941] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:25:17.197 [DEBUG] [Thread-18941] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:25:17.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:25:17.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:25:17.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:25:17.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:25:17.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:25:17.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:25:17.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:25:17.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:25:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:25:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.600781 -999.00  +25.70  37.03     19   +0.80 1 1 2 1 1   888    0 24.47 -53.94 ----- 37.0 37.0 279.8 43.9 28.5 -25.0 28.5 -23.0 28.2 -23.5 28.7 -24.3
2025-11-12T16:25:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:25:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:25:17.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.600781
2025-11-12T16:25:17.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:25:17.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:25:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:25:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:25:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:25:17.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:25:12', tmtdew=30.68, humidity=13.11, cloud=0.0, wind=40.83, temperature=26.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:25:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:25:17.227 [DEBUG] [Thread-18941] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:25:17.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:25:17.326 [DEBUG] [Thread-18944] [transport.py] [_log()] starting thread (client mode): 0x1493d7b0
2025-11-12T16:25:17.326 [DEBUG] [Thread-18944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:25:17.341 [DEBUG] [Thread-18944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:25:17.342 [INFO] [Thread-18944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] client lang: <none>
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] server lang: <none>
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] kex follows: False
2025-11-12T16:25:17.349 [DEBUG] [Thread-18944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:25:17.350 [DEBUG] [Thread-18944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:25:17.350 [DEBUG] [Thread-18944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:25:17.350 [DEBUG] [Thread-18944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:25:17.350 [DEBUG] [Thread-18944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:25:17.350 [DEBUG] [Thread-18944] [transport.py] [_log()] Compression: none
2025-11-12T16:25:17.350 [DEBUG] [Thread-18944] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:25:17.415 [DEBUG] [Thread-18944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:25:17.415 [DEBUG] [Thread-18944] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:25:17.416 [DEBUG] [Thread-18944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:25:17.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:25:17.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:25:17.473 [DEBUG] [Thread-18944] [transport.py] [_log()] userauth is OK
2025-11-12T16:25:17.473 [DEBUG] [Thread-18944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:25:17.473 [DEBUG] [Thread-18944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:25:17.473 [DEBUG] [Thread-18944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:25:17.473 [DEBUG] [Thread-18944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:25:17.492 [INFO] [Thread-18944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:25:17.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:25:17.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:25:18.321 [DEBUG] [Thread-18944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:25:18.322 [DEBUG] [Thread-18944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:25:18.370 [DEBUG] [Thread-18944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:25:18.370 [DEBUG] [Thread-18944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:25:18.379 [DEBUG] [Thread-18944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:25:18.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:25:18.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-11-12T16:25:18.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-11-12T16:25:18.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:25:18.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:25:18.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:25:18.416 [DEBUG] [Thread-18944] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:25:28.461 [DEBUG] [Thread-18946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:25:40.550 [DEBUG] [Thread-18947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:25:43.514 [DEBUG] [Thread-18948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:25:44.563 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:25:44.564 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:25:48.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:25:48.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:25:48.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:25:49.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 25, 44), 30.5, 13.3, 0.0, 35.31, 26.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:25:49.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:25:44
2025-11-12T16:25:49.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:25:49.382 [DEBUG] [Thread-18949] [transport.py] [_log()] starting thread (client mode): 0x17363430
2025-11-12T16:25:49.382 [DEBUG] [Thread-18949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:25:49.403 [DEBUG] [Thread-18949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:25:49.403 [INFO] [Thread-18949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] client lang: <none>
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] server lang: <none>
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] kex follows: False
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:25:49.406 [DEBUG] [Thread-18949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:25:49.407 [DEBUG] [Thread-18949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:25:49.407 [DEBUG] [Thread-18949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:25:49.407 [DEBUG] [Thread-18949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:25:49.407 [DEBUG] [Thread-18949] [transport.py] [_log()] Compression: none
2025-11-12T16:25:49.407 [DEBUG] [Thread-18949] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:25:49.423 [DEBUG] [Thread-18949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:25:49.423 [DEBUG] [Thread-18949] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:25:49.424 [DEBUG] [Thread-18949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:25:49.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:25:49.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:25:49.425 [DEBUG] [Thread-18949] [transport.py] [_log()] userauth is OK
2025-11-12T16:25:49.425 [DEBUG] [Thread-18949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:25:49.425 [DEBUG] [Thread-18949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:25:49.425 [DEBUG] [Thread-18949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:25:49.425 [DEBUG] [Thread-18949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:25:49.440 [INFO] [Thread-18949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:25:49.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:25:50.064 [DEBUG] [Thread-18949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:25:50.064 [DEBUG] [Thread-18949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:25:50.064 [DEBUG] [Thread-18949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:25:50.104 [DEBUG] [Thread-18949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:25:50.105 [DEBUG] [Thread-18949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:25:50.108 [DEBUG] [Thread-18949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:25:50.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:25:50.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:25:50.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:25:50.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:25:50.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:25:50.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:25:50.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:25:50.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:25:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:25:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.601128 -999.00  +26.10  32.44     19   +0.80 1 2 2 1 1   888    0 23.95 -52.29 ----- 32.4 32.4 296.8 37.1 28.6 -23.8 28.5 -22.6 28.2 -22.8 28.8 -22.9
2025-11-12T16:25:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:25:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:25:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.601128
2025-11-12T16:25:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:25:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:25:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:25:50.137 [DEBUG] [Thread-18949] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:25:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:25:50.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:25:50.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:25:44', tmtdew=30.5, humidity=13.3, cloud=0.0, wind=35.31, temperature=26.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:25:37.459', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:25:50.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:25:50.226 [DEBUG] [Thread-18952] [transport.py] [_log()] starting thread (client mode): 0x17347640
2025-11-12T16:25:50.226 [DEBUG] [Thread-18952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:25:50.240 [DEBUG] [Thread-18952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:25:50.241 [INFO] [Thread-18952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:25:50.248 [DEBUG] [Thread-18952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:25:50.248 [DEBUG] [Thread-18952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:25:50.248 [DEBUG] [Thread-18952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:25:50.248 [DEBUG] [Thread-18952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] client lang: <none>
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] server lang: <none>
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] kex follows: False
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] Compression: none
2025-11-12T16:25:50.249 [DEBUG] [Thread-18952] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:25:50.312 [DEBUG] [Thread-18952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:25:50.313 [DEBUG] [Thread-18952] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:25:50.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:25:50.314 [DEBUG] [Thread-18952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:25:50.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:25:50.368 [DEBUG] [Thread-18952] [transport.py] [_log()] userauth is OK
2025-11-12T16:25:50.368 [DEBUG] [Thread-18952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:25:50.368 [DEBUG] [Thread-18952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:25:50.368 [DEBUG] [Thread-18952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:25:50.368 [DEBUG] [Thread-18952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:25:50.387 [INFO] [Thread-18952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:25:50.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:25:50.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:25:51.237 [DEBUG] [Thread-18952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:25:51.238 [DEBUG] [Thread-18952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:25:51.285 [DEBUG] [Thread-18952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:25:51.286 [DEBUG] [Thread-18952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:25:51.295 [DEBUG] [Thread-18952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:25:51.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:25:51.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-11-12T16:25:51.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-11-12T16:25:51.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:25:51.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:25:51.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:25:51.332 [DEBUG] [Thread-18952] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:25:58.552 [DEBUG] [Thread-18954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:26:13.608 [DEBUG] [Thread-18955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:26:21.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:26:21.350 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:26:21.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-11-12T16:26:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 26, 16), 30.36, 13.4, 0.0, 33.45, 26.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:26:22.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:26:16
2025-11-12T16:26:22.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:26:22.288 [DEBUG] [Thread-18956] [transport.py] [_log()] starting thread (client mode): 0x149aab00
2025-11-12T16:26:22.288 [DEBUG] [Thread-18956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:26:22.307 [DEBUG] [Thread-18956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:26:22.307 [INFO] [Thread-18956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] client lang: <none>
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] server lang: <none>
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] kex follows: False
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] Compression: none
2025-11-12T16:26:22.311 [DEBUG] [Thread-18956] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:26:22.327 [DEBUG] [Thread-18956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:26:22.328 [DEBUG] [Thread-18956] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:26:22.329 [DEBUG] [Thread-18956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:26:22.329 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:26:22.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:26:22.331 [DEBUG] [Thread-18956] [transport.py] [_log()] userauth is OK
2025-11-12T16:26:22.331 [DEBUG] [Thread-18956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:26:22.331 [DEBUG] [Thread-18956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:26:22.331 [DEBUG] [Thread-18956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:26:22.331 [DEBUG] [Thread-18956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:26:22.349 [INFO] [Thread-18956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:26:22.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:26:22.969 [DEBUG] [Thread-18956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:26:22.969 [DEBUG] [Thread-18956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:26:22.969 [DEBUG] [Thread-18956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:26:23.010 [DEBUG] [Thread-18956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:26:23.010 [DEBUG] [Thread-18956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:26:23.012 [DEBUG] [Thread-18956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:26:23.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:26:23.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:26:23.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:26:23.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:26:23.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:26:23.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:26:23.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:26:23.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:26:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:26:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.601476 -999.00  +25.90  30.70     19   +0.70 1 2 2 1 1   888    0 24.42 -54.53 ----- 30.7 30.7 292.6 33.8 28.6 -24.3 28.5 -22.6 28.3 -22.6 28.8 -23.5
2025-11-12T16:26:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:26:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:26:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.601476
2025-11-12T16:26:23.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:26:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:26:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:26:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:26:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:26:23.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:26:16', tmtdew=30.36, humidity=13.4, cloud=0.0, wind=33.45, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:26:07.526', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:26:23.031 [DEBUG] [Thread-18956] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:26:23.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:26:23.120 [DEBUG] [Thread-18959] [transport.py] [_log()] starting thread (client mode): 0x149a9f90
2025-11-12T16:26:23.120 [DEBUG] [Thread-18959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:26:23.135 [DEBUG] [Thread-18959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:26:23.135 [INFO] [Thread-18959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:26:23.142 [DEBUG] [Thread-18959] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] client lang: <none>
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] server lang: <none>
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] kex follows: False
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] Compression: none
2025-11-12T16:26:23.143 [DEBUG] [Thread-18959] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:26:23.198 [DEBUG] [Thread-18959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:26:23.198 [DEBUG] [Thread-18959] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:26:23.198 [DEBUG] [Thread-18959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:26:23.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:26:23.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:26:23.255 [DEBUG] [Thread-18959] [transport.py] [_log()] userauth is OK
2025-11-12T16:26:23.255 [DEBUG] [Thread-18959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:26:23.255 [DEBUG] [Thread-18959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:26:23.255 [DEBUG] [Thread-18959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:26:23.255 [DEBUG] [Thread-18959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:26:23.269 [INFO] [Thread-18959] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:26:23.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:26:23.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:26:24.111 [DEBUG] [Thread-18959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:26:24.111 [DEBUG] [Thread-18959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:26:24.164 [DEBUG] [Thread-18959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:26:24.164 [DEBUG] [Thread-18959] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:26:24.172 [DEBUG] [Thread-18959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:26:24.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:26:24.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')
2025-11-12T16:26:24.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:26:24.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:26:24.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:26:24.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:26:24.204 [DEBUG] [Thread-18959] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:26:28.638 [DEBUG] [Thread-18961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:26:40.583 [DEBUG] [Thread-18962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:26:43.689 [DEBUG] [Thread-18963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:26:44.703 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:26:44.704 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:26:54.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:26:54.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:26:54.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:26:54.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 26, 48), 30.44, 13.39, 0.0, 29.45, 26.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:26:54.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:26:48
2025-11-12T16:26:55.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:26:55.162 [DEBUG] [Thread-18964] [transport.py] [_log()] starting thread (client mode): 0x17399e70
2025-11-12T16:26:55.162 [DEBUG] [Thread-18964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:26:55.182 [DEBUG] [Thread-18964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:26:55.182 [INFO] [Thread-18964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:26:55.185 [DEBUG] [Thread-18964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:26:55.185 [DEBUG] [Thread-18964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:26:55.185 [DEBUG] [Thread-18964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:26:55.185 [DEBUG] [Thread-18964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:26:55.185 [DEBUG] [Thread-18964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:26:55.185 [DEBUG] [Thread-18964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] client lang: <none>
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] server lang: <none>
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] kex follows: False
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] Compression: none
2025-11-12T16:26:55.186 [DEBUG] [Thread-18964] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:26:55.203 [DEBUG] [Thread-18964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:26:55.203 [DEBUG] [Thread-18964] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:26:55.204 [DEBUG] [Thread-18964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:26:55.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:26:55.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:26:55.206 [DEBUG] [Thread-18964] [transport.py] [_log()] userauth is OK
2025-11-12T16:26:55.206 [DEBUG] [Thread-18964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:26:55.206 [DEBUG] [Thread-18964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:26:55.206 [DEBUG] [Thread-18964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:26:55.206 [DEBUG] [Thread-18964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:26:55.224 [INFO] [Thread-18964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:26:55.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:26:55.808 [DEBUG] [Thread-18964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:26:55.808 [DEBUG] [Thread-18964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:26:55.808 [DEBUG] [Thread-18964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:26:55.849 [DEBUG] [Thread-18964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:26:55.849 [DEBUG] [Thread-18964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:26:55.853 [DEBUG] [Thread-18964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:26:55.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:26:55.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:26:55.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:26:55.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:26:55.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:26:55.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:26:55.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:26:55.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:26:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:26:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.601823 -999.00  +25.90  31.75     19   +0.60 1 2 2 1 1   888    0 24.29 -56.94 ----- 31.8 31.8 276.6 35.1 28.6 -23.8 28.5 -22.5 28.4 -23.0 28.8 -22.9
2025-11-12T16:26:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:26:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:26:55.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.601823
2025-11-12T16:26:55.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:26:55.879 [DEBUG] [Thread-18964] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:26:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:26:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:26:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:26:55.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:26:55.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:26:48', tmtdew=30.44, humidity=13.39, cloud=0.0, wind=29.45, temperature=26.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:26:37.507', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:26:55.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:26:55.986 [DEBUG] [Thread-18967] [transport.py] [_log()] starting thread (client mode): 0x1493c8e0
2025-11-12T16:26:55.987 [DEBUG] [Thread-18967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:26:56.001 [DEBUG] [Thread-18967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:26:56.001 [INFO] [Thread-18967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] client lang: <none>
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] server lang: <none>
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] kex follows: False
2025-11-12T16:26:56.009 [DEBUG] [Thread-18967] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:26:56.010 [DEBUG] [Thread-18967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:26:56.010 [DEBUG] [Thread-18967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:26:56.010 [DEBUG] [Thread-18967] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:26:56.010 [DEBUG] [Thread-18967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:26:56.010 [DEBUG] [Thread-18967] [transport.py] [_log()] Compression: none
2025-11-12T16:26:56.010 [DEBUG] [Thread-18967] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:26:56.068 [DEBUG] [Thread-18967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:26:56.068 [DEBUG] [Thread-18967] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:26:56.069 [DEBUG] [Thread-18967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:26:56.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:26:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:26:56.124 [DEBUG] [Thread-18967] [transport.py] [_log()] userauth is OK
2025-11-12T16:26:56.124 [DEBUG] [Thread-18967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:26:56.124 [DEBUG] [Thread-18967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:26:56.124 [DEBUG] [Thread-18967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:26:56.124 [DEBUG] [Thread-18967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:26:56.144 [INFO] [Thread-18967] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:26:56.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:26:56.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:26:56.970 [DEBUG] [Thread-18967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:26:56.971 [DEBUG] [Thread-18967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:26:57.020 [DEBUG] [Thread-18967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:26:57.020 [DEBUG] [Thread-18967] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:26:57.029 [DEBUG] [Thread-18967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:26:57.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:26:57.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-11-12T16:26:57.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-11-12T16:26:57.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:26:57.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:26:57.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:26:57.065 [DEBUG] [Thread-18967] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:26:58.722 [DEBUG] [Thread-18969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:27:13.773 [DEBUG] [Thread-18970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:27:27.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:27:27.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:27:27.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-11-12T16:27:27.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 27, 20), 30.32, 13.5, 0.0, 29.01, 26.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:27:27.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:27:20
2025-11-12T16:27:27.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:27:28.023 [DEBUG] [Thread-18971] [transport.py] [_log()] starting thread (client mode): 0x17347a60
2025-11-12T16:27:28.023 [DEBUG] [Thread-18971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:27:28.042 [DEBUG] [Thread-18971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:27:28.042 [INFO] [Thread-18971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] client lang: <none>
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] server lang: <none>
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] kex follows: False
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:27:28.046 [DEBUG] [Thread-18971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:27:28.047 [DEBUG] [Thread-18971] [transport.py] [_log()] Compression: none
2025-11-12T16:27:28.047 [DEBUG] [Thread-18971] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:27:28.062 [DEBUG] [Thread-18971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:27:28.063 [DEBUG] [Thread-18971] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:27:28.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:27:28.064 [DEBUG] [Thread-18971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:27:28.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:27:28.066 [DEBUG] [Thread-18971] [transport.py] [_log()] userauth is OK
2025-11-12T16:27:28.066 [DEBUG] [Thread-18971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:27:28.066 [DEBUG] [Thread-18971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:27:28.067 [DEBUG] [Thread-18971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:27:28.067 [DEBUG] [Thread-18971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:27:28.092 [INFO] [Thread-18971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:27:28.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:27:28.746 [DEBUG] [Thread-18971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:27:28.747 [DEBUG] [Thread-18971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:27:28.747 [DEBUG] [Thread-18971] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:27:28.787 [DEBUG] [Thread-18971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:27:28.787 [DEBUG] [Thread-18971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:27:28.790 [DEBUG] [Thread-18971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:27:28.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:27:28.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:27:28.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:27:28.807 [DEBUG] [Thread-18973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:27:28.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:27:28.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:27:28.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:27:28.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:27:28.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:27:28.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.602170 -999.00  +26.00  21.48     19   +0.60 1 1 1 1 1   888    0 23.67 -56.53 ----- 21.5 21.5 279.4 32.8 28.6 -23.8 28.5 -22.6 28.2 -23.5 28.8 -22.8
2025-11-12T16:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.602170
2025-11-12T16:27:28.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:27:28.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:27:20', tmtdew=30.32, humidity=13.5, cloud=0.0, wind=29.01, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:27:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:27:28.827 [DEBUG] [Thread-18971] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:27:28.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:27:28.927 [DEBUG] [Thread-18975] [transport.py] [_log()] starting thread (client mode): 0x1737f580
2025-11-12T16:27:28.927 [DEBUG] [Thread-18975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:27:28.946 [DEBUG] [Thread-18975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:27:28.946 [INFO] [Thread-18975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:27:28.953 [DEBUG] [Thread-18975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] client lang: <none>
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] server lang: <none>
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] kex follows: False
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:27:28.954 [DEBUG] [Thread-18975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:27:28.955 [DEBUG] [Thread-18975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:27:28.955 [DEBUG] [Thread-18975] [transport.py] [_log()] Compression: none
2025-11-12T16:27:28.955 [DEBUG] [Thread-18975] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:27:29.011 [DEBUG] [Thread-18975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:27:29.012 [DEBUG] [Thread-18975] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:27:29.012 [DEBUG] [Thread-18975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:27:29.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:27:29.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:27:29.067 [DEBUG] [Thread-18975] [transport.py] [_log()] userauth is OK
2025-11-12T16:27:29.067 [DEBUG] [Thread-18975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:27:29.067 [DEBUG] [Thread-18975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:27:29.068 [DEBUG] [Thread-18975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:27:29.068 [DEBUG] [Thread-18975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:27:29.087 [INFO] [Thread-18975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:27:29.087 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:27:29.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:27:29.931 [DEBUG] [Thread-18975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:27:29.931 [DEBUG] [Thread-18975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:27:29.978 [DEBUG] [Thread-18975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:27:29.979 [DEBUG] [Thread-18975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:27:29.988 [DEBUG] [Thread-18975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:27:29.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:27:29.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-11-12T16:27:30.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:27:30.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:27:30.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:27:30.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:27:30.025 [DEBUG] [Thread-18975] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:27:40.611 [DEBUG] [Thread-18977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:27:43.842 [DEBUG] [Thread-18978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:27:44.846 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:27:44.847 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:27:58.894 [DEBUG] [Thread-18979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:28:00.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:28:00.047 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:28:00.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-11-12T16:28:00.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 27, 52), 30.44, 13.32, 0.0, 33.15, 26.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:28:00.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:27:52
2025-11-12T16:28:00.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:28:00.964 [DEBUG] [Thread-18980] [transport.py] [_log()] starting thread (client mode): 0x173e81f0
2025-11-12T16:28:00.965 [DEBUG] [Thread-18980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:28:00.985 [DEBUG] [Thread-18980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:28:00.985 [INFO] [Thread-18980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] client lang: <none>
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] server lang: <none>
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] kex follows: False
2025-11-12T16:28:00.988 [DEBUG] [Thread-18980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:28:00.989 [DEBUG] [Thread-18980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:28:00.989 [DEBUG] [Thread-18980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:28:00.989 [DEBUG] [Thread-18980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:28:00.989 [DEBUG] [Thread-18980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:28:00.989 [DEBUG] [Thread-18980] [transport.py] [_log()] Compression: none
2025-11-12T16:28:00.989 [DEBUG] [Thread-18980] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:28:01.008 [DEBUG] [Thread-18980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:28:01.008 [DEBUG] [Thread-18980] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:28:01.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:28:01.009 [DEBUG] [Thread-18980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:28:01.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:28:01.012 [DEBUG] [Thread-18980] [transport.py] [_log()] userauth is OK
2025-11-12T16:28:01.012 [DEBUG] [Thread-18980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:28:01.012 [DEBUG] [Thread-18980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:28:01.012 [DEBUG] [Thread-18980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:28:01.012 [DEBUG] [Thread-18980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:28:01.036 [INFO] [Thread-18980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:28:01.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:28:01.690 [DEBUG] [Thread-18980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:28:01.690 [DEBUG] [Thread-18980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:28:01.691 [DEBUG] [Thread-18980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:28:01.731 [DEBUG] [Thread-18980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:28:01.732 [DEBUG] [Thread-18980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:28:01.734 [DEBUG] [Thread-18980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:28:01.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:28:01.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:28:01.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:28:01.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:28:01.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:28:01.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:28:01.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:28:01.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.602517 -999.00  +26.10  22.28     19   +0.60 1 1 1 1 1   888    0 24.23 -57.98 ----- 22.3 22.3 278.0 27.2 28.5 -24.1 28.5 -22.5 28.4 -24.9 28.8 -23.4
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.602517
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:28:01.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:27:52', tmtdew=30.44, humidity=13.32, cloud=0.0, wind=33.15, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:27:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:28:01.751 [DEBUG] [Thread-18980] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:28:01.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:28:01.839 [DEBUG] [Thread-18983] [transport.py] [_log()] starting thread (client mode): 0x17345f30
2025-11-12T16:28:01.839 [DEBUG] [Thread-18983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:28:01.854 [DEBUG] [Thread-18983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:28:01.854 [INFO] [Thread-18983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:28:01.861 [DEBUG] [Thread-18983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:28:01.861 [DEBUG] [Thread-18983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] client lang: <none>
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] server lang: <none>
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] kex follows: False
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] Compression: none
2025-11-12T16:28:01.862 [DEBUG] [Thread-18983] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:28:01.920 [DEBUG] [Thread-18983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:28:01.921 [DEBUG] [Thread-18983] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:28:01.922 [DEBUG] [Thread-18983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:28:01.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:28:01.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:28:01.976 [DEBUG] [Thread-18983] [transport.py] [_log()] userauth is OK
2025-11-12T16:28:01.976 [DEBUG] [Thread-18983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:28:01.976 [DEBUG] [Thread-18983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:28:01.977 [DEBUG] [Thread-18983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:28:01.977 [DEBUG] [Thread-18983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:28:01.995 [INFO] [Thread-18983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:28:01.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:28:01.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:28:02.853 [DEBUG] [Thread-18983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:28:02.854 [DEBUG] [Thread-18983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:28:02.901 [DEBUG] [Thread-18983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:28:02.901 [DEBUG] [Thread-18983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:28:02.910 [DEBUG] [Thread-18983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:28:02.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:28:02.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-11-12T16:28:02.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-11-12T16:28:02.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:28:02.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:28:02.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:28:02.945 [DEBUG] [Thread-18983] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:28:13.931 [DEBUG] [Thread-18985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:28:28.975 [DEBUG] [Thread-18986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:28:32.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:28:32.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:28:32.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-11-12T16:28:33.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 28, 24), 30.53, 13.25, 0.0, 42.94, 26.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:28:33.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:28:24
2025-11-12T16:28:33.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:28:33.861 [DEBUG] [Thread-18987] [transport.py] [_log()] starting thread (client mode): 0x17347f10
2025-11-12T16:28:33.861 [DEBUG] [Thread-18987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:28:33.881 [DEBUG] [Thread-18987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:28:33.881 [INFO] [Thread-18987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:28:33.884 [DEBUG] [Thread-18987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] client lang: <none>
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] server lang: <none>
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] kex follows: False
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:28:33.885 [DEBUG] [Thread-18987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:28:33.886 [DEBUG] [Thread-18987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:28:33.886 [DEBUG] [Thread-18987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:28:33.886 [DEBUG] [Thread-18987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:28:33.886 [DEBUG] [Thread-18987] [transport.py] [_log()] Compression: none
2025-11-12T16:28:33.886 [DEBUG] [Thread-18987] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:28:33.905 [DEBUG] [Thread-18987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:28:33.906 [DEBUG] [Thread-18987] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:28:33.907 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:28:33.908 [DEBUG] [Thread-18987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:28:33.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:28:33.910 [DEBUG] [Thread-18987] [transport.py] [_log()] userauth is OK
2025-11-12T16:28:33.910 [DEBUG] [Thread-18987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:28:33.910 [DEBUG] [Thread-18987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:28:33.911 [DEBUG] [Thread-18987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:28:33.911 [DEBUG] [Thread-18987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:28:33.935 [INFO] [Thread-18987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:28:33.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:28:34.609 [DEBUG] [Thread-18987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:28:34.609 [DEBUG] [Thread-18987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:28:34.610 [DEBUG] [Thread-18987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:28:34.651 [DEBUG] [Thread-18987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:28:34.651 [DEBUG] [Thread-18987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:28:34.654 [DEBUG] [Thread-18987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:28:34.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:28:34.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:28:34.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:28:34.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:28:34.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:28:34.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:28:34.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:28:34.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:28:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:28:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.602865 -999.00  +26.20  30.75     18   +0.60 1 2 2 1 1   888    0 23.94 -59.24 ----- 30.8 30.8 272.6 35.0 28.6 -23.9 28.6 -22.6 28.3 -22.4 28.8 -22.8
2025-11-12T16:28:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:28:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:28:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.602865
2025-11-12T16:28:34.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:28:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:28:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:28:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:28:34.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:28:34.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:28:24', tmtdew=30.53, humidity=13.25, cloud=0.0, wind=42.94, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:28:07.536', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:28:34.683 [DEBUG] [Thread-18987] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:28:34.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:28:34.780 [DEBUG] [Thread-18990] [transport.py] [_log()] starting thread (client mode): 0x17345ae0
2025-11-12T16:28:34.780 [DEBUG] [Thread-18990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:28:34.794 [DEBUG] [Thread-18990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:28:34.794 [INFO] [Thread-18990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:28:34.802 [DEBUG] [Thread-18990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:28:34.802 [DEBUG] [Thread-18990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:28:34.802 [DEBUG] [Thread-18990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] client lang: <none>
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] server lang: <none>
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] kex follows: False
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:28:34.803 [DEBUG] [Thread-18990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:28:34.804 [DEBUG] [Thread-18990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:28:34.804 [DEBUG] [Thread-18990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:28:34.804 [DEBUG] [Thread-18990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:28:34.804 [DEBUG] [Thread-18990] [transport.py] [_log()] Compression: none
2025-11-12T16:28:34.804 [DEBUG] [Thread-18990] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:28:34.860 [DEBUG] [Thread-18990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:28:34.860 [DEBUG] [Thread-18990] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:28:34.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:28:34.862 [DEBUG] [Thread-18990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:28:34.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:28:34.916 [DEBUG] [Thread-18990] [transport.py] [_log()] userauth is OK
2025-11-12T16:28:34.917 [DEBUG] [Thread-18990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:28:34.917 [DEBUG] [Thread-18990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:28:34.917 [DEBUG] [Thread-18990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:28:34.917 [DEBUG] [Thread-18990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:28:34.935 [INFO] [Thread-18990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:28:34.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:28:34.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:28:35.783 [DEBUG] [Thread-18990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:28:35.783 [DEBUG] [Thread-18990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:28:35.831 [DEBUG] [Thread-18990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:28:35.831 [DEBUG] [Thread-18990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:28:35.840 [DEBUG] [Thread-18990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:28:35.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:28:35.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-11-12T16:28:35.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:28:35.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:28:35.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:28:35.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:28:35.883 [DEBUG] [Thread-18990] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:28:40.650 [DEBUG] [Thread-18992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:28:44.014 [DEBUG] [Thread-18993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:28:44.995 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:28:44.996 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:28:59.068 [DEBUG] [Thread-18994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:29:05.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:29:05.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:29:05.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:29:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 28, 56), 30.62, 13.29, 0.0, 42.52, 26.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:29:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:28:56
2025-11-12T16:29:06.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:29:06.827 [DEBUG] [Thread-18995] [transport.py] [_log()] starting thread (client mode): 0x173eaf20
2025-11-12T16:29:06.827 [DEBUG] [Thread-18995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:29:06.847 [DEBUG] [Thread-18995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:29:06.847 [INFO] [Thread-18995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:29:06.850 [DEBUG] [Thread-18995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:29:06.850 [DEBUG] [Thread-18995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:29:06.850 [DEBUG] [Thread-18995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:29:06.850 [DEBUG] [Thread-18995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] client lang: <none>
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] server lang: <none>
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] kex follows: False
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] Compression: none
2025-11-12T16:29:06.851 [DEBUG] [Thread-18995] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:29:06.868 [DEBUG] [Thread-18995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:29:06.869 [DEBUG] [Thread-18995] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:29:06.869 [DEBUG] [Thread-18995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:29:06.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:29:06.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:29:06.913 [DEBUG] [Thread-18995] [transport.py] [_log()] userauth is OK
2025-11-12T16:29:06.913 [DEBUG] [Thread-18995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:29:06.913 [DEBUG] [Thread-18995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:29:06.913 [DEBUG] [Thread-18995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:29:06.913 [DEBUG] [Thread-18995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:29:06.945 [INFO] [Thread-18995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:29:06.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:29:07.586 [DEBUG] [Thread-18995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:29:07.586 [DEBUG] [Thread-18995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:29:07.587 [DEBUG] [Thread-18995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:29:07.627 [DEBUG] [Thread-18995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:29:07.628 [DEBUG] [Thread-18995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:29:07.631 [DEBUG] [Thread-18995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:29:07.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:29:07.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:29:07.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:29:07.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:29:07.650 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:29:07.652 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:29:07.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:29:07.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:29:07.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:29:07.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.603212 -999.00  +26.20  33.90     18   +0.50 1 2 2 1 1   888    0 24.39 -51.70 ----- 33.9 33.9 280.0 48.9 28.5 -25.1 28.5 -23.4 28.4 -22.3 28.8 -24.0
2025-11-12T16:29:07.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:29:07.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:29:07.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.603212
2025-11-12T16:29:07.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:29:07.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:29:07.655 [DEBUG] [Thread-18995] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:29:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:29:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:29:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:29:07.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:28:56', tmtdew=30.62, humidity=13.29, cloud=0.0, wind=42.52, temperature=26.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:28:37.517', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:29:07.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:29:07.748 [DEBUG] [Thread-18998] [transport.py] [_log()] starting thread (client mode): 0x1737dd50
2025-11-12T16:29:07.749 [DEBUG] [Thread-18998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:29:07.768 [DEBUG] [Thread-18998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:29:07.768 [INFO] [Thread-18998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:29:07.776 [DEBUG] [Thread-18998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] client lang: <none>
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] server lang: <none>
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] kex follows: False
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] Compression: none
2025-11-12T16:29:07.777 [DEBUG] [Thread-18998] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:29:07.840 [DEBUG] [Thread-18998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:29:07.840 [DEBUG] [Thread-18998] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:29:07.841 [DEBUG] [Thread-18998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:29:07.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:29:07.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:29:07.898 [DEBUG] [Thread-18998] [transport.py] [_log()] userauth is OK
2025-11-12T16:29:07.898 [DEBUG] [Thread-18998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:29:07.898 [DEBUG] [Thread-18998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:29:07.898 [DEBUG] [Thread-18998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:29:07.899 [DEBUG] [Thread-18998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:29:07.921 [INFO] [Thread-18998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:29:07.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:29:07.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:29:08.743 [DEBUG] [Thread-18998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:29:08.744 [DEBUG] [Thread-18998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:29:08.792 [DEBUG] [Thread-18998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:29:08.792 [DEBUG] [Thread-18998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:29:08.802 [DEBUG] [Thread-18998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:29:08.810 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:29:08.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:29:08.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-11-12T16:29:08.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:29:08.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:29:08.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:29:08.849 [DEBUG] [Thread-18998] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:29:14.103 [DEBUG] [Thread-19000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:29:29.156 [DEBUG] [Thread-19001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:29:38.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:29:38.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:29:38.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-11-12T16:29:39.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 29, 28), 30.52, 13.39, 0.0, 43.12, 26.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:29:39.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:29:28
2025-11-12T16:29:39.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:29:39.826 [DEBUG] [Thread-19002] [transport.py] [_log()] starting thread (client mode): 0x173e94b0
2025-11-12T16:29:39.826 [DEBUG] [Thread-19002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:29:39.845 [DEBUG] [Thread-19002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:29:39.845 [INFO] [Thread-19002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] client lang: <none>
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] server lang: <none>
2025-11-12T16:29:39.848 [DEBUG] [Thread-19002] [transport.py] [_log()] kex follows: False
2025-11-12T16:29:39.849 [DEBUG] [Thread-19002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:29:39.849 [DEBUG] [Thread-19002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:29:39.849 [DEBUG] [Thread-19002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:29:39.849 [DEBUG] [Thread-19002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:29:39.849 [DEBUG] [Thread-19002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:29:39.849 [DEBUG] [Thread-19002] [transport.py] [_log()] Compression: none
2025-11-12T16:29:39.849 [DEBUG] [Thread-19002] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:29:39.863 [DEBUG] [Thread-19002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:29:39.863 [DEBUG] [Thread-19002] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:29:39.864 [DEBUG] [Thread-19002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:29:39.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:29:39.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:29:39.864 [DEBUG] [Thread-19002] [transport.py] [_log()] userauth is OK
2025-11-12T16:29:39.864 [DEBUG] [Thread-19002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:29:39.864 [DEBUG] [Thread-19002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:29:39.864 [DEBUG] [Thread-19002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:29:39.864 [DEBUG] [Thread-19002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:29:39.874 [INFO] [Thread-19002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:29:39.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:29:40.494 [DEBUG] [Thread-19002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:29:40.494 [DEBUG] [Thread-19002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:29:40.494 [DEBUG] [Thread-19002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:29:40.535 [DEBUG] [Thread-19002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:29:40.535 [DEBUG] [Thread-19002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:29:40.537 [DEBUG] [Thread-19002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:29:40.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:29:40.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:29:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:29:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:29:40.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:29:40.556 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:29:40.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.603559 -999.00  +26.20  29.58     18   +0.60 1 2 1 1 1   888    0 23.97 -49.03 ----- 29.6 29.6 282.4 40.3 28.4 -23.7 28.4 -22.5 28.1 -23.2 28.8 -23.2
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.603559
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:29:40.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:29:28', tmtdew=30.52, humidity=13.39, cloud=0.0, wind=43.12, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:29:07.498', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:29:40.557 [DEBUG] [Thread-19002] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:29:40.630 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:29:40.642 [DEBUG] [Thread-19005] [transport.py] [_log()] starting thread (client mode): 0x11f10190
2025-11-12T16:29:40.643 [DEBUG] [Thread-19005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:29:40.662 [DEBUG] [Thread-19005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:29:40.662 [INFO] [Thread-19005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] client lang: <none>
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] server lang: <none>
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] kex follows: False
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] Compression: none
2025-11-12T16:29:40.670 [DEBUG] [Thread-19005] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:29:40.678 [DEBUG] [Thread-19007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:29:40.726 [DEBUG] [Thread-19005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:29:40.727 [DEBUG] [Thread-19005] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:29:40.727 [DEBUG] [Thread-19005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:29:40.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:29:40.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:29:40.783 [DEBUG] [Thread-19005] [transport.py] [_log()] userauth is OK
2025-11-12T16:29:40.783 [DEBUG] [Thread-19005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:29:40.783 [DEBUG] [Thread-19005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:29:40.783 [DEBUG] [Thread-19005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:29:40.783 [DEBUG] [Thread-19005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:29:40.797 [INFO] [Thread-19005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:29:40.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:29:40.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:29:41.653 [DEBUG] [Thread-19005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:29:41.653 [DEBUG] [Thread-19005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:29:41.702 [DEBUG] [Thread-19005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:29:41.702 [DEBUG] [Thread-19005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:29:41.711 [DEBUG] [Thread-19005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:29:41.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:29:41.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-11-12T16:29:41.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-11-12T16:29:41.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:29:41.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:29:41.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:29:41.746 [DEBUG] [Thread-19005] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:29:44.184 [DEBUG] [Thread-19008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:29:45.136 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:29:45.137 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:29:59.232 [DEBUG] [Thread-19009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:30:11.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:30:11.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:30:11.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-11-12T16:30:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 29, 28), 30.52, 13.39, 0.0, 43.12, 26.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:30:12.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:29:28
2025-11-12T16:30:12.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:30:12.686 [DEBUG] [Thread-19010] [transport.py] [_log()] starting thread (client mode): 0x1737e890
2025-11-12T16:30:12.686 [DEBUG] [Thread-19010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:30:12.705 [DEBUG] [Thread-19010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:30:12.705 [INFO] [Thread-19010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] client lang: <none>
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] server lang: <none>
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] kex follows: False
2025-11-12T16:30:12.708 [DEBUG] [Thread-19010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:30:12.709 [DEBUG] [Thread-19010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:30:12.709 [DEBUG] [Thread-19010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:30:12.709 [DEBUG] [Thread-19010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:30:12.709 [DEBUG] [Thread-19010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:30:12.709 [DEBUG] [Thread-19010] [transport.py] [_log()] Compression: none
2025-11-12T16:30:12.709 [DEBUG] [Thread-19010] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:30:12.725 [DEBUG] [Thread-19010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:30:12.726 [DEBUG] [Thread-19010] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:30:12.726 [DEBUG] [Thread-19010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:30:12.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:30:12.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:30:12.728 [DEBUG] [Thread-19010] [transport.py] [_log()] userauth is OK
2025-11-12T16:30:12.728 [DEBUG] [Thread-19010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:30:12.728 [DEBUG] [Thread-19010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:30:12.729 [DEBUG] [Thread-19010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:30:12.729 [DEBUG] [Thread-19010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:30:12.743 [INFO] [Thread-19010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:30:12.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:30:13.401 [DEBUG] [Thread-19010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:30:13.401 [DEBUG] [Thread-19010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:30:13.402 [DEBUG] [Thread-19010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:30:13.441 [DEBUG] [Thread-19010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:30:13.442 [DEBUG] [Thread-19010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:30:13.444 [DEBUG] [Thread-19010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:30:13.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:30:13.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:30:13.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:30:13.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:30:13.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:30:13.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:30:13.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:30:13.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:30:13.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:30:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.603906 -999.00  +26.20  27.75     18   +0.60 1 2 1 1 1   888    0 24.83 -42.90 ----- 27.8 27.8 276.8 38.2 28.6 -23.5 28.4 -22.6 28.2 -21.7 28.7 -22.5
2025-11-12T16:30:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:30:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:30:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.603906
2025-11-12T16:30:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:30:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:30:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:30:13.468 [DEBUG] [Thread-19010] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:30:13.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:30:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:30:13.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:29:28', tmtdew=30.52, humidity=13.39, cloud=0.0, wind=43.12, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:29:37.478', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:30:13.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:30:13.563 [DEBUG] [Thread-19013] [transport.py] [_log()] starting thread (client mode): 0x17363e50
2025-11-12T16:30:13.563 [DEBUG] [Thread-19013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:30:13.578 [DEBUG] [Thread-19013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:30:13.578 [INFO] [Thread-19013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:30:13.585 [DEBUG] [Thread-19013] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:30:13.585 [DEBUG] [Thread-19013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] client lang: <none>
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] server lang: <none>
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] kex follows: False
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] Compression: none
2025-11-12T16:30:13.586 [DEBUG] [Thread-19013] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:30:13.648 [DEBUG] [Thread-19013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:30:13.648 [DEBUG] [Thread-19013] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:30:13.649 [DEBUG] [Thread-19013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:30:13.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:30:13.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:30:13.704 [DEBUG] [Thread-19013] [transport.py] [_log()] userauth is OK
2025-11-12T16:30:13.705 [DEBUG] [Thread-19013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:30:13.705 [DEBUG] [Thread-19013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:30:13.705 [DEBUG] [Thread-19013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:30:13.705 [DEBUG] [Thread-19013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:30:13.724 [INFO] [Thread-19013] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:30:13.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:30:13.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:30:14.265 [DEBUG] [Thread-19015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:30:14.555 [DEBUG] [Thread-19013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:30:14.555 [DEBUG] [Thread-19013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:30:14.603 [DEBUG] [Thread-19013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:30:14.603 [DEBUG] [Thread-19013] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:30:14.611 [DEBUG] [Thread-19013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:30:14.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:30:14.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-11-12T16:30:14.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-11-12T16:30:14.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:30:14.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:30:14.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:30:14.644 [DEBUG] [Thread-19013] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:30:29.301 [DEBUG] [Thread-19016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:30:40.723 [DEBUG] [Thread-19017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:30:44.335 [DEBUG] [Thread-19018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:30:44.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:30:44.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:30: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-11-12T16:30:45.278 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:30:45.278 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:30:45.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 30, 32), 30.44, 13.44, 0.0, 33.28, 26.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:30:45.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:30:32
2025-11-12T16:30:45.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:30:45.584 [DEBUG] [Thread-19019] [transport.py] [_log()] starting thread (client mode): 0x149a9c60
2025-11-12T16:30:45.584 [DEBUG] [Thread-19019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:30:45.604 [DEBUG] [Thread-19019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:30:45.604 [INFO] [Thread-19019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:30:45.607 [DEBUG] [Thread-19019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:30:45.607 [DEBUG] [Thread-19019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:30:45.607 [DEBUG] [Thread-19019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:30:45.607 [DEBUG] [Thread-19019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:30:45.607 [DEBUG] [Thread-19019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:30:45.607 [DEBUG] [Thread-19019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:30:45.607 [DEBUG] [Thread-19019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] client lang: <none>
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] server lang: <none>
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] kex follows: False
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] Compression: none
2025-11-12T16:30:45.608 [DEBUG] [Thread-19019] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:30:45.617 [DEBUG] [Thread-19019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:30:45.618 [DEBUG] [Thread-19019] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:30:45.618 [DEBUG] [Thread-19019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:30:45.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:30:45.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:30:45.621 [DEBUG] [Thread-19019] [transport.py] [_log()] userauth is OK
2025-11-12T16:30:45.621 [DEBUG] [Thread-19019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:30:45.621 [DEBUG] [Thread-19019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:30:45.621 [DEBUG] [Thread-19019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:30:45.621 [DEBUG] [Thread-19019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:30:45.646 [INFO] [Thread-19019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:30:45.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:30:46.365 [DEBUG] [Thread-19019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:30:46.365 [DEBUG] [Thread-19019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:30:46.365 [DEBUG] [Thread-19019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:30:46.406 [DEBUG] [Thread-19019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:30:46.406 [DEBUG] [Thread-19019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:30:46.409 [DEBUG] [Thread-19019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:30:46.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:30:46.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:30:46.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:30:46.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:30:46.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:30:46.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:30:46.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:30:46.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:30:46.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.604601 -999.00  +26.10  21.70     18   +0.30 1 1 1 1 1   888    0 24.77 -33.26 ----- 21.7 21.7 298.6 29.1 28.4 -24.5 28.4 -23.1 28.2 -23.3 28.6 -24.0
2025-11-12T16:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.604601
2025-11-12T16:30:46.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:30:46.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:30:46.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:30:46.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:30:46.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:30:46.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:30:32', tmtdew=30.44, humidity=13.44, cloud=0.0, wind=33.28, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:30:37.526', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:30:46.436 [DEBUG] [Thread-19019] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:30:46.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:30:46.531 [DEBUG] [Thread-19022] [transport.py] [_log()] starting thread (client mode): 0x149abd60
2025-11-12T16:30:46.531 [DEBUG] [Thread-19022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:30:46.545 [DEBUG] [Thread-19022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:30:46.545 [INFO] [Thread-19022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:30:46.553 [DEBUG] [Thread-19022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:30:46.553 [DEBUG] [Thread-19022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:30:46.553 [DEBUG] [Thread-19022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:30:46.553 [DEBUG] [Thread-19022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:30:46.553 [DEBUG] [Thread-19022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:30:46.553 [DEBUG] [Thread-19022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] client lang: <none>
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] server lang: <none>
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] kex follows: False
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:30:46.554 [DEBUG] [Thread-19022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:30:46.555 [DEBUG] [Thread-19022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:30:46.555 [DEBUG] [Thread-19022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:30:46.555 [DEBUG] [Thread-19022] [transport.py] [_log()] Compression: none
2025-11-12T16:30:46.555 [DEBUG] [Thread-19022] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:30:46.613 [DEBUG] [Thread-19022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:30:46.613 [DEBUG] [Thread-19022] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:30:46.614 [DEBUG] [Thread-19022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:30:46.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:30:46.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:30:46.672 [DEBUG] [Thread-19022] [transport.py] [_log()] userauth is OK
2025-11-12T16:30:46.672 [DEBUG] [Thread-19022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:30:46.673 [DEBUG] [Thread-19022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:30:46.673 [DEBUG] [Thread-19022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:30:46.673 [DEBUG] [Thread-19022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:30:46.692 [INFO] [Thread-19022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:30:46.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:30:46.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:30:47.568 [DEBUG] [Thread-19022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:30:47.568 [DEBUG] [Thread-19022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:30:47.617 [DEBUG] [Thread-19022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:30:47.617 [DEBUG] [Thread-19022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:30:47.626 [DEBUG] [Thread-19022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:30:47.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:30:47.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:30:47.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:30:47.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:30:47.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:30:47.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:30:47.663 [DEBUG] [Thread-19022] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:30:59.367 [DEBUG] [Thread-19024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:31:14.427 [DEBUG] [Thread-19025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:31:17.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:31:17.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:31:17.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-11-12T16:31:18.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 31, 4), 30.59, 13.29, 0.0, 31.44, 26.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:31:18.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:31:04
2025-11-12T16:31:18.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:31:18.588 [DEBUG] [Thread-19026] [transport.py] [_log()] starting thread (client mode): 0x17398f40
2025-11-12T16:31:18.588 [DEBUG] [Thread-19026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:31:18.608 [DEBUG] [Thread-19026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:31:18.608 [INFO] [Thread-19026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:31:18.611 [DEBUG] [Thread-19026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:31:18.611 [DEBUG] [Thread-19026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:31:18.611 [DEBUG] [Thread-19026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:31:18.611 [DEBUG] [Thread-19026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:31:18.611 [DEBUG] [Thread-19026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] client lang: <none>
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] server lang: <none>
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] kex follows: False
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] Compression: none
2025-11-12T16:31:18.612 [DEBUG] [Thread-19026] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:31:18.631 [DEBUG] [Thread-19026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:31:18.632 [DEBUG] [Thread-19026] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:31:18.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:31:18.634 [DEBUG] [Thread-19026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:31:18.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:31:18.636 [DEBUG] [Thread-19026] [transport.py] [_log()] userauth is OK
2025-11-12T16:31:18.637 [DEBUG] [Thread-19026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:31:18.637 [DEBUG] [Thread-19026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:31:18.637 [DEBUG] [Thread-19026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:31:18.637 [DEBUG] [Thread-19026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:31:18.660 [INFO] [Thread-19026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:31:18.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:31:19.304 [DEBUG] [Thread-19026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:31:19.304 [DEBUG] [Thread-19026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:31:19.305 [DEBUG] [Thread-19026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:31:19.346 [DEBUG] [Thread-19026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:31:19.346 [DEBUG] [Thread-19026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:31:19.350 [DEBUG] [Thread-19026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:31:19.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:31:19.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:31:19.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:31:19.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:31:19.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:31:19.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:31:19.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:31:19.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:31:19.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:31:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.604948 -999.00  +26.10  26.00     18   +0.50 1 2 1 1 1   888    0 24.32 -29.05 ----- 26.0 26.0 273.6 37.1 28.5 -23.7 28.4 -22.9 28.2 -22.6 28.6 -23.2
2025-11-12T16:31:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:31:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:31:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.604948
2025-11-12T16:31:19.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:31:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:31:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:31:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:31:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:31:19.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:31:04', tmtdew=30.59, humidity=13.29, cloud=0.0, wind=31.44, temperature=26.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:31:07.507', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:31:19.377 [DEBUG] [Thread-19026] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:31:19.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:31:19.472 [DEBUG] [Thread-19029] [transport.py] [_log()] starting thread (client mode): 0x1493e9b0
2025-11-12T16:31:19.473 [DEBUG] [Thread-19029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:31:19.490 [DEBUG] [Thread-19029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:31:19.490 [INFO] [Thread-19029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] client lang: <none>
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] server lang: <none>
2025-11-12T16:31:19.498 [DEBUG] [Thread-19029] [transport.py] [_log()] kex follows: False
2025-11-12T16:31:19.499 [DEBUG] [Thread-19029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:31:19.499 [DEBUG] [Thread-19029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:31:19.499 [DEBUG] [Thread-19029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:31:19.499 [DEBUG] [Thread-19029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:31:19.499 [DEBUG] [Thread-19029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:31:19.499 [DEBUG] [Thread-19029] [transport.py] [_log()] Compression: none
2025-11-12T16:31:19.499 [DEBUG] [Thread-19029] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:31:19.555 [DEBUG] [Thread-19029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:31:19.556 [DEBUG] [Thread-19029] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:31:19.556 [DEBUG] [Thread-19029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:31:19.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:31:19.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:31:19.612 [DEBUG] [Thread-19029] [transport.py] [_log()] userauth is OK
2025-11-12T16:31:19.612 [DEBUG] [Thread-19029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:31:19.613 [DEBUG] [Thread-19029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:31:19.613 [DEBUG] [Thread-19029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:31:19.613 [DEBUG] [Thread-19029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:31:19.633 [INFO] [Thread-19029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:31:19.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:31:19.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:31:20.494 [DEBUG] [Thread-19029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:31:20.494 [DEBUG] [Thread-19029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:31:20.541 [DEBUG] [Thread-19029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:31:20.541 [DEBUG] [Thread-19029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:31:20.551 [DEBUG] [Thread-19029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:31:20.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:31:20.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-11-12T16:31: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-11-12T16:31:20.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:31:20.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:31:20.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:31:20.586 [DEBUG] [Thread-19029] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:31:29.465 [DEBUG] [Thread-19031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:31:40.757 [DEBUG] [Thread-19032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:31:44.520 [DEBUG] [Thread-19033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:31:45.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:31:45.422 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:31:50.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:31:50.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:31:50.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-11-12T16:31:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 31, 36), 30.31, 13.4, 0.0, 28.04, 26.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:31:51.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:31:36
2025-11-12T16:31:51.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:31:51.517 [DEBUG] [Thread-19034] [transport.py] [_log()] starting thread (client mode): 0x17344250
2025-11-12T16:31:51.517 [DEBUG] [Thread-19034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:31:51.537 [DEBUG] [Thread-19034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:31:51.537 [INFO] [Thread-19034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] client lang: <none>
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] server lang: <none>
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] kex follows: False
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] Compression: none
2025-11-12T16:31:51.541 [DEBUG] [Thread-19034] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:31:51.558 [DEBUG] [Thread-19034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:31:51.559 [DEBUG] [Thread-19034] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:31:51.560 [DEBUG] [Thread-19034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:31:51.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:31:51.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:31:51.562 [DEBUG] [Thread-19034] [transport.py] [_log()] userauth is OK
2025-11-12T16:31:51.562 [DEBUG] [Thread-19034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:31:51.562 [DEBUG] [Thread-19034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:31:51.562 [DEBUG] [Thread-19034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:31:51.562 [DEBUG] [Thread-19034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:31:51.581 [INFO] [Thread-19034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:31:51.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:31:52.205 [DEBUG] [Thread-19034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:31:52.205 [DEBUG] [Thread-19034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:31:52.206 [DEBUG] [Thread-19034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:31:52.247 [DEBUG] [Thread-19034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:31:52.247 [DEBUG] [Thread-19034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:31:52.251 [DEBUG] [Thread-19034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:31:52.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:31:52.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:31:52.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:31:52.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:31:52.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:31:52.273 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:31:52.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:31:52.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:31:52.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:31:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.605295 -999.00  +26.20  19.74     18   +0.60 1 1 1 1 1   888    0 24.49 -31.59 ----- 19.7 19.7 288.1 29.6 28.4 -24.5 28.4 -22.9 28.1 -23.5 28.5 -23.0
2025-11-12T16:31:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:31:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:31:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.605295
2025-11-12T16:31:52.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:31:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:31:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:31:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:31:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:31:52.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:31:36', tmtdew=30.31, humidity=13.4, cloud=0.0, wind=28.04, temperature=26.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:31:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:31:52.276 [DEBUG] [Thread-19034] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:31:52.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:31:52.370 [DEBUG] [Thread-19037] [transport.py] [_log()] starting thread (client mode): 0x11f10670
2025-11-12T16:31:52.370 [DEBUG] [Thread-19037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:31:52.385 [DEBUG] [Thread-19037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:31:52.385 [INFO] [Thread-19037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:31:52.392 [DEBUG] [Thread-19037] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] client lang: <none>
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] server lang: <none>
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] kex follows: False
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] Compression: none
2025-11-12T16:31:52.393 [DEBUG] [Thread-19037] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:31:52.451 [DEBUG] [Thread-19037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:31:52.452 [DEBUG] [Thread-19037] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:31:52.453 [DEBUG] [Thread-19037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:31:52.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:31:52.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:31:52.507 [DEBUG] [Thread-19037] [transport.py] [_log()] userauth is OK
2025-11-12T16:31:52.508 [DEBUG] [Thread-19037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:31:52.508 [DEBUG] [Thread-19037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:31:52.508 [DEBUG] [Thread-19037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:31:52.508 [DEBUG] [Thread-19037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:31:52.526 [INFO] [Thread-19037] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:31:52.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:31:52.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:31:53.340 [DEBUG] [Thread-19037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:31:53.341 [DEBUG] [Thread-19037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:31:53.388 [DEBUG] [Thread-19037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:31:53.388 [DEBUG] [Thread-19037] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:31:53.397 [DEBUG] [Thread-19037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:31:53.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:31:53.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-11-12T16:31:53.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-11-12T16:31:53.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:31:53.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:31:53.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:31:53.432 [DEBUG] [Thread-19037] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:31:59.557 [DEBUG] [Thread-19039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:32:14.604 [DEBUG] [Thread-19040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:32:23.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:32:23.451 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:32:23.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:32:24.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 32, 8), 30.21, 13.49, 0.0, 30.31, 26.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:32:24.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:32:08
2025-11-12T16:32:24.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:32:24.375 [DEBUG] [Thread-19041] [transport.py] [_log()] starting thread (client mode): 0x17360250
2025-11-12T16:32:24.375 [DEBUG] [Thread-19041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:32:24.395 [DEBUG] [Thread-19041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:32:24.395 [INFO] [Thread-19041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:32:24.398 [DEBUG] [Thread-19041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:32:24.398 [DEBUG] [Thread-19041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:32:24.398 [DEBUG] [Thread-19041] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:32:24.398 [DEBUG] [Thread-19041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:32:24.398 [DEBUG] [Thread-19041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:32:24.398 [DEBUG] [Thread-19041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:32:24.398 [DEBUG] [Thread-19041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] client lang: <none>
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] server lang: <none>
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] kex follows: False
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] Compression: none
2025-11-12T16:32:24.399 [DEBUG] [Thread-19041] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:32:24.407 [DEBUG] [Thread-19041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:32:24.408 [DEBUG] [Thread-19041] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:32:24.408 [DEBUG] [Thread-19041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:32:24.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:32:24.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:32:24.410 [DEBUG] [Thread-19041] [transport.py] [_log()] userauth is OK
2025-11-12T16:32:24.410 [DEBUG] [Thread-19041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:32:24.410 [DEBUG] [Thread-19041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:32:24.411 [DEBUG] [Thread-19041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:32:24.411 [DEBUG] [Thread-19041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:32:24.429 [INFO] [Thread-19041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:32:24.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:32:25.045 [DEBUG] [Thread-19041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:32:25.045 [DEBUG] [Thread-19041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:32:25.045 [DEBUG] [Thread-19041] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:32:25.086 [DEBUG] [Thread-19041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:32:25.086 [DEBUG] [Thread-19041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:32:25.089 [DEBUG] [Thread-19041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:32:25.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:32:25.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:32:25.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:32:25.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:32:25.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:32:25.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:32:25.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:32:25.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:32:25.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:32:25.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.605642 -999.00  +26.20  34.57     18   +0.60 1 2 2 1 1   888    0 24.74 -29.26 ----- 34.6 34.6 292.0 44.0 28.4 -24.0 28.4 -22.9 28.2 -22.2 28.5 -23.5
2025-11-12T16:32:25.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:32:25.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:32:25.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.605642
2025-11-12T16:32:25.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:32:25.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:32:25.112 [DEBUG] [Thread-19041] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:32:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:32:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:32:25.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:32:25.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:32:08', tmtdew=30.21, humidity=13.49, cloud=0.0, wind=30.31, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:32:07.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:32:25.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:32:25.209 [DEBUG] [Thread-19044] [transport.py] [_log()] starting thread (client mode): 0x149ab730
2025-11-12T16:32:25.209 [DEBUG] [Thread-19044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:32:25.224 [DEBUG] [Thread-19044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:32:25.224 [INFO] [Thread-19044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:32:25.232 [DEBUG] [Thread-19044] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:32:25.232 [DEBUG] [Thread-19044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:32:25.232 [DEBUG] [Thread-19044] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:32:25.232 [DEBUG] [Thread-19044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] client lang: <none>
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] server lang: <none>
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] kex follows: False
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:32:25.233 [DEBUG] [Thread-19044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:32:25.234 [DEBUG] [Thread-19044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:32:25.234 [DEBUG] [Thread-19044] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:32:25.234 [DEBUG] [Thread-19044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:32:25.234 [DEBUG] [Thread-19044] [transport.py] [_log()] Compression: none
2025-11-12T16:32:25.234 [DEBUG] [Thread-19044] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:32:25.291 [DEBUG] [Thread-19044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:32:25.291 [DEBUG] [Thread-19044] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:32:25.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:32:25.292 [DEBUG] [Thread-19044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:32:25.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:32:25.348 [DEBUG] [Thread-19044] [transport.py] [_log()] userauth is OK
2025-11-12T16:32:25.348 [DEBUG] [Thread-19044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:32:25.348 [DEBUG] [Thread-19044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:32:25.348 [DEBUG] [Thread-19044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:32:25.349 [DEBUG] [Thread-19044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:32:25.369 [INFO] [Thread-19044] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:32:25.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:32:25.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:32:26.226 [DEBUG] [Thread-19044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:32:26.226 [DEBUG] [Thread-19044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:32:26.273 [DEBUG] [Thread-19044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:32:26.274 [DEBUG] [Thread-19044] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:32:26.283 [DEBUG] [Thread-19044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:32:26.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:32:26.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-11-12T16:32:26.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-11-12T16:32:26.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:32:26.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:32:26.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:32:26.318 [DEBUG] [Thread-19044] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:32:29.636 [DEBUG] [Thread-19046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:32:40.802 [DEBUG] [Thread-19047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:32:44.695 [DEBUG] [Thread-19048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:32:45.565 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:32:45.565 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:32:56.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:32:56.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:32:56.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-11-12T16:32:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 32, 40), 30.42, 13.44, 0.0, 35.39, 26.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:32:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:32:40
2025-11-12T16:32:57.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:32:57.272 [DEBUG] [Thread-19049] [transport.py] [_log()] starting thread (client mode): 0x1493ffd0
2025-11-12T16:32:57.273 [DEBUG] [Thread-19049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:32:57.293 [DEBUG] [Thread-19049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:32:57.293 [INFO] [Thread-19049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] client lang: <none>
2025-11-12T16:32:57.295 [DEBUG] [Thread-19049] [transport.py] [_log()] server lang: <none>
2025-11-12T16:32:57.296 [DEBUG] [Thread-19049] [transport.py] [_log()] kex follows: False
2025-11-12T16:32:57.296 [DEBUG] [Thread-19049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:32:57.296 [DEBUG] [Thread-19049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:32:57.296 [DEBUG] [Thread-19049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:32:57.296 [DEBUG] [Thread-19049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:32:57.296 [DEBUG] [Thread-19049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:32:57.296 [DEBUG] [Thread-19049] [transport.py] [_log()] Compression: none
2025-11-12T16:32:57.296 [DEBUG] [Thread-19049] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:32:57.308 [DEBUG] [Thread-19049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:32:57.309 [DEBUG] [Thread-19049] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:32:57.309 [DEBUG] [Thread-19049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:32:57.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:32:57.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:32:57.311 [DEBUG] [Thread-19049] [transport.py] [_log()] userauth is OK
2025-11-12T16:32:57.312 [DEBUG] [Thread-19049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:32:57.312 [DEBUG] [Thread-19049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:32:57.312 [DEBUG] [Thread-19049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:32:57.312 [DEBUG] [Thread-19049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:32:57.330 [INFO] [Thread-19049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:32:57.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:32:57.911 [DEBUG] [Thread-19049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:32:57.911 [DEBUG] [Thread-19049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:32:57.912 [DEBUG] [Thread-19049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:32:57.953 [DEBUG] [Thread-19049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:32:57.953 [DEBUG] [Thread-19049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:32:57.957 [DEBUG] [Thread-19049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:32:57.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:32:57.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:32:57.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:32:57.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:32:57.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:32:57.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:32:57.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:32:57.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:32:57.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:32:57.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.605990 -999.00  +26.00  28.24     19   +0.60 1 2 1 1 1   888    0 25.06 -31.43 ----- 28.2 28.2 276.4 36.1 28.4 -24.6 28.3 -23.0 28.1 -22.6 28.4 -23.1
2025-11-12T16:32:57.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:32:57.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:32:57.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.605990
2025-11-12T16:32:57.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:32:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:32:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:32:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:32:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:32:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:32:40', tmtdew=30.42, humidity=13.44, cloud=0.0, wind=35.39, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:32:37.536', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:32:57.982 [DEBUG] [Thread-19049] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:32:58.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:32:58.087 [DEBUG] [Thread-19052] [transport.py] [_log()] starting thread (client mode): 0x173bd660
2025-11-12T16:32:58.088 [DEBUG] [Thread-19052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:32:58.103 [DEBUG] [Thread-19052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:32:58.103 [INFO] [Thread-19052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] client lang: <none>
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] server lang: <none>
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] kex follows: False
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:32:58.111 [DEBUG] [Thread-19052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:32:58.112 [DEBUG] [Thread-19052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:32:58.112 [DEBUG] [Thread-19052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:32:58.112 [DEBUG] [Thread-19052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:32:58.112 [DEBUG] [Thread-19052] [transport.py] [_log()] Compression: none
2025-11-12T16:32:58.112 [DEBUG] [Thread-19052] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:32:58.168 [DEBUG] [Thread-19052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:32:58.168 [DEBUG] [Thread-19052] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:32:58.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:32:58.169 [DEBUG] [Thread-19052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:32:58.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:32:58.224 [DEBUG] [Thread-19052] [transport.py] [_log()] userauth is OK
2025-11-12T16:32:58.224 [DEBUG] [Thread-19052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:32:58.224 [DEBUG] [Thread-19052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:32:58.224 [DEBUG] [Thread-19052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:32:58.224 [DEBUG] [Thread-19052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:32:58.244 [INFO] [Thread-19052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:32:58.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:32:58.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:32:59.122 [DEBUG] [Thread-19052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:32:59.122 [DEBUG] [Thread-19052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:32:59.169 [DEBUG] [Thread-19052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:32:59.170 [DEBUG] [Thread-19052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:32:59.179 [DEBUG] [Thread-19052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:32:59.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:32:59.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-11-12T16:32:59.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:32:59.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:32:59.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:32:59.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:32:59.216 [DEBUG] [Thread-19052] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:32:59.729 [DEBUG] [Thread-19054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:33:14.778 [DEBUG] [Thread-19055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:33:29.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:33:29.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:33:29.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-11-12T16:33:29.809 [DEBUG] [Thread-19056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:33:29.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 33, 12), 30.45, 13.44, 0.0, 31.49, 26.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:33:29.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:33:12
2025-11-12T16:33:30.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:33:30.186 [DEBUG] [Thread-19057] [transport.py] [_log()] starting thread (client mode): 0x173e8580
2025-11-12T16:33:30.186 [DEBUG] [Thread-19057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:33:30.204 [DEBUG] [Thread-19057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:33:30.204 [INFO] [Thread-19057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] client lang: <none>
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] server lang: <none>
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] kex follows: False
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] Compression: none
2025-11-12T16:33:30.205 [DEBUG] [Thread-19057] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:33:30.216 [DEBUG] [Thread-19057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:33:30.216 [DEBUG] [Thread-19057] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:33:30.217 [DEBUG] [Thread-19057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:33:30.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:33:30.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:33:30.217 [DEBUG] [Thread-19057] [transport.py] [_log()] userauth is OK
2025-11-12T16:33:30.217 [DEBUG] [Thread-19057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:33:30.217 [DEBUG] [Thread-19057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:33:30.217 [DEBUG] [Thread-19057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:33:30.217 [DEBUG] [Thread-19057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:33:30.227 [INFO] [Thread-19057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:33:30.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:33:30.800 [DEBUG] [Thread-19057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:33:30.800 [DEBUG] [Thread-19057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:33:30.800 [DEBUG] [Thread-19057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:33:30.841 [DEBUG] [Thread-19057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:33:30.841 [DEBUG] [Thread-19057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:33:30.843 [DEBUG] [Thread-19057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:33:30.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:33:30.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:33:30.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:33:30.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:33:30.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:33:30.859 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:33:30.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:33:30.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:33:30.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:33:30.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.606337 -999.00  +26.00  33.11     19   +0.70 1 1 2 1 1   888    0 24.89 -34.93 ----- 33.1 33.1 278.6 41.5 28.3 -23.9 28.2 -22.5 28.0 -23.7 28.4 -22.9
2025-11-12T16:33:30.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:33:30.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:33:30.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.606337
2025-11-12T16:33:30.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:33:30.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:33:30.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:33:30.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:33:30.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:33:30.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:33:12', tmtdew=30.45, humidity=13.44, cloud=0.0, wind=31.49, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:33:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:33:30.860 [DEBUG] [Thread-19057] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:33:30.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:33:30.948 [DEBUG] [Thread-19060] [transport.py] [_log()] starting thread (client mode): 0x11f13b50
2025-11-12T16:33:30.948 [DEBUG] [Thread-19060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:33:30.963 [DEBUG] [Thread-19060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:33:30.963 [INFO] [Thread-19060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] client lang: <none>
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] server lang: <none>
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] kex follows: False
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] Compression: none
2025-11-12T16:33:30.971 [DEBUG] [Thread-19060] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:33:31.029 [DEBUG] [Thread-19060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:33:31.030 [DEBUG] [Thread-19060] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:33:31.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:33:31.030 [DEBUG] [Thread-19060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:33:31.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:33:31.087 [DEBUG] [Thread-19060] [transport.py] [_log()] userauth is OK
2025-11-12T16:33:31.087 [DEBUG] [Thread-19060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:33:31.087 [DEBUG] [Thread-19060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:33:31.087 [DEBUG] [Thread-19060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:33:31.087 [DEBUG] [Thread-19060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:33:31.101 [INFO] [Thread-19060] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:33:31.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:33:31.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:33:31.922 [DEBUG] [Thread-19060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:33:31.922 [DEBUG] [Thread-19060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:33:31.970 [DEBUG] [Thread-19060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:33:31.970 [DEBUG] [Thread-19060] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:33:31.978 [DEBUG] [Thread-19060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:33:31.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:33:31.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-11-12T16:33: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-11-12T16:33:32.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:33:32.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:33:32.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:33:32.010 [DEBUG] [Thread-19060] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:33:40.835 [DEBUG] [Thread-19062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:33:44.841 [DEBUG] [Thread-19063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:33:45.706 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:33:45.707 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:33:59.881 [DEBUG] [Thread-19064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:34:02.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:34:02.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:34:02.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-11-12T16:34:02.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 33, 44), 30.53, 12.97, 0.0, 39.28, 26.6, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:34:02.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:33:44
2025-11-12T16:34:02.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:34:02.947 [DEBUG] [Thread-19065] [transport.py] [_log()] starting thread (client mode): 0x149da470
2025-11-12T16:34:02.948 [DEBUG] [Thread-19065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:34:02.967 [DEBUG] [Thread-19065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:34:02.967 [INFO] [Thread-19065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:34:02.970 [DEBUG] [Thread-19065] [transport.py] [_log()] client lang: <none>
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] server lang: <none>
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] kex follows: False
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] Compression: none
2025-11-12T16:34:02.971 [DEBUG] [Thread-19065] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:34:02.986 [DEBUG] [Thread-19065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:34:02.987 [DEBUG] [Thread-19065] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:34:02.987 [DEBUG] [Thread-19065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:34:02.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:34:02.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:34:02.989 [DEBUG] [Thread-19065] [transport.py] [_log()] userauth is OK
2025-11-12T16:34:02.989 [DEBUG] [Thread-19065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:34:02.990 [DEBUG] [Thread-19065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:34:02.990 [DEBUG] [Thread-19065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:34:02.990 [DEBUG] [Thread-19065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:34:03.007 [INFO] [Thread-19065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:34:03.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:34:03.588 [DEBUG] [Thread-19065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:34:03.588 [DEBUG] [Thread-19065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:34:03.588 [DEBUG] [Thread-19065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:34:03.629 [DEBUG] [Thread-19065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:34:03.629 [DEBUG] [Thread-19065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:34:03.632 [DEBUG] [Thread-19065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:34:03.645 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:34:03.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:34:03.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:34:03.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:34:03.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:34:03.657 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:34:03.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:34:03.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:34:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:34:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.606684 -999.00  +25.90  21.61     19   +0.70 1 2 1 1 1   888    0 24.42 -32.24 ----- 21.6 21.6 287.0 48.5 28.2 -24.2 28.2 -23.2 27.9 -22.5 28.4 -23.3
2025-11-12T16:34:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:34:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:34:03.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.606684
2025-11-12T16:34:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:34:03.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:34:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:34:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:34:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:34:03.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:33:44', tmtdew=30.53, humidity=12.97, cloud=0.0, wind=39.28, temperature=26.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:33:37.498', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:34:03.660 [DEBUG] [Thread-19065] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:34:03.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:34:03.756 [DEBUG] [Thread-19068] [transport.py] [_log()] starting thread (client mode): 0x1493d8d0
2025-11-12T16:34:03.756 [DEBUG] [Thread-19068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:34:03.771 [DEBUG] [Thread-19068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:34:03.771 [INFO] [Thread-19068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] client lang: <none>
2025-11-12T16:34:03.779 [DEBUG] [Thread-19068] [transport.py] [_log()] server lang: <none>
2025-11-12T16:34:03.780 [DEBUG] [Thread-19068] [transport.py] [_log()] kex follows: False
2025-11-12T16:34:03.780 [DEBUG] [Thread-19068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:34:03.780 [DEBUG] [Thread-19068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:34:03.780 [DEBUG] [Thread-19068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:34:03.780 [DEBUG] [Thread-19068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:34:03.780 [DEBUG] [Thread-19068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:34:03.780 [DEBUG] [Thread-19068] [transport.py] [_log()] Compression: none
2025-11-12T16:34:03.780 [DEBUG] [Thread-19068] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:34:03.840 [DEBUG] [Thread-19068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:34:03.841 [DEBUG] [Thread-19068] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:34:03.842 [DEBUG] [Thread-19068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:34:03.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:34:03.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:34:03.900 [DEBUG] [Thread-19068] [transport.py] [_log()] userauth is OK
2025-11-12T16:34:03.900 [DEBUG] [Thread-19068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:34:03.901 [DEBUG] [Thread-19068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:34:03.901 [DEBUG] [Thread-19068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:34:03.901 [DEBUG] [Thread-19068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:34:03.921 [INFO] [Thread-19068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:34:03.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:34:03.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:34:04.785 [DEBUG] [Thread-19068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:34:04.785 [DEBUG] [Thread-19068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:34:04.832 [DEBUG] [Thread-19068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:34:04.833 [DEBUG] [Thread-19068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:34:04.842 [DEBUG] [Thread-19068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:34:04.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:34:04.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-11-12T16:34:04.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-11-12T16:34:04.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:34:04.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:34:04.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:34:04.877 [DEBUG] [Thread-19068] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:34:14.915 [DEBUG] [Thread-19070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:34:29.965 [DEBUG] [Thread-19071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:34:34.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:34:34.900 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:34:34.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-11-12T16:34:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 34, 16), 30.54, 12.95, 0.0, 41.09, 26.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:34:35.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:34:16
2025-11-12T16:34:35.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:34:35.831 [DEBUG] [Thread-19072] [transport.py] [_log()] starting thread (client mode): 0x149abc70
2025-11-12T16:34:35.831 [DEBUG] [Thread-19072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:34:35.851 [DEBUG] [Thread-19072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:34:35.851 [INFO] [Thread-19072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:34:35.854 [DEBUG] [Thread-19072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:34:35.854 [DEBUG] [Thread-19072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:34:35.854 [DEBUG] [Thread-19072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:34:35.854 [DEBUG] [Thread-19072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:34:35.854 [DEBUG] [Thread-19072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:34:35.854 [DEBUG] [Thread-19072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] client lang: <none>
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] server lang: <none>
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] kex follows: False
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] Compression: none
2025-11-12T16:34:35.855 [DEBUG] [Thread-19072] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:34:35.872 [DEBUG] [Thread-19072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:34:35.873 [DEBUG] [Thread-19072] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:34:35.873 [DEBUG] [Thread-19072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:34:35.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:34:35.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:34:35.875 [DEBUG] [Thread-19072] [transport.py] [_log()] userauth is OK
2025-11-12T16:34:35.875 [DEBUG] [Thread-19072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:34:35.875 [DEBUG] [Thread-19072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:34:35.876 [DEBUG] [Thread-19072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:34:35.876 [DEBUG] [Thread-19072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:34:35.900 [INFO] [Thread-19072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:34:35.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:34:36.473 [DEBUG] [Thread-19072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:34:36.473 [DEBUG] [Thread-19072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:34:36.474 [DEBUG] [Thread-19072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:34:36.513 [DEBUG] [Thread-19072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:34:36.514 [DEBUG] [Thread-19072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:34:36.517 [DEBUG] [Thread-19072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:34:36.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:34:36.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:34:36.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:34:36.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:34:36.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:34:36.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:34:36.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:34:36.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:34:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:34:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.607031 -999.00  +26.00  31.02     19   +0.70 1 2 2 1 1   887    0 24.54 -31.96 ----- 31.0 31.0 287.4 40.8 28.2 -23.5 28.1 -22.6 27.9 -22.1 28.3 -23.1
2025-11-12T16:34:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:34:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:34:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.607031
2025-11-12T16:34:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:34:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:34:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:34:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:34:36.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:34:36.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:34:16', tmtdew=30.54, humidity=12.95, cloud=0.0, wind=41.09, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:34:07.478', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:34:36.538 [DEBUG] [Thread-19072] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:34:36.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:34:36.635 [DEBUG] [Thread-19075] [transport.py] [_log()] starting thread (client mode): 0x149aa3b0
2025-11-12T16:34:36.635 [DEBUG] [Thread-19075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:34:36.650 [DEBUG] [Thread-19075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:34:36.650 [INFO] [Thread-19075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] client lang: <none>
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] server lang: <none>
2025-11-12T16:34:36.658 [DEBUG] [Thread-19075] [transport.py] [_log()] kex follows: False
2025-11-12T16:34:36.659 [DEBUG] [Thread-19075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:34:36.659 [DEBUG] [Thread-19075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:34:36.659 [DEBUG] [Thread-19075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:34:36.659 [DEBUG] [Thread-19075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:34:36.659 [DEBUG] [Thread-19075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:34:36.659 [DEBUG] [Thread-19075] [transport.py] [_log()] Compression: none
2025-11-12T16:34:36.659 [DEBUG] [Thread-19075] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:34:36.719 [DEBUG] [Thread-19075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:34:36.719 [DEBUG] [Thread-19075] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:34:36.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:34:36.720 [DEBUG] [Thread-19075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:34:36.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:34:36.776 [DEBUG] [Thread-19075] [transport.py] [_log()] userauth is OK
2025-11-12T16:34:36.777 [DEBUG] [Thread-19075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:34:36.777 [DEBUG] [Thread-19075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:34:36.777 [DEBUG] [Thread-19075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:34:36.777 [DEBUG] [Thread-19075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:34:36.801 [INFO] [Thread-19075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:34:36.801 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:34:36.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:34:37.631 [DEBUG] [Thread-19075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:34:37.632 [DEBUG] [Thread-19075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:34:37.680 [DEBUG] [Thread-19075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:34:37.680 [DEBUG] [Thread-19075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:34:37.689 [DEBUG] [Thread-19075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:34:37.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:34:37.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-11-12T16:34:37.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-11-12T16:34:37.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:34:37.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:34:37.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:34:37.726 [DEBUG] [Thread-19075] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:34:40.879 [DEBUG] [Thread-19077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:34:44.997 [DEBUG] [Thread-19078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:34:45.847 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:34:45.848 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:35:00.037 [DEBUG] [Thread-19079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:35:07.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:35:07.740 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:35:07.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-11-12T16:35:08.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 34, 48), 30.4, 13.44, 0.0, 39.21, 26.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:35:08.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:34:48
2025-11-12T16:35:08.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:35:08.650 [DEBUG] [Thread-19080] [transport.py] [_log()] starting thread (client mode): 0x173994e0
2025-11-12T16:35:08.650 [DEBUG] [Thread-19080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:35:08.669 [DEBUG] [Thread-19080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:35:08.670 [INFO] [Thread-19080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:35:08.671 [DEBUG] [Thread-19080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] client lang: <none>
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] server lang: <none>
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] kex follows: False
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] Compression: none
2025-11-12T16:35:08.672 [DEBUG] [Thread-19080] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:35:08.681 [DEBUG] [Thread-19080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:35:08.682 [DEBUG] [Thread-19080] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:35:08.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:35:08.684 [DEBUG] [Thread-19080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:35:08.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:35:08.686 [DEBUG] [Thread-19080] [transport.py] [_log()] userauth is OK
2025-11-12T16:35:08.686 [DEBUG] [Thread-19080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:35:08.686 [DEBUG] [Thread-19080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:35:08.686 [DEBUG] [Thread-19080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:35:08.687 [DEBUG] [Thread-19080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:35:08.702 [INFO] [Thread-19080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:35:08.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:35:09.276 [DEBUG] [Thread-19080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:35:09.276 [DEBUG] [Thread-19080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:35:09.276 [DEBUG] [Thread-19080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:35:09.317 [DEBUG] [Thread-19080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:35:09.317 [DEBUG] [Thread-19080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:35:09.320 [DEBUG] [Thread-19080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:35:09.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:35:09.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:35:09.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:35:09.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:35:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:35:09.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:35:09.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:35:09.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:35:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:35:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.607378 -999.00  +26.00  28.35     19   +0.60 1 1 1 1 1   887    0 24.45 -31.05 ----- 28.4 28.4 279.2 37.2 28.2 -24.2 28.1 -23.0 27.9 -23.8 28.2 -22.7
2025-11-12T16:35:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:35:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:35:09.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.607378
2025-11-12T16:35:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:35:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:35:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:35:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:35:09.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:35:09.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:34:48', tmtdew=30.4, humidity=13.44, cloud=0.0, wind=39.21, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:34:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:35:09.355 [DEBUG] [Thread-19080] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:35:09.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:35:09.450 [DEBUG] [Thread-19083] [transport.py] [_log()] starting thread (client mode): 0x173be5f0
2025-11-12T16:35:09.450 [DEBUG] [Thread-19083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:35:09.464 [DEBUG] [Thread-19083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:35:09.464 [INFO] [Thread-19083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:35:09.471 [DEBUG] [Thread-19083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] client lang: <none>
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] server lang: <none>
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] kex follows: False
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:35:09.472 [DEBUG] [Thread-19083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:35:09.473 [DEBUG] [Thread-19083] [transport.py] [_log()] Compression: none
2025-11-12T16:35:09.473 [DEBUG] [Thread-19083] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:35:09.532 [DEBUG] [Thread-19083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:35:09.532 [DEBUG] [Thread-19083] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:35:09.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:35:09.534 [DEBUG] [Thread-19083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:35:09.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:35:09.588 [DEBUG] [Thread-19083] [transport.py] [_log()] userauth is OK
2025-11-12T16:35:09.588 [DEBUG] [Thread-19083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:35:09.588 [DEBUG] [Thread-19083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:35:09.588 [DEBUG] [Thread-19083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:35:09.588 [DEBUG] [Thread-19083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:35:09.607 [INFO] [Thread-19083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:35:09.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:35:09.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:35:10.515 [DEBUG] [Thread-19083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:35:10.515 [DEBUG] [Thread-19083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:35:10.563 [DEBUG] [Thread-19083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:35:10.564 [DEBUG] [Thread-19083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:35:10.573 [DEBUG] [Thread-19083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:35:10.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:35: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-11-12T16:35: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-11-12T16:35:10.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:35:10.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:35:10.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:35:10.610 [DEBUG] [Thread-19083] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:35:15.074 [DEBUG] [Thread-19085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:35:30.122 [DEBUG] [Thread-19086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:35:40.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:35:40.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:35:40.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-11-12T16:35:40.907 [DEBUG] [Thread-19087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:35:41.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 35, 20), 30.34, 13.49, 0.0, 39.17, 26.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:35:41.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:35:20
2025-11-12T16:35:41.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:35:41.549 [DEBUG] [Thread-19088] [transport.py] [_log()] starting thread (client mode): 0x17363f40
2025-11-12T16:35:41.549 [DEBUG] [Thread-19088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:35:41.569 [DEBUG] [Thread-19088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:35:41.569 [INFO] [Thread-19088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:35:41.571 [DEBUG] [Thread-19088] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] client lang: <none>
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] server lang: <none>
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] kex follows: False
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] Compression: none
2025-11-12T16:35:41.572 [DEBUG] [Thread-19088] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:35:41.582 [DEBUG] [Thread-19088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:35:41.583 [DEBUG] [Thread-19088] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:35:41.583 [DEBUG] [Thread-19088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:35:41.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:35:41.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:35:41.585 [DEBUG] [Thread-19088] [transport.py] [_log()] userauth is OK
2025-11-12T16:35:41.585 [DEBUG] [Thread-19088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:35:41.585 [DEBUG] [Thread-19088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:35:41.585 [DEBUG] [Thread-19088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:35:41.586 [DEBUG] [Thread-19088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:35:41.610 [INFO] [Thread-19088] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:35:41.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:35:42.193 [DEBUG] [Thread-19088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:35:42.193 [DEBUG] [Thread-19088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:35:42.193 [DEBUG] [Thread-19088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:35:42.234 [DEBUG] [Thread-19088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:35:42.234 [DEBUG] [Thread-19088] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:35:42.237 [DEBUG] [Thread-19088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:35:42.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:35:42.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:35:42.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:35:42.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:35:42.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:35:42.256 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:35:42.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:35:42.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:35:42.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:35:42.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.608073 -999.00  +26.20  26.54     18   +0.70 1 2 1 1 1   887    0 24.27 -26.80 ----- 26.5 26.5 288.4 35.1 28.2 -23.2 28.1 -22.6 27.9 -22.4 28.2 -22.4
2025-11-12T16:35:42.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:35:42.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:35:42.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.608073
2025-11-12T16:35:42.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:35:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:35:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:35:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:35:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:35:42.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:35:20', tmtdew=30.34, humidity=13.49, cloud=0.0, wind=39.17, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:35:37.507', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:35:42.260 [DEBUG] [Thread-19088] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:35:42.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:35:42.357 [DEBUG] [Thread-19091] [transport.py] [_log()] starting thread (client mode): 0x19ddb4f0
2025-11-12T16:35:42.357 [DEBUG] [Thread-19091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:35:42.372 [DEBUG] [Thread-19091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:35:42.372 [INFO] [Thread-19091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:35:42.380 [DEBUG] [Thread-19091] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:35:42.380 [DEBUG] [Thread-19091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:35:42.380 [DEBUG] [Thread-19091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:35:42.380 [DEBUG] [Thread-19091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:35:42.380 [DEBUG] [Thread-19091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:35:42.381 [DEBUG] [Thread-19091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:35:42.381 [DEBUG] [Thread-19091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:35:42.381 [DEBUG] [Thread-19091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:35:42.381 [DEBUG] [Thread-19091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:35:42.381 [DEBUG] [Thread-19091] [transport.py] [_log()] client lang: <none>
2025-11-12T16:35:42.381 [DEBUG] [Thread-19091] [transport.py] [_log()] server lang: <none>
2025-11-12T16:35:42.381 [DEBUG] [Thread-19091] [transport.py] [_log()] kex follows: False
2025-11-12T16:35:42.381 [DEBUG] [Thread-19091] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:35:42.382 [DEBUG] [Thread-19091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:35:42.382 [DEBUG] [Thread-19091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:35:42.382 [DEBUG] [Thread-19091] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:35:42.382 [DEBUG] [Thread-19091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:35:42.382 [DEBUG] [Thread-19091] [transport.py] [_log()] Compression: none
2025-11-12T16:35:42.382 [DEBUG] [Thread-19091] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:35:42.440 [DEBUG] [Thread-19091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:35:42.441 [DEBUG] [Thread-19091] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:35:42.442 [DEBUG] [Thread-19091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:35:42.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:35:42.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:35:42.500 [DEBUG] [Thread-19091] [transport.py] [_log()] userauth is OK
2025-11-12T16:35:42.500 [DEBUG] [Thread-19091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:35:42.501 [DEBUG] [Thread-19091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:35:42.501 [DEBUG] [Thread-19091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:35:42.501 [DEBUG] [Thread-19091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:35:42.520 [INFO] [Thread-19091] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:35:42.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:35:42.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:35:43.363 [DEBUG] [Thread-19091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:35:43.363 [DEBUG] [Thread-19091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:35:43.412 [DEBUG] [Thread-19091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:35:43.412 [DEBUG] [Thread-19091] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:35:43.421 [DEBUG] [Thread-19091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:35:43.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:35:43.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-11-12T16:35:43.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:35:43.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:35:43.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:35:43.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:35:43.457 [DEBUG] [Thread-19091] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:35:45.162 [DEBUG] [Thread-19093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:35:45.989 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:35:45.991 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:36:00.213 [DEBUG] [Thread-19094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:36:13.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:36:13.480 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:36:13.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-11-12T16:36:14.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 35, 52), 30.39, 13.45, 0.0, 36.98, 26.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:36:14.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:35:52
2025-11-12T16:36:14.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:36:14.404 [DEBUG] [Thread-19095] [transport.py] [_log()] starting thread (client mode): 0x19dda9b0
2025-11-12T16:36:14.404 [DEBUG] [Thread-19095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:36:14.424 [DEBUG] [Thread-19095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:36:14.425 [INFO] [Thread-19095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:36:14.427 [DEBUG] [Thread-19095] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:36:14.427 [DEBUG] [Thread-19095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] client lang: <none>
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] server lang: <none>
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] kex follows: False
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] Compression: none
2025-11-12T16:36:14.428 [DEBUG] [Thread-19095] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:36:14.448 [DEBUG] [Thread-19095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:36:14.448 [DEBUG] [Thread-19095] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:36:14.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:36:14.449 [DEBUG] [Thread-19095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:36:14.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:36:14.451 [DEBUG] [Thread-19095] [transport.py] [_log()] userauth is OK
2025-11-12T16:36:14.452 [DEBUG] [Thread-19095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:36:14.452 [DEBUG] [Thread-19095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:36:14.452 [DEBUG] [Thread-19095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:36:14.452 [DEBUG] [Thread-19095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:36:14.477 [INFO] [Thread-19095] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:36:14.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:36:15.053 [DEBUG] [Thread-19095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:36:15.053 [DEBUG] [Thread-19095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:36:15.054 [DEBUG] [Thread-19095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:36:15.094 [DEBUG] [Thread-19095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:36:15.095 [DEBUG] [Thread-19095] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:36:15.097 [DEBUG] [Thread-19095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:36:15.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:36:15.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:36:15.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:36:15.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:36:15.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:36:15.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:36:15.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:36:15.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:36:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:36:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.608073 -999.00  +26.20  26.54     18   +0.70 1 2 1 1 1   887    0 24.27 -26.80 ----- 26.5 26.5 288.4 35.1 28.2 -23.2 28.1 -22.6 27.9 -22.4 28.2 -22.4
2025-11-12T16:36:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:36:15.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:36:15.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.608073
2025-11-12T16:36:15.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:36:15.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:36:15.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:36:15.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:36:15.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:36:15.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:35:52', tmtdew=30.39, humidity=13.45, cloud=0.0, wind=36.98, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:35:37.507', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:36:15.116 [DEBUG] [Thread-19095] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:36:15.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:36:15.218 [DEBUG] [Thread-19098] [transport.py] [_log()] starting thread (client mode): 0x173be440
2025-11-12T16:36:15.219 [DEBUG] [Thread-19098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:36:15.233 [DEBUG] [Thread-19098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:36:15.234 [INFO] [Thread-19098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:36:15.241 [DEBUG] [Thread-19098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:36:15.241 [DEBUG] [Thread-19098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] client lang: <none>
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] server lang: <none>
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] kex follows: False
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] Compression: none
2025-11-12T16:36:15.242 [DEBUG] [Thread-19098] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:36:15.252 [DEBUG] [Thread-19100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:36:15.300 [DEBUG] [Thread-19098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:36:15.301 [DEBUG] [Thread-19098] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:36:15.301 [DEBUG] [Thread-19098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:36:15.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:36:15.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:36:15.356 [DEBUG] [Thread-19098] [transport.py] [_log()] userauth is OK
2025-11-12T16:36:15.356 [DEBUG] [Thread-19098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:36:15.356 [DEBUG] [Thread-19098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:36:15.356 [DEBUG] [Thread-19098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:36:15.356 [DEBUG] [Thread-19098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:36:15.376 [INFO] [Thread-19098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:36:15.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:36:15.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:36:16.249 [DEBUG] [Thread-19098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:36:16.250 [DEBUG] [Thread-19098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:36:16.297 [DEBUG] [Thread-19098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:36:16.297 [DEBUG] [Thread-19098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:36:16.306 [DEBUG] [Thread-19098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:36:16.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:36:16.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:36:16.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:36:16.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:36:16.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:36:16.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:36:16.339 [DEBUG] [Thread-19098] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:36:30.305 [DEBUG] [Thread-19101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:36:40.950 [DEBUG] [Thread-19102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:36:45.341 [DEBUG] [Thread-19103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:36:46.132 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:36:46.133 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:36:46.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:36:46.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:36:46.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-11-12T16:36:47.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 36, 24), 30.52, 13.3, 0.0, 35.69, 26.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:36:47.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:36:24
2025-11-12T16:36:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:36:47.276 [DEBUG] [Thread-19104] [transport.py] [_log()] starting thread (client mode): 0x14981a80
2025-11-12T16:36:47.277 [DEBUG] [Thread-19104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:36:47.297 [DEBUG] [Thread-19104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:36:47.297 [INFO] [Thread-19104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] client lang: <none>
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] server lang: <none>
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] kex follows: False
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] Compression: none
2025-11-12T16:36:47.301 [DEBUG] [Thread-19104] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:36:47.318 [DEBUG] [Thread-19104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:36:47.319 [DEBUG] [Thread-19104] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:36:47.320 [DEBUG] [Thread-19104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:36:47.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:36:47.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:36:47.322 [DEBUG] [Thread-19104] [transport.py] [_log()] userauth is OK
2025-11-12T16:36:47.322 [DEBUG] [Thread-19104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:36:47.322 [DEBUG] [Thread-19104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:36:47.322 [DEBUG] [Thread-19104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:36:47.322 [DEBUG] [Thread-19104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:36:47.346 [INFO] [Thread-19104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:36:47.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:36:47.989 [DEBUG] [Thread-19104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:36:47.989 [DEBUG] [Thread-19104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:36:47.990 [DEBUG] [Thread-19104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:36:48.031 [DEBUG] [Thread-19104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:36:48.031 [DEBUG] [Thread-19104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:36:48.034 [DEBUG] [Thread-19104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:36:48.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:36:48.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:36:48.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:36:48.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:36:48.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:36:48.060 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:36:48.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:36:48.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:36:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:36:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.608420 -999.00  +26.00  33.29     18   +0.50 1 2 2 1 1   887    0 24.50 -23.18 ----- 33.3 33.3 295.2 41.1 28.2 -23.7 28.1 -22.8 27.9 -22.3 28.3 -22.5
2025-11-12T16:36:48.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:36:48.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:36:48.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.608420
2025-11-12T16:36:48.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:36:48.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:36:48.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:36:48.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:36:48.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:36:48.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:36:24', tmtdew=30.52, humidity=13.3, cloud=0.0, wind=35.69, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:36:07.488', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:36:48.063 [DEBUG] [Thread-19104] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:36:48.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:36:48.167 [DEBUG] [Thread-19107] [transport.py] [_log()] starting thread (client mode): 0x173fb6d0
2025-11-12T16:36:48.168 [DEBUG] [Thread-19107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:36:48.182 [DEBUG] [Thread-19107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:36:48.182 [INFO] [Thread-19107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:36:48.190 [DEBUG] [Thread-19107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:36:48.190 [DEBUG] [Thread-19107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:36:48.190 [DEBUG] [Thread-19107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:36:48.190 [DEBUG] [Thread-19107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:36:48.190 [DEBUG] [Thread-19107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:36:48.190 [DEBUG] [Thread-19107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:36:48.190 [DEBUG] [Thread-19107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] client lang: <none>
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] server lang: <none>
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] kex follows: False
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] Compression: none
2025-11-12T16:36:48.191 [DEBUG] [Thread-19107] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:36:48.251 [DEBUG] [Thread-19107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:36:48.252 [DEBUG] [Thread-19107] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:36:48.252 [DEBUG] [Thread-19107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:36:48.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:36:48.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:36:48.308 [DEBUG] [Thread-19107] [transport.py] [_log()] userauth is OK
2025-11-12T16:36:48.308 [DEBUG] [Thread-19107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:36:48.308 [DEBUG] [Thread-19107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:36:48.308 [DEBUG] [Thread-19107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:36:48.308 [DEBUG] [Thread-19107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:36:48.329 [INFO] [Thread-19107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:36:48.330 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:36:48.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:36:49.170 [DEBUG] [Thread-19107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:36:49.171 [DEBUG] [Thread-19107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:36:49.219 [DEBUG] [Thread-19107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:36:49.219 [DEBUG] [Thread-19107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:36:49.230 [DEBUG] [Thread-19107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:36:49.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:36:49.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:36:49.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-11-12T16:36:49.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:36:49.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:36:49.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:36:49.266 [DEBUG] [Thread-19107] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:37:00.377 [DEBUG] [Thread-19110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:37:15.430 [DEBUG] [Thread-19111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:37:17.976 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:37:19.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:37:19.288 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:37:19.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-11-12T16:37:19.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 36, 56), 30.45, 13.42, 0.0, 31.09, 26.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:37:19.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:36:56
2025-11-12T16:37:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:37:20.256 [DEBUG] [Thread-19112] [transport.py] [_log()] starting thread (client mode): 0x149dae90
2025-11-12T16:37:20.256 [DEBUG] [Thread-19112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:37:20.276 [DEBUG] [Thread-19112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:37:20.277 [INFO] [Thread-19112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] client lang: <none>
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] server lang: <none>
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] kex follows: False
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] Compression: none
2025-11-12T16:37:20.280 [DEBUG] [Thread-19112] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:37:20.298 [DEBUG] [Thread-19112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:37:20.307 [DEBUG] [Thread-19112] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:37:20.307 [DEBUG] [Thread-19112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:37:20.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:37:20.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:37:20.308 [DEBUG] [Thread-19112] [transport.py] [_log()] userauth is OK
2025-11-12T16:37:20.308 [DEBUG] [Thread-19112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:37:20.308 [DEBUG] [Thread-19112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:37:20.308 [DEBUG] [Thread-19112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:37:20.309 [DEBUG] [Thread-19112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:37:20.339 [INFO] [Thread-19112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:37:20.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:37:20.977 [DEBUG] [Thread-19112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:37:20.977 [DEBUG] [Thread-19112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:37:20.977 [DEBUG] [Thread-19112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:37:21.018 [DEBUG] [Thread-19112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:37:21.018 [DEBUG] [Thread-19112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:37:21.021 [DEBUG] [Thread-19112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:37:21.032 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:37:21.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:37:21.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:37:21.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:37:21.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:37:21.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:37:21.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.608767 -999.00  +25.80  24.38     19   +0.40 1 2 1 1 1   887    0 24.79 -21.97 ----- 24.4 24.4 288.6 38.0 28.2 -23.4 28.1 -22.6 27.9 -22.1 28.3 -22.5
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.608767
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:37:21.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:37:21.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:36:56', tmtdew=30.45, humidity=13.42, cloud=0.0, wind=31.09, temperature=26.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:36:37.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:37:21.039 [DEBUG] [Thread-19112] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:37:21.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:37:21.123 [DEBUG] [Thread-19115] [transport.py] [_log()] starting thread (client mode): 0x14980580
2025-11-12T16:37:21.123 [DEBUG] [Thread-19115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:37:21.137 [DEBUG] [Thread-19115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:37:21.137 [INFO] [Thread-19115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] client lang: <none>
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] server lang: <none>
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] kex follows: False
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] Compression: none
2025-11-12T16:37:21.145 [DEBUG] [Thread-19115] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:37:21.205 [DEBUG] [Thread-19115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:37:21.205 [DEBUG] [Thread-19115] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:37:21.205 [DEBUG] [Thread-19115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:37:21.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:37:21.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:37:21.263 [DEBUG] [Thread-19115] [transport.py] [_log()] userauth is OK
2025-11-12T16:37:21.263 [DEBUG] [Thread-19115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:37:21.263 [DEBUG] [Thread-19115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:37:21.263 [DEBUG] [Thread-19115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:37:21.263 [DEBUG] [Thread-19115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:37:21.276 [INFO] [Thread-19115] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:37:21.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:37:21.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:37:22.122 [DEBUG] [Thread-19115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:37:22.122 [DEBUG] [Thread-19115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:37:22.170 [DEBUG] [Thread-19115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:37:22.170 [DEBUG] [Thread-19115] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:37:22.178 [DEBUG] [Thread-19115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:37:22.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:37:22.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-11-12T16:37:22.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-11-12T16:37:22.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:37:22.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:37:22.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:37:22.210 [DEBUG] [Thread-19115] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:37:30.457 [DEBUG] [Thread-19117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:37:40.981 [DEBUG] [Thread-19118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:37:45.507 [DEBUG] [Thread-19119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:37:46.272 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:37:46.273 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:37:52.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:37:52.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:37:52.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-11-12T16:37:52.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 37, 28), 30.58, 13.3, 0.0, 29.04, 26.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:37:52.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:37:28
2025-11-12T16:37:53.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:37:53.153 [DEBUG] [Thread-19120] [transport.py] [_log()] starting thread (client mode): 0x149daa70
2025-11-12T16:37:53.153 [DEBUG] [Thread-19120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:37:53.173 [DEBUG] [Thread-19120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:37:53.173 [INFO] [Thread-19120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] client lang: <none>
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] server lang: <none>
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] kex follows: False
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] Compression: none
2025-11-12T16:37:53.176 [DEBUG] [Thread-19120] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:37:53.194 [DEBUG] [Thread-19120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:37:53.194 [DEBUG] [Thread-19120] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:37:53.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:37:53.196 [DEBUG] [Thread-19120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:37:53.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:37:53.198 [DEBUG] [Thread-19120] [transport.py] [_log()] userauth is OK
2025-11-12T16:37:53.198 [DEBUG] [Thread-19120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:37:53.198 [DEBUG] [Thread-19120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:37:53.198 [DEBUG] [Thread-19120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:37:53.198 [DEBUG] [Thread-19120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:37:53.223 [INFO] [Thread-19120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:37:53.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:37:53.813 [DEBUG] [Thread-19120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:37:53.814 [DEBUG] [Thread-19120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:37:53.814 [DEBUG] [Thread-19120] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:37:53.855 [DEBUG] [Thread-19120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:37:53.855 [DEBUG] [Thread-19120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:37:53.859 [DEBUG] [Thread-19120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:37:53.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:37:53.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:37:53.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:37:53.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:37:53.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:37:53.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:37:53.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:37:53.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:37:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:37:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.609114 -999.00  +26.00  21.90     18   +0.50 1 2 1 1 1   887    0 24.68 -19.67 ----- 21.9 21.9 281.6 35.2 28.2 -23.9 28.1 -22.4 27.9 -21.7 28.2 -22.1
2025-11-12T16:37:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:37:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:37:53.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.609114
2025-11-12T16:37:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:37:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:37:53.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:37:53.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:37:53.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:37:53.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:37:28', tmtdew=30.58, humidity=13.3, cloud=0.0, wind=29.04, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:37:07.450', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:37:53.887 [DEBUG] [Thread-19120] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:37: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-11-12T16:37:53.985 [DEBUG] [Thread-19123] [transport.py] [_log()] starting thread (client mode): 0x149db7f0
2025-11-12T16:37:53.985 [DEBUG] [Thread-19123] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:37:53.999 [DEBUG] [Thread-19123] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:37:54.000 [INFO] [Thread-19123] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] client lang: <none>
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] server lang: <none>
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] kex follows: False
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] Compression: none
2025-11-12T16:37:54.007 [DEBUG] [Thread-19123] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:37:54.068 [DEBUG] [Thread-19123] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:37:54.069 [DEBUG] [Thread-19123] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:37:54.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:37:54.070 [DEBUG] [Thread-19123] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:37:54.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:37:54.123 [DEBUG] [Thread-19123] [transport.py] [_log()] userauth is OK
2025-11-12T16:37:54.124 [DEBUG] [Thread-19123] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:37:54.124 [DEBUG] [Thread-19123] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:37:54.124 [DEBUG] [Thread-19123] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:37:54.124 [DEBUG] [Thread-19123] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:37:54.143 [INFO] [Thread-19123] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:37:54.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:37:54.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:37:54.949 [DEBUG] [Thread-19123] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:37:54.949 [DEBUG] [Thread-19123] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:37:54.998 [DEBUG] [Thread-19123] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:37:54.998 [DEBUG] [Thread-19123] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:37:55.007 [DEBUG] [Thread-19123] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:37:55.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:37:55.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-11-12T16:37:55.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-11-12T16:37:55.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:37:55.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:37:55.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:37:55.045 [DEBUG] [Thread-19123] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:37:58.480 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:38:00.540 [DEBUG] [Thread-19125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:38:15.581 [DEBUG] [Thread-19126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:38:25.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:38:25.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:38:25.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-11-12T16:38:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 37, 28), 30.58, 13.3, 0.0, 29.04, 26.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:38:25.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:37:28
2025-11-12T16:38:25.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:38:25.972 [DEBUG] [Thread-19127] [transport.py] [_log()] starting thread (client mode): 0x149dac50
2025-11-12T16:38:25.972 [DEBUG] [Thread-19127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:38:25.992 [DEBUG] [Thread-19127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:38:25.993 [INFO] [Thread-19127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:38:25.995 [DEBUG] [Thread-19127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:38:25.995 [DEBUG] [Thread-19127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:38:25.995 [DEBUG] [Thread-19127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:38:25.995 [DEBUG] [Thread-19127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:38:25.995 [DEBUG] [Thread-19127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] client lang: <none>
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] server lang: <none>
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] kex follows: False
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] Compression: none
2025-11-12T16:38:25.996 [DEBUG] [Thread-19127] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:38:26.004 [DEBUG] [Thread-19127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:38:26.006 [DEBUG] [Thread-19127] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:38:26.006 [DEBUG] [Thread-19127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:38:26.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:38:26.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:38:26.008 [DEBUG] [Thread-19127] [transport.py] [_log()] userauth is OK
2025-11-12T16:38:26.009 [DEBUG] [Thread-19127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:38:26.009 [DEBUG] [Thread-19127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:38:26.009 [DEBUG] [Thread-19127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:38:26.009 [DEBUG] [Thread-19127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:38:26.032 [INFO] [Thread-19127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:38:26.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:38:26.682 [DEBUG] [Thread-19127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:38:26.682 [DEBUG] [Thread-19127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:38:26.683 [DEBUG] [Thread-19127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:38:26.723 [DEBUG] [Thread-19127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:38:26.724 [DEBUG] [Thread-19127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:38:26.727 [DEBUG] [Thread-19127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:38:26.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:38:26.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:38:26.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:38:26.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:38:26.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:38:26.750 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:38:26.750 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:38:26.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:38:26.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:38:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.609462 -999.00  +26.10  25.61     18   +0.60 1 1 1 1 1   887    0 25.13 -21.49 ----- 25.6 25.6 291.0 35.2 28.1 -23.3 28.1 -22.4 27.8 -23.8 28.3 -22.5
2025-11-12T16:38:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:38:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:38:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.609462
2025-11-12T16:38:26.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:38:26.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:38:26.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:38:26.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:38:26.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:38:26.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:37:28', tmtdew=30.58, humidity=13.3, cloud=0.0, wind=29.04, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:37:37.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:38:26.754 [DEBUG] [Thread-19127] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:38: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-11-12T16:38:26.850 [DEBUG] [Thread-19130] [transport.py] [_log()] starting thread (client mode): 0x173f8460
2025-11-12T16:38:26.850 [DEBUG] [Thread-19130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:38:26.865 [DEBUG] [Thread-19130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:38:26.865 [INFO] [Thread-19130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] client lang: <none>
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] server lang: <none>
2025-11-12T16:38:26.873 [DEBUG] [Thread-19130] [transport.py] [_log()] kex follows: False
2025-11-12T16:38:26.874 [DEBUG] [Thread-19130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:38:26.874 [DEBUG] [Thread-19130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:38:26.874 [DEBUG] [Thread-19130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:38:26.874 [DEBUG] [Thread-19130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:38:26.874 [DEBUG] [Thread-19130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:38:26.874 [DEBUG] [Thread-19130] [transport.py] [_log()] Compression: none
2025-11-12T16:38:26.874 [DEBUG] [Thread-19130] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:38:26.936 [DEBUG] [Thread-19130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:38:26.937 [DEBUG] [Thread-19130] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:38:26.937 [DEBUG] [Thread-19130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:38:26.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:38:26.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:38:26.992 [DEBUG] [Thread-19130] [transport.py] [_log()] userauth is OK
2025-11-12T16:38:26.992 [DEBUG] [Thread-19130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:38:26.992 [DEBUG] [Thread-19130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:38:26.992 [DEBUG] [Thread-19130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:38:26.992 [DEBUG] [Thread-19130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:38:27.010 [INFO] [Thread-19130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:38:27.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:38:27.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:38:27.840 [DEBUG] [Thread-19130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:38:27.841 [DEBUG] [Thread-19130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:38:27.888 [DEBUG] [Thread-19130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:38:27.889 [DEBUG] [Thread-19130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:38:27.898 [DEBUG] [Thread-19130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:38:27.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:38:27.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-11-12T16:38:27.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-11-12T16:38:27.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:38:27.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:38:27.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:38:27.942 [DEBUG] [Thread-19130] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:38:30.622 [DEBUG] [Thread-19132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:38:41.021 [DEBUG] [Thread-19133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:38:45.671 [DEBUG] [Thread-19134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:38:46.415 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:38:46.416 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:38:57.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:38:57.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:38:57.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-11-12T16:38:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 37, 28), 30.58, 13.3, 0.0, 29.04, 26.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:38:58.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:37:28
2025-11-12T16:38:58.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:38:58.865 [DEBUG] [Thread-19135] [transport.py] [_log()] starting thread (client mode): 0x14961600
2025-11-12T16:38:58.866 [DEBUG] [Thread-19135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:38:58.886 [DEBUG] [Thread-19135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:38:58.886 [INFO] [Thread-19135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:38:58.889 [DEBUG] [Thread-19135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:38:58.889 [DEBUG] [Thread-19135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:38:58.889 [DEBUG] [Thread-19135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:38:58.889 [DEBUG] [Thread-19135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] client lang: <none>
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] server lang: <none>
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] kex follows: False
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] Compression: none
2025-11-12T16:38:58.890 [DEBUG] [Thread-19135] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:38:58.908 [DEBUG] [Thread-19135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:38:58.908 [DEBUG] [Thread-19135] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:38:58.909 [DEBUG] [Thread-19135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:38:58.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:38:58.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:38:58.911 [DEBUG] [Thread-19135] [transport.py] [_log()] userauth is OK
2025-11-12T16:38:58.911 [DEBUG] [Thread-19135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:38:58.911 [DEBUG] [Thread-19135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:38:58.912 [DEBUG] [Thread-19135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:38:58.912 [DEBUG] [Thread-19135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:38:58.936 [INFO] [Thread-19135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:38:58.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:38:59.532 [DEBUG] [Thread-19135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:38:59.532 [DEBUG] [Thread-19135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:38:59.533 [DEBUG] [Thread-19135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:38:59.574 [DEBUG] [Thread-19135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:38:59.574 [DEBUG] [Thread-19135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:38:59.578 [DEBUG] [Thread-19135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:38:59.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:38:59.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:38:59.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:38:59.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:38:59.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:38:59.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:38:59.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:38:59.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:38:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:38:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.609809 -999.00  +25.90  36.71     18   +0.40 1 1 2 1 1   887    0 25.00 -23.13 ----- 36.7 36.7 277.2 45.2 28.1 -24.8 28.1 -22.9 27.8 -24.6 28.2 -23.2
2025-11-12T16:38:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:38:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:38:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.609809
2025-11-12T16:38:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:38:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:38:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:38:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:38:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:38:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:37:28', tmtdew=30.58, humidity=13.3, cloud=0.0, wind=29.04, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:38:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:38:59.605 [DEBUG] [Thread-19135] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:38:59.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:39:00.717 [DEBUG] [Thread-19138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:01.588 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:05.859 [DEBUG] [Thread-19139] [transport.py] [_log()] starting thread (client mode): 0x149227d0
2025-11-12T16:39:05.860 [DEBUG] [Thread-19139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:39:05.874 [DEBUG] [Thread-19139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:39:05.875 [INFO] [Thread-19139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:39:05.882 [DEBUG] [Thread-19139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:39:05.882 [DEBUG] [Thread-19139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:39:05.882 [DEBUG] [Thread-19139] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:39:05.883 [DEBUG] [Thread-19139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:39:05.883 [DEBUG] [Thread-19139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:39:05.883 [DEBUG] [Thread-19139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:39:05.883 [DEBUG] [Thread-19139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:39:05.883 [DEBUG] [Thread-19139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:39:05.883 [DEBUG] [Thread-19139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:39:05.883 [DEBUG] [Thread-19139] [transport.py] [_log()] client lang: <none>
2025-11-12T16:39:05.883 [DEBUG] [Thread-19139] [transport.py] [_log()] server lang: <none>
2025-11-12T16:39:05.884 [DEBUG] [Thread-19139] [transport.py] [_log()] kex follows: False
2025-11-12T16:39:05.884 [DEBUG] [Thread-19139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:39:05.884 [DEBUG] [Thread-19139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:39:05.884 [DEBUG] [Thread-19139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:39:05.884 [DEBUG] [Thread-19139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:39:05.884 [DEBUG] [Thread-19139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:39:05.885 [DEBUG] [Thread-19139] [transport.py] [_log()] Compression: none
2025-11-12T16:39:05.885 [DEBUG] [Thread-19139] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:39:05.944 [DEBUG] [Thread-19139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:39:05.944 [DEBUG] [Thread-19139] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:39:05.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:39:05.945 [DEBUG] [Thread-19139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:39:05.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:39:05.999 [DEBUG] [Thread-19139] [transport.py] [_log()] userauth is OK
2025-11-12T16:39:06.000 [DEBUG] [Thread-19139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:39:06.000 [DEBUG] [Thread-19139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:39:06.000 [DEBUG] [Thread-19139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:39:06.000 [DEBUG] [Thread-19139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:39:06.019 [INFO] [Thread-19139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:39:06.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:39:06.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:39:06.841 [DEBUG] [Thread-19139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:39:06.842 [DEBUG] [Thread-19139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:39:06.890 [DEBUG] [Thread-19139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:39:06.890 [DEBUG] [Thread-19139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:39:06.899 [DEBUG] [Thread-19139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:39:06.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:39:06.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-11-12T16:39:06.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-11-12T16:39:06.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:39:06.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:39:06.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:39:06.936 [DEBUG] [Thread-19139] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:39:15.768 [DEBUG] [Thread-19141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:26.321 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:30.800 [DEBUG] [Thread-19142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:36.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:39:36.958 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:39:36.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:39:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 37, 28), 30.58, 13.3, 0.0, 29.04, 26.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:39:37.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:37:28
2025-11-12T16:39:37.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:39:37.882 [DEBUG] [Thread-19143] [transport.py] [_log()] starting thread (client mode): 0x149221a0
2025-11-12T16:39:37.882 [DEBUG] [Thread-19143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:39:37.903 [DEBUG] [Thread-19143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:39:37.903 [INFO] [Thread-19143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] client lang: <none>
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] server lang: <none>
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] kex follows: False
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] Compression: none
2025-11-12T16:39:37.906 [DEBUG] [Thread-19143] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:39:37.923 [DEBUG] [Thread-19143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:39:37.924 [DEBUG] [Thread-19143] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:39:37.924 [DEBUG] [Thread-19143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:39:37.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:39:37.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:39:37.926 [DEBUG] [Thread-19143] [transport.py] [_log()] userauth is OK
2025-11-12T16:39:37.927 [DEBUG] [Thread-19143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:39:37.927 [DEBUG] [Thread-19143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:39:37.927 [DEBUG] [Thread-19143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:39:37.927 [DEBUG] [Thread-19143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:39:37.962 [INFO] [Thread-19143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:39:37.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:39:38.601 [DEBUG] [Thread-19143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:39:38.601 [DEBUG] [Thread-19143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:39:38.602 [DEBUG] [Thread-19143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:39:38.642 [DEBUG] [Thread-19143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:39:38.642 [DEBUG] [Thread-19143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:39:38.645 [DEBUG] [Thread-19143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:39:38.656 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:39:38.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:39:38.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:39:38.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:39:38.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:39:38.667 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:39:38.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:39:38.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:39:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:39:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.610503 -999.00  +25.50  44.97     19   +0.40 1 2 2 1 1   887    0 24.74 -23.28 ----- 45.0 45.0 273.2 48.0 27.9 -24.3 27.9 -22.9 27.4 -22.4 27.9 -23.1
2025-11-12T16:39:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:39:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:39:38.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.610503
2025-11-12T16:39:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:39:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:39:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:39:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:39:38.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:39:38.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:37:28', tmtdew=30.58, humidity=13.3, cloud=0.0, wind=29.04, temperature=26.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:39:07.459', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:39:38.670 [DEBUG] [Thread-19143] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:39:38.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:39:38.775 [DEBUG] [Thread-19146] [transport.py] [_log()] starting thread (client mode): 0x1493fcd0
2025-11-12T16:39:38.775 [DEBUG] [Thread-19146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:39:38.790 [DEBUG] [Thread-19146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:39:38.790 [INFO] [Thread-19146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:39:38.797 [DEBUG] [Thread-19146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:39:38.797 [DEBUG] [Thread-19146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] client lang: <none>
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] server lang: <none>
2025-11-12T16:39:38.798 [DEBUG] [Thread-19146] [transport.py] [_log()] kex follows: False
2025-11-12T16:39:38.799 [DEBUG] [Thread-19146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:39:38.799 [DEBUG] [Thread-19146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:39:38.799 [DEBUG] [Thread-19146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:39:38.799 [DEBUG] [Thread-19146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:39:38.799 [DEBUG] [Thread-19146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:39:38.799 [DEBUG] [Thread-19146] [transport.py] [_log()] Compression: none
2025-11-12T16:39:38.799 [DEBUG] [Thread-19146] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:39:38.855 [DEBUG] [Thread-19146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:39:38.855 [DEBUG] [Thread-19146] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:39:38.856 [DEBUG] [Thread-19146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:39:38.856 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:39:38.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:39:38.911 [DEBUG] [Thread-19146] [transport.py] [_log()] userauth is OK
2025-11-12T16:39:38.911 [DEBUG] [Thread-19146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:39:38.911 [DEBUG] [Thread-19146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:39:38.911 [DEBUG] [Thread-19146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:39:38.911 [DEBUG] [Thread-19146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:39:38.931 [INFO] [Thread-19146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:39:38.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:39:38.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:39:39.774 [DEBUG] [Thread-19146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:39:39.774 [DEBUG] [Thread-19146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:39:39.821 [DEBUG] [Thread-19146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:39:39.821 [DEBUG] [Thread-19146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:39:39.829 [DEBUG] [Thread-19146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:39:39.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:39:39.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-11-12T16:39:39.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-11-12T16:39:39.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:39:39.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:39:39.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:39:39.860 [DEBUG] [Thread-19146] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:39:41.049 [DEBUG] [Thread-19148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:45.838 [DEBUG] [Thread-19149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:46.559 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:46.560 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:39:48.797 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:00.888 [DEBUG] [Thread-19150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:09.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:40:09.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:40:09.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-11-12T16:40:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 38, 32), 30.67, 12.8, 0.0, 30.79, 26.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:40:10.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:38:32
2025-11-12T16:40:10.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:40:10.790 [DEBUG] [Thread-19151] [transport.py] [_log()] starting thread (client mode): 0x14961bd0
2025-11-12T16:40:10.790 [DEBUG] [Thread-19151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:40:10.811 [DEBUG] [Thread-19151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:40:10.811 [INFO] [Thread-19151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:40:10.814 [DEBUG] [Thread-19151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:40:10.814 [DEBUG] [Thread-19151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:40:10.814 [DEBUG] [Thread-19151] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:40:10.814 [DEBUG] [Thread-19151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] client lang: <none>
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] server lang: <none>
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] kex follows: False
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] Compression: none
2025-11-12T16:40:10.815 [DEBUG] [Thread-19151] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:40:10.833 [DEBUG] [Thread-19151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:40:10.834 [DEBUG] [Thread-19151] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:40:10.834 [DEBUG] [Thread-19151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:40:10.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:40:10.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:40:10.836 [DEBUG] [Thread-19151] [transport.py] [_log()] userauth is OK
2025-11-12T16:40:10.836 [DEBUG] [Thread-19151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:40:10.836 [DEBUG] [Thread-19151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:40:10.836 [DEBUG] [Thread-19151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:40:10.837 [DEBUG] [Thread-19151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:40:10.861 [INFO] [Thread-19151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:40:10.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:40:11.386 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:11.539 [DEBUG] [Thread-19151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:40:11.539 [DEBUG] [Thread-19151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:40:11.539 [DEBUG] [Thread-19151] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:40:11.579 [DEBUG] [Thread-19151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:40:11.579 [DEBUG] [Thread-19151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:40:11.582 [DEBUG] [Thread-19151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:40:11.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:40:11.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:40:11.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:40:11.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:40:11.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:40:11.598 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:40:11.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:40:11.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:40:11.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:40:11.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.610851 -999.00  +25.50  39.23     19   +0.30 1 2 2 1 1   887    0 24.89 -22.72 ----- 39.2 39.2 286.5 47.2 27.8 -23.3 27.8 -23.4 27.4 -22.2 27.9 -22.7
2025-11-12T16:40:11.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:40:11.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:40:11.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.610851
2025-11-12T16:40:11.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:40:11.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:40:11.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:40:11.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:40:11.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:40:11.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:38:32', tmtdew=30.67, humidity=12.8, cloud=0.0, wind=30.79, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:39:37.526', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:40:11.600 [DEBUG] [Thread-19151] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:40:11.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:40:11.701 [DEBUG] [Thread-19154] [transport.py] [_log()] starting thread (client mode): 0x173f8820
2025-11-12T16:40:11.701 [DEBUG] [Thread-19154] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:40:11.718 [DEBUG] [Thread-19154] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:40:11.718 [INFO] [Thread-19154] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:40:11.729 [DEBUG] [Thread-19154] [transport.py] [_log()] client lang: <none>
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] server lang: <none>
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] kex follows: False
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] Compression: none
2025-11-12T16:40:11.730 [DEBUG] [Thread-19154] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:40:11.781 [DEBUG] [Thread-19154] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:40:11.781 [DEBUG] [Thread-19154] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:40:11.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:40:11.781 [DEBUG] [Thread-19154] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:40:11.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:40:11.839 [DEBUG] [Thread-19154] [transport.py] [_log()] userauth is OK
2025-11-12T16:40:11.839 [DEBUG] [Thread-19154] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:40:11.839 [DEBUG] [Thread-19154] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:40:11.839 [DEBUG] [Thread-19154] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:40:11.839 [DEBUG] [Thread-19154] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:40:11.853 [INFO] [Thread-19154] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:40:11.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:40:11.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:40:12.739 [DEBUG] [Thread-19154] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:40:12.739 [DEBUG] [Thread-19154] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:40:12.788 [DEBUG] [Thread-19154] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:40:12.788 [DEBUG] [Thread-19154] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:40:12.796 [DEBUG] [Thread-19154] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:40:12.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:40:12.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')
2025-11-12T16:40:12.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-11-12T16:40:12.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:40:12.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:40:12.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:40:12.833 [DEBUG] [Thread-19154] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:40:15.924 [DEBUG] [Thread-19156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:30.985 [DEBUG] [Thread-19157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:34.089 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:41.081 [DEBUG] [Thread-19158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:42.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:40:42.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:40:42.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-11-12T16:40:43.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 40, 11), 30.74, 12.79, 0.0, 34.25, 26.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:40:43.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:40:11
2025-11-12T16:40:43.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:40:43.758 [DEBUG] [Thread-19159] [transport.py] [_log()] starting thread (client mode): 0x14960970
2025-11-12T16:40:43.758 [DEBUG] [Thread-19159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:40:43.778 [DEBUG] [Thread-19159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:40:43.778 [INFO] [Thread-19159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] client lang: <none>
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] server lang: <none>
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] kex follows: False
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] Compression: none
2025-11-12T16:40:43.781 [DEBUG] [Thread-19159] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:40:43.797 [DEBUG] [Thread-19159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:40:43.797 [DEBUG] [Thread-19159] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:40:43.797 [DEBUG] [Thread-19159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:40:43.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:40:43.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:40:43.798 [DEBUG] [Thread-19159] [transport.py] [_log()] userauth is OK
2025-11-12T16:40:43.798 [DEBUG] [Thread-19159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:40:43.798 [DEBUG] [Thread-19159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:40:43.798 [DEBUG] [Thread-19159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:40:43.798 [DEBUG] [Thread-19159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:40:43.813 [INFO] [Thread-19159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:40:43.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:40:44.437 [DEBUG] [Thread-19159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:40:44.437 [DEBUG] [Thread-19159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:40:44.437 [DEBUG] [Thread-19159] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:40:44.478 [DEBUG] [Thread-19159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:40:44.478 [DEBUG] [Thread-19159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:40:44.480 [DEBUG] [Thread-19159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:40:44.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:40:44.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:40:44.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:40:44.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:40:44.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:40:44.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:40:44.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:40:44.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.611545 -999.00  +25.60  29.02     19   +0.50 1 2 1 1 1   887    0 25.08 -21.18 ----- 29.0 29.0 283.2 38.9 27.7 -22.6 27.6 -22.1 27.2 -22.2 27.8 -22.4
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.611545
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:40:44.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:40:11', tmtdew=30.74, humidity=12.79, cloud=0.0, wind=34.25, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:40:37.488', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:40:44.500 [DEBUG] [Thread-19159] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:40:44.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:40:44.585 [DEBUG] [Thread-19162] [transport.py] [_log()] starting thread (client mode): 0x14963fd0
2025-11-12T16:40:44.585 [DEBUG] [Thread-19162] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:40:44.601 [DEBUG] [Thread-19162] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:40:44.601 [INFO] [Thread-19162] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] client lang: <none>
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] server lang: <none>
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] kex follows: False
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] Compression: none
2025-11-12T16:40:44.609 [DEBUG] [Thread-19162] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:40:44.666 [DEBUG] [Thread-19162] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:40:44.666 [DEBUG] [Thread-19162] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:40:44.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:40:44.666 [DEBUG] [Thread-19162] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:40:44.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:40:44.723 [DEBUG] [Thread-19162] [transport.py] [_log()] userauth is OK
2025-11-12T16:40:44.723 [DEBUG] [Thread-19162] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:40:44.723 [DEBUG] [Thread-19162] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:40:44.723 [DEBUG] [Thread-19162] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:40:44.723 [DEBUG] [Thread-19162] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:40:44.741 [INFO] [Thread-19162] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:40:44.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:40:44.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:40:45.582 [DEBUG] [Thread-19162] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:40:45.583 [DEBUG] [Thread-19162] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:40:45.630 [DEBUG] [Thread-19162] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:40:45.630 [DEBUG] [Thread-19162] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:40:45.639 [DEBUG] [Thread-19162] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:40:45.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:40:45.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-11-12T16:40:45.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-11-12T16:40:45.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:40:45.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:40:45.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:40:45.673 [DEBUG] [Thread-19162] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:40:46.016 [DEBUG] [Thread-19164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:46.701 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:46.702 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:40:56.893 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:01.069 [DEBUG] [Thread-19165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:15.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:41:15.695 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:41:15.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-11-12T16:41:16.100 [DEBUG] [Thread-19166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 40, 43), 30.64, 12.77, 0.0, 38.04, 26.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:41:16.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:40:43
2025-11-12T16:41:16.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:41:16.700 [DEBUG] [Thread-19167] [transport.py] [_log()] starting thread (client mode): 0x1493d390
2025-11-12T16:41:16.701 [DEBUG] [Thread-19167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:41:16.720 [DEBUG] [Thread-19167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:41:16.721 [INFO] [Thread-19167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] client lang: <none>
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] server lang: <none>
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] kex follows: False
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] Compression: none
2025-11-12T16:41:16.724 [DEBUG] [Thread-19167] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:41:16.745 [DEBUG] [Thread-19167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:41:16.745 [DEBUG] [Thread-19167] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:41:16.745 [DEBUG] [Thread-19167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:41:16.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:41:16.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:41:16.746 [DEBUG] [Thread-19167] [transport.py] [_log()] userauth is OK
2025-11-12T16:41:16.746 [DEBUG] [Thread-19167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:41:16.746 [DEBUG] [Thread-19167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:41:16.746 [DEBUG] [Thread-19167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:41:16.746 [DEBUG] [Thread-19167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:41:16.767 [INFO] [Thread-19167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:41:16.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:41:17.410 [DEBUG] [Thread-19167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:41:17.410 [DEBUG] [Thread-19167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:41:17.410 [DEBUG] [Thread-19167] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:41:17.451 [DEBUG] [Thread-19167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:41:17.451 [DEBUG] [Thread-19167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:41:17.453 [DEBUG] [Thread-19167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:41:17.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:41:17.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:41:17.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:41:17.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:41:17.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:41:17.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:41:17.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.611892 -999.00  +25.60  22.46     19   +0.40 1 2 1 1 1   887    0 25.15 -19.22 ----- 22.5 22.5 282.8 36.2 27.8 -22.7 27.7 -22.5 27.4 -22.5 27.9 -21.3
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.611892
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:41:17.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:40:43', tmtdew=30.64, humidity=12.77, cloud=0.0, wind=38.04, temperature=26.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:41:07.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:41:17.473 [DEBUG] [Thread-19167] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:41:17.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:41:17.556 [DEBUG] [Thread-19170] [transport.py] [_log()] starting thread (client mode): 0x1493ed40
2025-11-12T16:41:17.556 [DEBUG] [Thread-19170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:41:17.571 [DEBUG] [Thread-19170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:41:17.571 [INFO] [Thread-19170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:41:17.579 [DEBUG] [Thread-19170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:41:17.579 [DEBUG] [Thread-19170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:41:17.579 [DEBUG] [Thread-19170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:41:17.579 [DEBUG] [Thread-19170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:41:17.579 [DEBUG] [Thread-19170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:41:17.579 [DEBUG] [Thread-19170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:41:17.580 [DEBUG] [Thread-19170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:41:17.580 [DEBUG] [Thread-19170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:41:17.580 [DEBUG] [Thread-19170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:41:17.580 [DEBUG] [Thread-19170] [transport.py] [_log()] client lang: <none>
2025-11-12T16:41:17.580 [DEBUG] [Thread-19170] [transport.py] [_log()] server lang: <none>
2025-11-12T16:41:17.580 [DEBUG] [Thread-19170] [transport.py] [_log()] kex follows: False
2025-11-12T16:41:17.580 [DEBUG] [Thread-19170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:41:17.581 [DEBUG] [Thread-19170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:41:17.581 [DEBUG] [Thread-19170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:41:17.581 [DEBUG] [Thread-19170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:41:17.581 [DEBUG] [Thread-19170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:41:17.581 [DEBUG] [Thread-19170] [transport.py] [_log()] Compression: none
2025-11-12T16:41:17.581 [DEBUG] [Thread-19170] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:41:17.639 [DEBUG] [Thread-19170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:41:17.639 [DEBUG] [Thread-19170] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:41:17.640 [DEBUG] [Thread-19170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:41:17.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:41:17.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:41:17.697 [DEBUG] [Thread-19170] [transport.py] [_log()] userauth is OK
2025-11-12T16:41:17.697 [DEBUG] [Thread-19170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:41:17.697 [DEBUG] [Thread-19170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:41:17.698 [DEBUG] [Thread-19170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:41:17.698 [DEBUG] [Thread-19170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:41:17.716 [INFO] [Thread-19170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:41:17.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:41:17.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:41:18.544 [DEBUG] [Thread-19170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:41:18.545 [DEBUG] [Thread-19170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:41:18.593 [DEBUG] [Thread-19170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:41:18.593 [DEBUG] [Thread-19170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:41:18.602 [DEBUG] [Thread-19170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:41:18.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:41:18.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-11-12T16:41:18.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:41:18.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:41:18.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:41:18.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:41:18.641 [DEBUG] [Thread-19170] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:41:19.737 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:31.133 [DEBUG] [Thread-19172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:41.126 [DEBUG] [Thread-19173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:42.204 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:46.182 [DEBUG] [Thread-19174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:46.843 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:46.844 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:41:48.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:41:48.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:41:48.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-11-12T16:41:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 41, 15), 30.59, 12.8, 0.0, 34.3, 26.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:41:49.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:41:15
2025-11-12T16:41:49.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:41:49.651 [DEBUG] [Thread-19175] [transport.py] [_log()] starting thread (client mode): 0x14961e70
2025-11-12T16:41:49.651 [DEBUG] [Thread-19175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:41:49.671 [DEBUG] [Thread-19175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:41:49.671 [INFO] [Thread-19175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] client lang: <none>
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] server lang: <none>
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] kex follows: False
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] Compression: none
2025-11-12T16:41:49.674 [DEBUG] [Thread-19175] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:41:49.685 [DEBUG] [Thread-19175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:41:49.685 [DEBUG] [Thread-19175] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:41:49.686 [DEBUG] [Thread-19175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:41:49.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:41:49.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:41:49.686 [DEBUG] [Thread-19175] [transport.py] [_log()] userauth is OK
2025-11-12T16:41:49.687 [DEBUG] [Thread-19175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:41:49.687 [DEBUG] [Thread-19175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:41:49.687 [DEBUG] [Thread-19175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:41:49.687 [DEBUG] [Thread-19175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:41:49.698 [INFO] [Thread-19175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:41:49.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:41:50.311 [DEBUG] [Thread-19175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:41:50.311 [DEBUG] [Thread-19175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:41:50.311 [DEBUG] [Thread-19175] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:41:50.352 [DEBUG] [Thread-19175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:41:50.352 [DEBUG] [Thread-19175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:41:50.354 [DEBUG] [Thread-19175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:41:50.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:41:50.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:41:50.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:41:50.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:41:50.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:41:50.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:41:50.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.612240 -999.00  +25.80  25.57     19   +0.70 1 2 1 1 1   887    0 24.85 -21.16 ----- 25.6 25.6 290.4 34.9 27.9 -22.1 27.8 -21.9 27.5 -20.3 27.9 -20.9
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.612240
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:41:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:41:15', tmtdew=30.59, humidity=12.8, cloud=0.0, wind=34.3, temperature=26.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:41:37.536', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:41:50.375 [DEBUG] [Thread-19175] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:41:50.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:41:50.460 [DEBUG] [Thread-19178] [transport.py] [_log()] starting thread (client mode): 0x14960a90
2025-11-12T16:41:50.460 [DEBUG] [Thread-19178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:41:50.475 [DEBUG] [Thread-19178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:41:50.475 [INFO] [Thread-19178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] client lang: <none>
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] server lang: <none>
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] kex follows: False
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:41:50.483 [DEBUG] [Thread-19178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:41:50.484 [DEBUG] [Thread-19178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:41:50.484 [DEBUG] [Thread-19178] [transport.py] [_log()] Compression: none
2025-11-12T16:41:50.484 [DEBUG] [Thread-19178] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:41:50.537 [DEBUG] [Thread-19178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:41:50.538 [DEBUG] [Thread-19178] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:41:50.538 [DEBUG] [Thread-19178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:41:50.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:41:50.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:41:50.595 [DEBUG] [Thread-19178] [transport.py] [_log()] userauth is OK
2025-11-12T16:41:50.595 [DEBUG] [Thread-19178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:41:50.595 [DEBUG] [Thread-19178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:41:50.595 [DEBUG] [Thread-19178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:41:50.595 [DEBUG] [Thread-19178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:41:50.610 [INFO] [Thread-19178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:41:50.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:41:50.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:41:51.455 [DEBUG] [Thread-19178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:41:51.455 [DEBUG] [Thread-19178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:41:51.503 [DEBUG] [Thread-19178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:41:51.503 [DEBUG] [Thread-19178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:41:51.511 [DEBUG] [Thread-19178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:41:51.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:41:51.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-11-12T16:41:51.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-11-12T16:41:51.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:41:51.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:41:51.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:41:51.542 [DEBUG] [Thread-19178] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:42:01.219 [DEBUG] [Thread-19180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:05.098 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:16.277 [DEBUG] [Thread-19181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:21.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:42:21.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:42:21.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-11-12T16:42:22.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 42, 19), 30.3, 13.37, 0.0, 36.81, 26.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:42:22.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:42:19
2025-11-12T16:42:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:42:22.484 [DEBUG] [Thread-19182] [transport.py] [_log()] starting thread (client mode): 0x149607f0
2025-11-12T16:42:22.484 [DEBUG] [Thread-19182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:42:22.504 [DEBUG] [Thread-19182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:42:22.504 [INFO] [Thread-19182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:42:22.506 [DEBUG] [Thread-19182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] client lang: <none>
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] server lang: <none>
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] kex follows: False
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] Compression: none
2025-11-12T16:42:22.507 [DEBUG] [Thread-19182] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:42:22.526 [DEBUG] [Thread-19182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:42:22.526 [DEBUG] [Thread-19182] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:42:22.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:42:22.527 [DEBUG] [Thread-19182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:42:22.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:42:22.529 [DEBUG] [Thread-19182] [transport.py] [_log()] userauth is OK
2025-11-12T16:42:22.529 [DEBUG] [Thread-19182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:42:22.529 [DEBUG] [Thread-19182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:42:22.529 [DEBUG] [Thread-19182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:42:22.529 [DEBUG] [Thread-19182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:42:22.550 [INFO] [Thread-19182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:42:22.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:42:23.198 [DEBUG] [Thread-19182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:42:23.198 [DEBUG] [Thread-19182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:42:23.199 [DEBUG] [Thread-19182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:42:23.238 [DEBUG] [Thread-19182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:42:23.239 [DEBUG] [Thread-19182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:42:23.241 [DEBUG] [Thread-19182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:42:23.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:42:23.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:42:23.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:42:23.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:42:23.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:42:23.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:42:23.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:42:23.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:42:23.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:42:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.612587 -999.00  +25.90  19.87     19   +0.80 1 2 1 1 1   887    0 24.30 -23.67 ----- 19.9 19.9 282.4 33.7 27.9 -21.9 27.8 -21.9 27.6 -21.0 28.1 -20.9
2025-11-12T16:42:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:42:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:42:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.612587
2025-11-12T16:42:23.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:42:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:42:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:42:23.266 [DEBUG] [Thread-19182] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:42:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:42:23.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:42:23.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:42:19', tmtdew=30.3, humidity=13.37, cloud=0.0, wind=36.81, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:42:07.517', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:42:23.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:42:23.360 [DEBUG] [Thread-19185] [transport.py] [_log()] starting thread (client mode): 0x11f13d30
2025-11-12T16:42:23.360 [DEBUG] [Thread-19185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:42:23.374 [DEBUG] [Thread-19185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:42:23.375 [INFO] [Thread-19185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:42:23.382 [DEBUG] [Thread-19185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:42:23.383 [DEBUG] [Thread-19185] [transport.py] [_log()] client lang: <none>
2025-11-12T16:42:23.384 [DEBUG] [Thread-19185] [transport.py] [_log()] server lang: <none>
2025-11-12T16:42:23.384 [DEBUG] [Thread-19185] [transport.py] [_log()] kex follows: False
2025-11-12T16:42:23.384 [DEBUG] [Thread-19185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:42:23.384 [DEBUG] [Thread-19185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:42:23.384 [DEBUG] [Thread-19185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:42:23.384 [DEBUG] [Thread-19185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:42:23.384 [DEBUG] [Thread-19185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:42:23.385 [DEBUG] [Thread-19185] [transport.py] [_log()] Compression: none
2025-11-12T16:42:23.385 [DEBUG] [Thread-19185] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:42:23.439 [DEBUG] [Thread-19185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:42:23.440 [DEBUG] [Thread-19185] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:42:23.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:42:23.441 [DEBUG] [Thread-19185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:42:23.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:42:23.495 [DEBUG] [Thread-19185] [transport.py] [_log()] userauth is OK
2025-11-12T16:42:23.496 [DEBUG] [Thread-19185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:42:23.496 [DEBUG] [Thread-19185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:42:23.496 [DEBUG] [Thread-19185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:42:23.496 [DEBUG] [Thread-19185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:42:23.515 [INFO] [Thread-19185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:42:23.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:42:23.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:42:24.366 [DEBUG] [Thread-19185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:42:24.366 [DEBUG] [Thread-19185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:42:24.415 [DEBUG] [Thread-19185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:42:24.415 [DEBUG] [Thread-19185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:42:24.424 [DEBUG] [Thread-19185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:42:24.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:42:24.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')
2025-11-12T16:42:24.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-11-12T16:42:24.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:42:24.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:42:24.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:42:24.460 [DEBUG] [Thread-19185] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:42:27.803 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:31.311 [DEBUG] [Thread-19187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:41.171 [DEBUG] [Thread-19188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:46.353 [DEBUG] [Thread-19189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:46.985 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:46.987 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:50.501 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:51.431 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:51.912 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:52.413 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:42:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:42:54.483 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:42:54.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-11-12T16:42:55.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 42, 51), 30.32, 13.49, 0.0, 34.67, 26.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:42:55.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:42:51
2025-11-12T16:42:55.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:42:55.402 [DEBUG] [Thread-19190] [transport.py] [_log()] starting thread (client mode): 0x19ddb820
2025-11-12T16:42:55.402 [DEBUG] [Thread-19190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:42:55.429 [DEBUG] [Thread-19190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:42:55.429 [INFO] [Thread-19190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] client lang: <none>
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] server lang: <none>
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] kex follows: False
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] Compression: none
2025-11-12T16:42:55.432 [DEBUG] [Thread-19190] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:42:55.447 [DEBUG] [Thread-19190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:42:55.447 [DEBUG] [Thread-19190] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:42:55.448 [DEBUG] [Thread-19190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:42:55.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:42:55.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:42:55.448 [DEBUG] [Thread-19190] [transport.py] [_log()] userauth is OK
2025-11-12T16:42:55.448 [DEBUG] [Thread-19190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:42:55.448 [DEBUG] [Thread-19190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:42:55.448 [DEBUG] [Thread-19190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:42:55.448 [DEBUG] [Thread-19190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:42:55.463 [INFO] [Thread-19190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:42:55.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:42:56.098 [DEBUG] [Thread-19190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:42:56.098 [DEBUG] [Thread-19190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:42:56.098 [DEBUG] [Thread-19190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:42:56.139 [DEBUG] [Thread-19190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:42:56.139 [DEBUG] [Thread-19190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:42:56.141 [DEBUG] [Thread-19190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:42:56.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:42:56.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:42:56.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:42:56.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:42:56.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:42:56.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:42:56.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.612934 -999.00  +26.00  41.41     19   +0.80 1 2 2 1 1   887    0 24.60 -24.69 ----- 41.4 41.4 280.2 44.3 27.9 -23.2 27.9 -22.2 27.8 -21.0 28.1 -21.2
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.612934
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:42:56.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:42:51', tmtdew=30.32, humidity=13.49, cloud=0.0, wind=34.67, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:42:37.498', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:42:56.161 [DEBUG] [Thread-19190] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:42:56.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:42:56.243 [DEBUG] [Thread-19193] [transport.py] [_log()] starting thread (client mode): 0x14983bb0
2025-11-12T16:42:56.243 [DEBUG] [Thread-19193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:42:56.258 [DEBUG] [Thread-19193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:42:56.258 [INFO] [Thread-19193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:42:56.265 [DEBUG] [Thread-19193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] client lang: <none>
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] server lang: <none>
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] kex follows: False
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] Compression: none
2025-11-12T16:42:56.266 [DEBUG] [Thread-19193] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:42:56.321 [DEBUG] [Thread-19193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:42:56.322 [DEBUG] [Thread-19193] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:42:56.322 [DEBUG] [Thread-19193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:42:56.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:42:56.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:42:56.378 [DEBUG] [Thread-19193] [transport.py] [_log()] userauth is OK
2025-11-12T16:42:56.379 [DEBUG] [Thread-19193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:42:56.379 [DEBUG] [Thread-19193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:42:56.379 [DEBUG] [Thread-19193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:42:56.379 [DEBUG] [Thread-19193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:42:56.393 [INFO] [Thread-19193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:42:56.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:42:56.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:42:57.242 [DEBUG] [Thread-19193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:42:57.243 [DEBUG] [Thread-19193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:42:57.291 [DEBUG] [Thread-19193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:42:57.291 [DEBUG] [Thread-19193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:42:57.300 [DEBUG] [Thread-19193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:42:57.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:42:57.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-11-12T16:42:57.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-11-12T16:42:57.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:42:57.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:42:57.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:42:57.335 [DEBUG] [Thread-19193] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:42:59.318 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:01.389 [DEBUG] [Thread-19195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:05.964 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:12.365 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:16.440 [DEBUG] [Thread-19196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:19.021 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:25.743 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:27.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:43:27.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:43:27.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:43:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 43, 23), 30.22, 13.57, 0.0, 35.25, 26.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:43:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:43:23
2025-11-12T16:43:28.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:43:28.270 [DEBUG] [Thread-19197] [transport.py] [_log()] starting thread (client mode): 0x149db0a0
2025-11-12T16:43:28.270 [DEBUG] [Thread-19197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:43:28.290 [DEBUG] [Thread-19197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:43:28.290 [INFO] [Thread-19197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:43:28.293 [DEBUG] [Thread-19197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] client lang: <none>
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] server lang: <none>
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] kex follows: False
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:43:28.294 [DEBUG] [Thread-19197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:43:28.295 [DEBUG] [Thread-19197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:43:28.295 [DEBUG] [Thread-19197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:43:28.295 [DEBUG] [Thread-19197] [transport.py] [_log()] Compression: none
2025-11-12T16:43:28.295 [DEBUG] [Thread-19197] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:43:28.312 [DEBUG] [Thread-19197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:43:28.313 [DEBUG] [Thread-19197] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:43:28.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:43:28.314 [DEBUG] [Thread-19197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:43:28.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:43:28.316 [DEBUG] [Thread-19197] [transport.py] [_log()] userauth is OK
2025-11-12T16:43:28.316 [DEBUG] [Thread-19197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:43:28.316 [DEBUG] [Thread-19197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:43:28.316 [DEBUG] [Thread-19197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:43:28.316 [DEBUG] [Thread-19197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:43:28.330 [INFO] [Thread-19197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:43:28.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:43:28.940 [DEBUG] [Thread-19197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:43:28.940 [DEBUG] [Thread-19197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:43:28.941 [DEBUG] [Thread-19197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:43:28.981 [DEBUG] [Thread-19197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:43:28.981 [DEBUG] [Thread-19197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:43:28.984 [DEBUG] [Thread-19197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:43:28.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:43:28.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:43:28.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:43:29.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:43:29.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:43:29.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:43:29.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:43:29.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:43:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:43:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.613281 -999.00  +26.00  35.68     19   +0.80 1 2 2 1 1   887    0 24.81 -25.27 ----- 35.7 35.7 293.4 38.0 28.0 -21.9 27.9 -21.9 27.7 -22.1 28.2 -20.7
2025-11-12T16:43:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:43:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:43:29.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.613281
2025-11-12T16:43:29.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:43:29.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:43:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:43:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:43:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:43:29.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:43:23', tmtdew=30.22, humidity=13.57, cloud=0.0, wind=35.25, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:43:07.478', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:43:29.012 [DEBUG] [Thread-19197] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:43:29.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:43:29.109 [DEBUG] [Thread-19200] [transport.py] [_log()] starting thread (client mode): 0x149da200
2025-11-12T16:43:29.110 [DEBUG] [Thread-19200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:43:29.125 [DEBUG] [Thread-19200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:43:29.125 [INFO] [Thread-19200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:43:29.132 [DEBUG] [Thread-19200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] client lang: <none>
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] server lang: <none>
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] kex follows: False
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:43:29.133 [DEBUG] [Thread-19200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:43:29.134 [DEBUG] [Thread-19200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:43:29.134 [DEBUG] [Thread-19200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:43:29.134 [DEBUG] [Thread-19200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:43:29.134 [DEBUG] [Thread-19200] [transport.py] [_log()] Compression: none
2025-11-12T16:43:29.134 [DEBUG] [Thread-19200] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:43:29.192 [DEBUG] [Thread-19200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:43:29.192 [DEBUG] [Thread-19200] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:43:29.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:43:29.194 [DEBUG] [Thread-19200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:43:29.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:43:29.247 [DEBUG] [Thread-19200] [transport.py] [_log()] userauth is OK
2025-11-12T16:43:29.247 [DEBUG] [Thread-19200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:43:29.248 [DEBUG] [Thread-19200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:43:29.248 [DEBUG] [Thread-19200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:43:29.248 [DEBUG] [Thread-19200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:43:29.266 [INFO] [Thread-19200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:43:29.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:43:29.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:43:30.121 [DEBUG] [Thread-19200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:43:30.121 [DEBUG] [Thread-19200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:43:30.169 [DEBUG] [Thread-19200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:43:30.170 [DEBUG] [Thread-19200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:43:30.178 [DEBUG] [Thread-19200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:43:30.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:43:30.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-11-12T16:43:30.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-11-12T16:43:30.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:43:30.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:43:30.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:43:30.216 [DEBUG] [Thread-19200] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:43:31.475 [DEBUG] [Thread-19202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:32.402 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:39.121 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:41.205 [DEBUG] [Thread-19203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:45.947 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:46.534 [DEBUG] [Thread-19204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:47.131 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:47.131 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:52.582 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:43:59.256 [DEBUG] [Thread-19109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:44:00.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:44:00.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:44:00.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-11-12T16:44:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 43, 54), 30.33, 13.54, 0.0, 32.92, 26.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:44:00.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:43:54
2025-11-12T16:44:00.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:44:01.143 [DEBUG] [Thread-19205] [transport.py] [_log()] starting thread (client mode): 0x149da860
2025-11-12T16:44:01.143 [DEBUG] [Thread-19205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:44:01.164 [DEBUG] [Thread-19205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:44:01.164 [INFO] [Thread-19205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:44:01.167 [DEBUG] [Thread-19205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:44:01.167 [DEBUG] [Thread-19205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:44:01.167 [DEBUG] [Thread-19205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:44:01.167 [DEBUG] [Thread-19205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:44:01.167 [DEBUG] [Thread-19205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] client lang: <none>
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] server lang: <none>
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] kex follows: False
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] Compression: none
2025-11-12T16:44:01.168 [DEBUG] [Thread-19205] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:44:01.183 [DEBUG] [Thread-19205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:44:01.184 [DEBUG] [Thread-19205] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:44:01.184 [DEBUG] [Thread-19205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:44:01.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:44:01.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:44:01.186 [DEBUG] [Thread-19205] [transport.py] [_log()] userauth is OK
2025-11-12T16:44:01.186 [DEBUG] [Thread-19205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:44:01.186 [DEBUG] [Thread-19205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:44:01.186 [DEBUG] [Thread-19205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:44:01.186 [DEBUG] [Thread-19205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:44:01.206 [INFO] [Thread-19205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:44:01.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:44:01.564 [DEBUG] [Thread-19207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:44:01.810 [DEBUG] [Thread-19205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:44:01.811 [DEBUG] [Thread-19205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:44:01.811 [DEBUG] [Thread-19205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:44:01.852 [DEBUG] [Thread-19205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:44:01.852 [DEBUG] [Thread-19205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:44:01.855 [DEBUG] [Thread-19205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:44:01.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:44:01.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:44:01.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:44:01.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:44:01.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:44:01.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:44:01.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:44:01.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:44:01.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:44:01.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.613628 -999.00  +26.00  30.95     19   +0.80 1 2 2 1 1   887    0 24.31 -24.08 ----- 30.9 30.9 294.2 36.8 28.1 -22.5 28.0 -21.8 28.0 -20.4 28.4 -20.4
2025-11-12T16:44:01.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:44:01.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:44:01.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.613628
2025-11-12T16:44:01.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:44:01.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:44:01.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:44:01.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:44:01.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:44:01.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:43:54', tmtdew=30.33, humidity=13.54, cloud=0.0, wind=32.92, temperature=26.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:43:37.459', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:44:01.884 [DEBUG] [Thread-19205] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:44:01.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:44:01.980 [DEBUG] [Thread-19209] [transport.py] [_log()] starting thread (client mode): 0x173bd3f0
2025-11-12T16:44:01.980 [DEBUG] [Thread-19209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:44:01.999 [DEBUG] [Thread-19209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:44:01.999 [INFO] [Thread-19209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:44:02.006 [DEBUG] [Thread-19209] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:44:02.006 [DEBUG] [Thread-19209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:44:02.006 [DEBUG] [Thread-19209] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] client lang: <none>
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] server lang: <none>
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] kex follows: False
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:44:02.007 [DEBUG] [Thread-19209] [transport.py] [_log()] Compression: none
2025-11-12T16:44:02.008 [DEBUG] [Thread-19209] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:44:02.063 [DEBUG] [Thread-19209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:44:02.064 [DEBUG] [Thread-19209] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:44:02.064 [DEBUG] [Thread-19209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:44:02.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:44:02.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:44:02.119 [DEBUG] [Thread-19209] [transport.py] [_log()] userauth is OK
2025-11-12T16:44:02.119 [DEBUG] [Thread-19209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:44:02.120 [DEBUG] [Thread-19209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:44:02.120 [DEBUG] [Thread-19209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:44:02.120 [DEBUG] [Thread-19209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:44:02.138 [INFO] [Thread-19209] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:44:02.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:44:02.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:44:02.988 [DEBUG] [Thread-19209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:44:02.988 [DEBUG] [Thread-19209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:44:03.036 [DEBUG] [Thread-19209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:44:03.036 [DEBUG] [Thread-19209] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:44:03.045 [DEBUG] [Thread-19209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:44:03.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:44:03.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:44:03.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-11-12T16:44:03.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:44:03.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:44:03.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:44:03.079 [DEBUG] [Thread-19209] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:44:16.605 [DEBUG] [Thread-19211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:44:31.654 [DEBUG] [Thread-19212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:44:33.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:44:33.102 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:44:33.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-11-12T16:44:33.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 44, 27), 30.28, 13.6, 0.0, 28.99, 26.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:44:33.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:44:27
2025-11-12T16:44:33.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:44:34.018 [DEBUG] [Thread-19213] [transport.py] [_log()] starting thread (client mode): 0x19dda170
2025-11-12T16:44:34.018 [DEBUG] [Thread-19213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:44:34.033 [DEBUG] [Thread-19213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:44:34.033 [INFO] [Thread-19213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:44:34.034 [DEBUG] [Thread-19213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:44:34.034 [DEBUG] [Thread-19213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:44:34.034 [DEBUG] [Thread-19213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:44:34.034 [DEBUG] [Thread-19213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:44:34.034 [DEBUG] [Thread-19213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:44:34.034 [DEBUG] [Thread-19213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:44:34.034 [DEBUG] [Thread-19213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:44:34.034 [DEBUG] [Thread-19213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] client lang: <none>
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] server lang: <none>
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] kex follows: False
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] Compression: none
2025-11-12T16:44:34.035 [DEBUG] [Thread-19213] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:44:34.045 [DEBUG] [Thread-19213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:44:34.045 [DEBUG] [Thread-19213] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:44:34.046 [DEBUG] [Thread-19213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:44:34.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:44:34.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:44:34.047 [DEBUG] [Thread-19213] [transport.py] [_log()] userauth is OK
2025-11-12T16:44:34.047 [DEBUG] [Thread-19213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:44:34.047 [DEBUG] [Thread-19213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:44:34.047 [DEBUG] [Thread-19213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:44:34.048 [DEBUG] [Thread-19213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:44:34.064 [INFO] [Thread-19213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:44:34.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:44:34.668 [DEBUG] [Thread-19213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:44:34.668 [DEBUG] [Thread-19213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:44:34.668 [DEBUG] [Thread-19213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:44:34.708 [DEBUG] [Thread-19213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:44:34.709 [DEBUG] [Thread-19213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:44:34.712 [DEBUG] [Thread-19213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:44:34.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:44:34.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:44:34.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:44:34.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:44:34.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:44:34.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:44:34.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:44:34.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:44:34.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:44:34.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.613975 -999.00  +26.20  25.34     19   +0.90 1 2 1 1 1   887    0 24.89 -24.42 ----- 25.3 25.3 281.8 32.6 28.2 -22.2 28.1 -21.8 28.2 -23.0 28.6 -20.8
2025-11-12T16:44:34.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:44:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:44:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.613975
2025-11-12T16:44:34.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:44:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:44:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:44:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:44:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:44:34.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:44:27', tmtdew=30.28, humidity=13.6, cloud=0.0, wind=28.99, temperature=26.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:44:07.440', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:44:34.737 [DEBUG] [Thread-19213] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:44:34.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:44:34.834 [DEBUG] [Thread-19216] [transport.py] [_log()] starting thread (client mode): 0x149db730
2025-11-12T16:44:34.834 [DEBUG] [Thread-19216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:44:34.849 [DEBUG] [Thread-19216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:44:34.849 [INFO] [Thread-19216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:44:34.856 [DEBUG] [Thread-19216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] client lang: <none>
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] server lang: <none>
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] kex follows: False
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] Compression: none
2025-11-12T16:44:34.857 [DEBUG] [Thread-19216] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:44:34.915 [DEBUG] [Thread-19216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:44:34.916 [DEBUG] [Thread-19216] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:44:34.916 [DEBUG] [Thread-19216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:44:34.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:44:34.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:44:34.975 [DEBUG] [Thread-19216] [transport.py] [_log()] userauth is OK
2025-11-12T16:44:34.976 [DEBUG] [Thread-19216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:44:34.976 [DEBUG] [Thread-19216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:44:34.976 [DEBUG] [Thread-19216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:44:34.976 [DEBUG] [Thread-19216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:44:34.994 [INFO] [Thread-19216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:44:34.995 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:44:34.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:44:35.831 [DEBUG] [Thread-19216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:44:35.832 [DEBUG] [Thread-19216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:44:35.880 [DEBUG] [Thread-19216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:44:35.880 [DEBUG] [Thread-19216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:44:35.889 [DEBUG] [Thread-19216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:44:35.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:44:35.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:44:35.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-11-12T16:44:35.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:44:35.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:44:35.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:44:35.926 [DEBUG] [Thread-19216] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:44:41.242 [DEBUG] [Thread-19218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:44:46.694 [DEBUG] [Thread-19219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:44:47.275 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:44:47.276 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:45:01.749 [DEBUG] [Thread-19220 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:45:05.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:45:05.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:45:05.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-11-12T16:45:06.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 44, 59), 30.57, 13.0, 0.0, 31.25, 26.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:45:06.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:44:59
2025-11-12T16:45:06.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:45:06.896 [DEBUG] [Thread-19221] [transport.py] [_log()] starting thread (client mode): 0x149db010
2025-11-12T16:45:06.896 [DEBUG] [Thread-19221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:45:06.916 [DEBUG] [Thread-19221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:45:06.916 [INFO] [Thread-19221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:45:06.918 [DEBUG] [Thread-19221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] client lang: <none>
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] server lang: <none>
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] kex follows: False
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] Compression: none
2025-11-12T16:45:06.919 [DEBUG] [Thread-19221] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:45:06.930 [DEBUG] [Thread-19221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:45:06.930 [DEBUG] [Thread-19221] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:45:06.930 [DEBUG] [Thread-19221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:45:06.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:45:06.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:45:06.931 [DEBUG] [Thread-19221] [transport.py] [_log()] userauth is OK
2025-11-12T16:45:06.931 [DEBUG] [Thread-19221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:45:06.931 [DEBUG] [Thread-19221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:45:06.931 [DEBUG] [Thread-19221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:45:06.931 [DEBUG] [Thread-19221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:45:06.942 [INFO] [Thread-19221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:45:06.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:45:08.211 [DEBUG] [Thread-19221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:45:08.212 [DEBUG] [Thread-19221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:45:08.212 [DEBUG] [Thread-19221] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:45:08.252 [DEBUG] [Thread-19221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:45:08.252 [DEBUG] [Thread-19221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:45:08.255 [DEBUG] [Thread-19221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:45:08.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:45:08.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:45:08.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:45:08.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:45:08.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:45:08.276 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:45:08.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:45:08.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:45:08.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:45:08.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.614323 -999.00  +26.20  31.62     18   +0.70 1 2 2 1 1   887    0 24.93 -20.83 ----- 31.6 31.6 275.0 35.3 28.3 -22.8 28.2 -22.2 28.3 -23.1 28.8 -20.5
2025-11-12T16:45:08.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:45:08.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:45:08.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.614323
2025-11-12T16:45:08.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:45:08.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:45:08.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:45:08.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:45:08.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:45:08.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:44:59', tmtdew=30.57, humidity=13.0, cloud=0.0, wind=31.25, temperature=26.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:44:37.507', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:45:08.280 [DEBUG] [Thread-19221] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:45:08.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:45:08.376 [DEBUG] [Thread-19224] [transport.py] [_log()] starting thread (client mode): 0x17360910
2025-11-12T16:45:08.376 [DEBUG] [Thread-19224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:45:08.392 [DEBUG] [Thread-19224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:45:08.392 [INFO] [Thread-19224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:45:08.402 [DEBUG] [Thread-19224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:45:08.403 [DEBUG] [Thread-19224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:45:08.403 [DEBUG] [Thread-19224] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:45:08.403 [DEBUG] [Thread-19224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:45:08.403 [DEBUG] [Thread-19224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:45:08.403 [DEBUG] [Thread-19224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:45:08.403 [DEBUG] [Thread-19224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:45:08.403 [DEBUG] [Thread-19224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:45:08.403 [DEBUG] [Thread-19224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:45:08.404 [DEBUG] [Thread-19224] [transport.py] [_log()] client lang: <none>
2025-11-12T16:45:08.404 [DEBUG] [Thread-19224] [transport.py] [_log()] server lang: <none>
2025-11-12T16:45:08.404 [DEBUG] [Thread-19224] [transport.py] [_log()] kex follows: False
2025-11-12T16:45:08.404 [DEBUG] [Thread-19224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:45:08.404 [DEBUG] [Thread-19224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:45:08.404 [DEBUG] [Thread-19224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:45:08.404 [DEBUG] [Thread-19224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:45:08.404 [DEBUG] [Thread-19224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:45:08.405 [DEBUG] [Thread-19224] [transport.py] [_log()] Compression: none
2025-11-12T16:45:08.405 [DEBUG] [Thread-19224] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:45:08.460 [DEBUG] [Thread-19224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:45:08.461 [DEBUG] [Thread-19224] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:45:08.461 [DEBUG] [Thread-19224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:45:08.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:45:08.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:45:08.519 [DEBUG] [Thread-19224] [transport.py] [_log()] userauth is OK
2025-11-12T16:45:08.519 [DEBUG] [Thread-19224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:45:08.520 [DEBUG] [Thread-19224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:45:08.520 [DEBUG] [Thread-19224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:45:08.520 [DEBUG] [Thread-19224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:45:08.538 [INFO] [Thread-19224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:45:08.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:45:08.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:45:09.385 [DEBUG] [Thread-19224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:45:09.386 [DEBUG] [Thread-19224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:45:09.433 [DEBUG] [Thread-19224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:45:09.434 [DEBUG] [Thread-19224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:45:09.443 [DEBUG] [Thread-19224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:45:09.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:45: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')
2025-11-12T16:45:09.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-11-12T16:45:09.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:45:09.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:45:09.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:45:09.480 [DEBUG] [Thread-19224] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:45:16.781 [DEBUG] [Thread-19226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:45:31.830 [DEBUG] [Thread-19227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:45:39.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:45:39.503 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:45:39.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-11-12T16:45:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 45, 30), 30.86, 12.75, 0.0, 33.0, 26.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:45:40.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:45:30
2025-11-12T16:45:40.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:45:40.419 [DEBUG] [Thread-19228] [transport.py] [_log()] starting thread (client mode): 0x149da920
2025-11-12T16:45:40.420 [DEBUG] [Thread-19228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:45:40.434 [DEBUG] [Thread-19228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:45:40.434 [INFO] [Thread-19228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] client lang: <none>
2025-11-12T16:45:40.435 [DEBUG] [Thread-19228] [transport.py] [_log()] server lang: <none>
2025-11-12T16:45:40.436 [DEBUG] [Thread-19228] [transport.py] [_log()] kex follows: False
2025-11-12T16:45:40.436 [DEBUG] [Thread-19228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:45:40.436 [DEBUG] [Thread-19228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:45:40.436 [DEBUG] [Thread-19228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:45:40.436 [DEBUG] [Thread-19228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:45:40.436 [DEBUG] [Thread-19228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:45:40.436 [DEBUG] [Thread-19228] [transport.py] [_log()] Compression: none
2025-11-12T16:45:40.436 [DEBUG] [Thread-19228] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:45:40.454 [DEBUG] [Thread-19228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:45:40.454 [DEBUG] [Thread-19228] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:45:40.454 [DEBUG] [Thread-19228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:45:40.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:45:40.455 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:45:40.456 [DEBUG] [Thread-19228] [transport.py] [_log()] userauth is OK
2025-11-12T16:45:40.456 [DEBUG] [Thread-19228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:45:40.456 [DEBUG] [Thread-19228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:45:40.456 [DEBUG] [Thread-19228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:45:40.456 [DEBUG] [Thread-19228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:45:40.482 [INFO] [Thread-19228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:45:40.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:45:41.103 [DEBUG] [Thread-19228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:45:41.103 [DEBUG] [Thread-19228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:45:41.103 [DEBUG] [Thread-19228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:45:41.144 [DEBUG] [Thread-19228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:45:41.144 [DEBUG] [Thread-19228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:45:41.147 [DEBUG] [Thread-19228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:45:41.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:45:41.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:45:41.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:45:41.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:45:41.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:45:41.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:45:41.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:45:41.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:45:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:45:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.615017 -999.00  +25.90  23.44     19   +0.60 1 2 1 1 1   887    0 24.71 -18.98 ----- 23.4 23.4 277.2 36.2 28.4 -22.6 28.3 -22.4 28.4 -21.3 29.0 -21.1
2025-11-12T16:45:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:45:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:45:41.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.615017
2025-11-12T16:45:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:45:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:45:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:45:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:45:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:45:41.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:45:30', tmtdew=30.86, humidity=12.75, cloud=0.0, wind=33.0, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:45:37.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:45:41.165 [DEBUG] [Thread-19228] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:45:41.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:45:41.252 [DEBUG] [Thread-19231] [transport.py] [_log()] starting thread (client mode): 0x14980340
2025-11-12T16:45:41.252 [DEBUG] [Thread-19231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:45:41.266 [DEBUG] [Thread-19231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:45:41.267 [INFO] [Thread-19231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:45:41.270 [DEBUG] [Thread-19233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] client lang: <none>
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] server lang: <none>
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] kex follows: False
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] Compression: none
2025-11-12T16:45:41.274 [DEBUG] [Thread-19231] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:45:41.330 [DEBUG] [Thread-19231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:45:41.330 [DEBUG] [Thread-19231] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:45:41.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:45:41.331 [DEBUG] [Thread-19231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:45:41.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:45:41.387 [DEBUG] [Thread-19231] [transport.py] [_log()] userauth is OK
2025-11-12T16:45:41.387 [DEBUG] [Thread-19231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:45:41.387 [DEBUG] [Thread-19231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:45:41.387 [DEBUG] [Thread-19231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:45:41.387 [DEBUG] [Thread-19231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:45:41.404 [INFO] [Thread-19231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:45:41.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:45:41.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:45:42.297 [DEBUG] [Thread-19231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:45:42.298 [DEBUG] [Thread-19231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:45:42.345 [DEBUG] [Thread-19231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:45:42.345 [DEBUG] [Thread-19231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:45:42.354 [DEBUG] [Thread-19231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:45:42.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:45:42.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:45:42.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:45:42.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:45:42.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:45:42.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:45:42.387 [DEBUG] [Thread-19231] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:45:46.860 [DEBUG] [Thread-19234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:45:47.418 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:45:47.419 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:46:01.908 [DEBUG] [Thread-19235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:46:12.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:46:12.409 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:46:12.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-11-12T16:46:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 46, 2), 31.1, 12.57, 0.0, 36.31, 27.03, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:46:13.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:46:02
2025-11-12T16:46:13.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:46:13.310 [DEBUG] [Thread-19236] [transport.py] [_log()] starting thread (client mode): 0x14961030
2025-11-12T16:46:13.310 [DEBUG] [Thread-19236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:46:13.331 [DEBUG] [Thread-19236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:46:13.331 [INFO] [Thread-19236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:46:13.334 [DEBUG] [Thread-19236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] client lang: <none>
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] server lang: <none>
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] kex follows: False
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] Compression: none
2025-11-12T16:46:13.335 [DEBUG] [Thread-19236] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:46:13.353 [DEBUG] [Thread-19236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:46:13.353 [DEBUG] [Thread-19236] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:46:13.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:46:13.354 [DEBUG] [Thread-19236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:46:13.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:46:13.357 [DEBUG] [Thread-19236] [transport.py] [_log()] userauth is OK
2025-11-12T16:46:13.357 [DEBUG] [Thread-19236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:46:13.357 [DEBUG] [Thread-19236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:46:13.357 [DEBUG] [Thread-19236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:46:13.357 [DEBUG] [Thread-19236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:46:13.382 [INFO] [Thread-19236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:46:13.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:46:14.135 [DEBUG] [Thread-19236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:46:14.136 [DEBUG] [Thread-19236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:46:14.136 [DEBUG] [Thread-19236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:46:14.177 [DEBUG] [Thread-19236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:46:14.177 [DEBUG] [Thread-19236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:46:14.179 [DEBUG] [Thread-19236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:46:14.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:46:14.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:46:14.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:46:14.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:46:14.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:46:14.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:46:14.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:46:14.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:46:14.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:46:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.615017 -999.00  +25.90  23.44     19   +0.60 1 2 1 1 1   887    0 24.71 -18.98 ----- 23.4 23.4 277.2 36.2 28.4 -22.6 28.3 -22.4 28.4 -21.3 29.0 -21.1
2025-11-12T16:46:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:46:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:46:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.615017
2025-11-12T16:46:14.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:46:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:46:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:46:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:46:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:46:14.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:46:02', tmtdew=31.1, humidity=12.57, cloud=0.0, wind=36.31, temperature=27.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:45:37.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:46:14.201 [DEBUG] [Thread-19236] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:46:14.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:46:14.296 [DEBUG] [Thread-19239] [transport.py] [_log()] starting thread (client mode): 0x1493cdc0
2025-11-12T16:46:14.296 [DEBUG] [Thread-19239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:46:14.311 [DEBUG] [Thread-19239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:46:14.311 [INFO] [Thread-19239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] client lang: <none>
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] server lang: <none>
2025-11-12T16:46:14.319 [DEBUG] [Thread-19239] [transport.py] [_log()] kex follows: False
2025-11-12T16:46:14.320 [DEBUG] [Thread-19239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:46:14.320 [DEBUG] [Thread-19239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:46:14.320 [DEBUG] [Thread-19239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:46:14.320 [DEBUG] [Thread-19239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:46:14.320 [DEBUG] [Thread-19239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:46:14.320 [DEBUG] [Thread-19239] [transport.py] [_log()] Compression: none
2025-11-12T16:46:14.320 [DEBUG] [Thread-19239] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:46:14.381 [DEBUG] [Thread-19239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:46:14.381 [DEBUG] [Thread-19239] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:46:14.382 [DEBUG] [Thread-19239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:46:14.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:46:14.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:46:14.439 [DEBUG] [Thread-19239] [transport.py] [_log()] userauth is OK
2025-11-12T16:46:14.440 [DEBUG] [Thread-19239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:46:14.440 [DEBUG] [Thread-19239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:46:14.440 [DEBUG] [Thread-19239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:46:14.440 [DEBUG] [Thread-19239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:46:14.458 [INFO] [Thread-19239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:46:14.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:46:14.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:46:15.285 [DEBUG] [Thread-19239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:46:15.286 [DEBUG] [Thread-19239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:46:15.334 [DEBUG] [Thread-19239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:46:15.334 [DEBUG] [Thread-19239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:46:15.343 [DEBUG] [Thread-19239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:46:15.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:46:15.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:46:15.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-11-12T16:46:15.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:46:15.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:46:15.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:46:15.381 [DEBUG] [Thread-19239] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:46:16.945 [DEBUG] [Thread-19241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:46:32.002 [DEBUG] [Thread-19242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:46:41.311 [DEBUG] [Thread-19243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:46:45.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:46:45.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:46:45.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-11-12T16:46:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 46, 34), 31.01, 12.52, 0.0, 26.89, 26.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:46:46.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:46:34
2025-11-12T16:46:46.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:46:46.271 [DEBUG] [Thread-19244] [transport.py] [_log()] starting thread (client mode): 0x17363f40
2025-11-12T16:46:46.271 [DEBUG] [Thread-19244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:46:46.292 [DEBUG] [Thread-19244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:46:46.292 [INFO] [Thread-19244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:46:46.295 [DEBUG] [Thread-19244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:46:46.295 [DEBUG] [Thread-19244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:46:46.295 [DEBUG] [Thread-19244] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:46:46.295 [DEBUG] [Thread-19244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:46:46.295 [DEBUG] [Thread-19244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:46:46.295 [DEBUG] [Thread-19244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:46:46.295 [DEBUG] [Thread-19244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:46:46.295 [DEBUG] [Thread-19244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] client lang: <none>
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] server lang: <none>
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] kex follows: False
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] Compression: none
2025-11-12T16:46:46.296 [DEBUG] [Thread-19244] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:46:46.314 [DEBUG] [Thread-19244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:46:46.315 [DEBUG] [Thread-19244] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:46:46.315 [DEBUG] [Thread-19244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:46:46.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:46:46.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:46:46.317 [DEBUG] [Thread-19244] [transport.py] [_log()] userauth is OK
2025-11-12T16:46:46.317 [DEBUG] [Thread-19244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:46:46.317 [DEBUG] [Thread-19244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:46:46.317 [DEBUG] [Thread-19244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:46:46.317 [DEBUG] [Thread-19244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:46:46.350 [INFO] [Thread-19244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:46:46.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:46:46.920 [DEBUG] [Thread-19244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:46:46.920 [DEBUG] [Thread-19244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:46:46.921 [DEBUG] [Thread-19244] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:46:46.962 [DEBUG] [Thread-19244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:46:46.962 [DEBUG] [Thread-19244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:46:46.966 [DEBUG] [Thread-19244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:46:46.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:46:46.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:46:46.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:46:46.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:46:46.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:46:46.988 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:46:46.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:46:46.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:46:46.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:46:46.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.615364 -999.00  +26.10  27.71     18   +0.60 1 2 1 1 1   887    0 25.01 -17.63 ----- 27.7 27.7 284.2 32.7 28.6 -22.2 28.5 -22.1 28.6 -21.8 29.2 -20.9
2025-11-12T16:46:46.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:46:46.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:46:46.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.615364
2025-11-12T16:46:46.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:46:46.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:46:46.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:46:46.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:46:46.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:46:46.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:46:34', tmtdew=31.01, humidity=12.52, cloud=0.0, wind=26.89, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:46:07.450', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:46:46.992 [DEBUG] [Thread-19244] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:46:47.037 [DEBUG] [Thread-19247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:46:47.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:46:47.089 [DEBUG] [Thread-19248] [transport.py] [_log()] starting thread (client mode): 0x173e9120
2025-11-12T16:46:47.089 [DEBUG] [Thread-19248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:46:47.103 [DEBUG] [Thread-19248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:46:47.104 [INFO] [Thread-19248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:46:47.111 [DEBUG] [Thread-19248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:46:47.111 [DEBUG] [Thread-19248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:46:47.111 [DEBUG] [Thread-19248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] client lang: <none>
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] server lang: <none>
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] kex follows: False
2025-11-12T16:46:47.112 [DEBUG] [Thread-19248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:46:47.113 [DEBUG] [Thread-19248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:46:47.113 [DEBUG] [Thread-19248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:46:47.113 [DEBUG] [Thread-19248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:46:47.113 [DEBUG] [Thread-19248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:46:47.113 [DEBUG] [Thread-19248] [transport.py] [_log()] Compression: none
2025-11-12T16:46:47.113 [DEBUG] [Thread-19248] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:46:47.172 [DEBUG] [Thread-19248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:46:47.173 [DEBUG] [Thread-19248] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:46:47.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:46:47.174 [DEBUG] [Thread-19248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:46:47.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:46:47.231 [DEBUG] [Thread-19248] [transport.py] [_log()] userauth is OK
2025-11-12T16:46:47.232 [DEBUG] [Thread-19248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:46:47.232 [DEBUG] [Thread-19248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:46:47.232 [DEBUG] [Thread-19248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:46:47.232 [DEBUG] [Thread-19248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:46:47.250 [INFO] [Thread-19248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:46:47.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:46:47.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:46:47.561 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:46:47.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:46:48.072 [DEBUG] [Thread-19248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:46:48.072 [DEBUG] [Thread-19248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:46:48.120 [DEBUG] [Thread-19248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:46:48.120 [DEBUG] [Thread-19248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:46:48.129 [DEBUG] [Thread-19248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:46:48.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:46:48.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:46:48.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-11-12T16:46:48.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:46:48.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:46:48.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:46:48.166 [DEBUG] [Thread-19248] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:47:02.073 [DEBUG] [Thread-19250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:47:17.104 [DEBUG] [Thread-19251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:47:18.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:47:18.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:47:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:47:18.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 47, 6), 30.87, 12.62, 0.0, 25.78, 26.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:47:18.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:47:06
2025-11-12T16:47:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:47:19.084 [DEBUG] [Thread-19252] [transport.py] [_log()] starting thread (client mode): 0x173e9cf0
2025-11-12T16:47:19.084 [DEBUG] [Thread-19252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:47:19.100 [DEBUG] [Thread-19252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:47:19.100 [INFO] [Thread-19252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:47:19.103 [DEBUG] [Thread-19252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] client lang: <none>
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] server lang: <none>
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] kex follows: False
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] Compression: none
2025-11-12T16:47:19.104 [DEBUG] [Thread-19252] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:47:19.120 [DEBUG] [Thread-19252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:47:19.120 [DEBUG] [Thread-19252] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:47:19.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:47:19.121 [DEBUG] [Thread-19252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:47:19.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:47:19.123 [DEBUG] [Thread-19252] [transport.py] [_log()] userauth is OK
2025-11-12T16:47:19.123 [DEBUG] [Thread-19252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:47:19.123 [DEBUG] [Thread-19252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:47:19.124 [DEBUG] [Thread-19252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:47:19.124 [DEBUG] [Thread-19252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:47:19.142 [INFO] [Thread-19252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:47:19.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:47:19.873 [DEBUG] [Thread-19252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:47:19.873 [DEBUG] [Thread-19252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:47:19.873 [DEBUG] [Thread-19252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:47:19.914 [DEBUG] [Thread-19252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:47:19.914 [DEBUG] [Thread-19252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:47:19.917 [DEBUG] [Thread-19252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:47:19.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:47:19.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:47:19.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:47:19.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:47:19.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:47:19.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:47:19.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:47:19.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:47:19.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:47:19.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.615712 -999.00  +25.90  23.83     19   +0.60 1 2 1 1 1   887    0 25.32 -15.17 ----- 23.8 23.8 270.2 29.7 28.6 -22.5 28.5 -22.4 28.7 -22.0 29.4 -20.8
2025-11-12T16:47:19.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:47:19.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:47:19.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.615712
2025-11-12T16:47:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:47:19.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:47:19.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:47:19.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:47:19.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:47:19.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:47:06', tmtdew=30.87, humidity=12.62, cloud=0.0, wind=25.78, temperature=26.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:46:37.517', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:47:19.938 [DEBUG] [Thread-19252] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:47:20.021 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:47:20.034 [DEBUG] [Thread-19255] [transport.py] [_log()] starting thread (client mode): 0x173bc580
2025-11-12T16:47:20.034 [DEBUG] [Thread-19255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:47:20.049 [DEBUG] [Thread-19255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:47:20.049 [INFO] [Thread-19255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:47:20.056 [DEBUG] [Thread-19255] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:47:20.056 [DEBUG] [Thread-19255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:47:20.056 [DEBUG] [Thread-19255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:47:20.056 [DEBUG] [Thread-19255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] client lang: <none>
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] server lang: <none>
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] kex follows: False
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] Compression: none
2025-11-12T16:47:20.057 [DEBUG] [Thread-19255] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:47:20.115 [DEBUG] [Thread-19255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:47:20.116 [DEBUG] [Thread-19255] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:47:20.116 [DEBUG] [Thread-19255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:47:20.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:47:20.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:47:20.171 [DEBUG] [Thread-19255] [transport.py] [_log()] userauth is OK
2025-11-12T16:47:20.172 [DEBUG] [Thread-19255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:47:20.172 [DEBUG] [Thread-19255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:47:20.172 [DEBUG] [Thread-19255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:47:20.172 [DEBUG] [Thread-19255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:47:20.191 [INFO] [Thread-19255] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:47:20.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:47:20.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:47:21.015 [DEBUG] [Thread-19255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:47:21.015 [DEBUG] [Thread-19255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:47:21.064 [DEBUG] [Thread-19255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:47:21.064 [DEBUG] [Thread-19255] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:47:21.073 [DEBUG] [Thread-19255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:47:21.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:47:21.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:47:21.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-11-12T16:47:21.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:47:21.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:47:21.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:47:21.110 [DEBUG] [Thread-19255] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:47:32.142 [DEBUG] [Thread-19257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:47:41.339 [DEBUG] [Thread-19258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:47:47.196 [DEBUG] [Thread-19259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:47:47.703 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:47:47.704 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:47:51.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:47:51.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:47:51.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-11-12T16:47:51.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 47, 38), 30.72, 13.17, 0.0, 26.11, 26.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:47:51.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:47:38
2025-11-12T16:47:51.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:47:52.045 [DEBUG] [Thread-19260] [transport.py] [_log()] starting thread (client mode): 0x149dace0
2025-11-12T16:47:52.045 [DEBUG] [Thread-19260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:47:52.064 [DEBUG] [Thread-19260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:47:52.065 [INFO] [Thread-19260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] client lang: <none>
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] server lang: <none>
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] kex follows: False
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] Compression: none
2025-11-12T16:47:52.068 [DEBUG] [Thread-19260] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:47:52.087 [DEBUG] [Thread-19260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:47:52.088 [DEBUG] [Thread-19260] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:47:52.088 [DEBUG] [Thread-19260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:47:52.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:47:52.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:47:52.090 [DEBUG] [Thread-19260] [transport.py] [_log()] userauth is OK
2025-11-12T16:47:52.091 [DEBUG] [Thread-19260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:47:52.091 [DEBUG] [Thread-19260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:47:52.091 [DEBUG] [Thread-19260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:47:52.091 [DEBUG] [Thread-19260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:47:52.111 [INFO] [Thread-19260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:47:52.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:47:52.741 [DEBUG] [Thread-19260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:47:52.741 [DEBUG] [Thread-19260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:47:52.741 [DEBUG] [Thread-19260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:47:52.781 [DEBUG] [Thread-19260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:47:52.782 [DEBUG] [Thread-19260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:47:52.784 [DEBUG] [Thread-19260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:47:52.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:47:52.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:47:52.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:47:52.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:47:52.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:47:52.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:47:52.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:47:52.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:47:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:47:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.616059 -999.00  +25.80  24.64     19   +0.60 1 2 1 1 1   887    0 25.18 -14.71 ----- 24.6 24.6 271.8 34.8 28.6 -23.2 28.6 -23.1 28.9 -21.6 29.5 -21.9
2025-11-12T16:47:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:47:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:47:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.616059
2025-11-12T16:47:52.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:47:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:47:52.805 [DEBUG] [Thread-19260] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:47:52.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:47:52.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:47:52.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:47:52.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:47:38', tmtdew=30.72, humidity=13.17, cloud=0.0, wind=26.11, temperature=26.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:47:07.498', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:47:52.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:47:52.902 [DEBUG] [Thread-19263] [transport.py] [_log()] starting thread (client mode): 0x1737dde0
2025-11-12T16:47:52.902 [DEBUG] [Thread-19263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:47:52.917 [DEBUG] [Thread-19263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:47:52.917 [INFO] [Thread-19263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:47:52.924 [DEBUG] [Thread-19263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] client lang: <none>
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] server lang: <none>
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] kex follows: False
2025-11-12T16:47:52.925 [DEBUG] [Thread-19263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:47:52.926 [DEBUG] [Thread-19263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:47:52.926 [DEBUG] [Thread-19263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:47:52.926 [DEBUG] [Thread-19263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:47:52.926 [DEBUG] [Thread-19263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:47:52.926 [DEBUG] [Thread-19263] [transport.py] [_log()] Compression: none
2025-11-12T16:47:52.926 [DEBUG] [Thread-19263] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:47:52.983 [DEBUG] [Thread-19263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:47:52.983 [DEBUG] [Thread-19263] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:47:52.984 [DEBUG] [Thread-19263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:47:52.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:47:52.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:47:53.039 [DEBUG] [Thread-19263] [transport.py] [_log()] userauth is OK
2025-11-12T16:47:53.040 [DEBUG] [Thread-19263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:47:53.040 [DEBUG] [Thread-19263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:47:53.040 [DEBUG] [Thread-19263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:47:53.040 [DEBUG] [Thread-19263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:47:53.060 [INFO] [Thread-19263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:47:53.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:47:53.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:47:53.890 [DEBUG] [Thread-19263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:47:53.891 [DEBUG] [Thread-19263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:47:53.939 [DEBUG] [Thread-19263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:47:53.939 [DEBUG] [Thread-19263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:47:53.948 [DEBUG] [Thread-19263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:47:53.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:47:53.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-11-12T16:47:53.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-11-12T16:47:53.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:47:53.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:47:53.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:47:53.985 [DEBUG] [Thread-19263] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:48:02.232 [DEBUG] [Thread-19265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:48:17.285 [DEBUG] [Thread-19266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:48:23.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:48:23.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:48:23.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-11-12T16:48:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 48, 10), 30.73, 13.17, 0.0, 26.03, 26.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:48:24.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:48:10
2025-11-12T16:48:24.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:48:24.905 [DEBUG] [Thread-19267] [transport.py] [_log()] starting thread (client mode): 0x173bdea0
2025-11-12T16:48:24.906 [DEBUG] [Thread-19267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:48:24.926 [DEBUG] [Thread-19267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:48:24.927 [INFO] [Thread-19267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:48:24.929 [DEBUG] [Thread-19267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] client lang: <none>
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] server lang: <none>
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] kex follows: False
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] Compression: none
2025-11-12T16:48:24.930 [DEBUG] [Thread-19267] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:48:24.948 [DEBUG] [Thread-19267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:48:24.949 [DEBUG] [Thread-19267] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:48:24.949 [DEBUG] [Thread-19267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:48:24.949 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:48:24.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:48:24.951 [DEBUG] [Thread-19267] [transport.py] [_log()] userauth is OK
2025-11-12T16:48:24.951 [DEBUG] [Thread-19267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:48:24.952 [DEBUG] [Thread-19267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:48:24.952 [DEBUG] [Thread-19267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:48:24.952 [DEBUG] [Thread-19267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:48:24.988 [INFO] [Thread-19267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:48:24.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:48:25.740 [DEBUG] [Thread-19267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:48:25.740 [DEBUG] [Thread-19267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:48:25.740 [DEBUG] [Thread-19267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:48:25.781 [DEBUG] [Thread-19267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:48:25.781 [DEBUG] [Thread-19267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:48:25.783 [DEBUG] [Thread-19267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:48:25.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:48:25.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:48:25.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:48:25.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:48:25.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:48:25.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:48:25.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:48:25.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:48:25.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:48:25.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.616406 -999.00  +25.60  19.58     19   +0.40 1 1 1 1 1   887    0 24.96 -11.71 ----- 19.6 19.6 276.5 36.4 28.6 -23.8 28.6 -23.2 28.7 -23.6 29.4 -21.9
2025-11-12T16:48:25.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:48:25.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:48:25.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.616406
2025-11-12T16:48:25.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:48:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:48:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:48:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:48:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:48:25.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:48:10', tmtdew=30.73, humidity=13.17, cloud=0.0, wind=26.03, temperature=26.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:47:37.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:48:25.802 [DEBUG] [Thread-19267] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:48:25.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:48:25.898 [DEBUG] [Thread-19270] [transport.py] [_log()] starting thread (client mode): 0x17362dd0
2025-11-12T16:48:25.898 [DEBUG] [Thread-19270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:48:25.913 [DEBUG] [Thread-19270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:48:25.913 [INFO] [Thread-19270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] client lang: <none>
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] server lang: <none>
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] kex follows: False
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:48:25.921 [DEBUG] [Thread-19270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:48:25.922 [DEBUG] [Thread-19270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:48:25.922 [DEBUG] [Thread-19270] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:48:25.922 [DEBUG] [Thread-19270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:48:25.922 [DEBUG] [Thread-19270] [transport.py] [_log()] Compression: none
2025-11-12T16:48:25.922 [DEBUG] [Thread-19270] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:48:25.979 [DEBUG] [Thread-19270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:48:25.980 [DEBUG] [Thread-19270] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:48:25.980 [DEBUG] [Thread-19270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:48:25.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:48:25.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:48:26.035 [DEBUG] [Thread-19270] [transport.py] [_log()] userauth is OK
2025-11-12T16:48:26.036 [DEBUG] [Thread-19270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:48:26.036 [DEBUG] [Thread-19270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:48:26.036 [DEBUG] [Thread-19270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:48:26.036 [DEBUG] [Thread-19270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:48:26.061 [INFO] [Thread-19270] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:48:26.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:48:26.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:48:26.903 [DEBUG] [Thread-19270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:48:26.904 [DEBUG] [Thread-19270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:48:26.951 [DEBUG] [Thread-19270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:48:26.952 [DEBUG] [Thread-19270] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:48:26.961 [DEBUG] [Thread-19270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:48:26.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:48:26.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-11-12T16:48:26.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-11-12T16:48:26.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:48:26.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:48:26.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:48:26.996 [DEBUG] [Thread-19270] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:48:32.315 [DEBUG] [Thread-19272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:48:41.395 [DEBUG] [Thread-19273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:48:47.367 [DEBUG] [Thread-19274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:48:47.846 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:48:47.847 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:48:57.018 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:48:57.018 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:48:57.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-11-12T16:48:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 48, 42), 31.07, 12.57, 0.0, 26.43, 27.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:48:57.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:48:42
2025-11-12T16:48:57.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:48:57.971 [DEBUG] [Thread-19275] [transport.py] [_log()] starting thread (client mode): 0x17361960
2025-11-12T16:48:57.971 [DEBUG] [Thread-19275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:48:57.990 [DEBUG] [Thread-19275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:48:57.990 [INFO] [Thread-19275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] client lang: <none>
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] server lang: <none>
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] kex follows: False
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:48:57.993 [DEBUG] [Thread-19275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:48:57.994 [DEBUG] [Thread-19275] [transport.py] [_log()] Compression: none
2025-11-12T16:48:57.994 [DEBUG] [Thread-19275] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:48:58.009 [DEBUG] [Thread-19275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:48:58.009 [DEBUG] [Thread-19275] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:48:58.009 [DEBUG] [Thread-19275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:48:58.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:48:58.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:48:58.010 [DEBUG] [Thread-19275] [transport.py] [_log()] userauth is OK
2025-11-12T16:48:58.010 [DEBUG] [Thread-19275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:48:58.010 [DEBUG] [Thread-19275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:48:58.010 [DEBUG] [Thread-19275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:48:58.010 [DEBUG] [Thread-19275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:48:58.028 [INFO] [Thread-19275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:48:58.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:48:58.667 [DEBUG] [Thread-19275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:48:58.668 [DEBUG] [Thread-19275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:48:58.668 [DEBUG] [Thread-19275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:48:58.708 [DEBUG] [Thread-19275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:48:58.709 [DEBUG] [Thread-19275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:48:58.713 [DEBUG] [Thread-19275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:48:58.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:48:58.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:48:58.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:48:58.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:48:58.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:48:58.737 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:48:58.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:48:58.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:48:58.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:48:58.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.616753 -999.00  +25.80  28.81     19   +0.60 1 1 1 1 1   887    0 26.17 -4.29 ----- 28.8 28.8 272.2 33.6 28.8 -23.0 28.6 -22.9 28.9 -24.0 29.5 -22.3
2025-11-12T16:48:58.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:48:58.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:48:58.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.616753
2025-11-12T16:48:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:48:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:48:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:48:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:48:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:48:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:48:42', tmtdew=31.07, humidity=12.57, cloud=0.0, wind=26.43, temperature=27.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:48:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:48:58.740 [DEBUG] [Thread-19275] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:48:58.830 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:48:58.842 [DEBUG] [Thread-19278] [transport.py] [_log()] starting thread (client mode): 0x173bda50
2025-11-12T16:48:58.842 [DEBUG] [Thread-19278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:48:58.858 [DEBUG] [Thread-19278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:48:58.858 [INFO] [Thread-19278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] client lang: <none>
2025-11-12T16:48:58.866 [DEBUG] [Thread-19278] [transport.py] [_log()] server lang: <none>
2025-11-12T16:48:58.867 [DEBUG] [Thread-19278] [transport.py] [_log()] kex follows: False
2025-11-12T16:48:58.867 [DEBUG] [Thread-19278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:48:58.867 [DEBUG] [Thread-19278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:48:58.867 [DEBUG] [Thread-19278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:48:58.867 [DEBUG] [Thread-19278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:48:58.867 [DEBUG] [Thread-19278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:48:58.867 [DEBUG] [Thread-19278] [transport.py] [_log()] Compression: none
2025-11-12T16:48:58.867 [DEBUG] [Thread-19278] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:48:58.923 [DEBUG] [Thread-19278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:48:58.923 [DEBUG] [Thread-19278] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:48:58.924 [DEBUG] [Thread-19278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:48:58.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:48:58.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:48:58.979 [DEBUG] [Thread-19278] [transport.py] [_log()] userauth is OK
2025-11-12T16:48:58.980 [DEBUG] [Thread-19278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:48:58.980 [DEBUG] [Thread-19278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:48:58.980 [DEBUG] [Thread-19278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:48:58.980 [DEBUG] [Thread-19278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:48:59.000 [INFO] [Thread-19278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:48:59.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:48:59.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:48:59.876 [DEBUG] [Thread-19278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:48:59.876 [DEBUG] [Thread-19278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:48:59.924 [DEBUG] [Thread-19278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:48:59.924 [DEBUG] [Thread-19278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:48:59.933 [DEBUG] [Thread-19278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:48:59.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:48:59.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-11-12T16:48:59.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-11-12T16:48:59.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:48:59.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:48:59.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:48:59.969 [DEBUG] [Thread-19278] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:49:02.406 [DEBUG] [Thread-19280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:49:17.460 [DEBUG] [Thread-19281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:49:29.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:49:29.991 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:49:29.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-11-12T16:49:30.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 49, 14), 31.2, 12.47, 0.0, 25.04, 27.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:49:30.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:49:14
2025-11-12T16:49:30.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:49:30.895 [DEBUG] [Thread-19282] [transport.py] [_log()] starting thread (client mode): 0x173e8220
2025-11-12T16:49:30.895 [DEBUG] [Thread-19282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:49:30.906 [DEBUG] [Thread-19282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:49:30.907 [INFO] [Thread-19282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] client lang: <none>
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] server lang: <none>
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] kex follows: False
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] Compression: none
2025-11-12T16:49:30.909 [DEBUG] [Thread-19282] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:49:30.922 [DEBUG] [Thread-19282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:49:30.922 [DEBUG] [Thread-19282] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:49:30.923 [DEBUG] [Thread-19282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:49:30.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:49:30.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:49:30.924 [DEBUG] [Thread-19282] [transport.py] [_log()] userauth is OK
2025-11-12T16:49:30.924 [DEBUG] [Thread-19282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:49:30.924 [DEBUG] [Thread-19282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:49:30.924 [DEBUG] [Thread-19282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:49:30.924 [DEBUG] [Thread-19282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:49:30.945 [INFO] [Thread-19282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:49:30.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:49:31.609 [DEBUG] [Thread-19282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:49:31.609 [DEBUG] [Thread-19282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:49:31.609 [DEBUG] [Thread-19282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:49:31.650 [DEBUG] [Thread-19282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:49:31.650 [DEBUG] [Thread-19282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:49:31.652 [DEBUG] [Thread-19282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:49:31.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:49:31.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:49:31.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:49:31.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:49:31.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:49:31.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:49:31.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.617100 -999.00  +25.90  18.32     19   +0.70 1 2 1 1 1   887    0 25.50 2.68 ----- 18.3 18.3 280.4 28.7 28.8 -22.5 28.7 -22.6 28.9 -23.3 29.6 -21.1
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.617100
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:49:31.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:49:14', tmtdew=31.2, humidity=12.47, cloud=0.0, wind=25.04, temperature=27.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:48:37.440', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:49:31.671 [DEBUG] [Thread-19282] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:49:31.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:49:31.758 [DEBUG] [Thread-19285] [transport.py] [_log()] starting thread (client mode): 0x1737e230
2025-11-12T16:49:31.758 [DEBUG] [Thread-19285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:49:31.772 [DEBUG] [Thread-19285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:49:31.773 [INFO] [Thread-19285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] client lang: <none>
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] server lang: <none>
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] kex follows: False
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:49:31.780 [DEBUG] [Thread-19285] [transport.py] [_log()] Compression: none
2025-11-12T16:49:31.781 [DEBUG] [Thread-19285] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:49:31.837 [DEBUG] [Thread-19285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:49:31.838 [DEBUG] [Thread-19285] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:49:31.838 [DEBUG] [Thread-19285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:49:31.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:49:31.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:49:31.897 [DEBUG] [Thread-19285] [transport.py] [_log()] userauth is OK
2025-11-12T16:49:31.897 [DEBUG] [Thread-19285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:49:31.897 [DEBUG] [Thread-19285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:49:31.897 [DEBUG] [Thread-19285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:49:31.897 [DEBUG] [Thread-19285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:49:31.910 [INFO] [Thread-19285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:49:31.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:49:31.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:49:32.498 [DEBUG] [Thread-19287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:49:32.720 [DEBUG] [Thread-19285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:49:32.720 [DEBUG] [Thread-19285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:49:32.768 [DEBUG] [Thread-19285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:49:32.768 [DEBUG] [Thread-19285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:49:32.776 [DEBUG] [Thread-19285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:49:32.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:49:32.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')
2025-11-12T16:49:32.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-11-12T16:49:32.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:49:32.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:49:32.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:49:32.808 [DEBUG] [Thread-19285] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:49:41.441 [DEBUG] [Thread-19288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:49:47.535 [DEBUG] [Thread-19289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:49:47.988 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:49:47.989 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:50:02.570 [DEBUG] [Thread-19290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:50:02.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:50:02.831 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:50:02.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-11-12T16:50:03.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 49, 46), 31.72, 11.91, 0.0, 27.08, 27.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:50:03.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:49:46
2025-11-12T16:50:03.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:50:03.752 [DEBUG] [Thread-19291] [transport.py] [_log()] starting thread (client mode): 0x11f10d30
2025-11-12T16:50:03.752 [DEBUG] [Thread-19291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:50:03.773 [DEBUG] [Thread-19291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:50:03.773 [INFO] [Thread-19291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] client lang: <none>
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] server lang: <none>
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] kex follows: False
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:50:03.776 [DEBUG] [Thread-19291] [transport.py] [_log()] Compression: none
2025-11-12T16:50:03.777 [DEBUG] [Thread-19291] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:50:03.792 [DEBUG] [Thread-19291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:50:03.793 [DEBUG] [Thread-19291] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:50:03.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:50:03.794 [DEBUG] [Thread-19291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:50:03.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:50:03.796 [DEBUG] [Thread-19291] [transport.py] [_log()] userauth is OK
2025-11-12T16:50:03.796 [DEBUG] [Thread-19291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:50:03.796 [DEBUG] [Thread-19291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:50:03.796 [DEBUG] [Thread-19291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:50:03.796 [DEBUG] [Thread-19291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:50:03.821 [INFO] [Thread-19291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:50:03.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:50:05.206 [DEBUG] [Thread-19291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:50:05.206 [DEBUG] [Thread-19291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:50:05.207 [DEBUG] [Thread-19291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:50:05.248 [DEBUG] [Thread-19291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:50:05.248 [DEBUG] [Thread-19291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:50:05.251 [DEBUG] [Thread-19291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:50:05.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:50:05.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:50:05.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:50:05.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:50:05.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:50:05.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:50:05.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:50:05.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:50:05.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:50:05.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.617448 -999.00  +26.50  17.72     18   +0.80 1 2 1 1 1   887    0 25.57 6.31 ----- 17.7 17.7 277.8 31.7 29.1 -22.4 28.9 -22.2 29.3 -20.5 29.9 -20.8
2025-11-12T16:50:05.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:50:05.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:50:05.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.617448
2025-11-12T16:50:05.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:50:05.289 [DEBUG] [Thread-19291] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:50:05.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:50:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:50:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:50:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T16:50:05.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:49:46', tmtdew=31.72, humidity=11.91, cloud=0.0, wind=27.08, temperature=27.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:49:07.507', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:50:05.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:50:05.387 [DEBUG] [Thread-19294] [transport.py] [_log()] starting thread (client mode): 0x11f10f40
2025-11-12T16:50:05.387 [DEBUG] [Thread-19294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:50:05.407 [DEBUG] [Thread-19294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:50:05.407 [INFO] [Thread-19294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:50:05.415 [DEBUG] [Thread-19294] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:50:05.415 [DEBUG] [Thread-19294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:50:05.415 [DEBUG] [Thread-19294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:50:05.415 [DEBUG] [Thread-19294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:50:05.415 [DEBUG] [Thread-19294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] client lang: <none>
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] server lang: <none>
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] kex follows: False
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:50:05.416 [DEBUG] [Thread-19294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:50:05.417 [DEBUG] [Thread-19294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:50:05.417 [DEBUG] [Thread-19294] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:50:05.417 [DEBUG] [Thread-19294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:50:05.417 [DEBUG] [Thread-19294] [transport.py] [_log()] Compression: none
2025-11-12T16:50:05.417 [DEBUG] [Thread-19294] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:50:05.476 [DEBUG] [Thread-19294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:50:05.477 [DEBUG] [Thread-19294] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:50:05.478 [DEBUG] [Thread-19294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:50:05.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:50:05.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:50:05.536 [DEBUG] [Thread-19294] [transport.py] [_log()] userauth is OK
2025-11-12T16:50:05.536 [DEBUG] [Thread-19294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:50:05.536 [DEBUG] [Thread-19294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:50:05.536 [DEBUG] [Thread-19294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:50:05.536 [DEBUG] [Thread-19294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:50:05.557 [INFO] [Thread-19294] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:50:05.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:50:05.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:50:06.395 [DEBUG] [Thread-19294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:50:06.396 [DEBUG] [Thread-19294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:50:06.444 [DEBUG] [Thread-19294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:50:06.444 [DEBUG] [Thread-19294] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:50:06.453 [DEBUG] [Thread-19294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:50:06.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:50:06.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-11-12T16:50:06.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:50:06.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:50:06.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:50:06.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:50:06.487 [DEBUG] [Thread-19294] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:50:17.605 [DEBUG] [Thread-19296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:50:32.662 [DEBUG] [Thread-19297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:50:36.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:50:36.511 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:50:36.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-11-12T16:50:37.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 50, 18), 31.65, 11.96, 0.0, 29.06, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:50:37.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:50:18
2025-11-12T16:50:37.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:50:37.429 [DEBUG] [Thread-19298] [transport.py] [_log()] starting thread (client mode): 0x149a9fc0
2025-11-12T16:50:37.429 [DEBUG] [Thread-19298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:50:37.441 [DEBUG] [Thread-19298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:50:37.442 [INFO] [Thread-19298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] client lang: <none>
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] server lang: <none>
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] kex follows: False
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] Compression: none
2025-11-12T16:50:37.444 [DEBUG] [Thread-19298] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:50:37.460 [DEBUG] [Thread-19298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:50:37.460 [DEBUG] [Thread-19298] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:50:37.461 [DEBUG] [Thread-19298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:50:37.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:50:37.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:50:37.462 [DEBUG] [Thread-19298] [transport.py] [_log()] userauth is OK
2025-11-12T16:50:37.462 [DEBUG] [Thread-19298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:50:37.462 [DEBUG] [Thread-19298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:50:37.462 [DEBUG] [Thread-19298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:50:37.462 [DEBUG] [Thread-19298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:50:37.482 [INFO] [Thread-19298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:50:37.483 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:50:38.127 [DEBUG] [Thread-19298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:50:38.127 [DEBUG] [Thread-19298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:50:38.128 [DEBUG] [Thread-19298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:50:38.168 [DEBUG] [Thread-19298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:50:38.169 [DEBUG] [Thread-19298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:50:38.172 [DEBUG] [Thread-19298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:50:38.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:50:38.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:50:38.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:50:38.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:50:38.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:50:38.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:50:38.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:50:38.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:50:38.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:50:38.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.617795 -999.00  +26.70  27.84     18   +0.40 1 1 1 1 1   887    0 25.66 11.35 ----- 27.8 27.8 275.2 37.2 29.1 -23.5 29.0 -23.3 29.4 -25.0 30.0 -22.7
2025-11-12T16:50:38.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:50:38.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:50:38.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.617795
2025-11-12T16:50:38.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:50:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:50:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:50:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:50:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:50:38.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:50:18', tmtdew=31.65, humidity=11.96, cloud=0.0, wind=29.06, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:49:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:50:38.201 [DEBUG] [Thread-19298] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:50:38.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:50:38.298 [DEBUG] [Thread-19301] [transport.py] [_log()] starting thread (client mode): 0x17344070
2025-11-12T16:50:38.298 [DEBUG] [Thread-19301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:50:38.313 [DEBUG] [Thread-19301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:50:38.313 [INFO] [Thread-19301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:50:38.320 [DEBUG] [Thread-19301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:50:38.320 [DEBUG] [Thread-19301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] client lang: <none>
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] server lang: <none>
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] kex follows: False
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] Compression: none
2025-11-12T16:50:38.321 [DEBUG] [Thread-19301] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:50:38.379 [DEBUG] [Thread-19301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:50:38.380 [DEBUG] [Thread-19301] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:50:38.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:50:38.381 [DEBUG] [Thread-19301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:50:38.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:50:38.435 [DEBUG] [Thread-19301] [transport.py] [_log()] userauth is OK
2025-11-12T16:50:38.435 [DEBUG] [Thread-19301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:50:38.435 [DEBUG] [Thread-19301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:50:38.435 [DEBUG] [Thread-19301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:50:38.436 [DEBUG] [Thread-19301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:50:38.454 [INFO] [Thread-19301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:50:38.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:50:38.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:50:39.273 [DEBUG] [Thread-19301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:50:39.273 [DEBUG] [Thread-19301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:50:39.321 [DEBUG] [Thread-19301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:50:39.321 [DEBUG] [Thread-19301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:50:39.330 [DEBUG] [Thread-19301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:50:39.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:50:39.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-11-12T16:50:39.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-11-12T16:50:39.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:50:39.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:50:39.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:50:39.367 [DEBUG] [Thread-19301] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:50:41.477 [DEBUG] [Thread-19303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:50:47.705 [DEBUG] [Thread-19304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:50:48.130 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:50:48.131 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:51:02.753 [DEBUG] [Thread-19305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:51:09.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:51:09.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:51:09.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-11-12T16:51:10.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 50, 50), 31.7, 12.31, 0.0, 25.06, 27.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:51:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:50:50
2025-11-12T16:51:10.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:51:10.296 [DEBUG] [Thread-19306] [transport.py] [_log()] starting thread (client mode): 0x149a94b0
2025-11-12T16:51:10.296 [DEBUG] [Thread-19306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:51:10.316 [DEBUG] [Thread-19306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:51:10.317 [INFO] [Thread-19306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] client lang: <none>
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] server lang: <none>
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] kex follows: False
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:51:10.320 [DEBUG] [Thread-19306] [transport.py] [_log()] Compression: none
2025-11-12T16:51:10.321 [DEBUG] [Thread-19306] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:51:10.338 [DEBUG] [Thread-19306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:51:10.338 [DEBUG] [Thread-19306] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:51:10.339 [DEBUG] [Thread-19306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:51:10.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:51:10.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:51:10.341 [DEBUG] [Thread-19306] [transport.py] [_log()] userauth is OK
2025-11-12T16:51:10.341 [DEBUG] [Thread-19306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:51:10.341 [DEBUG] [Thread-19306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:51:10.341 [DEBUG] [Thread-19306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:51:10.341 [DEBUG] [Thread-19306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:51:10.360 [INFO] [Thread-19306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:51:10.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:51:10.988 [DEBUG] [Thread-19306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:51:10.989 [DEBUG] [Thread-19306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:51:10.989 [DEBUG] [Thread-19306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:51:11.030 [DEBUG] [Thread-19306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:51:11.030 [DEBUG] [Thread-19306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:51:11.033 [DEBUG] [Thread-19306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:51:11.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:51:11.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:51:11.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:51:11.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:51:11.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:51:11.059 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:51:11.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:51:11.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:51:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:51:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.618489 -999.00  +26.70  23.95     17   +0.10 1 1 1 1 1   887    0 26.08 24.27 ----- 23.9 23.9 273.2 29.9 29.3 -24.3 29.2 -23.9 29.7 -22.9 30.2 -23.3
2025-11-12T16:51:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:51:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:51:11.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.618489
2025-11-12T16:51:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:51:11.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:51:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:51:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:51:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:51:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:50:50', tmtdew=31.7, humidity=12.31, cloud=0.0, wind=25.06, temperature=27.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:50:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:51:11.062 [DEBUG] [Thread-19306] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:51:11.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:51:11.159 [DEBUG] [Thread-19309] [transport.py] [_log()] starting thread (client mode): 0x149a9330
2025-11-12T16:51:11.159 [DEBUG] [Thread-19309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:51:11.174 [DEBUG] [Thread-19309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:51:11.174 [INFO] [Thread-19309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:51:11.181 [DEBUG] [Thread-19309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:51:11.181 [DEBUG] [Thread-19309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:51:11.181 [DEBUG] [Thread-19309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] client lang: <none>
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] server lang: <none>
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] kex follows: False
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] Compression: none
2025-11-12T16:51:11.182 [DEBUG] [Thread-19309] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:51:11.241 [DEBUG] [Thread-19309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:51:11.241 [DEBUG] [Thread-19309] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:51:11.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:51:11.243 [DEBUG] [Thread-19309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:51:11.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:51:11.299 [DEBUG] [Thread-19309] [transport.py] [_log()] userauth is OK
2025-11-12T16:51:11.299 [DEBUG] [Thread-19309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:51:11.300 [DEBUG] [Thread-19309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:51:11.300 [DEBUG] [Thread-19309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:51:11.300 [DEBUG] [Thread-19309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:51:11.318 [INFO] [Thread-19309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:51:11.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:51:11.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:51:12.220 [DEBUG] [Thread-19309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:51:12.220 [DEBUG] [Thread-19309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:51:12.269 [DEBUG] [Thread-19309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:51:12.269 [DEBUG] [Thread-19309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:51:12.278 [DEBUG] [Thread-19309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:51:12.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:51:12.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:51:12.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-11-12T16:51:12.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:51:12.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:51:12.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:51:12.315 [DEBUG] [Thread-19309] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:51:17.793 [DEBUG] [Thread-19311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:51:32.846 [DEBUG] [Thread-19312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:51:41.511 [DEBUG] [Thread-19313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:51:42.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:51:42.338 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:51:42.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-11-12T16:51:42.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 51, 22), 31.88, 12.19, 0.0, 25.04, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:51:42.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:51:22
2025-11-12T16:51:43.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:51:43.253 [DEBUG] [Thread-19314] [transport.py] [_log()] starting thread (client mode): 0x1737ee00
2025-11-12T16:51:43.253 [DEBUG] [Thread-19314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:51:43.263 [DEBUG] [Thread-19314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:51:43.264 [INFO] [Thread-19314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] client lang: <none>
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] server lang: <none>
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] kex follows: False
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] Compression: none
2025-11-12T16:51:43.265 [DEBUG] [Thread-19314] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:51:43.274 [DEBUG] [Thread-19314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:51:43.274 [DEBUG] [Thread-19314] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:51:43.275 [DEBUG] [Thread-19314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:51:43.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:51:43.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:51:43.275 [DEBUG] [Thread-19314] [transport.py] [_log()] userauth is OK
2025-11-12T16:51:43.276 [DEBUG] [Thread-19314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:51:43.276 [DEBUG] [Thread-19314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:51:43.276 [DEBUG] [Thread-19314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:51:43.276 [DEBUG] [Thread-19314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:51:43.294 [INFO] [Thread-19314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:51:43.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:51:43.857 [DEBUG] [Thread-19314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:51:43.857 [DEBUG] [Thread-19314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:51:43.858 [DEBUG] [Thread-19314] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:51:43.897 [DEBUG] [Thread-19314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:51:43.897 [DEBUG] [Thread-19314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:51:43.900 [DEBUG] [Thread-19314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:51:43.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:51:43.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:51:43.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:51:43.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:51:43.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:51:43.920 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:51:43.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:51:43.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:51:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:51:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.618837 -999.00  +26.60  19.35     17   +0.10 1 1 1 1 1   887    0 26.11 27.30 ----- 19.4 19.4 280.8 36.2 -999.0 -999.0 29.2 -24.0 29.7 -26.5 30.3 -23.1
2025-11-12T16:51:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:51:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:51:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.618837
2025-11-12T16:51:43.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:51:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:51:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:51:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:51:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:51:43.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:51:22', tmtdew=31.88, humidity=12.19, cloud=0.0, wind=25.04, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:51:07.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:51:43.922 [DEBUG] [Thread-19314] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:51:44.007 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:51:44.020 [DEBUG] [Thread-19317] [transport.py] [_log()] starting thread (client mode): 0x11f10d00
2025-11-12T16:51:44.020 [DEBUG] [Thread-19317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:51:44.035 [DEBUG] [Thread-19317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:51:44.036 [INFO] [Thread-19317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:51:44.043 [DEBUG] [Thread-19317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:51:44.043 [DEBUG] [Thread-19317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:51:44.043 [DEBUG] [Thread-19317] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:51:44.043 [DEBUG] [Thread-19317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:51:44.043 [DEBUG] [Thread-19317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:51:44.043 [DEBUG] [Thread-19317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:51:44.043 [DEBUG] [Thread-19317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] client lang: <none>
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] server lang: <none>
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] kex follows: False
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] Compression: none
2025-11-12T16:51:44.044 [DEBUG] [Thread-19317] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:51:44.108 [DEBUG] [Thread-19317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:51:44.108 [DEBUG] [Thread-19317] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:51:44.109 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:51:44.109 [DEBUG] [Thread-19317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:51:44.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:51:44.167 [DEBUG] [Thread-19317] [transport.py] [_log()] userauth is OK
2025-11-12T16:51:44.167 [DEBUG] [Thread-19317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:51:44.167 [DEBUG] [Thread-19317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:51:44.167 [DEBUG] [Thread-19317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:51:44.167 [DEBUG] [Thread-19317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:51:44.187 [INFO] [Thread-19317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:51:44.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:51:44.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:51:45.017 [DEBUG] [Thread-19317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:51:45.017 [DEBUG] [Thread-19317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:51:45.066 [DEBUG] [Thread-19317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:51:45.066 [DEBUG] [Thread-19317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:51:45.076 [DEBUG] [Thread-19317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:51:45.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:51:45.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-11-12T16:51:45.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-11-12T16:51:45.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:51:45.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:51:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:51:45.117 [DEBUG] [Thread-19317] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:51:47.882 [DEBUG] [Thread-19319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:51:48.274 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:51:48.276 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:52:02.936 [DEBUG] [Thread-19320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:52:15.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:52:15.138 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:52:15.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-11-12T16:52:15.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 51, 54), 32.38, 11.58, 0.0, 25.27, 27.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:52:15.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:51:54
2025-11-12T16:52:15.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:52:16.048 [DEBUG] [Thread-19321] [transport.py] [_log()] starting thread (client mode): 0x17362e30
2025-11-12T16:52:16.049 [DEBUG] [Thread-19321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:52:16.069 [DEBUG] [Thread-19321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:52:16.069 [INFO] [Thread-19321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:52:16.072 [DEBUG] [Thread-19321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:52:16.072 [DEBUG] [Thread-19321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:52:16.072 [DEBUG] [Thread-19321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:52:16.072 [DEBUG] [Thread-19321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:52:16.072 [DEBUG] [Thread-19321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] client lang: <none>
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] server lang: <none>
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] kex follows: False
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] Compression: none
2025-11-12T16:52:16.073 [DEBUG] [Thread-19321] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:52:16.091 [DEBUG] [Thread-19321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:52:16.091 [DEBUG] [Thread-19321] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:52:16.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:52:16.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:52:16.093 [DEBUG] [Thread-19321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:52:16.093 [DEBUG] [Thread-19321] [transport.py] [_log()] userauth is OK
2025-11-12T16:52:16.094 [DEBUG] [Thread-19321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:52:16.094 [DEBUG] [Thread-19321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:52:16.094 [DEBUG] [Thread-19321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:52:16.094 [DEBUG] [Thread-19321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:52:16.117 [INFO] [Thread-19321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:52:16.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:52:16.741 [DEBUG] [Thread-19321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:52:16.741 [DEBUG] [Thread-19321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:52:16.742 [DEBUG] [Thread-19321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:52:16.782 [DEBUG] [Thread-19321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:52:16.782 [DEBUG] [Thread-19321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:52:16.785 [DEBUG] [Thread-19321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:52:16.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:52:16.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:52:16.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:52:16.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:52:16.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:52:16.805 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:52:16.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:52:16.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:52:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:52:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.619184 -999.00  +26.70  18.25     17   +0.00 1 1 1 1 1   887    0 26.55 33.07 ----- 18.2 18.2 264.4 28.3 29.4 -23.9 29.3 -24.1 29.8 -25.8 30.3 -23.2
2025-11-12T16:52:16.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:52:16.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:52:16.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.619184
2025-11-12T16:52:16.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:52:16.807 [DEBUG] [Thread-19321] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:52:16.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:52:16.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:52:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:52:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:52:16.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:51:54', tmtdew=32.38, humidity=11.58, cloud=0.0, wind=25.27, temperature=27.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:51:37.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:52: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-11-12T16:52:16.904 [DEBUG] [Thread-19324] [transport.py] [_log()] starting thread (client mode): 0x17363280
2025-11-12T16:52:16.904 [DEBUG] [Thread-19324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:52:16.918 [DEBUG] [Thread-19324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:52:16.918 [INFO] [Thread-19324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:52:16.926 [DEBUG] [Thread-19324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:52:16.926 [DEBUG] [Thread-19324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:52:16.926 [DEBUG] [Thread-19324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:52:16.926 [DEBUG] [Thread-19324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:52:16.926 [DEBUG] [Thread-19324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:52:16.926 [DEBUG] [Thread-19324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:52:16.926 [DEBUG] [Thread-19324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] client lang: <none>
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] server lang: <none>
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] kex follows: False
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] Compression: none
2025-11-12T16:52:16.927 [DEBUG] [Thread-19324] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:52:16.982 [DEBUG] [Thread-19324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:52:16.982 [DEBUG] [Thread-19324] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:52:16.983 [DEBUG] [Thread-19324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:52:16.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:52:16.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:52:17.038 [DEBUG] [Thread-19324] [transport.py] [_log()] userauth is OK
2025-11-12T16:52:17.038 [DEBUG] [Thread-19324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:52:17.039 [DEBUG] [Thread-19324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:52:17.039 [DEBUG] [Thread-19324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:52:17.039 [DEBUG] [Thread-19324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:52:17.056 [INFO] [Thread-19324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:52:17.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:52:17.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:52:17.896 [DEBUG] [Thread-19324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:52:17.896 [DEBUG] [Thread-19324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:52:17.944 [DEBUG] [Thread-19324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:52:17.944 [DEBUG] [Thread-19324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:52:17.953 [DEBUG] [Thread-19324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:52:17.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:52:17.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-11-12T16:52:17.969 [DEBUG] [Thread-19326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:52:17.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-11-12T16:52:17.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:52:17.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:52:17.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:52:17.987 [DEBUG] [Thread-19324] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:52:33.016 [DEBUG] [Thread-19327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:52:41.563 [DEBUG] [Thread-19328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:52:48.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:52:48.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:52:48.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-11-12T16:52:48.050 [DEBUG] [Thread-19329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:52:48.417 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:52:48.418 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:52:48.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 52, 26), 32.35, 11.61, 0.0, 28.09, 27.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:52:48.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:52:26
2025-11-12T16:52:48.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:52:48.948 [DEBUG] [Thread-19330] [transport.py] [_log()] starting thread (client mode): 0x1737eec0
2025-11-12T16:52:48.948 [DEBUG] [Thread-19330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:52:48.967 [DEBUG] [Thread-19330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:52:48.967 [INFO] [Thread-19330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:52:48.969 [DEBUG] [Thread-19330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:52:48.969 [DEBUG] [Thread-19330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] client lang: <none>
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] server lang: <none>
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] kex follows: False
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] Compression: none
2025-11-12T16:52:48.970 [DEBUG] [Thread-19330] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:52:48.984 [DEBUG] [Thread-19330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:52:48.984 [DEBUG] [Thread-19330] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:52:48.984 [DEBUG] [Thread-19330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:52:48.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:52:48.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:52:48.991 [DEBUG] [Thread-19330] [transport.py] [_log()] userauth is OK
2025-11-12T16:52:48.991 [DEBUG] [Thread-19330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:52:48.991 [DEBUG] [Thread-19330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:52:48.991 [DEBUG] [Thread-19330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:52:48.991 [DEBUG] [Thread-19330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:52:49.012 [INFO] [Thread-19330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:52:49.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:52:49.678 [DEBUG] [Thread-19330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:52:49.678 [DEBUG] [Thread-19330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:52:49.678 [DEBUG] [Thread-19330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:52:49.719 [DEBUG] [Thread-19330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:52:49.719 [DEBUG] [Thread-19330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:52:49.722 [DEBUG] [Thread-19330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:52:49.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:52:49.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:52:49.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:52:49.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:52:49.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:52:49.741 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:52:49.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.619531 -999.00  +27.00  33.47     17   +0.00 1 1 2 1 1   887    0 26.79 37.33 ----- 33.5 33.5 273.1 38.5 29.5 -25.1 29.4 -24.4 29.9 -23.3 30.5 -23.6
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.619531
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:52:49.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:52:26', tmtdew=32.35, humidity=11.61, cloud=0.0, wind=28.09, temperature=27.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:52:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:52:49.742 [DEBUG] [Thread-19330] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:52:49.816 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:52:49.827 [DEBUG] [Thread-19333] [transport.py] [_log()] starting thread (client mode): 0x11f11a80
2025-11-12T16:52:49.828 [DEBUG] [Thread-19333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:52:49.842 [DEBUG] [Thread-19333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:52:49.842 [INFO] [Thread-19333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:52:49.849 [DEBUG] [Thread-19333] [transport.py] [_log()] client lang: <none>
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] server lang: <none>
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] kex follows: False
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] Compression: none
2025-11-12T16:52:49.850 [DEBUG] [Thread-19333] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:52:49.905 [DEBUG] [Thread-19333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:52:49.906 [DEBUG] [Thread-19333] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:52:49.906 [DEBUG] [Thread-19333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:52:49.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:52:49.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:52:49.962 [DEBUG] [Thread-19333] [transport.py] [_log()] userauth is OK
2025-11-12T16:52:49.962 [DEBUG] [Thread-19333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:52:49.962 [DEBUG] [Thread-19333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:52:49.962 [DEBUG] [Thread-19333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:52:49.963 [DEBUG] [Thread-19333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:52:49.977 [INFO] [Thread-19333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:52:49.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:52:49.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:52:50.854 [DEBUG] [Thread-19333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:52:50.854 [DEBUG] [Thread-19333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:52:50.903 [DEBUG] [Thread-19333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:52:50.903 [DEBUG] [Thread-19333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:52:50.912 [DEBUG] [Thread-19333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:52:50.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:52:50.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')
2025-11-12T16:52:50.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-11-12T16:52:50.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:52:50.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:52:50.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:52:50.949 [DEBUG] [Thread-19333] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:53:03.081 [DEBUG] [Thread-19335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:53:18.133 [DEBUG] [Thread-19336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:53:20.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:53:20.962 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:53:20.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-11-12T16:53:21.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 52, 58), 33.11, 10.93, 0.0, 35.29, 28.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:53:21.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:52:58
2025-11-12T16:53:21.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:53:21.869 [DEBUG] [Thread-19337] [transport.py] [_log()] starting thread (client mode): 0x11f11180
2025-11-12T16:53:21.869 [DEBUG] [Thread-19337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:53:21.890 [DEBUG] [Thread-19337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:53:21.890 [INFO] [Thread-19337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] client lang: <none>
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] server lang: <none>
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] kex follows: False
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] Compression: none
2025-11-12T16:53:21.893 [DEBUG] [Thread-19337] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:53:21.910 [DEBUG] [Thread-19337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:53:21.911 [DEBUG] [Thread-19337] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:53:21.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:53:21.912 [DEBUG] [Thread-19337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:53:21.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:53:21.914 [DEBUG] [Thread-19337] [transport.py] [_log()] userauth is OK
2025-11-12T16:53:21.915 [DEBUG] [Thread-19337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:53:21.915 [DEBUG] [Thread-19337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:53:21.915 [DEBUG] [Thread-19337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:53:21.915 [DEBUG] [Thread-19337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:53:21.936 [INFO] [Thread-19337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:53:21.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:53:22.568 [DEBUG] [Thread-19337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:53:22.569 [DEBUG] [Thread-19337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:53:22.569 [DEBUG] [Thread-19337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:53:22.610 [DEBUG] [Thread-19337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:53:22.610 [DEBUG] [Thread-19337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:53:22.613 [DEBUG] [Thread-19337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:53:22.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:53:22.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:53:22.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:53:22.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:53:22.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:53:22.639 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:53:22.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:53:22.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:53:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:53:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.619879 -999.00  +26.70  27.09     17   +0.00 1 1 1 1 1   887    0 26.82 38.28 ----- 27.1 27.1 279.0 40.8 29.4 -25.2 29.3 -25.0 29.6 -26.5 30.3 -24.3
2025-11-12T16:53:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:53:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:53:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.619879
2025-11-12T16:53:22.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:53:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:53:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:53:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:53:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:53:22.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:52:58', tmtdew=33.11, humidity=10.93, cloud=0.0, wind=35.29, temperature=28.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:52:37.546', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:53:22.642 [DEBUG] [Thread-19337] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:53:22.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:53:22.746 [DEBUG] [Thread-19340] [transport.py] [_log()] starting thread (client mode): 0x17398e50
2025-11-12T16:53:22.746 [DEBUG] [Thread-19340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:53:22.761 [DEBUG] [Thread-19340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:53:22.761 [INFO] [Thread-19340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] client lang: <none>
2025-11-12T16:53:22.768 [DEBUG] [Thread-19340] [transport.py] [_log()] server lang: <none>
2025-11-12T16:53:22.769 [DEBUG] [Thread-19340] [transport.py] [_log()] kex follows: False
2025-11-12T16:53:22.769 [DEBUG] [Thread-19340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:53:22.769 [DEBUG] [Thread-19340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:53:22.769 [DEBUG] [Thread-19340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:53:22.769 [DEBUG] [Thread-19340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:53:22.769 [DEBUG] [Thread-19340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:53:22.769 [DEBUG] [Thread-19340] [transport.py] [_log()] Compression: none
2025-11-12T16:53:22.769 [DEBUG] [Thread-19340] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:53:22.827 [DEBUG] [Thread-19340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:53:22.828 [DEBUG] [Thread-19340] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:53:22.828 [DEBUG] [Thread-19340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:53:22.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:53:22.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:53:22.887 [DEBUG] [Thread-19340] [transport.py] [_log()] userauth is OK
2025-11-12T16:53:22.888 [DEBUG] [Thread-19340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:53:22.888 [DEBUG] [Thread-19340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:53:22.888 [DEBUG] [Thread-19340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:53:22.888 [DEBUG] [Thread-19340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:53:22.906 [INFO] [Thread-19340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:53:22.907 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:53:22.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:53:23.767 [DEBUG] [Thread-19340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:53:23.767 [DEBUG] [Thread-19340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:53:23.815 [DEBUG] [Thread-19340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:53:23.815 [DEBUG] [Thread-19340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:53:23.823 [DEBUG] [Thread-19340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:53:23.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:53:23.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T16:53:23.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:53:23.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:53:23.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:53:23.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:53:23.855 [DEBUG] [Thread-19340] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:53:33.162 [DEBUG] [Thread-19342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:53:41.608 [DEBUG] [Thread-19343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:53:48.207 [DEBUG] [Thread-19344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:53:48.558 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:53:48.560 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:53:53.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:53:53.855 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:53:53.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:53:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 53, 30), 32.78, 11.19, 0.0, 31.64, 28.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:53:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:53:30
2025-11-12T16:53:54.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:53:54.750 [DEBUG] [Thread-19345] [transport.py] [_log()] starting thread (client mode): 0x149a8100
2025-11-12T16:53:54.750 [DEBUG] [Thread-19345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:53:54.766 [DEBUG] [Thread-19345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:53:54.766 [INFO] [Thread-19345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:53:54.769 [DEBUG] [Thread-19345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:53:54.769 [DEBUG] [Thread-19345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:53:54.769 [DEBUG] [Thread-19345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:53:54.769 [DEBUG] [Thread-19345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:53:54.769 [DEBUG] [Thread-19345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:53:54.769 [DEBUG] [Thread-19345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:53:54.769 [DEBUG] [Thread-19345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:53:54.769 [DEBUG] [Thread-19345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] client lang: <none>
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] server lang: <none>
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] kex follows: False
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] Compression: none
2025-11-12T16:53:54.770 [DEBUG] [Thread-19345] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:53:54.788 [DEBUG] [Thread-19345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:53:54.788 [DEBUG] [Thread-19345] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:53:54.789 [DEBUG] [Thread-19345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:53:54.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:53:54.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:53:54.790 [DEBUG] [Thread-19345] [transport.py] [_log()] userauth is OK
2025-11-12T16:53:54.791 [DEBUG] [Thread-19345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:53:54.791 [DEBUG] [Thread-19345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:53:54.791 [DEBUG] [Thread-19345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:53:54.791 [DEBUG] [Thread-19345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:53:54.815 [INFO] [Thread-19345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:53:54.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:53:55.554 [DEBUG] [Thread-19345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:53:55.554 [DEBUG] [Thread-19345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:53:55.554 [DEBUG] [Thread-19345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:53:55.594 [DEBUG] [Thread-19345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:53:55.595 [DEBUG] [Thread-19345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:53:55.597 [DEBUG] [Thread-19345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:53:55.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:53:55.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:53:55.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:53:55.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:53:55.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:53:55.620 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:53:55.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:53:55.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:53:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:53:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.620225 -999.00  +26.80  34.66     17   +0.00 1 1 2 1 1   887    0 26.48 39.78 ----- 34.7 34.7 273.6 45.0 29.4 -24.9 29.3 -24.9 29.6 -24.9 30.2 -24.4
2025-11-12T16:53:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:53:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:53:55.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.620225
2025-11-12T16:53:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:53:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:53:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:53:55.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:53:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:53:55.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:53:30', tmtdew=32.78, humidity=11.19, cloud=0.0, wind=31.64, temperature=28.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:53:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:53:55.623 [DEBUG] [Thread-19345] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:53:55.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:53:55.733 [DEBUG] [Thread-19348] [transport.py] [_log()] starting thread (client mode): 0x17344250
2025-11-12T16:53:55.733 [DEBUG] [Thread-19348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:53:55.748 [DEBUG] [Thread-19348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:53:55.749 [INFO] [Thread-19348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] client lang: <none>
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] server lang: <none>
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] kex follows: False
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] Compression: none
2025-11-12T16:53:55.758 [DEBUG] [Thread-19348] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:53:55.813 [DEBUG] [Thread-19348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:53:55.813 [DEBUG] [Thread-19348] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:53:55.813 [DEBUG] [Thread-19348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:53:55.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:53:55.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:53:55.871 [DEBUG] [Thread-19348] [transport.py] [_log()] userauth is OK
2025-11-12T16:53:55.871 [DEBUG] [Thread-19348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:53:55.871 [DEBUG] [Thread-19348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:53:55.871 [DEBUG] [Thread-19348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:53:55.871 [DEBUG] [Thread-19348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:53:55.890 [INFO] [Thread-19348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:53:55.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:53:55.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:53:56.752 [DEBUG] [Thread-19348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:53:56.753 [DEBUG] [Thread-19348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:53:56.800 [DEBUG] [Thread-19348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:53:56.801 [DEBUG] [Thread-19348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:53:56.810 [DEBUG] [Thread-19348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:53:56.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:53:56.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')
2025-11-12T16:53:56.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-11-12T16:53:56.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:53:56.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:53:56.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:53:56.844 [DEBUG] [Thread-19348] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:54:03.241 [DEBUG] [Thread-19350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:54:18.290 [DEBUG] [Thread-19351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:54:26.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:54:26.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:54:26.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:54:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 54, 2), 32.65, 11.29, 0.0, 35.04, 28.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:54:27.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:54:02
2025-11-12T16:54:27.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:54:27.768 [DEBUG] [Thread-19352] [transport.py] [_log()] starting thread (client mode): 0x17345ae0
2025-11-12T16:54:27.769 [DEBUG] [Thread-19352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:54:27.788 [DEBUG] [Thread-19352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:54:27.788 [INFO] [Thread-19352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:54:27.791 [DEBUG] [Thread-19352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] client lang: <none>
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] server lang: <none>
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] kex follows: False
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] Compression: none
2025-11-12T16:54:27.792 [DEBUG] [Thread-19352] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:54:27.809 [DEBUG] [Thread-19352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:54:27.809 [DEBUG] [Thread-19352] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:54:27.818 [DEBUG] [Thread-19352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:54:27.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:54:27.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:54:27.821 [DEBUG] [Thread-19352] [transport.py] [_log()] userauth is OK
2025-11-12T16:54:27.821 [DEBUG] [Thread-19352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:54:27.821 [DEBUG] [Thread-19352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:54:27.821 [DEBUG] [Thread-19352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:54:27.821 [DEBUG] [Thread-19352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:54:27.844 [INFO] [Thread-19352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:54:27.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:54:28.452 [DEBUG] [Thread-19352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:54:28.452 [DEBUG] [Thread-19352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:54:28.452 [DEBUG] [Thread-19352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:54:28.492 [DEBUG] [Thread-19352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:54:28.493 [DEBUG] [Thread-19352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:54:28.495 [DEBUG] [Thread-19352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:54:28.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:54:28.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:54:28.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:54:28.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:54:28.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:54:28.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:54:28.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.620573 -999.00  +27.10  23.96     17   +0.00 1 1 1 1 1   887    0 27.04 43.09 ----- 24.0 24.0 275.2 44.9 29.4 -24.9 29.3 -24.6 29.7 -24.3 30.2 -24.6
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.620573
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:54:28.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:54:02', tmtdew=32.65, humidity=11.29, cloud=0.0, wind=35.04, temperature=28.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:53:37.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:54:28.515 [DEBUG] [Thread-19352] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:54:28.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:54:28.611 [DEBUG] [Thread-19355] [transport.py] [_log()] starting thread (client mode): 0x11f13190
2025-11-12T16:54:28.612 [DEBUG] [Thread-19355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:54:28.628 [DEBUG] [Thread-19355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:54:28.628 [INFO] [Thread-19355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:54:28.637 [DEBUG] [Thread-19355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:54:28.637 [DEBUG] [Thread-19355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:54:28.637 [DEBUG] [Thread-19355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] client lang: <none>
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] server lang: <none>
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] kex follows: False
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:54:28.638 [DEBUG] [Thread-19355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:54:28.639 [DEBUG] [Thread-19355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:54:28.639 [DEBUG] [Thread-19355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:54:28.639 [DEBUG] [Thread-19355] [transport.py] [_log()] Compression: none
2025-11-12T16:54:28.639 [DEBUG] [Thread-19355] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:54:28.695 [DEBUG] [Thread-19355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:54:28.695 [DEBUG] [Thread-19355] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:54:28.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:54:28.696 [DEBUG] [Thread-19355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:54:28.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:54:28.751 [DEBUG] [Thread-19355] [transport.py] [_log()] userauth is OK
2025-11-12T16:54:28.751 [DEBUG] [Thread-19355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:54:28.751 [DEBUG] [Thread-19355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:54:28.751 [DEBUG] [Thread-19355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:54:28.751 [DEBUG] [Thread-19355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:54:28.770 [INFO] [Thread-19355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:54:28.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:54:28.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:54:29.676 [DEBUG] [Thread-19355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:54:29.676 [DEBUG] [Thread-19355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:54:29.729 [DEBUG] [Thread-19355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:54:29.730 [DEBUG] [Thread-19355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:54:29.738 [DEBUG] [Thread-19355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:54:29.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:54:29.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-11-12T16:54:29.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-11-12T16:54:29.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:54:29.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:54:29.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:54:29.772 [DEBUG] [Thread-19355] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:54:33.326 [DEBUG] [Thread-19357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:54:41.655 [DEBUG] [Thread-19358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:54:48.375 [DEBUG] [Thread-19359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:54:48.703 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:54:48.704 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:54:59.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:54:59.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:54:59.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-11-12T16:55:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 54, 34), 32.02, 11.71, 0.0, 35.22, 27.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:55:00.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:54:34
2025-11-12T16:55:00.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:55:00.701 [DEBUG] [Thread-19360] [transport.py] [_log()] starting thread (client mode): 0x17345cc0
2025-11-12T16:55:00.701 [DEBUG] [Thread-19360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:55:00.722 [DEBUG] [Thread-19360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:55:00.722 [INFO] [Thread-19360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:55:00.725 [DEBUG] [Thread-19360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:55:00.725 [DEBUG] [Thread-19360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:55:00.725 [DEBUG] [Thread-19360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:55:00.725 [DEBUG] [Thread-19360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:55:00.725 [DEBUG] [Thread-19360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:55:00.725 [DEBUG] [Thread-19360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:55:00.725 [DEBUG] [Thread-19360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] client lang: <none>
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] server lang: <none>
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] kex follows: False
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] Compression: none
2025-11-12T16:55:00.726 [DEBUG] [Thread-19360] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:55:00.745 [DEBUG] [Thread-19360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:55:00.746 [DEBUG] [Thread-19360] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:55:00.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:55:00.747 [DEBUG] [Thread-19360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:55:00.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:55:00.749 [DEBUG] [Thread-19360] [transport.py] [_log()] userauth is OK
2025-11-12T16:55:00.749 [DEBUG] [Thread-19360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:55:00.749 [DEBUG] [Thread-19360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:55:00.749 [DEBUG] [Thread-19360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:55:00.749 [DEBUG] [Thread-19360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:55:00.772 [INFO] [Thread-19360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:55:00.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:55:01.514 [DEBUG] [Thread-19360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:55:01.514 [DEBUG] [Thread-19360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:55:01.515 [DEBUG] [Thread-19360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:55:01.555 [DEBUG] [Thread-19360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:55:01.555 [DEBUG] [Thread-19360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:55:01.558 [DEBUG] [Thread-19360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:55:01.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:55:01.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:55:01.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:55:01.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:55:01.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:55:01.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:55:01.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:55:01.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:55:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:55:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.620920 -999.00  +27.10  41.79     17   +0.00 1 1 2 1 1   887    0 27.12 48.61 ----- 41.8 41.8 268.0 49.0 29.4 -25.8 29.3 -25.3 29.6 -24.4 30.2 -25.3
2025-11-12T16:55:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:55:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:55:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.620920
2025-11-12T16:55:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:55:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:55:01.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:55:01.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:55:01.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:55:01.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:54:34', tmtdew=32.02, humidity=11.71, cloud=0.0, wind=35.22, temperature=27.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:54:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:55:01.581 [DEBUG] [Thread-19360] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:55:01.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:55:01.689 [DEBUG] [Thread-19363] [transport.py] [_log()] starting thread (client mode): 0x1737de40
2025-11-12T16:55:01.689 [DEBUG] [Thread-19363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:55:01.703 [DEBUG] [Thread-19363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:55:01.703 [INFO] [Thread-19363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:55:01.710 [DEBUG] [Thread-19363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:55:01.710 [DEBUG] [Thread-19363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] client lang: <none>
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] server lang: <none>
2025-11-12T16:55:01.711 [DEBUG] [Thread-19363] [transport.py] [_log()] kex follows: False
2025-11-12T16:55:01.712 [DEBUG] [Thread-19363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:55:01.712 [DEBUG] [Thread-19363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:55:01.712 [DEBUG] [Thread-19363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:55:01.712 [DEBUG] [Thread-19363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:55:01.712 [DEBUG] [Thread-19363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:55:01.712 [DEBUG] [Thread-19363] [transport.py] [_log()] Compression: none
2025-11-12T16:55:01.712 [DEBUG] [Thread-19363] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:55:01.771 [DEBUG] [Thread-19363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:55:01.772 [DEBUG] [Thread-19363] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:55:01.773 [DEBUG] [Thread-19363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:55:01.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:55:01.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:55:01.831 [DEBUG] [Thread-19363] [transport.py] [_log()] userauth is OK
2025-11-12T16:55:01.831 [DEBUG] [Thread-19363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:55:01.831 [DEBUG] [Thread-19363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:55:01.832 [DEBUG] [Thread-19363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:55:01.832 [DEBUG] [Thread-19363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:55:01.850 [INFO] [Thread-19363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:55:01.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:55:01.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:55:02.770 [DEBUG] [Thread-19363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:55:02.770 [DEBUG] [Thread-19363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:55:02.817 [DEBUG] [Thread-19363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:55:02.818 [DEBUG] [Thread-19363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:55:02.827 [DEBUG] [Thread-19363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:55:02.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:55:02.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-11-12T16:55:02.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-11-12T16:55:02.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:55:02.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:55:02.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:55:02.863 [DEBUG] [Thread-19363] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:55:03.415 [DEBUG] [Thread-19365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:55:18.467 [DEBUG] [Thread-19366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:55:32.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:55:32.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:55:32.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T16:55:33.499 [DEBUG] [Thread-19367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:55:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 55, 6), 32.08, 11.63, 0.0, 36.66, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:55:33.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:55:06
2025-11-12T16:55:33.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:55:33.791 [DEBUG] [Thread-19368] [transport.py] [_log()] starting thread (client mode): 0x149dae60
2025-11-12T16:55:33.792 [DEBUG] [Thread-19368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:55:33.812 [DEBUG] [Thread-19368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:55:33.812 [INFO] [Thread-19368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:55:33.815 [DEBUG] [Thread-19368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:55:33.815 [DEBUG] [Thread-19368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] client lang: <none>
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] server lang: <none>
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] kex follows: False
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] Compression: none
2025-11-12T16:55:33.816 [DEBUG] [Thread-19368] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:55:33.834 [DEBUG] [Thread-19368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:55:33.835 [DEBUG] [Thread-19368] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:55:33.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:55:33.836 [DEBUG] [Thread-19368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:55:33.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:55:33.838 [DEBUG] [Thread-19368] [transport.py] [_log()] userauth is OK
2025-11-12T16:55:33.838 [DEBUG] [Thread-19368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:55:33.838 [DEBUG] [Thread-19368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:55:33.838 [DEBUG] [Thread-19368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:55:33.839 [DEBUG] [Thread-19368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:55:33.864 [INFO] [Thread-19368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:55:33.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:55:34.463 [DEBUG] [Thread-19368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:55:34.463 [DEBUG] [Thread-19368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:55:34.464 [DEBUG] [Thread-19368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:55:34.504 [DEBUG] [Thread-19368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:55:34.504 [DEBUG] [Thread-19368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:55:34.507 [DEBUG] [Thread-19368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:55:34.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:55:34.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:55:34.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:55:34.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:55:34.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:55:34.533 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:55:34.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:55:34.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:55:34.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:55:34.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.621267 -999.00  +26.20  37.32     17   -0.20 1 1 2 1 1   887    0 27.39 51.34 ----- 37.3 37.3 273.0 43.1 29.2 -26.5 29.2 -25.8 29.2 -30.5 30.0 -25.4
2025-11-12T16:55:34.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:55:34.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:55:34.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.621267
2025-11-12T16:55:34.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:55:34.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:55:34.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:55:34.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:55:34.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:55:34.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:55:06', tmtdew=32.08, humidity=11.63, cloud=0.0, wind=36.66, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:54:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:55:34.536 [DEBUG] [Thread-19368] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:55:34.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:55:41.700 [DEBUG] [Thread-19371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:55:48.537 [DEBUG] [Thread-19372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:55:48.856 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:55:48.858 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:56:03.585 [DEBUG] [Thread-19373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:56:18.622 [DEBUG] [Thread-19374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:56:33.659 [DEBUG] [Thread-19375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:56:41.734 [DEBUG] [Thread-19376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:56:48.690 [DEBUG] [Thread-19377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:56:49.010 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:56:49.011 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:57:03.728 [DEBUG] [Thread-19378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:57:18.761 [DEBUG] [Thread-19379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:57:33.796 [DEBUG] [Thread-19380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:57:41.797 [DEBUG] [Thread-19381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:57:47.195 [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-11-12T16:57:48.835 [DEBUG] [Thread-19382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:57:49.150 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:57:49.151 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:58:03.865 [DEBUG] [Thread-19383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:58:17.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:58:17.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:58:17.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-11-12T16:58:17.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 57, 46), 33.09, 11.11, 0.0, 25.27, 27.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:58:17.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:57:46
2025-11-12T16:58:17.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:58:18.128 [DEBUG] [Thread-19384] [transport.py] [_log()] starting thread (client mode): 0x17345840
2025-11-12T16:58:18.128 [DEBUG] [Thread-19384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:58:18.149 [DEBUG] [Thread-19384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:58:18.149 [INFO] [Thread-19384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] client lang: <none>
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] server lang: <none>
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] kex follows: False
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:58:18.152 [DEBUG] [Thread-19384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:58:18.153 [DEBUG] [Thread-19384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:58:18.153 [DEBUG] [Thread-19384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:58:18.153 [DEBUG] [Thread-19384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:58:18.153 [DEBUG] [Thread-19384] [transport.py] [_log()] Compression: none
2025-11-12T16:58:18.153 [DEBUG] [Thread-19384] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:58:18.170 [DEBUG] [Thread-19384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:58:18.171 [DEBUG] [Thread-19384] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:58:18.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:58:18.172 [DEBUG] [Thread-19384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:58:18.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:58:18.174 [DEBUG] [Thread-19384] [transport.py] [_log()] userauth is OK
2025-11-12T16:58:18.174 [DEBUG] [Thread-19384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:58:18.174 [DEBUG] [Thread-19384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:58:18.174 [DEBUG] [Thread-19384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:58:18.174 [DEBUG] [Thread-19384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:58:18.199 [INFO] [Thread-19384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:58:18.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:58:18.903 [DEBUG] [Thread-19386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:58:18.961 [DEBUG] [Thread-19384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:58:18.961 [DEBUG] [Thread-19384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:58:18.961 [DEBUG] [Thread-19384] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:58:19.002 [DEBUG] [Thread-19384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:58:19.002 [DEBUG] [Thread-19384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:58:19.005 [DEBUG] [Thread-19384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:58:19.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:58:19.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:58:19.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:58:19.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:58:19.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:58:19.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:58:19.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:58:19.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:58:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:58:19.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.623350 -999.00  +26.20  26.96     17   -0.70 1 1 1 1 1   887    0 28.15 66.39 ----- 27.0 27.0 280.8 38.2 29.1 -28.0 29.1 -26.2 29.3 -27.1 29.9 -26.1
2025-11-12T16:58:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:58:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:58:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.623350
2025-11-12T16:58:19.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:58:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:58:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:58:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:58:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:58:19.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:57:46', tmtdew=33.09, humidity=11.11, cloud=0.0, wind=25.27, temperature=27.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:57:37.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:58:19.033 [DEBUG] [Thread-19384] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:58:19.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:58:19.127 [DEBUG] [Thread-19388] [transport.py] [_log()] starting thread (client mode): 0x11f11b40
2025-11-12T16:58:19.127 [DEBUG] [Thread-19388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:58:19.142 [DEBUG] [Thread-19388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:58:19.142 [INFO] [Thread-19388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] client lang: <none>
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] server lang: <none>
2025-11-12T16:58:19.150 [DEBUG] [Thread-19388] [transport.py] [_log()] kex follows: False
2025-11-12T16:58:19.151 [DEBUG] [Thread-19388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:58:19.151 [DEBUG] [Thread-19388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:58:19.151 [DEBUG] [Thread-19388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:58:19.151 [DEBUG] [Thread-19388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:58:19.151 [DEBUG] [Thread-19388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:58:19.151 [DEBUG] [Thread-19388] [transport.py] [_log()] Compression: none
2025-11-12T16:58:19.151 [DEBUG] [Thread-19388] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:58:19.206 [DEBUG] [Thread-19388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:58:19.207 [DEBUG] [Thread-19388] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:58:19.208 [DEBUG] [Thread-19388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:58:19.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:58:19.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:58:19.263 [DEBUG] [Thread-19388] [transport.py] [_log()] userauth is OK
2025-11-12T16:58:19.263 [DEBUG] [Thread-19388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:58:19.264 [DEBUG] [Thread-19388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:58:19.264 [DEBUG] [Thread-19388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:58:19.264 [DEBUG] [Thread-19388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:58:19.283 [INFO] [Thread-19388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:58:19.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:58:19.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:58:20.116 [DEBUG] [Thread-19388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:58:20.116 [DEBUG] [Thread-19388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:58:20.164 [DEBUG] [Thread-19388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:58:20.164 [DEBUG] [Thread-19388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:58:20.173 [DEBUG] [Thread-19388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:58:20.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:58:20.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-11-12T16:58:20.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:58:20.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:58:20.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:58:20.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:58:20.210 [DEBUG] [Thread-19388] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:58:33.935 [DEBUG] [Thread-19390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:58:41.840 [DEBUG] [Thread-19391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:58:48.973 [DEBUG] [Thread-19392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:58:49.292 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:58:49.293 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:58:50.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:58:50.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:58:50.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-11-12T16:58:50.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 58, 21), 32.86, 11.28, 0.0, 26.22, 27.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:58:50.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:58:21
2025-11-12T16:58:51.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:58:51.158 [DEBUG] [Thread-19393] [transport.py] [_log()] starting thread (client mode): 0x173619c0
2025-11-12T16:58:51.158 [DEBUG] [Thread-19393] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:58:51.179 [DEBUG] [Thread-19393] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:58:51.179 [INFO] [Thread-19393] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:58:51.182 [DEBUG] [Thread-19393] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:58:51.182 [DEBUG] [Thread-19393] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:58:51.182 [DEBUG] [Thread-19393] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:58:51.182 [DEBUG] [Thread-19393] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] client lang: <none>
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] server lang: <none>
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] kex follows: False
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:58:51.183 [DEBUG] [Thread-19393] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:58:51.184 [DEBUG] [Thread-19393] [transport.py] [_log()] Compression: none
2025-11-12T16:58:51.184 [DEBUG] [Thread-19393] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:58:51.194 [DEBUG] [Thread-19393] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:58:51.194 [DEBUG] [Thread-19393] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:58:51.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:58:51.195 [DEBUG] [Thread-19393] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:58:51.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:58:51.198 [DEBUG] [Thread-19393] [transport.py] [_log()] userauth is OK
2025-11-12T16:58:51.198 [DEBUG] [Thread-19393] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:58:51.198 [DEBUG] [Thread-19393] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:58:51.198 [DEBUG] [Thread-19393] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:58:51.198 [DEBUG] [Thread-19393] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:58:51.235 [INFO] [Thread-19393] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:58:51.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:58:51.866 [DEBUG] [Thread-19393] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:58:51.867 [DEBUG] [Thread-19393] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:58:51.867 [DEBUG] [Thread-19393] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:58:51.908 [DEBUG] [Thread-19393] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:58:51.908 [DEBUG] [Thread-19393] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:58:51.911 [DEBUG] [Thread-19393] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:58:51.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:58:51.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:58:51.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:58:51.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:58:51.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:58:51.936 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:58:51.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:58:51.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:58:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:58:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.623698 -999.00  +26.20  30.47     16   -0.80 1 1 2 1 1   887    0 27.67 75.59 ----- 30.5 30.5 281.4 38.1 29.0 -27.1 29.1 -26.2 29.1 -25.9 29.8 -26.7
2025-11-12T16:58:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:58:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:58:51.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.623698
2025-11-12T16:58:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:58:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:58:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:58:51.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:58:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:58:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:58:21', tmtdew=32.86, humidity=11.28, cloud=0.0, wind=26.22, temperature=27.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:58:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:58:51.939 [DEBUG] [Thread-19393] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:58:52.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:58:52.034 [DEBUG] [Thread-19396] [transport.py] [_log()] starting thread (client mode): 0x149ab790
2025-11-12T16:58:52.034 [DEBUG] [Thread-19396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:58:52.049 [DEBUG] [Thread-19396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:58:52.049 [INFO] [Thread-19396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:58:52.057 [DEBUG] [Thread-19396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:58:52.057 [DEBUG] [Thread-19396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:58:52.057 [DEBUG] [Thread-19396] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:58:52.057 [DEBUG] [Thread-19396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] client lang: <none>
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] server lang: <none>
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] kex follows: False
2025-11-12T16:58:52.058 [DEBUG] [Thread-19396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:58:52.059 [DEBUG] [Thread-19396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:58:52.059 [DEBUG] [Thread-19396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:58:52.059 [DEBUG] [Thread-19396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:58:52.059 [DEBUG] [Thread-19396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:58:52.059 [DEBUG] [Thread-19396] [transport.py] [_log()] Compression: none
2025-11-12T16:58:52.059 [DEBUG] [Thread-19396] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:58:52.115 [DEBUG] [Thread-19396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:58:52.116 [DEBUG] [Thread-19396] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:58:52.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:58:52.117 [DEBUG] [Thread-19396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:58:52.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:58:52.175 [DEBUG] [Thread-19396] [transport.py] [_log()] userauth is OK
2025-11-12T16:58:52.175 [DEBUG] [Thread-19396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:58:52.175 [DEBUG] [Thread-19396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:58:52.176 [DEBUG] [Thread-19396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:58:52.176 [DEBUG] [Thread-19396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:58:52.194 [INFO] [Thread-19396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:58:52.195 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:58:52.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:58:53.080 [DEBUG] [Thread-19396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:58:53.081 [DEBUG] [Thread-19396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:58:53.128 [DEBUG] [Thread-19396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:58:53.128 [DEBUG] [Thread-19396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:58:53.136 [DEBUG] [Thread-19396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:58:53.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:58: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-11-12T16:58:53.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T16:58:53.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:58:53.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:58:53.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:58:53.170 [DEBUG] [Thread-19396] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:59:04.006 [DEBUG] [Thread-19398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:59:19.060 [DEBUG] [Thread-19399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:59:23.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:59:23.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:59:23.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-11-12T16:59:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 58, 53), 33.39, 10.78, 0.0, 27.72, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:59:23.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:58:53
2025-11-12T16:59:23.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:59:24.095 [DEBUG] [Thread-19400] [transport.py] [_log()] starting thread (client mode): 0x149616c0
2025-11-12T16:59:24.096 [DEBUG] [Thread-19400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:59:24.115 [DEBUG] [Thread-19400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:59:24.115 [INFO] [Thread-19400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] client lang: <none>
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] server lang: <none>
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] kex follows: False
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] Compression: none
2025-11-12T16:59:24.118 [DEBUG] [Thread-19400] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:59:24.126 [DEBUG] [Thread-19400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:59:24.127 [DEBUG] [Thread-19400] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:59:24.127 [DEBUG] [Thread-19400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:59:24.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:59:24.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:59:24.129 [DEBUG] [Thread-19400] [transport.py] [_log()] userauth is OK
2025-11-12T16:59:24.129 [DEBUG] [Thread-19400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:59:24.129 [DEBUG] [Thread-19400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:59:24.129 [DEBUG] [Thread-19400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:59:24.129 [DEBUG] [Thread-19400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:59:24.147 [INFO] [Thread-19400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:59:24.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:59:24.839 [DEBUG] [Thread-19400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:59:24.839 [DEBUG] [Thread-19400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:59:24.840 [DEBUG] [Thread-19400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:59:24.880 [DEBUG] [Thread-19400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:59:24.881 [DEBUG] [Thread-19400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:59:24.884 [DEBUG] [Thread-19400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:59:24.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:59:24.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:59:24.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:59:24.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:59:24.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:59:24.907 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:59:24.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:59:24.907 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:59:24.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:59:24.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.624045 -999.00  +26.20  29.06     16   -1.00 1 1 1 1 1   887    0 27.90 84.72 ----- 29.1 29.1 278.0 38.2 28.9 -27.5 29.0 -26.6 29.0 -26.9 29.6 -26.7
2025-11-12T16:59:24.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:59:24.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:59:24.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.624045
2025-11-12T16:59:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:59:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:59:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:59:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:59:24.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:59:24.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:58:53', tmtdew=33.39, humidity=10.78, cloud=0.0, wind=27.72, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:58:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:59:24.910 [DEBUG] [Thread-19400] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:59:24.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:59:25.006 [DEBUG] [Thread-19403] [transport.py] [_log()] starting thread (client mode): 0x173fb640
2025-11-12T16:59:25.006 [DEBUG] [Thread-19403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:59:25.021 [DEBUG] [Thread-19403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:59:25.021 [INFO] [Thread-19403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:59:25.029 [DEBUG] [Thread-19403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:59:25.029 [DEBUG] [Thread-19403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:59:25.029 [DEBUG] [Thread-19403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:59:25.030 [DEBUG] [Thread-19403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:59:25.030 [DEBUG] [Thread-19403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:59:25.030 [DEBUG] [Thread-19403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:59:25.030 [DEBUG] [Thread-19403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:59:25.030 [DEBUG] [Thread-19403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:59:25.030 [DEBUG] [Thread-19403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:59:25.030 [DEBUG] [Thread-19403] [transport.py] [_log()] client lang: <none>
2025-11-12T16:59:25.031 [DEBUG] [Thread-19403] [transport.py] [_log()] server lang: <none>
2025-11-12T16:59:25.031 [DEBUG] [Thread-19403] [transport.py] [_log()] kex follows: False
2025-11-12T16:59:25.031 [DEBUG] [Thread-19403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:59:25.031 [DEBUG] [Thread-19403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:59:25.031 [DEBUG] [Thread-19403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:59:25.031 [DEBUG] [Thread-19403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:59:25.031 [DEBUG] [Thread-19403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:59:25.032 [DEBUG] [Thread-19403] [transport.py] [_log()] Compression: none
2025-11-12T16:59:25.032 [DEBUG] [Thread-19403] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:59:25.087 [DEBUG] [Thread-19403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:59:25.088 [DEBUG] [Thread-19403] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:59:25.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:59:25.089 [DEBUG] [Thread-19403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:59:25.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:59:25.147 [DEBUG] [Thread-19403] [transport.py] [_log()] userauth is OK
2025-11-12T16:59:25.147 [DEBUG] [Thread-19403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:59:25.147 [DEBUG] [Thread-19403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:59:25.147 [DEBUG] [Thread-19403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:59:25.147 [DEBUG] [Thread-19403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:59:25.166 [INFO] [Thread-19403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:59:25.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:59:25.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:59:26.039 [DEBUG] [Thread-19403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:59:26.039 [DEBUG] [Thread-19403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:59:26.087 [DEBUG] [Thread-19403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:59:26.087 [DEBUG] [Thread-19403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:59:26.095 [DEBUG] [Thread-19403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:59:26.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:59:26.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-11-12T16:59:26.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-11-12T16:59:26.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:59:26.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:59:26.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:59:26.127 [DEBUG] [Thread-19403] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:59:34.100 [DEBUG] [Thread-19405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:59:41.873 [DEBUG] [Thread-19406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:59:49.150 [DEBUG] [Thread-19407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:59:49.435 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:59:49.436 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T16:59:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T16:59:56.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T16:59:56.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-11-12T16:59:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 59, 25), 33.51, 10.68, 0.0, 32.04, 27.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T16:59:56.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:59:25
2025-11-12T16:59:56.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T16:59:57.077 [DEBUG] [Thread-19408] [transport.py] [_log()] starting thread (client mode): 0x149db700
2025-11-12T16:59:57.078 [DEBUG] [Thread-19408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:59:57.099 [DEBUG] [Thread-19408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T16:59:57.099 [INFO] [Thread-19408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] client lang: <none>
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] server lang: <none>
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] kex follows: False
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] Compression: none
2025-11-12T16:59:57.102 [DEBUG] [Thread-19408] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:59:57.120 [DEBUG] [Thread-19408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:59:57.121 [DEBUG] [Thread-19408] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:59:57.121 [DEBUG] [Thread-19408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T16:59:57.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T16:59:57.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:59:57.124 [DEBUG] [Thread-19408] [transport.py] [_log()] userauth is OK
2025-11-12T16:59:57.124 [DEBUG] [Thread-19408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:59:57.124 [DEBUG] [Thread-19408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:59:57.124 [DEBUG] [Thread-19408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T16:59:57.124 [DEBUG] [Thread-19408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:59:57.148 [INFO] [Thread-19408] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:59:57.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:59:57.765 [DEBUG] [Thread-19408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:59:57.765 [DEBUG] [Thread-19408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:59:57.765 [DEBUG] [Thread-19408] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T16:59:57.806 [DEBUG] [Thread-19408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:59:57.806 [DEBUG] [Thread-19408] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:59:57.808 [DEBUG] [Thread-19408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:59:57.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:59:57.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T16:59:57.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T16:59:57.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T16:59:57.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:59:57.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T16:59:57.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.624392 -999.00  +26.50  18.32     16   -0.80 1 1 1 1 1   887    0 27.99 86.33 ----- 18.3 18.3 272.4 35.3 28.9 -27.4 28.9 -26.2 29.1 -25.4 29.5 -26.3
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.624392
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T16:59:57.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:59:25', tmtdew=33.51, humidity=10.68, cloud=0.0, wind=32.04, temperature=27.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:59:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T16:59:57.826 [DEBUG] [Thread-19408] [transport.py] [_log()] EOF in transport thread
2025-11-12T16:59:57.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T16:59:57.912 [DEBUG] [Thread-19411] [transport.py] [_log()] starting thread (client mode): 0x1739b100
2025-11-12T16:59:57.912 [DEBUG] [Thread-19411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T16:59:57.927 [DEBUG] [Thread-19411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T16:59:57.927 [INFO] [Thread-19411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T16:59:57.934 [DEBUG] [Thread-19411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T16:59:57.934 [DEBUG] [Thread-19411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T16:59:57.934 [DEBUG] [Thread-19411] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] client lang: <none>
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] server lang: <none>
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] kex follows: False
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] Compression: none
2025-11-12T16:59:57.935 [DEBUG] [Thread-19411] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T16:59:57.989 [DEBUG] [Thread-19411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T16:59:57.989 [DEBUG] [Thread-19411] [transport.py] [_log()] Switch to new keys ...
2025-11-12T16:59:57.989 [DEBUG] [Thread-19411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T16:59:57.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T16:59:57.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T16:59:58.046 [DEBUG] [Thread-19411] [transport.py] [_log()] userauth is OK
2025-11-12T16:59:58.046 [DEBUG] [Thread-19411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T16:59:58.046 [DEBUG] [Thread-19411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T16:59:58.046 [DEBUG] [Thread-19411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T16:59:58.046 [DEBUG] [Thread-19411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T16:59:58.060 [INFO] [Thread-19411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T16:59:58.061 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T16:59:58.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T16:59:58.914 [DEBUG] [Thread-19411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T16:59:58.914 [DEBUG] [Thread-19411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T16:59:58.962 [DEBUG] [Thread-19411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T16:59:58.962 [DEBUG] [Thread-19411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T16:59:58.970 [DEBUG] [Thread-19411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T16:59:58.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T16:59:58.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-11-12T16:59:58.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-11-12T16:59:58.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T16:59:58.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T16:59:58.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T16:59:59.002 [DEBUG] [Thread-19411] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:00:04.181 [DEBUG] [Thread-19413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:00:19.242 [DEBUG] [Thread-19414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:00:29.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:00:29.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:00:29.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-11-12T17:00:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 16, 59, 57), 32.92, 10.79, 0.0, 28.35, 26.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:00:29.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 16:59:57
2025-11-12T17:00:29.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:00:30.021 [DEBUG] [Thread-19415] [transport.py] [_log()] starting thread (client mode): 0x149da410
2025-11-12T17:00:30.021 [DEBUG] [Thread-19415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:00:30.041 [DEBUG] [Thread-19415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:00:30.041 [INFO] [Thread-19415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:00:30.044 [DEBUG] [Thread-19415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:00:30.044 [DEBUG] [Thread-19415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:00:30.044 [DEBUG] [Thread-19415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:00:30.044 [DEBUG] [Thread-19415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:00:30.044 [DEBUG] [Thread-19415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:00:30.044 [DEBUG] [Thread-19415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] client lang: <none>
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] server lang: <none>
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] kex follows: False
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] Compression: none
2025-11-12T17:00:30.045 [DEBUG] [Thread-19415] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:00:30.059 [DEBUG] [Thread-19415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:00:30.059 [DEBUG] [Thread-19415] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:00:30.059 [DEBUG] [Thread-19415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:00:30.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:00:30.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:00:30.060 [DEBUG] [Thread-19415] [transport.py] [_log()] userauth is OK
2025-11-12T17:00:30.060 [DEBUG] [Thread-19415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:00:30.060 [DEBUG] [Thread-19415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:00:30.060 [DEBUG] [Thread-19415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:00:30.060 [DEBUG] [Thread-19415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:00:30.069 [INFO] [Thread-19415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:00:30.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:00:30.869 [DEBUG] [Thread-19415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:00:30.869 [DEBUG] [Thread-19415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:00:30.869 [DEBUG] [Thread-19415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:00:30.911 [DEBUG] [Thread-19415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:00:30.911 [DEBUG] [Thread-19415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:00:30.912 [DEBUG] [Thread-19415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:00:30.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:00:30.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:00:30.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:00:30.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:00:30.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:00:30.928 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:00:30.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.624739 -999.00  +26.40  33.85     16   -1.00 1 1 2 1 1   887    0 28.91 92.49 ----- 33.9 33.9 269.6 36.7 28.9 -27.8 28.9 -26.5 29.0 -26.6 29.5 -26.3
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.624739
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:00:30.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T16:59:57', tmtdew=32.92, humidity=10.79, cloud=0.0, wind=28.35, temperature=26.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T14:59:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:00:30.930 [DEBUG] [Thread-19415] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:00:31.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:00:31.016 [DEBUG] [Thread-19418] [transport.py] [_log()] starting thread (client mode): 0x14960940
2025-11-12T17:00:31.016 [DEBUG] [Thread-19418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:00:31.031 [DEBUG] [Thread-19418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:00:31.031 [INFO] [Thread-19418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] client lang: <none>
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] server lang: <none>
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] kex follows: False
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:00:31.038 [DEBUG] [Thread-19418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:00:31.039 [DEBUG] [Thread-19418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:00:31.039 [DEBUG] [Thread-19418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:00:31.039 [DEBUG] [Thread-19418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:00:31.039 [DEBUG] [Thread-19418] [transport.py] [_log()] Compression: none
2025-11-12T17:00:31.039 [DEBUG] [Thread-19418] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:00:31.093 [DEBUG] [Thread-19418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:00:31.093 [DEBUG] [Thread-19418] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:00:31.093 [DEBUG] [Thread-19418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:00:31.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:00:31.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:00:31.151 [DEBUG] [Thread-19418] [transport.py] [_log()] userauth is OK
2025-11-12T17:00:31.151 [DEBUG] [Thread-19418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:00:31.151 [DEBUG] [Thread-19418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:00:31.151 [DEBUG] [Thread-19418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:00:31.151 [DEBUG] [Thread-19418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:00:31.166 [INFO] [Thread-19418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:00:31.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:00:31.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:00:32.016 [DEBUG] [Thread-19418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:00:32.016 [DEBUG] [Thread-19418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:00:32.064 [DEBUG] [Thread-19418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:00:32.064 [DEBUG] [Thread-19418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:00:32.072 [DEBUG] [Thread-19418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:00:32.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:00:32.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-11-12T17:00:32.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-11-12T17:00:32.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:00:32.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:00:32.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:00:32.103 [DEBUG] [Thread-19418] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:00:34.276 [DEBUG] [Thread-19420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:00:41.911 [DEBUG] [Thread-19421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:00:49.332 [DEBUG] [Thread-19422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:00:49.576 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:00:49.577 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:01:02.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:01:02.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:01:02.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-11-12T17:01:02.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 0, 28), 32.89, 10.83, 0.0, 27.31, 26.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:01:02.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:00:28
2025-11-12T17:01:02.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:01:03.104 [DEBUG] [Thread-19423] [transport.py] [_log()] starting thread (client mode): 0x149da2c0
2025-11-12T17:01:03.104 [DEBUG] [Thread-19423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:01:03.125 [DEBUG] [Thread-19423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:01:03.125 [INFO] [Thread-19423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:01:03.128 [DEBUG] [Thread-19423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:01:03.128 [DEBUG] [Thread-19423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:01:03.128 [DEBUG] [Thread-19423] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:01:03.128 [DEBUG] [Thread-19423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:01:03.128 [DEBUG] [Thread-19423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:01:03.128 [DEBUG] [Thread-19423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] client lang: <none>
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] server lang: <none>
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] kex follows: False
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] Compression: none
2025-11-12T17:01:03.129 [DEBUG] [Thread-19423] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:01:03.144 [DEBUG] [Thread-19423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:01:03.144 [DEBUG] [Thread-19423] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:01:03.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:01:03.144 [DEBUG] [Thread-19423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:01:03.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:01:03.145 [DEBUG] [Thread-19423] [transport.py] [_log()] userauth is OK
2025-11-12T17:01:03.145 [DEBUG] [Thread-19423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:01:03.145 [DEBUG] [Thread-19423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:01:03.145 [DEBUG] [Thread-19423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:01:03.145 [DEBUG] [Thread-19423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:01:03.154 [INFO] [Thread-19423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:01:03.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:01:03.747 [DEBUG] [Thread-19423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:01:03.747 [DEBUG] [Thread-19423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:01:03.748 [DEBUG] [Thread-19423] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:01:03.789 [DEBUG] [Thread-19423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:01:03.789 [DEBUG] [Thread-19423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:01:03.792 [DEBUG] [Thread-19423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:01:03.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:01:03.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:01:03.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:01:03.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:01:03.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:01:03.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:01:03.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:01:03.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:01:03.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:01:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.625086 -999.00  +26.40  29.07     16   -0.90 1 1 1 1 1   887    0 28.89 102.69 ----- 29.1 29.1 275.2 36.9 28.9 -26.9 28.9 -26.3 28.8 -27.5 29.3 -26.0
2025-11-12T17:01:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:01:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:01:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.625086
2025-11-12T17:01:03.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:01:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:01:03.820 [DEBUG] [Thread-19423] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:01:03.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:01:03.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:01:03.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:01:03.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:00:28', tmtdew=32.89, humidity=10.83, cloud=0.0, wind=27.31, temperature=26.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:00:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:01:03.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:01:03.915 [DEBUG] [Thread-19426] [transport.py] [_log()] starting thread (client mode): 0x1493ffd0
2025-11-12T17:01:03.915 [DEBUG] [Thread-19426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:01:03.936 [DEBUG] [Thread-19426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:01:03.937 [INFO] [Thread-19426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:01:03.944 [DEBUG] [Thread-19426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:01:03.944 [DEBUG] [Thread-19426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:01:03.944 [DEBUG] [Thread-19426] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:01:03.944 [DEBUG] [Thread-19426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:01:03.944 [DEBUG] [Thread-19426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] client lang: <none>
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] server lang: <none>
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] kex follows: False
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] Compression: none
2025-11-12T17:01:03.945 [DEBUG] [Thread-19426] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:01:04.003 [DEBUG] [Thread-19426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:01:04.004 [DEBUG] [Thread-19426] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:01:04.004 [DEBUG] [Thread-19426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:01:04.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:01:04.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:01:04.060 [DEBUG] [Thread-19426] [transport.py] [_log()] userauth is OK
2025-11-12T17:01:04.060 [DEBUG] [Thread-19426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:01:04.060 [DEBUG] [Thread-19426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:01:04.060 [DEBUG] [Thread-19426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:01:04.060 [DEBUG] [Thread-19426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:01:04.080 [INFO] [Thread-19426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:01:04.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:01:04.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:01:04.365 [DEBUG] [Thread-19428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:01:04.990 [DEBUG] [Thread-19426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:01:04.990 [DEBUG] [Thread-19426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:01:05.039 [DEBUG] [Thread-19426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:01:05.039 [DEBUG] [Thread-19426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:01:05.049 [DEBUG] [Thread-19426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:01:05.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:01:05.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-11-12T17:01:05.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-11-12T17:01:05.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:01:05.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:01:05.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:01:05.085 [DEBUG] [Thread-19426] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:01:19.412 [DEBUG] [Thread-19429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:01:34.448 [DEBUG] [Thread-19430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:01:35.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:01:35.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:01:35.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:01:35.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 1, 1), 32.96, 10.76, 0.0, 25.97, 26.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:01:35.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:01:01
2025-11-12T17:01:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:01:36.050 [DEBUG] [Thread-19431] [transport.py] [_log()] starting thread (client mode): 0x149db7f0
2025-11-12T17:01:36.051 [DEBUG] [Thread-19431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:01:36.070 [DEBUG] [Thread-19431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:01:36.071 [INFO] [Thread-19431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] client lang: <none>
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] server lang: <none>
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] kex follows: False
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] Compression: none
2025-11-12T17:01:36.072 [DEBUG] [Thread-19431] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:01:36.089 [DEBUG] [Thread-19431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:01:36.089 [DEBUG] [Thread-19431] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:01:36.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:01:36.090 [DEBUG] [Thread-19431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:01:36.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:01:36.093 [DEBUG] [Thread-19431] [transport.py] [_log()] userauth is OK
2025-11-12T17:01:36.093 [DEBUG] [Thread-19431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:01:36.093 [DEBUG] [Thread-19431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:01:36.093 [DEBUG] [Thread-19431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:01:36.093 [DEBUG] [Thread-19431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:01:36.118 [INFO] [Thread-19431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:01:36.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:01:36.896 [DEBUG] [Thread-19431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:01:36.896 [DEBUG] [Thread-19431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:01:36.896 [DEBUG] [Thread-19431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:01:36.936 [DEBUG] [Thread-19431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:01:36.937 [DEBUG] [Thread-19431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:01:36.940 [DEBUG] [Thread-19431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:01:36.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:01:36.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:01:36.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:01:36.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:01:36.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:01:36.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:01:36.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:01:36.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:01:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:01:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.625781 -999.00  +26.10  21.36     16   -1.10 1 1 1 1 1   887    0 29.81 105.81 ----- 21.4 21.4 298.4 27.9 28.7 -28.0 28.6 -26.4 28.6 -26.7 29.1 -26.3
2025-11-12T17:01:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:01:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:01:36.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.625781
2025-11-12T17:01:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:01:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:01:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:01:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:01:36.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:01:36.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:01:01', tmtdew=32.96, humidity=10.76, cloud=0.0, wind=25.97, temperature=26.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:01:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:01:36.970 [DEBUG] [Thread-19431] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:01:37.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:01:37.073 [DEBUG] [Thread-19434] [transport.py] [_log()] starting thread (client mode): 0x149dace0
2025-11-12T17:01:37.073 [DEBUG] [Thread-19434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:01:37.088 [DEBUG] [Thread-19434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:01:37.088 [INFO] [Thread-19434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:01:37.095 [DEBUG] [Thread-19434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:01:37.096 [DEBUG] [Thread-19434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:01:37.096 [DEBUG] [Thread-19434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:01:37.096 [DEBUG] [Thread-19434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:01:37.096 [DEBUG] [Thread-19434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:01:37.096 [DEBUG] [Thread-19434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] client lang: <none>
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] server lang: <none>
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] kex follows: False
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:01:37.097 [DEBUG] [Thread-19434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:01:37.098 [DEBUG] [Thread-19434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:01:37.098 [DEBUG] [Thread-19434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:01:37.098 [DEBUG] [Thread-19434] [transport.py] [_log()] Compression: none
2025-11-12T17:01:37.098 [DEBUG] [Thread-19434] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:01:37.155 [DEBUG] [Thread-19434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:01:37.156 [DEBUG] [Thread-19434] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:01:37.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:01:37.158 [DEBUG] [Thread-19434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:01:37.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:01:37.215 [DEBUG] [Thread-19434] [transport.py] [_log()] userauth is OK
2025-11-12T17:01:37.215 [DEBUG] [Thread-19434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:01:37.215 [DEBUG] [Thread-19434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:01:37.215 [DEBUG] [Thread-19434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:01:37.216 [DEBUG] [Thread-19434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:01:37.234 [INFO] [Thread-19434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:01:37.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:01:37.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:01:38.081 [DEBUG] [Thread-19434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:01:38.081 [DEBUG] [Thread-19434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:01:38.128 [DEBUG] [Thread-19434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:01:38.128 [DEBUG] [Thread-19434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:01:38.137 [DEBUG] [Thread-19434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:01:38.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:01:38.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-11-12T17:01:38.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:01:38.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:01:38.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:01:38.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:01:38.171 [DEBUG] [Thread-19434] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:01:41.948 [DEBUG] [Thread-19436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:01:49.480 [DEBUG] [Thread-19437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:01:49.718 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:01:49.719 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:02:04.522 [DEBUG] [Thread-19438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:02:08.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:02:08.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:02:08.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-11-12T17:02:08.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 2, 5), 33.25, 10.61, 0.0, 29.06, 26.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:02:08.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:02:05
2025-11-12T17:02:08.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:02:09.114 [DEBUG] [Thread-19439] [transport.py] [_log()] starting thread (client mode): 0x149aaa40
2025-11-12T17:02:09.114 [DEBUG] [Thread-19439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:02:09.129 [DEBUG] [Thread-19439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:02:09.129 [INFO] [Thread-19439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] client lang: <none>
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] server lang: <none>
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] kex follows: False
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:02:09.133 [DEBUG] [Thread-19439] [transport.py] [_log()] Compression: none
2025-11-12T17:02:09.134 [DEBUG] [Thread-19439] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:02:09.151 [DEBUG] [Thread-19439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:02:09.152 [DEBUG] [Thread-19439] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:02:09.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:02:09.154 [DEBUG] [Thread-19439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:02:09.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:02:09.156 [DEBUG] [Thread-19439] [transport.py] [_log()] userauth is OK
2025-11-12T17:02:09.156 [DEBUG] [Thread-19439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:02:09.157 [DEBUG] [Thread-19439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:02:09.157 [DEBUG] [Thread-19439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:02:09.157 [DEBUG] [Thread-19439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:02:09.192 [INFO] [Thread-19439] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:02:09.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:02:09.817 [DEBUG] [Thread-19439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:02:09.818 [DEBUG] [Thread-19439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:02:09.818 [DEBUG] [Thread-19439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:02:09.859 [DEBUG] [Thread-19439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:02:09.859 [DEBUG] [Thread-19439] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:02:09.863 [DEBUG] [Thread-19439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:02:09.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:02:09.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:02:09.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:02:09.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:02:09.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:02:09.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:02:09.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:02:09.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:02:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:02:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.626128 -999.00  +26.10  19.70     16   -1.10 1 1 1 1 1   887    0 29.65 108.30 ----- 19.7 19.7 282.8 30.2 28.6 -27.7 28.6 -27.0 28.6 -28.5 29.0 -27.1
2025-11-12T17:02:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:02:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:02:09.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.626128
2025-11-12T17:02:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:02:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:02:09.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:02:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:02:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:02:09.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:02:05', tmtdew=33.25, humidity=10.61, cloud=0.0, wind=29.06, temperature=26.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:01:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:02:09.891 [DEBUG] [Thread-19439] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:02:09.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:02:09.979 [DEBUG] [Thread-19442] [transport.py] [_log()] starting thread (client mode): 0x14980ac0
2025-11-12T17:02:09.979 [DEBUG] [Thread-19442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:02:09.994 [DEBUG] [Thread-19442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:02:09.995 [INFO] [Thread-19442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:02:10.002 [DEBUG] [Thread-19442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:02:10.002 [DEBUG] [Thread-19442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] client lang: <none>
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] server lang: <none>
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] kex follows: False
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:02:10.003 [DEBUG] [Thread-19442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:02:10.004 [DEBUG] [Thread-19442] [transport.py] [_log()] Compression: none
2025-11-12T17:02:10.004 [DEBUG] [Thread-19442] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:02:10.063 [DEBUG] [Thread-19442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:02:10.064 [DEBUG] [Thread-19442] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:02:10.065 [DEBUG] [Thread-19442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:02:10.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:02:10.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:02:10.123 [DEBUG] [Thread-19442] [transport.py] [_log()] userauth is OK
2025-11-12T17:02:10.123 [DEBUG] [Thread-19442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:02:10.124 [DEBUG] [Thread-19442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:02:10.124 [DEBUG] [Thread-19442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:02:10.124 [DEBUG] [Thread-19442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:02:10.143 [INFO] [Thread-19442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:02:10.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:02:10.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:02:11.007 [DEBUG] [Thread-19442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:02:11.007 [DEBUG] [Thread-19442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:02:11.056 [DEBUG] [Thread-19442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:02:11.056 [DEBUG] [Thread-19442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:02:11.065 [DEBUG] [Thread-19442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:02:11.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:02:11.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:02:11.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-11-12T17:02:11.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:02:11.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:02:11.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:02:11.102 [DEBUG] [Thread-19442] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:02:19.557 [DEBUG] [Thread-19444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:02:34.608 [DEBUG] [Thread-19445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:02:41.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:02:41.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:02:41.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-11-12T17:02:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 2, 37), 33.41, 10.66, 0.0, 25.67, 26.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:02:41.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:02:37
2025-11-12T17:02:41.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:02:41.975 [DEBUG] [Thread-19446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:02:42.065 [DEBUG] [Thread-19447] [transport.py] [_log()] starting thread (client mode): 0x17362e00
2025-11-12T17:02:42.065 [DEBUG] [Thread-19447] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:02:42.087 [DEBUG] [Thread-19447] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:02:42.087 [INFO] [Thread-19447] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:02:42.090 [DEBUG] [Thread-19447] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] client lang: <none>
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] server lang: <none>
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] kex follows: False
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] Compression: none
2025-11-12T17:02:42.091 [DEBUG] [Thread-19447] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:02:42.108 [DEBUG] [Thread-19447] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:02:42.109 [DEBUG] [Thread-19447] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:02:42.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:02:42.110 [DEBUG] [Thread-19447] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:02:42.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:02:42.113 [DEBUG] [Thread-19447] [transport.py] [_log()] userauth is OK
2025-11-12T17:02:42.113 [DEBUG] [Thread-19447] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:02:42.113 [DEBUG] [Thread-19447] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:02:42.113 [DEBUG] [Thread-19447] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:02:42.113 [DEBUG] [Thread-19447] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:02:42.149 [INFO] [Thread-19447] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:02:42.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:02:42.909 [DEBUG] [Thread-19447] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:02:42.909 [DEBUG] [Thread-19447] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:02:42.910 [DEBUG] [Thread-19447] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:02:42.950 [DEBUG] [Thread-19447] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:02:42.951 [DEBUG] [Thread-19447] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:02:42.953 [DEBUG] [Thread-19447] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:02:42.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:02:42.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:02:42.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:02:42.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:02:42.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:02:42.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:02:42.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:02:42.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:02:42.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:02:42.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.626475 -999.00  +26.00  33.66     16   -1.20 1 1 2 1 1   887    0 28.86 101.77 ----- 33.7 33.7 272.8 36.8 28.5 -27.7 28.5 -26.5 28.4 -27.1 28.9 -26.5
2025-11-12T17:02:42.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:02:42.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:02:42.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.626475
2025-11-12T17:02:42.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:02:42.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:02:42.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:02:42.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:02:42.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:02:42.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:02:37', tmtdew=33.41, humidity=10.66, cloud=0.0, wind=25.67, temperature=26.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:02:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:02:42.979 [DEBUG] [Thread-19447] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:02:43.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:02:43.075 [DEBUG] [Thread-19450] [transport.py] [_log()] starting thread (client mode): 0x173f8a60
2025-11-12T17:02:43.075 [DEBUG] [Thread-19450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:02:43.089 [DEBUG] [Thread-19450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:02:43.090 [INFO] [Thread-19450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:02:43.097 [DEBUG] [Thread-19450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:02:43.097 [DEBUG] [Thread-19450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:02:43.097 [DEBUG] [Thread-19450] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] client lang: <none>
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] server lang: <none>
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] kex follows: False
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:02:43.098 [DEBUG] [Thread-19450] [transport.py] [_log()] Compression: none
2025-11-12T17:02:43.099 [DEBUG] [Thread-19450] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:02:43.154 [DEBUG] [Thread-19450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:02:43.155 [DEBUG] [Thread-19450] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:02:43.156 [DEBUG] [Thread-19450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:02:43.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:02:43.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:02:43.211 [DEBUG] [Thread-19450] [transport.py] [_log()] userauth is OK
2025-11-12T17:02:43.211 [DEBUG] [Thread-19450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:02:43.211 [DEBUG] [Thread-19450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:02:43.212 [DEBUG] [Thread-19450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:02:43.212 [DEBUG] [Thread-19450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:02:43.230 [INFO] [Thread-19450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:02:43.231 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:02:43.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:02:44.078 [DEBUG] [Thread-19450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:02:44.079 [DEBUG] [Thread-19450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:02:44.126 [DEBUG] [Thread-19450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:02:44.127 [DEBUG] [Thread-19450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:02:44.136 [DEBUG] [Thread-19450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:02:44.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:02:44.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:02:44.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:02:44.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:02:44.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:02:44.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:02:44.169 [DEBUG] [Thread-19450] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:02:49.640 [DEBUG] [Thread-19452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:02:49.859 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:02:49.860 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:03:04.696 [DEBUG] [Thread-19453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:03:14.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:03:14.171 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:03:14.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:03:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 3, 8), 33.45, 10.61, 0.0, 25.66, 26.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:03:14.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:03:08
2025-11-12T17:03:14.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:03:15.112 [DEBUG] [Thread-19454] [transport.py] [_log()] starting thread (client mode): 0x173f9480
2025-11-12T17:03:15.112 [DEBUG] [Thread-19454] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:03:15.133 [DEBUG] [Thread-19454] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:03:15.134 [INFO] [Thread-19454] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] client lang: <none>
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] server lang: <none>
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] kex follows: False
2025-11-12T17:03:15.137 [DEBUG] [Thread-19454] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:03:15.138 [DEBUG] [Thread-19454] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:03:15.138 [DEBUG] [Thread-19454] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:03:15.138 [DEBUG] [Thread-19454] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:03:15.138 [DEBUG] [Thread-19454] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:03:15.138 [DEBUG] [Thread-19454] [transport.py] [_log()] Compression: none
2025-11-12T17:03:15.138 [DEBUG] [Thread-19454] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:03:15.157 [DEBUG] [Thread-19454] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:03:15.157 [DEBUG] [Thread-19454] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:03:15.158 [DEBUG] [Thread-19454] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:03:15.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:03:15.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:03:15.160 [DEBUG] [Thread-19454] [transport.py] [_log()] userauth is OK
2025-11-12T17:03:15.160 [DEBUG] [Thread-19454] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:03:15.161 [DEBUG] [Thread-19454] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:03:15.161 [DEBUG] [Thread-19454] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:03:15.161 [DEBUG] [Thread-19454] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:03:15.197 [INFO] [Thread-19454] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:03:15.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:03:15.853 [DEBUG] [Thread-19454] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:03:15.853 [DEBUG] [Thread-19454] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:03:15.854 [DEBUG] [Thread-19454] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:03:15.895 [DEBUG] [Thread-19454] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:03:15.895 [DEBUG] [Thread-19454] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:03:15.899 [DEBUG] [Thread-19454] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:03:15.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:03:15.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:03:15.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:03:15.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:03:15.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:03:15.924 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:03:15.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:03:15.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:03:15.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:03:15.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.626823 -999.00  +26.00  29.17     15   -1.80 1 1 1 1 1   887    0 29.42 108.50 ----- 29.2 29.2 273.4 34.6 28.3 -28.4 28.4 -26.8 28.2 -28.7 28.8 -27.3
2025-11-12T17:03:15.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:03:15.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:03:15.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.626823
2025-11-12T17:03:15.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:03:15.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:03:15.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:03:15.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:03:15.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:03:15.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:03:08', tmtdew=33.45, humidity=10.61, cloud=0.0, wind=25.66, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:02:37.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:03:15.927 [DEBUG] [Thread-19454] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:03:16.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:03:16.013 [DEBUG] [Thread-19457] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T17:03:16.013 [DEBUG] [Thread-19457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:03:16.028 [DEBUG] [Thread-19457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:03:16.028 [INFO] [Thread-19457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:03:16.036 [DEBUG] [Thread-19457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:03:16.036 [DEBUG] [Thread-19457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:03:16.036 [DEBUG] [Thread-19457] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] client lang: <none>
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] server lang: <none>
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] kex follows: False
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:03:16.037 [DEBUG] [Thread-19457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:03:16.038 [DEBUG] [Thread-19457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:03:16.038 [DEBUG] [Thread-19457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:03:16.038 [DEBUG] [Thread-19457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:03:16.038 [DEBUG] [Thread-19457] [transport.py] [_log()] Compression: none
2025-11-12T17:03:16.038 [DEBUG] [Thread-19457] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:03:16.094 [DEBUG] [Thread-19457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:03:16.095 [DEBUG] [Thread-19457] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:03:16.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:03:16.096 [DEBUG] [Thread-19457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:03:16.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:03:16.151 [DEBUG] [Thread-19457] [transport.py] [_log()] userauth is OK
2025-11-12T17:03:16.151 [DEBUG] [Thread-19457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:03:16.151 [DEBUG] [Thread-19457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:03:16.151 [DEBUG] [Thread-19457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:03:16.151 [DEBUG] [Thread-19457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:03:16.170 [INFO] [Thread-19457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:03:16.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:03:16.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:03:17.027 [DEBUG] [Thread-19457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:03:17.027 [DEBUG] [Thread-19457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:03:17.075 [DEBUG] [Thread-19457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:03:17.076 [DEBUG] [Thread-19457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:03:17.085 [DEBUG] [Thread-19457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:03:17.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:03:17.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-11-12T17:03:17.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-11-12T17:03:17.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:03:17.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:03:17.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:03:17.121 [DEBUG] [Thread-19457] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:03:19.728 [DEBUG] [Thread-19459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:03:34.782 [DEBUG] [Thread-19460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:03:42.007 [DEBUG] [Thread-19461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:03:47.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:03:47.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:03:47.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-11-12T17:03:47.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 3, 40), 34.59, 9.88, 0.0, 36.58, 26.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:03:47.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:03:40
2025-11-12T17:03:47.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:03:48.031 [DEBUG] [Thread-19462] [transport.py] [_log()] starting thread (client mode): 0x14982e90
2025-11-12T17:03:48.031 [DEBUG] [Thread-19462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:03:48.048 [DEBUG] [Thread-19462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:03:48.049 [INFO] [Thread-19462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:03:48.049 [DEBUG] [Thread-19462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] client lang: <none>
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] server lang: <none>
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] kex follows: False
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:03:48.050 [DEBUG] [Thread-19462] [transport.py] [_log()] Compression: none
2025-11-12T17:03:48.051 [DEBUG] [Thread-19462] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:03:48.058 [DEBUG] [Thread-19462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:03:48.059 [DEBUG] [Thread-19462] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:03:48.059 [DEBUG] [Thread-19462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:03:48.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:03:48.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:03:48.060 [DEBUG] [Thread-19462] [transport.py] [_log()] userauth is OK
2025-11-12T17:03:48.061 [DEBUG] [Thread-19462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:03:48.061 [DEBUG] [Thread-19462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:03:48.061 [DEBUG] [Thread-19462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:03:48.061 [DEBUG] [Thread-19462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:03:48.076 [INFO] [Thread-19462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:03:48.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:03:48.720 [DEBUG] [Thread-19462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:03:48.720 [DEBUG] [Thread-19462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:03:48.720 [DEBUG] [Thread-19462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:03:48.761 [DEBUG] [Thread-19462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:03:48.761 [DEBUG] [Thread-19462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:03:48.764 [DEBUG] [Thread-19462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:03:48.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:03:48.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:03:48.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:03:48.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:03:48.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:03:48.788 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:03:48.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:03:48.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:03:48.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:03:48.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.627170 -999.00  +25.90  28.34     15   -2.30 1 1 1 1 1   887    0 29.48 110.50 ----- 28.3 28.3 267.3 47.9 28.2 -28.4 28.3 -27.1 28.1 -28.1 28.6 -27.0
2025-11-12T17:03:48.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:03:48.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:03:48.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.627170
2025-11-12T17:03:48.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:03:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:03:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:03:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:03:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:03:48.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:03:40', tmtdew=34.59, humidity=9.88, cloud=0.0, wind=36.58, temperature=26.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:03:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:03:48.790 [DEBUG] [Thread-19462] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:03:48.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:03:48.885 [DEBUG] [Thread-19465] [transport.py] [_log()] starting thread (client mode): 0x1493e950
2025-11-12T17:03:48.885 [DEBUG] [Thread-19465] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:03:48.900 [DEBUG] [Thread-19465] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:03:48.900 [INFO] [Thread-19465] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:03:48.907 [DEBUG] [Thread-19465] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] client lang: <none>
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] server lang: <none>
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] kex follows: False
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] Compression: none
2025-11-12T17:03:48.908 [DEBUG] [Thread-19465] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:03:48.966 [DEBUG] [Thread-19465] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:03:48.967 [DEBUG] [Thread-19465] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:03:48.968 [DEBUG] [Thread-19465] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:03:48.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:03:48.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:03:49.023 [DEBUG] [Thread-19465] [transport.py] [_log()] userauth is OK
2025-11-12T17:03:49.023 [DEBUG] [Thread-19465] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:03:49.023 [DEBUG] [Thread-19465] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:03:49.023 [DEBUG] [Thread-19465] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:03:49.023 [DEBUG] [Thread-19465] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:03:49.042 [INFO] [Thread-19465] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:03:49.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:03:49.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:03:49.816 [DEBUG] [Thread-19467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:03:49.890 [DEBUG] [Thread-19465] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:03:49.890 [DEBUG] [Thread-19465] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:03:49.938 [DEBUG] [Thread-19465] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:03:49.939 [DEBUG] [Thread-19465] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:03:49.948 [DEBUG] [Thread-19465] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:03:49.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:03: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-11-12T17:03: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-11-12T17:03:49.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:03:49.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:03:49.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:03:49.985 [DEBUG] [Thread-19465] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:03:50.002 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:03:50.003 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:04:04.872 [DEBUG] [Thread-19468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:04:19.907 [DEBUG] [Thread-19469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:04:19.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:04:19.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:04:19.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-11-12T17:04:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 4, 12), 34.77, 9.75, 0.0, 35.25, 26.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:04:20.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:04:12
2025-11-12T17:04:20.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:04:20.927 [DEBUG] [Thread-19470] [transport.py] [_log()] starting thread (client mode): 0x19ddb490
2025-11-12T17:04:20.927 [DEBUG] [Thread-19470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:04:20.946 [DEBUG] [Thread-19470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:04:20.946 [INFO] [Thread-19470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] client lang: <none>
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] server lang: <none>
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] kex follows: False
2025-11-12T17:04:20.949 [DEBUG] [Thread-19470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:04:20.950 [DEBUG] [Thread-19470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:04:20.950 [DEBUG] [Thread-19470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:04:20.950 [DEBUG] [Thread-19470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:04:20.950 [DEBUG] [Thread-19470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:04:20.950 [DEBUG] [Thread-19470] [transport.py] [_log()] Compression: none
2025-11-12T17:04:20.950 [DEBUG] [Thread-19470] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:04:20.966 [DEBUG] [Thread-19470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:04:20.966 [DEBUG] [Thread-19470] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:04:20.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:04:20.966 [DEBUG] [Thread-19470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:04:20.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:04:20.967 [DEBUG] [Thread-19470] [transport.py] [_log()] userauth is OK
2025-11-12T17:04:20.967 [DEBUG] [Thread-19470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:04:20.967 [DEBUG] [Thread-19470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:04:20.967 [DEBUG] [Thread-19470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:04:20.967 [DEBUG] [Thread-19470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:04:20.982 [INFO] [Thread-19470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:04:20.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:04:21.609 [DEBUG] [Thread-19470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:04:21.609 [DEBUG] [Thread-19470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:04:21.610 [DEBUG] [Thread-19470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:04:21.650 [DEBUG] [Thread-19470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:04:21.650 [DEBUG] [Thread-19470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:04:21.653 [DEBUG] [Thread-19470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:04:21.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:04:21.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:04:21.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:04:21.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:04:21.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:04:21.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:04:21.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.627517 -999.00  +26.00  36.81     14   -2.80 1 1 2 1 1   887    0 30.14 122.79 ----- 36.8 36.8 277.2 46.1 28.2 -28.7 28.2 -27.5 28.1 -26.6 28.4 -27.7
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.627517
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:04:21.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:04:12', tmtdew=34.77, humidity=9.75, cloud=0.0, wind=35.25, temperature=26.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:03:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:04:21.672 [DEBUG] [Thread-19470] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:04:21.746 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:04:21.758 [DEBUG] [Thread-19473] [transport.py] [_log()] starting thread (client mode): 0x19dd93c0
2025-11-12T17:04:21.758 [DEBUG] [Thread-19473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:04:21.773 [DEBUG] [Thread-19473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:04:21.773 [INFO] [Thread-19473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] client lang: <none>
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] server lang: <none>
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] kex follows: False
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] Compression: none
2025-11-12T17:04:21.780 [DEBUG] [Thread-19473] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:04:21.837 [DEBUG] [Thread-19473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:04:21.837 [DEBUG] [Thread-19473] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:04:21.837 [DEBUG] [Thread-19473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:04:21.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:04:21.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:04:21.898 [DEBUG] [Thread-19473] [transport.py] [_log()] userauth is OK
2025-11-12T17:04:21.898 [DEBUG] [Thread-19473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:04:21.898 [DEBUG] [Thread-19473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:04:21.898 [DEBUG] [Thread-19473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:04:21.899 [DEBUG] [Thread-19473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:04:21.915 [INFO] [Thread-19473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:04:21.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:04:21.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:04:22.776 [DEBUG] [Thread-19473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:04:22.776 [DEBUG] [Thread-19473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:04:22.824 [DEBUG] [Thread-19473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:04:22.824 [DEBUG] [Thread-19473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:04:22.832 [DEBUG] [Thread-19473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:04:22.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:04:22.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-11-12T17:04:22.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-11-12T17:04:22.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:04:22.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:04:22.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:04:22.865 [DEBUG] [Thread-19473] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:04:34.939 [DEBUG] [Thread-19475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:04:42.041 [DEBUG] [Thread-19476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:04:49.991 [DEBUG] [Thread-19477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:04:50.145 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:04:50.146 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:04:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:04:52.886 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:04:52.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-11-12T17:04:53.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 4, 44), 35.36, 8.97, 0.0, 34.9, 26.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:04:53.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:04:44
2025-11-12T17:04:53.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:04:53.806 [DEBUG] [Thread-19478] [transport.py] [_log()] starting thread (client mode): 0x149619c0
2025-11-12T17:04:53.807 [DEBUG] [Thread-19478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:04:53.817 [DEBUG] [Thread-19478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:04:53.817 [INFO] [Thread-19478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:04:53.818 [DEBUG] [Thread-19478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] client lang: <none>
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] server lang: <none>
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] kex follows: False
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] Compression: none
2025-11-12T17:04:53.826 [DEBUG] [Thread-19478] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:04:53.835 [DEBUG] [Thread-19478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:04:53.835 [DEBUG] [Thread-19478] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:04:53.835 [DEBUG] [Thread-19478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:04:53.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:04:53.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:04:53.837 [DEBUG] [Thread-19478] [transport.py] [_log()] userauth is OK
2025-11-12T17:04:53.837 [DEBUG] [Thread-19478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:04:53.837 [DEBUG] [Thread-19478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:04:53.837 [DEBUG] [Thread-19478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:04:53.837 [DEBUG] [Thread-19478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:04:53.858 [INFO] [Thread-19478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:04:53.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:04:54.487 [DEBUG] [Thread-19478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:04:54.487 [DEBUG] [Thread-19478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:04:54.488 [DEBUG] [Thread-19478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:04:54.529 [DEBUG] [Thread-19478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:04:54.529 [DEBUG] [Thread-19478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:04:54.532 [DEBUG] [Thread-19478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:04:54.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:04:54.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:04:54.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:04:54.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:04:54.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:04:54.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:04:54.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:04:54.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:04:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:04:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.627864 -999.00  +25.60  38.94     14   -3.10 1 1 2 1 1   887    0 29.77 123.14 ----- 38.9 38.9 274.8 45.7 27.9 -28.8 28.1 -27.1 27.8 -26.7 28.2 -28.1
2025-11-12T17:04:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:04:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:04:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.627864
2025-11-12T17:04:54.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:04:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:04:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:04:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:04:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:04:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:04:44', tmtdew=35.36, humidity=8.97, cloud=0.0, wind=34.9, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:04:07.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:04:54.561 [DEBUG] [Thread-19478] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:04:54.643 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:04:54.657 [DEBUG] [Thread-19481] [transport.py] [_log()] starting thread (client mode): 0x14963d00
2025-11-12T17:04:54.658 [DEBUG] [Thread-19481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:04:54.675 [DEBUG] [Thread-19481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:04:54.676 [INFO] [Thread-19481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:04:54.685 [DEBUG] [Thread-19481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:04:54.686 [DEBUG] [Thread-19481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:04:54.686 [DEBUG] [Thread-19481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:04:54.686 [DEBUG] [Thread-19481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:04:54.686 [DEBUG] [Thread-19481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:04:54.686 [DEBUG] [Thread-19481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:04:54.686 [DEBUG] [Thread-19481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:04:54.686 [DEBUG] [Thread-19481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:04:54.687 [DEBUG] [Thread-19481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:04:54.687 [DEBUG] [Thread-19481] [transport.py] [_log()] client lang: <none>
2025-11-12T17:04:54.687 [DEBUG] [Thread-19481] [transport.py] [_log()] server lang: <none>
2025-11-12T17:04:54.687 [DEBUG] [Thread-19481] [transport.py] [_log()] kex follows: False
2025-11-12T17:04:54.687 [DEBUG] [Thread-19481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:04:54.687 [DEBUG] [Thread-19481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:04:54.687 [DEBUG] [Thread-19481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:04:54.688 [DEBUG] [Thread-19481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:04:54.688 [DEBUG] [Thread-19481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:04:54.688 [DEBUG] [Thread-19481] [transport.py] [_log()] Compression: none
2025-11-12T17:04:54.688 [DEBUG] [Thread-19481] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:04:54.743 [DEBUG] [Thread-19481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:04:54.744 [DEBUG] [Thread-19481] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:04:54.744 [DEBUG] [Thread-19481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:04:54.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:04:54.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:04:54.799 [DEBUG] [Thread-19481] [transport.py] [_log()] userauth is OK
2025-11-12T17:04:54.799 [DEBUG] [Thread-19481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:04:54.800 [DEBUG] [Thread-19481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:04:54.800 [DEBUG] [Thread-19481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:04:54.800 [DEBUG] [Thread-19481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:04:54.820 [INFO] [Thread-19481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:04:54.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:04:54.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:04:55.711 [DEBUG] [Thread-19481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:04:55.711 [DEBUG] [Thread-19481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:04:55.760 [DEBUG] [Thread-19481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:04:55.760 [DEBUG] [Thread-19481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:04:55.769 [DEBUG] [Thread-19481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:04:55.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:04:55.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-11-12T17:04:55.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-11-12T17:04:55.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:04:55.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:04:55.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:04:55.806 [DEBUG] [Thread-19481] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:05:05.026 [DEBUG] [Thread-19483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:05:20.081 [DEBUG] [Thread-19484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:05:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:05:25.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:05:25.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-11-12T17:05:26.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 5, 16), 35.43, 8.92, 0.0, 33.7, 26.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:05:26.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:05:16
2025-11-12T17:05:26.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:05:26.757 [DEBUG] [Thread-19485] [transport.py] [_log()] starting thread (client mode): 0x14980df0
2025-11-12T17:05:26.757 [DEBUG] [Thread-19485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:05:26.781 [DEBUG] [Thread-19485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:05:26.782 [INFO] [Thread-19485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:05:26.785 [DEBUG] [Thread-19485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:05:26.785 [DEBUG] [Thread-19485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:05:26.785 [DEBUG] [Thread-19485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] client lang: <none>
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] server lang: <none>
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] kex follows: False
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] Compression: none
2025-11-12T17:05:26.786 [DEBUG] [Thread-19485] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:05:26.806 [DEBUG] [Thread-19485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:05:26.807 [DEBUG] [Thread-19485] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:05:26.808 [DEBUG] [Thread-19485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:05:26.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:05:26.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:05:26.810 [DEBUG] [Thread-19485] [transport.py] [_log()] userauth is OK
2025-11-12T17:05:26.810 [DEBUG] [Thread-19485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:05:26.810 [DEBUG] [Thread-19485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:05:26.811 [DEBUG] [Thread-19485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:05:26.811 [DEBUG] [Thread-19485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:05:26.844 [INFO] [Thread-19485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:05:26.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:05:27.517 [DEBUG] [Thread-19485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:05:27.517 [DEBUG] [Thread-19485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:05:27.518 [DEBUG] [Thread-19485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:05:27.559 [DEBUG] [Thread-19485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:05:27.559 [DEBUG] [Thread-19485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:05:27.562 [DEBUG] [Thread-19485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:05:27.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:05:27.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:05:27.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:05:27.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:05:27.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:05:27.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:05:27.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:05:27.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:05:27.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:05:27.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.628211 -999.00  +25.60  23.92     14   -3.20 1 1 1 1 1   887    0 30.59 138.22 ----- 23.9 23.9 276.0 41.0 27.9 -28.0 27.9 -26.6 27.6 -26.2 28.1 -27.0
2025-11-12T17:05:27.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:05:27.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:05:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.628211
2025-11-12T17:05:27.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:05:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:05:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:05:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:05:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:05:27.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:05:16', tmtdew=35.43, humidity=8.92, cloud=0.0, wind=33.7, temperature=26.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:04:37.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:05:27.592 [DEBUG] [Thread-19485] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:05:27.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:05:27.689 [DEBUG] [Thread-19488] [transport.py] [_log()] starting thread (client mode): 0x19dd91b0
2025-11-12T17:05:27.689 [DEBUG] [Thread-19488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:05:27.705 [DEBUG] [Thread-19488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:05:27.706 [INFO] [Thread-19488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:05:27.713 [DEBUG] [Thread-19488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:05:27.713 [DEBUG] [Thread-19488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:05:27.713 [DEBUG] [Thread-19488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:05:27.713 [DEBUG] [Thread-19488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:05:27.713 [DEBUG] [Thread-19488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:05:27.713 [DEBUG] [Thread-19488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:05:27.713 [DEBUG] [Thread-19488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:05:27.713 [DEBUG] [Thread-19488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] client lang: <none>
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] server lang: <none>
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] kex follows: False
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] Compression: none
2025-11-12T17:05:27.714 [DEBUG] [Thread-19488] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:05:27.771 [DEBUG] [Thread-19488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:05:27.771 [DEBUG] [Thread-19488] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:05:27.772 [DEBUG] [Thread-19488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:05:27.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:05:27.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:05:27.830 [DEBUG] [Thread-19488] [transport.py] [_log()] userauth is OK
2025-11-12T17:05:27.830 [DEBUG] [Thread-19488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:05:27.830 [DEBUG] [Thread-19488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:05:27.830 [DEBUG] [Thread-19488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:05:27.830 [DEBUG] [Thread-19488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:05:27.850 [INFO] [Thread-19488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:05:27.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:05:27.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:05:28.690 [DEBUG] [Thread-19488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:05:28.690 [DEBUG] [Thread-19488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:05:28.740 [DEBUG] [Thread-19488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:05:28.740 [DEBUG] [Thread-19488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:05:28.756 [DEBUG] [Thread-19488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:05:28.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:05:28.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-11-12T17:05:28.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-11-12T17:05:28.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:05:28.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:05:28.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:05:28.803 [DEBUG] [Thread-19488] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:05:35.122 [DEBUG] [Thread-19490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:05:42.080 [DEBUG] [Thread-19491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:05:50.170 [DEBUG] [Thread-19492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:05:50.286 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:05:50.287 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:05:58.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:05:58.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:05:58.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-11-12T17:05:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 5, 48), 35.34, 8.9, 0.0, 36.63, 26.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:05:59.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:05:48
2025-11-12T17:05:59.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:05:59.726 [DEBUG] [Thread-19493] [transport.py] [_log()] starting thread (client mode): 0x1493c580
2025-11-12T17:05:59.727 [DEBUG] [Thread-19493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:05:59.747 [DEBUG] [Thread-19493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:05:59.747 [INFO] [Thread-19493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] client lang: <none>
2025-11-12T17:05:59.751 [DEBUG] [Thread-19493] [transport.py] [_log()] server lang: <none>
2025-11-12T17:05:59.752 [DEBUG] [Thread-19493] [transport.py] [_log()] kex follows: False
2025-11-12T17:05:59.752 [DEBUG] [Thread-19493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:05:59.752 [DEBUG] [Thread-19493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:05:59.752 [DEBUG] [Thread-19493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:05:59.752 [DEBUG] [Thread-19493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:05:59.752 [DEBUG] [Thread-19493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:05:59.752 [DEBUG] [Thread-19493] [transport.py] [_log()] Compression: none
2025-11-12T17:05:59.752 [DEBUG] [Thread-19493] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:05:59.770 [DEBUG] [Thread-19493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:05:59.771 [DEBUG] [Thread-19493] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:05:59.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:05:59.773 [DEBUG] [Thread-19493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:05:59.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:05:59.775 [DEBUG] [Thread-19493] [transport.py] [_log()] userauth is OK
2025-11-12T17:05:59.775 [DEBUG] [Thread-19493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:05:59.775 [DEBUG] [Thread-19493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:05:59.776 [DEBUG] [Thread-19493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:05:59.776 [DEBUG] [Thread-19493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:05:59.805 [INFO] [Thread-19493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:05:59.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:06:00.545 [DEBUG] [Thread-19493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:06:00.546 [DEBUG] [Thread-19493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:06:00.546 [DEBUG] [Thread-19493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:06:00.587 [DEBUG] [Thread-19493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:06:00.587 [DEBUG] [Thread-19493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:06:00.590 [DEBUG] [Thread-19493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:06:00.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:06:00.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:06:00.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:06:00.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:06:00.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:06:00.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:06:00.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:06:00.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:06:00.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:06:00.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.628558 -999.00  +25.70  27.51     14   -3.00 1 1 1 1 1   887    0 30.09 138.96 ----- 27.5 27.5 267.8 32.9 27.9 -27.5 27.9 -26.3 27.6 -27.2 28.0 -26.4
2025-11-12T17:06:00.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:06:00.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:06:00.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.628558
2025-11-12T17:06:00.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:06:00.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:06:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:06:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:06:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:06:00.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:05:48', tmtdew=35.34, humidity=8.9, cloud=0.0, wind=36.63, temperature=26.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:05:07.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:06:00.616 [DEBUG] [Thread-19493] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:06:00.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:06:00.712 [DEBUG] [Thread-19496] [transport.py] [_log()] starting thread (client mode): 0x19ddb940
2025-11-12T17:06:00.713 [DEBUG] [Thread-19496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:06:00.726 [DEBUG] [Thread-19496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:06:00.726 [INFO] [Thread-19496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:06:00.734 [DEBUG] [Thread-19496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:06:00.734 [DEBUG] [Thread-19496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:06:00.734 [DEBUG] [Thread-19496] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:06:00.734 [DEBUG] [Thread-19496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:06:00.734 [DEBUG] [Thread-19496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:06:00.734 [DEBUG] [Thread-19496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:06:00.734 [DEBUG] [Thread-19496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] client lang: <none>
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] server lang: <none>
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] kex follows: False
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] Compression: none
2025-11-12T17:06:00.735 [DEBUG] [Thread-19496] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:06:00.791 [DEBUG] [Thread-19496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:06:00.792 [DEBUG] [Thread-19496] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:06:00.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:06:00.793 [DEBUG] [Thread-19496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:06:00.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:06:00.851 [DEBUG] [Thread-19496] [transport.py] [_log()] userauth is OK
2025-11-12T17:06:00.851 [DEBUG] [Thread-19496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:06:00.851 [DEBUG] [Thread-19496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:06:00.851 [DEBUG] [Thread-19496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:06:00.852 [DEBUG] [Thread-19496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:06:00.870 [INFO] [Thread-19496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:06:00.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:06:00.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:06:01.709 [DEBUG] [Thread-19496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:06:01.709 [DEBUG] [Thread-19496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:06:01.758 [DEBUG] [Thread-19496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:06:01.758 [DEBUG] [Thread-19496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:06:01.766 [DEBUG] [Thread-19496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:06:01.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:06:01.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:06:01.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:06:01.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:06:01.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:06:01.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:06:01.797 [DEBUG] [Thread-19496] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:06:05.204 [DEBUG] [Thread-19498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:06:20.262 [DEBUG] [Thread-19499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:06:31.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:06:31.813 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:06:31.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-11-12T17:06:32.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 6, 20), 35.27, 8.93, 0.0, 30.58, 26.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:06:32.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:06:20
2025-11-12T17:06:32.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:06:32.755 [DEBUG] [Thread-19500] [transport.py] [_log()] starting thread (client mode): 0x14981c90
2025-11-12T17:06:32.755 [DEBUG] [Thread-19500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:06:32.773 [DEBUG] [Thread-19500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:06:32.773 [INFO] [Thread-19500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] client lang: <none>
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] server lang: <none>
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] kex follows: False
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] Compression: none
2025-11-12T17:06:32.775 [DEBUG] [Thread-19500] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:06:32.793 [DEBUG] [Thread-19500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:06:32.793 [DEBUG] [Thread-19500] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:06:32.794 [DEBUG] [Thread-19500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:06:32.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:06:32.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:06:32.796 [DEBUG] [Thread-19500] [transport.py] [_log()] userauth is OK
2025-11-12T17:06:32.796 [DEBUG] [Thread-19500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:06:32.796 [DEBUG] [Thread-19500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:06:32.796 [DEBUG] [Thread-19500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:06:32.796 [DEBUG] [Thread-19500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:06:32.821 [INFO] [Thread-19500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:06:32.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:06:33.480 [DEBUG] [Thread-19500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:06:33.481 [DEBUG] [Thread-19500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:06:33.481 [DEBUG] [Thread-19500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:06:33.522 [DEBUG] [Thread-19500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:06:33.522 [DEBUG] [Thread-19500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:06:33.526 [DEBUG] [Thread-19500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:06:33.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:06:33.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:06:33.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:06:33.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:06:33.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:06:33.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:06:33.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:06:33.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:06:33.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:06:33.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.629253 -999.00  +25.90  19.40     14   -2.90 1 1 1 1 1   887    0 31.54 164.76 ----- 19.4 19.4 277.2 38.3 27.9 -27.0 27.8 -26.0 27.6 -25.8 27.9 -26.0
2025-11-12T17:06:33.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:06:33.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:06:33.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.629253
2025-11-12T17:06:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:06:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:06:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:06:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:06:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:06:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:06:20', tmtdew=35.27, humidity=8.93, cloud=0.0, wind=30.58, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:06:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:06:33.551 [DEBUG] [Thread-19500] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:06:33.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:06:33.646 [DEBUG] [Thread-19503] [transport.py] [_log()] starting thread (client mode): 0x17346da0
2025-11-12T17:06:33.646 [DEBUG] [Thread-19503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:06:33.661 [DEBUG] [Thread-19503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:06:33.661 [INFO] [Thread-19503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:06:33.668 [DEBUG] [Thread-19503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:06:33.669 [DEBUG] [Thread-19503] [transport.py] [_log()] client lang: <none>
2025-11-12T17:06:33.670 [DEBUG] [Thread-19503] [transport.py] [_log()] server lang: <none>
2025-11-12T17:06:33.670 [DEBUG] [Thread-19503] [transport.py] [_log()] kex follows: False
2025-11-12T17:06:33.670 [DEBUG] [Thread-19503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:06:33.670 [DEBUG] [Thread-19503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:06:33.670 [DEBUG] [Thread-19503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:06:33.670 [DEBUG] [Thread-19503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:06:33.670 [DEBUG] [Thread-19503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:06:33.671 [DEBUG] [Thread-19503] [transport.py] [_log()] Compression: none
2025-11-12T17:06:33.671 [DEBUG] [Thread-19503] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:06:33.728 [DEBUG] [Thread-19503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:06:33.729 [DEBUG] [Thread-19503] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:06:33.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:06:33.730 [DEBUG] [Thread-19503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:06:33.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:06:33.787 [DEBUG] [Thread-19503] [transport.py] [_log()] userauth is OK
2025-11-12T17:06:33.787 [DEBUG] [Thread-19503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:06:33.787 [DEBUG] [Thread-19503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:06:33.788 [DEBUG] [Thread-19503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:06:33.788 [DEBUG] [Thread-19503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:06:33.806 [INFO] [Thread-19503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:06:33.807 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:06:33.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:06:34.661 [DEBUG] [Thread-19503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:06:34.661 [DEBUG] [Thread-19503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:06:34.709 [DEBUG] [Thread-19503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:06:34.710 [DEBUG] [Thread-19503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:06:34.719 [DEBUG] [Thread-19503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:06:34.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:06:34.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-11-12T17:06:34.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-11-12T17:06:34.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:06:34.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:06:34.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:06:34.754 [DEBUG] [Thread-19503] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:06:35.299 [DEBUG] [Thread-19505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:06:42.114 [DEBUG] [Thread-19506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:06:50.364 [DEBUG] [Thread-19507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:06:50.428 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:06:50.429 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:07:04.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:07:04.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:07:04.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-11-12T17:07:05.394 [DEBUG] [Thread-19508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:07:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 6, 52), 35.13, 9.0, 0.0, 31.2, 26.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:07:05.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:06:52
2025-11-12T17:07:05.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:07:05.692 [DEBUG] [Thread-19509] [transport.py] [_log()] starting thread (client mode): 0x1737f580
2025-11-12T17:07:05.692 [DEBUG] [Thread-19509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:07:05.713 [DEBUG] [Thread-19509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:07:05.714 [INFO] [Thread-19509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:07:05.717 [DEBUG] [Thread-19509] [transport.py] [_log()] client lang: <none>
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] server lang: <none>
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] kex follows: False
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] Compression: none
2025-11-12T17:07:05.718 [DEBUG] [Thread-19509] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:07:05.729 [DEBUG] [Thread-19509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:07:05.729 [DEBUG] [Thread-19509] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:07:05.730 [DEBUG] [Thread-19509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:07:05.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:07:05.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:07:05.731 [DEBUG] [Thread-19509] [transport.py] [_log()] userauth is OK
2025-11-12T17:07:05.732 [DEBUG] [Thread-19509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:07:05.732 [DEBUG] [Thread-19509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:07:05.732 [DEBUG] [Thread-19509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:07:05.732 [DEBUG] [Thread-19509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:07:05.750 [INFO] [Thread-19509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:07:05.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:07:06.488 [DEBUG] [Thread-19509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:07:06.489 [DEBUG] [Thread-19509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:07:06.489 [DEBUG] [Thread-19509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:07:06.530 [DEBUG] [Thread-19509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:07:06.530 [DEBUG] [Thread-19509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:07:06.534 [DEBUG] [Thread-19509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:07:06.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:07:06.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:07:06.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:07:06.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:07:06.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:07:06.557 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:07:06.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:07:06.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:07:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:07:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.629600 -999.00  +25.90  33.63     14   -2.80 1 1 2 1 1   887    0 32.37 184.42 ----- 33.6 33.6 278.6 40.2 27.8 -26.6 27.8 -26.1 27.6 -24.7 27.8 -25.6
2025-11-12T17:07:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:07:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:07:06.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.629600
2025-11-12T17:07:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:07:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:07:06.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:07:06.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:07:06.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:07:06.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:06:52', tmtdew=35.13, humidity=9.0, cloud=0.0, wind=31.2, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:06:37.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:07:06.560 [DEBUG] [Thread-19509] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:07:06.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:07:06.667 [DEBUG] [Thread-19512] [transport.py] [_log()] starting thread (client mode): 0x149db7f0
2025-11-12T17:07:06.667 [DEBUG] [Thread-19512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:07:06.681 [DEBUG] [Thread-19512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:07:06.682 [INFO] [Thread-19512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:07:06.689 [DEBUG] [Thread-19512] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:07:06.689 [DEBUG] [Thread-19512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:07:06.689 [DEBUG] [Thread-19512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:07:06.689 [DEBUG] [Thread-19512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:07:06.689 [DEBUG] [Thread-19512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:07:06.689 [DEBUG] [Thread-19512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:07:06.689 [DEBUG] [Thread-19512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] client lang: <none>
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] server lang: <none>
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] kex follows: False
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] Compression: none
2025-11-12T17:07:06.690 [DEBUG] [Thread-19512] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:07:06.750 [DEBUG] [Thread-19512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:07:06.751 [DEBUG] [Thread-19512] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:07:06.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:07:06.752 [DEBUG] [Thread-19512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:07:06.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:07:06.812 [DEBUG] [Thread-19512] [transport.py] [_log()] userauth is OK
2025-11-12T17:07:06.813 [DEBUG] [Thread-19512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:07:06.813 [DEBUG] [Thread-19512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:07:06.813 [DEBUG] [Thread-19512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:07:06.813 [DEBUG] [Thread-19512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:07:06.832 [INFO] [Thread-19512] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:07:06.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:07:06.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:07:07.658 [DEBUG] [Thread-19512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:07:07.658 [DEBUG] [Thread-19512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:07:07.707 [DEBUG] [Thread-19512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:07:07.707 [DEBUG] [Thread-19512] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:07:07.716 [DEBUG] [Thread-19512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:07:07.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:07:07.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-11-12T17:07:07.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-11-12T17:07:07.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:07:07.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:07:07.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:07:07.755 [DEBUG] [Thread-19512] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:07:20.428 [DEBUG] [Thread-19514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:07:35.477 [DEBUG] [Thread-19515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:07:37.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:07:37.778 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:07:37.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-11-12T17:07:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 7, 24), 34.99, 9.1, 0.0, 43.83, 26.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:07:38.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:07:24
2025-11-12T17:07:38.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:07:38.697 [DEBUG] [Thread-19516] [transport.py] [_log()] starting thread (client mode): 0x149dbd00
2025-11-12T17:07:38.698 [DEBUG] [Thread-19516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:07:38.721 [DEBUG] [Thread-19516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:07:38.722 [INFO] [Thread-19516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:07:38.725 [DEBUG] [Thread-19516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:07:38.725 [DEBUG] [Thread-19516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:07:38.725 [DEBUG] [Thread-19516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:07:38.725 [DEBUG] [Thread-19516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] client lang: <none>
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] server lang: <none>
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] kex follows: False
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] Compression: none
2025-11-12T17:07:38.726 [DEBUG] [Thread-19516] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:07:38.743 [DEBUG] [Thread-19516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:07:38.743 [DEBUG] [Thread-19516] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:07:38.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:07:38.744 [DEBUG] [Thread-19516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:07:38.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:07:38.747 [DEBUG] [Thread-19516] [transport.py] [_log()] userauth is OK
2025-11-12T17:07:38.747 [DEBUG] [Thread-19516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:07:38.747 [DEBUG] [Thread-19516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:07:38.747 [DEBUG] [Thread-19516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:07:38.747 [DEBUG] [Thread-19516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:07:38.772 [INFO] [Thread-19516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:07:38.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:07:39.405 [DEBUG] [Thread-19516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:07:39.405 [DEBUG] [Thread-19516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:07:39.406 [DEBUG] [Thread-19516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:07:39.446 [DEBUG] [Thread-19516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:07:39.446 [DEBUG] [Thread-19516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:07:39.450 [DEBUG] [Thread-19516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:07:39.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:07:39.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:07:39.463 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:07:39.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:07:39.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:07:39.471 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:07:39.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:07:39.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:07:39.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:07:39.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.629948 -999.00  +25.70  39.48     14   -2.90 1 1 2 1 1   887    0 32.80 195.47 ----- 39.5 39.5 269.8 54.8 27.6 -28.1 27.7 -26.2 27.4 -27.2 27.8 -26.0
2025-11-12T17:07:39.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:07:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:07:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.629948
2025-11-12T17:07:39.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:07:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:07:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:07:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:07:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:07:39.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:07:24', tmtdew=34.99, humidity=9.1, cloud=0.0, wind=43.83, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:07:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:07:39.474 [DEBUG] [Thread-19516] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:07:39.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:07:39.578 [DEBUG] [Thread-19519] [transport.py] [_log()] starting thread (client mode): 0x173bd1b0
2025-11-12T17:07:39.578 [DEBUG] [Thread-19519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:07:39.593 [DEBUG] [Thread-19519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:07:39.594 [INFO] [Thread-19519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:07:39.601 [DEBUG] [Thread-19519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:07:39.601 [DEBUG] [Thread-19519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:07:39.601 [DEBUG] [Thread-19519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:07:39.601 [DEBUG] [Thread-19519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:07:39.601 [DEBUG] [Thread-19519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:07:39.601 [DEBUG] [Thread-19519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] client lang: <none>
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] server lang: <none>
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] kex follows: False
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] Compression: none
2025-11-12T17:07:39.602 [DEBUG] [Thread-19519] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:07:39.659 [DEBUG] [Thread-19519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:07:39.659 [DEBUG] [Thread-19519] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:07:39.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:07:39.661 [DEBUG] [Thread-19519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:07:39.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:07:39.715 [DEBUG] [Thread-19519] [transport.py] [_log()] userauth is OK
2025-11-12T17:07:39.715 [DEBUG] [Thread-19519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:07:39.715 [DEBUG] [Thread-19519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:07:39.715 [DEBUG] [Thread-19519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:07:39.715 [DEBUG] [Thread-19519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:07:39.734 [INFO] [Thread-19519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:07:39.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:07:39.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:07:40.551 [DEBUG] [Thread-19519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:07:40.552 [DEBUG] [Thread-19519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:07:40.601 [DEBUG] [Thread-19519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:07:40.601 [DEBUG] [Thread-19519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:07:40.613 [DEBUG] [Thread-19519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:07:40.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:07:40.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-11-12T17:07:40.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-11-12T17:07:40.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:07:40.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:07:40.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:07:40.655 [DEBUG] [Thread-19519] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:07:42.157 [DEBUG] [Thread-19521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:07:50.509 [DEBUG] [Thread-19522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:07:50.572 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:07:50.573 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:08:05.562 [DEBUG] [Thread-19523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:08:10.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:08:10.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:08:10.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:08:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 7, 56), 34.96, 9.08, 0.0, 39.47, 26.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:08:11.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:07:56
2025-11-12T17:08:11.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:08:11.629 [DEBUG] [Thread-19524] [transport.py] [_log()] starting thread (client mode): 0x14961d20
2025-11-12T17:08:11.629 [DEBUG] [Thread-19524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:08:11.641 [DEBUG] [Thread-19524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:08:11.641 [INFO] [Thread-19524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:08:11.643 [DEBUG] [Thread-19524] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] client lang: <none>
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] server lang: <none>
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] kex follows: False
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] Compression: none
2025-11-12T17:08:11.644 [DEBUG] [Thread-19524] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:08:11.652 [DEBUG] [Thread-19524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:08:11.652 [DEBUG] [Thread-19524] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:08:11.652 [DEBUG] [Thread-19524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:08:11.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:08:11.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:08:11.655 [DEBUG] [Thread-19524] [transport.py] [_log()] userauth is OK
2025-11-12T17:08:11.655 [DEBUG] [Thread-19524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:08:11.655 [DEBUG] [Thread-19524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:08:11.655 [DEBUG] [Thread-19524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:08:11.655 [DEBUG] [Thread-19524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:08:11.664 [INFO] [Thread-19524] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:08:11.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:08:12.296 [DEBUG] [Thread-19524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:08:12.296 [DEBUG] [Thread-19524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:08:12.296 [DEBUG] [Thread-19524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:08:12.337 [DEBUG] [Thread-19524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:08:12.337 [DEBUG] [Thread-19524] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:08:12.339 [DEBUG] [Thread-19524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:08:12.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:08:12.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:08:12.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:08:12.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:08:12.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:08:12.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:08:12.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.630295 -999.00  +25.70  31.99     14   -2.90 1 1 2 1 1   887    0 32.69 206.09 ----- 32.0 32.0 271.4 46.2 27.6 -27.3 27.7 -25.6 27.4 -24.7 27.9 -26.4
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.630295
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:08:12.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:07:56', tmtdew=34.96, humidity=9.08, cloud=0.0, wind=39.47, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:07:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:08:12.358 [DEBUG] [Thread-19524] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:08:12.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:08:12.444 [DEBUG] [Thread-19527] [transport.py] [_log()] starting thread (client mode): 0x149da7a0
2025-11-12T17:08:12.445 [DEBUG] [Thread-19527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:08:12.460 [DEBUG] [Thread-19527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:08:12.460 [INFO] [Thread-19527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:08:12.467 [DEBUG] [Thread-19527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] client lang: <none>
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] server lang: <none>
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] kex follows: False
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] Compression: none
2025-11-12T17:08:12.468 [DEBUG] [Thread-19527] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:08:12.529 [DEBUG] [Thread-19527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:08:12.529 [DEBUG] [Thread-19527] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:08:12.530 [DEBUG] [Thread-19527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:08:12.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:08:12.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:08:12.587 [DEBUG] [Thread-19527] [transport.py] [_log()] userauth is OK
2025-11-12T17:08:12.587 [DEBUG] [Thread-19527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:08:12.587 [DEBUG] [Thread-19527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:08:12.587 [DEBUG] [Thread-19527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:08:12.587 [DEBUG] [Thread-19527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:08:12.603 [INFO] [Thread-19527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:08:12.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:08:12.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:08:13.479 [DEBUG] [Thread-19527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:08:13.479 [DEBUG] [Thread-19527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:08:13.527 [DEBUG] [Thread-19527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:08:13.527 [DEBUG] [Thread-19527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:08:13.535 [DEBUG] [Thread-19527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:08:13.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:08:13.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-11-12T17:08:13.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-11-12T17:08:13.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:08:13.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:08:13.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:08:13.566 [DEBUG] [Thread-19527] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:08:20.596 [DEBUG] [Thread-19529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:08:35.649 [DEBUG] [Thread-19530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:08:42.190 [DEBUG] [Thread-19531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:08:43.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:08:43.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:08:43.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-11-12T17:08:44.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 8, 28), 35.02, 9.05, 0.0, 35.98, 26.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:08:44.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:08:28
2025-11-12T17:08:44.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:08:44.525 [DEBUG] [Thread-19532] [transport.py] [_log()] starting thread (client mode): 0x19dd9030
2025-11-12T17:08:44.525 [DEBUG] [Thread-19532] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:08:44.545 [DEBUG] [Thread-19532] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:08:44.546 [INFO] [Thread-19532] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:08:44.549 [DEBUG] [Thread-19532] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] client lang: <none>
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] server lang: <none>
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] kex follows: False
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] Compression: none
2025-11-12T17:08:44.550 [DEBUG] [Thread-19532] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:08:44.569 [DEBUG] [Thread-19532] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:08:44.570 [DEBUG] [Thread-19532] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:08:44.570 [DEBUG] [Thread-19532] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:08:44.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:08:44.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:08:44.573 [DEBUG] [Thread-19532] [transport.py] [_log()] userauth is OK
2025-11-12T17:08:44.573 [DEBUG] [Thread-19532] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:08:44.573 [DEBUG] [Thread-19532] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:08:44.573 [DEBUG] [Thread-19532] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:08:44.573 [DEBUG] [Thread-19532] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:08:44.608 [INFO] [Thread-19532] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:08:44.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:08:45.259 [DEBUG] [Thread-19532] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:08:45.260 [DEBUG] [Thread-19532] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:08:45.260 [DEBUG] [Thread-19532] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:08:45.301 [DEBUG] [Thread-19532] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:08:45.301 [DEBUG] [Thread-19532] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:08:45.304 [DEBUG] [Thread-19532] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:08:45.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:08:45.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:08:45.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:08:45.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:08:45.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:08:45.330 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:08:45.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.630642 -999.00  +25.80  34.71     14   -2.90 1 1 2 1 1   887    0 32.88 194.55 ----- 34.7 34.7 275.0 39.0 27.7 -27.4 27.7 -25.5 27.4 -26.0 27.8 -25.4
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.630642
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:08:45.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:08:28', tmtdew=35.02, humidity=9.05, cloud=0.0, wind=35.98, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:08:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:08:45.331 [DEBUG] [Thread-19532] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:08:45.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:08:45.423 [DEBUG] [Thread-19535] [transport.py] [_log()] starting thread (client mode): 0x149608e0
2025-11-12T17:08:45.423 [DEBUG] [Thread-19535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:08:45.438 [DEBUG] [Thread-19535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:08:45.438 [INFO] [Thread-19535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:08:45.445 [DEBUG] [Thread-19535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:08:45.445 [DEBUG] [Thread-19535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:08:45.445 [DEBUG] [Thread-19535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] client lang: <none>
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] server lang: <none>
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] kex follows: False
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] Compression: none
2025-11-12T17:08:45.446 [DEBUG] [Thread-19535] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:08:45.502 [DEBUG] [Thread-19535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:08:45.503 [DEBUG] [Thread-19535] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:08:45.503 [DEBUG] [Thread-19535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:08:45.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:08:45.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:08:45.559 [DEBUG] [Thread-19535] [transport.py] [_log()] userauth is OK
2025-11-12T17:08:45.559 [DEBUG] [Thread-19535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:08:45.559 [DEBUG] [Thread-19535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:08:45.559 [DEBUG] [Thread-19535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:08:45.559 [DEBUG] [Thread-19535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:08:45.577 [INFO] [Thread-19535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:08:45.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:08:45.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:08:46.399 [DEBUG] [Thread-19535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:08:46.400 [DEBUG] [Thread-19535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:08:46.448 [DEBUG] [Thread-19535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:08:46.448 [DEBUG] [Thread-19535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:08:46.457 [DEBUG] [Thread-19535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:08:46.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:08:46.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-11-12T17:08:46.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-11-12T17:08:46.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:08:46.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:08:46.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:08:46.494 [DEBUG] [Thread-19535] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:08:50.681 [DEBUG] [Thread-19537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:08:50.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:08:50.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:09:05.728 [DEBUG] [Thread-19538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:09:16.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:09:16.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:09:16.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-11-12T17:09:17.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 9), 34.99, 9.5, 0.0, 36.31, 26.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:09:17.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:09:00
2025-11-12T17:09:17.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:09:17.446 [DEBUG] [Thread-19539] [transport.py] [_log()] starting thread (client mode): 0x14960d30
2025-11-12T17:09:17.446 [DEBUG] [Thread-19539] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:09:17.462 [DEBUG] [Thread-19539] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:09:17.462 [INFO] [Thread-19539] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] client lang: <none>
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] server lang: <none>
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] kex follows: False
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] Compression: none
2025-11-12T17:09:17.465 [DEBUG] [Thread-19539] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:09:17.484 [DEBUG] [Thread-19539] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:09:17.484 [DEBUG] [Thread-19539] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:09:17.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:09:17.485 [DEBUG] [Thread-19539] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:09:17.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:09:17.487 [DEBUG] [Thread-19539] [transport.py] [_log()] userauth is OK
2025-11-12T17:09:17.487 [DEBUG] [Thread-19539] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:09:17.487 [DEBUG] [Thread-19539] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:09:17.487 [DEBUG] [Thread-19539] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:09:17.487 [DEBUG] [Thread-19539] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:09:17.511 [INFO] [Thread-19539] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:09:17.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:09:18.123 [DEBUG] [Thread-19539] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:09:18.124 [DEBUG] [Thread-19539] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:09:18.124 [DEBUG] [Thread-19539] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:09:18.164 [DEBUG] [Thread-19539] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:09:18.164 [DEBUG] [Thread-19539] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:09:18.167 [DEBUG] [Thread-19539] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:09:18.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:09:18.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:09:18.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:09:18.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:09:18.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:09:18.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:09:18.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:09:18.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:09:18.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:09:18.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.630989 -999.00  +25.90  29.85     14   -2.70 1 1 1 1 1   887    0 32.31 195.56 ----- 29.9 29.9 273.4 37.8 27.6 -27.5 27.7 -25.6 27.5 -25.0 27.8 -25.7
2025-11-12T17:09:18.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:09:18.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:09:18.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.630989
2025-11-12T17:09:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:09:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:09:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:09:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:09:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:09:18.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:09:00', tmtdew=34.99, humidity=9.5, cloud=0.0, wind=36.31, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:08:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:09:18.192 [DEBUG] [Thread-19539] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:09:18.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:09:18.287 [DEBUG] [Thread-19542] [transport.py] [_log()] starting thread (client mode): 0x1493d150
2025-11-12T17:09:18.287 [DEBUG] [Thread-19542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:09:18.301 [DEBUG] [Thread-19542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:09:18.301 [INFO] [Thread-19542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:09:18.309 [DEBUG] [Thread-19542] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:09:18.309 [DEBUG] [Thread-19542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:09:18.309 [DEBUG] [Thread-19542] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:09:18.309 [DEBUG] [Thread-19542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:09:18.309 [DEBUG] [Thread-19542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] client lang: <none>
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] server lang: <none>
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] kex follows: False
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] Compression: none
2025-11-12T17:09:18.310 [DEBUG] [Thread-19542] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:09:18.365 [DEBUG] [Thread-19542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:09:18.366 [DEBUG] [Thread-19542] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:09:18.366 [DEBUG] [Thread-19542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:09:18.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:09:18.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:09:18.422 [DEBUG] [Thread-19542] [transport.py] [_log()] userauth is OK
2025-11-12T17:09:18.422 [DEBUG] [Thread-19542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:09:18.422 [DEBUG] [Thread-19542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:09:18.422 [DEBUG] [Thread-19542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:09:18.422 [DEBUG] [Thread-19542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:09:18.444 [INFO] [Thread-19542] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:09:18.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:09:18.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:09:19.302 [DEBUG] [Thread-19542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:09:19.302 [DEBUG] [Thread-19542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:09:19.349 [DEBUG] [Thread-19542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:09:19.349 [DEBUG] [Thread-19542] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:09:19.358 [DEBUG] [Thread-19542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:09:19.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:09: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')
2025-11-12T17:09:19.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-11-12T17:09:19.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:09:19.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:09:19.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:09:19.392 [DEBUG] [Thread-19542] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:09:20.763 [DEBUG] [Thread-19544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:09:35.807 [DEBUG] [Thread-19545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:09:42.227 [DEBUG] [Thread-19546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:09:49.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:09:49.416 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:09:49.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-11-12T17:09:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 9, 32), 34.95, 9.53, 0.0, 36.6, 26.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:09:50.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:09:32
2025-11-12T17:09:50.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:09:50.351 [DEBUG] [Thread-19547] [transport.py] [_log()] starting thread (client mode): 0x19dd9c90
2025-11-12T17:09:50.352 [DEBUG] [Thread-19547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:09:50.372 [DEBUG] [Thread-19547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:09:50.372 [INFO] [Thread-19547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:09:50.375 [DEBUG] [Thread-19547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:09:50.375 [DEBUG] [Thread-19547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:09:50.375 [DEBUG] [Thread-19547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:09:50.375 [DEBUG] [Thread-19547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] client lang: <none>
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] server lang: <none>
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] kex follows: False
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] Compression: none
2025-11-12T17:09:50.376 [DEBUG] [Thread-19547] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:09:50.395 [DEBUG] [Thread-19547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:09:50.395 [DEBUG] [Thread-19547] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:09:50.396 [DEBUG] [Thread-19547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:09:50.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:09:50.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:09:50.398 [DEBUG] [Thread-19547] [transport.py] [_log()] userauth is OK
2025-11-12T17:09:50.398 [DEBUG] [Thread-19547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:09:50.398 [DEBUG] [Thread-19547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:09:50.398 [DEBUG] [Thread-19547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:09:50.398 [DEBUG] [Thread-19547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:09:50.435 [INFO] [Thread-19547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:09:50.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:09:50.844 [DEBUG] [Thread-19549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:09:50.867 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:09:50.868 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:09:51.023 [DEBUG] [Thread-19547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:09:51.023 [DEBUG] [Thread-19547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:09:51.023 [DEBUG] [Thread-19547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:09:51.064 [DEBUG] [Thread-19547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:09:51.064 [DEBUG] [Thread-19547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:09:51.067 [DEBUG] [Thread-19547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:09:51.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:09:51.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:09:51.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:09:51.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:09:51.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:09:51.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:09:51.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:09:51.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:09:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:09:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.631336 -999.00  +25.70  22.76     14   -2.80 1 1 1 1 1   887    0 33.18 211.54 ----- 22.8 22.8 277.2 38.5 27.6 -26.7 27.6 -26.0 27.5 -24.6 27.8 -25.7
2025-11-12T17:09:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:09:51.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:09:51.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.631336
2025-11-12T17:09:51.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:09:51.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:09:51.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:09:51.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:09:51.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:09:51.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:09:32', tmtdew=34.95, humidity=9.53, cloud=0.0, wind=36.6, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:09:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:09:51.091 [DEBUG] [Thread-19547] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:09:51.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:09:51.190 [DEBUG] [Thread-19551] [transport.py] [_log()] starting thread (client mode): 0x17346c50
2025-11-12T17:09:51.190 [DEBUG] [Thread-19551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:09:51.209 [DEBUG] [Thread-19551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:09:51.209 [INFO] [Thread-19551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:09:51.218 [DEBUG] [Thread-19551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:09:51.218 [DEBUG] [Thread-19551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:09:51.218 [DEBUG] [Thread-19551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:09:51.218 [DEBUG] [Thread-19551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:09:51.218 [DEBUG] [Thread-19551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:09:51.218 [DEBUG] [Thread-19551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] client lang: <none>
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] server lang: <none>
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] kex follows: False
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:09:51.219 [DEBUG] [Thread-19551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:09:51.220 [DEBUG] [Thread-19551] [transport.py] [_log()] Compression: none
2025-11-12T17:09:51.220 [DEBUG] [Thread-19551] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:09:51.278 [DEBUG] [Thread-19551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:09:51.279 [DEBUG] [Thread-19551] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:09:51.279 [DEBUG] [Thread-19551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:09:51.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:09:51.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:09:51.338 [DEBUG] [Thread-19551] [transport.py] [_log()] userauth is OK
2025-11-12T17:09:51.338 [DEBUG] [Thread-19551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:09:51.339 [DEBUG] [Thread-19551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:09:51.339 [DEBUG] [Thread-19551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:09:51.339 [DEBUG] [Thread-19551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:09:51.358 [INFO] [Thread-19551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:09:51.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:09:51.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:09:52.194 [DEBUG] [Thread-19551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:09:52.194 [DEBUG] [Thread-19551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:09:52.242 [DEBUG] [Thread-19551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:09:52.242 [DEBUG] [Thread-19551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:09:52.251 [DEBUG] [Thread-19551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:09:52.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:09:52.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-11-12T17:09:52.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-11-12T17:09:52.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:09:52.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:09:52.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:09:52.288 [DEBUG] [Thread-19551] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:10:05.881 [DEBUG] [Thread-19553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:10:20.921 [DEBUG] [Thread-19554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:10:22.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:10:22.311 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:10:22.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:10:22.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 10, 4), 35.03, 9.48, 0.0, 37.39, 26.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:10:22.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:10:04
2025-11-12T17:10:23.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:10:23.233 [DEBUG] [Thread-19555] [transport.py] [_log()] starting thread (client mode): 0x11f104c0
2025-11-12T17:10:23.233 [DEBUG] [Thread-19555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:10:23.252 [DEBUG] [Thread-19555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:10:23.253 [INFO] [Thread-19555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:10:23.255 [DEBUG] [Thread-19555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] client lang: <none>
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] server lang: <none>
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] kex follows: False
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] Compression: none
2025-11-12T17:10:23.256 [DEBUG] [Thread-19555] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:10:23.271 [DEBUG] [Thread-19555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:10:23.272 [DEBUG] [Thread-19555] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:10:23.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:10:23.273 [DEBUG] [Thread-19555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:10:23.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:10:23.275 [DEBUG] [Thread-19555] [transport.py] [_log()] userauth is OK
2025-11-12T17:10:23.275 [DEBUG] [Thread-19555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:10:23.275 [DEBUG] [Thread-19555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:10:23.275 [DEBUG] [Thread-19555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:10:23.275 [DEBUG] [Thread-19555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:10:23.311 [INFO] [Thread-19555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:10:23.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:10:24.065 [DEBUG] [Thread-19555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:10:24.065 [DEBUG] [Thread-19555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:10:24.065 [DEBUG] [Thread-19555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:10:24.106 [DEBUG] [Thread-19555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:10:24.106 [DEBUG] [Thread-19555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:10:24.109 [DEBUG] [Thread-19555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:10:24.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:10:24.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:10:24.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:10:24.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:10:24.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:10:24.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:10:24.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:10:24.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:10:24.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:10:24.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.631684 -999.00  +25.80  28.34     14   -3.00 1 1 1 1 1   887    0 32.90 202.05 ----- 28.3 28.3 273.0 34.5 27.6 -27.3 27.6 -25.5 27.5 -25.5 27.8 -26.3
2025-11-12T17:10:24.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:10:24.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:10:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.631684
2025-11-12T17:10:24.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:10:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:10:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:10:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:10:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:10:24.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:10:04', tmtdew=35.03, humidity=9.48, cloud=0.0, wind=37.39, temperature=26.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:09:37.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:10:24.135 [DEBUG] [Thread-19555] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:10:24.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:10:24.231 [DEBUG] [Thread-19558] [transport.py] [_log()] starting thread (client mode): 0x11f13400
2025-11-12T17:10:24.231 [DEBUG] [Thread-19558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:10:24.246 [DEBUG] [Thread-19558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:10:24.246 [INFO] [Thread-19558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:10:24.254 [DEBUG] [Thread-19558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:10:24.254 [DEBUG] [Thread-19558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:10:24.254 [DEBUG] [Thread-19558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] client lang: <none>
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] server lang: <none>
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] kex follows: False
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] Compression: none
2025-11-12T17:10:24.255 [DEBUG] [Thread-19558] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:10:24.311 [DEBUG] [Thread-19558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:10:24.311 [DEBUG] [Thread-19558] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:10:24.312 [DEBUG] [Thread-19558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:10:24.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:10:24.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:10:24.368 [DEBUG] [Thread-19558] [transport.py] [_log()] userauth is OK
2025-11-12T17:10:24.368 [DEBUG] [Thread-19558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:10:24.369 [DEBUG] [Thread-19558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:10:24.369 [DEBUG] [Thread-19558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:10:24.369 [DEBUG] [Thread-19558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:10:24.387 [INFO] [Thread-19558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:10:24.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:10:24.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:10:25.228 [DEBUG] [Thread-19558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:10:25.229 [DEBUG] [Thread-19558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:10:25.277 [DEBUG] [Thread-19558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:10:25.278 [DEBUG] [Thread-19558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:10:25.287 [DEBUG] [Thread-19558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:10:25.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:10:25.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:10:25.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:10:25.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:10:25.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:10:25.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:10:25.324 [DEBUG] [Thread-19558] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:10:35.958 [DEBUG] [Thread-19560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:10:42.272 [DEBUG] [Thread-19561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:10:51.004 [DEBUG] [Thread-19562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:10:51.008 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:10:51.009 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:10:55.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:10:55.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:10:55.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-11-12T17:10:56.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 10, 36), 35.36, 8.92, 0.0, 35.15, 26.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:10:56.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:10:36
2025-11-12T17:10:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:10:56.288 [DEBUG] [Thread-19563] [transport.py] [_log()] starting thread (client mode): 0x11f10f70
2025-11-12T17:10:56.288 [DEBUG] [Thread-19563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:10:56.307 [DEBUG] [Thread-19563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:10:56.307 [INFO] [Thread-19563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:10:56.308 [DEBUG] [Thread-19563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:10:56.308 [DEBUG] [Thread-19563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:10:56.308 [DEBUG] [Thread-19563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:10:56.308 [DEBUG] [Thread-19563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:10:56.308 [DEBUG] [Thread-19563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:10:56.308 [DEBUG] [Thread-19563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:10:56.308 [DEBUG] [Thread-19563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] client lang: <none>
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] server lang: <none>
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] kex follows: False
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] Compression: none
2025-11-12T17:10:56.309 [DEBUG] [Thread-19563] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:10:56.326 [DEBUG] [Thread-19563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:10:56.327 [DEBUG] [Thread-19563] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:10:56.327 [DEBUG] [Thread-19563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:10:56.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:10:56.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:10:56.329 [DEBUG] [Thread-19563] [transport.py] [_log()] userauth is OK
2025-11-12T17:10:56.329 [DEBUG] [Thread-19563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:10:56.329 [DEBUG] [Thread-19563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:10:56.329 [DEBUG] [Thread-19563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:10:56.330 [DEBUG] [Thread-19563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:10:56.354 [INFO] [Thread-19563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:10:56.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:10:56.987 [DEBUG] [Thread-19563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:10:56.988 [DEBUG] [Thread-19563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:10:56.988 [DEBUG] [Thread-19563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:10:57.029 [DEBUG] [Thread-19563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:10:57.029 [DEBUG] [Thread-19563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:10:57.033 [DEBUG] [Thread-19563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:10:57.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:10:57.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:10:57.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:10:57.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:10:57.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:10:57.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:10:57.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:10:57.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:10:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:10:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.632031 -999.00  +25.70  28.50     14   -3.00 1 1 1 1 1   887    0 33.22 209.04 ----- 24.8 28.5 274.8 43.1 27.6 -26.7 27.6 -25.6 27.4 -25.8 27.8 -25.6
2025-11-12T17:10:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:10:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:10:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.632031
2025-11-12T17:10:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:10:57.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:10:57.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:10:57.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:10:57.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:10:57.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:10:36', tmtdew=35.36, humidity=8.92, cloud=0.0, wind=35.15, temperature=26.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:10:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:10:57.059 [DEBUG] [Thread-19563] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:10:57.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:10:57.154 [DEBUG] [Thread-19566] [transport.py] [_log()] starting thread (client mode): 0x14982440
2025-11-12T17:10:57.154 [DEBUG] [Thread-19566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:10:57.170 [DEBUG] [Thread-19566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:10:57.170 [INFO] [Thread-19566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:10:57.177 [DEBUG] [Thread-19566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:10:57.177 [DEBUG] [Thread-19566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:10:57.177 [DEBUG] [Thread-19566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] client lang: <none>
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] server lang: <none>
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] kex follows: False
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] Compression: none
2025-11-12T17:10:57.178 [DEBUG] [Thread-19566] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:10:57.236 [DEBUG] [Thread-19566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:10:57.237 [DEBUG] [Thread-19566] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:10:57.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:10:57.238 [DEBUG] [Thread-19566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:10:57.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:10:57.296 [DEBUG] [Thread-19566] [transport.py] [_log()] userauth is OK
2025-11-12T17:10:57.297 [DEBUG] [Thread-19566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:10:57.297 [DEBUG] [Thread-19566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:10:57.297 [DEBUG] [Thread-19566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:10:57.297 [DEBUG] [Thread-19566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:10:57.319 [INFO] [Thread-19566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:10:57.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:10:57.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:10:58.133 [DEBUG] [Thread-19566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:10:58.134 [DEBUG] [Thread-19566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:10:58.184 [DEBUG] [Thread-19566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:10:58.184 [DEBUG] [Thread-19566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:10:58.195 [DEBUG] [Thread-19566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:10:58.206 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:10:58.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-11-12T17:10:58.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-11-12T17:10:58.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:10:58.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:10:58.228 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:10:58.236 [DEBUG] [Thread-19566] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:11:06.040 [DEBUG] [Thread-19568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:11:21.093 [DEBUG] [Thread-19569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:11:28.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:11:28.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:11:28.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-11-12T17:11:28.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 11, 8), 35.41, 8.87, 0.0, 32.06, 26.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:11:28.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:11:08
2025-11-12T17:11:29.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:11:29.212 [DEBUG] [Thread-19570] [transport.py] [_log()] starting thread (client mode): 0x173e9ed0
2025-11-12T17:11:29.213 [DEBUG] [Thread-19570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:11:29.230 [DEBUG] [Thread-19570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:11:29.230 [INFO] [Thread-19570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] client lang: <none>
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] server lang: <none>
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] kex follows: False
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] Compression: none
2025-11-12T17:11:29.233 [DEBUG] [Thread-19570] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:11:29.241 [DEBUG] [Thread-19570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:11:29.241 [DEBUG] [Thread-19570] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:11:29.241 [DEBUG] [Thread-19570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:11:29.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:11:29.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:11:29.242 [DEBUG] [Thread-19570] [transport.py] [_log()] userauth is OK
2025-11-12T17:11:29.242 [DEBUG] [Thread-19570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:11:29.242 [DEBUG] [Thread-19570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:11:29.242 [DEBUG] [Thread-19570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:11:29.242 [DEBUG] [Thread-19570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:11:29.252 [INFO] [Thread-19570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:11:29.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:11:29.823 [DEBUG] [Thread-19570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:11:29.823 [DEBUG] [Thread-19570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:11:29.824 [DEBUG] [Thread-19570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:11:29.864 [DEBUG] [Thread-19570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:11:29.864 [DEBUG] [Thread-19570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:11:29.867 [DEBUG] [Thread-19570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:11:29.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:11:29.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:11:29.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:11:29.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:11:29.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:11:29.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:11:29.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:11:29.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:11:29.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:11:29.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.632725 -999.00  +25.80  27.86     14   -2.90 1 1 1 1 1   887    0 32.90 198.83 ----- 27.9 27.9 283.8 39.6 27.6 -26.4 27.6 -24.9 27.4 -25.5 27.8 -25.4
2025-11-12T17:11:29.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:11:29.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:11:29.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.632725
2025-11-12T17:11:29.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:11:29.891 [DEBUG] [Thread-19570] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:11:29.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:11:29.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:11:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:11:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:11:29.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:11:08', tmtdew=35.41, humidity=8.87, cloud=0.0, wind=32.06, temperature=26.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:11:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:11:29.984 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:11:29.996 [DEBUG] [Thread-19573] [transport.py] [_log()] starting thread (client mode): 0x1493f100
2025-11-12T17:11:29.996 [DEBUG] [Thread-19573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:11:30.014 [DEBUG] [Thread-19573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:11:30.014 [INFO] [Thread-19573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:11:30.021 [DEBUG] [Thread-19573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] client lang: <none>
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] server lang: <none>
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] kex follows: False
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:11:30.022 [DEBUG] [Thread-19573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:11:30.023 [DEBUG] [Thread-19573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:11:30.023 [DEBUG] [Thread-19573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:11:30.023 [DEBUG] [Thread-19573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:11:30.023 [DEBUG] [Thread-19573] [transport.py] [_log()] Compression: none
2025-11-12T17:11:30.023 [DEBUG] [Thread-19573] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:11:30.078 [DEBUG] [Thread-19573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:11:30.078 [DEBUG] [Thread-19573] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:11:30.079 [DEBUG] [Thread-19573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:11:30.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:11:30.079 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:11:30.135 [DEBUG] [Thread-19573] [transport.py] [_log()] userauth is OK
2025-11-12T17:11:30.135 [DEBUG] [Thread-19573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:11:30.135 [DEBUG] [Thread-19573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:11:30.135 [DEBUG] [Thread-19573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:11:30.135 [DEBUG] [Thread-19573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:11:30.158 [INFO] [Thread-19573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:11:30.158 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:11:30.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:11:30.986 [DEBUG] [Thread-19573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:11:30.987 [DEBUG] [Thread-19573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:11:31.035 [DEBUG] [Thread-19573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:11:31.035 [DEBUG] [Thread-19573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:11:31.044 [DEBUG] [Thread-19573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:11:31.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:11:31.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-11-12T17:11:31.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-11-12T17:11:31.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:11:31.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:11:31.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:11:31.082 [DEBUG] [Thread-19573] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:11:36.125 [DEBUG] [Thread-19575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:11:42.300 [DEBUG] [Thread-19576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:11:51.150 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:11:51.151 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:11:51.178 [DEBUG] [Thread-19577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:12:01.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:12:01.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:12: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-11-12T17:12:01.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 11, 40), 35.23, 9.07, 0.0, 32.16, 26.6, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:12:01.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:11:40
2025-11-12T17:12:01.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:12:02.028 [DEBUG] [Thread-19578] [transport.py] [_log()] starting thread (client mode): 0x173ebb20
2025-11-12T17:12:02.028 [DEBUG] [Thread-19578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:12:02.048 [DEBUG] [Thread-19578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:12:02.048 [INFO] [Thread-19578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:12:02.051 [DEBUG] [Thread-19578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:12:02.051 [DEBUG] [Thread-19578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:12:02.051 [DEBUG] [Thread-19578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:12:02.051 [DEBUG] [Thread-19578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:12:02.051 [DEBUG] [Thread-19578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:12:02.051 [DEBUG] [Thread-19578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:12:02.051 [DEBUG] [Thread-19578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:12:02.051 [DEBUG] [Thread-19578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] client lang: <none>
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] server lang: <none>
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] kex follows: False
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] Compression: none
2025-11-12T17:12:02.052 [DEBUG] [Thread-19578] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:12:02.070 [DEBUG] [Thread-19578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:12:02.070 [DEBUG] [Thread-19578] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:12:02.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:12:02.071 [DEBUG] [Thread-19578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:12:02.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:12:02.073 [DEBUG] [Thread-19578] [transport.py] [_log()] userauth is OK
2025-11-12T17:12:02.074 [DEBUG] [Thread-19578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:12:02.074 [DEBUG] [Thread-19578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:12:02.074 [DEBUG] [Thread-19578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:12:02.074 [DEBUG] [Thread-19578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:12:02.093 [INFO] [Thread-19578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:12:02.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:12:02.710 [DEBUG] [Thread-19578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:12:02.710 [DEBUG] [Thread-19578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:12:02.710 [DEBUG] [Thread-19578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:12:02.751 [DEBUG] [Thread-19578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:12:02.751 [DEBUG] [Thread-19578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:12:02.753 [DEBUG] [Thread-19578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:12:02.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:12:02.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:12:02.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:12:02.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:12:02.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:12:02.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:12:02.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.633073 -999.00  +25.90  28.56     15   -2.60 1 1 1 1 1   887    0 33.11 190.82 ----- 27.0 28.6 274.7 39.6 27.6 -26.1 27.6 -24.7 27.4 -24.7 27.8 -24.8
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.633073
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:12:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:11:40', tmtdew=35.23, humidity=9.07, cloud=0.0, wind=32.16, temperature=26.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:11:37.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:12:02.771 [DEBUG] [Thread-19578] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:12:02.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:12:02.857 [DEBUG] [Thread-19581] [transport.py] [_log()] starting thread (client mode): 0x173bfb80
2025-11-12T17:12:02.857 [DEBUG] [Thread-19581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:12:02.875 [DEBUG] [Thread-19581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:12:02.875 [INFO] [Thread-19581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:12:02.882 [DEBUG] [Thread-19581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:12:02.882 [DEBUG] [Thread-19581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:12:02.882 [DEBUG] [Thread-19581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:12:02.882 [DEBUG] [Thread-19581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:12:02.882 [DEBUG] [Thread-19581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] client lang: <none>
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] server lang: <none>
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] kex follows: False
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] Compression: none
2025-11-12T17:12:02.883 [DEBUG] [Thread-19581] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:12:02.942 [DEBUG] [Thread-19581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:12:02.943 [DEBUG] [Thread-19581] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:12:02.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:12:02.943 [DEBUG] [Thread-19581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:12:02.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:12:02.999 [DEBUG] [Thread-19581] [transport.py] [_log()] userauth is OK
2025-11-12T17:12:02.999 [DEBUG] [Thread-19581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:12:02.999 [DEBUG] [Thread-19581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:12:02.999 [DEBUG] [Thread-19581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:12:02.999 [DEBUG] [Thread-19581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:12:03.013 [INFO] [Thread-19581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:12:03.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:12:03.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:12:03.850 [DEBUG] [Thread-19581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:12:03.850 [DEBUG] [Thread-19581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:12:03.898 [DEBUG] [Thread-19581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:12:03.898 [DEBUG] [Thread-19581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:12:03.906 [DEBUG] [Thread-19581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:12:03.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:12:03.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-11-12T17:12:03.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:12:03.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:12:03.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:12:03.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:12:03.940 [DEBUG] [Thread-19581] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:12:06.209 [DEBUG] [Thread-19583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:12:21.251 [DEBUG] [Thread-19584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:12:33.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:12:33.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:12:33.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-11-12T17:12:34.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 12, 12), 34.87, 9.33, 0.0, 30.42, 26.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:12:34.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:12:12
2025-11-12T17:12:34.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:12:34.871 [DEBUG] [Thread-19585] [transport.py] [_log()] starting thread (client mode): 0x149ab640
2025-11-12T17:12:34.871 [DEBUG] [Thread-19585] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:12:34.896 [DEBUG] [Thread-19585] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:12:34.896 [INFO] [Thread-19585] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:12:34.899 [DEBUG] [Thread-19585] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] client lang: <none>
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] server lang: <none>
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] kex follows: False
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] Compression: none
2025-11-12T17:12:34.900 [DEBUG] [Thread-19585] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:12:34.914 [DEBUG] [Thread-19585] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:12:34.914 [DEBUG] [Thread-19585] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:12:34.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:12:34.915 [DEBUG] [Thread-19585] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:12:34.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:12:34.917 [DEBUG] [Thread-19585] [transport.py] [_log()] userauth is OK
2025-11-12T17:12:34.918 [DEBUG] [Thread-19585] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:12:34.918 [DEBUG] [Thread-19585] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:12:34.918 [DEBUG] [Thread-19585] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:12:34.918 [DEBUG] [Thread-19585] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:12:34.945 [INFO] [Thread-19585] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:12:34.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:12:35.631 [DEBUG] [Thread-19585] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:12:35.631 [DEBUG] [Thread-19585] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:12:35.632 [DEBUG] [Thread-19585] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:12:35.672 [DEBUG] [Thread-19585] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:12:35.672 [DEBUG] [Thread-19585] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:12:35.675 [DEBUG] [Thread-19585] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:12:35.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:12:35.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:12:35.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:12:35.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:12:35.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:12:35.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:12:35.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:12:35.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:12:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:12:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.633420 -999.00  +25.90  34.26     15   -2.40 1 1 2 1 1   887    0 32.39 177.15 ----- 26.3 34.3 282.6 48.1 27.5 -26.5 27.6 -25.1 27.5 -25.6 27.8 -25.4
2025-11-12T17:12:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:12:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:12:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.633420
2025-11-12T17:12:35.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:12:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:12:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:12:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:12:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:12:35.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:12:12', tmtdew=34.87, humidity=9.33, cloud=0.0, wind=30.42, temperature=26.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:12:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:12:35.701 [DEBUG] [Thread-19585] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:12:35.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:12:35.795 [DEBUG] [Thread-19588] [transport.py] [_log()] starting thread (client mode): 0x149808b0
2025-11-12T17:12:35.795 [DEBUG] [Thread-19588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:12:35.810 [DEBUG] [Thread-19588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:12:35.810 [INFO] [Thread-19588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] client lang: <none>
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] server lang: <none>
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] kex follows: False
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:12:35.818 [DEBUG] [Thread-19588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:12:35.819 [DEBUG] [Thread-19588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:12:35.819 [DEBUG] [Thread-19588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:12:35.819 [DEBUG] [Thread-19588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:12:35.819 [DEBUG] [Thread-19588] [transport.py] [_log()] Compression: none
2025-11-12T17:12:35.819 [DEBUG] [Thread-19588] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:12:35.875 [DEBUG] [Thread-19588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:12:35.875 [DEBUG] [Thread-19588] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:12:35.876 [DEBUG] [Thread-19588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:12:35.876 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:12:35.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:12:35.931 [DEBUG] [Thread-19588] [transport.py] [_log()] userauth is OK
2025-11-12T17:12:35.932 [DEBUG] [Thread-19588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:12:35.932 [DEBUG] [Thread-19588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:12:35.932 [DEBUG] [Thread-19588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:12:35.932 [DEBUG] [Thread-19588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:12:35.952 [INFO] [Thread-19588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:12:35.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:12:35.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:12:36.289 [DEBUG] [Thread-19590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:12:36.770 [DEBUG] [Thread-19588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:12:36.770 [DEBUG] [Thread-19588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:12:36.819 [DEBUG] [Thread-19588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:12:36.819 [DEBUG] [Thread-19588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:12:36.828 [DEBUG] [Thread-19588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:12:36.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:12:36.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-11-12T17:12:36.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-11-12T17:12:36.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:12:36.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:12:36.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:12:36.864 [DEBUG] [Thread-19588] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:12:42.328 [DEBUG] [Thread-19591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:12:51.294 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:12:51.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:12:51.340 [DEBUG] [Thread-19592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:13:06.377 [DEBUG] [Thread-19593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:13:06.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:13:06.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:13:06.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-11-12T17:13:07.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 12, 44), 34.5, 9.85, 0.0, 32.55, 26.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:13:07.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:12:44
2025-11-12T17:13:07.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:13:07.797 [DEBUG] [Thread-19594] [transport.py] [_log()] starting thread (client mode): 0x14961d20
2025-11-12T17:13:07.798 [DEBUG] [Thread-19594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:13:07.819 [DEBUG] [Thread-19594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:13:07.819 [INFO] [Thread-19594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] client lang: <none>
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] server lang: <none>
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] kex follows: False
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] Compression: none
2025-11-12T17:13:07.822 [DEBUG] [Thread-19594] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:13:07.839 [DEBUG] [Thread-19594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:13:07.839 [DEBUG] [Thread-19594] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:13:07.840 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:13:07.840 [DEBUG] [Thread-19594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:13:07.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:13:07.842 [DEBUG] [Thread-19594] [transport.py] [_log()] userauth is OK
2025-11-12T17:13:07.843 [DEBUG] [Thread-19594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:13:07.843 [DEBUG] [Thread-19594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:13:07.843 [DEBUG] [Thread-19594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:13:07.843 [DEBUG] [Thread-19594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:13:07.867 [INFO] [Thread-19594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:13:07.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:13:08.489 [DEBUG] [Thread-19594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:13:08.489 [DEBUG] [Thread-19594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:13:08.489 [DEBUG] [Thread-19594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:13:08.530 [DEBUG] [Thread-19594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:13:08.530 [DEBUG] [Thread-19594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:13:08.533 [DEBUG] [Thread-19594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:13:08.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:13:08.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:13:08.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:13:08.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:13:08.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:13:08.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:13:08.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:13:08.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:13:08.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:13:08.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.633767 -999.00  +25.90  26.83     15   -2.20 1 1 1 1 1   887    0 32.56 173.10 ----- 31.0 26.8 280.6 35.5 27.6 -26.3 27.6 -24.7 27.5 -24.3 27.9 -24.8
2025-11-12T17:13:08.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:13:08.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:13:08.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.633767
2025-11-12T17:13:08.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:13:08.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:13:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:13:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:13:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:13:08.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:12:44', tmtdew=34.5, humidity=9.85, cloud=0.0, wind=32.55, temperature=26.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:12:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:13:08.561 [DEBUG] [Thread-19594] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:13: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-11-12T17:13:08.656 [DEBUG] [Thread-19597] [transport.py] [_log()] starting thread (client mode): 0x14961390
2025-11-12T17:13:08.656 [DEBUG] [Thread-19597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:13:08.671 [DEBUG] [Thread-19597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:13:08.671 [INFO] [Thread-19597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] client lang: <none>
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] server lang: <none>
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] kex follows: False
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:13:08.679 [DEBUG] [Thread-19597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:13:08.680 [DEBUG] [Thread-19597] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:13:08.680 [DEBUG] [Thread-19597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:13:08.680 [DEBUG] [Thread-19597] [transport.py] [_log()] Compression: none
2025-11-12T17:13:08.680 [DEBUG] [Thread-19597] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:13:08.735 [DEBUG] [Thread-19597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:13:08.736 [DEBUG] [Thread-19597] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:13:08.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:13:08.737 [DEBUG] [Thread-19597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:13:08.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:13:08.791 [DEBUG] [Thread-19597] [transport.py] [_log()] userauth is OK
2025-11-12T17:13:08.792 [DEBUG] [Thread-19597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:13:08.792 [DEBUG] [Thread-19597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:13:08.792 [DEBUG] [Thread-19597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:13:08.792 [DEBUG] [Thread-19597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:13:08.811 [INFO] [Thread-19597] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:13:08.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:13:08.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:13:09.633 [DEBUG] [Thread-19597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:13:09.633 [DEBUG] [Thread-19597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:13:09.682 [DEBUG] [Thread-19597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:13:09.682 [DEBUG] [Thread-19597] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:13:09.691 [DEBUG] [Thread-19597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:13:09.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:13: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-11-12T17:13:09.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-11-12T17:13:09.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:13:09.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:13:09.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:13:09.728 [DEBUG] [Thread-19597] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:13:21.410 [DEBUG] [Thread-19599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:13:36.446 [DEBUG] [Thread-19600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:13:39.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:13:39.751 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:13:39.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:13:40.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 13, 16), 34.51, 9.83, 0.0, 35.09, 26.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:13:40.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:13:16
2025-11-12T17:13:40.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:13:40.677 [DEBUG] [Thread-19601] [transport.py] [_log()] starting thread (client mode): 0x173995a0
2025-11-12T17:13:40.677 [DEBUG] [Thread-19601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:13:40.693 [DEBUG] [Thread-19601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:13:40.693 [INFO] [Thread-19601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:13:40.696 [DEBUG] [Thread-19601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] client lang: <none>
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] server lang: <none>
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] kex follows: False
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] Compression: none
2025-11-12T17:13:40.697 [DEBUG] [Thread-19601] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:13:40.712 [DEBUG] [Thread-19601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:13:40.713 [DEBUG] [Thread-19601] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:13:40.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:13:40.713 [DEBUG] [Thread-19601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:13:40.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:13:40.715 [DEBUG] [Thread-19601] [transport.py] [_log()] userauth is OK
2025-11-12T17:13:40.715 [DEBUG] [Thread-19601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:13:40.716 [DEBUG] [Thread-19601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:13:40.716 [DEBUG] [Thread-19601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:13:40.716 [DEBUG] [Thread-19601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:13:40.740 [INFO] [Thread-19601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:13:40.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:13:41.460 [DEBUG] [Thread-19601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:13:41.461 [DEBUG] [Thread-19601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:13:41.461 [DEBUG] [Thread-19601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:13:41.502 [DEBUG] [Thread-19601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:13:41.502 [DEBUG] [Thread-19601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:13:41.505 [DEBUG] [Thread-19601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:13:41.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:13:41.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:13:41.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:13:41.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:13:41.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:13:41.532 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:13:41.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:13:41.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:13:41.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:13:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.634114 -999.00  +25.90  36.37     15   -2.00 1 1 2 1 1   887    0 32.72 174.52 ----- 33.0 36.4 281.2 42.4 27.5 -26.3 27.6 -25.0 27.4 -25.6 27.9 -24.9
2025-11-12T17:13:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:13:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:13:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.634114
2025-11-12T17:13:41.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:13:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:13:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:13:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:13:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:13:41.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:13:16', tmtdew=34.51, humidity=9.83, cloud=0.0, wind=35.09, temperature=26.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:13:07.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:13:41.535 [DEBUG] [Thread-19601] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:13:41.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:13:41.642 [DEBUG] [Thread-19604] [transport.py] [_log()] starting thread (client mode): 0x149ab460
2025-11-12T17:13:41.642 [DEBUG] [Thread-19604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:13:41.657 [DEBUG] [Thread-19604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:13:41.657 [INFO] [Thread-19604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:13:41.664 [DEBUG] [Thread-19604] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] client lang: <none>
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] server lang: <none>
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] kex follows: False
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:13:41.665 [DEBUG] [Thread-19604] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:13:41.666 [DEBUG] [Thread-19604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:13:41.666 [DEBUG] [Thread-19604] [transport.py] [_log()] Compression: none
2025-11-12T17:13:41.666 [DEBUG] [Thread-19604] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:13:41.724 [DEBUG] [Thread-19604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:13:41.724 [DEBUG] [Thread-19604] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:13:41.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:13:41.725 [DEBUG] [Thread-19604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:13:41.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:13:41.779 [DEBUG] [Thread-19604] [transport.py] [_log()] userauth is OK
2025-11-12T17:13:41.779 [DEBUG] [Thread-19604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:13:41.779 [DEBUG] [Thread-19604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:13:41.780 [DEBUG] [Thread-19604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:13:41.780 [DEBUG] [Thread-19604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:13:41.799 [INFO] [Thread-19604] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:13:41.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:13:41.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:13:42.361 [DEBUG] [Thread-19606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:13:42.629 [DEBUG] [Thread-19604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:13:42.630 [DEBUG] [Thread-19604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:13:42.678 [DEBUG] [Thread-19604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:13:42.678 [DEBUG] [Thread-19604] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:13:42.687 [DEBUG] [Thread-19604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:13:42.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:13:42.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-11-12T17:13:42.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-11-12T17:13:42.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:13:42.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:13:42.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:13:42.724 [DEBUG] [Thread-19604] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:13:51.437 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:13:51.438 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:13:51.482 [DEBUG] [Thread-19607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:14:06.542 [DEBUG] [Thread-19608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:14:12.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:14:12.747 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:14:12.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-11-12T17:14:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 13, 48), 34.01, 9.88, 0.0, 31.58, 26.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:14:13.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:13:48
2025-11-12T17:14:13.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:14:13.661 [DEBUG] [Thread-19609] [transport.py] [_log()] starting thread (client mode): 0x14921060
2025-11-12T17:14:13.661 [DEBUG] [Thread-19609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:14:13.682 [DEBUG] [Thread-19609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:14:13.682 [INFO] [Thread-19609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] client lang: <none>
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] server lang: <none>
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] kex follows: False
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] Compression: none
2025-11-12T17:14:13.684 [DEBUG] [Thread-19609] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:14:13.702 [DEBUG] [Thread-19609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:14:13.702 [DEBUG] [Thread-19609] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:14:13.703 [DEBUG] [Thread-19609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:14:13.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:14:13.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:14:13.705 [DEBUG] [Thread-19609] [transport.py] [_log()] userauth is OK
2025-11-12T17:14:13.705 [DEBUG] [Thread-19609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:14:13.705 [DEBUG] [Thread-19609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:14:13.705 [DEBUG] [Thread-19609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:14:13.705 [DEBUG] [Thread-19609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:14:13.721 [INFO] [Thread-19609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:14:13.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:14:14.296 [DEBUG] [Thread-19609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:14:14.297 [DEBUG] [Thread-19609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:14:14.297 [DEBUG] [Thread-19609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:14:14.337 [DEBUG] [Thread-19609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:14:14.338 [DEBUG] [Thread-19609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:14:14.341 [DEBUG] [Thread-19609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:14:14.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:14:14.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:14:14.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:14:14.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:14:14.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:14:14.364 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:14:14.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:14:14.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:14:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:14:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.634461 -999.00  +25.80  30.21     15   -2.00 1 1 2 1 1   887    0 32.81 167.05 ----- 33.6 30.2 293.6 44.1 27.5 -26.7 27.5 -24.7 27.4 -25.4 27.9 -24.7
2025-11-12T17:14:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:14:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:14:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.634461
2025-11-12T17:14:14.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:14:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:14:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:14:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:14:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:14:14.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:13:48', tmtdew=34.01, humidity=9.88, cloud=0.0, wind=31.58, temperature=26.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:13:37.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:14:14.367 [DEBUG] [Thread-19609] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:14:14.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:14:14.467 [DEBUG] [Thread-19612] [transport.py] [_log()] starting thread (client mode): 0x173bc9a0
2025-11-12T17:14:14.467 [DEBUG] [Thread-19612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:14:14.484 [DEBUG] [Thread-19612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:14:14.485 [INFO] [Thread-19612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:14:14.493 [DEBUG] [Thread-19612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:14:14.493 [DEBUG] [Thread-19612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:14:14.493 [DEBUG] [Thread-19612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:14:14.493 [DEBUG] [Thread-19612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:14:14.493 [DEBUG] [Thread-19612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:14:14.493 [DEBUG] [Thread-19612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:14:14.493 [DEBUG] [Thread-19612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:14:14.493 [DEBUG] [Thread-19612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] client lang: <none>
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] server lang: <none>
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] kex follows: False
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] Compression: none
2025-11-12T17:14:14.494 [DEBUG] [Thread-19612] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:14:14.551 [DEBUG] [Thread-19612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:14:14.552 [DEBUG] [Thread-19612] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:14:14.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:14:14.553 [DEBUG] [Thread-19612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:14:14.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:14:14.608 [DEBUG] [Thread-19612] [transport.py] [_log()] userauth is OK
2025-11-12T17:14:14.608 [DEBUG] [Thread-19612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:14:14.608 [DEBUG] [Thread-19612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:14:14.608 [DEBUG] [Thread-19612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:14:14.609 [DEBUG] [Thread-19612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:14:14.628 [INFO] [Thread-19612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:14:14.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:14:14.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:14:15.482 [DEBUG] [Thread-19612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:14:15.483 [DEBUG] [Thread-19612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:14:15.531 [DEBUG] [Thread-19612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:14:15.531 [DEBUG] [Thread-19612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:14:15.540 [DEBUG] [Thread-19612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:14:15.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:14:15.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-11-12T17:14:15.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-11-12T17:14:15.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:14:15.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:14:15.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:14:15.576 [DEBUG] [Thread-19612] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:14:21.580 [DEBUG] [Thread-19614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:14:36.624 [DEBUG] [Thread-19615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:14:42.394 [DEBUG] [Thread-19616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:14:45.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:14:45.582 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:14:45.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-11-12T17:14:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 14, 20), 33.95, 9.91, 0.0, 31.35, 26.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:14:46.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:14:20
2025-11-12T17:14:46.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:14:46.500 [DEBUG] [Thread-19617] [transport.py] [_log()] starting thread (client mode): 0x149aae60
2025-11-12T17:14:46.500 [DEBUG] [Thread-19617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:14:46.519 [DEBUG] [Thread-19617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:14:46.519 [INFO] [Thread-19617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] client lang: <none>
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] server lang: <none>
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] kex follows: False
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:14:46.523 [DEBUG] [Thread-19617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:14:46.524 [DEBUG] [Thread-19617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:14:46.524 [DEBUG] [Thread-19617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:14:46.524 [DEBUG] [Thread-19617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:14:46.524 [DEBUG] [Thread-19617] [transport.py] [_log()] Compression: none
2025-11-12T17:14:46.524 [DEBUG] [Thread-19617] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:14:46.542 [DEBUG] [Thread-19617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:14:46.543 [DEBUG] [Thread-19617] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:14:46.543 [DEBUG] [Thread-19617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:14:46.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:14:46.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:14:46.545 [DEBUG] [Thread-19617] [transport.py] [_log()] userauth is OK
2025-11-12T17:14:46.545 [DEBUG] [Thread-19617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:14:46.546 [DEBUG] [Thread-19617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:14:46.546 [DEBUG] [Thread-19617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:14:46.546 [DEBUG] [Thread-19617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:14:46.575 [INFO] [Thread-19617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:14:46.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:14:47.223 [DEBUG] [Thread-19617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:14:47.223 [DEBUG] [Thread-19617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:14:47.224 [DEBUG] [Thread-19617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:14:47.224 [DEBUG] [Thread-19617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:14:47.224 [DEBUG] [Thread-19617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:14:47.227 [DEBUG] [Thread-19617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:14:47.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:14:47.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:14:47.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:14:47.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:14:47.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:14:47.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:14:47.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:14:47.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:14:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:14:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.634809 -999.00  +25.90  31.63     15   -2.20 1 1 2 1 1   887    0 32.39 165.88 ----- 31.6 31.6 291.8 44.8 27.5 -26.2 27.5 -24.8 27.5 -25.2 27.9 -25.4
2025-11-12T17:14:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:14:47.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:14:47.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.634809
2025-11-12T17:14:47.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:14:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:14:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:14:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:14:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:14:47.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:14:20', tmtdew=33.95, humidity=9.91, cloud=0.0, wind=31.35, temperature=26.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:14:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:14:47.245 [DEBUG] [Thread-19617] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:14:47.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:14:47.341 [DEBUG] [Thread-19620] [transport.py] [_log()] starting thread (client mode): 0x11f11f90
2025-11-12T17:14:47.342 [DEBUG] [Thread-19620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:14:47.357 [DEBUG] [Thread-19620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:14:47.357 [INFO] [Thread-19620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:14:47.364 [DEBUG] [Thread-19620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:14:47.364 [DEBUG] [Thread-19620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:14:47.364 [DEBUG] [Thread-19620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:14:47.364 [DEBUG] [Thread-19620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:14:47.364 [DEBUG] [Thread-19620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:14:47.364 [DEBUG] [Thread-19620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:14:47.364 [DEBUG] [Thread-19620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:14:47.364 [DEBUG] [Thread-19620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] client lang: <none>
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] server lang: <none>
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] kex follows: False
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] Compression: none
2025-11-12T17:14:47.365 [DEBUG] [Thread-19620] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:14:47.423 [DEBUG] [Thread-19620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:14:47.424 [DEBUG] [Thread-19620] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:14:47.425 [DEBUG] [Thread-19620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:14:47.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:14:47.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:14:47.480 [DEBUG] [Thread-19620] [transport.py] [_log()] userauth is OK
2025-11-12T17:14:47.480 [DEBUG] [Thread-19620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:14:47.480 [DEBUG] [Thread-19620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:14:47.480 [DEBUG] [Thread-19620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:14:47.480 [DEBUG] [Thread-19620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:14:47.500 [INFO] [Thread-19620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:14:47.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:14:47.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:14:48.366 [DEBUG] [Thread-19620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:14:48.367 [DEBUG] [Thread-19620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:14:48.414 [DEBUG] [Thread-19620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:14:48.415 [DEBUG] [Thread-19620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:14:48.424 [DEBUG] [Thread-19620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:14:48.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:14: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-11-12T17:14: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-11-12T17:14:48.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:14:48.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:14:48.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:14:48.461 [DEBUG] [Thread-19620] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:14:51.579 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:14:51.580 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:14:51.659 [DEBUG] [Thread-19622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:15:06.711 [DEBUG] [Thread-19623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:15:18.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:15:18.482 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:15:18.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-11-12T17:15:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 14, 52), 34.23, 9.9, 0.0, 33.77, 26.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:15:19.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:14:52
2025-11-12T17:15:19.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:15:19.443 [DEBUG] [Thread-19624] [transport.py] [_log()] starting thread (client mode): 0x11f10160
2025-11-12T17:15:19.443 [DEBUG] [Thread-19624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:15:19.463 [DEBUG] [Thread-19624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:15:19.463 [INFO] [Thread-19624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] client lang: <none>
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] server lang: <none>
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] kex follows: False
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] Compression: none
2025-11-12T17:15:19.467 [DEBUG] [Thread-19624] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:15:19.481 [DEBUG] [Thread-19624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:15:19.481 [DEBUG] [Thread-19624] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:15:19.481 [DEBUG] [Thread-19624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:15:19.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:15:19.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:15:19.482 [DEBUG] [Thread-19624] [transport.py] [_log()] userauth is OK
2025-11-12T17:15:19.482 [DEBUG] [Thread-19624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:15:19.482 [DEBUG] [Thread-19624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:15:19.482 [DEBUG] [Thread-19624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:15:19.482 [DEBUG] [Thread-19624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:15:19.498 [INFO] [Thread-19624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:15:19.499 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:15:20.125 [DEBUG] [Thread-19624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:15:20.125 [DEBUG] [Thread-19624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:15:20.125 [DEBUG] [Thread-19624] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:15:20.166 [DEBUG] [Thread-19624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:15:20.166 [DEBUG] [Thread-19624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:15:20.168 [DEBUG] [Thread-19624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:15:20.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:15:20.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:15:20.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:15:20.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:15:20.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:15:20.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:15:20.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:15:20.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:15:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:15:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.635156 -999.00  +25.90  19.87     15   -2.40 1 1 1 1 1   887    0 32.44 160.11 ----- 19.9 19.9 283.3 38.7 27.5 -26.2 27.5 -24.8 27.5 -24.1 27.8 -25.6
2025-11-12T17:15:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:15:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:15:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.635156
2025-11-12T17:15:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:15:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:15:20.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:15:20.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:15:20.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:15:20.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:14:52', tmtdew=34.23, humidity=9.9, cloud=0.0, wind=33.77, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:14:37.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:15:20.187 [DEBUG] [Thread-19624] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:15:20.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:15:20.288 [DEBUG] [Thread-19627] [transport.py] [_log()] starting thread (client mode): 0x11f128f0
2025-11-12T17:15:20.288 [DEBUG] [Thread-19627] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:15:20.303 [DEBUG] [Thread-19627] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:15:20.303 [INFO] [Thread-19627] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] client lang: <none>
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] server lang: <none>
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] kex follows: False
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] Compression: none
2025-11-12T17:15:20.311 [DEBUG] [Thread-19627] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:15:20.370 [DEBUG] [Thread-19627] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:15:20.370 [DEBUG] [Thread-19627] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:15:20.370 [DEBUG] [Thread-19627] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:15:20.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:15:20.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:15:20.427 [DEBUG] [Thread-19627] [transport.py] [_log()] userauth is OK
2025-11-12T17:15:20.427 [DEBUG] [Thread-19627] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:15:20.427 [DEBUG] [Thread-19627] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:15:20.427 [DEBUG] [Thread-19627] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:15:20.427 [DEBUG] [Thread-19627] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:15:20.444 [INFO] [Thread-19627] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:15:20.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:15:20.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:15:21.267 [DEBUG] [Thread-19627] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:15:21.267 [DEBUG] [Thread-19627] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:15:21.316 [DEBUG] [Thread-19627] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:15:21.316 [DEBUG] [Thread-19627] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:15:21.325 [DEBUG] [Thread-19627] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:15:21.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:15:21.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-11-12T17:15:21.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-11-12T17:15:21.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:15:21.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:15:21.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:15:21.362 [DEBUG] [Thread-19627] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:15:21.746 [DEBUG] [Thread-19629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:15:36.795 [DEBUG] [Thread-19630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:15:42.441 [DEBUG] [Thread-19631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:15:51.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:15:51.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:15:51.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-11-12T17:15:51.723 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:15:51.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:15:51.826 [DEBUG] [Thread-19632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:15:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 15, 24), 34.38, 9.78, 0.0, 37.63, 26.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:15:52.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:15:24
2025-11-12T17:15:52.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:15:52.294 [DEBUG] [Thread-19633] [transport.py] [_log()] starting thread (client mode): 0x11f10790
2025-11-12T17:15:52.294 [DEBUG] [Thread-19633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:15:52.316 [DEBUG] [Thread-19633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:15:52.316 [INFO] [Thread-19633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:15:52.319 [DEBUG] [Thread-19633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] client lang: <none>
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] server lang: <none>
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] kex follows: False
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] Compression: none
2025-11-12T17:15:52.320 [DEBUG] [Thread-19633] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:15:52.338 [DEBUG] [Thread-19633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:15:52.338 [DEBUG] [Thread-19633] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:15:52.339 [DEBUG] [Thread-19633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:15:52.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:15:52.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:15:52.341 [DEBUG] [Thread-19633] [transport.py] [_log()] userauth is OK
2025-11-12T17:15:52.341 [DEBUG] [Thread-19633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:15:52.341 [DEBUG] [Thread-19633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:15:52.341 [DEBUG] [Thread-19633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:15:52.342 [DEBUG] [Thread-19633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:15:52.365 [INFO] [Thread-19633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:15:52.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:15:53.130 [DEBUG] [Thread-19633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:15:53.130 [DEBUG] [Thread-19633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:15:53.131 [DEBUG] [Thread-19633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:15:53.172 [DEBUG] [Thread-19633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:15:53.172 [DEBUG] [Thread-19633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:15:53.175 [DEBUG] [Thread-19633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:15:53.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:15:53.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:15:53.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:15:53.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:15:53.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:15:53.200 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:15:53.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:15:53.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:15:53.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.635503 -999.00  +26.00  35.06     15   -2.50 1 1 2 1 1   887    0 32.49 160.89 ----- 32.1 35.1 284.1 40.4 27.5 -26.6 27.5 -25.0 27.4 -24.6 27.9 -25.0
2025-11-12T17:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.635503
2025-11-12T17:15:53.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:15:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:15:53.202 [DEBUG] [Thread-19633] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:15:53.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:15:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:15:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:15:53.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:15:24', tmtdew=34.38, humidity=9.78, cloud=0.0, wind=37.63, temperature=26.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:15:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:15:53.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:15:53.300 [DEBUG] [Thread-19636] [transport.py] [_log()] starting thread (client mode): 0x11f11660
2025-11-12T17:15:53.300 [DEBUG] [Thread-19636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:15:53.315 [DEBUG] [Thread-19636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:15:53.315 [INFO] [Thread-19636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] client lang: <none>
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] server lang: <none>
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] kex follows: False
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:15:53.324 [DEBUG] [Thread-19636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:15:53.325 [DEBUG] [Thread-19636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:15:53.325 [DEBUG] [Thread-19636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:15:53.325 [DEBUG] [Thread-19636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:15:53.325 [DEBUG] [Thread-19636] [transport.py] [_log()] Compression: none
2025-11-12T17:15:53.325 [DEBUG] [Thread-19636] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:15:53.383 [DEBUG] [Thread-19636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:15:53.384 [DEBUG] [Thread-19636] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:15:53.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:15:53.385 [DEBUG] [Thread-19636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:15:53.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:15:53.439 [DEBUG] [Thread-19636] [transport.py] [_log()] userauth is OK
2025-11-12T17:15:53.440 [DEBUG] [Thread-19636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:15:53.440 [DEBUG] [Thread-19636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:15:53.440 [DEBUG] [Thread-19636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:15:53.440 [DEBUG] [Thread-19636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:15:53.458 [INFO] [Thread-19636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:15:53.459 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:15:53.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:15:54.295 [DEBUG] [Thread-19636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:15:54.295 [DEBUG] [Thread-19636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:15:54.343 [DEBUG] [Thread-19636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:15:54.343 [DEBUG] [Thread-19636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:15:54.351 [DEBUG] [Thread-19636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:15:54.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:15:54.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-11-12T17:15:54.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-11-12T17:15:54.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:15:54.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:15:54.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:15:54.381 [DEBUG] [Thread-19636] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:16:06.859 [DEBUG] [Thread-19638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:16:21.912 [DEBUG] [Thread-19639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:16:24.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:16:24.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:16:24.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-11-12T17:16:25.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 15, 56), 34.62, 9.72, 0.0, 41.66, 26.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:16:25.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:15:56
2025-11-12T17:16:25.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:16:25.277 [DEBUG] [Thread-19640] [transport.py] [_log()] starting thread (client mode): 0x11f13e50
2025-11-12T17:16:25.278 [DEBUG] [Thread-19640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:16:25.298 [DEBUG] [Thread-19640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:16:25.299 [INFO] [Thread-19640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] client lang: <none>
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] server lang: <none>
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] kex follows: False
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:16:25.302 [DEBUG] [Thread-19640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:16:25.303 [DEBUG] [Thread-19640] [transport.py] [_log()] Compression: none
2025-11-12T17:16:25.303 [DEBUG] [Thread-19640] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:16:25.320 [DEBUG] [Thread-19640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:16:25.321 [DEBUG] [Thread-19640] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:16:25.321 [DEBUG] [Thread-19640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:16:25.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:16:25.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:16:25.323 [DEBUG] [Thread-19640] [transport.py] [_log()] userauth is OK
2025-11-12T17:16:25.324 [DEBUG] [Thread-19640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:16:25.324 [DEBUG] [Thread-19640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:16:25.324 [DEBUG] [Thread-19640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:16:25.324 [DEBUG] [Thread-19640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:16:25.349 [INFO] [Thread-19640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:16:25.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:16:25.954 [DEBUG] [Thread-19640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:16:25.954 [DEBUG] [Thread-19640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:16:25.955 [DEBUG] [Thread-19640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:16:25.996 [DEBUG] [Thread-19640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:16:25.996 [DEBUG] [Thread-19640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:16:25.999 [DEBUG] [Thread-19640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:16:26.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:16:26.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:16:26.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:16:26.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:16:26.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:16:26.023 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:16:26.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:16:26.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:16:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:16:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.636198 -999.00  +25.80  36.85     15   -2.70 1 1 2 1 1   887    0 31.87 147.06 ----- 26.3 36.9 286.8 46.5 27.4 -26.0 27.4 -24.9 27.3 -25.5 27.7 -25.4
2025-11-12T17:16:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:16:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:16:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.636198
2025-11-12T17:16:26.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:16:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:16:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:16:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:16:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:16:26.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:15:56', tmtdew=34.62, humidity=9.72, cloud=0.0, wind=41.66, temperature=26.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:16:07.507', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:16:26.026 [DEBUG] [Thread-19640] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:16:26.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:16:26.125 [DEBUG] [Thread-19643] [transport.py] [_log()] starting thread (client mode): 0x11f11d50
2025-11-12T17:16:26.125 [DEBUG] [Thread-19643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:16:26.139 [DEBUG] [Thread-19643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:16:26.139 [INFO] [Thread-19643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:16:26.147 [DEBUG] [Thread-19643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:16:26.147 [DEBUG] [Thread-19643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:16:26.147 [DEBUG] [Thread-19643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:16:26.147 [DEBUG] [Thread-19643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:16:26.147 [DEBUG] [Thread-19643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:16:26.147 [DEBUG] [Thread-19643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] client lang: <none>
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] server lang: <none>
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] kex follows: False
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:16:26.148 [DEBUG] [Thread-19643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:16:26.149 [DEBUG] [Thread-19643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:16:26.149 [DEBUG] [Thread-19643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:16:26.149 [DEBUG] [Thread-19643] [transport.py] [_log()] Compression: none
2025-11-12T17:16:26.149 [DEBUG] [Thread-19643] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:16:26.204 [DEBUG] [Thread-19643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:16:26.204 [DEBUG] [Thread-19643] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:16:26.205 [DEBUG] [Thread-19643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:16:26.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:16:26.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:16:26.259 [DEBUG] [Thread-19643] [transport.py] [_log()] userauth is OK
2025-11-12T17:16:26.260 [DEBUG] [Thread-19643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:16:26.260 [DEBUG] [Thread-19643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:16:26.260 [DEBUG] [Thread-19643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:16:26.260 [DEBUG] [Thread-19643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:16:26.278 [INFO] [Thread-19643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:16:26.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:16:26.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:16:27.097 [DEBUG] [Thread-19643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:16:27.097 [DEBUG] [Thread-19643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:16:27.144 [DEBUG] [Thread-19643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:16:27.144 [DEBUG] [Thread-19643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:16:27.154 [DEBUG] [Thread-19643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:16:27.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:16:27.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-11-12T17:16:27.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-11-12T17:16:27.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:16:27.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:16:27.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:16:27.189 [DEBUG] [Thread-19643] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:16:36.946 [DEBUG] [Thread-19645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:16:42.492 [DEBUG] [Thread-19646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:16:51.873 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:16:51.874 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:16:51.990 [DEBUG] [Thread-19647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:16:57.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:16:57.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:16:57.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-11-12T17:16:57.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 16, 28), 34.5, 9.78, 0.0, 38.64, 26.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:16:57.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:16:28
2025-11-12T17:16:57.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:16:58.125 [DEBUG] [Thread-19648] [transport.py] [_log()] starting thread (client mode): 0x11f130a0
2025-11-12T17:16:58.126 [DEBUG] [Thread-19648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:16:58.145 [DEBUG] [Thread-19648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:16:58.145 [INFO] [Thread-19648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] client lang: <none>
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] server lang: <none>
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] kex follows: False
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] Compression: none
2025-11-12T17:16:58.148 [DEBUG] [Thread-19648] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:16:58.166 [DEBUG] [Thread-19648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:16:58.166 [DEBUG] [Thread-19648] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:16:58.167 [DEBUG] [Thread-19648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:16:58.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:16:58.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:16:58.169 [DEBUG] [Thread-19648] [transport.py] [_log()] userauth is OK
2025-11-12T17:16:58.169 [DEBUG] [Thread-19648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:16:58.169 [DEBUG] [Thread-19648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:16:58.169 [DEBUG] [Thread-19648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:16:58.169 [DEBUG] [Thread-19648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:16:58.194 [INFO] [Thread-19648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:16:58.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:16:58.910 [DEBUG] [Thread-19648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:16:58.910 [DEBUG] [Thread-19648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:16:58.910 [DEBUG] [Thread-19648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:16:58.950 [DEBUG] [Thread-19648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:16:58.951 [DEBUG] [Thread-19648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:16:58.954 [DEBUG] [Thread-19648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:16:58.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:16:58.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:16:58.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:16:58.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:16:58.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:16:58.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:16:58.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:16:58.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:16:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:16:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.636545 -999.00  +25.80  28.56     14   -2.90 1 1 1 1 1   887    0 31.54 131.95 ----- 28.6 28.6 276.4 42.6 27.4 -27.1 27.4 -25.2 27.2 -25.9 27.6 -25.5
2025-11-12T17:16:58.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:16:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:16:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.636545
2025-11-12T17:16:58.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:16:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:16:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:16:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:16:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:16:58.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:16:28', tmtdew=34.5, humidity=9.78, cloud=0.0, wind=38.64, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:16:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:16:58.980 [DEBUG] [Thread-19648] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:16:59.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:16:59.074 [DEBUG] [Thread-19651] [transport.py] [_log()] starting thread (client mode): 0x11f10b80
2025-11-12T17:16:59.075 [DEBUG] [Thread-19651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:16:59.089 [DEBUG] [Thread-19651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:16:59.089 [INFO] [Thread-19651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:16:59.097 [DEBUG] [Thread-19651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:16:59.097 [DEBUG] [Thread-19651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:16:59.097 [DEBUG] [Thread-19651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] client lang: <none>
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] server lang: <none>
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] kex follows: False
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] Compression: none
2025-11-12T17:16:59.098 [DEBUG] [Thread-19651] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:16:59.155 [DEBUG] [Thread-19651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:16:59.156 [DEBUG] [Thread-19651] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:16:59.157 [DEBUG] [Thread-19651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:16:59.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:16:59.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:16:59.211 [DEBUG] [Thread-19651] [transport.py] [_log()] userauth is OK
2025-11-12T17:16:59.212 [DEBUG] [Thread-19651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:16:59.212 [DEBUG] [Thread-19651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:16:59.212 [DEBUG] [Thread-19651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:16:59.212 [DEBUG] [Thread-19651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:16:59.232 [INFO] [Thread-19651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:16:59.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:16:59.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:17:00.109 [DEBUG] [Thread-19651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:17:00.109 [DEBUG] [Thread-19651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:17:00.157 [DEBUG] [Thread-19651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:17:00.157 [DEBUG] [Thread-19651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:17:00.167 [DEBUG] [Thread-19651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:17:00.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:17:00.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-11-12T17:17:00.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-11-12T17:17:00.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:17:00.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:17:00.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:17:00.204 [DEBUG] [Thread-19651] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:17:07.028 [DEBUG] [Thread-19653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:17:22.079 [DEBUG] [Thread-19654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:17:30.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:17:30.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:17:30.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-11-12T17:17:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 16, 28), 34.5, 9.78, 0.0, 38.64, 26.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:17:30.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:16:28
2025-11-12T17:17:31.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:17:31.145 [DEBUG] [Thread-19655] [transport.py] [_log()] starting thread (client mode): 0x11f13cd0
2025-11-12T17:17:31.145 [DEBUG] [Thread-19655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:17:31.166 [DEBUG] [Thread-19655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:17:31.166 [INFO] [Thread-19655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:17:31.169 [DEBUG] [Thread-19655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:17:31.169 [DEBUG] [Thread-19655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] client lang: <none>
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] server lang: <none>
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] kex follows: False
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] Compression: none
2025-11-12T17:17:31.170 [DEBUG] [Thread-19655] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:17:31.183 [DEBUG] [Thread-19655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:17:31.183 [DEBUG] [Thread-19655] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:17:31.184 [DEBUG] [Thread-19655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:17:31.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:17:31.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:17:31.186 [DEBUG] [Thread-19655] [transport.py] [_log()] userauth is OK
2025-11-12T17:17:31.186 [DEBUG] [Thread-19655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:17:31.186 [DEBUG] [Thread-19655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:17:31.186 [DEBUG] [Thread-19655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:17:31.186 [DEBUG] [Thread-19655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:17:31.212 [INFO] [Thread-19655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:17:31.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:17:31.872 [DEBUG] [Thread-19655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:17:31.872 [DEBUG] [Thread-19655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:17:31.872 [DEBUG] [Thread-19655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:17:31.913 [DEBUG] [Thread-19655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:17:31.913 [DEBUG] [Thread-19655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:17:31.916 [DEBUG] [Thread-19655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:17:31.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:17:31.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:17:31.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:17:31.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:17:31.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:17:31.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:17:31.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:17:31.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:17:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:17:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.636892 -999.00  +25.60  26.45     15   -2.90 1 1 1 1 1   887    0 31.53 129.50 ----- 25.9 26.4 280.6 41.4 27.3 -26.0 27.4 -24.8 27.1 -24.5 27.5 -25.6
2025-11-12T17:17:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:17:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:17:31.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.636892
2025-11-12T17:17:31.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:17:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:17:31.941 [DEBUG] [Thread-19655] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:17:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:17:31.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:17:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:17:31.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:16:28', tmtdew=34.5, humidity=9.78, cloud=0.0, wind=38.64, temperature=26.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:17:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:17:32.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:17:32.041 [DEBUG] [Thread-19658] [transport.py] [_log()] starting thread (client mode): 0x11f13940
2025-11-12T17:17:32.041 [DEBUG] [Thread-19658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:17:32.056 [DEBUG] [Thread-19658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:17:32.056 [INFO] [Thread-19658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:17:32.063 [DEBUG] [Thread-19658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:17:32.064 [DEBUG] [Thread-19658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:17:32.064 [DEBUG] [Thread-19658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:17:32.064 [DEBUG] [Thread-19658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:17:32.064 [DEBUG] [Thread-19658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:17:32.064 [DEBUG] [Thread-19658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:17:32.064 [DEBUG] [Thread-19658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] client lang: <none>
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] server lang: <none>
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] kex follows: False
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:17:32.065 [DEBUG] [Thread-19658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:17:32.066 [DEBUG] [Thread-19658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:17:32.066 [DEBUG] [Thread-19658] [transport.py] [_log()] Compression: none
2025-11-12T17:17:32.066 [DEBUG] [Thread-19658] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:17:32.124 [DEBUG] [Thread-19658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:17:32.125 [DEBUG] [Thread-19658] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:17:32.125 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:17:32.126 [DEBUG] [Thread-19658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:17:32.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:17:32.187 [DEBUG] [Thread-19658] [transport.py] [_log()] userauth is OK
2025-11-12T17:17:32.187 [DEBUG] [Thread-19658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:17:32.188 [DEBUG] [Thread-19658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:17:32.188 [DEBUG] [Thread-19658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:17:32.188 [DEBUG] [Thread-19658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:17:32.208 [INFO] [Thread-19658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:17:32.208 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:17:32.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:17:33.052 [DEBUG] [Thread-19658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:17:33.052 [DEBUG] [Thread-19658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:17:33.100 [DEBUG] [Thread-19658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:17:33.100 [DEBUG] [Thread-19658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:17:33.109 [DEBUG] [Thread-19658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:17:33.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:17:33.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-11-12T17:17:33.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:17:33.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:17:33.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:17:33.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:17:33.140 [DEBUG] [Thread-19658] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:17:37.117 [DEBUG] [Thread-19660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:17:42.526 [DEBUG] [Thread-19661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:17:52.014 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:17:52.015 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:17:52.163 [DEBUG] [Thread-19662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:18:03.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:18:03.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:18:03.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-11-12T17:18:03.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 17, 32), 34.72, 9.65, 0.0, 33.4, 26.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:18:03.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:17:32
2025-11-12T17:18:03.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:18:04.073 [DEBUG] [Thread-19663] [transport.py] [_log()] starting thread (client mode): 0x11f10370
2025-11-12T17:18:04.074 [DEBUG] [Thread-19663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:18:04.097 [DEBUG] [Thread-19663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:18:04.097 [INFO] [Thread-19663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:18:04.099 [DEBUG] [Thread-19663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:18:04.099 [DEBUG] [Thread-19663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:18:04.099 [DEBUG] [Thread-19663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] client lang: <none>
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] server lang: <none>
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] kex follows: False
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] Compression: none
2025-11-12T17:18:04.100 [DEBUG] [Thread-19663] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:18:04.110 [DEBUG] [Thread-19663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:18:04.111 [DEBUG] [Thread-19663] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:18:04.111 [DEBUG] [Thread-19663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:18:04.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:18:04.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:18:04.113 [DEBUG] [Thread-19663] [transport.py] [_log()] userauth is OK
2025-11-12T17:18:04.114 [DEBUG] [Thread-19663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:18:04.114 [DEBUG] [Thread-19663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:18:04.114 [DEBUG] [Thread-19663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:18:04.114 [DEBUG] [Thread-19663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:18:04.132 [INFO] [Thread-19663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:18:04.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:18:04.809 [DEBUG] [Thread-19663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:18:04.809 [DEBUG] [Thread-19663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:18:04.809 [DEBUG] [Thread-19663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:18:04.850 [DEBUG] [Thread-19663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:18:04.850 [DEBUG] [Thread-19663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:18:04.852 [DEBUG] [Thread-19663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:18:04.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:18:04.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:18:04.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:18:04.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:18:04.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:18:04.870 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:18:04.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.637239 -999.00  +25.70  27.40     15   -2.70 1 1 1 1 1   887    0 31.71 122.01 ----- 24.5 27.4 283.2 33.2 27.4 -25.7 27.4 -24.3 27.2 -24.4 27.5 -24.8
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.637239
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:18:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:17:32', tmtdew=34.72, humidity=9.65, cloud=0.0, wind=33.4, temperature=26.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:17:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:18:04.871 [DEBUG] [Thread-19663] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:18:04.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:18:04.955 [DEBUG] [Thread-19666] [transport.py] [_log()] starting thread (client mode): 0x11f10d00
2025-11-12T17:18:04.955 [DEBUG] [Thread-19666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:18:04.969 [DEBUG] [Thread-19666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:18:04.969 [INFO] [Thread-19666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] client lang: <none>
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] server lang: <none>
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] kex follows: False
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] Compression: none
2025-11-12T17:18:04.977 [DEBUG] [Thread-19666] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:18:05.036 [DEBUG] [Thread-19666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:18:05.036 [DEBUG] [Thread-19666] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:18:05.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:18:05.037 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:18:05.037 [DEBUG] [Thread-19666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:18:05.095 [DEBUG] [Thread-19666] [transport.py] [_log()] userauth is OK
2025-11-12T17:18:05.095 [DEBUG] [Thread-19666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:18:05.095 [DEBUG] [Thread-19666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:18:05.095 [DEBUG] [Thread-19666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:18:05.095 [DEBUG] [Thread-19666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:18:05.109 [INFO] [Thread-19666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:18:05.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:18:05.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:18:05.944 [DEBUG] [Thread-19666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:18:05.944 [DEBUG] [Thread-19666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:18:05.992 [DEBUG] [Thread-19666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:18:05.992 [DEBUG] [Thread-19666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:18:06.000 [DEBUG] [Thread-19666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:18:06.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:18:06.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-11-12T17:18:06.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-11-12T17:18:06.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:18:06.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:18:06.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:18:06.031 [DEBUG] [Thread-19666] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:18:07.194 [DEBUG] [Thread-19668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:18:22.258 [DEBUG] [Thread-19669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:18:36.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:18:36.051 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:18:36.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-11-12T17:18:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 18, 4), 34.72, 9.65, 0.0, 33.28, 26.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:18:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:18:04
2025-11-12T17:18:36.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:18:36.987 [DEBUG] [Thread-19670] [transport.py] [_log()] starting thread (client mode): 0x11f103d0
2025-11-12T17:18:36.987 [DEBUG] [Thread-19670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:18:37.007 [DEBUG] [Thread-19670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:18:37.007 [INFO] [Thread-19670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:18:37.010 [DEBUG] [Thread-19670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] client lang: <none>
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] server lang: <none>
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] kex follows: False
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] Compression: none
2025-11-12T17:18:37.011 [DEBUG] [Thread-19670] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:18:37.026 [DEBUG] [Thread-19670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:18:37.026 [DEBUG] [Thread-19670] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:18:37.026 [DEBUG] [Thread-19670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:18:37.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:18:37.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:18:37.068 [DEBUG] [Thread-19670] [transport.py] [_log()] userauth is OK
2025-11-12T17:18:37.068 [DEBUG] [Thread-19670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:18:37.068 [DEBUG] [Thread-19670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:18:37.068 [DEBUG] [Thread-19670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:18:37.068 [DEBUG] [Thread-19670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:18:37.086 [INFO] [Thread-19670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:18:37.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:18:37.291 [DEBUG] [Thread-19672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:18:37.735 [DEBUG] [Thread-19670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:18:37.735 [DEBUG] [Thread-19670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:18:37.735 [DEBUG] [Thread-19670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:18:37.776 [DEBUG] [Thread-19670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:18:37.776 [DEBUG] [Thread-19670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:18:37.778 [DEBUG] [Thread-19670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:18:37.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:18:37.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:18:37.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:18:37.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:18:37.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:18:37.796 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:18:37.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.637586 -999.00  +25.70  24.11     15   -2.50 1 1 1 1 1   887    0 31.00 113.27 ----- 19.8 24.1 279.4 34.0 27.3 -25.3 27.3 -24.3 27.2 -23.8 27.5 -25.0
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.637586
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:18:37.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:18:37.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:18:04', tmtdew=34.72, humidity=9.65, cloud=0.0, wind=33.28, temperature=26.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:18:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:18:37.797 [DEBUG] [Thread-19670] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:18:37.869 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:18:37.881 [DEBUG] [Thread-19674] [transport.py] [_log()] starting thread (client mode): 0x11f11ae0
2025-11-12T17:18:37.881 [DEBUG] [Thread-19674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:18:37.898 [DEBUG] [Thread-19674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:18:37.898 [INFO] [Thread-19674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] client lang: <none>
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] server lang: <none>
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] kex follows: False
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] Compression: none
2025-11-12T17:18:37.906 [DEBUG] [Thread-19674] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:18:37.962 [DEBUG] [Thread-19674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:18:37.962 [DEBUG] [Thread-19674] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:18:37.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:18:37.962 [DEBUG] [Thread-19674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:18:37.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:18:38.019 [DEBUG] [Thread-19674] [transport.py] [_log()] userauth is OK
2025-11-12T17:18:38.019 [DEBUG] [Thread-19674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:18:38.019 [DEBUG] [Thread-19674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:18:38.019 [DEBUG] [Thread-19674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:18:38.019 [DEBUG] [Thread-19674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:18:38.037 [INFO] [Thread-19674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:18:38.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:18:38.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:18:38.847 [DEBUG] [Thread-19674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:18:38.848 [DEBUG] [Thread-19674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:18:38.895 [DEBUG] [Thread-19674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:18:38.896 [DEBUG] [Thread-19674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:18:38.905 [DEBUG] [Thread-19674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:18:38.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:18:38.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-11-12T17:18:38.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:18:38.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:18:38.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:18:38.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:18:38.941 [DEBUG] [Thread-19674] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:18:42.559 [DEBUG] [Thread-19676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:18:52.155 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:18:52.157 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:18:52.325 [DEBUG] [Thread-19677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:19:07.375 [DEBUG] [Thread-19678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:19:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:19:08.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:19:08.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:19:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 18, 36), 34.44, 9.7, 0.0, 32.55, 26.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:19:09.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:18:36
2025-11-12T17:19:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:19:09.961 [DEBUG] [Thread-19679] [transport.py] [_log()] starting thread (client mode): 0x149a8430
2025-11-12T17:19:09.961 [DEBUG] [Thread-19679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:19:09.981 [DEBUG] [Thread-19679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:19:09.981 [INFO] [Thread-19679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:19:09.984 [DEBUG] [Thread-19679] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:19:09.984 [DEBUG] [Thread-19679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:19:09.984 [DEBUG] [Thread-19679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:19:09.984 [DEBUG] [Thread-19679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] client lang: <none>
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] server lang: <none>
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] kex follows: False
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] Compression: none
2025-11-12T17:19:09.985 [DEBUG] [Thread-19679] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:19:09.993 [DEBUG] [Thread-19679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:19:09.993 [DEBUG] [Thread-19679] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:19:09.993 [DEBUG] [Thread-19679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:19:09.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:19:09.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:19:09.994 [DEBUG] [Thread-19679] [transport.py] [_log()] userauth is OK
2025-11-12T17:19:09.994 [DEBUG] [Thread-19679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:19:09.994 [DEBUG] [Thread-19679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:19:09.994 [DEBUG] [Thread-19679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:19:09.994 [DEBUG] [Thread-19679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:19:10.003 [INFO] [Thread-19679] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:19:10.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:19:10.587 [DEBUG] [Thread-19679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:19:10.587 [DEBUG] [Thread-19679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:19:10.587 [DEBUG] [Thread-19679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:19:10.628 [DEBUG] [Thread-19679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:19:10.628 [DEBUG] [Thread-19679] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:19:10.630 [DEBUG] [Thread-19679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:19:10.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:19:10.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:19:10.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:19:10.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:19:10.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:19:10.647 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:19:10.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:19:10.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.637934 -999.00  +25.70  21.52     15   -2.40 1 1 1 1 1   887    0 30.83 104.38 ----- 29.0 21.5 280.7 39.9 27.3 -25.9 27.3 -24.4 27.1 -24.7 27.5 -24.6
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.637934
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:19:10.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:18:36', tmtdew=34.44, humidity=9.7, cloud=0.0, wind=32.55, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:18:37.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:19:10.649 [DEBUG] [Thread-19679] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:19:10.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:19:10.735 [DEBUG] [Thread-19682] [transport.py] [_log()] starting thread (client mode): 0x149a9b10
2025-11-12T17:19:10.736 [DEBUG] [Thread-19682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:19:10.753 [DEBUG] [Thread-19682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:19:10.753 [INFO] [Thread-19682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] client lang: <none>
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] server lang: <none>
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] kex follows: False
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] Compression: none
2025-11-12T17:19:10.761 [DEBUG] [Thread-19682] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:19:10.821 [DEBUG] [Thread-19682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:19:10.821 [DEBUG] [Thread-19682] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:19:10.821 [DEBUG] [Thread-19682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:19:10.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:19:10.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:19:10.879 [DEBUG] [Thread-19682] [transport.py] [_log()] userauth is OK
2025-11-12T17:19:10.879 [DEBUG] [Thread-19682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:19:10.879 [DEBUG] [Thread-19682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:19:10.879 [DEBUG] [Thread-19682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:19:10.879 [DEBUG] [Thread-19682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:19:10.894 [INFO] [Thread-19682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:19:10.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:19:10.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:19:11.781 [DEBUG] [Thread-19682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:19:11.781 [DEBUG] [Thread-19682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:19:11.830 [DEBUG] [Thread-19682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:19:11.830 [DEBUG] [Thread-19682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:19:11.838 [DEBUG] [Thread-19682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:19:11.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:19:11.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-11-12T17:19:11.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-11-12T17:19:11.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:19:11.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:19:11.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:19:11.869 [DEBUG] [Thread-19682] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:19:22.409 [DEBUG] [Thread-19684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:19:37.464 [DEBUG] [Thread-19685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:19:41.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:19:41.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:19:41.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-11-12T17:19:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 19, 8), 34.3, 9.8, 0.0, 26.06, 26.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:19:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:19:08
2025-11-12T17:19:42.602 [DEBUG] [Thread-19686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:19:42.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:19:42.851 [DEBUG] [Thread-19687] [transport.py] [_log()] starting thread (client mode): 0x149aa710
2025-11-12T17:19:42.851 [DEBUG] [Thread-19687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:19:42.874 [DEBUG] [Thread-19687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:19:42.874 [INFO] [Thread-19687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:19:42.878 [DEBUG] [Thread-19687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] client lang: <none>
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] server lang: <none>
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] kex follows: False
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] Compression: none
2025-11-12T17:19:42.879 [DEBUG] [Thread-19687] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:19:42.899 [DEBUG] [Thread-19687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:19:42.900 [DEBUG] [Thread-19687] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:19:42.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:19:42.901 [DEBUG] [Thread-19687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:19:42.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:19:42.903 [DEBUG] [Thread-19687] [transport.py] [_log()] userauth is OK
2025-11-12T17:19:42.903 [DEBUG] [Thread-19687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:19:42.903 [DEBUG] [Thread-19687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:19:42.903 [DEBUG] [Thread-19687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:19:42.903 [DEBUG] [Thread-19687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:19:42.928 [INFO] [Thread-19687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:19:42.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:19:43.587 [DEBUG] [Thread-19687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:19:43.587 [DEBUG] [Thread-19687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:19:43.588 [DEBUG] [Thread-19687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:19:43.628 [DEBUG] [Thread-19687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:19:43.628 [DEBUG] [Thread-19687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:19:43.632 [DEBUG] [Thread-19687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:19:43.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:19:43.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:19:43.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:19:43.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:19:43.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:19:43.655 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:19:43.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:19:43.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:19:43.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:19:43.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.638281 -999.00  +25.80  28.99     15   -2.60 1 1 1 1 1   887    0 31.02 96.81 ----- 29.6 29.0 274.8 36.0 27.3 -25.8 27.3 -24.2 27.1 -24.0 27.4 -24.9
2025-11-12T17:19:43.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:19:43.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:19:43.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.638281
2025-11-12T17:19:43.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:19:43.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:19:43.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:19:43.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:19:43.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:19:43.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:19:08', tmtdew=34.3, humidity=9.8, cloud=0.0, wind=26.06, temperature=26.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:19:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:19:43.658 [DEBUG] [Thread-19687] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:19:43.741 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:19:43.753 [DEBUG] [Thread-19690] [transport.py] [_log()] starting thread (client mode): 0x11f10970
2025-11-12T17:19:43.754 [DEBUG] [Thread-19690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:19:43.767 [DEBUG] [Thread-19690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:19:43.767 [INFO] [Thread-19690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] client lang: <none>
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] server lang: <none>
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] kex follows: False
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:19:43.775 [DEBUG] [Thread-19690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:19:43.776 [DEBUG] [Thread-19690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:19:43.776 [DEBUG] [Thread-19690] [transport.py] [_log()] Compression: none
2025-11-12T17:19:43.776 [DEBUG] [Thread-19690] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:19:43.835 [DEBUG] [Thread-19690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:19:43.836 [DEBUG] [Thread-19690] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:19:43.836 [DEBUG] [Thread-19690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:19:43.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:19:43.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:19:43.897 [DEBUG] [Thread-19690] [transport.py] [_log()] userauth is OK
2025-11-12T17:19:43.897 [DEBUG] [Thread-19690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:19:43.897 [DEBUG] [Thread-19690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:19:43.897 [DEBUG] [Thread-19690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:19:43.897 [DEBUG] [Thread-19690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:19:43.916 [INFO] [Thread-19690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:19:43.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:19:43.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:19:44.796 [DEBUG] [Thread-19690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:19:44.796 [DEBUG] [Thread-19690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:19:44.850 [DEBUG] [Thread-19690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:19:44.850 [DEBUG] [Thread-19690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:19:44.859 [DEBUG] [Thread-19690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:19:44.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:19:44.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')
2025-11-12T17:19:44.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:19:44.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:19:44.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:19:44.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:19:44.900 [DEBUG] [Thread-19690] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:19:52.308 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:19:52.309 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:19:52.498 [DEBUG] [Thread-19692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:20:07.549 [DEBUG] [Thread-19693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:20:14.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:20:14.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:20:14.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-11-12T17:20:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 20, 12), 34.72, 9.27, 0.0, 36.17, 26.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:20:15.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:20:12
2025-11-12T17:20:15.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:20:15.825 [DEBUG] [Thread-19694] [transport.py] [_log()] starting thread (client mode): 0x11f11e10
2025-11-12T17:20:15.825 [DEBUG] [Thread-19694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:20:15.845 [DEBUG] [Thread-19694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:20:15.846 [INFO] [Thread-19694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:20:15.849 [DEBUG] [Thread-19694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:20:15.849 [DEBUG] [Thread-19694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] client lang: <none>
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] server lang: <none>
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] kex follows: False
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] Compression: none
2025-11-12T17:20:15.850 [DEBUG] [Thread-19694] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:20:15.866 [DEBUG] [Thread-19694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:20:15.867 [DEBUG] [Thread-19694] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:20:15.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:20:15.867 [DEBUG] [Thread-19694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:20:15.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:20:15.871 [DEBUG] [Thread-19694] [transport.py] [_log()] userauth is OK
2025-11-12T17:20:15.871 [DEBUG] [Thread-19694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:20:15.871 [DEBUG] [Thread-19694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:20:15.871 [DEBUG] [Thread-19694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:20:15.871 [DEBUG] [Thread-19694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:20:15.896 [INFO] [Thread-19694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:20:15.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:20:16.907 [DEBUG] [Thread-19694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:20:16.907 [DEBUG] [Thread-19694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:20:16.908 [DEBUG] [Thread-19694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:20:16.948 [DEBUG] [Thread-19694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:20:16.948 [DEBUG] [Thread-19694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:20:16.951 [DEBUG] [Thread-19694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:20:16.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:20:16.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:20:16.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:20:16.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:20:16.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:20:16.973 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:20:16.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:20:16.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:20:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:20:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.638628 -999.00  +25.80  31.90     15   -2.70 1 1 2 1 1   887    0 30.89 96.63 ----- 23.9 31.9 279.0 45.2 27.3 -25.8 27.3 -24.1 27.1 -23.5 27.4 -24.6
2025-11-12T17:20:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:20:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:20:16.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.638628
2025-11-12T17:20:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:20:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:20:16.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:20:16.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:20:16.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:20:16.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:20:12', tmtdew=34.72, humidity=9.27, cloud=0.0, wind=36.17, temperature=26.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:19:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:20:16.976 [DEBUG] [Thread-19694] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:20:17.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:20:17.087 [DEBUG] [Thread-19697] [transport.py] [_log()] starting thread (client mode): 0x11f13160
2025-11-12T17:20:17.087 [DEBUG] [Thread-19697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:20:17.106 [DEBUG] [Thread-19697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:20:17.106 [INFO] [Thread-19697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:20:17.114 [DEBUG] [Thread-19697] [transport.py] [_log()] client lang: <none>
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] server lang: <none>
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] kex follows: False
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] Compression: none
2025-11-12T17:20:17.115 [DEBUG] [Thread-19697] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:20:17.172 [DEBUG] [Thread-19697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:20:17.173 [DEBUG] [Thread-19697] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:20:17.173 [DEBUG] [Thread-19697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:20:17.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:20:17.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:20:17.232 [DEBUG] [Thread-19697] [transport.py] [_log()] userauth is OK
2025-11-12T17:20:17.232 [DEBUG] [Thread-19697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:20:17.232 [DEBUG] [Thread-19697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:20:17.232 [DEBUG] [Thread-19697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:20:17.232 [DEBUG] [Thread-19697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:20:17.252 [INFO] [Thread-19697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:20:17.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:20:17.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:20:18.104 [DEBUG] [Thread-19697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:20:18.105 [DEBUG] [Thread-19697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:20:18.152 [DEBUG] [Thread-19697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:20:18.153 [DEBUG] [Thread-19697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:20:18.162 [DEBUG] [Thread-19697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:20:18.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:20:18.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-11-12T17:20:18.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-11-12T17:20:18.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:20:18.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:20:18.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:20:18.199 [DEBUG] [Thread-19697] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:20:22.589 [DEBUG] [Thread-19699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:20:37.649 [DEBUG] [Thread-19700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:20:42.640 [DEBUG] [Thread-19701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:20:48.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:20:48.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:20:48.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-11-12T17:20:48.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 20, 44), 34.78, 9.62, 0.0, 32.5, 26.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:20:48.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:20:44
2025-11-12T17:20:48.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:20:49.121 [DEBUG] [Thread-19702] [transport.py] [_log()] starting thread (client mode): 0x149a8d90
2025-11-12T17:20:49.121 [DEBUG] [Thread-19702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:20:49.142 [DEBUG] [Thread-19702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:20:49.142 [INFO] [Thread-19702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] client lang: <none>
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] server lang: <none>
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] kex follows: False
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] Compression: none
2025-11-12T17:20:49.145 [DEBUG] [Thread-19702] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:20:49.162 [DEBUG] [Thread-19702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:20:49.163 [DEBUG] [Thread-19702] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:20:49.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:20:49.164 [DEBUG] [Thread-19702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:20:49.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:20:49.166 [DEBUG] [Thread-19702] [transport.py] [_log()] userauth is OK
2025-11-12T17:20:49.167 [DEBUG] [Thread-19702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:20:49.167 [DEBUG] [Thread-19702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:20:49.167 [DEBUG] [Thread-19702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:20:49.167 [DEBUG] [Thread-19702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:20:49.191 [INFO] [Thread-19702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:20:49.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:20:49.827 [DEBUG] [Thread-19702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:20:49.827 [DEBUG] [Thread-19702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:20:49.828 [DEBUG] [Thread-19702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:20:49.868 [DEBUG] [Thread-19702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:20:49.869 [DEBUG] [Thread-19702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:20:49.872 [DEBUG] [Thread-19702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:20:49.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:20:49.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:20:49.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:20:49.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:20:49.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:20:49.896 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:20:49.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:20:49.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:20:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:20:49.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.638975 -999.00  +25.80  25.65     14   -2.90 1 1 1 1 1   887    0 30.79 90.21 ----- 27.6 25.6 267.8 36.3 27.2 -26.1 27.3 -24.3 27.1 -24.8 27.4 -25.0
2025-11-12T17:20:49.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:20:49.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:20:49.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.638975
2025-11-12T17:20:49.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:20:49.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:20:49.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:20:49.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:20:49.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:20:49.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:20:44', tmtdew=34.78, humidity=9.62, cloud=0.0, wind=32.5, temperature=26.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:20:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:20:49.899 [DEBUG] [Thread-19702] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:20:49.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:20:49.995 [DEBUG] [Thread-19705] [transport.py] [_log()] starting thread (client mode): 0x11f11f90
2025-11-12T17:20:49.995 [DEBUG] [Thread-19705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:20:50.010 [DEBUG] [Thread-19705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:20:50.010 [INFO] [Thread-19705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:20:50.018 [DEBUG] [Thread-19705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:20:50.018 [DEBUG] [Thread-19705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:20:50.018 [DEBUG] [Thread-19705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:20:50.018 [DEBUG] [Thread-19705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:20:50.019 [DEBUG] [Thread-19705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:20:50.019 [DEBUG] [Thread-19705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:20:50.019 [DEBUG] [Thread-19705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:20:50.019 [DEBUG] [Thread-19705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:20:50.019 [DEBUG] [Thread-19705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:20:50.019 [DEBUG] [Thread-19705] [transport.py] [_log()] client lang: <none>
2025-11-12T17:20:50.019 [DEBUG] [Thread-19705] [transport.py] [_log()] server lang: <none>
2025-11-12T17:20:50.019 [DEBUG] [Thread-19705] [transport.py] [_log()] kex follows: False
2025-11-12T17:20:50.020 [DEBUG] [Thread-19705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:20:50.020 [DEBUG] [Thread-19705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:20:50.020 [DEBUG] [Thread-19705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:20:50.020 [DEBUG] [Thread-19705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:20:50.020 [DEBUG] [Thread-19705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:20:50.020 [DEBUG] [Thread-19705] [transport.py] [_log()] Compression: none
2025-11-12T17:20:50.020 [DEBUG] [Thread-19705] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:20:50.076 [DEBUG] [Thread-19705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:20:50.077 [DEBUG] [Thread-19705] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:20:50.077 [DEBUG] [Thread-19705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:20:50.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:20:50.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:20:50.136 [DEBUG] [Thread-19705] [transport.py] [_log()] userauth is OK
2025-11-12T17:20:50.136 [DEBUG] [Thread-19705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:20:50.136 [DEBUG] [Thread-19705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:20:50.136 [DEBUG] [Thread-19705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:20:50.136 [DEBUG] [Thread-19705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:20:50.155 [INFO] [Thread-19705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:20:50.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:20:50.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:20:50.993 [DEBUG] [Thread-19705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:20:50.993 [DEBUG] [Thread-19705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:20:51.042 [DEBUG] [Thread-19705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:20:51.042 [DEBUG] [Thread-19705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:20:51.051 [DEBUG] [Thread-19705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:20:51.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:20:51.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:20:51.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-11-12T17:20:51.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:20:51.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:20:51.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:20:51.086 [DEBUG] [Thread-19705] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:20:52.458 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:20:52.459 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:20:52.686 [DEBUG] [Thread-19707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:21:07.734 [DEBUG] [Thread-19708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:21:21.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:21:21.086 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:21:21.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:21:21.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 21, 16), 34.78, 9.6, 0.0, 33.49, 25.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:21:21.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:21:16
2025-11-12T17:21:21.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:21:21.997 [DEBUG] [Thread-19709] [transport.py] [_log()] starting thread (client mode): 0x149a9780
2025-11-12T17:21:21.997 [DEBUG] [Thread-19709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:21:22.017 [DEBUG] [Thread-19709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:21:22.018 [INFO] [Thread-19709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] client lang: <none>
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] server lang: <none>
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] kex follows: False
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] Compression: none
2025-11-12T17:21:22.021 [DEBUG] [Thread-19709] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:21:22.038 [DEBUG] [Thread-19709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:21:22.039 [DEBUG] [Thread-19709] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:21:22.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:21:22.040 [DEBUG] [Thread-19709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:21:22.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:21:22.043 [DEBUG] [Thread-19709] [transport.py] [_log()] userauth is OK
2025-11-12T17:21:22.043 [DEBUG] [Thread-19709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:21:22.043 [DEBUG] [Thread-19709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:21:22.043 [DEBUG] [Thread-19709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:21:22.043 [DEBUG] [Thread-19709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:21:22.066 [INFO] [Thread-19709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:21:22.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:21:22.609 [DEBUG] [Thread-19709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:21:22.610 [DEBUG] [Thread-19709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:21:22.610 [DEBUG] [Thread-19709] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:21:22.650 [DEBUG] [Thread-19709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:21:22.651 [DEBUG] [Thread-19709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:21:22.654 [DEBUG] [Thread-19709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:21:22.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:21:22.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:21:22.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:21:22.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:21:22.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:21:22.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:21:22.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:21:22.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:21:22.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:21:22.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.639670 -999.00  +25.50  32.49     15   -2.90 1 1 2 1 1   887    0 30.24 84.81 ----- 27.6 32.5 276.8 37.5 27.2 -25.5 27.2 -24.2 26.9 -24.8 27.3 -24.6
2025-11-12T17:21:22.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:21:22.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:21:22.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.639670
2025-11-12T17:21:22.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:21:22.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:21:22.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:21:22.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:21:22.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:21:22.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:21:16', tmtdew=34.78, humidity=9.6, cloud=0.0, wind=33.49, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:21:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:21:22.680 [DEBUG] [Thread-19709] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:21:22.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:21:22.765 [DEBUG] [Thread-19712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:21:22.775 [DEBUG] [Thread-19713] [transport.py] [_log()] starting thread (client mode): 0x4848c130
2025-11-12T17:21:22.775 [DEBUG] [Thread-19713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:21:22.790 [DEBUG] [Thread-19713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:21:22.790 [INFO] [Thread-19713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:21:22.798 [DEBUG] [Thread-19713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:21:22.798 [DEBUG] [Thread-19713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:21:22.798 [DEBUG] [Thread-19713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] client lang: <none>
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] server lang: <none>
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] kex follows: False
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] Compression: none
2025-11-12T17:21:22.799 [DEBUG] [Thread-19713] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:21:22.856 [DEBUG] [Thread-19713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:21:22.857 [DEBUG] [Thread-19713] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:21:22.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:21:22.858 [DEBUG] [Thread-19713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:21:22.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:21:22.912 [DEBUG] [Thread-19713] [transport.py] [_log()] userauth is OK
2025-11-12T17:21:22.912 [DEBUG] [Thread-19713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:21:22.912 [DEBUG] [Thread-19713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:21:22.912 [DEBUG] [Thread-19713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:21:22.912 [DEBUG] [Thread-19713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:21:22.930 [INFO] [Thread-19713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:21: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-11-12T17:21:22.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:21:23.779 [DEBUG] [Thread-19713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:21:23.779 [DEBUG] [Thread-19713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:21:23.827 [DEBUG] [Thread-19713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:21:23.828 [DEBUG] [Thread-19713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:21:23.837 [DEBUG] [Thread-19713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:21:23.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:21:23.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-11-12T17:21:23.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-11-12T17:21:23.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:21:23.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:21:23.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:21:23.874 [DEBUG] [Thread-19713] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:21:37.806 [DEBUG] [Thread-19715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:21:42.680 [DEBUG] [Thread-19716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:21:52.599 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:21:52.601 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:21:52.839 [DEBUG] [Thread-19717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:21:53.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:21:53.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:21:53.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-11-12T17:21:54.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 21, 48), 34.7, 9.65, 0.0, 31.51, 25.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:21:54.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:21:48
2025-11-12T17:21:54.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:21:54.778 [DEBUG] [Thread-19718] [transport.py] [_log()] starting thread (client mode): 0x149ab310
2025-11-12T17:21:54.778 [DEBUG] [Thread-19718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:21:54.798 [DEBUG] [Thread-19718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:21:54.799 [INFO] [Thread-19718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] client lang: <none>
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] server lang: <none>
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] kex follows: False
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] Compression: none
2025-11-12T17:21:54.802 [DEBUG] [Thread-19718] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:21:54.819 [DEBUG] [Thread-19718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:21:54.819 [DEBUG] [Thread-19718] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:21:54.820 [DEBUG] [Thread-19718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:21:54.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:21:54.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:21:54.822 [DEBUG] [Thread-19718] [transport.py] [_log()] userauth is OK
2025-11-12T17:21:54.823 [DEBUG] [Thread-19718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:21:54.823 [DEBUG] [Thread-19718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:21:54.823 [DEBUG] [Thread-19718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:21:54.823 [DEBUG] [Thread-19718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:21:54.848 [INFO] [Thread-19718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:21:54.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:21:55.505 [DEBUG] [Thread-19718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:21:55.505 [DEBUG] [Thread-19718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:21:55.506 [DEBUG] [Thread-19718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:21:55.547 [DEBUG] [Thread-19718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:21:55.547 [DEBUG] [Thread-19718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:21:55.550 [DEBUG] [Thread-19718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:21:55.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:21:55.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:21:55.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:21:55.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:21:55.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:21:55.574 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:21:55.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:21:55.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:21:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:21:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.640017 -999.00  +25.70  17.81     14   -2.90 1 1 1 1 1   887    0 30.60 84.46 ----- 25.7 17.8 272.2 36.4 27.2 -25.4 27.2 -23.6 27.1 -23.2 27.3 -24.2
2025-11-12T17:21:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:21:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:21:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.640017
2025-11-12T17:21:55.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:21:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:21:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:21:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:21:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:21:55.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:21:48', tmtdew=34.7, humidity=9.65, cloud=0.0, wind=31.51, temperature=25.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:21:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:21:55.577 [DEBUG] [Thread-19718] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:21:55.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:21:55.672 [DEBUG] [Thread-19721] [transport.py] [_log()] starting thread (client mode): 0x149abf40
2025-11-12T17:21:55.672 [DEBUG] [Thread-19721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:21:55.686 [DEBUG] [Thread-19721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:21:55.686 [INFO] [Thread-19721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:21:55.693 [DEBUG] [Thread-19721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] client lang: <none>
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] server lang: <none>
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] kex follows: False
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] Compression: none
2025-11-12T17:21:55.694 [DEBUG] [Thread-19721] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:21:55.750 [DEBUG] [Thread-19721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:21:55.750 [DEBUG] [Thread-19721] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:21:55.750 [DEBUG] [Thread-19721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:21:55.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:21:55.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:21:55.807 [DEBUG] [Thread-19721] [transport.py] [_log()] userauth is OK
2025-11-12T17:21:55.807 [DEBUG] [Thread-19721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:21:55.807 [DEBUG] [Thread-19721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:21:55.807 [DEBUG] [Thread-19721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:21:55.807 [DEBUG] [Thread-19721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:21:55.821 [INFO] [Thread-19721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:21:55.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:21:55.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:21:56.672 [DEBUG] [Thread-19721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:21:56.672 [DEBUG] [Thread-19721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:21:56.720 [DEBUG] [Thread-19721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:21:56.720 [DEBUG] [Thread-19721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:21:56.729 [DEBUG] [Thread-19721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:21:56.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:21:56.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-11-12T17:21:56.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:21:56.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:21:56.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:21:56.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:21:56.766 [DEBUG] [Thread-19721] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:22:07.870 [DEBUG] [Thread-19723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:22:22.919 [DEBUG] [Thread-19724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:22:26.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:22:26.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:22:26.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-11-12T17:22:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 22, 20), 34.63, 9.7, 0.0, 33.15, 25.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:22:27.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:22:20
2025-11-12T17:22:27.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:22:27.690 [DEBUG] [Thread-19725] [transport.py] [_log()] starting thread (client mode): 0x173e9660
2025-11-12T17:22:27.691 [DEBUG] [Thread-19725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:22:27.709 [DEBUG] [Thread-19725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:22:27.709 [INFO] [Thread-19725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:22:27.712 [DEBUG] [Thread-19725] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:22:27.712 [DEBUG] [Thread-19725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:22:27.712 [DEBUG] [Thread-19725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] client lang: <none>
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] server lang: <none>
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] kex follows: False
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] Compression: none
2025-11-12T17:22:27.713 [DEBUG] [Thread-19725] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:22:27.729 [DEBUG] [Thread-19725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:22:27.729 [DEBUG] [Thread-19725] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:22:27.730 [DEBUG] [Thread-19725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:22:27.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:22:27.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:22:27.732 [DEBUG] [Thread-19725] [transport.py] [_log()] userauth is OK
2025-11-12T17:22:27.732 [DEBUG] [Thread-19725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:22:27.732 [DEBUG] [Thread-19725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:22:27.732 [DEBUG] [Thread-19725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:22:27.732 [DEBUG] [Thread-19725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:22:27.756 [INFO] [Thread-19725] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:22:27.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:22:28.375 [DEBUG] [Thread-19725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:22:28.376 [DEBUG] [Thread-19725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:22:28.376 [DEBUG] [Thread-19725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:22:28.416 [DEBUG] [Thread-19725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:22:28.416 [DEBUG] [Thread-19725] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:22:28.419 [DEBUG] [Thread-19725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:22:28.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:22:28.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:22:28.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:22:28.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:22:28.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:22:28.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:22:28.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:22:28.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:22:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:22:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.640364 -999.00  +25.70  22.49     14   -3.00 1 1 1 1 1   887    0 30.62 80.97 ----- 29.6 22.5 280.8 34.8 27.2 -25.7 27.2 -24.2 27.0 -24.6 27.4 -24.5
2025-11-12T17:22:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:22:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:22:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.640364
2025-11-12T17:22:28.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:22:28.441 [DEBUG] [Thread-19725] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:22:28.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:22:28.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:22:28.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:22:28.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:22:28.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:22:20', tmtdew=34.63, humidity=9.7, cloud=0.0, wind=33.15, temperature=25.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:22:07.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:22:28.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:22:28.536 [DEBUG] [Thread-19728] [transport.py] [_log()] starting thread (client mode): 0x173e86a0
2025-11-12T17:22:28.536 [DEBUG] [Thread-19728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:22:28.551 [DEBUG] [Thread-19728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:22:28.551 [INFO] [Thread-19728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:22:28.558 [DEBUG] [Thread-19728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:22:28.559 [DEBUG] [Thread-19728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:22:28.559 [DEBUG] [Thread-19728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:22:28.559 [DEBUG] [Thread-19728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:22:28.559 [DEBUG] [Thread-19728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:22:28.559 [DEBUG] [Thread-19728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:22:28.559 [DEBUG] [Thread-19728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:22:28.559 [DEBUG] [Thread-19728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] client lang: <none>
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] server lang: <none>
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] kex follows: False
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:22:28.560 [DEBUG] [Thread-19728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:22:28.561 [DEBUG] [Thread-19728] [transport.py] [_log()] Compression: none
2025-11-12T17:22:28.561 [DEBUG] [Thread-19728] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:22:28.616 [DEBUG] [Thread-19728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:22:28.616 [DEBUG] [Thread-19728] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:22:28.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:22:28.617 [DEBUG] [Thread-19728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:22:28.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:22:28.671 [DEBUG] [Thread-19728] [transport.py] [_log()] userauth is OK
2025-11-12T17:22:28.672 [DEBUG] [Thread-19728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:22:28.672 [DEBUG] [Thread-19728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:22:28.672 [DEBUG] [Thread-19728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:22:28.672 [DEBUG] [Thread-19728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:22:28.692 [INFO] [Thread-19728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:22:28.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:22:28.692 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:22:29.544 [DEBUG] [Thread-19728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:22:29.544 [DEBUG] [Thread-19728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:22:29.592 [DEBUG] [Thread-19728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:22:29.592 [DEBUG] [Thread-19728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:22:29.601 [DEBUG] [Thread-19728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:22:29.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:22:29.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-11-12T17:22:29.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:22:29.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:22:29.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:22:29.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:22:29.636 [DEBUG] [Thread-19728] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:22:37.956 [DEBUG] [Thread-19730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:22:42.714 [DEBUG] [Thread-19731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:22:52.742 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:22:52.743 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:22:53.008 [DEBUG] [Thread-19732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:22:59.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:22:59.657 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:22:59.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-11-12T17:23:00.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 22, 52), 34.74, 9.65, 0.0, 32.2, 25.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:23:00.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:22:52
2025-11-12T17:23:00.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:23:00.602 [DEBUG] [Thread-19733] [transport.py] [_log()] starting thread (client mode): 0x173ea1a0
2025-11-12T17:23:00.602 [DEBUG] [Thread-19733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:23:00.622 [DEBUG] [Thread-19733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:23:00.622 [INFO] [Thread-19733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] client lang: <none>
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] server lang: <none>
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] kex follows: False
2025-11-12T17:23:00.625 [DEBUG] [Thread-19733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:23:00.626 [DEBUG] [Thread-19733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:23:00.626 [DEBUG] [Thread-19733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:23:00.626 [DEBUG] [Thread-19733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:23:00.626 [DEBUG] [Thread-19733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:23:00.626 [DEBUG] [Thread-19733] [transport.py] [_log()] Compression: none
2025-11-12T17:23:00.626 [DEBUG] [Thread-19733] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:23:00.640 [DEBUG] [Thread-19733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:23:00.640 [DEBUG] [Thread-19733] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:23:00.641 [DEBUG] [Thread-19733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:23:00.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:23:00.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:23:00.641 [DEBUG] [Thread-19733] [transport.py] [_log()] userauth is OK
2025-11-12T17:23:00.642 [DEBUG] [Thread-19733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:23:00.642 [DEBUG] [Thread-19733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:23:00.642 [DEBUG] [Thread-19733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:23:00.642 [DEBUG] [Thread-19733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:23:00.656 [INFO] [Thread-19733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:23:00.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:23:01.275 [DEBUG] [Thread-19733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:23:01.275 [DEBUG] [Thread-19733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:23:01.275 [DEBUG] [Thread-19733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:23:01.317 [DEBUG] [Thread-19733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:23:01.317 [DEBUG] [Thread-19733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:23:01.319 [DEBUG] [Thread-19733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:23:01.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:23:01.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:23:01.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:23:01.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:23:01.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:23:01.336 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:23:01.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.640711 -999.00  +25.50  20.57     14   -3.10 1 1 1 1 1   887    0 30.48 80.92 ----- 20.5 20.6 274.2 35.4 27.2 -25.1 27.2 -23.8 27.0 -23.7 27.3 -24.5
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.640711
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:23:01.336 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:22:52', tmtdew=34.74, humidity=9.65, cloud=0.0, wind=32.2, temperature=25.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:22:37.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:23:01.337 [DEBUG] [Thread-19733] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:23:01.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:23:01.422 [DEBUG] [Thread-19736] [transport.py] [_log()] starting thread (client mode): 0x11f13520
2025-11-12T17:23:01.423 [DEBUG] [Thread-19736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:23:01.437 [DEBUG] [Thread-19736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:23:01.437 [INFO] [Thread-19736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:23:01.444 [DEBUG] [Thread-19736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] client lang: <none>
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] server lang: <none>
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] kex follows: False
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] Compression: none
2025-11-12T17:23:01.445 [DEBUG] [Thread-19736] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:23:01.502 [DEBUG] [Thread-19736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:23:01.502 [DEBUG] [Thread-19736] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:23:01.502 [DEBUG] [Thread-19736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:23:01.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:23:01.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:23:01.559 [DEBUG] [Thread-19736] [transport.py] [_log()] userauth is OK
2025-11-12T17:23:01.559 [DEBUG] [Thread-19736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:23:01.559 [DEBUG] [Thread-19736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:23:01.559 [DEBUG] [Thread-19736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:23:01.559 [DEBUG] [Thread-19736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:23:01.573 [INFO] [Thread-19736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:23:01.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:23:01.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:23:02.453 [DEBUG] [Thread-19736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:23:02.453 [DEBUG] [Thread-19736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:23:02.501 [DEBUG] [Thread-19736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:23:02.501 [DEBUG] [Thread-19736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:23:02.509 [DEBUG] [Thread-19736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:23:02.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:23:02.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-11-12T17:23:02.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:23:02.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:23:02.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:23:02.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:23:02.540 [DEBUG] [Thread-19736] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:23:08.036 [DEBUG] [Thread-19738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:23:23.090 [DEBUG] [Thread-19739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:23:32.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:23:32.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:23: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-11-12T17:23:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 23, 24), 34.78, 9.63, 0.0, 30.51, 25.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:23:33.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:23:24
2025-11-12T17:23:33.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:23:33.456 [DEBUG] [Thread-19740] [transport.py] [_log()] starting thread (client mode): 0x11f106a0
2025-11-12T17:23:33.456 [DEBUG] [Thread-19740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:23:33.476 [DEBUG] [Thread-19740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:23:33.476 [INFO] [Thread-19740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:23:33.479 [DEBUG] [Thread-19740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] client lang: <none>
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] server lang: <none>
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] kex follows: False
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] Compression: none
2025-11-12T17:23:33.480 [DEBUG] [Thread-19740] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:23:33.498 [DEBUG] [Thread-19740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:23:33.499 [DEBUG] [Thread-19740] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:23:33.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:23:33.500 [DEBUG] [Thread-19740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:23:33.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:23:33.502 [DEBUG] [Thread-19740] [transport.py] [_log()] userauth is OK
2025-11-12T17:23:33.502 [DEBUG] [Thread-19740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:23:33.502 [DEBUG] [Thread-19740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:23:33.502 [DEBUG] [Thread-19740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:23:33.502 [DEBUG] [Thread-19740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:23:33.526 [INFO] [Thread-19740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:23:33.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:23:34.111 [DEBUG] [Thread-19740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:23:34.111 [DEBUG] [Thread-19740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:23:34.111 [DEBUG] [Thread-19740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:23:34.152 [DEBUG] [Thread-19740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:23:34.153 [DEBUG] [Thread-19740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:23:34.155 [DEBUG] [Thread-19740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:23:34.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:23:34.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:23:34.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:23:34.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:23:34.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:23:34.175 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:23:34.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:23:34.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:23:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:23:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.641059 -999.00  +25.60  19.56     14   -2.90 1 1 1 1 1   887    0 30.93 79.57 ----- 13.2 19.6 272.4 29.5 27.2 -25.0 27.2 -23.6 27.1 -23.0 27.3 -24.0
2025-11-12T17:23:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:23:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:23:34.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.641059
2025-11-12T17:23:34.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:23:34.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:23:34.178 [DEBUG] [Thread-19740] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:23:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:23:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:23:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:23:34.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:23:24', tmtdew=34.78, humidity=9.63, cloud=0.0, wind=30.51, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:23:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:23:34.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:23:34.269 [DEBUG] [Thread-19743] [transport.py] [_log()] starting thread (client mode): 0x11f139a0
2025-11-12T17:23:34.269 [DEBUG] [Thread-19743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:23:34.284 [DEBUG] [Thread-19743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:23:34.284 [INFO] [Thread-19743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:23:34.291 [DEBUG] [Thread-19743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:23:34.291 [DEBUG] [Thread-19743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:23:34.291 [DEBUG] [Thread-19743] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] client lang: <none>
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] server lang: <none>
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] kex follows: False
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:23:34.292 [DEBUG] [Thread-19743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:23:34.293 [DEBUG] [Thread-19743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:23:34.293 [DEBUG] [Thread-19743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:23:34.293 [DEBUG] [Thread-19743] [transport.py] [_log()] Compression: none
2025-11-12T17:23:34.293 [DEBUG] [Thread-19743] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:23:34.347 [DEBUG] [Thread-19743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:23:34.348 [DEBUG] [Thread-19743] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:23:34.348 [DEBUG] [Thread-19743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:23:34.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:23:34.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:23:34.404 [DEBUG] [Thread-19743] [transport.py] [_log()] userauth is OK
2025-11-12T17:23:34.404 [DEBUG] [Thread-19743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:23:34.404 [DEBUG] [Thread-19743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:23:34.405 [DEBUG] [Thread-19743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:23:34.405 [DEBUG] [Thread-19743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:23:34.423 [INFO] [Thread-19743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:23:34.423 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:23:34.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:23:35.241 [DEBUG] [Thread-19743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:23:35.241 [DEBUG] [Thread-19743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:23:35.289 [DEBUG] [Thread-19743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:23:35.289 [DEBUG] [Thread-19743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:23:35.298 [DEBUG] [Thread-19743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:23:35.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:23:35.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-11-12T17:23:35.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-11-12T17:23:35.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:23:35.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:23:35.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:23:35.334 [DEBUG] [Thread-19743] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:23:38.122 [DEBUG] [Thread-19745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:23:42.748 [DEBUG] [Thread-19746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:23:52.884 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:23:52.885 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:23:53.164 [DEBUG] [Thread-19747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:24:05.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:24:05.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:24:05.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-11-12T17:24:05.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 23, 56), 34.96, 9.07, 0.0, 32.62, 26.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:24:05.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:23:56
2025-11-12T17:24:06.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:24:06.240 [DEBUG] [Thread-19748] [transport.py] [_log()] starting thread (client mode): 0x173eaf50
2025-11-12T17:24:06.240 [DEBUG] [Thread-19748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:24:06.259 [DEBUG] [Thread-19748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:24:06.260 [INFO] [Thread-19748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:24:06.263 [DEBUG] [Thread-19748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:24:06.263 [DEBUG] [Thread-19748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:24:06.263 [DEBUG] [Thread-19748] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:24:06.263 [DEBUG] [Thread-19748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:24:06.263 [DEBUG] [Thread-19748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:24:06.263 [DEBUG] [Thread-19748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:24:06.263 [DEBUG] [Thread-19748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] client lang: <none>
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] server lang: <none>
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] kex follows: False
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] Compression: none
2025-11-12T17:24:06.264 [DEBUG] [Thread-19748] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:24:06.272 [DEBUG] [Thread-19748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:24:06.272 [DEBUG] [Thread-19748] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:24:06.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:24:06.273 [DEBUG] [Thread-19748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:24:06.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:24:06.273 [DEBUG] [Thread-19748] [transport.py] [_log()] userauth is OK
2025-11-12T17:24:06.274 [DEBUG] [Thread-19748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:24:06.274 [DEBUG] [Thread-19748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:24:06.274 [DEBUG] [Thread-19748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:24:06.274 [DEBUG] [Thread-19748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:24:06.286 [INFO] [Thread-19748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:24:06.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:24:06.904 [DEBUG] [Thread-19748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:24:06.904 [DEBUG] [Thread-19748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:24:06.905 [DEBUG] [Thread-19748] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:24:06.945 [DEBUG] [Thread-19748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:24:06.945 [DEBUG] [Thread-19748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:24:06.948 [DEBUG] [Thread-19748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:24:06.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:24:06.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:24:06.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:24:06.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:24:06.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:24:06.971 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:24:06.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:24:06.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:24:06.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:24:06.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.641406 -999.00  +25.80  32.44     14   -3.00 1 1 2 1 1   887    0 30.34 82.25 ----- 30.1 32.4 274.8 39.0 27.2 -25.3 27.3 -23.8 27.1 -23.7 27.4 -24.3
2025-11-12T17:24:06.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:24:06.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:24:06.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.641406
2025-11-12T17:24:06.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:24:06.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:24:06.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:24:06.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:24:06.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:24:06.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:23:56', tmtdew=34.96, humidity=9.07, cloud=0.0, wind=32.62, temperature=26.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:23:37.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:24:06.974 [DEBUG] [Thread-19748] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:24:07.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:24:07.067 [DEBUG] [Thread-19751] [transport.py] [_log()] starting thread (client mode): 0x173e8d00
2025-11-12T17:24:07.068 [DEBUG] [Thread-19751] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:24:07.082 [DEBUG] [Thread-19751] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:24:07.082 [INFO] [Thread-19751] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:24:07.090 [DEBUG] [Thread-19751] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:24:07.090 [DEBUG] [Thread-19751] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:24:07.090 [DEBUG] [Thread-19751] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] client lang: <none>
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] server lang: <none>
2025-11-12T17:24:07.091 [DEBUG] [Thread-19751] [transport.py] [_log()] kex follows: False
2025-11-12T17:24:07.092 [DEBUG] [Thread-19751] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:24:07.092 [DEBUG] [Thread-19751] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:24:07.092 [DEBUG] [Thread-19751] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:24:07.092 [DEBUG] [Thread-19751] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:24:07.092 [DEBUG] [Thread-19751] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:24:07.092 [DEBUG] [Thread-19751] [transport.py] [_log()] Compression: none
2025-11-12T17:24:07.093 [DEBUG] [Thread-19751] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:24:07.152 [DEBUG] [Thread-19751] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:24:07.152 [DEBUG] [Thread-19751] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:24:07.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:24:07.153 [DEBUG] [Thread-19751] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:24:07.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:24:07.208 [DEBUG] [Thread-19751] [transport.py] [_log()] userauth is OK
2025-11-12T17:24:07.208 [DEBUG] [Thread-19751] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:24:07.208 [DEBUG] [Thread-19751] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:24:07.208 [DEBUG] [Thread-19751] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:24:07.208 [DEBUG] [Thread-19751] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:24:07.227 [INFO] [Thread-19751] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:24:07.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:24:07.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:24:08.066 [DEBUG] [Thread-19751] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:24:08.067 [DEBUG] [Thread-19751] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:24:08.115 [DEBUG] [Thread-19751] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:24:08.115 [DEBUG] [Thread-19751] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:24:08.124 [DEBUG] [Thread-19751] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:24:08.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:24:08.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-11-12T17:24:08.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:24:08.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:24:08.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:24:08.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:24:08.161 [DEBUG] [Thread-19751] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:24:08.199 [DEBUG] [Thread-19753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:24:23.253 [DEBUG] [Thread-19754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:24:38.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:24:38.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:24:38.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:24:38.290 [DEBUG] [Thread-19755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:24:38.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 24, 28), 34.99, 9.07, 0.0, 35.24, 26.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:24:38.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:24:28
2025-11-12T17:24:38.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:24:39.069 [DEBUG] [Thread-19756] [transport.py] [_log()] starting thread (client mode): 0x11f13730
2025-11-12T17:24:39.070 [DEBUG] [Thread-19756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:24:39.089 [DEBUG] [Thread-19756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:24:39.089 [INFO] [Thread-19756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] client lang: <none>
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] server lang: <none>
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] kex follows: False
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] Compression: none
2025-11-12T17:24:39.093 [DEBUG] [Thread-19756] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:24:39.113 [DEBUG] [Thread-19756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:24:39.114 [DEBUG] [Thread-19756] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:24:39.114 [DEBUG] [Thread-19756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:24:39.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:24:39.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:24:39.116 [DEBUG] [Thread-19756] [transport.py] [_log()] userauth is OK
2025-11-12T17:24:39.117 [DEBUG] [Thread-19756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:24:39.117 [DEBUG] [Thread-19756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:24:39.117 [DEBUG] [Thread-19756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:24:39.117 [DEBUG] [Thread-19756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:24:39.142 [INFO] [Thread-19756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:24:39.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:24:39.791 [DEBUG] [Thread-19756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:24:39.791 [DEBUG] [Thread-19756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:24:39.792 [DEBUG] [Thread-19756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:24:39.833 [DEBUG] [Thread-19756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:24:39.833 [DEBUG] [Thread-19756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:24:39.836 [DEBUG] [Thread-19756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:24:39.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:24:39.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:24:39.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:24:39.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:24:39.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:24:39.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:24:39.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:24:39.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:24:39.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:24:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.641753 -999.00  +25.80  26.83     14   -3.10 1 1 1 1 1   887    0 30.50 75.98 ----- 28.2 26.8 284.2 33.3 27.2 -24.9 27.2 -23.4 27.1 -23.8 27.4 -24.3
2025-11-12T17:24:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:24:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:24:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.641753
2025-11-12T17:24:39.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:24:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:24:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:24:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:24:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:24:39.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:24:28', tmtdew=34.99, humidity=9.07, cloud=0.0, wind=35.24, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:24:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:24:39.857 [DEBUG] [Thread-19756] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:24:39.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:24:39.952 [DEBUG] [Thread-19759] [transport.py] [_log()] starting thread (client mode): 0x149a90f0
2025-11-12T17:24:39.953 [DEBUG] [Thread-19759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:24:39.970 [DEBUG] [Thread-19759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:24:39.970 [INFO] [Thread-19759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:24:39.978 [DEBUG] [Thread-19759] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:24:39.978 [DEBUG] [Thread-19759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:24:39.979 [DEBUG] [Thread-19759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:24:39.979 [DEBUG] [Thread-19759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:24:39.979 [DEBUG] [Thread-19759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:24:39.979 [DEBUG] [Thread-19759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:24:39.979 [DEBUG] [Thread-19759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:24:39.979 [DEBUG] [Thread-19759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:24:39.979 [DEBUG] [Thread-19759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:24:39.979 [DEBUG] [Thread-19759] [transport.py] [_log()] client lang: <none>
2025-11-12T17:24:39.980 [DEBUG] [Thread-19759] [transport.py] [_log()] server lang: <none>
2025-11-12T17:24:39.980 [DEBUG] [Thread-19759] [transport.py] [_log()] kex follows: False
2025-11-12T17:24:39.980 [DEBUG] [Thread-19759] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:24:39.980 [DEBUG] [Thread-19759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:24:39.980 [DEBUG] [Thread-19759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:24:39.980 [DEBUG] [Thread-19759] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:24:39.980 [DEBUG] [Thread-19759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:24:39.980 [DEBUG] [Thread-19759] [transport.py] [_log()] Compression: none
2025-11-12T17:24:39.981 [DEBUG] [Thread-19759] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:24:40.037 [DEBUG] [Thread-19759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:24:40.038 [DEBUG] [Thread-19759] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:24:40.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:24:40.039 [DEBUG] [Thread-19759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:24:40.040 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:24:40.096 [DEBUG] [Thread-19759] [transport.py] [_log()] userauth is OK
2025-11-12T17:24:40.097 [DEBUG] [Thread-19759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:24:40.097 [DEBUG] [Thread-19759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:24:40.097 [DEBUG] [Thread-19759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:24:40.097 [DEBUG] [Thread-19759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:24:40.117 [INFO] [Thread-19759] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:24:40.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:24:40.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:24:41.028 [DEBUG] [Thread-19759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:24:41.028 [DEBUG] [Thread-19759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:24:41.075 [DEBUG] [Thread-19759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:24:41.076 [DEBUG] [Thread-19759] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:24:41.085 [DEBUG] [Thread-19759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:24:41.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:24: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-11-12T17:24:41.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-11-12T17:24:41.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:24:41.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:24:41.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:24:41.122 [DEBUG] [Thread-19759] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:24:42.788 [DEBUG] [Thread-19761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:24:53.027 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:24:53.028 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:24:53.324 [DEBUG] [Thread-19762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:25:08.379 [DEBUG] [Thread-19763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:25:11.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:25:11.145 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:25:11.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-11-12T17:25:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 24, 28), 34.99, 9.07, 0.0, 35.24, 26.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:25:11.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:24:28
2025-11-12T17:25:11.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:25:12.046 [DEBUG] [Thread-19764] [transport.py] [_log()] starting thread (client mode): 0x173e9210
2025-11-12T17:25:12.047 [DEBUG] [Thread-19764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:25:12.066 [DEBUG] [Thread-19764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:25:12.066 [INFO] [Thread-19764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] client lang: <none>
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] server lang: <none>
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] kex follows: False
2025-11-12T17:25:12.070 [DEBUG] [Thread-19764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:25:12.071 [DEBUG] [Thread-19764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:25:12.071 [DEBUG] [Thread-19764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:25:12.071 [DEBUG] [Thread-19764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:25:12.071 [DEBUG] [Thread-19764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:25:12.071 [DEBUG] [Thread-19764] [transport.py] [_log()] Compression: none
2025-11-12T17:25:12.071 [DEBUG] [Thread-19764] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:25:12.088 [DEBUG] [Thread-19764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:25:12.089 [DEBUG] [Thread-19764] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:25:12.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:25:12.091 [DEBUG] [Thread-19764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:25:12.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:25:12.093 [DEBUG] [Thread-19764] [transport.py] [_log()] userauth is OK
2025-11-12T17:25:12.093 [DEBUG] [Thread-19764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:25:12.093 [DEBUG] [Thread-19764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:25:12.093 [DEBUG] [Thread-19764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:25:12.094 [DEBUG] [Thread-19764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:25:12.115 [INFO] [Thread-19764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:25:12.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:25:12.891 [DEBUG] [Thread-19764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:25:12.891 [DEBUG] [Thread-19764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:25:12.891 [DEBUG] [Thread-19764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:25:12.932 [DEBUG] [Thread-19764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:25:12.932 [DEBUG] [Thread-19764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:25:12.936 [DEBUG] [Thread-19764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:25:12.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:25:12.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:25:12.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:25:12.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:25:12.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:25:12.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:25:12.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:25:12.960 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:25:12.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:25:12.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.642100 -999.00  +25.70  25.30     14   -3.20 1 1 1 1 1   887    0 30.13 78.32 ----- 29.5 25.3 277.6 37.2 27.2 -24.9 27.2 -23.7 26.9 -24.4 27.4 -24.5
2025-11-12T17:25:12.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:25:12.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:25:12.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.642100
2025-11-12T17:25:12.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:25:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:25:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:25:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:25:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:25:12.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:24:28', tmtdew=34.99, humidity=9.07, cloud=0.0, wind=35.24, temperature=26.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:24:37.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:25:12.962 [DEBUG] [Thread-19764] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:25:13.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:25:13.061 [DEBUG] [Thread-19767] [transport.py] [_log()] starting thread (client mode): 0x173e9f60
2025-11-12T17:25:13.061 [DEBUG] [Thread-19767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:25:13.080 [DEBUG] [Thread-19767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:25:13.081 [INFO] [Thread-19767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:25:13.088 [DEBUG] [Thread-19767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:25:13.088 [DEBUG] [Thread-19767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:25:13.088 [DEBUG] [Thread-19767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] client lang: <none>
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] server lang: <none>
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] kex follows: False
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:25:13.089 [DEBUG] [Thread-19767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:25:13.090 [DEBUG] [Thread-19767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:25:13.090 [DEBUG] [Thread-19767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:25:13.090 [DEBUG] [Thread-19767] [transport.py] [_log()] Compression: none
2025-11-12T17:25:13.090 [DEBUG] [Thread-19767] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:25:13.148 [DEBUG] [Thread-19767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:25:13.148 [DEBUG] [Thread-19767] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:25:13.149 [DEBUG] [Thread-19767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:25:13.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:25:13.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:25:13.204 [DEBUG] [Thread-19767] [transport.py] [_log()] userauth is OK
2025-11-12T17:25:13.204 [DEBUG] [Thread-19767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:25:13.204 [DEBUG] [Thread-19767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:25:13.204 [DEBUG] [Thread-19767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:25:13.204 [DEBUG] [Thread-19767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:25:13.223 [INFO] [Thread-19767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:25:13.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:25:13.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:25:14.055 [DEBUG] [Thread-19767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:25:14.055 [DEBUG] [Thread-19767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:25:14.104 [DEBUG] [Thread-19767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:25:14.104 [DEBUG] [Thread-19767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:25:14.114 [DEBUG] [Thread-19767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:25:14.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:25:14.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-11-12T17:25:14.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-11-12T17:25:14.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:25:14.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:25:14.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:25:14.151 [DEBUG] [Thread-19767] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:25:23.420 [DEBUG] [Thread-19769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:25:38.469 [DEBUG] [Thread-19770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:25:42.819 [DEBUG] [Thread-19771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:25:44.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:25:44.173 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:25:44.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-11-12T17:25:44.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 25, 32), 35.24, 8.98, 0.0, 34.62, 26.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:25:44.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:25:32
2025-11-12T17:25:44.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:25:45.061 [DEBUG] [Thread-19772] [transport.py] [_log()] starting thread (client mode): 0x173ea9b0
2025-11-12T17:25:45.061 [DEBUG] [Thread-19772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:25:45.080 [DEBUG] [Thread-19772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:25:45.081 [INFO] [Thread-19772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] client lang: <none>
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] server lang: <none>
2025-11-12T17:25:45.084 [DEBUG] [Thread-19772] [transport.py] [_log()] kex follows: False
2025-11-12T17:25:45.085 [DEBUG] [Thread-19772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:25:45.085 [DEBUG] [Thread-19772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:25:45.085 [DEBUG] [Thread-19772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:25:45.085 [DEBUG] [Thread-19772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:25:45.085 [DEBUG] [Thread-19772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:25:45.085 [DEBUG] [Thread-19772] [transport.py] [_log()] Compression: none
2025-11-12T17:25:45.085 [DEBUG] [Thread-19772] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:25:45.102 [DEBUG] [Thread-19772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:25:45.103 [DEBUG] [Thread-19772] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:25:45.103 [DEBUG] [Thread-19772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:25:45.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:25:45.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:25:45.105 [DEBUG] [Thread-19772] [transport.py] [_log()] userauth is OK
2025-11-12T17:25:45.106 [DEBUG] [Thread-19772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:25:45.106 [DEBUG] [Thread-19772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:25:45.106 [DEBUG] [Thread-19772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:25:45.106 [DEBUG] [Thread-19772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:25:45.142 [INFO] [Thread-19772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:25:45.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:25:45.780 [DEBUG] [Thread-19772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:25:45.780 [DEBUG] [Thread-19772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:25:45.780 [DEBUG] [Thread-19772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:25:45.821 [DEBUG] [Thread-19772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:25:45.821 [DEBUG] [Thread-19772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:25:45.823 [DEBUG] [Thread-19772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:25:45.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:25:45.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:25:45.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:25:45.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:25:45.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:25:45.846 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:25:45.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:25:45.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:25:45.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:25:45.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.642447 -999.00  +25.80  29.56     14   -3.20 1 1 1 1 1   887    0 30.78 75.34 ----- 25.5 29.6 265.8 37.2 27.2 -25.3 27.2 -23.6 26.9 -24.3 27.3 -24.8
2025-11-12T17:25:45.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:25:45.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:25:45.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.642447
2025-11-12T17:25:45.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:25:45.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:25:45.848 [DEBUG] [Thread-19772] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:25:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:25:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:25:45.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:25:45.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:25:32', tmtdew=35.24, humidity=8.98, cloud=0.0, wind=34.62, temperature=26.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:25:07.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:25:45.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:25:45.945 [DEBUG] [Thread-19775] [transport.py] [_log()] starting thread (client mode): 0x173e89d0
2025-11-12T17:25:45.945 [DEBUG] [Thread-19775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:25:45.961 [DEBUG] [Thread-19775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:25:45.961 [INFO] [Thread-19775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:25:45.968 [DEBUG] [Thread-19775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] client lang: <none>
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] server lang: <none>
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] kex follows: False
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] Compression: none
2025-11-12T17:25:45.969 [DEBUG] [Thread-19775] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:25:46.028 [DEBUG] [Thread-19775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:25:46.029 [DEBUG] [Thread-19775] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:25:46.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:25:46.030 [DEBUG] [Thread-19775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:25:46.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:25:46.083 [DEBUG] [Thread-19775] [transport.py] [_log()] userauth is OK
2025-11-12T17:25:46.083 [DEBUG] [Thread-19775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:25:46.084 [DEBUG] [Thread-19775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:25:46.084 [DEBUG] [Thread-19775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:25:46.084 [DEBUG] [Thread-19775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:25:46.102 [INFO] [Thread-19775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:25:46.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:25:46.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:25:46.962 [DEBUG] [Thread-19775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:25:46.963 [DEBUG] [Thread-19775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:25:47.011 [DEBUG] [Thread-19775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:25:47.011 [DEBUG] [Thread-19775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:25:47.021 [DEBUG] [Thread-19775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:25:47.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:25:47.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-11-12T17:25:47.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:25:47.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:25:47.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:25:47.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:25:47.057 [DEBUG] [Thread-19775] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:25:53.170 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:25:53.171 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:25:53.509 [DEBUG] [Thread-19777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:26:08.572 [DEBUG] [Thread-19778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:26:17.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:26:17.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:26:17.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-11-12T17:26:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 26, 4), 35.19, 9.0, 0.0, 29.27, 26.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:26:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:26:04
2025-11-12T17:26:17.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:26:17.978 [DEBUG] [Thread-19779] [transport.py] [_log()] starting thread (client mode): 0x173eada0
2025-11-12T17:26:17.978 [DEBUG] [Thread-19779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:26:17.997 [DEBUG] [Thread-19779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:26:17.997 [INFO] [Thread-19779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:26:18.000 [DEBUG] [Thread-19779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] client lang: <none>
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] server lang: <none>
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] kex follows: False
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:26:18.001 [DEBUG] [Thread-19779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:26:18.002 [DEBUG] [Thread-19779] [transport.py] [_log()] Compression: none
2025-11-12T17:26:18.002 [DEBUG] [Thread-19779] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:26:18.018 [DEBUG] [Thread-19779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:26:18.019 [DEBUG] [Thread-19779] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:26:18.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:26:18.020 [DEBUG] [Thread-19779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:26:18.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:26:18.022 [DEBUG] [Thread-19779] [transport.py] [_log()] userauth is OK
2025-11-12T17:26:18.022 [DEBUG] [Thread-19779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:26:18.022 [DEBUG] [Thread-19779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:26:18.022 [DEBUG] [Thread-19779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:26:18.022 [DEBUG] [Thread-19779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:26:18.061 [INFO] [Thread-19779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:26:18.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:26:18.679 [DEBUG] [Thread-19779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:26:18.679 [DEBUG] [Thread-19779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:26:18.689 [DEBUG] [Thread-19779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:26:18.720 [DEBUG] [Thread-19779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:26:18.720 [DEBUG] [Thread-19779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:26:18.723 [DEBUG] [Thread-19779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:26:18.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:26:18.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:26:18.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:26:18.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:26:18.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:26:18.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:26:18.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:26:18.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:26:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:26:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.642795 -999.00  +25.70  26.14     14   -3.30 1 1 1 1 1   887    0 30.45 76.49 ----- 27.2 26.1 286.0 38.0 27.2 -25.2 27.2 -23.7 26.9 -24.1 27.2 -24.5
2025-11-12T17:26:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:26:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:26:18.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.642795
2025-11-12T17:26:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:26:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:26:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:26:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:26:18.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:26:18.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:26:04', tmtdew=35.19, humidity=9.0, cloud=0.0, wind=29.27, temperature=26.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:25:37.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:26:18.748 [DEBUG] [Thread-19779] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:26:18.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:26:18.845 [DEBUG] [Thread-19782] [transport.py] [_log()] starting thread (client mode): 0x173e8550
2025-11-12T17:26:18.845 [DEBUG] [Thread-19782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:26:18.863 [DEBUG] [Thread-19782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:26:18.864 [INFO] [Thread-19782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:26:18.871 [DEBUG] [Thread-19782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:26:18.871 [DEBUG] [Thread-19782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:26:18.871 [DEBUG] [Thread-19782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:26:18.871 [DEBUG] [Thread-19782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] client lang: <none>
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] server lang: <none>
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] kex follows: False
2025-11-12T17:26:18.872 [DEBUG] [Thread-19782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:26:18.873 [DEBUG] [Thread-19782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:26:18.873 [DEBUG] [Thread-19782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:26:18.873 [DEBUG] [Thread-19782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:26:18.873 [DEBUG] [Thread-19782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:26:18.873 [DEBUG] [Thread-19782] [transport.py] [_log()] Compression: none
2025-11-12T17:26:18.873 [DEBUG] [Thread-19782] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:26:18.930 [DEBUG] [Thread-19782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:26:18.931 [DEBUG] [Thread-19782] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:26:18.931 [DEBUG] [Thread-19782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:26:18.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:26:18.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:26:18.987 [DEBUG] [Thread-19782] [transport.py] [_log()] userauth is OK
2025-11-12T17:26:18.987 [DEBUG] [Thread-19782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:26:18.987 [DEBUG] [Thread-19782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:26:18.988 [DEBUG] [Thread-19782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:26:18.988 [DEBUG] [Thread-19782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:26:19.010 [INFO] [Thread-19782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:26:19.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:26:19.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:26:19.901 [DEBUG] [Thread-19782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:26:19.902 [DEBUG] [Thread-19782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:26:19.949 [DEBUG] [Thread-19782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:26:19.949 [DEBUG] [Thread-19782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:26:19.958 [DEBUG] [Thread-19782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:26:19.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:26:19.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-11-12T17:26:19.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-11-12T17:26:19.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:26:19.984 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:26:19.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:26:19.992 [DEBUG] [Thread-19782] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:26:23.604 [DEBUG] [Thread-19784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:26:38.652 [DEBUG] [Thread-19785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:26:42.852 [DEBUG] [Thread-19786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:26:50.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:26:50.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:26:50.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-11-12T17:26:50.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 26, 36), 35.11, 9.03, 0.0, 34.14, 25.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:26:50.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:26:36
2025-11-12T17:26:50.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:26:50.934 [DEBUG] [Thread-19787] [transport.py] [_log()] starting thread (client mode): 0x173e9690
2025-11-12T17:26:50.934 [DEBUG] [Thread-19787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:26:50.953 [DEBUG] [Thread-19787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:26:50.953 [INFO] [Thread-19787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] client lang: <none>
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] server lang: <none>
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] kex follows: False
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:26:50.956 [DEBUG] [Thread-19787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:26:50.957 [DEBUG] [Thread-19787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:26:50.957 [DEBUG] [Thread-19787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:26:50.957 [DEBUG] [Thread-19787] [transport.py] [_log()] Compression: none
2025-11-12T17:26:50.957 [DEBUG] [Thread-19787] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:26:50.968 [DEBUG] [Thread-19787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:26:50.968 [DEBUG] [Thread-19787] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:26:50.968 [DEBUG] [Thread-19787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:26:50.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:26:50.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:26:50.969 [DEBUG] [Thread-19787] [transport.py] [_log()] userauth is OK
2025-11-12T17:26:50.969 [DEBUG] [Thread-19787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:26:50.969 [DEBUG] [Thread-19787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:26:50.969 [DEBUG] [Thread-19787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:26:50.969 [DEBUG] [Thread-19787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:26:50.995 [INFO] [Thread-19787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:26:50.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:26:51.692 [DEBUG] [Thread-19787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:26:51.692 [DEBUG] [Thread-19787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:26:51.692 [DEBUG] [Thread-19787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:26:51.733 [DEBUG] [Thread-19787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:26:51.733 [DEBUG] [Thread-19787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:26:51.735 [DEBUG] [Thread-19787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:26:51.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:26:51.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:26:51.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:26:51.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:26:51.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:26:51.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:26:51.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:26:51.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:26:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:26:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.643489 -999.00  +25.60  29.32     14   -3.30 1 1 1 1 1   887    0 30.42 67.35 ----- 25.8 29.3 276.4 42.3 27.2 -25.0 27.2 -23.6 26.9 -24.4 27.2 -24.4
2025-11-12T17:26:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:26:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:26:51.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.643489
2025-11-12T17:26:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:26:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:26:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:26:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:26:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:26:51.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:26:36', tmtdew=35.11, humidity=9.03, cloud=0.0, wind=34.14, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:26:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:26:51.755 [DEBUG] [Thread-19787] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:26:51.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:26:51.853 [DEBUG] [Thread-19790] [transport.py] [_log()] starting thread (client mode): 0x173ebb20
2025-11-12T17:26:51.853 [DEBUG] [Thread-19790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:26:51.868 [DEBUG] [Thread-19790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:26:51.868 [INFO] [Thread-19790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:26:51.875 [DEBUG] [Thread-19790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:26:51.875 [DEBUG] [Thread-19790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:26:51.875 [DEBUG] [Thread-19790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:26:51.875 [DEBUG] [Thread-19790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:26:51.875 [DEBUG] [Thread-19790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:26:51.875 [DEBUG] [Thread-19790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:26:51.875 [DEBUG] [Thread-19790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] client lang: <none>
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] server lang: <none>
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] kex follows: False
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] Compression: none
2025-11-12T17:26:51.876 [DEBUG] [Thread-19790] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:26:51.938 [DEBUG] [Thread-19790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:26:51.939 [DEBUG] [Thread-19790] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:26:51.939 [DEBUG] [Thread-19790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:26:51.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:26:51.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:26:51.995 [DEBUG] [Thread-19790] [transport.py] [_log()] userauth is OK
2025-11-12T17:26:51.995 [DEBUG] [Thread-19790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:26:51.995 [DEBUG] [Thread-19790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:26:51.995 [DEBUG] [Thread-19790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:26:51.995 [DEBUG] [Thread-19790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:26:52.009 [INFO] [Thread-19790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:26:52.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:26:52.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:26:52.891 [DEBUG] [Thread-19790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:26:52.891 [DEBUG] [Thread-19790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:26:52.939 [DEBUG] [Thread-19790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:26:52.939 [DEBUG] [Thread-19790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:26:52.948 [DEBUG] [Thread-19790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:26:52.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:26:52.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-11-12T17:26:52.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-11-12T17:26:52.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:26:52.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:26:52.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:26:52.979 [DEBUG] [Thread-19790] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:26:53.311 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:26:53.311 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:26:53.683 [DEBUG] [Thread-19792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:27:08.733 [DEBUG] [Thread-19793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:27:23.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:27:23.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:27:23.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-11-12T17:27:23.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 27, 8), 35.13, 9.02, 0.0, 35.09, 25.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:27:23.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:27:08
2025-11-12T17:27:23.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:27:23.768 [DEBUG] [Thread-19794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:27:23.900 [DEBUG] [Thread-19795] [transport.py] [_log()] starting thread (client mode): 0x173e86a0
2025-11-12T17:27:23.900 [DEBUG] [Thread-19795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:27:23.921 [DEBUG] [Thread-19795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:27:23.921 [INFO] [Thread-19795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:27:23.924 [DEBUG] [Thread-19795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:27:23.924 [DEBUG] [Thread-19795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:27:23.924 [DEBUG] [Thread-19795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:27:23.924 [DEBUG] [Thread-19795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] client lang: <none>
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] server lang: <none>
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] kex follows: False
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:27:23.925 [DEBUG] [Thread-19795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:27:23.926 [DEBUG] [Thread-19795] [transport.py] [_log()] Compression: none
2025-11-12T17:27:23.926 [DEBUG] [Thread-19795] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:27:23.945 [DEBUG] [Thread-19795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:27:23.946 [DEBUG] [Thread-19795] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:27:23.947 [DEBUG] [Thread-19795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:27:23.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:27:23.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:27:23.949 [DEBUG] [Thread-19795] [transport.py] [_log()] userauth is OK
2025-11-12T17:27:23.949 [DEBUG] [Thread-19795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:27:23.949 [DEBUG] [Thread-19795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:27:23.949 [DEBUG] [Thread-19795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:27:23.950 [DEBUG] [Thread-19795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:27:23.986 [INFO] [Thread-19795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:27:23.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:27:24.632 [DEBUG] [Thread-19795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:27:24.632 [DEBUG] [Thread-19795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:27:24.632 [DEBUG] [Thread-19795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:27:24.673 [DEBUG] [Thread-19795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:27:24.673 [DEBUG] [Thread-19795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:27:24.676 [DEBUG] [Thread-19795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:27:24.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:27:24.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:27:24.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:27:24.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:27:24.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:27:24.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:27:24.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:27:24.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:27:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:27:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.643836 -999.00  +25.40  42.29     14   -3.50 1 1 2 1 1   887    0 30.16 62.25 ----- 33.0 42.3 278.8 48.1 27.2 -25.0 27.1 -23.7 26.8 -25.0 27.2 -24.5
2025-11-12T17:27:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:27:24.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:27:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.643836
2025-11-12T17:27:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:27:24.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:27:24.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:27:24.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:27:24.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:27:24.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:27:08', tmtdew=35.13, humidity=9.02, cloud=0.0, wind=35.09, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:27:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:27:24.704 [DEBUG] [Thread-19795] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:27:24.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:27:24.800 [DEBUG] [Thread-19798] [transport.py] [_log()] starting thread (client mode): 0x173ebac0
2025-11-12T17:27:24.801 [DEBUG] [Thread-19798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:27:24.814 [DEBUG] [Thread-19798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:27:24.815 [INFO] [Thread-19798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:27:24.822 [DEBUG] [Thread-19798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:27:24.822 [DEBUG] [Thread-19798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:27:24.822 [DEBUG] [Thread-19798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:27:24.822 [DEBUG] [Thread-19798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:27:24.822 [DEBUG] [Thread-19798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:27:24.822 [DEBUG] [Thread-19798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] client lang: <none>
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] server lang: <none>
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] kex follows: False
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] Compression: none
2025-11-12T17:27:24.823 [DEBUG] [Thread-19798] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:27:24.883 [DEBUG] [Thread-19798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:27:24.884 [DEBUG] [Thread-19798] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:27:24.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:27:24.885 [DEBUG] [Thread-19798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:27:24.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:27:24.944 [DEBUG] [Thread-19798] [transport.py] [_log()] userauth is OK
2025-11-12T17:27:24.944 [DEBUG] [Thread-19798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:27:24.945 [DEBUG] [Thread-19798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:27:24.945 [DEBUG] [Thread-19798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:27:24.945 [DEBUG] [Thread-19798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:27:24.964 [INFO] [Thread-19798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:27:24.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:27:24.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:27:25.795 [DEBUG] [Thread-19798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:27:25.795 [DEBUG] [Thread-19798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:27:25.843 [DEBUG] [Thread-19798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:27:25.843 [DEBUG] [Thread-19798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:27:25.852 [DEBUG] [Thread-19798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:27:25.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:27:25.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-11-12T17:27:25.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-11-12T17:27:25.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:27:25.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:27:25.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:27:25.889 [DEBUG] [Thread-19798] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:27:38.800 [DEBUG] [Thread-19800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:27:42.884 [DEBUG] [Thread-19801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:27:53.452 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:27:53.453 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:27:53.853 [DEBUG] [Thread-19802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:27:55.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:27:55.903 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:27:55.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-11-12T17:27:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 27, 40), 34.94, 9.05, 0.0, 28.02, 25.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:27:56.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:27:40
2025-11-12T17:27:56.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:27:56.821 [DEBUG] [Thread-19803] [transport.py] [_log()] starting thread (client mode): 0x149aa080
2025-11-12T17:27:56.821 [DEBUG] [Thread-19803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:27:56.841 [DEBUG] [Thread-19803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:27:56.841 [INFO] [Thread-19803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] client lang: <none>
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] server lang: <none>
2025-11-12T17:27:56.844 [DEBUG] [Thread-19803] [transport.py] [_log()] kex follows: False
2025-11-12T17:27:56.845 [DEBUG] [Thread-19803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:27:56.845 [DEBUG] [Thread-19803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:27:56.845 [DEBUG] [Thread-19803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:27:56.845 [DEBUG] [Thread-19803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:27:56.845 [DEBUG] [Thread-19803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:27:56.845 [DEBUG] [Thread-19803] [transport.py] [_log()] Compression: none
2025-11-12T17:27:56.845 [DEBUG] [Thread-19803] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:27:56.864 [DEBUG] [Thread-19803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:27:56.864 [DEBUG] [Thread-19803] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:27:56.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:27:56.866 [DEBUG] [Thread-19803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:27:56.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:27:56.868 [DEBUG] [Thread-19803] [transport.py] [_log()] userauth is OK
2025-11-12T17:27:56.868 [DEBUG] [Thread-19803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:27:56.868 [DEBUG] [Thread-19803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:27:56.868 [DEBUG] [Thread-19803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:27:56.868 [DEBUG] [Thread-19803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:27:56.893 [INFO] [Thread-19803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:27:56.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:27:57.505 [DEBUG] [Thread-19803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:27:57.505 [DEBUG] [Thread-19803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:27:57.505 [DEBUG] [Thread-19803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:27:57.547 [DEBUG] [Thread-19803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:27:57.547 [DEBUG] [Thread-19803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:27:57.550 [DEBUG] [Thread-19803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:27:57.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:27:57.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:27:57.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:27:57.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:27:57.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:27:57.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:27:57.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:27:57.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:27:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:27:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.644184 -999.00  +25.20  29.06     14   -3.40 1 1 1 1 1   887    0 30.28 55.38 ----- 20.2 29.1 276.8 41.7 27.1 -25.7 27.1 -23.4 26.8 -24.1 27.1 -23.9
2025-11-12T17:27:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:27:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:27:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.644184
2025-11-12T17:27:57.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:27:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:27:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:27:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:27:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:27:57.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:27:40', tmtdew=34.94, humidity=9.05, cloud=0.0, wind=28.02, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:27:37.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:27:57.577 [DEBUG] [Thread-19803] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:27:57.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:27:57.674 [DEBUG] [Thread-19806] [transport.py] [_log()] starting thread (client mode): 0x149a90c0
2025-11-12T17:27:57.674 [DEBUG] [Thread-19806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:27:57.689 [DEBUG] [Thread-19806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:27:57.689 [INFO] [Thread-19806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:27:57.697 [DEBUG] [Thread-19806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:27:57.697 [DEBUG] [Thread-19806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:27:57.697 [DEBUG] [Thread-19806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:27:57.697 [DEBUG] [Thread-19806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] client lang: <none>
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] server lang: <none>
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] kex follows: False
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:27:57.698 [DEBUG] [Thread-19806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:27:57.699 [DEBUG] [Thread-19806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:27:57.699 [DEBUG] [Thread-19806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:27:57.699 [DEBUG] [Thread-19806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:27:57.699 [DEBUG] [Thread-19806] [transport.py] [_log()] Compression: none
2025-11-12T17:27:57.699 [DEBUG] [Thread-19806] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:27:57.756 [DEBUG] [Thread-19806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:27:57.757 [DEBUG] [Thread-19806] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:27:57.757 [DEBUG] [Thread-19806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:27:57.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:27:57.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:27:57.812 [DEBUG] [Thread-19806] [transport.py] [_log()] userauth is OK
2025-11-12T17:27:57.812 [DEBUG] [Thread-19806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:27:57.812 [DEBUG] [Thread-19806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:27:57.813 [DEBUG] [Thread-19806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:27:57.813 [DEBUG] [Thread-19806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:27:57.831 [INFO] [Thread-19806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:27:57.832 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:27:57.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:27:58.681 [DEBUG] [Thread-19806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:27:58.681 [DEBUG] [Thread-19806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:27:58.729 [DEBUG] [Thread-19806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:27:58.730 [DEBUG] [Thread-19806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:27:58.739 [DEBUG] [Thread-19806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:27:58.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:27:58.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-11-12T17:27:58.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:27:58.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:27:58.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:27:58.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:27:58.775 [DEBUG] [Thread-19806] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:28:08.887 [DEBUG] [Thread-19808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:28:23.927 [DEBUG] [Thread-19809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:28:28.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:28:28.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:28:28.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-11-12T17:28:29.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 28, 12), 34.99, 9.02, 0.0, 26.93, 25.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:28:29.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:28:12
2025-11-12T17:28:29.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:28:29.701 [DEBUG] [Thread-19810] [transport.py] [_log()] starting thread (client mode): 0x149a8e20
2025-11-12T17:28:29.702 [DEBUG] [Thread-19810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:28:29.722 [DEBUG] [Thread-19810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:28:29.722 [INFO] [Thread-19810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:28:29.726 [DEBUG] [Thread-19810] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:28:29.726 [DEBUG] [Thread-19810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:28:29.726 [DEBUG] [Thread-19810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:28:29.726 [DEBUG] [Thread-19810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:28:29.726 [DEBUG] [Thread-19810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:28:29.726 [DEBUG] [Thread-19810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] client lang: <none>
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] server lang: <none>
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] kex follows: False
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] Compression: none
2025-11-12T17:28:29.727 [DEBUG] [Thread-19810] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:28:29.743 [DEBUG] [Thread-19810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:28:29.743 [DEBUG] [Thread-19810] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:28:29.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:28:29.745 [DEBUG] [Thread-19810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:28:29.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:28:29.747 [DEBUG] [Thread-19810] [transport.py] [_log()] userauth is OK
2025-11-12T17:28:29.747 [DEBUG] [Thread-19810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:28:29.747 [DEBUG] [Thread-19810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:28:29.747 [DEBUG] [Thread-19810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:28:29.747 [DEBUG] [Thread-19810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:28:29.773 [INFO] [Thread-19810] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:28:29.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:28:30.398 [DEBUG] [Thread-19810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:28:30.398 [DEBUG] [Thread-19810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:28:30.399 [DEBUG] [Thread-19810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:28:30.440 [DEBUG] [Thread-19810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:28:30.440 [DEBUG] [Thread-19810] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:28:30.443 [DEBUG] [Thread-19810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:28:30.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:28:30.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:28:30.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:28:30.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:28:30.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:28:30.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:28:30.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:28:30.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:28:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:28:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.644531 -999.00  +25.40  20.85     14   -3.30 1 1 1 1 1   887    0 29.83 48.73 ----- 14.1 20.9 263.6 31.8 27.1 -25.0 27.1 -23.2 26.9 -23.3 27.2 -23.9
2025-11-12T17:28:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:28:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:28:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.644531
2025-11-12T17:28:30.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:28:30.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:28:30.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:28:30.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:28:30.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:28:30.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:28:12', tmtdew=34.99, humidity=9.02, cloud=0.0, wind=26.93, temperature=25.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:28:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:28:30.469 [DEBUG] [Thread-19810] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:28:30.553 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:28:30.564 [DEBUG] [Thread-19813] [transport.py] [_log()] starting thread (client mode): 0x173e87f0
2025-11-12T17:28:30.564 [DEBUG] [Thread-19813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:28:30.579 [DEBUG] [Thread-19813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:28:30.579 [INFO] [Thread-19813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:28:30.586 [DEBUG] [Thread-19813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:28:30.587 [DEBUG] [Thread-19813] [transport.py] [_log()] client lang: <none>
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] server lang: <none>
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] kex follows: False
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] Compression: none
2025-11-12T17:28:30.588 [DEBUG] [Thread-19813] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:28:30.647 [DEBUG] [Thread-19813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:28:30.648 [DEBUG] [Thread-19813] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:28:30.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:28:30.648 [DEBUG] [Thread-19813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:28:30.649 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:28:30.704 [DEBUG] [Thread-19813] [transport.py] [_log()] userauth is OK
2025-11-12T17:28:30.704 [DEBUG] [Thread-19813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:28:30.704 [DEBUG] [Thread-19813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:28:30.704 [DEBUG] [Thread-19813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:28:30.704 [DEBUG] [Thread-19813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:28:30.726 [INFO] [Thread-19813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:28:30.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:28:30.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:28:31.548 [DEBUG] [Thread-19813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:28:31.548 [DEBUG] [Thread-19813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:28:31.597 [DEBUG] [Thread-19813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:28:31.597 [DEBUG] [Thread-19813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:28:31.605 [DEBUG] [Thread-19813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:28:31.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:28:31.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-11-12T17:28:31.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-11-12T17:28:31.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:28:31.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:28:31.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:28:31.638 [DEBUG] [Thread-19813] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:28:38.965 [DEBUG] [Thread-19815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:28:42.925 [DEBUG] [Thread-19816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:28:53.594 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:28:53.595 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:28:54.012 [DEBUG] [Thread-19817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:29:01.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:29:01.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:29:01.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-11-12T17:29:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 28, 44), 35.18, 8.98, 0.0, 29.85, 25.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:29:02.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:28:44
2025-11-12T17:29:02.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:29:02.536 [DEBUG] [Thread-19818] [transport.py] [_log()] starting thread (client mode): 0x149a9690
2025-11-12T17:29:02.536 [DEBUG] [Thread-19818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:29:02.558 [DEBUG] [Thread-19818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:29:02.558 [INFO] [Thread-19818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:29:02.561 [DEBUG] [Thread-19818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] client lang: <none>
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] server lang: <none>
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] kex follows: False
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] Compression: none
2025-11-12T17:29:02.562 [DEBUG] [Thread-19818] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:29:02.580 [DEBUG] [Thread-19818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:29:02.581 [DEBUG] [Thread-19818] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:29:02.581 [DEBUG] [Thread-19818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:29:02.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:29:02.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:29:02.583 [DEBUG] [Thread-19818] [transport.py] [_log()] userauth is OK
2025-11-12T17:29:02.584 [DEBUG] [Thread-19818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:29:02.584 [DEBUG] [Thread-19818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:29:02.584 [DEBUG] [Thread-19818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:29:02.584 [DEBUG] [Thread-19818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:29:02.602 [INFO] [Thread-19818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:29:02.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:29:03.260 [DEBUG] [Thread-19818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:29:03.261 [DEBUG] [Thread-19818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:29:03.261 [DEBUG] [Thread-19818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:29:03.302 [DEBUG] [Thread-19818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:29:03.302 [DEBUG] [Thread-19818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:29:03.305 [DEBUG] [Thread-19818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:29:03.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:29:03.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:29:03.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:29:03.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:29:03.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:29:03.331 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:29:03.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:29:03.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:29:03.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:29:03.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.644878 -999.00  +25.50  24.97     14   -3.30 1 1 1 1 1   887    0 30.05 43.78 ----- 22.6 25.0 271.2 32.1 27.1 -24.7 27.1 -23.2 26.8 -23.0 27.1 -23.9
2025-11-12T17:29:03.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:29:03.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:29:03.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.644878
2025-11-12T17:29:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:29:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:29:03.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:29:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:29:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:29:03.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:28:44', tmtdew=35.18, humidity=8.98, cloud=0.0, wind=29.85, temperature=25.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:28:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:29:03.334 [DEBUG] [Thread-19818] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:29:03.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:29:03.430 [DEBUG] [Thread-19821] [transport.py] [_log()] starting thread (client mode): 0x149ab3d0
2025-11-12T17:29:03.430 [DEBUG] [Thread-19821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:29:03.445 [DEBUG] [Thread-19821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:29:03.445 [INFO] [Thread-19821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:29:03.452 [DEBUG] [Thread-19821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:29:03.452 [DEBUG] [Thread-19821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:29:03.452 [DEBUG] [Thread-19821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:29:03.452 [DEBUG] [Thread-19821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:29:03.452 [DEBUG] [Thread-19821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:29:03.452 [DEBUG] [Thread-19821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:29:03.452 [DEBUG] [Thread-19821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:29:03.452 [DEBUG] [Thread-19821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] client lang: <none>
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] server lang: <none>
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] kex follows: False
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] Compression: none
2025-11-12T17:29:03.453 [DEBUG] [Thread-19821] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:29:03.512 [DEBUG] [Thread-19821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:29:03.513 [DEBUG] [Thread-19821] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:29:03.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:29:03.514 [DEBUG] [Thread-19821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:29:03.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:29:03.572 [DEBUG] [Thread-19821] [transport.py] [_log()] userauth is OK
2025-11-12T17:29:03.572 [DEBUG] [Thread-19821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:29:03.573 [DEBUG] [Thread-19821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:29:03.573 [DEBUG] [Thread-19821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:29:03.573 [DEBUG] [Thread-19821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:29:03.591 [INFO] [Thread-19821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:29:03.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:29:03.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:29:04.417 [DEBUG] [Thread-19821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:29:04.418 [DEBUG] [Thread-19821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:29:04.465 [DEBUG] [Thread-19821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:29:04.466 [DEBUG] [Thread-19821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:29:04.475 [DEBUG] [Thread-19821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:29:04.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:29:04.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-11-12T17:29:04.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-11-12T17:29:04.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:29:04.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:29:04.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:29:04.512 [DEBUG] [Thread-19821] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:29:09.052 [DEBUG] [Thread-19823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:29:24.108 [DEBUG] [Thread-19824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:29:34.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:29:34.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:29:34.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-11-12T17:29:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 29, 16), 35.15, 9.0, 0.0, 30.72, 25.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:29:35.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:29:16
2025-11-12T17:29:35.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:29:35.432 [DEBUG] [Thread-19825] [transport.py] [_log()] starting thread (client mode): 0x149abd00
2025-11-12T17:29:35.432 [DEBUG] [Thread-19825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:29:35.453 [DEBUG] [Thread-19825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:29:35.453 [INFO] [Thread-19825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] client lang: <none>
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] server lang: <none>
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] kex follows: False
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:29:35.456 [DEBUG] [Thread-19825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:29:35.457 [DEBUG] [Thread-19825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:29:35.457 [DEBUG] [Thread-19825] [transport.py] [_log()] Compression: none
2025-11-12T17:29:35.457 [DEBUG] [Thread-19825] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:29:35.474 [DEBUG] [Thread-19825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:29:35.475 [DEBUG] [Thread-19825] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:29:35.475 [DEBUG] [Thread-19825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:29:35.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:29:35.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:29:35.477 [DEBUG] [Thread-19825] [transport.py] [_log()] userauth is OK
2025-11-12T17:29:35.478 [DEBUG] [Thread-19825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:29:35.478 [DEBUG] [Thread-19825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:29:35.478 [DEBUG] [Thread-19825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:29:35.478 [DEBUG] [Thread-19825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:29:35.495 [INFO] [Thread-19825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:29:35.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:29:36.139 [DEBUG] [Thread-19825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:29:36.139 [DEBUG] [Thread-19825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:29:36.140 [DEBUG] [Thread-19825] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:29:36.180 [DEBUG] [Thread-19825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:29:36.180 [DEBUG] [Thread-19825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:29:36.184 [DEBUG] [Thread-19825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:29:36.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:29:36.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:29:36.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:29:36.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:29:36.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:29:36.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:29:36.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:29:36.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:29:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:29:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.645225 -999.00  +25.50  20.61     14   -3.30 1 1 1 1 1   887    0 29.23 42.50 ----- 32.9 20.6 263.0 39.6 27.1 -25.0 27.1 -23.0 26.9 -23.9 27.1 -24.5
2025-11-12T17:29:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:29:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:29:36.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.645225
2025-11-12T17:29:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:29:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:29:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:29:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:29:36.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:29:36.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:29:16', tmtdew=35.15, humidity=9.0, cloud=0.0, wind=30.72, temperature=25.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:29:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:29:36.211 [DEBUG] [Thread-19825] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:29:36.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:29:36.307 [DEBUG] [Thread-19828] [transport.py] [_log()] starting thread (client mode): 0x173ebdc0
2025-11-12T17:29:36.307 [DEBUG] [Thread-19828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:29:36.322 [DEBUG] [Thread-19828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:29:36.322 [INFO] [Thread-19828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:29:36.329 [DEBUG] [Thread-19828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:29:36.329 [DEBUG] [Thread-19828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:29:36.329 [DEBUG] [Thread-19828] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] client lang: <none>
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] server lang: <none>
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] kex follows: False
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] Compression: none
2025-11-12T17:29:36.330 [DEBUG] [Thread-19828] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:29:36.387 [DEBUG] [Thread-19828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:29:36.388 [DEBUG] [Thread-19828] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:29:36.388 [DEBUG] [Thread-19828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:29:36.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:29:36.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:29:36.444 [DEBUG] [Thread-19828] [transport.py] [_log()] userauth is OK
2025-11-12T17:29:36.444 [DEBUG] [Thread-19828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:29:36.444 [DEBUG] [Thread-19828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:29:36.444 [DEBUG] [Thread-19828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:29:36.445 [DEBUG] [Thread-19828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:29:36.463 [INFO] [Thread-19828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:29:36.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:29:36.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:29:37.285 [DEBUG] [Thread-19828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:29:37.285 [DEBUG] [Thread-19828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:29:37.334 [DEBUG] [Thread-19828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:29:37.334 [DEBUG] [Thread-19828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:29:37.343 [DEBUG] [Thread-19828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:29:37.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:29:37.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-11-12T17:29:37.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-11-12T17:29:37.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:29:37.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:29:37.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:29:37.380 [DEBUG] [Thread-19828] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:29:39.142 [DEBUG] [Thread-19830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:29:42.970 [DEBUG] [Thread-19831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:29:53.735 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:29:53.736 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:29:54.193 [DEBUG] [Thread-19832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:30:07.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:30:07.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:30:07.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:30:08.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 29, 48), 35.07, 8.98, 0.0, 32.64, 25.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:30:08.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:29:48
2025-11-12T17:30:08.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:30:08.310 [DEBUG] [Thread-19833] [transport.py] [_log()] starting thread (client mode): 0x149abeb0
2025-11-12T17:30:08.310 [DEBUG] [Thread-19833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:30:08.330 [DEBUG] [Thread-19833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:30:08.331 [INFO] [Thread-19833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] client lang: <none>
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] server lang: <none>
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] kex follows: False
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] Compression: none
2025-11-12T17:30:08.334 [DEBUG] [Thread-19833] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:30:08.349 [DEBUG] [Thread-19833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:30:08.349 [DEBUG] [Thread-19833] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:30:08.349 [DEBUG] [Thread-19833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:30:08.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:30:08.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:30:08.350 [DEBUG] [Thread-19833] [transport.py] [_log()] userauth is OK
2025-11-12T17:30:08.350 [DEBUG] [Thread-19833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:30:08.350 [DEBUG] [Thread-19833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:30:08.350 [DEBUG] [Thread-19833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:30:08.350 [DEBUG] [Thread-19833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:30:08.369 [INFO] [Thread-19833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:30:08.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:30:09.231 [DEBUG] [Thread-19835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:30:09.610 [DEBUG] [Thread-19833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:30:09.611 [DEBUG] [Thread-19833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:30:09.611 [DEBUG] [Thread-19833] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:30:09.652 [DEBUG] [Thread-19833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:30:09.652 [DEBUG] [Thread-19833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:30:09.655 [DEBUG] [Thread-19833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:30:09.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:30:09.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:30:09.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:30:09.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:30:09.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:30:09.682 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:30:09.682 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:30:09.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:30:09.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:30:09.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.645572 -999.00  +25.30  35.33     14   -3.40 1 1 2 1 1   887    0 29.52 35.93 ----- 31.4 35.3 285.6 45.9 27.0 -25.2 27.0 -23.5 26.7 -23.7 27.1 -24.4
2025-11-12T17:30:09.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:30:09.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:30:09.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.645572
2025-11-12T17:30:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:30:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:30:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:30:09.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:30:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:30:09.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:29:48', tmtdew=35.07, humidity=8.98, cloud=0.0, wind=32.64, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:29:37.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:30:09.685 [DEBUG] [Thread-19833] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:30:09.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:30:09.783 [DEBUG] [Thread-19837] [transport.py] [_log()] starting thread (client mode): 0x149aa080
2025-11-12T17:30:09.783 [DEBUG] [Thread-19837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:30:09.798 [DEBUG] [Thread-19837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:30:09.799 [INFO] [Thread-19837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:30:09.807 [DEBUG] [Thread-19837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:30:09.807 [DEBUG] [Thread-19837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:30:09.807 [DEBUG] [Thread-19837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:30:09.807 [DEBUG] [Thread-19837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:30:09.807 [DEBUG] [Thread-19837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:30:09.807 [DEBUG] [Thread-19837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] client lang: <none>
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] server lang: <none>
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] kex follows: False
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] Compression: none
2025-11-12T17:30:09.808 [DEBUG] [Thread-19837] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:30:09.869 [DEBUG] [Thread-19837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:30:09.869 [DEBUG] [Thread-19837] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:30:09.870 [DEBUG] [Thread-19837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:30:09.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:30:09.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:30:09.929 [DEBUG] [Thread-19837] [transport.py] [_log()] userauth is OK
2025-11-12T17:30:09.929 [DEBUG] [Thread-19837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:30:09.930 [DEBUG] [Thread-19837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:30:09.930 [DEBUG] [Thread-19837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:30:09.930 [DEBUG] [Thread-19837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:30:09.952 [INFO] [Thread-19837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:30:09.953 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:30:09.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:30:10.764 [DEBUG] [Thread-19837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:30:10.764 [DEBUG] [Thread-19837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:30:10.811 [DEBUG] [Thread-19837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:30:10.812 [DEBUG] [Thread-19837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:30:10.821 [DEBUG] [Thread-19837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:30:10.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:30:10.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-11-12T17:30:10.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-11-12T17:30:10.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:30:10.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:30:10.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:30:10.858 [DEBUG] [Thread-19837] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:30:24.271 [DEBUG] [Thread-19839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:30:39.323 [DEBUG] [Thread-19840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:30:40.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:30:40.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:30:40.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-11-12T17:30:41.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 30, 20), 35.04, 9.02, 0.0, 35.11, 25.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:30:41.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:30:20
2025-11-12T17:30:41.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:30:41.798 [DEBUG] [Thread-19841] [transport.py] [_log()] starting thread (client mode): 0x11f11270
2025-11-12T17:30:41.798 [DEBUG] [Thread-19841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:30:41.819 [DEBUG] [Thread-19841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:30:41.819 [INFO] [Thread-19841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] client lang: <none>
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] server lang: <none>
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] kex follows: False
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:30:41.822 [DEBUG] [Thread-19841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:30:41.823 [DEBUG] [Thread-19841] [transport.py] [_log()] Compression: none
2025-11-12T17:30:41.823 [DEBUG] [Thread-19841] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:30:41.838 [DEBUG] [Thread-19841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:30:41.838 [DEBUG] [Thread-19841] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:30:41.838 [DEBUG] [Thread-19841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:30:41.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:30:41.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:30:41.839 [DEBUG] [Thread-19841] [transport.py] [_log()] userauth is OK
2025-11-12T17:30:41.839 [DEBUG] [Thread-19841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:30:41.839 [DEBUG] [Thread-19841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:30:41.839 [DEBUG] [Thread-19841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:30:41.839 [DEBUG] [Thread-19841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:30:41.869 [INFO] [Thread-19841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:30:41.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:30:42.502 [DEBUG] [Thread-19841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:30:42.502 [DEBUG] [Thread-19841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:30:42.502 [DEBUG] [Thread-19841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:30:42.543 [DEBUG] [Thread-19841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:30:42.543 [DEBUG] [Thread-19841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:30:42.545 [DEBUG] [Thread-19841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:30:42.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:30:42.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:30:42.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:30:42.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:30:42.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:30:42.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:30:42.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:30:42.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.645919 -999.00  +25.30  35.36     14   -3.40 1 1 2 1 1   887    0 29.47 34.66 ----- 35.8 35.4 272.2 42.0 26.9 -25.1 26.9 -23.4 26.6 -24.0 26.9 -24.0
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.645919
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:30:42.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:30:20', tmtdew=35.04, humidity=9.02, cloud=0.0, wind=35.11, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:30:07.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:30:42.568 [DEBUG] [Thread-19841] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:30:42.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:30:42.653 [DEBUG] [Thread-19844] [transport.py] [_log()] starting thread (client mode): 0x11f12890
2025-11-12T17:30:42.653 [DEBUG] [Thread-19844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:30:42.669 [DEBUG] [Thread-19844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:30:42.669 [INFO] [Thread-19844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:30:42.676 [DEBUG] [Thread-19844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:30:42.676 [DEBUG] [Thread-19844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:30:42.676 [DEBUG] [Thread-19844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:30:42.676 [DEBUG] [Thread-19844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:30:42.676 [DEBUG] [Thread-19844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:30:42.676 [DEBUG] [Thread-19844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:30:42.676 [DEBUG] [Thread-19844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] client lang: <none>
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] server lang: <none>
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] kex follows: False
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] Compression: none
2025-11-12T17:30:42.677 [DEBUG] [Thread-19844] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:30:42.734 [DEBUG] [Thread-19844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:30:42.735 [DEBUG] [Thread-19844] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:30:42.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:30:42.735 [DEBUG] [Thread-19844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:30:42.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:30:42.791 [DEBUG] [Thread-19844] [transport.py] [_log()] userauth is OK
2025-11-12T17:30:42.791 [DEBUG] [Thread-19844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:30:42.791 [DEBUG] [Thread-19844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:30:42.791 [DEBUG] [Thread-19844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:30:42.791 [DEBUG] [Thread-19844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:30:42.805 [INFO] [Thread-19844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:30:42.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:30:42.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:30:43.008 [DEBUG] [Thread-19846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:30:43.623 [DEBUG] [Thread-19844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:30:43.623 [DEBUG] [Thread-19844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:30:43.671 [DEBUG] [Thread-19844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:30:43.671 [DEBUG] [Thread-19844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:30:43.679 [DEBUG] [Thread-19844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:30:43.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:30:43.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-11-12T17:30:43.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-11-12T17:30:43.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:30:43.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:30:43.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:30:43.712 [DEBUG] [Thread-19844] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:30:53.877 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:30:53.877 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:30:54.354 [DEBUG] [Thread-19847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:31:09.396 [DEBUG] [Thread-19848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:31:13.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:31:13.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:31:13.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-11-12T17:31:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 30, 52), 35.07, 8.98, 0.0, 36.05, 25.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:31:14.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:30:52
2025-11-12T17:31:14.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:31:14.605 [DEBUG] [Thread-19849] [transport.py] [_log()] starting thread (client mode): 0x11f12380
2025-11-12T17:31:14.605 [DEBUG] [Thread-19849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:31:14.625 [DEBUG] [Thread-19849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:31:14.626 [INFO] [Thread-19849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:31:14.628 [DEBUG] [Thread-19849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] client lang: <none>
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] server lang: <none>
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] kex follows: False
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] Compression: none
2025-11-12T17:31:14.629 [DEBUG] [Thread-19849] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:31:14.645 [DEBUG] [Thread-19849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:31:14.646 [DEBUG] [Thread-19849] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:31:14.646 [DEBUG] [Thread-19849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:31:14.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:31:14.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:31:14.648 [DEBUG] [Thread-19849] [transport.py] [_log()] userauth is OK
2025-11-12T17:31:14.648 [DEBUG] [Thread-19849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:31:14.648 [DEBUG] [Thread-19849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:31:14.649 [DEBUG] [Thread-19849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:31:14.649 [DEBUG] [Thread-19849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:31:14.673 [INFO] [Thread-19849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:31:14.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:31:15.276 [DEBUG] [Thread-19849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:31:15.276 [DEBUG] [Thread-19849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:31:15.276 [DEBUG] [Thread-19849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:31:15.317 [DEBUG] [Thread-19849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:31:15.317 [DEBUG] [Thread-19849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:31:15.321 [DEBUG] [Thread-19849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:31:15.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:31:15.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:31:15.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:31:15.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:31:15.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:31:15.344 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:31:15.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:31:15.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:31:15.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:31:15.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.646267 -999.00  +25.30  26.86     14   -3.30 1 2 1 1 1   887    0 29.25 29.49 ----- 31.5 26.9 279.4 43.1 26.9 -25.3 26.9 -22.8 26.6 -22.8 26.9 -23.9
2025-11-12T17:31:15.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:31:15.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:31:15.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.646267
2025-11-12T17:31:15.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:31:15.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:31:15.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:31:15.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:31:15.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:31:15.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:30:52', tmtdew=35.07, humidity=8.98, cloud=0.0, wind=36.05, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:30:37.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:31:15.347 [DEBUG] [Thread-19849] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:31:15.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:31:15.444 [DEBUG] [Thread-19852] [transport.py] [_log()] starting thread (client mode): 0x149a8b80
2025-11-12T17:31:15.444 [DEBUG] [Thread-19852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:31:15.459 [DEBUG] [Thread-19852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:31:15.459 [INFO] [Thread-19852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] client lang: <none>
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] server lang: <none>
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] kex follows: False
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:31:15.467 [DEBUG] [Thread-19852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:31:15.468 [DEBUG] [Thread-19852] [transport.py] [_log()] Compression: none
2025-11-12T17:31:15.468 [DEBUG] [Thread-19852] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:31:15.523 [DEBUG] [Thread-19852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:31:15.524 [DEBUG] [Thread-19852] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:31:15.524 [DEBUG] [Thread-19852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:31:15.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:31:15.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:31:15.580 [DEBUG] [Thread-19852] [transport.py] [_log()] userauth is OK
2025-11-12T17:31:15.580 [DEBUG] [Thread-19852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:31:15.581 [DEBUG] [Thread-19852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:31:15.581 [DEBUG] [Thread-19852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:31:15.581 [DEBUG] [Thread-19852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:31:15.599 [INFO] [Thread-19852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:31:15.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:31:15.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:31:16.429 [DEBUG] [Thread-19852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:31:16.429 [DEBUG] [Thread-19852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:31:16.477 [DEBUG] [Thread-19852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:31:16.477 [DEBUG] [Thread-19852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:31:16.486 [DEBUG] [Thread-19852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:31:16.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:31:16.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-11-12T17:31:16.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-11-12T17:31:16.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:31:16.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:31:16.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:31:16.523 [DEBUG] [Thread-19852] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:31:24.433 [DEBUG] [Thread-19854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:31:39.486 [DEBUG] [Thread-19855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:31:43.042 [DEBUG] [Thread-19856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:31:46.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:31:46.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:31:46.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-11-12T17:31:47.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 31, 24), 34.99, 9.03, 0.0, 33.05, 25.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:31:47.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:31:24
2025-11-12T17:31:47.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:31:47.446 [DEBUG] [Thread-19857] [transport.py] [_log()] starting thread (client mode): 0x149a93c0
2025-11-12T17:31:47.446 [DEBUG] [Thread-19857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:31:47.466 [DEBUG] [Thread-19857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:31:47.466 [INFO] [Thread-19857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] client lang: <none>
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] server lang: <none>
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] kex follows: False
2025-11-12T17:31:47.469 [DEBUG] [Thread-19857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:31:47.470 [DEBUG] [Thread-19857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:31:47.470 [DEBUG] [Thread-19857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:31:47.470 [DEBUG] [Thread-19857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:31:47.470 [DEBUG] [Thread-19857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:31:47.470 [DEBUG] [Thread-19857] [transport.py] [_log()] Compression: none
2025-11-12T17:31:47.470 [DEBUG] [Thread-19857] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:31:47.478 [DEBUG] [Thread-19857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:31:47.478 [DEBUG] [Thread-19857] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:31:47.478 [DEBUG] [Thread-19857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:31:47.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:31:47.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:31:47.480 [DEBUG] [Thread-19857] [transport.py] [_log()] userauth is OK
2025-11-12T17:31:47.480 [DEBUG] [Thread-19857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:31:47.480 [DEBUG] [Thread-19857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:31:47.480 [DEBUG] [Thread-19857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:31:47.480 [DEBUG] [Thread-19857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:31:47.498 [INFO] [Thread-19857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:31:47.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:31:48.137 [DEBUG] [Thread-19857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:31:48.137 [DEBUG] [Thread-19857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:31:48.138 [DEBUG] [Thread-19857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:31:48.179 [DEBUG] [Thread-19857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:31:48.179 [DEBUG] [Thread-19857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:31:48.182 [DEBUG] [Thread-19857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:31:48.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:31:48.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:31:48.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:31:48.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:31:48.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:31:48.208 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:31:48.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:31:48.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:31:48.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:31:48.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.646961 -999.00  +25.40  24.75     14   -3.30 1 1 1 1 1   887    0 29.21 23.70 ----- 17.5 24.8 275.3 36.4 26.9 -25.2 26.9 -23.0 26.7 -23.6 27.0 -24.0
2025-11-12T17:31:48.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:31:48.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:31:48.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.646961
2025-11-12T17:31:48.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:31:48.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:31:48.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:31:48.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:31:48.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:31:48.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:31:24', tmtdew=34.99, humidity=9.03, cloud=0.0, wind=33.05, temperature=25.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:31:37.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:31:48.211 [DEBUG] [Thread-19857] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:31:48.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:31:48.306 [DEBUG] [Thread-19860] [transport.py] [_log()] starting thread (client mode): 0x149a94b0
2025-11-12T17:31:48.306 [DEBUG] [Thread-19860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:31:48.322 [DEBUG] [Thread-19860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:31:48.322 [INFO] [Thread-19860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:31:48.329 [DEBUG] [Thread-19860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:31:48.329 [DEBUG] [Thread-19860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:31:48.329 [DEBUG] [Thread-19860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:31:48.329 [DEBUG] [Thread-19860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:31:48.329 [DEBUG] [Thread-19860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:31:48.329 [DEBUG] [Thread-19860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] client lang: <none>
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] server lang: <none>
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] kex follows: False
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] Compression: none
2025-11-12T17:31:48.330 [DEBUG] [Thread-19860] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:31:48.388 [DEBUG] [Thread-19860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:31:48.388 [DEBUG] [Thread-19860] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:31:48.389 [DEBUG] [Thread-19860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:31:48.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:31:48.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:31:48.444 [DEBUG] [Thread-19860] [transport.py] [_log()] userauth is OK
2025-11-12T17:31:48.445 [DEBUG] [Thread-19860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:31:48.445 [DEBUG] [Thread-19860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:31:48.445 [DEBUG] [Thread-19860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:31:48.445 [DEBUG] [Thread-19860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:31:48.464 [INFO] [Thread-19860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:31:48.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:31:48.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:31:49.278 [DEBUG] [Thread-19860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:31:49.278 [DEBUG] [Thread-19860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:31:49.327 [DEBUG] [Thread-19860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:31:49.327 [DEBUG] [Thread-19860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:31:49.336 [DEBUG] [Thread-19860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:31:49.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:31:49.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-11-12T17:31:49.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-11-12T17:31:49.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:31:49.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:31:49.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:31:49.370 [DEBUG] [Thread-19860] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:31:54.018 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:31:54.019 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:31:54.527 [DEBUG] [Thread-19862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:32:09.584 [DEBUG] [Thread-19863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:32:19.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:32:19.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:32:19.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-11-12T17:32:20.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 31, 56), 35.05, 9.03, 0.0, 34.67, 25.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:32:20.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:31:56
2025-11-12T17:32:20.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:32:20.303 [DEBUG] [Thread-19864] [transport.py] [_log()] starting thread (client mode): 0x11f111e0
2025-11-12T17:32:20.303 [DEBUG] [Thread-19864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:32:20.323 [DEBUG] [Thread-19864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:32:20.323 [INFO] [Thread-19864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:32:20.326 [DEBUG] [Thread-19864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:32:20.326 [DEBUG] [Thread-19864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] client lang: <none>
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] server lang: <none>
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] kex follows: False
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:32:20.327 [DEBUG] [Thread-19864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:32:20.328 [DEBUG] [Thread-19864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:32:20.328 [DEBUG] [Thread-19864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:32:20.328 [DEBUG] [Thread-19864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:32:20.328 [DEBUG] [Thread-19864] [transport.py] [_log()] Compression: none
2025-11-12T17:32:20.328 [DEBUG] [Thread-19864] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:32:20.350 [DEBUG] [Thread-19864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:32:20.351 [DEBUG] [Thread-19864] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:32:20.351 [DEBUG] [Thread-19864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:32:20.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:32:20.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:32:20.353 [DEBUG] [Thread-19864] [transport.py] [_log()] userauth is OK
2025-11-12T17:32:20.353 [DEBUG] [Thread-19864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:32:20.354 [DEBUG] [Thread-19864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:32:20.354 [DEBUG] [Thread-19864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:32:20.354 [DEBUG] [Thread-19864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:32:20.377 [INFO] [Thread-19864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:32:20.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:32:21.013 [DEBUG] [Thread-19864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:32:21.014 [DEBUG] [Thread-19864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:32:21.014 [DEBUG] [Thread-19864] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:32:21.054 [DEBUG] [Thread-19864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:32:21.055 [DEBUG] [Thread-19864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:32:21.058 [DEBUG] [Thread-19864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:32:21.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:32:21.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:32:21.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:32:21.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:32:21.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:32:21.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:32:21.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:32:21.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:32:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:32:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.647309 -999.00  +25.40  22.69     14   -3.40 1 1 1 1 1   887    0 29.24 18.11 ----- 25.3 22.7 272.5 32.0 26.9 -24.6 26.9 -23.0 26.7 -23.2 26.9 -24.1
2025-11-12T17:32:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:32:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:32:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.647309
2025-11-12T17:32:21.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:32:21.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:32:21.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:32:21.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:32:21.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:32:21.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:31:56', tmtdew=35.05, humidity=9.03, cloud=0.0, wind=34.67, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:32:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:32:21.083 [DEBUG] [Thread-19864] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:32:21.166 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:32:21.179 [DEBUG] [Thread-19867] [transport.py] [_log()] starting thread (client mode): 0x149aac80
2025-11-12T17:32:21.179 [DEBUG] [Thread-19867] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:32:21.200 [DEBUG] [Thread-19867] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:32:21.200 [INFO] [Thread-19867] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] client lang: <none>
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] server lang: <none>
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] kex follows: False
2025-11-12T17:32:21.208 [DEBUG] [Thread-19867] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:32:21.209 [DEBUG] [Thread-19867] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:32:21.209 [DEBUG] [Thread-19867] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:32:21.209 [DEBUG] [Thread-19867] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:32:21.209 [DEBUG] [Thread-19867] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:32:21.209 [DEBUG] [Thread-19867] [transport.py] [_log()] Compression: none
2025-11-12T17:32:21.209 [DEBUG] [Thread-19867] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:32:21.268 [DEBUG] [Thread-19867] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:32:21.269 [DEBUG] [Thread-19867] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:32:21.270 [DEBUG] [Thread-19867] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:32:21.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:32:21.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:32:21.324 [DEBUG] [Thread-19867] [transport.py] [_log()] userauth is OK
2025-11-12T17:32:21.324 [DEBUG] [Thread-19867] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:32:21.325 [DEBUG] [Thread-19867] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:32:21.325 [DEBUG] [Thread-19867] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:32:21.325 [DEBUG] [Thread-19867] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:32:21.344 [INFO] [Thread-19867] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:32:21.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:32:21.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:32:22.165 [DEBUG] [Thread-19867] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:32:22.165 [DEBUG] [Thread-19867] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:32:22.213 [DEBUG] [Thread-19867] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:32:22.213 [DEBUG] [Thread-19867] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:32:22.222 [DEBUG] [Thread-19867] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:32:22.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:32:22.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:32:22.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-11-12T17:32:22.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:32:22.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:32:22.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:32:22.258 [DEBUG] [Thread-19867] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:32:24.623 [DEBUG] [Thread-19869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:32:39.672 [DEBUG] [Thread-19870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:32:43.083 [DEBUG] [Thread-19871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:32:52.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:32:52.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:32:52.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-11-12T17:32:52.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 32, 28), 35.04, 9.03, 0.0, 34.85, 25.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:32:52.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:32:28
2025-11-12T17:32:53.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:32:53.179 [DEBUG] [Thread-19872] [transport.py] [_log()] starting thread (client mode): 0x11f135e0
2025-11-12T17:32:53.179 [DEBUG] [Thread-19872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:32:53.201 [DEBUG] [Thread-19872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:32:53.201 [INFO] [Thread-19872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:32:53.203 [DEBUG] [Thread-19872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] client lang: <none>
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] server lang: <none>
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] kex follows: False
2025-11-12T17:32:53.204 [DEBUG] [Thread-19872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:32:53.205 [DEBUG] [Thread-19872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:32:53.205 [DEBUG] [Thread-19872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:32:53.205 [DEBUG] [Thread-19872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:32:53.205 [DEBUG] [Thread-19872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:32:53.205 [DEBUG] [Thread-19872] [transport.py] [_log()] Compression: none
2025-11-12T17:32:53.205 [DEBUG] [Thread-19872] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:32:53.223 [DEBUG] [Thread-19872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:32:53.224 [DEBUG] [Thread-19872] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:32:53.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:32:53.225 [DEBUG] [Thread-19872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:32:53.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:32:53.227 [DEBUG] [Thread-19872] [transport.py] [_log()] userauth is OK
2025-11-12T17:32:53.227 [DEBUG] [Thread-19872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:32:53.228 [DEBUG] [Thread-19872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:32:53.228 [DEBUG] [Thread-19872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:32:53.228 [DEBUG] [Thread-19872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:32:53.251 [INFO] [Thread-19872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:32:53.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:32:53.895 [DEBUG] [Thread-19872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:32:53.895 [DEBUG] [Thread-19872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:32:53.895 [DEBUG] [Thread-19872] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:32:53.935 [DEBUG] [Thread-19872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:32:53.935 [DEBUG] [Thread-19872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:32:53.939 [DEBUG] [Thread-19872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:32:53.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:32:53.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:32:53.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:32:53.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:32:53.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:32:53.959 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:32:53.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:32:53.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:32:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:32:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.647656 -999.00  +25.40  21.27     14   -3.30 1 2 1 1 1   887    0 29.14 13.21 ----- 18.6 21.3 263.2 32.1 26.9 -24.6 26.9 -23.0 26.6 -23.0 26.9 -23.6
2025-11-12T17:32:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:32:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:32:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.647656
2025-11-12T17:32:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:32:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:32:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:32:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:32:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:32:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:32:28', tmtdew=35.04, humidity=9.03, cloud=0.0, wind=34.85, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:32:37.478', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:32:53.961 [DEBUG] [Thread-19872] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:32:54.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:32:54.052 [DEBUG] [Thread-19875] [transport.py] [_log()] starting thread (client mode): 0x11f13280
2025-11-12T17:32:54.052 [DEBUG] [Thread-19875] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:32:54.069 [DEBUG] [Thread-19875] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:32:54.069 [INFO] [Thread-19875] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:32:54.077 [DEBUG] [Thread-19875] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:32:54.077 [DEBUG] [Thread-19875] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:32:54.077 [DEBUG] [Thread-19875] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:32:54.077 [DEBUG] [Thread-19875] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:32:54.077 [DEBUG] [Thread-19875] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:32:54.077 [DEBUG] [Thread-19875] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] client lang: <none>
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] server lang: <none>
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] kex follows: False
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] Compression: none
2025-11-12T17:32:54.078 [DEBUG] [Thread-19875] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:32:54.136 [DEBUG] [Thread-19875] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:32:54.137 [DEBUG] [Thread-19875] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:32:54.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:32:54.138 [DEBUG] [Thread-19875] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:32:54.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:32:54.159 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:32:54.160 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:32:54.202 [DEBUG] [Thread-19875] [transport.py] [_log()] userauth is OK
2025-11-12T17:32:54.203 [DEBUG] [Thread-19875] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:32:54.203 [DEBUG] [Thread-19875] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:32:54.203 [DEBUG] [Thread-19875] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:32:54.203 [DEBUG] [Thread-19875] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:32:54.223 [INFO] [Thread-19875] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:32:54.224 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:32:54.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:32:54.704 [DEBUG] [Thread-19877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:32:55.092 [DEBUG] [Thread-19875] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:32:55.092 [DEBUG] [Thread-19875] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:32:55.139 [DEBUG] [Thread-19875] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:32:55.140 [DEBUG] [Thread-19875] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:32:55.149 [DEBUG] [Thread-19875] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:32:55.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:32:55.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:32:55.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-11-12T17:32:55.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:32:55.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:32:55.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:32:55.185 [DEBUG] [Thread-19875] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:33:09.771 [DEBUG] [Thread-19878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:33:24.807 [DEBUG] [Thread-19879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:33:25.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:33:25.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:33:25.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-11-12T17:33:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 32, 28), 35.04, 9.03, 0.0, 34.85, 25.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:33:25.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:32:28
2025-11-12T17:33:25.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:33:26.088 [DEBUG] [Thread-19880] [transport.py] [_log()] starting thread (client mode): 0x173eb8e0
2025-11-12T17:33:26.089 [DEBUG] [Thread-19880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:33:26.109 [DEBUG] [Thread-19880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:33:26.109 [INFO] [Thread-19880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:33:26.113 [DEBUG] [Thread-19880] [transport.py] [_log()] client lang: <none>
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] server lang: <none>
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] kex follows: False
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] Compression: none
2025-11-12T17:33:26.114 [DEBUG] [Thread-19880] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:33:26.133 [DEBUG] [Thread-19880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:33:26.134 [DEBUG] [Thread-19880] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:33:26.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:33:26.135 [DEBUG] [Thread-19880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:33:26.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:33:26.138 [DEBUG] [Thread-19880] [transport.py] [_log()] userauth is OK
2025-11-12T17:33:26.138 [DEBUG] [Thread-19880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:33:26.138 [DEBUG] [Thread-19880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:33:26.138 [DEBUG] [Thread-19880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:33:26.138 [DEBUG] [Thread-19880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:33:26.158 [INFO] [Thread-19880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:33:26.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:33:26.812 [DEBUG] [Thread-19880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:33:26.812 [DEBUG] [Thread-19880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:33:26.813 [DEBUG] [Thread-19880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:33:26.854 [DEBUG] [Thread-19880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:33:26.854 [DEBUG] [Thread-19880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:33:26.857 [DEBUG] [Thread-19880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:33:26.869 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:33:26.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:33:26.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:33:26.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:33:26.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:33:26.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:33:26.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:33:26.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:33:26.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:33:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.648003 -999.00  +25.50  23.03     14   -3.30 1 2 1 1 1   887    0 28.80 10.27 ----- 25.0 23.0 267.4 28.6 26.9 -24.4 26.9 -22.8 26.7 -22.5 26.9 -24.1
2025-11-12T17:33:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:33:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:33:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.648003
2025-11-12T17:33:26.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:33:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:33:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:33:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:33:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:33:26.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:32:28', tmtdew=35.04, humidity=9.03, cloud=0.0, wind=34.85, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:33:07.459', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:33:26.881 [DEBUG] [Thread-19880] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:33:26.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:33:26.978 [DEBUG] [Thread-19883] [transport.py] [_log()] starting thread (client mode): 0x173e80a0
2025-11-12T17:33:26.978 [DEBUG] [Thread-19883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:33:26.992 [DEBUG] [Thread-19883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:33:26.993 [INFO] [Thread-19883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:33:27.000 [DEBUG] [Thread-19883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] client lang: <none>
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] server lang: <none>
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] kex follows: False
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:33:27.001 [DEBUG] [Thread-19883] [transport.py] [_log()] Compression: none
2025-11-12T17:33:27.002 [DEBUG] [Thread-19883] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:33:27.060 [DEBUG] [Thread-19883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:33:27.060 [DEBUG] [Thread-19883] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:33:27.060 [DEBUG] [Thread-19883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:33:27.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:33:27.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:33:27.116 [DEBUG] [Thread-19883] [transport.py] [_log()] userauth is OK
2025-11-12T17:33:27.116 [DEBUG] [Thread-19883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:33:27.117 [DEBUG] [Thread-19883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:33:27.117 [DEBUG] [Thread-19883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:33:27.117 [DEBUG] [Thread-19883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:33:27.136 [INFO] [Thread-19883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:33:27.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:33:27.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:33:28.009 [DEBUG] [Thread-19883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:33:28.009 [DEBUG] [Thread-19883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:33:28.057 [DEBUG] [Thread-19883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:33:28.057 [DEBUG] [Thread-19883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:33:28.066 [DEBUG] [Thread-19883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:33:28.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:33:28.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:33:28.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-11-12T17:33:28.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:33:28.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:33:28.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:33:28.103 [DEBUG] [Thread-19883] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:33:39.841 [DEBUG] [Thread-19885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:33:43.128 [DEBUG] [Thread-19886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:33:54.301 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:33:54.301 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:33:54.890 [DEBUG] [Thread-19887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:33:58.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:33:58.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:33:58.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-11-12T17:33:58.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 33, 32), 35.0, 9.0, 0.0, 30.44, 25.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:33:58.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:33:32
2025-11-12T17:33:58.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:33:59.054 [DEBUG] [Thread-19888] [transport.py] [_log()] starting thread (client mode): 0x173e9bd0
2025-11-12T17:33:59.055 [DEBUG] [Thread-19888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:33:59.075 [DEBUG] [Thread-19888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:33:59.075 [INFO] [Thread-19888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:33:59.078 [DEBUG] [Thread-19888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:33:59.078 [DEBUG] [Thread-19888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] client lang: <none>
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] server lang: <none>
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] kex follows: False
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] Compression: none
2025-11-12T17:33:59.079 [DEBUG] [Thread-19888] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:33:59.096 [DEBUG] [Thread-19888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:33:59.096 [DEBUG] [Thread-19888] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:33:59.097 [DEBUG] [Thread-19888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:33:59.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:33:59.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:33:59.098 [DEBUG] [Thread-19888] [transport.py] [_log()] userauth is OK
2025-11-12T17:33:59.098 [DEBUG] [Thread-19888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:33:59.098 [DEBUG] [Thread-19888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:33:59.098 [DEBUG] [Thread-19888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:33:59.098 [DEBUG] [Thread-19888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:33:59.109 [INFO] [Thread-19888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:33:59.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:33:59.756 [DEBUG] [Thread-19888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:33:59.756 [DEBUG] [Thread-19888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:33:59.756 [DEBUG] [Thread-19888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:33:59.797 [DEBUG] [Thread-19888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:33:59.797 [DEBUG] [Thread-19888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:33:59.799 [DEBUG] [Thread-19888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:33:59.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:33:59.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:33:59.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:33:59.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:33:59.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:33:59.818 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:33:59.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.648350 -999.00  +25.40  20.17     14   -3.40 1 2 1 1 1   887    0 28.82 9.87 ----- 21.4 20.2 275.0 29.1 26.9 -24.6 26.9 -22.7 26.6 -23.0 27.0 -23.6
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.648350
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:33:59.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:33:32', tmtdew=35.0, humidity=9.0, cloud=0.0, wind=30.44, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:33:37.440', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:33:59.819 [DEBUG] [Thread-19888] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:33:59.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:33:59.905 [DEBUG] [Thread-19891] [transport.py] [_log()] starting thread (client mode): 0x149a8f70
2025-11-12T17:33:59.905 [DEBUG] [Thread-19891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:33:59.925 [DEBUG] [Thread-19891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:33:59.925 [INFO] [Thread-19891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] client lang: <none>
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] server lang: <none>
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] kex follows: False
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] Compression: none
2025-11-12T17:33:59.935 [DEBUG] [Thread-19891] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:33:59.993 [DEBUG] [Thread-19891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:33:59.994 [DEBUG] [Thread-19891] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:33:59.994 [DEBUG] [Thread-19891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:33:59.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:33:59.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:34:00.051 [DEBUG] [Thread-19891] [transport.py] [_log()] userauth is OK
2025-11-12T17:34:00.052 [DEBUG] [Thread-19891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:34:00.052 [DEBUG] [Thread-19891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:34:00.052 [DEBUG] [Thread-19891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:34:00.052 [DEBUG] [Thread-19891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:34:00.072 [INFO] [Thread-19891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:34:00.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:34:00.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:34:00.910 [DEBUG] [Thread-19891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:34:00.910 [DEBUG] [Thread-19891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:34:00.958 [DEBUG] [Thread-19891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:34:00.958 [DEBUG] [Thread-19891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:34:00.967 [DEBUG] [Thread-19891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:34:00.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:34:00.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-11-12T17:34:00.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-11-12T17:34:00.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:34:00.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:34:00.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:34:01.004 [DEBUG] [Thread-19891] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:34:09.924 [DEBUG] [Thread-19893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:34:24.979 [DEBUG] [Thread-19894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:34:31.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:34:31.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:34:31.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-11-12T17:34:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 34, 4), 35.0, 9.0, 0.0, 33.05, 25.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:34:31.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:34:04
2025-11-12T17:34:31.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:34:31.947 [DEBUG] [Thread-19895] [transport.py] [_log()] starting thread (client mode): 0x11f119c0
2025-11-12T17:34:31.947 [DEBUG] [Thread-19895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:34:31.967 [DEBUG] [Thread-19895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:34:31.967 [INFO] [Thread-19895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] client lang: <none>
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] server lang: <none>
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] kex follows: False
2025-11-12T17:34:31.970 [DEBUG] [Thread-19895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:34:31.971 [DEBUG] [Thread-19895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:34:31.971 [DEBUG] [Thread-19895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:34:31.971 [DEBUG] [Thread-19895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:34:31.971 [DEBUG] [Thread-19895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:34:31.971 [DEBUG] [Thread-19895] [transport.py] [_log()] Compression: none
2025-11-12T17:34:31.971 [DEBUG] [Thread-19895] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:34:31.989 [DEBUG] [Thread-19895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:34:31.989 [DEBUG] [Thread-19895] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:34:31.990 [DEBUG] [Thread-19895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:34:31.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:34:31.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:34:32.033 [DEBUG] [Thread-19895] [transport.py] [_log()] userauth is OK
2025-11-12T17:34:32.033 [DEBUG] [Thread-19895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:34:32.033 [DEBUG] [Thread-19895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:34:32.033 [DEBUG] [Thread-19895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:34:32.034 [DEBUG] [Thread-19895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:34:32.048 [INFO] [Thread-19895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:34:32.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:34:32.692 [DEBUG] [Thread-19895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:34:32.692 [DEBUG] [Thread-19895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:34:32.693 [DEBUG] [Thread-19895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:34:32.734 [DEBUG] [Thread-19895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:34:32.734 [DEBUG] [Thread-19895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:34:32.737 [DEBUG] [Thread-19895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:34:32.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:34:32.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:34:32.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:34:32.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:34:32.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:34:32.760 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:34:32.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:34:32.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:34:32.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:34:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.648697 -999.00  +25.40  28.89     14   -3.50 1 1 1 1 1   887    0 29.13 12.90 ----- 26.6 28.9 265.0 35.8 26.9 -24.2 26.9 -23.0 26.6 -23.3 26.9 -24.2
2025-11-12T17:34:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:34:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:34:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.648697
2025-11-12T17:34:32.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:34:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:34:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:34:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:34:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:34:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:34:04', tmtdew=35.0, humidity=9.0, cloud=0.0, wind=33.05, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:34:07.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:34:32.763 [DEBUG] [Thread-19895] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:34:32.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:34:32.860 [DEBUG] [Thread-19898] [transport.py] [_log()] starting thread (client mode): 0x11f13280
2025-11-12T17:34:32.860 [DEBUG] [Thread-19898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:34:32.874 [DEBUG] [Thread-19898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:34:32.875 [INFO] [Thread-19898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] client lang: <none>
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] server lang: <none>
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] kex follows: False
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:34:32.882 [DEBUG] [Thread-19898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:34:32.883 [DEBUG] [Thread-19898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:34:32.883 [DEBUG] [Thread-19898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:34:32.883 [DEBUG] [Thread-19898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:34:32.883 [DEBUG] [Thread-19898] [transport.py] [_log()] Compression: none
2025-11-12T17:34:32.883 [DEBUG] [Thread-19898] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:34:32.939 [DEBUG] [Thread-19898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:34:32.940 [DEBUG] [Thread-19898] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:34:32.940 [DEBUG] [Thread-19898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:34:32.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:34:32.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:34:32.996 [DEBUG] [Thread-19898] [transport.py] [_log()] userauth is OK
2025-11-12T17:34:32.996 [DEBUG] [Thread-19898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:34:32.997 [DEBUG] [Thread-19898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:34:32.997 [DEBUG] [Thread-19898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:34:32.997 [DEBUG] [Thread-19898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:34:33.016 [INFO] [Thread-19898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:34:33.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:34:33.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:34:33.857 [DEBUG] [Thread-19898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:34:33.857 [DEBUG] [Thread-19898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:34:33.906 [DEBUG] [Thread-19898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:34:33.906 [DEBUG] [Thread-19898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:34:33.917 [DEBUG] [Thread-19898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:34:33.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:34:33.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-11-12T17:34: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') -> 00000000
2025-11-12T17:34:33.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:34:33.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:34:33.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:34:33.959 [DEBUG] [Thread-19898] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:34:40.010 [DEBUG] [Thread-19900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:34:43.178 [DEBUG] [Thread-19901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:34:54.443 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:34:54.444 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:34:55.061 [DEBUG] [Thread-19902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:35:03.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:35:03.981 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:35:03.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-11-12T17:35:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 34, 36), 35.07, 8.98, 0.0, 29.93, 25.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:35:04.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:34:36
2025-11-12T17:35:04.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:35:04.883 [DEBUG] [Thread-19903] [transport.py] [_log()] starting thread (client mode): 0x11f113c0
2025-11-12T17:35:04.884 [DEBUG] [Thread-19903] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:35:04.903 [DEBUG] [Thread-19903] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:35:04.903 [INFO] [Thread-19903] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] client lang: <none>
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] server lang: <none>
2025-11-12T17:35:04.907 [DEBUG] [Thread-19903] [transport.py] [_log()] kex follows: False
2025-11-12T17:35:04.908 [DEBUG] [Thread-19903] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:35:04.908 [DEBUG] [Thread-19903] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:35:04.908 [DEBUG] [Thread-19903] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:35:04.908 [DEBUG] [Thread-19903] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:35:04.908 [DEBUG] [Thread-19903] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:35:04.908 [DEBUG] [Thread-19903] [transport.py] [_log()] Compression: none
2025-11-12T17:35:04.908 [DEBUG] [Thread-19903] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:35:04.925 [DEBUG] [Thread-19903] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:35:04.925 [DEBUG] [Thread-19903] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:35:04.926 [DEBUG] [Thread-19903] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:35:04.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:35:04.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:35:04.928 [DEBUG] [Thread-19903] [transport.py] [_log()] userauth is OK
2025-11-12T17:35:04.928 [DEBUG] [Thread-19903] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:35:04.928 [DEBUG] [Thread-19903] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:35:04.929 [DEBUG] [Thread-19903] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:35:04.929 [DEBUG] [Thread-19903] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:35:04.952 [INFO] [Thread-19903] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:35:04.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:35:05.761 [DEBUG] [Thread-19903] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:35:05.762 [DEBUG] [Thread-19903] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:35:05.762 [DEBUG] [Thread-19903] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:35:05.803 [DEBUG] [Thread-19903] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:35:05.803 [DEBUG] [Thread-19903] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:35:05.807 [DEBUG] [Thread-19903] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:35:05.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:35:05.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:35:05.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:35:05.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:35:05.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:35:05.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:35:05.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:35:05.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:35:05.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:35:05.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.649045 -999.00  +25.30  26.90     14   -3.40 1 2 1 1 1   887    0 28.62 14.78 ----- 18.1 26.9 272.4 35.3 26.9 -24.2 26.9 -22.8 26.6 -22.5 26.9 -23.7
2025-11-12T17:35:05.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:35:05.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:35:05.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.649045
2025-11-12T17:35:05.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:35:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:35:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:35:05.859 [DEBUG] [Thread-19903] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:35:05.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:35:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:35:05.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:34:36', tmtdew=35.07, humidity=8.98, cloud=0.0, wind=29.93, temperature=25.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:34:37.488', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:35:05.955 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:35:05.967 [DEBUG] [Thread-19906] [transport.py] [_log()] starting thread (client mode): 0x11f12f50
2025-11-12T17:35:05.968 [DEBUG] [Thread-19906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:35:05.983 [DEBUG] [Thread-19906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:35:05.983 [INFO] [Thread-19906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:35:05.990 [DEBUG] [Thread-19906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:35:05.991 [DEBUG] [Thread-19906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:35:05.991 [DEBUG] [Thread-19906] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:35:05.991 [DEBUG] [Thread-19906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:35:05.991 [DEBUG] [Thread-19906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:35:05.991 [DEBUG] [Thread-19906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:35:05.991 [DEBUG] [Thread-19906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:35:05.991 [DEBUG] [Thread-19906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:35:05.992 [DEBUG] [Thread-19906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:35:05.992 [DEBUG] [Thread-19906] [transport.py] [_log()] client lang: <none>
2025-11-12T17:35:05.992 [DEBUG] [Thread-19906] [transport.py] [_log()] server lang: <none>
2025-11-12T17:35:05.992 [DEBUG] [Thread-19906] [transport.py] [_log()] kex follows: False
2025-11-12T17:35:05.992 [DEBUG] [Thread-19906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:35:05.992 [DEBUG] [Thread-19906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:35:05.992 [DEBUG] [Thread-19906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:35:05.992 [DEBUG] [Thread-19906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:35:05.993 [DEBUG] [Thread-19906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:35:05.993 [DEBUG] [Thread-19906] [transport.py] [_log()] Compression: none
2025-11-12T17:35:05.993 [DEBUG] [Thread-19906] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:35:06.048 [DEBUG] [Thread-19906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:35:06.049 [DEBUG] [Thread-19906] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:35:06.050 [DEBUG] [Thread-19906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:35:06.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:35:06.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:35:06.108 [DEBUG] [Thread-19906] [transport.py] [_log()] userauth is OK
2025-11-12T17:35:06.108 [DEBUG] [Thread-19906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:35:06.108 [DEBUG] [Thread-19906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:35:06.109 [DEBUG] [Thread-19906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:35:06.109 [DEBUG] [Thread-19906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:35:06.128 [INFO] [Thread-19906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:35:06.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:35:06.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:35:06.956 [DEBUG] [Thread-19906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:35:06.956 [DEBUG] [Thread-19906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:35:07.004 [DEBUG] [Thread-19906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:35:07.004 [DEBUG] [Thread-19906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:35:07.013 [DEBUG] [Thread-19906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:35:07.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:35:07.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-11-12T17:35:07.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-11-12T17:35:07.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:35:07.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:35:07.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:35:07.048 [DEBUG] [Thread-19906] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:35:10.149 [DEBUG] [Thread-19908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:35:25.201 [DEBUG] [Thread-19909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:35:37.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:35:37.069 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:35:37.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-11-12T17:35:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 35, 8), 35.13, 8.95, 0.0, 34.16, 25.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:35:37.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:35:08
2025-11-12T17:35:37.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:35:37.992 [DEBUG] [Thread-19910] [transport.py] [_log()] starting thread (client mode): 0x14956140
2025-11-12T17:35:37.992 [DEBUG] [Thread-19910] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:35:38.013 [DEBUG] [Thread-19910] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:35:38.013 [INFO] [Thread-19910] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] client lang: <none>
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] server lang: <none>
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] kex follows: False
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:35:38.016 [DEBUG] [Thread-19910] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:35:38.017 [DEBUG] [Thread-19910] [transport.py] [_log()] Compression: none
2025-11-12T17:35:38.017 [DEBUG] [Thread-19910] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:35:38.025 [DEBUG] [Thread-19910] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:35:38.026 [DEBUG] [Thread-19910] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:35:38.026 [DEBUG] [Thread-19910] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:35:38.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:35:38.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:35:38.028 [DEBUG] [Thread-19910] [transport.py] [_log()] userauth is OK
2025-11-12T17:35:38.028 [DEBUG] [Thread-19910] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:35:38.028 [DEBUG] [Thread-19910] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:35:38.028 [DEBUG] [Thread-19910] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:35:38.028 [DEBUG] [Thread-19910] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:35:38.047 [INFO] [Thread-19910] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:35:38.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:35:38.687 [DEBUG] [Thread-19910] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:35:38.687 [DEBUG] [Thread-19910] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:35:38.687 [DEBUG] [Thread-19910] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:35:38.728 [DEBUG] [Thread-19910] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:35:38.728 [DEBUG] [Thread-19910] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:35:38.732 [DEBUG] [Thread-19910] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:35:38.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:35:38.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:35:38.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:35:38.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:35:38.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:35:38.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:35:38.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:35:38.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:35:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:35:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.649391 -999.00  +25.40  22.51     14   -3.40 1 2 1 1 1   887    0 29.61 15.65 ----- 22.0 22.5 261.0 32.3 26.9 -24.0 26.9 -22.6 26.6 -22.8 26.9 -23.6
2025-11-12T17:35:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:35:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:35:38.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.649391
2025-11-12T17:35:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:35:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:35:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:35:38.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:35:38.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:35:38.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:35:08', tmtdew=35.13, humidity=8.95, cloud=0.0, wind=34.16, temperature=25.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:35:07.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:35:38.762 [DEBUG] [Thread-19910] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:35:38.846 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:35:38.860 [DEBUG] [Thread-19913] [transport.py] [_log()] starting thread (client mode): 0x14957340
2025-11-12T17:35:38.860 [DEBUG] [Thread-19913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:35:38.875 [DEBUG] [Thread-19913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:35:38.875 [INFO] [Thread-19913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:35:38.883 [DEBUG] [Thread-19913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:35:38.883 [DEBUG] [Thread-19913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:35:38.883 [DEBUG] [Thread-19913] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:35:38.883 [DEBUG] [Thread-19913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:35:38.883 [DEBUG] [Thread-19913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:35:38.883 [DEBUG] [Thread-19913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] client lang: <none>
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] server lang: <none>
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] kex follows: False
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:35:38.884 [DEBUG] [Thread-19913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:35:38.885 [DEBUG] [Thread-19913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:35:38.885 [DEBUG] [Thread-19913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:35:38.885 [DEBUG] [Thread-19913] [transport.py] [_log()] Compression: none
2025-11-12T17:35:38.885 [DEBUG] [Thread-19913] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:35:38.940 [DEBUG] [Thread-19913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:35:38.941 [DEBUG] [Thread-19913] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:35:38.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:35:38.942 [DEBUG] [Thread-19913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:35:38.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:35:38.996 [DEBUG] [Thread-19913] [transport.py] [_log()] userauth is OK
2025-11-12T17:35:38.997 [DEBUG] [Thread-19913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:35:38.997 [DEBUG] [Thread-19913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:35:38.997 [DEBUG] [Thread-19913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:35:38.997 [DEBUG] [Thread-19913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:35:39.016 [INFO] [Thread-19913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:35:39.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:35:39.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:35:39.835 [DEBUG] [Thread-19913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:35:39.835 [DEBUG] [Thread-19913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:35:39.882 [DEBUG] [Thread-19913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:35:39.883 [DEBUG] [Thread-19913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:35:39.892 [DEBUG] [Thread-19913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:35:39.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:35:39.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-11-12T17:35:39.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-11-12T17:35:39.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:35:39.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:35:39.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:35:39.928 [DEBUG] [Thread-19913] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:35:40.241 [DEBUG] [Thread-19915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:35:43.224 [DEBUG] [Thread-19916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:35:54.585 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:35:54.586 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:35:55.289 [DEBUG] [Thread-19917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:36:09.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:36:09.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:36:09.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-11-12T17:36:10.325 [DEBUG] [Thread-19918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:36:10.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 35, 40), 35.1, 8.95, 0.0, 34.78, 25.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:36:10.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:35:40
2025-11-12T17:36:10.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:36:10.892 [DEBUG] [Thread-19919] [transport.py] [_log()] starting thread (client mode): 0x14957c40
2025-11-12T17:36:10.892 [DEBUG] [Thread-19919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:36:10.909 [DEBUG] [Thread-19919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:36:10.909 [INFO] [Thread-19919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] client lang: <none>
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] server lang: <none>
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] kex follows: False
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:36:10.911 [DEBUG] [Thread-19919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:36:10.912 [DEBUG] [Thread-19919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:36:10.912 [DEBUG] [Thread-19919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:36:10.912 [DEBUG] [Thread-19919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:36:10.912 [DEBUG] [Thread-19919] [transport.py] [_log()] Compression: none
2025-11-12T17:36:10.912 [DEBUG] [Thread-19919] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:36:10.925 [DEBUG] [Thread-19919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:36:10.925 [DEBUG] [Thread-19919] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:36:10.926 [DEBUG] [Thread-19919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:36:10.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:36:10.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:36:10.927 [DEBUG] [Thread-19919] [transport.py] [_log()] userauth is OK
2025-11-12T17:36:10.928 [DEBUG] [Thread-19919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:36:10.928 [DEBUG] [Thread-19919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:36:10.928 [DEBUG] [Thread-19919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:36:10.928 [DEBUG] [Thread-19919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:36:10.942 [INFO] [Thread-19919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:36:10.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:36:11.606 [DEBUG] [Thread-19919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:36:11.607 [DEBUG] [Thread-19919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:36:11.607 [DEBUG] [Thread-19919] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:36:11.648 [DEBUG] [Thread-19919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:36:11.648 [DEBUG] [Thread-19919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:36:11.651 [DEBUG] [Thread-19919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:36:11.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:36:11.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:36:11.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:36:11.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:36:11.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:36:11.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:36:11.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:36:11.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:36:11.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:36:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.649740 -999.00  +25.40  22.62     14   -3.40 1 2 1 1 1   887    0 29.69 18.95 ----- 19.2 22.6 283.2 34.7 26.9 -24.4 26.9 -22.6 26.6 -22.4 26.9 -23.3
2025-11-12T17:36:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:36:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:36:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.649740
2025-11-12T17:36:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:36:11.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:36:11.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:36:11.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:36:11.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:36:11.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:35:40', tmtdew=35.1, humidity=8.95, cloud=0.0, wind=34.78, temperature=25.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:35:37.536', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:36:11.676 [DEBUG] [Thread-19919] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:36:11.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:36:11.771 [DEBUG] [Thread-19922] [transport.py] [_log()] starting thread (client mode): 0x149579a0
2025-11-12T17:36:11.772 [DEBUG] [Thread-19922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:36:11.788 [DEBUG] [Thread-19922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:36:11.788 [INFO] [Thread-19922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:36:11.796 [DEBUG] [Thread-19922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] client lang: <none>
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] server lang: <none>
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] kex follows: False
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:36:11.797 [DEBUG] [Thread-19922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:36:11.798 [DEBUG] [Thread-19922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:36:11.798 [DEBUG] [Thread-19922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:36:11.798 [DEBUG] [Thread-19922] [transport.py] [_log()] Compression: none
2025-11-12T17:36:11.798 [DEBUG] [Thread-19922] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:36:11.856 [DEBUG] [Thread-19922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:36:11.857 [DEBUG] [Thread-19922] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:36:11.857 [DEBUG] [Thread-19922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:36:11.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:36:11.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:36:11.916 [DEBUG] [Thread-19922] [transport.py] [_log()] userauth is OK
2025-11-12T17:36:11.917 [DEBUG] [Thread-19922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:36:11.917 [DEBUG] [Thread-19922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:36:11.917 [DEBUG] [Thread-19922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:36:11.917 [DEBUG] [Thread-19922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:36:11.936 [INFO] [Thread-19922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:36:11.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:36:11.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:36:12.771 [DEBUG] [Thread-19922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:36:12.771 [DEBUG] [Thread-19922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:36:12.819 [DEBUG] [Thread-19922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:36:12.819 [DEBUG] [Thread-19922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:36:12.827 [DEBUG] [Thread-19922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:36:12.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:36:12.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-11-12T17:36:12.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-11-12T17:36:12.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:36:12.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:36:12.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:36:12.859 [DEBUG] [Thread-19922] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:36:25.360 [DEBUG] [Thread-19924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:36:40.410 [DEBUG] [Thread-19925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:36:42.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:36:42.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:36:42.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-11-12T17:36:43.253 [DEBUG] [Thread-19926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:36:43.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 36, 12), 35.09, 8.93, 0.0, 34.97, 25.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:36:43.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:36:12
2025-11-12T17:36:43.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:36:43.773 [DEBUG] [Thread-19927] [transport.py] [_log()] starting thread (client mode): 0x149572e0
2025-11-12T17:36:43.773 [DEBUG] [Thread-19927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:36:43.793 [DEBUG] [Thread-19927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:36:43.793 [INFO] [Thread-19927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:36:43.796 [DEBUG] [Thread-19927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] client lang: <none>
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] server lang: <none>
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] kex follows: False
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] Compression: none
2025-11-12T17:36:43.797 [DEBUG] [Thread-19927] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:36:43.806 [DEBUG] [Thread-19927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:36:43.806 [DEBUG] [Thread-19927] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:36:43.806 [DEBUG] [Thread-19927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:36:43.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:36:43.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:36:43.808 [DEBUG] [Thread-19927] [transport.py] [_log()] userauth is OK
2025-11-12T17:36:43.808 [DEBUG] [Thread-19927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:36:43.809 [DEBUG] [Thread-19927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:36:43.809 [DEBUG] [Thread-19927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:36:43.809 [DEBUG] [Thread-19927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:36:43.833 [INFO] [Thread-19927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:36:43.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:36:44.453 [DEBUG] [Thread-19927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:36:44.454 [DEBUG] [Thread-19927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:36:44.454 [DEBUG] [Thread-19927] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:36:44.495 [DEBUG] [Thread-19927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:36:44.495 [DEBUG] [Thread-19927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:36:44.499 [DEBUG] [Thread-19927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:36:44.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:36:44.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:36:44.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:36:44.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:36:44.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:36:44.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:36:44.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.650086 -999.00  +25.40  28.97     14   -3.50 1 2 1 1 1   887    0 28.92 19.17 ----- 26.0 29.0 271.2 35.1 26.9 -24.1 26.9 -22.7 26.6 -22.5 26.9 -23.3
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.650086
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:36:44.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:36:12', tmtdew=35.09, humidity=8.93, cloud=0.0, wind=34.97, temperature=25.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:36:07.430', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:36:44.519 [DEBUG] [Thread-19927] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:36:44.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:36:44.618 [DEBUG] [Thread-19930] [transport.py] [_log()] starting thread (client mode): 0x149546a0
2025-11-12T17:36:44.619 [DEBUG] [Thread-19930] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:36:44.633 [DEBUG] [Thread-19930] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:36:44.633 [INFO] [Thread-19930] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] client lang: <none>
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] server lang: <none>
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] kex follows: False
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] Compression: none
2025-11-12T17:36:44.641 [DEBUG] [Thread-19930] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:36:44.698 [DEBUG] [Thread-19930] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:36:44.699 [DEBUG] [Thread-19930] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:36:44.699 [DEBUG] [Thread-19930] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:36:44.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:36:44.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:36:44.755 [DEBUG] [Thread-19930] [transport.py] [_log()] userauth is OK
2025-11-12T17:36:44.756 [DEBUG] [Thread-19930] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:36:44.756 [DEBUG] [Thread-19930] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:36:44.756 [DEBUG] [Thread-19930] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:36:44.756 [DEBUG] [Thread-19930] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:36:44.773 [INFO] [Thread-19930] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:36:44.773 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:36:44.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:36:45.604 [DEBUG] [Thread-19930] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:36:45.605 [DEBUG] [Thread-19930] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:36:45.653 [DEBUG] [Thread-19930] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:36:45.653 [DEBUG] [Thread-19930] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:36:45.662 [DEBUG] [Thread-19930] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:36:45.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:36:45.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-11-12T17:36:45.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-11-12T17:36:45.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:36:45.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:36:45.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:36:45.694 [DEBUG] [Thread-19930] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:36:54.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:36:54.725 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:36:55.445 [DEBUG] [Thread-19932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:37:10.493 [DEBUG] [Thread-19933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:37:15.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:37:15.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:37:15.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-11-12T17:37:16.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 36, 44), 34.97, 9.02, 0.0, 32.98, 25.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:37:16.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:36:44
2025-11-12T17:37:16.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:37:16.657 [DEBUG] [Thread-19934] [transport.py] [_log()] starting thread (client mode): 0x14954e80
2025-11-12T17:37:16.657 [DEBUG] [Thread-19934] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:37:16.678 [DEBUG] [Thread-19934] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:37:16.678 [INFO] [Thread-19934] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] client lang: <none>
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] server lang: <none>
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] kex follows: False
2025-11-12T17:37:16.682 [DEBUG] [Thread-19934] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:37:16.683 [DEBUG] [Thread-19934] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:37:16.683 [DEBUG] [Thread-19934] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:37:16.683 [DEBUG] [Thread-19934] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:37:16.683 [DEBUG] [Thread-19934] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:37:16.683 [DEBUG] [Thread-19934] [transport.py] [_log()] Compression: none
2025-11-12T17:37:16.683 [DEBUG] [Thread-19934] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:37:16.700 [DEBUG] [Thread-19934] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:37:16.701 [DEBUG] [Thread-19934] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:37:16.701 [DEBUG] [Thread-19934] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:37:16.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:37:16.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:37:16.702 [DEBUG] [Thread-19934] [transport.py] [_log()] userauth is OK
2025-11-12T17:37:16.702 [DEBUG] [Thread-19934] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:37:16.702 [DEBUG] [Thread-19934] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:37:16.702 [DEBUG] [Thread-19934] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:37:16.702 [DEBUG] [Thread-19934] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:37:16.730 [INFO] [Thread-19934] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:37:16.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:37:17.347 [DEBUG] [Thread-19934] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:37:17.347 [DEBUG] [Thread-19934] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:37:17.347 [DEBUG] [Thread-19934] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:37:17.388 [DEBUG] [Thread-19934] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:37:17.388 [DEBUG] [Thread-19934] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:37:17.390 [DEBUG] [Thread-19934] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:37:17.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:37:17.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:37:17.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:37:17.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:37:17.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:37:17.408 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:37:17.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:37:17.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:37:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:37:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.650781 -999.00  +25.40  29.57     14   -3.40 1 2 1 1 1   887    0 29.26 21.04 ----- 26.7 29.6 274.2 34.3 26.8 -24.2 26.8 -22.5 26.6 -23.1 26.9 -23.4
2025-11-12T17:37:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:37:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:37:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.650781
2025-11-12T17:37:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:37:17.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:37:17.408 [DEBUG] [Thread-19934] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:37:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:37:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:37:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:37:17.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:36:44', tmtdew=34.97, humidity=9.02, cloud=0.0, wind=32.98, temperature=25.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:37:07.478', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:37:17.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:37:17.496 [DEBUG] [Thread-19937] [transport.py] [_log()] starting thread (client mode): 0x149579a0
2025-11-12T17:37:17.497 [DEBUG] [Thread-19937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:37:17.512 [DEBUG] [Thread-19937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:37:17.512 [INFO] [Thread-19937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:37:17.519 [DEBUG] [Thread-19937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] client lang: <none>
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] server lang: <none>
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] kex follows: False
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] Compression: none
2025-11-12T17:37:17.520 [DEBUG] [Thread-19937] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:37:17.578 [DEBUG] [Thread-19937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:37:17.579 [DEBUG] [Thread-19937] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:37:17.579 [DEBUG] [Thread-19937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:37:17.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:37:17.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:37:17.635 [DEBUG] [Thread-19937] [transport.py] [_log()] userauth is OK
2025-11-12T17:37:17.635 [DEBUG] [Thread-19937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:37:17.635 [DEBUG] [Thread-19937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:37:17.635 [DEBUG] [Thread-19937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:37:17.636 [DEBUG] [Thread-19937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:37:17.651 [INFO] [Thread-19937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:37:17.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:37:17.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:37:18.490 [DEBUG] [Thread-19937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:37:18.490 [DEBUG] [Thread-19937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:37:18.538 [DEBUG] [Thread-19937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:37:18.538 [DEBUG] [Thread-19937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:37:18.547 [DEBUG] [Thread-19937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:37:18.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:37:18.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:37:18.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-11-12T17:37:18.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:37:18.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:37:18.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:37:18.584 [DEBUG] [Thread-19937] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:37:25.524 [DEBUG] [Thread-19939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:37:40.580 [DEBUG] [Thread-19940 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:37:43.289 [DEBUG] [Thread-19941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:37:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:37:48.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:37:48.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-11-12T17:37:49.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 37, 16), 34.98, 9.0, 0.0, 32.53, 25.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:37:49.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:37:16
2025-11-12T17:37:49.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:37:49.623 [DEBUG] [Thread-19942] [transport.py] [_log()] starting thread (client mode): 0x149569b0
2025-11-12T17:37:49.623 [DEBUG] [Thread-19942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:37:49.644 [DEBUG] [Thread-19942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:37:49.644 [INFO] [Thread-19942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] client lang: <none>
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] server lang: <none>
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] kex follows: False
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] Compression: none
2025-11-12T17:37:49.647 [DEBUG] [Thread-19942] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:37:49.662 [DEBUG] [Thread-19942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:37:49.663 [DEBUG] [Thread-19942] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:37:49.663 [DEBUG] [Thread-19942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:37:49.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:37:49.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:37:49.664 [DEBUG] [Thread-19942] [transport.py] [_log()] userauth is OK
2025-11-12T17:37:49.664 [DEBUG] [Thread-19942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:37:49.664 [DEBUG] [Thread-19942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:37:49.664 [DEBUG] [Thread-19942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:37:49.664 [DEBUG] [Thread-19942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:37:49.673 [INFO] [Thread-19942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:37:49.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:37:50.311 [DEBUG] [Thread-19942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:37:50.311 [DEBUG] [Thread-19942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:37:50.312 [DEBUG] [Thread-19942] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:37:50.352 [DEBUG] [Thread-19942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:37:50.352 [DEBUG] [Thread-19942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:37:50.355 [DEBUG] [Thread-19942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:37:50.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:37:50.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:37:50.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:37:50.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:37:50.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:37:50.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:37:50.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:37:50.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:37:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:37:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.651128 -999.00  +25.40  24.83     14   -3.50 1 2 1 1 1   887    0 28.76 24.23 ----- 31.6 24.8 285.8 38.7 26.9 -24.3 26.8 -22.7 26.5 -22.7 26.8 -23.6
2025-11-12T17:37:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:37:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:37:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.651128
2025-11-12T17:37:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:37:50.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:37:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:37:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:37:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:37:50.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:37:16', tmtdew=34.98, humidity=9.0, cloud=0.0, wind=32.53, temperature=25.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:37:37.459', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:37:50.375 [DEBUG] [Thread-19942] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:37:50.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:37:50.473 [DEBUG] [Thread-19945] [transport.py] [_log()] starting thread (client mode): 0x14955120
2025-11-12T17:37:50.473 [DEBUG] [Thread-19945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:37:50.488 [DEBUG] [Thread-19945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:37:50.488 [INFO] [Thread-19945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] client lang: <none>
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] server lang: <none>
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] kex follows: False
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] Compression: none
2025-11-12T17:37:50.496 [DEBUG] [Thread-19945] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:37:50.554 [DEBUG] [Thread-19945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:37:50.554 [DEBUG] [Thread-19945] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:37:50.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:37:50.555 [DEBUG] [Thread-19945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:37:50.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:37:50.611 [DEBUG] [Thread-19945] [transport.py] [_log()] userauth is OK
2025-11-12T17:37:50.611 [DEBUG] [Thread-19945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:37:50.611 [DEBUG] [Thread-19945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:37:50.611 [DEBUG] [Thread-19945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:37:50.611 [DEBUG] [Thread-19945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:37:50.627 [INFO] [Thread-19945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:37: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-11-12T17:37:50.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:37:51.411 [DEBUG] [Thread-19945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:37:51.411 [DEBUG] [Thread-19945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:37:51.460 [DEBUG] [Thread-19945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:37:51.460 [DEBUG] [Thread-19945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:37:51.469 [DEBUG] [Thread-19945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:37:51.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:37:51.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:37:51.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:37:51.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:37:51.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:37:51.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:37:51.506 [DEBUG] [Thread-19945] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:37:54.866 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:37:54.867 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:37:55.618 [DEBUG] [Thread-19947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:38:10.675 [DEBUG] [Thread-19948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:38:21.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:38:21.527 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:38:21.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-11-12T17:38:22.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 37, 47), 35.06, 9.02, 0.0, 34.74, 25.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:38:22.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:37:47
2025-11-12T17:38:22.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:38:22.500 [DEBUG] [Thread-19949] [transport.py] [_log()] starting thread (client mode): 0x14955d50
2025-11-12T17:38:22.500 [DEBUG] [Thread-19949] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:38:22.520 [DEBUG] [Thread-19949] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:38:22.520 [INFO] [Thread-19949] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] client lang: <none>
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] server lang: <none>
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] kex follows: False
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] Compression: none
2025-11-12T17:38:22.524 [DEBUG] [Thread-19949] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:38:22.542 [DEBUG] [Thread-19949] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:38:22.542 [DEBUG] [Thread-19949] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:38:22.543 [DEBUG] [Thread-19949] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:38:22.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:38:22.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:38:22.544 [DEBUG] [Thread-19949] [transport.py] [_log()] userauth is OK
2025-11-12T17:38:22.545 [DEBUG] [Thread-19949] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:38:22.545 [DEBUG] [Thread-19949] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:38:22.545 [DEBUG] [Thread-19949] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:38:22.545 [DEBUG] [Thread-19949] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:38:22.568 [INFO] [Thread-19949] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:38:22.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:38:23.177 [DEBUG] [Thread-19949] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:38:23.178 [DEBUG] [Thread-19949] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:38:23.178 [DEBUG] [Thread-19949] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:38:23.218 [DEBUG] [Thread-19949] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:38:23.219 [DEBUG] [Thread-19949] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:38:23.221 [DEBUG] [Thread-19949] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:38:23.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:38:23.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:38:23.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:38:23.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:38:23.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:38:23.243 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:38:23.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:38:23.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:38:23.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:38:23.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.651475 -999.00  +25.30  32.10     14   -3.60 1 2 2 1 1   887    0 29.41 22.67 ----- 30.9 32.1 281.0 40.6 26.8 -24.2 26.8 -22.8 26.4 -23.0 26.8 -23.7
2025-11-12T17:38:23.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:38:23.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:38:23.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.651475
2025-11-12T17:38:23.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:38:23.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:38:23.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:38:23.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:38:23.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:38:23.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:37:47', tmtdew=35.06, humidity=9.02, cloud=0.0, wind=34.74, temperature=25.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:38:07.440', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:38:23.245 [DEBUG] [Thread-19949] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:38:23.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:38:23.341 [DEBUG] [Thread-19952] [transport.py] [_log()] starting thread (client mode): 0x14956d70
2025-11-12T17:38:23.341 [DEBUG] [Thread-19952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:38:23.356 [DEBUG] [Thread-19952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:38:23.356 [INFO] [Thread-19952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:38:23.364 [DEBUG] [Thread-19952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] client lang: <none>
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] server lang: <none>
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] kex follows: False
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] Compression: none
2025-11-12T17:38:23.365 [DEBUG] [Thread-19952] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:38:23.424 [DEBUG] [Thread-19952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:38:23.425 [DEBUG] [Thread-19952] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:38:23.425 [DEBUG] [Thread-19952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:38:23.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:38:23.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:38:23.482 [DEBUG] [Thread-19952] [transport.py] [_log()] userauth is OK
2025-11-12T17:38:23.483 [DEBUG] [Thread-19952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:38:23.483 [DEBUG] [Thread-19952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:38:23.483 [DEBUG] [Thread-19952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:38:23.483 [DEBUG] [Thread-19952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:38:23.509 [INFO] [Thread-19952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:38:23.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:38:23.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:38:24.346 [DEBUG] [Thread-19952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:38:24.346 [DEBUG] [Thread-19952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:38:24.394 [DEBUG] [Thread-19952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:38:24.394 [DEBUG] [Thread-19952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:38:24.402 [DEBUG] [Thread-19952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:38:24.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:38:24.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-11-12T17:38:24.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-11-12T17:38:24.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:38:24.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:38:24.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:38:24.434 [DEBUG] [Thread-19952] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:38:25.707 [DEBUG] [Thread-19954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:38:40.747 [DEBUG] [Thread-19955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:38:43.328 [DEBUG] [Thread-19956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:38:54.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:38:54.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:38:54.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-11-12T17:38:55.007 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:38:55.008 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:38:55.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 38, 20), 35.09, 8.98, 0.0, 32.38, 25.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:38:55.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:38:20
2025-11-12T17:38:55.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:38:55.386 [DEBUG] [Thread-19957] [transport.py] [_log()] starting thread (client mode): 0x14955ed0
2025-11-12T17:38:55.387 [DEBUG] [Thread-19957] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:38:55.406 [DEBUG] [Thread-19957] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:38:55.406 [INFO] [Thread-19957] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] client lang: <none>
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] server lang: <none>
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] kex follows: False
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] Compression: none
2025-11-12T17:38:55.409 [DEBUG] [Thread-19957] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:38:55.427 [DEBUG] [Thread-19957] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:38:55.428 [DEBUG] [Thread-19957] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:38:55.428 [DEBUG] [Thread-19957] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:38:55.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:38:55.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:38:55.430 [DEBUG] [Thread-19957] [transport.py] [_log()] userauth is OK
2025-11-12T17:38:55.430 [DEBUG] [Thread-19957] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:38:55.430 [DEBUG] [Thread-19957] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:38:55.430 [DEBUG] [Thread-19957] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:38:55.430 [DEBUG] [Thread-19957] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:38:55.466 [INFO] [Thread-19957] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:38:55.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:38:55.782 [DEBUG] [Thread-19959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:38:56.141 [DEBUG] [Thread-19957] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:38:56.141 [DEBUG] [Thread-19957] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:38:56.141 [DEBUG] [Thread-19957] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:38:56.181 [DEBUG] [Thread-19957] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:38:56.182 [DEBUG] [Thread-19957] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:38:56.185 [DEBUG] [Thread-19957] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:38:56.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:38:56.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:38:56.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:38:56.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:38:56.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:38:56.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:38:56.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:38:56.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:38:56.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:38:56.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.651822 -999.00  +25.00  29.64     14   -3.60 1 2 1 1 1   887    0 29.00 22.45 ----- 26.3 29.6 279.0 42.7 26.7 -24.4 26.7 -22.8 26.3 -23.1 26.7 -23.6
2025-11-12T17:38:56.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:38:56.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:38:56.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.651822
2025-11-12T17:38:56.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:38:56.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:38:56.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:38:56.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:38:56.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:38:56.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:38:20', tmtdew=35.09, humidity=8.98, cloud=0.0, wind=32.38, temperature=25.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:38:37.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:38:56.211 [DEBUG] [Thread-19957] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:38:56.296 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:38:56.307 [DEBUG] [Thread-19961] [transport.py] [_log()] starting thread (client mode): 0x14956b90
2025-11-12T17:38:56.308 [DEBUG] [Thread-19961] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:38:56.322 [DEBUG] [Thread-19961] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:38:56.322 [INFO] [Thread-19961] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:38:56.330 [DEBUG] [Thread-19961] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:38:56.330 [DEBUG] [Thread-19961] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:38:56.330 [DEBUG] [Thread-19961] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:38:56.330 [DEBUG] [Thread-19961] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:38:56.330 [DEBUG] [Thread-19961] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] client lang: <none>
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] server lang: <none>
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] kex follows: False
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] Compression: none
2025-11-12T17:38:56.331 [DEBUG] [Thread-19961] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:38:56.388 [DEBUG] [Thread-19961] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:38:56.388 [DEBUG] [Thread-19961] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:38:56.389 [DEBUG] [Thread-19961] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:38:56.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:38:56.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:38:56.444 [DEBUG] [Thread-19961] [transport.py] [_log()] userauth is OK
2025-11-12T17:38:56.444 [DEBUG] [Thread-19961] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:38:56.444 [DEBUG] [Thread-19961] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:38:56.444 [DEBUG] [Thread-19961] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:38:56.444 [DEBUG] [Thread-19961] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:38:56.463 [INFO] [Thread-19961] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:38:56.464 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:38:56.464 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:38:57.311 [DEBUG] [Thread-19961] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:38:57.311 [DEBUG] [Thread-19961] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:38:57.359 [DEBUG] [Thread-19961] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:38:57.360 [DEBUG] [Thread-19961] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:38:57.369 [DEBUG] [Thread-19961] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:38:57.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:38:57.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-11-12T17:38:57.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:38:57.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:38:57.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:38:57.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:38:57.405 [DEBUG] [Thread-19961] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:39:10.812 [DEBUG] [Thread-19963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:39:25.863 [DEBUG] [Thread-19964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:39:27.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:39:27.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:39:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:39:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 39, 24), 34.89, 9.05, 0.0, 30.7, 25.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:39:28.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:39:24
2025-11-12T17:39:28.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:39:28.340 [DEBUG] [Thread-19965] [transport.py] [_log()] starting thread (client mode): 0x11f117b0
2025-11-12T17:39:28.340 [DEBUG] [Thread-19965] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:39:28.361 [DEBUG] [Thread-19965] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:39:28.361 [INFO] [Thread-19965] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:39:28.364 [DEBUG] [Thread-19965] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:39:28.364 [DEBUG] [Thread-19965] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] client lang: <none>
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] server lang: <none>
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] kex follows: False
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] Compression: none
2025-11-12T17:39:28.365 [DEBUG] [Thread-19965] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:39:28.383 [DEBUG] [Thread-19965] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:39:28.383 [DEBUG] [Thread-19965] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:39:28.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:39:28.384 [DEBUG] [Thread-19965] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:39:28.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:39:28.386 [DEBUG] [Thread-19965] [transport.py] [_log()] userauth is OK
2025-11-12T17:39:28.386 [DEBUG] [Thread-19965] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:39:28.386 [DEBUG] [Thread-19965] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:39:28.386 [DEBUG] [Thread-19965] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:39:28.386 [DEBUG] [Thread-19965] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:39:28.401 [INFO] [Thread-19965] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:39:28.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:39:29.023 [DEBUG] [Thread-19965] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:39:29.023 [DEBUG] [Thread-19965] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:39:29.023 [DEBUG] [Thread-19965] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:39:29.064 [DEBUG] [Thread-19965] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:39:29.064 [DEBUG] [Thread-19965] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:39:29.067 [DEBUG] [Thread-19965] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:39:29.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:39:29.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:39:29.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:39:29.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:39:29.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:39:29.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:39:29.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:39:29.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:39:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:39:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.652170 -999.00  +25.00  29.74     14   -3.50 1 1 1 1 1   887    0 29.58 21.37 ----- 33.3 29.7 281.6 40.1 26.6 -24.2 26.7 -22.7 26.3 -23.7 26.6 -23.5
2025-11-12T17:39:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:39:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:39:29.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.652170
2025-11-12T17:39:29.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:39:29.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:39:29.096 [DEBUG] [Thread-19965] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:39:29.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:39:29.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:39:29.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:39:29.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:39:24', tmtdew=34.89, humidity=9.05, cloud=0.0, wind=30.7, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:39:07.488', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:39:29.179 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:39:29.192 [DEBUG] [Thread-19968] [transport.py] [_log()] starting thread (client mode): 0x11f13ee0
2025-11-12T17:39:29.192 [DEBUG] [Thread-19968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:39:29.208 [DEBUG] [Thread-19968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:39:29.208 [INFO] [Thread-19968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:39:29.215 [DEBUG] [Thread-19968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:39:29.215 [DEBUG] [Thread-19968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] client lang: <none>
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] server lang: <none>
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] kex follows: False
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] Compression: none
2025-11-12T17:39:29.216 [DEBUG] [Thread-19968] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:39:29.279 [DEBUG] [Thread-19968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:39:29.280 [DEBUG] [Thread-19968] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:39:29.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:39:29.281 [DEBUG] [Thread-19968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:39:29.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:39:29.336 [DEBUG] [Thread-19968] [transport.py] [_log()] userauth is OK
2025-11-12T17:39:29.336 [DEBUG] [Thread-19968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:39:29.336 [DEBUG] [Thread-19968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:39:29.336 [DEBUG] [Thread-19968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:39:29.337 [DEBUG] [Thread-19968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:39:29.355 [INFO] [Thread-19968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:39:29.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:39:29.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:39:30.212 [DEBUG] [Thread-19968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:39:30.212 [DEBUG] [Thread-19968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:39:30.260 [DEBUG] [Thread-19968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:39:30.261 [DEBUG] [Thread-19968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:39:30.270 [DEBUG] [Thread-19968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:39:30.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:39:30.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-11-12T17:39:30.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-11-12T17:39:30.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:39:30.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:39:30.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:39:30.306 [DEBUG] [Thread-19968] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:39:40.898 [DEBUG] [Thread-19970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:39:43.361 [DEBUG] [Thread-19971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:39:55.148 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:39:55.149 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:39:55.944 [DEBUG] [Thread-19972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:40:00.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:40:00.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:40:00.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-11-12T17:40:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 39, 55), 34.79, 9.08, 0.0, 28.78, 25.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:40:00.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:39:55
2025-11-12T17:40:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:40:01.263 [DEBUG] [Thread-19973] [transport.py] [_log()] starting thread (client mode): 0x149576a0
2025-11-12T17:40:01.263 [DEBUG] [Thread-19973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:40:01.283 [DEBUG] [Thread-19973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:40:01.284 [INFO] [Thread-19973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] client lang: <none>
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] server lang: <none>
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] kex follows: False
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] Compression: none
2025-11-12T17:40:01.287 [DEBUG] [Thread-19973] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:40:01.303 [DEBUG] [Thread-19973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:40:01.304 [DEBUG] [Thread-19973] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:40:01.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:40:01.305 [DEBUG] [Thread-19973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:40:01.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:40:01.307 [DEBUG] [Thread-19973] [transport.py] [_log()] userauth is OK
2025-11-12T17:40:01.307 [DEBUG] [Thread-19973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:40:01.308 [DEBUG] [Thread-19973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:40:01.308 [DEBUG] [Thread-19973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:40:01.308 [DEBUG] [Thread-19973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:40:01.327 [INFO] [Thread-19973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:40:01.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:40:01.919 [DEBUG] [Thread-19973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:40:01.920 [DEBUG] [Thread-19973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:40:01.920 [DEBUG] [Thread-19973] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:40:01.961 [DEBUG] [Thread-19973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:40:01.961 [DEBUG] [Thread-19973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:40:01.963 [DEBUG] [Thread-19973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:40:01.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:40:01.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:40:01.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:40:01.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:40:01.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:40:01.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:40:01.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:40:01.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:40:01.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:40:01.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.652517 -999.00  +24.90  35.32     14   -3.60 1 2 2 1 1   887    0 29.07 20.60 ----- 30.2 35.3 272.4 40.3 26.6 -24.2 26.6 -23.0 26.2 -22.9 26.6 -23.3
2025-11-12T17:40:01.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:40:01.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:40:01.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.652517
2025-11-12T17:40:01.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:40:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:40:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:40:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:40:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:40:01.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:39:55', tmtdew=34.79, humidity=9.08, cloud=0.0, wind=28.78, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:39:37.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:40:01.989 [DEBUG] [Thread-19973] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:40:02.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:40:02.081 [DEBUG] [Thread-19976] [transport.py] [_log()] starting thread (client mode): 0x14957a30
2025-11-12T17:40:02.081 [DEBUG] [Thread-19976] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:40:02.095 [DEBUG] [Thread-19976] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:40:02.096 [INFO] [Thread-19976] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] client lang: <none>
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] server lang: <none>
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] kex follows: False
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:40:02.104 [DEBUG] [Thread-19976] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:40:02.105 [DEBUG] [Thread-19976] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:40:02.105 [DEBUG] [Thread-19976] [transport.py] [_log()] Compression: none
2025-11-12T17:40:02.105 [DEBUG] [Thread-19976] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:40:02.168 [DEBUG] [Thread-19976] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:40:02.168 [DEBUG] [Thread-19976] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:40:02.169 [DEBUG] [Thread-19976] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:40:02.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:40:02.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:40:02.224 [DEBUG] [Thread-19976] [transport.py] [_log()] userauth is OK
2025-11-12T17:40:02.225 [DEBUG] [Thread-19976] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:40:02.225 [DEBUG] [Thread-19976] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:40:02.225 [DEBUG] [Thread-19976] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:40:02.225 [DEBUG] [Thread-19976] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:40:02.244 [INFO] [Thread-19976] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:40:02.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:40:02.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:40:03.070 [DEBUG] [Thread-19976] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:40:03.071 [DEBUG] [Thread-19976] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:40:03.119 [DEBUG] [Thread-19976] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:40:03.119 [DEBUG] [Thread-19976] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:40:03.128 [DEBUG] [Thread-19976] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:40:03.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:40: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')
2025-11-12T17:40:03.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-11-12T17:40:03.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:40:03.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:40:03.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:40:03.163 [DEBUG] [Thread-19976] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:40:10.983 [DEBUG] [Thread-19978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:40:26.034 [DEBUG] [Thread-19979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:40:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:40:33.186 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:40:33.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-11-12T17:40:33.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 40, 27), 34.85, 9.03, 0.0, 31.48, 25.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:40:33.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:40:27
2025-11-12T17:40:33.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:40:34.118 [DEBUG] [Thread-19980] [transport.py] [_log()] starting thread (client mode): 0x173e83d0
2025-11-12T17:40:34.118 [DEBUG] [Thread-19980] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:40:34.138 [DEBUG] [Thread-19980] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:40:34.139 [INFO] [Thread-19980] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:40:34.141 [DEBUG] [Thread-19980] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] client lang: <none>
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] server lang: <none>
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] kex follows: False
2025-11-12T17:40:34.142 [DEBUG] [Thread-19980] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:40:34.143 [DEBUG] [Thread-19980] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:40:34.143 [DEBUG] [Thread-19980] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:40:34.143 [DEBUG] [Thread-19980] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:40:34.143 [DEBUG] [Thread-19980] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:40:34.143 [DEBUG] [Thread-19980] [transport.py] [_log()] Compression: none
2025-11-12T17:40:34.143 [DEBUG] [Thread-19980] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:40:34.162 [DEBUG] [Thread-19980] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:40:34.163 [DEBUG] [Thread-19980] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:40:34.164 [DEBUG] [Thread-19980] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:40:34.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:40:34.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:40:34.166 [DEBUG] [Thread-19980] [transport.py] [_log()] userauth is OK
2025-11-12T17:40:34.166 [DEBUG] [Thread-19980] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:40:34.166 [DEBUG] [Thread-19980] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:40:34.166 [DEBUG] [Thread-19980] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:40:34.166 [DEBUG] [Thread-19980] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:40:34.191 [INFO] [Thread-19980] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:40:34.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:40:34.863 [DEBUG] [Thread-19980] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:40:34.864 [DEBUG] [Thread-19980] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:40:34.864 [DEBUG] [Thread-19980] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:40:34.905 [DEBUG] [Thread-19980] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:40:34.905 [DEBUG] [Thread-19980] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:40:34.908 [DEBUG] [Thread-19980] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:40:34.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:40:34.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:40:34.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:40:34.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:40:34.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:40:34.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:40:34.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:40:34.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:40:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:40:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.652864 -999.00  +25.00  19.11     14   -3.50 1 2 1 1 1   887    0 29.45 21.48 ----- 29.1 19.1 286.4 36.0 26.6 -24.1 26.6 -22.7 26.2 -22.4 26.6 -23.0
2025-11-12T17:40:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:40:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:40:34.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.652864
2025-11-12T17:40:34.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:40:34.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:40:34.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:40:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:40:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:40:34.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:40:27', tmtdew=34.85, humidity=9.03, cloud=0.0, wind=31.48, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:40:07.450', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:40:34.934 [DEBUG] [Thread-19980] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:40:35.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:40:35.030 [DEBUG] [Thread-19983] [transport.py] [_log()] starting thread (client mode): 0x173ea680
2025-11-12T17:40:35.031 [DEBUG] [Thread-19983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:40:35.048 [DEBUG] [Thread-19983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:40:35.048 [INFO] [Thread-19983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] client lang: <none>
2025-11-12T17:40:35.056 [DEBUG] [Thread-19983] [transport.py] [_log()] server lang: <none>
2025-11-12T17:40:35.057 [DEBUG] [Thread-19983] [transport.py] [_log()] kex follows: False
2025-11-12T17:40:35.057 [DEBUG] [Thread-19983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:40:35.057 [DEBUG] [Thread-19983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:40:35.057 [DEBUG] [Thread-19983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:40:35.057 [DEBUG] [Thread-19983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:40:35.057 [DEBUG] [Thread-19983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:40:35.057 [DEBUG] [Thread-19983] [transport.py] [_log()] Compression: none
2025-11-12T17:40:35.057 [DEBUG] [Thread-19983] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:40:35.116 [DEBUG] [Thread-19983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:40:35.117 [DEBUG] [Thread-19983] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:40:35.118 [DEBUG] [Thread-19983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:40:35.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:40:35.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:40:35.176 [DEBUG] [Thread-19983] [transport.py] [_log()] userauth is OK
2025-11-12T17:40:35.177 [DEBUG] [Thread-19983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:40:35.177 [DEBUG] [Thread-19983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:40:35.177 [DEBUG] [Thread-19983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:40:35.177 [DEBUG] [Thread-19983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:40:35.196 [INFO] [Thread-19983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:40:35.196 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:40:35.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:40:36.018 [DEBUG] [Thread-19983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:40:36.018 [DEBUG] [Thread-19983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:40:36.067 [DEBUG] [Thread-19983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:40:36.067 [DEBUG] [Thread-19983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:40:36.076 [DEBUG] [Thread-19983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:40:36.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:40:36.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-11-12T17:40:36.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-11-12T17:40:36.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:40:36.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:40:36.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:40:36.113 [DEBUG] [Thread-19983] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:40:41.071 [DEBUG] [Thread-19985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:40:43.417 [DEBUG] [Thread-19986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:40:55.291 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:40:55.292 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:40:56.129 [DEBUG] [Thread-19987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:41:06.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:41:06.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:41:06.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-11-12T17:41:06.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 40, 59), 34.71, 9.1, 0.0, 31.6, 25.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:41:06.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:40:59
2025-11-12T17:41:06.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:41:07.061 [DEBUG] [Thread-19988] [transport.py] [_log()] starting thread (client mode): 0x11f13dc0
2025-11-12T17:41:07.061 [DEBUG] [Thread-19988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:41:07.081 [DEBUG] [Thread-19988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:41:07.081 [INFO] [Thread-19988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:41:07.082 [DEBUG] [Thread-19988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:41:07.082 [DEBUG] [Thread-19988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:41:07.082 [DEBUG] [Thread-19988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] client lang: <none>
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] server lang: <none>
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] kex follows: False
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] Compression: none
2025-11-12T17:41:07.083 [DEBUG] [Thread-19988] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:41:07.100 [DEBUG] [Thread-19988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:41:07.100 [DEBUG] [Thread-19988] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:41:07.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:41:07.101 [DEBUG] [Thread-19988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:41:07.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:41:07.103 [DEBUG] [Thread-19988] [transport.py] [_log()] userauth is OK
2025-11-12T17:41:07.103 [DEBUG] [Thread-19988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:41:07.104 [DEBUG] [Thread-19988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:41:07.104 [DEBUG] [Thread-19988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:41:07.104 [DEBUG] [Thread-19988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:41:07.127 [INFO] [Thread-19988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:41:07.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:41:07.748 [DEBUG] [Thread-19988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:41:07.748 [DEBUG] [Thread-19988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:41:07.749 [DEBUG] [Thread-19988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:41:07.789 [DEBUG] [Thread-19988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:41:07.790 [DEBUG] [Thread-19988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:41:07.793 [DEBUG] [Thread-19988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:41:07.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:41:07.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:41:07.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:41:07.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:41:07.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:41:07.817 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:41:07.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:41:07.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:41:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:41:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.653211 -999.00  +25.00  24.26     14   -3.50 1 2 1 1 1   887    0 29.21 20.60 ----- 32.1 24.3 277.8 36.1 26.6 -23.9 26.6 -22.7 26.2 -22.9 26.5 -23.0
2025-11-12T17:41:07.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:41:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:41:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.653211
2025-11-12T17:41:07.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:41:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:41:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:41:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:41:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:41:07.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:40:59', tmtdew=34.71, humidity=9.1, cloud=0.0, wind=31.6, temperature=25.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:40:37.430', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:41:07.820 [DEBUG] [Thread-19988] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:41:07.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:41:07.916 [DEBUG] [Thread-19991] [transport.py] [_log()] starting thread (client mode): 0x11f10280
2025-11-12T17:41:07.916 [DEBUG] [Thread-19991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:41:07.931 [DEBUG] [Thread-19991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:41:07.931 [INFO] [Thread-19991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] client lang: <none>
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] server lang: <none>
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] kex follows: False
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:41:07.939 [DEBUG] [Thread-19991] [transport.py] [_log()] Compression: none
2025-11-12T17:41:07.940 [DEBUG] [Thread-19991] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:41:07.995 [DEBUG] [Thread-19991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:41:07.996 [DEBUG] [Thread-19991] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:41:07.997 [DEBUG] [Thread-19991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:41:07.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:41:07.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:41:08.052 [DEBUG] [Thread-19991] [transport.py] [_log()] userauth is OK
2025-11-12T17:41:08.052 [DEBUG] [Thread-19991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:41:08.052 [DEBUG] [Thread-19991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:41:08.053 [DEBUG] [Thread-19991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:41:08.053 [DEBUG] [Thread-19991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:41:08.072 [INFO] [Thread-19991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:41:08.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:41:08.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:41:08.881 [DEBUG] [Thread-19991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:41:08.881 [DEBUG] [Thread-19991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:41:08.929 [DEBUG] [Thread-19991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:41:08.929 [DEBUG] [Thread-19991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:41:08.938 [DEBUG] [Thread-19991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:41:08.946 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:41:08.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-11-12T17:41:08.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:41:08.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:41:08.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:41:08.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:41:08.972 [DEBUG] [Thread-19991] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:41:11.162 [DEBUG] [Thread-19993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:41:26.223 [DEBUG] [Thread-19994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:41:38.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:41:38.994 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:41:38.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-11-12T17:41:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 41, 32), 34.69, 9.12, 0.0, 30.21, 25.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:41:39.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:41:32
2025-11-12T17:41:39.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:41:39.953 [DEBUG] [Thread-19995] [transport.py] [_log()] starting thread (client mode): 0x173e9db0
2025-11-12T17:41:39.953 [DEBUG] [Thread-19995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:41:39.973 [DEBUG] [Thread-19995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:41:39.973 [INFO] [Thread-19995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:41:39.976 [DEBUG] [Thread-19995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:41:39.976 [DEBUG] [Thread-19995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:41:39.976 [DEBUG] [Thread-19995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] client lang: <none>
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] server lang: <none>
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] kex follows: False
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] Compression: none
2025-11-12T17:41:39.977 [DEBUG] [Thread-19995] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:41:39.994 [DEBUG] [Thread-19995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:41:39.994 [DEBUG] [Thread-19995] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:41:39.994 [DEBUG] [Thread-19995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:41:39.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:41:39.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:41:39.995 [DEBUG] [Thread-19995] [transport.py] [_log()] userauth is OK
2025-11-12T17:41:39.995 [DEBUG] [Thread-19995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:41:39.995 [DEBUG] [Thread-19995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:41:39.995 [DEBUG] [Thread-19995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:41:39.996 [DEBUG] [Thread-19995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:41:40.005 [INFO] [Thread-19995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:41:40.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:41:40.656 [DEBUG] [Thread-19995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:41:40.657 [DEBUG] [Thread-19995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:41:40.657 [DEBUG] [Thread-19995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:41:40.700 [DEBUG] [Thread-19995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:41:40.700 [DEBUG] [Thread-19995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:41:40.702 [DEBUG] [Thread-19995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:41:40.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:41:40.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:41:40.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:41:40.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:41:40.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:41:40.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:41:40.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:41:40.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:41:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:41:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.653558 -999.00  +25.00  26.67     14   -3.40 1 2 1 1 1   887    0 29.50 20.34 ----- 27.1 26.7 275.0 36.5 26.6 -23.6 26.5 -22.6 26.2 -23.4 26.5 -23.3
2025-11-12T17:41:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:41:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:41:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.653558
2025-11-12T17:41:40.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:41:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:41:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:41:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:41:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:41:40.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:41:32', tmtdew=34.69, humidity=9.12, cloud=0.0, wind=30.21, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:41:07.411', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:41:40.716 [DEBUG] [Thread-19995] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:41:40.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:41:40.802 [DEBUG] [Thread-19998] [transport.py] [_log()] starting thread (client mode): 0x11f111e0
2025-11-12T17:41:40.802 [DEBUG] [Thread-19998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:41:40.816 [DEBUG] [Thread-19998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:41:40.816 [INFO] [Thread-19998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] client lang: <none>
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] server lang: <none>
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] kex follows: False
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] Compression: none
2025-11-12T17:41:40.824 [DEBUG] [Thread-19998] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:41:40.882 [DEBUG] [Thread-19998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:41:40.882 [DEBUG] [Thread-19998] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:41:40.882 [DEBUG] [Thread-19998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:41:40.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:41:40.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:41:40.939 [DEBUG] [Thread-19998] [transport.py] [_log()] userauth is OK
2025-11-12T17:41:40.939 [DEBUG] [Thread-19998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:41:40.939 [DEBUG] [Thread-19998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:41:40.939 [DEBUG] [Thread-19998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:41:40.940 [DEBUG] [Thread-19998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:41:40.956 [INFO] [Thread-19998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:41:40.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:41:40.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:41:41.256 [DEBUG] [Thread-20000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:41:41.801 [DEBUG] [Thread-19998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:41:41.801 [DEBUG] [Thread-19998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:41:41.849 [DEBUG] [Thread-19998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:41:41.849 [DEBUG] [Thread-19998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:41:41.857 [DEBUG] [Thread-19998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:41:41.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:41:41.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-11-12T17:41:41.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-11-12T17:41:41.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:41:41.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:41:41.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:41:41.890 [DEBUG] [Thread-19998] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:41:43.454 [DEBUG] [Thread-20001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:41:55.433 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:41:55.434 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:41:56.298 [DEBUG] [Thread-20002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:42:11.332 [DEBUG] [Thread-20003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:42:11.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:42:11.913 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:42:11.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-11-12T17:42:12.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 42, 3), 34.77, 9.07, 0.0, 31.14, 25.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:42:12.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:42:03
2025-11-12T17:42:12.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:42:12.843 [DEBUG] [Thread-20004] [transport.py] [_log()] starting thread (client mode): 0x173e9e40
2025-11-12T17:42:12.843 [DEBUG] [Thread-20004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:42:12.862 [DEBUG] [Thread-20004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:42:12.862 [INFO] [Thread-20004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] client lang: <none>
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] server lang: <none>
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] kex follows: False
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] Compression: none
2025-11-12T17:42:12.866 [DEBUG] [Thread-20004] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:42:12.882 [DEBUG] [Thread-20004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:42:12.882 [DEBUG] [Thread-20004] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:42:12.883 [DEBUG] [Thread-20004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:42:12.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:42:12.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:42:12.925 [DEBUG] [Thread-20004] [transport.py] [_log()] userauth is OK
2025-11-12T17:42:12.925 [DEBUG] [Thread-20004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:42:12.925 [DEBUG] [Thread-20004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:42:12.925 [DEBUG] [Thread-20004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:42:12.925 [DEBUG] [Thread-20004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:42:12.958 [INFO] [Thread-20004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:42:12.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:42:13.618 [DEBUG] [Thread-20004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:42:13.618 [DEBUG] [Thread-20004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:42:13.619 [DEBUG] [Thread-20004] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:42:13.659 [DEBUG] [Thread-20004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:42:13.660 [DEBUG] [Thread-20004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:42:13.663 [DEBUG] [Thread-20004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:42:13.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:42:13.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:42:13.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:42:13.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:42:13.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:42:13.689 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:42:13.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:42:13.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:42:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:42:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.653906 -999.00  +24.90  30.62     14   -3.50 1 1 2 1 1   887    0 29.56 19.06 ----- 24.0 30.6 279.5 36.1 26.5 -24.0 26.5 -23.0 26.1 -23.3 26.5 -22.9
2025-11-12T17:42:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:42:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:42:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.653906
2025-11-12T17:42:13.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:42:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:42:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:42:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:42:13.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:42:13.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:42:03', tmtdew=34.77, humidity=9.07, cloud=0.0, wind=31.14, temperature=25.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:41:37.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:42:13.692 [DEBUG] [Thread-20004] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:42:13.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:42:13.788 [DEBUG] [Thread-20007] [transport.py] [_log()] starting thread (client mode): 0x173e9db0
2025-11-12T17:42:13.788 [DEBUG] [Thread-20007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:42:13.802 [DEBUG] [Thread-20007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:42:13.802 [INFO] [Thread-20007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] client lang: <none>
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] server lang: <none>
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] kex follows: False
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:42:13.810 [DEBUG] [Thread-20007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:42:13.811 [DEBUG] [Thread-20007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:42:13.811 [DEBUG] [Thread-20007] [transport.py] [_log()] Compression: none
2025-11-12T17:42:13.811 [DEBUG] [Thread-20007] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:42:13.869 [DEBUG] [Thread-20007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:42:13.869 [DEBUG] [Thread-20007] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:42:13.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:42:13.870 [DEBUG] [Thread-20007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:42:13.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:42:13.928 [DEBUG] [Thread-20007] [transport.py] [_log()] userauth is OK
2025-11-12T17:42:13.928 [DEBUG] [Thread-20007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:42:13.928 [DEBUG] [Thread-20007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:42:13.928 [DEBUG] [Thread-20007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:42:13.928 [DEBUG] [Thread-20007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:42:13.946 [INFO] [Thread-20007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:42:13.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:42:13.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:42:14.829 [DEBUG] [Thread-20007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:42:14.829 [DEBUG] [Thread-20007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:42:14.877 [DEBUG] [Thread-20007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:42:14.877 [DEBUG] [Thread-20007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:42:14.885 [DEBUG] [Thread-20007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:42:14.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:42:14.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-11-12T17:42:14.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-11-12T17:42:14.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:42:14.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:42:14.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:42:14.918 [DEBUG] [Thread-20007] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:42:26.372 [DEBUG] [Thread-20009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:42:41.434 [DEBUG] [Thread-20010 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:42:43.499 [DEBUG] [Thread-20011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:42:44.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:42:44.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:42:44.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-11-12T17:42:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 42, 35), 34.96, 9.08, 0.0, 29.38, 25.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:42:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:42:35
2025-11-12T17:42:45.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:42:45.841 [DEBUG] [Thread-20012] [transport.py] [_log()] starting thread (client mode): 0x14955e10
2025-11-12T17:42:45.842 [DEBUG] [Thread-20012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:42:45.863 [DEBUG] [Thread-20012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:42:45.863 [INFO] [Thread-20012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:42:45.866 [DEBUG] [Thread-20012] [transport.py] [_log()] client lang: <none>
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] server lang: <none>
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] kex follows: False
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] Compression: none
2025-11-12T17:42:45.867 [DEBUG] [Thread-20012] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:42:45.884 [DEBUG] [Thread-20012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:42:45.885 [DEBUG] [Thread-20012] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:42:45.885 [DEBUG] [Thread-20012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:42:45.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:42:45.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:42:45.887 [DEBUG] [Thread-20012] [transport.py] [_log()] userauth is OK
2025-11-12T17:42:45.887 [DEBUG] [Thread-20012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:42:45.888 [DEBUG] [Thread-20012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:42:45.888 [DEBUG] [Thread-20012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:42:45.888 [DEBUG] [Thread-20012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:42:45.912 [INFO] [Thread-20012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:42:45.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:42:46.545 [DEBUG] [Thread-20012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:42:46.545 [DEBUG] [Thread-20012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:42:46.545 [DEBUG] [Thread-20012] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:42:46.585 [DEBUG] [Thread-20012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:42:46.586 [DEBUG] [Thread-20012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:42:46.589 [DEBUG] [Thread-20012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:42:46.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:42:46.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:42:46.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:42:46.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:42:46.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:42:46.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:42:46.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:42:46.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:42:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:42:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.654600 -999.00  +25.10  18.89     14   -3.40 1 2 1 1 1   887    0 29.07 17.30 ----- 30.7 18.9 273.6 28.9 26.5 -23.4 26.4 -22.4 26.2 -22.1 26.5 -22.7
2025-11-12T17:42:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:42:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:42:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.654600
2025-11-12T17:42:46.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:42:46.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:42:46.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:42:46.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:42:46.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:42:46.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:42:35', tmtdew=34.96, humidity=9.08, cloud=0.0, wind=29.38, temperature=25.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:42:37.440', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:42:46.617 [DEBUG] [Thread-20012] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:42:46.703 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:42:46.714 [DEBUG] [Thread-20015] [transport.py] [_log()] starting thread (client mode): 0x14957700
2025-11-12T17:42:46.715 [DEBUG] [Thread-20015] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:42:46.730 [DEBUG] [Thread-20015] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:42:46.730 [INFO] [Thread-20015] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] client lang: <none>
2025-11-12T17:42:46.738 [DEBUG] [Thread-20015] [transport.py] [_log()] server lang: <none>
2025-11-12T17:42:46.739 [DEBUG] [Thread-20015] [transport.py] [_log()] kex follows: False
2025-11-12T17:42:46.739 [DEBUG] [Thread-20015] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:42:46.739 [DEBUG] [Thread-20015] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:42:46.739 [DEBUG] [Thread-20015] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:42:46.739 [DEBUG] [Thread-20015] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:42:46.739 [DEBUG] [Thread-20015] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:42:46.739 [DEBUG] [Thread-20015] [transport.py] [_log()] Compression: none
2025-11-12T17:42:46.739 [DEBUG] [Thread-20015] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:42:46.800 [DEBUG] [Thread-20015] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:42:46.801 [DEBUG] [Thread-20015] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:42:46.801 [DEBUG] [Thread-20015] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:42:46.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:42:46.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:42:46.856 [DEBUG] [Thread-20015] [transport.py] [_log()] userauth is OK
2025-11-12T17:42:46.856 [DEBUG] [Thread-20015] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:42:46.857 [DEBUG] [Thread-20015] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:42:46.857 [DEBUG] [Thread-20015] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:42:46.857 [DEBUG] [Thread-20015] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:42:46.875 [INFO] [Thread-20015] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:42:46.876 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:42:46.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:42:47.737 [DEBUG] [Thread-20015] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:42:47.737 [DEBUG] [Thread-20015] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:42:47.784 [DEBUG] [Thread-20015] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:42:47.785 [DEBUG] [Thread-20015] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:42:47.794 [DEBUG] [Thread-20015] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:42:47.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:42:47.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')
2025-11-12T17:42: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-11-12T17:42:47.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:42:47.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:42:47.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:42:47.831 [DEBUG] [Thread-20015] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:42:55.576 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:42:55.576 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:42:56.466 [DEBUG] [Thread-20017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:43:11.508 [DEBUG] [Thread-20018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:43:17.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:43:17.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:43:17.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-11-12T17:43:18.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 43, 7), 34.94, 9.08, 0.0, 30.45, 25.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:43:18.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:43:07
2025-11-12T17:43:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:43:18.780 [DEBUG] [Thread-20019] [transport.py] [_log()] starting thread (client mode): 0x11f12800
2025-11-12T17:43:18.780 [DEBUG] [Thread-20019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:43:18.801 [DEBUG] [Thread-20019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:43:18.801 [INFO] [Thread-20019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:43:18.804 [DEBUG] [Thread-20019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] client lang: <none>
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] server lang: <none>
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] kex follows: False
2025-11-12T17:43:18.805 [DEBUG] [Thread-20019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:43:18.806 [DEBUG] [Thread-20019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:43:18.806 [DEBUG] [Thread-20019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:43:18.806 [DEBUG] [Thread-20019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:43:18.806 [DEBUG] [Thread-20019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:43:18.806 [DEBUG] [Thread-20019] [transport.py] [_log()] Compression: none
2025-11-12T17:43:18.806 [DEBUG] [Thread-20019] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:43:18.823 [DEBUG] [Thread-20019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:43:18.823 [DEBUG] [Thread-20019] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:43:18.824 [DEBUG] [Thread-20019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:43:18.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:43:18.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:43:18.826 [DEBUG] [Thread-20019] [transport.py] [_log()] userauth is OK
2025-11-12T17:43:18.826 [DEBUG] [Thread-20019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:43:18.826 [DEBUG] [Thread-20019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:43:18.826 [DEBUG] [Thread-20019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:43:18.826 [DEBUG] [Thread-20019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:43:18.850 [INFO] [Thread-20019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:43:18.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:43:19.489 [DEBUG] [Thread-20019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:43:19.489 [DEBUG] [Thread-20019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:43:19.490 [DEBUG] [Thread-20019] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:43:19.531 [DEBUG] [Thread-20019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:43:19.531 [DEBUG] [Thread-20019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:43:19.534 [DEBUG] [Thread-20019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:43:19.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:43:19.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:43:19.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:43:19.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:43:19.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:43:19.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:43:19.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:43:19.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:43:19.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:43:19.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.654947 -999.00  +25.20  15.67     14   -3.40 1 2 1 1 1   887    0 28.54 13.07 ----- 16.3 15.7 283.2 35.4 26.6 -23.4 26.5 -22.4 26.2 -22.2 26.5 -23.0
2025-11-12T17:43:19.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:43:19.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:43:19.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.654947
2025-11-12T17:43:19.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:43:19.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:43:19.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:43:19.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:43:19.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:43:19.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:43:07', tmtdew=34.94, humidity=9.08, cloud=0.0, wind=30.45, temperature=25.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:43:07.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:43:19.557 [DEBUG] [Thread-20019] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:43:19.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:43:19.661 [DEBUG] [Thread-20022] [transport.py] [_log()] starting thread (client mode): 0x149a8df0
2025-11-12T17:43:19.661 [DEBUG] [Thread-20022] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:43:19.675 [DEBUG] [Thread-20022] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:43:19.675 [INFO] [Thread-20022] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] client lang: <none>
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] server lang: <none>
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] kex follows: False
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:43:19.683 [DEBUG] [Thread-20022] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:43:19.684 [DEBUG] [Thread-20022] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:43:19.684 [DEBUG] [Thread-20022] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:43:19.684 [DEBUG] [Thread-20022] [transport.py] [_log()] Compression: none
2025-11-12T17:43:19.684 [DEBUG] [Thread-20022] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:43:19.739 [DEBUG] [Thread-20022] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:43:19.739 [DEBUG] [Thread-20022] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:43:19.740 [DEBUG] [Thread-20022] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:43:19.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:43:19.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:43:19.795 [DEBUG] [Thread-20022] [transport.py] [_log()] userauth is OK
2025-11-12T17:43:19.796 [DEBUG] [Thread-20022] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:43:19.796 [DEBUG] [Thread-20022] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:43:19.796 [DEBUG] [Thread-20022] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:43:19.796 [DEBUG] [Thread-20022] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:43:19.815 [INFO] [Thread-20022] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:43:19.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:43:19.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:43:20.657 [DEBUG] [Thread-20022] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:43:20.657 [DEBUG] [Thread-20022] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:43:20.704 [DEBUG] [Thread-20022] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:43:20.704 [DEBUG] [Thread-20022] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:43:20.713 [DEBUG] [Thread-20022] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:43:20.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:43:20.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-11-12T17:43:20.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-11-12T17:43:20.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:43:20.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:43:20.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:43:20.751 [DEBUG] [Thread-20022] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:43:26.546 [DEBUG] [Thread-20024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:43:41.595 [DEBUG] [Thread-20025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:43:43.544 [DEBUG] [Thread-20026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:43:50.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:43:50.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:43:50.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-11-12T17:43:51.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 43, 39), 34.61, 9.63, 0.0, 29.24, 25.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:43:51.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:43:39
2025-11-12T17:43:51.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:43:51.682 [DEBUG] [Thread-20027] [transport.py] [_log()] starting thread (client mode): 0x14956200
2025-11-12T17:43:51.682 [DEBUG] [Thread-20027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:43:51.702 [DEBUG] [Thread-20027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:43:51.702 [INFO] [Thread-20027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:43:51.705 [DEBUG] [Thread-20027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] client lang: <none>
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] server lang: <none>
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] kex follows: False
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:43:51.706 [DEBUG] [Thread-20027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:43:51.707 [DEBUG] [Thread-20027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:43:51.707 [DEBUG] [Thread-20027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:43:51.707 [DEBUG] [Thread-20027] [transport.py] [_log()] Compression: none
2025-11-12T17:43:51.707 [DEBUG] [Thread-20027] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:43:51.724 [DEBUG] [Thread-20027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:43:51.725 [DEBUG] [Thread-20027] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:43:51.725 [DEBUG] [Thread-20027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:43:51.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:43:51.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:43:51.727 [DEBUG] [Thread-20027] [transport.py] [_log()] userauth is OK
2025-11-12T17:43:51.728 [DEBUG] [Thread-20027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:43:51.728 [DEBUG] [Thread-20027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:43:51.728 [DEBUG] [Thread-20027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:43:51.728 [DEBUG] [Thread-20027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:43:51.752 [INFO] [Thread-20027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:43:51.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:43:52.396 [DEBUG] [Thread-20027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:43:52.396 [DEBUG] [Thread-20027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:43:52.396 [DEBUG] [Thread-20027] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:43:52.437 [DEBUG] [Thread-20027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:43:52.437 [DEBUG] [Thread-20027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:43:52.440 [DEBUG] [Thread-20027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:43:52.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:43:52.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:43:52.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:43:52.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:43:52.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:43:52.462 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:43:52.462 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:43:52.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:43:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:43:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.655295 -999.00  +25.20  28.14     14   -3.30 1 2 1 1 1   887    0 28.76 9.67 ----- 22.7 28.1 273.2 33.0 26.6 -23.4 26.6 -22.7 26.3 -22.9 26.6 -22.9
2025-11-12T17:43:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:43:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:43:52.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.655295
2025-11-12T17:43:52.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:43:52.464 [DEBUG] [Thread-20027] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:43:52.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:43:52.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:43:52.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:43:52.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:43:52.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:43:39', tmtdew=34.61, humidity=9.63, cloud=0.0, wind=29.24, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:43:37.488', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:43:52.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:43:52.559 [DEBUG] [Thread-20030] [transport.py] [_log()] starting thread (client mode): 0x14954520
2025-11-12T17:43:52.559 [DEBUG] [Thread-20030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:43:52.574 [DEBUG] [Thread-20030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:43:52.574 [INFO] [Thread-20030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] client lang: <none>
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] server lang: <none>
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] kex follows: False
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] Compression: none
2025-11-12T17:43:52.582 [DEBUG] [Thread-20030] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:43:52.642 [DEBUG] [Thread-20030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:43:52.642 [DEBUG] [Thread-20030] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:43:52.643 [DEBUG] [Thread-20030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:43:52.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:43:52.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:43:52.700 [DEBUG] [Thread-20030] [transport.py] [_log()] userauth is OK
2025-11-12T17:43:52.700 [DEBUG] [Thread-20030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:43:52.700 [DEBUG] [Thread-20030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:43:52.700 [DEBUG] [Thread-20030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:43:52.701 [DEBUG] [Thread-20030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:43:52.721 [INFO] [Thread-20030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:43:52.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:43:52.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:43:53.521 [DEBUG] [Thread-20030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:43:53.521 [DEBUG] [Thread-20030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:43:53.568 [DEBUG] [Thread-20030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:43:53.569 [DEBUG] [Thread-20030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:43:53.578 [DEBUG] [Thread-20030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:43:53.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:43:53.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-11-12T17:43:53.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:43:53.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:43:53.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:43:53.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:43:53.618 [DEBUG] [Thread-20030] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:43:55.718 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:43:55.719 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:43:56.629 [DEBUG] [Thread-20032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:44:11.671 [DEBUG] [Thread-20033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:44:23.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:44:23.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:44:23.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-11-12T17:44:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 44, 11), 34.61, 9.65, 0.0, 30.28, 25.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:44:24.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:44:11
2025-11-12T17:44:24.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:44:24.543 [DEBUG] [Thread-20034] [transport.py] [_log()] starting thread (client mode): 0x149ab760
2025-11-12T17:44:24.543 [DEBUG] [Thread-20034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:44:24.563 [DEBUG] [Thread-20034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:44:24.563 [INFO] [Thread-20034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] client lang: <none>
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] server lang: <none>
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] kex follows: False
2025-11-12T17:44:24.567 [DEBUG] [Thread-20034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:44:24.568 [DEBUG] [Thread-20034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:44:24.568 [DEBUG] [Thread-20034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:44:24.568 [DEBUG] [Thread-20034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:44:24.568 [DEBUG] [Thread-20034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:44:24.568 [DEBUG] [Thread-20034] [transport.py] [_log()] Compression: none
2025-11-12T17:44:24.568 [DEBUG] [Thread-20034] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:44:24.578 [DEBUG] [Thread-20034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:44:24.579 [DEBUG] [Thread-20034] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:44:24.579 [DEBUG] [Thread-20034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:44:24.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:44:24.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:44:24.581 [DEBUG] [Thread-20034] [transport.py] [_log()] userauth is OK
2025-11-12T17:44:24.581 [DEBUG] [Thread-20034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:44:24.581 [DEBUG] [Thread-20034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:44:24.581 [DEBUG] [Thread-20034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:44:24.581 [DEBUG] [Thread-20034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:44:24.607 [INFO] [Thread-20034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:44:24.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:44:25.248 [DEBUG] [Thread-20034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:44:25.248 [DEBUG] [Thread-20034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:44:25.249 [DEBUG] [Thread-20034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:44:25.290 [DEBUG] [Thread-20034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:44:25.290 [DEBUG] [Thread-20034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:44:25.293 [DEBUG] [Thread-20034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:44:25.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:44:25.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:44:25.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:44:25.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:44:25.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:44:25.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:44:25.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:44:25.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:44:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:44:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.655642 -999.00  +25.20  24.21     14   -3.30 1 2 1 1 1   887    0 28.79 5.37 ----- 22.0 24.2 278.4 32.6 26.6 -23.5 26.6 -22.6 26.4 -22.3 26.6 -22.7
2025-11-12T17:44:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:44:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:44:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.655642
2025-11-12T17:44:25.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:44:25.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:44:25.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:44:25.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:44:25.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:44:25.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:44:11', tmtdew=34.61, humidity=9.65, cloud=0.0, wind=30.28, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:44:07.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:44:25.320 [DEBUG] [Thread-20034] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:44:25.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:44:25.416 [DEBUG] [Thread-20037] [transport.py] [_log()] starting thread (client mode): 0x149a9360
2025-11-12T17:44:25.416 [DEBUG] [Thread-20037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:44:25.430 [DEBUG] [Thread-20037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:44:25.431 [INFO] [Thread-20037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:44:25.439 [DEBUG] [Thread-20037] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:44:25.439 [DEBUG] [Thread-20037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:44:25.439 [DEBUG] [Thread-20037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:44:25.439 [DEBUG] [Thread-20037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:44:25.439 [DEBUG] [Thread-20037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:44:25.439 [DEBUG] [Thread-20037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:44:25.439 [DEBUG] [Thread-20037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] client lang: <none>
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] server lang: <none>
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] kex follows: False
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] Compression: none
2025-11-12T17:44:25.440 [DEBUG] [Thread-20037] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:44:25.500 [DEBUG] [Thread-20037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:44:25.501 [DEBUG] [Thread-20037] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:44:25.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:44:25.502 [DEBUG] [Thread-20037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:44:25.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:44:25.556 [DEBUG] [Thread-20037] [transport.py] [_log()] userauth is OK
2025-11-12T17:44:25.556 [DEBUG] [Thread-20037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:44:25.556 [DEBUG] [Thread-20037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:44:25.556 [DEBUG] [Thread-20037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:44:25.556 [DEBUG] [Thread-20037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:44:25.575 [INFO] [Thread-20037] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:44: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-11-12T17:44:25.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:44:26.402 [DEBUG] [Thread-20037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:44:26.402 [DEBUG] [Thread-20037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:44:26.453 [DEBUG] [Thread-20037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:44:26.453 [DEBUG] [Thread-20037] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:44:26.463 [DEBUG] [Thread-20037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:44:26.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:44:26.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')
2025-11-12T17:44:26.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:44:26.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:44:26.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:44:26.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:44:26.500 [DEBUG] [Thread-20037] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:44:26.705 [DEBUG] [Thread-20039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:44:41.759 [DEBUG] [Thread-20040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:44:43.594 [DEBUG] [Thread-20041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:44:55.859 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:44:55.860 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:44:56.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:44:56.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:44:56.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:44:56.789 [DEBUG] [Thread-20042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:44:57.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 44, 43), 34.71, 9.15, 0.0, 30.67, 25.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:44:57.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:44:43
2025-11-12T17:44:57.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:44:57.458 [DEBUG] [Thread-20043] [transport.py] [_log()] starting thread (client mode): 0x149a9540
2025-11-12T17:44:57.459 [DEBUG] [Thread-20043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:44:57.479 [DEBUG] [Thread-20043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:44:57.479 [INFO] [Thread-20043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] client lang: <none>
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] server lang: <none>
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] kex follows: False
2025-11-12T17:44:57.482 [DEBUG] [Thread-20043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:44:57.483 [DEBUG] [Thread-20043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:44:57.483 [DEBUG] [Thread-20043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:44:57.483 [DEBUG] [Thread-20043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:44:57.483 [DEBUG] [Thread-20043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:44:57.483 [DEBUG] [Thread-20043] [transport.py] [_log()] Compression: none
2025-11-12T17:44:57.483 [DEBUG] [Thread-20043] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:44:57.502 [DEBUG] [Thread-20043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:44:57.503 [DEBUG] [Thread-20043] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:44:57.504 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:44:57.504 [DEBUG] [Thread-20043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:44:57.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:44:57.507 [DEBUG] [Thread-20043] [transport.py] [_log()] userauth is OK
2025-11-12T17:44:57.507 [DEBUG] [Thread-20043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:44:57.507 [DEBUG] [Thread-20043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:44:57.507 [DEBUG] [Thread-20043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:44:57.507 [DEBUG] [Thread-20043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:44:57.532 [INFO] [Thread-20043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:44:57.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:44:58.153 [DEBUG] [Thread-20043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:44:58.154 [DEBUG] [Thread-20043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:44:58.154 [DEBUG] [Thread-20043] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:44:58.195 [DEBUG] [Thread-20043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:44:58.195 [DEBUG] [Thread-20043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:44:58.198 [DEBUG] [Thread-20043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:44:58.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:44:58.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:44:58.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:44:58.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:44:58.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:44:58.223 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:44:58.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:44:58.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:44:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:44:58.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.655989 -999.00  +25.20  24.76     14   -3.30 1 2 1 1 1   887    0 28.57 2.30 ----- 31.8 24.8 277.8 32.4 26.6 -23.5 26.6 -22.6 26.3 -23.0 26.6 -23.3
2025-11-12T17:44:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:44:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:44:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.655989
2025-11-12T17:44:58.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:44:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:44:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:44:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:44:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:44:58.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:44:43', tmtdew=34.71, humidity=9.15, cloud=0.0, wind=30.67, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:44:37.450', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:44:58.226 [DEBUG] [Thread-20043] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:44:58.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:44:58.322 [DEBUG] [Thread-20046] [transport.py] [_log()] starting thread (client mode): 0x14954040
2025-11-12T17:44:58.322 [DEBUG] [Thread-20046] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:44:58.337 [DEBUG] [Thread-20046] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:44:58.337 [INFO] [Thread-20046] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:44:58.344 [DEBUG] [Thread-20046] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:44:58.345 [DEBUG] [Thread-20046] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:44:58.345 [DEBUG] [Thread-20046] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:44:58.345 [DEBUG] [Thread-20046] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:44:58.345 [DEBUG] [Thread-20046] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:44:58.345 [DEBUG] [Thread-20046] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:44:58.345 [DEBUG] [Thread-20046] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:44:58.345 [DEBUG] [Thread-20046] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:44:58.345 [DEBUG] [Thread-20046] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:44:58.346 [DEBUG] [Thread-20046] [transport.py] [_log()] client lang: <none>
2025-11-12T17:44:58.346 [DEBUG] [Thread-20046] [transport.py] [_log()] server lang: <none>
2025-11-12T17:44:58.346 [DEBUG] [Thread-20046] [transport.py] [_log()] kex follows: False
2025-11-12T17:44:58.346 [DEBUG] [Thread-20046] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:44:58.346 [DEBUG] [Thread-20046] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:44:58.346 [DEBUG] [Thread-20046] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:44:58.346 [DEBUG] [Thread-20046] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:44:58.347 [DEBUG] [Thread-20046] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:44:58.347 [DEBUG] [Thread-20046] [transport.py] [_log()] Compression: none
2025-11-12T17:44:58.347 [DEBUG] [Thread-20046] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:44:58.405 [DEBUG] [Thread-20046] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:44:58.406 [DEBUG] [Thread-20046] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:44:58.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:44:58.407 [DEBUG] [Thread-20046] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:44:58.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:44:58.464 [DEBUG] [Thread-20046] [transport.py] [_log()] userauth is OK
2025-11-12T17:44:58.464 [DEBUG] [Thread-20046] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:44:58.465 [DEBUG] [Thread-20046] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:44:58.465 [DEBUG] [Thread-20046] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:44:58.465 [DEBUG] [Thread-20046] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:44:58.485 [INFO] [Thread-20046] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:44:58.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:44:58.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:44:59.335 [DEBUG] [Thread-20046] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:44:59.336 [DEBUG] [Thread-20046] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:44:59.384 [DEBUG] [Thread-20046] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:44:59.384 [DEBUG] [Thread-20046] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:44:59.393 [DEBUG] [Thread-20046] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:44:59.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:44: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-11-12T17:44:59.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-11-12T17:44:59.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:44:59.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:44:59.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:44:59.430 [DEBUG] [Thread-20046] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:45:11.823 [DEBUG] [Thread-20048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:45:26.871 [DEBUG] [Thread-20049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:45:29.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:45:29.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:45:29.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-11-12T17:45:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 45, 15), 34.8, 9.07, 0.0, 29.89, 25.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:45:30.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:45:15
2025-11-12T17:45:30.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:45:30.417 [DEBUG] [Thread-20050] [transport.py] [_log()] starting thread (client mode): 0x149a99c0
2025-11-12T17:45:30.418 [DEBUG] [Thread-20050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:45:30.438 [DEBUG] [Thread-20050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:45:30.438 [INFO] [Thread-20050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] client lang: <none>
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] server lang: <none>
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] kex follows: False
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] Compression: none
2025-11-12T17:45:30.441 [DEBUG] [Thread-20050] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:45:30.456 [DEBUG] [Thread-20050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:45:30.456 [DEBUG] [Thread-20050] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:45:30.457 [DEBUG] [Thread-20050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:45:30.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:45:30.457 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:45:30.458 [DEBUG] [Thread-20050] [transport.py] [_log()] userauth is OK
2025-11-12T17:45:30.458 [DEBUG] [Thread-20050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:45:30.458 [DEBUG] [Thread-20050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:45:30.458 [DEBUG] [Thread-20050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:45:30.458 [DEBUG] [Thread-20050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:45:30.477 [INFO] [Thread-20050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:45:30.477 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:45:31.122 [DEBUG] [Thread-20050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:45:31.122 [DEBUG] [Thread-20050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:45:31.122 [DEBUG] [Thread-20050] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:45:31.163 [DEBUG] [Thread-20050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:45:31.163 [DEBUG] [Thread-20050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:45:31.166 [DEBUG] [Thread-20050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:45:31.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:45:31.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:45:31.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:45:31.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:45:31.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:45:31.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:45:31.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:45:31.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.656336 -999.00  +25.10  29.15     14   -3.40 1 1 1 1 1   887    0 28.84 0.95 ----- 36.2 29.1 279.4 40.5 26.5 -23.7 26.6 -23.0 26.3 -23.5 26.6 -23.4
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.656336
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:45:31.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:45:15', tmtdew=34.8, humidity=9.07, cloud=0.0, wind=29.89, temperature=25.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:45:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:45:31.185 [DEBUG] [Thread-20050] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:45:31.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:45:31.271 [DEBUG] [Thread-20053] [transport.py] [_log()] starting thread (client mode): 0x149abcd0
2025-11-12T17:45:31.271 [DEBUG] [Thread-20053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:45:31.286 [DEBUG] [Thread-20053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:45:31.286 [INFO] [Thread-20053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] client lang: <none>
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] server lang: <none>
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] kex follows: False
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] Compression: none
2025-11-12T17:45:31.294 [DEBUG] [Thread-20053] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:45:31.351 [DEBUG] [Thread-20053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:45:31.351 [DEBUG] [Thread-20053] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:45:31.351 [DEBUG] [Thread-20053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:45:31.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:45:31.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:45:31.408 [DEBUG] [Thread-20053] [transport.py] [_log()] userauth is OK
2025-11-12T17:45:31.408 [DEBUG] [Thread-20053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:45:31.408 [DEBUG] [Thread-20053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:45:31.408 [DEBUG] [Thread-20053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:45:31.408 [DEBUG] [Thread-20053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:45:31.425 [INFO] [Thread-20053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:45:31.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:45:31.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:45:32.304 [DEBUG] [Thread-20053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:45:32.304 [DEBUG] [Thread-20053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:45:32.352 [DEBUG] [Thread-20053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:45:32.352 [DEBUG] [Thread-20053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:45:32.360 [DEBUG] [Thread-20053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:45:32.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:45:32.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-11-12T17:45:32.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-11-12T17:45:32.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:45:32.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:45:32.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:45:32.393 [DEBUG] [Thread-20053] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:45:41.904 [DEBUG] [Thread-20055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:45:43.639 [DEBUG] [Thread-20056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:45:55.999 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:45:56.000 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:45:56.966 [DEBUG] [Thread-20057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:46:02.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:46:02.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:46:02.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-11-12T17:46:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 45, 47), 34.66, 9.62, 0.0, 34.6, 25.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:46:03.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:45:47
2025-11-12T17:46:03.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:46:03.314 [DEBUG] [Thread-20058] [transport.py] [_log()] starting thread (client mode): 0x149abdc0
2025-11-12T17:46:03.314 [DEBUG] [Thread-20058] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:46:03.334 [DEBUG] [Thread-20058] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:46:03.334 [INFO] [Thread-20058] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:46:03.337 [DEBUG] [Thread-20058] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] client lang: <none>
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] server lang: <none>
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] kex follows: False
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] Compression: none
2025-11-12T17:46:03.338 [DEBUG] [Thread-20058] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:46:03.356 [DEBUG] [Thread-20058] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:46:03.357 [DEBUG] [Thread-20058] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:46:03.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:46:03.359 [DEBUG] [Thread-20058] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:46:03.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:46:03.361 [DEBUG] [Thread-20058] [transport.py] [_log()] userauth is OK
2025-11-12T17:46:03.362 [DEBUG] [Thread-20058] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:46:03.362 [DEBUG] [Thread-20058] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:46:03.362 [DEBUG] [Thread-20058] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:46:03.362 [DEBUG] [Thread-20058] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:46:03.387 [INFO] [Thread-20058] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:46:03.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:46:04.035 [DEBUG] [Thread-20058] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:46:04.035 [DEBUG] [Thread-20058] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:46:04.035 [DEBUG] [Thread-20058] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:46:04.076 [DEBUG] [Thread-20058] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:46:04.076 [DEBUG] [Thread-20058] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:46:04.079 [DEBUG] [Thread-20058] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:46:04.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:46:04.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:46:04.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:46:04.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:46:04.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:46:04.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:46:04.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:46:04.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:46:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:46:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.656683 -999.00  +24.90  31.87     14   -3.50 1 1 2 1 1   887    0 28.15 -0.82 ----- 38.7 31.9 275.4 49.8 26.5 -24.9 26.4 -22.9 26.1 -24.4 26.5 -23.3
2025-11-12T17:46:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:46:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:46:04.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.656683
2025-11-12T17:46:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:46:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:46:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:46:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:46:04.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:46:04.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:45:47', tmtdew=34.66, humidity=9.62, cloud=0.0, wind=34.6, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:45:37.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:46:04.106 [DEBUG] [Thread-20058] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:46:04.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:46:04.199 [DEBUG] [Thread-20061] [transport.py] [_log()] starting thread (client mode): 0x149a8970
2025-11-12T17:46:04.199 [DEBUG] [Thread-20061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:46:04.213 [DEBUG] [Thread-20061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:46:04.214 [INFO] [Thread-20061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:46:04.221 [DEBUG] [Thread-20061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] client lang: <none>
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] server lang: <none>
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] kex follows: False
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:46:04.222 [DEBUG] [Thread-20061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:46:04.223 [DEBUG] [Thread-20061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:46:04.223 [DEBUG] [Thread-20061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:46:04.223 [DEBUG] [Thread-20061] [transport.py] [_log()] Compression: none
2025-11-12T17:46:04.223 [DEBUG] [Thread-20061] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:46:04.280 [DEBUG] [Thread-20061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:46:04.281 [DEBUG] [Thread-20061] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:46:04.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:46:04.282 [DEBUG] [Thread-20061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:46:04.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:46:04.335 [DEBUG] [Thread-20061] [transport.py] [_log()] userauth is OK
2025-11-12T17:46:04.335 [DEBUG] [Thread-20061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:46:04.335 [DEBUG] [Thread-20061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:46:04.335 [DEBUG] [Thread-20061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:46:04.335 [DEBUG] [Thread-20061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:46:04.349 [INFO] [Thread-20061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:46:04.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:46:04.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:46:05.196 [DEBUG] [Thread-20061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:46:05.196 [DEBUG] [Thread-20061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:46:05.244 [DEBUG] [Thread-20061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:46:05.244 [DEBUG] [Thread-20061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:46:05.252 [DEBUG] [Thread-20061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:46:05.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:46:05.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-11-12T17:46:05.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-11-12T17:46:05.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:46:05.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:46:05.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:46:05.284 [DEBUG] [Thread-20061] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:46:12.002 [DEBUG] [Thread-20063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:46:27.057 [DEBUG] [Thread-20064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:46:35.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:46:35.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:46:35.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-11-12T17:46:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 46, 19), 34.66, 9.62, 0.0, 32.55, 25.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:46:35.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:46:19
2025-11-12T17:46:36.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:46:36.209 [DEBUG] [Thread-20065] [transport.py] [_log()] starting thread (client mode): 0x149a42b0
2025-11-12T17:46:36.210 [DEBUG] [Thread-20065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:46:36.230 [DEBUG] [Thread-20065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:46:36.231 [INFO] [Thread-20065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:46:36.233 [DEBUG] [Thread-20065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:46:36.233 [DEBUG] [Thread-20065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] client lang: <none>
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] server lang: <none>
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] kex follows: False
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] Compression: none
2025-11-12T17:46:36.234 [DEBUG] [Thread-20065] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:46:36.251 [DEBUG] [Thread-20065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:46:36.252 [DEBUG] [Thread-20065] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:46:36.253 [DEBUG] [Thread-20065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:46:36.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:46:36.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:46:36.255 [DEBUG] [Thread-20065] [transport.py] [_log()] userauth is OK
2025-11-12T17:46:36.255 [DEBUG] [Thread-20065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:46:36.255 [DEBUG] [Thread-20065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:46:36.255 [DEBUG] [Thread-20065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:46:36.256 [DEBUG] [Thread-20065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:46:36.271 [INFO] [Thread-20065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:46:36.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:46:36.884 [DEBUG] [Thread-20065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:46:36.884 [DEBUG] [Thread-20065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:46:36.884 [DEBUG] [Thread-20065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:46:36.925 [DEBUG] [Thread-20065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:46:36.925 [DEBUG] [Thread-20065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:46:36.928 [DEBUG] [Thread-20065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:46:36.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:46:36.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:46:36.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:46:36.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:46:36.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:46:36.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:46:36.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:46:36.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:46:36.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:46:36.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.657031 -999.00  +24.80  30.83     15   -3.40 1 1 2 1 1   887    0 28.52 -2.35 ----- 40.0 30.8 280.8 48.3 26.4 -25.1 26.4 -23.5 26.0 -24.4 26.4 -23.4
2025-11-12T17:46:36.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:46:36.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:46:36.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.657031
2025-11-12T17:46:36.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:46:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:46:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:46:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:46:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:46:36.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:46:19', tmtdew=34.66, humidity=9.62, cloud=0.0, wind=32.55, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:46:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:46:36.957 [DEBUG] [Thread-20065] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:46:37.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:46:37.054 [DEBUG] [Thread-20068] [transport.py] [_log()] starting thread (client mode): 0x149a5690
2025-11-12T17:46:37.054 [DEBUG] [Thread-20068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:46:37.069 [DEBUG] [Thread-20068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:46:37.070 [INFO] [Thread-20068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:46:37.077 [DEBUG] [Thread-20068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:46:37.078 [DEBUG] [Thread-20068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:46:37.078 [DEBUG] [Thread-20068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:46:37.078 [DEBUG] [Thread-20068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:46:37.078 [DEBUG] [Thread-20068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:46:37.078 [DEBUG] [Thread-20068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:46:37.078 [DEBUG] [Thread-20068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:46:37.079 [DEBUG] [Thread-20068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:46:37.079 [DEBUG] [Thread-20068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:46:37.079 [DEBUG] [Thread-20068] [transport.py] [_log()] client lang: <none>
2025-11-12T17:46:37.079 [DEBUG] [Thread-20068] [transport.py] [_log()] server lang: <none>
2025-11-12T17:46:37.079 [DEBUG] [Thread-20068] [transport.py] [_log()] kex follows: False
2025-11-12T17:46:37.079 [DEBUG] [Thread-20068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:46:37.079 [DEBUG] [Thread-20068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:46:37.079 [DEBUG] [Thread-20068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:46:37.080 [DEBUG] [Thread-20068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:46:37.080 [DEBUG] [Thread-20068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:46:37.080 [DEBUG] [Thread-20068] [transport.py] [_log()] Compression: none
2025-11-12T17:46:37.080 [DEBUG] [Thread-20068] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:46:37.136 [DEBUG] [Thread-20068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:46:37.136 [DEBUG] [Thread-20068] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:46:37.137 [DEBUG] [Thread-20068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:46:37.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:46:37.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:46:37.195 [DEBUG] [Thread-20068] [transport.py] [_log()] userauth is OK
2025-11-12T17:46:37.196 [DEBUG] [Thread-20068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:46:37.196 [DEBUG] [Thread-20068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:46:37.196 [DEBUG] [Thread-20068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:46:37.196 [DEBUG] [Thread-20068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:46:37.215 [INFO] [Thread-20068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:46:37.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:46:37.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:46:38.065 [DEBUG] [Thread-20068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:46:38.065 [DEBUG] [Thread-20068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:46:38.113 [DEBUG] [Thread-20068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:46:38.114 [DEBUG] [Thread-20068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:46:38.123 [DEBUG] [Thread-20068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:46:38.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:46:38.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-11-12T17:46:38.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-11-12T17:46:38.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:46:38.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:46:38.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:46:38.160 [DEBUG] [Thread-20068] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:46:42.096 [DEBUG] [Thread-20070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:46:43.684 [DEBUG] [Thread-20071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:46:56.142 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:46:56.143 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:46:57.152 [DEBUG] [Thread-20072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:47:08.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:47:08.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:47:08.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:47:08.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 46, 51), 34.61, 9.55, 0.0, 37.28, 25.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:47:08.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:46:51
2025-11-12T17:47:08.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:47:09.100 [DEBUG] [Thread-20073] [transport.py] [_log()] starting thread (client mode): 0x149ab040
2025-11-12T17:47:09.101 [DEBUG] [Thread-20073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:47:09.119 [DEBUG] [Thread-20073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:47:09.119 [INFO] [Thread-20073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:47:09.122 [DEBUG] [Thread-20073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:47:09.122 [DEBUG] [Thread-20073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] client lang: <none>
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] server lang: <none>
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] kex follows: False
2025-11-12T17:47:09.123 [DEBUG] [Thread-20073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:47:09.124 [DEBUG] [Thread-20073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:47:09.124 [DEBUG] [Thread-20073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:47:09.124 [DEBUG] [Thread-20073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:47:09.124 [DEBUG] [Thread-20073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:47:09.124 [DEBUG] [Thread-20073] [transport.py] [_log()] Compression: none
2025-11-12T17:47:09.124 [DEBUG] [Thread-20073] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:47:09.144 [DEBUG] [Thread-20073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:47:09.145 [DEBUG] [Thread-20073] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:47:09.146 [DEBUG] [Thread-20073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:47:09.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:47:09.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:47:09.148 [DEBUG] [Thread-20073] [transport.py] [_log()] userauth is OK
2025-11-12T17:47:09.148 [DEBUG] [Thread-20073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:47:09.148 [DEBUG] [Thread-20073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:47:09.148 [DEBUG] [Thread-20073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:47:09.148 [DEBUG] [Thread-20073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:47:09.173 [INFO] [Thread-20073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:47:09.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:47:09.816 [DEBUG] [Thread-20073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:47:09.817 [DEBUG] [Thread-20073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:47:09.817 [DEBUG] [Thread-20073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:47:09.858 [DEBUG] [Thread-20073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:47:09.858 [DEBUG] [Thread-20073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:47:09.861 [DEBUG] [Thread-20073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:47:09.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:47:09.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:47:09.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:47:09.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:47:09.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:47:09.884 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:47:09.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:47:09.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:47:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:47:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.657378 -999.00  +24.80  38.24     15   -3.40 1 1 2 1 1   887    0 28.41 -4.93 ----- 36.9 38.2 269.4 47.8 26.4 -24.6 26.3 -23.5 25.9 -23.8 26.4 -23.4
2025-11-12T17:47:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:47:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:47:09.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.657378
2025-11-12T17:47:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:47:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:47:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:47:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:47:09.887 [DEBUG] [Thread-20073] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:47:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:47:09.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:46:51', tmtdew=34.61, humidity=9.55, cloud=0.0, wind=37.28, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:46:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:47:09.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:47:09.981 [DEBUG] [Thread-20076] [transport.py] [_log()] starting thread (client mode): 0x149aab60
2025-11-12T17:47:09.982 [DEBUG] [Thread-20076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:47:09.998 [DEBUG] [Thread-20076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:47:09.999 [INFO] [Thread-20076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:47:10.006 [DEBUG] [Thread-20076] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:47:10.006 [DEBUG] [Thread-20076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:47:10.006 [DEBUG] [Thread-20076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:47:10.006 [DEBUG] [Thread-20076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:47:10.006 [DEBUG] [Thread-20076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:47:10.006 [DEBUG] [Thread-20076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:47:10.006 [DEBUG] [Thread-20076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] client lang: <none>
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] server lang: <none>
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] kex follows: False
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] Compression: none
2025-11-12T17:47:10.007 [DEBUG] [Thread-20076] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:47:10.064 [DEBUG] [Thread-20076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:47:10.064 [DEBUG] [Thread-20076] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:47:10.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:47:10.066 [DEBUG] [Thread-20076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:47:10.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:47:10.120 [DEBUG] [Thread-20076] [transport.py] [_log()] userauth is OK
2025-11-12T17:47:10.120 [DEBUG] [Thread-20076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:47:10.120 [DEBUG] [Thread-20076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:47:10.121 [DEBUG] [Thread-20076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:47:10.121 [DEBUG] [Thread-20076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:47:10.140 [INFO] [Thread-20076] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:47:10.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:47:10.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:47:10.999 [DEBUG] [Thread-20076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:47:11.000 [DEBUG] [Thread-20076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:47:11.048 [DEBUG] [Thread-20076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:47:11.048 [DEBUG] [Thread-20076] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:47:11.057 [DEBUG] [Thread-20076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:47:11.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:47:11.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:47:11.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-11-12T17:47:11.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:47:11.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:47:11.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:47:11.095 [DEBUG] [Thread-20076] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:47:12.192 [DEBUG] [Thread-20078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:47:27.244 [DEBUG] [Thread-20079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:47:41.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:47:41.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:47:41.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:47:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 47, 23), 34.54, 9.58, 0.0, 37.02, 25.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:47:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:47:23
2025-11-12T17:47:41.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:47:42.030 [DEBUG] [Thread-20080] [transport.py] [_log()] starting thread (client mode): 0x149abf40
2025-11-12T17:47:42.030 [DEBUG] [Thread-20080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:47:42.050 [DEBUG] [Thread-20080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:47:42.050 [INFO] [Thread-20080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:47:42.051 [DEBUG] [Thread-20080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:47:42.051 [DEBUG] [Thread-20080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:47:42.051 [DEBUG] [Thread-20080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:47:42.051 [DEBUG] [Thread-20080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:47:42.051 [DEBUG] [Thread-20080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:47:42.051 [DEBUG] [Thread-20080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:47:42.051 [DEBUG] [Thread-20080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:47:42.051 [DEBUG] [Thread-20080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] client lang: <none>
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] server lang: <none>
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] kex follows: False
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] Compression: none
2025-11-12T17:47:42.052 [DEBUG] [Thread-20080] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:47:42.060 [DEBUG] [Thread-20080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:47:42.060 [DEBUG] [Thread-20080] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:47:42.060 [DEBUG] [Thread-20080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:47:42.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:47:42.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:47:42.062 [DEBUG] [Thread-20080] [transport.py] [_log()] userauth is OK
2025-11-12T17:47:42.063 [DEBUG] [Thread-20080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:47:42.063 [DEBUG] [Thread-20080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:47:42.063 [DEBUG] [Thread-20080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:47:42.063 [DEBUG] [Thread-20080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:47:42.087 [INFO] [Thread-20080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:47:42.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:47:42.273 [DEBUG] [Thread-20082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:47:42.738 [DEBUG] [Thread-20080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:47:42.738 [DEBUG] [Thread-20080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:47:42.738 [DEBUG] [Thread-20080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:47:42.779 [DEBUG] [Thread-20080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:47:42.779 [DEBUG] [Thread-20080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:47:42.782 [DEBUG] [Thread-20080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:47:42.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:47:42.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:47:42.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:47:42.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:47:42.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:47:42.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:47:42.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:47:42.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:47:42.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:47:42.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.657725 -999.00  +24.70  37.22     15   -3.50 1 1 2 1 1   887    0 28.32 -7.29 ----- 33.4 37.2 270.8 44.0 26.3 -24.0 26.2 -23.5 25.9 -23.6 26.4 -23.1
2025-11-12T17:47:42.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:47:42.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:47:42.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.657725
2025-11-12T17:47:42.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:47:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:47:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:47:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:47:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:47:42.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:47:23', tmtdew=34.54, humidity=9.58, cloud=0.0, wind=37.02, temperature=25.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:47:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:47:42.809 [DEBUG] [Thread-20080] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:47:42.893 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:47:42.906 [DEBUG] [Thread-20084] [transport.py] [_log()] starting thread (client mode): 0x173e90c0
2025-11-12T17:47:42.906 [DEBUG] [Thread-20084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:47:42.922 [DEBUG] [Thread-20084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:47:42.922 [INFO] [Thread-20084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:47:42.930 [DEBUG] [Thread-20084] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] client lang: <none>
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] server lang: <none>
2025-11-12T17:47:42.931 [DEBUG] [Thread-20084] [transport.py] [_log()] kex follows: False
2025-11-12T17:47:42.932 [DEBUG] [Thread-20084] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:47:42.932 [DEBUG] [Thread-20084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:47:42.932 [DEBUG] [Thread-20084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:47:42.932 [DEBUG] [Thread-20084] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:47:42.932 [DEBUG] [Thread-20084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:47:42.932 [DEBUG] [Thread-20084] [transport.py] [_log()] Compression: none
2025-11-12T17:47:42.932 [DEBUG] [Thread-20084] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:47:42.987 [DEBUG] [Thread-20084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:47:42.988 [DEBUG] [Thread-20084] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:47:42.988 [DEBUG] [Thread-20084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:47:42.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:47:42.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:47:43.044 [DEBUG] [Thread-20084] [transport.py] [_log()] userauth is OK
2025-11-12T17:47:43.044 [DEBUG] [Thread-20084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:47:43.044 [DEBUG] [Thread-20084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:47:43.044 [DEBUG] [Thread-20084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:47:43.044 [DEBUG] [Thread-20084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:47:43.063 [INFO] [Thread-20084] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:47:43.064 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:47:43.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:47:43.718 [DEBUG] [Thread-20086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:47:43.892 [DEBUG] [Thread-20084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:47:43.892 [DEBUG] [Thread-20084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:47:43.940 [DEBUG] [Thread-20084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:47:43.940 [DEBUG] [Thread-20084] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:47:43.949 [DEBUG] [Thread-20084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:47:43.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:47:43.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-11-12T17:47:43.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-11-12T17:47:43.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:47:43.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:47:43.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:47:43.987 [DEBUG] [Thread-20084] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:47:56.284 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:47:56.285 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:47:57.307 [DEBUG] [Thread-20087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:48:12.349 [DEBUG] [Thread-20088 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:48:14.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:48:14.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:48:14.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-11-12T17:48:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 47, 55), 34.6, 9.62, 0.0, 35.17, 25.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:48:14.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:47:55
2025-11-12T17:48:14.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:48:14.909 [DEBUG] [Thread-20089] [transport.py] [_log()] starting thread (client mode): 0x173ebe50
2025-11-12T17:48:14.909 [DEBUG] [Thread-20089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:48:14.919 [DEBUG] [Thread-20089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:48:14.919 [INFO] [Thread-20089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:48:14.921 [DEBUG] [Thread-20089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] client lang: <none>
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] server lang: <none>
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] kex follows: False
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] Compression: none
2025-11-12T17:48:14.922 [DEBUG] [Thread-20089] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:48:14.934 [DEBUG] [Thread-20089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:48:14.935 [DEBUG] [Thread-20089] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:48:14.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:48:14.936 [DEBUG] [Thread-20089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:48:14.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:48:14.937 [DEBUG] [Thread-20089] [transport.py] [_log()] userauth is OK
2025-11-12T17:48:14.937 [DEBUG] [Thread-20089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:48:14.937 [DEBUG] [Thread-20089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:48:14.937 [DEBUG] [Thread-20089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:48:14.937 [DEBUG] [Thread-20089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:48:14.960 [INFO] [Thread-20089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:48:14.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:48:15.579 [DEBUG] [Thread-20089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:48:15.579 [DEBUG] [Thread-20089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:48:15.580 [DEBUG] [Thread-20089] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:48:15.621 [DEBUG] [Thread-20089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:48:15.621 [DEBUG] [Thread-20089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:48:15.624 [DEBUG] [Thread-20089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:48:15.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:48:15.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:48:15.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:48:15.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:48:15.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:48:15.649 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:48:15.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:48:15.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:48:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:48:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.658419 -999.00  +24.80  31.28     15   -3.40 1 1 2 1 1   887    0 28.25 -12.81 ----- 35.6 31.3 275.6 37.5 26.2 -23.8 26.2 -23.3 25.9 -23.6 26.3 -23.1
2025-11-12T17:48:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:48:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:48:15.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.658419
2025-11-12T17:48:15.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:48:15.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:48:15.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:48:15.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:48:15.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:48:15.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:47:55', tmtdew=34.6, humidity=9.62, cloud=0.0, wind=35.17, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:48:07.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:48:15.652 [DEBUG] [Thread-20089] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:48:15.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:48:15.749 [DEBUG] [Thread-20092] [transport.py] [_log()] starting thread (client mode): 0x149a8190
2025-11-12T17:48:15.749 [DEBUG] [Thread-20092] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:48:15.764 [DEBUG] [Thread-20092] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:48:15.764 [INFO] [Thread-20092] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:48:15.772 [DEBUG] [Thread-20092] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] client lang: <none>
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] server lang: <none>
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] kex follows: False
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] Compression: none
2025-11-12T17:48:15.773 [DEBUG] [Thread-20092] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:48:15.835 [DEBUG] [Thread-20092] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:48:15.835 [DEBUG] [Thread-20092] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:48:15.836 [DEBUG] [Thread-20092] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:48:15.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:48:15.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:48:15.892 [DEBUG] [Thread-20092] [transport.py] [_log()] userauth is OK
2025-11-12T17:48:15.892 [DEBUG] [Thread-20092] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:48:15.892 [DEBUG] [Thread-20092] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:48:15.893 [DEBUG] [Thread-20092] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:48:15.893 [DEBUG] [Thread-20092] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:48:15.912 [INFO] [Thread-20092] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:48:15.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:48:15.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:48:16.751 [DEBUG] [Thread-20092] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:48:16.751 [DEBUG] [Thread-20092] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:48:16.799 [DEBUG] [Thread-20092] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:48:16.799 [DEBUG] [Thread-20092] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:48:16.808 [DEBUG] [Thread-20092] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:48:16.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:48:16.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17: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') -> 00000000
2025-11-12T17:48:16.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:48:16.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:48:16.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:48:16.845 [DEBUG] [Thread-20092] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:48:27.391 [DEBUG] [Thread-20094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:48:42.438 [DEBUG] [Thread-20095 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:48:43.746 [DEBUG] [Thread-20096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:48:46.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:48:46.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:48:46.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-11-12T17:48:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 48, 27), 34.61, 9.6, 0.0, 33.19, 25.35, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:48:47.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:48:27
2025-11-12T17:48:47.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:48:47.769 [DEBUG] [Thread-20097] [transport.py] [_log()] starting thread (client mode): 0x149559c0
2025-11-12T17:48:47.769 [DEBUG] [Thread-20097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:48:47.789 [DEBUG] [Thread-20097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:48:47.790 [INFO] [Thread-20097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] client lang: <none>
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] server lang: <none>
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] kex follows: False
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] Compression: none
2025-11-12T17:48:47.793 [DEBUG] [Thread-20097] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:48:47.808 [DEBUG] [Thread-20097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:48:47.809 [DEBUG] [Thread-20097] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:48:47.809 [DEBUG] [Thread-20097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:48:47.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:48:47.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:48:47.811 [DEBUG] [Thread-20097] [transport.py] [_log()] userauth is OK
2025-11-12T17:48:47.812 [DEBUG] [Thread-20097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:48:47.812 [DEBUG] [Thread-20097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:48:47.812 [DEBUG] [Thread-20097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:48:47.812 [DEBUG] [Thread-20097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:48:47.837 [INFO] [Thread-20097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:48:47.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:48:48.474 [DEBUG] [Thread-20097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:48:48.474 [DEBUG] [Thread-20097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:48:48.475 [DEBUG] [Thread-20097] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:48:48.516 [DEBUG] [Thread-20097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:48:48.516 [DEBUG] [Thread-20097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:48:48.519 [DEBUG] [Thread-20097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:48:48.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:48:48.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:48:48.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:48:48.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:48:48.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:48:48.545 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:48:48.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:48:48.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:48:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:48:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.658767 -999.00  +24.90  21.29     15   -3.40 1 1 1 1 1   887    0 28.07 -16.51 ----- 38.3 21.3 270.8 40.5 26.2 -23.6 26.2 -23.2 26.0 -24.2 26.2 -22.7
2025-11-12T17:48:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:48:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:48:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.658767
2025-11-12T17:48:48.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:48:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:48:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:48:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:48:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:48:48.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:48:27', tmtdew=34.61, humidity=9.6, cloud=0.0, wind=33.19, temperature=25.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:48:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:48:48.548 [DEBUG] [Thread-20097] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:48:48.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:48:48.641 [DEBUG] [Thread-20100] [transport.py] [_log()] starting thread (client mode): 0x14955b70
2025-11-12T17:48:48.641 [DEBUG] [Thread-20100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:48:48.656 [DEBUG] [Thread-20100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:48:48.656 [INFO] [Thread-20100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:48:48.663 [DEBUG] [Thread-20100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:48:48.663 [DEBUG] [Thread-20100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] client lang: <none>
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] server lang: <none>
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] kex follows: False
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] Compression: none
2025-11-12T17:48:48.664 [DEBUG] [Thread-20100] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:48:48.720 [DEBUG] [Thread-20100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:48:48.720 [DEBUG] [Thread-20100] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:48:48.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:48:48.721 [DEBUG] [Thread-20100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:48:48.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:48:48.775 [DEBUG] [Thread-20100] [transport.py] [_log()] userauth is OK
2025-11-12T17:48:48.776 [DEBUG] [Thread-20100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:48:48.776 [DEBUG] [Thread-20100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:48:48.776 [DEBUG] [Thread-20100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:48:48.776 [DEBUG] [Thread-20100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:48:48.799 [INFO] [Thread-20100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:48:48.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:48:48.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:48:49.639 [DEBUG] [Thread-20100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:48:49.640 [DEBUG] [Thread-20100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:48:49.688 [DEBUG] [Thread-20100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:48:49.688 [DEBUG] [Thread-20100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:48:49.697 [DEBUG] [Thread-20100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:48:49.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:48:49.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:48:49.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-11-12T17:48:49.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:48:49.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:48:49.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:48:49.734 [DEBUG] [Thread-20100] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:48:56.426 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:48:56.427 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:48:57.473 [DEBUG] [Thread-20102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:49:12.528 [DEBUG] [Thread-20103 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:49:19.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:49:19.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:49:19.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-11-12T17:49:20.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 48, 59), 34.61, 9.62, 0.0, 34.28, 25.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:49:20.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:48:59
2025-11-12T17:49:20.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:49:20.719 [DEBUG] [Thread-20104] [transport.py] [_log()] starting thread (client mode): 0x14956830
2025-11-12T17:49:20.719 [DEBUG] [Thread-20104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:49:20.739 [DEBUG] [Thread-20104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:49:20.740 [INFO] [Thread-20104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] client lang: <none>
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] server lang: <none>
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] kex follows: False
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] Compression: none
2025-11-12T17:49:20.743 [DEBUG] [Thread-20104] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:49:20.757 [DEBUG] [Thread-20104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:49:20.758 [DEBUG] [Thread-20104] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:49:20.758 [DEBUG] [Thread-20104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:49:20.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:49:20.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:49:20.802 [DEBUG] [Thread-20104] [transport.py] [_log()] userauth is OK
2025-11-12T17:49:20.802 [DEBUG] [Thread-20104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:49:20.802 [DEBUG] [Thread-20104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:49:20.802 [DEBUG] [Thread-20104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:49:20.802 [DEBUG] [Thread-20104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:49:20.832 [INFO] [Thread-20104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:49:20.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:49:21.475 [DEBUG] [Thread-20104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:49:21.475 [DEBUG] [Thread-20104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:49:21.475 [DEBUG] [Thread-20104] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:49:21.516 [DEBUG] [Thread-20104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:49:21.516 [DEBUG] [Thread-20104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:49:21.517 [DEBUG] [Thread-20104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:49:21.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:49:21.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:49:21.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:49:21.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:49:21.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:49:21.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:49:21.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:49:21.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:49:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:49:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.659114 -999.00  +24.90  34.93     15   -3.40 1 2 2 1 1   887    0 27.56 -19.96 ----- 35.7 34.9 276.2 45.2 26.2 -24.0 26.2 -23.3 25.9 -22.7 26.2 -23.1
2025-11-12T17:49:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:49:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:49:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.659114
2025-11-12T17:49:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:49:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:49:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:49:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:49:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T17:49:21.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:48:59', tmtdew=34.61, humidity=9.62, cloud=0.0, wind=34.28, temperature=25.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:49:07.450', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:49:21.535 [DEBUG] [Thread-20104] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:49:21.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:49:21.622 [DEBUG] [Thread-20107] [transport.py] [_log()] starting thread (client mode): 0x149ab430
2025-11-12T17:49:21.622 [DEBUG] [Thread-20107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:49:21.637 [DEBUG] [Thread-20107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:49:21.637 [INFO] [Thread-20107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:49:21.644 [DEBUG] [Thread-20107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:49:21.644 [DEBUG] [Thread-20107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] client lang: <none>
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] server lang: <none>
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] kex follows: False
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] Compression: none
2025-11-12T17:49:21.645 [DEBUG] [Thread-20107] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:49:21.702 [DEBUG] [Thread-20107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:49:21.702 [DEBUG] [Thread-20107] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:49:21.702 [DEBUG] [Thread-20107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:49:21.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:49:21.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:49:21.759 [DEBUG] [Thread-20107] [transport.py] [_log()] userauth is OK
2025-11-12T17:49:21.759 [DEBUG] [Thread-20107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:49:21.759 [DEBUG] [Thread-20107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:49:21.759 [DEBUG] [Thread-20107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:49:21.759 [DEBUG] [Thread-20107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:49:21.777 [INFO] [Thread-20107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:49:21.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:49:21.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:49:22.618 [DEBUG] [Thread-20107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:49:22.618 [DEBUG] [Thread-20107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:49:22.667 [DEBUG] [Thread-20107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:49:22.667 [DEBUG] [Thread-20107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:49:22.677 [DEBUG] [Thread-20107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:49:22.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:49:22.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-11-12T17:49:22.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-11-12T17:49:22.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:49:22.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:49:22.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:49:22.714 [DEBUG] [Thread-20107] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:49:27.564 [DEBUG] [Thread-20109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:49:42.614 [DEBUG] [Thread-20110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:49:43.789 [DEBUG] [Thread-20111 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:49:52.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:49:52.730 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:49:52.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-11-12T17:49:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 49, 31), 34.63, 9.6, 0.0, 36.49, 25.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:49:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:49:31
2025-11-12T17:49:53.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:49:53.642 [DEBUG] [Thread-20112] [transport.py] [_log()] starting thread (client mode): 0x14954dc0
2025-11-12T17:49:53.642 [DEBUG] [Thread-20112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:49:53.662 [DEBUG] [Thread-20112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:49:53.662 [INFO] [Thread-20112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:49:53.665 [DEBUG] [Thread-20112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:49:53.665 [DEBUG] [Thread-20112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:49:53.665 [DEBUG] [Thread-20112] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] client lang: <none>
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] server lang: <none>
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] kex follows: False
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] Compression: none
2025-11-12T17:49:53.666 [DEBUG] [Thread-20112] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:49:53.684 [DEBUG] [Thread-20112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:49:53.684 [DEBUG] [Thread-20112] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:49:53.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:49:53.686 [DEBUG] [Thread-20112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:49:53.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:49:53.687 [DEBUG] [Thread-20112] [transport.py] [_log()] userauth is OK
2025-11-12T17:49:53.688 [DEBUG] [Thread-20112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:49:53.688 [DEBUG] [Thread-20112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:49:53.688 [DEBUG] [Thread-20112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:49:53.688 [DEBUG] [Thread-20112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:49:53.705 [INFO] [Thread-20112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:49:53.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:49:54.330 [DEBUG] [Thread-20112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:49:54.331 [DEBUG] [Thread-20112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:49:54.331 [DEBUG] [Thread-20112] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:49:54.372 [DEBUG] [Thread-20112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:49:54.372 [DEBUG] [Thread-20112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:49:54.375 [DEBUG] [Thread-20112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:49:54.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:49:54.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:49:54.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:49:54.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:49:54.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:49:54.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:49:54.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:49:54.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:49:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:49:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.659461 -999.00  +24.90  35.11     15   -3.40 1 1 2 1 1   887    0 28.23 -21.24 ----- 33.6 35.1 273.2 43.6 26.2 -23.8 26.2 -23.3 26.0 -23.4 26.2 -23.0
2025-11-12T17:49:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:49:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:49:54.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.659461
2025-11-12T17:49:54.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:49:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:49:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:49:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:49:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:49:54.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:49:31', tmtdew=34.63, humidity=9.6, cloud=0.0, wind=36.49, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:49:37.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:49:54.403 [DEBUG] [Thread-20112] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:49:54.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:49:54.499 [DEBUG] [Thread-20115] [transport.py] [_log()] starting thread (client mode): 0x14956500
2025-11-12T17:49:54.499 [DEBUG] [Thread-20115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:49:54.514 [DEBUG] [Thread-20115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:49:54.515 [INFO] [Thread-20115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:49:54.522 [DEBUG] [Thread-20115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] client lang: <none>
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] server lang: <none>
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] kex follows: False
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] Compression: none
2025-11-12T17:49:54.523 [DEBUG] [Thread-20115] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:49:54.580 [DEBUG] [Thread-20115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:49:54.581 [DEBUG] [Thread-20115] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:49:54.581 [DEBUG] [Thread-20115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:49:54.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:49:54.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:49:54.636 [DEBUG] [Thread-20115] [transport.py] [_log()] userauth is OK
2025-11-12T17:49:54.636 [DEBUG] [Thread-20115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:49:54.636 [DEBUG] [Thread-20115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:49:54.636 [DEBUG] [Thread-20115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:49:54.636 [DEBUG] [Thread-20115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:49:54.655 [INFO] [Thread-20115] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:49:54.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:49:54.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:49:55.501 [DEBUG] [Thread-20115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:49:55.501 [DEBUG] [Thread-20115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:49:55.550 [DEBUG] [Thread-20115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:49:55.550 [DEBUG] [Thread-20115] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:49:55.559 [DEBUG] [Thread-20115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:49:55.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:49:55.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:49:55.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:49:55.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:49:55.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:49:55.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:49:55.595 [DEBUG] [Thread-20115] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:49:56.567 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:49:56.568 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:49:57.652 [DEBUG] [Thread-20117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:50:12.697 [DEBUG] [Thread-20118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:50:25.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:50:25.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:50:25.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-11-12T17:50:26.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 50, 3), 34.56, 9.63, 0.0, 32.87, 25.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:50:26.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:50:03
2025-11-12T17:50:26.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:50:26.539 [DEBUG] [Thread-20119] [transport.py] [_log()] starting thread (client mode): 0x14955270
2025-11-12T17:50:26.539 [DEBUG] [Thread-20119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:50:26.561 [DEBUG] [Thread-20119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:50:26.561 [INFO] [Thread-20119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:50:26.562 [DEBUG] [Thread-20119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:50:26.562 [DEBUG] [Thread-20119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:50:26.562 [DEBUG] [Thread-20119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:50:26.562 [DEBUG] [Thread-20119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:50:26.562 [DEBUG] [Thread-20119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] client lang: <none>
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] server lang: <none>
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] kex follows: False
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] Compression: none
2025-11-12T17:50:26.563 [DEBUG] [Thread-20119] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:50:26.571 [DEBUG] [Thread-20119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:50:26.572 [DEBUG] [Thread-20119] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:50:26.572 [DEBUG] [Thread-20119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:50:26.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:50:26.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:50:26.574 [DEBUG] [Thread-20119] [transport.py] [_log()] userauth is OK
2025-11-12T17:50:26.574 [DEBUG] [Thread-20119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:50:26.574 [DEBUG] [Thread-20119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:50:26.574 [DEBUG] [Thread-20119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:50:26.574 [DEBUG] [Thread-20119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:50:26.592 [INFO] [Thread-20119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:50:26.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:50:27.234 [DEBUG] [Thread-20119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:50:27.234 [DEBUG] [Thread-20119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:50:27.234 [DEBUG] [Thread-20119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:50:27.275 [DEBUG] [Thread-20119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:50:27.275 [DEBUG] [Thread-20119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:50:27.281 [DEBUG] [Thread-20119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:50:27.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:50:27.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:50:27.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:50:27.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:50:27.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:50:27.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:50:27.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:50:27.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:50:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:50:27.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.659808 -999.00  +25.00  28.89     14   -3.40 1 1 1 1 1   887    0 27.69 -21.14 ----- 25.0 28.9 269.2 38.4 26.2 -23.6 26.2 -23.5 25.9 -23.6 26.2 -23.1
2025-11-12T17:50:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:50:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:50:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.659808
2025-11-12T17:50:27.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:50:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:50:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:50:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:50:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:50:27.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:50:03', tmtdew=34.56, humidity=9.63, cloud=0.0, wind=32.87, temperature=25.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:50:07.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:50:27.306 [DEBUG] [Thread-20119] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:50:27.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:50:27.401 [DEBUG] [Thread-20122] [transport.py] [_log()] starting thread (client mode): 0x173e8100
2025-11-12T17:50:27.401 [DEBUG] [Thread-20122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:50:27.417 [DEBUG] [Thread-20122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:50:27.417 [INFO] [Thread-20122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:50:27.428 [DEBUG] [Thread-20122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:50:27.429 [DEBUG] [Thread-20122] [transport.py] [_log()] client lang: <none>
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] server lang: <none>
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] kex follows: False
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] Compression: none
2025-11-12T17:50:27.430 [DEBUG] [Thread-20122] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:50:27.492 [DEBUG] [Thread-20122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:50:27.492 [DEBUG] [Thread-20122] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:50:27.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:50:27.494 [DEBUG] [Thread-20122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:50:27.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:50:27.548 [DEBUG] [Thread-20122] [transport.py] [_log()] userauth is OK
2025-11-12T17:50:27.548 [DEBUG] [Thread-20122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:50:27.548 [DEBUG] [Thread-20122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:50:27.548 [DEBUG] [Thread-20122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:50:27.548 [DEBUG] [Thread-20122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:50:27.573 [INFO] [Thread-20122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:50:27.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:50:27.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:50:27.732 [DEBUG] [Thread-20124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:50:28.466 [DEBUG] [Thread-20122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:50:28.466 [DEBUG] [Thread-20122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:50:28.513 [DEBUG] [Thread-20122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:50:28.513 [DEBUG] [Thread-20122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:50:28.521 [DEBUG] [Thread-20122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:50:28.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:50:28.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-11-12T17:50:28.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-11-12T17:50:28.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:50:28.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:50:28.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:50:28.559 [DEBUG] [Thread-20122] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:50:42.784 [DEBUG] [Thread-20125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:50:43.821 [DEBUG] [Thread-20126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:50:56.708 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:50:56.710 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:50:57.823 [DEBUG] [Thread-20127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:50:58.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:50:58.572 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:50:58.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-11-12T17:50:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 50, 35), 34.6, 9.65, 0.0, 30.91, 25.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:50:59.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:50:35
2025-11-12T17:50:59.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:50:59.475 [DEBUG] [Thread-20128] [transport.py] [_log()] starting thread (client mode): 0x14955a20
2025-11-12T17:50:59.476 [DEBUG] [Thread-20128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:50:59.496 [DEBUG] [Thread-20128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:50:59.496 [INFO] [Thread-20128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] client lang: <none>
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] server lang: <none>
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] kex follows: False
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:50:59.499 [DEBUG] [Thread-20128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:50:59.500 [DEBUG] [Thread-20128] [transport.py] [_log()] Compression: none
2025-11-12T17:50:59.500 [DEBUG] [Thread-20128] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:50:59.512 [DEBUG] [Thread-20128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:50:59.513 [DEBUG] [Thread-20128] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:50:59.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:50:59.514 [DEBUG] [Thread-20128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:50:59.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:50:59.557 [DEBUG] [Thread-20128] [transport.py] [_log()] userauth is OK
2025-11-12T17:50:59.557 [DEBUG] [Thread-20128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:50:59.557 [DEBUG] [Thread-20128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:50:59.557 [DEBUG] [Thread-20128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:50:59.557 [DEBUG] [Thread-20128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:50:59.583 [INFO] [Thread-20128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:50:59.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:51:00.219 [DEBUG] [Thread-20128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:51:00.219 [DEBUG] [Thread-20128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:51:00.220 [DEBUG] [Thread-20128] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:51:00.260 [DEBUG] [Thread-20128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:51:00.260 [DEBUG] [Thread-20128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:51:00.265 [DEBUG] [Thread-20128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:51:00.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:51:00.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:51:00.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:51:00.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:51:00.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:51:00.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:51:00.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:51:00.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:51:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:51:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.660156 -999.00  +25.10  29.21     14   -3.40 1 1 1 1 1   887    0 28.08 -22.39 ----- 21.8 29.2 280.4 35.2 26.2 -23.8 26.2 -23.5 26.0 -23.4 26.3 -23.1
2025-11-12T17:51:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:51:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:51:00.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.660156
2025-11-12T17:51:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:51:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:51:00.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:51:00.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:51:00.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:51:00.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:50:35', tmtdew=34.6, humidity=9.65, cloud=0.0, wind=30.91, temperature=25.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:50:37.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:51:00.290 [DEBUG] [Thread-20128] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:51: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-11-12T17:51:00.385 [DEBUG] [Thread-20131] [transport.py] [_log()] starting thread (client mode): 0x149a9540
2025-11-12T17:51:00.386 [DEBUG] [Thread-20131] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:51:00.400 [DEBUG] [Thread-20131] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:51:00.400 [INFO] [Thread-20131] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:51:00.408 [DEBUG] [Thread-20131] [transport.py] [_log()] client lang: <none>
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] server lang: <none>
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] kex follows: False
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] Compression: none
2025-11-12T17:51:00.409 [DEBUG] [Thread-20131] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:51:00.468 [DEBUG] [Thread-20131] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:51:00.469 [DEBUG] [Thread-20131] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:51:00.469 [DEBUG] [Thread-20131] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:51:00.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:51:00.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:51:00.528 [DEBUG] [Thread-20131] [transport.py] [_log()] userauth is OK
2025-11-12T17:51:00.528 [DEBUG] [Thread-20131] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:51:00.528 [DEBUG] [Thread-20131] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:51:00.528 [DEBUG] [Thread-20131] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:51:00.528 [DEBUG] [Thread-20131] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:51:00.547 [INFO] [Thread-20131] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:51:00.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:51:00.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:51:01.394 [DEBUG] [Thread-20131] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:51:01.394 [DEBUG] [Thread-20131] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:51:01.441 [DEBUG] [Thread-20131] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:51:01.442 [DEBUG] [Thread-20131] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:51:01.451 [DEBUG] [Thread-20131] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:51:01.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:51:01.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')
2025-11-12T17:51: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-11-12T17:51:01.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:51:01.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:51:01.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:51:01.487 [DEBUG] [Thread-20131] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:51:12.861 [DEBUG] [Thread-20133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:51:27.910 [DEBUG] [Thread-20134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:51:31.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:51:31.505 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:51:31.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:51:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 51, 7), 34.67, 9.6, 0.0, 32.47, 25.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:51:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:51:07
2025-11-12T17:51:32.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:51:32.408 [DEBUG] [Thread-20135] [transport.py] [_log()] starting thread (client mode): 0x149a9390
2025-11-12T17:51:32.408 [DEBUG] [Thread-20135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:51:32.428 [DEBUG] [Thread-20135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:51:32.428 [INFO] [Thread-20135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] client lang: <none>
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] server lang: <none>
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] kex follows: False
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] Compression: none
2025-11-12T17:51:32.431 [DEBUG] [Thread-20135] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:51:32.450 [DEBUG] [Thread-20135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:51:32.450 [DEBUG] [Thread-20135] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:51:32.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:51:32.451 [DEBUG] [Thread-20135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:51:32.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:51:32.453 [DEBUG] [Thread-20135] [transport.py] [_log()] userauth is OK
2025-11-12T17:51:32.454 [DEBUG] [Thread-20135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:51:32.454 [DEBUG] [Thread-20135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:51:32.454 [DEBUG] [Thread-20135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:51:32.454 [DEBUG] [Thread-20135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:51:32.471 [INFO] [Thread-20135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:51:32.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:51:33.052 [DEBUG] [Thread-20135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:51:33.053 [DEBUG] [Thread-20135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:51:33.053 [DEBUG] [Thread-20135] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:51:33.093 [DEBUG] [Thread-20135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:51:33.094 [DEBUG] [Thread-20135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:51:33.097 [DEBUG] [Thread-20135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:51:33.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:51:33.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:51:33.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:51:33.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:51:33.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:51:33.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:51:33.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:51:33.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:51:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:51:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.660503 -999.00  +25.00  30.84     14   -3.40 1 1 2 1 1   887    0 27.75 -21.50 ----- 23.7 30.8 273.6 35.4 26.2 -24.3 26.2 -23.6 26.0 -22.9 26.3 -23.1
2025-11-12T17:51:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:51:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:51:33.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.660503
2025-11-12T17:51:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:51:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:51:33.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:51:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:51:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:51:33.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:51:07', tmtdew=34.67, humidity=9.6, cloud=0.0, wind=32.47, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:51:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:51:33.116 [DEBUG] [Thread-20135] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:51:33.199 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:51:33.213 [DEBUG] [Thread-20138] [transport.py] [_log()] starting thread (client mode): 0x149a8f40
2025-11-12T17:51:33.213 [DEBUG] [Thread-20138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:51:33.228 [DEBUG] [Thread-20138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:51:33.228 [INFO] [Thread-20138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] client lang: <none>
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] server lang: <none>
2025-11-12T17:51:33.236 [DEBUG] [Thread-20138] [transport.py] [_log()] kex follows: False
2025-11-12T17:51:33.237 [DEBUG] [Thread-20138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:51:33.237 [DEBUG] [Thread-20138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:51:33.237 [DEBUG] [Thread-20138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:51:33.237 [DEBUG] [Thread-20138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:51:33.237 [DEBUG] [Thread-20138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:51:33.237 [DEBUG] [Thread-20138] [transport.py] [_log()] Compression: none
2025-11-12T17:51:33.237 [DEBUG] [Thread-20138] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:51:33.301 [DEBUG] [Thread-20138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:51:33.302 [DEBUG] [Thread-20138] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:51:33.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:51:33.303 [DEBUG] [Thread-20138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:51:33.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:51:33.360 [DEBUG] [Thread-20138] [transport.py] [_log()] userauth is OK
2025-11-12T17:51:33.360 [DEBUG] [Thread-20138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:51:33.360 [DEBUG] [Thread-20138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:51:33.360 [DEBUG] [Thread-20138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:51:33.361 [DEBUG] [Thread-20138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:51:33.380 [INFO] [Thread-20138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:51:33.381 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:51:33.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:51:34.231 [DEBUG] [Thread-20138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:51:34.231 [DEBUG] [Thread-20138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:51:34.278 [DEBUG] [Thread-20138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:51:34.279 [DEBUG] [Thread-20138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:51:34.288 [DEBUG] [Thread-20138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:51:34.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:51:34.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:51:34.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T17:51:34.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:51:34.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:51:34.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:51:34.325 [DEBUG] [Thread-20138] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:51:42.946 [DEBUG] [Thread-20140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:51:43.854 [DEBUG] [Thread-20141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:51:56.852 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:51:56.853 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:51:57.997 [DEBUG] [Thread-20142 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:52:04.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:52:04.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:52:04.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-11-12T17:52:04.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 51, 39), 34.67, 9.6, 0.0, 33.05, 25.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:52:04.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:51:39
2025-11-12T17:52:05.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:52:05.255 [DEBUG] [Thread-20143] [transport.py] [_log()] starting thread (client mode): 0x14956560
2025-11-12T17:52:05.255 [DEBUG] [Thread-20143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:52:05.270 [DEBUG] [Thread-20143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:52:05.270 [INFO] [Thread-20143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:52:05.273 [DEBUG] [Thread-20143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:52:05.273 [DEBUG] [Thread-20143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:52:05.273 [DEBUG] [Thread-20143] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:52:05.273 [DEBUG] [Thread-20143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] client lang: <none>
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] server lang: <none>
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] kex follows: False
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] Compression: none
2025-11-12T17:52:05.274 [DEBUG] [Thread-20143] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:52:05.291 [DEBUG] [Thread-20143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:52:05.292 [DEBUG] [Thread-20143] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:52:05.292 [DEBUG] [Thread-20143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:52:05.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:52:05.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:52:05.294 [DEBUG] [Thread-20143] [transport.py] [_log()] userauth is OK
2025-11-12T17:52:05.295 [DEBUG] [Thread-20143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:52:05.295 [DEBUG] [Thread-20143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:52:05.295 [DEBUG] [Thread-20143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:52:05.295 [DEBUG] [Thread-20143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:52:05.312 [INFO] [Thread-20143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:52:05.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:52:05.927 [DEBUG] [Thread-20143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:52:05.927 [DEBUG] [Thread-20143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:52:05.928 [DEBUG] [Thread-20143] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:52:05.969 [DEBUG] [Thread-20143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:52:05.969 [DEBUG] [Thread-20143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:52:05.972 [DEBUG] [Thread-20143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:52:05.984 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:52:05.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:52:05.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:52:05.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:52:05.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:52:05.996 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:52:05.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:52:05.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:52:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:52:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.660850 -999.00  +25.00  32.05     14   -3.40 1 1 2 1 1   887    0 27.83 -23.04 ----- 34.7 32.0 274.8 36.2 26.2 -24.0 26.2 -23.7 26.0 -23.9 26.3 -23.3
2025-11-12T17:52:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:52:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:52:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.660850
2025-11-12T17:52:05.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:52:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:52:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:52:05.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:52:05.998 [DEBUG] [Thread-20143] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:52:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:52:05.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:51:39', tmtdew=34.67, humidity=9.6, cloud=0.0, wind=33.05, temperature=25.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:51:37.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:52:06.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:52:06.093 [DEBUG] [Thread-20146] [transport.py] [_log()] starting thread (client mode): 0x14956e00
2025-11-12T17:52:06.093 [DEBUG] [Thread-20146] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:52:06.107 [DEBUG] [Thread-20146] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:52:06.107 [INFO] [Thread-20146] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] client lang: <none>
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] server lang: <none>
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] kex follows: False
2025-11-12T17:52:06.115 [DEBUG] [Thread-20146] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:52:06.116 [DEBUG] [Thread-20146] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:52:06.116 [DEBUG] [Thread-20146] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:52:06.116 [DEBUG] [Thread-20146] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:52:06.116 [DEBUG] [Thread-20146] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:52:06.116 [DEBUG] [Thread-20146] [transport.py] [_log()] Compression: none
2025-11-12T17:52:06.116 [DEBUG] [Thread-20146] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:52:06.176 [DEBUG] [Thread-20146] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:52:06.176 [DEBUG] [Thread-20146] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:52:06.177 [DEBUG] [Thread-20146] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:52:06.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:52:06.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:52:06.232 [DEBUG] [Thread-20146] [transport.py] [_log()] userauth is OK
2025-11-12T17:52:06.232 [DEBUG] [Thread-20146] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:52:06.232 [DEBUG] [Thread-20146] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:52:06.232 [DEBUG] [Thread-20146] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:52:06.232 [DEBUG] [Thread-20146] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:52:06.250 [INFO] [Thread-20146] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:52:06.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:52:06.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:52:07.054 [DEBUG] [Thread-20146] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:52:07.055 [DEBUG] [Thread-20146] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:52:07.103 [DEBUG] [Thread-20146] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:52:07.103 [DEBUG] [Thread-20146] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:52:07.112 [DEBUG] [Thread-20146] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:52:07.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:52:07.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-11-12T17:52:07.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-11-12T17:52:07.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:52:07.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:52:07.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:52:07.149 [DEBUG] [Thread-20146] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:52:13.032 [DEBUG] [Thread-20148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:52:28.072 [DEBUG] [Thread-20149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:52:37.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:52:37.172 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:52:37.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:52:37.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 52, 11), 34.67, 9.58, 0.0, 29.64, 25.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:52:37.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:52:11
2025-11-12T17:52:37.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:52:38.077 [DEBUG] [Thread-20150] [transport.py] [_log()] starting thread (client mode): 0x149a8520
2025-11-12T17:52:38.077 [DEBUG] [Thread-20150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:52:38.096 [DEBUG] [Thread-20150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:52:38.097 [INFO] [Thread-20150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] client lang: <none>
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] server lang: <none>
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] kex follows: False
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] Compression: none
2025-11-12T17:52:38.098 [DEBUG] [Thread-20150] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:52:38.106 [DEBUG] [Thread-20150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:52:38.107 [DEBUG] [Thread-20150] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:52:38.107 [DEBUG] [Thread-20150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:52:38.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:52:38.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:52:38.108 [DEBUG] [Thread-20150] [transport.py] [_log()] userauth is OK
2025-11-12T17:52:38.109 [DEBUG] [Thread-20150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:52:38.109 [DEBUG] [Thread-20150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:52:38.109 [DEBUG] [Thread-20150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:52:38.109 [DEBUG] [Thread-20150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:52:38.129 [INFO] [Thread-20150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:52:38.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:52:38.714 [DEBUG] [Thread-20150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:52:38.715 [DEBUG] [Thread-20150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:52:38.715 [DEBUG] [Thread-20150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:52:38.756 [DEBUG] [Thread-20150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:52:38.756 [DEBUG] [Thread-20150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:52:38.759 [DEBUG] [Thread-20150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:52:38.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:52:38.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:52:38.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:52:38.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:52:38.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:52:38.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:52:38.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:52:38.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:52:38.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:52:38.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.661197 -999.00  +24.90  32.50     15   -3.40 1 1 2 1 1   887    0 27.95 -23.38 ----- 28.4 32.5 278.6 40.3 26.2 -24.1 26.2 -23.9 25.9 -23.7 26.3 -23.3
2025-11-12T17:52:38.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:52:38.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:52:38.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.661197
2025-11-12T17:52:38.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:52:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:52:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:52:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:52:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:52:38.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:52:11', tmtdew=34.67, humidity=9.58, cloud=0.0, wind=29.64, temperature=25.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:52:07.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:52:38.787 [DEBUG] [Thread-20150] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:52:38.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:52:38.883 [DEBUG] [Thread-20153] [transport.py] [_log()] starting thread (client mode): 0x173eb0a0
2025-11-12T17:52:38.883 [DEBUG] [Thread-20153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:52:38.897 [DEBUG] [Thread-20153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:52:38.898 [INFO] [Thread-20153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:52:38.905 [DEBUG] [Thread-20153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:52:38.905 [DEBUG] [Thread-20153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:52:38.905 [DEBUG] [Thread-20153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:52:38.905 [DEBUG] [Thread-20153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:52:38.905 [DEBUG] [Thread-20153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] client lang: <none>
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] server lang: <none>
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] kex follows: False
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:52:38.906 [DEBUG] [Thread-20153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:52:38.907 [DEBUG] [Thread-20153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:52:38.907 [DEBUG] [Thread-20153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:52:38.907 [DEBUG] [Thread-20153] [transport.py] [_log()] Compression: none
2025-11-12T17:52:38.907 [DEBUG] [Thread-20153] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:52:38.963 [DEBUG] [Thread-20153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:52:38.964 [DEBUG] [Thread-20153] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:52:38.964 [DEBUG] [Thread-20153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:52:38.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:52:38.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:52:39.020 [DEBUG] [Thread-20153] [transport.py] [_log()] userauth is OK
2025-11-12T17:52:39.020 [DEBUG] [Thread-20153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:52:39.020 [DEBUG] [Thread-20153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:52:39.020 [DEBUG] [Thread-20153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:52:39.021 [DEBUG] [Thread-20153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:52:39.039 [INFO] [Thread-20153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:52:39.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:52:39.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:52:39.859 [DEBUG] [Thread-20153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:52:39.859 [DEBUG] [Thread-20153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:52:39.908 [DEBUG] [Thread-20153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:52:39.908 [DEBUG] [Thread-20153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:52:39.917 [DEBUG] [Thread-20153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:52:39.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:52: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-11-12T17:52:39.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-11-12T17:52:39.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:52:39.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:52:39.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:52:39.954 [DEBUG] [Thread-20153] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:52:43.106 [DEBUG] [Thread-20155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:52:43.888 [DEBUG] [Thread-20156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:52:56.993 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:52:56.994 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:52:58.162 [DEBUG] [Thread-20157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:53:09.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:53:09.959 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:53:09.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T17:53:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 52, 43), 34.65, 9.65, 0.0, 31.44, 25.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:53:10.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:52:43
2025-11-12T17:53:10.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:53:10.887 [DEBUG] [Thread-20158] [transport.py] [_log()] starting thread (client mode): 0x149ab970
2025-11-12T17:53:10.887 [DEBUG] [Thread-20158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:53:10.905 [DEBUG] [Thread-20158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:53:10.905 [INFO] [Thread-20158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] client lang: <none>
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] server lang: <none>
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] kex follows: False
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] Compression: none
2025-11-12T17:53:10.908 [DEBUG] [Thread-20158] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:53:10.924 [DEBUG] [Thread-20158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:53:10.924 [DEBUG] [Thread-20158] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:53:10.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:53:10.925 [DEBUG] [Thread-20158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:53:10.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:53:10.926 [DEBUG] [Thread-20158] [transport.py] [_log()] userauth is OK
2025-11-12T17:53:10.926 [DEBUG] [Thread-20158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:53:10.926 [DEBUG] [Thread-20158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:53:10.926 [DEBUG] [Thread-20158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:53:10.926 [DEBUG] [Thread-20158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:53:10.939 [INFO] [Thread-20158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:53:10.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:53:11.504 [DEBUG] [Thread-20158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:53:11.504 [DEBUG] [Thread-20158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:53:11.504 [DEBUG] [Thread-20158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:53:11.545 [DEBUG] [Thread-20158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:53:11.545 [DEBUG] [Thread-20158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:53:11.548 [DEBUG] [Thread-20158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:53:11.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:53:11.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:53:11.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:53:11.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:53:11.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:53:11.566 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:53:11.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:53:11.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:53:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:53:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.661892 -999.00  +25.00  31.41     14   -3.50 1 1 2 1 1   887    0 27.94 -23.87 ----- 30.0 31.4 279.6 38.2 26.2 -24.6 26.2 -23.8 26.0 -23.7 26.4 -23.3
2025-11-12T17:53:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:53:11.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:53:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.661892
2025-11-12T17:53:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:53:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:53:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:53:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:53:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:53:11.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:52:43', tmtdew=34.65, humidity=9.65, cloud=0.0, wind=31.44, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:53:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:53:11.568 [DEBUG] [Thread-20158] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:53:11.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:53:11.653 [DEBUG] [Thread-20161] [transport.py] [_log()] starting thread (client mode): 0x47f1b1f0
2025-11-12T17:53:11.653 [DEBUG] [Thread-20161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:53:11.668 [DEBUG] [Thread-20161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:53:11.668 [INFO] [Thread-20161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] client lang: <none>
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] server lang: <none>
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] kex follows: False
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] Compression: none
2025-11-12T17:53:11.676 [DEBUG] [Thread-20161] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:53:11.734 [DEBUG] [Thread-20161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:53:11.735 [DEBUG] [Thread-20161] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:53:11.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:53:11.735 [DEBUG] [Thread-20161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:53:11.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:53:11.791 [DEBUG] [Thread-20161] [transport.py] [_log()] userauth is OK
2025-11-12T17:53:11.791 [DEBUG] [Thread-20161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:53:11.791 [DEBUG] [Thread-20161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:53:11.791 [DEBUG] [Thread-20161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:53:11.791 [DEBUG] [Thread-20161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:53:11.809 [INFO] [Thread-20161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:53:11.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:53:11.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:53:12.642 [DEBUG] [Thread-20161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:53:12.643 [DEBUG] [Thread-20161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:53:12.690 [DEBUG] [Thread-20161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:53:12.690 [DEBUG] [Thread-20161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:53:12.698 [DEBUG] [Thread-20161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:53:12.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:53:12.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-11-12T17:53:12.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-11-12T17:53:12.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:53:12.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:53:12.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:53:12.730 [DEBUG] [Thread-20161] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:53:13.193 [DEBUG] [Thread-20163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:53:28.231 [DEBUG] [Thread-20164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:53:42.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:53:42.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:53: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-11-12T17:53:43.268 [DEBUG] [Thread-20165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:53:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 53, 15), 34.67, 9.63, 0.0, 30.61, 25.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:53:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:53:15
2025-11-12T17:53:43.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:53:43.673 [DEBUG] [Thread-20166] [transport.py] [_log()] starting thread (client mode): 0x149aa1d0
2025-11-12T17:53:43.673 [DEBUG] [Thread-20166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:53:43.693 [DEBUG] [Thread-20166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:53:43.693 [INFO] [Thread-20166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] client lang: <none>
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] server lang: <none>
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] kex follows: False
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] Compression: none
2025-11-12T17:53:43.695 [DEBUG] [Thread-20166] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:53:43.710 [DEBUG] [Thread-20166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:53:43.710 [DEBUG] [Thread-20166] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:53:43.711 [DEBUG] [Thread-20166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:53:43.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:53:43.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:53:43.713 [DEBUG] [Thread-20166] [transport.py] [_log()] userauth is OK
2025-11-12T17:53:43.713 [DEBUG] [Thread-20166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:53:43.713 [DEBUG] [Thread-20166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:53:43.713 [DEBUG] [Thread-20166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:53:43.713 [DEBUG] [Thread-20166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:53:43.738 [INFO] [Thread-20166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:53:43.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:53:43.922 [DEBUG] [Thread-20168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:53:44.334 [DEBUG] [Thread-20166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:53:44.334 [DEBUG] [Thread-20166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:53:44.335 [DEBUG] [Thread-20166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:53:44.374 [DEBUG] [Thread-20166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:53:44.375 [DEBUG] [Thread-20166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:53:44.378 [DEBUG] [Thread-20166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:53:44.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:53:44.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:53:44.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:53:44.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:53:44.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:53:44.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:53:44.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:53:44.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:53:44.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:53:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.662239 -999.00  +25.00  22.54     14   -3.50 1 1 1 1 1   887    0 27.92 -24.77 ----- 24.0 22.5 270.6 37.6 26.2 -24.3 26.2 -23.6 26.0 -23.7 26.4 -23.9
2025-11-12T17:53:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:53:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:53:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.662239
2025-11-12T17:53:44.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:53:44.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:53:44.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:53:44.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:53:44.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:53:44.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:53:15', tmtdew=34.67, humidity=9.63, cloud=0.0, wind=30.61, temperature=25.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:53:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:53:44.398 [DEBUG] [Thread-20166] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:53:44.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:53:44.493 [DEBUG] [Thread-20170] [transport.py] [_log()] starting thread (client mode): 0x149a9180
2025-11-12T17:53:44.493 [DEBUG] [Thread-20170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:53:44.511 [DEBUG] [Thread-20170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:53:44.511 [INFO] [Thread-20170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:53:44.518 [DEBUG] [Thread-20170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] client lang: <none>
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] server lang: <none>
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] kex follows: False
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:53:44.519 [DEBUG] [Thread-20170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:53:44.520 [DEBUG] [Thread-20170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:53:44.520 [DEBUG] [Thread-20170] [transport.py] [_log()] Compression: none
2025-11-12T17:53:44.520 [DEBUG] [Thread-20170] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:53:44.575 [DEBUG] [Thread-20170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:53:44.576 [DEBUG] [Thread-20170] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:53:44.577 [DEBUG] [Thread-20170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:53:44.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:53:44.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:53:44.637 [DEBUG] [Thread-20170] [transport.py] [_log()] userauth is OK
2025-11-12T17:53:44.637 [DEBUG] [Thread-20170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:53:44.637 [DEBUG] [Thread-20170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:53:44.637 [DEBUG] [Thread-20170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:53:44.637 [DEBUG] [Thread-20170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:53:44.658 [INFO] [Thread-20170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:53:44.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:53:44.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:53:45.478 [DEBUG] [Thread-20170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:53:45.478 [DEBUG] [Thread-20170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:53:45.526 [DEBUG] [Thread-20170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:53:45.526 [DEBUG] [Thread-20170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:53:45.535 [DEBUG] [Thread-20170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:53:45.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:53:45.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:53:45.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-11-12T17:53:45.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:53:45.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:53:45.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:53:45.568 [DEBUG] [Thread-20170] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:53:57.133 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:53:57.134 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:53:58.298 [DEBUG] [Thread-20172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:54:13.349 [DEBUG] [Thread-20173 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:54:15.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:54:15.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:54:15.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-11-12T17:54:16.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 53, 47), 34.67, 9.57, 0.0, 30.4, 25.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:54:16.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:53:47
2025-11-12T17:54:16.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:54:16.487 [DEBUG] [Thread-20174] [transport.py] [_log()] starting thread (client mode): 0x149a9450
2025-11-12T17:54:16.487 [DEBUG] [Thread-20174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:54:16.507 [DEBUG] [Thread-20174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:54:16.507 [INFO] [Thread-20174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:54:16.510 [DEBUG] [Thread-20174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:54:16.510 [DEBUG] [Thread-20174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:54:16.510 [DEBUG] [Thread-20174] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:54:16.510 [DEBUG] [Thread-20174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:54:16.510 [DEBUG] [Thread-20174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] client lang: <none>
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] server lang: <none>
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] kex follows: False
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] Compression: none
2025-11-12T17:54:16.511 [DEBUG] [Thread-20174] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:54:16.527 [DEBUG] [Thread-20174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:54:16.528 [DEBUG] [Thread-20174] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:54:16.529 [DEBUG] [Thread-20174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:54:16.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:54:16.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:54:16.573 [DEBUG] [Thread-20174] [transport.py] [_log()] userauth is OK
2025-11-12T17:54:16.573 [DEBUG] [Thread-20174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:54:16.574 [DEBUG] [Thread-20174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:54:16.574 [DEBUG] [Thread-20174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:54:16.574 [DEBUG] [Thread-20174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:54:16.607 [INFO] [Thread-20174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:54:16.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:54:17.215 [DEBUG] [Thread-20174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:54:17.215 [DEBUG] [Thread-20174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:54:17.216 [DEBUG] [Thread-20174] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:54:17.257 [DEBUG] [Thread-20174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:54:17.257 [DEBUG] [Thread-20174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:54:17.261 [DEBUG] [Thread-20174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:54:17.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:54:17.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:54:17.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:54:17.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:54:17.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:54:17.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:54:17.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:54:17.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:54:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:54:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.662586 -999.00  +25.10  19.49     14   -3.40 1 1 1 1 1   887    0 27.74 -23.29 ----- 21.9 19.5 277.0 28.2 26.2 -24.0 26.2 -23.7 26.1 -22.9 26.4 -23.3
2025-11-12T17:54:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:54:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:54:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.662586
2025-11-12T17:54:17.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:54:17.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:54:17.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:54:17.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:54:17.289 [DEBUG] [Thread-20174] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:54:17.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:54:17.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:53:47', tmtdew=34.67, humidity=9.57, cloud=0.0, wind=30.4, temperature=25.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:54:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:54:17.372 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:54:17.385 [DEBUG] [Thread-20177] [transport.py] [_log()] starting thread (client mode): 0x149ab8b0
2025-11-12T17:54:17.386 [DEBUG] [Thread-20177] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:54:17.401 [DEBUG] [Thread-20177] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:54:17.401 [INFO] [Thread-20177] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:54:17.409 [DEBUG] [Thread-20177] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:54:17.409 [DEBUG] [Thread-20177] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:54:17.409 [DEBUG] [Thread-20177] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] client lang: <none>
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] server lang: <none>
2025-11-12T17:54:17.410 [DEBUG] [Thread-20177] [transport.py] [_log()] kex follows: False
2025-11-12T17:54:17.411 [DEBUG] [Thread-20177] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:54:17.411 [DEBUG] [Thread-20177] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:54:17.411 [DEBUG] [Thread-20177] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:54:17.411 [DEBUG] [Thread-20177] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:54:17.411 [DEBUG] [Thread-20177] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:54:17.411 [DEBUG] [Thread-20177] [transport.py] [_log()] Compression: none
2025-11-12T17:54:17.411 [DEBUG] [Thread-20177] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:54:17.469 [DEBUG] [Thread-20177] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:54:17.469 [DEBUG] [Thread-20177] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:54:17.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:54:17.472 [DEBUG] [Thread-20177] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:54:17.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:54:17.528 [DEBUG] [Thread-20177] [transport.py] [_log()] userauth is OK
2025-11-12T17:54:17.529 [DEBUG] [Thread-20177] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:54:17.529 [DEBUG] [Thread-20177] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:54:17.529 [DEBUG] [Thread-20177] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:54:17.529 [DEBUG] [Thread-20177] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:54:17.548 [INFO] [Thread-20177] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:54:17.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:54:17.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:54:18.415 [DEBUG] [Thread-20177] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:54:18.415 [DEBUG] [Thread-20177] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:54:18.463 [DEBUG] [Thread-20177] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:54:18.463 [DEBUG] [Thread-20177] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:54:18.472 [DEBUG] [Thread-20177] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:54:18.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:54:18.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-11-12T17:54:18.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-11-12T17:54:18.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:54:18.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:54:18.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:54:18.509 [DEBUG] [Thread-20177] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:54:28.383 [DEBUG] [Thread-20179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:54:43.426 [DEBUG] [Thread-20180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:54:43.956 [DEBUG] [Thread-20181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:54:48.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:54:48.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:54:48.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-11-12T17:54:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 54, 19), 34.65, 9.58, 0.0, 30.47, 25.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:54:49.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:54:19
2025-11-12T17:54:49.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:54:49.438 [DEBUG] [Thread-20182] [transport.py] [_log()] starting thread (client mode): 0x149a5120
2025-11-12T17:54:49.438 [DEBUG] [Thread-20182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:54:49.457 [DEBUG] [Thread-20182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:54:49.458 [INFO] [Thread-20182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:54:49.460 [DEBUG] [Thread-20182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:54:49.460 [DEBUG] [Thread-20182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] client lang: <none>
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] server lang: <none>
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] kex follows: False
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] Compression: none
2025-11-12T17:54:49.461 [DEBUG] [Thread-20182] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:54:49.469 [DEBUG] [Thread-20182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:54:49.469 [DEBUG] [Thread-20182] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:54:49.470 [DEBUG] [Thread-20182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:54:49.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:54:49.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:54:49.471 [DEBUG] [Thread-20182] [transport.py] [_log()] userauth is OK
2025-11-12T17:54:49.471 [DEBUG] [Thread-20182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:54:49.471 [DEBUG] [Thread-20182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:54:49.472 [DEBUG] [Thread-20182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:54:49.472 [DEBUG] [Thread-20182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:54:49.489 [INFO] [Thread-20182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:54:49.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:54:50.062 [DEBUG] [Thread-20182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:54:50.062 [DEBUG] [Thread-20182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:54:50.063 [DEBUG] [Thread-20182] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:54:50.104 [DEBUG] [Thread-20182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:54:50.104 [DEBUG] [Thread-20182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:54:50.107 [DEBUG] [Thread-20182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:54:50.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:54:50.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:54:50.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:54:50.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:54:50.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:54:50.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:54:50.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:54:50.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:54:50.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:54:50.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.662933 -999.00  +25.10  26.03     14   -3.40 1 1 1 1 1   887    0 27.96 -23.74 ----- 27.3 26.0 281.0 30.7 26.3 -24.1 26.3 -23.8 26.2 -24.5 26.5 -23.2
2025-11-12T17:54:50.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:54:50.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:54:50.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.662933
2025-11-12T17:54:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:54:50.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:54:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:54:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:54:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:54:50.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:54:19', tmtdew=34.65, humidity=9.58, cloud=0.0, wind=30.47, temperature=25.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:54:37.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:54:50.133 [DEBUG] [Thread-20182] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:54:50.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:54:50.229 [DEBUG] [Thread-20185] [transport.py] [_log()] starting thread (client mode): 0x149a5420
2025-11-12T17:54:50.229 [DEBUG] [Thread-20185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:54:50.243 [DEBUG] [Thread-20185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:54:50.243 [INFO] [Thread-20185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] client lang: <none>
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] server lang: <none>
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] kex follows: False
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:54:50.251 [DEBUG] [Thread-20185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:54:50.252 [DEBUG] [Thread-20185] [transport.py] [_log()] Compression: none
2025-11-12T17:54:50.252 [DEBUG] [Thread-20185] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:54:50.316 [DEBUG] [Thread-20185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:54:50.316 [DEBUG] [Thread-20185] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:54:50.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:54:50.318 [DEBUG] [Thread-20185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:54:50.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:54:50.372 [DEBUG] [Thread-20185] [transport.py] [_log()] userauth is OK
2025-11-12T17:54:50.372 [DEBUG] [Thread-20185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:54:50.372 [DEBUG] [Thread-20185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:54:50.372 [DEBUG] [Thread-20185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:54:50.372 [DEBUG] [Thread-20185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:54:50.390 [INFO] [Thread-20185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:54:50.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:54:50.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:54:51.199 [DEBUG] [Thread-20185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:54:51.199 [DEBUG] [Thread-20185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:54:51.247 [DEBUG] [Thread-20185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:54:51.248 [DEBUG] [Thread-20185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:54:51.257 [DEBUG] [Thread-20185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:54:51.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:54:51.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-11-12T17:54:51.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-11-12T17:54:51.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:54:51.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:54:51.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:54:51.293 [DEBUG] [Thread-20185] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:54:57.278 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:54:57.279 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:54:58.464 [DEBUG] [Thread-20187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:55:13.516 [DEBUG] [Thread-20188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:55:21.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:55:21.287 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:55:21.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-11-12T17:55:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 54, 51), 34.65, 9.6, 0.0, 26.78, 25.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:55:21.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:54:51
2025-11-12T17:55:22.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:55:22.181 [DEBUG] [Thread-20189] [transport.py] [_log()] starting thread (client mode): 0x11f12800
2025-11-12T17:55:22.181 [DEBUG] [Thread-20189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:55:22.201 [DEBUG] [Thread-20189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:55:22.202 [INFO] [Thread-20189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:55:22.204 [DEBUG] [Thread-20189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:55:22.204 [DEBUG] [Thread-20189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] client lang: <none>
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] server lang: <none>
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] kex follows: False
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] Compression: none
2025-11-12T17:55:22.205 [DEBUG] [Thread-20189] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:55:22.219 [DEBUG] [Thread-20189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:55:22.220 [DEBUG] [Thread-20189] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:55:22.220 [DEBUG] [Thread-20189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:55:22.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:55:22.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:55:22.222 [DEBUG] [Thread-20189] [transport.py] [_log()] userauth is OK
2025-11-12T17:55:22.222 [DEBUG] [Thread-20189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:55:22.222 [DEBUG] [Thread-20189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:55:22.222 [DEBUG] [Thread-20189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:55:22.222 [DEBUG] [Thread-20189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:55:22.242 [INFO] [Thread-20189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:55:22.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:55:22.818 [DEBUG] [Thread-20189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:55:22.818 [DEBUG] [Thread-20189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:55:22.819 [DEBUG] [Thread-20189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:55:22.859 [DEBUG] [Thread-20189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:55:22.860 [DEBUG] [Thread-20189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:55:22.863 [DEBUG] [Thread-20189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:55:22.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:55:22.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:55:22.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:55:22.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:55:22.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:55:22.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:55:22.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:55:22.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:55:22.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:55:22.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.663280 -999.00  +25.20  26.98     14   -3.40 1 1 1 1 1   887    0 27.85 -20.63 ----- 17.6 27.0 269.0 33.5 26.3 -24.5 26.3 -23.7 26.3 -23.0 26.5 -23.3
2025-11-12T17:55:22.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:55:22.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:55:22.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.663280
2025-11-12T17:55:22.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:55:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:55:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:55:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:55:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:55:22.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:54:51', tmtdew=34.65, humidity=9.6, cloud=0.0, wind=26.78, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:55:07.392', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:55:22.892 [DEBUG] [Thread-20189] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:55:22.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:55:22.991 [DEBUG] [Thread-20192] [transport.py] [_log()] starting thread (client mode): 0x11f12320
2025-11-12T17:55:22.991 [DEBUG] [Thread-20192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:55:23.005 [DEBUG] [Thread-20192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:55:23.005 [INFO] [Thread-20192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:55:23.013 [DEBUG] [Thread-20192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:55:23.013 [DEBUG] [Thread-20192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:55:23.013 [DEBUG] [Thread-20192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:55:23.013 [DEBUG] [Thread-20192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:55:23.013 [DEBUG] [Thread-20192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:55:23.013 [DEBUG] [Thread-20192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:55:23.013 [DEBUG] [Thread-20192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:55:23.013 [DEBUG] [Thread-20192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] client lang: <none>
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] server lang: <none>
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] kex follows: False
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] Compression: none
2025-11-12T17:55:23.014 [DEBUG] [Thread-20192] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:55:23.072 [DEBUG] [Thread-20192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:55:23.072 [DEBUG] [Thread-20192] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:55:23.073 [DEBUG] [Thread-20192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:55:23.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:55:23.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:55:23.128 [DEBUG] [Thread-20192] [transport.py] [_log()] userauth is OK
2025-11-12T17:55:23.128 [DEBUG] [Thread-20192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:55:23.128 [DEBUG] [Thread-20192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:55:23.128 [DEBUG] [Thread-20192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:55:23.128 [DEBUG] [Thread-20192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:55:23.147 [INFO] [Thread-20192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:55:23.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:55:23.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:55:24.035 [DEBUG] [Thread-20192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:55:24.035 [DEBUG] [Thread-20192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:55:24.083 [DEBUG] [Thread-20192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:55:24.083 [DEBUG] [Thread-20192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:55:24.091 [DEBUG] [Thread-20192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:55:24.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:55:24.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-11-12T17:55: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-11-12T17:55:24.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:55:24.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:55:24.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:55:24.123 [DEBUG] [Thread-20192] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:55:28.552 [DEBUG] [Thread-20194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:55:43.604 [DEBUG] [Thread-20195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:55:43.999 [DEBUG] [Thread-20196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:55:54.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:55:54.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:55:54.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-11-12T17:55:54.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 55, 23), 34.64, 9.62, 0.0, 27.4, 25.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:55:54.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:55:23
2025-11-12T17:55:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:55:55.061 [DEBUG] [Thread-20197] [transport.py] [_log()] starting thread (client mode): 0x11f112a0
2025-11-12T17:55:55.061 [DEBUG] [Thread-20197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:55:55.081 [DEBUG] [Thread-20197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:55:55.081 [INFO] [Thread-20197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:55:55.084 [DEBUG] [Thread-20197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:55:55.084 [DEBUG] [Thread-20197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:55:55.084 [DEBUG] [Thread-20197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:55:55.084 [DEBUG] [Thread-20197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:55:55.084 [DEBUG] [Thread-20197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] client lang: <none>
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] server lang: <none>
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] kex follows: False
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] Compression: none
2025-11-12T17:55:55.085 [DEBUG] [Thread-20197] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:55:55.102 [DEBUG] [Thread-20197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:55:55.103 [DEBUG] [Thread-20197] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:55:55.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:55:55.104 [DEBUG] [Thread-20197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:55:55.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:55:55.106 [DEBUG] [Thread-20197] [transport.py] [_log()] userauth is OK
2025-11-12T17:55:55.106 [DEBUG] [Thread-20197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:55:55.106 [DEBUG] [Thread-20197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:55:55.106 [DEBUG] [Thread-20197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:55:55.106 [DEBUG] [Thread-20197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:55:55.132 [INFO] [Thread-20197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:55:55.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:55:55.691 [DEBUG] [Thread-20197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:55:55.691 [DEBUG] [Thread-20197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:55:55.692 [DEBUG] [Thread-20197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:55:55.732 [DEBUG] [Thread-20197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:55:55.732 [DEBUG] [Thread-20197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:55:55.735 [DEBUG] [Thread-20197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:55:55.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:55:55.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:55:55.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:55:55.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:55:55.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:55:55.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:55:55.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:55:55.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:55:55.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:55:55.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.663280 -999.00  +25.20  26.98     14   -3.40 1 1 1 1 1   887    0 27.85 -20.63 ----- 17.6 27.0 269.0 33.5 26.3 -24.5 26.3 -23.7 26.3 -23.0 26.5 -23.3
2025-11-12T17:55:55.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:55:55.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:55:55.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.663280
2025-11-12T17:55:55.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:55:55.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:55:55.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:55:55.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:55:55.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:55:55.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:55:23', tmtdew=34.64, humidity=9.62, cloud=0.0, wind=27.4, temperature=25.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:55:07.392', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:55:55.762 [DEBUG] [Thread-20197] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:55:55.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:55:55.861 [DEBUG] [Thread-20200] [transport.py] [_log()] starting thread (client mode): 0x11f11de0
2025-11-12T17:55:55.861 [DEBUG] [Thread-20200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:55:55.876 [DEBUG] [Thread-20200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:55:55.876 [INFO] [Thread-20200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:55:55.883 [DEBUG] [Thread-20200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:55:55.883 [DEBUG] [Thread-20200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:55:55.883 [DEBUG] [Thread-20200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:55:55.883 [DEBUG] [Thread-20200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:55:55.883 [DEBUG] [Thread-20200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:55:55.883 [DEBUG] [Thread-20200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:55:55.883 [DEBUG] [Thread-20200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] client lang: <none>
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] server lang: <none>
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] kex follows: False
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] Compression: none
2025-11-12T17:55:55.884 [DEBUG] [Thread-20200] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:55:55.947 [DEBUG] [Thread-20200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:55:55.947 [DEBUG] [Thread-20200] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:55:55.947 [DEBUG] [Thread-20200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:55:55.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:55:55.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:55:56.003 [DEBUG] [Thread-20200] [transport.py] [_log()] userauth is OK
2025-11-12T17:55:56.004 [DEBUG] [Thread-20200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:55:56.004 [DEBUG] [Thread-20200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:55:56.004 [DEBUG] [Thread-20200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:55:56.004 [DEBUG] [Thread-20200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:55:56.023 [INFO] [Thread-20200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:55:56.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:55:56.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:55:56.876 [DEBUG] [Thread-20200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:55:56.876 [DEBUG] [Thread-20200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:55:56.924 [DEBUG] [Thread-20200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:55:56.924 [DEBUG] [Thread-20200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:55:56.932 [DEBUG] [Thread-20200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:55:56.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:55:56.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-11-12T17:55:56.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-11-12T17:55:56.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:55:56.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:55:56.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:55:56.964 [DEBUG] [Thread-20200] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:55:57.422 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:55:57.424 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:55:58.633 [DEBUG] [Thread-20202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:56:13.691 [DEBUG] [Thread-20203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:56:26.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:56:26.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:56:26.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-11-12T17:56:27.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 55, 55), 34.79, 9.15, 0.0, 33.72, 25.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:56:27.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:55:55
2025-11-12T17:56:27.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:56:27.928 [DEBUG] [Thread-20204] [transport.py] [_log()] starting thread (client mode): 0x149a40a0
2025-11-12T17:56:27.928 [DEBUG] [Thread-20204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:56:27.949 [DEBUG] [Thread-20204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:56:27.949 [INFO] [Thread-20204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:56:27.952 [DEBUG] [Thread-20204] [transport.py] [_log()] client lang: <none>
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] server lang: <none>
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] kex follows: False
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] Compression: none
2025-11-12T17:56:27.953 [DEBUG] [Thread-20204] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:56:27.968 [DEBUG] [Thread-20204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:56:27.969 [DEBUG] [Thread-20204] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:56:27.969 [DEBUG] [Thread-20204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:56:27.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:56:27.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:56:27.970 [DEBUG] [Thread-20204] [transport.py] [_log()] userauth is OK
2025-11-12T17:56:27.970 [DEBUG] [Thread-20204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:56:27.970 [DEBUG] [Thread-20204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:56:27.970 [DEBUG] [Thread-20204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:56:27.970 [DEBUG] [Thread-20204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:56:27.983 [INFO] [Thread-20204] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:56:27.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:56:28.569 [DEBUG] [Thread-20204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:56:28.569 [DEBUG] [Thread-20204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:56:28.569 [DEBUG] [Thread-20204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:56:28.610 [DEBUG] [Thread-20204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:56:28.610 [DEBUG] [Thread-20204] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:56:28.612 [DEBUG] [Thread-20204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:56:28.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:56:28.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:56:28.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:56:28.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:56:28.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:56:28.630 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:56:28.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.663628 -999.00  +25.30  22.13     14   -3.30 1 1 1 1 1   887    0 28.26 -19.38 ----- 16.7 22.1 274.6 26.4 26.4 -24.3 26.4 -23.8 26.4 -23.2 26.6 -23.4
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.663628
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:56:28.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:56:28.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:55:55', tmtdew=34.79, humidity=9.15, cloud=0.0, wind=33.72, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:55:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:56:28.632 [DEBUG] [Thread-20204] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:56:28.705 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:56:28.718 [DEBUG] [Thread-20207] [transport.py] [_log()] starting thread (client mode): 0x149a4970
2025-11-12T17:56:28.718 [DEBUG] [Thread-20207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:56:28.724 [DEBUG] [Thread-20208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:56:28.732 [DEBUG] [Thread-20207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:56:28.732 [INFO] [Thread-20207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] client lang: <none>
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] server lang: <none>
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] kex follows: False
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] Compression: none
2025-11-12T17:56:28.740 [DEBUG] [Thread-20207] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:56:28.798 [DEBUG] [Thread-20207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:56:28.798 [DEBUG] [Thread-20207] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:56:28.799 [DEBUG] [Thread-20207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:56:28.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:56:28.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:56:28.860 [DEBUG] [Thread-20207] [transport.py] [_log()] userauth is OK
2025-11-12T17:56:28.860 [DEBUG] [Thread-20207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:56:28.860 [DEBUG] [Thread-20207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:56:28.861 [DEBUG] [Thread-20207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:56:28.861 [DEBUG] [Thread-20207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:56:28.874 [INFO] [Thread-20207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:56:28.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:56:28.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:56:29.693 [DEBUG] [Thread-20207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:56:29.693 [DEBUG] [Thread-20207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:56:29.741 [DEBUG] [Thread-20207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:56:29.741 [DEBUG] [Thread-20207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:56:29.749 [DEBUG] [Thread-20207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:56:29.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:56:29.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-11-12T17:56:29.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-11-12T17:56:29.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:56:29.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:56:29.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:56:29.781 [DEBUG] [Thread-20207] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:56:43.763 [DEBUG] [Thread-20210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:56:44.045 [DEBUG] [Thread-20211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:56:57.575 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:56:57.576 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:56:58.802 [DEBUG] [Thread-20212 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:56:59.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:56:59.788 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:56:59.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-11-12T17:57:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 56, 27), 34.84, 9.12, 0.0, 30.05, 25.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:57:00.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:56:27
2025-11-12T17:57:00.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:57:00.774 [DEBUG] [Thread-20213] [transport.py] [_log()] starting thread (client mode): 0x14956cb0
2025-11-12T17:57:00.774 [DEBUG] [Thread-20213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:57:00.793 [DEBUG] [Thread-20213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:57:00.793 [INFO] [Thread-20213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] client lang: <none>
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] server lang: <none>
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] kex follows: False
2025-11-12T17:57:00.796 [DEBUG] [Thread-20213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:57:00.797 [DEBUG] [Thread-20213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:57:00.797 [DEBUG] [Thread-20213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:57:00.797 [DEBUG] [Thread-20213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:57:00.797 [DEBUG] [Thread-20213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:57:00.797 [DEBUG] [Thread-20213] [transport.py] [_log()] Compression: none
2025-11-12T17:57:00.797 [DEBUG] [Thread-20213] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:57:00.812 [DEBUG] [Thread-20213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:57:00.813 [DEBUG] [Thread-20213] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:57:00.813 [DEBUG] [Thread-20213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:57:00.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:57:00.813 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:57:00.814 [DEBUG] [Thread-20213] [transport.py] [_log()] userauth is OK
2025-11-12T17:57:00.814 [DEBUG] [Thread-20213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:57:00.814 [DEBUG] [Thread-20213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:57:00.814 [DEBUG] [Thread-20213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:57:00.814 [DEBUG] [Thread-20213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:57:00.829 [INFO] [Thread-20213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:57:00.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:57:01.413 [DEBUG] [Thread-20213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:57:01.413 [DEBUG] [Thread-20213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:57:01.413 [DEBUG] [Thread-20213] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:57:01.454 [DEBUG] [Thread-20213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:57:01.454 [DEBUG] [Thread-20213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:57:01.456 [DEBUG] [Thread-20213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:57:01.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:57:01.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:57:01.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:57:01.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:57:01.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:57:01.475 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:57:01.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:57:01.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:57:01.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.663975 -999.00  +25.30  20.28     14   -3.30 1 1 1 1 1   887    0 28.11 -20.10 ----- 23.9 20.3 275.8 30.8 26.4 -24.5 26.4 -24.3 26.4 -23.2 26.7 -24.0
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.663975
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:57:01.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:56:27', tmtdew=34.84, humidity=9.12, cloud=0.0, wind=30.05, temperature=25.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:56:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:57:01.476 [DEBUG] [Thread-20213] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:57:01.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:57:01.564 [DEBUG] [Thread-20216] [transport.py] [_log()] starting thread (client mode): 0x149a6e90
2025-11-12T17:57:01.564 [DEBUG] [Thread-20216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:57:01.579 [DEBUG] [Thread-20216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:57:01.579 [INFO] [Thread-20216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] client lang: <none>
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] server lang: <none>
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] kex follows: False
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] Compression: none
2025-11-12T17:57:01.587 [DEBUG] [Thread-20216] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:57:01.642 [DEBUG] [Thread-20216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:57:01.643 [DEBUG] [Thread-20216] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:57:01.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:57:01.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:57:01.643 [DEBUG] [Thread-20216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:57:01.699 [DEBUG] [Thread-20216] [transport.py] [_log()] userauth is OK
2025-11-12T17:57:01.699 [DEBUG] [Thread-20216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:57:01.699 [DEBUG] [Thread-20216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:57:01.699 [DEBUG] [Thread-20216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:57:01.699 [DEBUG] [Thread-20216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:57:01.717 [INFO] [Thread-20216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:57:01.717 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:57:01.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:57:02.578 [DEBUG] [Thread-20216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:57:02.578 [DEBUG] [Thread-20216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:57:02.626 [DEBUG] [Thread-20216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:57:02.626 [DEBUG] [Thread-20216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:57:02.635 [DEBUG] [Thread-20216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:57:02.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:57:02.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T17:57:02.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-11-12T17:57:02.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:57:02.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:57:02.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:57:02.667 [DEBUG] [Thread-20216] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:57:13.834 [DEBUG] [Thread-20218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:57:28.885 [DEBUG] [Thread-20219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:57:32.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:57:32.688 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:57: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-11-12T17:57:33.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 56, 59), 34.7, 9.57, 0.0, 21.84, 25.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:57:33.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:56:59
2025-11-12T17:57:33.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:57:33.643 [DEBUG] [Thread-20220] [transport.py] [_log()] starting thread (client mode): 0x149a8550
2025-11-12T17:57:33.643 [DEBUG] [Thread-20220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:57:33.662 [DEBUG] [Thread-20220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:57:33.662 [INFO] [Thread-20220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] client lang: <none>
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] server lang: <none>
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] kex follows: False
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] Compression: none
2025-11-12T17:57:33.666 [DEBUG] [Thread-20220] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:57:33.680 [DEBUG] [Thread-20220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:57:33.680 [DEBUG] [Thread-20220] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:57:33.680 [DEBUG] [Thread-20220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:57:33.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:57:33.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:57:33.681 [DEBUG] [Thread-20220] [transport.py] [_log()] userauth is OK
2025-11-12T17:57:33.681 [DEBUG] [Thread-20220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:57:33.681 [DEBUG] [Thread-20220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:57:33.681 [DEBUG] [Thread-20220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:57:33.681 [DEBUG] [Thread-20220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:57:33.697 [INFO] [Thread-20220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:57:33.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:57:34.313 [DEBUG] [Thread-20220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:57:34.313 [DEBUG] [Thread-20220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:57:34.314 [DEBUG] [Thread-20220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:57:34.355 [DEBUG] [Thread-20220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:57:34.355 [DEBUG] [Thread-20220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:57:34.358 [DEBUG] [Thread-20220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:57:34.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:57:34.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:57:34.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:57:34.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:57:34.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:57:34.387 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:57:34.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:57:34.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:57:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:57:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.664322 -999.00  +25.20  18.87     14   -3.30 1 1 1 1 1   887    0 27.96 -19.12 ----- 17.3 18.9 273.4 30.1 26.4 -24.6 26.5 -24.1 26.6 -23.2 26.7 -24.2
2025-11-12T17:57:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:57:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:57:34.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.664322
2025-11-12T17:57:34.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:57:34.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:57:34.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:57:34.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:57:34.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:57:34.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:56:59', tmtdew=34.7, humidity=9.57, cloud=0.0, wind=21.84, temperature=25.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:56:37.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:57:34.390 [DEBUG] [Thread-20220] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:57:34.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:57:34.486 [DEBUG] [Thread-20223] [transport.py] [_log()] starting thread (client mode): 0x149a5e70
2025-11-12T17:57:34.486 [DEBUG] [Thread-20223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:57:34.501 [DEBUG] [Thread-20223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T17:57:34.501 [INFO] [Thread-20223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T17:57:34.509 [DEBUG] [Thread-20223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:57:34.509 [DEBUG] [Thread-20223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T17:57:34.509 [DEBUG] [Thread-20223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:57:34.509 [DEBUG] [Thread-20223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:57:34.509 [DEBUG] [Thread-20223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:57:34.509 [DEBUG] [Thread-20223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:57:34.509 [DEBUG] [Thread-20223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:57:34.510 [DEBUG] [Thread-20223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:57:34.510 [DEBUG] [Thread-20223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:57:34.510 [DEBUG] [Thread-20223] [transport.py] [_log()] client lang: <none>
2025-11-12T17:57:34.510 [DEBUG] [Thread-20223] [transport.py] [_log()] server lang: <none>
2025-11-12T17:57:34.510 [DEBUG] [Thread-20223] [transport.py] [_log()] kex follows: False
2025-11-12T17:57:34.510 [DEBUG] [Thread-20223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:57:34.510 [DEBUG] [Thread-20223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:57:34.510 [DEBUG] [Thread-20223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:57:34.511 [DEBUG] [Thread-20223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:57:34.511 [DEBUG] [Thread-20223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:57:34.511 [DEBUG] [Thread-20223] [transport.py] [_log()] Compression: none
2025-11-12T17:57:34.511 [DEBUG] [Thread-20223] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:57:34.568 [DEBUG] [Thread-20223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:57:34.569 [DEBUG] [Thread-20223] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:57:34.569 [DEBUG] [Thread-20223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T17:57:34.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T17:57:34.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:57:34.624 [DEBUG] [Thread-20223] [transport.py] [_log()] userauth is OK
2025-11-12T17:57:34.624 [DEBUG] [Thread-20223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:57:34.625 [DEBUG] [Thread-20223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:57:34.625 [DEBUG] [Thread-20223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T17:57:34.625 [DEBUG] [Thread-20223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:57:34.644 [INFO] [Thread-20223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:57:34.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T17:57:34.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:57:35.481 [DEBUG] [Thread-20223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:57:35.481 [DEBUG] [Thread-20223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:57:35.529 [DEBUG] [Thread-20223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:57:35.529 [DEBUG] [Thread-20223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:57:35.538 [DEBUG] [Thread-20223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:57:35.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:57:35.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-11-12T17:57:35.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-11-12T17:57:35.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:57:35.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:57:35.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:57:35.574 [DEBUG] [Thread-20223] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:57:43.918 [DEBUG] [Thread-20225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:57:44.073 [DEBUG] [Thread-20226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:57:57.717 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:57:57.718 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:57:58.968 [DEBUG] [Thread-20227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:58:05.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T17:58:05.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T17:58:05.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-11-12T17:58:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 17, 57, 31), 34.73, 9.58, 0.0, 25.11, 25.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T17:58:06.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 17:57:31
2025-11-12T17:58:06.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T17:58:06.535 [DEBUG] [Thread-20228] [transport.py] [_log()] starting thread (client mode): 0x149a4ca0
2025-11-12T17:58:06.535 [DEBUG] [Thread-20228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T17:58:06.556 [DEBUG] [Thread-20228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T17:58:06.557 [INFO] [Thread-20228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] client lang: <none>
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] server lang: <none>
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] kex follows: False
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T17:58:06.560 [DEBUG] [Thread-20228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T17:58:06.561 [DEBUG] [Thread-20228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T17:58:06.561 [DEBUG] [Thread-20228] [transport.py] [_log()] Compression: none
2025-11-12T17:58:06.561 [DEBUG] [Thread-20228] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T17:58:06.578 [DEBUG] [Thread-20228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T17:58:06.578 [DEBUG] [Thread-20228] [transport.py] [_log()] Switch to new keys ...
2025-11-12T17:58:06.579 [DEBUG] [Thread-20228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T17:58:06.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T17:58:06.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T17:58:06.581 [DEBUG] [Thread-20228] [transport.py] [_log()] userauth is OK
2025-11-12T17:58:06.581 [DEBUG] [Thread-20228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T17:58:06.582 [DEBUG] [Thread-20228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T17:58:06.582 [DEBUG] [Thread-20228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T17:58:06.582 [DEBUG] [Thread-20228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T17:58:06.609 [INFO] [Thread-20228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T17:58:06.610 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T17:58:07.251 [DEBUG] [Thread-20228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T17:58:07.251 [DEBUG] [Thread-20228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T17:58:07.252 [DEBUG] [Thread-20228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T17:58:07.292 [DEBUG] [Thread-20228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T17:58:07.293 [DEBUG] [Thread-20228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T17:58:07.295 [DEBUG] [Thread-20228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T17:58:07.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T17:58:07.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T17:58:07.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T17:58:07.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T17:58:07.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T17:58:07.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T17:58:07.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T17:58:07.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T17:58:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T17:58:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.664669 -999.00  +25.30  20.83     14   -3.30 1 1 1 1 1   887    0 28.44 -18.95 ----- 13.2 20.8 274.6 24.5 26.4 -24.6 26.5 -24.2 26.6 -23.1 26.8 -23.6
2025-11-12T17:58:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T17:58:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T17:58:07.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.664669
2025-11-12T17:58:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T17:58:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T17:58:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T17:58:07.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T17:58:07.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T17:58:07.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T17:57:31', tmtdew=34.73, humidity=9.58, cloud=0.0, wind=25.11, temperature=25.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T15:57:07.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T17:58:07.313 [DEBUG] [Thread-20228] [transport.py] [_log()] EOF in transport thread
2025-11-12T17:58:07.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T17:58:13.999 [DEBUG] [Thread-20231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:58:29.042 [DEBUG] [Thread-20232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:58:44.080 [DEBUG] [Thread-20233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:58:44.106 [DEBUG] [Thread-20234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:58:57.867 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:58:57.868 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:58:59.114 [DEBUG] [Thread-20235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:59:14.146 [DEBUG] [Thread-20236 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:59:29.184 [DEBUG] [Thread-20237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:59:44.140 [DEBUG] [Thread-20238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:59:44.217 [DEBUG] [Thread-20239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:59:58.009 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:59:58.010 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T17:59:59.255 [DEBUG] [Thread-20240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:00:14.291 [DEBUG] [Thread-20241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:00:19.130 [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-11-12T18:00:29.321 [DEBUG] [Thread-20242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:00:44.168 [DEBUG] [Thread-20243 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:00:44.360 [DEBUG] [Thread-20244 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:00:49.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:00:49.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:00:49.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-11-12T18:00:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 0, 43), 35.11, 9.08, 0.0, 34.26, 25.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:00:49.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:00:43
2025-11-12T18:00:49.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:00:50.089 [DEBUG] [Thread-20245] [transport.py] [_log()] starting thread (client mode): 0x149a50f0
2025-11-12T18:00:50.089 [DEBUG] [Thread-20245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:00:50.108 [DEBUG] [Thread-20245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:00:50.108 [INFO] [Thread-20245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:00:50.111 [DEBUG] [Thread-20245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] client lang: <none>
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] server lang: <none>
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] kex follows: False
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] Compression: none
2025-11-12T18:00:50.112 [DEBUG] [Thread-20245] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:00:50.130 [DEBUG] [Thread-20245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:00:50.131 [DEBUG] [Thread-20245] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:00:50.131 [DEBUG] [Thread-20245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:00:50.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:00:50.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:00:50.133 [DEBUG] [Thread-20245] [transport.py] [_log()] userauth is OK
2025-11-12T18:00:50.133 [DEBUG] [Thread-20245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:00:50.134 [DEBUG] [Thread-20245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:00:50.134 [DEBUG] [Thread-20245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:00:50.134 [DEBUG] [Thread-20245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:00:50.159 [INFO] [Thread-20245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:00:50.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:00:50.793 [DEBUG] [Thread-20245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:00:50.793 [DEBUG] [Thread-20245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:00:50.793 [DEBUG] [Thread-20245] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:00:50.835 [DEBUG] [Thread-20245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:00:50.835 [DEBUG] [Thread-20245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:00:50.838 [DEBUG] [Thread-20245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:00:50.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:00:50.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:00:50.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:00:50.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:00:50.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:00:50.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:00:50.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:00:50.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:00:50.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:00:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.666752 -999.00  +25.50  22.47     14   -3.20 1 1 1 1 1   887    0 27.61 -14.04 ----- 31.7 22.5 282.6 34.4 26.6 -25.0 26.8 -24.8 26.9 -24.7 27.2 -24.1
2025-11-12T18:00:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:00:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:00:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.666752
2025-11-12T18:00:50.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:00:50.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:00:50.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:00:50.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:00:50.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:00:50.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:00:43', tmtdew=35.11, humidity=9.08, cloud=0.0, wind=34.26, temperature=25.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:00:07.373', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:00:50.864 [DEBUG] [Thread-20245] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:00:50.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:00:50.960 [DEBUG] [Thread-20248] [transport.py] [_log()] starting thread (client mode): 0x149a6200
2025-11-12T18:00:50.960 [DEBUG] [Thread-20248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:00:50.975 [DEBUG] [Thread-20248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:00:50.975 [INFO] [Thread-20248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:00:50.983 [DEBUG] [Thread-20248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:00:50.983 [DEBUG] [Thread-20248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:00:50.983 [DEBUG] [Thread-20248] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:00:50.983 [DEBUG] [Thread-20248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:00:50.983 [DEBUG] [Thread-20248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:00:50.983 [DEBUG] [Thread-20248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:00:50.984 [DEBUG] [Thread-20248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:00:50.984 [DEBUG] [Thread-20248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:00:50.984 [DEBUG] [Thread-20248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:00:50.984 [DEBUG] [Thread-20248] [transport.py] [_log()] client lang: <none>
2025-11-12T18:00:50.984 [DEBUG] [Thread-20248] [transport.py] [_log()] server lang: <none>
2025-11-12T18:00:50.984 [DEBUG] [Thread-20248] [transport.py] [_log()] kex follows: False
2025-11-12T18:00:50.984 [DEBUG] [Thread-20248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:00:50.984 [DEBUG] [Thread-20248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:00:50.985 [DEBUG] [Thread-20248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:00:50.985 [DEBUG] [Thread-20248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:00:50.985 [DEBUG] [Thread-20248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:00:50.985 [DEBUG] [Thread-20248] [transport.py] [_log()] Compression: none
2025-11-12T18:00:50.985 [DEBUG] [Thread-20248] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:00:51.039 [DEBUG] [Thread-20248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:00:51.040 [DEBUG] [Thread-20248] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:00:51.041 [DEBUG] [Thread-20248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:00:51.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:00:51.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:00:51.096 [DEBUG] [Thread-20248] [transport.py] [_log()] userauth is OK
2025-11-12T18:00:51.096 [DEBUG] [Thread-20248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:00:51.096 [DEBUG] [Thread-20248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:00:51.097 [DEBUG] [Thread-20248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:00:51.097 [DEBUG] [Thread-20248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:00:51.119 [INFO] [Thread-20248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:00:51.120 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:00:51.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:00:51.961 [DEBUG] [Thread-20248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:00:51.961 [DEBUG] [Thread-20248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:00:52.009 [DEBUG] [Thread-20248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:00:52.009 [DEBUG] [Thread-20248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:00:52.019 [DEBUG] [Thread-20248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:00:52.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:00:52.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-11-12T18:00:52.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-11-12T18:00:52.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:00:52.047 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:00:52.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:00:52.056 [DEBUG] [Thread-20248] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:00:58.153 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:00:58.154 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:00:59.388 [DEBUG] [Thread-20250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:01:14.444 [DEBUG] [Thread-20251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:01:22.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:01:22.078 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:01:22.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:01:22.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 1, 15), 35.14, 9.07, 0.0, 35.13, 25.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:01:22.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:01:15
2025-11-12T18:01:22.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:01:23.013 [DEBUG] [Thread-20252] [transport.py] [_log()] starting thread (client mode): 0x149a43d0
2025-11-12T18:01:23.013 [DEBUG] [Thread-20252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:01:23.033 [DEBUG] [Thread-20252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:01:23.033 [INFO] [Thread-20252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:01:23.036 [DEBUG] [Thread-20252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] client lang: <none>
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] server lang: <none>
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] kex follows: False
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] Compression: none
2025-11-12T18:01:23.037 [DEBUG] [Thread-20252] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:01:23.055 [DEBUG] [Thread-20252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:01:23.055 [DEBUG] [Thread-20252] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:01:23.056 [DEBUG] [Thread-20252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:01:23.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:01:23.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:01:23.058 [DEBUG] [Thread-20252] [transport.py] [_log()] userauth is OK
2025-11-12T18:01:23.058 [DEBUG] [Thread-20252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:01:23.058 [DEBUG] [Thread-20252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:01:23.058 [DEBUG] [Thread-20252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:01:23.058 [DEBUG] [Thread-20252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:01:23.083 [INFO] [Thread-20252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:01:23.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:01:23.740 [DEBUG] [Thread-20252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:01:23.741 [DEBUG] [Thread-20252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:01:23.741 [DEBUG] [Thread-20252] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:01:23.782 [DEBUG] [Thread-20252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:01:23.782 [DEBUG] [Thread-20252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:01:23.785 [DEBUG] [Thread-20252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:01:23.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:01:23.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:01:23.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:01:23.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:01:23.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:01:23.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:01:23.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:01:23.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:01:23.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:01:23.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.667100 -999.00  +25.30  32.31     14   -3.40 1 1 2 1 1   887    0 27.96 -12.26 ----- 30.3 32.3 280.4 42.5 26.7 -25.7 26.7 -25.4 26.8 -25.0 27.2 -24.8
2025-11-12T18:01:23.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:01:23.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:01:23.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.667100
2025-11-12T18:01:23.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:01:23.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:01:23.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:01:23.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:01:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:01:23.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:01:15', tmtdew=35.14, humidity=9.07, cloud=0.0, wind=35.13, temperature=25.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:00:37.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:01:23.816 [DEBUG] [Thread-20252] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:01:23.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:01:23.913 [DEBUG] [Thread-20255] [transport.py] [_log()] starting thread (client mode): 0x149a5f90
2025-11-12T18:01:23.913 [DEBUG] [Thread-20255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:01:23.927 [DEBUG] [Thread-20255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:01:23.928 [INFO] [Thread-20255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:01:23.935 [DEBUG] [Thread-20255] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:01:23.935 [DEBUG] [Thread-20255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] client lang: <none>
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] server lang: <none>
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] kex follows: False
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:01:23.936 [DEBUG] [Thread-20255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:01:23.937 [DEBUG] [Thread-20255] [transport.py] [_log()] Compression: none
2025-11-12T18:01:23.937 [DEBUG] [Thread-20255] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:01:23.996 [DEBUG] [Thread-20255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:01:23.996 [DEBUG] [Thread-20255] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:01:23.997 [DEBUG] [Thread-20255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:01:23.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:01:23.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:01:24.052 [DEBUG] [Thread-20255] [transport.py] [_log()] userauth is OK
2025-11-12T18:01:24.052 [DEBUG] [Thread-20255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:01:24.052 [DEBUG] [Thread-20255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:01:24.052 [DEBUG] [Thread-20255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:01:24.053 [DEBUG] [Thread-20255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:01:24.071 [INFO] [Thread-20255] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:01:24.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:01:24.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:01:24.940 [DEBUG] [Thread-20255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:01:24.940 [DEBUG] [Thread-20255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:01:24.987 [DEBUG] [Thread-20255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:01:24.988 [DEBUG] [Thread-20255] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:01:24.997 [DEBUG] [Thread-20255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:01:25.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:01:25.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:01:25.014 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:01:25.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:01:25.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:01:25.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:01:25.032 [DEBUG] [Thread-20255] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:01:29.480 [DEBUG] [Thread-20257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:01:44.213 [DEBUG] [Thread-20258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:01:44.518 [DEBUG] [Thread-20259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:01:55.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:01:55.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:01:55.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-11-12T18:01:55.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 1, 47), 35.0, 9.05, 0.0, 32.78, 25.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:01:55.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:01:47
2025-11-12T18:01:55.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:01:55.996 [DEBUG] [Thread-20260] [transport.py] [_log()] starting thread (client mode): 0x11f11000
2025-11-12T18:01:55.996 [DEBUG] [Thread-20260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:01:56.017 [DEBUG] [Thread-20260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:01:56.017 [INFO] [Thread-20260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:01:56.020 [DEBUG] [Thread-20260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:01:56.020 [DEBUG] [Thread-20260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] client lang: <none>
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] server lang: <none>
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] kex follows: False
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:01:56.021 [DEBUG] [Thread-20260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:01:56.022 [DEBUG] [Thread-20260] [transport.py] [_log()] Compression: none
2025-11-12T18:01:56.022 [DEBUG] [Thread-20260] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:01:56.031 [DEBUG] [Thread-20260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:01:56.032 [DEBUG] [Thread-20260] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:01:56.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:01:56.034 [DEBUG] [Thread-20260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:01:56.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:01:56.036 [DEBUG] [Thread-20260] [transport.py] [_log()] userauth is OK
2025-11-12T18:01:56.036 [DEBUG] [Thread-20260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:01:56.036 [DEBUG] [Thread-20260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:01:56.036 [DEBUG] [Thread-20260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:01:56.037 [DEBUG] [Thread-20260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:01:56.071 [INFO] [Thread-20260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:01:56.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:01:56.703 [DEBUG] [Thread-20260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:01:56.704 [DEBUG] [Thread-20260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:01:56.704 [DEBUG] [Thread-20260] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:01:56.745 [DEBUG] [Thread-20260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:01:56.745 [DEBUG] [Thread-20260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:01:56.749 [DEBUG] [Thread-20260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:01:56.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:01:56.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:01:56.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:01:56.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:01:56.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:01:56.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:01:56.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:01:56.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:01:56.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:01:56.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.667447 -999.00  +25.20  28.66     14   -3.30 1 1 1 1 1   887    0 27.96 -11.82 ----- 26.4 28.7 282.6 36.1 26.6 -26.0 26.7 -25.1 26.8 -25.8 27.2 -24.6
2025-11-12T18:01:56.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:01:56.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:01:56.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.667447
2025-11-12T18:01:56.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:01:56.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:01:56.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:01:56.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:01:56.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:01:56.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:01:47', tmtdew=35.0, humidity=9.05, cloud=0.0, wind=32.78, temperature=25.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:01:07.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:01:56.776 [DEBUG] [Thread-20260] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:01:56.860 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:01:56.873 [DEBUG] [Thread-20263] [transport.py] [_log()] starting thread (client mode): 0x11f11e70
2025-11-12T18:01:56.873 [DEBUG] [Thread-20263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:01:56.891 [DEBUG] [Thread-20263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:01:56.891 [INFO] [Thread-20263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:01:56.899 [DEBUG] [Thread-20263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:01:56.899 [DEBUG] [Thread-20263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:01:56.899 [DEBUG] [Thread-20263] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:01:56.899 [DEBUG] [Thread-20263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:01:56.900 [DEBUG] [Thread-20263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:01:56.900 [DEBUG] [Thread-20263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:01:56.900 [DEBUG] [Thread-20263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:01:56.900 [DEBUG] [Thread-20263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:01:56.900 [DEBUG] [Thread-20263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:01:56.900 [DEBUG] [Thread-20263] [transport.py] [_log()] client lang: <none>
2025-11-12T18:01:56.900 [DEBUG] [Thread-20263] [transport.py] [_log()] server lang: <none>
2025-11-12T18:01:56.900 [DEBUG] [Thread-20263] [transport.py] [_log()] kex follows: False
2025-11-12T18:01:56.901 [DEBUG] [Thread-20263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:01:56.901 [DEBUG] [Thread-20263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:01:56.901 [DEBUG] [Thread-20263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:01:56.901 [DEBUG] [Thread-20263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:01:56.901 [DEBUG] [Thread-20263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:01:56.901 [DEBUG] [Thread-20263] [transport.py] [_log()] Compression: none
2025-11-12T18:01:56.901 [DEBUG] [Thread-20263] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:01:56.961 [DEBUG] [Thread-20263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:01:56.962 [DEBUG] [Thread-20263] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:01:56.962 [DEBUG] [Thread-20263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:01:56.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:01:56.963 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:01:57.020 [DEBUG] [Thread-20263] [transport.py] [_log()] userauth is OK
2025-11-12T18:01:57.020 [DEBUG] [Thread-20263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:01:57.020 [DEBUG] [Thread-20263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:01:57.020 [DEBUG] [Thread-20263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:01:57.020 [DEBUG] [Thread-20263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:01:57.038 [INFO] [Thread-20263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:01:57.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:01:57.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:01:57.892 [DEBUG] [Thread-20263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:01:57.892 [DEBUG] [Thread-20263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:01:57.941 [DEBUG] [Thread-20263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:01:57.941 [DEBUG] [Thread-20263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:01:57.950 [DEBUG] [Thread-20263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:01:57.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:01:57.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-11-12T18:01:57.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-11-12T18:01:57.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:01:57.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:01:57.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:01:57.988 [DEBUG] [Thread-20263] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:01:58.297 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:01:58.298 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:01:59.557 [DEBUG] [Thread-20265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:02:14.617 [DEBUG] [Thread-20266 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:02:28.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:02:28.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:02:28.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-11-12T18:02:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 2, 19), 34.94, 9.08, 0.0, 29.68, 25.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:02:28.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:02:19
2025-11-12T18:02:28.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:02:28.940 [DEBUG] [Thread-20267] [transport.py] [_log()] starting thread (client mode): 0x149a68f0
2025-11-12T18:02:28.940 [DEBUG] [Thread-20267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:02:28.960 [DEBUG] [Thread-20267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:02:28.960 [INFO] [Thread-20267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:02:28.963 [DEBUG] [Thread-20267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:02:28.963 [DEBUG] [Thread-20267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:02:28.963 [DEBUG] [Thread-20267] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] client lang: <none>
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] server lang: <none>
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] kex follows: False
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] Compression: none
2025-11-12T18:02:28.964 [DEBUG] [Thread-20267] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:02:28.973 [DEBUG] [Thread-20267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:02:28.974 [DEBUG] [Thread-20267] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:02:28.974 [DEBUG] [Thread-20267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:02:28.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:02:28.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:02:28.976 [DEBUG] [Thread-20267] [transport.py] [_log()] userauth is OK
2025-11-12T18:02:28.976 [DEBUG] [Thread-20267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:02:28.976 [DEBUG] [Thread-20267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:02:28.976 [DEBUG] [Thread-20267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:02:28.976 [DEBUG] [Thread-20267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:02:28.998 [INFO] [Thread-20267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:02:28.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:02:29.605 [DEBUG] [Thread-20267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:02:29.605 [DEBUG] [Thread-20267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:02:29.605 [DEBUG] [Thread-20267] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:02:29.645 [DEBUG] [Thread-20269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:02:29.646 [DEBUG] [Thread-20267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:02:29.647 [DEBUG] [Thread-20267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:02:29.649 [DEBUG] [Thread-20267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:02:29.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:02:29.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:02:29.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:02:29.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:02:29.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:02:29.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:02:29.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:02:29.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:02:29.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:02:29.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.667794 -999.00  +25.20  31.18     14   -3.30 1 1 2 1 1   887    0 28.06 -11.48 ----- 27.3 31.2 283.6 38.7 26.6 -26.4 26.7 -25.3 26.7 -26.1 27.2 -25.2
2025-11-12T18:02:29.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:02:29.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:02:29.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.667794
2025-11-12T18:02:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:02:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:02:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:02:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:02:29.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:02:29.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:02:19', tmtdew=34.94, humidity=9.08, cloud=0.0, wind=29.68, temperature=25.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:01:37.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:02:29.673 [DEBUG] [Thread-20267] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:02:29.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:02:29.770 [DEBUG] [Thread-20271] [transport.py] [_log()] starting thread (client mode): 0x149abcd0
2025-11-12T18:02:29.771 [DEBUG] [Thread-20271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:02:29.785 [DEBUG] [Thread-20271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:02:29.786 [INFO] [Thread-20271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:02:29.793 [DEBUG] [Thread-20271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] client lang: <none>
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] server lang: <none>
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] kex follows: False
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:02:29.794 [DEBUG] [Thread-20271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:02:29.795 [DEBUG] [Thread-20271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:02:29.795 [DEBUG] [Thread-20271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:02:29.795 [DEBUG] [Thread-20271] [transport.py] [_log()] Compression: none
2025-11-12T18:02:29.795 [DEBUG] [Thread-20271] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:02:29.851 [DEBUG] [Thread-20271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:02:29.852 [DEBUG] [Thread-20271] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:02:29.852 [DEBUG] [Thread-20271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:02:29.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:02:29.853 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:02:29.907 [DEBUG] [Thread-20271] [transport.py] [_log()] userauth is OK
2025-11-12T18:02:29.907 [DEBUG] [Thread-20271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:02:29.907 [DEBUG] [Thread-20271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:02:29.907 [DEBUG] [Thread-20271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:02:29.908 [DEBUG] [Thread-20271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:02:29.931 [INFO] [Thread-20271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:02:29.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:02:29.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:02:30.794 [DEBUG] [Thread-20271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:02:30.794 [DEBUG] [Thread-20271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:02:30.844 [DEBUG] [Thread-20271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:02:30.844 [DEBUG] [Thread-20271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:02:30.852 [DEBUG] [Thread-20271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:02:30.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:02:30.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:02:30.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:02:30.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:02:30.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:02:30.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:02:30.891 [DEBUG] [Thread-20271] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:02:44.248 [DEBUG] [Thread-20273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:02:44.681 [DEBUG] [Thread-20274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:02:58.440 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:02:58.441 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:02:59.731 [DEBUG] [Thread-20275 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:03:00.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:03:00.914 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:03:00.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-11-12T18:03:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 2, 51), 34.77, 9.1, 0.0, 28.55, 25.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:03:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:02:51
2025-11-12T18:03:01.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:03:01.832 [DEBUG] [Thread-20276] [transport.py] [_log()] starting thread (client mode): 0x149a9f90
2025-11-12T18:03:01.833 [DEBUG] [Thread-20276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:03:01.852 [DEBUG] [Thread-20276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:03:01.852 [INFO] [Thread-20276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] client lang: <none>
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] server lang: <none>
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] kex follows: False
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] Compression: none
2025-11-12T18:03:01.855 [DEBUG] [Thread-20276] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:03:01.873 [DEBUG] [Thread-20276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:03:01.874 [DEBUG] [Thread-20276] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:03:01.874 [DEBUG] [Thread-20276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:03:01.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:03:01.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:03:01.876 [DEBUG] [Thread-20276] [transport.py] [_log()] userauth is OK
2025-11-12T18:03:01.876 [DEBUG] [Thread-20276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:03:01.877 [DEBUG] [Thread-20276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:03:01.877 [DEBUG] [Thread-20276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:03:01.877 [DEBUG] [Thread-20276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:03:01.895 [INFO] [Thread-20276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:03:01.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:03:02.526 [DEBUG] [Thread-20276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:03:02.526 [DEBUG] [Thread-20276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:03:02.526 [DEBUG] [Thread-20276] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:03:02.567 [DEBUG] [Thread-20276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:03:02.567 [DEBUG] [Thread-20276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:03:02.571 [DEBUG] [Thread-20276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:03:02.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:03:02.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:03:02.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:03:02.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:03:02.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:03:02.595 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:03:02.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:03:02.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:03:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:03:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.668142 -999.00  +25.10  28.44     14   -3.40 1 1 1 1 1   887    0 28.10 -10.76 ----- 30.3 28.4 282.8 40.5 26.5 -26.1 26.6 -25.8 26.5 -25.4 27.1 -25.5
2025-11-12T18:03:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:03:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:03:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.668142
2025-11-12T18:03:02.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:03:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:03:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:03:02.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:03:02.597 [DEBUG] [Thread-20276] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:03:02.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:03:02.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:02:51', tmtdew=34.77, humidity=9.1, cloud=0.0, wind=28.55, temperature=25.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:02:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:03:02.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:03:02.693 [DEBUG] [Thread-20279] [transport.py] [_log()] starting thread (client mode): 0x11f12560
2025-11-12T18:03:02.693 [DEBUG] [Thread-20279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:03:02.707 [DEBUG] [Thread-20279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:03:02.707 [INFO] [Thread-20279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:03:02.714 [DEBUG] [Thread-20279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:03:02.715 [DEBUG] [Thread-20279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:03:02.715 [DEBUG] [Thread-20279] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:03:02.715 [DEBUG] [Thread-20279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:03:02.715 [DEBUG] [Thread-20279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:03:02.715 [DEBUG] [Thread-20279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:03:02.715 [DEBUG] [Thread-20279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:03:02.715 [DEBUG] [Thread-20279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:03:02.716 [DEBUG] [Thread-20279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:03:02.716 [DEBUG] [Thread-20279] [transport.py] [_log()] client lang: <none>
2025-11-12T18:03:02.716 [DEBUG] [Thread-20279] [transport.py] [_log()] server lang: <none>
2025-11-12T18:03:02.716 [DEBUG] [Thread-20279] [transport.py] [_log()] kex follows: False
2025-11-12T18:03:02.716 [DEBUG] [Thread-20279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:03:02.716 [DEBUG] [Thread-20279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:03:02.716 [DEBUG] [Thread-20279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:03:02.717 [DEBUG] [Thread-20279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:03:02.717 [DEBUG] [Thread-20279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:03:02.717 [DEBUG] [Thread-20279] [transport.py] [_log()] Compression: none
2025-11-12T18:03:02.717 [DEBUG] [Thread-20279] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:03:02.772 [DEBUG] [Thread-20279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:03:02.773 [DEBUG] [Thread-20279] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:03:02.773 [DEBUG] [Thread-20279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:03:02.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:03:02.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:03:02.832 [DEBUG] [Thread-20279] [transport.py] [_log()] userauth is OK
2025-11-12T18:03:02.832 [DEBUG] [Thread-20279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:03:02.832 [DEBUG] [Thread-20279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:03:02.832 [DEBUG] [Thread-20279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:03:02.832 [DEBUG] [Thread-20279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:03:02.851 [INFO] [Thread-20279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:03:02.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:03:02.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:03:03.684 [DEBUG] [Thread-20279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:03:03.685 [DEBUG] [Thread-20279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:03:03.733 [DEBUG] [Thread-20279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:03:03.733 [DEBUG] [Thread-20279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:03:03.742 [DEBUG] [Thread-20279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:03:03.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:03:03.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-11-12T18:03:03.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-11-12T18:03:03.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:03:03.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:03:03.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:03:03.779 [DEBUG] [Thread-20279] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:03:14.767 [DEBUG] [Thread-20281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:03:29.817 [DEBUG] [Thread-20282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:03:33.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:03:33.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:03:33.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-11-12T18:03:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 3, 23), 34.75, 9.1, 0.0, 28.11, 25.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:03:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:03:23
2025-11-12T18:03:34.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:03:34.708 [DEBUG] [Thread-20283] [transport.py] [_log()] starting thread (client mode): 0x11f11e70
2025-11-12T18:03:34.708 [DEBUG] [Thread-20283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:03:34.728 [DEBUG] [Thread-20283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:03:34.728 [INFO] [Thread-20283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] client lang: <none>
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] server lang: <none>
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] kex follows: False
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] Compression: none
2025-11-12T18:03:34.731 [DEBUG] [Thread-20283] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:03:34.753 [DEBUG] [Thread-20283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:03:34.754 [DEBUG] [Thread-20283] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:03:34.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:03:34.755 [DEBUG] [Thread-20283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:03:34.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:03:34.757 [DEBUG] [Thread-20283] [transport.py] [_log()] userauth is OK
2025-11-12T18:03:34.757 [DEBUG] [Thread-20283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:03:34.758 [DEBUG] [Thread-20283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:03:34.758 [DEBUG] [Thread-20283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:03:34.758 [DEBUG] [Thread-20283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:03:34.782 [INFO] [Thread-20283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:03:34.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:03:35.425 [DEBUG] [Thread-20283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:03:35.425 [DEBUG] [Thread-20283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:03:35.425 [DEBUG] [Thread-20283] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:03:35.466 [DEBUG] [Thread-20283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:03:35.466 [DEBUG] [Thread-20283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:03:35.469 [DEBUG] [Thread-20283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:03:35.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:03:35.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:03:35.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:03:35.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:03:35.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:03:35.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:03:35.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:03:35.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:03:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:03:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.668489 -999.00  +25.00  28.84     14   -3.40 1 1 1 1 1   887    0 28.67 -10.85 ----- 30.4 28.8 276.6 39.9 26.5 -26.2 26.5 -25.7 26.4 -25.5 26.9 -25.8
2025-11-12T18:03:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:03:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:03:35.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.668489
2025-11-12T18:03:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:03:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:03:35.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:03:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:03:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:03:35.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:03:23', tmtdew=34.75, humidity=9.1, cloud=0.0, wind=28.11, temperature=25.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:02:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:03:35.496 [DEBUG] [Thread-20283] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:03:35.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:03:35.593 [DEBUG] [Thread-20286] [transport.py] [_log()] starting thread (client mode): 0x11f11f60
2025-11-12T18:03:35.593 [DEBUG] [Thread-20286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:03:35.607 [DEBUG] [Thread-20286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:03:35.608 [INFO] [Thread-20286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:03:35.615 [DEBUG] [Thread-20286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:03:35.615 [DEBUG] [Thread-20286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:03:35.616 [DEBUG] [Thread-20286] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:03:35.616 [DEBUG] [Thread-20286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:03:35.616 [DEBUG] [Thread-20286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:03:35.616 [DEBUG] [Thread-20286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:03:35.616 [DEBUG] [Thread-20286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:03:35.616 [DEBUG] [Thread-20286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:03:35.616 [DEBUG] [Thread-20286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:03:35.616 [DEBUG] [Thread-20286] [transport.py] [_log()] client lang: <none>
2025-11-12T18:03:35.617 [DEBUG] [Thread-20286] [transport.py] [_log()] server lang: <none>
2025-11-12T18:03:35.617 [DEBUG] [Thread-20286] [transport.py] [_log()] kex follows: False
2025-11-12T18:03:35.617 [DEBUG] [Thread-20286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:03:35.617 [DEBUG] [Thread-20286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:03:35.617 [DEBUG] [Thread-20286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:03:35.617 [DEBUG] [Thread-20286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:03:35.617 [DEBUG] [Thread-20286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:03:35.617 [DEBUG] [Thread-20286] [transport.py] [_log()] Compression: none
2025-11-12T18:03:35.618 [DEBUG] [Thread-20286] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:03:35.677 [DEBUG] [Thread-20286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:03:35.677 [DEBUG] [Thread-20286] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:03:35.678 [DEBUG] [Thread-20286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:03:35.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:03:35.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:03:35.736 [DEBUG] [Thread-20286] [transport.py] [_log()] userauth is OK
2025-11-12T18:03:35.737 [DEBUG] [Thread-20286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:03:35.737 [DEBUG] [Thread-20286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:03:35.737 [DEBUG] [Thread-20286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:03:35.737 [DEBUG] [Thread-20286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:03:35.758 [INFO] [Thread-20286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:03:35.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:03:35.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:03:36.574 [DEBUG] [Thread-20286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:03:36.575 [DEBUG] [Thread-20286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:03:36.623 [DEBUG] [Thread-20286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:03:36.623 [DEBUG] [Thread-20286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:03:36.633 [DEBUG] [Thread-20286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:03:36.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:03:36.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-11-12T18:03:36.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-11-12T18:03:36.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:03:36.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:03:36.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:03:36.670 [DEBUG] [Thread-20286] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:03:44.282 [DEBUG] [Thread-20288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:03:44.852 [DEBUG] [Thread-20289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:03:58.583 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:03:58.584 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:03:59.904 [DEBUG] [Thread-20290 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:04:06.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:04:06.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:04:06.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-11-12T18:04:07.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 3, 55), 34.56, 9.63, 0.0, 32.39, 25.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:04:07.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:03:55
2025-11-12T18:04:07.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:04:07.634 [DEBUG] [Thread-20291] [transport.py] [_log()] starting thread (client mode): 0x149ab550
2025-11-12T18:04:07.634 [DEBUG] [Thread-20291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:04:07.655 [DEBUG] [Thread-20291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:04:07.655 [INFO] [Thread-20291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:04:07.658 [DEBUG] [Thread-20291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:04:07.658 [DEBUG] [Thread-20291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:04:07.658 [DEBUG] [Thread-20291] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:04:07.658 [DEBUG] [Thread-20291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:04:07.658 [DEBUG] [Thread-20291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:04:07.658 [DEBUG] [Thread-20291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:04:07.658 [DEBUG] [Thread-20291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:04:07.658 [DEBUG] [Thread-20291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] client lang: <none>
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] server lang: <none>
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] kex follows: False
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] Compression: none
2025-11-12T18:04:07.659 [DEBUG] [Thread-20291] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:04:07.673 [DEBUG] [Thread-20291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:04:07.674 [DEBUG] [Thread-20291] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:04:07.674 [DEBUG] [Thread-20291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:04:07.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:04:07.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:04:07.674 [DEBUG] [Thread-20291] [transport.py] [_log()] userauth is OK
2025-11-12T18:04:07.674 [DEBUG] [Thread-20291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:04:07.674 [DEBUG] [Thread-20291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:04:07.674 [DEBUG] [Thread-20291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:04:07.674 [DEBUG] [Thread-20291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:04:07.684 [INFO] [Thread-20291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:04:07.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:04:08.311 [DEBUG] [Thread-20291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:04:08.311 [DEBUG] [Thread-20291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:04:08.311 [DEBUG] [Thread-20291] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:04:08.352 [DEBUG] [Thread-20291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:04:08.352 [DEBUG] [Thread-20291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:04:08.354 [DEBUG] [Thread-20291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:04:08.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:04:08.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:04:08.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:04:08.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:04:08.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:04:08.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:04:08.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.669183 -999.00  +25.00  27.19     14   -3.40 1 1 1 1 1   887    0 28.58 -8.17 ----- 30.7 27.2 284.8 30.6 26.4 -26.4 26.4 -25.8 26.2 -26.6 26.7 -25.5
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.669183
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:04:08.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:03:55', tmtdew=34.56, humidity=9.63, cloud=0.0, wind=32.39, temperature=25.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:03:37.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:04:08.373 [DEBUG] [Thread-20291] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:04:08.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:04:08.458 [DEBUG] [Thread-20294] [transport.py] [_log()] starting thread (client mode): 0x149a6d10
2025-11-12T18:04:08.458 [DEBUG] [Thread-20294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:04:08.474 [DEBUG] [Thread-20294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:04:08.474 [INFO] [Thread-20294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:04:08.481 [DEBUG] [Thread-20294] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:04:08.481 [DEBUG] [Thread-20294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] client lang: <none>
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] server lang: <none>
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] kex follows: False
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] Compression: none
2025-11-12T18:04:08.482 [DEBUG] [Thread-20294] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:04:08.539 [DEBUG] [Thread-20294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:04:08.539 [DEBUG] [Thread-20294] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:04:08.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:04:08.539 [DEBUG] [Thread-20294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:04:08.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:04:08.598 [DEBUG] [Thread-20294] [transport.py] [_log()] userauth is OK
2025-11-12T18:04:08.598 [DEBUG] [Thread-20294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:04:08.598 [DEBUG] [Thread-20294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:04:08.598 [DEBUG] [Thread-20294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:04:08.598 [DEBUG] [Thread-20294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:04:08.612 [INFO] [Thread-20294] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:04:08.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:04:08.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:04:09.429 [DEBUG] [Thread-20294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:04:09.429 [DEBUG] [Thread-20294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:04:09.477 [DEBUG] [Thread-20294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:04:09.477 [DEBUG] [Thread-20294] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:04:09.485 [DEBUG] [Thread-20294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:04:09.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:04:09.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-11-12T18:04:09.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-11-12T18:04:09.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:04:09.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:04:09.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:04:09.517 [DEBUG] [Thread-20294] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:04:14.942 [DEBUG] [Thread-20296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:04:30.001 [DEBUG] [Thread-20297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:04:39.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:04:39.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:04:39.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-11-12T18:04:40.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 4, 27), 34.49, 9.67, 0.0, 30.63, 25.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:04:40.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:04:27
2025-11-12T18:04:40.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:04:40.455 [DEBUG] [Thread-20298] [transport.py] [_log()] starting thread (client mode): 0x149a9210
2025-11-12T18:04:40.456 [DEBUG] [Thread-20298] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:04:40.475 [DEBUG] [Thread-20298] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:04:40.475 [INFO] [Thread-20298] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:04:40.478 [DEBUG] [Thread-20298] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:04:40.478 [DEBUG] [Thread-20298] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:04:40.478 [DEBUG] [Thread-20298] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] client lang: <none>
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] server lang: <none>
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] kex follows: False
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] Compression: none
2025-11-12T18:04:40.479 [DEBUG] [Thread-20298] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:04:40.498 [DEBUG] [Thread-20298] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:04:40.499 [DEBUG] [Thread-20298] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:04:40.499 [DEBUG] [Thread-20298] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:04:40.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:04:40.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:04:40.541 [DEBUG] [Thread-20298] [transport.py] [_log()] userauth is OK
2025-11-12T18:04:40.541 [DEBUG] [Thread-20298] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:04:40.541 [DEBUG] [Thread-20298] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:04:40.541 [DEBUG] [Thread-20298] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:04:40.541 [DEBUG] [Thread-20298] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:04:40.562 [INFO] [Thread-20298] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:04:40.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:04:41.194 [DEBUG] [Thread-20298] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:04:41.194 [DEBUG] [Thread-20298] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:04:41.195 [DEBUG] [Thread-20298] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:04:41.235 [DEBUG] [Thread-20298] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:04:41.236 [DEBUG] [Thread-20298] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:04:41.239 [DEBUG] [Thread-20298] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:04:41.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:04:41.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:04:41.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:04:41.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:04:41.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:04:41.262 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:04:41.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:04:41.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:04:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:04:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.669531 -999.00  +24.90  27.48     15   -3.40 1 1 1 1 1   887    0 28.58 -7.79 ----- 29.4 27.5 272.4 36.9 26.4 -26.6 26.4 -25.7 26.1 -26.8 26.6 -26.1
2025-11-12T18:04:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:04:41.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:04:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.669531
2025-11-12T18:04:41.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:04:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:04:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:04:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:04:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:04:41.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:04:27', tmtdew=34.49, humidity=9.67, cloud=0.0, wind=30.63, temperature=25.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:04:07.478', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:04:41.265 [DEBUG] [Thread-20298] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:04:41.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:04:41.362 [DEBUG] [Thread-20301] [transport.py] [_log()] starting thread (client mode): 0x149aa320
2025-11-12T18:04:41.363 [DEBUG] [Thread-20301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:04:41.379 [DEBUG] [Thread-20301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:04:41.379 [INFO] [Thread-20301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:04:41.386 [DEBUG] [Thread-20301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:04:41.386 [DEBUG] [Thread-20301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:04:41.386 [DEBUG] [Thread-20301] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:04:41.386 [DEBUG] [Thread-20301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:04:41.386 [DEBUG] [Thread-20301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:04:41.386 [DEBUG] [Thread-20301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] client lang: <none>
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] server lang: <none>
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] kex follows: False
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] Compression: none
2025-11-12T18:04:41.387 [DEBUG] [Thread-20301] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:04:41.444 [DEBUG] [Thread-20301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:04:41.444 [DEBUG] [Thread-20301] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:04:41.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:04:41.445 [DEBUG] [Thread-20301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:04:41.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:04:41.504 [DEBUG] [Thread-20301] [transport.py] [_log()] userauth is OK
2025-11-12T18:04:41.504 [DEBUG] [Thread-20301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:04:41.504 [DEBUG] [Thread-20301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:04:41.504 [DEBUG] [Thread-20301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:04:41.505 [DEBUG] [Thread-20301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:04:41.523 [INFO] [Thread-20301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:04:41.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:04:41.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:04:42.379 [DEBUG] [Thread-20301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:04:42.380 [DEBUG] [Thread-20301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:04:42.428 [DEBUG] [Thread-20301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:04:42.428 [DEBUG] [Thread-20301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:04:42.440 [DEBUG] [Thread-20301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:04:42.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:04:42.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:04:42.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-11-12T18:04:42.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:04:42.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:04:42.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:04:42.480 [DEBUG] [Thread-20301] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:04:44.310 [DEBUG] [Thread-20303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:04:45.031 [DEBUG] [Thread-20304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:04:58.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:04:58.725 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:05:00.070 [DEBUG] [Thread-20305 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:05:12.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:05:12.501 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:05:12.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-11-12T18:05:13.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 4, 59), 34.4, 9.65, 0.0, 28.34, 25.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:05:13.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:04:59
2025-11-12T18:05:13.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:05:13.431 [DEBUG] [Thread-20306] [transport.py] [_log()] starting thread (client mode): 0x149a56c0
2025-11-12T18:05:13.431 [DEBUG] [Thread-20306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:05:13.453 [DEBUG] [Thread-20306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:05:13.453 [INFO] [Thread-20306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:05:13.455 [DEBUG] [Thread-20306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:05:13.455 [DEBUG] [Thread-20306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] client lang: <none>
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] server lang: <none>
2025-11-12T18:05:13.456 [DEBUG] [Thread-20306] [transport.py] [_log()] kex follows: False
2025-11-12T18:05:13.457 [DEBUG] [Thread-20306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:05:13.457 [DEBUG] [Thread-20306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:05:13.457 [DEBUG] [Thread-20306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:05:13.457 [DEBUG] [Thread-20306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:05:13.457 [DEBUG] [Thread-20306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:05:13.457 [DEBUG] [Thread-20306] [transport.py] [_log()] Compression: none
2025-11-12T18:05:13.457 [DEBUG] [Thread-20306] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:05:13.481 [DEBUG] [Thread-20306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:05:13.482 [DEBUG] [Thread-20306] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:05:13.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:05:13.483 [DEBUG] [Thread-20306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:05:13.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:05:13.488 [DEBUG] [Thread-20306] [transport.py] [_log()] userauth is OK
2025-11-12T18:05:13.488 [DEBUG] [Thread-20306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:05:13.488 [DEBUG] [Thread-20306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:05:13.488 [DEBUG] [Thread-20306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:05:13.488 [DEBUG] [Thread-20306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:05:13.514 [INFO] [Thread-20306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:05:13.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:05:14.146 [DEBUG] [Thread-20306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:05:14.146 [DEBUG] [Thread-20306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:05:14.146 [DEBUG] [Thread-20306] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:05:14.188 [DEBUG] [Thread-20306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:05:14.188 [DEBUG] [Thread-20306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:05:14.192 [DEBUG] [Thread-20306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:05:14.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:05:14.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:05:14.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:05:14.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:05:14.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:05:14.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:05:14.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:05:14.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:05:14.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:05:14.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.669878 -999.00  +24.90  25.32     15   -3.50 1 1 1 1 1   887    0 28.32 -6.53 ----- 26.9 25.3 290.3 36.5 26.3 -26.2 26.2 -25.6 26.0 -26.4 26.5 -25.5
2025-11-12T18:05:14.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:05:14.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:05:14.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.669878
2025-11-12T18:05:14.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:05:14.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:05:14.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:05:14.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:05:14.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:05:14.219 [DEBUG] [Thread-20306] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:05:14.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:04:59', tmtdew=34.4, humidity=9.65, cloud=0.0, wind=28.34, temperature=25.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:04:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:05:14.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:05:14.316 [DEBUG] [Thread-20309] [transport.py] [_log()] starting thread (client mode): 0x11f12c80
2025-11-12T18:05:14.316 [DEBUG] [Thread-20309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:05:14.331 [DEBUG] [Thread-20309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:05:14.331 [INFO] [Thread-20309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:05:14.339 [DEBUG] [Thread-20309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:05:14.339 [DEBUG] [Thread-20309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:05:14.339 [DEBUG] [Thread-20309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:05:14.339 [DEBUG] [Thread-20309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:05:14.339 [DEBUG] [Thread-20309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:05:14.339 [DEBUG] [Thread-20309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:05:14.340 [DEBUG] [Thread-20309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:05:14.340 [DEBUG] [Thread-20309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:05:14.340 [DEBUG] [Thread-20309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:05:14.340 [DEBUG] [Thread-20309] [transport.py] [_log()] client lang: <none>
2025-11-12T18:05:14.340 [DEBUG] [Thread-20309] [transport.py] [_log()] server lang: <none>
2025-11-12T18:05:14.340 [DEBUG] [Thread-20309] [transport.py] [_log()] kex follows: False
2025-11-12T18:05:14.340 [DEBUG] [Thread-20309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:05:14.340 [DEBUG] [Thread-20309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:05:14.341 [DEBUG] [Thread-20309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:05:14.341 [DEBUG] [Thread-20309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:05:14.341 [DEBUG] [Thread-20309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:05:14.341 [DEBUG] [Thread-20309] [transport.py] [_log()] Compression: none
2025-11-12T18:05:14.341 [DEBUG] [Thread-20309] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:05:14.400 [DEBUG] [Thread-20309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:05:14.401 [DEBUG] [Thread-20309] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:05:14.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:05:14.402 [DEBUG] [Thread-20309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:05:14.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:05:14.460 [DEBUG] [Thread-20309] [transport.py] [_log()] userauth is OK
2025-11-12T18:05:14.460 [DEBUG] [Thread-20309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:05:14.460 [DEBUG] [Thread-20309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:05:14.460 [DEBUG] [Thread-20309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:05:14.460 [DEBUG] [Thread-20309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:05:14.479 [INFO] [Thread-20309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:05:14.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:05:14.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:05:15.103 [DEBUG] [Thread-20311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:05:15.306 [DEBUG] [Thread-20309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:05:15.307 [DEBUG] [Thread-20309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:05:15.356 [DEBUG] [Thread-20309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:05:15.356 [DEBUG] [Thread-20309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:05:15.366 [DEBUG] [Thread-20309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:05:15.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:05:15.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-11-12T18:05:15.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-11-12T18:05:15.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:05:15.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:05:15.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:05:15.411 [DEBUG] [Thread-20309] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:05:30.153 [DEBUG] [Thread-20312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:05:44.344 [DEBUG] [Thread-20313 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:05:45.190 [DEBUG] [Thread-20314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:05:45.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:05:45.413 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:05:45.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-11-12T18:05:46.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 5, 31), 34.27, 9.75, 0.0, 30.75, 25.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:05:46.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:05:31
2025-11-12T18:05:46.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:05:46.336 [DEBUG] [Thread-20315] [transport.py] [_log()] starting thread (client mode): 0x149a8ac0
2025-11-12T18:05:46.336 [DEBUG] [Thread-20315] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:05:46.357 [DEBUG] [Thread-20315] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:05:46.357 [INFO] [Thread-20315] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] client lang: <none>
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] server lang: <none>
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] kex follows: False
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] Compression: none
2025-11-12T18:05:46.360 [DEBUG] [Thread-20315] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:05:46.380 [DEBUG] [Thread-20315] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:05:46.380 [DEBUG] [Thread-20315] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:05:46.381 [DEBUG] [Thread-20315] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:05:46.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:05:46.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:05:46.383 [DEBUG] [Thread-20315] [transport.py] [_log()] userauth is OK
2025-11-12T18:05:46.383 [DEBUG] [Thread-20315] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:05:46.383 [DEBUG] [Thread-20315] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:05:46.384 [DEBUG] [Thread-20315] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:05:46.384 [DEBUG] [Thread-20315] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:05:46.410 [INFO] [Thread-20315] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:05:46.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:05:47.019 [DEBUG] [Thread-20315] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:05:47.020 [DEBUG] [Thread-20315] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:05:47.020 [DEBUG] [Thread-20315] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:05:47.061 [DEBUG] [Thread-20315] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:05:47.061 [DEBUG] [Thread-20315] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:05:47.065 [DEBUG] [Thread-20315] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:05:47.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:05:47.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:05:47.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:05:47.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:05:47.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:05:47.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:05:47.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:05:47.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:05:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:05:47.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.670224 -999.00  +24.90  27.53     15   -3.50 1 1 1 1 1   887    0 28.30 -6.10 ----- 23.1 27.5 273.2 30.7 26.2 -26.2 26.2 -25.7 25.9 -25.4 26.5 -25.4
2025-11-12T18:05:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:05:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:05:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.670224
2025-11-12T18:05:47.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:05:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:05:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:05:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:05:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:05:47.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:05:31', tmtdew=34.27, humidity=9.75, cloud=0.0, wind=30.75, temperature=25.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:05:07.354', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:05:47.088 [DEBUG] [Thread-20315] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:05:47.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:05:47.184 [DEBUG] [Thread-20318] [transport.py] [_log()] starting thread (client mode): 0x149ab6a0
2025-11-12T18:05:47.184 [DEBUG] [Thread-20318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:05:47.199 [DEBUG] [Thread-20318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:05:47.200 [INFO] [Thread-20318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] client lang: <none>
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] server lang: <none>
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] kex follows: False
2025-11-12T18:05:47.207 [DEBUG] [Thread-20318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:05:47.208 [DEBUG] [Thread-20318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:05:47.208 [DEBUG] [Thread-20318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:05:47.208 [DEBUG] [Thread-20318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:05:47.208 [DEBUG] [Thread-20318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:05:47.208 [DEBUG] [Thread-20318] [transport.py] [_log()] Compression: none
2025-11-12T18:05:47.208 [DEBUG] [Thread-20318] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:05:47.268 [DEBUG] [Thread-20318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:05:47.268 [DEBUG] [Thread-20318] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:05:47.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:05:47.270 [DEBUG] [Thread-20318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:05:47.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:05:47.323 [DEBUG] [Thread-20318] [transport.py] [_log()] userauth is OK
2025-11-12T18:05:47.324 [DEBUG] [Thread-20318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:05:47.324 [DEBUG] [Thread-20318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:05:47.324 [DEBUG] [Thread-20318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:05:47.324 [DEBUG] [Thread-20318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:05:47.343 [INFO] [Thread-20318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:05:47.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:05:47.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:05:48.194 [DEBUG] [Thread-20318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:05:48.194 [DEBUG] [Thread-20318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:05:48.242 [DEBUG] [Thread-20318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:05:48.243 [DEBUG] [Thread-20318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:05:48.252 [DEBUG] [Thread-20318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:05:48.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:05:48.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-11-12T18:05:48.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-11-12T18:05:48.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:05:48.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:05:48.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:05:48.287 [DEBUG] [Thread-20318] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:05:58.866 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:05:58.867 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:06:00.228 [DEBUG] [Thread-20320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:06:15.278 [DEBUG] [Thread-20321 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:06:18.309 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:06:18.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:06:18.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-11-12T18:06:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 6, 3), 34.23, 9.77, 0.0, 27.63, 25.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:06:18.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:06:03
2025-11-12T18:06:19.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:06:19.226 [DEBUG] [Thread-20322] [transport.py] [_log()] starting thread (client mode): 0x149a4a90
2025-11-12T18:06:19.226 [DEBUG] [Thread-20322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:06:19.246 [DEBUG] [Thread-20322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:06:19.246 [INFO] [Thread-20322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:06:19.249 [DEBUG] [Thread-20322] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:06:19.249 [DEBUG] [Thread-20322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:06:19.249 [DEBUG] [Thread-20322] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:06:19.249 [DEBUG] [Thread-20322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:06:19.249 [DEBUG] [Thread-20322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:06:19.249 [DEBUG] [Thread-20322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:06:19.249 [DEBUG] [Thread-20322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] client lang: <none>
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] server lang: <none>
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] kex follows: False
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] Compression: none
2025-11-12T18:06:19.250 [DEBUG] [Thread-20322] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:06:19.259 [DEBUG] [Thread-20322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:06:19.259 [DEBUG] [Thread-20322] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:06:19.259 [DEBUG] [Thread-20322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:06:19.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:06:19.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:06:19.261 [DEBUG] [Thread-20322] [transport.py] [_log()] userauth is OK
2025-11-12T18:06:19.261 [DEBUG] [Thread-20322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:06:19.261 [DEBUG] [Thread-20322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:06:19.261 [DEBUG] [Thread-20322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:06:19.262 [DEBUG] [Thread-20322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:06:19.276 [INFO] [Thread-20322] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:06:19.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:06:19.924 [DEBUG] [Thread-20322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:06:19.924 [DEBUG] [Thread-20322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:06:19.924 [DEBUG] [Thread-20322] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:06:19.964 [DEBUG] [Thread-20322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:06:19.965 [DEBUG] [Thread-20322] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:06:19.968 [DEBUG] [Thread-20322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:06:19.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:06:19.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:06:19.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:06:19.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:06:19.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:06:19.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:06:19.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:06:19.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:06:19.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:06:19.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.670572 -999.00  +24.80  29.10     15   -3.40 1 1 1 1 1   887    0 28.66 -5.68 ----- 23.6 29.1 276.8 34.0 26.2 -26.4 26.1 -25.7 25.9 -25.8 26.4 -25.5
2025-11-12T18:06:19.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:06:19.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:06:19.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.670572
2025-11-12T18:06:19.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:06:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:06:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:06:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:06:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:06:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:06:03', tmtdew=34.23, humidity=9.77, cloud=0.0, wind=27.63, temperature=25.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:05:37.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:06:19.997 [DEBUG] [Thread-20322] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:06:20.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:06:20.092 [DEBUG] [Thread-20325] [transport.py] [_log()] starting thread (client mode): 0x149a6b00
2025-11-12T18:06:20.092 [DEBUG] [Thread-20325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:06:20.111 [DEBUG] [Thread-20325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:06:20.111 [INFO] [Thread-20325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:06:20.119 [DEBUG] [Thread-20325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:06:20.119 [DEBUG] [Thread-20325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:06:20.119 [DEBUG] [Thread-20325] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:06:20.119 [DEBUG] [Thread-20325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:06:20.119 [DEBUG] [Thread-20325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:06:20.119 [DEBUG] [Thread-20325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:06:20.119 [DEBUG] [Thread-20325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:06:20.119 [DEBUG] [Thread-20325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] client lang: <none>
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] server lang: <none>
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] kex follows: False
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:06:20.120 [DEBUG] [Thread-20325] [transport.py] [_log()] Compression: none
2025-11-12T18:06:20.121 [DEBUG] [Thread-20325] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:06:20.179 [DEBUG] [Thread-20325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:06:20.179 [DEBUG] [Thread-20325] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:06:20.180 [DEBUG] [Thread-20325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:06:20.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:06:20.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:06:20.236 [DEBUG] [Thread-20325] [transport.py] [_log()] userauth is OK
2025-11-12T18:06:20.236 [DEBUG] [Thread-20325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:06:20.236 [DEBUG] [Thread-20325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:06:20.236 [DEBUG] [Thread-20325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:06:20.237 [DEBUG] [Thread-20325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:06:20.255 [INFO] [Thread-20325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:06:20.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:06:20.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:06:21.077 [DEBUG] [Thread-20325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:06:21.077 [DEBUG] [Thread-20325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:06:21.126 [DEBUG] [Thread-20325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:06:21.126 [DEBUG] [Thread-20325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:06:21.135 [DEBUG] [Thread-20325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:06:21.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:06:21.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:06:21.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:06:21.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:06:21.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:06:21.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:06:21.171 [DEBUG] [Thread-20325] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:06:30.316 [DEBUG] [Thread-20327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:06:44.373 [DEBUG] [Thread-20328 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:06:45.358 [DEBUG] [Thread-20329 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:06:51.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:06:51.189 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:06:51.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-11-12T18:06:51.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 6, 35), 34.16, 9.82, 0.0, 29.66, 25.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:06:51.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:06:35
2025-11-12T18:06:51.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:06:52.113 [DEBUG] [Thread-20330] [transport.py] [_log()] starting thread (client mode): 0x173e8fd0
2025-11-12T18:06:52.113 [DEBUG] [Thread-20330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:06:52.133 [DEBUG] [Thread-20330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:06:52.133 [INFO] [Thread-20330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:06:52.136 [DEBUG] [Thread-20330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] client lang: <none>
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] server lang: <none>
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] kex follows: False
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] Compression: none
2025-11-12T18:06:52.137 [DEBUG] [Thread-20330] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:06:52.156 [DEBUG] [Thread-20330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:06:52.156 [DEBUG] [Thread-20330] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:06:52.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:06:52.157 [DEBUG] [Thread-20330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:06:52.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:06:52.159 [DEBUG] [Thread-20330] [transport.py] [_log()] userauth is OK
2025-11-12T18:06:52.159 [DEBUG] [Thread-20330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:06:52.160 [DEBUG] [Thread-20330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:06:52.160 [DEBUG] [Thread-20330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:06:52.160 [DEBUG] [Thread-20330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:06:52.184 [INFO] [Thread-20330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:06:52.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:06:52.830 [DEBUG] [Thread-20330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:06:52.830 [DEBUG] [Thread-20330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:06:52.830 [DEBUG] [Thread-20330] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:06:52.871 [DEBUG] [Thread-20330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:06:52.871 [DEBUG] [Thread-20330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:06:52.874 [DEBUG] [Thread-20330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:06:52.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:06:52.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:06:52.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:06:52.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:06:52.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:06:52.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:06:52.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:06:52.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:06:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:06:52.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.670919 -999.00  +24.80  22.15     15   -3.40 1 1 1 1 1   887    0 27.85 -4.66 ----- 27.4 22.1 286.2 32.0 26.2 -26.3 26.1 -25.7 25.9 -26.6 26.3 -25.6
2025-11-12T18:06:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:06:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:06:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.670919
2025-11-12T18:06:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:06:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:06:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:06:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:06:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:06:52.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:06:35', tmtdew=34.16, humidity=9.82, cloud=0.0, wind=29.66, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:06:07.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:06:52.902 [DEBUG] [Thread-20330] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:06:52.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:06:52.997 [DEBUG] [Thread-20333] [transport.py] [_log()] starting thread (client mode): 0x149a7c40
2025-11-12T18:06:52.997 [DEBUG] [Thread-20333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:06:53.011 [DEBUG] [Thread-20333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:06:53.012 [INFO] [Thread-20333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] client lang: <none>
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] server lang: <none>
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] kex follows: False
2025-11-12T18:06:53.019 [DEBUG] [Thread-20333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:06:53.020 [DEBUG] [Thread-20333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:06:53.020 [DEBUG] [Thread-20333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:06:53.020 [DEBUG] [Thread-20333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:06:53.020 [DEBUG] [Thread-20333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:06:53.020 [DEBUG] [Thread-20333] [transport.py] [_log()] Compression: none
2025-11-12T18:06:53.020 [DEBUG] [Thread-20333] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:06:53.080 [DEBUG] [Thread-20333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:06:53.081 [DEBUG] [Thread-20333] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:06:53.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:06:53.082 [DEBUG] [Thread-20333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:06:53.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:06:53.136 [DEBUG] [Thread-20333] [transport.py] [_log()] userauth is OK
2025-11-12T18:06:53.136 [DEBUG] [Thread-20333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:06:53.136 [DEBUG] [Thread-20333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:06:53.136 [DEBUG] [Thread-20333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:06:53.136 [DEBUG] [Thread-20333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:06:53.155 [INFO] [Thread-20333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:06:53.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:06:53.155 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:06:53.968 [DEBUG] [Thread-20333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:06:53.968 [DEBUG] [Thread-20333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:06:54.017 [DEBUG] [Thread-20333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:06:54.017 [DEBUG] [Thread-20333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:06:54.025 [DEBUG] [Thread-20333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:06:54.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:06:54.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-11-12T18:06:54.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-11-12T18:06:54.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:06:54.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:06:54.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:06:54.059 [DEBUG] [Thread-20333] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:06:59.008 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:06:59.009 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:07:00.392 [DEBUG] [Thread-20335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:07:15.455 [DEBUG] [Thread-20336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:07:24.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:07:24.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:07:24.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:07:24.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 7, 7), 34.17, 9.8, 0.0, 30.3, 25.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:07:24.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:07:07
2025-11-12T18:07:24.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:07:24.991 [DEBUG] [Thread-20337] [transport.py] [_log()] starting thread (client mode): 0x11f113f0
2025-11-12T18:07:24.991 [DEBUG] [Thread-20337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:07:25.011 [DEBUG] [Thread-20337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:07:25.012 [INFO] [Thread-20337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:07:25.015 [DEBUG] [Thread-20337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:07:25.015 [DEBUG] [Thread-20337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:07:25.015 [DEBUG] [Thread-20337] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:07:25.015 [DEBUG] [Thread-20337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:07:25.015 [DEBUG] [Thread-20337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] client lang: <none>
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] server lang: <none>
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] kex follows: False
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] Compression: none
2025-11-12T18:07:25.016 [DEBUG] [Thread-20337] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:07:25.033 [DEBUG] [Thread-20337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:07:25.034 [DEBUG] [Thread-20337] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:07:25.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:07:25.035 [DEBUG] [Thread-20337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:07:25.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:07:25.077 [DEBUG] [Thread-20337] [transport.py] [_log()] userauth is OK
2025-11-12T18:07:25.077 [DEBUG] [Thread-20337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:07:25.077 [DEBUG] [Thread-20337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:07:25.077 [DEBUG] [Thread-20337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:07:25.078 [DEBUG] [Thread-20337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:07:25.104 [INFO] [Thread-20337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:07:25.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:07:25.700 [DEBUG] [Thread-20337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:07:25.700 [DEBUG] [Thread-20337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:07:25.700 [DEBUG] [Thread-20337] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:07:25.741 [DEBUG] [Thread-20337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:07:25.741 [DEBUG] [Thread-20337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:07:25.744 [DEBUG] [Thread-20337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:07:25.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:07:25.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:07:25.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:07:25.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:07:25.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:07:25.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:07:25.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:07:25.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:07:25.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:07:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.671267 -999.00  +24.80  28.07     15   -3.40 1 1 1 1 1   887    0 28.29 -4.69 ----- 33.5 28.1 281.2 36.7 26.1 -26.7 26.0 -25.8 25.8 -26.9 26.2 -25.8
2025-11-12T18:07:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:07:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:07:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.671267
2025-11-12T18:07:25.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:07:25.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:07:25.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:07:25.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:07:25.772 [DEBUG] [Thread-20337] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:07:25.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:07:25.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:07:07', tmtdew=34.17, humidity=9.8, cloud=0.0, wind=30.3, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:06:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:07: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-11-12T18:07:25.877 [DEBUG] [Thread-20340] [transport.py] [_log()] starting thread (client mode): 0x11f10100
2025-11-12T18:07:25.877 [DEBUG] [Thread-20340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:07:25.892 [DEBUG] [Thread-20340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:07:25.893 [INFO] [Thread-20340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:07:25.900 [DEBUG] [Thread-20340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:07:25.900 [DEBUG] [Thread-20340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:07:25.900 [DEBUG] [Thread-20340] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:07:25.900 [DEBUG] [Thread-20340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:07:25.900 [DEBUG] [Thread-20340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:07:25.900 [DEBUG] [Thread-20340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] client lang: <none>
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] server lang: <none>
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] kex follows: False
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] Compression: none
2025-11-12T18:07:25.901 [DEBUG] [Thread-20340] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:07:25.960 [DEBUG] [Thread-20340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:07:25.960 [DEBUG] [Thread-20340] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:07:25.961 [DEBUG] [Thread-20340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:07:25.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:07:25.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:07:26.016 [DEBUG] [Thread-20340] [transport.py] [_log()] userauth is OK
2025-11-12T18:07:26.016 [DEBUG] [Thread-20340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:07:26.016 [DEBUG] [Thread-20340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:07:26.016 [DEBUG] [Thread-20340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:07:26.016 [DEBUG] [Thread-20340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:07:26.036 [INFO] [Thread-20340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:07:26.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:07:26.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:07:26.894 [DEBUG] [Thread-20340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:07:26.894 [DEBUG] [Thread-20340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:07:26.941 [DEBUG] [Thread-20340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:07:26.942 [DEBUG] [Thread-20340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:07:26.953 [DEBUG] [Thread-20340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:07:26.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:07:26.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-11-12T18:07:26.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-11-12T18:07:26.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:07:26.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:07:26.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:07:26.988 [DEBUG] [Thread-20340] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:07:30.492 [DEBUG] [Thread-20342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:07:44.425 [DEBUG] [Thread-20343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:07:45.550 [DEBUG] [Thread-20344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:07:57.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:07:57.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:07:57.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-11-12T18:07:57.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 7, 39), 34.16, 9.82, 0.0, 33.72, 25.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:07:57.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:07:39
2025-11-12T18:07:57.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:07:57.967 [DEBUG] [Thread-20345] [transport.py] [_log()] starting thread (client mode): 0x149a6230
2025-11-12T18:07:57.967 [DEBUG] [Thread-20345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:07:57.987 [DEBUG] [Thread-20345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:07:57.987 [INFO] [Thread-20345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] client lang: <none>
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] server lang: <none>
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] kex follows: False
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] Compression: none
2025-11-12T18:07:57.990 [DEBUG] [Thread-20345] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:07:58.007 [DEBUG] [Thread-20345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:07:58.007 [DEBUG] [Thread-20345] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:07:58.008 [DEBUG] [Thread-20345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:07:58.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:07:58.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:07:58.008 [DEBUG] [Thread-20345] [transport.py] [_log()] userauth is OK
2025-11-12T18:07:58.008 [DEBUG] [Thread-20345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:07:58.009 [DEBUG] [Thread-20345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:07:58.009 [DEBUG] [Thread-20345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:07:58.009 [DEBUG] [Thread-20345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:07:58.021 [INFO] [Thread-20345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:07:58.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:07:58.660 [DEBUG] [Thread-20345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:07:58.660 [DEBUG] [Thread-20345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:07:58.660 [DEBUG] [Thread-20345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:07:58.701 [DEBUG] [Thread-20345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:07:58.701 [DEBUG] [Thread-20345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:07:58.703 [DEBUG] [Thread-20345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:07:58.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:07:58.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:07:58.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:07:58.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:07:58.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:07:58.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:07:58.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:07:58.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:07:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:07:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.671614 -999.00  +24.70  26.71     15   -3.40 1 1 1 1 1   887    0 28.08 -4.68 ----- 24.1 26.7 287.6 44.0 26.0 -26.7 26.0 -25.6 25.7 -25.5 26.1 -26.3
2025-11-12T18:07:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:07:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:07:58.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.671614
2025-11-12T18:07:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:07:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:07:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:07:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:07:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:07:58.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:07:39', tmtdew=34.16, humidity=9.82, cloud=0.0, wind=33.72, temperature=25.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:07:07.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:07:58.724 [DEBUG] [Thread-20345] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:07:58.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:07:58.812 [DEBUG] [Thread-20348] [transport.py] [_log()] starting thread (client mode): 0x149a7070
2025-11-12T18:07:58.812 [DEBUG] [Thread-20348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:07:58.828 [DEBUG] [Thread-20348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:07:58.829 [INFO] [Thread-20348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] client lang: <none>
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] server lang: <none>
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] kex follows: False
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] Compression: none
2025-11-12T18:07:58.838 [DEBUG] [Thread-20348] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:07:58.899 [DEBUG] [Thread-20348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:07:58.899 [DEBUG] [Thread-20348] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:07:58.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:07:58.900 [DEBUG] [Thread-20348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:07:58.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:07:58.959 [DEBUG] [Thread-20348] [transport.py] [_log()] userauth is OK
2025-11-12T18:07:58.959 [DEBUG] [Thread-20348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:07:58.959 [DEBUG] [Thread-20348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:07:58.959 [DEBUG] [Thread-20348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:07:58.959 [DEBUG] [Thread-20348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:07:58.974 [INFO] [Thread-20348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:07:58.974 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:07:58.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:07:59.151 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:07:59.153 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:07:59.813 [DEBUG] [Thread-20348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:07:59.813 [DEBUG] [Thread-20348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:07:59.861 [DEBUG] [Thread-20348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:07:59.861 [DEBUG] [Thread-20348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:07:59.869 [DEBUG] [Thread-20348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:07:59.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:07:59.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-11-12T18:07:59.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-11-12T18:07:59.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:07:59.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:07:59.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:07:59.901 [DEBUG] [Thread-20348] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:08:00.588 [DEBUG] [Thread-20350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:08:15.629 [DEBUG] [Thread-20351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:08:29.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:08:29.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:08:29.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-11-12T18:08:30.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 8, 11), 34.24, 9.75, 0.0, 33.82, 25.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:08:30.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:08:11
2025-11-12T18:08:30.664 [DEBUG] [Thread-20352 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:08:30.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:08:30.848 [DEBUG] [Thread-20353] [transport.py] [_log()] starting thread (client mode): 0x149a56c0
2025-11-12T18:08:30.848 [DEBUG] [Thread-20353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:08:30.863 [DEBUG] [Thread-20353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:08:30.863 [INFO] [Thread-20353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:08:30.866 [DEBUG] [Thread-20353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:08:30.866 [DEBUG] [Thread-20353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:08:30.866 [DEBUG] [Thread-20353] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:08:30.866 [DEBUG] [Thread-20353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:08:30.866 [DEBUG] [Thread-20353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] client lang: <none>
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] server lang: <none>
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] kex follows: False
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] Compression: none
2025-11-12T18:08:30.867 [DEBUG] [Thread-20353] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:08:30.887 [DEBUG] [Thread-20353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:08:30.887 [DEBUG] [Thread-20353] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:08:30.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:08:30.889 [DEBUG] [Thread-20353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:08:30.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:08:30.891 [DEBUG] [Thread-20353] [transport.py] [_log()] userauth is OK
2025-11-12T18:08:30.891 [DEBUG] [Thread-20353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:08:30.891 [DEBUG] [Thread-20353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:08:30.891 [DEBUG] [Thread-20353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:08:30.891 [DEBUG] [Thread-20353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:08:30.915 [INFO] [Thread-20353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:08:30.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:08:31.537 [DEBUG] [Thread-20353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:08:31.537 [DEBUG] [Thread-20353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:08:31.537 [DEBUG] [Thread-20353] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:08:31.578 [DEBUG] [Thread-20353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:08:31.578 [DEBUG] [Thread-20353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:08:31.581 [DEBUG] [Thread-20353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:08:31.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:08:31.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:08:31.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:08:31.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:08:31.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:08:31.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:08:31.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:08:31.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:08:31.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:08:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.671962 -999.00  +24.70  34.60     15   -3.40 1 1 2 1 1   887    0 28.26 -3.98 ----- 36.6 34.6 269.6 38.8 26.0 -26.6 25.9 -26.1 25.6 -26.4 26.0 -25.5
2025-11-12T18:08:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:08:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:08:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.671962
2025-11-12T18:08:31.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:08:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:08:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:08:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:08:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:08:31.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:08:11', tmtdew=34.24, humidity=9.75, cloud=0.0, wind=33.82, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:07:37.517', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:08:31.607 [DEBUG] [Thread-20353] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:08:31.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:08:31.702 [DEBUG] [Thread-20356] [transport.py] [_log()] starting thread (client mode): 0x149a4f70
2025-11-12T18:08:31.702 [DEBUG] [Thread-20356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:08:31.720 [DEBUG] [Thread-20356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:08:31.720 [INFO] [Thread-20356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] client lang: <none>
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] server lang: <none>
2025-11-12T18:08:31.728 [DEBUG] [Thread-20356] [transport.py] [_log()] kex follows: False
2025-11-12T18:08:31.729 [DEBUG] [Thread-20356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:08:31.729 [DEBUG] [Thread-20356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:08:31.729 [DEBUG] [Thread-20356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:08:31.729 [DEBUG] [Thread-20356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:08:31.729 [DEBUG] [Thread-20356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:08:31.729 [DEBUG] [Thread-20356] [transport.py] [_log()] Compression: none
2025-11-12T18:08:31.729 [DEBUG] [Thread-20356] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:08:31.792 [DEBUG] [Thread-20356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:08:31.793 [DEBUG] [Thread-20356] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:08:31.793 [DEBUG] [Thread-20356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:08:31.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:08:31.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:08:31.848 [DEBUG] [Thread-20356] [transport.py] [_log()] userauth is OK
2025-11-12T18:08:31.848 [DEBUG] [Thread-20356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:08:31.848 [DEBUG] [Thread-20356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:08:31.848 [DEBUG] [Thread-20356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:08:31.848 [DEBUG] [Thread-20356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:08:31.867 [INFO] [Thread-20356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:08:31.868 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:08:31.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:08:32.754 [DEBUG] [Thread-20356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:08:32.754 [DEBUG] [Thread-20356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:08:32.801 [DEBUG] [Thread-20356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:08:32.801 [DEBUG] [Thread-20356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:08:32.810 [DEBUG] [Thread-20356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:08:32.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:08:32.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')
2025-11-12T18:08:32.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-11-12T18:08:32.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:08:32.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:08:32.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:08:32.845 [DEBUG] [Thread-20356] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:08:44.458 [DEBUG] [Thread-20358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:08:45.694 [DEBUG] [Thread-20359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:08:59.294 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:08:59.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:09:00.744 [DEBUG] [Thread-20360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:09:02.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:09:02.868 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:09:02.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-11-12T18:09:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 8, 43), 34.13, 9.8, 0.0, 31.5, 25.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:09:03.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:08:43
2025-11-12T18:09:03.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:09:03.791 [DEBUG] [Thread-20361] [transport.py] [_log()] starting thread (client mode): 0x14955630
2025-11-12T18:09:03.791 [DEBUG] [Thread-20361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:09:03.813 [DEBUG] [Thread-20361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:09:03.813 [INFO] [Thread-20361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] client lang: <none>
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] server lang: <none>
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] kex follows: False
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:09:03.816 [DEBUG] [Thread-20361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:09:03.817 [DEBUG] [Thread-20361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:09:03.817 [DEBUG] [Thread-20361] [transport.py] [_log()] Compression: none
2025-11-12T18:09:03.817 [DEBUG] [Thread-20361] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:09:03.834 [DEBUG] [Thread-20361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:09:03.834 [DEBUG] [Thread-20361] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:09:03.835 [DEBUG] [Thread-20361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:09:03.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:09:03.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:09:03.837 [DEBUG] [Thread-20361] [transport.py] [_log()] userauth is OK
2025-11-12T18:09:03.837 [DEBUG] [Thread-20361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:09:03.837 [DEBUG] [Thread-20361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:09:03.837 [DEBUG] [Thread-20361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:09:03.838 [DEBUG] [Thread-20361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:09:03.874 [INFO] [Thread-20361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:09:03.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:09:04.530 [DEBUG] [Thread-20361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:09:04.530 [DEBUG] [Thread-20361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:09:04.531 [DEBUG] [Thread-20361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:09:04.572 [DEBUG] [Thread-20361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:09:04.572 [DEBUG] [Thread-20361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:09:04.575 [DEBUG] [Thread-20361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:09:04.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:09:04.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:09:04.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:09:04.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:09:04.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:09:04.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:09:04.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:09:04.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:09:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:09:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.672308 -999.00  +24.70  33.83     15   -3.40 1 1 2 1 1   887    0 28.61 -4.14 ----- 33.6 33.8 273.4 39.1 25.9 -26.6 25.9 -26.0 25.5 -26.8 26.0 -25.6
2025-11-12T18:09:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:09:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:09:04.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.672308
2025-11-12T18:09:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:09:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:09:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:09:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:09:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:09:04.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:08:43', tmtdew=34.13, humidity=9.8, cloud=0.0, wind=31.5, temperature=25.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:08:07.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:09:04.602 [DEBUG] [Thread-20361] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:09:04.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:09:04.695 [DEBUG] [Thread-20364] [transport.py] [_log()] starting thread (client mode): 0x14956ef0
2025-11-12T18:09:04.696 [DEBUG] [Thread-20364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:09:04.711 [DEBUG] [Thread-20364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:09:04.711 [INFO] [Thread-20364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:09:04.719 [DEBUG] [Thread-20364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:09:04.719 [DEBUG] [Thread-20364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:09:04.719 [DEBUG] [Thread-20364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:09:04.719 [DEBUG] [Thread-20364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:09:04.719 [DEBUG] [Thread-20364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] client lang: <none>
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] server lang: <none>
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] kex follows: False
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:09:04.720 [DEBUG] [Thread-20364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:09:04.721 [DEBUG] [Thread-20364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:09:04.721 [DEBUG] [Thread-20364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:09:04.721 [DEBUG] [Thread-20364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:09:04.721 [DEBUG] [Thread-20364] [transport.py] [_log()] Compression: none
2025-11-12T18:09:04.721 [DEBUG] [Thread-20364] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:09:04.780 [DEBUG] [Thread-20364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:09:04.781 [DEBUG] [Thread-20364] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:09:04.781 [DEBUG] [Thread-20364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:09:04.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:09:04.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:09:04.836 [DEBUG] [Thread-20364] [transport.py] [_log()] userauth is OK
2025-11-12T18:09:04.836 [DEBUG] [Thread-20364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:09:04.836 [DEBUG] [Thread-20364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:09:04.836 [DEBUG] [Thread-20364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:09:04.836 [DEBUG] [Thread-20364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:09:04.856 [INFO] [Thread-20364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:09:04.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:09:04.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:09:05.675 [DEBUG] [Thread-20364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:09:05.675 [DEBUG] [Thread-20364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:09:05.723 [DEBUG] [Thread-20364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:09:05.724 [DEBUG] [Thread-20364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:09:05.733 [DEBUG] [Thread-20364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:09:05.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:09:05.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-11-12T18:09:05.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-11-12T18:09:05.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:09:05.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:09:05.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:09:05.770 [DEBUG] [Thread-20364] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:09:15.775 [DEBUG] [Thread-20366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:09:30.815 [DEBUG] [Thread-20367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:09:35.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:09:35.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:09:35.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-11-12T18:09:36.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 9, 15), 34.12, 9.8, 0.0, 32.68, 24.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:09:36.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:09:15
2025-11-12T18:09:36.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:09:36.691 [DEBUG] [Thread-20368] [transport.py] [_log()] starting thread (client mode): 0x149aa020
2025-11-12T18:09:36.692 [DEBUG] [Thread-20368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:09:36.712 [DEBUG] [Thread-20368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:09:36.712 [INFO] [Thread-20368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] client lang: <none>
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] server lang: <none>
2025-11-12T18:09:36.715 [DEBUG] [Thread-20368] [transport.py] [_log()] kex follows: False
2025-11-12T18:09:36.716 [DEBUG] [Thread-20368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:09:36.716 [DEBUG] [Thread-20368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:09:36.716 [DEBUG] [Thread-20368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:09:36.716 [DEBUG] [Thread-20368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:09:36.716 [DEBUG] [Thread-20368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:09:36.716 [DEBUG] [Thread-20368] [transport.py] [_log()] Compression: none
2025-11-12T18:09:36.716 [DEBUG] [Thread-20368] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:09:36.733 [DEBUG] [Thread-20368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:09:36.734 [DEBUG] [Thread-20368] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:09:36.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:09:36.735 [DEBUG] [Thread-20368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:09:36.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:09:36.737 [DEBUG] [Thread-20368] [transport.py] [_log()] userauth is OK
2025-11-12T18:09:36.737 [DEBUG] [Thread-20368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:09:36.737 [DEBUG] [Thread-20368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:09:36.738 [DEBUG] [Thread-20368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:09:36.738 [DEBUG] [Thread-20368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:09:36.759 [INFO] [Thread-20368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:09:36.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:09:37.421 [DEBUG] [Thread-20368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:09:37.421 [DEBUG] [Thread-20368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:09:37.422 [DEBUG] [Thread-20368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:09:37.463 [DEBUG] [Thread-20368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:09:37.463 [DEBUG] [Thread-20368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:09:37.466 [DEBUG] [Thread-20368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:09:37.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:09:37.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:09:37.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:09:37.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:09:37.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:09:37.493 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:09:37.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:09:37.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:09:37.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:09:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.673003 -999.00  +24.60  36.22     15   -3.50 1 1 2 1 1   887    0 27.88 -5.57 ----- 30.3 36.2 274.4 43.5 25.8 -26.8 25.8 -25.8 25.5 -26.4 25.8 -25.8
2025-11-12T18:09:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:09:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:09:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.673003
2025-11-12T18:09:37.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:09:37.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:09:37.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:09:37.496 [DEBUG] [Thread-20368] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:09:37.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:09:37.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:09:37.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:09:15', tmtdew=34.12, humidity=9.8, cloud=0.0, wind=32.68, temperature=24.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:09:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:09:37.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:09:37.593 [DEBUG] [Thread-20371] [transport.py] [_log()] starting thread (client mode): 0x14956560
2025-11-12T18:09:37.593 [DEBUG] [Thread-20371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:09:37.612 [DEBUG] [Thread-20371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:09:37.613 [INFO] [Thread-20371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:09:37.620 [DEBUG] [Thread-20371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:09:37.620 [DEBUG] [Thread-20371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:09:37.620 [DEBUG] [Thread-20371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:09:37.620 [DEBUG] [Thread-20371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] client lang: <none>
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] server lang: <none>
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] kex follows: False
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:09:37.621 [DEBUG] [Thread-20371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:09:37.622 [DEBUG] [Thread-20371] [transport.py] [_log()] Compression: none
2025-11-12T18:09:37.622 [DEBUG] [Thread-20371] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:09:37.679 [DEBUG] [Thread-20371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:09:37.680 [DEBUG] [Thread-20371] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:09:37.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:09:37.681 [DEBUG] [Thread-20371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:09:37.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:09:37.736 [DEBUG] [Thread-20371] [transport.py] [_log()] userauth is OK
2025-11-12T18:09:37.736 [DEBUG] [Thread-20371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:09:37.736 [DEBUG] [Thread-20371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:09:37.737 [DEBUG] [Thread-20371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:09:37.737 [DEBUG] [Thread-20371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:09:37.755 [INFO] [Thread-20371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:09:37.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:09:37.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:09:38.635 [DEBUG] [Thread-20371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:09:38.635 [DEBUG] [Thread-20371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:09:38.683 [DEBUG] [Thread-20371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:09:38.683 [DEBUG] [Thread-20371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:09:38.692 [DEBUG] [Thread-20371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:09:38.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:09:38.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-11-12T18:09:38.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-11-12T18:09:38.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:09:38.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:09:38.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:09:38.729 [DEBUG] [Thread-20371] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:09:44.501 [DEBUG] [Thread-20373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:09:45.854 [DEBUG] [Thread-20374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:09:59.436 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:09:59.438 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:10:00.904 [DEBUG] [Thread-20375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:10:08.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:10:08.752 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:10:08.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-11-12T18:10:09.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 9, 47), 34.1, 9.78, 0.0, 25.71, 24.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:10:09.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:09:47
2025-11-12T18:10:09.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:10:09.658 [DEBUG] [Thread-20376] [transport.py] [_log()] starting thread (client mode): 0x173e8fd0
2025-11-12T18:10:09.658 [DEBUG] [Thread-20376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:10:09.679 [DEBUG] [Thread-20376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:10:09.679 [INFO] [Thread-20376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] client lang: <none>
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] server lang: <none>
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] kex follows: False
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:10:09.682 [DEBUG] [Thread-20376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:10:09.683 [DEBUG] [Thread-20376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:10:09.683 [DEBUG] [Thread-20376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:10:09.683 [DEBUG] [Thread-20376] [transport.py] [_log()] Compression: none
2025-11-12T18:10:09.683 [DEBUG] [Thread-20376] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:10:09.701 [DEBUG] [Thread-20376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:10:09.702 [DEBUG] [Thread-20376] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:10:09.702 [DEBUG] [Thread-20376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:10:09.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:10:09.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:10:09.704 [DEBUG] [Thread-20376] [transport.py] [_log()] userauth is OK
2025-11-12T18:10:09.704 [DEBUG] [Thread-20376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:10:09.705 [DEBUG] [Thread-20376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:10:09.705 [DEBUG] [Thread-20376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:10:09.705 [DEBUG] [Thread-20376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:10:09.729 [INFO] [Thread-20376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:10:09.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:10:11.313 [DEBUG] [Thread-20376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:10:11.313 [DEBUG] [Thread-20376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:10:11.314 [DEBUG] [Thread-20376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:10:11.353 [DEBUG] [Thread-20376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:10:11.354 [DEBUG] [Thread-20376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:10:11.357 [DEBUG] [Thread-20376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:10:11.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:10:11.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:10:11.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:10:11.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:10:11.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:10:11.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:10:11.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:10:11.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:10:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:10:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.673350 -999.00  +24.60  23.80     15   -3.40 1 1 1 1 1   887    0 28.31 -7.16 ----- 22.0 23.8 277.4 32.5 25.8 -26.3 25.7 -25.6 25.4 -25.7 25.7 -25.9
2025-11-12T18:10:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:10:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:10:11.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.673350
2025-11-12T18:10:11.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:10:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:10:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:10:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:10:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:10:11.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:09:47', tmtdew=34.1, humidity=9.78, cloud=0.0, wind=25.71, temperature=24.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:09:37.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:10:11.423 [DEBUG] [Thread-20376] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:10:11.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:10:11.520 [DEBUG] [Thread-20379] [transport.py] [_log()] starting thread (client mode): 0x17363a60
2025-11-12T18:10:11.521 [DEBUG] [Thread-20379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:10:11.535 [DEBUG] [Thread-20379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:10:11.536 [INFO] [Thread-20379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:10:11.543 [DEBUG] [Thread-20379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:10:11.543 [DEBUG] [Thread-20379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:10:11.543 [DEBUG] [Thread-20379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:10:11.543 [DEBUG] [Thread-20379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:10:11.543 [DEBUG] [Thread-20379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] client lang: <none>
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] server lang: <none>
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] kex follows: False
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] Compression: none
2025-11-12T18:10:11.544 [DEBUG] [Thread-20379] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:10:11.603 [DEBUG] [Thread-20379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:10:11.604 [DEBUG] [Thread-20379] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:10:11.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:10:11.605 [DEBUG] [Thread-20379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:10:11.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:10:11.660 [DEBUG] [Thread-20379] [transport.py] [_log()] userauth is OK
2025-11-12T18:10:11.660 [DEBUG] [Thread-20379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:10:11.661 [DEBUG] [Thread-20379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:10:11.661 [DEBUG] [Thread-20379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:10:11.661 [DEBUG] [Thread-20379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:10:11.680 [INFO] [Thread-20379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:10:11.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:10:11.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:10:12.502 [DEBUG] [Thread-20379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:10:12.503 [DEBUG] [Thread-20379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:10:12.550 [DEBUG] [Thread-20379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:10:12.551 [DEBUG] [Thread-20379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:10:12.561 [DEBUG] [Thread-20379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:10:12.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:10:12.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:10:12.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:10:12.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:10:12.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:10:12.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:10:12.597 [DEBUG] [Thread-20379] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:10:15.941 [DEBUG] [Thread-20381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:10:30.988 [DEBUG] [Thread-20382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:10:42.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:10:42.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:10:42.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:10:43.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 10, 19), 34.11, 9.78, 0.0, 27.54, 25.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:10:43.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:10:19
2025-11-12T18:10:43.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:10:43.513 [DEBUG] [Thread-20383] [transport.py] [_log()] starting thread (client mode): 0x11f12f80
2025-11-12T18:10:43.514 [DEBUG] [Thread-20383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:10:43.534 [DEBUG] [Thread-20383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:10:43.534 [INFO] [Thread-20383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] client lang: <none>
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] server lang: <none>
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] kex follows: False
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:10:43.538 [DEBUG] [Thread-20383] [transport.py] [_log()] Compression: none
2025-11-12T18:10:43.539 [DEBUG] [Thread-20383] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:10:43.554 [DEBUG] [Thread-20383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:10:43.554 [DEBUG] [Thread-20383] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:10:43.555 [DEBUG] [Thread-20383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:10:43.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:10:43.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:10:43.557 [DEBUG] [Thread-20383] [transport.py] [_log()] userauth is OK
2025-11-12T18:10:43.557 [DEBUG] [Thread-20383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:10:43.557 [DEBUG] [Thread-20383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:10:43.557 [DEBUG] [Thread-20383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:10:43.557 [DEBUG] [Thread-20383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:10:43.590 [INFO] [Thread-20383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:10:43.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:10:44.196 [DEBUG] [Thread-20383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:10:44.197 [DEBUG] [Thread-20383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:10:44.197 [DEBUG] [Thread-20383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:10:44.238 [DEBUG] [Thread-20383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:10:44.238 [DEBUG] [Thread-20383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:10:44.241 [DEBUG] [Thread-20383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:10:44.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:10:44.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:10:44.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:10:44.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:10:44.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:10:44.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:10:44.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:10:44.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:10:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:10:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.673697 -999.00  +24.60  22.54     15   -3.40 1 1 1 1 1   887    0 28.31 -8.84 ----- 21.6 22.5 273.2 30.4 25.8 -26.6 25.7 -25.8 25.5 -25.7 25.8 -25.7
2025-11-12T18:10:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:10:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:10:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.673697
2025-11-12T18:10:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:10:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:10:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:10:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:10:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:10:44.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:10:19', tmtdew=34.11, humidity=9.78, cloud=0.0, wind=27.54, temperature=25.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:10:07.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:10:44.268 [DEBUG] [Thread-20383] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:10:44.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:10:44.363 [DEBUG] [Thread-20386] [transport.py] [_log()] starting thread (client mode): 0x14954130
2025-11-12T18:10:44.364 [DEBUG] [Thread-20386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:10:44.378 [DEBUG] [Thread-20386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:10:44.378 [INFO] [Thread-20386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:10:44.386 [DEBUG] [Thread-20386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:10:44.386 [DEBUG] [Thread-20386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:10:44.386 [DEBUG] [Thread-20386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:10:44.386 [DEBUG] [Thread-20386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] client lang: <none>
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] server lang: <none>
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] kex follows: False
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:10:44.387 [DEBUG] [Thread-20386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:10:44.388 [DEBUG] [Thread-20386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:10:44.388 [DEBUG] [Thread-20386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:10:44.388 [DEBUG] [Thread-20386] [transport.py] [_log()] Compression: none
2025-11-12T18:10:44.388 [DEBUG] [Thread-20386] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:10:44.444 [DEBUG] [Thread-20386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:10:44.444 [DEBUG] [Thread-20386] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:10:44.445 [DEBUG] [Thread-20386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:10:44.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:10:44.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:10:44.500 [DEBUG] [Thread-20386] [transport.py] [_log()] userauth is OK
2025-11-12T18:10:44.500 [DEBUG] [Thread-20386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:10:44.500 [DEBUG] [Thread-20386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:10:44.500 [DEBUG] [Thread-20386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:10:44.500 [DEBUG] [Thread-20386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:10:44.519 [INFO] [Thread-20386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:10:44.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:10:44.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:10:44.537 [DEBUG] [Thread-20388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:10:45.347 [DEBUG] [Thread-20386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:10:45.347 [DEBUG] [Thread-20386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:10:45.394 [DEBUG] [Thread-20386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:10:45.394 [DEBUG] [Thread-20386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:10:45.403 [DEBUG] [Thread-20386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:10:45.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:10:45.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-11-12T18:10:45.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-11-12T18:10:45.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:10:45.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:10:45.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:10:45.437 [DEBUG] [Thread-20386] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:10:46.020 [DEBUG] [Thread-20389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:10:59.578 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:10:59.579 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:11:01.071 [DEBUG] [Thread-20390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:11:15.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:11:15.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:11:15.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-11-12T18:11:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 10, 51), 33.92, 9.83, 0.0, 27.08, 24.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:11:16.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:10:51
2025-11-12T18:11:16.104 [DEBUG] [Thread-20391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:11:16.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:11:16.342 [DEBUG] [Thread-20392] [transport.py] [_log()] starting thread (client mode): 0x173618a0
2025-11-12T18:11:16.342 [DEBUG] [Thread-20392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:11:16.362 [DEBUG] [Thread-20392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:11:16.362 [INFO] [Thread-20392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:11:16.365 [DEBUG] [Thread-20392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:11:16.365 [DEBUG] [Thread-20392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:11:16.365 [DEBUG] [Thread-20392] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:11:16.365 [DEBUG] [Thread-20392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:11:16.365 [DEBUG] [Thread-20392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:11:16.365 [DEBUG] [Thread-20392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] client lang: <none>
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] server lang: <none>
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] kex follows: False
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] Compression: none
2025-11-12T18:11:16.366 [DEBUG] [Thread-20392] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:11:16.385 [DEBUG] [Thread-20392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:11:16.386 [DEBUG] [Thread-20392] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:11:16.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:11:16.388 [DEBUG] [Thread-20392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:11:16.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:11:16.390 [DEBUG] [Thread-20392] [transport.py] [_log()] userauth is OK
2025-11-12T18:11:16.391 [DEBUG] [Thread-20392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:11:16.391 [DEBUG] [Thread-20392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:11:16.391 [DEBUG] [Thread-20392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:11:16.391 [DEBUG] [Thread-20392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:11:16.420 [INFO] [Thread-20392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:11:16.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:11:17.064 [DEBUG] [Thread-20392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:11:17.065 [DEBUG] [Thread-20392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:11:17.065 [DEBUG] [Thread-20392] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:11:17.106 [DEBUG] [Thread-20392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:11:17.106 [DEBUG] [Thread-20392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:11:17.109 [DEBUG] [Thread-20392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:11:17.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:11:17.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:11:17.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:11:17.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:11:17.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:11:17.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:11:17.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:11:17.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:11:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:11:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.674044 -999.00  +24.60  28.73     15   -3.30 1 1 1 1 1   887    0 27.85 -10.93 ----- 19.3 28.7 269.6 34.6 25.7 -26.5 25.7 -25.8 25.4 -25.9 25.7 -25.8
2025-11-12T18:11:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:11:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:11:17.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.674044
2025-11-12T18:11:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:11:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:11:17.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:11:17.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:11:17.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:11:17.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:10:51', tmtdew=33.92, humidity=9.83, cloud=0.0, wind=27.08, temperature=24.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:10:37.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:11:17.137 [DEBUG] [Thread-20392] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:11:17.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:11:17.233 [DEBUG] [Thread-20395] [transport.py] [_log()] starting thread (client mode): 0x173627a0
2025-11-12T18:11:17.233 [DEBUG] [Thread-20395] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:11:17.247 [DEBUG] [Thread-20395] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:11:17.247 [INFO] [Thread-20395] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:11:17.254 [DEBUG] [Thread-20395] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:11:17.254 [DEBUG] [Thread-20395] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] client lang: <none>
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] server lang: <none>
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] kex follows: False
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] Compression: none
2025-11-12T18:11:17.255 [DEBUG] [Thread-20395] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:11:17.312 [DEBUG] [Thread-20395] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:11:17.312 [DEBUG] [Thread-20395] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:11:17.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:11:17.313 [DEBUG] [Thread-20395] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:11:17.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:11:17.368 [DEBUG] [Thread-20395] [transport.py] [_log()] userauth is OK
2025-11-12T18:11:17.369 [DEBUG] [Thread-20395] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:11:17.369 [DEBUG] [Thread-20395] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:11:17.369 [DEBUG] [Thread-20395] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:11:17.369 [DEBUG] [Thread-20395] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:11:17.387 [INFO] [Thread-20395] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:11:17.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:11:17.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:11:18.243 [DEBUG] [Thread-20395] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:11:18.244 [DEBUG] [Thread-20395] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:11:18.292 [DEBUG] [Thread-20395] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:11:18.292 [DEBUG] [Thread-20395] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:11:18.302 [DEBUG] [Thread-20395] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:11:18.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:11:18.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')
2025-11-12T18:11:18.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-11-12T18:11:18.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:11:18.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:11:18.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:11:18.338 [DEBUG] [Thread-20395] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:11:31.137 [DEBUG] [Thread-20397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:11:44.590 [DEBUG] [Thread-20398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:11:46.192 [DEBUG] [Thread-20399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:11:48.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:11:48.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:11:48.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-11-12T18:11:49.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 11, 23), 33.91, 9.83, 0.0, 27.47, 24.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:11:49.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:11:23
2025-11-12T18:11:49.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:11:49.310 [DEBUG] [Thread-20400] [transport.py] [_log()] starting thread (client mode): 0x17363c70
2025-11-12T18:11:49.310 [DEBUG] [Thread-20400] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:11:49.330 [DEBUG] [Thread-20400] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:11:49.330 [INFO] [Thread-20400] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] client lang: <none>
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] server lang: <none>
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] kex follows: False
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] Compression: none
2025-11-12T18:11:49.331 [DEBUG] [Thread-20400] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:11:49.338 [DEBUG] [Thread-20400] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:11:49.338 [DEBUG] [Thread-20400] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:11:49.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:11:49.339 [DEBUG] [Thread-20400] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:11:49.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:11:49.339 [DEBUG] [Thread-20400] [transport.py] [_log()] userauth is OK
2025-11-12T18:11:49.339 [DEBUG] [Thread-20400] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:11:49.339 [DEBUG] [Thread-20400] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:11:49.339 [DEBUG] [Thread-20400] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:11:49.339 [DEBUG] [Thread-20400] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:11:49.354 [INFO] [Thread-20400] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:11:49.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:11:50.006 [DEBUG] [Thread-20400] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:11:50.006 [DEBUG] [Thread-20400] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:11:50.006 [DEBUG] [Thread-20400] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:11:50.047 [DEBUG] [Thread-20400] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:11:50.047 [DEBUG] [Thread-20400] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:11:50.049 [DEBUG] [Thread-20400] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:11:50.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:11:50.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:11:50.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:11:50.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:11:50.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:11:50.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:11:50.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.674392 -999.00  +24.60  20.31     15   -3.30 1 1 1 1 1   887    0 27.62 -12.04 ----- 18.3 20.3 269.4 23.8 25.7 -26.4 25.7 -25.6 25.4 -25.5 25.7 -25.6
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.674392
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:11:50.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:11:23', tmtdew=33.91, humidity=9.83, cloud=0.0, wind=27.47, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:11:07.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:11:50.070 [DEBUG] [Thread-20400] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:11:50.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:11:50.154 [DEBUG] [Thread-20403] [transport.py] [_log()] starting thread (client mode): 0x149554e0
2025-11-12T18:11:50.154 [DEBUG] [Thread-20403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:11:50.168 [DEBUG] [Thread-20403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:11:50.168 [INFO] [Thread-20403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] client lang: <none>
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] server lang: <none>
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] kex follows: False
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] Compression: none
2025-11-12T18:11:50.176 [DEBUG] [Thread-20403] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:11:50.234 [DEBUG] [Thread-20403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:11:50.234 [DEBUG] [Thread-20403] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:11:50.234 [DEBUG] [Thread-20403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:11:50.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:11:50.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:11:50.291 [DEBUG] [Thread-20403] [transport.py] [_log()] userauth is OK
2025-11-12T18:11:50.291 [DEBUG] [Thread-20403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:11:50.291 [DEBUG] [Thread-20403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:11:50.291 [DEBUG] [Thread-20403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:11:50.291 [DEBUG] [Thread-20403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:11:50.305 [INFO] [Thread-20403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:11:50.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:11:50.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:11:51.133 [DEBUG] [Thread-20403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:11:51.133 [DEBUG] [Thread-20403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:11:51.181 [DEBUG] [Thread-20403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:11:51.181 [DEBUG] [Thread-20403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:11:51.189 [DEBUG] [Thread-20403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:11:51.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:11:51.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-11-12T18:11:51.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-11-12T18:11:51.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:11:51.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:11:51.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:11:51.222 [DEBUG] [Thread-20403] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:11:59.720 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:11:59.721 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:12:01.225 [DEBUG] [Thread-20405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:12:16.282 [DEBUG] [Thread-20406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:12:21.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:12:21.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:12:21.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-11-12T18:12:21.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 11, 55), 33.8, 9.88, 0.0, 30.15, 24.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:12:21.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:11:55
2025-11-12T18:12:22.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:12:22.151 [DEBUG] [Thread-20407] [transport.py] [_log()] starting thread (client mode): 0x14957e80
2025-11-12T18:12:22.151 [DEBUG] [Thread-20407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:12:22.171 [DEBUG] [Thread-20407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:12:22.171 [INFO] [Thread-20407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:12:22.174 [DEBUG] [Thread-20407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:12:22.174 [DEBUG] [Thread-20407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:12:22.174 [DEBUG] [Thread-20407] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:12:22.174 [DEBUG] [Thread-20407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] client lang: <none>
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] server lang: <none>
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] kex follows: False
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] Compression: none
2025-11-12T18:12:22.175 [DEBUG] [Thread-20407] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:12:22.192 [DEBUG] [Thread-20407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:12:22.192 [DEBUG] [Thread-20407] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:12:22.193 [DEBUG] [Thread-20407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:12:22.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:12:22.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:12:22.195 [DEBUG] [Thread-20407] [transport.py] [_log()] userauth is OK
2025-11-12T18:12:22.195 [DEBUG] [Thread-20407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:12:22.195 [DEBUG] [Thread-20407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:12:22.195 [DEBUG] [Thread-20407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:12:22.195 [DEBUG] [Thread-20407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:12:22.232 [INFO] [Thread-20407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:12:22.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:12:22.864 [DEBUG] [Thread-20407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:12:22.864 [DEBUG] [Thread-20407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:12:22.864 [DEBUG] [Thread-20407] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:12:22.904 [DEBUG] [Thread-20407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:12:22.904 [DEBUG] [Thread-20407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:12:22.906 [DEBUG] [Thread-20407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:12:22.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:12:22.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:12:22.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:12:22.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:12:22.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:12:22.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:12:22.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.674739 -999.00  +24.60  26.05     15   -3.30 1 1 1 1 1   887    0 27.78 -13.57 ----- 20.7 26.1 269.8 29.7 25.7 -26.4 25.6 -25.7 25.3 -25.4 25.6 -25.9
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.674739
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:12:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:11:55', tmtdew=33.8, humidity=9.88, cloud=0.0, wind=30.15, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:11:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:12:22.926 [DEBUG] [Thread-20407] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:12: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-11-12T18:12:23.009 [DEBUG] [Thread-20410] [transport.py] [_log()] starting thread (client mode): 0x17360fd0
2025-11-12T18:12:23.009 [DEBUG] [Thread-20410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:12:23.023 [DEBUG] [Thread-20410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:12:23.023 [INFO] [Thread-20410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:12:23.030 [DEBUG] [Thread-20410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] client lang: <none>
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] server lang: <none>
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] kex follows: False
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] Compression: none
2025-11-12T18:12:23.031 [DEBUG] [Thread-20410] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:12:23.088 [DEBUG] [Thread-20410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:12:23.089 [DEBUG] [Thread-20410] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:12:23.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:12:23.090 [DEBUG] [Thread-20410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:12:23.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:12:23.144 [DEBUG] [Thread-20410] [transport.py] [_log()] userauth is OK
2025-11-12T18:12:23.144 [DEBUG] [Thread-20410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:12:23.144 [DEBUG] [Thread-20410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:12:23.144 [DEBUG] [Thread-20410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:12:23.145 [DEBUG] [Thread-20410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:12:23.163 [INFO] [Thread-20410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:12:23.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:12:23.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:12:23.973 [DEBUG] [Thread-20410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:12:23.973 [DEBUG] [Thread-20410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:12:24.022 [DEBUG] [Thread-20410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:12:24.022 [DEBUG] [Thread-20410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:12:24.031 [DEBUG] [Thread-20410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:12:24.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:12:24.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:12:24.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-11-12T18:12:24.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:12:24.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:12:24.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:12:24.064 [DEBUG] [Thread-20410] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:12:31.315 [DEBUG] [Thread-20412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:12:44.642 [DEBUG] [Thread-20413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:12:46.368 [DEBUG] [Thread-20414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:12:54.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:12:54.087 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:12:54.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-11-12T18:12:54.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 12, 27), 33.69, 9.97, 0.0, 29.2, 24.8, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:12:54.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:12:27
2025-11-12T18:12:54.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:12:55.005 [DEBUG] [Thread-20415] [transport.py] [_log()] starting thread (client mode): 0x173e8820
2025-11-12T18:12:55.005 [DEBUG] [Thread-20415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:12:55.022 [DEBUG] [Thread-20415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:12:55.022 [INFO] [Thread-20415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:12:55.026 [DEBUG] [Thread-20415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:12:55.026 [DEBUG] [Thread-20415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:12:55.026 [DEBUG] [Thread-20415] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:12:55.026 [DEBUG] [Thread-20415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:12:55.026 [DEBUG] [Thread-20415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:12:55.026 [DEBUG] [Thread-20415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:12:55.026 [DEBUG] [Thread-20415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] client lang: <none>
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] server lang: <none>
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] kex follows: False
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] Compression: none
2025-11-12T18:12:55.027 [DEBUG] [Thread-20415] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:12:55.043 [DEBUG] [Thread-20415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:12:55.044 [DEBUG] [Thread-20415] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:12:55.044 [DEBUG] [Thread-20415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:12:55.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:12:55.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:12:55.046 [DEBUG] [Thread-20415] [transport.py] [_log()] userauth is OK
2025-11-12T18:12:55.046 [DEBUG] [Thread-20415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:12:55.046 [DEBUG] [Thread-20415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:12:55.046 [DEBUG] [Thread-20415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:12:55.046 [DEBUG] [Thread-20415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:12:55.083 [INFO] [Thread-20415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:12:55.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:12:55.723 [DEBUG] [Thread-20415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:12:55.724 [DEBUG] [Thread-20415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:12:55.724 [DEBUG] [Thread-20415] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:12:55.764 [DEBUG] [Thread-20415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:12:55.764 [DEBUG] [Thread-20415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:12:55.767 [DEBUG] [Thread-20415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:12:55.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:12:55.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:12:55.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:12:55.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:12:55.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:12:55.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:12:55.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.675086 -999.00  +24.60  15.16     15   -3.20 1 1 1 1 1   887    0 28.02 -16.87 ----- 20.7 15.2 283.4 24.4 25.6 -26.8 25.6 -25.7 25.3 -25.4 25.6 -25.7
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.675086
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:12:55.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:12:27', tmtdew=33.69, humidity=9.97, cloud=0.0, wind=29.2, temperature=24.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:12:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:12:55.786 [DEBUG] [Thread-20415] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:12:55.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:12:55.869 [DEBUG] [Thread-20418] [transport.py] [_log()] starting thread (client mode): 0x173e9690
2025-11-12T18:12:55.870 [DEBUG] [Thread-20418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:12:55.884 [DEBUG] [Thread-20418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:12:55.884 [INFO] [Thread-20418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:12:55.891 [DEBUG] [Thread-20418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:12:55.891 [DEBUG] [Thread-20418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:12:55.891 [DEBUG] [Thread-20418] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:12:55.891 [DEBUG] [Thread-20418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:12:55.891 [DEBUG] [Thread-20418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:12:55.891 [DEBUG] [Thread-20418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] client lang: <none>
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] server lang: <none>
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] kex follows: False
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] Compression: none
2025-11-12T18:12:55.892 [DEBUG] [Thread-20418] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:12:55.951 [DEBUG] [Thread-20418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:12:55.952 [DEBUG] [Thread-20418] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:12:55.952 [DEBUG] [Thread-20418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:12:55.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:12:55.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:12:56.007 [DEBUG] [Thread-20418] [transport.py] [_log()] userauth is OK
2025-11-12T18:12:56.008 [DEBUG] [Thread-20418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:12:56.008 [DEBUG] [Thread-20418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:12:56.008 [DEBUG] [Thread-20418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:12:56.008 [DEBUG] [Thread-20418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:12:56.027 [INFO] [Thread-20418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:12:56.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:12:56.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:12:56.865 [DEBUG] [Thread-20418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:12:56.865 [DEBUG] [Thread-20418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:12:56.912 [DEBUG] [Thread-20418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:12:56.912 [DEBUG] [Thread-20418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:12:56.921 [DEBUG] [Thread-20418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:12:56.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:12: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')
2025-11-12T18:12:56.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-11-12T18:12:56.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:12:56.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:12:56.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:12:56.956 [DEBUG] [Thread-20418] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:12:59.861 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:12:59.862 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:13:01.404 [DEBUG] [Thread-20420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:13:16.452 [DEBUG] [Thread-20421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:13:26.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:13:26.979 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:13:26.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-11-12T18:13:27.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 12, 59), 33.46, 9.98, 0.0, 26.03, 24.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:13:27.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:12:59
2025-11-12T18:13:27.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:13:27.892 [DEBUG] [Thread-20422] [transport.py] [_log()] starting thread (client mode): 0x149553c0
2025-11-12T18:13:27.892 [DEBUG] [Thread-20422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:13:27.913 [DEBUG] [Thread-20422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:13:27.913 [INFO] [Thread-20422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] client lang: <none>
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] server lang: <none>
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] kex follows: False
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] Compression: none
2025-11-12T18:13:27.916 [DEBUG] [Thread-20422] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:13:27.933 [DEBUG] [Thread-20422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:13:27.933 [DEBUG] [Thread-20422] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:13:27.933 [DEBUG] [Thread-20422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:13:27.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:13:27.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:13:27.935 [DEBUG] [Thread-20422] [transport.py] [_log()] userauth is OK
2025-11-12T18:13:27.935 [DEBUG] [Thread-20422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:13:27.936 [DEBUG] [Thread-20422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:13:27.936 [DEBUG] [Thread-20422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:13:27.936 [DEBUG] [Thread-20422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:13:27.956 [INFO] [Thread-20422] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:13:27.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:13:28.584 [DEBUG] [Thread-20422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:13:28.584 [DEBUG] [Thread-20422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:13:28.585 [DEBUG] [Thread-20422] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:13:28.625 [DEBUG] [Thread-20422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:13:28.626 [DEBUG] [Thread-20422] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:13:28.628 [DEBUG] [Thread-20422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:13:28.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:13:28.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:13:28.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:13:28.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:13:28.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:13:28.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:13:28.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:13:28.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:13:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:13:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.675433 -999.00  +24.60  22.28     15   -3.10 1 1 1 1 1   887    0 27.34 -20.63 ----- 16.4 22.3 275.4 27.6 25.7 -26.6 25.6 -25.6 25.3 -25.5 25.6 -25.8
2025-11-12T18:13:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:13:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:13:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.675433
2025-11-12T18:13:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:13:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:13:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:13:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:13:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:13:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:12:59', tmtdew=33.46, humidity=9.98, cloud=0.0, wind=26.03, temperature=24.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:12:37.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:13:28.654 [DEBUG] [Thread-20422] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:13:28.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:13:28.749 [DEBUG] [Thread-20425] [transport.py] [_log()] starting thread (client mode): 0x149550f0
2025-11-12T18:13:28.749 [DEBUG] [Thread-20425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:13:28.767 [DEBUG] [Thread-20425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:13:28.768 [INFO] [Thread-20425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:13:28.775 [DEBUG] [Thread-20425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:13:28.775 [DEBUG] [Thread-20425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:13:28.775 [DEBUG] [Thread-20425] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] client lang: <none>
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] server lang: <none>
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] kex follows: False
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] Compression: none
2025-11-12T18:13:28.776 [DEBUG] [Thread-20425] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:13:28.835 [DEBUG] [Thread-20425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:13:28.836 [DEBUG] [Thread-20425] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:13:28.836 [DEBUG] [Thread-20425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:13:28.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:13:28.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:13:28.891 [DEBUG] [Thread-20425] [transport.py] [_log()] userauth is OK
2025-11-12T18:13:28.892 [DEBUG] [Thread-20425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:13:28.892 [DEBUG] [Thread-20425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:13:28.892 [DEBUG] [Thread-20425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:13:28.892 [DEBUG] [Thread-20425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:13:28.911 [INFO] [Thread-20425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:13:28.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:13:28.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:13:29.735 [DEBUG] [Thread-20425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:13:29.735 [DEBUG] [Thread-20425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:13:29.784 [DEBUG] [Thread-20425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:13:29.784 [DEBUG] [Thread-20425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:13:29.793 [DEBUG] [Thread-20425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:13:29.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:13:29.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:13:29.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:13:29.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:13:29.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:13:29.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:13:29.828 [DEBUG] [Thread-20425] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:13:31.491 [DEBUG] [Thread-20427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:13:44.671 [DEBUG] [Thread-20428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:13:46.540 [DEBUG] [Thread-20429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:13:59.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:13:59.851 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:13:59.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-11-12T18:14:00.003 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:14:00.004 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:14:00.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 13, 31), 33.45, 10.0, 0.0, 22.92, 24.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:14:00.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:13:31
2025-11-12T18:14:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:14:00.772 [DEBUG] [Thread-20430] [transport.py] [_log()] starting thread (client mode): 0x17363be0
2025-11-12T18:14:00.773 [DEBUG] [Thread-20430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:14:00.795 [DEBUG] [Thread-20430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:14:00.795 [INFO] [Thread-20430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] client lang: <none>
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] server lang: <none>
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] kex follows: False
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:14:00.798 [DEBUG] [Thread-20430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:14:00.799 [DEBUG] [Thread-20430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:14:00.799 [DEBUG] [Thread-20430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:14:00.799 [DEBUG] [Thread-20430] [transport.py] [_log()] Compression: none
2025-11-12T18:14:00.799 [DEBUG] [Thread-20430] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:14:00.815 [DEBUG] [Thread-20430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:14:00.815 [DEBUG] [Thread-20430] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:14:00.816 [DEBUG] [Thread-20430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:14:00.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:14:00.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:14:00.818 [DEBUG] [Thread-20430] [transport.py] [_log()] userauth is OK
2025-11-12T18:14:00.818 [DEBUG] [Thread-20430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:14:00.818 [DEBUG] [Thread-20430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:14:00.818 [DEBUG] [Thread-20430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:14:00.818 [DEBUG] [Thread-20430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:14:00.837 [INFO] [Thread-20430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:14:00.837 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:14:01.486 [DEBUG] [Thread-20430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:14:01.486 [DEBUG] [Thread-20430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:14:01.486 [DEBUG] [Thread-20430] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:14:01.527 [DEBUG] [Thread-20430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:14:01.527 [DEBUG] [Thread-20430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:14:01.531 [DEBUG] [Thread-20430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:14:01.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:14:01.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:14:01.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:14:01.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:14:01.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:14:01.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:14:01.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:14:01.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:14:01.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:14:01.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.675780 -999.00  +24.70  19.89     15   -3.10 1 1 1 1 1   887    0 27.84 -24.32 ----- 20.8 19.9 273.4 20.7 25.6 -26.4 25.6 -25.5 25.3 -25.9 25.6 -25.8
2025-11-12T18:14:01.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:14:01.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:14:01.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.675780
2025-11-12T18:14:01.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:14:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:14:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:14:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:14:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:14:01.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:13:31', tmtdew=33.45, humidity=10.0, cloud=0.0, wind=22.92, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:13:07.392', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:14:01.562 [DEBUG] [Thread-20430] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:14:01.574 [DEBUG] [Thread-20433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:14:01.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:14:01.657 [DEBUG] [Thread-20434] [transport.py] [_log()] starting thread (client mode): 0x173e9000
2025-11-12T18:14:01.657 [DEBUG] [Thread-20434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:14:01.671 [DEBUG] [Thread-20434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:14:01.671 [INFO] [Thread-20434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:14:01.678 [DEBUG] [Thread-20434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:14:01.678 [DEBUG] [Thread-20434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:14:01.678 [DEBUG] [Thread-20434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:14:01.678 [DEBUG] [Thread-20434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] client lang: <none>
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] server lang: <none>
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] kex follows: False
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] Compression: none
2025-11-12T18:14:01.679 [DEBUG] [Thread-20434] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:14:01.738 [DEBUG] [Thread-20434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:14:01.739 [DEBUG] [Thread-20434] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:14:01.739 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:14:01.739 [DEBUG] [Thread-20434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:14:01.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:14:01.796 [DEBUG] [Thread-20434] [transport.py] [_log()] userauth is OK
2025-11-12T18:14:01.796 [DEBUG] [Thread-20434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:14:01.796 [DEBUG] [Thread-20434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:14:01.796 [DEBUG] [Thread-20434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:14:01.796 [DEBUG] [Thread-20434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:14:01.820 [INFO] [Thread-20434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:14:01.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:14:01.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:14:02.668 [DEBUG] [Thread-20434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:14:02.668 [DEBUG] [Thread-20434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:14:02.716 [DEBUG] [Thread-20434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:14:02.716 [DEBUG] [Thread-20434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:14:02.725 [DEBUG] [Thread-20434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:14:02.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:14:02.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-11-12T18:14:02.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:14:02.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:14:02.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:14:02.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:14:02.761 [DEBUG] [Thread-20434] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:14:16.619 [DEBUG] [Thread-20436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:14:31.656 [DEBUG] [Thread-20437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:14:32.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:14:32.774 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:14:32.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-11-12T18:14:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 14, 3), 33.37, 10.05, 0.0, 23.59, 24.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:14:33.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:14:03
2025-11-12T18:14:33.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:14:33.687 [DEBUG] [Thread-20438] [transport.py] [_log()] starting thread (client mode): 0x149a58d0
2025-11-12T18:14:33.687 [DEBUG] [Thread-20438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:14:33.708 [DEBUG] [Thread-20438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:14:33.708 [INFO] [Thread-20438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:14:33.711 [DEBUG] [Thread-20438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:14:33.711 [DEBUG] [Thread-20438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:14:33.711 [DEBUG] [Thread-20438] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:14:33.711 [DEBUG] [Thread-20438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:14:33.711 [DEBUG] [Thread-20438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:14:33.711 [DEBUG] [Thread-20438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:14:33.711 [DEBUG] [Thread-20438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] client lang: <none>
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] server lang: <none>
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] kex follows: False
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] Compression: none
2025-11-12T18:14:33.712 [DEBUG] [Thread-20438] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:14:33.722 [DEBUG] [Thread-20438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:14:33.722 [DEBUG] [Thread-20438] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:14:33.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:14:33.723 [DEBUG] [Thread-20438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:14:33.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:14:33.725 [DEBUG] [Thread-20438] [transport.py] [_log()] userauth is OK
2025-11-12T18:14:33.726 [DEBUG] [Thread-20438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:14:33.726 [DEBUG] [Thread-20438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:14:33.726 [DEBUG] [Thread-20438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:14:33.726 [DEBUG] [Thread-20438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:14:33.746 [INFO] [Thread-20438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:14:33.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:14:34.370 [DEBUG] [Thread-20438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:14:34.371 [DEBUG] [Thread-20438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:14:34.371 [DEBUG] [Thread-20438] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:14:34.412 [DEBUG] [Thread-20438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:14:34.412 [DEBUG] [Thread-20438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:14:34.415 [DEBUG] [Thread-20438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:14:34.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:14:34.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:14:34.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:14:34.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:14:34.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:14:34.441 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:14:34.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:14:34.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:14:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:14:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.676128 -999.00  +24.60  28.10     15   -3.10 1 1 1 1 1   887    0 27.52 -24.07 ----- 25.6 28.1 273.8 32.4 25.6 -26.7 25.6 -25.7 25.3 -25.5 25.6 -26.1
2025-11-12T18:14:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:14:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:14:34.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.676128
2025-11-12T18:14:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:14:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:14:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:14:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:14:34.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:14:34.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:14:03', tmtdew=33.37, humidity=10.05, cloud=0.0, wind=23.59, temperature=24.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:13:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:14:34.444 [DEBUG] [Thread-20438] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:14:34.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:14:34.540 [DEBUG] [Thread-20441] [transport.py] [_log()] starting thread (client mode): 0x149a50f0
2025-11-12T18:14:34.540 [DEBUG] [Thread-20441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:14:34.555 [DEBUG] [Thread-20441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:14:34.555 [INFO] [Thread-20441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:14:34.563 [DEBUG] [Thread-20441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:14:34.563 [DEBUG] [Thread-20441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:14:34.563 [DEBUG] [Thread-20441] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:14:34.563 [DEBUG] [Thread-20441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] client lang: <none>
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] server lang: <none>
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] kex follows: False
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:14:34.564 [DEBUG] [Thread-20441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:14:34.565 [DEBUG] [Thread-20441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:14:34.565 [DEBUG] [Thread-20441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:14:34.565 [DEBUG] [Thread-20441] [transport.py] [_log()] Compression: none
2025-11-12T18:14:34.565 [DEBUG] [Thread-20441] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:14:34.624 [DEBUG] [Thread-20441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:14:34.624 [DEBUG] [Thread-20441] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:14:34.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:14:34.626 [DEBUG] [Thread-20441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:14:34.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:14:34.680 [DEBUG] [Thread-20441] [transport.py] [_log()] userauth is OK
2025-11-12T18:14:34.680 [DEBUG] [Thread-20441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:14:34.680 [DEBUG] [Thread-20441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:14:34.680 [DEBUG] [Thread-20441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:14:34.681 [DEBUG] [Thread-20441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:14:34.700 [INFO] [Thread-20441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:14:34.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:14:34.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:14:35.543 [DEBUG] [Thread-20441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:14:35.543 [DEBUG] [Thread-20441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:14:35.591 [DEBUG] [Thread-20441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:14:35.591 [DEBUG] [Thread-20441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:14:35.599 [DEBUG] [Thread-20441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:14:35.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:14:35.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-11-12T18:14:35.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-11-12T18:14:35.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:14:35.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:14:35.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:14:35.630 [DEBUG] [Thread-20441] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:14:44.721 [DEBUG] [Thread-20443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:14:46.696 [DEBUG] [Thread-20444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:15:00.144 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:15:00.145 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:15:01.744 [DEBUG] [Thread-20445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:15:05.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:15:05.653 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:15:05.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-11-12T18:15:06.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 14, 35), 33.41, 10.01, 0.0, 22.83, 24.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:15:06.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:14:35
2025-11-12T18:15:06.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:15:06.566 [DEBUG] [Thread-20446] [transport.py] [_log()] starting thread (client mode): 0x17360700
2025-11-12T18:15:06.566 [DEBUG] [Thread-20446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:15:06.586 [DEBUG] [Thread-20446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:15:06.586 [INFO] [Thread-20446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] client lang: <none>
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] server lang: <none>
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] kex follows: False
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] Compression: none
2025-11-12T18:15:06.590 [DEBUG] [Thread-20446] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:15:06.606 [DEBUG] [Thread-20446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:15:06.607 [DEBUG] [Thread-20446] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:15:06.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:15:06.608 [DEBUG] [Thread-20446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:15:06.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:15:06.610 [DEBUG] [Thread-20446] [transport.py] [_log()] userauth is OK
2025-11-12T18:15:06.610 [DEBUG] [Thread-20446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:15:06.610 [DEBUG] [Thread-20446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:15:06.610 [DEBUG] [Thread-20446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:15:06.610 [DEBUG] [Thread-20446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:15:06.629 [INFO] [Thread-20446] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:15:06.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:15:09.294 [DEBUG] [Thread-20446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:15:09.294 [DEBUG] [Thread-20446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:15:09.294 [DEBUG] [Thread-20446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:15:09.335 [DEBUG] [Thread-20446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:15:09.335 [DEBUG] [Thread-20446] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:15:09.337 [DEBUG] [Thread-20446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:15:09.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:15:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:15:09.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:15:09.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:15:09.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:15:09.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:15:09.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:15:09.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:15:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:15:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.676822 -999.00  +24.50  25.69     15   -3.00 1 1 1 1 1   887    0 27.47 -28.25 ----- 35.4 25.7 278.7 38.5 25.5 -26.8 25.5 -25.7 25.2 -25.7 25.5 -26.0
2025-11-12T18:15:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:15:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:15:09.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.676822
2025-11-12T18:15:09.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:15:09.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:15:09.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:15:09.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:15:09.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:15:09.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:14:35', tmtdew=33.41, humidity=10.01, cloud=0.0, wind=22.83, temperature=24.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:14:37.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:15:09.358 [DEBUG] [Thread-20446] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:15:09.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:15:09.443 [DEBUG] [Thread-20449] [transport.py] [_log()] starting thread (client mode): 0x14954730
2025-11-12T18:15:09.443 [DEBUG] [Thread-20449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:15:09.457 [DEBUG] [Thread-20449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:15:09.457 [INFO] [Thread-20449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:15:09.465 [DEBUG] [Thread-20449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:15:09.465 [DEBUG] [Thread-20449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:15:09.465 [DEBUG] [Thread-20449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:15:09.465 [DEBUG] [Thread-20449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:15:09.465 [DEBUG] [Thread-20449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:15:09.465 [DEBUG] [Thread-20449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:15:09.465 [DEBUG] [Thread-20449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] client lang: <none>
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] server lang: <none>
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] kex follows: False
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] Compression: none
2025-11-12T18:15:09.466 [DEBUG] [Thread-20449] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:15:09.522 [DEBUG] [Thread-20449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:15:09.523 [DEBUG] [Thread-20449] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:15:09.523 [DEBUG] [Thread-20449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:15:09.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:15:09.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:15:09.579 [DEBUG] [Thread-20449] [transport.py] [_log()] userauth is OK
2025-11-12T18:15:09.579 [DEBUG] [Thread-20449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:15:09.580 [DEBUG] [Thread-20449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:15:09.580 [DEBUG] [Thread-20449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:15:09.580 [DEBUG] [Thread-20449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:15:09.599 [INFO] [Thread-20449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:15:09.599 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:15:09.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:15:10.489 [DEBUG] [Thread-20449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:15:10.489 [DEBUG] [Thread-20449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:15:10.537 [DEBUG] [Thread-20449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:15:10.537 [DEBUG] [Thread-20449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:15:10.545 [DEBUG] [Thread-20449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:15:10.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:15:10.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-11-12T18:15:10.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-11-12T18:15:10.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:15:10.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:15:10.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:15:10.579 [DEBUG] [Thread-20449] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:15:16.773 [DEBUG] [Thread-20451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:15:31.830 [DEBUG] [Thread-20452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:15:40.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:15:40.601 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:15:40.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-11-12T18:15:41.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 15, 7), 33.3, 10.11, 0.0, 25.57, 24.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:15:41.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:15:07
2025-11-12T18:15:41.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:15:41.596 [DEBUG] [Thread-20453] [transport.py] [_log()] starting thread (client mode): 0x173e9f30
2025-11-12T18:15:41.597 [DEBUG] [Thread-20453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:15:41.617 [DEBUG] [Thread-20453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:15:41.617 [INFO] [Thread-20453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] client lang: <none>
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] server lang: <none>
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] kex follows: False
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] Compression: none
2025-11-12T18:15:41.620 [DEBUG] [Thread-20453] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:15:41.639 [DEBUG] [Thread-20453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:15:41.639 [DEBUG] [Thread-20453] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:15:41.639 [DEBUG] [Thread-20453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:15:41.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:15:41.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:15:41.640 [DEBUG] [Thread-20453] [transport.py] [_log()] userauth is OK
2025-11-12T18:15:41.640 [DEBUG] [Thread-20453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:15:41.640 [DEBUG] [Thread-20453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:15:41.640 [DEBUG] [Thread-20453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:15:41.640 [DEBUG] [Thread-20453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:15:41.659 [INFO] [Thread-20453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:15:41.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:15:42.300 [DEBUG] [Thread-20453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:15:42.300 [DEBUG] [Thread-20453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:15:42.300 [DEBUG] [Thread-20453] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:15:42.341 [DEBUG] [Thread-20453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:15:42.341 [DEBUG] [Thread-20453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:15:42.343 [DEBUG] [Thread-20453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:15:42.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:15:42.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:15:42.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:15:42.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:15:42.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:15:42.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:15:42.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:15:42.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:15:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:15:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.677169 -999.00  +24.50  21.87     15   -3.00 1 1 1 1 1   887    0 27.27 -29.73 ----- 30.5 21.9 275.6 38.2 25.5 -26.9 25.4 -25.6 25.2 -26.3 25.5 -26.2
2025-11-12T18:15:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:15:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:15:42.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.677169
2025-11-12T18:15:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:15:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:15:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:15:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:15:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:15:42.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:15:07', tmtdew=33.3, humidity=10.11, cloud=0.0, wind=25.57, temperature=24.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:15:07.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:15:42.363 [DEBUG] [Thread-20453] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:15:42.437 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:15:42.449 [DEBUG] [Thread-20456] [transport.py] [_log()] starting thread (client mode): 0x149a47f0
2025-11-12T18:15:42.449 [DEBUG] [Thread-20456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:15:42.464 [DEBUG] [Thread-20456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:15:42.464 [INFO] [Thread-20456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:15:42.471 [DEBUG] [Thread-20456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] client lang: <none>
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] server lang: <none>
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] kex follows: False
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] Compression: none
2025-11-12T18:15:42.472 [DEBUG] [Thread-20456] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:15:42.530 [DEBUG] [Thread-20456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:15:42.530 [DEBUG] [Thread-20456] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:15:42.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:15:42.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:15:42.531 [DEBUG] [Thread-20456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:15:42.587 [DEBUG] [Thread-20456] [transport.py] [_log()] userauth is OK
2025-11-12T18:15:42.587 [DEBUG] [Thread-20456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:15:42.587 [DEBUG] [Thread-20456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:15:42.587 [DEBUG] [Thread-20456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:15:42.587 [DEBUG] [Thread-20456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:15:42.601 [INFO] [Thread-20456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:15:42.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:15:42.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:15:43.426 [DEBUG] [Thread-20456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:15:43.426 [DEBUG] [Thread-20456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:15:43.475 [DEBUG] [Thread-20456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:15:43.475 [DEBUG] [Thread-20456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:15:43.484 [DEBUG] [Thread-20456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:15:43.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:15:43.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-11-12T18:15:43.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-11-12T18:15:43.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:15:43.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:15:43.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:15:43.521 [DEBUG] [Thread-20456] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:15:44.754 [DEBUG] [Thread-20458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:15:46.869 [DEBUG] [Thread-20459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:16:00.286 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:16:00.287 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:16:01.925 [DEBUG] [Thread-20460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:16:13.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:16:13.543 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:16: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-11-12T18:16:14.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 16, 11), 33.15, 10.18, 0.0, 28.76, 24.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:16:14.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:16:11
2025-11-12T18:16:14.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:16:14.452 [DEBUG] [Thread-20461] [transport.py] [_log()] starting thread (client mode): 0x173624a0
2025-11-12T18:16:14.452 [DEBUG] [Thread-20461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:16:14.473 [DEBUG] [Thread-20461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:16:14.473 [INFO] [Thread-20461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:16:14.476 [DEBUG] [Thread-20461] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] client lang: <none>
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] server lang: <none>
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] kex follows: False
2025-11-12T18:16:14.477 [DEBUG] [Thread-20461] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:16:14.478 [DEBUG] [Thread-20461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:16:14.478 [DEBUG] [Thread-20461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:16:14.478 [DEBUG] [Thread-20461] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:16:14.478 [DEBUG] [Thread-20461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:16:14.478 [DEBUG] [Thread-20461] [transport.py] [_log()] Compression: none
2025-11-12T18:16:14.478 [DEBUG] [Thread-20461] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:16:14.496 [DEBUG] [Thread-20461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:16:14.497 [DEBUG] [Thread-20461] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:16:14.498 [DEBUG] [Thread-20461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:16:14.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:16:14.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:16:14.500 [DEBUG] [Thread-20461] [transport.py] [_log()] userauth is OK
2025-11-12T18:16:14.500 [DEBUG] [Thread-20461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:16:14.500 [DEBUG] [Thread-20461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:16:14.500 [DEBUG] [Thread-20461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:16:14.500 [DEBUG] [Thread-20461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:16:14.513 [INFO] [Thread-20461] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:16:14.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:16:15.232 [DEBUG] [Thread-20461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:16:15.232 [DEBUG] [Thread-20461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:16:15.233 [DEBUG] [Thread-20461] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:16:15.273 [DEBUG] [Thread-20461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:16:15.273 [DEBUG] [Thread-20461] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:16:15.276 [DEBUG] [Thread-20461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:16:15.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:16:15.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:16:15.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:16:15.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:16:15.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:16:15.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:16:15.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:16:15.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:16:15.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:16:15.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.677517 -999.00  +24.40  34.93     16   -2.90 1 1 2 1 1   887    0 26.79 -34.67 ----- 29.5 34.9 272.6 41.3 25.4 -27.1 25.4 -25.8 25.1 -26.0 25.4 -26.4
2025-11-12T18:16:15.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:16:15.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:16:15.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.677517
2025-11-12T18:16:15.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:16:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:16:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:16:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:16:15.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:16:15.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:16:11', tmtdew=33.15, humidity=10.18, cloud=0.0, wind=28.76, temperature=24.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:15:37.469', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:16:15.304 [DEBUG] [Thread-20461] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:16:15.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:16:15.402 [DEBUG] [Thread-20464] [transport.py] [_log()] starting thread (client mode): 0x173ebbe0
2025-11-12T18:16:15.402 [DEBUG] [Thread-20464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:16:15.417 [DEBUG] [Thread-20464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:16:15.417 [INFO] [Thread-20464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] client lang: <none>
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] server lang: <none>
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] kex follows: False
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:16:15.425 [DEBUG] [Thread-20464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:16:15.426 [DEBUG] [Thread-20464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:16:15.426 [DEBUG] [Thread-20464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:16:15.426 [DEBUG] [Thread-20464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:16:15.426 [DEBUG] [Thread-20464] [transport.py] [_log()] Compression: none
2025-11-12T18:16:15.426 [DEBUG] [Thread-20464] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:16:15.484 [DEBUG] [Thread-20464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:16:15.485 [DEBUG] [Thread-20464] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:16:15.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:16:15.486 [DEBUG] [Thread-20464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:16:15.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:16:15.539 [DEBUG] [Thread-20464] [transport.py] [_log()] userauth is OK
2025-11-12T18:16:15.539 [DEBUG] [Thread-20464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:16:15.539 [DEBUG] [Thread-20464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:16:15.539 [DEBUG] [Thread-20464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:16:15.539 [DEBUG] [Thread-20464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:16:15.555 [INFO] [Thread-20464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:16:15.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:16:15.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:16:16.389 [DEBUG] [Thread-20464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:16:16.389 [DEBUG] [Thread-20464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:16:16.437 [DEBUG] [Thread-20464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:16:16.437 [DEBUG] [Thread-20464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:16:16.445 [DEBUG] [Thread-20464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:16:16.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:16:16.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:16:16.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-11-12T18:16:16.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:16:16.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:16:16.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:16:16.477 [DEBUG] [Thread-20464] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:16:16.959 [DEBUG] [Thread-20466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:16:32.000 [DEBUG] [Thread-20467 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:16:44.804 [DEBUG] [Thread-20468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:16:46.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:16:46.500 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:16:46.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-11-12T18:16:47.035 [DEBUG] [Thread-20469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:16:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 16, 43), 32.84, 10.73, 0.0, 26.4, 24.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:16:47.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:16:43
2025-11-12T18:16:47.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:16:47.421 [DEBUG] [Thread-20470] [transport.py] [_log()] starting thread (client mode): 0x14955c60
2025-11-12T18:16:47.421 [DEBUG] [Thread-20470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:16:47.442 [DEBUG] [Thread-20470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:16:47.442 [INFO] [Thread-20470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:16:47.445 [DEBUG] [Thread-20470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:16:47.445 [DEBUG] [Thread-20470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:16:47.445 [DEBUG] [Thread-20470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] client lang: <none>
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] server lang: <none>
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] kex follows: False
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:16:47.446 [DEBUG] [Thread-20470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:16:47.447 [DEBUG] [Thread-20470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:16:47.447 [DEBUG] [Thread-20470] [transport.py] [_log()] Compression: none
2025-11-12T18:16:47.447 [DEBUG] [Thread-20470] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:16:47.467 [DEBUG] [Thread-20470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:16:47.468 [DEBUG] [Thread-20470] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:16:47.468 [DEBUG] [Thread-20470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:16:47.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:16:47.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:16:47.470 [DEBUG] [Thread-20470] [transport.py] [_log()] userauth is OK
2025-11-12T18:16:47.471 [DEBUG] [Thread-20470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:16:47.471 [DEBUG] [Thread-20470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:16:47.471 [DEBUG] [Thread-20470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:16:47.471 [DEBUG] [Thread-20470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:16:47.491 [INFO] [Thread-20470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:16:47.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:16:48.134 [DEBUG] [Thread-20470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:16:48.134 [DEBUG] [Thread-20470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:16:48.134 [DEBUG] [Thread-20470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:16:48.175 [DEBUG] [Thread-20470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:16:48.175 [DEBUG] [Thread-20470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:16:48.178 [DEBUG] [Thread-20470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:16:48.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:16:48.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:16:48.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:16:48.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:16:48.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:16:48.202 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:16:48.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:16:48.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:16:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:16:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.677864 -999.00  +24.40  31.17     16   -2.80 1 1 2 1 1   887    0 26.73 -36.30 ----- 32.5 31.2 277.6 35.8 25.4 -27.0 25.4 -25.8 25.1 -26.0 25.3 -26.4
2025-11-12T18:16:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:16:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:16:48.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.677864
2025-11-12T18:16:48.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:16:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:16:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:16:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:16:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:16:48.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:16:43', tmtdew=32.84, humidity=10.73, cloud=0.0, wind=26.4, temperature=24.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:16:07.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:16:48.205 [DEBUG] [Thread-20470] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:16:48.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:16:48.300 [DEBUG] [Thread-20473] [transport.py] [_log()] starting thread (client mode): 0x17360610
2025-11-12T18:16:48.300 [DEBUG] [Thread-20473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:16:48.315 [DEBUG] [Thread-20473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:16:48.315 [INFO] [Thread-20473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:16:48.325 [DEBUG] [Thread-20473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:16:48.325 [DEBUG] [Thread-20473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] client lang: <none>
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] server lang: <none>
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] kex follows: False
2025-11-12T18:16:48.326 [DEBUG] [Thread-20473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:16:48.327 [DEBUG] [Thread-20473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:16:48.327 [DEBUG] [Thread-20473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:16:48.327 [DEBUG] [Thread-20473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:16:48.327 [DEBUG] [Thread-20473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:16:48.327 [DEBUG] [Thread-20473] [transport.py] [_log()] Compression: none
2025-11-12T18:16:48.327 [DEBUG] [Thread-20473] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:16:48.387 [DEBUG] [Thread-20473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:16:48.388 [DEBUG] [Thread-20473] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:16:48.389 [DEBUG] [Thread-20473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:16:48.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:16:48.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:16:48.448 [DEBUG] [Thread-20473] [transport.py] [_log()] userauth is OK
2025-11-12T18:16:48.448 [DEBUG] [Thread-20473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:16:48.448 [DEBUG] [Thread-20473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:16:48.448 [DEBUG] [Thread-20473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:16:48.448 [DEBUG] [Thread-20473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:16:48.467 [INFO] [Thread-20473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:16:48.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:16:48.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:16:49.312 [DEBUG] [Thread-20473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:16:49.312 [DEBUG] [Thread-20473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:16:49.360 [DEBUG] [Thread-20473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:16:49.360 [DEBUG] [Thread-20473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:16:49.369 [DEBUG] [Thread-20473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:16:49.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:16:49.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-11-12T18:16:49.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-11-12T18:16:49.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:16:49.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:16:49.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:16:49.406 [DEBUG] [Thread-20473] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:17:00.431 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:17:00.432 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:17:02.067 [DEBUG] [Thread-20475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:17:17.116 [DEBUG] [Thread-20476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:17:19.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:17:19.428 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:17:19.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-11-12T18:17:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 17, 15), 32.87, 10.7, 0.0, 27.07, 24.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:17:20.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:17:15
2025-11-12T18:17:20.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:17:20.359 [DEBUG] [Thread-20477] [transport.py] [_log()] starting thread (client mode): 0x149555a0
2025-11-12T18:17:20.359 [DEBUG] [Thread-20477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:17:20.371 [DEBUG] [Thread-20477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:17:20.371 [INFO] [Thread-20477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] client lang: <none>
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] server lang: <none>
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] kex follows: False
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] Compression: none
2025-11-12T18:17:20.373 [DEBUG] [Thread-20477] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:17:20.384 [DEBUG] [Thread-20477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:17:20.384 [DEBUG] [Thread-20477] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:17:20.384 [DEBUG] [Thread-20477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:17:20.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:17:20.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:17:20.385 [DEBUG] [Thread-20477] [transport.py] [_log()] userauth is OK
2025-11-12T18:17:20.385 [DEBUG] [Thread-20477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:17:20.385 [DEBUG] [Thread-20477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:17:20.385 [DEBUG] [Thread-20477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:17:20.385 [DEBUG] [Thread-20477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:17:20.397 [INFO] [Thread-20477] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:17:20.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:17:21.025 [DEBUG] [Thread-20477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:17:21.026 [DEBUG] [Thread-20477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:17:21.026 [DEBUG] [Thread-20477] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:17:21.066 [DEBUG] [Thread-20477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:17:21.066 [DEBUG] [Thread-20477] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:17:21.069 [DEBUG] [Thread-20477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:17:21.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:17:21.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:17:21.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:17:21.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:17:21.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:17:21.090 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:17:21.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:17:21.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:17:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:17:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.678211 -999.00  +24.40  23.62     16   -2.70 1 1 1 1 1   887    0 27.19 -41.53 ----- 26.5 23.6 283.2 39.5 25.4 -27.1 25.3 -25.8 25.0 -26.1 25.3 -26.3
2025-11-12T18:17:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:17:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:17:21.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.678211
2025-11-12T18:17:21.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:17:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:17:21.093 [DEBUG] [Thread-20477] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:17:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:17:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:17:21.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:17:21.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:17:15', tmtdew=32.87, humidity=10.7, cloud=0.0, wind=27.07, temperature=24.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:16:37.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:17:21.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:17:21.186 [DEBUG] [Thread-20480] [transport.py] [_log()] starting thread (client mode): 0x14954520
2025-11-12T18:17:21.186 [DEBUG] [Thread-20480] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:17:21.203 [DEBUG] [Thread-20480] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:17:21.203 [INFO] [Thread-20480] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] client lang: <none>
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] server lang: <none>
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] kex follows: False
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:17:21.211 [DEBUG] [Thread-20480] [transport.py] [_log()] Compression: none
2025-11-12T18:17:21.212 [DEBUG] [Thread-20480] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:17:21.266 [DEBUG] [Thread-20480] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:17:21.267 [DEBUG] [Thread-20480] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:17:21.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:17:21.268 [DEBUG] [Thread-20480] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:17:21.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:17:21.323 [DEBUG] [Thread-20480] [transport.py] [_log()] userauth is OK
2025-11-12T18:17:21.323 [DEBUG] [Thread-20480] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:17:21.324 [DEBUG] [Thread-20480] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:17:21.324 [DEBUG] [Thread-20480] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:17:21.324 [DEBUG] [Thread-20480] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:17:21.342 [INFO] [Thread-20480] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:17:21.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:17:21.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:17:22.173 [DEBUG] [Thread-20480] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:17:22.173 [DEBUG] [Thread-20480] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:17:22.223 [DEBUG] [Thread-20480] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:17:22.223 [DEBUG] [Thread-20480] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:17:22.232 [DEBUG] [Thread-20480] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:17:22.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:17: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-11-12T18:17: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-11-12T18:17:22.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:17:22.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:17:22.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:17:22.269 [DEBUG] [Thread-20480] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:17:32.148 [DEBUG] [Thread-20482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:17:44.844 [DEBUG] [Thread-20483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:17:47.188 [DEBUG] [Thread-20484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:17:52.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:17:52.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:17:52.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-11-12T18:17:52.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 17, 47), 32.75, 10.8, 0.0, 35.06, 24.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:17:52.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:17:47
2025-11-12T18:17:53.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:17:53.193 [DEBUG] [Thread-20485] [transport.py] [_log()] starting thread (client mode): 0x173634c0
2025-11-12T18:17:53.193 [DEBUG] [Thread-20485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:17:53.213 [DEBUG] [Thread-20485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:17:53.213 [INFO] [Thread-20485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] client lang: <none>
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] server lang: <none>
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] kex follows: False
2025-11-12T18:17:53.216 [DEBUG] [Thread-20485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:17:53.217 [DEBUG] [Thread-20485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:17:53.217 [DEBUG] [Thread-20485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:17:53.217 [DEBUG] [Thread-20485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:17:53.217 [DEBUG] [Thread-20485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:17:53.217 [DEBUG] [Thread-20485] [transport.py] [_log()] Compression: none
2025-11-12T18:17:53.217 [DEBUG] [Thread-20485] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:17:53.236 [DEBUG] [Thread-20485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:17:53.237 [DEBUG] [Thread-20485] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:17:53.237 [DEBUG] [Thread-20485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:17:53.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:17:53.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:17:53.240 [DEBUG] [Thread-20485] [transport.py] [_log()] userauth is OK
2025-11-12T18:17:53.240 [DEBUG] [Thread-20485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:17:53.240 [DEBUG] [Thread-20485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:17:53.240 [DEBUG] [Thread-20485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:17:53.240 [DEBUG] [Thread-20485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:17:53.277 [INFO] [Thread-20485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:17:53.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:17:53.922 [DEBUG] [Thread-20485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:17:53.922 [DEBUG] [Thread-20485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:17:53.922 [DEBUG] [Thread-20485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:17:53.963 [DEBUG] [Thread-20485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:17:53.964 [DEBUG] [Thread-20485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:17:53.966 [DEBUG] [Thread-20485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:17:53.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:17:53.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:17:53.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:17:53.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:17:53.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:17:53.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:17:53.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:17:53.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:17:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:17:53.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.678559 -999.00  +24.40  23.08     16   -2.70 1 1 1 1 1   887    0 26.69 -48.26 ----- 23.0 23.1 283.3 36.9 25.3 -27.0 25.2 -25.7 25.0 -26.3 25.3 -26.3
2025-11-12T18:17:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:17:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:17:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.678559
2025-11-12T18:17:53.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:17:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:17:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:17:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:17:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:17:53.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:17:47', tmtdew=32.75, humidity=10.8, cloud=0.0, wind=35.06, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:17:07.498', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:17:53.992 [DEBUG] [Thread-20485] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:17:54.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:17:54.091 [DEBUG] [Thread-20488] [transport.py] [_log()] starting thread (client mode): 0x149abf40
2025-11-12T18:17:54.091 [DEBUG] [Thread-20488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:17:54.110 [DEBUG] [Thread-20488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:17:54.110 [INFO] [Thread-20488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] client lang: <none>
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] server lang: <none>
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] kex follows: False
2025-11-12T18:17:54.118 [DEBUG] [Thread-20488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:17:54.119 [DEBUG] [Thread-20488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:17:54.119 [DEBUG] [Thread-20488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:17:54.119 [DEBUG] [Thread-20488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:17:54.119 [DEBUG] [Thread-20488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:17:54.119 [DEBUG] [Thread-20488] [transport.py] [_log()] Compression: none
2025-11-12T18:17:54.119 [DEBUG] [Thread-20488] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:17:54.175 [DEBUG] [Thread-20488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:17:54.176 [DEBUG] [Thread-20488] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:17:54.176 [DEBUG] [Thread-20488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:17:54.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:17:54.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:17:54.231 [DEBUG] [Thread-20488] [transport.py] [_log()] userauth is OK
2025-11-12T18:17:54.232 [DEBUG] [Thread-20488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:17:54.232 [DEBUG] [Thread-20488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:17:54.232 [DEBUG] [Thread-20488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:17:54.232 [DEBUG] [Thread-20488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:17:54.250 [INFO] [Thread-20488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:17:54.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:17:54.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:17:55.098 [DEBUG] [Thread-20488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:17:55.098 [DEBUG] [Thread-20488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:17:55.147 [DEBUG] [Thread-20488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:17:55.147 [DEBUG] [Thread-20488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:17:55.156 [DEBUG] [Thread-20488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:17:55.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:17:55.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-11-12T18:17:55.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-11-12T18:17:55.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:17:55.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:17:55.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:17:55.194 [DEBUG] [Thread-20488] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:18:00.572 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:18:00.573 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:18:02.224 [DEBUG] [Thread-20490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:18:17.281 [DEBUG] [Thread-20491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:18:25.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:18:25.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:18:25.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-11-12T18:18:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 18, 19), 32.71, 10.83, 0.0, 32.11, 24.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:18:25.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:18:19
2025-11-12T18:18:25.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:18:26.134 [DEBUG] [Thread-20492] [transport.py] [_log()] starting thread (client mode): 0x11f123e0
2025-11-12T18:18:26.135 [DEBUG] [Thread-20492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:18:26.150 [DEBUG] [Thread-20492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:18:26.150 [INFO] [Thread-20492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:18:26.153 [DEBUG] [Thread-20492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:18:26.153 [DEBUG] [Thread-20492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:18:26.153 [DEBUG] [Thread-20492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:18:26.153 [DEBUG] [Thread-20492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:18:26.153 [DEBUG] [Thread-20492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:18:26.153 [DEBUG] [Thread-20492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:18:26.153 [DEBUG] [Thread-20492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] client lang: <none>
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] server lang: <none>
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] kex follows: False
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] Compression: none
2025-11-12T18:18:26.154 [DEBUG] [Thread-20492] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:18:26.169 [DEBUG] [Thread-20492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:18:26.169 [DEBUG] [Thread-20492] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:18:26.169 [DEBUG] [Thread-20492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:18:26.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:18:26.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:18:26.171 [DEBUG] [Thread-20492] [transport.py] [_log()] userauth is OK
2025-11-12T18:18:26.171 [DEBUG] [Thread-20492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:18:26.172 [DEBUG] [Thread-20492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:18:26.172 [DEBUG] [Thread-20492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:18:26.172 [DEBUG] [Thread-20492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:18:26.195 [INFO] [Thread-20492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:18:26.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:18:26.918 [DEBUG] [Thread-20492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:18:26.918 [DEBUG] [Thread-20492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:18:26.919 [DEBUG] [Thread-20492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:18:26.959 [DEBUG] [Thread-20492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:18:26.960 [DEBUG] [Thread-20492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:18:26.962 [DEBUG] [Thread-20492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:18:26.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:18:26.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:18:26.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:18:26.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:18:26.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:18:26.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:18:26.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:18:26.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:18:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:18:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.678905 -999.00  +24.40  28.87     16   -2.70 1 1 1 1 1   887    0 26.01 -52.80 ----- 28.6 28.9 277.2 32.5 25.2 -26.9 25.2 -25.7 25.0 -25.8 25.3 -26.2
2025-11-12T18:18:26.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:18:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:18:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.678905
2025-11-12T18:18:26.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:18:26.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:18:26.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:18:26.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:18:26.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:18:26.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:18:19', tmtdew=32.71, humidity=10.83, cloud=0.0, wind=32.11, temperature=24.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:17:37.392', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:18:26.984 [DEBUG] [Thread-20492] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:18:27.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:18:27.080 [DEBUG] [Thread-20495] [transport.py] [_log()] starting thread (client mode): 0x17362a40
2025-11-12T18:18:27.080 [DEBUG] [Thread-20495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:18:27.096 [DEBUG] [Thread-20495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:18:27.096 [INFO] [Thread-20495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] client lang: <none>
2025-11-12T18:18:27.104 [DEBUG] [Thread-20495] [transport.py] [_log()] server lang: <none>
2025-11-12T18:18:27.105 [DEBUG] [Thread-20495] [transport.py] [_log()] kex follows: False
2025-11-12T18:18:27.105 [DEBUG] [Thread-20495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:18:27.105 [DEBUG] [Thread-20495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:18:27.105 [DEBUG] [Thread-20495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:18:27.105 [DEBUG] [Thread-20495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:18:27.105 [DEBUG] [Thread-20495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:18:27.105 [DEBUG] [Thread-20495] [transport.py] [_log()] Compression: none
2025-11-12T18:18:27.105 [DEBUG] [Thread-20495] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:18:27.164 [DEBUG] [Thread-20495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:18:27.165 [DEBUG] [Thread-20495] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:18:27.165 [DEBUG] [Thread-20495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:18:27.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:18:27.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:18:27.223 [DEBUG] [Thread-20495] [transport.py] [_log()] userauth is OK
2025-11-12T18:18:27.224 [DEBUG] [Thread-20495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:18:27.224 [DEBUG] [Thread-20495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:18:27.224 [DEBUG] [Thread-20495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:18:27.224 [DEBUG] [Thread-20495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:18:27.243 [INFO] [Thread-20495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:18:27.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:18:27.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:18:28.085 [DEBUG] [Thread-20495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:18:28.085 [DEBUG] [Thread-20495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:18:28.133 [DEBUG] [Thread-20495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:18:28.133 [DEBUG] [Thread-20495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:18:28.143 [DEBUG] [Thread-20495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:18:28.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:18:28.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-11-12T18:18:28.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-11-12T18:18:28.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:18:28.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:18:28.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:18:28.180 [DEBUG] [Thread-20495] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:18:32.318 [DEBUG] [Thread-20497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:18:44.877 [DEBUG] [Thread-20498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:18:47.380 [DEBUG] [Thread-20499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:18:58.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:18:58.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:18: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-11-12T18:18:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 18, 50), 32.5, 10.86, 0.0, 29.66, 24.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:18:58.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:18:50
2025-11-12T18:18:58.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:18:59.119 [DEBUG] [Thread-20500] [transport.py] [_log()] starting thread (client mode): 0x149a7250
2025-11-12T18:18:59.119 [DEBUG] [Thread-20500] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:18:59.139 [DEBUG] [Thread-20500] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:18:59.140 [INFO] [Thread-20500] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:18:59.142 [DEBUG] [Thread-20500] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:18:59.142 [DEBUG] [Thread-20500] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:18:59.142 [DEBUG] [Thread-20500] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:18:59.142 [DEBUG] [Thread-20500] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:18:59.142 [DEBUG] [Thread-20500] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:18:59.142 [DEBUG] [Thread-20500] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:18:59.142 [DEBUG] [Thread-20500] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:18:59.142 [DEBUG] [Thread-20500] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] client lang: <none>
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] server lang: <none>
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] kex follows: False
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] Compression: none
2025-11-12T18:18:59.143 [DEBUG] [Thread-20500] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:18:59.151 [DEBUG] [Thread-20500] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:18:59.151 [DEBUG] [Thread-20500] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:18:59.152 [DEBUG] [Thread-20500] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:18:59.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:18:59.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:18:59.154 [DEBUG] [Thread-20500] [transport.py] [_log()] userauth is OK
2025-11-12T18:18:59.154 [DEBUG] [Thread-20500] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:18:59.154 [DEBUG] [Thread-20500] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:18:59.154 [DEBUG] [Thread-20500] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:18:59.154 [DEBUG] [Thread-20500] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:18:59.178 [INFO] [Thread-20500] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:18:59.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:18:59.807 [DEBUG] [Thread-20500] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:18:59.807 [DEBUG] [Thread-20500] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:18:59.807 [DEBUG] [Thread-20500] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:18:59.848 [DEBUG] [Thread-20500] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:18:59.848 [DEBUG] [Thread-20500] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:18:59.851 [DEBUG] [Thread-20500] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:18:59.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:18:59.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:18:59.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:18:59.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:18:59.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:18:59.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:18:59.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:18:59.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:18:59.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:18:59.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.679253 -999.00  +24.40  22.90     16   -2.70 1 1 1 1 1   887    0 26.13 -55.54 ----- 27.4 22.9 272.4 35.5 25.2 -26.9 25.2 -25.6 24.9 -25.8 25.2 -26.3
2025-11-12T18:18:59.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:18:59.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:18:59.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.679253
2025-11-12T18:18:59.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:18:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:18:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:18:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:18:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:18:59.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:18:50', tmtdew=32.5, humidity=10.86, cloud=0.0, wind=29.66, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:18:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:18:59.877 [DEBUG] [Thread-20500] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:18:59.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:18:59.984 [DEBUG] [Thread-20503] [transport.py] [_log()] starting thread (client mode): 0x11f128f0
2025-11-12T18:18:59.984 [DEBUG] [Thread-20503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:18:59.998 [DEBUG] [Thread-20503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:18:59.998 [INFO] [Thread-20503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:19:00.006 [DEBUG] [Thread-20503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:19:00.006 [DEBUG] [Thread-20503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:19:00.006 [DEBUG] [Thread-20503] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] client lang: <none>
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] server lang: <none>
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] kex follows: False
2025-11-12T18:19:00.007 [DEBUG] [Thread-20503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:19:00.008 [DEBUG] [Thread-20503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:19:00.008 [DEBUG] [Thread-20503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:19:00.008 [DEBUG] [Thread-20503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:19:00.008 [DEBUG] [Thread-20503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:19:00.008 [DEBUG] [Thread-20503] [transport.py] [_log()] Compression: none
2025-11-12T18:19:00.008 [DEBUG] [Thread-20503] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:19:00.071 [DEBUG] [Thread-20503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:19:00.071 [DEBUG] [Thread-20503] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:19:00.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:19:00.072 [DEBUG] [Thread-20503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:19:00.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:19:00.132 [DEBUG] [Thread-20503] [transport.py] [_log()] userauth is OK
2025-11-12T18:19:00.133 [DEBUG] [Thread-20503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:19:00.133 [DEBUG] [Thread-20503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:19:00.133 [DEBUG] [Thread-20503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:19:00.133 [DEBUG] [Thread-20503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:19:00.155 [INFO] [Thread-20503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:19:00.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:19:00.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:19:00.713 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:19:00.714 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:19:00.981 [DEBUG] [Thread-20503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:19:00.981 [DEBUG] [Thread-20503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:19:01.028 [DEBUG] [Thread-20503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:19:01.028 [DEBUG] [Thread-20503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:19:01.038 [DEBUG] [Thread-20503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:19:01.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:19:01.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-11-12T18:19:01.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-11-12T18:19:01.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:19:01.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:19:01.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:19:01.075 [DEBUG] [Thread-20503] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:19:02.411 [DEBUG] [Thread-20505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:19:17.461 [DEBUG] [Thread-20506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:19:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:19:31.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:19:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:19:31.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 19, 23), 32.51, 10.86, 0.0, 26.06, 24.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:19:31.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:19:23
2025-11-12T18:19:31.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:19:32.058 [DEBUG] [Thread-20507] [transport.py] [_log()] starting thread (client mode): 0x17361840
2025-11-12T18:19:32.058 [DEBUG] [Thread-20507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:19:32.070 [DEBUG] [Thread-20507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:19:32.070 [INFO] [Thread-20507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:19:32.071 [DEBUG] [Thread-20507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:19:32.071 [DEBUG] [Thread-20507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:19:32.071 [DEBUG] [Thread-20507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:19:32.071 [DEBUG] [Thread-20507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:19:32.071 [DEBUG] [Thread-20507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] client lang: <none>
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] server lang: <none>
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] kex follows: False
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] Compression: none
2025-11-12T18:19:32.072 [DEBUG] [Thread-20507] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:19:32.081 [DEBUG] [Thread-20507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:19:32.081 [DEBUG] [Thread-20507] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:19:32.081 [DEBUG] [Thread-20507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:19:32.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:19:32.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:19:32.082 [DEBUG] [Thread-20507] [transport.py] [_log()] userauth is OK
2025-11-12T18:19:32.082 [DEBUG] [Thread-20507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:19:32.082 [DEBUG] [Thread-20507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:19:32.082 [DEBUG] [Thread-20507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:19:32.082 [DEBUG] [Thread-20507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:19:32.091 [INFO] [Thread-20507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:19:32.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:19:32.492 [DEBUG] [Thread-20509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:19:32.709 [DEBUG] [Thread-20507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:19:32.709 [DEBUG] [Thread-20507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:19:32.709 [DEBUG] [Thread-20507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:19:32.749 [DEBUG] [Thread-20507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:19:32.750 [DEBUG] [Thread-20507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:19:32.753 [DEBUG] [Thread-20507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:19:32.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:19:32.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:19:32.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:19:32.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:19:32.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:19:32.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:19:32.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:19:32.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:19:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:19:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.679600 -999.00  +24.30  28.22     16   -2.60 1 1 1 1 1   887    0 26.29 -56.30 ----- 34.0 28.2 272.6 34.7 25.2 -26.9 25.2 -25.8 24.9 -26.1 25.1 -26.4
2025-11-12T18:19:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:19:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:19:32.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.679600
2025-11-12T18:19:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:19:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:19:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:19:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:19:32.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:19:32.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:19:23', tmtdew=32.51, humidity=10.86, cloud=0.0, wind=26.06, temperature=24.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:18:37.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:19:32.779 [DEBUG] [Thread-20507] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:19:32.862 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:19:32.875 [DEBUG] [Thread-20511] [transport.py] [_log()] starting thread (client mode): 0x17360a30
2025-11-12T18:19:32.875 [DEBUG] [Thread-20511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:19:32.890 [DEBUG] [Thread-20511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:19:32.891 [INFO] [Thread-20511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] client lang: <none>
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] server lang: <none>
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] kex follows: False
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:19:32.901 [DEBUG] [Thread-20511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:19:32.902 [DEBUG] [Thread-20511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:19:32.902 [DEBUG] [Thread-20511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:19:32.902 [DEBUG] [Thread-20511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:19:32.902 [DEBUG] [Thread-20511] [transport.py] [_log()] Compression: none
2025-11-12T18:19:32.902 [DEBUG] [Thread-20511] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:19:32.957 [DEBUG] [Thread-20511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:19:32.958 [DEBUG] [Thread-20511] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:19:32.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:19:32.959 [DEBUG] [Thread-20511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:19:32.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:19:33.015 [DEBUG] [Thread-20511] [transport.py] [_log()] userauth is OK
2025-11-12T18:19:33.015 [DEBUG] [Thread-20511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:19:33.015 [DEBUG] [Thread-20511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:19:33.016 [DEBUG] [Thread-20511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:19:33.016 [DEBUG] [Thread-20511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:19:33.034 [INFO] [Thread-20511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:19:33.035 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:19:33.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:19:33.861 [DEBUG] [Thread-20511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:19:33.861 [DEBUG] [Thread-20511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:19:33.909 [DEBUG] [Thread-20511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:19:33.910 [DEBUG] [Thread-20511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:19:33.919 [DEBUG] [Thread-20511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:19:33.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:19:33.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-11-12T18:19:33.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-11-12T18:19:33.947 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:19:33.947 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:19:33.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:19:33.956 [DEBUG] [Thread-20511] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:19:44.910 [DEBUG] [Thread-20513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:19:47.528 [DEBUG] [Thread-20514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:20:00.864 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:20:00.865 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:20:02.578 [DEBUG] [Thread-20515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:20:03.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:20:03.978 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:20:03.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-11-12T18:20:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 19, 55), 32.49, 10.83, 0.0, 30.84, 24.51, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:20:04.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:19:55
2025-11-12T18:20:04.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:20:04.906 [DEBUG] [Thread-20516] [transport.py] [_log()] starting thread (client mode): 0x14957f70
2025-11-12T18:20:04.906 [DEBUG] [Thread-20516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:20:04.926 [DEBUG] [Thread-20516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:20:04.926 [INFO] [Thread-20516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:20:04.929 [DEBUG] [Thread-20516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:20:04.929 [DEBUG] [Thread-20516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] client lang: <none>
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] server lang: <none>
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] kex follows: False
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:20:04.930 [DEBUG] [Thread-20516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:20:04.931 [DEBUG] [Thread-20516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:20:04.931 [DEBUG] [Thread-20516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:20:04.931 [DEBUG] [Thread-20516] [transport.py] [_log()] Compression: none
2025-11-12T18:20:04.931 [DEBUG] [Thread-20516] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:20:04.949 [DEBUG] [Thread-20516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:20:04.950 [DEBUG] [Thread-20516] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:20:04.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:20:04.951 [DEBUG] [Thread-20516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:20:04.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:20:04.953 [DEBUG] [Thread-20516] [transport.py] [_log()] userauth is OK
2025-11-12T18:20:04.953 [DEBUG] [Thread-20516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:20:04.953 [DEBUG] [Thread-20516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:20:04.953 [DEBUG] [Thread-20516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:20:04.953 [DEBUG] [Thread-20516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:20:04.978 [INFO] [Thread-20516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:20:04.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:20:11.998 [DEBUG] [Thread-20516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:20:11.998 [DEBUG] [Thread-20516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:20:11.999 [DEBUG] [Thread-20516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:20:12.039 [DEBUG] [Thread-20516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:20:12.039 [DEBUG] [Thread-20516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:20:12.042 [DEBUG] [Thread-20516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:20:12.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:20:12.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:20:12.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:20:12.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:20:12.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:20:12.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:20:12.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:20:12.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:20:12.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:20:12.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.680294 -999.00  +24.20  27.39     16   -2.50 1 1 1 1 1   887    0 26.25 -61.57 ----- 30.1 27.4 278.4 38.3 25.1 -27.0 25.1 -25.6 24.8 -25.6 25.1 -26.4
2025-11-12T18:20:12.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:20:12.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:20:12.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.680294
2025-11-12T18:20:12.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:20:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:20:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:20:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:20:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:20:12.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:19:55', tmtdew=32.49, humidity=10.83, cloud=0.0, wind=30.84, temperature=24.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:19:37.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:20:12.168 [DEBUG] [Thread-20516] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:20:12.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:20:12.264 [DEBUG] [Thread-20519] [transport.py] [_log()] starting thread (client mode): 0x149a6f50
2025-11-12T18:20:12.265 [DEBUG] [Thread-20519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:20:12.279 [DEBUG] [Thread-20519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:20:12.280 [INFO] [Thread-20519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:20:12.287 [DEBUG] [Thread-20519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] client lang: <none>
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] server lang: <none>
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] kex follows: False
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] Compression: none
2025-11-12T18:20:12.288 [DEBUG] [Thread-20519] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:20:12.347 [DEBUG] [Thread-20519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:20:12.348 [DEBUG] [Thread-20519] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:20:12.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:20:12.349 [DEBUG] [Thread-20519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:20:12.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:20:12.407 [DEBUG] [Thread-20519] [transport.py] [_log()] userauth is OK
2025-11-12T18:20:12.407 [DEBUG] [Thread-20519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:20:12.407 [DEBUG] [Thread-20519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:20:12.407 [DEBUG] [Thread-20519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:20:12.407 [DEBUG] [Thread-20519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:20:12.431 [INFO] [Thread-20519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:20:12.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:20:12.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:20:13.298 [DEBUG] [Thread-20519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:20:13.298 [DEBUG] [Thread-20519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:20:13.347 [DEBUG] [Thread-20519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:20:13.347 [DEBUG] [Thread-20519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:20:13.356 [DEBUG] [Thread-20519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:20:13.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:20:13.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:20:13.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-11-12T18:20:13.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:20:13.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:20:13.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:20:13.397 [DEBUG] [Thread-20519] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:20:17.609 [DEBUG] [Thread-20521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:20:32.663 [DEBUG] [Thread-20522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:20:43.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:20:43.419 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:20:43.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-11-12T18:20:44.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 20, 27), 32.32, 10.98, 0.0, 27.35, 24.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:20:44.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:20:27
2025-11-12T18:20:44.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:20:44.364 [DEBUG] [Thread-20523] [transport.py] [_log()] starting thread (client mode): 0x173bde70
2025-11-12T18:20:44.364 [DEBUG] [Thread-20523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:20:44.385 [DEBUG] [Thread-20523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:20:44.385 [INFO] [Thread-20523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:20:44.388 [DEBUG] [Thread-20523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] client lang: <none>
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] server lang: <none>
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] kex follows: False
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] Compression: none
2025-11-12T18:20:44.389 [DEBUG] [Thread-20523] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:20:44.404 [DEBUG] [Thread-20523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:20:44.404 [DEBUG] [Thread-20523] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:20:44.404 [DEBUG] [Thread-20523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:20:44.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:20:44.405 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:20:44.405 [DEBUG] [Thread-20523] [transport.py] [_log()] userauth is OK
2025-11-12T18:20:44.405 [DEBUG] [Thread-20523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:20:44.405 [DEBUG] [Thread-20523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:20:44.405 [DEBUG] [Thread-20523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:20:44.405 [DEBUG] [Thread-20523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:20:44.415 [INFO] [Thread-20523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:20:44.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:20:44.938 [DEBUG] [Thread-20525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:20:45.042 [DEBUG] [Thread-20523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:20:45.042 [DEBUG] [Thread-20523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:20:45.042 [DEBUG] [Thread-20523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:20:45.083 [DEBUG] [Thread-20523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:20:45.083 [DEBUG] [Thread-20523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:20:45.085 [DEBUG] [Thread-20523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:20:45.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:20:45.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:20:45.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:20:45.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:20:45.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:20:45.103 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:20:45.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:20:45.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:20:45.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:20:45.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.680641 -999.00  +24.20  25.24     16   -2.50 1 1 1 1 1   887    0 26.18 -68.54 ----- 29.9 25.2 279.2 33.4 25.1 -27.0 25.0 -25.5 24.8 -25.8 25.1 -26.3
2025-11-12T18:20:45.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:20:45.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:20:45.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.680641
2025-11-12T18:20:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:20:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:20:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:20:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:20:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:20:45.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:20:27', tmtdew=32.32, humidity=10.98, cloud=0.0, wind=27.35, temperature=24.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:20:07.382', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:20:45.104 [DEBUG] [Thread-20523] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:20:45.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:20:45.189 [DEBUG] [Thread-20527] [transport.py] [_log()] starting thread (client mode): 0x17361420
2025-11-12T18:20:45.190 [DEBUG] [Thread-20527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:20:45.204 [DEBUG] [Thread-20527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:20:45.204 [INFO] [Thread-20527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] client lang: <none>
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] server lang: <none>
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] kex follows: False
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:20:45.212 [DEBUG] [Thread-20527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:20:45.213 [DEBUG] [Thread-20527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:20:45.213 [DEBUG] [Thread-20527] [transport.py] [_log()] Compression: none
2025-11-12T18:20:45.213 [DEBUG] [Thread-20527] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:20:45.269 [DEBUG] [Thread-20527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:20:45.269 [DEBUG] [Thread-20527] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:20:45.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:20:45.270 [DEBUG] [Thread-20527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:20:45.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:20:45.326 [DEBUG] [Thread-20527] [transport.py] [_log()] userauth is OK
2025-11-12T18:20:45.326 [DEBUG] [Thread-20527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:20:45.326 [DEBUG] [Thread-20527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:20:45.326 [DEBUG] [Thread-20527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:20:45.326 [DEBUG] [Thread-20527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:20:45.343 [INFO] [Thread-20527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:20:45.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:20:45.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:20:46.179 [DEBUG] [Thread-20527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:20:46.179 [DEBUG] [Thread-20527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:20:46.227 [DEBUG] [Thread-20527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:20:46.227 [DEBUG] [Thread-20527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:20:46.235 [DEBUG] [Thread-20527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:20:46.243 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:20:46.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-11-12T18:20:46.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-11-12T18:20:46.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:20:46.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:20:46.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:20:46.267 [DEBUG] [Thread-20527] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:20:47.695 [DEBUG] [Thread-20529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:21:01.009 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:21:01.010 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:21:02.739 [DEBUG] [Thread-20530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:21:16.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:21:16.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:21:16.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-11-12T18:21:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 20, 59), 32.21, 10.98, 0.0, 31.78, 24.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:21:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:20:59
2025-11-12T18:21:17.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:21:17.214 [DEBUG] [Thread-20531] [transport.py] [_log()] starting thread (client mode): 0x149a9210
2025-11-12T18:21:17.214 [DEBUG] [Thread-20531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:21:17.235 [DEBUG] [Thread-20531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:21:17.235 [INFO] [Thread-20531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:21:17.238 [DEBUG] [Thread-20531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:21:17.238 [DEBUG] [Thread-20531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:21:17.238 [DEBUG] [Thread-20531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:21:17.238 [DEBUG] [Thread-20531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:21:17.238 [DEBUG] [Thread-20531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:21:17.238 [DEBUG] [Thread-20531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:21:17.238 [DEBUG] [Thread-20531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] client lang: <none>
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] server lang: <none>
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] kex follows: False
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] Compression: none
2025-11-12T18:21:17.239 [DEBUG] [Thread-20531] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:21:17.256 [DEBUG] [Thread-20531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:21:17.256 [DEBUG] [Thread-20531] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:21:17.257 [DEBUG] [Thread-20531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:21:17.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:21:17.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:21:17.259 [DEBUG] [Thread-20531] [transport.py] [_log()] userauth is OK
2025-11-12T18:21:17.259 [DEBUG] [Thread-20531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:21:17.259 [DEBUG] [Thread-20531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:21:17.259 [DEBUG] [Thread-20531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:21:17.259 [DEBUG] [Thread-20531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:21:17.277 [INFO] [Thread-20531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:21:17.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:21:17.778 [DEBUG] [Thread-20533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:21:18.021 [DEBUG] [Thread-20531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:21:18.021 [DEBUG] [Thread-20531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:21:18.022 [DEBUG] [Thread-20531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:21:18.063 [DEBUG] [Thread-20531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:21:18.063 [DEBUG] [Thread-20531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:21:18.066 [DEBUG] [Thread-20531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:21:18.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:21:18.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:21:18.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:21:18.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:21:18.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:21:18.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:21:18.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:21:18.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:21:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:21:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.680989 -999.00  +24.20  25.12     17   -2.30 1 1 1 1 1   887    0 25.90 -66.81 ----- 27.4 25.1 284.0 32.4 25.0 -27.0 25.1 -25.4 24.8 -25.4 25.1 -26.2
2025-11-12T18:21:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:21:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:21:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.680989
2025-11-12T18:21:18.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:21:18.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:21:18.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:21:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:21:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:21:18.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:20:59', tmtdew=32.21, humidity=10.98, cloud=0.0, wind=31.78, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:20:37.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:21:18.091 [DEBUG] [Thread-20531] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:21: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-11-12T18:21:18.187 [DEBUG] [Thread-20535] [transport.py] [_log()] starting thread (client mode): 0x173eb0a0
2025-11-12T18:21:18.187 [DEBUG] [Thread-20535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:21:18.201 [DEBUG] [Thread-20535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:21:18.202 [INFO] [Thread-20535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] client lang: <none>
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] server lang: <none>
2025-11-12T18:21:18.213 [DEBUG] [Thread-20535] [transport.py] [_log()] kex follows: False
2025-11-12T18:21:18.214 [DEBUG] [Thread-20535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:21:18.214 [DEBUG] [Thread-20535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:21:18.214 [DEBUG] [Thread-20535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:21:18.214 [DEBUG] [Thread-20535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:21:18.214 [DEBUG] [Thread-20535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:21:18.214 [DEBUG] [Thread-20535] [transport.py] [_log()] Compression: none
2025-11-12T18:21:18.214 [DEBUG] [Thread-20535] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:21:18.275 [DEBUG] [Thread-20535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:21:18.276 [DEBUG] [Thread-20535] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:21:18.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:21:18.277 [DEBUG] [Thread-20535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:21:18.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:21:18.332 [DEBUG] [Thread-20535] [transport.py] [_log()] userauth is OK
2025-11-12T18:21:18.332 [DEBUG] [Thread-20535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:21:18.332 [DEBUG] [Thread-20535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:21:18.332 [DEBUG] [Thread-20535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:21:18.333 [DEBUG] [Thread-20535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:21:18.353 [INFO] [Thread-20535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:21:18.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:21:18.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:21:19.227 [DEBUG] [Thread-20535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:21:19.228 [DEBUG] [Thread-20535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:21:19.278 [DEBUG] [Thread-20535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:21:19.279 [DEBUG] [Thread-20535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:21:19.288 [DEBUG] [Thread-20535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:21:19.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:21: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-11-12T18:21:19.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-11-12T18:21:19.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:21:19.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:21:19.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:21:19.328 [DEBUG] [Thread-20535] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:21:32.806 [DEBUG] [Thread-20537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:21:44.983 [DEBUG] [Thread-20538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:21:47.858 [DEBUG] [Thread-20539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:21:49.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:21:49.351 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:21:49.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-11-12T18:21:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 21, 31), 32.04, 11.13, 0.0, 30.4, 24.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:21:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:21:31
2025-11-12T18:21:50.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:21:50.278 [DEBUG] [Thread-20540] [transport.py] [_log()] starting thread (client mode): 0x173bc190
2025-11-12T18:21:50.278 [DEBUG] [Thread-20540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:21:50.299 [DEBUG] [Thread-20540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:21:50.299 [INFO] [Thread-20540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:21:50.302 [DEBUG] [Thread-20540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:21:50.302 [DEBUG] [Thread-20540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:21:50.302 [DEBUG] [Thread-20540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:21:50.302 [DEBUG] [Thread-20540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:21:50.302 [DEBUG] [Thread-20540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:21:50.302 [DEBUG] [Thread-20540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:21:50.302 [DEBUG] [Thread-20540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] client lang: <none>
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] server lang: <none>
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] kex follows: False
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] Compression: none
2025-11-12T18:21:50.303 [DEBUG] [Thread-20540] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:21:50.322 [DEBUG] [Thread-20540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:21:50.323 [DEBUG] [Thread-20540] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:21:50.323 [DEBUG] [Thread-20540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:21:50.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:21:50.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:21:50.326 [DEBUG] [Thread-20540] [transport.py] [_log()] userauth is OK
2025-11-12T18:21:50.326 [DEBUG] [Thread-20540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:21:50.326 [DEBUG] [Thread-20540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:21:50.326 [DEBUG] [Thread-20540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:21:50.326 [DEBUG] [Thread-20540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:21:50.351 [INFO] [Thread-20540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:21:50.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:21:50.988 [DEBUG] [Thread-20540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:21:50.988 [DEBUG] [Thread-20540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:21:50.988 [DEBUG] [Thread-20540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:21:51.029 [DEBUG] [Thread-20540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:21:51.029 [DEBUG] [Thread-20540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:21:51.032 [DEBUG] [Thread-20540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:21:51.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:21:51.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:21:51.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:21:51.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:21:51.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:21:51.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:21:51.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:21:51.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:21:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:21:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.681336 -999.00  +24.20  25.30     17   -2.20 1 1 1 1 1   887    0 25.67 -69.87 ----- 27.2 25.3 282.0 39.5 25.0 -27.0 25.0 -25.4 24.7 -25.7 25.0 -26.5
2025-11-12T18:21:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:21:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:21:51.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.681336
2025-11-12T18:21:51.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:21:51.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:21:51.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:21:51.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:21:51.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:21:51.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:21:31', tmtdew=32.04, humidity=11.13, cloud=0.0, wind=30.4, temperature=24.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:21:07.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:21:51.059 [DEBUG] [Thread-20540] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:21:51.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:21:51.153 [DEBUG] [Thread-20543] [transport.py] [_log()] starting thread (client mode): 0x173bf070
2025-11-12T18:21:51.153 [DEBUG] [Thread-20543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:21:51.168 [DEBUG] [Thread-20543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:21:51.168 [INFO] [Thread-20543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:21:51.176 [DEBUG] [Thread-20543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:21:51.176 [DEBUG] [Thread-20543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:21:51.176 [DEBUG] [Thread-20543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:21:51.176 [DEBUG] [Thread-20543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:21:51.176 [DEBUG] [Thread-20543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:21:51.176 [DEBUG] [Thread-20543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] client lang: <none>
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] server lang: <none>
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] kex follows: False
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:21:51.177 [DEBUG] [Thread-20543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:21:51.178 [DEBUG] [Thread-20543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:21:51.178 [DEBUG] [Thread-20543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:21:51.178 [DEBUG] [Thread-20543] [transport.py] [_log()] Compression: none
2025-11-12T18:21:51.178 [DEBUG] [Thread-20543] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:21:51.235 [DEBUG] [Thread-20543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:21:51.236 [DEBUG] [Thread-20543] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:21:51.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:21:51.237 [DEBUG] [Thread-20543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:21:51.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:21:51.294 [DEBUG] [Thread-20543] [transport.py] [_log()] userauth is OK
2025-11-12T18:21:51.295 [DEBUG] [Thread-20543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:21:51.295 [DEBUG] [Thread-20543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:21:51.295 [DEBUG] [Thread-20543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:21:51.295 [DEBUG] [Thread-20543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:21:51.314 [INFO] [Thread-20543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:21:51.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:21:51.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:21:52.159 [DEBUG] [Thread-20543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:21:52.160 [DEBUG] [Thread-20543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:21:52.208 [DEBUG] [Thread-20543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:21:52.208 [DEBUG] [Thread-20543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:21:52.217 [DEBUG] [Thread-20543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:21:52.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:21:52.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-11-12T18:21:52.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-11-12T18:21:52.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:21:52.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:21:52.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:21:52.254 [DEBUG] [Thread-20543] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:22:01.150 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:22:01.156 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:22:02.893 [DEBUG] [Thread-20545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:22:17.934 [DEBUG] [Thread-20546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:22:22.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:22:22.252 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:22:22.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:22:22.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 22, 2), 31.92, 11.23, 0.0, 30.61, 24.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:22:22.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:22:02
2025-11-12T18:22:23.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:22:23.167 [DEBUG] [Thread-20547] [transport.py] [_log()] starting thread (client mode): 0x173be7a0
2025-11-12T18:22:23.167 [DEBUG] [Thread-20547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:22:23.187 [DEBUG] [Thread-20547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:22:23.187 [INFO] [Thread-20547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] client lang: <none>
2025-11-12T18:22:23.190 [DEBUG] [Thread-20547] [transport.py] [_log()] server lang: <none>
2025-11-12T18:22:23.191 [DEBUG] [Thread-20547] [transport.py] [_log()] kex follows: False
2025-11-12T18:22:23.191 [DEBUG] [Thread-20547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:22:23.191 [DEBUG] [Thread-20547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:22:23.191 [DEBUG] [Thread-20547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:22:23.191 [DEBUG] [Thread-20547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:22:23.191 [DEBUG] [Thread-20547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:22:23.191 [DEBUG] [Thread-20547] [transport.py] [_log()] Compression: none
2025-11-12T18:22:23.191 [DEBUG] [Thread-20547] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:22:23.207 [DEBUG] [Thread-20547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:22:23.207 [DEBUG] [Thread-20547] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:22:23.208 [DEBUG] [Thread-20547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:22:23.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:22:23.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:22:23.210 [DEBUG] [Thread-20547] [transport.py] [_log()] userauth is OK
2025-11-12T18:22:23.210 [DEBUG] [Thread-20547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:22:23.210 [DEBUG] [Thread-20547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:22:23.210 [DEBUG] [Thread-20547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:22:23.210 [DEBUG] [Thread-20547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:22:23.228 [INFO] [Thread-20547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:22:23.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:22:23.984 [DEBUG] [Thread-20547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:22:23.984 [DEBUG] [Thread-20547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:22:23.984 [DEBUG] [Thread-20547] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:22:24.024 [DEBUG] [Thread-20547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:22:24.025 [DEBUG] [Thread-20547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:22:24.028 [DEBUG] [Thread-20547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:22:24.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:22:24.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:22:24.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:22:24.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:22:24.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:22:24.050 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:22:24.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:22:24.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:22:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:22:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.681683 -999.00  +24.10  26.93     17   -2.20 1 1 1 1 1   887    0 25.70 -71.47 ----- 30.9 26.9 281.2 37.6 25.0 -27.0 25.0 -25.4 24.7 -25.5 24.9 -26.2
2025-11-12T18:22:24.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:22:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:22:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.681683
2025-11-12T18:22:24.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:22:24.053 [DEBUG] [Thread-20547] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:22:24.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:22:24.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:22:02', tmtdew=31.92, humidity=11.23, cloud=0.0, wind=30.61, temperature=24.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:21:37.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:22:24.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:22:24.151 [DEBUG] [Thread-20550] [transport.py] [_log()] starting thread (client mode): 0x173bcf10
2025-11-12T18:22:24.151 [DEBUG] [Thread-20550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:22:24.166 [DEBUG] [Thread-20550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:22:24.166 [INFO] [Thread-20550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:22:24.174 [DEBUG] [Thread-20550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:22:24.174 [DEBUG] [Thread-20550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:22:24.174 [DEBUG] [Thread-20550] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:22:24.174 [DEBUG] [Thread-20550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:22:24.174 [DEBUG] [Thread-20550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:22:24.174 [DEBUG] [Thread-20550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:22:24.174 [DEBUG] [Thread-20550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:22:24.174 [DEBUG] [Thread-20550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] client lang: <none>
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] server lang: <none>
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] kex follows: False
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] Compression: none
2025-11-12T18:22:24.175 [DEBUG] [Thread-20550] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:22:24.239 [DEBUG] [Thread-20550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:22:24.239 [DEBUG] [Thread-20550] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:22:24.240 [DEBUG] [Thread-20550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:22:24.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:22:24.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:22:24.295 [DEBUG] [Thread-20550] [transport.py] [_log()] userauth is OK
2025-11-12T18:22:24.295 [DEBUG] [Thread-20550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:22:24.295 [DEBUG] [Thread-20550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:22:24.295 [DEBUG] [Thread-20550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:22:24.295 [DEBUG] [Thread-20550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:22:24.317 [INFO] [Thread-20550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:22:24.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:22:24.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:22:25.150 [DEBUG] [Thread-20550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:22:25.150 [DEBUG] [Thread-20550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:22:25.198 [DEBUG] [Thread-20550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:22:25.199 [DEBUG] [Thread-20550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:22:25.209 [DEBUG] [Thread-20550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:22:25.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:22:25.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-11-12T18:22:25.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:22:25.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:22:25.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:22:25.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:22:25.249 [DEBUG] [Thread-20550] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:22:32.971 [DEBUG] [Thread-20552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:22:45.017 [DEBUG] [Thread-20553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:22:48.020 [DEBUG] [Thread-20554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:22:55.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:22:55.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:22:55.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:22:55.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 22, 35), 31.56, 11.78, 0.0, 33.74, 24.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:22:55.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:22:35
2025-11-12T18:22:56.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:22:56.156 [DEBUG] [Thread-20555] [transport.py] [_log()] starting thread (client mode): 0x173be470
2025-11-12T18:22:56.156 [DEBUG] [Thread-20555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:22:56.176 [DEBUG] [Thread-20555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:22:56.176 [INFO] [Thread-20555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:22:56.179 [DEBUG] [Thread-20555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:22:56.179 [DEBUG] [Thread-20555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:22:56.179 [DEBUG] [Thread-20555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] client lang: <none>
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] server lang: <none>
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] kex follows: False
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] Compression: none
2025-11-12T18:22:56.180 [DEBUG] [Thread-20555] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:22:56.197 [DEBUG] [Thread-20555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:22:56.197 [DEBUG] [Thread-20555] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:22:56.198 [DEBUG] [Thread-20555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:22:56.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:22:56.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:22:56.200 [DEBUG] [Thread-20555] [transport.py] [_log()] userauth is OK
2025-11-12T18:22:56.200 [DEBUG] [Thread-20555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:22:56.201 [DEBUG] [Thread-20555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:22:56.201 [DEBUG] [Thread-20555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:22:56.201 [DEBUG] [Thread-20555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:22:56.224 [INFO] [Thread-20555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:22:56.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:22:56.854 [DEBUG] [Thread-20555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:22:56.854 [DEBUG] [Thread-20555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:22:56.854 [DEBUG] [Thread-20555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:22:56.895 [DEBUG] [Thread-20555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:22:56.895 [DEBUG] [Thread-20555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:22:56.899 [DEBUG] [Thread-20555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:22:56.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:22:56.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:22:56.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:22:56.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:22:56.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:22:56.922 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:22:56.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:22:56.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:22:56.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:22:56.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.682030 -999.00  +24.10  33.98     17   -2.20 1 1 2 1 1   887    0 25.39 -76.24 ----- 30.1 34.0 271.8 40.5 25.0 -27.0 24.9 -25.4 24.7 -25.4 25.0 -26.2
2025-11-12T18:22:56.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:22:56.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:22:56.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.682030
2025-11-12T18:22:56.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:22:56.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:22:56.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:22:56.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:22:56.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:22:56.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:22:35', tmtdew=31.56, humidity=11.78, cloud=0.0, wind=33.74, temperature=24.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:22:07.392', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:22:56.925 [DEBUG] [Thread-20555] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:22:57.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:22:57.021 [DEBUG] [Thread-20558] [transport.py] [_log()] starting thread (client mode): 0x173bd600
2025-11-12T18:22:57.021 [DEBUG] [Thread-20558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:22:57.036 [DEBUG] [Thread-20558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:22:57.036 [INFO] [Thread-20558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:22:57.043 [DEBUG] [Thread-20558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] client lang: <none>
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] server lang: <none>
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] kex follows: False
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] Compression: none
2025-11-12T18:22:57.044 [DEBUG] [Thread-20558] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:22:57.102 [DEBUG] [Thread-20558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:22:57.102 [DEBUG] [Thread-20558] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:22:57.103 [DEBUG] [Thread-20558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:22:57.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:22:57.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:22:57.158 [DEBUG] [Thread-20558] [transport.py] [_log()] userauth is OK
2025-11-12T18:22:57.159 [DEBUG] [Thread-20558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:22:57.159 [DEBUG] [Thread-20558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:22:57.159 [DEBUG] [Thread-20558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:22:57.159 [DEBUG] [Thread-20558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:22:57.178 [INFO] [Thread-20558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:22:57.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:22:57.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:22:58.007 [DEBUG] [Thread-20558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:22:58.008 [DEBUG] [Thread-20558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:22:58.056 [DEBUG] [Thread-20558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:22:58.056 [DEBUG] [Thread-20558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:22:58.065 [DEBUG] [Thread-20558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:22:58.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:22:58.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-11-12T18:22:58.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:22:58.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:22:58.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:22:58.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:22:58.101 [DEBUG] [Thread-20558] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:23:01.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:23:01.296 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:23:03.061 [DEBUG] [Thread-20560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:23:18.108 [DEBUG] [Thread-20561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:23:28.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:23:28.117 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:23:28.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-11-12T18:23:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 23, 6), 31.45, 11.86, 0.0, 30.65, 24.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:23:28.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:23:06
2025-11-12T18:23:28.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:23:29.025 [DEBUG] [Thread-20562] [transport.py] [_log()] starting thread (client mode): 0x173bcd60
2025-11-12T18:23:29.025 [DEBUG] [Thread-20562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:23:29.044 [DEBUG] [Thread-20562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:23:29.045 [INFO] [Thread-20562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] client lang: <none>
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] server lang: <none>
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] kex follows: False
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] Compression: none
2025-11-12T18:23:29.046 [DEBUG] [Thread-20562] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:23:29.059 [DEBUG] [Thread-20562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:23:29.059 [DEBUG] [Thread-20562] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:23:29.060 [DEBUG] [Thread-20562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:23:29.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:23:29.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:23:29.061 [DEBUG] [Thread-20562] [transport.py] [_log()] userauth is OK
2025-11-12T18:23:29.062 [DEBUG] [Thread-20562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:23:29.062 [DEBUG] [Thread-20562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:23:29.062 [DEBUG] [Thread-20562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:23:29.062 [DEBUG] [Thread-20562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:23:29.079 [INFO] [Thread-20562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:23:29.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:23:29.788 [DEBUG] [Thread-20562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:23:29.788 [DEBUG] [Thread-20562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:23:29.789 [DEBUG] [Thread-20562] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:23:29.829 [DEBUG] [Thread-20562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:23:29.830 [DEBUG] [Thread-20562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:23:29.832 [DEBUG] [Thread-20562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:23:29.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:23:29.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:23:29.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:23:29.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:23:29.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:23:29.853 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:23:29.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:23:29.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.682378 -999.00  +24.10  27.30     17   -2.10 1 1 1 1 1   887    0 25.34 -84.52 ----- 26.3 27.3 279.0 34.8 24.9 -26.7 24.9 -25.3 24.6 -25.1 24.9 -26.2
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.682378
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:23:29.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:23:06', tmtdew=31.45, humidity=11.86, cloud=0.0, wind=30.65, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:22:37.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:23:29.854 [DEBUG] [Thread-20562] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:23: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-11-12T18:23:29.961 [DEBUG] [Thread-20565] [transport.py] [_log()] starting thread (client mode): 0x173bded0
2025-11-12T18:23:29.962 [DEBUG] [Thread-20565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:23:29.977 [DEBUG] [Thread-20565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:23:29.977 [INFO] [Thread-20565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] client lang: <none>
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] server lang: <none>
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] kex follows: False
2025-11-12T18:23:29.985 [DEBUG] [Thread-20565] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:23:29.986 [DEBUG] [Thread-20565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:23:29.986 [DEBUG] [Thread-20565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:23:29.986 [DEBUG] [Thread-20565] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:23:29.986 [DEBUG] [Thread-20565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:23:29.986 [DEBUG] [Thread-20565] [transport.py] [_log()] Compression: none
2025-11-12T18:23:29.986 [DEBUG] [Thread-20565] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:23:30.043 [DEBUG] [Thread-20565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:23:30.043 [DEBUG] [Thread-20565] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:23:30.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:23:30.044 [DEBUG] [Thread-20565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:23:30.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:23:30.098 [DEBUG] [Thread-20565] [transport.py] [_log()] userauth is OK
2025-11-12T18:23:30.098 [DEBUG] [Thread-20565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:23:30.099 [DEBUG] [Thread-20565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:23:30.099 [DEBUG] [Thread-20565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:23:30.099 [DEBUG] [Thread-20565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:23:30.118 [INFO] [Thread-20565] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:23:30.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:23:30.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:23:30.941 [DEBUG] [Thread-20565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:23:30.942 [DEBUG] [Thread-20565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:23:30.989 [DEBUG] [Thread-20565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:23:30.989 [DEBUG] [Thread-20565] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:23:30.999 [DEBUG] [Thread-20565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:23:31.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:23: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-11-12T18:23:31.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-11-12T18:23:31.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:23:31.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:23:31.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:23:31.034 [DEBUG] [Thread-20565] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:23:33.139 [DEBUG] [Thread-20567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:23:45.054 [DEBUG] [Thread-20568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:23:48.189 [DEBUG] [Thread-20569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:24:01.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:24:01.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:24:01.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-11-12T18:24:01.439 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:24:01.439 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:24:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 23, 38), 31.25, 11.91, 0.0, 36.37, 24.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:24:01.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:23:38
2025-11-12T18:24:01.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:24:01.984 [DEBUG] [Thread-20570] [transport.py] [_log()] starting thread (client mode): 0x17361030
2025-11-12T18:24:01.984 [DEBUG] [Thread-20570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:24:02.002 [DEBUG] [Thread-20570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:24:02.002 [INFO] [Thread-20570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:24:02.006 [DEBUG] [Thread-20570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] client lang: <none>
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] server lang: <none>
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] kex follows: False
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] Compression: none
2025-11-12T18:24:02.007 [DEBUG] [Thread-20570] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:24:02.022 [DEBUG] [Thread-20570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:24:02.023 [DEBUG] [Thread-20570] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:24:02.023 [DEBUG] [Thread-20570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:24:02.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:24:02.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:24:02.025 [DEBUG] [Thread-20570] [transport.py] [_log()] userauth is OK
2025-11-12T18:24:02.026 [DEBUG] [Thread-20570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:24:02.026 [DEBUG] [Thread-20570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:24:02.026 [DEBUG] [Thread-20570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:24:02.026 [DEBUG] [Thread-20570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:24:02.049 [INFO] [Thread-20570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:24:02.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:24:02.693 [DEBUG] [Thread-20570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:24:02.693 [DEBUG] [Thread-20570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:24:02.693 [DEBUG] [Thread-20570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:24:02.734 [DEBUG] [Thread-20570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:24:02.734 [DEBUG] [Thread-20570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:24:02.737 [DEBUG] [Thread-20570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:24:02.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:24:02.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:24:02.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:24:02.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:24:02.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:24:02.761 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:24:02.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:24:02.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.682725 -999.00  +24.10  27.33     17   -2.00 1 1 1 1 1   887    0 24.99 -86.99 ----- 34.4 27.3 280.2 31.2 24.9 -26.7 24.9 -25.4 24.6 -25.3 24.9 -26.2
2025-11-12T18:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:24:02.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.682725
2025-11-12T18:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:24:02.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:24:02.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:23:38', tmtdew=31.25, humidity=11.91, cloud=0.0, wind=36.37, temperature=24.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:23:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:24:02.764 [DEBUG] [Thread-20570] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:24:02.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:24:02.860 [DEBUG] [Thread-20573] [transport.py] [_log()] starting thread (client mode): 0x17361480
2025-11-12T18:24:02.860 [DEBUG] [Thread-20573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:24:02.874 [DEBUG] [Thread-20573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:24:02.874 [INFO] [Thread-20573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:24:02.882 [DEBUG] [Thread-20573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:24:02.882 [DEBUG] [Thread-20573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] client lang: <none>
2025-11-12T18:24:02.883 [DEBUG] [Thread-20573] [transport.py] [_log()] server lang: <none>
2025-11-12T18:24:02.884 [DEBUG] [Thread-20573] [transport.py] [_log()] kex follows: False
2025-11-12T18:24:02.884 [DEBUG] [Thread-20573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:24:02.884 [DEBUG] [Thread-20573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:24:02.884 [DEBUG] [Thread-20573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:24:02.884 [DEBUG] [Thread-20573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:24:02.884 [DEBUG] [Thread-20573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:24:02.885 [DEBUG] [Thread-20573] [transport.py] [_log()] Compression: none
2025-11-12T18:24:02.885 [DEBUG] [Thread-20573] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:24:02.943 [DEBUG] [Thread-20573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:24:02.943 [DEBUG] [Thread-20573] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:24:02.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:24:02.945 [DEBUG] [Thread-20573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:24:02.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:24:03.002 [DEBUG] [Thread-20573] [transport.py] [_log()] userauth is OK
2025-11-12T18:24:03.003 [DEBUG] [Thread-20573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:24:03.003 [DEBUG] [Thread-20573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:24:03.003 [DEBUG] [Thread-20573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:24:03.003 [DEBUG] [Thread-20573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:24:03.023 [INFO] [Thread-20573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:24:03.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:24:03.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:24:03.223 [DEBUG] [Thread-20575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:24:03.868 [DEBUG] [Thread-20573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:24:03.868 [DEBUG] [Thread-20573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:24:03.915 [DEBUG] [Thread-20573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:24:03.916 [DEBUG] [Thread-20573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:24:03.925 [DEBUG] [Thread-20573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:24:03.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:24:03.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:24: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-11-12T18:24:03.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:24:03.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:24:03.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:24:03.962 [DEBUG] [Thread-20573] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:24:18.275 [DEBUG] [Thread-20576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:24:33.313 [DEBUG] [Thread-20577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:24:33.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:24:33.983 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:24:33.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-11-12T18:24:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 24, 10), 31.3, 11.86, 0.0, 34.28, 24.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:24:34.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:24:10
2025-11-12T18:24:34.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:24:34.979 [DEBUG] [Thread-20578] [transport.py] [_log()] starting thread (client mode): 0x17363a30
2025-11-12T18:24:34.979 [DEBUG] [Thread-20578] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:24:34.999 [DEBUG] [Thread-20578] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:24:34.999 [INFO] [Thread-20578] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] client lang: <none>
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] server lang: <none>
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] kex follows: False
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:24:35.002 [DEBUG] [Thread-20578] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:24:35.003 [DEBUG] [Thread-20578] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:24:35.003 [DEBUG] [Thread-20578] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:24:35.003 [DEBUG] [Thread-20578] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:24:35.003 [DEBUG] [Thread-20578] [transport.py] [_log()] Compression: none
2025-11-12T18:24:35.003 [DEBUG] [Thread-20578] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:24:35.017 [DEBUG] [Thread-20578] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:24:35.017 [DEBUG] [Thread-20578] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:24:35.018 [DEBUG] [Thread-20578] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:24:35.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:24:35.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:24:35.060 [DEBUG] [Thread-20578] [transport.py] [_log()] userauth is OK
2025-11-12T18:24:35.060 [DEBUG] [Thread-20578] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:24:35.060 [DEBUG] [Thread-20578] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:24:35.060 [DEBUG] [Thread-20578] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:24:35.060 [DEBUG] [Thread-20578] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:24:35.075 [INFO] [Thread-20578] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:24:35.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:24:35.844 [DEBUG] [Thread-20578] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:24:35.844 [DEBUG] [Thread-20578] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:24:35.844 [DEBUG] [Thread-20578] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:24:35.885 [DEBUG] [Thread-20578] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:24:35.885 [DEBUG] [Thread-20578] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:24:35.886 [DEBUG] [Thread-20578] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:24:35.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:24:35.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:24:35.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:24:35.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:24:35.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:24:35.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:24:35.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:24:35.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:24:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:24:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.683072 -999.00  +24.10  25.87     17   -1.90 1 1 1 1 1   887    0 25.06 -96.03 ----- 34.1 25.9 277.0 40.8 24.9 -26.7 24.9 -25.2 24.6 -25.2 24.9 -26.0
2025-11-12T18:24:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:24:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:24:35.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.683072
2025-11-12T18:24:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:24:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:24:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:24:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:24:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:24:35.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:24:10', tmtdew=31.3, humidity=11.86, cloud=0.0, wind=34.28, temperature=24.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:23:37.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:24:35.905 [DEBUG] [Thread-20578] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:24: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-11-12T18:24:35.993 [DEBUG] [Thread-20581] [transport.py] [_log()] starting thread (client mode): 0x11f13460
2025-11-12T18:24:35.994 [DEBUG] [Thread-20581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:24:36.008 [DEBUG] [Thread-20581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:24:36.008 [INFO] [Thread-20581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] client lang: <none>
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] server lang: <none>
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] kex follows: False
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] Compression: none
2025-11-12T18:24:36.016 [DEBUG] [Thread-20581] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:24:36.072 [DEBUG] [Thread-20581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:24:36.072 [DEBUG] [Thread-20581] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:24:36.072 [DEBUG] [Thread-20581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:24:36.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:24:36.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:24:36.129 [DEBUG] [Thread-20581] [transport.py] [_log()] userauth is OK
2025-11-12T18:24:36.129 [DEBUG] [Thread-20581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:24:36.130 [DEBUG] [Thread-20581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:24:36.130 [DEBUG] [Thread-20581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:24:36.130 [DEBUG] [Thread-20581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:24:36.147 [INFO] [Thread-20581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:24:36.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:24:36.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:24:37.052 [DEBUG] [Thread-20581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:24:37.052 [DEBUG] [Thread-20581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:24:37.100 [DEBUG] [Thread-20581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:24:37.100 [DEBUG] [Thread-20581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:24:37.108 [DEBUG] [Thread-20581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:24:37.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:24:37.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-11-12T18:24:37.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-11-12T18:24:37.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:24:37.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:24:37.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:24:37.140 [DEBUG] [Thread-20581] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:24:45.082 [DEBUG] [Thread-20583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:24:48.348 [DEBUG] [Thread-20584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:25:01.582 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:25:01.583 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:25:03.403 [DEBUG] [Thread-20585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:25:07.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:25:07.164 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:25: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-11-12T18:25:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 24, 42), 31.12, 11.89, 0.0, 29.31, 24.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:25:07.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:24:42
2025-11-12T18:25:07.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:25:08.081 [DEBUG] [Thread-20586] [transport.py] [_log()] starting thread (client mode): 0x17363760
2025-11-12T18:25:08.082 [DEBUG] [Thread-20586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:25:08.101 [DEBUG] [Thread-20586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:25:08.101 [INFO] [Thread-20586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] client lang: <none>
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] server lang: <none>
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] kex follows: False
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] Compression: none
2025-11-12T18:25:08.104 [DEBUG] [Thread-20586] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:25:08.112 [DEBUG] [Thread-20586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:25:08.113 [DEBUG] [Thread-20586] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:25:08.113 [DEBUG] [Thread-20586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:25:08.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:25:08.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:25:08.114 [DEBUG] [Thread-20586] [transport.py] [_log()] userauth is OK
2025-11-12T18:25:08.115 [DEBUG] [Thread-20586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:25:08.115 [DEBUG] [Thread-20586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:25:08.115 [DEBUG] [Thread-20586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:25:08.115 [DEBUG] [Thread-20586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:25:08.132 [INFO] [Thread-20586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:25:08.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:25:10.665 [DEBUG] [Thread-20586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:25:10.665 [DEBUG] [Thread-20586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:25:10.665 [DEBUG] [Thread-20586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:25:10.707 [DEBUG] [Thread-20586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:25:10.707 [DEBUG] [Thread-20586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:25:10.710 [DEBUG] [Thread-20586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:25:10.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:25:10.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:25:10.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:25:10.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:25:10.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:25:10.735 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:25:10.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:25:10.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:25:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:25:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.683419 -999.00  +24.00  38.40     17   -1.80 1 1 2 1 1   887    0 24.58 -107.43 ----- 30.8 38.4 271.6 42.7 24.8 -27.0 24.8 -25.3 24.6 -25.3 24.9 -26.2
2025-11-12T18:25:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:25:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:25:10.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.683419
2025-11-12T18:25:10.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:25:10.737 [DEBUG] [Thread-20586] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:25:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:25:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:25:10.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:25:10.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:25:10.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:24:42', tmtdew=31.12, humidity=11.89, cloud=0.0, wind=29.31, temperature=24.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:24:07.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:25:10.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:25:10.830 [DEBUG] [Thread-20589] [transport.py] [_log()] starting thread (client mode): 0x17360ee0
2025-11-12T18:25:10.830 [DEBUG] [Thread-20589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:25:10.844 [DEBUG] [Thread-20589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:25:10.845 [INFO] [Thread-20589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:25:10.852 [DEBUG] [Thread-20589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] client lang: <none>
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] server lang: <none>
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] kex follows: False
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] Compression: none
2025-11-12T18:25:10.853 [DEBUG] [Thread-20589] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:25:10.910 [DEBUG] [Thread-20589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:25:10.911 [DEBUG] [Thread-20589] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:25:10.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:25:10.912 [DEBUG] [Thread-20589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:25:10.913 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:25:10.966 [DEBUG] [Thread-20589] [transport.py] [_log()] userauth is OK
2025-11-12T18:25:10.966 [DEBUG] [Thread-20589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:25:10.967 [DEBUG] [Thread-20589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:25:10.967 [DEBUG] [Thread-20589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:25:10.967 [DEBUG] [Thread-20589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:25:10.985 [INFO] [Thread-20589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:25:10.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:25:10.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:25:11.838 [DEBUG] [Thread-20589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:25:11.838 [DEBUG] [Thread-20589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:25:11.886 [DEBUG] [Thread-20589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:25:11.886 [DEBUG] [Thread-20589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:25:11.895 [DEBUG] [Thread-20589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:25:11.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:25:11.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:25:11.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-11-12T18:25:11.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:25:11.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:25:11.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:25:11.932 [DEBUG] [Thread-20589] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:25:18.438 [DEBUG] [Thread-20591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:25:33.483 [DEBUG] [Thread-20592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:25:41.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:25:41.955 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:25:41.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-11-12T18:25:42.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 25, 14), 31.07, 11.94, 0.0, 34.99, 24.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:25:42.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:25:14
2025-11-12T18:25:42.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:25:42.868 [DEBUG] [Thread-20593] [transport.py] [_log()] starting thread (client mode): 0x149a5de0
2025-11-12T18:25:42.868 [DEBUG] [Thread-20593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:25:42.888 [DEBUG] [Thread-20593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:25:42.889 [INFO] [Thread-20593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:25:42.892 [DEBUG] [Thread-20593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:25:42.892 [DEBUG] [Thread-20593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:25:42.892 [DEBUG] [Thread-20593] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:25:42.892 [DEBUG] [Thread-20593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:25:42.892 [DEBUG] [Thread-20593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:25:42.892 [DEBUG] [Thread-20593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] client lang: <none>
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] server lang: <none>
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] kex follows: False
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:25:42.893 [DEBUG] [Thread-20593] [transport.py] [_log()] Compression: none
2025-11-12T18:25:42.894 [DEBUG] [Thread-20593] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:25:42.913 [DEBUG] [Thread-20593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:25:42.914 [DEBUG] [Thread-20593] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:25:42.915 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:25:42.915 [DEBUG] [Thread-20593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:25:42.916 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:25:42.917 [DEBUG] [Thread-20593] [transport.py] [_log()] userauth is OK
2025-11-12T18:25:42.918 [DEBUG] [Thread-20593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:25:42.918 [DEBUG] [Thread-20593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:25:42.918 [DEBUG] [Thread-20593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:25:42.918 [DEBUG] [Thread-20593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:25:42.932 [INFO] [Thread-20593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:25:42.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:25:43.569 [DEBUG] [Thread-20593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:25:43.569 [DEBUG] [Thread-20593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:25:43.569 [DEBUG] [Thread-20593] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:25:43.610 [DEBUG] [Thread-20593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:25:43.610 [DEBUG] [Thread-20593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:25:43.613 [DEBUG] [Thread-20593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:25:43.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:25:43.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:25:43.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:25:43.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:25:43.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:25:43.636 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:25:43.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:25:43.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:25:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:25:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.684113 -999.00  +24.00  30.64     18   -1.70 1 1 2 1 1   887    0 24.09 -121.83 ----- 32.9 30.6 272.2 40.2 24.8 -26.8 24.8 -25.0 24.6 -25.2 24.8 -26.0
2025-11-12T18:25:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:25:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:25:43.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.684113
2025-11-12T18:25:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:25:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:25:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:25:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:25:43.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:25:43.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:25:14', tmtdew=31.07, humidity=11.94, cloud=0.0, wind=34.99, temperature=24.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:25:07.363', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:25:43.639 [DEBUG] [Thread-20593] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:25:43.722 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:25:43.736 [DEBUG] [Thread-20596] [transport.py] [_log()] starting thread (client mode): 0x149a5420
2025-11-12T18:25:43.736 [DEBUG] [Thread-20596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:25:43.750 [DEBUG] [Thread-20596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:25:43.751 [INFO] [Thread-20596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:25:43.758 [DEBUG] [Thread-20596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:25:43.758 [DEBUG] [Thread-20596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:25:43.758 [DEBUG] [Thread-20596] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:25:43.758 [DEBUG] [Thread-20596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:25:43.758 [DEBUG] [Thread-20596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] client lang: <none>
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] server lang: <none>
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] kex follows: False
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] Compression: none
2025-11-12T18:25:43.759 [DEBUG] [Thread-20596] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:25:43.818 [DEBUG] [Thread-20596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:25:43.819 [DEBUG] [Thread-20596] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:25:43.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:25:43.820 [DEBUG] [Thread-20596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:25:43.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:25:43.876 [DEBUG] [Thread-20596] [transport.py] [_log()] userauth is OK
2025-11-12T18:25:43.876 [DEBUG] [Thread-20596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:25:43.876 [DEBUG] [Thread-20596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:25:43.876 [DEBUG] [Thread-20596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:25:43.876 [DEBUG] [Thread-20596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:25:43.905 [INFO] [Thread-20596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:25:43.905 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:25:43.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:25:44.745 [DEBUG] [Thread-20596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:25:44.745 [DEBUG] [Thread-20596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:25:44.793 [DEBUG] [Thread-20596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:25:44.793 [DEBUG] [Thread-20596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:25:44.802 [DEBUG] [Thread-20596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:25:44.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:25:44.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:25:44.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-11-12T18:25:44.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:25:44.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:25:44.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:25:44.836 [DEBUG] [Thread-20596] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:25:45.125 [DEBUG] [Thread-20598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:25:48.516 [DEBUG] [Thread-20599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:26:01.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:26:01.725 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:26:03.553 [DEBUG] [Thread-20600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:26:14.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:26:14.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:26:14.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-11-12T18:26:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 25, 46), 30.96, 11.99, 0.0, 35.25, 24.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:26:15.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:25:46
2025-11-12T18:26:15.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:26:15.781 [DEBUG] [Thread-20601] [transport.py] [_log()] starting thread (client mode): 0x173bf130
2025-11-12T18:26:15.782 [DEBUG] [Thread-20601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:26:15.802 [DEBUG] [Thread-20601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:26:15.802 [INFO] [Thread-20601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:26:15.805 [DEBUG] [Thread-20601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] client lang: <none>
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] server lang: <none>
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] kex follows: False
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] Compression: none
2025-11-12T18:26:15.806 [DEBUG] [Thread-20601] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:26:15.824 [DEBUG] [Thread-20601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:26:15.824 [DEBUG] [Thread-20601] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:26:15.825 [DEBUG] [Thread-20601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:26:15.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:26:15.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:26:15.827 [DEBUG] [Thread-20601] [transport.py] [_log()] userauth is OK
2025-11-12T18:26:15.827 [DEBUG] [Thread-20601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:26:15.827 [DEBUG] [Thread-20601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:26:15.827 [DEBUG] [Thread-20601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:26:15.827 [DEBUG] [Thread-20601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:26:15.852 [INFO] [Thread-20601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:26:15.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:26:16.447 [DEBUG] [Thread-20601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:26:16.447 [DEBUG] [Thread-20601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:26:16.448 [DEBUG] [Thread-20601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:26:16.489 [DEBUG] [Thread-20601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:26:16.489 [DEBUG] [Thread-20601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:26:16.493 [DEBUG] [Thread-20601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:26:16.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:26:16.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:26:16.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:26:16.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:26:16.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:26:16.516 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:26:16.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:26:16.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:26:16.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:26:16.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.684461 -999.00  +24.00  32.78     18   -1.70 1 1 2 1 1   887    0 23.37 -128.02 ----- 28.1 32.8 276.8 42.2 24.8 -26.8 24.8 -24.8 24.6 -25.0 24.9 -26.0
2025-11-12T18:26:16.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:26:16.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:26:16.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.684461
2025-11-12T18:26:16.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:26:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:26:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:26:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:26:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:26:16.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:25:46', tmtdew=30.96, humidity=11.99, cloud=0.0, wind=35.25, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:25:37.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:26:16.519 [DEBUG] [Thread-20601] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:26:16.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:26:16.613 [DEBUG] [Thread-20604] [transport.py] [_log()] starting thread (client mode): 0x173bc940
2025-11-12T18:26:16.613 [DEBUG] [Thread-20604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:26:16.632 [DEBUG] [Thread-20604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:26:16.632 [INFO] [Thread-20604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:26:16.639 [DEBUG] [Thread-20604] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] client lang: <none>
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] server lang: <none>
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] kex follows: False
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:26:16.640 [DEBUG] [Thread-20604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:26:16.641 [DEBUG] [Thread-20604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:26:16.641 [DEBUG] [Thread-20604] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:26:16.641 [DEBUG] [Thread-20604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:26:16.641 [DEBUG] [Thread-20604] [transport.py] [_log()] Compression: none
2025-11-12T18:26:16.641 [DEBUG] [Thread-20604] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:26:16.698 [DEBUG] [Thread-20604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:26:16.699 [DEBUG] [Thread-20604] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:26:16.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:26:16.700 [DEBUG] [Thread-20604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:26:16.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:26:16.754 [DEBUG] [Thread-20604] [transport.py] [_log()] userauth is OK
2025-11-12T18:26:16.754 [DEBUG] [Thread-20604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:26:16.754 [DEBUG] [Thread-20604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:26:16.754 [DEBUG] [Thread-20604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:26:16.754 [DEBUG] [Thread-20604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:26:16.780 [INFO] [Thread-20604] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:26:16.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:26:16.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:26:17.628 [DEBUG] [Thread-20604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:26:17.628 [DEBUG] [Thread-20604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:26:17.675 [DEBUG] [Thread-20604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:26:17.676 [DEBUG] [Thread-20604] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:26:17.685 [DEBUG] [Thread-20604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:26:17.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:26: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-11-12T18:26:17.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-11-12T18:26:17.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:26:17.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:26:17.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:26:17.722 [DEBUG] [Thread-20604] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:26:18.594 [DEBUG] [Thread-20606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:26:33.642 [DEBUG] [Thread-20607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:26:45.159 [DEBUG] [Thread-20608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:26:47.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:26:47.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:26:47.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-11-12T18:26:48.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 26, 18), 30.88, 12.07, 0.0, 32.73, 24.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:26:48.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:26:18
2025-11-12T18:26:48.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:26:48.668 [DEBUG] [Thread-20609] [transport.py] [_log()] starting thread (client mode): 0x149a5630
2025-11-12T18:26:48.668 [DEBUG] [Thread-20609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:26:48.674 [DEBUG] [Thread-20610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:26:48.689 [DEBUG] [Thread-20609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:26:48.689 [INFO] [Thread-20609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] client lang: <none>
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] server lang: <none>
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] kex follows: False
2025-11-12T18:26:48.693 [DEBUG] [Thread-20609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:26:48.694 [DEBUG] [Thread-20609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:26:48.694 [DEBUG] [Thread-20609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:26:48.694 [DEBUG] [Thread-20609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:26:48.694 [DEBUG] [Thread-20609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:26:48.694 [DEBUG] [Thread-20609] [transport.py] [_log()] Compression: none
2025-11-12T18:26:48.694 [DEBUG] [Thread-20609] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:26:48.712 [DEBUG] [Thread-20609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:26:48.712 [DEBUG] [Thread-20609] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:26:48.713 [DEBUG] [Thread-20609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:26:48.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:26:48.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:26:48.716 [DEBUG] [Thread-20609] [transport.py] [_log()] userauth is OK
2025-11-12T18:26:48.716 [DEBUG] [Thread-20609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:26:48.716 [DEBUG] [Thread-20609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:26:48.716 [DEBUG] [Thread-20609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:26:48.716 [DEBUG] [Thread-20609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:26:48.739 [INFO] [Thread-20609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:26:48.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:26:49.346 [DEBUG] [Thread-20609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:26:49.347 [DEBUG] [Thread-20609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:26:49.347 [DEBUG] [Thread-20609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:26:49.388 [DEBUG] [Thread-20609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:26:49.388 [DEBUG] [Thread-20609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:26:49.391 [DEBUG] [Thread-20609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:26:49.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:26:49.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:26:49.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:26:49.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:26:49.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:26:49.415 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:26:49.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:26:49.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:26:49.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:26:49.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.684808 -999.00  +24.00  30.98     18   -1.60 1 1 2 1 1   887    0 22.75 -142.50 ----- 23.6 31.0 270.4 36.8 24.8 -26.8 24.8 -24.8 24.6 -25.1 24.8 -25.9
2025-11-12T18:26:49.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:26:49.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:26:49.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.684808
2025-11-12T18:26:49.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:26:49.417 [DEBUG] [Thread-20609] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:26:49.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:26:49.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:26:49.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:26:49.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:26:49.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:26:18', tmtdew=30.88, humidity=12.07, cloud=0.0, wind=32.73, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:26:07.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:26:49.501 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:26:49.513 [DEBUG] [Thread-20613] [transport.py] [_log()] starting thread (client mode): 0x17362590
2025-11-12T18:26:49.513 [DEBUG] [Thread-20613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:26:49.528 [DEBUG] [Thread-20613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:26:49.528 [INFO] [Thread-20613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] client lang: <none>
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] server lang: <none>
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] kex follows: False
2025-11-12T18:26:49.536 [DEBUG] [Thread-20613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:26:49.537 [DEBUG] [Thread-20613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:26:49.537 [DEBUG] [Thread-20613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:26:49.537 [DEBUG] [Thread-20613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:26:49.537 [DEBUG] [Thread-20613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:26:49.537 [DEBUG] [Thread-20613] [transport.py] [_log()] Compression: none
2025-11-12T18:26:49.537 [DEBUG] [Thread-20613] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:26:49.594 [DEBUG] [Thread-20613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:26:49.595 [DEBUG] [Thread-20613] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:26:49.595 [DEBUG] [Thread-20613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:26:49.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:26:49.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:26:49.650 [DEBUG] [Thread-20613] [transport.py] [_log()] userauth is OK
2025-11-12T18:26:49.650 [DEBUG] [Thread-20613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:26:49.650 [DEBUG] [Thread-20613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:26:49.650 [DEBUG] [Thread-20613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:26:49.650 [DEBUG] [Thread-20613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:26:49.669 [INFO] [Thread-20613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:26:49.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:26:49.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:26:50.499 [DEBUG] [Thread-20613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:26:50.500 [DEBUG] [Thread-20613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:26:50.548 [DEBUG] [Thread-20613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:26:50.548 [DEBUG] [Thread-20613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:26:50.557 [DEBUG] [Thread-20613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:26:50.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:26:50.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-11-12T18:26: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') -> 00000000
2025-11-12T18:26:50.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:26:50.584 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:26:50.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:26:50.595 [DEBUG] [Thread-20613] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:27:01.867 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:27:01.868 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:27:03.709 [DEBUG] [Thread-20615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:27:18.755 [DEBUG] [Thread-20616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:27:20.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:27:20.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:27:20.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:27:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 26, 50), 30.83, 12.61, 0.0, 28.83, 24.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:27:21.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:26:50
2025-11-12T18:27:21.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:27:21.536 [DEBUG] [Thread-20617] [transport.py] [_log()] starting thread (client mode): 0x149a6d40
2025-11-12T18:27:21.537 [DEBUG] [Thread-20617] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:27:21.557 [DEBUG] [Thread-20617] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:27:21.557 [INFO] [Thread-20617] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:27:21.560 [DEBUG] [Thread-20617] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] client lang: <none>
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] server lang: <none>
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] kex follows: False
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] Compression: none
2025-11-12T18:27:21.561 [DEBUG] [Thread-20617] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:27:21.580 [DEBUG] [Thread-20617] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:27:21.580 [DEBUG] [Thread-20617] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:27:21.581 [DEBUG] [Thread-20617] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:27:21.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:27:21.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:27:21.582 [DEBUG] [Thread-20617] [transport.py] [_log()] userauth is OK
2025-11-12T18:27:21.582 [DEBUG] [Thread-20617] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:27:21.582 [DEBUG] [Thread-20617] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:27:21.582 [DEBUG] [Thread-20617] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:27:21.582 [DEBUG] [Thread-20617] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:27:21.593 [INFO] [Thread-20617] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:27:21.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:27:22.223 [DEBUG] [Thread-20617] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:27:22.224 [DEBUG] [Thread-20617] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:27:22.224 [DEBUG] [Thread-20617] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:27:22.264 [DEBUG] [Thread-20617] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:27:22.265 [DEBUG] [Thread-20617] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:27:22.268 [DEBUG] [Thread-20617] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:27:22.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:27:22.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:27:22.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:27:22.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:27:22.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:27:22.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:27:22.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:27:22.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:27:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:27:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.685155 -999.00  +24.00  34.78     18   -1.50 1 1 2 1 1   887    0 22.98 -155.03 ----- 35.2 34.8 275.6 45.9 24.7 -27.0 24.7 -24.9 24.6 -24.9 24.9 -26.0
2025-11-12T18:27:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:27:22.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:27:22.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.685155
2025-11-12T18:27:22.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:27:22.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:26:50', tmtdew=30.83, humidity=12.61, cloud=0.0, wind=28.83, temperature=24.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:26:37.392', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:27:22.293 [DEBUG] [Thread-20617] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:27:22.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:27:22.389 [DEBUG] [Thread-20620] [transport.py] [_log()] starting thread (client mode): 0x14956dd0
2025-11-12T18:27:22.389 [DEBUG] [Thread-20620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:27:22.407 [DEBUG] [Thread-20620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:27:22.408 [INFO] [Thread-20620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:27:22.416 [DEBUG] [Thread-20620] [transport.py] [_log()] client lang: <none>
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] server lang: <none>
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] kex follows: False
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] Compression: none
2025-11-12T18:27:22.417 [DEBUG] [Thread-20620] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:27:22.474 [DEBUG] [Thread-20620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:27:22.474 [DEBUG] [Thread-20620] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:27:22.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:27:22.475 [DEBUG] [Thread-20620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:27:22.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:27:22.529 [DEBUG] [Thread-20620] [transport.py] [_log()] userauth is OK
2025-11-12T18:27:22.530 [DEBUG] [Thread-20620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:27:22.530 [DEBUG] [Thread-20620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:27:22.530 [DEBUG] [Thread-20620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:27:22.530 [DEBUG] [Thread-20620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:27:22.549 [INFO] [Thread-20620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:27:22.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:27:22.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:27:23.428 [DEBUG] [Thread-20620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:27:23.428 [DEBUG] [Thread-20620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:27:23.476 [DEBUG] [Thread-20620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:27:23.476 [DEBUG] [Thread-20620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:27:23.484 [DEBUG] [Thread-20620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:27:23.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:27:23.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-11-12T18:27:23.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-11-12T18:27:23.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:27:23.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:27:23.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:27:23.516 [DEBUG] [Thread-20620] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:27:33.793 [DEBUG] [Thread-20622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:27:45.196 [DEBUG] [Thread-20623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:27:48.854 [DEBUG] [Thread-20624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:27:53.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:27:53.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:27:53.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-11-12T18:27:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 27, 22), 30.78, 12.64, 0.0, 27.05, 24.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:27:54.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:27:22
2025-11-12T18:27:54.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:27:54.477 [DEBUG] [Thread-20625] [transport.py] [_log()] starting thread (client mode): 0x149a7370
2025-11-12T18:27:54.477 [DEBUG] [Thread-20625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:27:54.498 [DEBUG] [Thread-20625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:27:54.498 [INFO] [Thread-20625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:27:54.500 [DEBUG] [Thread-20625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:27:54.500 [DEBUG] [Thread-20625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:27:54.500 [DEBUG] [Thread-20625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:27:54.500 [DEBUG] [Thread-20625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:27:54.500 [DEBUG] [Thread-20625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] client lang: <none>
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] server lang: <none>
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] kex follows: False
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] Compression: none
2025-11-12T18:27:54.501 [DEBUG] [Thread-20625] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:27:54.519 [DEBUG] [Thread-20625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:27:54.519 [DEBUG] [Thread-20625] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:27:54.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:27:54.520 [DEBUG] [Thread-20625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:27:54.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:27:54.522 [DEBUG] [Thread-20625] [transport.py] [_log()] userauth is OK
2025-11-12T18:27:54.522 [DEBUG] [Thread-20625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:27:54.522 [DEBUG] [Thread-20625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:27:54.522 [DEBUG] [Thread-20625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:27:54.522 [DEBUG] [Thread-20625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:27:54.545 [INFO] [Thread-20625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:27:54.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:27:55.182 [DEBUG] [Thread-20625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:27:55.182 [DEBUG] [Thread-20625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:27:55.182 [DEBUG] [Thread-20625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:27:55.223 [DEBUG] [Thread-20625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:27:55.224 [DEBUG] [Thread-20625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:27:55.227 [DEBUG] [Thread-20625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:27:55.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:27:55.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:27:55.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:27:55.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:27:55.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:27:55.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:27:55.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:27:55.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:27:55.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:27:55.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.685503 -999.00  +24.00  30.48     18   -1.50 1 1 2 1 1   887    0 22.21 -168.47 ----- 24.4 30.5 272.2 38.7 24.7 -26.5 24.7 -24.6 24.6 -25.0 24.8 -25.7
2025-11-12T18:27:55.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:27:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:27:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.685503
2025-11-12T18:27:55.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:27:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:27:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:27:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:27:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:27:55.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:27:22', tmtdew=30.78, humidity=12.64, cloud=0.0, wind=27.05, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:27:07.459', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:27:55.249 [DEBUG] [Thread-20625] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:27:55.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:27:55.345 [DEBUG] [Thread-20628] [transport.py] [_log()] starting thread (client mode): 0x173621d0
2025-11-12T18:27:55.346 [DEBUG] [Thread-20628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:27:55.361 [DEBUG] [Thread-20628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:27:55.361 [INFO] [Thread-20628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:27:55.368 [DEBUG] [Thread-20628] [transport.py] [_log()] client lang: <none>
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] server lang: <none>
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] kex follows: False
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] Compression: none
2025-11-12T18:27:55.369 [DEBUG] [Thread-20628] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:27:55.423 [DEBUG] [Thread-20628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:27:55.424 [DEBUG] [Thread-20628] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:27:55.424 [DEBUG] [Thread-20628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:27:55.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:27:55.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:27:55.481 [DEBUG] [Thread-20628] [transport.py] [_log()] userauth is OK
2025-11-12T18:27:55.481 [DEBUG] [Thread-20628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:27:55.481 [DEBUG] [Thread-20628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:27:55.481 [DEBUG] [Thread-20628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:27:55.481 [DEBUG] [Thread-20628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:27:55.495 [INFO] [Thread-20628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:27:55.495 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:27:55.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:27:56.324 [DEBUG] [Thread-20628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:27:56.324 [DEBUG] [Thread-20628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:27:56.374 [DEBUG] [Thread-20628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:27:56.374 [DEBUG] [Thread-20628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:27:56.382 [DEBUG] [Thread-20628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:27:56.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:27:56.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:27:56.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:27:56.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:27:56.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:27:56.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:27:56.414 [DEBUG] [Thread-20628] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:28:02.010 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:28:02.011 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:28:03.881 [DEBUG] [Thread-20630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:28:18.940 [DEBUG] [Thread-20631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:28:26.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:28:26.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:28:26.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-11-12T18:28:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 27, 54), 30.68, 12.71, 0.0, 26.71, 24.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:28:27.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:27:54
2025-11-12T18:28:27.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:28:27.418 [DEBUG] [Thread-20632] [transport.py] [_log()] starting thread (client mode): 0x11f13850
2025-11-12T18:28:27.418 [DEBUG] [Thread-20632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:28:27.440 [DEBUG] [Thread-20632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:28:27.440 [INFO] [Thread-20632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] client lang: <none>
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] server lang: <none>
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] kex follows: False
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] Compression: none
2025-11-12T18:28:27.443 [DEBUG] [Thread-20632] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:28:27.457 [DEBUG] [Thread-20632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:28:27.458 [DEBUG] [Thread-20632] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:28:27.458 [DEBUG] [Thread-20632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:28:27.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:28:27.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:28:27.458 [DEBUG] [Thread-20632] [transport.py] [_log()] userauth is OK
2025-11-12T18:28:27.458 [DEBUG] [Thread-20632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:28:27.458 [DEBUG] [Thread-20632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:28:27.458 [DEBUG] [Thread-20632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:28:27.458 [DEBUG] [Thread-20632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:28:27.467 [INFO] [Thread-20632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:28:27.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:28:28.098 [DEBUG] [Thread-20632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:28:28.098 [DEBUG] [Thread-20632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:28:28.098 [DEBUG] [Thread-20632] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:28:28.139 [DEBUG] [Thread-20632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:28:28.139 [DEBUG] [Thread-20632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:28:28.141 [DEBUG] [Thread-20632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:28:28.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:28:28.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:28:28.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:28:28.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:28:28.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:28:28.157 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:28:28.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:28:28.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:28:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:28:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.685850 -999.00  +24.10  22.77     18   -1.50 1 1 1 1 1   887    0 21.36 -180.19 ----- 26.5 22.8 267.8 29.9 24.8 -26.5 24.7 -24.6 24.5 -24.2 24.8 -25.6
2025-11-12T18:28:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:28:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:28:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.685850
2025-11-12T18:28:28.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:28:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:28:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:28:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:28:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:28:28.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:27:54', tmtdew=30.68, humidity=12.71, cloud=0.0, wind=26.71, temperature=24.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:27:37.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:28:28.158 [DEBUG] [Thread-20632] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:28:28.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:28:28.245 [DEBUG] [Thread-20635] [transport.py] [_log()] starting thread (client mode): 0x11f10250
2025-11-12T18:28:28.245 [DEBUG] [Thread-20635] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:28:28.260 [DEBUG] [Thread-20635] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:28:28.260 [INFO] [Thread-20635] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] client lang: <none>
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] server lang: <none>
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] kex follows: False
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:28:28.268 [DEBUG] [Thread-20635] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:28:28.269 [DEBUG] [Thread-20635] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:28:28.269 [DEBUG] [Thread-20635] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:28:28.269 [DEBUG] [Thread-20635] [transport.py] [_log()] Compression: none
2025-11-12T18:28:28.269 [DEBUG] [Thread-20635] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:28:28.323 [DEBUG] [Thread-20635] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:28:28.323 [DEBUG] [Thread-20635] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:28:28.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:28:28.324 [DEBUG] [Thread-20635] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:28:28.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:28:28.381 [DEBUG] [Thread-20635] [transport.py] [_log()] userauth is OK
2025-11-12T18:28:28.381 [DEBUG] [Thread-20635] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:28:28.381 [DEBUG] [Thread-20635] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:28:28.381 [DEBUG] [Thread-20635] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:28:28.381 [DEBUG] [Thread-20635] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:28:28.396 [INFO] [Thread-20635] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:28: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-11-12T18:28:28.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:28:29.274 [DEBUG] [Thread-20635] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:28:29.274 [DEBUG] [Thread-20635] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:28:29.322 [DEBUG] [Thread-20635] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:28:29.322 [DEBUG] [Thread-20635] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:28:29.330 [DEBUG] [Thread-20635] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:28:29.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:28:29.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:28:29.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-11-12T18:28:29.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:28:29.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:28:29.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:28:29.362 [DEBUG] [Thread-20635] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:28:33.973 [DEBUG] [Thread-20637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:28:45.239 [DEBUG] [Thread-20638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:28:49.029 [DEBUG] [Thread-20639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:28:59.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:28:59.384 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:28:59.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-11-12T18:29:00.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 28, 26), 30.65, 12.72, 0.0, 26.55, 24.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:29:00.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:28:26
2025-11-12T18:29:00.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:29:00.384 [DEBUG] [Thread-20640] [transport.py] [_log()] starting thread (client mode): 0x173634f0
2025-11-12T18:29:00.384 [DEBUG] [Thread-20640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:29:00.408 [DEBUG] [Thread-20640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:29:00.408 [INFO] [Thread-20640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] client lang: <none>
2025-11-12T18:29:00.410 [DEBUG] [Thread-20640] [transport.py] [_log()] server lang: <none>
2025-11-12T18:29:00.411 [DEBUG] [Thread-20640] [transport.py] [_log()] kex follows: False
2025-11-12T18:29:00.411 [DEBUG] [Thread-20640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:29:00.411 [DEBUG] [Thread-20640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:29:00.411 [DEBUG] [Thread-20640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:29:00.411 [DEBUG] [Thread-20640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:29:00.411 [DEBUG] [Thread-20640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:29:00.411 [DEBUG] [Thread-20640] [transport.py] [_log()] Compression: none
2025-11-12T18:29:00.411 [DEBUG] [Thread-20640] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:29:00.421 [DEBUG] [Thread-20640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:29:00.421 [DEBUG] [Thread-20640] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:29:00.422 [DEBUG] [Thread-20640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:29:00.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:29:00.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:29:00.422 [DEBUG] [Thread-20640] [transport.py] [_log()] userauth is OK
2025-11-12T18:29:00.422 [DEBUG] [Thread-20640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:29:00.423 [DEBUG] [Thread-20640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:29:00.423 [DEBUG] [Thread-20640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:29:00.423 [DEBUG] [Thread-20640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:29:00.435 [INFO] [Thread-20640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:29:00.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:29:01.049 [DEBUG] [Thread-20640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:29:01.049 [DEBUG] [Thread-20640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:29:01.049 [DEBUG] [Thread-20640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:29:01.090 [DEBUG] [Thread-20640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:29:01.090 [DEBUG] [Thread-20640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:29:01.092 [DEBUG] [Thread-20640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:29:01.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:29:01.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:29:01.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:29:01.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:29:01.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:29:01.104 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:29:01.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.686197 -999.00  +24.10  22.08     18   -1.50 1 1 1 1 1   887    0 21.29 -198.25 ----- 21.2 22.1 276.4 31.3 24.8 -26.4 24.7 -24.6 24.6 -24.4 24.8 -25.7
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.686197
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:29:01.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:28:26', tmtdew=30.65, humidity=12.72, cloud=0.0, wind=26.55, temperature=24.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:28:07.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:29:01.105 [DEBUG] [Thread-20640] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:29:01.184 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:29:01.195 [DEBUG] [Thread-20643] [transport.py] [_log()] starting thread (client mode): 0x149a5b70
2025-11-12T18:29:01.196 [DEBUG] [Thread-20643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:29:01.214 [DEBUG] [Thread-20643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:29:01.214 [INFO] [Thread-20643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] client lang: <none>
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] server lang: <none>
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] kex follows: False
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:29:01.222 [DEBUG] [Thread-20643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:29:01.223 [DEBUG] [Thread-20643] [transport.py] [_log()] Compression: none
2025-11-12T18:29:01.223 [DEBUG] [Thread-20643] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:29:01.279 [DEBUG] [Thread-20643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:29:01.280 [DEBUG] [Thread-20643] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:29:01.280 [DEBUG] [Thread-20643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:29:01.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:29:01.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:29:01.337 [DEBUG] [Thread-20643] [transport.py] [_log()] userauth is OK
2025-11-12T18:29:01.337 [DEBUG] [Thread-20643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:29:01.337 [DEBUG] [Thread-20643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:29:01.338 [DEBUG] [Thread-20643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:29:01.338 [DEBUG] [Thread-20643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:29:01.363 [INFO] [Thread-20643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:29:01.363 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:29:01.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:29:02.153 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:29:02.154 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:29:02.253 [DEBUG] [Thread-20643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:29:02.253 [DEBUG] [Thread-20643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:29:02.301 [DEBUG] [Thread-20643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:29:02.302 [DEBUG] [Thread-20643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:29:02.311 [DEBUG] [Thread-20643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:29:02.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:29:02.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-11-12T18:29:02.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-11-12T18:29:02.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:29:02.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:29:02.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:29:02.346 [DEBUG] [Thread-20643] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:29:04.065 [DEBUG] [Thread-20645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:29:19.102 [DEBUG] [Thread-20646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:29:32.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:29:32.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:29:32.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-11-12T18:29:33.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 28, 58), 30.47, 12.76, 0.0, 30.26, 24.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:29:33.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:28:58
2025-11-12T18:29:33.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:29:33.363 [DEBUG] [Thread-20647] [transport.py] [_log()] starting thread (client mode): 0x11f110f0
2025-11-12T18:29:33.363 [DEBUG] [Thread-20647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:29:33.382 [DEBUG] [Thread-20647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:29:33.382 [INFO] [Thread-20647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] client lang: <none>
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] server lang: <none>
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] kex follows: False
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] Compression: none
2025-11-12T18:29:33.386 [DEBUG] [Thread-20647] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:29:33.402 [DEBUG] [Thread-20647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:29:33.402 [DEBUG] [Thread-20647] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:29:33.402 [DEBUG] [Thread-20647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:29:33.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:29:33.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:29:33.403 [DEBUG] [Thread-20647] [transport.py] [_log()] userauth is OK
2025-11-12T18:29:33.403 [DEBUG] [Thread-20647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:29:33.403 [DEBUG] [Thread-20647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:29:33.403 [DEBUG] [Thread-20647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:29:33.403 [DEBUG] [Thread-20647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:29:33.431 [INFO] [Thread-20647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:29:33.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:29:34.067 [DEBUG] [Thread-20647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:29:34.067 [DEBUG] [Thread-20647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:29:34.067 [DEBUG] [Thread-20647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:29:34.108 [DEBUG] [Thread-20647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:29:34.108 [DEBUG] [Thread-20647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:29:34.110 [DEBUG] [Thread-20647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:29:34.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:29:34.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:29:34.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:29:34.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:29:34.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:29:34.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:29:34.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:29:34.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:29:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:29:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.686544 -999.00  +24.00  28.32     18   -1.40 1 1 1 1 1   887    0 21.00 -199.32 ----- 18.6 28.3 275.6 33.8 24.7 -26.3 24.8 -24.4 24.5 -24.3 24.8 -25.6
2025-11-12T18:29:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:29:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:29:34.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.686544
2025-11-12T18:29:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:29:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:29:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:29:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:29:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:29:34.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:28:58', tmtdew=30.47, humidity=12.76, cloud=0.0, wind=30.26, temperature=24.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:28:37.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:29:34.130 [DEBUG] [Thread-20647] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:29:34.140 [DEBUG] [Thread-20650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:29:34.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:29:34.216 [DEBUG] [Thread-20651] [transport.py] [_log()] starting thread (client mode): 0x149a6cb0
2025-11-12T18:29:34.216 [DEBUG] [Thread-20651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:29:34.231 [DEBUG] [Thread-20651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:29:34.231 [INFO] [Thread-20651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:29:34.238 [DEBUG] [Thread-20651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:29:34.238 [DEBUG] [Thread-20651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:29:34.238 [DEBUG] [Thread-20651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] client lang: <none>
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] server lang: <none>
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] kex follows: False
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] Compression: none
2025-11-12T18:29:34.239 [DEBUG] [Thread-20651] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:29:34.295 [DEBUG] [Thread-20651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:29:34.296 [DEBUG] [Thread-20651] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:29:34.296 [DEBUG] [Thread-20651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:29:34.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:29:34.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:29:34.353 [DEBUG] [Thread-20651] [transport.py] [_log()] userauth is OK
2025-11-12T18:29:34.353 [DEBUG] [Thread-20651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:29:34.353 [DEBUG] [Thread-20651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:29:34.354 [DEBUG] [Thread-20651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:29:34.354 [DEBUG] [Thread-20651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:29:34.373 [INFO] [Thread-20651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:29:34.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:29:34.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:29:35.198 [DEBUG] [Thread-20651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:29:35.198 [DEBUG] [Thread-20651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:29:35.246 [DEBUG] [Thread-20651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:29:35.246 [DEBUG] [Thread-20651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:29:35.255 [DEBUG] [Thread-20651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:29:35.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:29:35.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-11-12T18:29:35.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-11-12T18:29:35.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:29:35.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:29:35.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:29:35.292 [DEBUG] [Thread-20651] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:29:45.273 [DEBUG] [Thread-20653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:29:49.180 [DEBUG] [Thread-20654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:30:02.294 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:30:02.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:30:04.216 [DEBUG] [Thread-20655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:30:05.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:30:05.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:30:05.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-11-12T18:30:05.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 29, 30), 30.47, 12.76, 0.0, 30.63, 24.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:30:05.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:29:30
2025-11-12T18:30:06.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:30:06.269 [DEBUG] [Thread-20656] [transport.py] [_log()] starting thread (client mode): 0x17363010
2025-11-12T18:30:06.269 [DEBUG] [Thread-20656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:30:06.290 [DEBUG] [Thread-20656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:30:06.290 [INFO] [Thread-20656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] client lang: <none>
2025-11-12T18:30:06.293 [DEBUG] [Thread-20656] [transport.py] [_log()] server lang: <none>
2025-11-12T18:30:06.294 [DEBUG] [Thread-20656] [transport.py] [_log()] kex follows: False
2025-11-12T18:30:06.294 [DEBUG] [Thread-20656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:30:06.294 [DEBUG] [Thread-20656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:30:06.294 [DEBUG] [Thread-20656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:30:06.294 [DEBUG] [Thread-20656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:30:06.294 [DEBUG] [Thread-20656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:30:06.294 [DEBUG] [Thread-20656] [transport.py] [_log()] Compression: none
2025-11-12T18:30:06.294 [DEBUG] [Thread-20656] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:30:06.311 [DEBUG] [Thread-20656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:30:06.311 [DEBUG] [Thread-20656] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:30:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:30:06.311 [DEBUG] [Thread-20656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:30:06.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:30:06.311 [DEBUG] [Thread-20656] [transport.py] [_log()] userauth is OK
2025-11-12T18:30:06.312 [DEBUG] [Thread-20656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:30:06.312 [DEBUG] [Thread-20656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:30:06.312 [DEBUG] [Thread-20656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:30:06.312 [DEBUG] [Thread-20656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:30:06.322 [INFO] [Thread-20656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:30:06.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:30:08.055 [DEBUG] [Thread-20656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:30:08.056 [DEBUG] [Thread-20656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:30:08.056 [DEBUG] [Thread-20656] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:30:08.097 [DEBUG] [Thread-20656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:30:08.097 [DEBUG] [Thread-20656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:30:08.101 [DEBUG] [Thread-20656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:30:08.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:30:08.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:30:08.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:30:08.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:30:08.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:30:08.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:30:08.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:30:08.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.686891 -999.00  +24.00  22.19     18   -1.50 1 1 1 1 1   887    0 21.72 -193.46 ----- 19.3 22.2 274.8 30.1 24.7 -26.4 24.7 -24.3 24.5 -24.4 24.8 -25.6
2025-11-12T18:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.686891
2025-11-12T18:30:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:30:08.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:30:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:29:30', tmtdew=30.47, humidity=12.76, cloud=0.0, wind=30.63, temperature=24.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:29:07.382', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:30:08.121 [DEBUG] [Thread-20656] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:30:08.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:30:08.211 [DEBUG] [Thread-20659] [transport.py] [_log()] starting thread (client mode): 0x11f11e70
2025-11-12T18:30:08.211 [DEBUG] [Thread-20659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:30:08.226 [DEBUG] [Thread-20659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:30:08.226 [INFO] [Thread-20659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:30:08.233 [DEBUG] [Thread-20659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] client lang: <none>
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] server lang: <none>
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] kex follows: False
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:30:08.234 [DEBUG] [Thread-20659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:30:08.235 [DEBUG] [Thread-20659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:30:08.235 [DEBUG] [Thread-20659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:30:08.235 [DEBUG] [Thread-20659] [transport.py] [_log()] Compression: none
2025-11-12T18:30:08.235 [DEBUG] [Thread-20659] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:30:08.298 [DEBUG] [Thread-20659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:30:08.299 [DEBUG] [Thread-20659] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:30:08.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:30:08.300 [DEBUG] [Thread-20659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:30:08.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:30:08.362 [DEBUG] [Thread-20659] [transport.py] [_log()] userauth is OK
2025-11-12T18:30:08.362 [DEBUG] [Thread-20659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:30:08.362 [DEBUG] [Thread-20659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:30:08.362 [DEBUG] [Thread-20659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:30:08.362 [DEBUG] [Thread-20659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:30:08.381 [INFO] [Thread-20659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:30:08.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:30:08.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:30:09.239 [DEBUG] [Thread-20659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:30:09.239 [DEBUG] [Thread-20659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:30:09.288 [DEBUG] [Thread-20659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:30:09.288 [DEBUG] [Thread-20659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:30:09.297 [DEBUG] [Thread-20659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:30:09.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:30:09.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-11-12T18:30:09.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-11-12T18:30:09.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:30:09.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:30:09.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:30:09.333 [DEBUG] [Thread-20659] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:30:19.253 [DEBUG] [Thread-20661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:30:34.304 [DEBUG] [Thread-20662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:30:39.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:30:39.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:30:39.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-11-12T18:30:40.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 30, 35), 30.42, 12.76, 0.0, 28.57, 24.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:30:40.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:30:35
2025-11-12T18:30:40.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:30:40.285 [DEBUG] [Thread-20663] [transport.py] [_log()] starting thread (client mode): 0x11f13f40
2025-11-12T18:30:40.285 [DEBUG] [Thread-20663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:30:40.304 [DEBUG] [Thread-20663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:30:40.304 [INFO] [Thread-20663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:30:40.307 [DEBUG] [Thread-20663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:30:40.307 [DEBUG] [Thread-20663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:30:40.307 [DEBUG] [Thread-20663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] client lang: <none>
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] server lang: <none>
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] kex follows: False
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] Compression: none
2025-11-12T18:30:40.308 [DEBUG] [Thread-20663] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:30:40.328 [DEBUG] [Thread-20663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:30:40.329 [DEBUG] [Thread-20663] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:30:40.330 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:30:40.331 [DEBUG] [Thread-20663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:30:40.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:30:40.333 [DEBUG] [Thread-20663] [transport.py] [_log()] userauth is OK
2025-11-12T18:30:40.333 [DEBUG] [Thread-20663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:30:40.334 [DEBUG] [Thread-20663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:30:40.334 [DEBUG] [Thread-20663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:30:40.334 [DEBUG] [Thread-20663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:30:40.355 [INFO] [Thread-20663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:30:40.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:30:41.017 [DEBUG] [Thread-20663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:30:41.017 [DEBUG] [Thread-20663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:30:41.018 [DEBUG] [Thread-20663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:30:41.059 [DEBUG] [Thread-20663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:30:41.059 [DEBUG] [Thread-20663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:30:41.062 [DEBUG] [Thread-20663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:30:41.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:30:41.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:30:41.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:30:41.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:30:41.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:30:41.087 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:30:41.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:30:41.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.687585 -999.00  +24.00  29.12     18   -1.50 1 1 1 1 1   887    0 21.27 -182.71 ----- 20.3 29.1 271.6 38.2 24.7 -26.3 24.7 -24.2 24.4 -24.1 24.7 -25.3
2025-11-12T18:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:30:41.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.687585
2025-11-12T18:30:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:30:41.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:30:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:30:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:30:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:30:41.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:30:35', tmtdew=30.42, humidity=12.76, cloud=0.0, wind=28.57, temperature=24.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:30:07.344', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:30:41.090 [DEBUG] [Thread-20663] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:30:41.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:30:41.185 [DEBUG] [Thread-20666] [transport.py] [_log()] starting thread (client mode): 0x173eaad0
2025-11-12T18:30:41.185 [DEBUG] [Thread-20666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:30:41.200 [DEBUG] [Thread-20666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:30:41.200 [INFO] [Thread-20666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:30:41.208 [DEBUG] [Thread-20666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:30:41.208 [DEBUG] [Thread-20666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:30:41.208 [DEBUG] [Thread-20666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:30:41.208 [DEBUG] [Thread-20666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] client lang: <none>
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] server lang: <none>
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] kex follows: False
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:30:41.209 [DEBUG] [Thread-20666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:30:41.210 [DEBUG] [Thread-20666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:30:41.210 [DEBUG] [Thread-20666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:30:41.210 [DEBUG] [Thread-20666] [transport.py] [_log()] Compression: none
2025-11-12T18:30:41.210 [DEBUG] [Thread-20666] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:30:41.269 [DEBUG] [Thread-20666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:30:41.270 [DEBUG] [Thread-20666] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:30:41.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:30:41.271 [DEBUG] [Thread-20666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:30:41.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:30:41.325 [DEBUG] [Thread-20666] [transport.py] [_log()] userauth is OK
2025-11-12T18:30:41.326 [DEBUG] [Thread-20666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:30:41.326 [DEBUG] [Thread-20666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:30:41.326 [DEBUG] [Thread-20666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:30:41.326 [DEBUG] [Thread-20666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:30:41.344 [INFO] [Thread-20666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:30:41.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:30:41.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:30:42.175 [DEBUG] [Thread-20666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:30:42.176 [DEBUG] [Thread-20666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:30:42.224 [DEBUG] [Thread-20666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:30:42.224 [DEBUG] [Thread-20666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:30:42.233 [DEBUG] [Thread-20666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:30:42.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:30:42.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-11-12T18:30:42.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-11-12T18:30:42.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:30:42.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:30:42.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:30:42.269 [DEBUG] [Thread-20666] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:30:45.315 [DEBUG] [Thread-20668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:30:49.340 [DEBUG] [Thread-20669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:31:02.435 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:31:02.436 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:31:04.389 [DEBUG] [Thread-20670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:31:12.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:31:12.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:31:12.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:31:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 31, 7), 30.41, 12.76, 0.0, 29.57, 24.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:31:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:31:07
2025-11-12T18:31:13.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:31:13.223 [DEBUG] [Thread-20671] [transport.py] [_log()] starting thread (client mode): 0x149a5a20
2025-11-12T18:31:13.223 [DEBUG] [Thread-20671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:31:13.240 [DEBUG] [Thread-20671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:31:13.241 [INFO] [Thread-20671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:31:13.242 [DEBUG] [Thread-20671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:31:13.242 [DEBUG] [Thread-20671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:31:13.242 [DEBUG] [Thread-20671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:31:13.242 [DEBUG] [Thread-20671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:31:13.242 [DEBUG] [Thread-20671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:31:13.242 [DEBUG] [Thread-20671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:31:13.242 [DEBUG] [Thread-20671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] client lang: <none>
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] server lang: <none>
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] kex follows: False
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] Compression: none
2025-11-12T18:31:13.243 [DEBUG] [Thread-20671] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:31:13.256 [DEBUG] [Thread-20671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:31:13.256 [DEBUG] [Thread-20671] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:31:13.257 [DEBUG] [Thread-20671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:31:13.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:31:13.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:31:13.258 [DEBUG] [Thread-20671] [transport.py] [_log()] userauth is OK
2025-11-12T18:31:13.259 [DEBUG] [Thread-20671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:31:13.259 [DEBUG] [Thread-20671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:31:13.259 [DEBUG] [Thread-20671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:31:13.259 [DEBUG] [Thread-20671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:31:13.277 [INFO] [Thread-20671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:31:13.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:31:14.082 [DEBUG] [Thread-20671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:31:14.083 [DEBUG] [Thread-20671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:31:14.083 [DEBUG] [Thread-20671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:31:14.124 [DEBUG] [Thread-20671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:31:14.124 [DEBUG] [Thread-20671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:31:14.128 [DEBUG] [Thread-20671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:31:14.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:31:14.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:31:14.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:31:14.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:31:14.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:31:14.150 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:31:14.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:31:14.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:31:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:31:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.687933 -999.00  +24.00  21.55     18   -1.40 1 1 1 1 1   887    0 21.48 -173.87 ----- 20.4 21.6 274.3 28.3 24.7 -26.0 24.6 -24.0 24.5 -23.8 24.7 -25.1
2025-11-12T18:31:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:31:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:31:14.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.687933
2025-11-12T18:31:14.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:31:14.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:31:14.153 [DEBUG] [Thread-20671] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:31:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:31:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:31:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:31:14.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:31:07', tmtdew=30.41, humidity=12.76, cloud=0.0, wind=29.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:30:37.411', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:31:14.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:31:14.244 [DEBUG] [Thread-20674] [transport.py] [_log()] starting thread (client mode): 0x173ea5f0
2025-11-12T18:31:14.244 [DEBUG] [Thread-20674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:31:14.259 [DEBUG] [Thread-20674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:31:14.259 [INFO] [Thread-20674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:31:14.266 [DEBUG] [Thread-20674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] client lang: <none>
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] server lang: <none>
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] kex follows: False
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] Compression: none
2025-11-12T18:31:14.267 [DEBUG] [Thread-20674] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:31:14.325 [DEBUG] [Thread-20674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:31:14.326 [DEBUG] [Thread-20674] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:31:14.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:31:14.327 [DEBUG] [Thread-20674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:31:14.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:31:14.381 [DEBUG] [Thread-20674] [transport.py] [_log()] userauth is OK
2025-11-12T18:31:14.381 [DEBUG] [Thread-20674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:31:14.381 [DEBUG] [Thread-20674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:31:14.381 [DEBUG] [Thread-20674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:31:14.381 [DEBUG] [Thread-20674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:31:14.400 [INFO] [Thread-20674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:31:14.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:31:14.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:31:15.251 [DEBUG] [Thread-20674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:31:15.251 [DEBUG] [Thread-20674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:31:15.299 [DEBUG] [Thread-20674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:31:15.300 [DEBUG] [Thread-20674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:31:15.308 [DEBUG] [Thread-20674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:31:15.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:31:15.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:31:15.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-11-12T18:31:15.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:31:15.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:31:15.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:31:15.345 [DEBUG] [Thread-20674] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:31:19.420 [DEBUG] [Thread-20676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:31:34.476 [DEBUG] [Thread-20677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:31:45.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:31:45.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:31:45.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-11-12T18:31:45.376 [DEBUG] [Thread-20678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:31:45.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 31, 39), 30.25, 12.81, 0.0, 34.16, 24.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:31:45.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:31:39
2025-11-12T18:31:46.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:31:46.261 [DEBUG] [Thread-20679] [transport.py] [_log()] starting thread (client mode): 0x173ea980
2025-11-12T18:31:46.261 [DEBUG] [Thread-20679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:31:46.281 [DEBUG] [Thread-20679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:31:46.281 [INFO] [Thread-20679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:31:46.284 [DEBUG] [Thread-20679] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:31:46.284 [DEBUG] [Thread-20679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:31:46.284 [DEBUG] [Thread-20679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] client lang: <none>
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] server lang: <none>
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] kex follows: False
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] Compression: none
2025-11-12T18:31:46.285 [DEBUG] [Thread-20679] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:31:46.302 [DEBUG] [Thread-20679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:31:46.303 [DEBUG] [Thread-20679] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:31:46.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:31:46.304 [DEBUG] [Thread-20679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:31:46.305 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:31:46.306 [DEBUG] [Thread-20679] [transport.py] [_log()] userauth is OK
2025-11-12T18:31:46.307 [DEBUG] [Thread-20679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:31:46.307 [DEBUG] [Thread-20679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:31:46.307 [DEBUG] [Thread-20679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:31:46.307 [DEBUG] [Thread-20679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:31:46.332 [INFO] [Thread-20679] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:31:46.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:31:46.982 [DEBUG] [Thread-20679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:31:46.982 [DEBUG] [Thread-20679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:31:46.983 [DEBUG] [Thread-20679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:31:47.023 [DEBUG] [Thread-20679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:31:47.024 [DEBUG] [Thread-20679] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:31:47.027 [DEBUG] [Thread-20679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:31:47.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:31:47.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:31:47.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:31:47.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:31:47.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:31:47.052 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:31:47.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:31:47.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:31:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:31:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.688280 -999.00  +23.90  21.74     18   -1.40 1 1 1 1 1   887    0 21.50 -177.43 ----- 30.0 21.7 273.2 38.5 24.6 -26.0 24.6 -23.9 24.5 -23.8 24.7 -25.1
2025-11-12T18:31:47.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:31:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:31:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.688280
2025-11-12T18:31:47.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:31:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:31:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:31:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:31:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:31:47.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:31:39', tmtdew=30.25, humidity=12.81, cloud=0.0, wind=34.16, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:31:07.392', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:31:47.055 [DEBUG] [Thread-20679] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:31:47.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:31:47.151 [DEBUG] [Thread-20682] [transport.py] [_log()] starting thread (client mode): 0x173e8f10
2025-11-12T18:31:47.151 [DEBUG] [Thread-20682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:31:47.166 [DEBUG] [Thread-20682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:31:47.166 [INFO] [Thread-20682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:31:47.173 [DEBUG] [Thread-20682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] client lang: <none>
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] server lang: <none>
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] kex follows: False
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] Compression: none
2025-11-12T18:31:47.174 [DEBUG] [Thread-20682] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:31:47.235 [DEBUG] [Thread-20682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:31:47.236 [DEBUG] [Thread-20682] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:31:47.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:31:47.237 [DEBUG] [Thread-20682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:31:47.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:31:47.293 [DEBUG] [Thread-20682] [transport.py] [_log()] userauth is OK
2025-11-12T18:31:47.293 [DEBUG] [Thread-20682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:31:47.293 [DEBUG] [Thread-20682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:31:47.293 [DEBUG] [Thread-20682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:31:47.293 [DEBUG] [Thread-20682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:31:47.312 [INFO] [Thread-20682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:31:47.312 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:31:47.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:31:48.178 [DEBUG] [Thread-20682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:31:48.179 [DEBUG] [Thread-20682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:31:48.227 [DEBUG] [Thread-20682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:31:48.227 [DEBUG] [Thread-20682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:31:48.236 [DEBUG] [Thread-20682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:31:48.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:31:48.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-11-12T18:31:48.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-11-12T18:31:48.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:31:48.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:31:48.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:31:48.273 [DEBUG] [Thread-20682] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:31:49.516 [DEBUG] [Thread-20684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:32:02.577 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:32:02.578 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:32:04.574 [DEBUG] [Thread-20685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:32:18.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:32:18.294 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:32:18.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-11-12T18:32:18.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 32, 11), 30.19, 12.87, 0.0, 36.1, 24.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:32:18.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:32:11
2025-11-12T18:32:19.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:32:19.241 [DEBUG] [Thread-20686] [transport.py] [_log()] starting thread (client mode): 0x173621d0
2025-11-12T18:32:19.241 [DEBUG] [Thread-20686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:32:19.260 [DEBUG] [Thread-20686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:32:19.261 [INFO] [Thread-20686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:32:19.263 [DEBUG] [Thread-20686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:32:19.263 [DEBUG] [Thread-20686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] client lang: <none>
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] server lang: <none>
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] kex follows: False
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] Compression: none
2025-11-12T18:32:19.264 [DEBUG] [Thread-20686] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:32:19.280 [DEBUG] [Thread-20686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:32:19.280 [DEBUG] [Thread-20686] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:32:19.280 [DEBUG] [Thread-20686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:32:19.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:32:19.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:32:19.281 [DEBUG] [Thread-20686] [transport.py] [_log()] userauth is OK
2025-11-12T18:32:19.281 [DEBUG] [Thread-20686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:32:19.281 [DEBUG] [Thread-20686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:32:19.281 [DEBUG] [Thread-20686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:32:19.281 [DEBUG] [Thread-20686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:32:19.291 [INFO] [Thread-20686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:32:19.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:32:19.610 [DEBUG] [Thread-20688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:32:20.084 [DEBUG] [Thread-20686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:32:20.084 [DEBUG] [Thread-20686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:32:20.084 [DEBUG] [Thread-20686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:32:20.125 [DEBUG] [Thread-20686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:32:20.125 [DEBUG] [Thread-20686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:32:20.127 [DEBUG] [Thread-20686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:32:20.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:32:20.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:32:20.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:32:20.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:32:20.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:32:20.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:32:20.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.688627 -999.00  +23.90  23.83     18   -1.40 1 1 1 1 1   887    0 21.16 -173.99 ----- 31.0 23.8 276.4 39.1 24.6 -26.0 24.6 -23.9 24.4 -23.9 24.6 -25.1
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.688627
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:32:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:32:11', tmtdew=30.19, humidity=12.87, cloud=0.0, wind=36.1, temperature=24.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:31:37.373', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:32:20.145 [DEBUG] [Thread-20686] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:32:20.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:32:20.229 [DEBUG] [Thread-20690] [transport.py] [_log()] starting thread (client mode): 0x14956290
2025-11-12T18:32:20.229 [DEBUG] [Thread-20690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:32:20.244 [DEBUG] [Thread-20690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:32:20.244 [INFO] [Thread-20690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:32:20.251 [DEBUG] [Thread-20690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:32:20.251 [DEBUG] [Thread-20690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:32:20.251 [DEBUG] [Thread-20690] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:32:20.251 [DEBUG] [Thread-20690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:32:20.251 [DEBUG] [Thread-20690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] client lang: <none>
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] server lang: <none>
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] kex follows: False
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] Compression: none
2025-11-12T18:32:20.252 [DEBUG] [Thread-20690] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:32:20.307 [DEBUG] [Thread-20690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:32:20.307 [DEBUG] [Thread-20690] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:32:20.308 [DEBUG] [Thread-20690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:32:20.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:32:20.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:32:20.364 [DEBUG] [Thread-20690] [transport.py] [_log()] userauth is OK
2025-11-12T18:32:20.364 [DEBUG] [Thread-20690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:32:20.364 [DEBUG] [Thread-20690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:32:20.365 [DEBUG] [Thread-20690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:32:20.365 [DEBUG] [Thread-20690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:32:20.379 [INFO] [Thread-20690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:32:20.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:32:20.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:32:21.229 [DEBUG] [Thread-20690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:32:21.230 [DEBUG] [Thread-20690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:32:21.278 [DEBUG] [Thread-20690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:32:21.278 [DEBUG] [Thread-20690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:32:21.286 [DEBUG] [Thread-20690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:32:21.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:32:21.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-11-12T18:32: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') -> 00000000
2025-11-12T18:32:21.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:32:21.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:32:21.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:32:21.318 [DEBUG] [Thread-20690] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:32:34.644 [DEBUG] [Thread-20692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:32:45.409 [DEBUG] [Thread-20693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:32:49.697 [DEBUG] [Thread-20694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:32:51.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:32:51.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:32:51.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-11-12T18:32:52.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 32, 43), 30.17, 12.87, 0.0, 34.67, 24.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:32:52.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:32:43
2025-11-12T18:32:52.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:32:52.272 [DEBUG] [Thread-20695] [transport.py] [_log()] starting thread (client mode): 0x149050f0
2025-11-12T18:32:52.272 [DEBUG] [Thread-20695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:32:52.292 [DEBUG] [Thread-20695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:32:52.292 [INFO] [Thread-20695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:32:52.295 [DEBUG] [Thread-20695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:32:52.295 [DEBUG] [Thread-20695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] client lang: <none>
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] server lang: <none>
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] kex follows: False
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:32:52.296 [DEBUG] [Thread-20695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:32:52.298 [DEBUG] [Thread-20695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:32:52.298 [DEBUG] [Thread-20695] [transport.py] [_log()] Compression: none
2025-11-12T18:32:52.298 [DEBUG] [Thread-20695] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:32:52.316 [DEBUG] [Thread-20695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:32:52.317 [DEBUG] [Thread-20695] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:32:52.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:32:52.318 [DEBUG] [Thread-20695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:32:52.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:32:52.320 [DEBUG] [Thread-20695] [transport.py] [_log()] userauth is OK
2025-11-12T18:32:52.320 [DEBUG] [Thread-20695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:32:52.320 [DEBUG] [Thread-20695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:32:52.321 [DEBUG] [Thread-20695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:32:52.321 [DEBUG] [Thread-20695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:32:52.346 [INFO] [Thread-20695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:32:52.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:32:52.944 [DEBUG] [Thread-20695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:32:52.944 [DEBUG] [Thread-20695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:32:52.945 [DEBUG] [Thread-20695] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:32:52.985 [DEBUG] [Thread-20695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:32:52.985 [DEBUG] [Thread-20695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:32:52.988 [DEBUG] [Thread-20695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:32:53.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:32:53.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:32:53.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:32:53.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:32:53.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:32:53.011 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:32:53.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:32:53.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:32:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:32:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.688975 -999.00  +23.90  29.84     18   -1.40 1 1 1 1 1   887    0 21.44 -181.82 ----- 23.3 29.8 278.0 37.3 24.6 -25.8 24.6 -23.8 24.4 -23.5 24.6 -24.9
2025-11-12T18:32:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:32:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:32:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.688975
2025-11-12T18:32:53.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:32:53.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:32:53.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:32:53.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:32:53.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:32:53.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:32:43', tmtdew=30.17, humidity=12.87, cloud=0.0, wind=34.67, temperature=24.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:32:07.440', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:32:53.013 [DEBUG] [Thread-20695] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:32:53.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:32:53.106 [DEBUG] [Thread-20698] [transport.py] [_log()] starting thread (client mode): 0x173ebaf0
2025-11-12T18:32:53.106 [DEBUG] [Thread-20698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:32:53.121 [DEBUG] [Thread-20698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:32:53.121 [INFO] [Thread-20698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:32:53.129 [DEBUG] [Thread-20698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:32:53.129 [DEBUG] [Thread-20698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] client lang: <none>
2025-11-12T18:32:53.130 [DEBUG] [Thread-20698] [transport.py] [_log()] server lang: <none>
2025-11-12T18:32:53.131 [DEBUG] [Thread-20698] [transport.py] [_log()] kex follows: False
2025-11-12T18:32:53.131 [DEBUG] [Thread-20698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:32:53.131 [DEBUG] [Thread-20698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:32:53.131 [DEBUG] [Thread-20698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:32:53.131 [DEBUG] [Thread-20698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:32:53.131 [DEBUG] [Thread-20698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:32:53.131 [DEBUG] [Thread-20698] [transport.py] [_log()] Compression: none
2025-11-12T18:32:53.132 [DEBUG] [Thread-20698] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:32:53.190 [DEBUG] [Thread-20698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:32:53.191 [DEBUG] [Thread-20698] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:32:53.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:32:53.192 [DEBUG] [Thread-20698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:32:53.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:32:53.249 [DEBUG] [Thread-20698] [transport.py] [_log()] userauth is OK
2025-11-12T18:32:53.250 [DEBUG] [Thread-20698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:32:53.250 [DEBUG] [Thread-20698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:32:53.250 [DEBUG] [Thread-20698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:32:53.250 [DEBUG] [Thread-20698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:32:53.269 [INFO] [Thread-20698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:32:53.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:32:53.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:32:54.095 [DEBUG] [Thread-20698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:32:54.095 [DEBUG] [Thread-20698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:32:54.143 [DEBUG] [Thread-20698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:32:54.144 [DEBUG] [Thread-20698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:32:54.153 [DEBUG] [Thread-20698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:32:54.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:32:54.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-11-12T18:32:54.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-11-12T18:32:54.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:32:54.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:32:54.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:32:54.190 [DEBUG] [Thread-20698] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:33:02.722 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:33:02.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:33:04.734 [DEBUG] [Thread-20700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:33:19.788 [DEBUG] [Thread-20701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:33:24.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:33:24.213 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:33:24.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-11-12T18:33:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 33, 15), 30.12, 12.92, 0.0, 35.91, 24.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:33:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:33:15
2025-11-12T18:33:25.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:33:25.151 [DEBUG] [Thread-20702] [transport.py] [_log()] starting thread (client mode): 0x14905b70
2025-11-12T18:33:25.151 [DEBUG] [Thread-20702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:33:25.172 [DEBUG] [Thread-20702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:33:25.172 [INFO] [Thread-20702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:33:25.174 [DEBUG] [Thread-20702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:33:25.174 [DEBUG] [Thread-20702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:33:25.174 [DEBUG] [Thread-20702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] client lang: <none>
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] server lang: <none>
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] kex follows: False
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] Compression: none
2025-11-12T18:33:25.175 [DEBUG] [Thread-20702] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:33:25.192 [DEBUG] [Thread-20702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:33:25.192 [DEBUG] [Thread-20702] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:33:25.193 [DEBUG] [Thread-20702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:33:25.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:33:25.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:33:25.195 [DEBUG] [Thread-20702] [transport.py] [_log()] userauth is OK
2025-11-12T18:33:25.195 [DEBUG] [Thread-20702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:33:25.195 [DEBUG] [Thread-20702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:33:25.195 [DEBUG] [Thread-20702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:33:25.195 [DEBUG] [Thread-20702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:33:25.220 [INFO] [Thread-20702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:33:25.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:33:26.019 [DEBUG] [Thread-20702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:33:26.019 [DEBUG] [Thread-20702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:33:26.020 [DEBUG] [Thread-20702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:33:26.069 [DEBUG] [Thread-20702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:33:26.070 [DEBUG] [Thread-20702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:33:26.072 [DEBUG] [Thread-20702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:33:26.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:33:26.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:33:26.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:33:26.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:33:26.093 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:33:26.095 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:33:26.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:33:26.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:33:26.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:33:26.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.689322 -999.00  +23.80  23.75     18   -1.40 1 1 1 1 1   887    0 20.75 -198.67 ----- 25.8 23.8 279.0 38.1 24.6 -25.6 24.6 -23.8 24.4 -23.4 24.6 -24.8
2025-11-12T18:33:26.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:33:26.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:33:26.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.689322
2025-11-12T18:33:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:33:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:33:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:33:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:33:26.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:33:26.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:33:15', tmtdew=30.12, humidity=12.92, cloud=0.0, wind=35.91, temperature=24.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:32:37.421', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:33:26.098 [DEBUG] [Thread-20702] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:33:26.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:33:26.204 [DEBUG] [Thread-20705] [transport.py] [_log()] starting thread (client mode): 0x14907e20
2025-11-12T18:33:26.204 [DEBUG] [Thread-20705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:33:26.219 [DEBUG] [Thread-20705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:33:26.219 [INFO] [Thread-20705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:33:26.227 [DEBUG] [Thread-20705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:33:26.227 [DEBUG] [Thread-20705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:33:26.227 [DEBUG] [Thread-20705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:33:26.228 [DEBUG] [Thread-20705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:33:26.228 [DEBUG] [Thread-20705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:33:26.228 [DEBUG] [Thread-20705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:33:26.228 [DEBUG] [Thread-20705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:33:26.228 [DEBUG] [Thread-20705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:33:26.228 [DEBUG] [Thread-20705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:33:26.228 [DEBUG] [Thread-20705] [transport.py] [_log()] client lang: <none>
2025-11-12T18:33:26.228 [DEBUG] [Thread-20705] [transport.py] [_log()] server lang: <none>
2025-11-12T18:33:26.229 [DEBUG] [Thread-20705] [transport.py] [_log()] kex follows: False
2025-11-12T18:33:26.229 [DEBUG] [Thread-20705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:33:26.229 [DEBUG] [Thread-20705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:33:26.229 [DEBUG] [Thread-20705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:33:26.229 [DEBUG] [Thread-20705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:33:26.229 [DEBUG] [Thread-20705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:33:26.229 [DEBUG] [Thread-20705] [transport.py] [_log()] Compression: none
2025-11-12T18:33:26.229 [DEBUG] [Thread-20705] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:33:26.285 [DEBUG] [Thread-20705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:33:26.286 [DEBUG] [Thread-20705] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:33:26.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:33:26.287 [DEBUG] [Thread-20705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:33:26.288 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:33:26.345 [DEBUG] [Thread-20705] [transport.py] [_log()] userauth is OK
2025-11-12T18:33:26.345 [DEBUG] [Thread-20705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:33:26.346 [DEBUG] [Thread-20705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:33:26.346 [DEBUG] [Thread-20705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:33:26.346 [DEBUG] [Thread-20705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:33:26.364 [INFO] [Thread-20705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:33:26.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:33:26.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:33:27.244 [DEBUG] [Thread-20705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:33:27.245 [DEBUG] [Thread-20705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:33:27.293 [DEBUG] [Thread-20705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:33:27.293 [DEBUG] [Thread-20705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:33:27.303 [DEBUG] [Thread-20705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:33:27.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:33:27.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-11-12T18:33:27.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:33:27.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:33:27.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:33:27.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:33:27.340 [DEBUG] [Thread-20705] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:33:34.822 [DEBUG] [Thread-20707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:33:45.448 [DEBUG] [Thread-20708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:33:49.859 [DEBUG] [Thread-20709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:33:57.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:33:57.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:33:57.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:33:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 33, 47), 29.99, 13.01, 0.0, 29.31, 23.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:33:58.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:33:47
2025-11-12T18:33:58.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:33:58.292 [DEBUG] [Thread-20710] [transport.py] [_log()] starting thread (client mode): 0x149544f0
2025-11-12T18:33:58.292 [DEBUG] [Thread-20710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:33:58.312 [DEBUG] [Thread-20710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:33:58.312 [INFO] [Thread-20710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:33:58.315 [DEBUG] [Thread-20710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:33:58.315 [DEBUG] [Thread-20710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] client lang: <none>
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] server lang: <none>
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] kex follows: False
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] Compression: none
2025-11-12T18:33:58.316 [DEBUG] [Thread-20710] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:33:58.334 [DEBUG] [Thread-20710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:33:58.334 [DEBUG] [Thread-20710] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:33:58.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:33:58.335 [DEBUG] [Thread-20710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:33:58.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:33:58.338 [DEBUG] [Thread-20710] [transport.py] [_log()] userauth is OK
2025-11-12T18:33:58.338 [DEBUG] [Thread-20710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:33:58.338 [DEBUG] [Thread-20710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:33:58.338 [DEBUG] [Thread-20710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:33:58.338 [DEBUG] [Thread-20710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:33:58.377 [INFO] [Thread-20710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:33:58.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:33:59.001 [DEBUG] [Thread-20710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:33:59.001 [DEBUG] [Thread-20710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:33:59.001 [DEBUG] [Thread-20710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:33:59.041 [DEBUG] [Thread-20710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:33:59.042 [DEBUG] [Thread-20710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:33:59.045 [DEBUG] [Thread-20710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:33:59.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:33:59.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:33:59.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:33:59.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:33:59.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:33:59.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:33:59.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:33:59.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:33:59.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:33:59.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.689669 -999.00  +23.80  24.96     18   -1.40 1 1 1 1 1   887    0 21.36 -188.45 ----- 31.5 25.0 274.6 35.2 24.6 -25.6 24.6 -23.8 24.3 -23.4 24.6 -24.7
2025-11-12T18:33:59.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:33:59.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:33:59.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.689669
2025-11-12T18:33:59.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:33:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:33:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:33:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:33:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:33:59.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:33:47', tmtdew=29.99, humidity=13.01, cloud=0.0, wind=29.31, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:33:07.402', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:33:59.069 [DEBUG] [Thread-20710] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:33:59.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:33:59.163 [DEBUG] [Thread-20713] [transport.py] [_log()] starting thread (client mode): 0x149544c0
2025-11-12T18:33:59.164 [DEBUG] [Thread-20713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:33:59.178 [DEBUG] [Thread-20713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:33:59.179 [INFO] [Thread-20713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:33:59.186 [DEBUG] [Thread-20713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:33:59.186 [DEBUG] [Thread-20713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:33:59.186 [DEBUG] [Thread-20713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:33:59.186 [DEBUG] [Thread-20713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] client lang: <none>
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] server lang: <none>
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] kex follows: False
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] Compression: none
2025-11-12T18:33:59.187 [DEBUG] [Thread-20713] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:33:59.245 [DEBUG] [Thread-20713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:33:59.246 [DEBUG] [Thread-20713] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:33:59.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:33:59.247 [DEBUG] [Thread-20713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:33:59.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:33:59.305 [DEBUG] [Thread-20713] [transport.py] [_log()] userauth is OK
2025-11-12T18:33:59.305 [DEBUG] [Thread-20713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:33:59.305 [DEBUG] [Thread-20713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:33:59.305 [DEBUG] [Thread-20713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:33:59.306 [DEBUG] [Thread-20713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:33:59.324 [INFO] [Thread-20713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:33:59.325 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:33:59.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:34:00.195 [DEBUG] [Thread-20713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:34:00.195 [DEBUG] [Thread-20713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:34:00.245 [DEBUG] [Thread-20713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:34:00.245 [DEBUG] [Thread-20713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:34:00.254 [DEBUG] [Thread-20713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:34:00.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:34:00.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-11-12T18:34:00.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-11-12T18:34:00.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:34:00.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:34:00.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:34:00.290 [DEBUG] [Thread-20713] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:34:02.864 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:34:02.865 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:34:04.894 [DEBUG] [Thread-20715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:34:19.942 [DEBUG] [Thread-20716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:34:30.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:34:30.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:34:30.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-11-12T18:34:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 34, 19), 30.02, 12.97, 0.0, 29.71, 23.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:34:30.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:34:19
2025-11-12T18:34:31.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:34:31.248 [DEBUG] [Thread-20717] [transport.py] [_log()] starting thread (client mode): 0x14956320
2025-11-12T18:34:31.248 [DEBUG] [Thread-20717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:34:31.269 [DEBUG] [Thread-20717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:34:31.269 [INFO] [Thread-20717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] client lang: <none>
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] server lang: <none>
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] kex follows: False
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] Compression: none
2025-11-12T18:34:31.271 [DEBUG] [Thread-20717] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:34:31.290 [DEBUG] [Thread-20717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:34:31.291 [DEBUG] [Thread-20717] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:34:31.291 [DEBUG] [Thread-20717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:34:31.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:34:31.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:34:31.294 [DEBUG] [Thread-20717] [transport.py] [_log()] userauth is OK
2025-11-12T18:34:31.294 [DEBUG] [Thread-20717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:34:31.294 [DEBUG] [Thread-20717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:34:31.294 [DEBUG] [Thread-20717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:34:31.294 [DEBUG] [Thread-20717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:34:31.312 [INFO] [Thread-20717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:34:31.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:34:32.082 [DEBUG] [Thread-20717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:34:32.083 [DEBUG] [Thread-20717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:34:32.083 [DEBUG] [Thread-20717] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:34:32.123 [DEBUG] [Thread-20717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:34:32.124 [DEBUG] [Thread-20717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:34:32.127 [DEBUG] [Thread-20717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:34:32.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:34:32.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:34:32.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:34:32.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:34:32.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:34:32.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:34:32.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:34:32.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:34:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:34:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.690016 -999.00  +23.80  21.18     18   -1.40 1 1 1 1 1   887    0 21.02 -181.26 ----- 21.4 21.2 295.4 36.8 24.6 -25.5 24.6 -23.5 24.3 -23.5 24.6 -24.8
2025-11-12T18:34:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:34:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:34:32.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.690016
2025-11-12T18:34:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:34:32.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:34:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:34:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:34:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:34:32.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:34:19', tmtdew=30.02, humidity=12.97, cloud=0.0, wind=29.71, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:33:37.382', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:34:32.147 [DEBUG] [Thread-20717] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:34:32.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:34:32.253 [DEBUG] [Thread-20720] [transport.py] [_log()] starting thread (client mode): 0x14904700
2025-11-12T18:34:32.253 [DEBUG] [Thread-20720] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:34:32.269 [DEBUG] [Thread-20720] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:34:32.269 [INFO] [Thread-20720] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:34:32.276 [DEBUG] [Thread-20720] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:34:32.276 [DEBUG] [Thread-20720] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] client lang: <none>
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] server lang: <none>
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] kex follows: False
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:34:32.277 [DEBUG] [Thread-20720] [transport.py] [_log()] Compression: none
2025-11-12T18:34:32.278 [DEBUG] [Thread-20720] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:34:32.337 [DEBUG] [Thread-20720] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:34:32.337 [DEBUG] [Thread-20720] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:34:32.338 [DEBUG] [Thread-20720] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:34:32.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:34:32.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:34:32.393 [DEBUG] [Thread-20720] [transport.py] [_log()] userauth is OK
2025-11-12T18:34:32.393 [DEBUG] [Thread-20720] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:34:32.393 [DEBUG] [Thread-20720] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:34:32.393 [DEBUG] [Thread-20720] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:34:32.393 [DEBUG] [Thread-20720] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:34:32.412 [INFO] [Thread-20720] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:34:32.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:34:32.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:34:33.268 [DEBUG] [Thread-20720] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:34:33.269 [DEBUG] [Thread-20720] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:34:33.317 [DEBUG] [Thread-20720] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:34:33.317 [DEBUG] [Thread-20720] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:34:33.326 [DEBUG] [Thread-20720] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:34:33.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:34:33.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-11-12T18:34:33.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:34:33.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:34:33.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:34:33.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:34:33.363 [DEBUG] [Thread-20720] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:34:34.976 [DEBUG] [Thread-20722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:34:45.493 [DEBUG] [Thread-20723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:34:50.027 [DEBUG] [Thread-20724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:35:03.006 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:35:03.007 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:35:03.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:35:03.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:35:03.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-11-12T18:35:04.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 34, 51), 30.05, 12.99, 0.0, 30.15, 23.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:35:04.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:34:51
2025-11-12T18:35:04.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:35:04.309 [DEBUG] [Thread-20725] [transport.py] [_log()] starting thread (client mode): 0x14907940
2025-11-12T18:35:04.309 [DEBUG] [Thread-20725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:35:04.329 [DEBUG] [Thread-20725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:35:04.329 [INFO] [Thread-20725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:35:04.332 [DEBUG] [Thread-20725] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:35:04.332 [DEBUG] [Thread-20725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:35:04.332 [DEBUG] [Thread-20725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] client lang: <none>
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] server lang: <none>
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] kex follows: False
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] Compression: none
2025-11-12T18:35:04.333 [DEBUG] [Thread-20725] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:35:04.351 [DEBUG] [Thread-20725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:35:04.352 [DEBUG] [Thread-20725] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:35:04.353 [DEBUG] [Thread-20725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:35:04.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:35:04.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:35:04.355 [DEBUG] [Thread-20725] [transport.py] [_log()] userauth is OK
2025-11-12T18:35:04.355 [DEBUG] [Thread-20725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:35:04.355 [DEBUG] [Thread-20725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:35:04.355 [DEBUG] [Thread-20725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:35:04.355 [DEBUG] [Thread-20725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:35:04.381 [INFO] [Thread-20725] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:35:04.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:35:05.056 [DEBUG] [Thread-20727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:35:11.975 [DEBUG] [Thread-20725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:35:11.976 [DEBUG] [Thread-20725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:35:11.976 [DEBUG] [Thread-20725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:35:12.016 [DEBUG] [Thread-20725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:35:12.016 [DEBUG] [Thread-20725] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:35:12.019 [DEBUG] [Thread-20725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:35:12.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:35:12.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:35:12.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:35:12.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:35:12.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:35:12.040 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:35:12.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:35:12.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:35:12.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:35:12.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.690364 -999.00  +23.80  27.41     18   -1.40 1 1 1 1 1   887    0 21.33 -191.46 ----- 25.3 27.4 275.4 32.2 24.5 -25.4 24.5 -23.7 24.3 -23.2 24.5 -24.7
2025-11-12T18:35:12.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:35:12.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:35:12.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.690364
2025-11-12T18:35:12.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:35:12.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:35:12.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:35:12.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:35:12.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:35:12.042 [DEBUG] [Thread-20725] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:35:12.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:34:51', tmtdew=30.05, humidity=12.99, cloud=0.0, wind=30.15, temperature=23.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:34:07.450', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:35:12.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:35:12.131 [DEBUG] [Thread-20729] [transport.py] [_log()] starting thread (client mode): 0x14906650
2025-11-12T18:35:12.131 [DEBUG] [Thread-20729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:35:12.146 [DEBUG] [Thread-20729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:35:12.146 [INFO] [Thread-20729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:35:12.153 [DEBUG] [Thread-20729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:35:12.153 [DEBUG] [Thread-20729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:35:12.153 [DEBUG] [Thread-20729] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] client lang: <none>
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] server lang: <none>
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] kex follows: False
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] Compression: none
2025-11-12T18:35:12.154 [DEBUG] [Thread-20729] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:35:12.214 [DEBUG] [Thread-20729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:35:12.215 [DEBUG] [Thread-20729] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:35:12.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:35:12.217 [DEBUG] [Thread-20729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:35:12.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:35:12.273 [DEBUG] [Thread-20729] [transport.py] [_log()] userauth is OK
2025-11-12T18:35:12.273 [DEBUG] [Thread-20729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:35:12.273 [DEBUG] [Thread-20729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:35:12.274 [DEBUG] [Thread-20729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:35:12.274 [DEBUG] [Thread-20729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:35:12.292 [INFO] [Thread-20729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:35: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-11-12T18:35:12.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:35:13.150 [DEBUG] [Thread-20729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:35:13.150 [DEBUG] [Thread-20729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:35:13.199 [DEBUG] [Thread-20729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:35:13.199 [DEBUG] [Thread-20729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:35:13.208 [DEBUG] [Thread-20729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:35:13.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:35:13.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-11-12T18:35: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') -> 00000000
2025-11-12T18:35:13.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:35:13.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:35:13.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:35:13.245 [DEBUG] [Thread-20729] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:35:20.098 [DEBUG] [Thread-20731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:35:35.147 [DEBUG] [Thread-20732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:35:43.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:35:43.258 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:35:43.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-11-12T18:35:43.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 35, 23), 30.05, 12.99, 0.0, 31.07, 23.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:35:43.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:35:23
2025-11-12T18:35:44.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:35:44.180 [DEBUG] [Thread-20733] [transport.py] [_log()] starting thread (client mode): 0x14905d80
2025-11-12T18:35:44.180 [DEBUG] [Thread-20733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:35:44.199 [DEBUG] [Thread-20733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:35:44.199 [INFO] [Thread-20733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:35:44.202 [DEBUG] [Thread-20733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:35:44.202 [DEBUG] [Thread-20733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:35:44.202 [DEBUG] [Thread-20733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:35:44.202 [DEBUG] [Thread-20733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] client lang: <none>
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] server lang: <none>
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] kex follows: False
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:35:44.203 [DEBUG] [Thread-20733] [transport.py] [_log()] Compression: none
2025-11-12T18:35:44.204 [DEBUG] [Thread-20733] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:35:44.223 [DEBUG] [Thread-20733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:35:44.224 [DEBUG] [Thread-20733] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:35:44.224 [DEBUG] [Thread-20733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:35:44.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:35:44.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:35:44.226 [DEBUG] [Thread-20733] [transport.py] [_log()] userauth is OK
2025-11-12T18:35:44.226 [DEBUG] [Thread-20733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:35:44.226 [DEBUG] [Thread-20733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:35:44.227 [DEBUG] [Thread-20733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:35:44.227 [DEBUG] [Thread-20733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:35:44.260 [INFO] [Thread-20733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:35:44.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:35:44.899 [DEBUG] [Thread-20733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:35:44.900 [DEBUG] [Thread-20733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:35:44.900 [DEBUG] [Thread-20733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:35:44.941 [DEBUG] [Thread-20733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:35:44.941 [DEBUG] [Thread-20733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:35:44.944 [DEBUG] [Thread-20733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:35:44.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:35:44.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:35:44.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:35:44.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:35:44.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:35:44.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:35:44.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:35:44.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:35:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:35:44.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.690711 -999.00  +23.80  23.79     18   -1.40 1 1 1 1 1   887    0 21.05 -193.57 ----- 26.9 23.8 272.4 33.7 24.5 -25.4 -999.0 -999.0 24.2 -23.2 24.5 -24.4
2025-11-12T18:35:44.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:35:44.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:35:44.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.690711
2025-11-12T18:35:44.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:35:44.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:35:44.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:35:44.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:35:44.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:35:44.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:35:23', tmtdew=30.05, humidity=12.99, cloud=0.0, wind=31.07, temperature=23.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:34:37.430', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:35:44.972 [DEBUG] [Thread-20733] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:35:45.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:35:45.081 [DEBUG] [Thread-20736] [transport.py] [_log()] starting thread (client mode): 0x149a7610
2025-11-12T18:35:45.081 [DEBUG] [Thread-20736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:35:45.097 [DEBUG] [Thread-20736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:35:45.097 [INFO] [Thread-20736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:35:45.105 [DEBUG] [Thread-20736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] client lang: <none>
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] server lang: <none>
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] kex follows: False
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:35:45.106 [DEBUG] [Thread-20736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:35:45.107 [DEBUG] [Thread-20736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:35:45.107 [DEBUG] [Thread-20736] [transport.py] [_log()] Compression: none
2025-11-12T18:35:45.107 [DEBUG] [Thread-20736] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:35:45.164 [DEBUG] [Thread-20736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:35:45.165 [DEBUG] [Thread-20736] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:35:45.166 [DEBUG] [Thread-20736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:35:45.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:35:45.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:35:45.221 [DEBUG] [Thread-20736] [transport.py] [_log()] userauth is OK
2025-11-12T18:35:45.221 [DEBUG] [Thread-20736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:35:45.222 [DEBUG] [Thread-20736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:35:45.222 [DEBUG] [Thread-20736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:35:45.222 [DEBUG] [Thread-20736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:35:45.241 [INFO] [Thread-20736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:35:45.242 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:35:45.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:35:45.526 [DEBUG] [Thread-20738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:35:46.095 [DEBUG] [Thread-20736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:35:46.096 [DEBUG] [Thread-20736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:35:46.144 [DEBUG] [Thread-20736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:35:46.144 [DEBUG] [Thread-20736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:35:46.153 [DEBUG] [Thread-20736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:35:46.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:35:46.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-11-12T18:35:46.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-11-12T18:35:46.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:35:46.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:35:46.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:35:46.191 [DEBUG] [Thread-20736] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:35:50.182 [DEBUG] [Thread-20739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:36:03.149 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:36:03.150 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:36:05.249 [DEBUG] [Thread-20740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:36:16.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:36:16.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:36:16.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-11-12T18:36:16.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 35, 55), 30.02, 12.97, 0.0, 31.88, 23.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:36:16.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:35:55
2025-11-12T18:36:16.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:36:17.111 [DEBUG] [Thread-20741] [transport.py] [_log()] starting thread (client mode): 0x14956050
2025-11-12T18:36:17.111 [DEBUG] [Thread-20741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:36:17.133 [DEBUG] [Thread-20741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:36:17.133 [INFO] [Thread-20741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] client lang: <none>
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] server lang: <none>
2025-11-12T18:36:17.136 [DEBUG] [Thread-20741] [transport.py] [_log()] kex follows: False
2025-11-12T18:36:17.137 [DEBUG] [Thread-20741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:36:17.137 [DEBUG] [Thread-20741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:36:17.137 [DEBUG] [Thread-20741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:36:17.137 [DEBUG] [Thread-20741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:36:17.137 [DEBUG] [Thread-20741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:36:17.137 [DEBUG] [Thread-20741] [transport.py] [_log()] Compression: none
2025-11-12T18:36:17.137 [DEBUG] [Thread-20741] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:36:17.153 [DEBUG] [Thread-20741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:36:17.153 [DEBUG] [Thread-20741] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:36:17.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:36:17.154 [DEBUG] [Thread-20741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:36:17.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:36:17.157 [DEBUG] [Thread-20741] [transport.py] [_log()] userauth is OK
2025-11-12T18:36:17.157 [DEBUG] [Thread-20741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:36:17.157 [DEBUG] [Thread-20741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:36:17.157 [DEBUG] [Thread-20741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:36:17.157 [DEBUG] [Thread-20741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:36:17.194 [INFO] [Thread-20741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:36:17.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:36:17.820 [DEBUG] [Thread-20741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:36:17.821 [DEBUG] [Thread-20741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:36:17.821 [DEBUG] [Thread-20741] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:36:17.862 [DEBUG] [Thread-20741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:36:17.862 [DEBUG] [Thread-20741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:36:17.865 [DEBUG] [Thread-20741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:36:17.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:36:17.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:36:17.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:36:17.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:36:17.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:36:17.888 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:36:17.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:36:17.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:36:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:36:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.691405 -999.00  +23.80  22.49     18   -1.40 1 1 1 1 1   887    0 20.92 -188.49 ----- 30.2 22.5 283.8 30.5 24.4 -24.9 24.4 -23.2 24.2 -22.9 24.4 -24.2
2025-11-12T18:36:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:36:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:36:17.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.691405
2025-11-12T18:36:17.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:36:17.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:36:17.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:36:17.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:36:17.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T18:36:17.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:35:55', tmtdew=30.02, humidity=12.97, cloud=0.0, wind=31.88, temperature=23.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:35:37.392', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:36:17.891 [DEBUG] [Thread-20741] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:36:17.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:36:17.987 [DEBUG] [Thread-20744] [transport.py] [_log()] starting thread (client mode): 0x14957fa0
2025-11-12T18:36:17.988 [DEBUG] [Thread-20744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:36:18.002 [DEBUG] [Thread-20744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:36:18.002 [INFO] [Thread-20744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] client lang: <none>
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] server lang: <none>
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] kex follows: False
2025-11-12T18:36:18.010 [DEBUG] [Thread-20744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:36:18.011 [DEBUG] [Thread-20744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:36:18.011 [DEBUG] [Thread-20744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:36:18.011 [DEBUG] [Thread-20744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:36:18.011 [DEBUG] [Thread-20744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:36:18.011 [DEBUG] [Thread-20744] [transport.py] [_log()] Compression: none
2025-11-12T18:36:18.011 [DEBUG] [Thread-20744] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:36:18.069 [DEBUG] [Thread-20744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:36:18.069 [DEBUG] [Thread-20744] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:36:18.070 [DEBUG] [Thread-20744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:36:18.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:36:18.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:36:18.125 [DEBUG] [Thread-20744] [transport.py] [_log()] userauth is OK
2025-11-12T18:36:18.125 [DEBUG] [Thread-20744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:36:18.126 [DEBUG] [Thread-20744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:36:18.126 [DEBUG] [Thread-20744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:36:18.126 [DEBUG] [Thread-20744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:36:18.149 [INFO] [Thread-20744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:36:18.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:36:18.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:36:18.996 [DEBUG] [Thread-20744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:36:18.997 [DEBUG] [Thread-20744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:36:19.044 [DEBUG] [Thread-20744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:36:19.045 [DEBUG] [Thread-20744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:36:19.054 [DEBUG] [Thread-20744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:36:19.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:36:19.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-11-12T18:36:19.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-11-12T18:36:19.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:36:19.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:36:19.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:36:19.091 [DEBUG] [Thread-20744] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:36:20.280 [DEBUG] [Thread-20746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:36:35.335 [DEBUG] [Thread-20747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:36:45.560 [DEBUG] [Thread-20748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:36:49.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:36:49.112 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:36:49.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-11-12T18:36:49.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 36, 27), 30.04, 12.94, 0.0, 28.85, 23.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:36:49.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:36:27
2025-11-12T18:36:49.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:36:50.044 [DEBUG] [Thread-20749] [transport.py] [_log()] starting thread (client mode): 0x14957ca0
2025-11-12T18:36:50.044 [DEBUG] [Thread-20749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:36:50.064 [DEBUG] [Thread-20749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:36:50.064 [INFO] [Thread-20749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:36:50.067 [DEBUG] [Thread-20749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:36:50.067 [DEBUG] [Thread-20749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] client lang: <none>
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] server lang: <none>
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] kex follows: False
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] Compression: none
2025-11-12T18:36:50.068 [DEBUG] [Thread-20749] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:36:50.082 [DEBUG] [Thread-20749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:36:50.082 [DEBUG] [Thread-20749] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:36:50.082 [DEBUG] [Thread-20749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:36:50.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:36:50.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:36:50.084 [DEBUG] [Thread-20749] [transport.py] [_log()] userauth is OK
2025-11-12T18:36:50.084 [DEBUG] [Thread-20749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:36:50.084 [DEBUG] [Thread-20749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:36:50.084 [DEBUG] [Thread-20749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:36:50.084 [DEBUG] [Thread-20749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:36:50.114 [INFO] [Thread-20749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:36:50.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:36:50.372 [DEBUG] [Thread-20751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:36:50.712 [DEBUG] [Thread-20749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:36:50.712 [DEBUG] [Thread-20749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:36:50.712 [DEBUG] [Thread-20749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:36:50.753 [DEBUG] [Thread-20749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:36:50.753 [DEBUG] [Thread-20749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:36:50.756 [DEBUG] [Thread-20749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:36:50.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:36:50.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:36:50.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:36:50.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:36:50.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:36:50.776 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:36:50.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:36:50.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:36:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:36:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.691752 -999.00  +23.70  26.68     18   -1.40 1 2 1 1 1   887    0 20.26 -201.84 ----- 22.3 26.7 275.0 38.5 24.4 -24.9 24.5 -22.9 24.1 -22.9 24.4 -24.0
2025-11-12T18:36:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:36:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:36:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.691752
2025-11-12T18:36:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:36:50.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:36:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:36:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:36:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:36:50.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:36:27', tmtdew=30.04, humidity=12.94, cloud=0.0, wind=28.85, temperature=23.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:36:07.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:36:50.777 [DEBUG] [Thread-20749] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:36:50.849 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:36:50.860 [DEBUG] [Thread-20753] [transport.py] [_log()] starting thread (client mode): 0x14955630
2025-11-12T18:36:50.860 [DEBUG] [Thread-20753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:36:50.876 [DEBUG] [Thread-20753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:36:50.876 [INFO] [Thread-20753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] client lang: <none>
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] server lang: <none>
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] kex follows: False
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] Compression: none
2025-11-12T18:36:50.884 [DEBUG] [Thread-20753] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:36:50.939 [DEBUG] [Thread-20753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:36:50.939 [DEBUG] [Thread-20753] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:36:50.940 [DEBUG] [Thread-20753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:36:50.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:36:50.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:36:50.996 [DEBUG] [Thread-20753] [transport.py] [_log()] userauth is OK
2025-11-12T18:36:50.996 [DEBUG] [Thread-20753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:36:50.996 [DEBUG] [Thread-20753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:36:50.996 [DEBUG] [Thread-20753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:36:50.996 [DEBUG] [Thread-20753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:36:51.010 [INFO] [Thread-20753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:36:51.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:36:51.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:36:51.850 [DEBUG] [Thread-20753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:36:51.850 [DEBUG] [Thread-20753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:36:51.902 [DEBUG] [Thread-20753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:36:51.902 [DEBUG] [Thread-20753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:36:51.911 [DEBUG] [Thread-20753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:36:51.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:36:51.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-11-12T18:36:51.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-11-12T18:36:51.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:36:51.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:36:51.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:36:51.955 [DEBUG] [Thread-20753] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:37:03.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:37:03.291 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:37:05.406 [DEBUG] [Thread-20755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:37:20.469 [DEBUG] [Thread-20756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:37:21.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:37:21.948 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:37: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-11-12T18:37:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 36, 59), 29.91, 13.47, 0.0, 25.58, 23.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:37:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:36:59
2025-11-12T18:37:22.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:37:22.876 [DEBUG] [Thread-20757] [transport.py] [_log()] starting thread (client mode): 0x14956da0
2025-11-12T18:37:22.876 [DEBUG] [Thread-20757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:37:22.896 [DEBUG] [Thread-20757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:37:22.896 [INFO] [Thread-20757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:37:22.899 [DEBUG] [Thread-20757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:37:22.899 [DEBUG] [Thread-20757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:37:22.899 [DEBUG] [Thread-20757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:37:22.899 [DEBUG] [Thread-20757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:37:22.899 [DEBUG] [Thread-20757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] client lang: <none>
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] server lang: <none>
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] kex follows: False
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] Compression: none
2025-11-12T18:37:22.900 [DEBUG] [Thread-20757] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:37:22.920 [DEBUG] [Thread-20757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:37:22.921 [DEBUG] [Thread-20757] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:37:22.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:37:22.922 [DEBUG] [Thread-20757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:37:22.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:37:22.924 [DEBUG] [Thread-20757] [transport.py] [_log()] userauth is OK
2025-11-12T18:37:22.924 [DEBUG] [Thread-20757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:37:22.924 [DEBUG] [Thread-20757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:37:22.924 [DEBUG] [Thread-20757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:37:22.924 [DEBUG] [Thread-20757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:37:22.948 [INFO] [Thread-20757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:37:22.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:37:23.596 [DEBUG] [Thread-20757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:37:23.596 [DEBUG] [Thread-20757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:37:23.597 [DEBUG] [Thread-20757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:37:23.637 [DEBUG] [Thread-20757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:37:23.638 [DEBUG] [Thread-20757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:37:23.640 [DEBUG] [Thread-20757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:37:23.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:37:23.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:37:23.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:37:23.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:37:23.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:37:23.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:37:23.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:37:23.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:37:23.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:37:23.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.692099 -999.00  +23.70  28.80     19   -0.80 1 2 1 1 1   887    0 20.17 -205.37 ----- 25.5 28.8 268.6 37.0 24.4 -24.5 24.4 -22.9 24.1 -22.4 24.4 -23.8
2025-11-12T18:37:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:37:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:37:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.692099
2025-11-12T18:37:23.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:37:23.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:37:23.664 [DEBUG] [Thread-20757] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:37:23.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:37:23.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:37:23.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:37:23.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:36:59', tmtdew=29.91, humidity=13.47, cloud=0.0, wind=25.58, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:36:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:37:23.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:37:23.763 [DEBUG] [Thread-20760] [transport.py] [_log()] starting thread (client mode): 0x149a73d0
2025-11-12T18:37:23.763 [DEBUG] [Thread-20760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:37:23.778 [DEBUG] [Thread-20760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:37:23.779 [INFO] [Thread-20760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] client lang: <none>
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] server lang: <none>
2025-11-12T18:37:23.786 [DEBUG] [Thread-20760] [transport.py] [_log()] kex follows: False
2025-11-12T18:37:23.787 [DEBUG] [Thread-20760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:37:23.787 [DEBUG] [Thread-20760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:37:23.787 [DEBUG] [Thread-20760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:37:23.787 [DEBUG] [Thread-20760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:37:23.787 [DEBUG] [Thread-20760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:37:23.787 [DEBUG] [Thread-20760] [transport.py] [_log()] Compression: none
2025-11-12T18:37:23.787 [DEBUG] [Thread-20760] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:37:23.845 [DEBUG] [Thread-20760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:37:23.845 [DEBUG] [Thread-20760] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:37:23.846 [DEBUG] [Thread-20760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:37:23.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:37:23.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:37:23.901 [DEBUG] [Thread-20760] [transport.py] [_log()] userauth is OK
2025-11-12T18:37:23.901 [DEBUG] [Thread-20760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:37:23.901 [DEBUG] [Thread-20760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:37:23.901 [DEBUG] [Thread-20760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:37:23.901 [DEBUG] [Thread-20760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:37:23.919 [INFO] [Thread-20760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:37:23.920 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:37:23.920 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:37:24.748 [DEBUG] [Thread-20760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:37:24.748 [DEBUG] [Thread-20760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:37:24.800 [DEBUG] [Thread-20760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:37:24.800 [DEBUG] [Thread-20760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:37:24.811 [DEBUG] [Thread-20760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:37:24.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:37:24.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-11-12T18:37:24.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-11-12T18:37:24.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:37:24.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:37:24.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:37:24.857 [DEBUG] [Thread-20760] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:37:35.502 [DEBUG] [Thread-20762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:37:45.594 [DEBUG] [Thread-20763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:37:50.557 [DEBUG] [Thread-20764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:37:54.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:37:54.874 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:37:54.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-11-12T18:37:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 37, 31), 29.55, 13.84, 0.0, 29.47, 23.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:37:55.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:37:31
2025-11-12T18:37:55.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:37:55.792 [DEBUG] [Thread-20765] [transport.py] [_log()] starting thread (client mode): 0x14904f40
2025-11-12T18:37:55.792 [DEBUG] [Thread-20765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:37:55.811 [DEBUG] [Thread-20765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:37:55.812 [INFO] [Thread-20765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] client lang: <none>
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] server lang: <none>
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] kex follows: False
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] Compression: none
2025-11-12T18:37:55.815 [DEBUG] [Thread-20765] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:37:55.830 [DEBUG] [Thread-20765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:37:55.831 [DEBUG] [Thread-20765] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:37:55.831 [DEBUG] [Thread-20765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:37:55.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:37:55.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:37:55.832 [DEBUG] [Thread-20765] [transport.py] [_log()] userauth is OK
2025-11-12T18:37:55.832 [DEBUG] [Thread-20765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:37:55.832 [DEBUG] [Thread-20765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:37:55.832 [DEBUG] [Thread-20765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:37:55.832 [DEBUG] [Thread-20765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:37:55.848 [INFO] [Thread-20765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:37:55.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:37:56.474 [DEBUG] [Thread-20765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:37:56.474 [DEBUG] [Thread-20765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:37:56.475 [DEBUG] [Thread-20765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:37:56.514 [DEBUG] [Thread-20765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:37:56.515 [DEBUG] [Thread-20765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:37:56.518 [DEBUG] [Thread-20765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:37:56.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:37:56.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:37:56.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:37:56.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:37:56.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:37:56.540 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:37:56.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:37:56.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:37:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:37:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.692447 -999.00  +23.70  26.47     20   -0.50 1 2 1 1 1   887    0 20.13 -218.23 ----- 25.1 26.5 276.2 41.1 24.4 -24.3 24.4 -22.6 24.1 -22.6 24.4 -23.5
2025-11-12T18:37:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:37:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:37:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.692447
2025-11-12T18:37:56.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:37:56.542 [DEBUG] [Thread-20765] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:37:56.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:37:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:37:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:37:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:37:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:37:31', tmtdew=29.55, humidity=13.84, cloud=0.0, wind=29.47, temperature=23.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:37:07.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:37:56.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:37:56.663 [DEBUG] [Thread-20768] [transport.py] [_log()] starting thread (client mode): 0x149049a0
2025-11-12T18:37:56.663 [DEBUG] [Thread-20768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:37:56.677 [DEBUG] [Thread-20768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:37:56.677 [INFO] [Thread-20768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] client lang: <none>
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] server lang: <none>
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] kex follows: False
2025-11-12T18:37:56.685 [DEBUG] [Thread-20768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:37:56.686 [DEBUG] [Thread-20768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:37:56.686 [DEBUG] [Thread-20768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:37:56.686 [DEBUG] [Thread-20768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:37:56.686 [DEBUG] [Thread-20768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:37:56.686 [DEBUG] [Thread-20768] [transport.py] [_log()] Compression: none
2025-11-12T18:37:56.686 [DEBUG] [Thread-20768] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:37:56.745 [DEBUG] [Thread-20768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:37:56.746 [DEBUG] [Thread-20768] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:37:56.746 [DEBUG] [Thread-20768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:37:56.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:37:56.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:37:56.801 [DEBUG] [Thread-20768] [transport.py] [_log()] userauth is OK
2025-11-12T18:37:56.801 [DEBUG] [Thread-20768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:37:56.801 [DEBUG] [Thread-20768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:37:56.801 [DEBUG] [Thread-20768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:37:56.801 [DEBUG] [Thread-20768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:37:56.820 [INFO] [Thread-20768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:37:56.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:37:56.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:37:57.660 [DEBUG] [Thread-20768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:37:57.660 [DEBUG] [Thread-20768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:37:57.708 [DEBUG] [Thread-20768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:37:57.709 [DEBUG] [Thread-20768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:37:57.718 [DEBUG] [Thread-20768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:37:57.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:37:57.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-11-12T18:37:57.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-11-12T18:37:57.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:37:57.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:37:57.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:37:57.753 [DEBUG] [Thread-20768] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:38:03.433 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:38:03.435 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:38:05.592 [DEBUG] [Thread-20770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:38:20.633 [DEBUG] [Thread-20771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:38:27.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:38:27.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:38:27.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-11-12T18:38:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 38, 3), 28.81, 14.63, 0.0, 29.61, 23.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:38:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:38:03
2025-11-12T18:38:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:38:28.693 [DEBUG] [Thread-20772] [transport.py] [_log()] starting thread (client mode): 0x14905db0
2025-11-12T18:38:28.694 [DEBUG] [Thread-20772] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:38:28.712 [DEBUG] [Thread-20772] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:38:28.713 [INFO] [Thread-20772] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] client lang: <none>
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] server lang: <none>
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] kex follows: False
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:38:28.716 [DEBUG] [Thread-20772] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:38:28.717 [DEBUG] [Thread-20772] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:38:28.717 [DEBUG] [Thread-20772] [transport.py] [_log()] Compression: none
2025-11-12T18:38:28.717 [DEBUG] [Thread-20772] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:38:28.732 [DEBUG] [Thread-20772] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:38:28.733 [DEBUG] [Thread-20772] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:38:28.733 [DEBUG] [Thread-20772] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:38:28.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:38:28.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:38:28.735 [DEBUG] [Thread-20772] [transport.py] [_log()] userauth is OK
2025-11-12T18:38:28.736 [DEBUG] [Thread-20772] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:38:28.736 [DEBUG] [Thread-20772] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:38:28.736 [DEBUG] [Thread-20772] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:38:28.736 [DEBUG] [Thread-20772] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:38:28.760 [INFO] [Thread-20772] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:38:28.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:38:29.361 [DEBUG] [Thread-20772] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:38:29.362 [DEBUG] [Thread-20772] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:38:29.362 [DEBUG] [Thread-20772] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:38:29.402 [DEBUG] [Thread-20772] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:38:29.402 [DEBUG] [Thread-20772] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:38:29.404 [DEBUG] [Thread-20772] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:38:29.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:38:29.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:38:29.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:38:29.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:38:29.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:38:29.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:38:29.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:38:29.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:38:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:38:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.692794 -999.00  +23.70  22.13     20   -0.10 1 2 1 1 1   887    0 20.01 -202.97 ----- 23.4 22.1 278.8 29.2 24.4 -24.1 24.4 -22.4 24.1 -22.3 24.4 -23.3
2025-11-12T18:38:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:38:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:38:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.692794
2025-11-12T18:38:29.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:38:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:38:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:38:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:38:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:38:29.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:38:03', tmtdew=28.81, humidity=14.63, cloud=0.0, wind=29.61, temperature=23.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:37:37.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:38:29.422 [DEBUG] [Thread-20772] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:38:29.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:38:29.508 [DEBUG] [Thread-20775] [transport.py] [_log()] starting thread (client mode): 0x149a9600
2025-11-12T18:38:29.508 [DEBUG] [Thread-20775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:38:29.523 [DEBUG] [Thread-20775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:38:29.523 [INFO] [Thread-20775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] client lang: <none>
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] server lang: <none>
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] kex follows: False
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] Compression: none
2025-11-12T18:38:29.531 [DEBUG] [Thread-20775] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:38:29.593 [DEBUG] [Thread-20775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:38:29.593 [DEBUG] [Thread-20775] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:38:29.594 [DEBUG] [Thread-20775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:38:29.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:38:29.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:38:29.652 [DEBUG] [Thread-20775] [transport.py] [_log()] userauth is OK
2025-11-12T18:38:29.652 [DEBUG] [Thread-20775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:38:29.653 [DEBUG] [Thread-20775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:38:29.653 [DEBUG] [Thread-20775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:38:29.653 [DEBUG] [Thread-20775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:38:29.679 [INFO] [Thread-20775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:38:29.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:38:29.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:38:30.522 [DEBUG] [Thread-20775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:38:30.522 [DEBUG] [Thread-20775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:38:30.569 [DEBUG] [Thread-20775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:38:30.569 [DEBUG] [Thread-20775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:38:30.579 [DEBUG] [Thread-20775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:38:30.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:38:30.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:38:30.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-11-12T18:38:30.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:38:30.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:38:30.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:38:30.615 [DEBUG] [Thread-20775] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:38:35.665 [DEBUG] [Thread-20777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:38:45.621 [DEBUG] [Thread-20778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:38:50.710 [DEBUG] [Thread-20779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:39:00.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:39:00.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:39:00.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-11-12T18:39:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 38, 35), 26.93, 16.33, 0.0, 30.84, 23.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:39:01.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:38:35
2025-11-12T18:39:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:39:01.545 [DEBUG] [Thread-20780] [transport.py] [_log()] starting thread (client mode): 0x173bf100
2025-11-12T18:39:01.545 [DEBUG] [Thread-20780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:39:01.566 [DEBUG] [Thread-20780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:39:01.566 [INFO] [Thread-20780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:39:01.567 [DEBUG] [Thread-20780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:39:01.567 [DEBUG] [Thread-20780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] client lang: <none>
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] server lang: <none>
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] kex follows: False
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] Compression: none
2025-11-12T18:39:01.568 [DEBUG] [Thread-20780] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:39:01.581 [DEBUG] [Thread-20780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:39:01.582 [DEBUG] [Thread-20780] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:39:01.582 [DEBUG] [Thread-20780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:39:01.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:39:01.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:39:01.584 [DEBUG] [Thread-20780] [transport.py] [_log()] userauth is OK
2025-11-12T18:39:01.585 [DEBUG] [Thread-20780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:39:01.585 [DEBUG] [Thread-20780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:39:01.585 [DEBUG] [Thread-20780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:39:01.585 [DEBUG] [Thread-20780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:39:01.605 [INFO] [Thread-20780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:39:01.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:39:02.269 [DEBUG] [Thread-20780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:39:02.269 [DEBUG] [Thread-20780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:39:02.269 [DEBUG] [Thread-20780] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:39:02.310 [DEBUG] [Thread-20780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:39:02.310 [DEBUG] [Thread-20780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:39:02.314 [DEBUG] [Thread-20780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:39:02.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:39:02.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:39:02.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:39:02.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:39:02.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:39:02.339 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:39:02.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:39:02.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:39:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:39:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.693141 -999.00  +23.60  26.32     21   +0.30 1 2 1 1 1   887    0 19.67 -214.55 ----- 25.1 26.3 268.1 34.9 24.4 -24.0 24.4 -22.4 24.1 -21.9 24.4 -23.4
2025-11-12T18:39:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:39:02.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:39:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.693141
2025-11-12T18:39:02.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:39:02.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:39:02.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:39:02.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:39:02.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:39:02.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:38:35', tmtdew=26.93, humidity=16.33, cloud=0.0, wind=30.84, temperature=23.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:38:07.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:39:02.342 [DEBUG] [Thread-20780] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:39:02.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:39:02.441 [DEBUG] [Thread-20783] [transport.py] [_log()] starting thread (client mode): 0x173bcb80
2025-11-12T18:39:02.441 [DEBUG] [Thread-20783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:39:02.456 [DEBUG] [Thread-20783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:39:02.456 [INFO] [Thread-20783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:39:02.464 [DEBUG] [Thread-20783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:39:02.464 [DEBUG] [Thread-20783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] client lang: <none>
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] server lang: <none>
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] kex follows: False
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:39:02.465 [DEBUG] [Thread-20783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:39:02.466 [DEBUG] [Thread-20783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:39:02.466 [DEBUG] [Thread-20783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:39:02.466 [DEBUG] [Thread-20783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:39:02.466 [DEBUG] [Thread-20783] [transport.py] [_log()] Compression: none
2025-11-12T18:39:02.466 [DEBUG] [Thread-20783] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:39:02.524 [DEBUG] [Thread-20783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:39:02.525 [DEBUG] [Thread-20783] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:39:02.525 [DEBUG] [Thread-20783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:39:02.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:39:02.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:39:02.581 [DEBUG] [Thread-20783] [transport.py] [_log()] userauth is OK
2025-11-12T18:39:02.581 [DEBUG] [Thread-20783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:39:02.581 [DEBUG] [Thread-20783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:39:02.581 [DEBUG] [Thread-20783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:39:02.581 [DEBUG] [Thread-20783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:39:02.618 [INFO] [Thread-20783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:39:02.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:39:02.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:39:03.532 [DEBUG] [Thread-20783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:39:03.532 [DEBUG] [Thread-20783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:39:03.577 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:39:03.578 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:39:03.579 [DEBUG] [Thread-20783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:39:03.580 [DEBUG] [Thread-20783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:39:03.588 [DEBUG] [Thread-20783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:39:03.598 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:39:03.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-11-12T18:39:03.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-11-12T18:39:03.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:39:03.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:39:03.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:39:03.625 [DEBUG] [Thread-20783] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:39:05.748 [DEBUG] [Thread-20785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:39:20.800 [DEBUG] [Thread-20786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:39:33.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:39:33.647 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:39:33.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-11-12T18:39:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 39, 7), 26.5, 16.84, 0.0, 32.18, 23.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:39:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:39:07
2025-11-12T18:39:34.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:39:34.569 [DEBUG] [Thread-20787] [transport.py] [_log()] starting thread (client mode): 0x149a5a50
2025-11-12T18:39:34.569 [DEBUG] [Thread-20787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:39:34.589 [DEBUG] [Thread-20787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:39:34.589 [INFO] [Thread-20787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:39:34.592 [DEBUG] [Thread-20787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:39:34.592 [DEBUG] [Thread-20787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:39:34.592 [DEBUG] [Thread-20787] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:39:34.592 [DEBUG] [Thread-20787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:39:34.592 [DEBUG] [Thread-20787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:39:34.592 [DEBUG] [Thread-20787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:39:34.592 [DEBUG] [Thread-20787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] client lang: <none>
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] server lang: <none>
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] kex follows: False
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] Compression: none
2025-11-12T18:39:34.593 [DEBUG] [Thread-20787] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:39:34.614 [DEBUG] [Thread-20787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:39:34.614 [DEBUG] [Thread-20787] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:39:34.615 [DEBUG] [Thread-20787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:39:34.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:39:34.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:39:34.618 [DEBUG] [Thread-20787] [transport.py] [_log()] userauth is OK
2025-11-12T18:39:34.618 [DEBUG] [Thread-20787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:39:34.618 [DEBUG] [Thread-20787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:39:34.618 [DEBUG] [Thread-20787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:39:34.618 [DEBUG] [Thread-20787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:39:34.641 [INFO] [Thread-20787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:39:34.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:39:35.257 [DEBUG] [Thread-20787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:39:35.257 [DEBUG] [Thread-20787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:39:35.258 [DEBUG] [Thread-20787] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:39:35.299 [DEBUG] [Thread-20787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:39:35.299 [DEBUG] [Thread-20787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:39:35.303 [DEBUG] [Thread-20787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:39:35.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:39:35.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:39:35.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:39:35.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:39:35.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:39:35.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:39:35.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:39:35.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:39:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:39:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.693488 -999.00  +23.50  21.41     22   +1.10 1 2 1 1 1   887    0 17.82 -255.11 ----- 29.2 21.4 268.0 35.5 24.3 -24.2 24.4 -22.3 24.0 -22.1 24.3 -23.1
2025-11-12T18:39:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:39:35.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:39:35.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.693488
2025-11-12T18:39:35.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:39:35.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:39:35.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:39:35.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:39:35.329 [DEBUG] [Thread-20787] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:39:35.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:39:35.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:39:07', tmtdew=26.5, humidity=16.84, cloud=0.0, wind=32.18, temperature=23.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:38:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:39:35.413 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:39:35.426 [DEBUG] [Thread-20790] [transport.py] [_log()] starting thread (client mode): 0x11f13ee0
2025-11-12T18:39:35.426 [DEBUG] [Thread-20790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:39:35.440 [DEBUG] [Thread-20790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:39:35.441 [INFO] [Thread-20790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:39:35.448 [DEBUG] [Thread-20790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:39:35.448 [DEBUG] [Thread-20790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:39:35.448 [DEBUG] [Thread-20790] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:39:35.448 [DEBUG] [Thread-20790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:39:35.448 [DEBUG] [Thread-20790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:39:35.448 [DEBUG] [Thread-20790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:39:35.448 [DEBUG] [Thread-20790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] client lang: <none>
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] server lang: <none>
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] kex follows: False
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] Compression: none
2025-11-12T18:39:35.449 [DEBUG] [Thread-20790] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:39:35.509 [DEBUG] [Thread-20790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:39:35.510 [DEBUG] [Thread-20790] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:39:35.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:39:35.511 [DEBUG] [Thread-20790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:39:35.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:39:35.565 [DEBUG] [Thread-20790] [transport.py] [_log()] userauth is OK
2025-11-12T18:39:35.565 [DEBUG] [Thread-20790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:39:35.565 [DEBUG] [Thread-20790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:39:35.565 [DEBUG] [Thread-20790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:39:35.565 [DEBUG] [Thread-20790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:39:35.584 [INFO] [Thread-20790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:39:35.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:39:35.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:39:35.837 [DEBUG] [Thread-20792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:39:36.440 [DEBUG] [Thread-20790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:39:36.440 [DEBUG] [Thread-20790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:39:36.491 [DEBUG] [Thread-20790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:39:36.492 [DEBUG] [Thread-20790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:39:36.502 [DEBUG] [Thread-20790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:39:36.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:39:36.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:39:36.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-11-12T18:39:36.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:39:36.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:39:36.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:39:36.539 [DEBUG] [Thread-20790] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:39:45.655 [DEBUG] [Thread-20793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:39:50.888 [DEBUG] [Thread-20794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:40:03.718 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:40:03.719 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:40:05.917 [DEBUG] [Thread-20795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:40:06.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:40:06.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:40:06.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-11-12T18:40:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 39, 39), 25.83, 17.62, 0.0, 29.15, 23.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:40:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:39:39
2025-11-12T18:40:07.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:40:07.475 [DEBUG] [Thread-20796] [transport.py] [_log()] starting thread (client mode): 0x173bcc10
2025-11-12T18:40:07.475 [DEBUG] [Thread-20796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:40:07.495 [DEBUG] [Thread-20796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:40:07.495 [INFO] [Thread-20796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:40:07.498 [DEBUG] [Thread-20796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] client lang: <none>
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] server lang: <none>
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] kex follows: False
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] Compression: none
2025-11-12T18:40:07.499 [DEBUG] [Thread-20796] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:40:07.515 [DEBUG] [Thread-20796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:40:07.516 [DEBUG] [Thread-20796] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:40:07.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:40:07.517 [DEBUG] [Thread-20796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:40:07.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:40:07.519 [DEBUG] [Thread-20796] [transport.py] [_log()] userauth is OK
2025-11-12T18:40:07.519 [DEBUG] [Thread-20796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:40:07.519 [DEBUG] [Thread-20796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:40:07.519 [DEBUG] [Thread-20796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:40:07.519 [DEBUG] [Thread-20796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:40:07.544 [INFO] [Thread-20796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:40:07.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:40:08.942 [DEBUG] [Thread-20796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:40:08.943 [DEBUG] [Thread-20796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:40:08.943 [DEBUG] [Thread-20796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:40:08.984 [DEBUG] [Thread-20796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:40:08.984 [DEBUG] [Thread-20796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:40:08.987 [DEBUG] [Thread-20796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:40:08.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:40:08.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:40:08.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:40:09.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:40:09.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:40:09.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:40:09.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:40:09.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:40:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:40:09.005 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.693836 -999.00  +23.50  21.80     23   +1.50 1 2 1 1 1   887    0 18.25 -251.02 ----- 26.5 21.8 272.0 33.6 24.2 -24.0 24.3 -22.6 24.1 -22.1 24.2 -23.1
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.693836
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:40:09.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:39:39', tmtdew=25.83, humidity=17.62, cloud=0.0, wind=29.15, temperature=23.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:39:07.430', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:40:09.006 [DEBUG] [Thread-20796] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:40:09.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:40:09.090 [DEBUG] [Thread-20799] [transport.py] [_log()] starting thread (client mode): 0x173e9390
2025-11-12T18:40:09.091 [DEBUG] [Thread-20799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:40:09.105 [DEBUG] [Thread-20799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:40:09.106 [INFO] [Thread-20799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:40:09.113 [DEBUG] [Thread-20799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:40:09.113 [DEBUG] [Thread-20799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:40:09.113 [DEBUG] [Thread-20799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:40:09.113 [DEBUG] [Thread-20799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:40:09.113 [DEBUG] [Thread-20799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:40:09.113 [DEBUG] [Thread-20799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:40:09.113 [DEBUG] [Thread-20799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:40:09.113 [DEBUG] [Thread-20799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] client lang: <none>
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] server lang: <none>
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] kex follows: False
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] Compression: none
2025-11-12T18:40:09.114 [DEBUG] [Thread-20799] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:40:09.173 [DEBUG] [Thread-20799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:40:09.173 [DEBUG] [Thread-20799] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:40:09.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:40:09.175 [DEBUG] [Thread-20799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:40:09.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:40:09.229 [DEBUG] [Thread-20799] [transport.py] [_log()] userauth is OK
2025-11-12T18:40:09.229 [DEBUG] [Thread-20799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:40:09.229 [DEBUG] [Thread-20799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:40:09.229 [DEBUG] [Thread-20799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:40:09.229 [DEBUG] [Thread-20799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:40:09.248 [INFO] [Thread-20799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:40: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-11-12T18:40:09.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:40:10.078 [DEBUG] [Thread-20799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:40:10.078 [DEBUG] [Thread-20799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:40:10.126 [DEBUG] [Thread-20799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:40:10.126 [DEBUG] [Thread-20799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:40:10.135 [DEBUG] [Thread-20799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:40:10.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:40:10.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-11-12T18:40:10.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:40:10.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:40:10.163 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:40:10.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:40:10.175 [DEBUG] [Thread-20799] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:40:20.950 [DEBUG] [Thread-20801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:40:36.003 [DEBUG] [Thread-20802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:40:40.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:40:40.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:40:40.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:40:40.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 40, 11), 25.67, 17.81, 0.0, 28.88, 23.51, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:40:40.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:40:11
2025-11-12T18:40:41.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:40:41.165 [DEBUG] [Thread-20803] [transport.py] [_log()] starting thread (client mode): 0x14907ac0
2025-11-12T18:40:41.165 [DEBUG] [Thread-20803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:40:41.186 [DEBUG] [Thread-20803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:40:41.186 [INFO] [Thread-20803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] client lang: <none>
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] server lang: <none>
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] kex follows: False
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] Compression: none
2025-11-12T18:40:41.189 [DEBUG] [Thread-20803] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:40:41.210 [DEBUG] [Thread-20803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:40:41.210 [DEBUG] [Thread-20803] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:40:41.211 [DEBUG] [Thread-20803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:40:41.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:40:41.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:40:41.211 [DEBUG] [Thread-20803] [transport.py] [_log()] userauth is OK
2025-11-12T18:40:41.211 [DEBUG] [Thread-20803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:40:41.211 [DEBUG] [Thread-20803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:40:41.211 [DEBUG] [Thread-20803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:40:41.211 [DEBUG] [Thread-20803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:40:41.226 [INFO] [Thread-20803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:40:41.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:40:41.840 [DEBUG] [Thread-20803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:40:41.840 [DEBUG] [Thread-20803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:40:41.841 [DEBUG] [Thread-20803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:40:41.881 [DEBUG] [Thread-20803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:40:41.881 [DEBUG] [Thread-20803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:40:41.883 [DEBUG] [Thread-20803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:40:41.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:40:41.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:40:41.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:40:41.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:40:41.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:40:41.902 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:40:41.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.694530 -999.00  +23.30  24.40     24   +1.70 1 2 1 1 1   887    0 16.95 -273.28 ----- 25.5 24.4 259.4 36.7 24.2 -23.9 24.2 -22.3 23.9 -22.0 24.1 -23.1
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.694530
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:40:41.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:40:11', tmtdew=25.67, humidity=17.81, cloud=0.0, wind=28.88, temperature=23.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:40:07.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:40:41.904 [DEBUG] [Thread-20803] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:40:41.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:40:41.990 [DEBUG] [Thread-20806] [transport.py] [_log()] starting thread (client mode): 0x11f12680
2025-11-12T18:40:41.990 [DEBUG] [Thread-20806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:40:42.007 [DEBUG] [Thread-20806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:40:42.007 [INFO] [Thread-20806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] client lang: <none>
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] server lang: <none>
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] kex follows: False
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] Compression: none
2025-11-12T18:40:42.014 [DEBUG] [Thread-20806] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:40:42.070 [DEBUG] [Thread-20806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:40:42.071 [DEBUG] [Thread-20806] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:40:42.071 [DEBUG] [Thread-20806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:40:42.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:40:42.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:40:42.128 [DEBUG] [Thread-20806] [transport.py] [_log()] userauth is OK
2025-11-12T18:40:42.128 [DEBUG] [Thread-20806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:40:42.128 [DEBUG] [Thread-20806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:40:42.128 [DEBUG] [Thread-20806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:40:42.128 [DEBUG] [Thread-20806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:40:42.143 [INFO] [Thread-20806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:40:42.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:40:42.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:40:42.973 [DEBUG] [Thread-20806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:40:42.973 [DEBUG] [Thread-20806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:40:43.021 [DEBUG] [Thread-20806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:40:43.021 [DEBUG] [Thread-20806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:40:43.029 [DEBUG] [Thread-20806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:40:43.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:40:43.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-11-12T18:40:43.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:40:43.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:40:43.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:40:43.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:40:43.060 [DEBUG] [Thread-20806] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:40:45.687 [DEBUG] [Thread-20808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:40:51.036 [DEBUG] [Thread-20809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:41:03.860 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:41:03.861 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:41:06.094 [DEBUG] [Thread-20810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:41:13.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:41:13.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:41:13.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-11-12T18:41:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 40, 43), 25.27, 18.49, 0.0, 32.55, 23.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:41:13.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:40:43
2025-11-12T18:41:13.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:41:14.002 [DEBUG] [Thread-20811] [transport.py] [_log()] starting thread (client mode): 0x173bd960
2025-11-12T18:41:14.002 [DEBUG] [Thread-20811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:41:14.022 [DEBUG] [Thread-20811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:41:14.023 [INFO] [Thread-20811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:41:14.026 [DEBUG] [Thread-20811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:41:14.026 [DEBUG] [Thread-20811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:41:14.026 [DEBUG] [Thread-20811] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:41:14.026 [DEBUG] [Thread-20811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:41:14.026 [DEBUG] [Thread-20811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] client lang: <none>
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] server lang: <none>
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] kex follows: False
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] Compression: none
2025-11-12T18:41:14.027 [DEBUG] [Thread-20811] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:41:14.047 [DEBUG] [Thread-20811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:41:14.047 [DEBUG] [Thread-20811] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:41:14.048 [DEBUG] [Thread-20811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:41:14.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:41:14.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:41:14.049 [DEBUG] [Thread-20811] [transport.py] [_log()] userauth is OK
2025-11-12T18:41:14.050 [DEBUG] [Thread-20811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:41:14.050 [DEBUG] [Thread-20811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:41:14.050 [DEBUG] [Thread-20811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:41:14.050 [DEBUG] [Thread-20811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:41:14.067 [INFO] [Thread-20811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:41:14.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:41:14.717 [DEBUG] [Thread-20811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:41:14.717 [DEBUG] [Thread-20811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:41:14.718 [DEBUG] [Thread-20811] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:41:14.759 [DEBUG] [Thread-20811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:41:14.759 [DEBUG] [Thread-20811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:41:14.762 [DEBUG] [Thread-20811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:41:14.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:41:14.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:41:14.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:41:14.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:41:14.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:41:14.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:41:14.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:41:14.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:41:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:41:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.694877 -999.00  +23.20  30.54     24   +1.80 1 2 2 1 1   887    0 17.29 -285.39 ----- 23.3 30.5 262.6 38.7 24.1 -23.9 24.1 -22.2 23.9 -21.8 24.1 -23.0
2025-11-12T18:41:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:41:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:41:14.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.694877
2025-11-12T18:41:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:41:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:41:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:41:14.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:41:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:41:14.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:40:43', tmtdew=25.27, humidity=18.49, cloud=0.0, wind=32.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:40:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:41:14.788 [DEBUG] [Thread-20811] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:41:14.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:41:14.889 [DEBUG] [Thread-20814] [transport.py] [_log()] starting thread (client mode): 0x17360c10
2025-11-12T18:41:14.889 [DEBUG] [Thread-20814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:41:14.903 [DEBUG] [Thread-20814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:41:14.904 [INFO] [Thread-20814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:41:14.911 [DEBUG] [Thread-20814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:41:14.911 [DEBUG] [Thread-20814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] client lang: <none>
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] server lang: <none>
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] kex follows: False
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:41:14.912 [DEBUG] [Thread-20814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:41:14.913 [DEBUG] [Thread-20814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:41:14.913 [DEBUG] [Thread-20814] [transport.py] [_log()] Compression: none
2025-11-12T18:41:14.913 [DEBUG] [Thread-20814] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:41:14.972 [DEBUG] [Thread-20814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:41:14.973 [DEBUG] [Thread-20814] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:41:14.973 [DEBUG] [Thread-20814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:41:14.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:41:14.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:41:15.029 [DEBUG] [Thread-20814] [transport.py] [_log()] userauth is OK
2025-11-12T18:41:15.030 [DEBUG] [Thread-20814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:41:15.030 [DEBUG] [Thread-20814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:41:15.030 [DEBUG] [Thread-20814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:41:15.030 [DEBUG] [Thread-20814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:41:15.050 [INFO] [Thread-20814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:41:15.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:41:15.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:41:15.906 [DEBUG] [Thread-20814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:41:15.906 [DEBUG] [Thread-20814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:41:15.954 [DEBUG] [Thread-20814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:41:15.954 [DEBUG] [Thread-20814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:41:15.962 [DEBUG] [Thread-20814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:41:15.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:41:15.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-11-12T18:41:15.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-11-12T18:41:15.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:41:15.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:41:15.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:41:15.994 [DEBUG] [Thread-20814] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:41:21.130 [DEBUG] [Thread-20816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:41:36.171 [DEBUG] [Thread-20817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:41:45.727 [DEBUG] [Thread-20818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:41:45.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:41:45.996 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:41:45.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-11-12T18:41:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 41, 15), 25.17, 18.62, 0.0, 30.84, 23.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:41:46.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:41:15
2025-11-12T18:41:46.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:41:46.898 [DEBUG] [Thread-20819] [transport.py] [_log()] starting thread (client mode): 0x14955960
2025-11-12T18:41:46.898 [DEBUG] [Thread-20819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:41:46.918 [DEBUG] [Thread-20819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:41:46.918 [INFO] [Thread-20819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:41:46.921 [DEBUG] [Thread-20819] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:41:46.921 [DEBUG] [Thread-20819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:41:46.921 [DEBUG] [Thread-20819] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] client lang: <none>
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] server lang: <none>
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] kex follows: False
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] Compression: none
2025-11-12T18:41:46.922 [DEBUG] [Thread-20819] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:41:46.938 [DEBUG] [Thread-20819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:41:46.938 [DEBUG] [Thread-20819] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:41:46.939 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:41:46.939 [DEBUG] [Thread-20819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:41:46.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:41:46.941 [DEBUG] [Thread-20819] [transport.py] [_log()] userauth is OK
2025-11-12T18:41:46.942 [DEBUG] [Thread-20819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:41:46.942 [DEBUG] [Thread-20819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:41:46.942 [DEBUG] [Thread-20819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:41:46.942 [DEBUG] [Thread-20819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:41:46.967 [INFO] [Thread-20819] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:41:46.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:41:47.581 [DEBUG] [Thread-20819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:41:47.581 [DEBUG] [Thread-20819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:41:47.582 [DEBUG] [Thread-20819] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:41:47.622 [DEBUG] [Thread-20819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:41:47.622 [DEBUG] [Thread-20819] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:41:47.625 [DEBUG] [Thread-20819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:41:47.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:41:47.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:41:47.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:41:47.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:41:47.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:41:47.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:41:47.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:41:47.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:41:47.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:41:47.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.695225 -999.00  +23.20  21.51     24   +1.80 1 2 1 1 1   887    0 18.14 -256.92 ----- 26.6 21.5 264.0 28.8 24.1 -23.7 24.1 -22.1 23.9 -21.8 24.1 -22.9
2025-11-12T18:41:47.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:41:47.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:41:47.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.695225
2025-11-12T18:41:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:41:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:41:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:41:47.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:41:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:41:47.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:41:15', tmtdew=25.17, humidity=18.62, cloud=0.0, wind=30.84, temperature=23.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:41:07.440', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:41:47.651 [DEBUG] [Thread-20819] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:41:47.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:41:47.747 [DEBUG] [Thread-20822] [transport.py] [_log()] starting thread (client mode): 0x149573d0
2025-11-12T18:41:47.747 [DEBUG] [Thread-20822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:41:47.765 [DEBUG] [Thread-20822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:41:47.765 [INFO] [Thread-20822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] client lang: <none>
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] server lang: <none>
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] kex follows: False
2025-11-12T18:41:47.773 [DEBUG] [Thread-20822] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:41:47.774 [DEBUG] [Thread-20822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:41:47.774 [DEBUG] [Thread-20822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:41:47.774 [DEBUG] [Thread-20822] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:41:47.774 [DEBUG] [Thread-20822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:41:47.774 [DEBUG] [Thread-20822] [transport.py] [_log()] Compression: none
2025-11-12T18:41:47.774 [DEBUG] [Thread-20822] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:41:47.832 [DEBUG] [Thread-20822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:41:47.832 [DEBUG] [Thread-20822] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:41:47.832 [DEBUG] [Thread-20822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:41:47.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:41:47.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:41:47.888 [DEBUG] [Thread-20822] [transport.py] [_log()] userauth is OK
2025-11-12T18:41:47.888 [DEBUG] [Thread-20822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:41:47.888 [DEBUG] [Thread-20822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:41:47.888 [DEBUG] [Thread-20822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:41:47.888 [DEBUG] [Thread-20822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:41:47.902 [INFO] [Thread-20822] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:41:47.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:41:47.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:41:48.737 [DEBUG] [Thread-20822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:41:48.737 [DEBUG] [Thread-20822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:41:48.785 [DEBUG] [Thread-20822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:41:48.785 [DEBUG] [Thread-20822] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:41:48.793 [DEBUG] [Thread-20822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:41:48.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:41:48.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-11-12T18:41:48.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-11-12T18:41:48.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:41:48.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:41:48.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:41:48.824 [DEBUG] [Thread-20822] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:41:51.207 [DEBUG] [Thread-20824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:42:04.003 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:42:04.004 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:42:06.257 [DEBUG] [Thread-20825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:42:18.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:42:18.847 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:42:18.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-11-12T18:42:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 41, 47), 25.14, 18.65, 0.0, 27.61, 23.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:42:19.484 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:41:47
2025-11-12T18:42:19.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:42:19.746 [DEBUG] [Thread-20826] [transport.py] [_log()] starting thread (client mode): 0x173eb8e0
2025-11-12T18:42:19.746 [DEBUG] [Thread-20826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:42:19.765 [DEBUG] [Thread-20826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:42:19.765 [INFO] [Thread-20826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:42:19.768 [DEBUG] [Thread-20826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:42:19.768 [DEBUG] [Thread-20826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:42:19.768 [DEBUG] [Thread-20826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:42:19.768 [DEBUG] [Thread-20826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:42:19.768 [DEBUG] [Thread-20826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:42:19.768 [DEBUG] [Thread-20826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] client lang: <none>
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] server lang: <none>
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] kex follows: False
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] Compression: none
2025-11-12T18:42:19.769 [DEBUG] [Thread-20826] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:42:19.785 [DEBUG] [Thread-20826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:42:19.785 [DEBUG] [Thread-20826] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:42:19.786 [DEBUG] [Thread-20826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:42:19.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:42:19.786 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:42:19.787 [DEBUG] [Thread-20826] [transport.py] [_log()] userauth is OK
2025-11-12T18:42:19.787 [DEBUG] [Thread-20826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:42:19.787 [DEBUG] [Thread-20826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:42:19.787 [DEBUG] [Thread-20826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:42:19.788 [DEBUG] [Thread-20826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:42:19.802 [INFO] [Thread-20826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:42:19.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:42:20.439 [DEBUG] [Thread-20826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:42:20.439 [DEBUG] [Thread-20826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:42:20.439 [DEBUG] [Thread-20826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:42:20.480 [DEBUG] [Thread-20826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:42:20.480 [DEBUG] [Thread-20826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:42:20.483 [DEBUG] [Thread-20826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:42:20.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:42:20.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:42:20.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:42:20.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:42:20.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:42:20.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:42:20.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:42:20.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:42:20.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:42:20.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.695572 -999.00  +23.20  18.94     24   +1.80 1 2 1 1 1   887    0 17.02 -273.55 ----- 17.9 18.9 276.4 32.6 24.1 -23.6 24.1 -22.0 23.8 -21.6 24.1 -22.8
2025-11-12T18:42:20.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:42:20.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:42:20.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.695572
2025-11-12T18:42:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:42:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:42:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:42:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:42:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:42:20.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:41:47', tmtdew=25.14, humidity=18.65, cloud=0.0, wind=27.61, temperature=23.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:41:37.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:42:20.504 [DEBUG] [Thread-20826] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:42:20.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:42:20.588 [DEBUG] [Thread-20829] [transport.py] [_log()] starting thread (client mode): 0x14954eb0
2025-11-12T18:42:20.589 [DEBUG] [Thread-20829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:42:20.603 [DEBUG] [Thread-20829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:42:20.603 [INFO] [Thread-20829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] client lang: <none>
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] server lang: <none>
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] kex follows: False
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] Compression: none
2025-11-12T18:42:20.611 [DEBUG] [Thread-20829] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:42:20.666 [DEBUG] [Thread-20829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:42:20.666 [DEBUG] [Thread-20829] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:42:20.667 [DEBUG] [Thread-20829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:42:20.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:42:20.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:42:20.724 [DEBUG] [Thread-20829] [transport.py] [_log()] userauth is OK
2025-11-12T18:42:20.724 [DEBUG] [Thread-20829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:42:20.724 [DEBUG] [Thread-20829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:42:20.724 [DEBUG] [Thread-20829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:42:20.724 [DEBUG] [Thread-20829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:42:20.737 [INFO] [Thread-20829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:42:20.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:42:20.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:42:21.294 [DEBUG] [Thread-20831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:42:21.595 [DEBUG] [Thread-20829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:42:21.596 [DEBUG] [Thread-20829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:42:21.644 [DEBUG] [Thread-20829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:42:21.644 [DEBUG] [Thread-20829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:42:21.653 [DEBUG] [Thread-20829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:42:21.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:42:21.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-11-12T18:42:21.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-11-12T18:42:21.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:42:21.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:42:21.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:42:21.685 [DEBUG] [Thread-20829] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:42:36.335 [DEBUG] [Thread-20832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:42:45.778 [DEBUG] [Thread-20833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:42:51.367 [DEBUG] [Thread-20834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:42:51.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:42:51.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:42:51.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-11-12T18:42:52.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 42, 19), 25.13, 18.67, 0.0, 28.78, 23.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:42:52.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:42:19
2025-11-12T18:42:52.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:42:52.676 [DEBUG] [Thread-20835] [transport.py] [_log()] starting thread (client mode): 0x173624a0
2025-11-12T18:42:52.677 [DEBUG] [Thread-20835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:42:52.696 [DEBUG] [Thread-20835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:42:52.696 [INFO] [Thread-20835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:42:52.699 [DEBUG] [Thread-20835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] client lang: <none>
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] server lang: <none>
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] kex follows: False
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] Compression: none
2025-11-12T18:42:52.700 [DEBUG] [Thread-20835] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:42:52.717 [DEBUG] [Thread-20835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:42:52.717 [DEBUG] [Thread-20835] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:42:52.717 [DEBUG] [Thread-20835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:42:52.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:42:52.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:42:52.718 [DEBUG] [Thread-20835] [transport.py] [_log()] userauth is OK
2025-11-12T18:42:52.718 [DEBUG] [Thread-20835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:42:52.719 [DEBUG] [Thread-20835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:42:52.719 [DEBUG] [Thread-20835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:42:52.719 [DEBUG] [Thread-20835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:42:52.728 [INFO] [Thread-20835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:42:52.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:42:53.361 [DEBUG] [Thread-20835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:42:53.361 [DEBUG] [Thread-20835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:42:53.361 [DEBUG] [Thread-20835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:42:53.402 [DEBUG] [Thread-20835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:42:53.402 [DEBUG] [Thread-20835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:42:53.404 [DEBUG] [Thread-20835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:42:53.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:42:53.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:42:53.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:42:53.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:42:53.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:42:53.423 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:42:53.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.695919 -999.00  +23.20  16.47     24   +1.80 1 2 1 1 1   887    0 16.17 -299.32 ----- 25.4 16.5 280.0 40.8 24.1 -23.7 24.1 -22.1 23.8 -21.7 24.0 -22.8
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.695919
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:42:53.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:42:19', tmtdew=25.13, humidity=18.67, cloud=0.0, wind=28.78, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:42:07.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:42:53.424 [DEBUG] [Thread-20835] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:42:53.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:42:53.508 [DEBUG] [Thread-20838] [transport.py] [_log()] starting thread (client mode): 0x17360cd0
2025-11-12T18:42:53.508 [DEBUG] [Thread-20838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:42:53.523 [DEBUG] [Thread-20838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:42:53.523 [INFO] [Thread-20838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:42:53.530 [DEBUG] [Thread-20838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:42:53.530 [DEBUG] [Thread-20838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:42:53.530 [DEBUG] [Thread-20838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:42:53.530 [DEBUG] [Thread-20838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] client lang: <none>
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] server lang: <none>
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] kex follows: False
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] Compression: none
2025-11-12T18:42:53.531 [DEBUG] [Thread-20838] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:42:53.591 [DEBUG] [Thread-20838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:42:53.591 [DEBUG] [Thread-20838] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:42:53.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:42:53.591 [DEBUG] [Thread-20838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:42:53.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:42:53.648 [DEBUG] [Thread-20838] [transport.py] [_log()] userauth is OK
2025-11-12T18:42:53.648 [DEBUG] [Thread-20838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:42:53.648 [DEBUG] [Thread-20838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:42:53.648 [DEBUG] [Thread-20838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:42:53.648 [DEBUG] [Thread-20838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:42:53.662 [INFO] [Thread-20838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:42:53.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:42:53.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:42:54.493 [DEBUG] [Thread-20838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:42:54.493 [DEBUG] [Thread-20838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:42:54.542 [DEBUG] [Thread-20838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:42:54.542 [DEBUG] [Thread-20838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:42:54.551 [DEBUG] [Thread-20838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:42:54.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:42:54.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')
2025-11-12T18:42:54.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-11-12T18:42:54.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:42:54.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:42:54.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:42:54.588 [DEBUG] [Thread-20838] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:43:04.145 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:43:04.146 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:43:06.403 [DEBUG] [Thread-20840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:43:21.451 [DEBUG] [Thread-20841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:43:24.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:43:24.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:43:24.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-11-12T18:43:25.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 42, 51), 25.05, 18.7, 0.0, 30.05, 23.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:43:25.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:42:51
2025-11-12T18:43:25.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:43:25.557 [DEBUG] [Thread-20842] [transport.py] [_log()] starting thread (client mode): 0x149576d0
2025-11-12T18:43:25.558 [DEBUG] [Thread-20842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:43:25.577 [DEBUG] [Thread-20842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:43:25.578 [INFO] [Thread-20842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] client lang: <none>
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] server lang: <none>
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] kex follows: False
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] Compression: none
2025-11-12T18:43:25.581 [DEBUG] [Thread-20842] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:43:25.597 [DEBUG] [Thread-20842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:43:25.597 [DEBUG] [Thread-20842] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:43:25.597 [DEBUG] [Thread-20842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:43:25.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:43:25.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:43:25.598 [DEBUG] [Thread-20842] [transport.py] [_log()] userauth is OK
2025-11-12T18:43:25.598 [DEBUG] [Thread-20842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:43:25.598 [DEBUG] [Thread-20842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:43:25.598 [DEBUG] [Thread-20842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:43:25.598 [DEBUG] [Thread-20842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:43:25.615 [INFO] [Thread-20842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:43:25.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:43:26.268 [DEBUG] [Thread-20842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:43:26.268 [DEBUG] [Thread-20842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:43:26.269 [DEBUG] [Thread-20842] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:43:26.310 [DEBUG] [Thread-20842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:43:26.310 [DEBUG] [Thread-20842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:43:26.313 [DEBUG] [Thread-20842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:43:26.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:43:26.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:43:26.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:43:26.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:43:26.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:43:26.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:43:26.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:43:26.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:43:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:43:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.696266 -999.00  +23.20  18.94     24   +1.90 1 2 1 1 1   887    0 16.70 -279.32 ----- 21.5 18.9 273.0 28.7 24.1 -23.6 24.1 -22.0 23.8 -21.6 24.0 -22.5
2025-11-12T18:43:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:43:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:43:26.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.696266
2025-11-12T18:43:26.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:43:26.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:43:26.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:43:26.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:43:26.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:43:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:42:51', tmtdew=25.05, humidity=18.7, cloud=0.0, wind=30.05, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:42:37.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:43:26.335 [DEBUG] [Thread-20842] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:43:26.415 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:43:26.427 [DEBUG] [Thread-20845] [transport.py] [_log()] starting thread (client mode): 0x17360970
2025-11-12T18:43:26.428 [DEBUG] [Thread-20845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:43:26.442 [DEBUG] [Thread-20845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:43:26.442 [INFO] [Thread-20845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:43:26.449 [DEBUG] [Thread-20845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] client lang: <none>
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] server lang: <none>
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] kex follows: False
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] Compression: none
2025-11-12T18:43:26.450 [DEBUG] [Thread-20845] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:43:26.508 [DEBUG] [Thread-20845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:43:26.509 [DEBUG] [Thread-20845] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:43:26.509 [DEBUG] [Thread-20845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:43:26.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:43:26.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:43:26.565 [DEBUG] [Thread-20845] [transport.py] [_log()] userauth is OK
2025-11-12T18:43:26.565 [DEBUG] [Thread-20845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:43:26.565 [DEBUG] [Thread-20845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:43:26.565 [DEBUG] [Thread-20845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:43:26.565 [DEBUG] [Thread-20845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:43:26.584 [INFO] [Thread-20845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:43: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-11-12T18:43:26.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:43:27.428 [DEBUG] [Thread-20845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:43:27.428 [DEBUG] [Thread-20845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:43:27.480 [DEBUG] [Thread-20845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:43:27.480 [DEBUG] [Thread-20845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:43:27.489 [DEBUG] [Thread-20845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:43:27.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:43:27.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:43:27.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-11-12T18:43:27.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:43:27.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:43:27.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:43:27.525 [DEBUG] [Thread-20845] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:43:36.490 [DEBUG] [Thread-20847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:43:45.818 [DEBUG] [Thread-20848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:43:51.551 [DEBUG] [Thread-20849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:43:57.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:43:57.548 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:43:57.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-11-12T18:43:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 43, 23), 24.95, 18.84, 0.0, 28.88, 23.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:43:58.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:43:23
2025-11-12T18:43:58.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:43:58.456 [DEBUG] [Thread-20850] [transport.py] [_log()] starting thread (client mode): 0x173be650
2025-11-12T18:43:58.457 [DEBUG] [Thread-20850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:43:58.475 [DEBUG] [Thread-20850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:43:58.475 [INFO] [Thread-20850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:43:58.478 [DEBUG] [Thread-20850] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:43:58.478 [DEBUG] [Thread-20850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:43:58.478 [DEBUG] [Thread-20850] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:43:58.478 [DEBUG] [Thread-20850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:43:58.478 [DEBUG] [Thread-20850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] client lang: <none>
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] server lang: <none>
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] kex follows: False
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] Compression: none
2025-11-12T18:43:58.479 [DEBUG] [Thread-20850] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:43:58.497 [DEBUG] [Thread-20850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:43:58.497 [DEBUG] [Thread-20850] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:43:58.498 [DEBUG] [Thread-20850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:43:58.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:43:58.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:43:58.500 [DEBUG] [Thread-20850] [transport.py] [_log()] userauth is OK
2025-11-12T18:43:58.501 [DEBUG] [Thread-20850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:43:58.501 [DEBUG] [Thread-20850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:43:58.501 [DEBUG] [Thread-20850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:43:58.501 [DEBUG] [Thread-20850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:43:58.526 [INFO] [Thread-20850] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:43:58.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:43:59.143 [DEBUG] [Thread-20850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:43:59.143 [DEBUG] [Thread-20850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:43:59.143 [DEBUG] [Thread-20850] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:43:59.184 [DEBUG] [Thread-20850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:43:59.184 [DEBUG] [Thread-20850] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:43:59.187 [DEBUG] [Thread-20850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:43:59.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:43:59.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:43:59.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:43:59.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:43:59.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:43:59.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:43:59.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:43:59.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:43:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:43:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.696613 -999.00  +23.20  24.06     24   +1.80 1 2 1 1 1   887    0 16.34 -286.44 ----- 24.6 24.1 266.0 31.9 24.1 -23.6 24.1 -22.1 23.8 -21.7 24.0 -22.7
2025-11-12T18:43:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:43:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:43:59.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.696613
2025-11-12T18:43:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:43:59.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:43:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:43:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:43:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:43:59.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:43:23', tmtdew=24.95, humidity=18.84, cloud=0.0, wind=28.88, temperature=23.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:43:07.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:43:59.217 [DEBUG] [Thread-20850] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:43:59.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:43:59.312 [DEBUG] [Thread-20853] [transport.py] [_log()] starting thread (client mode): 0x11f11540
2025-11-12T18:43:59.313 [DEBUG] [Thread-20853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:43:59.327 [DEBUG] [Thread-20853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:43:59.327 [INFO] [Thread-20853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:43:59.334 [DEBUG] [Thread-20853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] client lang: <none>
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] server lang: <none>
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] kex follows: False
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] Compression: none
2025-11-12T18:43:59.335 [DEBUG] [Thread-20853] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:43:59.392 [DEBUG] [Thread-20853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:43:59.393 [DEBUG] [Thread-20853] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:43:59.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:43:59.394 [DEBUG] [Thread-20853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:43:59.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:43:59.448 [DEBUG] [Thread-20853] [transport.py] [_log()] userauth is OK
2025-11-12T18:43:59.449 [DEBUG] [Thread-20853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:43:59.449 [DEBUG] [Thread-20853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:43:59.449 [DEBUG] [Thread-20853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:43:59.449 [DEBUG] [Thread-20853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:43:59.467 [INFO] [Thread-20853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:43:59.468 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:43:59.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:44:00.321 [DEBUG] [Thread-20853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:44:00.321 [DEBUG] [Thread-20853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:44:00.369 [DEBUG] [Thread-20853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:44:00.369 [DEBUG] [Thread-20853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:44:00.378 [DEBUG] [Thread-20853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:44:00.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:44:00.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:44:00.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-11-12T18:44:00.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:44:00.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:44:00.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:44:00.415 [DEBUG] [Thread-20853] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:44:04.287 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:44:04.288 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:44:06.582 [DEBUG] [Thread-20855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:44:21.639 [DEBUG] [Thread-20856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:44:30.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:44:30.436 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:44:30.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-11-12T18:44:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 44, 27), 24.8, 18.97, 0.0, 31.81, 23.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:44:31.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:44:27
2025-11-12T18:44:31.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:44:31.372 [DEBUG] [Thread-20857] [transport.py] [_log()] starting thread (client mode): 0x14956830
2025-11-12T18:44:31.372 [DEBUG] [Thread-20857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:44:31.393 [DEBUG] [Thread-20857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:44:31.393 [INFO] [Thread-20857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] client lang: <none>
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] server lang: <none>
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] kex follows: False
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] Compression: none
2025-11-12T18:44:31.396 [DEBUG] [Thread-20857] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:44:31.412 [DEBUG] [Thread-20857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:44:31.412 [DEBUG] [Thread-20857] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:44:31.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:44:31.413 [DEBUG] [Thread-20857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:44:31.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:44:31.413 [DEBUG] [Thread-20857] [transport.py] [_log()] userauth is OK
2025-11-12T18:44:31.413 [DEBUG] [Thread-20857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:44:31.413 [DEBUG] [Thread-20857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:44:31.413 [DEBUG] [Thread-20857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:44:31.413 [DEBUG] [Thread-20857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:44:31.422 [INFO] [Thread-20857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:44:31.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:44:32.025 [DEBUG] [Thread-20857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:44:32.025 [DEBUG] [Thread-20857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:44:32.025 [DEBUG] [Thread-20857] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:44:32.066 [DEBUG] [Thread-20857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:44:32.066 [DEBUG] [Thread-20857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:44:32.069 [DEBUG] [Thread-20857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:44:32.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:44:32.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:44:32.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:44:32.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:44:32.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:44:32.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:44:32.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:44:32.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.696961 -999.00  +23.10  20.18     24   +1.90 1 2 1 1 1   887    0 16.72 -264.20 ----- 24.5 20.2 273.2 38.2 24.0 -23.3 24.0 -21.9 23.8 -21.6 24.0 -22.6
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.696961
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:44:32.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:44:27', tmtdew=24.8, humidity=18.97, cloud=0.0, wind=31.81, temperature=23.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:43:37.430', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:44:32.087 [DEBUG] [Thread-20857] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:44:32.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:44:32.172 [DEBUG] [Thread-20860] [transport.py] [_log()] starting thread (client mode): 0x173607c0
2025-11-12T18:44:32.172 [DEBUG] [Thread-20860] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:44:32.188 [DEBUG] [Thread-20860] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:44:32.188 [INFO] [Thread-20860] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] client lang: <none>
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] server lang: <none>
2025-11-12T18:44:32.195 [DEBUG] [Thread-20860] [transport.py] [_log()] kex follows: False
2025-11-12T18:44:32.196 [DEBUG] [Thread-20860] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:44:32.196 [DEBUG] [Thread-20860] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:44:32.196 [DEBUG] [Thread-20860] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:44:32.196 [DEBUG] [Thread-20860] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:44:32.196 [DEBUG] [Thread-20860] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:44:32.196 [DEBUG] [Thread-20860] [transport.py] [_log()] Compression: none
2025-11-12T18:44:32.196 [DEBUG] [Thread-20860] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:44:32.256 [DEBUG] [Thread-20860] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:44:32.256 [DEBUG] [Thread-20860] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:44:32.256 [DEBUG] [Thread-20860] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:44:32.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:44:32.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:44:32.312 [DEBUG] [Thread-20860] [transport.py] [_log()] userauth is OK
2025-11-12T18:44:32.312 [DEBUG] [Thread-20860] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:44:32.312 [DEBUG] [Thread-20860] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:44:32.312 [DEBUG] [Thread-20860] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:44:32.312 [DEBUG] [Thread-20860] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:44:32.327 [INFO] [Thread-20860] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:44:32.327 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:44:32.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:44:33.176 [DEBUG] [Thread-20860] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:44:33.176 [DEBUG] [Thread-20860] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:44:33.224 [DEBUG] [Thread-20860] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:44:33.224 [DEBUG] [Thread-20860] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:44:33.232 [DEBUG] [Thread-20860] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:44:33.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:44:33.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-11-12T18:44:33.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-11-12T18:44:33.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:44:33.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:44:33.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:44:33.269 [DEBUG] [Thread-20860] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:44:36.672 [DEBUG] [Thread-20862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:44:45.867 [DEBUG] [Thread-20863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:44:51.726 [DEBUG] [Thread-20864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:45:03.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:45:03.292 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:45:03.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-11-12T18:45:03.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 44, 59), 24.71, 19.02, 0.0, 27.88, 23.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:45:03.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:44:59
2025-11-12T18:45:04.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:45:04.211 [DEBUG] [Thread-20865] [transport.py] [_log()] starting thread (client mode): 0x17360250
2025-11-12T18:45:04.211 [DEBUG] [Thread-20865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:45:04.231 [DEBUG] [Thread-20865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:45:04.231 [INFO] [Thread-20865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] client lang: <none>
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] server lang: <none>
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] kex follows: False
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] Compression: none
2025-11-12T18:45:04.234 [DEBUG] [Thread-20865] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:45:04.251 [DEBUG] [Thread-20865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:45:04.252 [DEBUG] [Thread-20865] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:45:04.252 [DEBUG] [Thread-20865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:45:04.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:45:04.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:45:04.255 [DEBUG] [Thread-20865] [transport.py] [_log()] userauth is OK
2025-11-12T18:45:04.255 [DEBUG] [Thread-20865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:45:04.255 [DEBUG] [Thread-20865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:45:04.255 [DEBUG] [Thread-20865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:45:04.255 [DEBUG] [Thread-20865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:45:04.279 [INFO] [Thread-20865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:45:04.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:45:04.436 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:45:04.437 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:45:06.607 [DEBUG] [Thread-20865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:45:06.607 [DEBUG] [Thread-20865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:45:06.608 [DEBUG] [Thread-20865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:45:06.647 [DEBUG] [Thread-20865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:45:06.647 [DEBUG] [Thread-20865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:45:06.651 [DEBUG] [Thread-20865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:45:06.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:45:06.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:45:06.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:45:06.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:45:06.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:45:06.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:45:06.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:45:06.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:45:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:45:06.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.697308 -999.00  +23.10  23.44     24   +2.00 1 2 1 1 1   887    0 16.48 -280.15 ----- 21.1 23.4 266.4 30.8 24.0 -23.3 24.0 -21.8 23.8 -21.3 23.9 -22.5
2025-11-12T18:45:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:45:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:45:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.697308
2025-11-12T18:45:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:45:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:45:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:45:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:45:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:45:06.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:44:59', tmtdew=24.71, humidity=19.02, cloud=0.0, wind=27.88, temperature=23.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:44:07.411', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:45:06.727 [DEBUG] [Thread-20865] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:45:06.756 [DEBUG] [Thread-20868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:45:06.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:45:06.814 [DEBUG] [Thread-20869] [transport.py] [_log()] starting thread (client mode): 0x149a8520
2025-11-12T18:45:06.814 [DEBUG] [Thread-20869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:45:06.830 [DEBUG] [Thread-20869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:45:06.830 [INFO] [Thread-20869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:45:06.837 [DEBUG] [Thread-20869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:45:06.837 [DEBUG] [Thread-20869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:45:06.837 [DEBUG] [Thread-20869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:45:06.837 [DEBUG] [Thread-20869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:45:06.837 [DEBUG] [Thread-20869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:45:06.837 [DEBUG] [Thread-20869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] client lang: <none>
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] server lang: <none>
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] kex follows: False
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] Compression: none
2025-11-12T18:45:06.838 [DEBUG] [Thread-20869] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:45:06.896 [DEBUG] [Thread-20869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:45:06.897 [DEBUG] [Thread-20869] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:45:06.897 [DEBUG] [Thread-20869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:45:06.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:45:06.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:45:06.952 [DEBUG] [Thread-20869] [transport.py] [_log()] userauth is OK
2025-11-12T18:45:06.953 [DEBUG] [Thread-20869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:45:06.953 [DEBUG] [Thread-20869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:45:06.953 [DEBUG] [Thread-20869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:45:06.953 [DEBUG] [Thread-20869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:45:06.972 [INFO] [Thread-20869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:45:06.973 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:45:06.973 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:45:07.805 [DEBUG] [Thread-20869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:45:07.805 [DEBUG] [Thread-20869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:45:07.852 [DEBUG] [Thread-20869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:45:07.853 [DEBUG] [Thread-20869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:45:07.862 [DEBUG] [Thread-20869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:45:07.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:45:07.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-11-12T18:45:07.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-11-12T18:45:07.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:45:07.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:45:07.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:45:07.898 [DEBUG] [Thread-20869] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:45:21.798 [DEBUG] [Thread-20871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:45:36.839 [DEBUG] [Thread-20872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:45:37.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:45:37.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:45:37.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-11-12T18:45:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 45, 31), 24.74, 18.99, 0.0, 30.05, 23.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:45:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:45:31
2025-11-12T18:45:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:45:38.819 [DEBUG] [Thread-20873] [transport.py] [_log()] starting thread (client mode): 0x14957be0
2025-11-12T18:45:38.819 [DEBUG] [Thread-20873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:45:38.839 [DEBUG] [Thread-20873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:45:38.839 [INFO] [Thread-20873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:45:38.842 [DEBUG] [Thread-20873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] client lang: <none>
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] server lang: <none>
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] kex follows: False
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] Compression: none
2025-11-12T18:45:38.843 [DEBUG] [Thread-20873] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:45:38.861 [DEBUG] [Thread-20873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:45:38.861 [DEBUG] [Thread-20873] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:45:38.862 [DEBUG] [Thread-20873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:45:38.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:45:38.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:45:38.864 [DEBUG] [Thread-20873] [transport.py] [_log()] userauth is OK
2025-11-12T18:45:38.864 [DEBUG] [Thread-20873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:45:38.864 [DEBUG] [Thread-20873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:45:38.865 [DEBUG] [Thread-20873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:45:38.865 [DEBUG] [Thread-20873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:45:38.896 [INFO] [Thread-20873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:45:38.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:45:39.532 [DEBUG] [Thread-20873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:45:39.532 [DEBUG] [Thread-20873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:45:39.532 [DEBUG] [Thread-20873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:45:39.573 [DEBUG] [Thread-20873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:45:39.573 [DEBUG] [Thread-20873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:45:39.577 [DEBUG] [Thread-20873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:45:39.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:45:39.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:45:39.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:45:39.593 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:45:39.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:45:39.601 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:45:39.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:45:39.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:45:39.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:45:39.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.697655 -999.00  +23.10  23.51     24   +1.90 1 2 1 1 1   887    0 15.55 -309.49 ----- 16.0 23.5 271.8 34.8 23.9 -23.2 24.0 -21.7 23.7 -21.2 23.9 -22.3
2025-11-12T18:45:39.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:45:39.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:45:39.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.697655
2025-11-12T18:45:39.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:45:39.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:45:39.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:45:39.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:45:39.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:45:39.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:45:31', tmtdew=24.74, humidity=18.99, cloud=0.0, wind=30.05, temperature=23.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:44:37.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:45:39.604 [DEBUG] [Thread-20873] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:45:39.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:45:39.693 [DEBUG] [Thread-20876] [transport.py] [_log()] starting thread (client mode): 0x11f11990
2025-11-12T18:45:39.693 [DEBUG] [Thread-20876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:45:39.708 [DEBUG] [Thread-20876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:45:39.708 [INFO] [Thread-20876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] client lang: <none>
2025-11-12T18:45:39.716 [DEBUG] [Thread-20876] [transport.py] [_log()] server lang: <none>
2025-11-12T18:45:39.717 [DEBUG] [Thread-20876] [transport.py] [_log()] kex follows: False
2025-11-12T18:45:39.717 [DEBUG] [Thread-20876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:45:39.717 [DEBUG] [Thread-20876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:45:39.717 [DEBUG] [Thread-20876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:45:39.717 [DEBUG] [Thread-20876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:45:39.717 [DEBUG] [Thread-20876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:45:39.717 [DEBUG] [Thread-20876] [transport.py] [_log()] Compression: none
2025-11-12T18:45:39.718 [DEBUG] [Thread-20876] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:45:39.777 [DEBUG] [Thread-20876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:45:39.777 [DEBUG] [Thread-20876] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:45:39.778 [DEBUG] [Thread-20876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:45:39.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:45:39.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:45:39.833 [DEBUG] [Thread-20876] [transport.py] [_log()] userauth is OK
2025-11-12T18:45:39.833 [DEBUG] [Thread-20876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:45:39.833 [DEBUG] [Thread-20876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:45:39.833 [DEBUG] [Thread-20876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:45:39.833 [DEBUG] [Thread-20876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:45:39.853 [INFO] [Thread-20876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:45:39.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:45:39.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:45:40.685 [DEBUG] [Thread-20876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:45:40.685 [DEBUG] [Thread-20876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:45:40.733 [DEBUG] [Thread-20876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:45:40.733 [DEBUG] [Thread-20876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:45:40.743 [DEBUG] [Thread-20876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:45:40.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:45:40.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-11-12T18:45:40.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-11-12T18:45:40.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:45:40.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:45:40.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:45:40.779 [DEBUG] [Thread-20876] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:45:45.901 [DEBUG] [Thread-20878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:45:51.870 [DEBUG] [Thread-20879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:46:04.579 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:46:04.580 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:46:06.911 [DEBUG] [Thread-20880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:46:10.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:46:10.797 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:46:10.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-11-12T18:46:11.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 46, 3), 24.7, 19.05, 0.0, 28.21, 23.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:46:11.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:46:03
2025-11-12T18:46:11.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:46:11.695 [DEBUG] [Thread-20881] [transport.py] [_log()] starting thread (client mode): 0x17362800
2025-11-12T18:46:11.695 [DEBUG] [Thread-20881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:46:11.715 [DEBUG] [Thread-20881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:46:11.715 [INFO] [Thread-20881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] client lang: <none>
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] server lang: <none>
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] kex follows: False
2025-11-12T18:46:11.718 [DEBUG] [Thread-20881] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:46:11.719 [DEBUG] [Thread-20881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:46:11.719 [DEBUG] [Thread-20881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:46:11.719 [DEBUG] [Thread-20881] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:46:11.719 [DEBUG] [Thread-20881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:46:11.719 [DEBUG] [Thread-20881] [transport.py] [_log()] Compression: none
2025-11-12T18:46:11.719 [DEBUG] [Thread-20881] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:46:11.739 [DEBUG] [Thread-20881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:46:11.740 [DEBUG] [Thread-20881] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:46:11.741 [DEBUG] [Thread-20881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:46:11.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:46:11.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:46:11.784 [DEBUG] [Thread-20881] [transport.py] [_log()] userauth is OK
2025-11-12T18:46:11.785 [DEBUG] [Thread-20881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:46:11.785 [DEBUG] [Thread-20881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:46:11.785 [DEBUG] [Thread-20881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:46:11.785 [DEBUG] [Thread-20881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:46:11.815 [INFO] [Thread-20881] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:46:11.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:46:12.443 [DEBUG] [Thread-20881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:46:12.443 [DEBUG] [Thread-20881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:46:12.444 [DEBUG] [Thread-20881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:46:12.485 [DEBUG] [Thread-20881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:46:12.485 [DEBUG] [Thread-20881] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:46:12.488 [DEBUG] [Thread-20881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:46:12.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:46:12.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:46:12.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:46:12.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:46:12.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:46:12.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:46:12.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:46:12.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:46:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:46:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.698350 -999.00  +23.20  30.07     24   +2.00 1 2 2 1 1   887    0 15.05 -298.62 ----- 14.1 30.1 265.8 33.0 23.9 -23.1 24.0 -21.6 23.8 -20.9 24.0 -22.4
2025-11-12T18:46:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:46:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:46:12.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.698350
2025-11-12T18:46:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:46:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:46:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:46:12.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:46:12.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:46:12.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:46:03', tmtdew=24.7, humidity=19.05, cloud=0.0, wind=28.21, temperature=23.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:45:37.440', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:46:12.515 [DEBUG] [Thread-20881] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:46:12.598 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:46:12.612 [DEBUG] [Thread-20884] [transport.py] [_log()] starting thread (client mode): 0x149544c0
2025-11-12T18:46:12.612 [DEBUG] [Thread-20884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:46:12.627 [DEBUG] [Thread-20884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:46:12.627 [INFO] [Thread-20884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:46:12.635 [DEBUG] [Thread-20884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:46:12.635 [DEBUG] [Thread-20884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:46:12.635 [DEBUG] [Thread-20884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:46:12.635 [DEBUG] [Thread-20884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:46:12.635 [DEBUG] [Thread-20884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:46:12.635 [DEBUG] [Thread-20884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:46:12.636 [DEBUG] [Thread-20884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:46:12.636 [DEBUG] [Thread-20884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:46:12.636 [DEBUG] [Thread-20884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:46:12.636 [DEBUG] [Thread-20884] [transport.py] [_log()] client lang: <none>
2025-11-12T18:46:12.636 [DEBUG] [Thread-20884] [transport.py] [_log()] server lang: <none>
2025-11-12T18:46:12.636 [DEBUG] [Thread-20884] [transport.py] [_log()] kex follows: False
2025-11-12T18:46:12.636 [DEBUG] [Thread-20884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:46:12.637 [DEBUG] [Thread-20884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:46:12.637 [DEBUG] [Thread-20884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:46:12.637 [DEBUG] [Thread-20884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:46:12.637 [DEBUG] [Thread-20884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:46:12.637 [DEBUG] [Thread-20884] [transport.py] [_log()] Compression: none
2025-11-12T18:46:12.637 [DEBUG] [Thread-20884] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:46:12.692 [DEBUG] [Thread-20884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:46:12.693 [DEBUG] [Thread-20884] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:46:12.694 [DEBUG] [Thread-20884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:46:12.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:46:12.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:46:12.748 [DEBUG] [Thread-20884] [transport.py] [_log()] userauth is OK
2025-11-12T18:46:12.749 [DEBUG] [Thread-20884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:46:12.749 [DEBUG] [Thread-20884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:46:12.749 [DEBUG] [Thread-20884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:46:12.749 [DEBUG] [Thread-20884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:46:12.768 [INFO] [Thread-20884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:46:12.768 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:46:12.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:46:13.616 [DEBUG] [Thread-20884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:46:13.616 [DEBUG] [Thread-20884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:46:13.665 [DEBUG] [Thread-20884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:46:13.665 [DEBUG] [Thread-20884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:46:13.674 [DEBUG] [Thread-20884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:46:13.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:46:13.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-11-12T18:46:13.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-11-12T18:46:13.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:46:13.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:46:13.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:46:13.711 [DEBUG] [Thread-20884] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:46:21.944 [DEBUG] [Thread-20886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:46:36.997 [DEBUG] [Thread-20887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:46:43.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:46:43.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:46:43.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:46:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 46, 37), 24.66, 19.53, 0.0, 29.31, 23.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:46:44.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:46:37
2025-11-12T18:46:44.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:46:44.616 [DEBUG] [Thread-20888] [transport.py] [_log()] starting thread (client mode): 0x14957f10
2025-11-12T18:46:44.616 [DEBUG] [Thread-20888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:46:44.636 [DEBUG] [Thread-20888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:46:44.637 [INFO] [Thread-20888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:46:44.639 [DEBUG] [Thread-20888] [transport.py] [_log()] client lang: <none>
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] server lang: <none>
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] kex follows: False
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] Compression: none
2025-11-12T18:46:44.640 [DEBUG] [Thread-20888] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:46:44.658 [DEBUG] [Thread-20888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:46:44.659 [DEBUG] [Thread-20888] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:46:44.659 [DEBUG] [Thread-20888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:46:44.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:46:44.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:46:44.661 [DEBUG] [Thread-20888] [transport.py] [_log()] userauth is OK
2025-11-12T18:46:44.662 [DEBUG] [Thread-20888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:46:44.662 [DEBUG] [Thread-20888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:46:44.662 [DEBUG] [Thread-20888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:46:44.662 [DEBUG] [Thread-20888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:46:44.700 [INFO] [Thread-20888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:46:44.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:46:45.310 [DEBUG] [Thread-20888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:46:45.310 [DEBUG] [Thread-20888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:46:45.310 [DEBUG] [Thread-20888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:46:45.351 [DEBUG] [Thread-20888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:46:45.351 [DEBUG] [Thread-20888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:46:45.354 [DEBUG] [Thread-20888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:46:45.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:46:45.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:46:45.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:46:45.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:46:45.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:46:45.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:46:45.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:46:45.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:46:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:46:45.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.698697 -999.00  +23.20  20.85     24   +2.00 1 2 1 1 1   887    0 15.75 -277.72 ----- 21.3 20.9 269.4 24.3 23.9 -23.1 24.1 -21.7 23.8 -20.9 24.0 -22.3
2025-11-12T18:46:45.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:46:45.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:46:45.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.698697
2025-11-12T18:46:45.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:46:45.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:46:45.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:46:45.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:46:45.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:46:45.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:46:37', tmtdew=24.66, humidity=19.53, cloud=0.0, wind=29.31, temperature=23.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:46:07.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:46:45.381 [DEBUG] [Thread-20888] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:46:45.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:46:45.491 [DEBUG] [Thread-20891] [transport.py] [_log()] starting thread (client mode): 0x17363340
2025-11-12T18:46:45.491 [DEBUG] [Thread-20891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:46:45.506 [DEBUG] [Thread-20891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:46:45.506 [INFO] [Thread-20891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] client lang: <none>
2025-11-12T18:46:45.514 [DEBUG] [Thread-20891] [transport.py] [_log()] server lang: <none>
2025-11-12T18:46:45.515 [DEBUG] [Thread-20891] [transport.py] [_log()] kex follows: False
2025-11-12T18:46:45.515 [DEBUG] [Thread-20891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:46:45.515 [DEBUG] [Thread-20891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:46:45.515 [DEBUG] [Thread-20891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:46:45.515 [DEBUG] [Thread-20891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:46:45.515 [DEBUG] [Thread-20891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:46:45.515 [DEBUG] [Thread-20891] [transport.py] [_log()] Compression: none
2025-11-12T18:46:45.515 [DEBUG] [Thread-20891] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:46:45.572 [DEBUG] [Thread-20891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:46:45.573 [DEBUG] [Thread-20891] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:46:45.573 [DEBUG] [Thread-20891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:46:45.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:46:45.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:46:45.628 [DEBUG] [Thread-20891] [transport.py] [_log()] userauth is OK
2025-11-12T18:46:45.628 [DEBUG] [Thread-20891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:46:45.629 [DEBUG] [Thread-20891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:46:45.629 [DEBUG] [Thread-20891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:46:45.629 [DEBUG] [Thread-20891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:46:45.648 [INFO] [Thread-20891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:46:45.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:46:45.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:46:45.947 [DEBUG] [Thread-20893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:46:46.502 [DEBUG] [Thread-20891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:46:46.502 [DEBUG] [Thread-20891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:46:46.550 [DEBUG] [Thread-20891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:46:46.550 [DEBUG] [Thread-20891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:46:46.559 [DEBUG] [Thread-20891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:46:46.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:46:46.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-11-12T18:46:46.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-11-12T18:46:46.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:46:46.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:46:46.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:46:46.595 [DEBUG] [Thread-20891] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:46:52.036 [DEBUG] [Thread-20894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:47:04.720 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:47:04.721 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:47:07.082 [DEBUG] [Thread-20895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:47:16.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:47:16.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:47:16.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-11-12T18:47:17.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 47, 9), 24.71, 19.47, 0.0, 30.9, 23.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:47:17.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:47:09
2025-11-12T18:47:17.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:47:17.525 [DEBUG] [Thread-20896] [transport.py] [_log()] starting thread (client mode): 0x17363160
2025-11-12T18:47:17.526 [DEBUG] [Thread-20896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:47:17.545 [DEBUG] [Thread-20896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:47:17.546 [INFO] [Thread-20896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] client lang: <none>
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] server lang: <none>
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] kex follows: False
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] Compression: none
2025-11-12T18:47:17.549 [DEBUG] [Thread-20896] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:47:17.565 [DEBUG] [Thread-20896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:47:17.566 [DEBUG] [Thread-20896] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:47:17.566 [DEBUG] [Thread-20896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:47:17.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:47:17.567 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:47:17.568 [DEBUG] [Thread-20896] [transport.py] [_log()] userauth is OK
2025-11-12T18:47:17.569 [DEBUG] [Thread-20896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:47:17.569 [DEBUG] [Thread-20896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:47:17.569 [DEBUG] [Thread-20896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:47:17.569 [DEBUG] [Thread-20896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:47:17.594 [INFO] [Thread-20896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:47:17.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:47:18.258 [DEBUG] [Thread-20896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:47:18.259 [DEBUG] [Thread-20896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:47:18.268 [DEBUG] [Thread-20896] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:47:18.299 [DEBUG] [Thread-20896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:47:18.300 [DEBUG] [Thread-20896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:47:18.303 [DEBUG] [Thread-20896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:47:18.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:47:18.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:47:18.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:47:18.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:47:18.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:47:18.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:47:18.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:47:18.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:47:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:47:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.699044 -999.00  +23.20  18.80     24   +2.00 1 2 1 1 1   887    0 14.80 -284.69 ----- 17.9 18.8 267.0 31.6 24.0 -23.1 24.1 -21.6 23.9 -21.7 24.1 -22.3
2025-11-12T18:47:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:47:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:47:18.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.699044
2025-11-12T18:47:18.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:47:18.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:47:18.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:47:18.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:47:18.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:47:18.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:47:09', tmtdew=24.71, humidity=19.47, cloud=0.0, wind=30.9, temperature=23.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:46:37.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:47:18.326 [DEBUG] [Thread-20896] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:47:18.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:47:22.115 [DEBUG] [Thread-20899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:47:37.170 [DEBUG] [Thread-20900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:47:45.975 [DEBUG] [Thread-20901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:47:52.207 [DEBUG] [Thread-20902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:48:04.864 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:48:04.866 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:48:07.249 [DEBUG] [Thread-20903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:48:22.281 [DEBUG] [Thread-20904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:48:37.314 [DEBUG] [Thread-20905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:48:46.003 [DEBUG] [Thread-20906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:48:52.351 [DEBUG] [Thread-20907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:49:05.006 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:49:05.008 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:49:07.389 [DEBUG] [Thread-20908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:49:22.425 [DEBUG] [Thread-20909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:49:32.347 [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-11-12T18:49:37.461 [DEBUG] [Thread-20910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:49:46.037 [DEBUG] [Thread-20911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:49:52.493 [DEBUG] [Thread-20912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:50:02.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:50:02.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:50:02.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-11-12T18:50:03.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 49, 49), 24.4, 19.75, 0.0, 31.76, 23.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:50:03.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:49:49
2025-11-12T18:50:03.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:50:03.293 [DEBUG] [Thread-20913] [transport.py] [_log()] starting thread (client mode): 0x173bd600
2025-11-12T18:50:03.293 [DEBUG] [Thread-20913] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:50:03.309 [DEBUG] [Thread-20913] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:50:03.309 [INFO] [Thread-20913] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] client lang: <none>
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] server lang: <none>
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] kex follows: False
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:50:03.312 [DEBUG] [Thread-20913] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:50:03.313 [DEBUG] [Thread-20913] [transport.py] [_log()] Compression: none
2025-11-12T18:50:03.313 [DEBUG] [Thread-20913] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:50:03.331 [DEBUG] [Thread-20913] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:50:03.331 [DEBUG] [Thread-20913] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:50:03.332 [DEBUG] [Thread-20913] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:50:03.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:50:03.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:50:03.334 [DEBUG] [Thread-20913] [transport.py] [_log()] userauth is OK
2025-11-12T18:50:03.334 [DEBUG] [Thread-20913] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:50:03.334 [DEBUG] [Thread-20913] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:50:03.334 [DEBUG] [Thread-20913] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:50:03.334 [DEBUG] [Thread-20913] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:50:03.358 [INFO] [Thread-20913] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:50:03.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:50:05.148 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:50:05.149 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:50:05.438 [DEBUG] [Thread-20913] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:50:05.438 [DEBUG] [Thread-20913] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:50:05.438 [DEBUG] [Thread-20913] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:50:05.479 [DEBUG] [Thread-20913] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:50:05.479 [DEBUG] [Thread-20913] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:50:05.482 [DEBUG] [Thread-20913] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:50:05.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:50:05.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:50:05.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:50:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:50:05.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:50:05.573 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:50:05.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:50:05.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:50:05.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:50:05.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.700780 -999.00  +23.10  12.04     25   +2.20 1 2 1 1 1   887    0 15.17 -281.36 ----- 15.6 12.0 262.6 30.9 24.0 -23.1 24.0 -21.7 23.9 -21.9 24.1 -22.6
2025-11-12T18:50:05.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:50:05.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:50:05.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.700780
2025-11-12T18:50:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:50:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:50:05.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:50:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:50:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:50:05.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:49:49', tmtdew=24.4, humidity=19.75, cloud=0.0, wind=31.76, temperature=23.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:49:07.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:50:05.576 [DEBUG] [Thread-20913] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:50: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-11-12T18:50:05.672 [DEBUG] [Thread-20916] [transport.py] [_log()] starting thread (client mode): 0x149aa8c0
2025-11-12T18:50:05.672 [DEBUG] [Thread-20916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:50:05.688 [DEBUG] [Thread-20916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:50:05.688 [INFO] [Thread-20916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] client lang: <none>
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] server lang: <none>
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] kex follows: False
2025-11-12T18:50:05.696 [DEBUG] [Thread-20916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:50:05.697 [DEBUG] [Thread-20916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:50:05.697 [DEBUG] [Thread-20916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:50:05.697 [DEBUG] [Thread-20916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:50:05.697 [DEBUG] [Thread-20916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:50:05.697 [DEBUG] [Thread-20916] [transport.py] [_log()] Compression: none
2025-11-12T18:50:05.697 [DEBUG] [Thread-20916] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:50:05.756 [DEBUG] [Thread-20916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:50:05.757 [DEBUG] [Thread-20916] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:50:05.757 [DEBUG] [Thread-20916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:50:05.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:50:05.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:50:05.812 [DEBUG] [Thread-20916] [transport.py] [_log()] userauth is OK
2025-11-12T18:50:05.812 [DEBUG] [Thread-20916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:50:05.813 [DEBUG] [Thread-20916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:50:05.813 [DEBUG] [Thread-20916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:50:05.813 [DEBUG] [Thread-20916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:50:05.832 [INFO] [Thread-20916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:50:05.833 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:50:05.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:50:06.649 [DEBUG] [Thread-20916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:50:06.649 [DEBUG] [Thread-20916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:50:06.697 [DEBUG] [Thread-20916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:50:06.697 [DEBUG] [Thread-20916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:50:06.706 [DEBUG] [Thread-20916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:50:06.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:50:06.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:50:06.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-11-12T18:50:06.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:50:06.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:50:06.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:50:06.743 [DEBUG] [Thread-20916] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:50:07.530 [DEBUG] [Thread-20918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:50:22.583 [DEBUG] [Thread-20919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:50:36.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:50:36.758 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:50:36.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:50:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 50, 20), 24.37, 19.77, 0.0, 30.52, 23.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:50:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:50:20
2025-11-12T18:50:37.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:50:37.615 [DEBUG] [Thread-20920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:50:37.669 [DEBUG] [Thread-20921] [transport.py] [_log()] starting thread (client mode): 0x14956aa0
2025-11-12T18:50:37.669 [DEBUG] [Thread-20921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:50:37.690 [DEBUG] [Thread-20921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:50:37.691 [INFO] [Thread-20921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] client lang: <none>
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] server lang: <none>
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] kex follows: False
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] Compression: none
2025-11-12T18:50:37.694 [DEBUG] [Thread-20921] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:50:37.712 [DEBUG] [Thread-20921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:50:37.712 [DEBUG] [Thread-20921] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:50:37.713 [DEBUG] [Thread-20921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:50:37.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:50:37.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:50:37.715 [DEBUG] [Thread-20921] [transport.py] [_log()] userauth is OK
2025-11-12T18:50:37.715 [DEBUG] [Thread-20921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:50:37.715 [DEBUG] [Thread-20921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:50:37.715 [DEBUG] [Thread-20921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:50:37.715 [DEBUG] [Thread-20921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:50:37.739 [INFO] [Thread-20921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:50:37.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:50:38.538 [DEBUG] [Thread-20921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:50:38.539 [DEBUG] [Thread-20921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:50:38.539 [DEBUG] [Thread-20921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:50:38.580 [DEBUG] [Thread-20921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:50:38.580 [DEBUG] [Thread-20921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:50:38.582 [DEBUG] [Thread-20921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:50:38.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:50:38.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:50:38.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:50:38.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:50:38.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:50:38.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:50:38.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:50:38.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:50:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:50:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.701127 -999.00  +23.10  23.77     25   +2.20 1 2 1 1 1   887    0 14.30 -292.59 ----- 24.2 23.8 265.4 28.6 23.9 -23.2 24.0 -21.9 23.9 -21.7 24.1 -22.9
2025-11-12T18:50:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:50:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:50:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.701127
2025-11-12T18:50:38.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:50:38.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:50:38.607 [DEBUG] [Thread-20921] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:50:38.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:50:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:50:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:50:38.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:50:20', tmtdew=24.37, humidity=19.77, cloud=0.0, wind=30.52, temperature=23.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:49:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:50:38.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:50:38.716 [DEBUG] [Thread-20924] [transport.py] [_log()] starting thread (client mode): 0x14955b10
2025-11-12T18:50:38.716 [DEBUG] [Thread-20924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:50:38.731 [DEBUG] [Thread-20924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:50:38.731 [INFO] [Thread-20924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:50:38.738 [DEBUG] [Thread-20924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] client lang: <none>
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] server lang: <none>
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] kex follows: False
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] Compression: none
2025-11-12T18:50:38.739 [DEBUG] [Thread-20924] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:50:38.796 [DEBUG] [Thread-20924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:50:38.797 [DEBUG] [Thread-20924] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:50:38.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:50:38.798 [DEBUG] [Thread-20924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:50:38.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:50:38.852 [DEBUG] [Thread-20924] [transport.py] [_log()] userauth is OK
2025-11-12T18:50:38.852 [DEBUG] [Thread-20924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:50:38.853 [DEBUG] [Thread-20924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:50:38.853 [DEBUG] [Thread-20924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:50:38.853 [DEBUG] [Thread-20924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:50:38.872 [INFO] [Thread-20924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:50:38.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:50:38.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:50:39.720 [DEBUG] [Thread-20924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:50:39.720 [DEBUG] [Thread-20924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:50:39.768 [DEBUG] [Thread-20924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:50:39.768 [DEBUG] [Thread-20924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:50:39.777 [DEBUG] [Thread-20924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:50:39.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:50:39.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:50:39.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-11-12T18:50:39.805 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:50:39.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:50:39.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:50:39.814 [DEBUG] [Thread-20924] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:50:46.090 [DEBUG] [Thread-20926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:50:52.650 [DEBUG] [Thread-20927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:51:05.289 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:51:05.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:51:07.700 [DEBUG] [Thread-20928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:51:09.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:51:09.810 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:51:09.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-11-12T18:51:10.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 50, 52), 24.19, 19.8, 0.0, 31.27, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:51:10.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:50:52
2025-11-12T18:51:10.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:51:10.746 [DEBUG] [Thread-20929] [transport.py] [_log()] starting thread (client mode): 0x14905420
2025-11-12T18:51:10.746 [DEBUG] [Thread-20929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:51:10.765 [DEBUG] [Thread-20929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:51:10.766 [INFO] [Thread-20929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] client lang: <none>
2025-11-12T18:51:10.769 [DEBUG] [Thread-20929] [transport.py] [_log()] server lang: <none>
2025-11-12T18:51:10.770 [DEBUG] [Thread-20929] [transport.py] [_log()] kex follows: False
2025-11-12T18:51:10.770 [DEBUG] [Thread-20929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:51:10.770 [DEBUG] [Thread-20929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:51:10.770 [DEBUG] [Thread-20929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:51:10.770 [DEBUG] [Thread-20929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:51:10.770 [DEBUG] [Thread-20929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:51:10.770 [DEBUG] [Thread-20929] [transport.py] [_log()] Compression: none
2025-11-12T18:51:10.770 [DEBUG] [Thread-20929] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:51:10.787 [DEBUG] [Thread-20929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:51:10.788 [DEBUG] [Thread-20929] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:51:10.788 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:51:10.789 [DEBUG] [Thread-20929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:51:10.790 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:51:10.791 [DEBUG] [Thread-20929] [transport.py] [_log()] userauth is OK
2025-11-12T18:51:10.791 [DEBUG] [Thread-20929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:51:10.791 [DEBUG] [Thread-20929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:51:10.791 [DEBUG] [Thread-20929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:51:10.791 [DEBUG] [Thread-20929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:51:10.806 [INFO] [Thread-20929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:51:10.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:51:11.459 [DEBUG] [Thread-20929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:51:11.459 [DEBUG] [Thread-20929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:51:11.460 [DEBUG] [Thread-20929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:51:11.500 [DEBUG] [Thread-20929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:51:11.500 [DEBUG] [Thread-20929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:51:11.503 [DEBUG] [Thread-20929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:51:11.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:51:11.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:51:11.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:51:11.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:51:11.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:51:11.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:51:11.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:51:11.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:51:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:51:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.701822 -999.00  +23.00  22.36     25   +2.20 1 2 1 1 1   887    0 15.35 -273.87 ----- 33.2 22.4 272.2 34.5 23.9 -23.3 23.9 -21.8 23.8 -21.6 23.9 -22.6
2025-11-12T18:51:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:51:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:51:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.701822
2025-11-12T18:51:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:51:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:51:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:51:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:51:11.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:51:11.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:50:52', tmtdew=24.19, humidity=19.8, cloud=0.0, wind=31.27, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:50:37.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:51:11.531 [DEBUG] [Thread-20929] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:51:11.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:51:11.627 [DEBUG] [Thread-20932] [transport.py] [_log()] starting thread (client mode): 0x14905120
2025-11-12T18:51:11.627 [DEBUG] [Thread-20932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:51:11.642 [DEBUG] [Thread-20932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:51:11.642 [INFO] [Thread-20932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] client lang: <none>
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] server lang: <none>
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] kex follows: False
2025-11-12T18:51:11.650 [DEBUG] [Thread-20932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:51:11.651 [DEBUG] [Thread-20932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:51:11.651 [DEBUG] [Thread-20932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:51:11.651 [DEBUG] [Thread-20932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:51:11.651 [DEBUG] [Thread-20932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:51:11.651 [DEBUG] [Thread-20932] [transport.py] [_log()] Compression: none
2025-11-12T18:51:11.651 [DEBUG] [Thread-20932] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:51:11.708 [DEBUG] [Thread-20932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:51:11.709 [DEBUG] [Thread-20932] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:51:11.709 [DEBUG] [Thread-20932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:51:11.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:51:11.710 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:51:11.764 [DEBUG] [Thread-20932] [transport.py] [_log()] userauth is OK
2025-11-12T18:51:11.764 [DEBUG] [Thread-20932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:51:11.765 [DEBUG] [Thread-20932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:51:11.765 [DEBUG] [Thread-20932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:51:11.765 [DEBUG] [Thread-20932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:51:11.784 [INFO] [Thread-20932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:51:11.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:51:11.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:51:12.651 [DEBUG] [Thread-20932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:51:12.651 [DEBUG] [Thread-20932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:51:12.700 [DEBUG] [Thread-20932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:51:12.700 [DEBUG] [Thread-20932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:51:12.709 [DEBUG] [Thread-20932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:51:12.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:51:12.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:51:12.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-11-12T18:51:12.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:51:12.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:51:12.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:51:12.746 [DEBUG] [Thread-20932] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:51:22.738 [DEBUG] [Thread-20934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:51:37.791 [DEBUG] [Thread-20935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:51:42.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:51:42.769 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:51:42.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-11-12T18:51:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 51, 24), 24.11, 19.93, 0.0, 32.08, 23.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:51:43.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:51:24
2025-11-12T18:51:43.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:51:43.681 [DEBUG] [Thread-20936] [transport.py] [_log()] starting thread (client mode): 0x173bdab0
2025-11-12T18:51:43.681 [DEBUG] [Thread-20936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:51:43.701 [DEBUG] [Thread-20936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:51:43.701 [INFO] [Thread-20936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] client lang: <none>
2025-11-12T18:51:43.704 [DEBUG] [Thread-20936] [transport.py] [_log()] server lang: <none>
2025-11-12T18:51:43.705 [DEBUG] [Thread-20936] [transport.py] [_log()] kex follows: False
2025-11-12T18:51:43.705 [DEBUG] [Thread-20936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:51:43.705 [DEBUG] [Thread-20936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:51:43.705 [DEBUG] [Thread-20936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:51:43.705 [DEBUG] [Thread-20936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:51:43.705 [DEBUG] [Thread-20936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:51:43.705 [DEBUG] [Thread-20936] [transport.py] [_log()] Compression: none
2025-11-12T18:51:43.705 [DEBUG] [Thread-20936] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:51:43.725 [DEBUG] [Thread-20936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:51:43.726 [DEBUG] [Thread-20936] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:51:43.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:51:43.727 [DEBUG] [Thread-20936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:51:43.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:51:43.729 [DEBUG] [Thread-20936] [transport.py] [_log()] userauth is OK
2025-11-12T18:51:43.729 [DEBUG] [Thread-20936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:51:43.729 [DEBUG] [Thread-20936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:51:43.729 [DEBUG] [Thread-20936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:51:43.729 [DEBUG] [Thread-20936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:51:43.754 [INFO] [Thread-20936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:51:43.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:51:44.509 [DEBUG] [Thread-20936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:51:44.510 [DEBUG] [Thread-20936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:51:44.510 [DEBUG] [Thread-20936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:51:44.551 [DEBUG] [Thread-20936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:51:44.551 [DEBUG] [Thread-20936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:51:44.554 [DEBUG] [Thread-20936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:51:44.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:51:44.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:51:44.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:51:44.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:51:44.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:51:44.579 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:51:44.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:51:44.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:51:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:51:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.702169 -999.00  +22.90  16.02     25   +2.20 1 2 1 1 1   887    0 15.67 -266.05 ----- 16.4 16.0 269.4 37.4 23.9 -23.0 23.9 -21.7 23.7 -21.6 23.9 -22.5
2025-11-12T18:51:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:51:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:51:44.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.702169
2025-11-12T18:51:44.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:51:44.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:51:44.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:51:44.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:51:44.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:51:44.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:51:24', tmtdew=24.11, humidity=19.93, cloud=0.0, wind=32.08, temperature=23.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:51:07.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:51:44.582 [DEBUG] [Thread-20936] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:51:44.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:51:44.677 [DEBUG] [Thread-20939] [transport.py] [_log()] starting thread (client mode): 0x149a8490
2025-11-12T18:51:44.677 [DEBUG] [Thread-20939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:51:44.691 [DEBUG] [Thread-20939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:51:44.692 [INFO] [Thread-20939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:51:44.699 [DEBUG] [Thread-20939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:51:44.699 [DEBUG] [Thread-20939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:51:44.699 [DEBUG] [Thread-20939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:51:44.699 [DEBUG] [Thread-20939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:51:44.699 [DEBUG] [Thread-20939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] client lang: <none>
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] server lang: <none>
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] kex follows: False
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] Compression: none
2025-11-12T18:51:44.700 [DEBUG] [Thread-20939] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:51:44.759 [DEBUG] [Thread-20939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:51:44.760 [DEBUG] [Thread-20939] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:51:44.760 [DEBUG] [Thread-20939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:51:44.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:51:44.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:51:44.816 [DEBUG] [Thread-20939] [transport.py] [_log()] userauth is OK
2025-11-12T18:51:44.816 [DEBUG] [Thread-20939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:51:44.817 [DEBUG] [Thread-20939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:51:44.817 [DEBUG] [Thread-20939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:51:44.817 [DEBUG] [Thread-20939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:51:44.838 [INFO] [Thread-20939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:51:44.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:51:44.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:51:45.680 [DEBUG] [Thread-20939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:51:45.681 [DEBUG] [Thread-20939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:51:45.729 [DEBUG] [Thread-20939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:51:45.729 [DEBUG] [Thread-20939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:51:45.738 [DEBUG] [Thread-20939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:51:45.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:51:45.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-11-12T18:51:45.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-11-12T18:51:45.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:51:45.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:51:45.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:51:45.775 [DEBUG] [Thread-20939] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:51:46.135 [DEBUG] [Thread-20941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:51:52.826 [DEBUG] [Thread-20942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:52:05.432 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:52:05.433 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:52:07.879 [DEBUG] [Thread-20943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:52:15.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:52:15.796 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:52:15.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-11-12T18:52:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 51, 56), 24.11, 19.92, 0.0, 27.82, 22.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:52:16.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:51:56
2025-11-12T18:52:16.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:52:16.739 [DEBUG] [Thread-20944] [transport.py] [_log()] starting thread (client mode): 0x149aa560
2025-11-12T18:52:16.740 [DEBUG] [Thread-20944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:52:16.761 [DEBUG] [Thread-20944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:52:16.761 [INFO] [Thread-20944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:52:16.764 [DEBUG] [Thread-20944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] client lang: <none>
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] server lang: <none>
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] kex follows: False
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] Compression: none
2025-11-12T18:52:16.765 [DEBUG] [Thread-20944] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:52:16.782 [DEBUG] [Thread-20944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:52:16.783 [DEBUG] [Thread-20944] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:52:16.783 [DEBUG] [Thread-20944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:52:16.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:52:16.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:52:16.785 [DEBUG] [Thread-20944] [transport.py] [_log()] userauth is OK
2025-11-12T18:52:16.785 [DEBUG] [Thread-20944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:52:16.785 [DEBUG] [Thread-20944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:52:16.785 [DEBUG] [Thread-20944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:52:16.786 [DEBUG] [Thread-20944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:52:16.806 [INFO] [Thread-20944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:52:16.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:52:17.428 [DEBUG] [Thread-20944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:52:17.429 [DEBUG] [Thread-20944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:52:17.429 [DEBUG] [Thread-20944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:52:17.470 [DEBUG] [Thread-20944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:52:17.470 [DEBUG] [Thread-20944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:52:17.473 [DEBUG] [Thread-20944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:52:17.487 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:52:17.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:52:17.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:52:17.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:52:17.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:52:17.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:52:17.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:52:17.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:52:17.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:52:17.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.702516 -999.00  +22.90  19.66     25   +2.20 1 2 1 1 1   887    0 14.65 -287.81 ----- 18.7 19.7 282.9 26.2 23.8 -23.1 23.8 -21.8 23.6 -21.4 23.9 -22.4
2025-11-12T18:52:17.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:52:17.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:52:17.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.702516
2025-11-12T18:52:17.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:52:17.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:52:17.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:52:17.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:52:17.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:52:17.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:51:56', tmtdew=24.11, humidity=19.92, cloud=0.0, wind=27.82, temperature=22.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:51:37.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:52:17.501 [DEBUG] [Thread-20944] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:52:17.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:52:17.596 [DEBUG] [Thread-20947] [transport.py] [_log()] starting thread (client mode): 0x173bf4c0
2025-11-12T18:52:17.597 [DEBUG] [Thread-20947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:52:17.615 [DEBUG] [Thread-20947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:52:17.616 [INFO] [Thread-20947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] client lang: <none>
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] server lang: <none>
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] kex follows: False
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] Compression: none
2025-11-12T18:52:17.626 [DEBUG] [Thread-20947] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:52:17.683 [DEBUG] [Thread-20947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:52:17.684 [DEBUG] [Thread-20947] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:52:17.685 [DEBUG] [Thread-20947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:52:17.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:52:17.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:52:17.740 [DEBUG] [Thread-20947] [transport.py] [_log()] userauth is OK
2025-11-12T18:52:17.740 [DEBUG] [Thread-20947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:52:17.741 [DEBUG] [Thread-20947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:52:17.741 [DEBUG] [Thread-20947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:52:17.741 [DEBUG] [Thread-20947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:52:17.759 [INFO] [Thread-20947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:52:17.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:52:17.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:52:18.598 [DEBUG] [Thread-20947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:52:18.598 [DEBUG] [Thread-20947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:52:18.646 [DEBUG] [Thread-20947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:52:18.646 [DEBUG] [Thread-20947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:52:18.655 [DEBUG] [Thread-20947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:52:18.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:52:18.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-11-12T18:52: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-11-12T18:52:18.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:52:18.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:52:18.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:52:18.692 [DEBUG] [Thread-20947] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:52:22.912 [DEBUG] [Thread-20949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:52:37.963 [DEBUG] [Thread-20950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:52:46.168 [DEBUG] [Thread-20951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:52:48.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:52:48.690 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:52:48.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-11-12T18:52:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 52, 28), 24.03, 20.03, 0.0, 28.49, 22.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:52:49.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:52:28
2025-11-12T18:52:49.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:52:49.650 [DEBUG] [Thread-20952] [transport.py] [_log()] starting thread (client mode): 0x149a68f0
2025-11-12T18:52:49.650 [DEBUG] [Thread-20952] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:52:49.670 [DEBUG] [Thread-20952] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:52:49.670 [INFO] [Thread-20952] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:52:49.673 [DEBUG] [Thread-20952] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:52:49.673 [DEBUG] [Thread-20952] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:52:49.673 [DEBUG] [Thread-20952] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:52:49.673 [DEBUG] [Thread-20952] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:52:49.673 [DEBUG] [Thread-20952] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:52:49.673 [DEBUG] [Thread-20952] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] client lang: <none>
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] server lang: <none>
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] kex follows: False
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] Compression: none
2025-11-12T18:52:49.674 [DEBUG] [Thread-20952] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:52:49.681 [DEBUG] [Thread-20952] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:52:49.681 [DEBUG] [Thread-20952] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:52:49.681 [DEBUG] [Thread-20952] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:52:49.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:52:49.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:52:49.682 [DEBUG] [Thread-20952] [transport.py] [_log()] userauth is OK
2025-11-12T18:52:49.682 [DEBUG] [Thread-20952] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:52:49.682 [DEBUG] [Thread-20952] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:52:49.682 [DEBUG] [Thread-20952] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:52:49.682 [DEBUG] [Thread-20952] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:52:49.691 [INFO] [Thread-20952] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:52:49.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:52:50.488 [DEBUG] [Thread-20952] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:52:50.488 [DEBUG] [Thread-20952] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:52:50.489 [DEBUG] [Thread-20952] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:52:50.529 [DEBUG] [Thread-20952] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:52:50.529 [DEBUG] [Thread-20952] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:52:50.531 [DEBUG] [Thread-20952] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:52:50.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:52:50.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:52:50.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:52:50.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:52:50.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:52:50.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:52:50.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.702863 -999.00  +22.90  17.01     25   +2.20 1 2 1 1 1   887    0 13.62 -301.53 ----- 25.9 17.0 268.1 31.0 23.8 -23.0 23.8 -21.7 23.6 -21.8 23.8 -22.3
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.702863
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:52:50.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:52:28', tmtdew=24.03, humidity=20.03, cloud=0.0, wind=28.49, temperature=22.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:52:07.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:52:50.549 [DEBUG] [Thread-20952] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:52:50.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:52:50.635 [DEBUG] [Thread-20955] [transport.py] [_log()] starting thread (client mode): 0x14906710
2025-11-12T18:52:50.635 [DEBUG] [Thread-20955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:52:50.650 [DEBUG] [Thread-20955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:52:50.650 [INFO] [Thread-20955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:52:50.657 [DEBUG] [Thread-20955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] client lang: <none>
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] server lang: <none>
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] kex follows: False
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] Compression: none
2025-11-12T18:52:50.658 [DEBUG] [Thread-20955] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:52:50.715 [DEBUG] [Thread-20955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:52:50.715 [DEBUG] [Thread-20955] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:52:50.715 [DEBUG] [Thread-20955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:52:50.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:52:50.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:52:50.771 [DEBUG] [Thread-20955] [transport.py] [_log()] userauth is OK
2025-11-12T18:52:50.771 [DEBUG] [Thread-20955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:52:50.772 [DEBUG] [Thread-20955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:52:50.772 [DEBUG] [Thread-20955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:52:50.772 [DEBUG] [Thread-20955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:52:50.790 [INFO] [Thread-20955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:52:50.790 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:52:50.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:52:51.631 [DEBUG] [Thread-20955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:52:51.632 [DEBUG] [Thread-20955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:52:51.679 [DEBUG] [Thread-20955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:52:51.679 [DEBUG] [Thread-20955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:52:51.688 [DEBUG] [Thread-20955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:52:51.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:52:51.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-11-12T18:52:51.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-11-12T18:52:51.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:52:51.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:52:51.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:52:51.721 [DEBUG] [Thread-20955] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:52:52.996 [DEBUG] [Thread-20957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:53:05.575 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:53:05.576 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:53:08.034 [DEBUG] [Thread-20958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:53:21.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:53:21.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:53:21.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-11-12T18:53:22.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 53), 23.92, 20.05, 0.0, 30.31, 22.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:53:22.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:53:00
2025-11-12T18:53:22.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:53:22.664 [DEBUG] [Thread-20959] [transport.py] [_log()] starting thread (client mode): 0x173bdb40
2025-11-12T18:53:22.664 [DEBUG] [Thread-20959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:53:22.683 [DEBUG] [Thread-20959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:53:22.683 [INFO] [Thread-20959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:53:22.686 [DEBUG] [Thread-20959] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] client lang: <none>
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] server lang: <none>
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] kex follows: False
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] Compression: none
2025-11-12T18:53:22.687 [DEBUG] [Thread-20959] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:53:22.704 [DEBUG] [Thread-20959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:53:22.704 [DEBUG] [Thread-20959] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:53:22.705 [DEBUG] [Thread-20959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:53:22.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:53:22.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:53:22.707 [DEBUG] [Thread-20959] [transport.py] [_log()] userauth is OK
2025-11-12T18:53:22.707 [DEBUG] [Thread-20959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:53:22.707 [DEBUG] [Thread-20959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:53:22.707 [DEBUG] [Thread-20959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:53:22.707 [DEBUG] [Thread-20959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:53:22.730 [INFO] [Thread-20959] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:53:22.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:53:23.073 [DEBUG] [Thread-20961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:53:23.376 [DEBUG] [Thread-20959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:53:23.376 [DEBUG] [Thread-20959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:53:23.377 [DEBUG] [Thread-20959] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:53:23.417 [DEBUG] [Thread-20959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:53:23.417 [DEBUG] [Thread-20959] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:53:23.420 [DEBUG] [Thread-20959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:53:23.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:53:23.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:53:23.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:53:23.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:53:23.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:53:23.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:53:23.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:53:23.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:53:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:53:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.703211 -999.00  +22.80  13.38     25   +2.20 1 2 1 1 1   887    0 13.19 -320.45 ----- 10.8 13.4 272.7 31.4 23.8 -22.8 23.8 -21.4 23.5 -21.3 23.8 -22.2
2025-11-12T18:53:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:53:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:53:23.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.703211
2025-11-12T18:53:23.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:53:23.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:53:23.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:53:23.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:53:23.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:53:23.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:53:00', tmtdew=23.92, humidity=20.05, cloud=0.0, wind=30.31, temperature=22.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:52:37.430', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:53:23.445 [DEBUG] [Thread-20959] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:53:23.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:53:23.544 [DEBUG] [Thread-20963] [transport.py] [_log()] starting thread (client mode): 0x17362800
2025-11-12T18:53:23.544 [DEBUG] [Thread-20963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:53:23.558 [DEBUG] [Thread-20963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:53:23.558 [INFO] [Thread-20963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:53:23.565 [DEBUG] [Thread-20963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:53:23.565 [DEBUG] [Thread-20963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] client lang: <none>
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] server lang: <none>
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] kex follows: False
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] Compression: none
2025-11-12T18:53:23.566 [DEBUG] [Thread-20963] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:53:23.623 [DEBUG] [Thread-20963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:53:23.623 [DEBUG] [Thread-20963] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:53:23.624 [DEBUG] [Thread-20963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:53:23.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:53:23.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:53:23.680 [DEBUG] [Thread-20963] [transport.py] [_log()] userauth is OK
2025-11-12T18:53:23.680 [DEBUG] [Thread-20963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:53:23.680 [DEBUG] [Thread-20963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:53:23.680 [DEBUG] [Thread-20963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:53:23.680 [DEBUG] [Thread-20963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:53:23.699 [INFO] [Thread-20963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:53:23.699 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:53:23.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:53:24.545 [DEBUG] [Thread-20963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:53:24.546 [DEBUG] [Thread-20963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:53:24.593 [DEBUG] [Thread-20963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:53:24.593 [DEBUG] [Thread-20963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:53:24.602 [DEBUG] [Thread-20963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:53:24.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:53:24.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-11-12T18:53:24.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-11-12T18:53:24.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:53:24.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:53:24.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:53:24.639 [DEBUG] [Thread-20963] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:53:38.104 [DEBUG] [Thread-20965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:53:46.202 [DEBUG] [Thread-20966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:53:53.170 [DEBUG] [Thread-20967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:53:54.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:53:54.637 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:53:54.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-11-12T18:53:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 53, 32), 23.88, 20.1, 0.0, 29.82, 22.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:53:55.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:53:32
2025-11-12T18:53:55.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:53:55.560 [DEBUG] [Thread-20968] [transport.py] [_log()] starting thread (client mode): 0x17360b50
2025-11-12T18:53:55.560 [DEBUG] [Thread-20968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:53:55.581 [DEBUG] [Thread-20968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:53:55.582 [INFO] [Thread-20968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:53:55.584 [DEBUG] [Thread-20968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:53:55.584 [DEBUG] [Thread-20968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] client lang: <none>
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] server lang: <none>
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] kex follows: False
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] Compression: none
2025-11-12T18:53:55.585 [DEBUG] [Thread-20968] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:53:55.602 [DEBUG] [Thread-20968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:53:55.603 [DEBUG] [Thread-20968] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:53:55.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:53:55.604 [DEBUG] [Thread-20968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:53:55.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:53:55.606 [DEBUG] [Thread-20968] [transport.py] [_log()] userauth is OK
2025-11-12T18:53:55.606 [DEBUG] [Thread-20968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:53:55.606 [DEBUG] [Thread-20968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:53:55.606 [DEBUG] [Thread-20968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:53:55.606 [DEBUG] [Thread-20968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:53:55.631 [INFO] [Thread-20968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:53:55.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:53:56.381 [DEBUG] [Thread-20968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:53:56.381 [DEBUG] [Thread-20968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:53:56.382 [DEBUG] [Thread-20968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:53:56.422 [DEBUG] [Thread-20968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:53:56.422 [DEBUG] [Thread-20968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:53:56.425 [DEBUG] [Thread-20968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:53:56.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:53:56.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:53:56.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:53:56.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:53:56.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:53:56.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:53:56.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:53:56.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:53:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:53:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.703558 -999.00  +22.80  19.74     25   +2.20 1 2 1 1 1   887    0 13.71 -311.56 ----- 17.6 19.7 282.8 25.1 23.7 -22.7 23.8 -21.5 23.5 -21.2 23.7 -22.3
2025-11-12T18:53:56.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:53:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:53:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.703558
2025-11-12T18:53:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:53:56.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:53:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:53:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:53:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:53:56.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:53:32', tmtdew=23.88, humidity=20.1, cloud=0.0, wind=29.82, temperature=22.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:53:07.411', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:53:56.448 [DEBUG] [Thread-20968] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:53:56.535 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:53:56.547 [DEBUG] [Thread-20971] [transport.py] [_log()] starting thread (client mode): 0x14914070
2025-11-12T18:53:56.547 [DEBUG] [Thread-20971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:53:56.562 [DEBUG] [Thread-20971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:53:56.562 [INFO] [Thread-20971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:53:56.569 [DEBUG] [Thread-20971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:53:56.569 [DEBUG] [Thread-20971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:53:56.569 [DEBUG] [Thread-20971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:53:56.569 [DEBUG] [Thread-20971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:53:56.569 [DEBUG] [Thread-20971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:53:56.569 [DEBUG] [Thread-20971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:53:56.569 [DEBUG] [Thread-20971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] client lang: <none>
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] server lang: <none>
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] kex follows: False
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] Compression: none
2025-11-12T18:53:56.570 [DEBUG] [Thread-20971] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:53:56.628 [DEBUG] [Thread-20971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:53:56.629 [DEBUG] [Thread-20971] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:53:56.629 [DEBUG] [Thread-20971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:53:56.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:53:56.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:53:56.688 [DEBUG] [Thread-20971] [transport.py] [_log()] userauth is OK
2025-11-12T18:53:56.688 [DEBUG] [Thread-20971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:53:56.688 [DEBUG] [Thread-20971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:53:56.689 [DEBUG] [Thread-20971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:53:56.689 [DEBUG] [Thread-20971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:53:56.712 [INFO] [Thread-20971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:53:56.713 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:53:56.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:53:57.545 [DEBUG] [Thread-20971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:53:57.545 [DEBUG] [Thread-20971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:53:57.593 [DEBUG] [Thread-20971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:53:57.594 [DEBUG] [Thread-20971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:53:57.603 [DEBUG] [Thread-20971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:53:57.612 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:53:57.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-11-12T18:53:57.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T18:53:57.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:53:57.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:53:57.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:53:57.640 [DEBUG] [Thread-20971] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:54:05.717 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:54:05.718 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:54:08.204 [DEBUG] [Thread-20973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:54:23.255 [DEBUG] [Thread-20974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:54:27.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:54:27.663 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:54:27.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-11-12T18:54:28.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 54, 4), 23.87, 20.1, 0.0, 27.95, 22.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:54:28.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:54:04
2025-11-12T18:54:28.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:54:28.573 [DEBUG] [Thread-20975] [transport.py] [_log()] starting thread (client mode): 0x14954190
2025-11-12T18:54:28.573 [DEBUG] [Thread-20975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:54:28.595 [DEBUG] [Thread-20975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:54:28.595 [INFO] [Thread-20975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:54:28.598 [DEBUG] [Thread-20975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:54:28.598 [DEBUG] [Thread-20975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:54:28.598 [DEBUG] [Thread-20975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:54:28.598 [DEBUG] [Thread-20975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] client lang: <none>
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] server lang: <none>
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] kex follows: False
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] Compression: none
2025-11-12T18:54:28.599 [DEBUG] [Thread-20975] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:54:28.616 [DEBUG] [Thread-20975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:54:28.616 [DEBUG] [Thread-20975] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:54:28.617 [DEBUG] [Thread-20975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:54:28.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:54:28.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:54:28.619 [DEBUG] [Thread-20975] [transport.py] [_log()] userauth is OK
2025-11-12T18:54:28.619 [DEBUG] [Thread-20975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:54:28.619 [DEBUG] [Thread-20975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:54:28.619 [DEBUG] [Thread-20975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:54:28.619 [DEBUG] [Thread-20975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:54:28.636 [INFO] [Thread-20975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:54:28.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:54:29.288 [DEBUG] [Thread-20975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:54:29.289 [DEBUG] [Thread-20975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:54:29.289 [DEBUG] [Thread-20975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:54:29.330 [DEBUG] [Thread-20975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:54:29.330 [DEBUG] [Thread-20975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:54:29.333 [DEBUG] [Thread-20975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:54:29.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:54:29.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:54:29.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:54:29.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:54:29.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:54:29.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:54:29.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:54:29.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:54:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:54:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.703905 -999.00  +22.80  16.21     25   +2.20 1 2 1 1 1   887    0 13.75 -306.47 ----- 16.4 16.2 269.6 29.2 23.7 -22.9 23.7 -21.5 23.4 -21.4 23.7 -22.2
2025-11-12T18:54:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:54:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:54:29.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.703905
2025-11-12T18:54:29.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:54:29.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:54:29.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:54:29.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:54:29.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:54:29.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:54:04', tmtdew=23.87, humidity=20.1, cloud=0.0, wind=27.95, temperature=22.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:53:37.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:54:29.360 [DEBUG] [Thread-20975] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:54:29.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:54:29.456 [DEBUG] [Thread-20978] [transport.py] [_log()] starting thread (client mode): 0x14957ee0
2025-11-12T18:54:29.457 [DEBUG] [Thread-20978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:54:29.472 [DEBUG] [Thread-20978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:54:29.472 [INFO] [Thread-20978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:54:29.479 [DEBUG] [Thread-20978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:54:29.479 [DEBUG] [Thread-20978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] client lang: <none>
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] server lang: <none>
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] kex follows: False
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] Compression: none
2025-11-12T18:54:29.480 [DEBUG] [Thread-20978] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:54:29.537 [DEBUG] [Thread-20978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:54:29.537 [DEBUG] [Thread-20978] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:54:29.537 [DEBUG] [Thread-20978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:54:29.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:54:29.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:54:29.600 [DEBUG] [Thread-20978] [transport.py] [_log()] userauth is OK
2025-11-12T18:54:29.600 [DEBUG] [Thread-20978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:54:29.600 [DEBUG] [Thread-20978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:54:29.600 [DEBUG] [Thread-20978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:54:29.600 [DEBUG] [Thread-20978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:54:29.621 [INFO] [Thread-20978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:54:29.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:54:29.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:54:30.450 [DEBUG] [Thread-20978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:54:30.451 [DEBUG] [Thread-20978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:54:30.498 [DEBUG] [Thread-20978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:54:30.499 [DEBUG] [Thread-20978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:54:30.508 [DEBUG] [Thread-20978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:54:30.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:54:30.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-11-12T18:54:30.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-11-12T18:54:30.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:54:30.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:54:30.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:54:30.543 [DEBUG] [Thread-20978] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:54:38.291 [DEBUG] [Thread-20980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:54:46.238 [DEBUG] [Thread-20981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:54:53.328 [DEBUG] [Thread-20982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:55:00.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:55:00.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:55:00.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-11-12T18:55:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 54, 36), 23.78, 20.58, 0.0, 26.17, 22.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:55:01.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:54:36
2025-11-12T18:55:01.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:55:01.450 [DEBUG] [Thread-20983] [transport.py] [_log()] starting thread (client mode): 0x149a7d90
2025-11-12T18:55:01.450 [DEBUG] [Thread-20983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:55:01.470 [DEBUG] [Thread-20983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:55:01.470 [INFO] [Thread-20983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] client lang: <none>
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] server lang: <none>
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] kex follows: False
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:55:01.473 [DEBUG] [Thread-20983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:55:01.474 [DEBUG] [Thread-20983] [transport.py] [_log()] Compression: none
2025-11-12T18:55:01.474 [DEBUG] [Thread-20983] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:55:01.491 [DEBUG] [Thread-20983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:55:01.491 [DEBUG] [Thread-20983] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:55:01.492 [DEBUG] [Thread-20983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:55:01.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:55:01.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:55:01.494 [DEBUG] [Thread-20983] [transport.py] [_log()] userauth is OK
2025-11-12T18:55:01.494 [DEBUG] [Thread-20983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:55:01.494 [DEBUG] [Thread-20983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:55:01.494 [DEBUG] [Thread-20983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:55:01.494 [DEBUG] [Thread-20983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:55:01.511 [INFO] [Thread-20983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:55:01.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:55:02.301 [DEBUG] [Thread-20983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:55:02.302 [DEBUG] [Thread-20983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:55:02.302 [DEBUG] [Thread-20983] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:55:02.342 [DEBUG] [Thread-20983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:55:02.343 [DEBUG] [Thread-20983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:55:02.346 [DEBUG] [Thread-20983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:55:02.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:55:02.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:55:02.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:55:02.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:55:02.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:55:02.370 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:55:02.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:55:02.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:55:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:55:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.704252 -999.00  +22.70  23.29     26   +2.20 1 2 1 1 1   887    0 13.05 -317.05 ----- 24.1 23.3 271.4 29.3 23.7 -22.8 23.7 -21.5 23.4 -21.4 23.6 -22.2
2025-11-12T18:55:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:55:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:55:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.704252
2025-11-12T18:55:02.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:55:02.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:55:02.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:55:02.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:55:02.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:55:02.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:54:36', tmtdew=23.78, humidity=20.58, cloud=0.0, wind=26.17, temperature=22.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:54:07.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:55:02.373 [DEBUG] [Thread-20983] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:55:02.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:55:02.468 [DEBUG] [Thread-20986] [transport.py] [_log()] starting thread (client mode): 0x149a6530
2025-11-12T18:55:02.468 [DEBUG] [Thread-20986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:55:02.485 [DEBUG] [Thread-20986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:55:02.485 [INFO] [Thread-20986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:55:02.492 [DEBUG] [Thread-20986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:55:02.492 [DEBUG] [Thread-20986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] client lang: <none>
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] server lang: <none>
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] kex follows: False
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] Compression: none
2025-11-12T18:55:02.493 [DEBUG] [Thread-20986] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:55:02.554 [DEBUG] [Thread-20986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:55:02.554 [DEBUG] [Thread-20986] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:55:02.555 [DEBUG] [Thread-20986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:55:02.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:55:02.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:55:02.613 [DEBUG] [Thread-20986] [transport.py] [_log()] userauth is OK
2025-11-12T18:55:02.613 [DEBUG] [Thread-20986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:55:02.613 [DEBUG] [Thread-20986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:55:02.613 [DEBUG] [Thread-20986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:55:02.613 [DEBUG] [Thread-20986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:55:02.632 [INFO] [Thread-20986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:55:02.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:55:02.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:55:03.500 [DEBUG] [Thread-20986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:55:03.500 [DEBUG] [Thread-20986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:55:03.549 [DEBUG] [Thread-20986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:55:03.549 [DEBUG] [Thread-20986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:55:03.558 [DEBUG] [Thread-20986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:55:03.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:55:03.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-11-12T18:55:03.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-11-12T18:55:03.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:55:03.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:55:03.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:55:03.595 [DEBUG] [Thread-20986] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:55:05.858 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:55:05.859 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:55:08.366 [DEBUG] [Thread-20988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:55:23.417 [DEBUG] [Thread-20989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:55:33.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:55:33.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:55:33.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:55:34.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 55, 8), 23.79, 20.56, 0.0, 31.94, 22.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:55:34.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:55:08
2025-11-12T18:55:34.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:55:34.554 [DEBUG] [Thread-20990] [transport.py] [_log()] starting thread (client mode): 0x149a6e00
2025-11-12T18:55:34.554 [DEBUG] [Thread-20990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:55:34.574 [DEBUG] [Thread-20990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:55:34.574 [INFO] [Thread-20990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:55:34.577 [DEBUG] [Thread-20990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] client lang: <none>
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] server lang: <none>
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] kex follows: False
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:55:34.578 [DEBUG] [Thread-20990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:55:34.579 [DEBUG] [Thread-20990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:55:34.579 [DEBUG] [Thread-20990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:55:34.579 [DEBUG] [Thread-20990] [transport.py] [_log()] Compression: none
2025-11-12T18:55:34.579 [DEBUG] [Thread-20990] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:55:34.597 [DEBUG] [Thread-20990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:55:34.597 [DEBUG] [Thread-20990] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:55:34.598 [DEBUG] [Thread-20990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:55:34.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:55:34.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:55:34.599 [DEBUG] [Thread-20990] [transport.py] [_log()] userauth is OK
2025-11-12T18:55:34.600 [DEBUG] [Thread-20990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:55:34.600 [DEBUG] [Thread-20990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:55:34.600 [DEBUG] [Thread-20990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:55:34.600 [DEBUG] [Thread-20990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:55:34.623 [INFO] [Thread-20990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:55:34.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:55:35.236 [DEBUG] [Thread-20990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:55:35.236 [DEBUG] [Thread-20990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:55:35.236 [DEBUG] [Thread-20990] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:55:35.277 [DEBUG] [Thread-20990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:55:35.277 [DEBUG] [Thread-20990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:55:35.280 [DEBUG] [Thread-20990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:55:35.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:55:35.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:55:35.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:55:35.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:55:35.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:55:35.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:55:35.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:55:35.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:55:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:55:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.704600 -999.00  +22.70  18.66     26   +2.20 1 2 1 1 1   887    0 13.12 -320.28 ----- 35.7 18.7 270.3 37.4 23.6 -22.8 23.6 -21.6 23.4 -21.1 23.6 -22.2
2025-11-12T18:55:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:55:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:55:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.704600
2025-11-12T18:55:35.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:55:35.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:55:35.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:55:35.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:55:35.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:55:35.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:55:08', tmtdew=23.79, humidity=20.56, cloud=0.0, wind=31.94, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:54:37.440', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:55:35.304 [DEBUG] [Thread-20990] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:55:35.395 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:55:35.408 [DEBUG] [Thread-20993] [transport.py] [_log()] starting thread (client mode): 0x173bd8d0
2025-11-12T18:55:35.408 [DEBUG] [Thread-20993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:55:35.422 [DEBUG] [Thread-20993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:55:35.422 [INFO] [Thread-20993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] client lang: <none>
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] server lang: <none>
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] kex follows: False
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:55:35.430 [DEBUG] [Thread-20993] [transport.py] [_log()] Compression: none
2025-11-12T18:55:35.431 [DEBUG] [Thread-20993] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:55:35.489 [DEBUG] [Thread-20993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:55:35.490 [DEBUG] [Thread-20993] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:55:35.490 [DEBUG] [Thread-20993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:55:35.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:55:35.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:55:35.548 [DEBUG] [Thread-20993] [transport.py] [_log()] userauth is OK
2025-11-12T18:55:35.548 [DEBUG] [Thread-20993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:55:35.549 [DEBUG] [Thread-20993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:55:35.549 [DEBUG] [Thread-20993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:55:35.549 [DEBUG] [Thread-20993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:55:35.570 [INFO] [Thread-20993] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:55:35.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:55:35.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:55:36.423 [DEBUG] [Thread-20993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:55:36.423 [DEBUG] [Thread-20993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:55:36.471 [DEBUG] [Thread-20993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:55:36.471 [DEBUG] [Thread-20993] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:55:36.480 [DEBUG] [Thread-20993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:55:36.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:55:36.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-11-12T18:55:36.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-11-12T18:55:36.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:55:36.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:55:36.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:55:36.514 [DEBUG] [Thread-20993] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:55:38.442 [DEBUG] [Thread-20995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:55:46.279 [DEBUG] [Thread-20996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:55:53.486 [DEBUG] [Thread-20997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:56:06.003 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:56:06.003 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:56:06.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:56:06.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:56:06.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-11-12T18:56:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 55, 40), 23.79, 20.63, 0.0, 30.56, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:56:07.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:55:40
2025-11-12T18:56:07.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:56:07.511 [DEBUG] [Thread-20998] [transport.py] [_log()] starting thread (client mode): 0x173bd5a0
2025-11-12T18:56:07.511 [DEBUG] [Thread-20998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:56:07.531 [DEBUG] [Thread-20998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:56:07.531 [INFO] [Thread-20998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] client lang: <none>
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] server lang: <none>
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] kex follows: False
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:56:07.534 [DEBUG] [Thread-20998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:56:07.535 [DEBUG] [Thread-20998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:56:07.535 [DEBUG] [Thread-20998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:56:07.535 [DEBUG] [Thread-20998] [transport.py] [_log()] Compression: none
2025-11-12T18:56:07.535 [DEBUG] [Thread-20998] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:56:07.552 [DEBUG] [Thread-20998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:56:07.553 [DEBUG] [Thread-20998] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:56:07.553 [DEBUG] [Thread-20998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:56:07.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:56:07.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:56:07.554 [DEBUG] [Thread-20998] [transport.py] [_log()] userauth is OK
2025-11-12T18:56:07.554 [DEBUG] [Thread-20998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:56:07.554 [DEBUG] [Thread-20998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:56:07.554 [DEBUG] [Thread-20998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:56:07.554 [DEBUG] [Thread-20998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:56:07.566 [INFO] [Thread-20998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:56:07.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:56:08.185 [DEBUG] [Thread-20998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:56:08.186 [DEBUG] [Thread-20998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:56:08.186 [DEBUG] [Thread-20998] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:56:08.226 [DEBUG] [Thread-20998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:56:08.227 [DEBUG] [Thread-20998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:56:08.230 [DEBUG] [Thread-20998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:56:08.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:56:08.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:56:08.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:56:08.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:56:08.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:56:08.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:56:08.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:56:08.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:56:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:56:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.705294 -999.00  +22.70   9.89     26   +2.20 1 2 1 1 1   887    0 11.90 -329.27 ----- 26.8 9.9 276.6 22.6 23.5 -22.8 23.6 -21.3 23.3 -20.8 23.5 -21.9
2025-11-12T18:56:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:56:08.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:56:08.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.705294
2025-11-12T18:56:08.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:56:08.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:56:08.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:56:08.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:56:08.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:56:08.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:55:40', tmtdew=23.79, humidity=20.63, cloud=0.0, wind=30.56, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:55:37.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:56:08.256 [DEBUG] [Thread-20998] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:56:08.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:56:08.351 [DEBUG] [Thread-21001] [transport.py] [_log()] starting thread (client mode): 0x14915bd0
2025-11-12T18:56:08.351 [DEBUG] [Thread-21001] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:56:08.366 [DEBUG] [Thread-21001] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:56:08.367 [INFO] [Thread-21001] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:56:08.374 [DEBUG] [Thread-21001] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:56:08.374 [DEBUG] [Thread-21001] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:56:08.374 [DEBUG] [Thread-21001] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:56:08.374 [DEBUG] [Thread-21001] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] client lang: <none>
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] server lang: <none>
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] kex follows: False
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] Compression: none
2025-11-12T18:56:08.375 [DEBUG] [Thread-21001] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:56:08.436 [DEBUG] [Thread-21001] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:56:08.437 [DEBUG] [Thread-21001] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:56:08.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:56:08.438 [DEBUG] [Thread-21001] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:56:08.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:56:08.492 [DEBUG] [Thread-21001] [transport.py] [_log()] userauth is OK
2025-11-12T18:56:08.493 [DEBUG] [Thread-21001] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:56:08.493 [DEBUG] [Thread-21001] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:56:08.493 [DEBUG] [Thread-21001] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:56:08.493 [DEBUG] [Thread-21001] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:56:08.512 [INFO] [Thread-21001] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:56:08.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:56:08.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:56:08.519 [DEBUG] [Thread-21003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:56:09.417 [DEBUG] [Thread-21001] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:56:09.417 [DEBUG] [Thread-21001] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:56:09.465 [DEBUG] [Thread-21001] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:56:09.465 [DEBUG] [Thread-21001] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:56:09.474 [DEBUG] [Thread-21001] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:56:09.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:56:09.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-11-12T18:56:09.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-11-12T18:56:09.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:56:09.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:56:09.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:56:09.511 [DEBUG] [Thread-21001] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:56:23.577 [DEBUG] [Thread-21004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:56:38.617 [DEBUG] [Thread-21005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:56:39.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:56:39.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:56:39.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:56:40.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 56, 12), 23.79, 20.63, 0.0, 33.4, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:56:40.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:56:12
2025-11-12T18:56:40.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:56:40.420 [DEBUG] [Thread-21006] [transport.py] [_log()] starting thread (client mode): 0x14907220
2025-11-12T18:56:40.420 [DEBUG] [Thread-21006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:56:40.440 [DEBUG] [Thread-21006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:56:40.440 [INFO] [Thread-21006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:56:40.443 [DEBUG] [Thread-21006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] client lang: <none>
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] server lang: <none>
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] kex follows: False
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] Compression: none
2025-11-12T18:56:40.444 [DEBUG] [Thread-21006] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:56:40.460 [DEBUG] [Thread-21006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:56:40.460 [DEBUG] [Thread-21006] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:56:40.461 [DEBUG] [Thread-21006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:56:40.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:56:40.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:56:40.465 [DEBUG] [Thread-21006] [transport.py] [_log()] userauth is OK
2025-11-12T18:56:40.465 [DEBUG] [Thread-21006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:56:40.466 [DEBUG] [Thread-21006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:56:40.466 [DEBUG] [Thread-21006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:56:40.466 [DEBUG] [Thread-21006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:56:40.490 [INFO] [Thread-21006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:56:40.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:56:41.148 [DEBUG] [Thread-21006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:56:41.148 [DEBUG] [Thread-21006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:56:41.148 [DEBUG] [Thread-21006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:56:41.189 [DEBUG] [Thread-21006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:56:41.189 [DEBUG] [Thread-21006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:56:41.191 [DEBUG] [Thread-21006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:56:41.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:56:41.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:56:41.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:56:41.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:56:41.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:56:41.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:56:41.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:56:41.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:56:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:56:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.705642 -999.00  +22.60  22.14     26   +2.30 1 2 1 1 1   887    0 12.58 -303.29 ----- 20.1 22.1 271.4 37.3 23.5 -22.4 23.6 -21.2 23.2 -21.1 23.4 -21.9
2025-11-12T18:56:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:56:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:56:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.705642
2025-11-12T18:56:41.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:56:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:56:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:56:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:56:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:56:41.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:56:12', tmtdew=23.79, humidity=20.63, cloud=0.0, wind=33.4, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:56:07.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:56:41.210 [DEBUG] [Thread-21006] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:56:41.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:56:41.296 [DEBUG] [Thread-21009] [transport.py] [_log()] starting thread (client mode): 0x14915f30
2025-11-12T18:56:41.296 [DEBUG] [Thread-21009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:56:41.312 [DEBUG] [Thread-21009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:56:41.312 [INFO] [Thread-21009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:56:41.319 [DEBUG] [Thread-21009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:56:41.319 [DEBUG] [Thread-21009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:56:41.319 [DEBUG] [Thread-21009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:56:41.319 [DEBUG] [Thread-21009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:56:41.319 [DEBUG] [Thread-21009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:56:41.319 [DEBUG] [Thread-21009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] client lang: <none>
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] server lang: <none>
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] kex follows: False
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] Compression: none
2025-11-12T18:56:41.320 [DEBUG] [Thread-21009] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:56:41.375 [DEBUG] [Thread-21009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:56:41.375 [DEBUG] [Thread-21009] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:56:41.375 [DEBUG] [Thread-21009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:56:41.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:56:41.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:56:41.432 [DEBUG] [Thread-21009] [transport.py] [_log()] userauth is OK
2025-11-12T18:56:41.432 [DEBUG] [Thread-21009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:56:41.432 [DEBUG] [Thread-21009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:56:41.432 [DEBUG] [Thread-21009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:56:41.432 [DEBUG] [Thread-21009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:56:41.446 [INFO] [Thread-21009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:56:41.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:56:41.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:56:42.288 [DEBUG] [Thread-21009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:56:42.288 [DEBUG] [Thread-21009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:56:42.336 [DEBUG] [Thread-21009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:56:42.336 [DEBUG] [Thread-21009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:56:42.344 [DEBUG] [Thread-21009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:56:42.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:56:42.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:56:42.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-11-12T18:56:42.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:56:42.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:56:42.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:56:42.376 [DEBUG] [Thread-21009] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:56:46.309 [DEBUG] [Thread-21011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:56:53.651 [DEBUG] [Thread-21012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:57:06.156 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:57:06.157 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:57:08.707 [DEBUG] [Thread-21013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:57:12.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:57:12.399 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:57:12.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:57:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 56, 44), 23.71, 20.68, 0.0, 30.45, 22.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:57:13.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:56:44
2025-11-12T18:57:13.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:57:13.325 [DEBUG] [Thread-21014] [transport.py] [_log()] starting thread (client mode): 0x173bc730
2025-11-12T18:57:13.325 [DEBUG] [Thread-21014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:57:13.345 [DEBUG] [Thread-21014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:57:13.346 [INFO] [Thread-21014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] client lang: <none>
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] server lang: <none>
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] kex follows: False
2025-11-12T18:57:13.346 [DEBUG] [Thread-21014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:57:13.347 [DEBUG] [Thread-21014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:57:13.347 [DEBUG] [Thread-21014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:57:13.347 [DEBUG] [Thread-21014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:57:13.347 [DEBUG] [Thread-21014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:57:13.347 [DEBUG] [Thread-21014] [transport.py] [_log()] Compression: none
2025-11-12T18:57:13.347 [DEBUG] [Thread-21014] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:57:13.364 [DEBUG] [Thread-21014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:57:13.365 [DEBUG] [Thread-21014] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:57:13.365 [DEBUG] [Thread-21014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:57:13.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:57:13.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:57:13.367 [DEBUG] [Thread-21014] [transport.py] [_log()] userauth is OK
2025-11-12T18:57:13.368 [DEBUG] [Thread-21014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:57:13.368 [DEBUG] [Thread-21014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:57:13.368 [DEBUG] [Thread-21014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:57:13.368 [DEBUG] [Thread-21014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:57:13.393 [INFO] [Thread-21014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:57:13.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:57:14.024 [DEBUG] [Thread-21014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:57:14.025 [DEBUG] [Thread-21014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:57:14.025 [DEBUG] [Thread-21014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:57:14.066 [DEBUG] [Thread-21014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:57:14.066 [DEBUG] [Thread-21014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:57:14.070 [DEBUG] [Thread-21014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:57:14.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:57:14.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:57:14.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:57:14.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:57:14.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:57:14.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:57:14.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:57:14.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:57:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:57:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.705988 -999.00  +22.60  26.62     26   +2.30 1 2 1 1 1   887    0 13.39 -300.01 ----- 20.1 26.6 267.6 28.7 23.5 -22.4 23.5 -21.1 23.2 -20.7 23.5 -21.8
2025-11-12T18:57:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:57:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:57:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.705988
2025-11-12T18:57:14.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:57:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:57:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:57:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:57:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:57:14.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:56:44', tmtdew=23.71, humidity=20.68, cloud=0.0, wind=30.45, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:56:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:57:14.097 [DEBUG] [Thread-21014] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:57:14.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:57:14.192 [DEBUG] [Thread-21017] [transport.py] [_log()] starting thread (client mode): 0x173bdb40
2025-11-12T18:57:14.192 [DEBUG] [Thread-21017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:57:14.206 [DEBUG] [Thread-21017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:57:14.206 [INFO] [Thread-21017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:57:14.214 [DEBUG] [Thread-21017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:57:14.214 [DEBUG] [Thread-21017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:57:14.215 [DEBUG] [Thread-21017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:57:14.215 [DEBUG] [Thread-21017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:57:14.215 [DEBUG] [Thread-21017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:57:14.215 [DEBUG] [Thread-21017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:57:14.215 [DEBUG] [Thread-21017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:57:14.215 [DEBUG] [Thread-21017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:57:14.215 [DEBUG] [Thread-21017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] client lang: <none>
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] server lang: <none>
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] kex follows: False
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] Compression: none
2025-11-12T18:57:14.216 [DEBUG] [Thread-21017] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:57:14.273 [DEBUG] [Thread-21017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:57:14.274 [DEBUG] [Thread-21017] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:57:14.274 [DEBUG] [Thread-21017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:57:14.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:57:14.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:57:14.329 [DEBUG] [Thread-21017] [transport.py] [_log()] userauth is OK
2025-11-12T18:57:14.329 [DEBUG] [Thread-21017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:57:14.329 [DEBUG] [Thread-21017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:57:14.329 [DEBUG] [Thread-21017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:57:14.330 [DEBUG] [Thread-21017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:57:14.348 [INFO] [Thread-21017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:57:14.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:57:14.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:57:15.201 [DEBUG] [Thread-21017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:57:15.201 [DEBUG] [Thread-21017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:57:15.249 [DEBUG] [Thread-21017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:57:15.250 [DEBUG] [Thread-21017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:57:15.258 [DEBUG] [Thread-21017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:57:15.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:57:15.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-11-12T18:57:15.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-11-12T18:57:15.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:57:15.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:57:15.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:57:15.293 [DEBUG] [Thread-21017] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:57:23.738 [DEBUG] [Thread-21019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:57:38.779 [DEBUG] [Thread-21020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:57:45.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:57:45.316 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:57:45.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-11-12T18:57:45.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 57, 16), 23.73, 20.63, 0.0, 28.23, 22.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:57:45.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:57:16
2025-11-12T18:57:46.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:57:46.217 [DEBUG] [Thread-21021] [transport.py] [_log()] starting thread (client mode): 0x149553c0
2025-11-12T18:57:46.217 [DEBUG] [Thread-21021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:57:46.236 [DEBUG] [Thread-21021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:57:46.237 [INFO] [Thread-21021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] client lang: <none>
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] server lang: <none>
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] kex follows: False
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] Compression: none
2025-11-12T18:57:46.240 [DEBUG] [Thread-21021] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:57:46.257 [DEBUG] [Thread-21021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:57:46.258 [DEBUG] [Thread-21021] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:57:46.258 [DEBUG] [Thread-21021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:57:46.258 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:57:46.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:57:46.260 [DEBUG] [Thread-21021] [transport.py] [_log()] userauth is OK
2025-11-12T18:57:46.261 [DEBUG] [Thread-21021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:57:46.261 [DEBUG] [Thread-21021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:57:46.261 [DEBUG] [Thread-21021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:57:46.261 [DEBUG] [Thread-21021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:57:46.286 [INFO] [Thread-21021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:57:46.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:57:46.363 [DEBUG] [Thread-21023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:57:46.928 [DEBUG] [Thread-21021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:57:46.928 [DEBUG] [Thread-21021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:57:46.929 [DEBUG] [Thread-21021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:57:46.970 [DEBUG] [Thread-21021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:57:46.970 [DEBUG] [Thread-21021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:57:46.973 [DEBUG] [Thread-21021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:57:46.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:57:46.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:57:46.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:57:46.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:57:46.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:57:46.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:57:46.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:57:46.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:57:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:57:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.706336 -999.00  +22.60  29.87     26   +2.30 1 2 1 1 1   887    0 13.28 -296.87 ----- 22.1 29.9 265.6 36.0 23.5 -22.4 23.5 -21.1 23.2 -21.1 23.5 -21.9
2025-11-12T18:57:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:57:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:57:46.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.706336
2025-11-12T18:57:47.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:57:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:57:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:57:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:57:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:57:47.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:57:16', tmtdew=23.73, humidity=20.63, cloud=0.0, wind=28.23, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:57:07.430', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:57:47.001 [DEBUG] [Thread-21021] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:57:47.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:57:47.096 [DEBUG] [Thread-21025] [transport.py] [_log()] starting thread (client mode): 0x14957700
2025-11-12T18:57:47.096 [DEBUG] [Thread-21025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:57:47.110 [DEBUG] [Thread-21025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:57:47.110 [INFO] [Thread-21025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:57:47.117 [DEBUG] [Thread-21025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:57:47.118 [DEBUG] [Thread-21025] [transport.py] [_log()] client lang: <none>
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] server lang: <none>
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] kex follows: False
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] Compression: none
2025-11-12T18:57:47.119 [DEBUG] [Thread-21025] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:57:47.177 [DEBUG] [Thread-21025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:57:47.178 [DEBUG] [Thread-21025] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:57:47.179 [DEBUG] [Thread-21025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:57:47.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:57:47.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:57:47.236 [DEBUG] [Thread-21025] [transport.py] [_log()] userauth is OK
2025-11-12T18:57:47.236 [DEBUG] [Thread-21025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:57:47.237 [DEBUG] [Thread-21025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:57:47.237 [DEBUG] [Thread-21025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:57:47.237 [DEBUG] [Thread-21025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:57:47.256 [INFO] [Thread-21025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:57:47.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:57:47.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:57:48.126 [DEBUG] [Thread-21025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:57:48.126 [DEBUG] [Thread-21025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:57:48.174 [DEBUG] [Thread-21025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:57:48.175 [DEBUG] [Thread-21025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:57:48.184 [DEBUG] [Thread-21025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:57:48.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:57:48.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-11-12T18:57:48.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-11-12T18:57:48.210 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:57:48.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:57:48.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:57:48.218 [DEBUG] [Thread-21025] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:57:53.815 [DEBUG] [Thread-21027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:58:06.299 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:58:06.300 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:58:08.865 [DEBUG] [Thread-21028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:58:18.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:58:18.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:58:18.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-11-12T18:58:18.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 57, 48), 23.73, 20.65, 0.0, 28.99, 22.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:58:18.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:57:48
2025-11-12T18:58:18.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:58:19.132 [DEBUG] [Thread-21029] [transport.py] [_log()] starting thread (client mode): 0x14917e20
2025-11-12T18:58:19.132 [DEBUG] [Thread-21029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:58:19.152 [DEBUG] [Thread-21029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:58:19.152 [INFO] [Thread-21029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:58:19.155 [DEBUG] [Thread-21029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:58:19.155 [DEBUG] [Thread-21029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:58:19.155 [DEBUG] [Thread-21029] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:58:19.155 [DEBUG] [Thread-21029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:58:19.155 [DEBUG] [Thread-21029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:58:19.155 [DEBUG] [Thread-21029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] client lang: <none>
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] server lang: <none>
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] kex follows: False
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:58:19.156 [DEBUG] [Thread-21029] [transport.py] [_log()] Compression: none
2025-11-12T18:58:19.157 [DEBUG] [Thread-21029] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:58:19.176 [DEBUG] [Thread-21029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:58:19.177 [DEBUG] [Thread-21029] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:58:19.177 [DEBUG] [Thread-21029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:58:19.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:58:19.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:58:19.179 [DEBUG] [Thread-21029] [transport.py] [_log()] userauth is OK
2025-11-12T18:58:19.179 [DEBUG] [Thread-21029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:58:19.179 [DEBUG] [Thread-21029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:58:19.179 [DEBUG] [Thread-21029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:58:19.180 [DEBUG] [Thread-21029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:58:19.215 [INFO] [Thread-21029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:58:19.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:58:19.861 [DEBUG] [Thread-21029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:58:19.861 [DEBUG] [Thread-21029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:58:19.862 [DEBUG] [Thread-21029] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:58:19.903 [DEBUG] [Thread-21029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:58:19.903 [DEBUG] [Thread-21029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:58:19.906 [DEBUG] [Thread-21029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:58:19.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:58:19.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:58:19.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:58:19.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:58:19.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:58:19.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:58:19.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:58:19.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:58:19.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:58:19.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.706683 -999.00  +22.60  19.67     26   +2.30 1 2 1 1 1   887    0 12.68 -316.95 ----- 18.0 19.7 261.2 28.9 23.4 -22.3 23.4 -21.2 23.2 -20.5 23.5 -21.8
2025-11-12T18:58:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:58:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:58:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.706683
2025-11-12T18:58:19.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:58:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:58:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:58:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:58:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:58:19.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:57:48', tmtdew=23.73, humidity=20.65, cloud=0.0, wind=28.99, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:57:37.411', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:58:19.934 [DEBUG] [Thread-21029] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:58:20.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:58:20.022 [DEBUG] [Thread-21032] [transport.py] [_log()] starting thread (client mode): 0x149aa7a0
2025-11-12T18:58:20.023 [DEBUG] [Thread-21032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:58:20.037 [DEBUG] [Thread-21032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:58:20.037 [INFO] [Thread-21032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:58:20.045 [DEBUG] [Thread-21032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:58:20.045 [DEBUG] [Thread-21032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:58:20.045 [DEBUG] [Thread-21032] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:58:20.045 [DEBUG] [Thread-21032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] client lang: <none>
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] server lang: <none>
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] kex follows: False
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:58:20.046 [DEBUG] [Thread-21032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:58:20.047 [DEBUG] [Thread-21032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:58:20.047 [DEBUG] [Thread-21032] [transport.py] [_log()] Compression: none
2025-11-12T18:58:20.047 [DEBUG] [Thread-21032] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:58:20.105 [DEBUG] [Thread-21032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:58:20.106 [DEBUG] [Thread-21032] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:58:20.106 [DEBUG] [Thread-21032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:58:20.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:58:20.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:58:20.161 [DEBUG] [Thread-21032] [transport.py] [_log()] userauth is OK
2025-11-12T18:58:20.161 [DEBUG] [Thread-21032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:58:20.161 [DEBUG] [Thread-21032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:58:20.161 [DEBUG] [Thread-21032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:58:20.162 [DEBUG] [Thread-21032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:58:20.187 [INFO] [Thread-21032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:58:20.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:58:20.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:58:21.046 [DEBUG] [Thread-21032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:58:21.046 [DEBUG] [Thread-21032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:58:21.094 [DEBUG] [Thread-21032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:58:21.094 [DEBUG] [Thread-21032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:58:21.102 [DEBUG] [Thread-21032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:58:21.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:58:21.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-11-12T18:58:21.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-11-12T18:58:21.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:58:21.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:58:21.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:58:21.132 [DEBUG] [Thread-21032] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:58:23.904 [DEBUG] [Thread-21034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:58:38.954 [DEBUG] [Thread-21035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:58:46.405 [DEBUG] [Thread-21036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:58:51.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:58:51.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:58:51.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-11-12T18:58:51.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 58, 20), 23.71, 20.68, 0.0, 28.74, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:58:51.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:58:20
2025-11-12T18:58:51.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:58:52.058 [DEBUG] [Thread-21037] [transport.py] [_log()] starting thread (client mode): 0x14917af0
2025-11-12T18:58:52.058 [DEBUG] [Thread-21037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:58:52.079 [DEBUG] [Thread-21037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:58:52.079 [INFO] [Thread-21037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:58:52.082 [DEBUG] [Thread-21037] [transport.py] [_log()] client lang: <none>
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] server lang: <none>
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] kex follows: False
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] Compression: none
2025-11-12T18:58:52.083 [DEBUG] [Thread-21037] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:58:52.100 [DEBUG] [Thread-21037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:58:52.101 [DEBUG] [Thread-21037] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:58:52.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:58:52.102 [DEBUG] [Thread-21037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:58:52.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:58:52.104 [DEBUG] [Thread-21037] [transport.py] [_log()] userauth is OK
2025-11-12T18:58:52.104 [DEBUG] [Thread-21037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:58:52.105 [DEBUG] [Thread-21037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:58:52.105 [DEBUG] [Thread-21037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:58:52.105 [DEBUG] [Thread-21037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:58:52.140 [INFO] [Thread-21037] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:58:52.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:58:52.766 [DEBUG] [Thread-21037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:58:52.766 [DEBUG] [Thread-21037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:58:52.766 [DEBUG] [Thread-21037] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:58:52.807 [DEBUG] [Thread-21037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:58:52.807 [DEBUG] [Thread-21037] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:58:52.810 [DEBUG] [Thread-21037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:58:52.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:58:52.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:58:52.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:58:52.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:58:52.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:58:52.835 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:58:52.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:58:52.835 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:58:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:58:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.707030 -999.00  +22.60  27.36     26   +2.20 1 2 1 1 1   887    0 13.24 -307.14 ----- 28.6 27.4 267.0 33.0 23.4 -22.4 23.5 -21.1 23.2 -21.0 23.4 -21.8
2025-11-12T18:58:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:58:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:58:52.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.707030
2025-11-12T18:58:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:58:52.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:58:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:58:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:58:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:58:52.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:58:20', tmtdew=23.71, humidity=20.68, cloud=0.0, wind=28.74, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:58:07.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:58:52.838 [DEBUG] [Thread-21037] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:58:52.921 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:58:52.934 [DEBUG] [Thread-21040] [transport.py] [_log()] starting thread (client mode): 0x14916740
2025-11-12T18:58:52.934 [DEBUG] [Thread-21040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:58:52.949 [DEBUG] [Thread-21040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:58:52.949 [INFO] [Thread-21040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] client lang: <none>
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] server lang: <none>
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] kex follows: False
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:58:52.956 [DEBUG] [Thread-21040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:58:52.957 [DEBUG] [Thread-21040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:58:52.957 [DEBUG] [Thread-21040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:58:52.957 [DEBUG] [Thread-21040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:58:52.957 [DEBUG] [Thread-21040] [transport.py] [_log()] Compression: none
2025-11-12T18:58:52.957 [DEBUG] [Thread-21040] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:58:53.016 [DEBUG] [Thread-21040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:58:53.017 [DEBUG] [Thread-21040] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:58:53.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:58:53.018 [DEBUG] [Thread-21040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:58:53.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:58:53.072 [DEBUG] [Thread-21040] [transport.py] [_log()] userauth is OK
2025-11-12T18:58:53.072 [DEBUG] [Thread-21040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:58:53.072 [DEBUG] [Thread-21040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:58:53.072 [DEBUG] [Thread-21040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:58:53.072 [DEBUG] [Thread-21040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:58:53.090 [INFO] [Thread-21040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:58:53.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:58:53.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:58:53.927 [DEBUG] [Thread-21040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:58:53.927 [DEBUG] [Thread-21040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:58:53.975 [DEBUG] [Thread-21040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:58:53.975 [DEBUG] [Thread-21040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:58:53.983 [DEBUG] [Thread-21040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:58:53.987 [DEBUG] [Thread-21042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:58:53.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:58:53.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T18:58:53.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-11-12T18:58:54.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:58:54.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:58:54.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:58:54.014 [DEBUG] [Thread-21040] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:59:06.441 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:59:06.442 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:59:09.027 [DEBUG] [Thread-21043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:59:24.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:59:24.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:59:24.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-11-12T18:59:24.060 [DEBUG] [Thread-21044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:59:24.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 58, 52), 23.78, 20.65, 0.0, 25.78, 22.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:59:24.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:58:52
2025-11-12T18:59:24.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:59:24.939 [DEBUG] [Thread-21045] [transport.py] [_log()] starting thread (client mode): 0x14914970
2025-11-12T18:59:24.939 [DEBUG] [Thread-21045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:59:24.959 [DEBUG] [Thread-21045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:59:24.959 [INFO] [Thread-21045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:59:24.962 [DEBUG] [Thread-21045] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:59:24.962 [DEBUG] [Thread-21045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:59:24.962 [DEBUG] [Thread-21045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:59:24.962 [DEBUG] [Thread-21045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:59:24.962 [DEBUG] [Thread-21045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] client lang: <none>
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] server lang: <none>
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] kex follows: False
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:59:24.963 [DEBUG] [Thread-21045] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:59:24.964 [DEBUG] [Thread-21045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:59:24.964 [DEBUG] [Thread-21045] [transport.py] [_log()] Compression: none
2025-11-12T18:59:24.964 [DEBUG] [Thread-21045] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:59:24.980 [DEBUG] [Thread-21045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:59:24.980 [DEBUG] [Thread-21045] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:59:24.980 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:59:24.981 [DEBUG] [Thread-21045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:59:24.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:59:25.024 [DEBUG] [Thread-21045] [transport.py] [_log()] userauth is OK
2025-11-12T18:59:25.024 [DEBUG] [Thread-21045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:59:25.024 [DEBUG] [Thread-21045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:59:25.024 [DEBUG] [Thread-21045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:59:25.024 [DEBUG] [Thread-21045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:59:25.055 [INFO] [Thread-21045] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:59:25.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:59:25.684 [DEBUG] [Thread-21045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:59:25.684 [DEBUG] [Thread-21045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:59:25.684 [DEBUG] [Thread-21045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:59:25.725 [DEBUG] [Thread-21045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:59:25.725 [DEBUG] [Thread-21045] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:59:25.727 [DEBUG] [Thread-21045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:59:25.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:59:25.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:59:25.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:59:25.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:59:25.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:59:25.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:59:25.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:59:25.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:59:25.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.707377 -999.00  +22.60  19.38     26   +2.30 1 2 1 1 1   887    0 12.68 -318.68 ----- 14.2 19.4 267.2 31.4 23.4 -22.2 23.5 -21.0 23.2 -20.9 23.4 -21.8
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.707377
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:59:25.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:58:52', tmtdew=23.78, humidity=20.65, cloud=0.0, wind=25.78, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:58:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:59:25.746 [DEBUG] [Thread-21045] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:59:25.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:59:25.832 [DEBUG] [Thread-21048] [transport.py] [_log()] starting thread (client mode): 0x149172e0
2025-11-12T18:59:25.832 [DEBUG] [Thread-21048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:59:25.846 [DEBUG] [Thread-21048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:59:25.846 [INFO] [Thread-21048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] client lang: <none>
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] server lang: <none>
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] kex follows: False
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] Compression: none
2025-11-12T18:59:25.854 [DEBUG] [Thread-21048] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:59:25.911 [DEBUG] [Thread-21048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:59:25.911 [DEBUG] [Thread-21048] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:59:25.911 [DEBUG] [Thread-21048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:59:25.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:59:25.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:59:25.968 [DEBUG] [Thread-21048] [transport.py] [_log()] userauth is OK
2025-11-12T18:59:25.968 [DEBUG] [Thread-21048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:59:25.968 [DEBUG] [Thread-21048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:59:25.968 [DEBUG] [Thread-21048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:59:25.968 [DEBUG] [Thread-21048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:59:25.982 [INFO] [Thread-21048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:59:25.982 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:59:25.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:59:26.822 [DEBUG] [Thread-21048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:59:26.822 [DEBUG] [Thread-21048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:59:26.870 [DEBUG] [Thread-21048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:59:26.870 [DEBUG] [Thread-21048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:59:26.879 [DEBUG] [Thread-21048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:59:26.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:59:26.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-11-12T18:59:26.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-11-12T18:59:26.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:59:26.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:59:26.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:59:26.912 [DEBUG] [Thread-21048] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:59:39.093 [DEBUG] [Thread-21050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:59:46.457 [DEBUG] [Thread-21051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:59:54.136 [DEBUG] [Thread-21052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T18:59:56.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T18:59:56.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T18:59:56.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T18:59:57.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 59, 24), 23.74, 20.71, 0.0, 27.31, 22.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T18:59:57.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:59:24
2025-11-12T18:59:57.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T18:59:57.913 [DEBUG] [Thread-21053] [transport.py] [_log()] starting thread (client mode): 0x14914eb0
2025-11-12T18:59:57.913 [DEBUG] [Thread-21053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:59:57.933 [DEBUG] [Thread-21053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T18:59:57.933 [INFO] [Thread-21053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T18:59:57.936 [DEBUG] [Thread-21053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] client lang: <none>
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] server lang: <none>
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] kex follows: False
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] Compression: none
2025-11-12T18:59:57.937 [DEBUG] [Thread-21053] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:59:57.951 [DEBUG] [Thread-21053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:59:57.951 [DEBUG] [Thread-21053] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:59:57.951 [DEBUG] [Thread-21053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T18:59:57.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T18:59:57.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:59:57.952 [DEBUG] [Thread-21053] [transport.py] [_log()] userauth is OK
2025-11-12T18:59:57.952 [DEBUG] [Thread-21053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:59:57.952 [DEBUG] [Thread-21053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:59:57.952 [DEBUG] [Thread-21053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T18:59:57.952 [DEBUG] [Thread-21053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:59:57.967 [INFO] [Thread-21053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:59:57.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:59:58.575 [DEBUG] [Thread-21053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:59:58.576 [DEBUG] [Thread-21053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:59:58.576 [DEBUG] [Thread-21053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T18:59:58.616 [DEBUG] [Thread-21053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:59:58.616 [DEBUG] [Thread-21053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:59:58.619 [DEBUG] [Thread-21053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:59:58.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:59:58.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T18:59:58.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T18:59:58.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T18:59:58.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:59:58.638 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T18:59:58.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.707724 -999.00  +22.60  21.43     26   +2.30 1 2 1 1 1   887    0 12.71 -303.58 ----- 21.2 21.4 260.0 33.4 23.4 -22.4 23.4 -21.0 23.2 -20.9 23.4 -21.8
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.707724
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T18:59:58.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T18:59:58.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T18:59:58.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:59:24', tmtdew=23.74, humidity=20.71, cloud=0.0, wind=27.31, temperature=22.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:59:07.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T18:59:58.639 [DEBUG] [Thread-21053] [transport.py] [_log()] EOF in transport thread
2025-11-12T18:59:58.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T18:59:58.726 [DEBUG] [Thread-21056] [transport.py] [_log()] starting thread (client mode): 0x149aa8c0
2025-11-12T18:59:58.726 [DEBUG] [Thread-21056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T18:59:58.740 [DEBUG] [Thread-21056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T18:59:58.741 [INFO] [Thread-21056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T18:59:58.748 [DEBUG] [Thread-21056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] client lang: <none>
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] server lang: <none>
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] kex follows: False
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] Compression: none
2025-11-12T18:59:58.749 [DEBUG] [Thread-21056] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T18:59:58.804 [DEBUG] [Thread-21056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T18:59:58.804 [DEBUG] [Thread-21056] [transport.py] [_log()] Switch to new keys ...
2025-11-12T18:59:58.804 [DEBUG] [Thread-21056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T18:59:58.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T18:59:58.804 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T18:59:58.860 [DEBUG] [Thread-21056] [transport.py] [_log()] userauth is OK
2025-11-12T18:59:58.860 [DEBUG] [Thread-21056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T18:59:58.860 [DEBUG] [Thread-21056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T18:59:58.860 [DEBUG] [Thread-21056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T18:59:58.860 [DEBUG] [Thread-21056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T18:59:58.874 [INFO] [Thread-21056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T18:59:58.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T18:59:58.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T18:59:59.753 [DEBUG] [Thread-21056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T18:59:59.754 [DEBUG] [Thread-21056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T18:59:59.802 [DEBUG] [Thread-21056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T18:59:59.802 [DEBUG] [Thread-21056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T18:59:59.811 [DEBUG] [Thread-21056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T18:59:59.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T18:59:59.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-11-12T18:59:59.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-11-12T18:59:59.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T18:59:59.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T18:59:59.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T18:59:59.847 [DEBUG] [Thread-21056] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:00:06.584 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:00:06.585 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:00:09.169 [DEBUG] [Thread-21058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:00:24.225 [DEBUG] [Thread-21059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:00:29.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:00:29.869 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:00:29.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-11-12T19:00:30.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 18, 59, 56), 23.66, 20.68, 0.0, 30.65, 22.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:00:30.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 18:59:56
2025-11-12T19:00:30.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:00:30.831 [DEBUG] [Thread-21060] [transport.py] [_log()] starting thread (client mode): 0x14915360
2025-11-12T19:00:30.831 [DEBUG] [Thread-21060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:00:30.851 [DEBUG] [Thread-21060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:00:30.851 [INFO] [Thread-21060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:00:30.854 [DEBUG] [Thread-21060] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:00:30.854 [DEBUG] [Thread-21060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] client lang: <none>
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] server lang: <none>
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] kex follows: False
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] Compression: none
2025-11-12T19:00:30.855 [DEBUG] [Thread-21060] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:00:30.871 [DEBUG] [Thread-21060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:00:30.871 [DEBUG] [Thread-21060] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:00:30.871 [DEBUG] [Thread-21060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:00:30.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:00:30.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:00:30.871 [DEBUG] [Thread-21060] [transport.py] [_log()] userauth is OK
2025-11-12T19:00:30.871 [DEBUG] [Thread-21060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:00:30.871 [DEBUG] [Thread-21060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:00:30.871 [DEBUG] [Thread-21060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:00:30.871 [DEBUG] [Thread-21060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:00:30.880 [INFO] [Thread-21060] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:00:30.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:00:31.501 [DEBUG] [Thread-21060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:00:31.501 [DEBUG] [Thread-21060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:00:31.501 [DEBUG] [Thread-21060] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:00:31.542 [DEBUG] [Thread-21060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:00:31.542 [DEBUG] [Thread-21060] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:00:31.545 [DEBUG] [Thread-21060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:00:31.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:00:31.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:00:31.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:00:31.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:00:31.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:00:31.560 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:00:31.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:00:31.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:00:31.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:00:31.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.708072 -999.00  +22.60  18.57     26   +2.30 1 2 1 1 1   886    0 12.34 -317.97 ----- 22.5 18.6 281.6 25.2 23.4 -22.1 23.4 -21.0 23.2 -20.7 -999.0 -999.0
2025-11-12T19:00:31.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:00:31.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:00:31.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.708072
2025-11-12T19:00:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:00:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:00:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:00:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:00:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:00:31.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T18:59:56', tmtdew=23.66, humidity=20.68, cloud=0.0, wind=30.65, temperature=22.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T16:59:37.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:00:31.561 [DEBUG] [Thread-21060] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:00:31.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:00:31.654 [DEBUG] [Thread-21063] [transport.py] [_log()] starting thread (client mode): 0x14916e90
2025-11-12T19:00:31.654 [DEBUG] [Thread-21063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:00:31.669 [DEBUG] [Thread-21063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:00:31.669 [INFO] [Thread-21063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] client lang: <none>
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] server lang: <none>
2025-11-12T19:00:31.676 [DEBUG] [Thread-21063] [transport.py] [_log()] kex follows: False
2025-11-12T19:00:31.677 [DEBUG] [Thread-21063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:00:31.677 [DEBUG] [Thread-21063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:00:31.677 [DEBUG] [Thread-21063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:00:31.677 [DEBUG] [Thread-21063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:00:31.677 [DEBUG] [Thread-21063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:00:31.677 [DEBUG] [Thread-21063] [transport.py] [_log()] Compression: none
2025-11-12T19:00:31.677 [DEBUG] [Thread-21063] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:00:31.736 [DEBUG] [Thread-21063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:00:31.736 [DEBUG] [Thread-21063] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:00:31.736 [DEBUG] [Thread-21063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:00:31.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:00:31.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:00:31.792 [DEBUG] [Thread-21063] [transport.py] [_log()] userauth is OK
2025-11-12T19:00:31.792 [DEBUG] [Thread-21063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:00:31.792 [DEBUG] [Thread-21063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:00:31.792 [DEBUG] [Thread-21063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:00:31.792 [DEBUG] [Thread-21063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:00:31.806 [INFO] [Thread-21063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:00:31.806 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:00:31.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:00:32.697 [DEBUG] [Thread-21063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:00:32.697 [DEBUG] [Thread-21063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:00:32.745 [DEBUG] [Thread-21063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:00:32.745 [DEBUG] [Thread-21063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:00:32.754 [DEBUG] [Thread-21063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:00:32.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:00:32.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-11-12T19:00:32.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-11-12T19:00:32.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:00:32.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:00:32.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:00:32.786 [DEBUG] [Thread-21063] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:00:39.259 [DEBUG] [Thread-21065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:00:46.490 [DEBUG] [Thread-21066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:00:54.319 [DEBUG] [Thread-21067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:01:02.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:01:02.781 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:01:02.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:01:03.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 0, 28), 23.64, 20.71, 0.0, 29.29, 22.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:01:03.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:00:28
2025-11-12T19:01:03.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:01:03.682 [DEBUG] [Thread-21068] [transport.py] [_log()] starting thread (client mode): 0x14915660
2025-11-12T19:01:03.682 [DEBUG] [Thread-21068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:01:03.703 [DEBUG] [Thread-21068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:01:03.703 [INFO] [Thread-21068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:01:03.704 [DEBUG] [Thread-21068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:01:03.704 [DEBUG] [Thread-21068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:01:03.704 [DEBUG] [Thread-21068] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] client lang: <none>
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] server lang: <none>
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] kex follows: False
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] Compression: none
2025-11-12T19:01:03.705 [DEBUG] [Thread-21068] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:01:03.714 [DEBUG] [Thread-21068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:01:03.715 [DEBUG] [Thread-21068] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:01:03.715 [DEBUG] [Thread-21068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:01:03.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:01:03.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:01:03.716 [DEBUG] [Thread-21068] [transport.py] [_log()] userauth is OK
2025-11-12T19:01:03.717 [DEBUG] [Thread-21068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:01:03.717 [DEBUG] [Thread-21068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:01:03.717 [DEBUG] [Thread-21068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:01:03.717 [DEBUG] [Thread-21068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:01:03.735 [INFO] [Thread-21068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:01:03.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:01:04.389 [DEBUG] [Thread-21068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:01:04.390 [DEBUG] [Thread-21068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:01:04.390 [DEBUG] [Thread-21068] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:01:04.431 [DEBUG] [Thread-21068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:01:04.431 [DEBUG] [Thread-21068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:01:04.434 [DEBUG] [Thread-21068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:01:04.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:01:04.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:01:04.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:01:04.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:01:04.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:01:04.459 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:01:04.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:01:04.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:01:04.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:01:04.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.708766 -999.00  +22.60  16.70     26   +2.30 1 2 1 1 1   886    0 12.78 -290.97 ----- 29.2 16.7 256.8 34.2 23.4 -22.1 23.4 -21.1 23.3 -20.6 23.4 -21.7
2025-11-12T19:01:04.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:01:04.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:01:04.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.708766
2025-11-12T19:01:04.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:01:04.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:01:04.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:01:04.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:01:04.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:01:04.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:00:28', tmtdew=23.64, humidity=20.71, cloud=0.0, wind=29.29, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:00:37.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:01:04.462 [DEBUG] [Thread-21068] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:01:04.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:01:04.562 [DEBUG] [Thread-21071] [transport.py] [_log()] starting thread (client mode): 0x14907580
2025-11-12T19:01:04.563 [DEBUG] [Thread-21071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:01:04.581 [DEBUG] [Thread-21071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:01:04.581 [INFO] [Thread-21071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:01:04.588 [DEBUG] [Thread-21071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:01:04.588 [DEBUG] [Thread-21071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] client lang: <none>
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] server lang: <none>
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] kex follows: False
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:01:04.589 [DEBUG] [Thread-21071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:01:04.590 [DEBUG] [Thread-21071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:01:04.590 [DEBUG] [Thread-21071] [transport.py] [_log()] Compression: none
2025-11-12T19:01:04.590 [DEBUG] [Thread-21071] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:01:04.649 [DEBUG] [Thread-21071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:01:04.650 [DEBUG] [Thread-21071] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:01:04.650 [DEBUG] [Thread-21071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:01:04.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:01:04.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:01:04.705 [DEBUG] [Thread-21071] [transport.py] [_log()] userauth is OK
2025-11-12T19:01:04.705 [DEBUG] [Thread-21071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:01:04.705 [DEBUG] [Thread-21071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:01:04.706 [DEBUG] [Thread-21071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:01:04.706 [DEBUG] [Thread-21071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:01:04.724 [INFO] [Thread-21071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:01:04.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:01:04.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:01:05.571 [DEBUG] [Thread-21071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:01:05.572 [DEBUG] [Thread-21071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:01:05.619 [DEBUG] [Thread-21071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:01:05.619 [DEBUG] [Thread-21071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:01:05.628 [DEBUG] [Thread-21071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:01:05.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:01:05.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-11-12T19:01:05.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-11-12T19:01:05.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:01:05.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:01:05.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:01:05.663 [DEBUG] [Thread-21071] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:01:06.726 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:01:06.728 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:01:09.358 [DEBUG] [Thread-21073 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:01:24.408 [DEBUG] [Thread-21074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:01:35.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:01:35.686 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:01:35.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-11-12T19:01:36.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 1, 32), 23.68, 20.71, 0.0, 29.69, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:01:36.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:01:32
2025-11-12T19:01:36.442 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:01:36.589 [DEBUG] [Thread-21075] [transport.py] [_log()] starting thread (client mode): 0x14905e70
2025-11-12T19:01:36.589 [DEBUG] [Thread-21075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:01:36.608 [DEBUG] [Thread-21075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:01:36.609 [INFO] [Thread-21075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] client lang: <none>
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] server lang: <none>
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] kex follows: False
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] Compression: none
2025-11-12T19:01:36.612 [DEBUG] [Thread-21075] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:01:36.629 [DEBUG] [Thread-21075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:01:36.630 [DEBUG] [Thread-21075] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:01:36.630 [DEBUG] [Thread-21075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:01:36.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:01:36.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:01:36.633 [DEBUG] [Thread-21075] [transport.py] [_log()] userauth is OK
2025-11-12T19:01:36.633 [DEBUG] [Thread-21075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:01:36.633 [DEBUG] [Thread-21075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:01:36.633 [DEBUG] [Thread-21075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:01:36.633 [DEBUG] [Thread-21075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:01:36.649 [INFO] [Thread-21075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:01:36.650 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:01:37.304 [DEBUG] [Thread-21075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:01:37.304 [DEBUG] [Thread-21075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:01:37.304 [DEBUG] [Thread-21075] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:01:37.345 [DEBUG] [Thread-21075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:01:37.345 [DEBUG] [Thread-21075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:01:37.348 [DEBUG] [Thread-21075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:01:37.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:01:37.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:01:37.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:01:37.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:01:37.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:01:37.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:01:37.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:01:37.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:01:37.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:01:37.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.709113 -999.00  +22.60  16.80     26   +2.30 1 2 1 1 1   886    0 12.93 -277.16 ----- 14.6 16.8 275.4 32.1 23.3 -22.2 23.4 -20.9 23.2 -20.6 23.5 -21.7
2025-11-12T19:01:37.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:01:37.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:01:37.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.709113
2025-11-12T19:01:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:01:37.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:01:37.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:01:37.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:01:37.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:01:37.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:01:32', tmtdew=23.68, humidity=20.71, cloud=0.0, wind=29.69, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:01:07.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:01:37.376 [DEBUG] [Thread-21075] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:01:37.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:01:37.474 [DEBUG] [Thread-21078] [transport.py] [_log()] starting thread (client mode): 0x14904310
2025-11-12T19:01:37.474 [DEBUG] [Thread-21078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:01:37.489 [DEBUG] [Thread-21078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:01:37.490 [INFO] [Thread-21078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:01:37.498 [DEBUG] [Thread-21078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] client lang: <none>
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] server lang: <none>
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] kex follows: False
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:01:37.499 [DEBUG] [Thread-21078] [transport.py] [_log()] Compression: none
2025-11-12T19:01:37.500 [DEBUG] [Thread-21078] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:01:37.557 [DEBUG] [Thread-21078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:01:37.558 [DEBUG] [Thread-21078] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:01:37.558 [DEBUG] [Thread-21078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:01:37.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:01:37.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:01:37.613 [DEBUG] [Thread-21078] [transport.py] [_log()] userauth is OK
2025-11-12T19:01:37.613 [DEBUG] [Thread-21078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:01:37.614 [DEBUG] [Thread-21078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:01:37.614 [DEBUG] [Thread-21078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:01:37.614 [DEBUG] [Thread-21078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:01:37.633 [INFO] [Thread-21078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:01:37.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:01:37.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:01:38.481 [DEBUG] [Thread-21078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:01:38.481 [DEBUG] [Thread-21078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:01:38.529 [DEBUG] [Thread-21078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:01:38.529 [DEBUG] [Thread-21078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:01:38.538 [DEBUG] [Thread-21078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:01:38.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:01:38.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-11-12T19:01:38.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-11-12T19:01:38.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:01:38.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:01:38.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:01:38.575 [DEBUG] [Thread-21078] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:01:39.444 [DEBUG] [Thread-21080 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:01:46.544 [DEBUG] [Thread-21081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:01:54.495 [DEBUG] [Thread-21082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:02:06.869 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:02:06.870 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:02:08.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:02:08.571 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:02:08.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-11-12T19:02:09.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 2, 4), 23.67, 20.73, 0.0, 28.11, 22.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:02:09.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:02:04
2025-11-12T19:02:09.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:02:09.469 [DEBUG] [Thread-21083] [transport.py] [_log()] starting thread (client mode): 0x14906230
2025-11-12T19:02:09.470 [DEBUG] [Thread-21083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:02:09.489 [DEBUG] [Thread-21083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:02:09.489 [INFO] [Thread-21083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:02:09.493 [DEBUG] [Thread-21083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] client lang: <none>
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] server lang: <none>
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] kex follows: False
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] Compression: none
2025-11-12T19:02:09.494 [DEBUG] [Thread-21083] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:02:09.514 [DEBUG] [Thread-21083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:02:09.515 [DEBUG] [Thread-21083] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:02:09.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:02:09.516 [DEBUG] [Thread-21083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:02:09.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:02:09.518 [DEBUG] [Thread-21083] [transport.py] [_log()] userauth is OK
2025-11-12T19:02:09.518 [DEBUG] [Thread-21083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:02:09.518 [DEBUG] [Thread-21083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:02:09.519 [DEBUG] [Thread-21083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:02:09.519 [DEBUG] [Thread-21083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:02:09.529 [DEBUG] [Thread-21085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:02:09.532 [INFO] [Thread-21083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:02:09.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:02:10.180 [DEBUG] [Thread-21083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:02:10.181 [DEBUG] [Thread-21083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:02:10.181 [DEBUG] [Thread-21083] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:02:10.221 [DEBUG] [Thread-21083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:02:10.221 [DEBUG] [Thread-21083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:02:10.224 [DEBUG] [Thread-21083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:02:10.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:02:10.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:02:10.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:02:10.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:02:10.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:02:10.244 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:02:10.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:02:10.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:02:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:02:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.709461 -999.00  +22.60  14.06     26   +2.30 1 2 1 1 1   886    0 14.01 -259.78 ----- 19.7 14.1 273.6 20.8 23.4 -22.1 23.4 -20.9 23.3 -20.5 23.5 -21.7
2025-11-12T19:02:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:02:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:02:10.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.709461
2025-11-12T19:02:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:02:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:02:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:02:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:02:10.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:02:10.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:02:04', tmtdew=23.67, humidity=20.73, cloud=0.0, wind=28.11, temperature=22.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:01:37.430', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:02:10.247 [DEBUG] [Thread-21083] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:02:10.331 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:02:10.343 [DEBUG] [Thread-21087] [transport.py] [_log()] starting thread (client mode): 0x17360340
2025-11-12T19:02:10.343 [DEBUG] [Thread-21087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:02:10.358 [DEBUG] [Thread-21087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:02:10.358 [INFO] [Thread-21087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] client lang: <none>
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] server lang: <none>
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] kex follows: False
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:02:10.366 [DEBUG] [Thread-21087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:02:10.367 [DEBUG] [Thread-21087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:02:10.367 [DEBUG] [Thread-21087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:02:10.367 [DEBUG] [Thread-21087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:02:10.367 [DEBUG] [Thread-21087] [transport.py] [_log()] Compression: none
2025-11-12T19:02:10.367 [DEBUG] [Thread-21087] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:02:10.425 [DEBUG] [Thread-21087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:02:10.426 [DEBUG] [Thread-21087] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:02:10.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:02:10.427 [DEBUG] [Thread-21087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:02:10.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:02:10.481 [DEBUG] [Thread-21087] [transport.py] [_log()] userauth is OK
2025-11-12T19:02:10.482 [DEBUG] [Thread-21087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:02:10.482 [DEBUG] [Thread-21087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:02:10.482 [DEBUG] [Thread-21087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:02:10.482 [DEBUG] [Thread-21087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:02:10.501 [INFO] [Thread-21087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:02:10.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:02:10.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:02:11.329 [DEBUG] [Thread-21087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:02:11.329 [DEBUG] [Thread-21087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:02:11.377 [DEBUG] [Thread-21087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:02:11.377 [DEBUG] [Thread-21087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:02:11.386 [DEBUG] [Thread-21087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:02:11.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:02:11.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:02:11.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-11-12T19:02:11.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:02:11.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:02:11.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:02:11.423 [DEBUG] [Thread-21087] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:02:24.565 [DEBUG] [Thread-21089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:02:39.614 [DEBUG] [Thread-21090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:02:41.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:02:41.446 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:02:41.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-11-12T19:02:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 2, 36), 23.67, 20.66, 0.0, 28.97, 22.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:02:42.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:02:36
2025-11-12T19:02:42.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:02:42.351 [DEBUG] [Thread-21091] [transport.py] [_log()] starting thread (client mode): 0x14916dd0
2025-11-12T19:02:42.351 [DEBUG] [Thread-21091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:02:42.372 [DEBUG] [Thread-21091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:02:42.372 [INFO] [Thread-21091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:02:42.375 [DEBUG] [Thread-21091] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] client lang: <none>
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] server lang: <none>
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] kex follows: False
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] Compression: none
2025-11-12T19:02:42.376 [DEBUG] [Thread-21091] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:02:42.396 [DEBUG] [Thread-21091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:02:42.396 [DEBUG] [Thread-21091] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:02:42.397 [DEBUG] [Thread-21091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:02:42.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:02:42.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:02:42.399 [DEBUG] [Thread-21091] [transport.py] [_log()] userauth is OK
2025-11-12T19:02:42.400 [DEBUG] [Thread-21091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:02:42.400 [DEBUG] [Thread-21091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:02:42.400 [DEBUG] [Thread-21091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:02:42.400 [DEBUG] [Thread-21091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:02:42.414 [INFO] [Thread-21091] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:02:42.415 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:02:43.062 [DEBUG] [Thread-21091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:02:43.062 [DEBUG] [Thread-21091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:02:43.063 [DEBUG] [Thread-21091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:02:43.104 [DEBUG] [Thread-21091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:02:43.104 [DEBUG] [Thread-21091] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:02:43.107 [DEBUG] [Thread-21091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:02:43.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:02:43.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:02:43.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:02:43.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:02:43.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:02:43.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:02:43.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:02:43.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:02:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:02:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.709808 -999.00  +22.60  15.03     26   +2.30 1 2 1 1 1   886    0 12.25 -284.47 ----- 16.3 15.0 264.2 21.7 23.4 -22.3 23.4 -20.9 23.3 -20.8 23.5 -21.8
2025-11-12T19:02:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:02:43.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:02:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.709808
2025-11-12T19:02:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:02:43.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:02:43.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:02:43.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:02:43.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:02:43.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:02:36', tmtdew=23.67, humidity=20.66, cloud=0.0, wind=28.97, temperature=22.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:02:07.411', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:02:43.134 [DEBUG] [Thread-21091] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:02:43.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:02:43.230 [DEBUG] [Thread-21094] [transport.py] [_log()] starting thread (client mode): 0x14914ee0
2025-11-12T19:02:43.230 [DEBUG] [Thread-21094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:02:43.246 [DEBUG] [Thread-21094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:02:43.246 [INFO] [Thread-21094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:02:43.254 [DEBUG] [Thread-21094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] client lang: <none>
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] server lang: <none>
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] kex follows: False
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] Compression: none
2025-11-12T19:02:43.255 [DEBUG] [Thread-21094] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:02:43.313 [DEBUG] [Thread-21094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:02:43.313 [DEBUG] [Thread-21094] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:02:43.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:02:43.314 [DEBUG] [Thread-21094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:02:43.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:02:43.369 [DEBUG] [Thread-21094] [transport.py] [_log()] userauth is OK
2025-11-12T19:02:43.369 [DEBUG] [Thread-21094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:02:43.369 [DEBUG] [Thread-21094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:02:43.369 [DEBUG] [Thread-21094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:02:43.369 [DEBUG] [Thread-21094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:02:43.388 [INFO] [Thread-21094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:02:43.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:02:43.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:02:44.225 [DEBUG] [Thread-21094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:02:44.225 [DEBUG] [Thread-21094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:02:44.274 [DEBUG] [Thread-21094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:02:44.274 [DEBUG] [Thread-21094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:02:44.283 [DEBUG] [Thread-21094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:02:44.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:02:44.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-11-12T19:02:44.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:02:44.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:02:44.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:02:44.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:02:44.321 [DEBUG] [Thread-21094] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:02:46.582 [DEBUG] [Thread-21096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:02:54.651 [DEBUG] [Thread-21097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:03:07.012 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:03:07.013 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:03:09.711 [DEBUG] [Thread-21098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:03:14.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:03:14.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:03:14.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-11-12T19:03:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 3, 8), 23.62, 20.75, 0.0, 27.68, 22.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:03:15.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:03:08
2025-11-12T19:03:15.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:03:15.292 [DEBUG] [Thread-21099] [transport.py] [_log()] starting thread (client mode): 0x14905e70
2025-11-12T19:03:15.292 [DEBUG] [Thread-21099] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:03:15.313 [DEBUG] [Thread-21099] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:03:15.313 [INFO] [Thread-21099] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] client lang: <none>
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] server lang: <none>
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] kex follows: False
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] Compression: none
2025-11-12T19:03:15.316 [DEBUG] [Thread-21099] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:03:15.331 [DEBUG] [Thread-21099] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:03:15.331 [DEBUG] [Thread-21099] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:03:15.331 [DEBUG] [Thread-21099] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:03:15.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:03:15.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:03:15.332 [DEBUG] [Thread-21099] [transport.py] [_log()] userauth is OK
2025-11-12T19:03:15.332 [DEBUG] [Thread-21099] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:03:15.332 [DEBUG] [Thread-21099] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:03:15.332 [DEBUG] [Thread-21099] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:03:15.332 [DEBUG] [Thread-21099] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:03:15.343 [INFO] [Thread-21099] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:03:15.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:03:15.978 [DEBUG] [Thread-21099] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:03:15.978 [DEBUG] [Thread-21099] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:03:15.978 [DEBUG] [Thread-21099] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:03:16.019 [DEBUG] [Thread-21099] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:03:16.019 [DEBUG] [Thread-21099] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:03:16.021 [DEBUG] [Thread-21099] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:03:16.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:03:16.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:03:16.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:03:16.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:03:16.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:03:16.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:03:16.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:03:16.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:03:16.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:03:16.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.710155 -999.00  +22.60  15.21     26   +2.30 1 2 1 1 1   886    0 13.63 -259.20 ----- 18.9 15.2 270.0 22.0 23.4 -22.1 23.4 -21.0 23.3 -21.0 23.5 -21.8
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.710155
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:03:16.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:03:08', tmtdew=23.62, humidity=20.75, cloud=0.0, wind=27.68, temperature=22.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:02:37.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:03:16.040 [DEBUG] [Thread-21099] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:03:16.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:03:16.125 [DEBUG] [Thread-21102] [transport.py] [_log()] starting thread (client mode): 0x14917c40
2025-11-12T19:03:16.125 [DEBUG] [Thread-21102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:03:16.140 [DEBUG] [Thread-21102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:03:16.140 [INFO] [Thread-21102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:03:16.147 [DEBUG] [Thread-21102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] client lang: <none>
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] server lang: <none>
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] kex follows: False
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] Compression: none
2025-11-12T19:03:16.148 [DEBUG] [Thread-21102] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:03:16.210 [DEBUG] [Thread-21102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:03:16.210 [DEBUG] [Thread-21102] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:03:16.210 [DEBUG] [Thread-21102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:03:16.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:03:16.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:03:16.268 [DEBUG] [Thread-21102] [transport.py] [_log()] userauth is OK
2025-11-12T19:03:16.268 [DEBUG] [Thread-21102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:03:16.268 [DEBUG] [Thread-21102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:03:16.268 [DEBUG] [Thread-21102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:03:16.268 [DEBUG] [Thread-21102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:03:16.282 [INFO] [Thread-21102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:03:16.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:03:16.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:03:17.132 [DEBUG] [Thread-21102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:03:17.132 [DEBUG] [Thread-21102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:03:17.180 [DEBUG] [Thread-21102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:03:17.180 [DEBUG] [Thread-21102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:03:17.188 [DEBUG] [Thread-21102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:03:17.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:03:17.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-11-12T19:03:17.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-11-12T19:03:17.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:03:17.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:03:17.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:03:17.222 [DEBUG] [Thread-21102] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:03:24.741 [DEBUG] [Thread-21104 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:03:39.795 [DEBUG] [Thread-21105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:03:46.616 [DEBUG] [Thread-21106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:03:47.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:03:47.244 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:03:47.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:03:47.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 3, 40), 23.62, 20.75, 0.0, 28.5, 22.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:03:47.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:03:40
2025-11-12T19:03:48.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:03:48.158 [DEBUG] [Thread-21107] [transport.py] [_log()] starting thread (client mode): 0x14907490
2025-11-12T19:03:48.158 [DEBUG] [Thread-21107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:03:48.178 [DEBUG] [Thread-21107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:03:48.178 [INFO] [Thread-21107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] client lang: <none>
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] server lang: <none>
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] kex follows: False
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] Compression: none
2025-11-12T19:03:48.181 [DEBUG] [Thread-21107] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:03:48.196 [DEBUG] [Thread-21107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:03:48.197 [DEBUG] [Thread-21107] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:03:48.197 [DEBUG] [Thread-21107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:03:48.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:03:48.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:03:48.200 [DEBUG] [Thread-21107] [transport.py] [_log()] userauth is OK
2025-11-12T19:03:48.200 [DEBUG] [Thread-21107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:03:48.200 [DEBUG] [Thread-21107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:03:48.200 [DEBUG] [Thread-21107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:03:48.200 [DEBUG] [Thread-21107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:03:48.225 [INFO] [Thread-21107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:03:48.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:03:48.874 [DEBUG] [Thread-21107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:03:48.874 [DEBUG] [Thread-21107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:03:48.875 [DEBUG] [Thread-21107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:03:48.916 [DEBUG] [Thread-21107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:03:48.916 [DEBUG] [Thread-21107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:03:48.919 [DEBUG] [Thread-21107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:03:48.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:03:48.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:03:48.934 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:03:48.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:03:48.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:03:48.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:03:48.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:03:48.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:03:48.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:03:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.710502 -999.00  +22.60  11.79     26   +2.30 1 2 1 1 1   885    0 14.20 -226.31 ----- 15.9 11.8 277.6 25.2 23.4 -22.3 23.4 -21.1 23.3 -21.1 23.5 -21.8
2025-11-12T19:03:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:03:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:03:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.710502
2025-11-12T19:03:48.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:03:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:03:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:03:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:03:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:03:48.947 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:03:40', tmtdew=23.62, humidity=20.75, cloud=0.0, wind=28.5, temperature=22.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:03:07.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:03:48.948 [DEBUG] [Thread-21107] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:03:49.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:03:49.043 [DEBUG] [Thread-21110] [transport.py] [_log()] starting thread (client mode): 0x14907040
2025-11-12T19:03:49.043 [DEBUG] [Thread-21110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:03:49.059 [DEBUG] [Thread-21110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:03:49.059 [INFO] [Thread-21110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:03:49.066 [DEBUG] [Thread-21110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:03:49.066 [DEBUG] [Thread-21110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:03:49.066 [DEBUG] [Thread-21110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:03:49.066 [DEBUG] [Thread-21110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:03:49.066 [DEBUG] [Thread-21110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:03:49.066 [DEBUG] [Thread-21110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:03:49.066 [DEBUG] [Thread-21110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] client lang: <none>
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] server lang: <none>
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] kex follows: False
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] Compression: none
2025-11-12T19:03:49.067 [DEBUG] [Thread-21110] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:03:49.126 [DEBUG] [Thread-21110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:03:49.126 [DEBUG] [Thread-21110] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:03:49.127 [DEBUG] [Thread-21110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:03:49.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:03:49.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:03:49.185 [DEBUG] [Thread-21110] [transport.py] [_log()] userauth is OK
2025-11-12T19:03:49.185 [DEBUG] [Thread-21110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:03:49.185 [DEBUG] [Thread-21110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:03:49.186 [DEBUG] [Thread-21110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:03:49.186 [DEBUG] [Thread-21110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:03:49.205 [INFO] [Thread-21110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:03:49.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:03:49.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:03:50.035 [DEBUG] [Thread-21110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:03:50.036 [DEBUG] [Thread-21110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:03:50.084 [DEBUG] [Thread-21110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:03:50.084 [DEBUG] [Thread-21110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:03:50.093 [DEBUG] [Thread-21110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:03:50.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:03:50.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:03:50.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:03:50.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:03:50.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:03:50.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:03:50.130 [DEBUG] [Thread-21110] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:03:54.825 [DEBUG] [Thread-21112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:04:07.155 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:04:07.156 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:04:09.866 [DEBUG] [Thread-21113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:04:20.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:04:20.144 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:04:20.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-11-12T19:04:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 4, 12), 23.62, 20.73, 0.0, 25.21, 22.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:04:20.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:04:12
2025-11-12T19:04:20.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:04:21.036 [DEBUG] [Thread-21114] [transport.py] [_log()] starting thread (client mode): 0x11f11ba0
2025-11-12T19:04:21.037 [DEBUG] [Thread-21114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:04:21.057 [DEBUG] [Thread-21114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:04:21.057 [INFO] [Thread-21114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:04:21.060 [DEBUG] [Thread-21114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:04:21.060 [DEBUG] [Thread-21114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:04:21.060 [DEBUG] [Thread-21114] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:04:21.060 [DEBUG] [Thread-21114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:04:21.060 [DEBUG] [Thread-21114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] client lang: <none>
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] server lang: <none>
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] kex follows: False
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] Compression: none
2025-11-12T19:04:21.061 [DEBUG] [Thread-21114] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:04:21.081 [DEBUG] [Thread-21114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:04:21.082 [DEBUG] [Thread-21114] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:04:21.082 [DEBUG] [Thread-21114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:04:21.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:04:21.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:04:21.084 [DEBUG] [Thread-21114] [transport.py] [_log()] userauth is OK
2025-11-12T19:04:21.084 [DEBUG] [Thread-21114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:04:21.085 [DEBUG] [Thread-21114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:04:21.085 [DEBUG] [Thread-21114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:04:21.085 [DEBUG] [Thread-21114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:04:21.117 [INFO] [Thread-21114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:04:21.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:04:21.773 [DEBUG] [Thread-21114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:04:21.774 [DEBUG] [Thread-21114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:04:21.774 [DEBUG] [Thread-21114] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:04:21.815 [DEBUG] [Thread-21114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:04:21.815 [DEBUG] [Thread-21114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:04:21.818 [DEBUG] [Thread-21114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:04:21.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:04:21.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:04:21.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:04:21.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:04:21.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:04:21.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:04:21.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:04:21.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:04:21.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:04:21.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.710849 -999.00  +22.60  20.35     26   +2.30 1 2 1 1 1   885    0 14.75 -219.76 ----- 15.6 20.4 271.2 28.1 23.4 -22.2 23.4 -21.0 23.2 -20.8 23.5 -22.0
2025-11-12T19:04:21.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:04:21.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:04:21.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.710849
2025-11-12T19:04:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:04:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:04:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:04:21.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:04:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:04:21.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:04:12', tmtdew=23.62, humidity=20.73, cloud=0.0, wind=25.21, temperature=22.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:03:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:04:21.847 [DEBUG] [Thread-21114] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:04:21.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:04:21.943 [DEBUG] [Thread-21117] [transport.py] [_log()] starting thread (client mode): 0x14916c20
2025-11-12T19:04:21.944 [DEBUG] [Thread-21117] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:04:21.959 [DEBUG] [Thread-21117] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:04:21.959 [INFO] [Thread-21117] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] client lang: <none>
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] server lang: <none>
2025-11-12T19:04:21.967 [DEBUG] [Thread-21117] [transport.py] [_log()] kex follows: False
2025-11-12T19:04:21.968 [DEBUG] [Thread-21117] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:04:21.968 [DEBUG] [Thread-21117] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:04:21.968 [DEBUG] [Thread-21117] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:04:21.968 [DEBUG] [Thread-21117] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:04:21.968 [DEBUG] [Thread-21117] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:04:21.968 [DEBUG] [Thread-21117] [transport.py] [_log()] Compression: none
2025-11-12T19:04:21.968 [DEBUG] [Thread-21117] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:04:22.025 [DEBUG] [Thread-21117] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:04:22.025 [DEBUG] [Thread-21117] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:04:22.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:04:22.027 [DEBUG] [Thread-21117] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:04:22.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:04:22.082 [DEBUG] [Thread-21117] [transport.py] [_log()] userauth is OK
2025-11-12T19:04:22.082 [DEBUG] [Thread-21117] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:04:22.082 [DEBUG] [Thread-21117] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:04:22.082 [DEBUG] [Thread-21117] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:04:22.083 [DEBUG] [Thread-21117] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:04:22.102 [INFO] [Thread-21117] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:04:22.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:04:22.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:04:22.946 [DEBUG] [Thread-21117] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:04:22.946 [DEBUG] [Thread-21117] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:04:22.994 [DEBUG] [Thread-21117] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:04:22.995 [DEBUG] [Thread-21117] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:04:23.004 [DEBUG] [Thread-21117] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:04:23.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:04:23.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-11-12T19:04:23.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-11-12T19:04:23.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:04:23.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:04:23.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:04:23.039 [DEBUG] [Thread-21117] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:04:24.902 [DEBUG] [Thread-21119 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:04:39.952 [DEBUG] [Thread-21120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:04:46.643 [DEBUG] [Thread-21121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:04:53.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:04:53.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:04:53.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-11-12T19:04:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 4, 44), 23.63, 20.71, 0.0, 29.08, 22.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:04:53.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:04:44
2025-11-12T19:04:53.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:04:53.934 [DEBUG] [Thread-21122] [transport.py] [_log()] starting thread (client mode): 0x173bf340
2025-11-12T19:04:53.934 [DEBUG] [Thread-21122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:04:53.954 [DEBUG] [Thread-21122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:04:53.954 [INFO] [Thread-21122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:04:53.957 [DEBUG] [Thread-21122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:04:53.957 [DEBUG] [Thread-21122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:04:53.957 [DEBUG] [Thread-21122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:04:53.957 [DEBUG] [Thread-21122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:04:53.957 [DEBUG] [Thread-21122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:04:53.957 [DEBUG] [Thread-21122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:04:53.957 [DEBUG] [Thread-21122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:04:53.957 [DEBUG] [Thread-21122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] client lang: <none>
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] server lang: <none>
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] kex follows: False
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] Compression: none
2025-11-12T19:04:53.958 [DEBUG] [Thread-21122] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:04:53.976 [DEBUG] [Thread-21122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:04:53.977 [DEBUG] [Thread-21122] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:04:53.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:04:53.978 [DEBUG] [Thread-21122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:04:53.979 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:04:53.980 [DEBUG] [Thread-21122] [transport.py] [_log()] userauth is OK
2025-11-12T19:04:53.980 [DEBUG] [Thread-21122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:04:53.980 [DEBUG] [Thread-21122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:04:53.980 [DEBUG] [Thread-21122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:04:53.980 [DEBUG] [Thread-21122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:04:53.995 [INFO] [Thread-21122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:04:53.996 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:04:54.622 [DEBUG] [Thread-21122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:04:54.622 [DEBUG] [Thread-21122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:04:54.622 [DEBUG] [Thread-21122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:04:54.663 [DEBUG] [Thread-21122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:04:54.663 [DEBUG] [Thread-21122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:04:54.667 [DEBUG] [Thread-21122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:04:54.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:04:54.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:04:54.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:04:54.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:04:54.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:04:54.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:04:54.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:04:54.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:04:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:04:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.711197 -999.00  +22.60  16.64     26   +2.20 1 2 1 1 1   885    0 15.35 -189.88 ----- 23.4 16.6 269.0 27.9 23.3 -22.1 23.4 -21.2 23.3 -21.0 23.5 -21.8
2025-11-12T19:04:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:04:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:04:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.711197
2025-11-12T19:04:54.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:04:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:04:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:04:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:04:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:04:54.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:04:44', tmtdew=23.63, humidity=20.71, cloud=0.0, wind=29.08, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:04:07.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:04:54.693 [DEBUG] [Thread-21122] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:04:54.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:04:54.788 [DEBUG] [Thread-21125] [transport.py] [_log()] starting thread (client mode): 0x14916e90
2025-11-12T19:04:54.789 [DEBUG] [Thread-21125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:04:54.803 [DEBUG] [Thread-21125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:04:54.804 [INFO] [Thread-21125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:04:54.811 [DEBUG] [Thread-21125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:04:54.811 [DEBUG] [Thread-21125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:04:54.811 [DEBUG] [Thread-21125] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:04:54.811 [DEBUG] [Thread-21125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] client lang: <none>
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] server lang: <none>
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] kex follows: False
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] Compression: none
2025-11-12T19:04:54.812 [DEBUG] [Thread-21125] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:04:54.869 [DEBUG] [Thread-21125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:04:54.869 [DEBUG] [Thread-21125] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:04:54.870 [DEBUG] [Thread-21125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:04:54.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:04:54.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:04:54.925 [DEBUG] [Thread-21125] [transport.py] [_log()] userauth is OK
2025-11-12T19:04:54.925 [DEBUG] [Thread-21125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:04:54.925 [DEBUG] [Thread-21125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:04:54.926 [DEBUG] [Thread-21125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:04:54.926 [DEBUG] [Thread-21125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:04:54.944 [INFO] [Thread-21125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:04:54.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:04:54.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:04:54.986 [DEBUG] [Thread-21127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:04:55.784 [DEBUG] [Thread-21125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:04:55.785 [DEBUG] [Thread-21125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:04:55.832 [DEBUG] [Thread-21125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:04:55.832 [DEBUG] [Thread-21125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:04:55.841 [DEBUG] [Thread-21125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:04:55.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:04:55.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-11-12T19:04:55.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-11-12T19:04:55.865 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:04:55.865 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:04:55.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:04:55.873 [DEBUG] [Thread-21125] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:05:07.298 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:05:07.300 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:05:10.035 [DEBUG] [Thread-21128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:05:25.066 [DEBUG] [Thread-21129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:05:25.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:05:25.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:05:25.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:05:26.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 5, 16), 23.62, 20.73, 0.0, 33.31, 22.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:05:26.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:05:16
2025-11-12T19:05:26.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:05:26.762 [DEBUG] [Thread-21130] [transport.py] [_log()] starting thread (client mode): 0x149236d0
2025-11-12T19:05:26.762 [DEBUG] [Thread-21130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:05:26.781 [DEBUG] [Thread-21130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:05:26.782 [INFO] [Thread-21130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] client lang: <none>
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] server lang: <none>
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] kex follows: False
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] Compression: none
2025-11-12T19:05:26.785 [DEBUG] [Thread-21130] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:05:26.801 [DEBUG] [Thread-21130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:05:26.802 [DEBUG] [Thread-21130] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:05:26.802 [DEBUG] [Thread-21130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:05:26.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:05:26.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:05:26.804 [DEBUG] [Thread-21130] [transport.py] [_log()] userauth is OK
2025-11-12T19:05:26.804 [DEBUG] [Thread-21130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:05:26.804 [DEBUG] [Thread-21130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:05:26.805 [DEBUG] [Thread-21130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:05:26.805 [DEBUG] [Thread-21130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:05:26.823 [INFO] [Thread-21130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:05:26.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:05:27.465 [DEBUG] [Thread-21130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:05:27.465 [DEBUG] [Thread-21130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:05:27.465 [DEBUG] [Thread-21130] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:05:27.506 [DEBUG] [Thread-21130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:05:27.506 [DEBUG] [Thread-21130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:05:27.510 [DEBUG] [Thread-21130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:05:27.521 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:05:27.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:05:27.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:05:27.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:05:27.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:05:27.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:05:27.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:05:27.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:05:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:05:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.711544 -999.00  +22.50  15.87     26   +2.30 1 2 1 1 1   885    0 16.51 -161.95 ----- 23.2 15.9 270.4 29.6 23.3 -22.3 23.4 -21.0 23.2 -21.1 23.4 -21.9
2025-11-12T19:05:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:05:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:05:27.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.711544
2025-11-12T19:05:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:05:27.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:05:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:05:27.538 [DEBUG] [Thread-21130] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:05:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:05:27.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:05:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:05:16', tmtdew=23.62, humidity=20.73, cloud=0.0, wind=33.31, temperature=22.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:04:37.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:05:27.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:05:27.634 [DEBUG] [Thread-21133] [transport.py] [_log()] starting thread (client mode): 0x14921c30
2025-11-12T19:05:27.634 [DEBUG] [Thread-21133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:05:27.649 [DEBUG] [Thread-21133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:05:27.649 [INFO] [Thread-21133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:05:27.657 [DEBUG] [Thread-21133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:05:27.657 [DEBUG] [Thread-21133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:05:27.657 [DEBUG] [Thread-21133] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:05:27.657 [DEBUG] [Thread-21133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] client lang: <none>
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] server lang: <none>
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] kex follows: False
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:05:27.658 [DEBUG] [Thread-21133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:05:27.659 [DEBUG] [Thread-21133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:05:27.659 [DEBUG] [Thread-21133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:05:27.659 [DEBUG] [Thread-21133] [transport.py] [_log()] Compression: none
2025-11-12T19:05:27.659 [DEBUG] [Thread-21133] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:05:27.717 [DEBUG] [Thread-21133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:05:27.718 [DEBUG] [Thread-21133] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:05:27.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:05:27.719 [DEBUG] [Thread-21133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:05:27.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:05:27.773 [DEBUG] [Thread-21133] [transport.py] [_log()] userauth is OK
2025-11-12T19:05:27.773 [DEBUG] [Thread-21133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:05:27.774 [DEBUG] [Thread-21133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:05:27.774 [DEBUG] [Thread-21133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:05:27.774 [DEBUG] [Thread-21133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:05:27.793 [INFO] [Thread-21133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:05:27.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:05:27.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:05:28.651 [DEBUG] [Thread-21133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:05:28.651 [DEBUG] [Thread-21133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:05:28.699 [DEBUG] [Thread-21133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:05:28.699 [DEBUG] [Thread-21133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:05:28.708 [DEBUG] [Thread-21133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:05:28.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:05:28.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-11-12T19:05:28.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-11-12T19:05:28.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:05:28.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:05:28.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:05:28.743 [DEBUG] [Thread-21133] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:05:40.104 [DEBUG] [Thread-21135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:05:46.672 [DEBUG] [Thread-21136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:05:55.152 [DEBUG] [Thread-21137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:05:58.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:05:58.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:05:58.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-11-12T19:05:59.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 5, 48), 23.53, 20.78, 0.0, 35.01, 22.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:05:59.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:05:48
2025-11-12T19:05:59.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:05:59.652 [DEBUG] [Thread-21138] [transport.py] [_log()] starting thread (client mode): 0x11f10850
2025-11-12T19:05:59.653 [DEBUG] [Thread-21138] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:05:59.673 [DEBUG] [Thread-21138] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:05:59.673 [INFO] [Thread-21138] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:05:59.676 [DEBUG] [Thread-21138] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] client lang: <none>
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] server lang: <none>
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] kex follows: False
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:05:59.677 [DEBUG] [Thread-21138] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:05:59.678 [DEBUG] [Thread-21138] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:05:59.678 [DEBUG] [Thread-21138] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:05:59.678 [DEBUG] [Thread-21138] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:05:59.678 [DEBUG] [Thread-21138] [transport.py] [_log()] Compression: none
2025-11-12T19:05:59.678 [DEBUG] [Thread-21138] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:05:59.696 [DEBUG] [Thread-21138] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:05:59.697 [DEBUG] [Thread-21138] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:05:59.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:05:59.698 [DEBUG] [Thread-21138] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:05:59.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:05:59.700 [DEBUG] [Thread-21138] [transport.py] [_log()] userauth is OK
2025-11-12T19:05:59.700 [DEBUG] [Thread-21138] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:05:59.700 [DEBUG] [Thread-21138] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:05:59.700 [DEBUG] [Thread-21138] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:05:59.700 [DEBUG] [Thread-21138] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:05:59.722 [INFO] [Thread-21138] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:05:59.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:06:00.371 [DEBUG] [Thread-21138] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:06:00.372 [DEBUG] [Thread-21138] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:06:00.372 [DEBUG] [Thread-21138] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:06:00.413 [DEBUG] [Thread-21138] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:06:00.413 [DEBUG] [Thread-21138] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:06:00.417 [DEBUG] [Thread-21138] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:06:00.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:06:00.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:06:00.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:06:00.433 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:06:00.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:06:00.442 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:06:00.443 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:06:00.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:06:00.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:06:00.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.712238 -999.00  +22.50  19.72     26   +2.30 1 2 1 1 1   884    0 17.38 -126.95 ----- 24.6 19.7 265.2 27.4 23.3 -22.3 23.4 -21.1 23.2 -20.8 23.4 -22.1
2025-11-12T19:06:00.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:06:00.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:06:00.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.712238
2025-11-12T19:06:00.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:06:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:06:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:06:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:06:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:06:00.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:05:48', tmtdew=23.53, humidity=20.78, cloud=0.0, wind=35.01, temperature=22.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:05:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:06:00.445 [DEBUG] [Thread-21138] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:06:00.528 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:06:00.540 [DEBUG] [Thread-21141] [transport.py] [_log()] starting thread (client mode): 0x11f11810
2025-11-12T19:06:00.541 [DEBUG] [Thread-21141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:06:00.556 [DEBUG] [Thread-21141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:06:00.556 [INFO] [Thread-21141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:06:00.563 [DEBUG] [Thread-21141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:06:00.563 [DEBUG] [Thread-21141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] client lang: <none>
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] server lang: <none>
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] kex follows: False
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] Compression: none
2025-11-12T19:06:00.564 [DEBUG] [Thread-21141] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:06:00.621 [DEBUG] [Thread-21141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:06:00.621 [DEBUG] [Thread-21141] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:06:00.622 [DEBUG] [Thread-21141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:06:00.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:06:00.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:06:00.677 [DEBUG] [Thread-21141] [transport.py] [_log()] userauth is OK
2025-11-12T19:06:00.677 [DEBUG] [Thread-21141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:06:00.677 [DEBUG] [Thread-21141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:06:00.677 [DEBUG] [Thread-21141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:06:00.677 [DEBUG] [Thread-21141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:06:00.696 [INFO] [Thread-21141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:06:00.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:06:00.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:06:01.544 [DEBUG] [Thread-21141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:06:01.545 [DEBUG] [Thread-21141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:06:01.593 [DEBUG] [Thread-21141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:06:01.593 [DEBUG] [Thread-21141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:06:01.602 [DEBUG] [Thread-21141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:06:01.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:06:01.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-11-12T19:06:01.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-11-12T19:06:01.630 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:06:01.630 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:06:01.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:06:01.639 [DEBUG] [Thread-21141] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:06:07.441 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:06:07.442 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:06:10.189 [DEBUG] [Thread-21143 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:06:25.232 [DEBUG] [Thread-21144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:06:31.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:06:31.661 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:06:31.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-11-12T19:06:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 6, 20), 23.55, 20.75, 0.0, 34.58, 22.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:06:32.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:06:20
2025-11-12T19:06:32.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:06:32.565 [DEBUG] [Thread-21145] [transport.py] [_log()] starting thread (client mode): 0x14922140
2025-11-12T19:06:32.566 [DEBUG] [Thread-21145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:06:32.585 [DEBUG] [Thread-21145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:06:32.585 [INFO] [Thread-21145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] client lang: <none>
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] server lang: <none>
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] kex follows: False
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] Compression: none
2025-11-12T19:06:32.587 [DEBUG] [Thread-21145] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:06:32.604 [DEBUG] [Thread-21145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:06:32.605 [DEBUG] [Thread-21145] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:06:32.605 [DEBUG] [Thread-21145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:06:32.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:06:32.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:06:32.607 [DEBUG] [Thread-21145] [transport.py] [_log()] userauth is OK
2025-11-12T19:06:32.607 [DEBUG] [Thread-21145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:06:32.607 [DEBUG] [Thread-21145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:06:32.607 [DEBUG] [Thread-21145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:06:32.607 [DEBUG] [Thread-21145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:06:32.631 [INFO] [Thread-21145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:06:32.632 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:06:33.242 [DEBUG] [Thread-21145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:06:33.242 [DEBUG] [Thread-21145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:06:33.242 [DEBUG] [Thread-21145] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:06:33.283 [DEBUG] [Thread-21145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:06:33.283 [DEBUG] [Thread-21145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:06:33.286 [DEBUG] [Thread-21145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:06:33.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:06:33.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:06:33.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:06:33.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:06:33.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:06:33.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:06:33.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:06:33.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:06:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:06:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.712586 -999.00  +22.50  21.32     26   +2.30 1 2 1 1 1   884    0 17.40 -114.11 ----- 18.5 21.3 272.6 29.2 23.3 -22.3 23.3 -21.0 23.2 -21.1 23.4 -22.0
2025-11-12T19:06:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:06:33.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:06:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.712586
2025-11-12T19:06:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:06:33.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:06:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:06:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:06:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:06:33.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:06:20', tmtdew=23.55, humidity=20.75, cloud=0.0, wind=34.58, temperature=22.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:06:07.430', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:06:33.315 [DEBUG] [Thread-21145] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:06:33.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:06:33.414 [DEBUG] [Thread-21148] [transport.py] [_log()] starting thread (client mode): 0x14906980
2025-11-12T19:06:33.415 [DEBUG] [Thread-21148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:06:33.429 [DEBUG] [Thread-21148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:06:33.429 [INFO] [Thread-21148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] client lang: <none>
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] server lang: <none>
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] kex follows: False
2025-11-12T19:06:33.437 [DEBUG] [Thread-21148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:06:33.438 [DEBUG] [Thread-21148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:06:33.438 [DEBUG] [Thread-21148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:06:33.438 [DEBUG] [Thread-21148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:06:33.438 [DEBUG] [Thread-21148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:06:33.438 [DEBUG] [Thread-21148] [transport.py] [_log()] Compression: none
2025-11-12T19:06:33.438 [DEBUG] [Thread-21148] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:06:33.497 [DEBUG] [Thread-21148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:06:33.498 [DEBUG] [Thread-21148] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:06:33.499 [DEBUG] [Thread-21148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:06:33.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:06:33.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:06:33.553 [DEBUG] [Thread-21148] [transport.py] [_log()] userauth is OK
2025-11-12T19:06:33.553 [DEBUG] [Thread-21148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:06:33.554 [DEBUG] [Thread-21148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:06:33.554 [DEBUG] [Thread-21148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:06:33.554 [DEBUG] [Thread-21148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:06:33.573 [INFO] [Thread-21148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:06:33.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:06:33.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:06:34.425 [DEBUG] [Thread-21148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:06:34.425 [DEBUG] [Thread-21148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:06:34.472 [DEBUG] [Thread-21148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:06:34.473 [DEBUG] [Thread-21148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:06:34.482 [DEBUG] [Thread-21148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:06:34.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:06:34.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-11-12T19:06:34.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-11-12T19:06:34.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:06:34.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:06:34.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:06:34.518 [DEBUG] [Thread-21148] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:06:40.265 [DEBUG] [Thread-21150 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:06:46.705 [DEBUG] [Thread-21151 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:06:55.321 [DEBUG] [Thread-21152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:07:04.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:07:04.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:07:04.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-11-12T19:07:05.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 6, 52), 23.45, 20.81, 0.0, 29.68, 22.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:07:05.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:06:52
2025-11-12T19:07:05.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:07:05.484 [DEBUG] [Thread-21153] [transport.py] [_log()] starting thread (client mode): 0x11f11540
2025-11-12T19:07:05.484 [DEBUG] [Thread-21153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:07:05.504 [DEBUG] [Thread-21153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:07:05.504 [INFO] [Thread-21153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] client lang: <none>
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] server lang: <none>
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] kex follows: False
2025-11-12T19:07:05.507 [DEBUG] [Thread-21153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:07:05.508 [DEBUG] [Thread-21153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:07:05.508 [DEBUG] [Thread-21153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:07:05.508 [DEBUG] [Thread-21153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:07:05.508 [DEBUG] [Thread-21153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:07:05.508 [DEBUG] [Thread-21153] [transport.py] [_log()] Compression: none
2025-11-12T19:07:05.508 [DEBUG] [Thread-21153] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:07:05.523 [DEBUG] [Thread-21153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:07:05.523 [DEBUG] [Thread-21153] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:07:05.523 [DEBUG] [Thread-21153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:07:05.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:07:05.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:07:05.524 [DEBUG] [Thread-21153] [transport.py] [_log()] userauth is OK
2025-11-12T19:07:05.524 [DEBUG] [Thread-21153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:07:05.524 [DEBUG] [Thread-21153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:07:05.524 [DEBUG] [Thread-21153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:07:05.524 [DEBUG] [Thread-21153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:07:05.532 [INFO] [Thread-21153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:07:05.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:07:06.113 [DEBUG] [Thread-21153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:07:06.113 [DEBUG] [Thread-21153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:07:06.113 [DEBUG] [Thread-21153] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:07:06.154 [DEBUG] [Thread-21153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:07:06.154 [DEBUG] [Thread-21153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:07:06.157 [DEBUG] [Thread-21153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:07:06.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:07:06.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:07:06.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:07:06.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:07:06.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:07:06.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:07:06.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:07:06.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:07:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:07:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.712933 -999.00  +22.40  22.33     26   +2.20 1 2 1 1 1   883    0 17.76 -100.23 ----- 27.6 22.3 266.6 30.0 23.3 -22.1 23.3 -21.2 23.2 -21.2 23.4 -22.0
2025-11-12T19:07:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:07:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:07:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.712933
2025-11-12T19:07:06.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:07:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:07:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:07:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:07:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:07:06.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:06:52', tmtdew=23.45, humidity=20.81, cloud=0.0, wind=29.68, temperature=22.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:06:37.411', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:07:06.174 [DEBUG] [Thread-21153] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:07:06.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:07:06.259 [DEBUG] [Thread-21156] [transport.py] [_log()] starting thread (client mode): 0x14922380
2025-11-12T19:07:06.260 [DEBUG] [Thread-21156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:07:06.275 [DEBUG] [Thread-21156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:07:06.276 [INFO] [Thread-21156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] client lang: <none>
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] server lang: <none>
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] kex follows: False
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] Compression: none
2025-11-12T19:07:06.283 [DEBUG] [Thread-21156] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:07:06.339 [DEBUG] [Thread-21156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:07:06.339 [DEBUG] [Thread-21156] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:07:06.339 [DEBUG] [Thread-21156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:07:06.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:07:06.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:07:06.396 [DEBUG] [Thread-21156] [transport.py] [_log()] userauth is OK
2025-11-12T19:07:06.396 [DEBUG] [Thread-21156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:07:06.396 [DEBUG] [Thread-21156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:07:06.396 [DEBUG] [Thread-21156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:07:06.396 [DEBUG] [Thread-21156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:07:06.410 [INFO] [Thread-21156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:07:06.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:07:06.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:07:07.266 [DEBUG] [Thread-21156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:07:07.266 [DEBUG] [Thread-21156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:07:07.314 [DEBUG] [Thread-21156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:07:07.314 [DEBUG] [Thread-21156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:07:07.323 [DEBUG] [Thread-21156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:07:07.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:07:07.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-11-12T19:07:07.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-11-12T19:07:07.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:07:07.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:07:07.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:07:07.354 [DEBUG] [Thread-21156] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:07:07.582 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:07:07.583 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:07:10.357 [DEBUG] [Thread-21158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:07:25.409 [DEBUG] [Thread-21159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:07:37.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:07:37.353 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:07:37.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-11-12T19:07:37.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 7, 24), 23.48, 20.76, 0.0, 27.7, 22.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:07:37.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:07:24
2025-11-12T19:07:38.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:07:38.241 [DEBUG] [Thread-21160] [transport.py] [_log()] starting thread (client mode): 0x14917a00
2025-11-12T19:07:38.241 [DEBUG] [Thread-21160] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:07:38.262 [DEBUG] [Thread-21160] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:07:38.263 [INFO] [Thread-21160] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:07:38.266 [DEBUG] [Thread-21160] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:07:38.266 [DEBUG] [Thread-21160] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:07:38.266 [DEBUG] [Thread-21160] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:07:38.266 [DEBUG] [Thread-21160] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:07:38.266 [DEBUG] [Thread-21160] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] client lang: <none>
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] server lang: <none>
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] kex follows: False
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] Compression: none
2025-11-12T19:07:38.267 [DEBUG] [Thread-21160] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:07:38.290 [DEBUG] [Thread-21160] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:07:38.290 [DEBUG] [Thread-21160] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:07:38.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:07:38.292 [DEBUG] [Thread-21160] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:07:38.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:07:38.295 [DEBUG] [Thread-21160] [transport.py] [_log()] userauth is OK
2025-11-12T19:07:38.295 [DEBUG] [Thread-21160] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:07:38.295 [DEBUG] [Thread-21160] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:07:38.295 [DEBUG] [Thread-21160] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:07:38.295 [DEBUG] [Thread-21160] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:07:38.332 [INFO] [Thread-21160] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:07:38.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:07:38.955 [DEBUG] [Thread-21160] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:07:38.956 [DEBUG] [Thread-21160] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:07:38.956 [DEBUG] [Thread-21160] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:07:38.997 [DEBUG] [Thread-21160] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:07:38.997 [DEBUG] [Thread-21160] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:07:39.000 [DEBUG] [Thread-21160] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:07:39.010 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:07:39.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:07:39.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:07:39.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:07:39.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:07:39.019 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:07:39.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:07:39.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:07:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:07:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.713280 -999.00  +22.40  17.70     26   +2.20 1 2 1 1 1   883    0 17.90 -97.56 ----- 21.3 17.7 270.4 33.4 23.3 -22.4 23.3 -21.2 23.1 -21.2 23.3 -22.0
2025-11-12T19:07:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:07:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:07:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.713280
2025-11-12T19:07:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:07:39.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:07:39.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:07:39.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:07:39.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:07:39.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:07:24', tmtdew=23.48, humidity=20.76, cloud=0.0, wind=27.7, temperature=22.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:07:07.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:07:39.020 [DEBUG] [Thread-21160] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:07:39.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:07:39.105 [DEBUG] [Thread-21163] [transport.py] [_log()] starting thread (client mode): 0x173606d0
2025-11-12T19:07:39.105 [DEBUG] [Thread-21163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:07:39.120 [DEBUG] [Thread-21163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:07:39.120 [INFO] [Thread-21163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:07:39.127 [DEBUG] [Thread-21163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:07:39.127 [DEBUG] [Thread-21163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:07:39.127 [DEBUG] [Thread-21163] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] client lang: <none>
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] server lang: <none>
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] kex follows: False
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] Compression: none
2025-11-12T19:07:39.128 [DEBUG] [Thread-21163] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:07:39.185 [DEBUG] [Thread-21163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:07:39.186 [DEBUG] [Thread-21163] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:07:39.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:07:39.187 [DEBUG] [Thread-21163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:07:39.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:07:39.241 [DEBUG] [Thread-21163] [transport.py] [_log()] userauth is OK
2025-11-12T19:07:39.241 [DEBUG] [Thread-21163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:07:39.242 [DEBUG] [Thread-21163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:07:39.242 [DEBUG] [Thread-21163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:07:39.242 [DEBUG] [Thread-21163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:07:39.265 [INFO] [Thread-21163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:07:39.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:07:39.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:07:40.107 [DEBUG] [Thread-21163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:07:40.108 [DEBUG] [Thread-21163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:07:40.155 [DEBUG] [Thread-21163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:07:40.155 [DEBUG] [Thread-21163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:07:40.164 [DEBUG] [Thread-21163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:07:40.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:07:40.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:07:40.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-11-12T19:07:40.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:07:40.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:07:40.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:07:40.199 [DEBUG] [Thread-21163] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:07:40.444 [DEBUG] [Thread-21165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:07:46.739 [DEBUG] [Thread-21166 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:07:55.495 [DEBUG] [Thread-21167 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:08:07.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:08:07.725 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:08:10.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:08:10.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:08:10.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-11-12T19:08:10.530 [DEBUG] [Thread-21168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:08:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 7, 56), 23.5, 20.81, 0.0, 32.62, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:08:10.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:07:56
2025-11-12T19:08:10.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:08:11.113 [DEBUG] [Thread-21169] [transport.py] [_log()] starting thread (client mode): 0x17360c10
2025-11-12T19:08:11.113 [DEBUG] [Thread-21169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:08:11.132 [DEBUG] [Thread-21169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:08:11.133 [INFO] [Thread-21169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:08:11.136 [DEBUG] [Thread-21169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:08:11.136 [DEBUG] [Thread-21169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:08:11.136 [DEBUG] [Thread-21169] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:08:11.136 [DEBUG] [Thread-21169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:08:11.136 [DEBUG] [Thread-21169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:08:11.136 [DEBUG] [Thread-21169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:08:11.136 [DEBUG] [Thread-21169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] client lang: <none>
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] server lang: <none>
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] kex follows: False
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] Compression: none
2025-11-12T19:08:11.137 [DEBUG] [Thread-21169] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:08:11.155 [DEBUG] [Thread-21169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:08:11.156 [DEBUG] [Thread-21169] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:08:11.156 [DEBUG] [Thread-21169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:08:11.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:08:11.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:08:11.158 [DEBUG] [Thread-21169] [transport.py] [_log()] userauth is OK
2025-11-12T19:08:11.158 [DEBUG] [Thread-21169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:08:11.158 [DEBUG] [Thread-21169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:08:11.158 [DEBUG] [Thread-21169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:08:11.159 [DEBUG] [Thread-21169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:08:11.186 [INFO] [Thread-21169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:08:11.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:08:11.818 [DEBUG] [Thread-21169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:08:11.818 [DEBUG] [Thread-21169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:08:11.818 [DEBUG] [Thread-21169] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:08:11.858 [DEBUG] [Thread-21169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:08:11.859 [DEBUG] [Thread-21169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:08:11.862 [DEBUG] [Thread-21169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:08:11.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:08:11.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:08:11.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:08:11.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:08:11.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:08:11.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:08:11.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:08:11.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:08:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:08:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.713627 -999.00  +22.40  18.81     26   +2.20 1 2 1 1 1   882    0 17.94 -84.79 ----- 30.9 18.8 269.6 28.3 23.2 -22.2 23.3 -21.2 23.1 -21.2 23.3 -22.2
2025-11-12T19:08:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:08:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:08:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.713627
2025-11-12T19:08:11.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:08:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:08:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:08:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:08:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:08:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:07:56', tmtdew=23.5, humidity=20.81, cloud=0.0, wind=32.62, temperature=22.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:07:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:08:11.884 [DEBUG] [Thread-21169] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:08:11.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:08:11.981 [DEBUG] [Thread-21172] [transport.py] [_log()] starting thread (client mode): 0x173635e0
2025-11-12T19:08:11.981 [DEBUG] [Thread-21172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:08:11.995 [DEBUG] [Thread-21172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:08:11.995 [INFO] [Thread-21172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:08:12.003 [DEBUG] [Thread-21172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:08:12.003 [DEBUG] [Thread-21172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:08:12.004 [DEBUG] [Thread-21172] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:08:12.004 [DEBUG] [Thread-21172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:08:12.004 [DEBUG] [Thread-21172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:08:12.004 [DEBUG] [Thread-21172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:08:12.004 [DEBUG] [Thread-21172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:08:12.004 [DEBUG] [Thread-21172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:08:12.004 [DEBUG] [Thread-21172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:08:12.004 [DEBUG] [Thread-21172] [transport.py] [_log()] client lang: <none>
2025-11-12T19:08:12.005 [DEBUG] [Thread-21172] [transport.py] [_log()] server lang: <none>
2025-11-12T19:08:12.005 [DEBUG] [Thread-21172] [transport.py] [_log()] kex follows: False
2025-11-12T19:08:12.005 [DEBUG] [Thread-21172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:08:12.005 [DEBUG] [Thread-21172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:08:12.005 [DEBUG] [Thread-21172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:08:12.005 [DEBUG] [Thread-21172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:08:12.005 [DEBUG] [Thread-21172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:08:12.006 [DEBUG] [Thread-21172] [transport.py] [_log()] Compression: none
2025-11-12T19:08:12.006 [DEBUG] [Thread-21172] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:08:12.065 [DEBUG] [Thread-21172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:08:12.066 [DEBUG] [Thread-21172] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:08:12.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:08:12.067 [DEBUG] [Thread-21172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:08:12.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:08:12.121 [DEBUG] [Thread-21172] [transport.py] [_log()] userauth is OK
2025-11-12T19:08:12.121 [DEBUG] [Thread-21172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:08:12.121 [DEBUG] [Thread-21172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:08:12.121 [DEBUG] [Thread-21172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:08:12.121 [DEBUG] [Thread-21172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:08:12.140 [INFO] [Thread-21172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:08:12.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:08:12.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:08:13.023 [DEBUG] [Thread-21172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:08:13.023 [DEBUG] [Thread-21172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:08:13.071 [DEBUG] [Thread-21172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:08:13.072 [DEBUG] [Thread-21172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:08:13.081 [DEBUG] [Thread-21172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:08:13.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:08:13.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-11-12T19:08: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') -> 00000000
2025-11-12T19:08:13.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:08:13.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:08:13.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:08:13.118 [DEBUG] [Thread-21172] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:08:25.557 [DEBUG] [Thread-21174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:08:40.609 [DEBUG] [Thread-21175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:08:43.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:08:43.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:08:43.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-11-12T19:08:43.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 8, 28), 23.49, 20.83, 0.0, 28.8, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:08:43.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:08:28
2025-11-12T19:08:43.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:08:44.029 [DEBUG] [Thread-21176] [transport.py] [_log()] starting thread (client mode): 0x149225c0
2025-11-12T19:08:44.029 [DEBUG] [Thread-21176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:08:44.051 [DEBUG] [Thread-21176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:08:44.051 [INFO] [Thread-21176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:08:44.054 [DEBUG] [Thread-21176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:08:44.054 [DEBUG] [Thread-21176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] client lang: <none>
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] server lang: <none>
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] kex follows: False
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:08:44.055 [DEBUG] [Thread-21176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:08:44.056 [DEBUG] [Thread-21176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:08:44.056 [DEBUG] [Thread-21176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:08:44.056 [DEBUG] [Thread-21176] [transport.py] [_log()] Compression: none
2025-11-12T19:08:44.056 [DEBUG] [Thread-21176] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:08:44.078 [DEBUG] [Thread-21176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:08:44.079 [DEBUG] [Thread-21176] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:08:44.079 [DEBUG] [Thread-21176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:08:44.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:08:44.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:08:44.082 [DEBUG] [Thread-21176] [transport.py] [_log()] userauth is OK
2025-11-12T19:08:44.082 [DEBUG] [Thread-21176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:08:44.082 [DEBUG] [Thread-21176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:08:44.082 [DEBUG] [Thread-21176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:08:44.082 [DEBUG] [Thread-21176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:08:44.120 [INFO] [Thread-21176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:08:44.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:08:44.782 [DEBUG] [Thread-21176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:08:44.782 [DEBUG] [Thread-21176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:08:44.782 [DEBUG] [Thread-21176] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:08:44.822 [DEBUG] [Thread-21176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:08:44.823 [DEBUG] [Thread-21176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:08:44.826 [DEBUG] [Thread-21176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:08:44.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:08:44.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:08:44.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:08:44.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:08:44.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:08:44.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:08:44.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:08:44.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:08:44.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:08:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.713974 -999.00  +22.40  21.99     26   +2.20 1 2 1 1 1   882    0 18.24 -72.78 ----- 13.3 22.0 269.8 33.0 23.1 -22.4 23.2 -21.2 23.1 -21.1 23.3 -22.1
2025-11-12T19:08:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:08:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:08:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.713974
2025-11-12T19:08:44.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:08:44.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:08:44.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:08:44.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:08:44.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:08:44.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:08:28', tmtdew=23.49, humidity=20.83, cloud=0.0, wind=28.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:08:07.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:08:44.852 [DEBUG] [Thread-21176] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:08:44.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:08:44.950 [DEBUG] [Thread-21179] [transport.py] [_log()] starting thread (client mode): 0x149224a0
2025-11-12T19:08:44.951 [DEBUG] [Thread-21179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:08:44.965 [DEBUG] [Thread-21179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:08:44.965 [INFO] [Thread-21179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] client lang: <none>
2025-11-12T19:08:44.973 [DEBUG] [Thread-21179] [transport.py] [_log()] server lang: <none>
2025-11-12T19:08:44.974 [DEBUG] [Thread-21179] [transport.py] [_log()] kex follows: False
2025-11-12T19:08:44.974 [DEBUG] [Thread-21179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:08:44.974 [DEBUG] [Thread-21179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:08:44.974 [DEBUG] [Thread-21179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:08:44.974 [DEBUG] [Thread-21179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:08:44.974 [DEBUG] [Thread-21179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:08:44.974 [DEBUG] [Thread-21179] [transport.py] [_log()] Compression: none
2025-11-12T19:08:44.974 [DEBUG] [Thread-21179] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:08:45.032 [DEBUG] [Thread-21179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:08:45.033 [DEBUG] [Thread-21179] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:08:45.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:08:45.034 [DEBUG] [Thread-21179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:08:45.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:08:45.090 [DEBUG] [Thread-21179] [transport.py] [_log()] userauth is OK
2025-11-12T19:08:45.090 [DEBUG] [Thread-21179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:08:45.091 [DEBUG] [Thread-21179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:08:45.091 [DEBUG] [Thread-21179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:08:45.091 [DEBUG] [Thread-21179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:08:45.111 [INFO] [Thread-21179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:08:45.112 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:08:45.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:08:45.917 [DEBUG] [Thread-21179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:08:45.917 [DEBUG] [Thread-21179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:08:45.965 [DEBUG] [Thread-21179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:08:45.965 [DEBUG] [Thread-21179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:08:45.974 [DEBUG] [Thread-21179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:08:45.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:08:45.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:08:45.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-11-12T19:08:46.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:08:46.003 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:08:46.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:08:46.011 [DEBUG] [Thread-21179] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:08:46.828 [DEBUG] [Thread-21181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:08:55.645 [DEBUG] [Thread-21182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:09:07.865 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:09:07.866 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:09:10.698 [DEBUG] [Thread-21183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:09:16.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:09:16.034 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:09:16.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-11-12T19:09:16.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 8, 28), 23.49, 20.83, 0.0, 28.8, 22.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:09:16.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:08:28
2025-11-12T19:09:16.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:09:16.924 [DEBUG] [Thread-21184] [transport.py] [_log()] starting thread (client mode): 0x11f12ef0
2025-11-12T19:09:16.924 [DEBUG] [Thread-21184] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:09:16.945 [DEBUG] [Thread-21184] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:09:16.946 [INFO] [Thread-21184] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] client lang: <none>
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] server lang: <none>
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] kex follows: False
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:09:16.949 [DEBUG] [Thread-21184] [transport.py] [_log()] Compression: none
2025-11-12T19:09:16.950 [DEBUG] [Thread-21184] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:09:16.969 [DEBUG] [Thread-21184] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:09:16.970 [DEBUG] [Thread-21184] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:09:16.970 [DEBUG] [Thread-21184] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:09:16.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:09:16.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:09:16.973 [DEBUG] [Thread-21184] [transport.py] [_log()] userauth is OK
2025-11-12T19:09:16.973 [DEBUG] [Thread-21184] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:09:16.973 [DEBUG] [Thread-21184] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:09:16.973 [DEBUG] [Thread-21184] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:09:16.973 [DEBUG] [Thread-21184] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:09:17.011 [INFO] [Thread-21184] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:09:17.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:09:17.635 [DEBUG] [Thread-21184] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:09:17.635 [DEBUG] [Thread-21184] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:09:17.635 [DEBUG] [Thread-21184] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:09:17.677 [DEBUG] [Thread-21184] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:09:17.677 [DEBUG] [Thread-21184] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:09:17.681 [DEBUG] [Thread-21184] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:09:17.692 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:09:17.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:09:17.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:09:17.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:09:17.701 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:09:17.703 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:09:17.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:09:17.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:09:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:09:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.714322 -999.00  +22.30  17.78     26   +2.20 1 2 1 1 1   881    0 18.19 -70.79 ----- 26.4 17.8 278.8 25.7 23.2 -22.4 23.2 -21.2 23.0 -21.9 23.2 -22.4
2025-11-12T19:09:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:09:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:09:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.714322
2025-11-12T19:09:17.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:09:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:09:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:09:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:09:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:09:17.705 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:08:28', tmtdew=23.49, humidity=20.83, cloud=0.0, wind=28.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-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:08:37.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:09:17.706 [DEBUG] [Thread-21184] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:09:17.789 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:09:25.740 [DEBUG] [Thread-21187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:09:40.791 [DEBUG] [Thread-21188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:09:46.907 [DEBUG] [Thread-21189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:09:55.823 [DEBUG] [Thread-21190 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:10:10.856 [DEBUG] [Thread-21191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:10:14.329 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:10:14.329 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:10:25.885 [DEBUG] [Thread-21192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:10:40.917 [DEBUG] [Thread-21193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:10:46.963 [DEBUG] [Thread-21194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:10:55.951 [DEBUG] [Thread-21195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:11:10.984 [DEBUG] [Thread-21196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:11:20.252 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:11:20.254 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:11:26.021 [DEBUG] [Thread-21197 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:11:31.259 [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-11-12T19:11:41.051 [DEBUG] [Thread-21198 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:11:47.047 [DEBUG] [Thread-21199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:11:56.084 [DEBUG] [Thread-21200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:12:01.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:12:01.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:12:01.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-11-12T19:12:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 11, 40), 23.3, 20.95, 0.0, 28.87, 22.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:12:01.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:11:40
2025-11-12T19:12:02.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:12:02.219 [DEBUG] [Thread-21201] [transport.py] [_log()] starting thread (client mode): 0x11f12c80
2025-11-12T19:12:02.219 [DEBUG] [Thread-21201] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:12:02.240 [DEBUG] [Thread-21201] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:12:02.241 [INFO] [Thread-21201] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] client lang: <none>
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] server lang: <none>
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] kex follows: False
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] Compression: none
2025-11-12T19:12:02.244 [DEBUG] [Thread-21201] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:12:02.262 [DEBUG] [Thread-21201] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:12:02.262 [DEBUG] [Thread-21201] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:12:02.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:12:02.264 [DEBUG] [Thread-21201] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:12:02.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:12:02.266 [DEBUG] [Thread-21201] [transport.py] [_log()] userauth is OK
2025-11-12T19:12:02.266 [DEBUG] [Thread-21201] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:12:02.266 [DEBUG] [Thread-21201] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:12:02.266 [DEBUG] [Thread-21201] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:12:02.266 [DEBUG] [Thread-21201] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:12:02.295 [INFO] [Thread-21201] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:12:02.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:12:02.923 [DEBUG] [Thread-21201] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:12:02.923 [DEBUG] [Thread-21201] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:12:02.924 [DEBUG] [Thread-21201] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:12:02.964 [DEBUG] [Thread-21201] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:12:02.965 [DEBUG] [Thread-21201] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:12:02.967 [DEBUG] [Thread-21201] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:12:02.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:12:02.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:12:02.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:12:02.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:12:02.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:12:02.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:12:02.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:12:02.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:12:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:12:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.716405 -999.00  +22.20  21.83     26   +2.20 1 2 1 1 1   876    0 18.67 -70.29 ----- 15.3 21.8 263.5 28.9 23.1 -22.3 23.1 -21.2 22.8 -21.3 23.1 -22.1
2025-11-12T19:12:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:12:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:12:02.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.716405
2025-11-12T19:12:02.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:12:02.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:12:02.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:12:02.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:12:02.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:12:02.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:11:40', tmtdew=23.3, humidity=20.95, cloud=0.0, wind=28.87, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:11:37.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:12:02.993 [DEBUG] [Thread-21201] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:12:03.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:12:03.089 [DEBUG] [Thread-21204] [transport.py] [_log()] starting thread (client mode): 0x11f105e0
2025-11-12T19:12:03.089 [DEBUG] [Thread-21204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:12:03.104 [DEBUG] [Thread-21204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:12:03.104 [INFO] [Thread-21204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:12:03.113 [DEBUG] [Thread-21204] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:12:03.114 [DEBUG] [Thread-21204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:12:03.114 [DEBUG] [Thread-21204] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:12:03.114 [DEBUG] [Thread-21204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:12:03.114 [DEBUG] [Thread-21204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:12:03.114 [DEBUG] [Thread-21204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:12:03.114 [DEBUG] [Thread-21204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:12:03.114 [DEBUG] [Thread-21204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:12:03.115 [DEBUG] [Thread-21204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:12:03.115 [DEBUG] [Thread-21204] [transport.py] [_log()] client lang: <none>
2025-11-12T19:12:03.115 [DEBUG] [Thread-21204] [transport.py] [_log()] server lang: <none>
2025-11-12T19:12:03.115 [DEBUG] [Thread-21204] [transport.py] [_log()] kex follows: False
2025-11-12T19:12:03.115 [DEBUG] [Thread-21204] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:12:03.115 [DEBUG] [Thread-21204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:12:03.115 [DEBUG] [Thread-21204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:12:03.116 [DEBUG] [Thread-21204] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:12:03.116 [DEBUG] [Thread-21204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:12:03.116 [DEBUG] [Thread-21204] [transport.py] [_log()] Compression: none
2025-11-12T19:12:03.116 [DEBUG] [Thread-21204] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:12:03.178 [DEBUG] [Thread-21204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:12:03.179 [DEBUG] [Thread-21204] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:12:03.179 [DEBUG] [Thread-21204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:12:03.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:12:03.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:12:03.243 [DEBUG] [Thread-21204] [transport.py] [_log()] userauth is OK
2025-11-12T19:12:03.243 [DEBUG] [Thread-21204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:12:03.243 [DEBUG] [Thread-21204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:12:03.243 [DEBUG] [Thread-21204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:12:03.243 [DEBUG] [Thread-21204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:12:03.266 [INFO] [Thread-21204] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:12:03.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:12:03.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:12:04.110 [DEBUG] [Thread-21204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:12:04.111 [DEBUG] [Thread-21204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:12:04.158 [DEBUG] [Thread-21204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:12:04.159 [DEBUG] [Thread-21204] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:12:04.168 [DEBUG] [Thread-21204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:12:04.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:12:04.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:12:04.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:12:04.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:12:04.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:12:04.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:12:04.205 [DEBUG] [Thread-21204] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:12:11.118 [DEBUG] [Thread-21206 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:12:25.485 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:12:25.486 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:12:26.170 [DEBUG] [Thread-21207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:12:34.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:12:34.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:12:34.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-11-12T19:12:34.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 12, 12), 23.27, 21.0, 0.0, 29.8, 22.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:12:34.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:12:12
2025-11-12T19:12:35.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:12:35.154 [DEBUG] [Thread-21208] [transport.py] [_log()] starting thread (client mode): 0x149208e0
2025-11-12T19:12:35.154 [DEBUG] [Thread-21208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:12:35.175 [DEBUG] [Thread-21208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:12:35.175 [INFO] [Thread-21208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:12:35.178 [DEBUG] [Thread-21208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] client lang: <none>
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] server lang: <none>
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] kex follows: False
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] Compression: none
2025-11-12T19:12:35.179 [DEBUG] [Thread-21208] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:12:35.195 [DEBUG] [Thread-21208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:12:35.195 [DEBUG] [Thread-21208] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:12:35.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:12:35.196 [DEBUG] [Thread-21208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:12:35.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:12:35.198 [DEBUG] [Thread-21208] [transport.py] [_log()] userauth is OK
2025-11-12T19:12:35.198 [DEBUG] [Thread-21208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:12:35.198 [DEBUG] [Thread-21208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:12:35.198 [DEBUG] [Thread-21208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:12:35.198 [DEBUG] [Thread-21208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:12:35.223 [INFO] [Thread-21208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:12:35.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:12:35.863 [DEBUG] [Thread-21208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:12:35.863 [DEBUG] [Thread-21208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:12:35.863 [DEBUG] [Thread-21208] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:12:35.903 [DEBUG] [Thread-21208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:12:35.903 [DEBUG] [Thread-21208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:12:35.905 [DEBUG] [Thread-21208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:12:35.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:12:35.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:12:35.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:12:35.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:12:35.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:12:35.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:12:35.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:12:35.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:12:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:12:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.716752 -999.00  +22.20  25.11     26   +2.20 1 2 1 1 1   875    0 18.44 -71.85 ----- 27.8 25.1 256.0 34.0 23.1 -22.6 23.1 -21.3 22.8 -21.3 23.1 -22.4
2025-11-12T19:12:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:12:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:12:35.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.716752
2025-11-12T19:12:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:12:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:12:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:12:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:12:35.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:12:35.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:12:12', tmtdew=23.27, humidity=21.0, cloud=0.0, wind=29.8, temperature=22.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:12:07.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:12:35.929 [DEBUG] [Thread-21208] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:12:36.014 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:12:36.026 [DEBUG] [Thread-21211] [transport.py] [_log()] starting thread (client mode): 0x149aa7a0
2025-11-12T19:12:36.026 [DEBUG] [Thread-21211] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:12:36.041 [DEBUG] [Thread-21211] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:12:36.041 [INFO] [Thread-21211] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:12:36.048 [DEBUG] [Thread-21211] [transport.py] [_log()] client lang: <none>
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] server lang: <none>
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] kex follows: False
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] Compression: none
2025-11-12T19:12:36.049 [DEBUG] [Thread-21211] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:12:36.113 [DEBUG] [Thread-21211] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:12:36.113 [DEBUG] [Thread-21211] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:12:36.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:12:36.114 [DEBUG] [Thread-21211] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:12:36.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:12:36.172 [DEBUG] [Thread-21211] [transport.py] [_log()] userauth is OK
2025-11-12T19:12:36.173 [DEBUG] [Thread-21211] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:12:36.173 [DEBUG] [Thread-21211] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:12:36.173 [DEBUG] [Thread-21211] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:12:36.173 [DEBUG] [Thread-21211] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:12:36.195 [INFO] [Thread-21211] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:12: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-11-12T19:12:36.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:12:37.054 [DEBUG] [Thread-21211] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:12:37.054 [DEBUG] [Thread-21211] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:12:37.102 [DEBUG] [Thread-21211] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:12:37.103 [DEBUG] [Thread-21211] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:12:37.112 [DEBUG] [Thread-21211] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:12:37.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:12:37.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-11-12T19:12:37.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-11-12T19:12:37.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:12:37.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:12:37.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:12:37.147 [DEBUG] [Thread-21211] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:12:41.209 [DEBUG] [Thread-21213 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:12:47.104 [DEBUG] [Thread-21214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:12:56.256 [DEBUG] [Thread-21215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:13:07.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:13:07.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:13:07.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-11-12T19:13:07.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 12, 44), 23.19, 21.51, 0.0, 26.4, 22.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:13:07.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:12:44
2025-11-12T19:13:07.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:13:08.063 [DEBUG] [Thread-21216] [transport.py] [_log()] starting thread (client mode): 0x11f10c10
2025-11-12T19:13:08.063 [DEBUG] [Thread-21216] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:13:08.083 [DEBUG] [Thread-21216] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:13:08.083 [INFO] [Thread-21216] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] client lang: <none>
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] server lang: <none>
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] kex follows: False
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:13:08.087 [DEBUG] [Thread-21216] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:13:08.088 [DEBUG] [Thread-21216] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:13:08.088 [DEBUG] [Thread-21216] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:13:08.088 [DEBUG] [Thread-21216] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:13:08.088 [DEBUG] [Thread-21216] [transport.py] [_log()] Compression: none
2025-11-12T19:13:08.088 [DEBUG] [Thread-21216] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:13:08.097 [DEBUG] [Thread-21216] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:13:08.097 [DEBUG] [Thread-21216] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:13:08.098 [DEBUG] [Thread-21216] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:13:08.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:13:08.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:13:08.100 [DEBUG] [Thread-21216] [transport.py] [_log()] userauth is OK
2025-11-12T19:13:08.100 [DEBUG] [Thread-21216] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:13:08.100 [DEBUG] [Thread-21216] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:13:08.100 [DEBUG] [Thread-21216] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:13:08.100 [DEBUG] [Thread-21216] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:13:08.124 [INFO] [Thread-21216] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:13:08.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:13:08.756 [DEBUG] [Thread-21216] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:13:08.757 [DEBUG] [Thread-21216] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:13:08.757 [DEBUG] [Thread-21216] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:13:08.798 [DEBUG] [Thread-21216] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:13:08.798 [DEBUG] [Thread-21216] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:13:08.801 [DEBUG] [Thread-21216] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:13:08.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:13:08.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:13:08.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:13:08.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:13:08.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:13:08.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:13:08.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:13:08.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:13:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:13:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.717099 -999.00  +22.10  22.56     27   +2.20 1 2 1 1 1   873    0 17.92 -80.02 ----- 25.0 22.6 282.6 31.5 23.0 -22.6 23.0 -21.3 22.8 -21.6 23.0 -22.4
2025-11-12T19:13:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:13:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:13:08.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.717099
2025-11-12T19:13:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:13:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:13:08.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:13:08.827 [DEBUG] [Thread-21216] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:13:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:13:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:13:08.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:12:44', tmtdew=23.19, humidity=21.51, cloud=0.0, wind=26.4, temperature=22.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:12:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:13:08.914 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:13:08.926 [DEBUG] [Thread-21219] [transport.py] [_log()] starting thread (client mode): 0x11f10250
2025-11-12T19:13:08.926 [DEBUG] [Thread-21219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:13:08.941 [DEBUG] [Thread-21219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:13:08.941 [INFO] [Thread-21219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:13:08.948 [DEBUG] [Thread-21219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:13:08.949 [DEBUG] [Thread-21219] [transport.py] [_log()] client lang: <none>
2025-11-12T19:13:08.950 [DEBUG] [Thread-21219] [transport.py] [_log()] server lang: <none>
2025-11-12T19:13:08.950 [DEBUG] [Thread-21219] [transport.py] [_log()] kex follows: False
2025-11-12T19:13:08.950 [DEBUG] [Thread-21219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:13:08.950 [DEBUG] [Thread-21219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:13:08.950 [DEBUG] [Thread-21219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:13:08.950 [DEBUG] [Thread-21219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:13:08.951 [DEBUG] [Thread-21219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:13:08.951 [DEBUG] [Thread-21219] [transport.py] [_log()] Compression: none
2025-11-12T19:13:08.951 [DEBUG] [Thread-21219] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:13:09.009 [DEBUG] [Thread-21219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:13:09.009 [DEBUG] [Thread-21219] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:13:09.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:13:09.010 [DEBUG] [Thread-21219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:13:09.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:13:09.065 [DEBUG] [Thread-21219] [transport.py] [_log()] userauth is OK
2025-11-12T19:13:09.066 [DEBUG] [Thread-21219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:13:09.066 [DEBUG] [Thread-21219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:13:09.066 [DEBUG] [Thread-21219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:13:09.066 [DEBUG] [Thread-21219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:13:09.087 [INFO] [Thread-21219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:13:09.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:13:09.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:13:09.941 [DEBUG] [Thread-21219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:13:09.941 [DEBUG] [Thread-21219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:13:09.989 [DEBUG] [Thread-21219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:13:09.989 [DEBUG] [Thread-21219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:13:09.998 [DEBUG] [Thread-21219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:13:10.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:13: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')
2025-11-12T19:13:10.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-11-12T19:13:10.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:13:10.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:13:10.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:13:10.033 [DEBUG] [Thread-21219] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:13:11.295 [DEBUG] [Thread-21221 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:13:26.346 [DEBUG] [Thread-21222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:13:34.512 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:13:34.513 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:13:40.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:13:40.056 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:13:40.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-11-12T19:13:40.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 13, 16), 23.16, 21.56, 0.0, 27.89, 22.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:13:40.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:13:16
2025-11-12T19:13:40.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:13:40.961 [DEBUG] [Thread-21223] [transport.py] [_log()] starting thread (client mode): 0x149a8f40
2025-11-12T19:13:40.961 [DEBUG] [Thread-21223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:13:40.981 [DEBUG] [Thread-21223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:13:40.981 [INFO] [Thread-21223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:13:40.984 [DEBUG] [Thread-21223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] client lang: <none>
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] server lang: <none>
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] kex follows: False
2025-11-12T19:13:40.985 [DEBUG] [Thread-21223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:13:40.986 [DEBUG] [Thread-21223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:13:40.986 [DEBUG] [Thread-21223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:13:40.986 [DEBUG] [Thread-21223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:13:40.986 [DEBUG] [Thread-21223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:13:40.986 [DEBUG] [Thread-21223] [transport.py] [_log()] Compression: none
2025-11-12T19:13:40.986 [DEBUG] [Thread-21223] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:13:41.002 [DEBUG] [Thread-21223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:13:41.003 [DEBUG] [Thread-21223] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:13:41.003 [DEBUG] [Thread-21223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:13:41.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:13:41.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:13:41.006 [DEBUG] [Thread-21223] [transport.py] [_log()] userauth is OK
2025-11-12T19:13:41.006 [DEBUG] [Thread-21223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:13:41.006 [DEBUG] [Thread-21223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:13:41.006 [DEBUG] [Thread-21223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:13:41.006 [DEBUG] [Thread-21223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:13:41.031 [INFO] [Thread-21223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:13:41.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:13:41.381 [DEBUG] [Thread-21225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:13:41.649 [DEBUG] [Thread-21223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:13:41.649 [DEBUG] [Thread-21223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:13:41.650 [DEBUG] [Thread-21223] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:13:41.691 [DEBUG] [Thread-21223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:13:41.691 [DEBUG] [Thread-21223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:13:41.695 [DEBUG] [Thread-21223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:13:41.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:13:41.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:13:41.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:13:41.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:13:41.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:13:41.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:13:41.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:13:41.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:13:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:13:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.717447 -999.00  +22.10  20.35     27   +2.20 1 2 1 1 1   872    0 18.68 -72.17 ----- 21.0 20.4 274.9 33.0 23.0 -22.4 22.9 -21.1 22.7 -21.5 22.9 -22.3
2025-11-12T19:13:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:13:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:13:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.717447
2025-11-12T19:13:41.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:13:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:13:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:13:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:13:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:13:41.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:13:16', tmtdew=23.16, humidity=21.56, cloud=0.0, wind=27.89, temperature=22.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:13:07.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:13:41.723 [DEBUG] [Thread-21223] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:13:41.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:13:41.819 [DEBUG] [Thread-21227] [transport.py] [_log()] starting thread (client mode): 0x14921570
2025-11-12T19:13:41.819 [DEBUG] [Thread-21227] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:13:41.833 [DEBUG] [Thread-21227] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:13:41.834 [INFO] [Thread-21227] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] client lang: <none>
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] server lang: <none>
2025-11-12T19:13:41.841 [DEBUG] [Thread-21227] [transport.py] [_log()] kex follows: False
2025-11-12T19:13:41.842 [DEBUG] [Thread-21227] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:13:41.842 [DEBUG] [Thread-21227] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:13:41.842 [DEBUG] [Thread-21227] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:13:41.842 [DEBUG] [Thread-21227] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:13:41.842 [DEBUG] [Thread-21227] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:13:41.842 [DEBUG] [Thread-21227] [transport.py] [_log()] Compression: none
2025-11-12T19:13:41.842 [DEBUG] [Thread-21227] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:13:41.901 [DEBUG] [Thread-21227] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:13:41.902 [DEBUG] [Thread-21227] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:13:41.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:13:41.903 [DEBUG] [Thread-21227] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:13:41.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:13:41.957 [DEBUG] [Thread-21227] [transport.py] [_log()] userauth is OK
2025-11-12T19:13:41.958 [DEBUG] [Thread-21227] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:13:41.958 [DEBUG] [Thread-21227] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:13:41.958 [DEBUG] [Thread-21227] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:13:41.958 [DEBUG] [Thread-21227] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:13:41.978 [INFO] [Thread-21227] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:13:41.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:13:41.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:13:42.805 [DEBUG] [Thread-21227] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:13:42.805 [DEBUG] [Thread-21227] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:13:42.854 [DEBUG] [Thread-21227] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:13:42.854 [DEBUG] [Thread-21227] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:13:42.863 [DEBUG] [Thread-21227] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:13:42.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:13:42.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-11-12T19:13:42.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-11-12T19:13:42.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:13:42.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:13:42.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:13:42.899 [DEBUG] [Thread-21227] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:13:47.178 [DEBUG] [Thread-21229 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:13:56.421 [DEBUG] [Thread-21230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:14:11.463 [DEBUG] [Thread-21231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:14:12.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:14:12.922 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:14:12.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-11-12T19:14:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 13, 48), 23.08, 21.6, 0.0, 27.0, 22.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:14:13.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:13:48
2025-11-12T19:14:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:14:13.847 [DEBUG] [Thread-21232] [transport.py] [_log()] starting thread (client mode): 0x11f13850
2025-11-12T19:14:13.847 [DEBUG] [Thread-21232] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:14:13.867 [DEBUG] [Thread-21232] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:14:13.867 [INFO] [Thread-21232] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] client lang: <none>
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] server lang: <none>
2025-11-12T19:14:13.869 [DEBUG] [Thread-21232] [transport.py] [_log()] kex follows: False
2025-11-12T19:14:13.870 [DEBUG] [Thread-21232] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:14:13.870 [DEBUG] [Thread-21232] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:14:13.870 [DEBUG] [Thread-21232] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:14:13.870 [DEBUG] [Thread-21232] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:14:13.870 [DEBUG] [Thread-21232] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:14:13.870 [DEBUG] [Thread-21232] [transport.py] [_log()] Compression: none
2025-11-12T19:14:13.870 [DEBUG] [Thread-21232] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:14:13.883 [DEBUG] [Thread-21232] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:14:13.883 [DEBUG] [Thread-21232] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:14:13.884 [DEBUG] [Thread-21232] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:14:13.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:14:13.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:14:13.885 [DEBUG] [Thread-21232] [transport.py] [_log()] userauth is OK
2025-11-12T19:14:13.886 [DEBUG] [Thread-21232] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:14:13.886 [DEBUG] [Thread-21232] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:14:13.886 [DEBUG] [Thread-21232] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:14:13.886 [DEBUG] [Thread-21232] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:14:13.905 [INFO] [Thread-21232] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:14:13.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:14:14.543 [DEBUG] [Thread-21232] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:14:14.543 [DEBUG] [Thread-21232] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:14:14.544 [DEBUG] [Thread-21232] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:14:14.586 [DEBUG] [Thread-21232] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:14:14.586 [DEBUG] [Thread-21232] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:14:14.590 [DEBUG] [Thread-21232] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:14:14.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:14:14.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:14:14.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:14:14.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:14:14.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:14:14.617 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:14:14.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:14:14.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:14:14.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:14:14.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.717794 -999.00  +22.10  15.16     27   +2.20 1 2 1 1 1   871    0 18.41 -61.85 ----- 15.2 15.2 274.6 32.9 23.0 -22.5 22.9 -21.4 22.6 -21.4 22.9 -22.4
2025-11-12T19:14:14.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:14:14.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:14:14.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.717794
2025-11-12T19:14:14.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:14:14.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:14:14.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:14:14.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:14:14.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:14:14.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:13:48', tmtdew=23.08, humidity=21.6, cloud=0.0, wind=27.0, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:13:37.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:14:14.620 [DEBUG] [Thread-21232] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:14:14.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:14:14.717 [DEBUG] [Thread-21235] [transport.py] [_log()] starting thread (client mode): 0x173bc8e0
2025-11-12T19:14:14.717 [DEBUG] [Thread-21235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:14:14.732 [DEBUG] [Thread-21235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:14:14.732 [INFO] [Thread-21235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:14:14.739 [DEBUG] [Thread-21235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:14:14.739 [DEBUG] [Thread-21235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:14:14.739 [DEBUG] [Thread-21235] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:14:14.739 [DEBUG] [Thread-21235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:14:14.739 [DEBUG] [Thread-21235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:14:14.739 [DEBUG] [Thread-21235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] client lang: <none>
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] server lang: <none>
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] kex follows: False
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:14:14.740 [DEBUG] [Thread-21235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:14:14.741 [DEBUG] [Thread-21235] [transport.py] [_log()] Compression: none
2025-11-12T19:14:14.741 [DEBUG] [Thread-21235] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:14:14.797 [DEBUG] [Thread-21235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:14:14.798 [DEBUG] [Thread-21235] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:14:14.799 [DEBUG] [Thread-21235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:14:14.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:14:14.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:14:14.857 [DEBUG] [Thread-21235] [transport.py] [_log()] userauth is OK
2025-11-12T19:14:14.857 [DEBUG] [Thread-21235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:14:14.858 [DEBUG] [Thread-21235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:14:14.858 [DEBUG] [Thread-21235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:14:14.858 [DEBUG] [Thread-21235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:14:14.877 [INFO] [Thread-21235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:14:14.877 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:14:14.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:14:15.703 [DEBUG] [Thread-21235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:14:15.704 [DEBUG] [Thread-21235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:14:15.751 [DEBUG] [Thread-21235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:14:15.751 [DEBUG] [Thread-21235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:14:15.760 [DEBUG] [Thread-21235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:14:15.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:14:15.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-11-12T19:14:15.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-11-12T19:14:15.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:14:15.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:14:15.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:14:15.794 [DEBUG] [Thread-21235] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:14:26.496 [DEBUG] [Thread-21237 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:14:39.604 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:14:39.605 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:14:41.546 [DEBUG] [Thread-21238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:14:45.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:14:45.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:14:45.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:14:46.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 14, 20), 23.07, 21.63, 0.0, 29.98, 22.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:14:46.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:14:20
2025-11-12T19:14:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:14:46.735 [DEBUG] [Thread-21239] [transport.py] [_log()] starting thread (client mode): 0x149aa020
2025-11-12T19:14:46.735 [DEBUG] [Thread-21239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:14:46.755 [DEBUG] [Thread-21239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:14:46.755 [INFO] [Thread-21239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:14:46.758 [DEBUG] [Thread-21239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] client lang: <none>
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] server lang: <none>
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] kex follows: False
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] Compression: none
2025-11-12T19:14:46.759 [DEBUG] [Thread-21239] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:14:46.777 [DEBUG] [Thread-21239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:14:46.778 [DEBUG] [Thread-21239] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:14:46.778 [DEBUG] [Thread-21239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:14:46.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:14:46.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:14:46.780 [DEBUG] [Thread-21239] [transport.py] [_log()] userauth is OK
2025-11-12T19:14:46.780 [DEBUG] [Thread-21239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:14:46.780 [DEBUG] [Thread-21239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:14:46.780 [DEBUG] [Thread-21239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:14:46.780 [DEBUG] [Thread-21239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:14:46.816 [INFO] [Thread-21239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:14:46.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:14:47.238 [DEBUG] [Thread-21241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:14:47.494 [DEBUG] [Thread-21239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:14:47.495 [DEBUG] [Thread-21239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:14:47.495 [DEBUG] [Thread-21239] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:14:47.535 [DEBUG] [Thread-21239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:14:47.536 [DEBUG] [Thread-21239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:14:47.538 [DEBUG] [Thread-21239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:14:47.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:14:47.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:14:47.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:14:47.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:14:47.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:14:47.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:14:47.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:14:47.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:14:47.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:14:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.718141 -999.00  +22.10  22.11     27   +2.20 1 2 1 1 1   869    0 18.73 -60.24 ----- 20.2 22.1 272.6 32.2 22.9 -22.5 22.9 -21.3 22.6 -21.3 22.9 -22.4
2025-11-12T19:14:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:14:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:14:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.718141
2025-11-12T19:14:47.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:14:47.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:14:47.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:14:47.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:14:47.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:14:47.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:14:20', tmtdew=23.07, humidity=21.63, cloud=0.0, wind=29.98, temperature=22.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:14:07.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:14:47.566 [DEBUG] [Thread-21239] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:14:47.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:14:47.661 [DEBUG] [Thread-21243] [transport.py] [_log()] starting thread (client mode): 0x173be680
2025-11-12T19:14:47.661 [DEBUG] [Thread-21243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:14:47.675 [DEBUG] [Thread-21243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:14:47.675 [INFO] [Thread-21243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:14:47.682 [DEBUG] [Thread-21243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:14:47.682 [DEBUG] [Thread-21243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] client lang: <none>
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] server lang: <none>
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] kex follows: False
2025-11-12T19:14:47.683 [DEBUG] [Thread-21243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:14:47.684 [DEBUG] [Thread-21243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:14:47.684 [DEBUG] [Thread-21243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:14:47.684 [DEBUG] [Thread-21243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:14:47.684 [DEBUG] [Thread-21243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:14:47.684 [DEBUG] [Thread-21243] [transport.py] [_log()] Compression: none
2025-11-12T19:14:47.684 [DEBUG] [Thread-21243] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:14:47.742 [DEBUG] [Thread-21243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:14:47.743 [DEBUG] [Thread-21243] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:14:47.743 [DEBUG] [Thread-21243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:14:47.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:14:47.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:14:47.801 [DEBUG] [Thread-21243] [transport.py] [_log()] userauth is OK
2025-11-12T19:14:47.802 [DEBUG] [Thread-21243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:14:47.802 [DEBUG] [Thread-21243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:14:47.802 [DEBUG] [Thread-21243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:14:47.802 [DEBUG] [Thread-21243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:14:47.823 [INFO] [Thread-21243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:14:47.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:14:47.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:14:48.649 [DEBUG] [Thread-21243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:14:48.649 [DEBUG] [Thread-21243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:14:48.697 [DEBUG] [Thread-21243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:14:48.697 [DEBUG] [Thread-21243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:14:48.705 [DEBUG] [Thread-21243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:14:48.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:14: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-11-12T19:14: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-11-12T19:14:48.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:14:48.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:14:48.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:14:48.738 [DEBUG] [Thread-21243] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:14:56.578 [DEBUG] [Thread-21245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:15:11.629 [DEBUG] [Thread-21246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:15:18.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:15:18.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:15:18.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-11-12T19:15:19.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 14, 52), 22.99, 21.66, 0.0, 30.56, 22.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:15:19.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:14:52
2025-11-12T19:15:19.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:15:19.684 [DEBUG] [Thread-21247] [transport.py] [_log()] starting thread (client mode): 0x149a8f40
2025-11-12T19:15:19.684 [DEBUG] [Thread-21247] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:15:19.704 [DEBUG] [Thread-21247] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:15:19.704 [INFO] [Thread-21247] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:15:19.707 [DEBUG] [Thread-21247] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] client lang: <none>
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] server lang: <none>
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] kex follows: False
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:15:19.708 [DEBUG] [Thread-21247] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:15:19.709 [DEBUG] [Thread-21247] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:15:19.709 [DEBUG] [Thread-21247] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:15:19.709 [DEBUG] [Thread-21247] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:15:19.709 [DEBUG] [Thread-21247] [transport.py] [_log()] Compression: none
2025-11-12T19:15:19.709 [DEBUG] [Thread-21247] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:15:19.728 [DEBUG] [Thread-21247] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:15:19.728 [DEBUG] [Thread-21247] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:15:19.729 [DEBUG] [Thread-21247] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:15:19.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:15:19.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:15:19.731 [DEBUG] [Thread-21247] [transport.py] [_log()] userauth is OK
2025-11-12T19:15:19.731 [DEBUG] [Thread-21247] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:15:19.731 [DEBUG] [Thread-21247] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:15:19.731 [DEBUG] [Thread-21247] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:15:19.732 [DEBUG] [Thread-21247] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:15:19.754 [INFO] [Thread-21247] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:15:19.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:15:20.402 [DEBUG] [Thread-21247] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:15:20.402 [DEBUG] [Thread-21247] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:15:20.402 [DEBUG] [Thread-21247] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:15:20.442 [DEBUG] [Thread-21247] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:15:20.443 [DEBUG] [Thread-21247] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:15:20.446 [DEBUG] [Thread-21247] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:15:20.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:15:20.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:15:20.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:15:20.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:15:20.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:15:20.468 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:15:20.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:15:20.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:15:20.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:15:20.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.718488 -999.00  +22.00  28.45     27   +2.30 1 2 1 1 1   867    0 18.76 -66.29 ----- 22.2 28.4 266.7 38.0 22.9 -22.4 22.9 -21.3 22.6 -21.2 22.8 -22.4
2025-11-12T19:15:20.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:15:20.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:15:20.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.718488
2025-11-12T19:15:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:15:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:15:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:15:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:15:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:15:20.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:14:52', tmtdew=22.99, humidity=21.66, cloud=0.0, wind=30.56, temperature=22.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:14:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:15:20.471 [DEBUG] [Thread-21247] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:15:20.560 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:15:20.571 [DEBUG] [Thread-21250] [transport.py] [_log()] starting thread (client mode): 0x11f13850
2025-11-12T19:15:20.571 [DEBUG] [Thread-21250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:15:20.586 [DEBUG] [Thread-21250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:15:20.587 [INFO] [Thread-21250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:15:20.594 [DEBUG] [Thread-21250] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:15:20.594 [DEBUG] [Thread-21250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:15:20.594 [DEBUG] [Thread-21250] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:15:20.594 [DEBUG] [Thread-21250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] client lang: <none>
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] server lang: <none>
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] kex follows: False
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:15:20.595 [DEBUG] [Thread-21250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:15:20.596 [DEBUG] [Thread-21250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:15:20.596 [DEBUG] [Thread-21250] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:15:20.596 [DEBUG] [Thread-21250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:15:20.596 [DEBUG] [Thread-21250] [transport.py] [_log()] Compression: none
2025-11-12T19:15:20.596 [DEBUG] [Thread-21250] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:15:20.657 [DEBUG] [Thread-21250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:15:20.658 [DEBUG] [Thread-21250] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:15:20.659 [DEBUG] [Thread-21250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:15:20.659 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:15:20.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:15:20.713 [DEBUG] [Thread-21250] [transport.py] [_log()] userauth is OK
2025-11-12T19:15:20.714 [DEBUG] [Thread-21250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:15:20.714 [DEBUG] [Thread-21250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:15:20.714 [DEBUG] [Thread-21250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:15:20.714 [DEBUG] [Thread-21250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:15:20.734 [INFO] [Thread-21250] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:15:20.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:15:20.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:15:21.570 [DEBUG] [Thread-21250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:15:21.570 [DEBUG] [Thread-21250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:15:21.618 [DEBUG] [Thread-21250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:15:21.618 [DEBUG] [Thread-21250] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:15:21.626 [DEBUG] [Thread-21250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:15:21.634 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:15:21.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-11-12T19:15:21.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:15:21.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:15:21.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:15:21.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:15:21.657 [DEBUG] [Thread-21250] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:15:26.662 [DEBUG] [Thread-21252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:15:41.705 [DEBUG] [Thread-21253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:15:46.096 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:15:46.097 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:15:47.311 [DEBUG] [Thread-21254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:15:51.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:15:51.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:15:51.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-11-12T19:15:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 15, 24), 22.94, 21.73, 0.0, 31.9, 22.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:15:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:15:24
2025-11-12T19:15:52.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:15:52.554 [DEBUG] [Thread-21255] [transport.py] [_log()] starting thread (client mode): 0x149079d0
2025-11-12T19:15:52.554 [DEBUG] [Thread-21255] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:15:52.575 [DEBUG] [Thread-21255] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:15:52.575 [INFO] [Thread-21255] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:15:52.578 [DEBUG] [Thread-21255] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:15:52.578 [DEBUG] [Thread-21255] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:15:52.578 [DEBUG] [Thread-21255] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:15:52.578 [DEBUG] [Thread-21255] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:15:52.578 [DEBUG] [Thread-21255] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] client lang: <none>
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] server lang: <none>
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] kex follows: False
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] Compression: none
2025-11-12T19:15:52.579 [DEBUG] [Thread-21255] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:15:52.597 [DEBUG] [Thread-21255] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:15:52.597 [DEBUG] [Thread-21255] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:15:52.598 [DEBUG] [Thread-21255] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:15:52.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:15:52.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:15:52.600 [DEBUG] [Thread-21255] [transport.py] [_log()] userauth is OK
2025-11-12T19:15:52.600 [DEBUG] [Thread-21255] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:15:52.600 [DEBUG] [Thread-21255] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:15:52.600 [DEBUG] [Thread-21255] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:15:52.600 [DEBUG] [Thread-21255] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:15:52.624 [INFO] [Thread-21255] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:15:52.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:15:53.224 [DEBUG] [Thread-21255] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:15:53.224 [DEBUG] [Thread-21255] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:15:53.225 [DEBUG] [Thread-21255] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:15:53.266 [DEBUG] [Thread-21255] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:15:53.266 [DEBUG] [Thread-21255] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:15:53.269 [DEBUG] [Thread-21255] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:15:53.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:15:53.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:15:53.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:15:53.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:15:53.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:15:53.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:15:53.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:15:53.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:15:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:15:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.719183 -999.00  +22.00  26.99     27   +2.30 1 2 1 1 1   863    0 18.73 -59.61 ----- 22.4 27.0 265.2 36.8 22.8 -22.5 22.8 -21.2 22.4 -21.3 22.7 -22.2
2025-11-12T19:15:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:15:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:15:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.719183
2025-11-12T19:15:53.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:15:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:15:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:15:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:15:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:15:53.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:15:24', tmtdew=22.94, humidity=21.73, cloud=0.0, wind=31.9, temperature=22.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:15:37.411', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:15:53.297 [DEBUG] [Thread-21255] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:15:53.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:15:53.395 [DEBUG] [Thread-21258] [transport.py] [_log()] starting thread (client mode): 0x14920190
2025-11-12T19:15:53.396 [DEBUG] [Thread-21258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:15:53.410 [DEBUG] [Thread-21258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:15:53.410 [INFO] [Thread-21258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:15:53.418 [DEBUG] [Thread-21258] [transport.py] [_log()] client lang: <none>
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] server lang: <none>
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] kex follows: False
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] Compression: none
2025-11-12T19:15:53.419 [DEBUG] [Thread-21258] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:15:53.477 [DEBUG] [Thread-21258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:15:53.478 [DEBUG] [Thread-21258] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:15:53.479 [DEBUG] [Thread-21258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:15:53.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:15:53.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:15:53.533 [DEBUG] [Thread-21258] [transport.py] [_log()] userauth is OK
2025-11-12T19:15:53.533 [DEBUG] [Thread-21258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:15:53.533 [DEBUG] [Thread-21258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:15:53.533 [DEBUG] [Thread-21258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:15:53.533 [DEBUG] [Thread-21258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:15:53.551 [INFO] [Thread-21258] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:15:53.552 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:15:53.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:15:54.386 [DEBUG] [Thread-21258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:15:54.386 [DEBUG] [Thread-21258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:15:54.433 [DEBUG] [Thread-21258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:15:54.434 [DEBUG] [Thread-21258] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:15:54.443 [DEBUG] [Thread-21258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:15:54.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:15:54.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-11-12T19:15:54.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-11-12T19:15:54.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:15:54.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:15:54.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:15:54.479 [DEBUG] [Thread-21258] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:15:56.744 [DEBUG] [Thread-21260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:16:11.781 [DEBUG] [Thread-21261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:16:24.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:16:24.499 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:16:24.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:16:25.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 15, 56), 22.9, 21.71, 0.0, 29.06, 22.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:16:25.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:15:56
2025-11-12T19:16:25.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:16:25.404 [DEBUG] [Thread-21262] [transport.py] [_log()] starting thread (client mode): 0x11f12200
2025-11-12T19:16:25.404 [DEBUG] [Thread-21262] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:16:25.424 [DEBUG] [Thread-21262] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:16:25.424 [INFO] [Thread-21262] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:16:25.427 [DEBUG] [Thread-21262] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:16:25.427 [DEBUG] [Thread-21262] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:16:25.427 [DEBUG] [Thread-21262] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:16:25.427 [DEBUG] [Thread-21262] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:16:25.427 [DEBUG] [Thread-21262] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:16:25.427 [DEBUG] [Thread-21262] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] client lang: <none>
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] server lang: <none>
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] kex follows: False
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] Compression: none
2025-11-12T19:16:25.428 [DEBUG] [Thread-21262] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:16:25.445 [DEBUG] [Thread-21262] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:16:25.445 [DEBUG] [Thread-21262] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:16:25.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:16:25.446 [DEBUG] [Thread-21262] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:16:25.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:16:25.448 [DEBUG] [Thread-21262] [transport.py] [_log()] userauth is OK
2025-11-12T19:16:25.449 [DEBUG] [Thread-21262] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:16:25.449 [DEBUG] [Thread-21262] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:16:25.449 [DEBUG] [Thread-21262] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:16:25.449 [DEBUG] [Thread-21262] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:16:25.473 [INFO] [Thread-21262] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:16:25.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:16:26.120 [DEBUG] [Thread-21262] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:16:26.120 [DEBUG] [Thread-21262] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:16:26.121 [DEBUG] [Thread-21262] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:16:26.162 [DEBUG] [Thread-21262] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:16:26.162 [DEBUG] [Thread-21262] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:16:26.165 [DEBUG] [Thread-21262] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:16:26.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:16:26.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:16:26.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:16:26.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:16:26.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:16:26.188 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:16:26.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:16:26.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:16:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:16:26.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.719530 -999.00  +21.90  15.56     27   +2.30 1 2 1 1 1   860    0 18.50 -53.83 ----- 24.4 15.6 265.7 32.4 22.8 -22.5 22.8 -21.3 22.4 -21.2 22.7 -22.2
2025-11-12T19:16:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:16:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:16:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.719530
2025-11-12T19:16:26.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:16:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:16:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:16:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:16:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:16:26.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:15:56', tmtdew=22.9, humidity=21.71, cloud=0.0, wind=29.06, temperature=22.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:16:07.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:16:26.191 [DEBUG] [Thread-21262] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:16:26.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:16:26.287 [DEBUG] [Thread-21265] [transport.py] [_log()] starting thread (client mode): 0x11f12c80
2025-11-12T19:16:26.288 [DEBUG] [Thread-21265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:16:26.304 [DEBUG] [Thread-21265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:16:26.304 [INFO] [Thread-21265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] client lang: <none>
2025-11-12T19:16:26.312 [DEBUG] [Thread-21265] [transport.py] [_log()] server lang: <none>
2025-11-12T19:16:26.313 [DEBUG] [Thread-21265] [transport.py] [_log()] kex follows: False
2025-11-12T19:16:26.313 [DEBUG] [Thread-21265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:16:26.313 [DEBUG] [Thread-21265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:16:26.313 [DEBUG] [Thread-21265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:16:26.313 [DEBUG] [Thread-21265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:16:26.313 [DEBUG] [Thread-21265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:16:26.313 [DEBUG] [Thread-21265] [transport.py] [_log()] Compression: none
2025-11-12T19:16:26.313 [DEBUG] [Thread-21265] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:16:26.374 [DEBUG] [Thread-21265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:16:26.374 [DEBUG] [Thread-21265] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:16:26.375 [DEBUG] [Thread-21265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:16:26.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:16:26.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:16:26.430 [DEBUG] [Thread-21265] [transport.py] [_log()] userauth is OK
2025-11-12T19:16:26.430 [DEBUG] [Thread-21265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:16:26.430 [DEBUG] [Thread-21265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:16:26.430 [DEBUG] [Thread-21265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:16:26.430 [DEBUG] [Thread-21265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:16:26.450 [INFO] [Thread-21265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:16:26.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:16:26.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:16:26.818 [DEBUG] [Thread-21267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:16:27.313 [DEBUG] [Thread-21265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:16:27.313 [DEBUG] [Thread-21265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:16:27.362 [DEBUG] [Thread-21265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:16:27.362 [DEBUG] [Thread-21265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:16:27.374 [DEBUG] [Thread-21265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:16:27.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:16:27.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:16:27.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-11-12T19:16:27.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:16:27.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:16:27.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:16:27.421 [DEBUG] [Thread-21265] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:16:41.874 [DEBUG] [Thread-21268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:16:47.363 [DEBUG] [Thread-21269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:16:51.884 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:16:51.885 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:16:56.903 [DEBUG] [Thread-21270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:16:57.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:16:57.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:16:57.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:16:58.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 16, 28), 22.86, 21.76, 0.0, 30.31, 21.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:16:58.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:16:28
2025-11-12T19:16:58.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:16:58.354 [DEBUG] [Thread-21271] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T19:16:58.354 [DEBUG] [Thread-21271] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:16:58.376 [DEBUG] [Thread-21271] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:16:58.376 [INFO] [Thread-21271] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:16:58.379 [DEBUG] [Thread-21271] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:16:58.379 [DEBUG] [Thread-21271] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:16:58.379 [DEBUG] [Thread-21271] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:16:58.379 [DEBUG] [Thread-21271] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] client lang: <none>
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] server lang: <none>
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] kex follows: False
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:16:58.380 [DEBUG] [Thread-21271] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:16:58.381 [DEBUG] [Thread-21271] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:16:58.381 [DEBUG] [Thread-21271] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:16:58.381 [DEBUG] [Thread-21271] [transport.py] [_log()] Compression: none
2025-11-12T19:16:58.381 [DEBUG] [Thread-21271] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:16:58.399 [DEBUG] [Thread-21271] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:16:58.400 [DEBUG] [Thread-21271] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:16:58.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:16:58.401 [DEBUG] [Thread-21271] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:16:58.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:16:58.403 [DEBUG] [Thread-21271] [transport.py] [_log()] userauth is OK
2025-11-12T19:16:58.404 [DEBUG] [Thread-21271] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:16:58.404 [DEBUG] [Thread-21271] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:16:58.404 [DEBUG] [Thread-21271] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:16:58.404 [DEBUG] [Thread-21271] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:16:58.425 [INFO] [Thread-21271] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:16:58.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:16:59.008 [DEBUG] [Thread-21271] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:16:59.008 [DEBUG] [Thread-21271] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:16:59.008 [DEBUG] [Thread-21271] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:16:59.049 [DEBUG] [Thread-21271] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:16:59.049 [DEBUG] [Thread-21271] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:16:59.052 [DEBUG] [Thread-21271] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:16:59.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:16:59.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:16:59.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:16:59.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:16:59.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:16:59.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:16:59.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:16:59.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:16:59.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:16:59.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.719877 -999.00  +21.90  19.18     27   +2.30 1 2 1 1 1   857    0 18.41 -54.16 ----- 20.2 19.2 267.0 28.6 22.8 -22.6 22.8 -21.3 22.4 -21.3 22.6 -22.2
2025-11-12T19:16:59.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:16:59.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:16:59.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.719877
2025-11-12T19:16:59.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:16:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:16:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:16:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:16:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:16:59.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:16:28', tmtdew=22.86, humidity=21.76, cloud=0.0, wind=30.31, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:16:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:16:59.078 [DEBUG] [Thread-21271] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:16:59.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:16:59.173 [DEBUG] [Thread-21274] [transport.py] [_log()] starting thread (client mode): 0x14922530
2025-11-12T19:16:59.173 [DEBUG] [Thread-21274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:16:59.188 [DEBUG] [Thread-21274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:16:59.188 [INFO] [Thread-21274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:16:59.195 [DEBUG] [Thread-21274] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:16:59.196 [DEBUG] [Thread-21274] [transport.py] [_log()] client lang: <none>
2025-11-12T19:16:59.197 [DEBUG] [Thread-21274] [transport.py] [_log()] server lang: <none>
2025-11-12T19:16:59.197 [DEBUG] [Thread-21274] [transport.py] [_log()] kex follows: False
2025-11-12T19:16:59.197 [DEBUG] [Thread-21274] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:16:59.197 [DEBUG] [Thread-21274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:16:59.197 [DEBUG] [Thread-21274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:16:59.197 [DEBUG] [Thread-21274] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:16:59.198 [DEBUG] [Thread-21274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:16:59.198 [DEBUG] [Thread-21274] [transport.py] [_log()] Compression: none
2025-11-12T19:16:59.199 [DEBUG] [Thread-21274] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:16:59.252 [DEBUG] [Thread-21274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:16:59.253 [DEBUG] [Thread-21274] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:16:59.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:16:59.254 [DEBUG] [Thread-21274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:16:59.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:16:59.309 [DEBUG] [Thread-21274] [transport.py] [_log()] userauth is OK
2025-11-12T19:16:59.310 [DEBUG] [Thread-21274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:16:59.310 [DEBUG] [Thread-21274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:16:59.310 [DEBUG] [Thread-21274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:16:59.310 [DEBUG] [Thread-21274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:16:59.335 [INFO] [Thread-21274] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:16:59.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:16:59.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:17:00.185 [DEBUG] [Thread-21274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:17:00.185 [DEBUG] [Thread-21274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:17:00.234 [DEBUG] [Thread-21274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:17:00.234 [DEBUG] [Thread-21274] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:17:00.243 [DEBUG] [Thread-21274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:17:00.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:17:00.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-11-12T19:17:00.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-11-12T19:17:00.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:17:00.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:17:00.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:17:00.278 [DEBUG] [Thread-21274] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:17:11.941 [DEBUG] [Thread-21276 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:17:26.987 [DEBUG] [Thread-21277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:17:30.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:17:30.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:17:30.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-11-12T19:17:30.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 16, 28), 22.86, 21.76, 0.0, 30.31, 21.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:17:30.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:16:28
2025-11-12T19:17:31.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:17:31.225 [DEBUG] [Thread-21278] [transport.py] [_log()] starting thread (client mode): 0x14914040
2025-11-12T19:17:31.225 [DEBUG] [Thread-21278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:17:31.241 [DEBUG] [Thread-21278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:17:31.241 [INFO] [Thread-21278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:17:31.244 [DEBUG] [Thread-21278] [transport.py] [_log()] client lang: <none>
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] server lang: <none>
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] kex follows: False
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] Compression: none
2025-11-12T19:17:31.245 [DEBUG] [Thread-21278] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:17:31.263 [DEBUG] [Thread-21278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:17:31.264 [DEBUG] [Thread-21278] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:17:31.264 [DEBUG] [Thread-21278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:17:31.264 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:17:31.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:17:31.266 [DEBUG] [Thread-21278] [transport.py] [_log()] userauth is OK
2025-11-12T19:17:31.266 [DEBUG] [Thread-21278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:17:31.267 [DEBUG] [Thread-21278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:17:31.267 [DEBUG] [Thread-21278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:17:31.267 [DEBUG] [Thread-21278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:17:31.292 [INFO] [Thread-21278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:17:31.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:17:31.903 [DEBUG] [Thread-21278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:17:31.903 [DEBUG] [Thread-21278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:17:31.904 [DEBUG] [Thread-21278] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:17:31.945 [DEBUG] [Thread-21278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:17:31.945 [DEBUG] [Thread-21278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:17:31.948 [DEBUG] [Thread-21278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:17:31.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:17:31.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:17:31.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:17:31.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:17:31.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:17:31.965 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:17:31.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:17:31.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:17:31.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:17:31.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.720224 -999.00  +21.90  17.34     27   +2.30 1 2 1 1 1   854    0 18.72 -59.87 ----- 20.2 17.3 273.2 28.6 22.8 -22.5 22.7 -21.3 22.3 -21.2 22.6 -22.2
2025-11-12T19:17:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:17:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:17:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.720224
2025-11-12T19:17:31.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:17:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:17:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:17:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:17:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:17:31.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:16:28', tmtdew=22.86, humidity=21.76, cloud=0.0, wind=30.31, temperature=21.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:17:07.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:17:31.969 [DEBUG] [Thread-21278] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:17:32.052 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:17:32.066 [DEBUG] [Thread-21281] [transport.py] [_log()] starting thread (client mode): 0x14916110
2025-11-12T19:17:32.066 [DEBUG] [Thread-21281] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:17:32.081 [DEBUG] [Thread-21281] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:17:32.082 [INFO] [Thread-21281] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:17:32.093 [DEBUG] [Thread-21281] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:17:32.093 [DEBUG] [Thread-21281] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:17:32.093 [DEBUG] [Thread-21281] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] client lang: <none>
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] server lang: <none>
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] kex follows: False
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] Compression: none
2025-11-12T19:17:32.094 [DEBUG] [Thread-21281] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:17:32.149 [DEBUG] [Thread-21281] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:17:32.149 [DEBUG] [Thread-21281] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:17:32.150 [DEBUG] [Thread-21281] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:17:32.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:17:32.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:17:32.205 [DEBUG] [Thread-21281] [transport.py] [_log()] userauth is OK
2025-11-12T19:17:32.205 [DEBUG] [Thread-21281] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:17:32.206 [DEBUG] [Thread-21281] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:17:32.206 [DEBUG] [Thread-21281] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:17:32.206 [DEBUG] [Thread-21281] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:17:32.226 [INFO] [Thread-21281] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:17:32.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:17:32.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:17:33.078 [DEBUG] [Thread-21281] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:17:33.078 [DEBUG] [Thread-21281] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:17:33.126 [DEBUG] [Thread-21281] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:17:33.126 [DEBUG] [Thread-21281] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:17:33.134 [DEBUG] [Thread-21281] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:17:33.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:17:33.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-11-12T19:17:33.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-11-12T19:17:33.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:17:33.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:17:33.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:17:33.165 [DEBUG] [Thread-21281] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:17:42.019 [DEBUG] [Thread-21283 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:17:47.424 [DEBUG] [Thread-21284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:17:57.067 [DEBUG] [Thread-21285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:17:57.099 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:17:57.101 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:18:03.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:18:03.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:18:03.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-11-12T19:18:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 17, 32), 22.78, 21.79, 0.0, 28.21, 21.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:18:03.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:17:32
2025-11-12T19:18:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:18:04.116 [DEBUG] [Thread-21286] [transport.py] [_log()] starting thread (client mode): 0x173bdea0
2025-11-12T19:18:04.116 [DEBUG] [Thread-21286] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:18:04.136 [DEBUG] [Thread-21286] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:18:04.136 [INFO] [Thread-21286] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:18:04.139 [DEBUG] [Thread-21286] [transport.py] [_log()] client lang: <none>
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] server lang: <none>
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] kex follows: False
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] Compression: none
2025-11-12T19:18:04.140 [DEBUG] [Thread-21286] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:18:04.155 [DEBUG] [Thread-21286] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:18:04.155 [DEBUG] [Thread-21286] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:18:04.155 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:18:04.155 [DEBUG] [Thread-21286] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:18:04.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:18:04.156 [DEBUG] [Thread-21286] [transport.py] [_log()] userauth is OK
2025-11-12T19:18:04.156 [DEBUG] [Thread-21286] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:18:04.156 [DEBUG] [Thread-21286] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:18:04.156 [DEBUG] [Thread-21286] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:18:04.156 [DEBUG] [Thread-21286] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:18:04.187 [INFO] [Thread-21286] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:18:04.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:18:04.824 [DEBUG] [Thread-21286] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:18:04.824 [DEBUG] [Thread-21286] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:18:04.824 [DEBUG] [Thread-21286] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:18:04.865 [DEBUG] [Thread-21286] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:18:04.865 [DEBUG] [Thread-21286] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:18:04.867 [DEBUG] [Thread-21286] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:18:04.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:18:04.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:18:04.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:18:04.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:18:04.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:18:04.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:18:04.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.720571 -999.00  +21.90  16.62     27   +2.30 1 2 1 1 1   851    0 18.44 -58.71 ----- 19.6 16.6 275.5 25.2 22.7 -22.6 22.7 -21.3 22.3 -21.0 22.6 -22.0
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.720571
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:18:04.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:17:32', tmtdew=22.78, humidity=21.79, cloud=0.0, wind=28.21, temperature=21.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:17:37.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:18:04.887 [DEBUG] [Thread-21286] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:18:04.961 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:18:04.972 [DEBUG] [Thread-21289] [transport.py] [_log()] starting thread (client mode): 0x149a58d0
2025-11-12T19:18:04.972 [DEBUG] [Thread-21289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:18:04.987 [DEBUG] [Thread-21289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:18:04.987 [INFO] [Thread-21289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] client lang: <none>
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] server lang: <none>
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] kex follows: False
2025-11-12T19:18:04.994 [DEBUG] [Thread-21289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:18:04.995 [DEBUG] [Thread-21289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:18:04.995 [DEBUG] [Thread-21289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:18:04.995 [DEBUG] [Thread-21289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:18:04.995 [DEBUG] [Thread-21289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:18:04.995 [DEBUG] [Thread-21289] [transport.py] [_log()] Compression: none
2025-11-12T19:18:04.995 [DEBUG] [Thread-21289] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:18:05.051 [DEBUG] [Thread-21289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:18:05.052 [DEBUG] [Thread-21289] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:18:05.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:18:05.052 [DEBUG] [Thread-21289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:18:05.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:18:05.108 [DEBUG] [Thread-21289] [transport.py] [_log()] userauth is OK
2025-11-12T19:18:05.109 [DEBUG] [Thread-21289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:18:05.109 [DEBUG] [Thread-21289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:18:05.109 [DEBUG] [Thread-21289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:18:05.109 [DEBUG] [Thread-21289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:18:05.123 [INFO] [Thread-21289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:18:05.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:18:05.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:18:06.004 [DEBUG] [Thread-21289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:18:06.004 [DEBUG] [Thread-21289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:18:06.053 [DEBUG] [Thread-21289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:18:06.053 [DEBUG] [Thread-21289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:18:06.061 [DEBUG] [Thread-21289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:18:06.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:18:06.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-11-12T19:18:06.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-11-12T19:18:06.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:18:06.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:18:06.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:18:06.091 [DEBUG] [Thread-21289] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:18:12.108 [DEBUG] [Thread-21291 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:18:27.159 [DEBUG] [Thread-21292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:18:36.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:18:36.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:18:36.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-11-12T19:18:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 18, 4), 22.73, 21.89, 0.0, 29.43, 21.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:18:36.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:18:04
2025-11-12T19:18:36.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:18:37.064 [DEBUG] [Thread-21293] [transport.py] [_log()] starting thread (client mode): 0x14914d00
2025-11-12T19:18:37.064 [DEBUG] [Thread-21293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:18:37.084 [DEBUG] [Thread-21293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:18:37.085 [INFO] [Thread-21293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] client lang: <none>
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] server lang: <none>
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] kex follows: False
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] Compression: none
2025-11-12T19:18:37.088 [DEBUG] [Thread-21293] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:18:37.104 [DEBUG] [Thread-21293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:18:37.104 [DEBUG] [Thread-21293] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:18:37.104 [DEBUG] [Thread-21293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:18:37.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:18:37.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:18:37.105 [DEBUG] [Thread-21293] [transport.py] [_log()] userauth is OK
2025-11-12T19:18:37.105 [DEBUG] [Thread-21293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:18:37.105 [DEBUG] [Thread-21293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:18:37.105 [DEBUG] [Thread-21293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:18:37.105 [DEBUG] [Thread-21293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:18:37.124 [INFO] [Thread-21293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:18:37.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:18:37.754 [DEBUG] [Thread-21293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:18:37.754 [DEBUG] [Thread-21293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:18:37.754 [DEBUG] [Thread-21293] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:18:37.795 [DEBUG] [Thread-21293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:18:37.795 [DEBUG] [Thread-21293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:18:37.798 [DEBUG] [Thread-21293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:18:37.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:18:37.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:18:37.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:18:37.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:18:37.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:18:37.819 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:18:37.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.720919 -999.00  +21.90  22.05     27   +2.40 1 2 1 1 1   848    0 18.67 -52.64 ----- 23.4 22.1 266.6 29.2 22.7 -22.6 22.6 -21.2 22.3 -21.2 22.5 -22.1
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.720919
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:18:37.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:18:04', tmtdew=22.73, humidity=21.89, cloud=0.0, wind=29.43, temperature=21.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:18:07.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:18:37.820 [DEBUG] [Thread-21293] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:18:37.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:18:37.905 [DEBUG] [Thread-21296] [transport.py] [_log()] starting thread (client mode): 0x14905cf0
2025-11-12T19:18:37.905 [DEBUG] [Thread-21296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:18:37.920 [DEBUG] [Thread-21296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:18:37.920 [INFO] [Thread-21296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:18:37.927 [DEBUG] [Thread-21296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] client lang: <none>
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] server lang: <none>
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] kex follows: False
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] Compression: none
2025-11-12T19:18:37.928 [DEBUG] [Thread-21296] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:18:37.984 [DEBUG] [Thread-21296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:18:37.984 [DEBUG] [Thread-21296] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:18:37.984 [DEBUG] [Thread-21296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:18:37.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:18:37.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:18:38.041 [DEBUG] [Thread-21296] [transport.py] [_log()] userauth is OK
2025-11-12T19:18:38.041 [DEBUG] [Thread-21296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:18:38.041 [DEBUG] [Thread-21296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:18:38.041 [DEBUG] [Thread-21296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:18:38.041 [DEBUG] [Thread-21296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:18:38.054 [INFO] [Thread-21296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:18:38.055 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:18:38.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:18:38.895 [DEBUG] [Thread-21296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:18:38.896 [DEBUG] [Thread-21296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:18:38.943 [DEBUG] [Thread-21296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:18:38.943 [DEBUG] [Thread-21296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:18:38.951 [DEBUG] [Thread-21296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:18:38.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:18:38.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-11-12T19:18:38.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-11-12T19:18:38.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:18:38.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:18:38.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:18:38.985 [DEBUG] [Thread-21296] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:18:42.194 [DEBUG] [Thread-21298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:18:47.481 [DEBUG] [Thread-21299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:18:57.232 [DEBUG] [Thread-21300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:19:03.011 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:19:03.012 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:19:09.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:19:09.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:19:09.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-11-12T19:19:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 18, 36), 22.67, 21.89, 0.0, 29.27, 21.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:19:09.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:18:36
2025-11-12T19:19:09.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:19:10.013 [DEBUG] [Thread-21301] [transport.py] [_log()] starting thread (client mode): 0x149aa6b0
2025-11-12T19:19:10.013 [DEBUG] [Thread-21301] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:19:10.033 [DEBUG] [Thread-21301] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:19:10.034 [INFO] [Thread-21301] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] client lang: <none>
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] server lang: <none>
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] kex follows: False
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] Compression: none
2025-11-12T19:19:10.037 [DEBUG] [Thread-21301] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:19:10.054 [DEBUG] [Thread-21301] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:19:10.054 [DEBUG] [Thread-21301] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:19:10.054 [DEBUG] [Thread-21301] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:19:10.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:19:10.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:19:10.055 [DEBUG] [Thread-21301] [transport.py] [_log()] userauth is OK
2025-11-12T19:19:10.055 [DEBUG] [Thread-21301] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:19:10.055 [DEBUG] [Thread-21301] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:19:10.055 [DEBUG] [Thread-21301] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:19:10.055 [DEBUG] [Thread-21301] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:19:10.064 [INFO] [Thread-21301] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:19:10.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:19:10.686 [DEBUG] [Thread-21301] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:19:10.686 [DEBUG] [Thread-21301] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:19:10.686 [DEBUG] [Thread-21301] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:19:10.727 [DEBUG] [Thread-21301] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:19:10.727 [DEBUG] [Thread-21301] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:19:10.730 [DEBUG] [Thread-21301] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:19:10.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:19:10.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:19:10.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:19:10.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:19:10.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:19:10.754 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:19:10.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:19:10.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:19:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:19:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.721266 -999.00  +21.80  16.38     27   +2.40 1 2 1 1 1   844    0 18.74 -55.64 ----- 20.1 16.4 283.5 33.3 22.7 -22.6 22.6 -21.1 22.3 -21.2 22.5 -22.1
2025-11-12T19:19:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:19:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:19:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.721266
2025-11-12T19:19:10.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:19:10.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:19:10.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:19:10.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:19:10.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:19:10.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:18:36', tmtdew=22.67, humidity=21.89, cloud=0.0, wind=29.27, temperature=21.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:18:37.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:19:10.756 [DEBUG] [Thread-21301] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:19:10.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:19:10.853 [DEBUG] [Thread-21304] [transport.py] [_log()] starting thread (client mode): 0x11f11e70
2025-11-12T19:19:10.854 [DEBUG] [Thread-21304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:19:10.868 [DEBUG] [Thread-21304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:19:10.869 [INFO] [Thread-21304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:19:10.876 [DEBUG] [Thread-21304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] client lang: <none>
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] server lang: <none>
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] kex follows: False
2025-11-12T19:19:10.877 [DEBUG] [Thread-21304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:19:10.878 [DEBUG] [Thread-21304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:19:10.878 [DEBUG] [Thread-21304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:19:10.878 [DEBUG] [Thread-21304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:19:10.878 [DEBUG] [Thread-21304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:19:10.878 [DEBUG] [Thread-21304] [transport.py] [_log()] Compression: none
2025-11-12T19:19:10.878 [DEBUG] [Thread-21304] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:19:10.942 [DEBUG] [Thread-21304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:19:10.942 [DEBUG] [Thread-21304] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:19:10.943 [DEBUG] [Thread-21304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:19:10.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:19:10.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:19:10.997 [DEBUG] [Thread-21304] [transport.py] [_log()] userauth is OK
2025-11-12T19:19:10.998 [DEBUG] [Thread-21304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:19:10.998 [DEBUG] [Thread-21304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:19:10.998 [DEBUG] [Thread-21304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:19:10.998 [DEBUG] [Thread-21304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:19:11.018 [INFO] [Thread-21304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:19:11.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:19:11.019 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:19:11.839 [DEBUG] [Thread-21304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:19:11.839 [DEBUG] [Thread-21304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:19:11.892 [DEBUG] [Thread-21304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:19:11.893 [DEBUG] [Thread-21304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:19:11.906 [DEBUG] [Thread-21304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:19:11.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:19:11.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-11-12T19:19:11.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-11-12T19:19:11.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:19:11.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:19:11.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:19:11.958 [DEBUG] [Thread-21304] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:19:12.268 [DEBUG] [Thread-21306 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:19:27.323 [DEBUG] [Thread-21307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:19:41.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:19:41.976 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:19:41.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-11-12T19:19:42.357 [DEBUG] [Thread-21308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:19:42.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 19, 8), 22.66, 21.91, 0.0, 28.37, 21.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:19:42.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:19:08
2025-11-12T19:19:42.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:19:42.931 [DEBUG] [Thread-21309] [transport.py] [_log()] starting thread (client mode): 0x14917ca0
2025-11-12T19:19:42.931 [DEBUG] [Thread-21309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:19:42.952 [DEBUG] [Thread-21309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:19:42.952 [INFO] [Thread-21309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:19:42.955 [DEBUG] [Thread-21309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] client lang: <none>
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] server lang: <none>
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] kex follows: False
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] Compression: none
2025-11-12T19:19:42.956 [DEBUG] [Thread-21309] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:19:42.971 [DEBUG] [Thread-21309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:19:42.971 [DEBUG] [Thread-21309] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:19:42.972 [DEBUG] [Thread-21309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:19:42.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:19:42.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:19:42.973 [DEBUG] [Thread-21309] [transport.py] [_log()] userauth is OK
2025-11-12T19:19:42.973 [DEBUG] [Thread-21309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:19:42.973 [DEBUG] [Thread-21309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:19:42.973 [DEBUG] [Thread-21309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:19:42.974 [DEBUG] [Thread-21309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:19:42.988 [INFO] [Thread-21309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:19:42.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:19:43.634 [DEBUG] [Thread-21309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:19:43.634 [DEBUG] [Thread-21309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:19:43.634 [DEBUG] [Thread-21309] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:19:43.674 [DEBUG] [Thread-21309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:19:43.675 [DEBUG] [Thread-21309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:19:43.677 [DEBUG] [Thread-21309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:19:43.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:19:43.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:19:43.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:19:43.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:19:43.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:19:43.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:19:43.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:19:43.700 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:19:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:19:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.721613 -999.00  +21.80  27.76     27   +2.40 1 2 1 1 1   840    0 18.56 -54.69 ----- 23.9 27.8 269.4 33.6 22.6 -22.5 22.6 -21.1 22.2 -21.1 22.5 -22.1
2025-11-12T19:19:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:19:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:19:43.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.721613
2025-11-12T19:19:43.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:19:43.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:19:43.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:19:43.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:19:43.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:19:43.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:19:08', tmtdew=22.66, humidity=21.91, cloud=0.0, wind=28.37, temperature=21.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:19:07.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:19:43.702 [DEBUG] [Thread-21309] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:19:43.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:19:43.797 [DEBUG] [Thread-21312] [transport.py] [_log()] starting thread (client mode): 0x149a4760
2025-11-12T19:19:43.798 [DEBUG] [Thread-21312] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:19:43.812 [DEBUG] [Thread-21312] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:19:43.812 [INFO] [Thread-21312] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] client lang: <none>
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] server lang: <none>
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] kex follows: False
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:19:43.820 [DEBUG] [Thread-21312] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:19:43.821 [DEBUG] [Thread-21312] [transport.py] [_log()] Compression: none
2025-11-12T19:19:43.821 [DEBUG] [Thread-21312] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:19:43.877 [DEBUG] [Thread-21312] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:19:43.878 [DEBUG] [Thread-21312] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:19:43.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:19:43.879 [DEBUG] [Thread-21312] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:19:43.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:19:43.934 [DEBUG] [Thread-21312] [transport.py] [_log()] userauth is OK
2025-11-12T19:19:43.934 [DEBUG] [Thread-21312] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:19:43.934 [DEBUG] [Thread-21312] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:19:43.934 [DEBUG] [Thread-21312] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:19:43.934 [DEBUG] [Thread-21312] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:19:43.953 [INFO] [Thread-21312] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:19:43.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:19:43.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:19:44.808 [DEBUG] [Thread-21312] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:19:44.808 [DEBUG] [Thread-21312] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:19:44.857 [DEBUG] [Thread-21312] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:19:44.857 [DEBUG] [Thread-21312] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:19:44.866 [DEBUG] [Thread-21312] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:19:44.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:19:44.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:19:44.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-11-12T19:19:44.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:19:44.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:19:44.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:19:44.903 [DEBUG] [Thread-21312] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:19:47.545 [DEBUG] [Thread-21314 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:19:57.392 [DEBUG] [Thread-21315 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:20:08.415 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:20:08.417 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:20:12.435 [DEBUG] [Thread-21316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:20:14.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:20:14.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:20:14.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:20:15.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 20, 12), 22.57, 21.98, 0.0, 27.33, 21.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:20:15.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:20:12
2025-11-12T19:20:15.713 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:20:15.861 [DEBUG] [Thread-21317] [transport.py] [_log()] starting thread (client mode): 0x14907520
2025-11-12T19:20:15.861 [DEBUG] [Thread-21317] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:20:15.881 [DEBUG] [Thread-21317] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:20:15.882 [INFO] [Thread-21317] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:20:15.885 [DEBUG] [Thread-21317] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:20:15.885 [DEBUG] [Thread-21317] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:20:15.885 [DEBUG] [Thread-21317] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:20:15.885 [DEBUG] [Thread-21317] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:20:15.885 [DEBUG] [Thread-21317] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:20:15.885 [DEBUG] [Thread-21317] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] client lang: <none>
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] server lang: <none>
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] kex follows: False
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] Compression: none
2025-11-12T19:20:15.886 [DEBUG] [Thread-21317] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:20:15.903 [DEBUG] [Thread-21317] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:20:15.904 [DEBUG] [Thread-21317] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:20:15.905 [DEBUG] [Thread-21317] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:20:15.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:20:15.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:20:15.907 [DEBUG] [Thread-21317] [transport.py] [_log()] userauth is OK
2025-11-12T19:20:15.907 [DEBUG] [Thread-21317] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:20:15.907 [DEBUG] [Thread-21317] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:20:15.907 [DEBUG] [Thread-21317] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:20:15.907 [DEBUG] [Thread-21317] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:20:15.942 [INFO] [Thread-21317] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:20:15.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:20:16.579 [DEBUG] [Thread-21317] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:20:16.579 [DEBUG] [Thread-21317] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:20:16.580 [DEBUG] [Thread-21317] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:20:16.620 [DEBUG] [Thread-21317] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:20:16.621 [DEBUG] [Thread-21317] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:20:16.624 [DEBUG] [Thread-21317] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:20:16.636 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:20:16.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:20:16.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:20:16.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:20:16.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:20:16.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:20:16.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:20:16.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:20:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:20:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.721960 -999.00  +21.80  17.39     27   +2.40 1 2 1 1 1   835    0 18.20 -51.67 ----- 18.1 17.4 264.0 35.8 22.6 -22.4 22.5 -21.1 22.2 -20.8 22.4 -21.9
2025-11-12T19:20:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:20:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:20:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.721960
2025-11-12T19:20:16.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:20:16.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:20:16.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:20:16.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:20:16.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:20:16.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:20:12', tmtdew=22.57, humidity=21.98, cloud=0.0, wind=27.33, temperature=21.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:19:37.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:20:16.651 [DEBUG] [Thread-21317] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:20: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-11-12T19:20:16.751 [DEBUG] [Thread-21320] [transport.py] [_log()] starting thread (client mode): 0x14906d10
2025-11-12T19:20:16.751 [DEBUG] [Thread-21320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:20:16.766 [DEBUG] [Thread-21320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:20:16.766 [INFO] [Thread-21320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:20:16.773 [DEBUG] [Thread-21320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:20:16.773 [DEBUG] [Thread-21320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] client lang: <none>
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] server lang: <none>
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] kex follows: False
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:20:16.774 [DEBUG] [Thread-21320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:20:16.775 [DEBUG] [Thread-21320] [transport.py] [_log()] Compression: none
2025-11-12T19:20:16.775 [DEBUG] [Thread-21320] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:20:16.833 [DEBUG] [Thread-21320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:20:16.834 [DEBUG] [Thread-21320] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:20:16.834 [DEBUG] [Thread-21320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:20:16.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:20:16.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:20:16.889 [DEBUG] [Thread-21320] [transport.py] [_log()] userauth is OK
2025-11-12T19:20:16.889 [DEBUG] [Thread-21320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:20:16.890 [DEBUG] [Thread-21320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:20:16.890 [DEBUG] [Thread-21320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:20:16.890 [DEBUG] [Thread-21320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:20:16.908 [INFO] [Thread-21320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:20:16.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:20:16.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:20:17.762 [DEBUG] [Thread-21320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:20:17.763 [DEBUG] [Thread-21320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:20:17.811 [DEBUG] [Thread-21320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:20:17.811 [DEBUG] [Thread-21320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:20:17.820 [DEBUG] [Thread-21320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:20:17.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:20:17.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-11-12T19:20:17.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-11-12T19:20:17.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:20:17.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:20:17.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:20:17.860 [DEBUG] [Thread-21320] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:20:27.469 [DEBUG] [Thread-21322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:20:42.517 [DEBUG] [Thread-21323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:20:47.611 [DEBUG] [Thread-21324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:20:47.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:20:47.881 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:20:47.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-11-12T19:20:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 20, 44), 22.51, 21.99, 0.0, 29.98, 21.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:20:48.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:20:44
2025-11-12T19:20:48.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:20:48.810 [DEBUG] [Thread-21325] [transport.py] [_log()] starting thread (client mode): 0x14905db0
2025-11-12T19:20:48.810 [DEBUG] [Thread-21325] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:20:48.827 [DEBUG] [Thread-21325] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:20:48.827 [INFO] [Thread-21325] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] client lang: <none>
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] server lang: <none>
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] kex follows: False
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] Compression: none
2025-11-12T19:20:48.829 [DEBUG] [Thread-21325] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:20:48.846 [DEBUG] [Thread-21325] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:20:48.846 [DEBUG] [Thread-21325] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:20:48.847 [DEBUG] [Thread-21325] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:20:48.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:20:48.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:20:48.849 [DEBUG] [Thread-21325] [transport.py] [_log()] userauth is OK
2025-11-12T19:20:48.849 [DEBUG] [Thread-21325] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:20:48.849 [DEBUG] [Thread-21325] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:20:48.850 [DEBUG] [Thread-21325] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:20:48.850 [DEBUG] [Thread-21325] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:20:48.887 [INFO] [Thread-21325] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:20:48.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:20:49.505 [DEBUG] [Thread-21325] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:20:49.505 [DEBUG] [Thread-21325] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:20:49.505 [DEBUG] [Thread-21325] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:20:49.545 [DEBUG] [Thread-21325] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:20:49.546 [DEBUG] [Thread-21325] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:20:49.549 [DEBUG] [Thread-21325] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:20:49.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:20:49.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:20:49.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:20:49.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:20:49.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:20:49.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:20:49.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:20:49.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:20:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:20:49.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.722655 -999.00  +21.80  20.70     27   +2.40 1 2 1 1 1   825    0 18.14 -55.24 ----- 24.1 20.7 264.6 26.7 22.5 -22.4 22.5 -21.0 22.2 -20.8 22.4 -21.9
2025-11-12T19:20:49.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:20:49.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:20:49.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.722655
2025-11-12T19:20:49.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:20:49.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:20:49.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:20:49.575 [DEBUG] [Thread-21325] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:20:49.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:20:49.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:20:49.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:20:44', tmtdew=22.51, humidity=21.99, cloud=0.0, wind=29.98, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:20:37.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:20:49.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:20:49.674 [DEBUG] [Thread-21328] [transport.py] [_log()] starting thread (client mode): 0x14904160
2025-11-12T19:20:49.675 [DEBUG] [Thread-21328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:20:49.689 [DEBUG] [Thread-21328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:20:49.689 [INFO] [Thread-21328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:20:49.696 [DEBUG] [Thread-21328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] client lang: <none>
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] server lang: <none>
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] kex follows: False
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] Compression: none
2025-11-12T19:20:49.697 [DEBUG] [Thread-21328] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:20:49.757 [DEBUG] [Thread-21328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:20:49.757 [DEBUG] [Thread-21328] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:20:49.758 [DEBUG] [Thread-21328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:20:49.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:20:49.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:20:49.813 [DEBUG] [Thread-21328] [transport.py] [_log()] userauth is OK
2025-11-12T19:20:49.814 [DEBUG] [Thread-21328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:20:49.814 [DEBUG] [Thread-21328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:20:49.814 [DEBUG] [Thread-21328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:20:49.814 [DEBUG] [Thread-21328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:20:49.833 [INFO] [Thread-21328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:20:49.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:20:49.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:20:50.690 [DEBUG] [Thread-21328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:20:50.690 [DEBUG] [Thread-21328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:20:50.739 [DEBUG] [Thread-21328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:20:50.739 [DEBUG] [Thread-21328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:20:50.748 [DEBUG] [Thread-21328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:20:50.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:20:50.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-11-12T19:20:50.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:20:50.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:20:50.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:20:50.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:20:50.784 [DEBUG] [Thread-21328] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:20:57.552 [DEBUG] [Thread-21330 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:21:12.603 [DEBUG] [Thread-21331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:21:13.230 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:21:13.231 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:21:20.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:21:20.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:21:20.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-11-12T19:21:21.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 21, 16), 22.47, 22.04, 0.0, 29.01, 21.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:21:21.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:21:16
2025-11-12T19:21:21.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:21:21.723 [DEBUG] [Thread-21332] [transport.py] [_log()] starting thread (client mode): 0x149213c0
2025-11-12T19:21:21.723 [DEBUG] [Thread-21332] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:21:21.745 [DEBUG] [Thread-21332] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:21:21.745 [INFO] [Thread-21332] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:21:21.748 [DEBUG] [Thread-21332] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:21:21.748 [DEBUG] [Thread-21332] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] client lang: <none>
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] server lang: <none>
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] kex follows: False
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:21:21.749 [DEBUG] [Thread-21332] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:21:21.750 [DEBUG] [Thread-21332] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:21:21.750 [DEBUG] [Thread-21332] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:21:21.750 [DEBUG] [Thread-21332] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:21:21.750 [DEBUG] [Thread-21332] [transport.py] [_log()] Compression: none
2025-11-12T19:21:21.750 [DEBUG] [Thread-21332] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:21:21.768 [DEBUG] [Thread-21332] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:21:21.769 [DEBUG] [Thread-21332] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:21:21.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:21:21.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:21:21.771 [DEBUG] [Thread-21332] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:21:21.772 [DEBUG] [Thread-21332] [transport.py] [_log()] userauth is OK
2025-11-12T19:21:21.772 [DEBUG] [Thread-21332] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:21:21.772 [DEBUG] [Thread-21332] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:21:21.772 [DEBUG] [Thread-21332] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:21:21.772 [DEBUG] [Thread-21332] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:21:21.810 [INFO] [Thread-21332] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:21:21.811 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:21:22.450 [DEBUG] [Thread-21332] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:21:22.450 [DEBUG] [Thread-21332] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:21:22.451 [DEBUG] [Thread-21332] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:21:22.491 [DEBUG] [Thread-21332] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:21:22.492 [DEBUG] [Thread-21332] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:21:22.495 [DEBUG] [Thread-21332] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:21:22.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:21:22.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:21:22.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:21:22.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:21:22.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:21:22.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:21:22.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:21:22.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.723002 -999.00  +21.80  21.33     28   +2.40 1 2 1 1 1   819    0 18.49 -58.97 ----- 20.6 21.3 273.0 33.1 22.5 -22.4 22.5 -20.9 22.1 -20.8 22.4 -21.8
2025-11-12T19:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.723002
2025-11-12T19:21:22.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:21:22.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:21:22.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:21:22.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:21:22.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:21:22.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:21:16', tmtdew=22.47, humidity=22.04, cloud=0.0, wind=29.01, temperature=21.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:21:07.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:21:22.520 [DEBUG] [Thread-21332] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:21:22.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:21:22.618 [DEBUG] [Thread-21335] [transport.py] [_log()] starting thread (client mode): 0x14923b20
2025-11-12T19:21:22.619 [DEBUG] [Thread-21335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:21:22.634 [DEBUG] [Thread-21335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:21:22.634 [INFO] [Thread-21335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] client lang: <none>
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] server lang: <none>
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] kex follows: False
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:21:22.641 [DEBUG] [Thread-21335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:21:22.642 [DEBUG] [Thread-21335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:21:22.642 [DEBUG] [Thread-21335] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:21:22.642 [DEBUG] [Thread-21335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:21:22.642 [DEBUG] [Thread-21335] [transport.py] [_log()] Compression: none
2025-11-12T19:21:22.642 [DEBUG] [Thread-21335] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:21:22.701 [DEBUG] [Thread-21335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:21:22.702 [DEBUG] [Thread-21335] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:21:22.702 [DEBUG] [Thread-21335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:21:22.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:21:22.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:21:22.757 [DEBUG] [Thread-21335] [transport.py] [_log()] userauth is OK
2025-11-12T19:21:22.757 [DEBUG] [Thread-21335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:21:22.757 [DEBUG] [Thread-21335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:21:22.758 [DEBUG] [Thread-21335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:21:22.758 [DEBUG] [Thread-21335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:21:22.776 [INFO] [Thread-21335] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:21:22.776 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:21:22.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:21:23.647 [DEBUG] [Thread-21335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:21:23.647 [DEBUG] [Thread-21335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:21:23.696 [DEBUG] [Thread-21335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:21:23.696 [DEBUG] [Thread-21335] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:21:23.706 [DEBUG] [Thread-21335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:21:23.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:21:23.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-11-12T19:21:23.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-11-12T19:21:23.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:21:23.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:21:23.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:21:23.743 [DEBUG] [Thread-21335] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:21:27.634 [DEBUG] [Thread-21337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:21:42.686 [DEBUG] [Thread-21338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:21:47.689 [DEBUG] [Thread-21339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:21:53.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:21:53.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:21:53.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:21:54.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 21, 48), 22.42, 22.06, 0.0, 27.97, 21.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:21:54.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:21:48
2025-11-12T19:21:54.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:21:54.747 [DEBUG] [Thread-21340] [transport.py] [_log()] starting thread (client mode): 0x17360c10
2025-11-12T19:21:54.747 [DEBUG] [Thread-21340] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:21:54.766 [DEBUG] [Thread-21340] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:21:54.766 [INFO] [Thread-21340] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:21:54.769 [DEBUG] [Thread-21340] [transport.py] [_log()] client lang: <none>
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] server lang: <none>
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] kex follows: False
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] Compression: none
2025-11-12T19:21:54.770 [DEBUG] [Thread-21340] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:21:54.780 [DEBUG] [Thread-21340] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:21:54.780 [DEBUG] [Thread-21340] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:21:54.780 [DEBUG] [Thread-21340] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:21:54.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:21:54.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:21:54.781 [DEBUG] [Thread-21340] [transport.py] [_log()] userauth is OK
2025-11-12T19:21:54.781 [DEBUG] [Thread-21340] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:21:54.781 [DEBUG] [Thread-21340] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:21:54.781 [DEBUG] [Thread-21340] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:21:54.781 [DEBUG] [Thread-21340] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:21:54.794 [INFO] [Thread-21340] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:21:54.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:21:55.432 [DEBUG] [Thread-21340] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:21:55.433 [DEBUG] [Thread-21340] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:21:55.433 [DEBUG] [Thread-21340] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:21:55.473 [DEBUG] [Thread-21340] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:21:55.473 [DEBUG] [Thread-21340] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:21:55.475 [DEBUG] [Thread-21340] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:21:55.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:21:55.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:21:55.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:21:55.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:21:55.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:21:55.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:21:55.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.723349 -999.00  +21.80  15.90     27   +2.40 1 2 1 1 1   812    0 18.31 -63.00 ----- 15.2 15.9 257.8 23.2 22.5 -22.1 22.4 -20.9 22.1 -20.6 22.4 -21.8
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.723349
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:21:55.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:21:48', tmtdew=22.42, humidity=22.06, cloud=0.0, wind=27.97, temperature=21.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:21:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:21:55.493 [DEBUG] [Thread-21340] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:21: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-11-12T19:21:55.578 [DEBUG] [Thread-21343] [transport.py] [_log()] starting thread (client mode): 0x14945d50
2025-11-12T19:21:55.578 [DEBUG] [Thread-21343] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:21:55.593 [DEBUG] [Thread-21343] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:21:55.594 [INFO] [Thread-21343] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] client lang: <none>
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] server lang: <none>
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] kex follows: False
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] Compression: none
2025-11-12T19:21:55.601 [DEBUG] [Thread-21343] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:21:55.659 [DEBUG] [Thread-21343] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:21:55.660 [DEBUG] [Thread-21343] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:21:55.660 [DEBUG] [Thread-21343] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:21:55.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:21:55.660 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:21:55.717 [DEBUG] [Thread-21343] [transport.py] [_log()] userauth is OK
2025-11-12T19:21:55.717 [DEBUG] [Thread-21343] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:21:55.717 [DEBUG] [Thread-21343] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:21:55.717 [DEBUG] [Thread-21343] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:21:55.717 [DEBUG] [Thread-21343] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:21:55.731 [INFO] [Thread-21343] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:21:55.731 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:21:55.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:21:56.586 [DEBUG] [Thread-21343] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:21:56.586 [DEBUG] [Thread-21343] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:21:56.635 [DEBUG] [Thread-21343] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:21:56.635 [DEBUG] [Thread-21343] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:21:56.643 [DEBUG] [Thread-21343] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:21:56.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:21:56.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-11-12T19:21:56.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-11-12T19:21:56.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:21:56.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:21:56.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:21:56.673 [DEBUG] [Thread-21343] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:21:57.716 [DEBUG] [Thread-21345 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:22:12.755 [DEBUG] [Thread-21346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:22:18.246 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:22:18.247 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:22:26.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:22:26.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:22:26.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-11-12T19:22:27.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 22, 20), 22.39, 22.09, 0.0, 26.38, 21.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:22:27.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:22:20
2025-11-12T19:22:27.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:22:27.626 [DEBUG] [Thread-21347] [transport.py] [_log()] starting thread (client mode): 0x14944a90
2025-11-12T19:22:27.626 [DEBUG] [Thread-21347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:22:27.647 [DEBUG] [Thread-21347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:22:27.647 [INFO] [Thread-21347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:22:27.650 [DEBUG] [Thread-21347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] client lang: <none>
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] server lang: <none>
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] kex follows: False
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] Compression: none
2025-11-12T19:22:27.651 [DEBUG] [Thread-21347] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:22:27.667 [DEBUG] [Thread-21347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:22:27.668 [DEBUG] [Thread-21347] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:22:27.668 [DEBUG] [Thread-21347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:22:27.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:22:27.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:22:27.669 [DEBUG] [Thread-21347] [transport.py] [_log()] userauth is OK
2025-11-12T19:22:27.670 [DEBUG] [Thread-21347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:22:27.670 [DEBUG] [Thread-21347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:22:27.670 [DEBUG] [Thread-21347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:22:27.670 [DEBUG] [Thread-21347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:22:27.682 [INFO] [Thread-21347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:22:27.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:22:27.788 [DEBUG] [Thread-21349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:22:28.334 [DEBUG] [Thread-21347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:22:28.335 [DEBUG] [Thread-21347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:22:28.335 [DEBUG] [Thread-21347] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:22:28.375 [DEBUG] [Thread-21347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:22:28.375 [DEBUG] [Thread-21347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:22:28.378 [DEBUG] [Thread-21347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:22:28.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:22:28.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:22:28.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:22:28.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:22:28.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:22:28.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:22:28.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:22:28.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:22:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:22:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.723696 -999.00  +21.80  16.84     27   +2.40 1 2 1 1 1   805    0 18.19 -56.63 ----- 20.5 16.8 278.0 25.3 22.4 -22.2 22.5 -20.8 22.1 -20.8 22.3 -21.9
2025-11-12T19:22:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:22:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:22:28.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.723696
2025-11-12T19:22:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:22:28.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:22:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:22:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:22:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:22:28.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:22:20', tmtdew=22.39, humidity=22.09, cloud=0.0, wind=26.38, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:22:07.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:22:28.403 [DEBUG] [Thread-21347] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:22:28.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:22:28.505 [DEBUG] [Thread-21351] [transport.py] [_log()] starting thread (client mode): 0x14946f80
2025-11-12T19:22:28.505 [DEBUG] [Thread-21351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:22:28.520 [DEBUG] [Thread-21351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:22:28.520 [INFO] [Thread-21351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:22:28.527 [DEBUG] [Thread-21351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:22:28.528 [DEBUG] [Thread-21351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:22:28.528 [DEBUG] [Thread-21351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:22:28.528 [DEBUG] [Thread-21351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:22:28.528 [DEBUG] [Thread-21351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:22:28.528 [DEBUG] [Thread-21351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:22:28.528 [DEBUG] [Thread-21351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:22:28.528 [DEBUG] [Thread-21351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:22:28.528 [DEBUG] [Thread-21351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:22:28.529 [DEBUG] [Thread-21351] [transport.py] [_log()] client lang: <none>
2025-11-12T19:22:28.529 [DEBUG] [Thread-21351] [transport.py] [_log()] server lang: <none>
2025-11-12T19:22:28.529 [DEBUG] [Thread-21351] [transport.py] [_log()] kex follows: False
2025-11-12T19:22:28.529 [DEBUG] [Thread-21351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:22:28.529 [DEBUG] [Thread-21351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:22:28.529 [DEBUG] [Thread-21351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:22:28.529 [DEBUG] [Thread-21351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:22:28.529 [DEBUG] [Thread-21351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:22:28.530 [DEBUG] [Thread-21351] [transport.py] [_log()] Compression: none
2025-11-12T19:22:28.530 [DEBUG] [Thread-21351] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:22:28.584 [DEBUG] [Thread-21351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:22:28.585 [DEBUG] [Thread-21351] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:22:28.585 [DEBUG] [Thread-21351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:22:28.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:22:28.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:22:28.641 [DEBUG] [Thread-21351] [transport.py] [_log()] userauth is OK
2025-11-12T19:22:28.641 [DEBUG] [Thread-21351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:22:28.641 [DEBUG] [Thread-21351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:22:28.641 [DEBUG] [Thread-21351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:22:28.641 [DEBUG] [Thread-21351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:22:28.660 [INFO] [Thread-21351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:22:28.660 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:22:28.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:22:29.537 [DEBUG] [Thread-21351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:22:29.537 [DEBUG] [Thread-21351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:22:29.587 [DEBUG] [Thread-21351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:22:29.587 [DEBUG] [Thread-21351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:22:29.596 [DEBUG] [Thread-21351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:22:29.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:22:29.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-11-12T19:22:29.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-11-12T19:22:29.623 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:22:29.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:22:29.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:22:29.634 [DEBUG] [Thread-21351] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:22:42.823 [DEBUG] [Thread-21353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:22:47.746 [DEBUG] [Thread-21354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:22:57.882 [DEBUG] [Thread-21355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:22:59.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:22:59.654 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:22:59.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-11-12T19:23:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 22, 52), 22.45, 22.08, 0.0, 22.87, 21.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:23:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:22:52
2025-11-12T19:23:00.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:23:00.593 [DEBUG] [Thread-21356] [transport.py] [_log()] starting thread (client mode): 0x14946f50
2025-11-12T19:23:00.593 [DEBUG] [Thread-21356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:23:00.609 [DEBUG] [Thread-21356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:23:00.609 [INFO] [Thread-21356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:23:00.612 [DEBUG] [Thread-21356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:23:00.612 [DEBUG] [Thread-21356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:23:00.612 [DEBUG] [Thread-21356] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:23:00.612 [DEBUG] [Thread-21356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:23:00.612 [DEBUG] [Thread-21356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:23:00.612 [DEBUG] [Thread-21356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:23:00.612 [DEBUG] [Thread-21356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] client lang: <none>
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] server lang: <none>
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] kex follows: False
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] Compression: none
2025-11-12T19:23:00.613 [DEBUG] [Thread-21356] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:23:00.631 [DEBUG] [Thread-21356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:23:00.631 [DEBUG] [Thread-21356] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:23:00.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:23:00.632 [DEBUG] [Thread-21356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:23:00.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:23:00.634 [DEBUG] [Thread-21356] [transport.py] [_log()] userauth is OK
2025-11-12T19:23:00.634 [DEBUG] [Thread-21356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:23:00.635 [DEBUG] [Thread-21356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:23:00.635 [DEBUG] [Thread-21356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:23:00.635 [DEBUG] [Thread-21356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:23:00.653 [INFO] [Thread-21356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:23:00.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:23:01.330 [DEBUG] [Thread-21356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:23:01.330 [DEBUG] [Thread-21356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:23:01.331 [DEBUG] [Thread-21356] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:23:01.371 [DEBUG] [Thread-21356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:23:01.371 [DEBUG] [Thread-21356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:23:01.374 [DEBUG] [Thread-21356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:23:01.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:23:01.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:23:01.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:23:01.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:23:01.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:23:01.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:23:01.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:23:01.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:23:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:23:01.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.724044 -999.00  +21.80  17.55     28   +2.40 1 2 1 1 1   798    0 18.39 -57.00 ----- 16.1 17.6 270.4 24.1 22.4 -22.2 22.4 -20.7 22.1 -20.5 22.3 -21.6
2025-11-12T19:23:01.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:23:01.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:23:01.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.724044
2025-11-12T19:23:01.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:23:01.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:23:01.403 [DEBUG] [Thread-21356] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:23:01.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:23:01.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:23:01.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:23:01.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:22:52', tmtdew=22.45, humidity=22.08, cloud=0.0, wind=22.87, temperature=21.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:22:37.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:23:01.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:23:01.499 [DEBUG] [Thread-21359] [transport.py] [_log()] starting thread (client mode): 0x14947dc0
2025-11-12T19:23:01.499 [DEBUG] [Thread-21359] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:23:01.514 [DEBUG] [Thread-21359] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:23:01.514 [INFO] [Thread-21359] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] client lang: <none>
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] server lang: <none>
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] kex follows: False
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:23:01.522 [DEBUG] [Thread-21359] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:23:01.523 [DEBUG] [Thread-21359] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:23:01.523 [DEBUG] [Thread-21359] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:23:01.523 [DEBUG] [Thread-21359] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:23:01.523 [DEBUG] [Thread-21359] [transport.py] [_log()] Compression: none
2025-11-12T19:23:01.523 [DEBUG] [Thread-21359] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:23:01.580 [DEBUG] [Thread-21359] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:23:01.581 [DEBUG] [Thread-21359] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:23:01.581 [DEBUG] [Thread-21359] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:23:01.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:23:01.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:23:01.641 [DEBUG] [Thread-21359] [transport.py] [_log()] userauth is OK
2025-11-12T19:23:01.642 [DEBUG] [Thread-21359] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:23:01.642 [DEBUG] [Thread-21359] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:23:01.642 [DEBUG] [Thread-21359] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:23:01.642 [DEBUG] [Thread-21359] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:23:01.661 [INFO] [Thread-21359] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:23:01.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:23:01.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:23:02.530 [DEBUG] [Thread-21359] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:23:02.530 [DEBUG] [Thread-21359] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:23:02.578 [DEBUG] [Thread-21359] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:23:02.579 [DEBUG] [Thread-21359] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:23:02.588 [DEBUG] [Thread-21359] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:23:02.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:23:02.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-11-12T19:23:02.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-11-12T19:23:02.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:23:02.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:23:02.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:23:02.625 [DEBUG] [Thread-21359] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:23:12.912 [DEBUG] [Thread-21361 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:23:23.582 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:23:23.583 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:23:27.950 [DEBUG] [Thread-21362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:23:32.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:23:32.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:23:32.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-11-12T19:23:33.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 23, 24), 22.42, 22.13, 0.0, 25.64, 21.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:23:33.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:23:24
2025-11-12T19:23:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:23:33.568 [DEBUG] [Thread-21363] [transport.py] [_log()] starting thread (client mode): 0x14945300
2025-11-12T19:23:33.569 [DEBUG] [Thread-21363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:23:33.589 [DEBUG] [Thread-21363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:23:33.589 [INFO] [Thread-21363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:23:33.592 [DEBUG] [Thread-21363] [transport.py] [_log()] client lang: <none>
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] server lang: <none>
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] kex follows: False
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] Compression: none
2025-11-12T19:23:33.593 [DEBUG] [Thread-21363] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:23:33.611 [DEBUG] [Thread-21363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:23:33.612 [DEBUG] [Thread-21363] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:23:33.613 [DEBUG] [Thread-21363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:23:33.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:23:33.614 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:23:33.615 [DEBUG] [Thread-21363] [transport.py] [_log()] userauth is OK
2025-11-12T19:23:33.615 [DEBUG] [Thread-21363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:23:33.615 [DEBUG] [Thread-21363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:23:33.615 [DEBUG] [Thread-21363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:23:33.615 [DEBUG] [Thread-21363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:23:33.636 [INFO] [Thread-21363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:23:33.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:23:34.265 [DEBUG] [Thread-21363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:23:34.266 [DEBUG] [Thread-21363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:23:34.266 [DEBUG] [Thread-21363] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:23:34.307 [DEBUG] [Thread-21363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:23:34.307 [DEBUG] [Thread-21363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:23:34.310 [DEBUG] [Thread-21363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:23:34.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:23:34.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:23:34.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:23:34.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:23:34.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:23:34.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:23:34.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:23:34.333 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:23:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:23:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.724391 -999.00  +21.70  13.71     28   +2.40 1 2 1 1 1   790    0 18.33 -52.37 ----- 19.4 13.7 274.0 17.4 22.4 -22.2 22.4 -20.7 22.1 -20.7 22.3 -21.7
2025-11-12T19:23:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:23:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:23:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.724391
2025-11-12T19:23:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:23:34.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:23:34.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:23:34.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:23:34.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:23:34.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:23:24', tmtdew=22.42, humidity=22.13, cloud=0.0, wind=25.64, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:23:07.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:23:34.335 [DEBUG] [Thread-21363] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:23:34.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:23:34.430 [DEBUG] [Thread-21366] [transport.py] [_log()] starting thread (client mode): 0x149a56f0
2025-11-12T19:23:34.430 [DEBUG] [Thread-21366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:23:34.445 [DEBUG] [Thread-21366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:23:34.445 [INFO] [Thread-21366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:23:34.452 [DEBUG] [Thread-21366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] client lang: <none>
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] server lang: <none>
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] kex follows: False
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:23:34.453 [DEBUG] [Thread-21366] [transport.py] [_log()] Compression: none
2025-11-12T19:23:34.454 [DEBUG] [Thread-21366] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:23:34.509 [DEBUG] [Thread-21366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:23:34.509 [DEBUG] [Thread-21366] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:23:34.509 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:23:34.510 [DEBUG] [Thread-21366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:23:34.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:23:34.565 [DEBUG] [Thread-21366] [transport.py] [_log()] userauth is OK
2025-11-12T19:23:34.565 [DEBUG] [Thread-21366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:23:34.565 [DEBUG] [Thread-21366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:23:34.565 [DEBUG] [Thread-21366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:23:34.565 [DEBUG] [Thread-21366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:23:34.584 [INFO] [Thread-21366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:23:34.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:23:34.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:23:35.422 [DEBUG] [Thread-21366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:23:35.423 [DEBUG] [Thread-21366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:23:35.470 [DEBUG] [Thread-21366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:23:35.470 [DEBUG] [Thread-21366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:23:35.480 [DEBUG] [Thread-21366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:23:35.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:23:35.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-11-12T19:23:35.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-11-12T19:23:35.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:23:35.508 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:23:35.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:23:35.516 [DEBUG] [Thread-21366] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:23:42.986 [DEBUG] [Thread-21368 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:23:47.815 [DEBUG] [Thread-21369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:23:58.030 [DEBUG] [Thread-21370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:24:05.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:24:05.539 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:24:05.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-11-12T19:24:06.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 23, 56), 22.36, 22.64, 0.0, 28.23, 21.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:24:06.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:23:56
2025-11-12T19:24:06.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:24:06.459 [DEBUG] [Thread-21371] [transport.py] [_log()] starting thread (client mode): 0x149abee0
2025-11-12T19:24:06.459 [DEBUG] [Thread-21371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:24:06.480 [DEBUG] [Thread-21371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:24:06.480 [INFO] [Thread-21371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] client lang: <none>
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] server lang: <none>
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] kex follows: False
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] Compression: none
2025-11-12T19:24:06.484 [DEBUG] [Thread-21371] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:24:06.494 [DEBUG] [Thread-21371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:24:06.495 [DEBUG] [Thread-21371] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:24:06.495 [DEBUG] [Thread-21371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:24:06.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:24:06.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:24:06.497 [DEBUG] [Thread-21371] [transport.py] [_log()] userauth is OK
2025-11-12T19:24:06.497 [DEBUG] [Thread-21371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:24:06.497 [DEBUG] [Thread-21371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:24:06.497 [DEBUG] [Thread-21371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:24:06.498 [DEBUG] [Thread-21371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:24:06.522 [INFO] [Thread-21371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:24:06.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:24:07.154 [DEBUG] [Thread-21371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:24:07.155 [DEBUG] [Thread-21371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:24:07.155 [DEBUG] [Thread-21371] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:24:07.195 [DEBUG] [Thread-21371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:24:07.196 [DEBUG] [Thread-21371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:24:07.198 [DEBUG] [Thread-21371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:24:07.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:24:07.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:24:07.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:24:07.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:24:07.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:24:07.221 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:24:07.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:24:07.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:24:07.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:24:07.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.724738 -999.00  +21.70  18.20     28   +2.50 1 2 1 1 1   781    0 18.45 -56.59 ----- 15.5 18.2 281.4 34.0 22.4 -22.2 22.4 -20.6 22.1 -20.7 22.3 -21.5
2025-11-12T19:24:07.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:24:07.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:24:07.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.724738
2025-11-12T19:24:07.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:24:07.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:24:07.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:24:07.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:24:07.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:24:07.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:23:56', tmtdew=22.36, humidity=22.64, cloud=0.0, wind=28.23, temperature=21.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:23:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:24:07.224 [DEBUG] [Thread-21371] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:24:07.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:24:07.315 [DEBUG] [Thread-21374] [transport.py] [_log()] starting thread (client mode): 0x149ab880
2025-11-12T19:24:07.315 [DEBUG] [Thread-21374] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:24:07.330 [DEBUG] [Thread-21374] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:24:07.330 [INFO] [Thread-21374] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:24:07.337 [DEBUG] [Thread-21374] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] client lang: <none>
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] server lang: <none>
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] kex follows: False
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] Compression: none
2025-11-12T19:24:07.338 [DEBUG] [Thread-21374] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:24:07.398 [DEBUG] [Thread-21374] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:24:07.398 [DEBUG] [Thread-21374] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:24:07.399 [DEBUG] [Thread-21374] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:24:07.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:24:07.400 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:24:07.453 [DEBUG] [Thread-21374] [transport.py] [_log()] userauth is OK
2025-11-12T19:24:07.454 [DEBUG] [Thread-21374] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:24:07.454 [DEBUG] [Thread-21374] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:24:07.454 [DEBUG] [Thread-21374] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:24:07.454 [DEBUG] [Thread-21374] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:24:07.478 [INFO] [Thread-21374] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:24: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-11-12T19:24:07.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:24:08.294 [DEBUG] [Thread-21374] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:24:08.294 [DEBUG] [Thread-21374] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:24:08.341 [DEBUG] [Thread-21374] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:24:08.342 [DEBUG] [Thread-21374] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:24:08.351 [DEBUG] [Thread-21374] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:24:08.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:24:08.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-11-12T19:24: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-11-12T19:24:08.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:24:08.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:24:08.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:24:08.388 [DEBUG] [Thread-21374] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:24:13.063 [DEBUG] [Thread-21376 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:24:28.122 [DEBUG] [Thread-21377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:24:29.390 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:24:29.391 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:24:38.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:24:38.408 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:24:38.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-11-12T19:24:39.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 24, 28), 22.4, 22.56, 0.0, 26.75, 21.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:24:39.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:24:28
2025-11-12T19:24:39.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:24:39.315 [DEBUG] [Thread-21378] [transport.py] [_log()] starting thread (client mode): 0x17361cf0
2025-11-12T19:24:39.315 [DEBUG] [Thread-21378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:24:39.335 [DEBUG] [Thread-21378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:24:39.336 [INFO] [Thread-21378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:24:39.339 [DEBUG] [Thread-21378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:24:39.339 [DEBUG] [Thread-21378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:24:39.339 [DEBUG] [Thread-21378] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:24:39.339 [DEBUG] [Thread-21378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:24:39.339 [DEBUG] [Thread-21378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:24:39.339 [DEBUG] [Thread-21378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:24:39.339 [DEBUG] [Thread-21378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:24:39.339 [DEBUG] [Thread-21378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] client lang: <none>
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] server lang: <none>
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] kex follows: False
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] Compression: none
2025-11-12T19:24:39.340 [DEBUG] [Thread-21378] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:24:39.357 [DEBUG] [Thread-21378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:24:39.358 [DEBUG] [Thread-21378] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:24:39.359 [DEBUG] [Thread-21378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:24:39.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:24:39.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:24:39.361 [DEBUG] [Thread-21378] [transport.py] [_log()] userauth is OK
2025-11-12T19:24:39.361 [DEBUG] [Thread-21378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:24:39.361 [DEBUG] [Thread-21378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:24:39.361 [DEBUG] [Thread-21378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:24:39.361 [DEBUG] [Thread-21378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:24:39.396 [INFO] [Thread-21378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:24:39.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:24:40.061 [DEBUG] [Thread-21378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:24:40.061 [DEBUG] [Thread-21378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:24:40.062 [DEBUG] [Thread-21378] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:24:40.103 [DEBUG] [Thread-21378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:24:40.103 [DEBUG] [Thread-21378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:24:40.107 [DEBUG] [Thread-21378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:24:40.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:24:40.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:24:40.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:24:40.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:24:40.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:24:40.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:24:40.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:24:40.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:24:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:24:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.725085 -999.00  +21.70  22.46     28   +2.50 1 2 1 1 1   771    0 17.90 -59.97 ----- 27.8 22.5 266.4 25.5 22.4 -22.0 22.3 -20.7 22.0 -20.4 22.3 -21.6
2025-11-12T19:24:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:24:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:24:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.725085
2025-11-12T19:24:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:24:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:24:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:24:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:24:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:24:40.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:24:28', tmtdew=22.4, humidity=22.56, cloud=0.0, wind=26.75, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:24:07.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:24:40.133 [DEBUG] [Thread-21378] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:24:40.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:24:40.226 [DEBUG] [Thread-21381] [transport.py] [_log()] starting thread (client mode): 0x149459f0
2025-11-12T19:24:40.226 [DEBUG] [Thread-21381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:24:40.241 [DEBUG] [Thread-21381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:24:40.241 [INFO] [Thread-21381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] client lang: <none>
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] server lang: <none>
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] kex follows: False
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:24:40.249 [DEBUG] [Thread-21381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:24:40.250 [DEBUG] [Thread-21381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:24:40.250 [DEBUG] [Thread-21381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:24:40.250 [DEBUG] [Thread-21381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:24:40.250 [DEBUG] [Thread-21381] [transport.py] [_log()] Compression: none
2025-11-12T19:24:40.250 [DEBUG] [Thread-21381] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:24:40.309 [DEBUG] [Thread-21381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:24:40.310 [DEBUG] [Thread-21381] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:24:40.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:24:40.311 [DEBUG] [Thread-21381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:24:40.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:24:40.365 [DEBUG] [Thread-21381] [transport.py] [_log()] userauth is OK
2025-11-12T19:24:40.366 [DEBUG] [Thread-21381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:24:40.366 [DEBUG] [Thread-21381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:24:40.366 [DEBUG] [Thread-21381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:24:40.366 [DEBUG] [Thread-21381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:24:40.384 [INFO] [Thread-21381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:24:40.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:24:40.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:24:41.235 [DEBUG] [Thread-21381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:24:41.236 [DEBUG] [Thread-21381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:24:41.283 [DEBUG] [Thread-21381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:24:41.283 [DEBUG] [Thread-21381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:24:41.292 [DEBUG] [Thread-21381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:24:41.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:24:41.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:24:41.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-11-12T19:24:41.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:24:41.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:24:41.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:24:41.326 [DEBUG] [Thread-21381] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:24:43.154 [DEBUG] [Thread-21383 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:24:47.885 [DEBUG] [Thread-21384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:24:58.209 [DEBUG] [Thread-21385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:25:11.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:25:11.330 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:25:11.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:25:12.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 25), 22.36, 22.63, 0.0, 27.56, 21.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:25:12.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:25:00
2025-11-12T19:25:12.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:25:12.296 [DEBUG] [Thread-21386] [transport.py] [_log()] starting thread (client mode): 0x149a5a20
2025-11-12T19:25:12.296 [DEBUG] [Thread-21386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:25:12.316 [DEBUG] [Thread-21386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:25:12.316 [INFO] [Thread-21386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] client lang: <none>
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] server lang: <none>
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] kex follows: False
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:25:12.319 [DEBUG] [Thread-21386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:25:12.320 [DEBUG] [Thread-21386] [transport.py] [_log()] Compression: none
2025-11-12T19:25:12.320 [DEBUG] [Thread-21386] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:25:12.327 [DEBUG] [Thread-21386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:25:12.327 [DEBUG] [Thread-21386] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:25:12.327 [DEBUG] [Thread-21386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:25:12.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:25:12.328 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:25:12.328 [DEBUG] [Thread-21386] [transport.py] [_log()] userauth is OK
2025-11-12T19:25:12.328 [DEBUG] [Thread-21386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:25:12.328 [DEBUG] [Thread-21386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:25:12.328 [DEBUG] [Thread-21386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:25:12.328 [DEBUG] [Thread-21386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:25:12.342 [INFO] [Thread-21386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:25:12.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:25:12.937 [DEBUG] [Thread-21386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:25:12.937 [DEBUG] [Thread-21386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:25:12.937 [DEBUG] [Thread-21386] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:25:12.978 [DEBUG] [Thread-21386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:25:12.978 [DEBUG] [Thread-21386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:25:12.980 [DEBUG] [Thread-21386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:25:12.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:25:12.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:25:12.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:25:12.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:25:12.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:25:13.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:25:13.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:25:13.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:25:13.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:25:13.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.725433 -999.00  +21.70  25.80     28   +2.40 1 2 1 1 1   761    0 17.87 -60.70 ----- 17.9 25.8 268.8 30.5 22.4 -21.9 22.3 -20.6 22.0 -20.5 22.3 -21.6
2025-11-12T19:25:13.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:25:13.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:25:13.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.725433
2025-11-12T19:25:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:25:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:25:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:25:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:25:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:25:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:25:00', tmtdew=22.36, humidity=22.63, cloud=0.0, wind=27.56, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:24:37.411', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:25:13.002 [DEBUG] [Thread-21386] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:25:13.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:25:13.084 [DEBUG] [Thread-21389] [transport.py] [_log()] starting thread (client mode): 0x149a5a80
2025-11-12T19:25:13.084 [DEBUG] [Thread-21389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:25:13.100 [DEBUG] [Thread-21389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:25:13.100 [INFO] [Thread-21389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:25:13.107 [DEBUG] [Thread-21389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:25:13.108 [DEBUG] [Thread-21389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:25:13.108 [DEBUG] [Thread-21389] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:25:13.108 [DEBUG] [Thread-21389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:25:13.108 [DEBUG] [Thread-21389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:25:13.108 [DEBUG] [Thread-21389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:25:13.108 [DEBUG] [Thread-21389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:25:13.108 [DEBUG] [Thread-21389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:25:13.108 [DEBUG] [Thread-21389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:25:13.109 [DEBUG] [Thread-21389] [transport.py] [_log()] client lang: <none>
2025-11-12T19:25:13.109 [DEBUG] [Thread-21389] [transport.py] [_log()] server lang: <none>
2025-11-12T19:25:13.109 [DEBUG] [Thread-21389] [transport.py] [_log()] kex follows: False
2025-11-12T19:25:13.109 [DEBUG] [Thread-21389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:25:13.109 [DEBUG] [Thread-21389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:25:13.109 [DEBUG] [Thread-21389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:25:13.109 [DEBUG] [Thread-21389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:25:13.109 [DEBUG] [Thread-21389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:25:13.110 [DEBUG] [Thread-21389] [transport.py] [_log()] Compression: none
2025-11-12T19:25:13.111 [DEBUG] [Thread-21389] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:25:13.166 [DEBUG] [Thread-21389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:25:13.167 [DEBUG] [Thread-21389] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:25:13.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:25:13.168 [DEBUG] [Thread-21389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:25:13.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:25:13.221 [DEBUG] [Thread-21389] [transport.py] [_log()] userauth is OK
2025-11-12T19:25:13.221 [DEBUG] [Thread-21389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:25:13.222 [DEBUG] [Thread-21389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:25:13.222 [DEBUG] [Thread-21389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:25:13.222 [DEBUG] [Thread-21389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:25:13.239 [DEBUG] [Thread-21391 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:25:13.257 [INFO] [Thread-21389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:25:13.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:25:13.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:25:14.071 [DEBUG] [Thread-21389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:25:14.071 [DEBUG] [Thread-21389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:25:14.119 [DEBUG] [Thread-21389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:25:14.119 [DEBUG] [Thread-21389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:25:14.128 [DEBUG] [Thread-21389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:25:14.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:25:14.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:25:14.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:25:14.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:25:14.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:25:14.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:25:14.161 [DEBUG] [Thread-21389] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:25:28.280 [DEBUG] [Thread-21392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:25:35.751 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:25:35.752 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:25:43.318 [DEBUG] [Thread-21393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:25:44.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:25:44.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:25:44.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-11-12T19:25:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 25, 32), 22.34, 22.66, 0.0, 28.34, 21.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:25:44.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:25:32
2025-11-12T19:25:44.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:25:45.089 [DEBUG] [Thread-21394] [transport.py] [_log()] starting thread (client mode): 0x149a78b0
2025-11-12T19:25:45.089 [DEBUG] [Thread-21394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:25:45.109 [DEBUG] [Thread-21394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:25:45.109 [INFO] [Thread-21394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:25:45.112 [DEBUG] [Thread-21394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:25:45.112 [DEBUG] [Thread-21394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:25:45.112 [DEBUG] [Thread-21394] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:25:45.112 [DEBUG] [Thread-21394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:25:45.112 [DEBUG] [Thread-21394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] client lang: <none>
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] server lang: <none>
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] kex follows: False
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] Compression: none
2025-11-12T19:25:45.113 [DEBUG] [Thread-21394] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:25:45.129 [DEBUG] [Thread-21394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:25:45.130 [DEBUG] [Thread-21394] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:25:45.130 [DEBUG] [Thread-21394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:25:45.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:25:45.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:25:45.142 [DEBUG] [Thread-21394] [transport.py] [_log()] userauth is OK
2025-11-12T19:25:45.142 [DEBUG] [Thread-21394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:25:45.142 [DEBUG] [Thread-21394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:25:45.142 [DEBUG] [Thread-21394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:25:45.142 [DEBUG] [Thread-21394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:25:45.156 [INFO] [Thread-21394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:25:45.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:25:45.772 [DEBUG] [Thread-21394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:25:45.772 [DEBUG] [Thread-21394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:25:45.773 [DEBUG] [Thread-21394] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:25:45.813 [DEBUG] [Thread-21394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:25:45.813 [DEBUG] [Thread-21394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:25:45.815 [DEBUG] [Thread-21394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:25:45.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:25:45.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:25:45.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:25:45.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:25:45.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:25:45.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:25:45.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:25:45.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:25:45.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.726127 -999.00  +21.70  18.54     28   +2.50 1 2 1 1 1   739    0 17.94 -62.06 ----- 16.6 18.5 287.8 26.8 22.3 -21.9 22.3 -20.5 21.9 -20.4 22.2 -21.4
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.726127
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:25:45.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:25:32', tmtdew=22.34, humidity=22.66, cloud=0.0, wind=28.34, temperature=21.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:25:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:25:45.834 [DEBUG] [Thread-21394] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:25:45.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:25:45.919 [DEBUG] [Thread-21397] [transport.py] [_log()] starting thread (client mode): 0x149477f0
2025-11-12T19:25:45.920 [DEBUG] [Thread-21397] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:25:45.934 [DEBUG] [Thread-21397] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:25:45.934 [INFO] [Thread-21397] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:25:45.941 [DEBUG] [Thread-21397] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:25:45.941 [DEBUG] [Thread-21397] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:25:45.941 [DEBUG] [Thread-21397] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:25:45.941 [DEBUG] [Thread-21397] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:25:45.941 [DEBUG] [Thread-21397] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:25:45.941 [DEBUG] [Thread-21397] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:25:45.941 [DEBUG] [Thread-21397] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] client lang: <none>
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] server lang: <none>
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] kex follows: False
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] Compression: none
2025-11-12T19:25:45.942 [DEBUG] [Thread-21397] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:25:45.999 [DEBUG] [Thread-21397] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:25:45.999 [DEBUG] [Thread-21397] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:25:45.999 [DEBUG] [Thread-21397] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:25:45.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:25:45.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:25:46.057 [DEBUG] [Thread-21397] [transport.py] [_log()] userauth is OK
2025-11-12T19:25:46.057 [DEBUG] [Thread-21397] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:25:46.057 [DEBUG] [Thread-21397] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:25:46.057 [DEBUG] [Thread-21397] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:25:46.057 [DEBUG] [Thread-21397] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:25:46.071 [INFO] [Thread-21397] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:25:46.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:25:46.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:25:46.903 [DEBUG] [Thread-21397] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:25:46.903 [DEBUG] [Thread-21397] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:25:46.951 [DEBUG] [Thread-21397] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:25:46.951 [DEBUG] [Thread-21397] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:25:46.959 [DEBUG] [Thread-21397] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:25:46.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:25:46.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-11-12T19:25:46.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-11-12T19:25:46.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:25:46.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:25:46.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:25:46.989 [DEBUG] [Thread-21397] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:25:47.939 [DEBUG] [Thread-21399 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:25:58.355 [DEBUG] [Thread-21400 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:26:13.419 [DEBUG] [Thread-21401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:26:17.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:26:17.012 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:26:17.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-11-12T19:26:17.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 26, 4), 22.36, 22.63, 0.0, 27.37, 21.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:26:17.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:26:04
2025-11-12T19:26:17.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:26:17.914 [DEBUG] [Thread-21402] [transport.py] [_log()] starting thread (client mode): 0x14946440
2025-11-12T19:26:17.914 [DEBUG] [Thread-21402] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:26:17.934 [DEBUG] [Thread-21402] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:26:17.934 [INFO] [Thread-21402] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] client lang: <none>
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] server lang: <none>
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] kex follows: False
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] Compression: none
2025-11-12T19:26:17.938 [DEBUG] [Thread-21402] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:26:17.953 [DEBUG] [Thread-21402] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:26:17.953 [DEBUG] [Thread-21402] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:26:17.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:26:17.954 [DEBUG] [Thread-21402] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:26:17.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:26:17.956 [DEBUG] [Thread-21402] [transport.py] [_log()] userauth is OK
2025-11-12T19:26:17.956 [DEBUG] [Thread-21402] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:26:17.956 [DEBUG] [Thread-21402] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:26:17.957 [DEBUG] [Thread-21402] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:26:17.957 [DEBUG] [Thread-21402] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:26:17.971 [INFO] [Thread-21402] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:26:17.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:26:18.540 [DEBUG] [Thread-21402] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:26:18.540 [DEBUG] [Thread-21402] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:26:18.541 [DEBUG] [Thread-21402] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:26:18.581 [DEBUG] [Thread-21402] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:26:18.582 [DEBUG] [Thread-21402] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:26:18.584 [DEBUG] [Thread-21402] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:26:18.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:26:18.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:26:18.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:26:18.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:26:18.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:26:18.603 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:26:18.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:26:18.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:26:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:26:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.726474 -999.00  +21.70  15.34     28   +2.40 1 2 1 1 1   727    0 18.35 -60.56 ----- 19.2 15.3 277.2 23.6 22.3 -21.9 22.3 -20.6 21.9 -20.2 22.2 -21.3
2025-11-12T19:26:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:26:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:26:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.726474
2025-11-12T19:26:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:26:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:26:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:26:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:26:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:26:18.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:26:04', tmtdew=22.36, humidity=22.63, cloud=0.0, wind=27.37, temperature=21.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:26:07.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:26:18.606 [DEBUG] [Thread-21402] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:26:18.689 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:26:18.705 [DEBUG] [Thread-21405] [transport.py] [_log()] starting thread (client mode): 0x14916f50
2025-11-12T19:26:18.705 [DEBUG] [Thread-21405] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:26:18.724 [DEBUG] [Thread-21405] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:26:18.724 [INFO] [Thread-21405] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:26:18.732 [DEBUG] [Thread-21405] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:26:18.732 [DEBUG] [Thread-21405] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:26:18.732 [DEBUG] [Thread-21405] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:26:18.732 [DEBUG] [Thread-21405] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:26:18.732 [DEBUG] [Thread-21405] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:26:18.732 [DEBUG] [Thread-21405] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:26:18.733 [DEBUG] [Thread-21405] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:26:18.733 [DEBUG] [Thread-21405] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:26:18.733 [DEBUG] [Thread-21405] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:26:18.733 [DEBUG] [Thread-21405] [transport.py] [_log()] client lang: <none>
2025-11-12T19:26:18.733 [DEBUG] [Thread-21405] [transport.py] [_log()] server lang: <none>
2025-11-12T19:26:18.733 [DEBUG] [Thread-21405] [transport.py] [_log()] kex follows: False
2025-11-12T19:26:18.733 [DEBUG] [Thread-21405] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:26:18.733 [DEBUG] [Thread-21405] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:26:18.734 [DEBUG] [Thread-21405] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:26:18.734 [DEBUG] [Thread-21405] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:26:18.734 [DEBUG] [Thread-21405] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:26:18.734 [DEBUG] [Thread-21405] [transport.py] [_log()] Compression: none
2025-11-12T19:26:18.734 [DEBUG] [Thread-21405] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:26:18.794 [DEBUG] [Thread-21405] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:26:18.794 [DEBUG] [Thread-21405] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:26:18.795 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:26:18.796 [DEBUG] [Thread-21405] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:26:18.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:26:18.853 [DEBUG] [Thread-21405] [transport.py] [_log()] userauth is OK
2025-11-12T19:26:18.853 [DEBUG] [Thread-21405] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:26:18.853 [DEBUG] [Thread-21405] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:26:18.853 [DEBUG] [Thread-21405] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:26:18.854 [DEBUG] [Thread-21405] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:26:18.878 [INFO] [Thread-21405] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:26:18.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:26:18.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:26:19.721 [DEBUG] [Thread-21405] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:26:19.721 [DEBUG] [Thread-21405] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:26:19.769 [DEBUG] [Thread-21405] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:26:19.769 [DEBUG] [Thread-21405] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:26:19.779 [DEBUG] [Thread-21405] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:26:19.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:26:19.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-11-12T19:26:19.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-11-12T19:26:19.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:26:19.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:26:19.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:26:19.815 [DEBUG] [Thread-21405] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:26:28.453 [DEBUG] [Thread-21407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:26:41.629 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:26:41.630 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:26:43.501 [DEBUG] [Thread-21408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:26:47.996 [DEBUG] [Thread-21409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:26:49.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:26:49.837 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:26:49.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-11-12T19:26:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 26, 36), 22.29, 22.64, 0.0, 21.63, 21.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:26:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:26:36
2025-11-12T19:26:50.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:26:50.734 [DEBUG] [Thread-21410] [transport.py] [_log()] starting thread (client mode): 0x14946170
2025-11-12T19:26:50.734 [DEBUG] [Thread-21410] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:26:50.755 [DEBUG] [Thread-21410] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:26:50.756 [INFO] [Thread-21410] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:26:50.758 [DEBUG] [Thread-21410] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] client lang: <none>
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] server lang: <none>
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] kex follows: False
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] Compression: none
2025-11-12T19:26:50.759 [DEBUG] [Thread-21410] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:26:50.773 [DEBUG] [Thread-21410] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:26:50.774 [DEBUG] [Thread-21410] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:26:50.774 [DEBUG] [Thread-21410] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:26:50.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:26:50.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:26:50.777 [DEBUG] [Thread-21410] [transport.py] [_log()] userauth is OK
2025-11-12T19:26:50.777 [DEBUG] [Thread-21410] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:26:50.777 [DEBUG] [Thread-21410] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:26:50.777 [DEBUG] [Thread-21410] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:26:50.778 [DEBUG] [Thread-21410] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:26:50.801 [INFO] [Thread-21410] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:26:50.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:26:51.397 [DEBUG] [Thread-21410] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:26:51.397 [DEBUG] [Thread-21410] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:26:51.398 [DEBUG] [Thread-21410] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:26:51.438 [DEBUG] [Thread-21410] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:26:51.438 [DEBUG] [Thread-21410] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:26:51.441 [DEBUG] [Thread-21410] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:26:51.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:26:51.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:26:51.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:26:51.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:26:51.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:26:51.465 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:26:51.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:26:51.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:26:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:26:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.726821 -999.00  +21.60  18.55     28   +2.40 1 2 1 1 1   714    0 18.13 -63.99 ----- 15.6 18.6 279.5 30.1 22.3 -21.9 22.2 -20.3 21.9 -20.3 22.2 -21.3
2025-11-12T19:26:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:26:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:26:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.726821
2025-11-12T19:26:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:26:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:26:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:26:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:26:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:26:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:26:36', tmtdew=22.29, humidity=22.64, cloud=0.0, wind=21.63, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:26:37.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:26:51.468 [DEBUG] [Thread-21410] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:26:51.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:26:51.562 [DEBUG] [Thread-21413] [transport.py] [_log()] starting thread (client mode): 0x14947910
2025-11-12T19:26:51.563 [DEBUG] [Thread-21413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:26:51.578 [DEBUG] [Thread-21413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:26:51.578 [INFO] [Thread-21413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] client lang: <none>
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] server lang: <none>
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] kex follows: False
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:26:51.586 [DEBUG] [Thread-21413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:26:51.587 [DEBUG] [Thread-21413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:26:51.587 [DEBUG] [Thread-21413] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:26:51.587 [DEBUG] [Thread-21413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:26:51.587 [DEBUG] [Thread-21413] [transport.py] [_log()] Compression: none
2025-11-12T19:26:51.587 [DEBUG] [Thread-21413] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:26:51.644 [DEBUG] [Thread-21413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:26:51.645 [DEBUG] [Thread-21413] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:26:51.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:26:51.646 [DEBUG] [Thread-21413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:26:51.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:26:51.701 [DEBUG] [Thread-21413] [transport.py] [_log()] userauth is OK
2025-11-12T19:26:51.702 [DEBUG] [Thread-21413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:26:51.702 [DEBUG] [Thread-21413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:26:51.702 [DEBUG] [Thread-21413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:26:51.702 [DEBUG] [Thread-21413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:26:51.721 [INFO] [Thread-21413] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:26:51.721 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:26:51.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:26:52.637 [DEBUG] [Thread-21413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:26:52.637 [DEBUG] [Thread-21413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:26:52.688 [DEBUG] [Thread-21413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:26:52.688 [DEBUG] [Thread-21413] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:26:52.697 [DEBUG] [Thread-21413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:26:52.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:26:52.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-11-12T19:26:52.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-11-12T19:26:52.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:26:52.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:26:52.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:26:52.733 [DEBUG] [Thread-21413] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:26:58.537 [DEBUG] [Thread-21415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:27:13.585 [DEBUG] [Thread-21416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:27:22.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:27:22.756 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:27:22.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-11-12T19:27:23.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 27, 8), 22.29, 22.64, 0.0, 23.7, 21.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:27:23.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:27:08
2025-11-12T19:27:23.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:27:23.693 [DEBUG] [Thread-21417] [transport.py] [_log()] starting thread (client mode): 0x17361270
2025-11-12T19:27:23.693 [DEBUG] [Thread-21417] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:27:23.712 [DEBUG] [Thread-21417] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:27:23.712 [INFO] [Thread-21417] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:27:23.715 [DEBUG] [Thread-21417] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:27:23.715 [DEBUG] [Thread-21417] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:27:23.715 [DEBUG] [Thread-21417] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:27:23.715 [DEBUG] [Thread-21417] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:27:23.715 [DEBUG] [Thread-21417] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] client lang: <none>
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] server lang: <none>
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] kex follows: False
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] Compression: none
2025-11-12T19:27:23.716 [DEBUG] [Thread-21417] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:27:23.734 [DEBUG] [Thread-21417] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:27:23.734 [DEBUG] [Thread-21417] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:27:23.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:27:23.735 [DEBUG] [Thread-21417] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:27:23.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:27:23.737 [DEBUG] [Thread-21417] [transport.py] [_log()] userauth is OK
2025-11-12T19:27:23.738 [DEBUG] [Thread-21417] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:27:23.738 [DEBUG] [Thread-21417] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:27:23.738 [DEBUG] [Thread-21417] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:27:23.738 [DEBUG] [Thread-21417] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:27:23.760 [INFO] [Thread-21417] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:27:23.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:27:24.352 [DEBUG] [Thread-21417] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:27:24.352 [DEBUG] [Thread-21417] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:27:24.352 [DEBUG] [Thread-21417] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:27:24.393 [DEBUG] [Thread-21417] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:27:24.393 [DEBUG] [Thread-21417] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:27:24.396 [DEBUG] [Thread-21417] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:27:24.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:27:24.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:27:24.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:27:24.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:27:24.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:27:24.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:27:24.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:27:24.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:27:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:27:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.727169 -999.00  +21.60  13.01     28   +2.40 1 2 1 1 1   700    0 18.11 -66.78 ----- 13.7 13.0 277.0 23.0 22.2 -21.7 22.2 -20.4 21.9 -20.2 22.1 -21.3
2025-11-12T19:27:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:27:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:27:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.727169
2025-11-12T19:27:24.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:27:24.419 [DEBUG] [Thread-21417] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:27:24.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:27:24.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:27:24.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:27:24.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:27:24.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:27:08', tmtdew=22.29, humidity=22.64, cloud=0.0, wind=23.7, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:27:07.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:27:24.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:27:24.520 [DEBUG] [Thread-21420] [transport.py] [_log()] starting thread (client mode): 0x14906bf0
2025-11-12T19:27:24.521 [DEBUG] [Thread-21420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:27:24.535 [DEBUG] [Thread-21420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:27:24.535 [INFO] [Thread-21420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:27:24.542 [DEBUG] [Thread-21420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] client lang: <none>
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] server lang: <none>
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] kex follows: False
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] Compression: none
2025-11-12T19:27:24.543 [DEBUG] [Thread-21420] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:27:24.600 [DEBUG] [Thread-21420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:27:24.600 [DEBUG] [Thread-21420] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:27:24.601 [DEBUG] [Thread-21420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:27:24.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:27:24.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:27:24.660 [DEBUG] [Thread-21420] [transport.py] [_log()] userauth is OK
2025-11-12T19:27:24.661 [DEBUG] [Thread-21420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:27:24.661 [DEBUG] [Thread-21420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:27:24.661 [DEBUG] [Thread-21420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:27:24.661 [DEBUG] [Thread-21420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:27:24.686 [INFO] [Thread-21420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:27:24.686 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:27:24.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:27:25.538 [DEBUG] [Thread-21420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:27:25.538 [DEBUG] [Thread-21420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:27:25.586 [DEBUG] [Thread-21420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:27:25.586 [DEBUG] [Thread-21420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:27:25.595 [DEBUG] [Thread-21420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:27:25.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:27:25.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-11-12T19:27:25.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-11-12T19:27:25.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:27:25.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:27:25.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:27:25.629 [DEBUG] [Thread-21420] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:27:28.619 [DEBUG] [Thread-21422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:27:43.667 [DEBUG] [Thread-21423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:27:46.617 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:27:46.618 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:27:48.071 [DEBUG] [Thread-21424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:27:55.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:27:55.643 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:27:55.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-11-12T19:27:56.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 27, 40), 22.27, 22.68, 0.0, 24.33, 21.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:27:56.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:27:40
2025-11-12T19:27:56.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:27:56.555 [DEBUG] [Thread-21425] [transport.py] [_log()] starting thread (client mode): 0x149442b0
2025-11-12T19:27:56.555 [DEBUG] [Thread-21425] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:27:56.573 [DEBUG] [Thread-21425] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:27:56.573 [INFO] [Thread-21425] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] client lang: <none>
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] server lang: <none>
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] kex follows: False
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:27:56.576 [DEBUG] [Thread-21425] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:27:56.577 [DEBUG] [Thread-21425] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:27:56.577 [DEBUG] [Thread-21425] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:27:56.577 [DEBUG] [Thread-21425] [transport.py] [_log()] Compression: none
2025-11-12T19:27:56.577 [DEBUG] [Thread-21425] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:27:56.590 [DEBUG] [Thread-21425] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:27:56.590 [DEBUG] [Thread-21425] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:27:56.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:27:56.590 [DEBUG] [Thread-21425] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:27:56.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:27:56.591 [DEBUG] [Thread-21425] [transport.py] [_log()] userauth is OK
2025-11-12T19:27:56.591 [DEBUG] [Thread-21425] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:27:56.591 [DEBUG] [Thread-21425] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:27:56.591 [DEBUG] [Thread-21425] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:27:56.591 [DEBUG] [Thread-21425] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:27:56.604 [INFO] [Thread-21425] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:27:56.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:27:57.255 [DEBUG] [Thread-21425] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:27:57.255 [DEBUG] [Thread-21425] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:27:57.255 [DEBUG] [Thread-21425] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:27:57.295 [DEBUG] [Thread-21425] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:27:57.295 [DEBUG] [Thread-21425] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:27:57.298 [DEBUG] [Thread-21425] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:27:57.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:27:57.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:27:57.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:27:57.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:27:57.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:27:57.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:27:57.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:27:57.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:27:57.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:27:57.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.727516 -999.00  +21.60  13.71     28   +2.40 1 2 1 1 1   685    0 17.16 -66.80 ----- 13.2 13.7 284.2 28.0 22.3 -21.7 22.2 -20.3 21.9 -20.1 22.1 -21.2
2025-11-12T19:27:57.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:27:57.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:27:57.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.727516
2025-11-12T19:27:57.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:27:57.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:27:57.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:27:57.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:27:57.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:27:57.322 [DEBUG] [Thread-21425] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:27:57.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:27:40', tmtdew=22.27, humidity=22.68, cloud=0.0, wind=24.33, temperature=21.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:27:37.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:27:57.406 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:27:57.417 [DEBUG] [Thread-21428] [transport.py] [_log()] starting thread (client mode): 0x14916770
2025-11-12T19:27:57.417 [DEBUG] [Thread-21428] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:27:57.434 [DEBUG] [Thread-21428] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:27:57.434 [INFO] [Thread-21428] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:27:57.442 [DEBUG] [Thread-21428] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:27:57.442 [DEBUG] [Thread-21428] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:27:57.442 [DEBUG] [Thread-21428] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:27:57.442 [DEBUG] [Thread-21428] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:27:57.442 [DEBUG] [Thread-21428] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:27:57.442 [DEBUG] [Thread-21428] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] client lang: <none>
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] server lang: <none>
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] kex follows: False
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:27:57.443 [DEBUG] [Thread-21428] [transport.py] [_log()] Compression: none
2025-11-12T19:27:57.444 [DEBUG] [Thread-21428] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:27:57.500 [DEBUG] [Thread-21428] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:27:57.501 [DEBUG] [Thread-21428] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:27:57.501 [DEBUG] [Thread-21428] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:27:57.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:27:57.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:27:57.556 [DEBUG] [Thread-21428] [transport.py] [_log()] userauth is OK
2025-11-12T19:27:57.557 [DEBUG] [Thread-21428] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:27:57.557 [DEBUG] [Thread-21428] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:27:57.557 [DEBUG] [Thread-21428] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:27:57.557 [DEBUG] [Thread-21428] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:27:57.579 [INFO] [Thread-21428] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:27:57.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:27:57.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:27:58.451 [DEBUG] [Thread-21428] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:27:58.451 [DEBUG] [Thread-21428] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:27:58.499 [DEBUG] [Thread-21428] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:27:58.500 [DEBUG] [Thread-21428] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:27:58.508 [DEBUG] [Thread-21428] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:27:58.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:27:58.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-11-12T19:27:58.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-11-12T19:27:58.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:27:58.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:27:58.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:27:58.542 [DEBUG] [Thread-21428] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:27:58.698 [DEBUG] [Thread-21430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:28:13.746 [DEBUG] [Thread-21431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:28:28.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:28:28.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:28:28.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-11-12T19:28:28.777 [DEBUG] [Thread-21432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:28:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 28, 12), 22.25, 22.71, 0.0, 25.67, 21.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:28:29.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:28:12
2025-11-12T19:28:29.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:28:29.477 [DEBUG] [Thread-21433] [transport.py] [_log()] starting thread (client mode): 0x14904850
2025-11-12T19:28:29.477 [DEBUG] [Thread-21433] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:28:29.497 [DEBUG] [Thread-21433] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:28:29.497 [INFO] [Thread-21433] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] client lang: <none>
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] server lang: <none>
2025-11-12T19:28:29.498 [DEBUG] [Thread-21433] [transport.py] [_log()] kex follows: False
2025-11-12T19:28:29.499 [DEBUG] [Thread-21433] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:28:29.499 [DEBUG] [Thread-21433] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:28:29.499 [DEBUG] [Thread-21433] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:28:29.499 [DEBUG] [Thread-21433] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:28:29.499 [DEBUG] [Thread-21433] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:28:29.499 [DEBUG] [Thread-21433] [transport.py] [_log()] Compression: none
2025-11-12T19:28:29.499 [DEBUG] [Thread-21433] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:28:29.505 [DEBUG] [Thread-21433] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:28:29.505 [DEBUG] [Thread-21433] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:28:29.506 [DEBUG] [Thread-21433] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:28:29.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:28:29.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:28:29.506 [DEBUG] [Thread-21433] [transport.py] [_log()] userauth is OK
2025-11-12T19:28:29.506 [DEBUG] [Thread-21433] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:28:29.506 [DEBUG] [Thread-21433] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:28:29.506 [DEBUG] [Thread-21433] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:28:29.506 [DEBUG] [Thread-21433] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:28:29.515 [INFO] [Thread-21433] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:28:29.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:28:30.140 [DEBUG] [Thread-21433] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:28:30.140 [DEBUG] [Thread-21433] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:28:30.141 [DEBUG] [Thread-21433] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:28:30.181 [DEBUG] [Thread-21433] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:28:30.181 [DEBUG] [Thread-21433] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:28:30.184 [DEBUG] [Thread-21433] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:28:30.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:28:30.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:28:30.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:28:30.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:28:30.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:28:30.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:28:30.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:28:30.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:28:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:28:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.727863 -999.00  +21.60  17.55     28   +2.40 1 2 1 1 1   669    0 17.74 -64.65 ----- 18.7 17.6 273.6 23.0 22.2 -21.6 22.2 -20.3 21.9 -20.1 22.1 -21.2
2025-11-12T19:28:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:28:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:28:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.727863
2025-11-12T19:28:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:28:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:28:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:28:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:28:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:28:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:28:12', tmtdew=22.25, humidity=22.71, cloud=0.0, wind=25.67, temperature=21.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:28:07.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:28:30.201 [DEBUG] [Thread-21433] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:28:30.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:28:30.299 [DEBUG] [Thread-21436] [transport.py] [_log()] starting thread (client mode): 0x14917d00
2025-11-12T19:28:30.299 [DEBUG] [Thread-21436] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:28:30.314 [DEBUG] [Thread-21436] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:28:30.314 [INFO] [Thread-21436] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:28:30.322 [DEBUG] [Thread-21436] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:28:30.322 [DEBUG] [Thread-21436] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:28:30.322 [DEBUG] [Thread-21436] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:28:30.322 [DEBUG] [Thread-21436] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:28:30.322 [DEBUG] [Thread-21436] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] client lang: <none>
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] server lang: <none>
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] kex follows: False
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:28:30.323 [DEBUG] [Thread-21436] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:28:30.324 [DEBUG] [Thread-21436] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:28:30.324 [DEBUG] [Thread-21436] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:28:30.324 [DEBUG] [Thread-21436] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:28:30.324 [DEBUG] [Thread-21436] [transport.py] [_log()] Compression: none
2025-11-12T19:28:30.324 [DEBUG] [Thread-21436] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:28:30.382 [DEBUG] [Thread-21436] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:28:30.382 [DEBUG] [Thread-21436] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:28:30.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:28:30.384 [DEBUG] [Thread-21436] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:28:30.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:28:30.441 [DEBUG] [Thread-21436] [transport.py] [_log()] userauth is OK
2025-11-12T19:28:30.441 [DEBUG] [Thread-21436] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:28:30.441 [DEBUG] [Thread-21436] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:28:30.442 [DEBUG] [Thread-21436] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:28:30.442 [DEBUG] [Thread-21436] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:28:30.461 [INFO] [Thread-21436] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:28:30.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:28:30.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:28:31.280 [DEBUG] [Thread-21436] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:28:31.280 [DEBUG] [Thread-21436] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:28:31.327 [DEBUG] [Thread-21436] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:28:31.327 [DEBUG] [Thread-21436] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:28:31.335 [DEBUG] [Thread-21436] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:28:31.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:28: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')
2025-11-12T19:28:31.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-11-12T19:28:31.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:28:31.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:28:31.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:28:31.369 [DEBUG] [Thread-21436] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:28:43.809 [DEBUG] [Thread-21438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:28:48.130 [DEBUG] [Thread-21439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:28:52.045 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:28:52.046 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:28:58.860 [DEBUG] [Thread-21440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:29:01.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:29:01.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:29:01.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:29:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 28, 44), 22.22, 22.78, 0.0, 24.72, 21.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:29:02.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:28:44
2025-11-12T19:29:02.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:29:02.348 [DEBUG] [Thread-21441] [transport.py] [_log()] starting thread (client mode): 0x14944220
2025-11-12T19:29:02.348 [DEBUG] [Thread-21441] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:29:02.366 [DEBUG] [Thread-21441] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:29:02.366 [INFO] [Thread-21441] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:29:02.369 [DEBUG] [Thread-21441] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:29:02.369 [DEBUG] [Thread-21441] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:29:02.369 [DEBUG] [Thread-21441] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:29:02.369 [DEBUG] [Thread-21441] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:29:02.369 [DEBUG] [Thread-21441] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:29:02.369 [DEBUG] [Thread-21441] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] client lang: <none>
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] server lang: <none>
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] kex follows: False
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] Compression: none
2025-11-12T19:29:02.370 [DEBUG] [Thread-21441] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:29:02.384 [DEBUG] [Thread-21441] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:29:02.384 [DEBUG] [Thread-21441] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:29:02.385 [DEBUG] [Thread-21441] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:29:02.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:29:02.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:29:02.385 [DEBUG] [Thread-21441] [transport.py] [_log()] userauth is OK
2025-11-12T19:29:02.385 [DEBUG] [Thread-21441] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:29:02.385 [DEBUG] [Thread-21441] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:29:02.385 [DEBUG] [Thread-21441] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:29:02.385 [DEBUG] [Thread-21441] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:29:02.395 [INFO] [Thread-21441] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:29:02.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:29:03.052 [DEBUG] [Thread-21441] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:29:03.052 [DEBUG] [Thread-21441] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:29:03.052 [DEBUG] [Thread-21441] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:29:03.093 [DEBUG] [Thread-21441] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:29:03.093 [DEBUG] [Thread-21441] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:29:03.095 [DEBUG] [Thread-21441] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:29:03.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:29:03.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:29:03.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:29:03.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:29:03.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:29:03.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:29:03.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.728210 -999.00  +21.60  18.27     28   +2.40 1 2 1 1 1   653    0 17.92 -64.27 ----- 25.0 18.3 272.8 24.1 22.2 -21.6 22.2 -20.3 21.9 -20.1 22.1 -21.2
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.728210
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:29:03.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:28:44', tmtdew=22.22, humidity=22.78, cloud=0.0, wind=24.72, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:28:37.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:29:03.117 [DEBUG] [Thread-21441] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:29:03.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:29:03.203 [DEBUG] [Thread-21444] [transport.py] [_log()] starting thread (client mode): 0x149045b0
2025-11-12T19:29:03.203 [DEBUG] [Thread-21444] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:29:03.217 [DEBUG] [Thread-21444] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:29:03.217 [INFO] [Thread-21444] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] client lang: <none>
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] server lang: <none>
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] kex follows: False
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] Compression: none
2025-11-12T19:29:03.225 [DEBUG] [Thread-21444] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:29:03.283 [DEBUG] [Thread-21444] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:29:03.283 [DEBUG] [Thread-21444] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:29:03.283 [DEBUG] [Thread-21444] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:29:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:29:03.283 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:29:03.342 [DEBUG] [Thread-21444] [transport.py] [_log()] userauth is OK
2025-11-12T19:29:03.342 [DEBUG] [Thread-21444] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:29:03.342 [DEBUG] [Thread-21444] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:29:03.342 [DEBUG] [Thread-21444] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:29:03.343 [DEBUG] [Thread-21444] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:29:03.360 [INFO] [Thread-21444] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:29:03.360 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:29:03.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:29:04.203 [DEBUG] [Thread-21444] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:29:04.203 [DEBUG] [Thread-21444] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:29:04.251 [DEBUG] [Thread-21444] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:29:04.251 [DEBUG] [Thread-21444] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:29:04.259 [DEBUG] [Thread-21444] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:29:04.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:29:04.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-11-12T19:29:04.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-11-12T19:29:04.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:29:04.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:29:04.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:29:04.290 [DEBUG] [Thread-21444] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:29:13.888 [DEBUG] [Thread-21446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:29:28.938 [DEBUG] [Thread-21447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:29:34.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:29:34.313 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:29:34.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:29:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 29, 16), 22.24, 22.74, 0.0, 23.19, 21.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:29:34.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:29:16
2025-11-12T19:29:35.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:29:35.233 [DEBUG] [Thread-21448] [transport.py] [_log()] starting thread (client mode): 0x14947c70
2025-11-12T19:29:35.233 [DEBUG] [Thread-21448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:29:35.252 [DEBUG] [Thread-21448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:29:35.252 [INFO] [Thread-21448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] client lang: <none>
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] server lang: <none>
2025-11-12T19:29:35.255 [DEBUG] [Thread-21448] [transport.py] [_log()] kex follows: False
2025-11-12T19:29:35.256 [DEBUG] [Thread-21448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:29:35.256 [DEBUG] [Thread-21448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:29:35.256 [DEBUG] [Thread-21448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:29:35.256 [DEBUG] [Thread-21448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:29:35.256 [DEBUG] [Thread-21448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:29:35.256 [DEBUG] [Thread-21448] [transport.py] [_log()] Compression: none
2025-11-12T19:29:35.256 [DEBUG] [Thread-21448] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:29:35.274 [DEBUG] [Thread-21448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:29:35.274 [DEBUG] [Thread-21448] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:29:35.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:29:35.275 [DEBUG] [Thread-21448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:29:35.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:29:35.277 [DEBUG] [Thread-21448] [transport.py] [_log()] userauth is OK
2025-11-12T19:29:35.277 [DEBUG] [Thread-21448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:29:35.277 [DEBUG] [Thread-21448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:29:35.277 [DEBUG] [Thread-21448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:29:35.278 [DEBUG] [Thread-21448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:29:35.296 [INFO] [Thread-21448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:29:35.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:29:35.856 [DEBUG] [Thread-21448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:29:35.856 [DEBUG] [Thread-21448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:29:35.856 [DEBUG] [Thread-21448] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:29:35.896 [DEBUG] [Thread-21448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:29:35.896 [DEBUG] [Thread-21448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:29:35.899 [DEBUG] [Thread-21448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:29:35.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:29:35.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:29:35.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:29:35.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:29:35.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:29:35.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:29:35.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:29:35.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:29:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:29:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.728557 -999.00  +21.60  29.02     28   +2.50 1 2 1 1 1   636    0 17.88 -63.89 ----- 28.0 29.0 263.0 31.6 22.2 -21.6 22.1 -20.2 21.9 -20.1 22.1 -21.1
2025-11-12T19:29:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:29:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:29:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.728557
2025-11-12T19:29:35.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:29:35.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:29:35.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:29:35.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:29:35.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:29:35.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:29:16', tmtdew=22.24, humidity=22.74, cloud=0.0, wind=23.19, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:29:07.325', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:29:35.924 [DEBUG] [Thread-21448] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:29:36.006 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:29:36.018 [DEBUG] [Thread-21451] [transport.py] [_log()] starting thread (client mode): 0x149453f0
2025-11-12T19:29:36.018 [DEBUG] [Thread-21451] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:29:36.031 [DEBUG] [Thread-21451] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:29:36.031 [INFO] [Thread-21451] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] client lang: <none>
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] server lang: <none>
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] kex follows: False
2025-11-12T19:29:36.039 [DEBUG] [Thread-21451] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:29:36.040 [DEBUG] [Thread-21451] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:29:36.040 [DEBUG] [Thread-21451] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:29:36.040 [DEBUG] [Thread-21451] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:29:36.040 [DEBUG] [Thread-21451] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:29:36.040 [DEBUG] [Thread-21451] [transport.py] [_log()] Compression: none
2025-11-12T19:29:36.040 [DEBUG] [Thread-21451] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:29:36.095 [DEBUG] [Thread-21451] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:29:36.096 [DEBUG] [Thread-21451] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:29:36.096 [DEBUG] [Thread-21451] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:29:36.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:29:36.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:29:36.157 [DEBUG] [Thread-21451] [transport.py] [_log()] userauth is OK
2025-11-12T19:29:36.157 [DEBUG] [Thread-21451] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:29:36.157 [DEBUG] [Thread-21451] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:29:36.157 [DEBUG] [Thread-21451] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:29:36.157 [DEBUG] [Thread-21451] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:29:36.177 [INFO] [Thread-21451] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:29:36.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:29:36.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:29:36.997 [DEBUG] [Thread-21451] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:29:36.997 [DEBUG] [Thread-21451] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:29:37.047 [DEBUG] [Thread-21451] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:29:37.047 [DEBUG] [Thread-21451] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:29:37.058 [DEBUG] [Thread-21451] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:29:37.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:29:37.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-11-12T19:29:37.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:29:37.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:29:37.084 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:29:37.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:29:37.092 [DEBUG] [Thread-21451] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:29:43.969 [DEBUG] [Thread-21453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:29:48.192 [DEBUG] [Thread-21454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:29:57.778 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:29:57.779 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:29:59.015 [DEBUG] [Thread-21455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:30:07.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:30:07.115 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:30:07.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-11-12T19:30:07.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 29, 48), 22.24, 22.73, 0.0, 21.97, 21.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:30:07.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:29:48
2025-11-12T19:30:07.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:30:08.035 [DEBUG] [Thread-21456] [transport.py] [_log()] starting thread (client mode): 0x14914070
2025-11-12T19:30:08.036 [DEBUG] [Thread-21456] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:30:08.056 [DEBUG] [Thread-21456] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:30:08.056 [INFO] [Thread-21456] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] client lang: <none>
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] server lang: <none>
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] kex follows: False
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] Compression: none
2025-11-12T19:30:08.060 [DEBUG] [Thread-21456] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:30:08.076 [DEBUG] [Thread-21456] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:30:08.077 [DEBUG] [Thread-21456] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:30:08.077 [DEBUG] [Thread-21456] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:30:08.077 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:30:08.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:30:08.078 [DEBUG] [Thread-21456] [transport.py] [_log()] userauth is OK
2025-11-12T19:30:08.079 [DEBUG] [Thread-21456] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:30:08.079 [DEBUG] [Thread-21456] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:30:08.079 [DEBUG] [Thread-21456] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:30:08.079 [DEBUG] [Thread-21456] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:30:08.089 [INFO] [Thread-21456] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:30:08.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:30:08.652 [DEBUG] [Thread-21456] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:30:08.653 [DEBUG] [Thread-21456] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:30:08.653 [DEBUG] [Thread-21456] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:30:08.693 [DEBUG] [Thread-21456] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:30:08.694 [DEBUG] [Thread-21456] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:30:08.697 [DEBUG] [Thread-21456] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:30:08.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:30:08.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:30:08.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:30:08.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:30:08.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:30:08.722 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:30:08.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:30:08.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:30:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:30:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.728905 -999.00  +21.60  21.63     28   +2.50 1 2 1 1 1   619    0 17.69 -65.23 ----- 14.9 21.6 274.8 31.3 22.2 -21.5 22.1 -20.1 21.8 -19.9 22.1 -21.1
2025-11-12T19:30:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:30:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:30:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.728905
2025-11-12T19:30:08.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:30:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:30:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:30:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:30:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:30:08.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:29:48', tmtdew=22.24, humidity=22.73, cloud=0.0, wind=21.97, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:29:37.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:30:08.725 [DEBUG] [Thread-21456] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:30:08.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:30:08.818 [DEBUG] [Thread-21459] [transport.py] [_log()] starting thread (client mode): 0x173be050
2025-11-12T19:30:08.818 [DEBUG] [Thread-21459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:30:08.832 [DEBUG] [Thread-21459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:30:08.832 [INFO] [Thread-21459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:30:08.839 [DEBUG] [Thread-21459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] client lang: <none>
2025-11-12T19:30:08.840 [DEBUG] [Thread-21459] [transport.py] [_log()] server lang: <none>
2025-11-12T19:30:08.841 [DEBUG] [Thread-21459] [transport.py] [_log()] kex follows: False
2025-11-12T19:30:08.841 [DEBUG] [Thread-21459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:30:08.841 [DEBUG] [Thread-21459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:30:08.841 [DEBUG] [Thread-21459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:30:08.841 [DEBUG] [Thread-21459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:30:08.841 [DEBUG] [Thread-21459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:30:08.841 [DEBUG] [Thread-21459] [transport.py] [_log()] Compression: none
2025-11-12T19:30:08.841 [DEBUG] [Thread-21459] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:30:08.896 [DEBUG] [Thread-21459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:30:08.897 [DEBUG] [Thread-21459] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:30:08.897 [DEBUG] [Thread-21459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:30:08.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:30:08.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:30:08.952 [DEBUG] [Thread-21459] [transport.py] [_log()] userauth is OK
2025-11-12T19:30:08.952 [DEBUG] [Thread-21459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:30:08.952 [DEBUG] [Thread-21459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:30:08.952 [DEBUG] [Thread-21459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:30:08.952 [DEBUG] [Thread-21459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:30:08.966 [INFO] [Thread-21459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:30:08.966 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:30:08.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:30:09.854 [DEBUG] [Thread-21459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:30:09.855 [DEBUG] [Thread-21459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:30:09.902 [DEBUG] [Thread-21459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:30:09.902 [DEBUG] [Thread-21459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:30:09.911 [DEBUG] [Thread-21459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:30:09.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:30:09.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')
2025-11-12T19:30:09.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:30:09.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:30:09.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:30:09.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:30:09.950 [DEBUG] [Thread-21459] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:30:14.050 [DEBUG] [Thread-21461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:30:29.099 [DEBUG] [Thread-21462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:30:39.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:30:39.970 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:30:39.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-11-12T19:30:40.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 30, 20), 22.2, 22.79, 0.0, 22.34, 21.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:30:40.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:30:20
2025-11-12T19:30:40.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:30:40.868 [DEBUG] [Thread-21463] [transport.py] [_log()] starting thread (client mode): 0x14923580
2025-11-12T19:30:40.868 [DEBUG] [Thread-21463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:30:40.887 [DEBUG] [Thread-21463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:30:40.887 [INFO] [Thread-21463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:30:40.888 [DEBUG] [Thread-21463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] client lang: <none>
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] server lang: <none>
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] kex follows: False
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:30:40.889 [DEBUG] [Thread-21463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:30:40.890 [DEBUG] [Thread-21463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:30:40.890 [DEBUG] [Thread-21463] [transport.py] [_log()] Compression: none
2025-11-12T19:30:40.890 [DEBUG] [Thread-21463] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:30:40.899 [DEBUG] [Thread-21463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:30:40.900 [DEBUG] [Thread-21463] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:30:40.901 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:30:40.901 [DEBUG] [Thread-21463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:30:40.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:30:40.903 [DEBUG] [Thread-21463] [transport.py] [_log()] userauth is OK
2025-11-12T19:30:40.903 [DEBUG] [Thread-21463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:30:40.904 [DEBUG] [Thread-21463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:30:40.904 [DEBUG] [Thread-21463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:30:40.904 [DEBUG] [Thread-21463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:30:40.930 [INFO] [Thread-21463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:30:40.930 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:30:41.551 [DEBUG] [Thread-21463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:30:41.551 [DEBUG] [Thread-21463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:30:41.552 [DEBUG] [Thread-21463] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:30:41.593 [DEBUG] [Thread-21463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:30:41.593 [DEBUG] [Thread-21463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:30:41.596 [DEBUG] [Thread-21463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:30:41.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:30:41.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:30:41.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:30:41.612 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:30:41.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:30:41.619 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:30:41.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:30:41.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:30:41.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:30:41.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.729599 -999.00  +21.60  16.98     28   +2.50 1 2 1 1 1   581    0 17.00 -72.59 ----- 12.8 17.0 276.0 20.6 22.1 -21.4 22.1 -20.1 21.8 -19.9 22.0 -21.0
2025-11-12T19:30:41.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:30:41.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:30:41.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.729599
2025-11-12T19:30:41.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:30:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:30:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:30:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:30:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:30:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:30:20', tmtdew=22.2, humidity=22.79, cloud=0.0, wind=22.34, temperature=21.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:30:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:30:41.622 [DEBUG] [Thread-21463] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:30:41.704 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:30:41.716 [DEBUG] [Thread-21466] [transport.py] [_log()] starting thread (client mode): 0x173bc160
2025-11-12T19:30:41.717 [DEBUG] [Thread-21466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:30:41.731 [DEBUG] [Thread-21466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:30:41.731 [INFO] [Thread-21466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:30:41.738 [DEBUG] [Thread-21466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:30:41.738 [DEBUG] [Thread-21466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:30:41.738 [DEBUG] [Thread-21466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:30:41.738 [DEBUG] [Thread-21466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:30:41.738 [DEBUG] [Thread-21466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] client lang: <none>
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] server lang: <none>
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] kex follows: False
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:30:41.739 [DEBUG] [Thread-21466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:30:41.740 [DEBUG] [Thread-21466] [transport.py] [_log()] Compression: none
2025-11-12T19:30:41.740 [DEBUG] [Thread-21466] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:30:41.797 [DEBUG] [Thread-21466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:30:41.797 [DEBUG] [Thread-21466] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:30:41.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:30:41.798 [DEBUG] [Thread-21466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:30:41.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:30:41.852 [DEBUG] [Thread-21466] [transport.py] [_log()] userauth is OK
2025-11-12T19:30:41.853 [DEBUG] [Thread-21466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:30:41.853 [DEBUG] [Thread-21466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:30:41.853 [DEBUG] [Thread-21466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:30:41.853 [DEBUG] [Thread-21466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:30:41.871 [INFO] [Thread-21466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:30:41.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:30:41.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:30:42.695 [DEBUG] [Thread-21466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:30:42.695 [DEBUG] [Thread-21466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:30:42.742 [DEBUG] [Thread-21466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:30:42.743 [DEBUG] [Thread-21466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:30:42.752 [DEBUG] [Thread-21466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:30:42.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:30:42.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-11-12T19:30:42.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-11-12T19:30:42.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:30:42.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:30:42.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:30:42.790 [DEBUG] [Thread-21466] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:30:44.136 [DEBUG] [Thread-21468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:30:48.251 [DEBUG] [Thread-21469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:30:59.194 [DEBUG] [Thread-21470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:31:02.324 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:31:02.325 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:31:12.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:31:12.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:31:12.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-11-12T19:31:13.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 30, 52), 22.18, 22.82, 0.0, 23.33, 21.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:31:13.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:30:52
2025-11-12T19:31:13.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:31:13.702 [DEBUG] [Thread-21471] [transport.py] [_log()] starting thread (client mode): 0x173bf280
2025-11-12T19:31:13.702 [DEBUG] [Thread-21471] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:31:13.723 [DEBUG] [Thread-21471] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:31:13.723 [INFO] [Thread-21471] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:31:13.726 [DEBUG] [Thread-21471] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:31:13.726 [DEBUG] [Thread-21471] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:31:13.726 [DEBUG] [Thread-21471] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] client lang: <none>
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] server lang: <none>
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] kex follows: False
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:31:13.727 [DEBUG] [Thread-21471] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:31:13.728 [DEBUG] [Thread-21471] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:31:13.728 [DEBUG] [Thread-21471] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:31:13.728 [DEBUG] [Thread-21471] [transport.py] [_log()] Compression: none
2025-11-12T19:31:13.728 [DEBUG] [Thread-21471] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:31:13.746 [DEBUG] [Thread-21471] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:31:13.747 [DEBUG] [Thread-21471] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:31:13.748 [DEBUG] [Thread-21471] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:31:13.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:31:13.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:31:13.751 [DEBUG] [Thread-21471] [transport.py] [_log()] userauth is OK
2025-11-12T19:31:13.751 [DEBUG] [Thread-21471] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:31:13.751 [DEBUG] [Thread-21471] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:31:13.751 [DEBUG] [Thread-21471] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:31:13.751 [DEBUG] [Thread-21471] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:31:13.772 [INFO] [Thread-21471] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:31:13.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:31:14.227 [DEBUG] [Thread-21473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:31:14.359 [DEBUG] [Thread-21471] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:31:14.359 [DEBUG] [Thread-21471] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:31:14.360 [DEBUG] [Thread-21471] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:31:14.401 [DEBUG] [Thread-21471] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:31:14.401 [DEBUG] [Thread-21471] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:31:14.404 [DEBUG] [Thread-21471] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:31:14.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:31:14.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:31:14.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:31:14.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:31:14.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:31:14.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:31:14.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:31:14.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:31:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:31:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.729599 -999.00  +21.60  16.98     28   +2.50 1 2 1 1 1   581    0 17.00 -72.59 ----- 12.8 17.0 276.0 20.6 22.1 -21.4 22.1 -20.1 21.8 -19.9 22.0 -21.0
2025-11-12T19:31:14.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:31:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:31:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.729599
2025-11-12T19:31:14.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:31:14.428 [DEBUG] [Thread-21471] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:31:14.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:31:14.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:31:14.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:31:14.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:31:14.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:30:52', tmtdew=22.18, humidity=22.82, cloud=0.0, wind=23.33, temperature=21.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:30:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:31:14.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:31:14.520 [DEBUG] [Thread-21475] [transport.py] [_log()] starting thread (client mode): 0x14923f40
2025-11-12T19:31:14.520 [DEBUG] [Thread-21475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:31:14.534 [DEBUG] [Thread-21475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:31:14.535 [INFO] [Thread-21475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:31:14.542 [DEBUG] [Thread-21475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] client lang: <none>
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] server lang: <none>
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] kex follows: False
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] Compression: none
2025-11-12T19:31:14.543 [DEBUG] [Thread-21475] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:31:14.600 [DEBUG] [Thread-21475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:31:14.601 [DEBUG] [Thread-21475] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:31:14.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:31:14.602 [DEBUG] [Thread-21475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:31:14.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:31:14.656 [DEBUG] [Thread-21475] [transport.py] [_log()] userauth is OK
2025-11-12T19:31:14.656 [DEBUG] [Thread-21475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:31:14.656 [DEBUG] [Thread-21475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:31:14.656 [DEBUG] [Thread-21475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:31:14.656 [DEBUG] [Thread-21475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:31:14.676 [INFO] [Thread-21475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:31:14.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:31:14.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:31:15.530 [DEBUG] [Thread-21475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:31:15.531 [DEBUG] [Thread-21475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:31:15.581 [DEBUG] [Thread-21475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:31:15.581 [DEBUG] [Thread-21475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:31:15.590 [DEBUG] [Thread-21475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:31:15.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:31:15.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:31: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') -> 00000000
2025-11-12T19:31:15.617 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:31:15.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:31:15.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:31:15.626 [DEBUG] [Thread-21475] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:31:29.262 [DEBUG] [Thread-21477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:31:44.299 [DEBUG] [Thread-21478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:31:45.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:31:45.649 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:31:45.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-11-12T19:31:46.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 31, 24), 22.2, 22.78, 0.0, 22.07, 21.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:31:46.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:31:24
2025-11-12T19:31:46.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:31:46.537 [DEBUG] [Thread-21479] [transport.py] [_log()] starting thread (client mode): 0x149472e0
2025-11-12T19:31:46.537 [DEBUG] [Thread-21479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:31:46.558 [DEBUG] [Thread-21479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:31:46.558 [INFO] [Thread-21479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:31:46.561 [DEBUG] [Thread-21479] [transport.py] [_log()] client lang: <none>
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] server lang: <none>
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] kex follows: False
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] Compression: none
2025-11-12T19:31:46.562 [DEBUG] [Thread-21479] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:31:46.570 [DEBUG] [Thread-21479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:31:46.571 [DEBUG] [Thread-21479] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:31:46.571 [DEBUG] [Thread-21479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:31:46.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:31:46.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:31:46.573 [DEBUG] [Thread-21479] [transport.py] [_log()] userauth is OK
2025-11-12T19:31:46.573 [DEBUG] [Thread-21479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:31:46.573 [DEBUG] [Thread-21479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:31:46.573 [DEBUG] [Thread-21479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:31:46.573 [DEBUG] [Thread-21479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:31:46.592 [INFO] [Thread-21479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:31:46.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:31:47.162 [DEBUG] [Thread-21479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:31:47.162 [DEBUG] [Thread-21479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:31:47.163 [DEBUG] [Thread-21479] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:31:47.203 [DEBUG] [Thread-21479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:31:47.203 [DEBUG] [Thread-21479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:31:47.206 [DEBUG] [Thread-21479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:31:47.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:31:47.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:31:47.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:31:47.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:31:47.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:31:47.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:31:47.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:31:47.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:31:47.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:31:47.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.729946 -999.00  +21.60  21.48     28   +2.40 1 2 1 1 1   562    0 17.56 -70.25 ----- 16.6 21.5 269.0 25.9 22.1 -21.4 22.1 -20.1 21.8 -20.1 22.1 -21.1
2025-11-12T19:31:47.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:31:47.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:31:47.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.729946
2025-11-12T19:31:47.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:31:47.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:31:47.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:31:47.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:31:47.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:31:47.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:31:24', tmtdew=22.2, humidity=22.78, cloud=0.0, wind=22.07, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:31:07.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:31:47.223 [DEBUG] [Thread-21479] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:31:47.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:31:47.317 [DEBUG] [Thread-21482] [transport.py] [_log()] starting thread (client mode): 0x173bf370
2025-11-12T19:31:47.317 [DEBUG] [Thread-21482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:31:47.332 [DEBUG] [Thread-21482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:31:47.332 [INFO] [Thread-21482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:31:47.339 [DEBUG] [Thread-21482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:31:47.339 [DEBUG] [Thread-21482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:31:47.339 [DEBUG] [Thread-21482] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:31:47.339 [DEBUG] [Thread-21482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:31:47.339 [DEBUG] [Thread-21482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] client lang: <none>
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] server lang: <none>
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] kex follows: False
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] Compression: none
2025-11-12T19:31:47.340 [DEBUG] [Thread-21482] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:31:47.396 [DEBUG] [Thread-21482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:31:47.397 [DEBUG] [Thread-21482] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:31:47.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:31:47.398 [DEBUG] [Thread-21482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:31:47.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:31:47.453 [DEBUG] [Thread-21482] [transport.py] [_log()] userauth is OK
2025-11-12T19:31:47.453 [DEBUG] [Thread-21482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:31:47.453 [DEBUG] [Thread-21482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:31:47.453 [DEBUG] [Thread-21482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:31:47.453 [DEBUG] [Thread-21482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:31:47.472 [INFO] [Thread-21482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:31: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-11-12T19:31:47.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:31:48.312 [DEBUG] [Thread-21482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:31:48.312 [DEBUG] [Thread-21482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:31:48.321 [DEBUG] [Thread-21484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:31:48.360 [DEBUG] [Thread-21482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:31:48.360 [DEBUG] [Thread-21482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:31:48.370 [DEBUG] [Thread-21482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:31:48.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:31:48.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-11-12T19:31:48.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-11-12T19:31:48.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:31:48.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:31:48.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:31:48.405 [DEBUG] [Thread-21482] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:31:59.334 [DEBUG] [Thread-21485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:32:07.949 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:32:07.950 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:32:14.387 [DEBUG] [Thread-21486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:32:18.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:32:18.426 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:32:18.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-11-12T19:32:19.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 31, 56), 22.14, 22.81, 0.0, 24.19, 21.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:32:19.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:31:56
2025-11-12T19:32:19.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:32:19.379 [DEBUG] [Thread-21487] [transport.py] [_log()] starting thread (client mode): 0x14947f70
2025-11-12T19:32:19.380 [DEBUG] [Thread-21487] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:32:19.401 [DEBUG] [Thread-21487] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:32:19.401 [INFO] [Thread-21487] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] client lang: <none>
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] server lang: <none>
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] kex follows: False
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] Compression: none
2025-11-12T19:32:19.404 [DEBUG] [Thread-21487] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:32:19.419 [DEBUG] [Thread-21487] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:32:19.419 [DEBUG] [Thread-21487] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:32:19.419 [DEBUG] [Thread-21487] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:32:19.419 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:32:19.420 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:32:19.420 [DEBUG] [Thread-21487] [transport.py] [_log()] userauth is OK
2025-11-12T19:32:19.420 [DEBUG] [Thread-21487] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:32:19.420 [DEBUG] [Thread-21487] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:32:19.420 [DEBUG] [Thread-21487] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:32:19.420 [DEBUG] [Thread-21487] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:32:19.430 [INFO] [Thread-21487] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:32:19.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:32:20.047 [DEBUG] [Thread-21487] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:32:20.047 [DEBUG] [Thread-21487] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:32:20.047 [DEBUG] [Thread-21487] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:32:20.088 [DEBUG] [Thread-21487] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:32:20.088 [DEBUG] [Thread-21487] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:32:20.089 [DEBUG] [Thread-21487] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:32:20.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:32:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:32:20.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:32:20.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:32:20.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:32:20.106 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:32:20.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:32:20.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:32:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:32:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.730294 -999.00  +21.50  19.32     28   +2.50 1 2 1 1 1   542    0 17.38 -68.02 ----- 17.0 19.3 264.0 22.4 22.1 -21.4 22.1 -20.0 21.8 -20.0 22.0 -21.0
2025-11-12T19:32:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:32:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:32:20.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.730294
2025-11-12T19:32:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:32:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:32:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:32:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:32:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:32:20.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:31:56', tmtdew=22.14, humidity=22.81, cloud=0.0, wind=24.19, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:31:37.402', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:32:20.107 [DEBUG] [Thread-21487] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:32:20.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:32:20.194 [DEBUG] [Thread-21490] [transport.py] [_log()] starting thread (client mode): 0x149230d0
2025-11-12T19:32:20.194 [DEBUG] [Thread-21490] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:32:20.208 [DEBUG] [Thread-21490] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:32:20.208 [INFO] [Thread-21490] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] client lang: <none>
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] server lang: <none>
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] kex follows: False
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] Compression: none
2025-11-12T19:32:20.216 [DEBUG] [Thread-21490] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:32:20.275 [DEBUG] [Thread-21490] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:32:20.275 [DEBUG] [Thread-21490] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:32:20.275 [DEBUG] [Thread-21490] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:32:20.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:32:20.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:32:20.332 [DEBUG] [Thread-21490] [transport.py] [_log()] userauth is OK
2025-11-12T19:32:20.332 [DEBUG] [Thread-21490] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:32:20.332 [DEBUG] [Thread-21490] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:32:20.332 [DEBUG] [Thread-21490] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:32:20.332 [DEBUG] [Thread-21490] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:32:20.345 [INFO] [Thread-21490] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:32:20.346 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:32:20.346 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:32:21.227 [DEBUG] [Thread-21490] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:32:21.227 [DEBUG] [Thread-21490] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:32:21.275 [DEBUG] [Thread-21490] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:32:21.275 [DEBUG] [Thread-21490] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:32:21.283 [DEBUG] [Thread-21490] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:32:21.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:32:21.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-11-12T19:32:21.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-11-12T19:32:21.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:32:21.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:32:21.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:32:21.314 [DEBUG] [Thread-21490] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:32:29.423 [DEBUG] [Thread-21492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:32:44.466 [DEBUG] [Thread-21493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:32:48.378 [DEBUG] [Thread-21494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:32:51.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:32:51.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:32:51.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-11-12T19:32:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 32, 28), 22.14, 22.81, 0.0, 26.5, 21.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:32:51.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:32:28
2025-11-12T19:32:52.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:32:52.244 [DEBUG] [Thread-21495] [transport.py] [_log()] starting thread (client mode): 0x17361270
2025-11-12T19:32:52.244 [DEBUG] [Thread-21495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:32:52.259 [DEBUG] [Thread-21495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:32:52.259 [INFO] [Thread-21495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:32:52.262 [DEBUG] [Thread-21495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] client lang: <none>
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] server lang: <none>
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] kex follows: False
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] Compression: none
2025-11-12T19:32:52.263 [DEBUG] [Thread-21495] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:32:52.280 [DEBUG] [Thread-21495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:32:52.280 [DEBUG] [Thread-21495] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:32:52.281 [DEBUG] [Thread-21495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:32:52.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:32:52.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:32:52.283 [DEBUG] [Thread-21495] [transport.py] [_log()] userauth is OK
2025-11-12T19:32:52.283 [DEBUG] [Thread-21495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:32:52.283 [DEBUG] [Thread-21495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:32:52.283 [DEBUG] [Thread-21495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:32:52.283 [DEBUG] [Thread-21495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:32:52.308 [INFO] [Thread-21495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:32:52.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:32:52.932 [DEBUG] [Thread-21495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:32:52.933 [DEBUG] [Thread-21495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:32:52.933 [DEBUG] [Thread-21495] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:32:52.973 [DEBUG] [Thread-21495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:32:52.973 [DEBUG] [Thread-21495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:32:52.976 [DEBUG] [Thread-21495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:32:52.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:32:52.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:32:52.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:32:52.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:32:52.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:32:52.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:32:52.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:32:52.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:32:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:32:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.730641 -999.00  +21.50  13.73     28   +2.40 1 2 1 1 1   521    0 17.41 -66.89 ----- 14.9 13.7 284.3 19.9 22.1 -21.3 22.1 -20.1 21.8 -19.9 22.0 -21.0
2025-11-12T19:32:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:32:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:32:52.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.730641
2025-11-12T19:32:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:32:53.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:32:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:32:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:32:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:32:53.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:32:28', tmtdew=22.14, humidity=22.81, cloud=0.0, wind=26.5, temperature=21.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:32:07.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:32:53.001 [DEBUG] [Thread-21495] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:32:53.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:32:53.097 [DEBUG] [Thread-21498] [transport.py] [_log()] starting thread (client mode): 0x173bc940
2025-11-12T19:32:53.097 [DEBUG] [Thread-21498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:32:53.111 [DEBUG] [Thread-21498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:32:53.112 [INFO] [Thread-21498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] client lang: <none>
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] server lang: <none>
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] kex follows: False
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] Compression: none
2025-11-12T19:32:53.119 [DEBUG] [Thread-21498] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:32:53.175 [DEBUG] [Thread-21498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:32:53.176 [DEBUG] [Thread-21498] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:32:53.176 [DEBUG] [Thread-21498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:32:53.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:32:53.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:32:53.232 [DEBUG] [Thread-21498] [transport.py] [_log()] userauth is OK
2025-11-12T19:32:53.232 [DEBUG] [Thread-21498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:32:53.232 [DEBUG] [Thread-21498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:32:53.232 [DEBUG] [Thread-21498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:32:53.232 [DEBUG] [Thread-21498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:32:53.251 [INFO] [Thread-21498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:32:53.252 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:32:53.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:32:54.110 [DEBUG] [Thread-21498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:32:54.110 [DEBUG] [Thread-21498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:32:54.158 [DEBUG] [Thread-21498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:32:54.158 [DEBUG] [Thread-21498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:32:54.167 [DEBUG] [Thread-21498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:32:54.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:32:54.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-11-12T19:32:54.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-11-12T19:32:54.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:32:54.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:32:54.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:32:54.202 [DEBUG] [Thread-21498] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:32:59.498 [DEBUG] [Thread-21500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:33:11.923 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:33:11.924 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:33:14.537 [DEBUG] [Thread-21501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:33:24.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:33:24.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:33:24.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-11-12T19:33:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 33), 22.1, 22.86, 0.0, 24.65, 21.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:33:24.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:33:00
2025-11-12T19:33:24.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:33:25.128 [DEBUG] [Thread-21502] [transport.py] [_log()] starting thread (client mode): 0x14920100
2025-11-12T19:33:25.128 [DEBUG] [Thread-21502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:33:25.148 [DEBUG] [Thread-21502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:33:25.149 [INFO] [Thread-21502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:33:25.152 [DEBUG] [Thread-21502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] client lang: <none>
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] server lang: <none>
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] kex follows: False
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] Compression: none
2025-11-12T19:33:25.153 [DEBUG] [Thread-21502] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:33:25.171 [DEBUG] [Thread-21502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:33:25.171 [DEBUG] [Thread-21502] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:33:25.172 [DEBUG] [Thread-21502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:33:25.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:33:25.173 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:33:25.174 [DEBUG] [Thread-21502] [transport.py] [_log()] userauth is OK
2025-11-12T19:33:25.174 [DEBUG] [Thread-21502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:33:25.174 [DEBUG] [Thread-21502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:33:25.174 [DEBUG] [Thread-21502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:33:25.174 [DEBUG] [Thread-21502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:33:25.199 [INFO] [Thread-21502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:33:25.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:33:25.817 [DEBUG] [Thread-21502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:33:25.817 [DEBUG] [Thread-21502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:33:25.817 [DEBUG] [Thread-21502] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:33:25.858 [DEBUG] [Thread-21502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:33:25.858 [DEBUG] [Thread-21502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:33:25.861 [DEBUG] [Thread-21502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:33:25.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:33:25.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:33:25.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:33:25.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:33:25.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:33:25.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:33:25.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:33:25.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:33:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:33:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.730988 -999.00  +21.50  15.65     28   +2.40 1 2 1 1 1   500    0 17.65 -64.84 ----- 17.1 15.7 270.4 22.5 22.1 -21.4 22.1 -20.0 21.8 -19.9 22.0 -20.9
2025-11-12T19:33:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:33:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:33:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.730988
2025-11-12T19:33:25.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:33:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:33:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:33:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:33:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:33:25.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:33:00', tmtdew=22.1, humidity=22.86, cloud=0.0, wind=24.65, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:32:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:33:25.888 [DEBUG] [Thread-21502] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:33:25.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:33:25.982 [DEBUG] [Thread-21505] [transport.py] [_log()] starting thread (client mode): 0x149221d0
2025-11-12T19:33:25.983 [DEBUG] [Thread-21505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:33:25.997 [DEBUG] [Thread-21505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:33:25.997 [INFO] [Thread-21505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:33:26.004 [DEBUG] [Thread-21505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:33:26.004 [DEBUG] [Thread-21505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] client lang: <none>
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] server lang: <none>
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] kex follows: False
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:33:26.005 [DEBUG] [Thread-21505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:33:26.006 [DEBUG] [Thread-21505] [transport.py] [_log()] Compression: none
2025-11-12T19:33:26.006 [DEBUG] [Thread-21505] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:33:26.068 [DEBUG] [Thread-21505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:33:26.069 [DEBUG] [Thread-21505] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:33:26.069 [DEBUG] [Thread-21505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:33:26.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:33:26.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:33:26.124 [DEBUG] [Thread-21505] [transport.py] [_log()] userauth is OK
2025-11-12T19:33:26.125 [DEBUG] [Thread-21505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:33:26.125 [DEBUG] [Thread-21505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:33:26.125 [DEBUG] [Thread-21505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:33:26.125 [DEBUG] [Thread-21505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:33:26.144 [INFO] [Thread-21505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:33:26.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:33:26.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:33:26.990 [DEBUG] [Thread-21505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:33:26.991 [DEBUG] [Thread-21505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:33:27.039 [DEBUG] [Thread-21505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:33:27.039 [DEBUG] [Thread-21505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:33:27.048 [DEBUG] [Thread-21505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:33:27.057 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:33:27.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-11-12T19:33: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-11-12T19:33:27.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:33:27.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:33:27.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:33:27.083 [DEBUG] [Thread-21505] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:33:29.571 [DEBUG] [Thread-21507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:33:44.618 [DEBUG] [Thread-21508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:33:48.440 [DEBUG] [Thread-21509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:33:57.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:33:57.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:33:57.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:33:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 33, 32), 22.08, 22.89, 0.0, 22.71, 21.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:33:57.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:33:32
2025-11-12T19:33:57.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:33:58.008 [DEBUG] [Thread-21510] [transport.py] [_log()] starting thread (client mode): 0x14922d70
2025-11-12T19:33:58.008 [DEBUG] [Thread-21510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:33:58.030 [DEBUG] [Thread-21510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:33:58.030 [INFO] [Thread-21510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] client lang: <none>
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] server lang: <none>
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] kex follows: False
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] Compression: none
2025-11-12T19:33:58.033 [DEBUG] [Thread-21510] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:33:58.051 [DEBUG] [Thread-21510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:33:58.052 [DEBUG] [Thread-21510] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:33:58.052 [DEBUG] [Thread-21510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:33:58.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:33:58.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:33:58.054 [DEBUG] [Thread-21510] [transport.py] [_log()] userauth is OK
2025-11-12T19:33:58.054 [DEBUG] [Thread-21510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:33:58.054 [DEBUG] [Thread-21510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:33:58.054 [DEBUG] [Thread-21510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:33:58.055 [DEBUG] [Thread-21510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:33:58.079 [INFO] [Thread-21510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:33:58.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:33:58.669 [DEBUG] [Thread-21510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:33:58.669 [DEBUG] [Thread-21510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:33:58.670 [DEBUG] [Thread-21510] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:33:58.711 [DEBUG] [Thread-21510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:33:58.711 [DEBUG] [Thread-21510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:33:58.715 [DEBUG] [Thread-21510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:33:58.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:33:58.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:33:58.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:33:58.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:33:58.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:33:58.738 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:33:58.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:33:58.738 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:33:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:33:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.731335 -999.00  +21.50  20.66     28   +2.40 1 2 1 1 1   479    0 17.47 -60.63 ----- 13.7 20.7 281.4 23.0 22.1 -21.4 22.1 -20.0 21.7 -19.9 22.0 -21.0
2025-11-12T19:33:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:33:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:33:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.731335
2025-11-12T19:33:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:33:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:33:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:33:58.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:33:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:33:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:33:32', tmtdew=22.08, humidity=22.89, cloud=0.0, wind=22.71, temperature=21.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:33:07.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:33:58.741 [DEBUG] [Thread-21510] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:33:58.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:33:58.836 [DEBUG] [Thread-21513] [transport.py] [_log()] starting thread (client mode): 0x14920820
2025-11-12T19:33:58.836 [DEBUG] [Thread-21513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:33:58.855 [DEBUG] [Thread-21513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:33:58.856 [INFO] [Thread-21513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:33:58.863 [DEBUG] [Thread-21513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] client lang: <none>
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] server lang: <none>
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] kex follows: False
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:33:58.864 [DEBUG] [Thread-21513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:33:58.865 [DEBUG] [Thread-21513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:33:58.865 [DEBUG] [Thread-21513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:33:58.865 [DEBUG] [Thread-21513] [transport.py] [_log()] Compression: none
2025-11-12T19:33:58.865 [DEBUG] [Thread-21513] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:33:58.920 [DEBUG] [Thread-21513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:33:58.921 [DEBUG] [Thread-21513] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:33:58.921 [DEBUG] [Thread-21513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:33:58.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:33:58.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:33:58.980 [DEBUG] [Thread-21513] [transport.py] [_log()] userauth is OK
2025-11-12T19:33:58.980 [DEBUG] [Thread-21513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:33:58.981 [DEBUG] [Thread-21513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:33:58.981 [DEBUG] [Thread-21513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:33:58.981 [DEBUG] [Thread-21513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:33:58.999 [INFO] [Thread-21513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:33:59.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:33:59.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:33:59.650 [DEBUG] [Thread-21515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:33:59.852 [DEBUG] [Thread-21513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:33:59.853 [DEBUG] [Thread-21513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:33:59.902 [DEBUG] [Thread-21513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:33:59.902 [DEBUG] [Thread-21513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:33:59.914 [DEBUG] [Thread-21513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:33:59.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:33:59.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-11-12T19:33:59.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-11-12T19:33:59.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:33:59.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:33:59.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:33:59.950 [DEBUG] [Thread-21513] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:34:14.706 [DEBUG] [Thread-21516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:34:17.389 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:34:17.390 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:34:29.739 [DEBUG] [Thread-21517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:34:29.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:34:29.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:34:29.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-11-12T19:34:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 34, 4), 22.1, 22.84, 0.0, 22.25, 21.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:34:30.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:34:04
2025-11-12T19:34:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:34:30.871 [DEBUG] [Thread-21518] [transport.py] [_log()] starting thread (client mode): 0x14916fe0
2025-11-12T19:34:30.872 [DEBUG] [Thread-21518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:34:30.893 [DEBUG] [Thread-21518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:34:30.893 [INFO] [Thread-21518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:34:30.896 [DEBUG] [Thread-21518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:34:30.896 [DEBUG] [Thread-21518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:34:30.896 [DEBUG] [Thread-21518] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] client lang: <none>
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] server lang: <none>
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] kex follows: False
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] Compression: none
2025-11-12T19:34:30.897 [DEBUG] [Thread-21518] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:34:30.917 [DEBUG] [Thread-21518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:34:30.917 [DEBUG] [Thread-21518] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:34:30.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:34:30.918 [DEBUG] [Thread-21518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:34:30.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:34:30.920 [DEBUG] [Thread-21518] [transport.py] [_log()] userauth is OK
2025-11-12T19:34:30.920 [DEBUG] [Thread-21518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:34:30.920 [DEBUG] [Thread-21518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:34:30.921 [DEBUG] [Thread-21518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:34:30.921 [DEBUG] [Thread-21518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:34:30.945 [INFO] [Thread-21518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:34:30.946 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:34:31.548 [DEBUG] [Thread-21518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:34:31.548 [DEBUG] [Thread-21518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:34:31.549 [DEBUG] [Thread-21518] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:34:31.589 [DEBUG] [Thread-21518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:34:31.590 [DEBUG] [Thread-21518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:34:31.593 [DEBUG] [Thread-21518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:34:31.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:34:31.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:34:31.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:34:31.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:34:31.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:34:31.615 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:34:31.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:34:31.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:34:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:34:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.731682 -999.00  +21.50  18.01     28   +2.50 1 2 1 1 1   458    0 17.21 -61.49 ----- 15.8 18.0 271.4 21.0 22.1 -21.2 22.0 -20.0 21.7 -20.0 21.9 -20.9
2025-11-12T19:34:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:34:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:34:31.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.731682
2025-11-12T19:34:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:34:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:34:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:34:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:34:31.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:34:31.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:34:04', tmtdew=22.1, humidity=22.84, cloud=0.0, wind=22.25, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:33:37.325', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:34:31.618 [DEBUG] [Thread-21518] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:34:31.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:34:31.714 [DEBUG] [Thread-21521] [transport.py] [_log()] starting thread (client mode): 0x149235e0
2025-11-12T19:34:31.714 [DEBUG] [Thread-21521] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:34:31.728 [DEBUG] [Thread-21521] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:34:31.729 [INFO] [Thread-21521] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] client lang: <none>
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] server lang: <none>
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] kex follows: False
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] Compression: none
2025-11-12T19:34:31.736 [DEBUG] [Thread-21521] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:34:31.795 [DEBUG] [Thread-21521] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:34:31.796 [DEBUG] [Thread-21521] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:34:31.797 [DEBUG] [Thread-21521] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:34:31.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:34:31.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:34:31.852 [DEBUG] [Thread-21521] [transport.py] [_log()] userauth is OK
2025-11-12T19:34:31.852 [DEBUG] [Thread-21521] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:34:31.852 [DEBUG] [Thread-21521] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:34:31.852 [DEBUG] [Thread-21521] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:34:31.852 [DEBUG] [Thread-21521] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:34:31.872 [INFO] [Thread-21521] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:34:31.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:34:31.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:34:32.697 [DEBUG] [Thread-21521] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:34:32.697 [DEBUG] [Thread-21521] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:34:32.745 [DEBUG] [Thread-21521] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:34:32.745 [DEBUG] [Thread-21521] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:34:32.754 [DEBUG] [Thread-21521] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:34:32.763 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:34:32.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-11-12T19:34:32.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-11-12T19:34:32.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:34:32.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:34:32.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:34:32.791 [DEBUG] [Thread-21521] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:34:44.772 [DEBUG] [Thread-21523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:34:48.498 [DEBUG] [Thread-21524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:34:59.820 [DEBUG] [Thread-21525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:35:02.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:35:02.801 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:35:02.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-11-12T19:35:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 34, 37), 22.02, 22.91, 0.0, 22.16, 21.51, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:35:03.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:34:37
2025-11-12T19:35:03.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:35:03.718 [DEBUG] [Thread-21526] [transport.py] [_log()] starting thread (client mode): 0x14917af0
2025-11-12T19:35:03.718 [DEBUG] [Thread-21526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:35:03.737 [DEBUG] [Thread-21526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:35:03.737 [INFO] [Thread-21526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:35:03.740 [DEBUG] [Thread-21526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] client lang: <none>
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] server lang: <none>
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] kex follows: False
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] Compression: none
2025-11-12T19:35:03.741 [DEBUG] [Thread-21526] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:35:03.749 [DEBUG] [Thread-21526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:35:03.750 [DEBUG] [Thread-21526] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:35:03.750 [DEBUG] [Thread-21526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:35:03.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:35:03.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:35:03.752 [DEBUG] [Thread-21526] [transport.py] [_log()] userauth is OK
2025-11-12T19:35:03.752 [DEBUG] [Thread-21526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:35:03.752 [DEBUG] [Thread-21526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:35:03.752 [DEBUG] [Thread-21526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:35:03.752 [DEBUG] [Thread-21526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:35:03.767 [INFO] [Thread-21526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:35:03.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:35:05.550 [DEBUG] [Thread-21526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:35:05.550 [DEBUG] [Thread-21526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:35:05.551 [DEBUG] [Thread-21526] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:35:05.591 [DEBUG] [Thread-21526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:35:05.592 [DEBUG] [Thread-21526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:35:05.594 [DEBUG] [Thread-21526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:35:05.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:35:05.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:35:05.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:35:05.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:35:05.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:35:05.614 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:35:05.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:35:05.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:35:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:35:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.732030 -999.00  +21.50  22.35     28   +2.40 1 2 1 1 1   437    0 17.62 -60.70 ----- 12.1 22.4 263.6 24.9 22.1 -21.1 22.0 -19.9 21.6 -19.8 21.9 -20.9
2025-11-12T19:35:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:35:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:35:05.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.732030
2025-11-12T19:35:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:35:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:35:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:35:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:35:05.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:35:05.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:34:37', tmtdew=22.02, humidity=22.91, cloud=0.0, wind=22.16, temperature=21.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:34:07.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:35:05.617 [DEBUG] [Thread-21526] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:35:05.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:35:05.711 [DEBUG] [Thread-21529] [transport.py] [_log()] starting thread (client mode): 0x17360c10
2025-11-12T19:35:05.711 [DEBUG] [Thread-21529] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:35:05.726 [DEBUG] [Thread-21529] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:35:05.726 [INFO] [Thread-21529] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:35:05.733 [DEBUG] [Thread-21529] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] client lang: <none>
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] server lang: <none>
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] kex follows: False
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] Compression: none
2025-11-12T19:35:05.734 [DEBUG] [Thread-21529] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:35:05.794 [DEBUG] [Thread-21529] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:35:05.795 [DEBUG] [Thread-21529] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:35:05.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:35:05.796 [DEBUG] [Thread-21529] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:35:05.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:35:05.852 [DEBUG] [Thread-21529] [transport.py] [_log()] userauth is OK
2025-11-12T19:35:05.853 [DEBUG] [Thread-21529] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:35:05.853 [DEBUG] [Thread-21529] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:35:05.853 [DEBUG] [Thread-21529] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:35:05.853 [DEBUG] [Thread-21529] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:35:05.872 [INFO] [Thread-21529] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:35:05.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:35:05.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:35:06.703 [DEBUG] [Thread-21529] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:35:06.703 [DEBUG] [Thread-21529] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:35:06.751 [DEBUG] [Thread-21529] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:35:06.751 [DEBUG] [Thread-21529] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:35:06.760 [DEBUG] [Thread-21529] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:35:06.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:35:06.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-11-12T19:35:06.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-11-12T19:35:06.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:35:06.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:35:06.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:35:06.797 [DEBUG] [Thread-21529] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:35:14.855 [DEBUG] [Thread-21531 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:35:23.113 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:35:23.114 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:35:29.911 [DEBUG] [Thread-21532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:35:36.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:35:36.798 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:35:36.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-11-12T19:35:37.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 35, 9), 22.03, 22.87, 0.0, 22.97, 21.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:35:37.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:35:09
2025-11-12T19:35:37.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:35:37.716 [DEBUG] [Thread-21533] [transport.py] [_log()] starting thread (client mode): 0x17360c10
2025-11-12T19:35:37.716 [DEBUG] [Thread-21533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:35:37.736 [DEBUG] [Thread-21533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:35:37.737 [INFO] [Thread-21533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:35:37.740 [DEBUG] [Thread-21533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:35:37.740 [DEBUG] [Thread-21533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:35:37.740 [DEBUG] [Thread-21533] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:35:37.740 [DEBUG] [Thread-21533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:35:37.740 [DEBUG] [Thread-21533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:35:37.740 [DEBUG] [Thread-21533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:35:37.740 [DEBUG] [Thread-21533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:35:37.740 [DEBUG] [Thread-21533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] client lang: <none>
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] server lang: <none>
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] kex follows: False
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] Compression: none
2025-11-12T19:35:37.741 [DEBUG] [Thread-21533] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:35:37.757 [DEBUG] [Thread-21533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:35:37.758 [DEBUG] [Thread-21533] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:35:37.758 [DEBUG] [Thread-21533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:35:37.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:35:37.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:35:37.761 [DEBUG] [Thread-21533] [transport.py] [_log()] userauth is OK
2025-11-12T19:35:37.761 [DEBUG] [Thread-21533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:35:37.761 [DEBUG] [Thread-21533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:35:37.761 [DEBUG] [Thread-21533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:35:37.761 [DEBUG] [Thread-21533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:35:37.784 [INFO] [Thread-21533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:35:37.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:35:38.415 [DEBUG] [Thread-21533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:35:38.415 [DEBUG] [Thread-21533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:35:38.416 [DEBUG] [Thread-21533] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:35:38.457 [DEBUG] [Thread-21533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:35:38.457 [DEBUG] [Thread-21533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:35:38.460 [DEBUG] [Thread-21533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:35:38.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:35:38.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:35:38.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:35:38.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:35:38.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:35:38.484 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:35:38.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:35:38.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:35:38.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:35:38.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.732377 -999.00  +21.50  16.62     28   +2.40 1 2 1 1 1   416    0 17.56 -64.36 ----- 20.0 16.6 266.6 18.8 22.0 -21.2 22.0 -19.9 21.7 -19.9 22.0 -20.8
2025-11-12T19:35:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:35:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:35:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.732377
2025-11-12T19:35:38.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:35:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:35:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:35:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:35:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:35:38.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:35:09', tmtdew=22.03, humidity=22.87, cloud=0.0, wind=22.97, temperature=21.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:34:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:35:38.487 [DEBUG] [Thread-21533] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:35:38.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:35:38.578 [DEBUG] [Thread-21536] [transport.py] [_log()] starting thread (client mode): 0x11f12d40
2025-11-12T19:35:38.578 [DEBUG] [Thread-21536] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:35:38.592 [DEBUG] [Thread-21536] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:35:38.593 [INFO] [Thread-21536] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:35:38.600 [DEBUG] [Thread-21536] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:35:38.600 [DEBUG] [Thread-21536] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:35:38.600 [DEBUG] [Thread-21536] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:35:38.600 [DEBUG] [Thread-21536] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:35:38.600 [DEBUG] [Thread-21536] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:35:38.600 [DEBUG] [Thread-21536] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] client lang: <none>
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] server lang: <none>
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] kex follows: False
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] Compression: none
2025-11-12T19:35:38.601 [DEBUG] [Thread-21536] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:35:38.660 [DEBUG] [Thread-21536] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:35:38.660 [DEBUG] [Thread-21536] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:35:38.661 [DEBUG] [Thread-21536] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:35:38.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:35:38.662 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:35:38.716 [DEBUG] [Thread-21536] [transport.py] [_log()] userauth is OK
2025-11-12T19:35:38.716 [DEBUG] [Thread-21536] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:35:38.716 [DEBUG] [Thread-21536] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:35:38.716 [DEBUG] [Thread-21536] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:35:38.717 [DEBUG] [Thread-21536] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:35:38.735 [INFO] [Thread-21536] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:35:38.735 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:35:38.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:35:39.566 [DEBUG] [Thread-21536] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:35:39.566 [DEBUG] [Thread-21536] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:35:39.614 [DEBUG] [Thread-21536] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:35:39.615 [DEBUG] [Thread-21536] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:35:39.624 [DEBUG] [Thread-21536] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:35:39.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:35:39.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-11-12T19:35:39.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-11-12T19:35:39.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:35:39.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:35:39.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:35:39.661 [DEBUG] [Thread-21536] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:35:44.944 [DEBUG] [Thread-21538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:35:48.565 [DEBUG] [Thread-21539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:36:00.002 [DEBUG] [Thread-21540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:36:09.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:36:09.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:36:09.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-11-12T19:36:10.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 35, 41), 21.99, 22.96, 0.0, 18.81, 21.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:36:10.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:35:41
2025-11-12T19:36:10.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:36:10.652 [DEBUG] [Thread-21541] [transport.py] [_log()] starting thread (client mode): 0x149143a0
2025-11-12T19:36:10.652 [DEBUG] [Thread-21541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:36:10.675 [DEBUG] [Thread-21541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:36:10.676 [INFO] [Thread-21541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:36:10.679 [DEBUG] [Thread-21541] [transport.py] [_log()] client lang: <none>
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] server lang: <none>
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] kex follows: False
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] Compression: none
2025-11-12T19:36:10.680 [DEBUG] [Thread-21541] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:36:10.696 [DEBUG] [Thread-21541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:36:10.696 [DEBUG] [Thread-21541] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:36:10.697 [DEBUG] [Thread-21541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:36:10.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:36:10.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:36:10.697 [DEBUG] [Thread-21541] [transport.py] [_log()] userauth is OK
2025-11-12T19:36:10.697 [DEBUG] [Thread-21541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:36:10.697 [DEBUG] [Thread-21541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:36:10.697 [DEBUG] [Thread-21541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:36:10.697 [DEBUG] [Thread-21541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:36:10.713 [INFO] [Thread-21541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:36:10.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:36:11.335 [DEBUG] [Thread-21541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:36:11.335 [DEBUG] [Thread-21541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:36:11.335 [DEBUG] [Thread-21541] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:36:11.376 [DEBUG] [Thread-21541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:36:11.376 [DEBUG] [Thread-21541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:36:11.378 [DEBUG] [Thread-21541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:36:11.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:36:11.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:36:11.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:36:11.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:36:11.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:36:11.397 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:36:11.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:36:11.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:36:11.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:36:11.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.733072 -999.00  +21.40  15.05     28   +2.40 1 2 1 1 1   374    0 16.80 -72.40 ----- 15.1 15.1 268.8 21.4 22.0 -21.2 22.0 -19.9 21.6 -19.9 21.9 -20.7
2025-11-12T19:36:11.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:36:11.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:36:11.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.733072
2025-11-12T19:36:11.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:36:11.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:36:11.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:36:11.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:36:11.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:36:11.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:35:41', tmtdew=21.99, humidity=22.96, cloud=0.0, wind=18.81, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:35:37.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:36:11.398 [DEBUG] [Thread-21541] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:36:11.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:36:11.486 [DEBUG] [Thread-21544] [transport.py] [_log()] starting thread (client mode): 0x149157e0
2025-11-12T19:36:11.486 [DEBUG] [Thread-21544] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:36:11.500 [DEBUG] [Thread-21544] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:36:11.500 [INFO] [Thread-21544] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:36:11.507 [DEBUG] [Thread-21544] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:36:11.507 [DEBUG] [Thread-21544] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] client lang: <none>
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] server lang: <none>
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] kex follows: False
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] Compression: none
2025-11-12T19:36:11.508 [DEBUG] [Thread-21544] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:36:11.566 [DEBUG] [Thread-21544] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:36:11.566 [DEBUG] [Thread-21544] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:36:11.566 [DEBUG] [Thread-21544] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:36:11.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:36:11.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:36:11.623 [DEBUG] [Thread-21544] [transport.py] [_log()] userauth is OK
2025-11-12T19:36:11.623 [DEBUG] [Thread-21544] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:36:11.623 [DEBUG] [Thread-21544] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:36:11.623 [DEBUG] [Thread-21544] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:36:11.623 [DEBUG] [Thread-21544] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:36:11.637 [INFO] [Thread-21544] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:36:11.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:36:11.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:36:12.480 [DEBUG] [Thread-21544] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:36:12.480 [DEBUG] [Thread-21544] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:36:12.528 [DEBUG] [Thread-21544] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:36:12.528 [DEBUG] [Thread-21544] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:36:12.536 [DEBUG] [Thread-21544] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:36:12.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:36:12.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-11-12T19:36:12.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-11-12T19:36:12.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:36:12.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:36:12.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:36:12.567 [DEBUG] [Thread-21544] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:36:15.031 [DEBUG] [Thread-21546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:36:28.411 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:36:28.413 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:36:30.072 [DEBUG] [Thread-21547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:36:42.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:36:42.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:36:42.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:36:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 36, 13), 22.02, 22.91, 0.0, 17.15, 21.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:36:43.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:36:13
2025-11-12T19:36:43.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:36:43.504 [DEBUG] [Thread-21548] [transport.py] [_log()] starting thread (client mode): 0x173bc4c0
2025-11-12T19:36:43.504 [DEBUG] [Thread-21548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:36:43.525 [DEBUG] [Thread-21548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:36:43.525 [INFO] [Thread-21548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] client lang: <none>
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] server lang: <none>
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] kex follows: False
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] Compression: none
2025-11-12T19:36:43.528 [DEBUG] [Thread-21548] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:36:43.545 [DEBUG] [Thread-21548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:36:43.546 [DEBUG] [Thread-21548] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:36:43.546 [DEBUG] [Thread-21548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:36:43.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:36:43.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:36:43.549 [DEBUG] [Thread-21548] [transport.py] [_log()] userauth is OK
2025-11-12T19:36:43.549 [DEBUG] [Thread-21548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:36:43.549 [DEBUG] [Thread-21548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:36:43.549 [DEBUG] [Thread-21548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:36:43.549 [DEBUG] [Thread-21548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:36:43.573 [INFO] [Thread-21548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:36:43.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:36:44.194 [DEBUG] [Thread-21548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:36:44.195 [DEBUG] [Thread-21548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:36:44.195 [DEBUG] [Thread-21548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:36:44.235 [DEBUG] [Thread-21548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:36:44.236 [DEBUG] [Thread-21548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:36:44.239 [DEBUG] [Thread-21548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:36:44.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:36:44.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:36:44.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:36:44.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:36:44.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:36:44.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:36:44.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:36:44.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:36:44.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:36:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.733418 -999.00  +21.40  17.82     28   +2.40 1 2 1 1 1   353    0 17.40 -70.14 ----- 20.5 17.8 269.7 24.9 22.0 -21.1 21.9 -19.8 21.6 -19.9 21.9 -20.9
2025-11-12T19:36:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:36:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:36:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.733418
2025-11-12T19:36:44.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:36:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:36:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:36:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:36:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:36:44.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:36:13', tmtdew=22.02, humidity=22.91, cloud=0.0, wind=17.15, temperature=21.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:36:07.315', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:36:44.266 [DEBUG] [Thread-21548] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:36:44.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:36:44.362 [DEBUG] [Thread-21551] [transport.py] [_log()] starting thread (client mode): 0x11f105b0
2025-11-12T19:36:44.362 [DEBUG] [Thread-21551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:36:44.376 [DEBUG] [Thread-21551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:36:44.377 [INFO] [Thread-21551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] client lang: <none>
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] server lang: <none>
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] kex follows: False
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:36:44.384 [DEBUG] [Thread-21551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:36:44.385 [DEBUG] [Thread-21551] [transport.py] [_log()] Compression: none
2025-11-12T19:36:44.385 [DEBUG] [Thread-21551] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:36:44.443 [DEBUG] [Thread-21551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:36:44.444 [DEBUG] [Thread-21551] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:36:44.444 [DEBUG] [Thread-21551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:36:44.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:36:44.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:36:44.499 [DEBUG] [Thread-21551] [transport.py] [_log()] userauth is OK
2025-11-12T19:36:44.500 [DEBUG] [Thread-21551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:36:44.500 [DEBUG] [Thread-21551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:36:44.500 [DEBUG] [Thread-21551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:36:44.500 [DEBUG] [Thread-21551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:36:44.519 [INFO] [Thread-21551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:36:44.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:36:44.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:36:45.109 [DEBUG] [Thread-21553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:36:45.347 [DEBUG] [Thread-21551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:36:45.347 [DEBUG] [Thread-21551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:36:45.394 [DEBUG] [Thread-21551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:36:45.394 [DEBUG] [Thread-21551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:36:45.403 [DEBUG] [Thread-21551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:36:45.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:36:45.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-11-12T19:36:45.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-11-12T19:36:45.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:36:45.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:36:45.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:36:45.438 [DEBUG] [Thread-21551] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:36:48.617 [DEBUG] [Thread-21554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:37:00.158 [DEBUG] [Thread-21555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:37:15.198 [DEBUG] [Thread-21556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:37:15.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:37:15.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:37:15.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-11-12T19:37:16.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 36, 45), 22.01, 22.92, 0.0, 21.16, 21.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:37:16.101 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:36:45
2025-11-12T19:37:16.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:37:16.372 [DEBUG] [Thread-21557] [transport.py] [_log()] starting thread (client mode): 0x173bd960
2025-11-12T19:37:16.373 [DEBUG] [Thread-21557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:37:16.392 [DEBUG] [Thread-21557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:37:16.392 [INFO] [Thread-21557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:37:16.395 [DEBUG] [Thread-21557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] client lang: <none>
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] server lang: <none>
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] kex follows: False
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] Compression: none
2025-11-12T19:37:16.396 [DEBUG] [Thread-21557] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:37:16.413 [DEBUG] [Thread-21557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:37:16.414 [DEBUG] [Thread-21557] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:37:16.414 [DEBUG] [Thread-21557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:37:16.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:37:16.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:37:16.416 [DEBUG] [Thread-21557] [transport.py] [_log()] userauth is OK
2025-11-12T19:37:16.416 [DEBUG] [Thread-21557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:37:16.416 [DEBUG] [Thread-21557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:37:16.416 [DEBUG] [Thread-21557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:37:16.416 [DEBUG] [Thread-21557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:37:16.434 [INFO] [Thread-21557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:37:16.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:37:17.054 [DEBUG] [Thread-21557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:37:17.055 [DEBUG] [Thread-21557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:37:17.055 [DEBUG] [Thread-21557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:37:17.095 [DEBUG] [Thread-21557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:37:17.095 [DEBUG] [Thread-21557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:37:17.098 [DEBUG] [Thread-21557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:37:17.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:37:17.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:37:17.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:37:17.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:37:17.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:37:17.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:37:17.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:37:17.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:37:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:37:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.733766 -999.00  +21.40  22.49     28   +2.40 1 2 1 1 1   333    0 17.45 -71.18 ----- 20.2 22.5 269.2 28.2 21.9 -21.1 21.9 -19.9 21.6 -19.9 21.9 -20.8
2025-11-12T19:37:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:37:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:37:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.733766
2025-11-12T19:37:17.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:37:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:37:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:37:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:37:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:37:17.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:36:45', tmtdew=22.01, humidity=22.92, cloud=0.0, wind=21.16, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:36:37.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:37:17.123 [DEBUG] [Thread-21557] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:37:17.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:37:17.218 [DEBUG] [Thread-21560] [transport.py] [_log()] starting thread (client mode): 0x149a6cb0
2025-11-12T19:37:17.218 [DEBUG] [Thread-21560] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:37:17.233 [DEBUG] [Thread-21560] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:37:17.233 [INFO] [Thread-21560] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:37:17.240 [DEBUG] [Thread-21560] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:37:17.241 [DEBUG] [Thread-21560] [transport.py] [_log()] client lang: <none>
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] server lang: <none>
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] kex follows: False
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] Compression: none
2025-11-12T19:37:17.242 [DEBUG] [Thread-21560] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:37:17.299 [DEBUG] [Thread-21560] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:37:17.300 [DEBUG] [Thread-21560] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:37:17.300 [DEBUG] [Thread-21560] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:37:17.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:37:17.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:37:17.356 [DEBUG] [Thread-21560] [transport.py] [_log()] userauth is OK
2025-11-12T19:37:17.356 [DEBUG] [Thread-21560] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:37:17.356 [DEBUG] [Thread-21560] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:37:17.356 [DEBUG] [Thread-21560] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:37:17.356 [DEBUG] [Thread-21560] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:37:17.378 [INFO] [Thread-21560] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:37:17.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:37:17.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:37:18.225 [DEBUG] [Thread-21560] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:37:18.225 [DEBUG] [Thread-21560] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:37:18.273 [DEBUG] [Thread-21560] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:37:18.273 [DEBUG] [Thread-21560] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:37:18.281 [DEBUG] [Thread-21560] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:37:18.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:37:18.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:37:18.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-11-12T19:37:18.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:37:18.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:37:18.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:37:18.311 [DEBUG] [Thread-21560] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:37:30.228 [DEBUG] [Thread-21562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:37:34.298 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:37:34.299 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:37:45.271 [DEBUG] [Thread-21563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:37:48.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:37:48.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:37:48.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-11-12T19:37:48.681 [DEBUG] [Thread-21564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:37:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 37, 17), 21.98, 22.96, 0.0, 25.2, 21.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:37:48.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:37:17
2025-11-12T19:37:49.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:37:49.256 [DEBUG] [Thread-21565] [transport.py] [_log()] starting thread (client mode): 0x11f10970
2025-11-12T19:37:49.256 [DEBUG] [Thread-21565] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:37:49.276 [DEBUG] [Thread-21565] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:37:49.277 [INFO] [Thread-21565] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] client lang: <none>
2025-11-12T19:37:49.280 [DEBUG] [Thread-21565] [transport.py] [_log()] server lang: <none>
2025-11-12T19:37:49.281 [DEBUG] [Thread-21565] [transport.py] [_log()] kex follows: False
2025-11-12T19:37:49.281 [DEBUG] [Thread-21565] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:37:49.281 [DEBUG] [Thread-21565] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:37:49.281 [DEBUG] [Thread-21565] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:37:49.281 [DEBUG] [Thread-21565] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:37:49.281 [DEBUG] [Thread-21565] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:37:49.281 [DEBUG] [Thread-21565] [transport.py] [_log()] Compression: none
2025-11-12T19:37:49.281 [DEBUG] [Thread-21565] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:37:49.297 [DEBUG] [Thread-21565] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:37:49.297 [DEBUG] [Thread-21565] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:37:49.298 [DEBUG] [Thread-21565] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:37:49.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:37:49.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:37:49.300 [DEBUG] [Thread-21565] [transport.py] [_log()] userauth is OK
2025-11-12T19:37:49.300 [DEBUG] [Thread-21565] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:37:49.300 [DEBUG] [Thread-21565] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:37:49.300 [DEBUG] [Thread-21565] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:37:49.300 [DEBUG] [Thread-21565] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:37:49.330 [INFO] [Thread-21565] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:37:49.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:37:49.962 [DEBUG] [Thread-21565] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:37:49.962 [DEBUG] [Thread-21565] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:37:49.962 [DEBUG] [Thread-21565] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:37:50.003 [DEBUG] [Thread-21565] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:37:50.003 [DEBUG] [Thread-21565] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:37:50.005 [DEBUG] [Thread-21565] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:37:50.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:37:50.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:37:50.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:37:50.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:37:50.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:37:50.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:37:50.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:37:50.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:37:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:37:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.734113 -999.00  +21.40  11.71     28   +2.40 1 2 1 1 1   314    0 17.55 -65.79 ----- 13.2 11.7 254.4 25.0 22.0 -21.1 21.9 -19.9 21.6 -19.7 21.9 -20.8
2025-11-12T19:37:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:37:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:37:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.734113
2025-11-12T19:37:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:37:50.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:37:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:37:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:37:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:37:50.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:37:17', tmtdew=21.98, humidity=22.96, cloud=0.0, wind=25.2, temperature=21.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:37:07.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:37:50.022 [DEBUG] [Thread-21565] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:37:50.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:37:50.107 [DEBUG] [Thread-21568] [transport.py] [_log()] starting thread (client mode): 0x149a61a0
2025-11-12T19:37:50.107 [DEBUG] [Thread-21568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:37:50.125 [DEBUG] [Thread-21568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:37:50.125 [INFO] [Thread-21568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:37:50.132 [DEBUG] [Thread-21568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] client lang: <none>
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] server lang: <none>
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] kex follows: False
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] Compression: none
2025-11-12T19:37:50.133 [DEBUG] [Thread-21568] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:37:50.191 [DEBUG] [Thread-21568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:37:50.191 [DEBUG] [Thread-21568] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:37:50.191 [DEBUG] [Thread-21568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:37:50.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:37:50.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:37:50.247 [DEBUG] [Thread-21568] [transport.py] [_log()] userauth is OK
2025-11-12T19:37:50.247 [DEBUG] [Thread-21568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:37:50.247 [DEBUG] [Thread-21568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:37:50.247 [DEBUG] [Thread-21568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:37:50.247 [DEBUG] [Thread-21568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:37:50.263 [INFO] [Thread-21568] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:37:50.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:37:50.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:37:51.122 [DEBUG] [Thread-21568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:37:51.122 [DEBUG] [Thread-21568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:37:51.170 [DEBUG] [Thread-21568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:37:51.170 [DEBUG] [Thread-21568] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:37:51.178 [DEBUG] [Thread-21568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:37:51.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:37:51.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-11-12T19:37:51.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-11-12T19:37:51.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:37:51.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:37:51.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:37:51.209 [DEBUG] [Thread-21568] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:38:00.299 [DEBUG] [Thread-21570 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:38:15.343 [DEBUG] [Thread-21571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:38:21.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:38:21.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:38:21.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-11-12T19:38:21.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 37, 49), 21.92, 22.97, 0.0, 21.77, 21.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:38:21.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:37:49
2025-11-12T19:38:21.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:38:22.141 [DEBUG] [Thread-21572] [transport.py] [_log()] starting thread (client mode): 0x14915c00
2025-11-12T19:38:22.141 [DEBUG] [Thread-21572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:38:22.159 [DEBUG] [Thread-21572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:38:22.159 [INFO] [Thread-21572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] client lang: <none>
2025-11-12T19:38:22.161 [DEBUG] [Thread-21572] [transport.py] [_log()] server lang: <none>
2025-11-12T19:38:22.162 [DEBUG] [Thread-21572] [transport.py] [_log()] kex follows: False
2025-11-12T19:38:22.162 [DEBUG] [Thread-21572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:38:22.162 [DEBUG] [Thread-21572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:38:22.162 [DEBUG] [Thread-21572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:38:22.162 [DEBUG] [Thread-21572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:38:22.162 [DEBUG] [Thread-21572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:38:22.162 [DEBUG] [Thread-21572] [transport.py] [_log()] Compression: none
2025-11-12T19:38:22.162 [DEBUG] [Thread-21572] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:38:22.169 [DEBUG] [Thread-21572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:38:22.169 [DEBUG] [Thread-21572] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:38:22.170 [DEBUG] [Thread-21572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:38:22.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:38:22.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:38:22.170 [DEBUG] [Thread-21572] [transport.py] [_log()] userauth is OK
2025-11-12T19:38:22.170 [DEBUG] [Thread-21572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:38:22.171 [DEBUG] [Thread-21572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:38:22.171 [DEBUG] [Thread-21572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:38:22.171 [DEBUG] [Thread-21572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:38:22.184 [INFO] [Thread-21572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:38:22.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:38:22.848 [DEBUG] [Thread-21572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:38:22.848 [DEBUG] [Thread-21572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:38:22.848 [DEBUG] [Thread-21572] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:38:22.889 [DEBUG] [Thread-21572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:38:22.889 [DEBUG] [Thread-21572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:38:22.891 [DEBUG] [Thread-21572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:38:22.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:38:22.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:38:22.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:38:22.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:38:22.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:38:22.910 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:38:22.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.734460 -999.00  +21.40  19.25     28   +2.50 1 2 1 1 1   295    0 17.39 -65.72 ----- 21.8 19.2 261.2 27.7 21.9 -21.1 21.9 -19.8 21.6 -19.8 21.9 -20.8
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.734460
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:38:22.910 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:37:49', tmtdew=21.92, humidity=22.97, cloud=0.0, wind=21.77, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:37:37.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:38:22.911 [DEBUG] [Thread-21572] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:38:22.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:38:22.997 [DEBUG] [Thread-21575] [transport.py] [_log()] starting thread (client mode): 0x14915240
2025-11-12T19:38:22.997 [DEBUG] [Thread-21575] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:38:23.012 [DEBUG] [Thread-21575] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:38:23.012 [INFO] [Thread-21575] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] client lang: <none>
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] server lang: <none>
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] kex follows: False
2025-11-12T19:38:23.019 [DEBUG] [Thread-21575] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:38:23.020 [DEBUG] [Thread-21575] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:38:23.020 [DEBUG] [Thread-21575] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:38:23.020 [DEBUG] [Thread-21575] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:38:23.020 [DEBUG] [Thread-21575] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:38:23.020 [DEBUG] [Thread-21575] [transport.py] [_log()] Compression: none
2025-11-12T19:38:23.020 [DEBUG] [Thread-21575] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:38:23.074 [DEBUG] [Thread-21575] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:38:23.074 [DEBUG] [Thread-21575] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:38:23.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:38:23.074 [DEBUG] [Thread-21575] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:38:23.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:38:23.131 [DEBUG] [Thread-21575] [transport.py] [_log()] userauth is OK
2025-11-12T19:38:23.131 [DEBUG] [Thread-21575] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:38:23.131 [DEBUG] [Thread-21575] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:38:23.131 [DEBUG] [Thread-21575] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:38:23.131 [DEBUG] [Thread-21575] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:38:23.147 [INFO] [Thread-21575] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:38:23.147 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:38:23.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:38:24.047 [DEBUG] [Thread-21575] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:38:24.047 [DEBUG] [Thread-21575] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:38:24.095 [DEBUG] [Thread-21575] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:38:24.096 [DEBUG] [Thread-21575] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:38:24.106 [DEBUG] [Thread-21575] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:38:24.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:38:24.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-11-12T19:38:24.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-11-12T19:38:24.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:38:24.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:38:24.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:38:24.142 [DEBUG] [Thread-21575] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:38:30.379 [DEBUG] [Thread-21577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:38:38.607 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:38:38.608 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:38:45.427 [DEBUG] [Thread-21578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:38:48.743 [DEBUG] [Thread-21579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:38:54.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:38:54.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:38:54.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-11-12T19:38:54.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 38, 21), 21.91, 23.01, 0.0, 25.0, 21.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:38:54.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:38:21
2025-11-12T19:38:54.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:38:55.146 [DEBUG] [Thread-21580] [transport.py] [_log()] starting thread (client mode): 0x11f10850
2025-11-12T19:38:55.146 [DEBUG] [Thread-21580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:38:55.166 [DEBUG] [Thread-21580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:38:55.166 [INFO] [Thread-21580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:38:55.169 [DEBUG] [Thread-21580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:38:55.169 [DEBUG] [Thread-21580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] client lang: <none>
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] server lang: <none>
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] kex follows: False
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] Compression: none
2025-11-12T19:38:55.170 [DEBUG] [Thread-21580] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:38:55.187 [DEBUG] [Thread-21580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:38:55.188 [DEBUG] [Thread-21580] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:38:55.188 [DEBUG] [Thread-21580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:38:55.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:38:55.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:38:55.189 [DEBUG] [Thread-21580] [transport.py] [_log()] userauth is OK
2025-11-12T19:38:55.189 [DEBUG] [Thread-21580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:38:55.189 [DEBUG] [Thread-21580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:38:55.189 [DEBUG] [Thread-21580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:38:55.189 [DEBUG] [Thread-21580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:38:55.200 [INFO] [Thread-21580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:38:55.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:38:55.837 [DEBUG] [Thread-21580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:38:55.837 [DEBUG] [Thread-21580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:38:55.837 [DEBUG] [Thread-21580] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:38:55.878 [DEBUG] [Thread-21580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:38:55.878 [DEBUG] [Thread-21580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:38:55.880 [DEBUG] [Thread-21580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:38:55.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:38:55.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:38:55.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:38:55.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:38:55.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:38:55.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:38:55.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:38:55.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:38:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:38:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.734807 -999.00  +21.40  18.37     28   +2.50 1 2 1 1 1   276    0 17.00 -63.54 ----- 13.3 18.4 266.0 24.4 21.9 -21.0 21.9 -19.8 21.6 -19.9 21.8 -20.8
2025-11-12T19:38:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:38:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:38:55.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.734807
2025-11-12T19:38:55.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:38:55.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:38:55.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:38:55.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:38:55.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:38:55.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:38:21', tmtdew=21.91, humidity=23.01, cloud=0.0, wind=25.0, temperature=21.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:38:07.325', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:38:55.898 [DEBUG] [Thread-21580] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:38:55.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:38:55.981 [DEBUG] [Thread-21583] [transport.py] [_log()] starting thread (client mode): 0x149a6530
2025-11-12T19:38:55.981 [DEBUG] [Thread-21583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:38:55.995 [DEBUG] [Thread-21583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:38:55.995 [INFO] [Thread-21583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:38:56.002 [DEBUG] [Thread-21583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] client lang: <none>
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] server lang: <none>
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] kex follows: False
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:38:56.003 [DEBUG] [Thread-21583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:38:56.004 [DEBUG] [Thread-21583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:38:56.004 [DEBUG] [Thread-21583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:38:56.004 [DEBUG] [Thread-21583] [transport.py] [_log()] Compression: none
2025-11-12T19:38:56.004 [DEBUG] [Thread-21583] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:38:56.059 [DEBUG] [Thread-21583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:38:56.059 [DEBUG] [Thread-21583] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:38:56.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:38:56.060 [DEBUG] [Thread-21583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:38:56.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:38:56.115 [DEBUG] [Thread-21583] [transport.py] [_log()] userauth is OK
2025-11-12T19:38:56.115 [DEBUG] [Thread-21583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:38:56.116 [DEBUG] [Thread-21583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:38:56.116 [DEBUG] [Thread-21583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:38:56.116 [DEBUG] [Thread-21583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:38:56.133 [INFO] [Thread-21583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:38:56.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:38:56.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:38:56.983 [DEBUG] [Thread-21583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:38:56.983 [DEBUG] [Thread-21583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:38:57.031 [DEBUG] [Thread-21583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:38:57.031 [DEBUG] [Thread-21583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:38:57.040 [DEBUG] [Thread-21583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:38:57.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:38:57.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:38:57.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:38:57.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:38:57.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:38:57.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:38:57.076 [DEBUG] [Thread-21583] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:39:00.458 [DEBUG] [Thread-21585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:39:15.512 [DEBUG] [Thread-21586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:39:27.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:39:27.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:39:27.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-11-12T19:39:27.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 38, 53), 21.84, 23.02, 0.0, 25.41, 21.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:39:27.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:38:53
2025-11-12T19:39:27.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:39:28.049 [DEBUG] [Thread-21587] [transport.py] [_log()] starting thread (client mode): 0x11f11f60
2025-11-12T19:39:28.049 [DEBUG] [Thread-21587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:39:28.069 [DEBUG] [Thread-21587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:39:28.069 [INFO] [Thread-21587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] client lang: <none>
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] server lang: <none>
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] kex follows: False
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] Compression: none
2025-11-12T19:39:28.072 [DEBUG] [Thread-21587] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:39:28.091 [DEBUG] [Thread-21587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:39:28.092 [DEBUG] [Thread-21587] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:39:28.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:39:28.092 [DEBUG] [Thread-21587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:39:28.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:39:28.095 [DEBUG] [Thread-21587] [transport.py] [_log()] userauth is OK
2025-11-12T19:39:28.095 [DEBUG] [Thread-21587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:39:28.095 [DEBUG] [Thread-21587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:39:28.095 [DEBUG] [Thread-21587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:39:28.095 [DEBUG] [Thread-21587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:39:28.118 [INFO] [Thread-21587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:39:28.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:39:28.731 [DEBUG] [Thread-21587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:39:28.731 [DEBUG] [Thread-21587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:39:28.731 [DEBUG] [Thread-21587] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:39:28.771 [DEBUG] [Thread-21587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:39:28.772 [DEBUG] [Thread-21587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:39:28.775 [DEBUG] [Thread-21587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:39:28.786 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:39:28.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:39:28.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:39:28.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:39:28.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:39:28.797 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:39:28.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:39:28.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:39:28.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:39:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.735155 -999.00  +21.40  13.69     28   +2.50 1 2 1 1 1   258    0 17.13 -62.17 ----- 21.7 13.7 267.6 20.9 21.9 -21.1 21.9 -19.8 21.5 -19.8 21.8 -20.9
2025-11-12T19:39:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:39:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:39:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.735155
2025-11-12T19:39:28.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:39:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:39:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:39:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:39:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:39:28.799 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:38:53', tmtdew=21.84, humidity=23.02, cloud=0.0, wind=25.41, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:38:37.392', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:39:28.799 [DEBUG] [Thread-21587] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:39:28.885 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:39:28.897 [DEBUG] [Thread-21590] [transport.py] [_log()] starting thread (client mode): 0x173bdb10
2025-11-12T19:39:28.897 [DEBUG] [Thread-21590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:39:28.911 [DEBUG] [Thread-21590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:39:28.912 [INFO] [Thread-21590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:39:28.923 [DEBUG] [Thread-21590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:39:28.923 [DEBUG] [Thread-21590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:39:28.923 [DEBUG] [Thread-21590] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:39:28.923 [DEBUG] [Thread-21590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] client lang: <none>
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] server lang: <none>
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] kex follows: False
2025-11-12T19:39:28.924 [DEBUG] [Thread-21590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:39:28.925 [DEBUG] [Thread-21590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:39:28.925 [DEBUG] [Thread-21590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:39:28.925 [DEBUG] [Thread-21590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:39:28.925 [DEBUG] [Thread-21590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:39:28.925 [DEBUG] [Thread-21590] [transport.py] [_log()] Compression: none
2025-11-12T19:39:28.925 [DEBUG] [Thread-21590] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:39:28.983 [DEBUG] [Thread-21590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:39:28.984 [DEBUG] [Thread-21590] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:39:28.984 [DEBUG] [Thread-21590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:39:28.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:39:28.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:39:29.046 [DEBUG] [Thread-21590] [transport.py] [_log()] userauth is OK
2025-11-12T19:39:29.046 [DEBUG] [Thread-21590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:39:29.046 [DEBUG] [Thread-21590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:39:29.046 [DEBUG] [Thread-21590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:39:29.046 [DEBUG] [Thread-21590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:39:29.069 [INFO] [Thread-21590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:39:29.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:39:29.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:39:29.891 [DEBUG] [Thread-21590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:39:29.891 [DEBUG] [Thread-21590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:39:29.939 [DEBUG] [Thread-21590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:39:29.939 [DEBUG] [Thread-21590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:39:29.948 [DEBUG] [Thread-21590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:39:29.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:39:29.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-11-12T19:39:29.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-11-12T19:39:29.974 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:39:29.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:39:29.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:39:29.983 [DEBUG] [Thread-21590] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:39:30.544 [DEBUG] [Thread-21592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:39:43.649 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:39:43.651 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:39:45.605 [DEBUG] [Thread-21593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:39:48.820 [DEBUG] [Thread-21594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:39:59.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:39:59.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:39:59.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-11-12T19:40:00.638 [DEBUG] [Thread-21595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:40:00.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 39, 57), 21.84, 23.02, 0.0, 21.14, 21.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:40:00.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:39:57
2025-11-12T19:40:00.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:40:00.954 [DEBUG] [Thread-21596] [transport.py] [_log()] starting thread (client mode): 0x149475b0
2025-11-12T19:40:00.955 [DEBUG] [Thread-21596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:40:00.975 [DEBUG] [Thread-21596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:40:00.975 [INFO] [Thread-21596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] client lang: <none>
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] server lang: <none>
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] kex follows: False
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] Compression: none
2025-11-12T19:40:00.978 [DEBUG] [Thread-21596] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:40:00.994 [DEBUG] [Thread-21596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:40:00.994 [DEBUG] [Thread-21596] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:40:00.994 [DEBUG] [Thread-21596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:40:00.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:40:00.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:40:00.995 [DEBUG] [Thread-21596] [transport.py] [_log()] userauth is OK
2025-11-12T19:40:00.995 [DEBUG] [Thread-21596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:40:00.995 [DEBUG] [Thread-21596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:40:00.995 [DEBUG] [Thread-21596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:40:00.995 [DEBUG] [Thread-21596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:40:01.004 [INFO] [Thread-21596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:40:01.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:40:01.598 [DEBUG] [Thread-21596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:40:01.599 [DEBUG] [Thread-21596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:40:01.599 [DEBUG] [Thread-21596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:40:01.640 [DEBUG] [Thread-21596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:40:01.640 [DEBUG] [Thread-21596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:40:01.642 [DEBUG] [Thread-21596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:40:01.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:40:01.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:40:01.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:40:01.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:40:01.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:40:01.659 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:40:01.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.735502 -999.00  +21.30  13.62     28   +2.50 1 2 1 1 1   241    0 17.16 -58.04 ----- 11.5 13.6 254.8 23.5 21.9 -21.0 21.9 -19.9 21.5 -19.8 21.9 -20.8
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.735502
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:40:01.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:39:57', tmtdew=21.84, humidity=23.02, cloud=0.0, wind=21.14, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:39:07.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:40:01.660 [DEBUG] [Thread-21596] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:40:01.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:40:01.745 [DEBUG] [Thread-21599] [transport.py] [_log()] starting thread (client mode): 0x14907ee0
2025-11-12T19:40:01.746 [DEBUG] [Thread-21599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:40:01.761 [DEBUG] [Thread-21599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:40:01.761 [INFO] [Thread-21599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:40:01.768 [DEBUG] [Thread-21599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] client lang: <none>
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] server lang: <none>
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] kex follows: False
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] Compression: none
2025-11-12T19:40:01.769 [DEBUG] [Thread-21599] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:40:01.825 [DEBUG] [Thread-21599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:40:01.825 [DEBUG] [Thread-21599] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:40:01.825 [DEBUG] [Thread-21599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:40:01.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:40:01.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:40:01.886 [DEBUG] [Thread-21599] [transport.py] [_log()] userauth is OK
2025-11-12T19:40:01.887 [DEBUG] [Thread-21599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:40:01.887 [DEBUG] [Thread-21599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:40:01.887 [DEBUG] [Thread-21599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:40:01.887 [DEBUG] [Thread-21599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:40:01.900 [INFO] [Thread-21599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:40:01.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:40:01.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:40:02.764 [DEBUG] [Thread-21599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:40:02.764 [DEBUG] [Thread-21599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:40:02.814 [DEBUG] [Thread-21599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:40:02.814 [DEBUG] [Thread-21599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:40:02.823 [DEBUG] [Thread-21599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:40:02.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:40:02.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-11-12T19:40: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') -> 00000000
2025-11-12T19:40:02.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:40:02.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:40:02.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:40:02.858 [DEBUG] [Thread-21599] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:40:15.666 [DEBUG] [Thread-21601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:40:30.715 [DEBUG] [Thread-21602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:40:32.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:40:32.877 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:40:32.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-11-12T19:40:33.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 40, 29), 21.82, 23.06, 0.0, 23.63, 21.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:40:33.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:40:29
2025-11-12T19:40:33.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:40:33.778 [DEBUG] [Thread-21603] [transport.py] [_log()] starting thread (client mode): 0x149a5000
2025-11-12T19:40:33.778 [DEBUG] [Thread-21603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:40:33.799 [DEBUG] [Thread-21603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:40:33.799 [INFO] [Thread-21603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:40:33.802 [DEBUG] [Thread-21603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:40:33.802 [DEBUG] [Thread-21603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:40:33.802 [DEBUG] [Thread-21603] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:40:33.802 [DEBUG] [Thread-21603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:40:33.802 [DEBUG] [Thread-21603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:40:33.802 [DEBUG] [Thread-21603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] client lang: <none>
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] server lang: <none>
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] kex follows: False
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:40:33.803 [DEBUG] [Thread-21603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:40:33.804 [DEBUG] [Thread-21603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:40:33.804 [DEBUG] [Thread-21603] [transport.py] [_log()] Compression: none
2025-11-12T19:40:33.804 [DEBUG] [Thread-21603] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:40:33.822 [DEBUG] [Thread-21603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:40:33.823 [DEBUG] [Thread-21603] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:40:33.823 [DEBUG] [Thread-21603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:40:33.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:40:33.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:40:33.825 [DEBUG] [Thread-21603] [transport.py] [_log()] userauth is OK
2025-11-12T19:40:33.825 [DEBUG] [Thread-21603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:40:33.826 [DEBUG] [Thread-21603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:40:33.826 [DEBUG] [Thread-21603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:40:33.826 [DEBUG] [Thread-21603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:40:33.857 [INFO] [Thread-21603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:40:33.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:40:34.516 [DEBUG] [Thread-21603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:40:34.516 [DEBUG] [Thread-21603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:40:34.517 [DEBUG] [Thread-21603] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:40:34.558 [DEBUG] [Thread-21603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:40:34.558 [DEBUG] [Thread-21603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:40:34.561 [DEBUG] [Thread-21603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:40:34.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:40:34.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:40:34.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:40:34.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:40:34.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:40:34.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:40:34.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:40:34.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:40:34.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:40:34.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.735849 -999.00  +21.30  17.11     28   +2.50 1 2 1 1 1   225    0 17.79 -52.93 ----- 18.9 17.1 249.2 19.9 21.9 -21.0 -999.0 -999.0 21.6 -19.9 21.8 -20.9
2025-11-12T19:40:34.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:40:34.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:40:34.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.735849
2025-11-12T19:40:34.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:40:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:40:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:40:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:40:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:40:34.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:40:29', tmtdew=21.82, humidity=23.06, cloud=0.0, wind=23.63, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:39:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:40:34.587 [DEBUG] [Thread-21603] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:40:34.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:40:34.683 [DEBUG] [Thread-21606] [transport.py] [_log()] starting thread (client mode): 0x149a5c90
2025-11-12T19:40:34.683 [DEBUG] [Thread-21606] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:40:34.697 [DEBUG] [Thread-21606] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:40:34.697 [INFO] [Thread-21606] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:40:34.704 [DEBUG] [Thread-21606] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] client lang: <none>
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] server lang: <none>
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] kex follows: False
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:40:34.705 [DEBUG] [Thread-21606] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:40:34.706 [DEBUG] [Thread-21606] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:40:34.706 [DEBUG] [Thread-21606] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:40:34.706 [DEBUG] [Thread-21606] [transport.py] [_log()] Compression: none
2025-11-12T19:40:34.706 [DEBUG] [Thread-21606] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:40:34.768 [DEBUG] [Thread-21606] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:40:34.768 [DEBUG] [Thread-21606] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:40:34.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:40:34.770 [DEBUG] [Thread-21606] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:40:34.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:40:34.824 [DEBUG] [Thread-21606] [transport.py] [_log()] userauth is OK
2025-11-12T19:40:34.824 [DEBUG] [Thread-21606] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:40:34.825 [DEBUG] [Thread-21606] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:40:34.825 [DEBUG] [Thread-21606] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:40:34.825 [DEBUG] [Thread-21606] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:40:34.844 [INFO] [Thread-21606] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:40:34.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:40:34.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:40:35.737 [DEBUG] [Thread-21606] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:40:35.737 [DEBUG] [Thread-21606] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:40:35.785 [DEBUG] [Thread-21606] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:40:35.786 [DEBUG] [Thread-21606] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:40:35.794 [DEBUG] [Thread-21606] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:40:35.803 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:40:35.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:40:35.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:40:35.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:40:35.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:40:35.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:40:35.829 [DEBUG] [Thread-21606] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:40:45.744 [DEBUG] [Thread-21608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:40:48.702 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:40:48.703 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:40:48.887 [DEBUG] [Thread-21609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:41:00.802 [DEBUG] [Thread-21610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:41:05.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:41:05.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:41:05.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-11-12T19:41:06.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 41, 1), 21.79, 23.61, 0.0, 20.5, 21.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:41:06.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:41:01
2025-11-12T19:41:06.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:41:06.756 [DEBUG] [Thread-21611] [transport.py] [_log()] starting thread (client mode): 0x149a5ed0
2025-11-12T19:41:06.757 [DEBUG] [Thread-21611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:41:06.777 [DEBUG] [Thread-21611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:41:06.777 [INFO] [Thread-21611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] client lang: <none>
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] server lang: <none>
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] kex follows: False
2025-11-12T19:41:06.780 [DEBUG] [Thread-21611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:41:06.781 [DEBUG] [Thread-21611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:41:06.781 [DEBUG] [Thread-21611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:41:06.781 [DEBUG] [Thread-21611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:41:06.781 [DEBUG] [Thread-21611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:41:06.781 [DEBUG] [Thread-21611] [transport.py] [_log()] Compression: none
2025-11-12T19:41:06.781 [DEBUG] [Thread-21611] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:41:06.797 [DEBUG] [Thread-21611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:41:06.798 [DEBUG] [Thread-21611] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:41:06.798 [DEBUG] [Thread-21611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:41:06.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:41:06.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:41:06.800 [DEBUG] [Thread-21611] [transport.py] [_log()] userauth is OK
2025-11-12T19:41:06.800 [DEBUG] [Thread-21611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:41:06.800 [DEBUG] [Thread-21611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:41:06.800 [DEBUG] [Thread-21611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:41:06.800 [DEBUG] [Thread-21611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:41:06.819 [INFO] [Thread-21611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:41:06.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:41:07.429 [DEBUG] [Thread-21611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:41:07.429 [DEBUG] [Thread-21611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:41:07.430 [DEBUG] [Thread-21611] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:41:07.470 [DEBUG] [Thread-21611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:41:07.470 [DEBUG] [Thread-21611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:41:07.473 [DEBUG] [Thread-21611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:41:07.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:41:07.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:41:07.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:41:07.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:41:07.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:41:07.497 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:41:07.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:41:07.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:41:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:41:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.736543 -999.00  +21.30  21.05     29   +2.60 1 2 1 1 1   194    0 17.59 -55.87 ----- 25.5 21.1 253.8 24.4 21.9 -21.1 21.9 -19.8 21.5 -19.9 21.8 -20.9
2025-11-12T19:41:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:41:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:41:07.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.736543
2025-11-12T19:41:07.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:41:07.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:41:07.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:41:07.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:41:07.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:41:07.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:41:01', tmtdew=21.79, humidity=23.61, cloud=0.0, wind=20.5, temperature=21.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:40:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:41:07.500 [DEBUG] [Thread-21611] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:41:07.583 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:41:07.595 [DEBUG] [Thread-21614] [transport.py] [_log()] starting thread (client mode): 0x14944fd0
2025-11-12T19:41:07.595 [DEBUG] [Thread-21614] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:41:07.609 [DEBUG] [Thread-21614] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:41:07.609 [INFO] [Thread-21614] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:41:07.617 [DEBUG] [Thread-21614] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:41:07.617 [DEBUG] [Thread-21614] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:41:07.617 [DEBUG] [Thread-21614] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:41:07.617 [DEBUG] [Thread-21614] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:41:07.617 [DEBUG] [Thread-21614] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:41:07.617 [DEBUG] [Thread-21614] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:41:07.617 [DEBUG] [Thread-21614] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] client lang: <none>
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] server lang: <none>
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] kex follows: False
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:41:07.618 [DEBUG] [Thread-21614] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:41:07.619 [DEBUG] [Thread-21614] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:41:07.619 [DEBUG] [Thread-21614] [transport.py] [_log()] Compression: none
2025-11-12T19:41:07.619 [DEBUG] [Thread-21614] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:41:07.676 [DEBUG] [Thread-21614] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:41:07.677 [DEBUG] [Thread-21614] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:41:07.677 [DEBUG] [Thread-21614] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:41:07.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:41:07.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:41:07.735 [DEBUG] [Thread-21614] [transport.py] [_log()] userauth is OK
2025-11-12T19:41:07.735 [DEBUG] [Thread-21614] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:41:07.735 [DEBUG] [Thread-21614] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:41:07.735 [DEBUG] [Thread-21614] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:41:07.735 [DEBUG] [Thread-21614] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:41:07.754 [INFO] [Thread-21614] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:41:07.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:41:07.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:41:08.555 [DEBUG] [Thread-21614] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:41:08.555 [DEBUG] [Thread-21614] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:41:08.606 [DEBUG] [Thread-21614] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:41:08.606 [DEBUG] [Thread-21614] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:41:08.619 [DEBUG] [Thread-21614] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:41:08.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:41:08.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-11-12T19:41: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-11-12T19:41:08.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:41:08.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:41:08.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:41:08.656 [DEBUG] [Thread-21614] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:41:15.837 [DEBUG] [Thread-21616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:41:30.895 [DEBUG] [Thread-21617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:41:38.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:41:38.679 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:41:38.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-11-12T19:41:39.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 41, 33), 21.78, 23.62, 0.0, 21.53, 21.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:41:39.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:41:33
2025-11-12T19:41:39.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:41:39.598 [DEBUG] [Thread-21618] [transport.py] [_log()] starting thread (client mode): 0x149a4ca0
2025-11-12T19:41:39.598 [DEBUG] [Thread-21618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:41:39.620 [DEBUG] [Thread-21618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:41:39.620 [INFO] [Thread-21618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:41:39.623 [DEBUG] [Thread-21618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:41:39.623 [DEBUG] [Thread-21618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] client lang: <none>
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] server lang: <none>
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] kex follows: False
2025-11-12T19:41:39.624 [DEBUG] [Thread-21618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:41:39.625 [DEBUG] [Thread-21618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:41:39.625 [DEBUG] [Thread-21618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:41:39.625 [DEBUG] [Thread-21618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:41:39.625 [DEBUG] [Thread-21618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:41:39.625 [DEBUG] [Thread-21618] [transport.py] [_log()] Compression: none
2025-11-12T19:41:39.625 [DEBUG] [Thread-21618] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:41:39.645 [DEBUG] [Thread-21618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:41:39.645 [DEBUG] [Thread-21618] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:41:39.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:41:39.646 [DEBUG] [Thread-21618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:41:39.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:41:39.648 [DEBUG] [Thread-21618] [transport.py] [_log()] userauth is OK
2025-11-12T19:41:39.648 [DEBUG] [Thread-21618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:41:39.648 [DEBUG] [Thread-21618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:41:39.648 [DEBUG] [Thread-21618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:41:39.648 [DEBUG] [Thread-21618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:41:39.665 [INFO] [Thread-21618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:41:39.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:41:40.326 [DEBUG] [Thread-21618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:41:40.326 [DEBUG] [Thread-21618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:41:40.327 [DEBUG] [Thread-21618] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:41:40.367 [DEBUG] [Thread-21618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:41:40.368 [DEBUG] [Thread-21618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:41:40.370 [DEBUG] [Thread-21618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:41:40.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:41:40.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:41:40.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:41:40.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:41:40.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:41:40.389 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:41:40.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:41:40.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:41:40.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.736891 -999.00  +21.30  16.65     29   +2.60 1 2 1 1 1   180    0 17.61 -58.91 ----- 12.3 16.6 268.0 27.9 21.9 -21.1 21.9 -19.7 21.5 -20.0 21.7 -20.9
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.736891
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:41:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:41:33', tmtdew=21.78, humidity=23.62, cloud=0.0, wind=21.53, temperature=21.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:41:07.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:41:40.391 [DEBUG] [Thread-21618] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:41:40.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:41:40.478 [DEBUG] [Thread-21621] [transport.py] [_log()] starting thread (client mode): 0x14907e20
2025-11-12T19:41:40.478 [DEBUG] [Thread-21621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:41:40.494 [DEBUG] [Thread-21621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:41:40.494 [INFO] [Thread-21621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:41:40.501 [DEBUG] [Thread-21621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:41:40.502 [DEBUG] [Thread-21621] [transport.py] [_log()] client lang: <none>
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] server lang: <none>
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] kex follows: False
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] Compression: none
2025-11-12T19:41:40.503 [DEBUG] [Thread-21621] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:41:40.559 [DEBUG] [Thread-21621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:41:40.560 [DEBUG] [Thread-21621] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:41:40.560 [DEBUG] [Thread-21621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:41:40.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:41:40.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:41:40.622 [DEBUG] [Thread-21621] [transport.py] [_log()] userauth is OK
2025-11-12T19:41:40.622 [DEBUG] [Thread-21621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:41:40.622 [DEBUG] [Thread-21621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:41:40.622 [DEBUG] [Thread-21621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:41:40.622 [DEBUG] [Thread-21621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:41:40.641 [INFO] [Thread-21621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:41:40.642 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:41:40.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:41:41.529 [DEBUG] [Thread-21621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:41:41.529 [DEBUG] [Thread-21621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:41:41.576 [DEBUG] [Thread-21621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:41:41.577 [DEBUG] [Thread-21621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:41:41.586 [DEBUG] [Thread-21621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:41:41.595 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:41:41.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-11-12T19:41:41.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-11-12T19:41:41.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:41:41.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:41:41.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:41:41.623 [DEBUG] [Thread-21621] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:41:45.931 [DEBUG] [Thread-21623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:41:48.954 [DEBUG] [Thread-21624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:41:54.820 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:41:54.821 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:42:00.986 [DEBUG] [Thread-21625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:42:11.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:42:11.642 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:42:11.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-11-12T19:42:12.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 42, 5), 21.77, 23.66, 0.0, 20.27, 21.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:42:12.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:42:05
2025-11-12T19:42:12.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:42:12.554 [DEBUG] [Thread-21626] [transport.py] [_log()] starting thread (client mode): 0x14904b80
2025-11-12T19:42:12.554 [DEBUG] [Thread-21626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:42:12.574 [DEBUG] [Thread-21626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:42:12.574 [INFO] [Thread-21626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:42:12.577 [DEBUG] [Thread-21626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] client lang: <none>
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] server lang: <none>
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] kex follows: False
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:42:12.578 [DEBUG] [Thread-21626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:42:12.579 [DEBUG] [Thread-21626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:42:12.579 [DEBUG] [Thread-21626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:42:12.579 [DEBUG] [Thread-21626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:42:12.579 [DEBUG] [Thread-21626] [transport.py] [_log()] Compression: none
2025-11-12T19:42:12.579 [DEBUG] [Thread-21626] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:42:12.600 [DEBUG] [Thread-21626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:42:12.600 [DEBUG] [Thread-21626] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:42:12.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:42:12.601 [DEBUG] [Thread-21626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:42:12.602 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:42:12.603 [DEBUG] [Thread-21626] [transport.py] [_log()] userauth is OK
2025-11-12T19:42:12.604 [DEBUG] [Thread-21626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:42:12.604 [DEBUG] [Thread-21626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:42:12.604 [DEBUG] [Thread-21626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:42:12.604 [DEBUG] [Thread-21626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:42:12.628 [INFO] [Thread-21626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:42:12.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:42:13.277 [DEBUG] [Thread-21626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:42:13.277 [DEBUG] [Thread-21626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:42:13.278 [DEBUG] [Thread-21626] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:42:13.319 [DEBUG] [Thread-21626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:42:13.319 [DEBUG] [Thread-21626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:42:13.322 [DEBUG] [Thread-21626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:42:13.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:42:13.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:42:13.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:42:13.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:42:13.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:42:13.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:42:13.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:42:13.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:42:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:42:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.737238 -999.00  +21.30  21.10     29   +2.60 1 2 1 1 1   167    0 17.60 -51.62 ----- 20.0 21.1 258.6 25.1 21.8 -21.2 21.8 -19.9 21.5 -20.1 21.7 -20.8
2025-11-12T19:42:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:42:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:42:13.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.737238
2025-11-12T19:42:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:42:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:42:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:42:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:42:13.344 [DEBUG] [Thread-21626] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:42:13.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:42:13.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:42:05', tmtdew=21.77, humidity=23.66, cloud=0.0, wind=20.27, temperature=21.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:41:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:42:13.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:42:13.451 [DEBUG] [Thread-21629] [transport.py] [_log()] starting thread (client mode): 0x173be6e0
2025-11-12T19:42:13.451 [DEBUG] [Thread-21629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:42:13.465 [DEBUG] [Thread-21629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:42:13.466 [INFO] [Thread-21629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] client lang: <none>
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] server lang: <none>
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] kex follows: False
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:42:13.473 [DEBUG] [Thread-21629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:42:13.474 [DEBUG] [Thread-21629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:42:13.474 [DEBUG] [Thread-21629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:42:13.474 [DEBUG] [Thread-21629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:42:13.474 [DEBUG] [Thread-21629] [transport.py] [_log()] Compression: none
2025-11-12T19:42:13.474 [DEBUG] [Thread-21629] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:42:13.530 [DEBUG] [Thread-21629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:42:13.531 [DEBUG] [Thread-21629] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:42:13.531 [DEBUG] [Thread-21629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:42:13.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:42:13.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:42:13.587 [DEBUG] [Thread-21629] [transport.py] [_log()] userauth is OK
2025-11-12T19:42:13.587 [DEBUG] [Thread-21629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:42:13.587 [DEBUG] [Thread-21629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:42:13.587 [DEBUG] [Thread-21629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:42:13.587 [DEBUG] [Thread-21629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:42:13.606 [INFO] [Thread-21629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:42:13.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:42:13.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:42:14.426 [DEBUG] [Thread-21629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:42:14.426 [DEBUG] [Thread-21629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:42:14.474 [DEBUG] [Thread-21629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:42:14.474 [DEBUG] [Thread-21629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:42:14.483 [DEBUG] [Thread-21629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:42:14.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:42:14.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-11-12T19:42:14.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-11-12T19:42:14.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:42:14.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:42:14.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:42:14.517 [DEBUG] [Thread-21629] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:42:16.016 [DEBUG] [Thread-21631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:42:31.064 [DEBUG] [Thread-21632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:42:44.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:42:44.540 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:42:44.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-11-12T19:42:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 42, 37), 21.67, 23.64, 0.0, 20.49, 21.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:42:45.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:42:37
2025-11-12T19:42:45.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:42:45.435 [DEBUG] [Thread-21633] [transport.py] [_log()] starting thread (client mode): 0x14915780
2025-11-12T19:42:45.436 [DEBUG] [Thread-21633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:42:45.455 [DEBUG] [Thread-21633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:42:45.456 [INFO] [Thread-21633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] client lang: <none>
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] server lang: <none>
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] kex follows: False
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] Compression: none
2025-11-12T19:42:45.459 [DEBUG] [Thread-21633] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:42:45.478 [DEBUG] [Thread-21633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:42:45.478 [DEBUG] [Thread-21633] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:42:45.479 [DEBUG] [Thread-21633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:42:45.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:42:45.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:42:45.481 [DEBUG] [Thread-21633] [transport.py] [_log()] userauth is OK
2025-11-12T19:42:45.481 [DEBUG] [Thread-21633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:42:45.481 [DEBUG] [Thread-21633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:42:45.481 [DEBUG] [Thread-21633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:42:45.481 [DEBUG] [Thread-21633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:42:45.502 [INFO] [Thread-21633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:42:45.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:42:46.096 [DEBUG] [Thread-21635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:42:46.108 [DEBUG] [Thread-21633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:42:46.109 [DEBUG] [Thread-21633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:42:46.109 [DEBUG] [Thread-21633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:42:46.149 [DEBUG] [Thread-21633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:42:46.149 [DEBUG] [Thread-21633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:42:46.152 [DEBUG] [Thread-21633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:42:46.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:42:46.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:42:46.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:42:46.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:42:46.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:42:46.173 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:42:46.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:42:46.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:42:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:42:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.737585 -999.00  +21.20  16.60     29   +2.60 1 2 1 1 1   154    0 17.63 -51.47 ----- 15.3 16.6 268.0 29.2 21.8 -21.1 21.8 -19.9 21.5 -19.9 21.8 -21.0
2025-11-12T19:42:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:42:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:42:46.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.737585
2025-11-12T19:42:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:42:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:42:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:42:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:42:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:42:46.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:42:37', tmtdew=21.67, humidity=23.64, cloud=0.0, wind=20.49, temperature=21.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:42:07.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:42:46.176 [DEBUG] [Thread-21633] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:42:46.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:42:46.270 [DEBUG] [Thread-21637] [transport.py] [_log()] starting thread (client mode): 0x149a57b0
2025-11-12T19:42:46.270 [DEBUG] [Thread-21637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:42:46.285 [DEBUG] [Thread-21637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:42:46.285 [INFO] [Thread-21637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:42:46.292 [DEBUG] [Thread-21637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:42:46.292 [DEBUG] [Thread-21637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] client lang: <none>
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] server lang: <none>
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] kex follows: False
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] Compression: none
2025-11-12T19:42:46.293 [DEBUG] [Thread-21637] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:42:46.350 [DEBUG] [Thread-21637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:42:46.351 [DEBUG] [Thread-21637] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:42:46.351 [DEBUG] [Thread-21637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:42:46.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:42:46.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:42:46.409 [DEBUG] [Thread-21637] [transport.py] [_log()] userauth is OK
2025-11-12T19:42:46.409 [DEBUG] [Thread-21637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:42:46.409 [DEBUG] [Thread-21637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:42:46.409 [DEBUG] [Thread-21637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:42:46.409 [DEBUG] [Thread-21637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:42:46.428 [INFO] [Thread-21637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:42:46.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:42:46.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:42:47.288 [DEBUG] [Thread-21637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:42:47.289 [DEBUG] [Thread-21637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:42:47.336 [DEBUG] [Thread-21637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:42:47.337 [DEBUG] [Thread-21637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:42:47.345 [DEBUG] [Thread-21637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:42:47.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:42:47.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-11-12T19:42:47.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-11-12T19:42:47.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:42:47.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:42:47.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:42:47.382 [DEBUG] [Thread-21637] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:42:49.013 [DEBUG] [Thread-21639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:42:59.756 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:42:59.758 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:43:01.129 [DEBUG] [Thread-21640 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:43:16.167 [DEBUG] [Thread-21641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:43:17.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:43:17.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:43:17.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-11-12T19:43:18.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 43, 9), 21.65, 23.66, 0.0, 19.5, 21.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:43:18.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:43:09
2025-11-12T19:43:18.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:43:18.361 [DEBUG] [Thread-21642] [transport.py] [_log()] starting thread (client mode): 0x149a4ca0
2025-11-12T19:43:18.361 [DEBUG] [Thread-21642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:43:18.377 [DEBUG] [Thread-21642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:43:18.377 [INFO] [Thread-21642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:43:18.380 [DEBUG] [Thread-21642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:43:18.380 [DEBUG] [Thread-21642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:43:18.380 [DEBUG] [Thread-21642] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:43:18.380 [DEBUG] [Thread-21642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:43:18.380 [DEBUG] [Thread-21642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] client lang: <none>
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] server lang: <none>
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] kex follows: False
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] Compression: none
2025-11-12T19:43:18.381 [DEBUG] [Thread-21642] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:43:18.392 [DEBUG] [Thread-21642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:43:18.392 [DEBUG] [Thread-21642] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:43:18.392 [DEBUG] [Thread-21642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:43:18.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:43:18.392 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:43:18.393 [DEBUG] [Thread-21642] [transport.py] [_log()] userauth is OK
2025-11-12T19:43:18.393 [DEBUG] [Thread-21642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:43:18.393 [DEBUG] [Thread-21642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:43:18.393 [DEBUG] [Thread-21642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:43:18.393 [DEBUG] [Thread-21642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:43:18.407 [INFO] [Thread-21642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:43:18.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:43:19.049 [DEBUG] [Thread-21642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:43:19.050 [DEBUG] [Thread-21642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:43:19.050 [DEBUG] [Thread-21642] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:43:19.090 [DEBUG] [Thread-21642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:43:19.090 [DEBUG] [Thread-21642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:43:19.092 [DEBUG] [Thread-21642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:43:19.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:43:19.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:43:19.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:43:19.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:43:19.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:43:19.109 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:43:19.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:43:19.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.737932 -999.00  +21.20   9.71     29   +2.60 1 2 1 1 1   143    0 17.17 -53.19 ----- 20.3 9.7 251.0 22.2 21.8 -21.1 21.8 -19.9 21.4 -19.9 21.7 -20.9
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.737932
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:43:19.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:43:09', tmtdew=21.65, humidity=23.66, cloud=0.0, wind=19.5, temperature=21.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:42:37.325', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:43:19.111 [DEBUG] [Thread-21642] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:43:19.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:43:19.197 [DEBUG] [Thread-21645] [transport.py] [_log()] starting thread (client mode): 0x11f01330
2025-11-12T19:43:19.197 [DEBUG] [Thread-21645] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:43:19.212 [DEBUG] [Thread-21645] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:43:19.212 [INFO] [Thread-21645] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] client lang: <none>
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] server lang: <none>
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] kex follows: False
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] Compression: none
2025-11-12T19:43:19.220 [DEBUG] [Thread-21645] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:43:19.278 [DEBUG] [Thread-21645] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:43:19.278 [DEBUG] [Thread-21645] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:43:19.278 [DEBUG] [Thread-21645] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:43:19.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:43:19.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:43:19.335 [DEBUG] [Thread-21645] [transport.py] [_log()] userauth is OK
2025-11-12T19:43:19.335 [DEBUG] [Thread-21645] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:43:19.335 [DEBUG] [Thread-21645] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:43:19.335 [DEBUG] [Thread-21645] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:43:19.335 [DEBUG] [Thread-21645] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:43:19.349 [INFO] [Thread-21645] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:43:19.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:43:19.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:43:20.216 [DEBUG] [Thread-21645] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:43:20.216 [DEBUG] [Thread-21645] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:43:20.265 [DEBUG] [Thread-21645] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:43:20.265 [DEBUG] [Thread-21645] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:43:20.274 [DEBUG] [Thread-21645] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:43:20.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:43:20.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-11-12T19:43:20.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-11-12T19:43:20.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:43:20.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:43:20.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:43:20.311 [DEBUG] [Thread-21645] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:43:31.202 [DEBUG] [Thread-21647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:43:46.255 [DEBUG] [Thread-21648 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:43:49.080 [DEBUG] [Thread-21649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:43:50.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:43:50.333 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:43:50.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-11-12T19:43:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 43, 41), 21.47, 23.79, 0.0, 25.51, 21.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:43:50.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:43:41
2025-11-12T19:43:51.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:43:51.253 [DEBUG] [Thread-21650] [transport.py] [_log()] starting thread (client mode): 0x11f11810
2025-11-12T19:43:51.253 [DEBUG] [Thread-21650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:43:51.273 [DEBUG] [Thread-21650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:43:51.273 [INFO] [Thread-21650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] client lang: <none>
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] server lang: <none>
2025-11-12T19:43:51.277 [DEBUG] [Thread-21650] [transport.py] [_log()] kex follows: False
2025-11-12T19:43:51.278 [DEBUG] [Thread-21650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:43:51.278 [DEBUG] [Thread-21650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:43:51.278 [DEBUG] [Thread-21650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:43:51.278 [DEBUG] [Thread-21650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:43:51.278 [DEBUG] [Thread-21650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:43:51.278 [DEBUG] [Thread-21650] [transport.py] [_log()] Compression: none
2025-11-12T19:43:51.278 [DEBUG] [Thread-21650] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:43:51.296 [DEBUG] [Thread-21650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:43:51.297 [DEBUG] [Thread-21650] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:43:51.298 [DEBUG] [Thread-21650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:43:51.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:43:51.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:43:51.301 [DEBUG] [Thread-21650] [transport.py] [_log()] userauth is OK
2025-11-12T19:43:51.301 [DEBUG] [Thread-21650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:43:51.301 [DEBUG] [Thread-21650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:43:51.301 [DEBUG] [Thread-21650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:43:51.301 [DEBUG] [Thread-21650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:43:51.336 [INFO] [Thread-21650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:43:51.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:43:51.973 [DEBUG] [Thread-21650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:43:51.973 [DEBUG] [Thread-21650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:43:51.973 [DEBUG] [Thread-21650] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:43:52.013 [DEBUG] [Thread-21650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:43:52.014 [DEBUG] [Thread-21650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:43:52.017 [DEBUG] [Thread-21650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:43:52.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:43:52.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:43:52.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:43:52.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:43:52.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:43:52.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:43:52.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:43:52.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:43:52.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:43:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.738279 -999.00  +21.20  13.33     29   +2.60 1 2 1 1 1   132    0 17.62 -52.07 ----- 16.6 13.3 265.0 22.8 21.8 -21.1 21.8 -20.0 21.4 -19.9 21.7 -21.0
2025-11-12T19:43:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:43:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:43:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.738279
2025-11-12T19:43:52.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:43:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:43:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:43:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:43:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:43:52.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:43:41', tmtdew=21.47, humidity=23.79, cloud=0.0, wind=25.51, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:43:07.306', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:43:52.043 [DEBUG] [Thread-21650] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:43:52.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:43:52.142 [DEBUG] [Thread-21653] [transport.py] [_log()] starting thread (client mode): 0x11f032e0
2025-11-12T19:43:52.142 [DEBUG] [Thread-21653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:43:52.157 [DEBUG] [Thread-21653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:43:52.157 [INFO] [Thread-21653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:43:52.165 [DEBUG] [Thread-21653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:43:52.165 [DEBUG] [Thread-21653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:43:52.165 [DEBUG] [Thread-21653] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:43:52.165 [DEBUG] [Thread-21653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:43:52.165 [DEBUG] [Thread-21653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:43:52.165 [DEBUG] [Thread-21653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:43:52.166 [DEBUG] [Thread-21653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:43:52.166 [DEBUG] [Thread-21653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:43:52.166 [DEBUG] [Thread-21653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:43:52.166 [DEBUG] [Thread-21653] [transport.py] [_log()] client lang: <none>
2025-11-12T19:43:52.166 [DEBUG] [Thread-21653] [transport.py] [_log()] server lang: <none>
2025-11-12T19:43:52.166 [DEBUG] [Thread-21653] [transport.py] [_log()] kex follows: False
2025-11-12T19:43:52.166 [DEBUG] [Thread-21653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:43:52.166 [DEBUG] [Thread-21653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:43:52.167 [DEBUG] [Thread-21653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:43:52.167 [DEBUG] [Thread-21653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:43:52.167 [DEBUG] [Thread-21653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:43:52.167 [DEBUG] [Thread-21653] [transport.py] [_log()] Compression: none
2025-11-12T19:43:52.167 [DEBUG] [Thread-21653] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:43:52.223 [DEBUG] [Thread-21653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:43:52.224 [DEBUG] [Thread-21653] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:43:52.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:43:52.225 [DEBUG] [Thread-21653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:43:52.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:43:52.279 [DEBUG] [Thread-21653] [transport.py] [_log()] userauth is OK
2025-11-12T19:43:52.280 [DEBUG] [Thread-21653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:43:52.280 [DEBUG] [Thread-21653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:43:52.280 [DEBUG] [Thread-21653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:43:52.280 [DEBUG] [Thread-21653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:43:52.301 [INFO] [Thread-21653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:43:52.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:43:52.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:43:53.160 [DEBUG] [Thread-21653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:43:53.160 [DEBUG] [Thread-21653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:43:53.208 [DEBUG] [Thread-21653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:43:53.208 [DEBUG] [Thread-21653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:43:53.216 [DEBUG] [Thread-21653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:43:53.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:43:53.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-11-12T19:43:53.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-11-12T19:43:53.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:43:53.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:43:53.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:43:53.248 [DEBUG] [Thread-21653] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:44:01.291 [DEBUG] [Thread-21655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:44:03.773 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:44:03.774 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:44:16.342 [DEBUG] [Thread-21656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:44:23.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:44:23.270 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:44:23.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-11-12T19:44:23.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 44, 13), 21.45, 23.82, 0.0, 25.43, 21.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:44:23.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:44:13
2025-11-12T19:44:24.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:44:24.193 [DEBUG] [Thread-21657] [transport.py] [_log()] starting thread (client mode): 0x11f03ac0
2025-11-12T19:44:24.193 [DEBUG] [Thread-21657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:44:24.213 [DEBUG] [Thread-21657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:44:24.214 [INFO] [Thread-21657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] client lang: <none>
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] server lang: <none>
2025-11-12T19:44:24.217 [DEBUG] [Thread-21657] [transport.py] [_log()] kex follows: False
2025-11-12T19:44:24.218 [DEBUG] [Thread-21657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:44:24.218 [DEBUG] [Thread-21657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:44:24.218 [DEBUG] [Thread-21657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:44:24.218 [DEBUG] [Thread-21657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:44:24.218 [DEBUG] [Thread-21657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:44:24.218 [DEBUG] [Thread-21657] [transport.py] [_log()] Compression: none
2025-11-12T19:44:24.218 [DEBUG] [Thread-21657] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:44:24.241 [DEBUG] [Thread-21657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:44:24.241 [DEBUG] [Thread-21657] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:44:24.242 [DEBUG] [Thread-21657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:44:24.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:44:24.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:44:24.244 [DEBUG] [Thread-21657] [transport.py] [_log()] userauth is OK
2025-11-12T19:44:24.244 [DEBUG] [Thread-21657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:44:24.244 [DEBUG] [Thread-21657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:44:24.244 [DEBUG] [Thread-21657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:44:24.244 [DEBUG] [Thread-21657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:44:24.267 [INFO] [Thread-21657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:44:24.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:44:24.913 [DEBUG] [Thread-21657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:44:24.913 [DEBUG] [Thread-21657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:44:24.913 [DEBUG] [Thread-21657] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:44:24.953 [DEBUG] [Thread-21657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:44:24.954 [DEBUG] [Thread-21657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:44:24.957 [DEBUG] [Thread-21657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:44:24.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:44:24.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:44:24.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:44:24.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:44:24.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:44:24.979 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:44:24.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:44:24.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:44:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:44:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.738627 -999.00  +21.20  15.21     29   +2.70 1 2 1 1 1   121    0 17.43 -51.54 ----- 19.4 15.2 250.4 21.3 21.8 -21.1 21.8 -20.0 21.4 -20.0 21.7 -21.0
2025-11-12T19:44:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:44:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:44:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.738627
2025-11-12T19:44:24.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:44:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:44:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:44:24.981 [DEBUG] [Thread-21657] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:44:24.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:44:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:44:24.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:44:13', tmtdew=21.45, humidity=23.82, cloud=0.0, wind=25.43, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:43:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:44:25.068 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:44:25.078 [DEBUG] [Thread-21660] [transport.py] [_log()] starting thread (client mode): 0x11f02ec0
2025-11-12T19:44:25.079 [DEBUG] [Thread-21660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:44:25.094 [DEBUG] [Thread-21660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:44:25.094 [INFO] [Thread-21660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:44:25.101 [DEBUG] [Thread-21660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] client lang: <none>
2025-11-12T19:44:25.102 [DEBUG] [Thread-21660] [transport.py] [_log()] server lang: <none>
2025-11-12T19:44:25.103 [DEBUG] [Thread-21660] [transport.py] [_log()] kex follows: False
2025-11-12T19:44:25.103 [DEBUG] [Thread-21660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:44:25.103 [DEBUG] [Thread-21660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:44:25.103 [DEBUG] [Thread-21660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:44:25.103 [DEBUG] [Thread-21660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:44:25.103 [DEBUG] [Thread-21660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:44:25.103 [DEBUG] [Thread-21660] [transport.py] [_log()] Compression: none
2025-11-12T19:44:25.103 [DEBUG] [Thread-21660] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:44:25.159 [DEBUG] [Thread-21660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:44:25.159 [DEBUG] [Thread-21660] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:44:25.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:44:25.161 [DEBUG] [Thread-21660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:44:25.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:44:25.217 [DEBUG] [Thread-21660] [transport.py] [_log()] userauth is OK
2025-11-12T19:44:25.217 [DEBUG] [Thread-21660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:44:25.217 [DEBUG] [Thread-21660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:44:25.217 [DEBUG] [Thread-21660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:44:25.218 [DEBUG] [Thread-21660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:44:25.239 [INFO] [Thread-21660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:44:25.239 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:44:25.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:44:26.080 [DEBUG] [Thread-21660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:44:26.080 [DEBUG] [Thread-21660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:44:26.128 [DEBUG] [Thread-21660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:44:26.128 [DEBUG] [Thread-21660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:44:26.137 [DEBUG] [Thread-21660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:44:26.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:44:26.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-11-12T19:44:26.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-11-12T19:44:26.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:44:26.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:44:26.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:44:26.172 [DEBUG] [Thread-21660] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:44:31.377 [DEBUG] [Thread-21662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:44:46.425 [DEBUG] [Thread-21663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:44:49.139 [DEBUG] [Thread-21664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:44:56.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:44:56.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:44: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-11-12T19:44:56.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 44, 45), 21.43, 23.87, 0.0, 25.69, 21.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:44:56.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:44:45
2025-11-12T19:44:56.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:44:57.120 [DEBUG] [Thread-21665] [transport.py] [_log()] starting thread (client mode): 0x11f124d0
2025-11-12T19:44:57.120 [DEBUG] [Thread-21665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:44:57.140 [DEBUG] [Thread-21665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:44:57.140 [INFO] [Thread-21665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:44:57.143 [DEBUG] [Thread-21665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:44:57.143 [DEBUG] [Thread-21665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] client lang: <none>
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] server lang: <none>
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] kex follows: False
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:44:57.144 [DEBUG] [Thread-21665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:44:57.145 [DEBUG] [Thread-21665] [transport.py] [_log()] Compression: none
2025-11-12T19:44:57.145 [DEBUG] [Thread-21665] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:44:57.162 [DEBUG] [Thread-21665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:44:57.163 [DEBUG] [Thread-21665] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:44:57.163 [DEBUG] [Thread-21665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:44:57.163 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:44:57.164 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:44:57.165 [DEBUG] [Thread-21665] [transport.py] [_log()] userauth is OK
2025-11-12T19:44:57.165 [DEBUG] [Thread-21665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:44:57.165 [DEBUG] [Thread-21665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:44:57.165 [DEBUG] [Thread-21665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:44:57.165 [DEBUG] [Thread-21665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:44:57.189 [INFO] [Thread-21665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:44:57.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:44:57.826 [DEBUG] [Thread-21665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:44:57.826 [DEBUG] [Thread-21665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:44:57.826 [DEBUG] [Thread-21665] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:44:57.867 [DEBUG] [Thread-21665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:44:57.867 [DEBUG] [Thread-21665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:44:57.870 [DEBUG] [Thread-21665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:44:57.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:44:57.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:44:57.885 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:44:57.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:44:57.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:44:57.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:44:57.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:44:57.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:44:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:44:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.738974 -999.00  +21.20  14.39     29   +2.60 1 2 1 1 1   112    0 17.84 -46.58 ----- 11.4 14.4 280.2 24.4 21.8 -21.1 21.7 -20.0 21.4 -20.0 21.6 -21.0
2025-11-12T19:44:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:44:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:44:57.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.738974
2025-11-12T19:44:57.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:44:57.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:44:57.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:44:57.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:44:57.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:44:57.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:44:45', tmtdew=21.43, humidity=23.87, cloud=0.0, wind=25.69, temperature=21.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:44:07.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:44:57.896 [DEBUG] [Thread-21665] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:44:57.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:44:57.991 [DEBUG] [Thread-21668] [transport.py] [_log()] starting thread (client mode): 0x11f10250
2025-11-12T19:44:57.992 [DEBUG] [Thread-21668] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:44:58.007 [DEBUG] [Thread-21668] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:44:58.007 [INFO] [Thread-21668] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:44:58.014 [DEBUG] [Thread-21668] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:44:58.014 [DEBUG] [Thread-21668] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:44:58.014 [DEBUG] [Thread-21668] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] client lang: <none>
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] server lang: <none>
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] kex follows: False
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] Compression: none
2025-11-12T19:44:58.015 [DEBUG] [Thread-21668] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:44:58.072 [DEBUG] [Thread-21668] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:44:58.072 [DEBUG] [Thread-21668] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:44:58.073 [DEBUG] [Thread-21668] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:44:58.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:44:58.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:44:58.127 [DEBUG] [Thread-21668] [transport.py] [_log()] userauth is OK
2025-11-12T19:44:58.127 [DEBUG] [Thread-21668] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:44:58.127 [DEBUG] [Thread-21668] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:44:58.127 [DEBUG] [Thread-21668] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:44:58.127 [DEBUG] [Thread-21668] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:44:58.146 [INFO] [Thread-21668] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:44:58.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:44:58.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:44:58.968 [DEBUG] [Thread-21668] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:44:58.968 [DEBUG] [Thread-21668] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:44:59.015 [DEBUG] [Thread-21668] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:44:59.016 [DEBUG] [Thread-21668] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:44:59.024 [DEBUG] [Thread-21668] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:44:59.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:44: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')
2025-11-12T19:44:59.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-11-12T19:44:59.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:44:59.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:44:59.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:44:59.059 [DEBUG] [Thread-21668] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:45:01.458 [DEBUG] [Thread-21670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:45:10.062 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:45:10.063 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:45:16.494 [DEBUG] [Thread-21671 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:45:29.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:45:29.082 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:45:29.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-11-12T19:45:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 45, 17), 21.37, 23.97, 0.0, 26.77, 21.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:45:29.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:45:17
2025-11-12T19:45:29.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:45:29.984 [DEBUG] [Thread-21672] [transport.py] [_log()] starting thread (client mode): 0x11f00b80
2025-11-12T19:45:29.985 [DEBUG] [Thread-21672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:45:30.004 [DEBUG] [Thread-21672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:45:30.004 [INFO] [Thread-21672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:45:30.007 [DEBUG] [Thread-21672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:45:30.007 [DEBUG] [Thread-21672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] client lang: <none>
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] server lang: <none>
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] kex follows: False
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:45:30.008 [DEBUG] [Thread-21672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:45:30.009 [DEBUG] [Thread-21672] [transport.py] [_log()] Compression: none
2025-11-12T19:45:30.009 [DEBUG] [Thread-21672] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:45:30.026 [DEBUG] [Thread-21672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:45:30.027 [DEBUG] [Thread-21672] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:45:30.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:45:30.028 [DEBUG] [Thread-21672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:45:30.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:45:30.031 [DEBUG] [Thread-21672] [transport.py] [_log()] userauth is OK
2025-11-12T19:45:30.031 [DEBUG] [Thread-21672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:45:30.031 [DEBUG] [Thread-21672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:45:30.031 [DEBUG] [Thread-21672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:45:30.031 [DEBUG] [Thread-21672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:45:30.067 [INFO] [Thread-21672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:45:30.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:45:30.710 [DEBUG] [Thread-21672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:45:30.710 [DEBUG] [Thread-21672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:45:30.711 [DEBUG] [Thread-21672] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:45:30.751 [DEBUG] [Thread-21672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:45:30.752 [DEBUG] [Thread-21672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:45:30.755 [DEBUG] [Thread-21672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:45:30.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:45:30.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:45:30.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:45:30.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:45:30.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:45:30.778 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:45:30.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:45:30.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:45:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:45:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.739321 -999.00  +21.20  16.65     29   +2.70 1 2 1 1 1   103    0 17.26 -47.48 ----- 12.1 16.6 261.2 20.1 21.8 -21.2 21.7 -19.9 21.4 -20.0 21.6 -21.1
2025-11-12T19:45:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:45:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:45:30.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.739321
2025-11-12T19:45:30.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:45:30.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:45:30.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:45:30.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:45:30.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:45:30.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:45:17', tmtdew=21.37, humidity=23.97, cloud=0.0, wind=26.77, temperature=21.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:44:37.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:45:30.781 [DEBUG] [Thread-21672] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:45:30.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:45:30.878 [DEBUG] [Thread-21675] [transport.py] [_log()] starting thread (client mode): 0x11f13850
2025-11-12T19:45:30.878 [DEBUG] [Thread-21675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:45:30.893 [DEBUG] [Thread-21675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:45:30.893 [INFO] [Thread-21675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] client lang: <none>
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] server lang: <none>
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] kex follows: False
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:45:30.901 [DEBUG] [Thread-21675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:45:30.902 [DEBUG] [Thread-21675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:45:30.902 [DEBUG] [Thread-21675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:45:30.902 [DEBUG] [Thread-21675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:45:30.902 [DEBUG] [Thread-21675] [transport.py] [_log()] Compression: none
2025-11-12T19:45:30.902 [DEBUG] [Thread-21675] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:45:30.959 [DEBUG] [Thread-21675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:45:30.959 [DEBUG] [Thread-21675] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:45:30.960 [DEBUG] [Thread-21675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:45:30.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:45:30.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:45:31.015 [DEBUG] [Thread-21675] [transport.py] [_log()] userauth is OK
2025-11-12T19:45:31.015 [DEBUG] [Thread-21675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:45:31.015 [DEBUG] [Thread-21675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:45:31.015 [DEBUG] [Thread-21675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:45:31.016 [DEBUG] [Thread-21675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:45:31.033 [INFO] [Thread-21675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:45:31.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:45:31.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:45:31.531 [DEBUG] [Thread-21677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:45:31.903 [DEBUG] [Thread-21675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:45:31.904 [DEBUG] [Thread-21675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:45:31.951 [DEBUG] [Thread-21675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:45:31.951 [DEBUG] [Thread-21675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:45:31.960 [DEBUG] [Thread-21675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:45:31.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:45:31.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-11-12T19:45: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') -> 00000000
2025-11-12T19:45:31.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:45:31.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:45:31.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:45:31.996 [DEBUG] [Thread-21675] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:45:46.585 [DEBUG] [Thread-21678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:45:49.197 [DEBUG] [Thread-21679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:46:01.619 [DEBUG] [Thread-21680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:46:02.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:46:02.019 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:46:02.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-11-12T19:46:02.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 45, 49), 21.32, 23.97, 0.0, 23.24, 21.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:46:02.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:45:49
2025-11-12T19:46:02.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:46:02.923 [DEBUG] [Thread-21681] [transport.py] [_log()] starting thread (client mode): 0x11f03ac0
2025-11-12T19:46:02.923 [DEBUG] [Thread-21681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:46:02.944 [DEBUG] [Thread-21681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:46:02.944 [INFO] [Thread-21681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] client lang: <none>
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] server lang: <none>
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] kex follows: False
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] Compression: none
2025-11-12T19:46:02.948 [DEBUG] [Thread-21681] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:46:02.965 [DEBUG] [Thread-21681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:46:02.966 [DEBUG] [Thread-21681] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:46:02.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:46:02.967 [DEBUG] [Thread-21681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:46:02.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:46:02.969 [DEBUG] [Thread-21681] [transport.py] [_log()] userauth is OK
2025-11-12T19:46:02.969 [DEBUG] [Thread-21681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:46:02.969 [DEBUG] [Thread-21681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:46:02.970 [DEBUG] [Thread-21681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:46:02.970 [DEBUG] [Thread-21681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:46:02.994 [INFO] [Thread-21681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:46:02.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:46:03.613 [DEBUG] [Thread-21681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:46:03.613 [DEBUG] [Thread-21681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:46:03.613 [DEBUG] [Thread-21681] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:46:03.654 [DEBUG] [Thread-21681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:46:03.654 [DEBUG] [Thread-21681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:46:03.657 [DEBUG] [Thread-21681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:46:03.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:46:03.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:46:03.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:46:03.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:46:03.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:46:03.675 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:46:03.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:46:03.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:46:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:46:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.740017 -999.00  +21.10  20.64     29   +2.80 1 2 1 1 1    87    0 17.48 -51.36 ----- 16.9 20.6 261.6 24.9 21.7 -21.3 21.7 -20.0 21.3 -20.1 21.6 -21.0
2025-11-12T19:46:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:46:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:46:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.740017
2025-11-12T19:46:03.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:46:03.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:46:03.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:46:03.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:46:03.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:46:03.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:45:49', tmtdew=21.32, humidity=23.97, cloud=0.0, wind=23.24, temperature=21.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:45:37.469', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:46:03.678 [DEBUG] [Thread-21681] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:46: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-11-12T19:46:03.773 [DEBUG] [Thread-21684] [transport.py] [_log()] starting thread (client mode): 0x11f02b90
2025-11-12T19:46:03.773 [DEBUG] [Thread-21684] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:46:03.788 [DEBUG] [Thread-21684] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:46:03.788 [INFO] [Thread-21684] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:46:03.795 [DEBUG] [Thread-21684] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:46:03.796 [DEBUG] [Thread-21684] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:46:03.796 [DEBUG] [Thread-21684] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:46:03.796 [DEBUG] [Thread-21684] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:46:03.796 [DEBUG] [Thread-21684] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:46:03.796 [DEBUG] [Thread-21684] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:46:03.796 [DEBUG] [Thread-21684] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:46:03.797 [DEBUG] [Thread-21684] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:46:03.797 [DEBUG] [Thread-21684] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:46:03.797 [DEBUG] [Thread-21684] [transport.py] [_log()] client lang: <none>
2025-11-12T19:46:03.797 [DEBUG] [Thread-21684] [transport.py] [_log()] server lang: <none>
2025-11-12T19:46:03.797 [DEBUG] [Thread-21684] [transport.py] [_log()] kex follows: False
2025-11-12T19:46:03.797 [DEBUG] [Thread-21684] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:46:03.797 [DEBUG] [Thread-21684] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:46:03.797 [DEBUG] [Thread-21684] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:46:03.798 [DEBUG] [Thread-21684] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:46:03.798 [DEBUG] [Thread-21684] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:46:03.798 [DEBUG] [Thread-21684] [transport.py] [_log()] Compression: none
2025-11-12T19:46:03.798 [DEBUG] [Thread-21684] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:46:03.855 [DEBUG] [Thread-21684] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:46:03.856 [DEBUG] [Thread-21684] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:46:03.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:46:03.858 [DEBUG] [Thread-21684] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:46:03.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:46:03.911 [DEBUG] [Thread-21684] [transport.py] [_log()] userauth is OK
2025-11-12T19:46:03.912 [DEBUG] [Thread-21684] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:46:03.912 [DEBUG] [Thread-21684] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:46:03.912 [DEBUG] [Thread-21684] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:46:03.912 [DEBUG] [Thread-21684] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:46:03.935 [INFO] [Thread-21684] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:46:03.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:46:03.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:46:04.819 [DEBUG] [Thread-21684] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:46:04.820 [DEBUG] [Thread-21684] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:46:04.867 [DEBUG] [Thread-21684] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:46:04.867 [DEBUG] [Thread-21684] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:46:04.876 [DEBUG] [Thread-21684] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:46:04.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:46:04.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-11-12T19:46:04.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-11-12T19:46:04.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:46:04.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:46:04.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:46:04.913 [DEBUG] [Thread-21684] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:46:15.885 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:46:15.887 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:46:16.654 [DEBUG] [Thread-21686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:46:31.701 [DEBUG] [Thread-21687 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:46:34.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:46:34.936 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:46:34.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:46:35.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 46, 21), 21.31, 23.97, 0.0, 24.44, 21.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:46:35.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:46:21
2025-11-12T19:46:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:46:35.842 [DEBUG] [Thread-21688] [transport.py] [_log()] starting thread (client mode): 0x11f02590
2025-11-12T19:46:35.843 [DEBUG] [Thread-21688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:46:35.862 [DEBUG] [Thread-21688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:46:35.862 [INFO] [Thread-21688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] client lang: <none>
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] server lang: <none>
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] kex follows: False
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] Compression: none
2025-11-12T19:46:35.866 [DEBUG] [Thread-21688] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:46:35.881 [DEBUG] [Thread-21688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:46:35.882 [DEBUG] [Thread-21688] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:46:35.882 [DEBUG] [Thread-21688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:46:35.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:46:35.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:46:35.884 [DEBUG] [Thread-21688] [transport.py] [_log()] userauth is OK
2025-11-12T19:46:35.884 [DEBUG] [Thread-21688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:46:35.884 [DEBUG] [Thread-21688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:46:35.884 [DEBUG] [Thread-21688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:46:35.884 [DEBUG] [Thread-21688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:46:35.905 [INFO] [Thread-21688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:46:35.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:46:36.529 [DEBUG] [Thread-21688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:46:36.530 [DEBUG] [Thread-21688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:46:36.530 [DEBUG] [Thread-21688] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:46:36.570 [DEBUG] [Thread-21688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:46:36.571 [DEBUG] [Thread-21688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:46:36.573 [DEBUG] [Thread-21688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:46:36.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:46:36.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:46:36.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:46:36.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:46:36.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:46:36.593 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:46:36.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:46:36.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:46:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:46:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.740363 -999.00  +21.10  18.60     30   +2.80 1 2 1 1 1    80    0 17.71 -49.61 ----- 18.6 18.6 242.6 25.4 21.7 -21.2 21.6 -19.9 21.3 -20.1 21.6 -21.0
2025-11-12T19:46:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:46:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:46:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.740363
2025-11-12T19:46:36.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:46:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:46:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:46:36.595 [DEBUG] [Thread-21688] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:46:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:46:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:46:36.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:46:21', tmtdew=21.31, humidity=23.97, cloud=0.0, wind=24.44, temperature=21.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:46:07.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:46:36.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:46:36.692 [DEBUG] [Thread-21691] [transport.py] [_log()] starting thread (client mode): 0x149472e0
2025-11-12T19:46:36.692 [DEBUG] [Thread-21691] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:46:36.708 [DEBUG] [Thread-21691] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:46:36.708 [INFO] [Thread-21691] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] client lang: <none>
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] server lang: <none>
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] kex follows: False
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:46:36.716 [DEBUG] [Thread-21691] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:46:36.717 [DEBUG] [Thread-21691] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:46:36.717 [DEBUG] [Thread-21691] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:46:36.717 [DEBUG] [Thread-21691] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:46:36.717 [DEBUG] [Thread-21691] [transport.py] [_log()] Compression: none
2025-11-12T19:46:36.717 [DEBUG] [Thread-21691] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:46:36.775 [DEBUG] [Thread-21691] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:46:36.776 [DEBUG] [Thread-21691] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:46:36.776 [DEBUG] [Thread-21691] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:46:36.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:46:36.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:46:36.831 [DEBUG] [Thread-21691] [transport.py] [_log()] userauth is OK
2025-11-12T19:46:36.831 [DEBUG] [Thread-21691] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:46:36.831 [DEBUG] [Thread-21691] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:46:36.831 [DEBUG] [Thread-21691] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:46:36.831 [DEBUG] [Thread-21691] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:46:36.850 [INFO] [Thread-21691] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:46:36.851 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:46:36.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:46:37.715 [DEBUG] [Thread-21691] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:46:37.715 [DEBUG] [Thread-21691] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:46:37.764 [DEBUG] [Thread-21691] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:46:37.764 [DEBUG] [Thread-21691] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:46:37.773 [DEBUG] [Thread-21691] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:46:37.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:46:37.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-11-12T19:46:37.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-11-12T19:46:37.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:46:37.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:46:37.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:46:37.810 [DEBUG] [Thread-21691] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:46:46.731 [DEBUG] [Thread-21693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:46:49.261 [DEBUG] [Thread-21694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:47:01.780 [DEBUG] [Thread-21695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:47:07.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:47:07.832 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:47:07.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-11-12T19:47:08.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 46, 53), 21.21, 23.95, 0.0, 23.42, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:47:08.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:46:53
2025-11-12T19:47:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:47:08.752 [DEBUG] [Thread-21696] [transport.py] [_log()] starting thread (client mode): 0x11f02290
2025-11-12T19:47:08.752 [DEBUG] [Thread-21696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:47:08.772 [DEBUG] [Thread-21696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:47:08.772 [INFO] [Thread-21696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] client lang: <none>
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] server lang: <none>
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] kex follows: False
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:47:08.775 [DEBUG] [Thread-21696] [transport.py] [_log()] Compression: none
2025-11-12T19:47:08.776 [DEBUG] [Thread-21696] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:47:08.789 [DEBUG] [Thread-21696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:47:08.789 [DEBUG] [Thread-21696] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:47:08.789 [DEBUG] [Thread-21696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:47:08.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:47:08.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:47:08.790 [DEBUG] [Thread-21696] [transport.py] [_log()] userauth is OK
2025-11-12T19:47:08.790 [DEBUG] [Thread-21696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:47:08.790 [DEBUG] [Thread-21696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:47:08.790 [DEBUG] [Thread-21696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:47:08.790 [DEBUG] [Thread-21696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:47:08.805 [INFO] [Thread-21696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:47:08.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:47:09.482 [DEBUG] [Thread-21696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:47:09.483 [DEBUG] [Thread-21696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:47:09.483 [DEBUG] [Thread-21696] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:47:09.523 [DEBUG] [Thread-21696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:47:09.523 [DEBUG] [Thread-21696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:47:09.525 [DEBUG] [Thread-21696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:47:09.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:47:09.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:47:09.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:47:09.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:47:09.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:47:09.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:47:09.544 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.740710 -999.00  +21.10  26.88     30   +2.90 1 2 1 1 1    73    0 16.96 -51.39 ----- 18.6 26.9 252.2 34.0 21.7 -21.2 21.6 -20.0 21.3 -20.1 21.6 -21.1
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.740710
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:47:09.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:46:53', tmtdew=21.21, humidity=23.95, cloud=0.0, wind=23.42, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:46:37.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:47:09.545 [DEBUG] [Thread-21696] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:47:09.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:47:09.628 [DEBUG] [Thread-21699] [transport.py] [_log()] starting thread (client mode): 0x11f03610
2025-11-12T19:47:09.628 [DEBUG] [Thread-21699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:47:09.643 [DEBUG] [Thread-21699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:47:09.643 [INFO] [Thread-21699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:47:09.650 [DEBUG] [Thread-21699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:47:09.650 [DEBUG] [Thread-21699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] client lang: <none>
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] server lang: <none>
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] kex follows: False
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] Compression: none
2025-11-12T19:47:09.651 [DEBUG] [Thread-21699] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:47:09.705 [DEBUG] [Thread-21699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:47:09.705 [DEBUG] [Thread-21699] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:47:09.705 [DEBUG] [Thread-21699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:47:09.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:47:09.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:47:09.763 [DEBUG] [Thread-21699] [transport.py] [_log()] userauth is OK
2025-11-12T19:47:09.763 [DEBUG] [Thread-21699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:47:09.763 [DEBUG] [Thread-21699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:47:09.763 [DEBUG] [Thread-21699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:47:09.763 [DEBUG] [Thread-21699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:47:09.776 [INFO] [Thread-21699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:47:09.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:47:09.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:47:10.630 [DEBUG] [Thread-21699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:47:10.630 [DEBUG] [Thread-21699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:47:10.678 [DEBUG] [Thread-21699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:47:10.678 [DEBUG] [Thread-21699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:47:10.686 [DEBUG] [Thread-21699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:47:10.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:47:10.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-11-12T19:47:10.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-11-12T19:47:10.710 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:47:10.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:47:10.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:47:10.718 [DEBUG] [Thread-21699] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:47:16.814 [DEBUG] [Thread-21701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:47:21.578 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:47:21.579 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:47:31.871 [DEBUG] [Thread-21702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:47:40.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:47:40.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19: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-11-12T19:47:41.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 47, 25), 21.17, 24.04, 0.0, 22.55, 21.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:47:41.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:47:25
2025-11-12T19:47:41.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:47:41.645 [DEBUG] [Thread-21703] [transport.py] [_log()] starting thread (client mode): 0x11f11990
2025-11-12T19:47:41.645 [DEBUG] [Thread-21703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:47:41.668 [DEBUG] [Thread-21703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:47:41.669 [INFO] [Thread-21703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] client lang: <none>
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] server lang: <none>
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] kex follows: False
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:47:41.672 [DEBUG] [Thread-21703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:47:41.673 [DEBUG] [Thread-21703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:47:41.673 [DEBUG] [Thread-21703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:47:41.673 [DEBUG] [Thread-21703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:47:41.673 [DEBUG] [Thread-21703] [transport.py] [_log()] Compression: none
2025-11-12T19:47:41.673 [DEBUG] [Thread-21703] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:47:41.692 [DEBUG] [Thread-21703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:47:41.693 [DEBUG] [Thread-21703] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:47:41.694 [DEBUG] [Thread-21703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:47:41.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:47:41.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:47:41.696 [DEBUG] [Thread-21703] [transport.py] [_log()] userauth is OK
2025-11-12T19:47:41.696 [DEBUG] [Thread-21703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:47:41.696 [DEBUG] [Thread-21703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:47:41.696 [DEBUG] [Thread-21703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:47:41.696 [DEBUG] [Thread-21703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:47:41.730 [INFO] [Thread-21703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:47:41.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:47:42.335 [DEBUG] [Thread-21703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:47:42.335 [DEBUG] [Thread-21703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:47:42.336 [DEBUG] [Thread-21703] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:47:42.377 [DEBUG] [Thread-21703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:47:42.377 [DEBUG] [Thread-21703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:47:42.380 [DEBUG] [Thread-21703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:47:42.391 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:47:42.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:47:42.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:47:42.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:47:42.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:47:42.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:47:42.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:47:42.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:47:42.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:47:42.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.741057 -999.00  +21.10  25.39     30   +2.90 1 2 1 1 1    67    0 17.52 -51.88 ----- 18.4 25.4 269.0 26.8 21.6 -21.3 21.6 -20.0 21.3 -20.1 21.5 -21.1
2025-11-12T19:47:42.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:47:42.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:47:42.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.741057
2025-11-12T19:47:42.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:47:42.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:47:42.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:47:42.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:47:42.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:47:42.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:47:25', tmtdew=21.17, humidity=24.04, cloud=0.0, wind=22.55, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:47:07.325', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:47:42.405 [DEBUG] [Thread-21703] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:47:42.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:47:42.497 [DEBUG] [Thread-21706] [transport.py] [_log()] starting thread (client mode): 0x11f11810
2025-11-12T19:47:42.497 [DEBUG] [Thread-21706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:47:42.514 [DEBUG] [Thread-21706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:47:42.514 [INFO] [Thread-21706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:47:42.521 [DEBUG] [Thread-21706] [transport.py] [_log()] client lang: <none>
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] server lang: <none>
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] kex follows: False
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] Compression: none
2025-11-12T19:47:42.522 [DEBUG] [Thread-21706] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:47:42.579 [DEBUG] [Thread-21706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:47:42.580 [DEBUG] [Thread-21706] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:47:42.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:47:42.580 [DEBUG] [Thread-21706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:47:42.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:47:42.635 [DEBUG] [Thread-21706] [transport.py] [_log()] userauth is OK
2025-11-12T19:47:42.635 [DEBUG] [Thread-21706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:47:42.635 [DEBUG] [Thread-21706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:47:42.635 [DEBUG] [Thread-21706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:47:42.635 [DEBUG] [Thread-21706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:47:42.654 [INFO] [Thread-21706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:47:42.655 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:47:42.655 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:47:43.521 [DEBUG] [Thread-21706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:47:43.521 [DEBUG] [Thread-21706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:47:43.569 [DEBUG] [Thread-21706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:47:43.569 [DEBUG] [Thread-21706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:47:43.578 [DEBUG] [Thread-21706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:47:43.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:47:43.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:47:43.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-11-12T19:47:43.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:47:43.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:47:43.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:47:43.610 [DEBUG] [Thread-21706] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:47:46.906 [DEBUG] [Thread-21708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:47:49.314 [DEBUG] [Thread-21709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:48:01.943 [DEBUG] [Thread-21710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:48:13.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:48:13.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:48:13.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-11-12T19:48:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 47, 57), 21.12, 24.54, 0.0, 23.2, 21.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:48:14.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:47:57
2025-11-12T19:48:14.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:48:14.520 [DEBUG] [Thread-21711] [transport.py] [_log()] starting thread (client mode): 0x14944130
2025-11-12T19:48:14.520 [DEBUG] [Thread-21711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:48:14.540 [DEBUG] [Thread-21711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:48:14.540 [INFO] [Thread-21711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] client lang: <none>
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] server lang: <none>
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] kex follows: False
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] Compression: none
2025-11-12T19:48:14.543 [DEBUG] [Thread-21711] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:48:14.561 [DEBUG] [Thread-21711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:48:14.562 [DEBUG] [Thread-21711] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:48:14.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:48:14.562 [DEBUG] [Thread-21711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:48:14.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:48:14.563 [DEBUG] [Thread-21711] [transport.py] [_log()] userauth is OK
2025-11-12T19:48:14.563 [DEBUG] [Thread-21711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:48:14.564 [DEBUG] [Thread-21711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:48:14.564 [DEBUG] [Thread-21711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:48:14.564 [DEBUG] [Thread-21711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:48:14.575 [INFO] [Thread-21711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:48:14.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:48:15.195 [DEBUG] [Thread-21711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:48:15.196 [DEBUG] [Thread-21711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:48:15.196 [DEBUG] [Thread-21711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:48:15.236 [DEBUG] [Thread-21711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:48:15.236 [DEBUG] [Thread-21711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:48:15.239 [DEBUG] [Thread-21711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:48:15.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:48:15.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:48:15.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:48:15.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:48:15.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:48:15.253 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:48:15.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:48:15.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:48:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:48:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.741404 -999.00  +21.00  21.34     30   +2.90 1 2 1 1 1    61    0 17.46 -54.04 ----- 26.5 21.3 250.4 29.7 21.6 -21.2 21.6 -20.1 21.3 -20.1 21.5 -21.1
2025-11-12T19:48:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:48:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:48:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.741404
2025-11-12T19:48:15.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:48:15.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:48:15.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:48:15.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:48:15.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:48:15.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:47:57', tmtdew=21.12, humidity=24.54, cloud=0.0, wind=23.2, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:47:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:48:15.258 [DEBUG] [Thread-21711] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:48:15.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:48:15.348 [DEBUG] [Thread-21714] [transport.py] [_log()] starting thread (client mode): 0x149a8130
2025-11-12T19:48:15.349 [DEBUG] [Thread-21714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:48:15.363 [DEBUG] [Thread-21714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:48:15.363 [INFO] [Thread-21714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:48:15.371 [DEBUG] [Thread-21714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:48:15.371 [DEBUG] [Thread-21714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:48:15.371 [DEBUG] [Thread-21714] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:48:15.371 [DEBUG] [Thread-21714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:48:15.371 [DEBUG] [Thread-21714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:48:15.371 [DEBUG] [Thread-21714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:48:15.371 [DEBUG] [Thread-21714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] client lang: <none>
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] server lang: <none>
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] kex follows: False
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] Compression: none
2025-11-12T19:48:15.372 [DEBUG] [Thread-21714] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:48:15.430 [DEBUG] [Thread-21714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:48:15.430 [DEBUG] [Thread-21714] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:48:15.431 [DEBUG] [Thread-21714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:48:15.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:48:15.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:48:15.486 [DEBUG] [Thread-21714] [transport.py] [_log()] userauth is OK
2025-11-12T19:48:15.487 [DEBUG] [Thread-21714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:48:15.487 [DEBUG] [Thread-21714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:48:15.487 [DEBUG] [Thread-21714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:48:15.487 [DEBUG] [Thread-21714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:48:15.510 [INFO] [Thread-21714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:48:15.510 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:48:15.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:48:16.351 [DEBUG] [Thread-21714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:48:16.351 [DEBUG] [Thread-21714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:48:16.399 [DEBUG] [Thread-21714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:48:16.399 [DEBUG] [Thread-21714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:48:16.407 [DEBUG] [Thread-21714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:48:16.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:48:16.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:48:16.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:48:16.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:48:16.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:48:16.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:48:16.439 [DEBUG] [Thread-21714] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:48:16.981 [DEBUG] [Thread-21716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:48:27.140 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:48:27.141 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:48:32.027 [DEBUG] [Thread-21717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:48:46.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:48:46.441 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:48:46.443 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:48:47.058 [DEBUG] [Thread-21718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:48:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 48, 29), 21.08, 24.6, 0.0, 22.37, 21.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:48:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:48:29
2025-11-12T19:48:47.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:48:47.381 [DEBUG] [Thread-21719] [transport.py] [_log()] starting thread (client mode): 0x149a6e90
2025-11-12T19:48:47.381 [DEBUG] [Thread-21719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:48:47.401 [DEBUG] [Thread-21719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:48:47.401 [INFO] [Thread-21719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:48:47.404 [DEBUG] [Thread-21719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:48:47.404 [DEBUG] [Thread-21719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:48:47.404 [DEBUG] [Thread-21719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:48:47.404 [DEBUG] [Thread-21719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] client lang: <none>
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] server lang: <none>
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] kex follows: False
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] Compression: none
2025-11-12T19:48:47.405 [DEBUG] [Thread-21719] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:48:47.425 [DEBUG] [Thread-21719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:48:47.425 [DEBUG] [Thread-21719] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:48:47.426 [DEBUG] [Thread-21719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:48:47.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:48:47.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:48:47.428 [DEBUG] [Thread-21719] [transport.py] [_log()] userauth is OK
2025-11-12T19:48:47.428 [DEBUG] [Thread-21719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:48:47.428 [DEBUG] [Thread-21719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:48:47.428 [DEBUG] [Thread-21719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:48:47.428 [DEBUG] [Thread-21719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:48:47.463 [INFO] [Thread-21719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:48:47.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:48:48.120 [DEBUG] [Thread-21719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:48:48.120 [DEBUG] [Thread-21719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:48:48.121 [DEBUG] [Thread-21719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:48:48.161 [DEBUG] [Thread-21719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:48:48.161 [DEBUG] [Thread-21719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:48:48.164 [DEBUG] [Thread-21719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:48:48.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:48:48.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:48:48.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:48:48.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:48:48.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:48:48.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:48:48.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:48:48.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:48:48.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:48:48.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.741752 -999.00  +21.00  18.36     30   +2.90 1 2 1 1 1    56    0 17.12 -56.18 ----- 15.7 18.4 255.4 31.8 21.6 -21.2 21.6 -20.1 21.2 -20.1 21.5 -21.2
2025-11-12T19:48:48.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:48:48.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:48:48.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.741752
2025-11-12T19:48:48.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:48:48.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:48:48.191 [DEBUG] [Thread-21719] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:48:48.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:48:48.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:48:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:48:48.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:48:29', tmtdew=21.08, humidity=24.6, cloud=0.0, wind=22.37, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:48:07.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:48:48.276 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:48:48.287 [DEBUG] [Thread-21722] [transport.py] [_log()] starting thread (client mode): 0x149450f0
2025-11-12T19:48:48.287 [DEBUG] [Thread-21722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:48:48.303 [DEBUG] [Thread-21722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:48:48.303 [INFO] [Thread-21722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:48:48.310 [DEBUG] [Thread-21722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] client lang: <none>
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] server lang: <none>
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] kex follows: False
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] Compression: none
2025-11-12T19:48:48.311 [DEBUG] [Thread-21722] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:48:48.371 [DEBUG] [Thread-21722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:48:48.372 [DEBUG] [Thread-21722] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:48:48.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:48:48.373 [DEBUG] [Thread-21722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:48:48.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:48:48.426 [DEBUG] [Thread-21722] [transport.py] [_log()] userauth is OK
2025-11-12T19:48:48.427 [DEBUG] [Thread-21722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:48:48.427 [DEBUG] [Thread-21722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:48:48.427 [DEBUG] [Thread-21722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:48:48.427 [DEBUG] [Thread-21722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:48:48.458 [INFO] [Thread-21722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:48:48.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:48:48.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:48:49.327 [DEBUG] [Thread-21722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:48:49.327 [DEBUG] [Thread-21722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:48:49.371 [DEBUG] [Thread-21724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:48:49.376 [DEBUG] [Thread-21722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:48:49.376 [DEBUG] [Thread-21722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:48:49.385 [DEBUG] [Thread-21722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:48:49.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:48:49.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-11-12T19:48:49.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-11-12T19:48:49.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:48:49.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:48:49.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:48:49.427 [DEBUG] [Thread-21722] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:49:02.089 [DEBUG] [Thread-21725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:49:17.125 [DEBUG] [Thread-21726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:49:19.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:49:19.449 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:49:19.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:49:20.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 49, 1), 21.05, 24.65, 0.0, 20.87, 21.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:49:20.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:49:01
2025-11-12T19:49:20.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:49:20.340 [DEBUG] [Thread-21727] [transport.py] [_log()] starting thread (client mode): 0x14945600
2025-11-12T19:49:20.341 [DEBUG] [Thread-21727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:49:20.361 [DEBUG] [Thread-21727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:49:20.361 [INFO] [Thread-21727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:49:20.365 [DEBUG] [Thread-21727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] client lang: <none>
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] server lang: <none>
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] kex follows: False
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] Compression: none
2025-11-12T19:49:20.366 [DEBUG] [Thread-21727] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:49:20.386 [DEBUG] [Thread-21727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:49:20.387 [DEBUG] [Thread-21727] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:49:20.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:49:20.388 [DEBUG] [Thread-21727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:49:20.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:49:20.390 [DEBUG] [Thread-21727] [transport.py] [_log()] userauth is OK
2025-11-12T19:49:20.390 [DEBUG] [Thread-21727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:49:20.390 [DEBUG] [Thread-21727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:49:20.390 [DEBUG] [Thread-21727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:49:20.390 [DEBUG] [Thread-21727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:49:20.423 [INFO] [Thread-21727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:49:20.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:49:21.070 [DEBUG] [Thread-21727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:49:21.070 [DEBUG] [Thread-21727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:49:21.070 [DEBUG] [Thread-21727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:49:21.111 [DEBUG] [Thread-21727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:49:21.111 [DEBUG] [Thread-21727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:49:21.114 [DEBUG] [Thread-21727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:49:21.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:49:21.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:49:21.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:49:21.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:49:21.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:49:21.139 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:49:21.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:49:21.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:49:21.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:49:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.742099 -999.00  +21.00  26.44     30   +2.90 1 2 1 1 1    51    0 17.19 -62.91 ----- 17.5 26.4 256.6 29.7 21.6 -21.3 21.6 -20.1 21.2 -20.1 21.5 -21.1
2025-11-12T19:49:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:49:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:49:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.742099
2025-11-12T19:49:21.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:49:21.140 [DEBUG] [Thread-21727] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:49:21.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:49:21.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:49:21.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:49:21.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:49:21.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:49:01', tmtdew=21.05, humidity=24.65, cloud=0.0, wind=20.87, temperature=21.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:48:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:49:21.222 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:49:21.233 [DEBUG] [Thread-21730] [transport.py] [_log()] starting thread (client mode): 0x11f026e0
2025-11-12T19:49:21.234 [DEBUG] [Thread-21730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:49:21.249 [DEBUG] [Thread-21730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:49:21.249 [INFO] [Thread-21730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:49:21.256 [DEBUG] [Thread-21730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] client lang: <none>
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] server lang: <none>
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] kex follows: False
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:49:21.257 [DEBUG] [Thread-21730] [transport.py] [_log()] Compression: none
2025-11-12T19:49:21.258 [DEBUG] [Thread-21730] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:49:21.313 [DEBUG] [Thread-21730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:49:21.314 [DEBUG] [Thread-21730] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:49:21.314 [DEBUG] [Thread-21730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:49:21.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:49:21.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:49:21.371 [DEBUG] [Thread-21730] [transport.py] [_log()] userauth is OK
2025-11-12T19:49:21.372 [DEBUG] [Thread-21730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:49:21.372 [DEBUG] [Thread-21730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:49:21.372 [DEBUG] [Thread-21730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:49:21.372 [DEBUG] [Thread-21730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:49:21.391 [INFO] [Thread-21730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:49:21.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:49:21.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:49:22.242 [DEBUG] [Thread-21730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:49:22.242 [DEBUG] [Thread-21730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:49:22.290 [DEBUG] [Thread-21730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:49:22.290 [DEBUG] [Thread-21730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:49:22.300 [DEBUG] [Thread-21730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:49:22.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:49:22.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-11-12T19:49:22.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-11-12T19:49:22.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:49:22.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:49:22.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:49:22.336 [DEBUG] [Thread-21730] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:49:32.161 [DEBUG] [Thread-21732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:49:32.258 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:49:32.259 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:49:47.208 [DEBUG] [Thread-21733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:49:49.428 [DEBUG] [Thread-21734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:49:52.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:49:52.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:49: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-11-12T19:49:52.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 49, 33), 21.03, 24.69, 0.0, 23.22, 21.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:49:52.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:49:33
2025-11-12T19:49:53.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:49:53.230 [DEBUG] [Thread-21735] [transport.py] [_log()] starting thread (client mode): 0x149468f0
2025-11-12T19:49:53.230 [DEBUG] [Thread-21735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:49:53.250 [DEBUG] [Thread-21735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:49:53.250 [INFO] [Thread-21735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:49:53.253 [DEBUG] [Thread-21735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] client lang: <none>
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] server lang: <none>
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] kex follows: False
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:49:53.254 [DEBUG] [Thread-21735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:49:53.255 [DEBUG] [Thread-21735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:49:53.255 [DEBUG] [Thread-21735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:49:53.255 [DEBUG] [Thread-21735] [transport.py] [_log()] Compression: none
2025-11-12T19:49:53.255 [DEBUG] [Thread-21735] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:49:53.272 [DEBUG] [Thread-21735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:49:53.272 [DEBUG] [Thread-21735] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:49:53.273 [DEBUG] [Thread-21735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:49:53.273 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:49:53.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:49:53.274 [DEBUG] [Thread-21735] [transport.py] [_log()] userauth is OK
2025-11-12T19:49:53.275 [DEBUG] [Thread-21735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:49:53.275 [DEBUG] [Thread-21735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:49:53.275 [DEBUG] [Thread-21735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:49:53.275 [DEBUG] [Thread-21735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:49:53.296 [INFO] [Thread-21735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:49:53.297 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:49:53.917 [DEBUG] [Thread-21735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:49:53.918 [DEBUG] [Thread-21735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:49:53.918 [DEBUG] [Thread-21735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:49:53.959 [DEBUG] [Thread-21735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:49:53.959 [DEBUG] [Thread-21735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:49:53.962 [DEBUG] [Thread-21735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:49:53.973 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:49:53.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:49:53.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:49:53.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:49:53.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:49:53.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:49:53.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:49:53.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:49:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:49:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.742447 -999.00  +21.00  16.92     30   +2.90 1 2 1 1 1    47    0 17.02 -65.21 ----- 15.2 16.9 263.2 23.2 21.6 -21.3 21.6 -20.2 21.2 -20.2 21.4 -21.2
2025-11-12T19:49:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:49:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:49:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.742447
2025-11-12T19:49:53.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:49:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:49:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:49:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:49:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:49:53.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:49:33', tmtdew=21.03, humidity=24.69, cloud=0.0, wind=23.22, temperature=21.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:49:07.421', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:49:53.989 [DEBUG] [Thread-21735] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:49:54.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:49:54.086 [DEBUG] [Thread-21738] [transport.py] [_log()] starting thread (client mode): 0x149a7e50
2025-11-12T19:49:54.086 [DEBUG] [Thread-21738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:49:54.101 [DEBUG] [Thread-21738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:49:54.102 [INFO] [Thread-21738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:49:54.109 [DEBUG] [Thread-21738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:49:54.109 [DEBUG] [Thread-21738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:49:54.109 [DEBUG] [Thread-21738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:49:54.109 [DEBUG] [Thread-21738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:49:54.109 [DEBUG] [Thread-21738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:49:54.109 [DEBUG] [Thread-21738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:49:54.109 [DEBUG] [Thread-21738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] client lang: <none>
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] server lang: <none>
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] kex follows: False
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] Compression: none
2025-11-12T19:49:54.110 [DEBUG] [Thread-21738] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:49:54.167 [DEBUG] [Thread-21738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:49:54.168 [DEBUG] [Thread-21738] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:49:54.168 [DEBUG] [Thread-21738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:49:54.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:49:54.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:49:54.223 [DEBUG] [Thread-21738] [transport.py] [_log()] userauth is OK
2025-11-12T19:49:54.223 [DEBUG] [Thread-21738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:49:54.224 [DEBUG] [Thread-21738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:49:54.224 [DEBUG] [Thread-21738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:49:54.224 [DEBUG] [Thread-21738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:49:54.243 [INFO] [Thread-21738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:49:54.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:49:54.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:49:55.083 [DEBUG] [Thread-21738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:49:55.083 [DEBUG] [Thread-21738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:49:55.131 [DEBUG] [Thread-21738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:49:55.131 [DEBUG] [Thread-21738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:49:55.140 [DEBUG] [Thread-21738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:49:55.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:49:55.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-11-12T19:49:55.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-11-12T19:49:55.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:49:55.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:49:55.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:49:55.175 [DEBUG] [Thread-21738] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:50:02.241 [DEBUG] [Thread-21740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:50:17.292 [DEBUG] [Thread-21741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:50:25.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:50:25.182 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:50:25.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-11-12T19:50:25.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 50, 5), 20.99, 24.75, 0.0, 21.79, 21.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:50:25.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:50:05
2025-11-12T19:50:25.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:50:26.120 [DEBUG] [Thread-21742] [transport.py] [_log()] starting thread (client mode): 0x173bea10
2025-11-12T19:50:26.120 [DEBUG] [Thread-21742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:50:26.140 [DEBUG] [Thread-21742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:50:26.140 [INFO] [Thread-21742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] client lang: <none>
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] server lang: <none>
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] kex follows: False
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:50:26.143 [DEBUG] [Thread-21742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:50:26.144 [DEBUG] [Thread-21742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:50:26.144 [DEBUG] [Thread-21742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:50:26.144 [DEBUG] [Thread-21742] [transport.py] [_log()] Compression: none
2025-11-12T19:50:26.144 [DEBUG] [Thread-21742] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:50:26.158 [DEBUG] [Thread-21742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:50:26.159 [DEBUG] [Thread-21742] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:50:26.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:50:26.159 [DEBUG] [Thread-21742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:50:26.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:50:26.160 [DEBUG] [Thread-21742] [transport.py] [_log()] userauth is OK
2025-11-12T19:50:26.160 [DEBUG] [Thread-21742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:50:26.160 [DEBUG] [Thread-21742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:50:26.160 [DEBUG] [Thread-21742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:50:26.160 [DEBUG] [Thread-21742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:50:26.176 [INFO] [Thread-21742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:50:26.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:50:26.823 [DEBUG] [Thread-21742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:50:26.823 [DEBUG] [Thread-21742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:50:26.823 [DEBUG] [Thread-21742] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:50:26.864 [DEBUG] [Thread-21742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:50:26.865 [DEBUG] [Thread-21742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:50:26.868 [DEBUG] [Thread-21742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:50:26.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:50:26.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:50:26.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:50:26.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:50:26.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:50:26.891 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:50:26.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:50:26.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:50:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:50:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.742793 -999.00  +20.90  21.03     30   +2.90 1 2 1 1 1    43    0 16.75 -64.82 ----- 15.2 21.0 260.7 27.4 21.6 -21.3 21.5 -20.2 21.2 -20.2 21.5 -21.1
2025-11-12T19:50:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:50:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:50:26.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.742793
2025-11-12T19:50:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:50:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:50:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:50:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:50:26.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:50:26.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:50:05', tmtdew=20.99, humidity=24.75, cloud=0.0, wind=21.79, temperature=21.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:49:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:50:26.894 [DEBUG] [Thread-21742] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:50:26.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:50:26.991 [DEBUG] [Thread-21745] [transport.py] [_log()] starting thread (client mode): 0x149450f0
2025-11-12T19:50:26.991 [DEBUG] [Thread-21745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:50:27.007 [DEBUG] [Thread-21745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:50:27.007 [INFO] [Thread-21745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:50:27.014 [DEBUG] [Thread-21745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:50:27.014 [DEBUG] [Thread-21745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:50:27.014 [DEBUG] [Thread-21745] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] client lang: <none>
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] server lang: <none>
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] kex follows: False
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] Compression: none
2025-11-12T19:50:27.015 [DEBUG] [Thread-21745] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:50:27.075 [DEBUG] [Thread-21745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:50:27.076 [DEBUG] [Thread-21745] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:50:27.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:50:27.077 [DEBUG] [Thread-21745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:50:27.078 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:50:27.131 [DEBUG] [Thread-21745] [transport.py] [_log()] userauth is OK
2025-11-12T19:50:27.131 [DEBUG] [Thread-21745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:50:27.131 [DEBUG] [Thread-21745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:50:27.131 [DEBUG] [Thread-21745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:50:27.131 [DEBUG] [Thread-21745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:50:27.156 [INFO] [Thread-21745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:50:27.156 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:50:27.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:50:28.009 [DEBUG] [Thread-21745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:50:28.009 [DEBUG] [Thread-21745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:50:28.056 [DEBUG] [Thread-21745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:50:28.056 [DEBUG] [Thread-21745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:50:28.065 [DEBUG] [Thread-21745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:50:28.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:50:28.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-11-12T19:50:28.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-11-12T19:50:28.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:50:28.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:50:28.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:50:28.097 [DEBUG] [Thread-21745] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:50:32.324 [DEBUG] [Thread-21747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:50:38.621 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:50:38.622 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:50:47.369 [DEBUG] [Thread-21748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:50:49.501 [DEBUG] [Thread-21749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:50:58.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:50:58.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:50:58.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:50:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 50, 37), 20.94, 24.75, 0.0, 25.43, 20.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:50:58.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:50:37
2025-11-12T19:50:58.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:50:59.007 [DEBUG] [Thread-21750] [transport.py] [_log()] starting thread (client mode): 0x14915f90
2025-11-12T19:50:59.007 [DEBUG] [Thread-21750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:50:59.028 [DEBUG] [Thread-21750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:50:59.028 [INFO] [Thread-21750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:50:59.031 [DEBUG] [Thread-21750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:50:59.031 [DEBUG] [Thread-21750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] client lang: <none>
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] server lang: <none>
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] kex follows: False
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] Compression: none
2025-11-12T19:50:59.032 [DEBUG] [Thread-21750] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:50:59.050 [DEBUG] [Thread-21750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:50:59.051 [DEBUG] [Thread-21750] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:50:59.052 [DEBUG] [Thread-21750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:50:59.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:50:59.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:50:59.054 [DEBUG] [Thread-21750] [transport.py] [_log()] userauth is OK
2025-11-12T19:50:59.055 [DEBUG] [Thread-21750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:50:59.055 [DEBUG] [Thread-21750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:50:59.055 [DEBUG] [Thread-21750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:50:59.055 [DEBUG] [Thread-21750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:50:59.077 [INFO] [Thread-21750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:50:59.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:50:59.707 [DEBUG] [Thread-21750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:50:59.707 [DEBUG] [Thread-21750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:50:59.708 [DEBUG] [Thread-21750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:50:59.748 [DEBUG] [Thread-21750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:50:59.749 [DEBUG] [Thread-21750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:50:59.752 [DEBUG] [Thread-21750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:50:59.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:50:59.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:50:59.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:50:59.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:50:59.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:50:59.777 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:50:59.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:50:59.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:50:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:50:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.743488 -999.00  +20.90  23.08     30   +2.90 1 2 1 1 1    36    0 16.80 -63.23 ----- 22.5 23.1 260.6 26.1 21.6 -21.4 21.5 -20.2 21.2 -20.3 21.4 -21.2
2025-11-12T19:50:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:50:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:50:59.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.743488
2025-11-12T19:50:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:50:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:50:59.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:50:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:50:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:50:59.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:50:37', tmtdew=20.94, humidity=24.75, cloud=0.0, wind=25.43, temperature=20.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:50:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:50:59.780 [DEBUG] [Thread-21750] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:50:59.865 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:50:59.877 [DEBUG] [Thread-21753] [transport.py] [_log()] starting thread (client mode): 0x14906020
2025-11-12T19:50:59.877 [DEBUG] [Thread-21753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:50:59.891 [DEBUG] [Thread-21753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:50:59.891 [INFO] [Thread-21753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:50:59.898 [DEBUG] [Thread-21753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:50:59.898 [DEBUG] [Thread-21753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:50:59.898 [DEBUG] [Thread-21753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:50:59.898 [DEBUG] [Thread-21753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:50:59.898 [DEBUG] [Thread-21753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:50:59.898 [DEBUG] [Thread-21753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:50:59.898 [DEBUG] [Thread-21753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:50:59.898 [DEBUG] [Thread-21753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] client lang: <none>
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] server lang: <none>
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] kex follows: False
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] Compression: none
2025-11-12T19:50:59.899 [DEBUG] [Thread-21753] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:50:59.953 [DEBUG] [Thread-21753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:50:59.954 [DEBUG] [Thread-21753] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:50:59.954 [DEBUG] [Thread-21753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:50:59.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:50:59.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:51:00.014 [DEBUG] [Thread-21753] [transport.py] [_log()] userauth is OK
2025-11-12T19:51:00.014 [DEBUG] [Thread-21753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:51:00.014 [DEBUG] [Thread-21753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:51:00.014 [DEBUG] [Thread-21753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:51:00.014 [DEBUG] [Thread-21753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:51:00.028 [INFO] [Thread-21753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:51:00.028 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:51:00.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:51:00.856 [DEBUG] [Thread-21753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:51:00.856 [DEBUG] [Thread-21753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:51:00.904 [DEBUG] [Thread-21753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:51:00.904 [DEBUG] [Thread-21753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:51:00.912 [DEBUG] [Thread-21753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:51:00.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:51:00.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-11-12T19:51:00.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-11-12T19:51:00.936 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:51:00.936 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:51:00.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:51:00.943 [DEBUG] [Thread-21753] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:51:02.401 [DEBUG] [Thread-21755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:51:17.443 [DEBUG] [Thread-21756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:51:30.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:51:30.966 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:51:30.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-11-12T19:51:31.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 51, 9), 20.89, 24.85, 0.0, 24.44, 21.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:51:31.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:51:09
2025-11-12T19:51:31.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:51:31.867 [DEBUG] [Thread-21757] [transport.py] [_log()] starting thread (client mode): 0x14946e90
2025-11-12T19:51:31.867 [DEBUG] [Thread-21757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:51:31.888 [DEBUG] [Thread-21757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:51:31.888 [INFO] [Thread-21757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:51:31.891 [DEBUG] [Thread-21757] [transport.py] [_log()] client lang: <none>
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] server lang: <none>
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] kex follows: False
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] Compression: none
2025-11-12T19:51:31.892 [DEBUG] [Thread-21757] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:51:31.910 [DEBUG] [Thread-21757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:51:31.910 [DEBUG] [Thread-21757] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:51:31.911 [DEBUG] [Thread-21757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:51:31.911 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:51:31.912 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:51:31.913 [DEBUG] [Thread-21757] [transport.py] [_log()] userauth is OK
2025-11-12T19:51:31.913 [DEBUG] [Thread-21757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:51:31.913 [DEBUG] [Thread-21757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:51:31.913 [DEBUG] [Thread-21757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:51:31.913 [DEBUG] [Thread-21757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:51:31.937 [INFO] [Thread-21757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:51:31.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:51:32.479 [DEBUG] [Thread-21759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:51:32.566 [DEBUG] [Thread-21757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:51:32.566 [DEBUG] [Thread-21757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:51:32.567 [DEBUG] [Thread-21757] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:51:32.607 [DEBUG] [Thread-21757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:51:32.607 [DEBUG] [Thread-21757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:51:32.609 [DEBUG] [Thread-21757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:51:32.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:51:32.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:51:32.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:51:32.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:51:32.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:51:32.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:51:32.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:51:32.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:51:32.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:51:32.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.743835 -999.00  +20.90  17.09     30   +3.00 1 2 1 1 1    33    0 16.64 -64.83 ----- 24.0 17.1 245.3 25.2 21.5 -21.5 21.4 -20.2 21.1 -20.2 21.4 -21.2
2025-11-12T19:51:32.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:51:32.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:51:32.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.743835
2025-11-12T19:51:32.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:51:32.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:51:32.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:51:32.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:51:32.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:51:32.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:51:09', tmtdew=20.89, humidity=24.85, cloud=0.0, wind=24.44, temperature=21.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:51:07.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:51:32.628 [DEBUG] [Thread-21757] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:51:32.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:51:32.716 [DEBUG] [Thread-21761] [transport.py] [_log()] starting thread (client mode): 0x14917dc0
2025-11-12T19:51:32.716 [DEBUG] [Thread-21761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:51:32.731 [DEBUG] [Thread-21761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:51:32.731 [INFO] [Thread-21761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:51:32.738 [DEBUG] [Thread-21761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] client lang: <none>
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] server lang: <none>
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] kex follows: False
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] Compression: none
2025-11-12T19:51:32.739 [DEBUG] [Thread-21761] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:51:32.799 [DEBUG] [Thread-21761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:51:32.799 [DEBUG] [Thread-21761] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:51:32.800 [DEBUG] [Thread-21761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:51:32.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:51:32.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:51:32.855 [DEBUG] [Thread-21761] [transport.py] [_log()] userauth is OK
2025-11-12T19:51:32.855 [DEBUG] [Thread-21761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:51:32.855 [DEBUG] [Thread-21761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:51:32.855 [DEBUG] [Thread-21761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:51:32.856 [DEBUG] [Thread-21761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:51:32.879 [INFO] [Thread-21761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:51:32.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:51:32.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:51:33.705 [DEBUG] [Thread-21761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:51:33.705 [DEBUG] [Thread-21761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:51:33.753 [DEBUG] [Thread-21761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:51:33.753 [DEBUG] [Thread-21761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:51:33.762 [DEBUG] [Thread-21761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:51:33.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:51:33.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-11-12T19:51:33.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-11-12T19:51:33.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:51:33.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:51:33.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:51:33.798 [DEBUG] [Thread-21761] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:51:43.452 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:51:43.453 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:51:47.512 [DEBUG] [Thread-21763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:51:49.580 [DEBUG] [Thread-21764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:52:02.574 [DEBUG] [Thread-21765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:52:03.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:52:03.811 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:52:03.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-11-12T19:52:04.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 51, 41), 20.78, 24.84, 0.0, 27.14, 20.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:52:04.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:51:41
2025-11-12T19:52:04.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:52:04.715 [DEBUG] [Thread-21766] [transport.py] [_log()] starting thread (client mode): 0x149235e0
2025-11-12T19:52:04.715 [DEBUG] [Thread-21766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:52:04.735 [DEBUG] [Thread-21766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:52:04.735 [INFO] [Thread-21766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:52:04.738 [DEBUG] [Thread-21766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] client lang: <none>
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] server lang: <none>
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] kex follows: False
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:52:04.739 [DEBUG] [Thread-21766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:52:04.740 [DEBUG] [Thread-21766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:52:04.740 [DEBUG] [Thread-21766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:52:04.740 [DEBUG] [Thread-21766] [transport.py] [_log()] Compression: none
2025-11-12T19:52:04.740 [DEBUG] [Thread-21766] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:52:04.761 [DEBUG] [Thread-21766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:52:04.761 [DEBUG] [Thread-21766] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:52:04.762 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:52:04.763 [DEBUG] [Thread-21766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:52:04.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:52:04.805 [DEBUG] [Thread-21766] [transport.py] [_log()] userauth is OK
2025-11-12T19:52:04.805 [DEBUG] [Thread-21766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:52:04.805 [DEBUG] [Thread-21766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:52:04.805 [DEBUG] [Thread-21766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:52:04.805 [DEBUG] [Thread-21766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:52:04.836 [INFO] [Thread-21766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:52:04.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:52:05.497 [DEBUG] [Thread-21766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:52:05.497 [DEBUG] [Thread-21766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:52:05.497 [DEBUG] [Thread-21766] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:52:05.538 [DEBUG] [Thread-21766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:52:05.539 [DEBUG] [Thread-21766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:52:05.542 [DEBUG] [Thread-21766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:52:05.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:52:05.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:52:05.555 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:52:05.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:52:05.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:52:05.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:52:05.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:52:05.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:52:05.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:52:05.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.744182 -999.00  +20.90  19.62     30   +3.00 1 2 1 1 1    30    0 16.51 -74.21 ----- 17.5 19.6 250.2 29.7 21.5 -21.4 21.4 -20.2 21.1 -20.2 21.4 -21.3
2025-11-12T19:52:05.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:52:05.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:52:05.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.744182
2025-11-12T19:52:05.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:52:05.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:51:41', tmtdew=20.78, humidity=24.84, cloud=0.0, wind=27.14, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:51:37.325', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:52:05.567 [DEBUG] [Thread-21766] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:52:05.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:52:05.663 [DEBUG] [Thread-21769] [transport.py] [_log()] starting thread (client mode): 0x149a7940
2025-11-12T19:52:05.663 [DEBUG] [Thread-21769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:52:05.678 [DEBUG] [Thread-21769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:52:05.678 [INFO] [Thread-21769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] client lang: <none>
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] server lang: <none>
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] kex follows: False
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:52:05.685 [DEBUG] [Thread-21769] [transport.py] [_log()] Compression: none
2025-11-12T19:52:05.686 [DEBUG] [Thread-21769] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:52:05.742 [DEBUG] [Thread-21769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:52:05.743 [DEBUG] [Thread-21769] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:52:05.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:52:05.744 [DEBUG] [Thread-21769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:52:05.745 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:52:05.799 [DEBUG] [Thread-21769] [transport.py] [_log()] userauth is OK
2025-11-12T19:52:05.800 [DEBUG] [Thread-21769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:52:05.800 [DEBUG] [Thread-21769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:52:05.800 [DEBUG] [Thread-21769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:52:05.800 [DEBUG] [Thread-21769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:52:05.820 [INFO] [Thread-21769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:52:05.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:52:05.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:52:06.659 [DEBUG] [Thread-21769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:52:06.659 [DEBUG] [Thread-21769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:52:06.707 [DEBUG] [Thread-21769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:52:06.708 [DEBUG] [Thread-21769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:52:06.717 [DEBUG] [Thread-21769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:52:06.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:52:06.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-11-12T19:52:06.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-11-12T19:52:06.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:52:06.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:52:06.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:52:06.752 [DEBUG] [Thread-21769] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:52:17.607 [DEBUG] [Thread-21771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:52:32.649 [DEBUG] [Thread-21772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:52:36.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:52:36.748 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:52:36.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-11-12T19:52:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 52, 13), 20.77, 24.87, 0.0, 26.04, 20.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:52:37.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:52:13
2025-11-12T19:52:37.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:52:37.652 [DEBUG] [Thread-21773] [transport.py] [_log()] starting thread (client mode): 0x11f02d10
2025-11-12T19:52:37.652 [DEBUG] [Thread-21773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:52:37.673 [DEBUG] [Thread-21773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:52:37.673 [INFO] [Thread-21773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:52:37.676 [DEBUG] [Thread-21773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:52:37.676 [DEBUG] [Thread-21773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:52:37.676 [DEBUG] [Thread-21773] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:52:37.676 [DEBUG] [Thread-21773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:52:37.676 [DEBUG] [Thread-21773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:52:37.676 [DEBUG] [Thread-21773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:52:37.676 [DEBUG] [Thread-21773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:52:37.676 [DEBUG] [Thread-21773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] client lang: <none>
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] server lang: <none>
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] kex follows: False
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] Compression: none
2025-11-12T19:52:37.677 [DEBUG] [Thread-21773] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:52:37.694 [DEBUG] [Thread-21773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:52:37.695 [DEBUG] [Thread-21773] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:52:37.695 [DEBUG] [Thread-21773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:52:37.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:52:37.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:52:37.698 [DEBUG] [Thread-21773] [transport.py] [_log()] userauth is OK
2025-11-12T19:52:37.698 [DEBUG] [Thread-21773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:52:37.698 [DEBUG] [Thread-21773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:52:37.698 [DEBUG] [Thread-21773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:52:37.698 [DEBUG] [Thread-21773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:52:37.721 [INFO] [Thread-21773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:52:37.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:52:38.338 [DEBUG] [Thread-21773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:52:38.338 [DEBUG] [Thread-21773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:52:38.338 [DEBUG] [Thread-21773] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:52:38.378 [DEBUG] [Thread-21773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:52:38.379 [DEBUG] [Thread-21773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:52:38.382 [DEBUG] [Thread-21773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:52:38.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:52:38.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:52:38.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:52:38.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:52:38.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:52:38.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:52:38.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:52:38.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:52:38.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:52:38.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.744529 -999.00  +20.80  23.66     30   +3.00 1 2 1 1 1    27    0 15.80 -78.25 ----- 21.6 23.7 267.8 32.2 21.5 -21.5 21.4 -20.2 21.1 -20.2 21.4 -21.2
2025-11-12T19:52:38.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:52:38.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:52:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.744529
2025-11-12T19:52:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:52:38.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:52:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:52:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:52:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:52:38.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:52:13', tmtdew=20.77, humidity=24.87, cloud=0.0, wind=26.04, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:52:07.306', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:52:38.409 [DEBUG] [Thread-21773] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:52:38.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:52:38.506 [DEBUG] [Thread-21776] [transport.py] [_log()] starting thread (client mode): 0x11f01330
2025-11-12T19:52:38.506 [DEBUG] [Thread-21776] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:52:38.521 [DEBUG] [Thread-21776] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:52:38.521 [INFO] [Thread-21776] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:52:38.529 [DEBUG] [Thread-21776] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:52:38.529 [DEBUG] [Thread-21776] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:52:38.529 [DEBUG] [Thread-21776] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:52:38.529 [DEBUG] [Thread-21776] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:52:38.529 [DEBUG] [Thread-21776] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:52:38.530 [DEBUG] [Thread-21776] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:52:38.530 [DEBUG] [Thread-21776] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:52:38.530 [DEBUG] [Thread-21776] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:52:38.530 [DEBUG] [Thread-21776] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:52:38.530 [DEBUG] [Thread-21776] [transport.py] [_log()] client lang: <none>
2025-11-12T19:52:38.530 [DEBUG] [Thread-21776] [transport.py] [_log()] server lang: <none>
2025-11-12T19:52:38.530 [DEBUG] [Thread-21776] [transport.py] [_log()] kex follows: False
2025-11-12T19:52:38.530 [DEBUG] [Thread-21776] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:52:38.531 [DEBUG] [Thread-21776] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:52:38.531 [DEBUG] [Thread-21776] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:52:38.531 [DEBUG] [Thread-21776] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:52:38.531 [DEBUG] [Thread-21776] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:52:38.531 [DEBUG] [Thread-21776] [transport.py] [_log()] Compression: none
2025-11-12T19:52:38.531 [DEBUG] [Thread-21776] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:52:38.587 [DEBUG] [Thread-21776] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:52:38.588 [DEBUG] [Thread-21776] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:52:38.589 [DEBUG] [Thread-21776] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:52:38.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:52:38.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:52:38.643 [DEBUG] [Thread-21776] [transport.py] [_log()] userauth is OK
2025-11-12T19:52:38.643 [DEBUG] [Thread-21776] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:52:38.643 [DEBUG] [Thread-21776] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:52:38.643 [DEBUG] [Thread-21776] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:52:38.643 [DEBUG] [Thread-21776] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:52:38.666 [INFO] [Thread-21776] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:52:38.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:52:38.668 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:52:39.519 [DEBUG] [Thread-21776] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:52:39.519 [DEBUG] [Thread-21776] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:52:39.567 [DEBUG] [Thread-21776] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:52:39.567 [DEBUG] [Thread-21776] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:52:39.576 [DEBUG] [Thread-21776] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:52:39.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:52: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')
2025-11-12T19:52:39.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:52:39.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:52:39.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:52:39.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:52:39.613 [DEBUG] [Thread-21776] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:52:47.683 [DEBUG] [Thread-21778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:52:49.639 [DEBUG] [Thread-21779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:52:49.746 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:52:49.748 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:53:02.729 [DEBUG] [Thread-21780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:53:09.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:53:09.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:53:09.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-11-12T19:53:10.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 52, 45), 20.76, 24.89, 0.0, 24.51, 20.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:53:10.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:52:45
2025-11-12T19:53:10.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:53:10.517 [DEBUG] [Thread-21781] [transport.py] [_log()] starting thread (client mode): 0x149a4e50
2025-11-12T19:53:10.517 [DEBUG] [Thread-21781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:53:10.537 [DEBUG] [Thread-21781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:53:10.538 [INFO] [Thread-21781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:53:10.540 [DEBUG] [Thread-21781] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:53:10.540 [DEBUG] [Thread-21781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:53:10.540 [DEBUG] [Thread-21781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] client lang: <none>
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] server lang: <none>
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] kex follows: False
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] Compression: none
2025-11-12T19:53:10.541 [DEBUG] [Thread-21781] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:53:10.554 [DEBUG] [Thread-21781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:53:10.555 [DEBUG] [Thread-21781] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:53:10.555 [DEBUG] [Thread-21781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:53:10.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:53:10.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:53:10.557 [DEBUG] [Thread-21781] [transport.py] [_log()] userauth is OK
2025-11-12T19:53:10.557 [DEBUG] [Thread-21781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:53:10.557 [DEBUG] [Thread-21781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:53:10.557 [DEBUG] [Thread-21781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:53:10.557 [DEBUG] [Thread-21781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:53:10.589 [INFO] [Thread-21781] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:53:10.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:53:11.242 [DEBUG] [Thread-21781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:53:11.243 [DEBUG] [Thread-21781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:53:11.243 [DEBUG] [Thread-21781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:53:11.283 [DEBUG] [Thread-21781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:53:11.284 [DEBUG] [Thread-21781] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:53:11.287 [DEBUG] [Thread-21781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:53:11.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:53:11.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:53:11.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:53:11.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:53:11.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:53:11.309 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:53:11.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:53:11.309 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:53:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:53:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.744877 -999.00  +20.80  17.66     30   +2.90 1 2 1 1 1    25    0 16.93 -69.52 ----- 16.0 17.7 258.4 25.6 21.4 -21.4 21.4 -20.3 21.1 -20.3 21.3 -21.2
2025-11-12T19:53:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:53:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:53:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.744877
2025-11-12T19:53:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:53:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:53:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:53:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:53:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:53:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:52:45', tmtdew=20.76, humidity=24.89, cloud=0.0, wind=24.51, temperature=20.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:52:37.373', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:53:11.312 [DEBUG] [Thread-21781] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:53:11.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:53:11.406 [DEBUG] [Thread-21784] [transport.py] [_log()] starting thread (client mode): 0x11f01480
2025-11-12T19:53:11.406 [DEBUG] [Thread-21784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:53:11.421 [DEBUG] [Thread-21784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:53:11.421 [INFO] [Thread-21784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:53:11.428 [DEBUG] [Thread-21784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] client lang: <none>
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] server lang: <none>
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] kex follows: False
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] Compression: none
2025-11-12T19:53:11.429 [DEBUG] [Thread-21784] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:53:11.487 [DEBUG] [Thread-21784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:53:11.487 [DEBUG] [Thread-21784] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:53:11.488 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:53:11.489 [DEBUG] [Thread-21784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:53:11.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:53:11.543 [DEBUG] [Thread-21784] [transport.py] [_log()] userauth is OK
2025-11-12T19:53:11.543 [DEBUG] [Thread-21784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:53:11.543 [DEBUG] [Thread-21784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:53:11.543 [DEBUG] [Thread-21784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:53:11.544 [DEBUG] [Thread-21784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:53:11.565 [INFO] [Thread-21784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:53:11.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:53:11.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:53:12.403 [DEBUG] [Thread-21784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:53:12.403 [DEBUG] [Thread-21784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:53:12.450 [DEBUG] [Thread-21784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:53:12.450 [DEBUG] [Thread-21784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:53:12.460 [DEBUG] [Thread-21784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:53:12.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:53:12.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-11-12T19:53:12.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-11-12T19:53:12.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:53:12.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:53:12.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:53:12.495 [DEBUG] [Thread-21784] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:53:17.765 [DEBUG] [Thread-21786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:53:32.816 [DEBUG] [Thread-21787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:53:42.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:53:42.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:53:42.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-11-12T19:53:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 53, 17), 20.75, 24.9, 0.0, 27.49, 20.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:53:43.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:53:17
2025-11-12T19:53:43.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:53:43.403 [DEBUG] [Thread-21788] [transport.py] [_log()] starting thread (client mode): 0x14922380
2025-11-12T19:53:43.403 [DEBUG] [Thread-21788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:53:43.423 [DEBUG] [Thread-21788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:53:43.423 [INFO] [Thread-21788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] client lang: <none>
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] server lang: <none>
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] kex follows: False
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] Compression: none
2025-11-12T19:53:43.427 [DEBUG] [Thread-21788] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:53:43.444 [DEBUG] [Thread-21788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:53:43.444 [DEBUG] [Thread-21788] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:53:43.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:53:43.445 [DEBUG] [Thread-21788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:53:43.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:53:43.489 [DEBUG] [Thread-21788] [transport.py] [_log()] userauth is OK
2025-11-12T19:53:43.489 [DEBUG] [Thread-21788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:53:43.489 [DEBUG] [Thread-21788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:53:43.489 [DEBUG] [Thread-21788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:53:43.489 [DEBUG] [Thread-21788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:53:43.527 [INFO] [Thread-21788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:53:43.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:53:44.182 [DEBUG] [Thread-21788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:53:44.183 [DEBUG] [Thread-21788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:53:44.183 [DEBUG] [Thread-21788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:53:44.223 [DEBUG] [Thread-21788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:53:44.224 [DEBUG] [Thread-21788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:53:44.226 [DEBUG] [Thread-21788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:53:44.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:53:44.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:53:44.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:53:44.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:53:44.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:53:44.249 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:53:44.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:53:44.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:53:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:53:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.745224 -999.00  +20.70  15.80     30   +2.90 1 2 1 1 1    23    0 16.21 -74.81 ----- 24.7 15.8 266.2 25.3 21.4 -21.5 21.4 -20.2 21.1 -20.3 21.4 -21.3
2025-11-12T19:53:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:53:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:53:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.745224
2025-11-12T19:53:44.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:53:44.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:53:44.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:53:44.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:53:44.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:53:44.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:53:17', tmtdew=20.75, humidity=24.9, cloud=0.0, wind=27.49, temperature=20.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:53:07.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:53:44.252 [DEBUG] [Thread-21788] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:53:44.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:53:44.354 [DEBUG] [Thread-21791] [transport.py] [_log()] starting thread (client mode): 0x149040d0
2025-11-12T19:53:44.354 [DEBUG] [Thread-21791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:53:44.369 [DEBUG] [Thread-21791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:53:44.369 [INFO] [Thread-21791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:53:44.377 [DEBUG] [Thread-21791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:53:44.377 [DEBUG] [Thread-21791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:53:44.377 [DEBUG] [Thread-21791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:53:44.377 [DEBUG] [Thread-21791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:53:44.377 [DEBUG] [Thread-21791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:53:44.377 [DEBUG] [Thread-21791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:53:44.378 [DEBUG] [Thread-21791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:53:44.378 [DEBUG] [Thread-21791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:53:44.378 [DEBUG] [Thread-21791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:53:44.378 [DEBUG] [Thread-21791] [transport.py] [_log()] client lang: <none>
2025-11-12T19:53:44.378 [DEBUG] [Thread-21791] [transport.py] [_log()] server lang: <none>
2025-11-12T19:53:44.378 [DEBUG] [Thread-21791] [transport.py] [_log()] kex follows: False
2025-11-12T19:53:44.378 [DEBUG] [Thread-21791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:53:44.378 [DEBUG] [Thread-21791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:53:44.379 [DEBUG] [Thread-21791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:53:44.379 [DEBUG] [Thread-21791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:53:44.379 [DEBUG] [Thread-21791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:53:44.379 [DEBUG] [Thread-21791] [transport.py] [_log()] Compression: none
2025-11-12T19:53:44.379 [DEBUG] [Thread-21791] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:53:44.436 [DEBUG] [Thread-21791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:53:44.437 [DEBUG] [Thread-21791] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:53:44.437 [DEBUG] [Thread-21791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:53:44.437 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:53:44.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:53:44.495 [DEBUG] [Thread-21791] [transport.py] [_log()] userauth is OK
2025-11-12T19:53:44.495 [DEBUG] [Thread-21791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:53:44.495 [DEBUG] [Thread-21791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:53:44.496 [DEBUG] [Thread-21791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:53:44.496 [DEBUG] [Thread-21791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:53:44.515 [INFO] [Thread-21791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:53:44.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:53:44.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:53:45.366 [DEBUG] [Thread-21791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:53:45.366 [DEBUG] [Thread-21791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:53:45.415 [DEBUG] [Thread-21791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:53:45.415 [DEBUG] [Thread-21791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:53:45.424 [DEBUG] [Thread-21791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:53:45.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:53:45.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')
2025-11-12T19:53:45.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-11-12T19:53:45.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:53:45.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:53:45.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:53:45.458 [DEBUG] [Thread-21791] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:53:47.846 [DEBUG] [Thread-21793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:53:49.700 [DEBUG] [Thread-21794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:53:54.671 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:53:54.672 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:54:02.895 [DEBUG] [Thread-21795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:54:15.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:54:15.481 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:54:15.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:54:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 53, 49), 20.66, 24.97, 0.0, 30.74, 20.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:54:16.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:53:49
2025-11-12T19:54:16.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:54:16.433 [DEBUG] [Thread-21796] [transport.py] [_log()] starting thread (client mode): 0x149a7ac0
2025-11-12T19:54:16.434 [DEBUG] [Thread-21796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:54:16.457 [DEBUG] [Thread-21796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:54:16.457 [INFO] [Thread-21796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] client lang: <none>
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] server lang: <none>
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] kex follows: False
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] Compression: none
2025-11-12T19:54:16.460 [DEBUG] [Thread-21796] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:54:16.474 [DEBUG] [Thread-21796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:54:16.474 [DEBUG] [Thread-21796] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:54:16.474 [DEBUG] [Thread-21796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:54:16.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:54:16.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:54:16.475 [DEBUG] [Thread-21796] [transport.py] [_log()] userauth is OK
2025-11-12T19:54:16.475 [DEBUG] [Thread-21796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:54:16.475 [DEBUG] [Thread-21796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:54:16.475 [DEBUG] [Thread-21796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:54:16.475 [DEBUG] [Thread-21796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:54:16.493 [INFO] [Thread-21796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:54:16.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:54:17.093 [DEBUG] [Thread-21796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:54:17.093 [DEBUG] [Thread-21796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:54:17.093 [DEBUG] [Thread-21796] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:54:17.134 [DEBUG] [Thread-21796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:54:17.134 [DEBUG] [Thread-21796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:54:17.136 [DEBUG] [Thread-21796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:54:17.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:54:17.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:54:17.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:54:17.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:54:17.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:54:17.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:54:17.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.745571 -999.00  +20.70  21.87     31   +3.00 1 2 1 1 1    21    0 16.50 -75.21 ----- 20.5 21.9 269.4 31.2 21.4 -21.5 21.4 -20.3 21.0 -20.3 21.3 -21.3
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.745571
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:54:17.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:53:49', tmtdew=20.66, humidity=24.97, cloud=0.0, wind=30.74, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:53:37.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:54:17.155 [DEBUG] [Thread-21796] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:54:17.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:54:17.239 [DEBUG] [Thread-21799] [transport.py] [_log()] starting thread (client mode): 0x14923be0
2025-11-12T19:54:17.239 [DEBUG] [Thread-21799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:54:17.254 [DEBUG] [Thread-21799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:54:17.254 [INFO] [Thread-21799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:54:17.261 [DEBUG] [Thread-21799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] client lang: <none>
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] server lang: <none>
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] kex follows: False
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] Compression: none
2025-11-12T19:54:17.262 [DEBUG] [Thread-21799] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:54:17.317 [DEBUG] [Thread-21799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:54:17.318 [DEBUG] [Thread-21799] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:54:17.318 [DEBUG] [Thread-21799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:54:17.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:54:17.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:54:17.374 [DEBUG] [Thread-21799] [transport.py] [_log()] userauth is OK
2025-11-12T19:54:17.375 [DEBUG] [Thread-21799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:54:17.375 [DEBUG] [Thread-21799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:54:17.375 [DEBUG] [Thread-21799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:54:17.375 [DEBUG] [Thread-21799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:54:17.392 [INFO] [Thread-21799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:54:17.393 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:54:17.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:54:17.929 [DEBUG] [Thread-21801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:54:18.225 [DEBUG] [Thread-21799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:54:18.225 [DEBUG] [Thread-21799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:54:18.273 [DEBUG] [Thread-21799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:54:18.273 [DEBUG] [Thread-21799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:54:18.281 [DEBUG] [Thread-21799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:54:18.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:54:18.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-11-12T19:54:18.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-11-12T19:54:18.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:54:18.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:54:18.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:54:18.314 [DEBUG] [Thread-21799] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:54:32.969 [DEBUG] [Thread-21802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:54:48.006 [DEBUG] [Thread-21803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:54:48.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:54:48.335 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:54:48.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-11-12T19:54:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 54, 21), 20.63, 25.02, 0.0, 30.45, 20.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:54:48.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:54:21
2025-11-12T19:54:49.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:54:49.239 [DEBUG] [Thread-21804] [transport.py] [_log()] starting thread (client mode): 0x14921960
2025-11-12T19:54:49.239 [DEBUG] [Thread-21804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:54:49.258 [DEBUG] [Thread-21804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:54:49.258 [INFO] [Thread-21804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:54:49.261 [DEBUG] [Thread-21804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:54:49.261 [DEBUG] [Thread-21804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:54:49.261 [DEBUG] [Thread-21804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:54:49.261 [DEBUG] [Thread-21804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] client lang: <none>
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] server lang: <none>
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] kex follows: False
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] Compression: none
2025-11-12T19:54:49.262 [DEBUG] [Thread-21804] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:54:49.279 [DEBUG] [Thread-21804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:54:49.280 [DEBUG] [Thread-21804] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:54:49.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:54:49.281 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:54:49.282 [DEBUG] [Thread-21804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:54:49.282 [DEBUG] [Thread-21804] [transport.py] [_log()] userauth is OK
2025-11-12T19:54:49.282 [DEBUG] [Thread-21804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:54:49.282 [DEBUG] [Thread-21804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:54:49.283 [DEBUG] [Thread-21804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:54:49.283 [DEBUG] [Thread-21804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:54:49.307 [INFO] [Thread-21804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:54:49.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:54:49.768 [DEBUG] [Thread-21806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:54:49.939 [DEBUG] [Thread-21804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:54:49.940 [DEBUG] [Thread-21804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:54:49.940 [DEBUG] [Thread-21804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:54:49.980 [DEBUG] [Thread-21804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:54:49.981 [DEBUG] [Thread-21804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:54:49.984 [DEBUG] [Thread-21804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:54:49.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:54:49.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:54:49.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:54:50.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:54:50.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:54:50.008 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:54:50.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:54:50.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:54:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:54:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.745918 -999.00  +20.70  17.64     31   +3.00 1 2 1 1 1    19    0 16.44 -73.70 ----- 19.9 17.6 266.0 36.4 21.4 -21.5 21.3 -20.3 21.0 -20.4 21.3 -21.3
2025-11-12T19:54:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:54:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:54:50.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.745918
2025-11-12T19:54:50.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:54:50.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:54:50.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:54:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:54:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:54:50.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:54:21', tmtdew=20.63, humidity=25.02, cloud=0.0, wind=30.45, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:54:07.315', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:54:50.011 [DEBUG] [Thread-21804] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:54:50.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:54:50.106 [DEBUG] [Thread-21808] [transport.py] [_log()] starting thread (client mode): 0x14922b90
2025-11-12T19:54:50.106 [DEBUG] [Thread-21808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:54:50.121 [DEBUG] [Thread-21808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:54:50.121 [INFO] [Thread-21808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:54:50.128 [DEBUG] [Thread-21808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] client lang: <none>
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] server lang: <none>
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] kex follows: False
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:54:50.129 [DEBUG] [Thread-21808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:54:50.130 [DEBUG] [Thread-21808] [transport.py] [_log()] Compression: none
2025-11-12T19:54:50.130 [DEBUG] [Thread-21808] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:54:50.187 [DEBUG] [Thread-21808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:54:50.188 [DEBUG] [Thread-21808] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:54:50.189 [DEBUG] [Thread-21808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:54:50.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:54:50.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:54:50.242 [DEBUG] [Thread-21808] [transport.py] [_log()] userauth is OK
2025-11-12T19:54:50.243 [DEBUG] [Thread-21808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:54:50.243 [DEBUG] [Thread-21808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:54:50.243 [DEBUG] [Thread-21808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:54:50.243 [DEBUG] [Thread-21808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:54:50.262 [INFO] [Thread-21808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:54:50.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:54:50.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:54:51.121 [DEBUG] [Thread-21808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:54:51.121 [DEBUG] [Thread-21808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:54:51.168 [DEBUG] [Thread-21808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:54:51.168 [DEBUG] [Thread-21808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:54:51.177 [DEBUG] [Thread-21808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:54:51.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:54:51.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-11-12T19:54:51.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-11-12T19:54:51.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:54:51.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:54:51.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:54:51.212 [DEBUG] [Thread-21808] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:54:59.627 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:54:59.628 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:55:03.035 [DEBUG] [Thread-21810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:55:18.087 [DEBUG] [Thread-21811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:55:21.224 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:55:21.224 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:55:21.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:55:21.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 54, 53), 20.63, 25.52, 0.0, 25.13, 20.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:55:21.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:54:53
2025-11-12T19:55:21.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:55:22.124 [DEBUG] [Thread-21812] [transport.py] [_log()] starting thread (client mode): 0x14920760
2025-11-12T19:55:22.124 [DEBUG] [Thread-21812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:55:22.145 [DEBUG] [Thread-21812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:55:22.145 [INFO] [Thread-21812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:55:22.146 [DEBUG] [Thread-21812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:55:22.146 [DEBUG] [Thread-21812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] client lang: <none>
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] server lang: <none>
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] kex follows: False
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:55:22.147 [DEBUG] [Thread-21812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:55:22.148 [DEBUG] [Thread-21812] [transport.py] [_log()] Compression: none
2025-11-12T19:55:22.148 [DEBUG] [Thread-21812] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:55:22.163 [DEBUG] [Thread-21812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:55:22.164 [DEBUG] [Thread-21812] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:55:22.165 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:55:22.165 [DEBUG] [Thread-21812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:55:22.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:55:22.168 [DEBUG] [Thread-21812] [transport.py] [_log()] userauth is OK
2025-11-12T19:55:22.168 [DEBUG] [Thread-21812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:55:22.168 [DEBUG] [Thread-21812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:55:22.168 [DEBUG] [Thread-21812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:55:22.168 [DEBUG] [Thread-21812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:55:22.193 [INFO] [Thread-21812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:55:22.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:55:22.854 [DEBUG] [Thread-21812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:55:22.855 [DEBUG] [Thread-21812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:55:22.855 [DEBUG] [Thread-21812] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:55:22.895 [DEBUG] [Thread-21812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:55:22.896 [DEBUG] [Thread-21812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:55:22.899 [DEBUG] [Thread-21812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:55:22.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:55:22.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:55:22.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:55:22.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:55:22.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:55:22.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:55:22.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:55:22.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:55:22.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:55:22.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.746266 -999.00  +20.70  26.27     31   +3.00 1 2 1 1 1    17    0 16.31 -72.77 ----- 19.2 26.3 271.7 31.1 21.4 -21.6 21.3 -20.3 21.0 -20.3 21.3 -21.3
2025-11-12T19:55:22.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:55:22.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:55:22.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.746266
2025-11-12T19:55:22.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:55:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:55:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:55:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:55:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:55:22.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:54:53', tmtdew=20.63, humidity=25.52, cloud=0.0, wind=25.13, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:54:37.382', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:55:22.925 [DEBUG] [Thread-21812] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:55:23.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:55:23.015 [DEBUG] [Thread-21815] [transport.py] [_log()] starting thread (client mode): 0x14907520
2025-11-12T19:55:23.015 [DEBUG] [Thread-21815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:55:23.030 [DEBUG] [Thread-21815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:55:23.030 [INFO] [Thread-21815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:55:23.037 [DEBUG] [Thread-21815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:55:23.037 [DEBUG] [Thread-21815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:55:23.037 [DEBUG] [Thread-21815] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:55:23.037 [DEBUG] [Thread-21815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:55:23.037 [DEBUG] [Thread-21815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] client lang: <none>
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] server lang: <none>
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] kex follows: False
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] Compression: none
2025-11-12T19:55:23.038 [DEBUG] [Thread-21815] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:55:23.095 [DEBUG] [Thread-21815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:55:23.095 [DEBUG] [Thread-21815] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:55:23.096 [DEBUG] [Thread-21815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:55:23.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:55:23.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:55:23.151 [DEBUG] [Thread-21815] [transport.py] [_log()] userauth is OK
2025-11-12T19:55:23.151 [DEBUG] [Thread-21815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:55:23.151 [DEBUG] [Thread-21815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:55:23.152 [DEBUG] [Thread-21815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:55:23.152 [DEBUG] [Thread-21815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:55:23.170 [INFO] [Thread-21815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:55:23.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:55:23.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:55:24.009 [DEBUG] [Thread-21815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:55:24.009 [DEBUG] [Thread-21815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:55:24.057 [DEBUG] [Thread-21815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:55:24.057 [DEBUG] [Thread-21815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:55:24.067 [DEBUG] [Thread-21815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:55:24.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:55:24.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-11-12T19:55:24.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-11-12T19:55:24.099 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:55:24.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:55:24.099 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:55:24.108 [DEBUG] [Thread-21815] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:55:33.117 [DEBUG] [Thread-21817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:55:48.156 [DEBUG] [Thread-21818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:55:49.824 [DEBUG] [Thread-21819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:55:54.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:55:54.110 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:55:54.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:55:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 55, 25), 20.62, 25.53, 0.0, 24.31, 20.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:55:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:55:25
2025-11-12T19:55:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:55:54.997 [DEBUG] [Thread-21820] [transport.py] [_log()] starting thread (client mode): 0x11f113c0
2025-11-12T19:55:54.997 [DEBUG] [Thread-21820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:55:55.018 [DEBUG] [Thread-21820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:55:55.018 [INFO] [Thread-21820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:55:55.021 [DEBUG] [Thread-21820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:55:55.021 [DEBUG] [Thread-21820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:55:55.021 [DEBUG] [Thread-21820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:55:55.021 [DEBUG] [Thread-21820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:55:55.021 [DEBUG] [Thread-21820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:55:55.021 [DEBUG] [Thread-21820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] client lang: <none>
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] server lang: <none>
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] kex follows: False
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] Compression: none
2025-11-12T19:55:55.022 [DEBUG] [Thread-21820] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:55:55.040 [DEBUG] [Thread-21820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:55:55.040 [DEBUG] [Thread-21820] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:55:55.041 [DEBUG] [Thread-21820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:55:55.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:55:55.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:55:55.043 [DEBUG] [Thread-21820] [transport.py] [_log()] userauth is OK
2025-11-12T19:55:55.043 [DEBUG] [Thread-21820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:55:55.043 [DEBUG] [Thread-21820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:55:55.043 [DEBUG] [Thread-21820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:55:55.043 [DEBUG] [Thread-21820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:55:55.067 [INFO] [Thread-21820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:55:55.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:55:55.702 [DEBUG] [Thread-21820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:55:55.702 [DEBUG] [Thread-21820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:55:55.703 [DEBUG] [Thread-21820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:55:55.743 [DEBUG] [Thread-21820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:55:55.744 [DEBUG] [Thread-21820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:55:55.746 [DEBUG] [Thread-21820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:55:55.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:55:55.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:55:55.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:55:55.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:55:55.767 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:55:55.769 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:55:55.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:55:55.769 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:55:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:55:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.746960 -999.00  +20.70  22.69     31   +3.10 1 2 1 1 1    14    0 16.63 -75.44 ----- 18.0 22.7 259.2 28.3 21.3 -21.4 21.3 -20.3 21.0 -20.2 21.2 -21.2
2025-11-12T19:55:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:55:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:55:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.746960
2025-11-12T19:55:55.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:55:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:55:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:55:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:55:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:55:55.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:55:25', tmtdew=20.62, humidity=25.53, cloud=0.0, wind=24.31, temperature=20.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:55:37.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:55:55.772 [DEBUG] [Thread-21820] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:55:55.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:55:55.867 [DEBUG] [Thread-21823] [transport.py] [_log()] starting thread (client mode): 0x14907460
2025-11-12T19:55:55.867 [DEBUG] [Thread-21823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:55:55.885 [DEBUG] [Thread-21823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:55:55.885 [INFO] [Thread-21823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:55:55.892 [DEBUG] [Thread-21823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:55:55.892 [DEBUG] [Thread-21823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:55:55.892 [DEBUG] [Thread-21823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] client lang: <none>
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] server lang: <none>
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] kex follows: False
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] Compression: none
2025-11-12T19:55:55.893 [DEBUG] [Thread-21823] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:55:55.952 [DEBUG] [Thread-21823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:55:55.952 [DEBUG] [Thread-21823] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:55:55.952 [DEBUG] [Thread-21823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:55:55.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:55:55.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:55:56.010 [DEBUG] [Thread-21823] [transport.py] [_log()] userauth is OK
2025-11-12T19:55:56.010 [DEBUG] [Thread-21823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:55:56.010 [DEBUG] [Thread-21823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:55:56.010 [DEBUG] [Thread-21823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:55:56.010 [DEBUG] [Thread-21823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:55:56.026 [INFO] [Thread-21823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:55:56.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:55:56.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:55:56.865 [DEBUG] [Thread-21823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:55:56.865 [DEBUG] [Thread-21823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:55:56.913 [DEBUG] [Thread-21823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:55:56.914 [DEBUG] [Thread-21823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:55:56.923 [DEBUG] [Thread-21823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:55:56.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:55:56.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:55:56.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-11-12T19:55:56.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:55:56.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:55:56.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:55:56.959 [DEBUG] [Thread-21823] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:56:03.193 [DEBUG] [Thread-21825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:56:06.062 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:56:06.063 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:56:18.243 [DEBUG] [Thread-21826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:56:26.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:56:26.960 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:56:26.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-11-12T19:56:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 55, 57), 20.51, 25.63, 0.0, 26.8, 20.85, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:56:27.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:55:57
2025-11-12T19:56:27.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:56:27.846 [DEBUG] [Thread-21827] [transport.py] [_log()] starting thread (client mode): 0x14922d40
2025-11-12T19:56:27.846 [DEBUG] [Thread-21827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:56:27.866 [DEBUG] [Thread-21827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:56:27.866 [INFO] [Thread-21827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] client lang: <none>
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] server lang: <none>
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] kex follows: False
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] Compression: none
2025-11-12T19:56:27.870 [DEBUG] [Thread-21827] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:56:27.888 [DEBUG] [Thread-21827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:56:27.889 [DEBUG] [Thread-21827] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:56:27.889 [DEBUG] [Thread-21827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:56:27.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:56:27.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:56:27.891 [DEBUG] [Thread-21827] [transport.py] [_log()] userauth is OK
2025-11-12T19:56:27.891 [DEBUG] [Thread-21827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:56:27.891 [DEBUG] [Thread-21827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:56:27.891 [DEBUG] [Thread-21827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:56:27.891 [DEBUG] [Thread-21827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:56:27.907 [INFO] [Thread-21827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:56:27.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:56:28.546 [DEBUG] [Thread-21827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:56:28.546 [DEBUG] [Thread-21827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:56:28.547 [DEBUG] [Thread-21827] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:56:28.587 [DEBUG] [Thread-21827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:56:28.587 [DEBUG] [Thread-21827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:56:28.590 [DEBUG] [Thread-21827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:56:28.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:56:28.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:56:28.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:56:28.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:56:28.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:56:28.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:56:28.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:56:28.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:56:28.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:56:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.747307 -999.00  +20.70  16.59     31   +3.10 1 2 1 1 1    13    0 16.27 -74.45 ----- 18.8 16.6 269.2 26.3 21.3 -21.6 21.3 -20.4 20.9 -20.3 21.2 -21.3
2025-11-12T19:56:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:56:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:56:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.747307
2025-11-12T19:56:28.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:56:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:56:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:56:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:56:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:56:28.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:55:57', tmtdew=20.51, humidity=25.63, cloud=0.0, wind=26.8, temperature=20.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:56:07.325', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:56:28.615 [DEBUG] [Thread-21827] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:56:28.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:56:28.711 [DEBUG] [Thread-21830] [transport.py] [_log()] starting thread (client mode): 0x173bd660
2025-11-12T19:56:28.711 [DEBUG] [Thread-21830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:56:28.726 [DEBUG] [Thread-21830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:56:28.726 [INFO] [Thread-21830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:56:28.733 [DEBUG] [Thread-21830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] client lang: <none>
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] server lang: <none>
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] kex follows: False
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:56:28.734 [DEBUG] [Thread-21830] [transport.py] [_log()] Compression: none
2025-11-12T19:56:28.735 [DEBUG] [Thread-21830] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:56:28.795 [DEBUG] [Thread-21830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:56:28.795 [DEBUG] [Thread-21830] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:56:28.795 [DEBUG] [Thread-21830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:56:28.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:56:28.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:56:28.851 [DEBUG] [Thread-21830] [transport.py] [_log()] userauth is OK
2025-11-12T19:56:28.851 [DEBUG] [Thread-21830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:56:28.851 [DEBUG] [Thread-21830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:56:28.851 [DEBUG] [Thread-21830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:56:28.851 [DEBUG] [Thread-21830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:56:28.869 [INFO] [Thread-21830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:56:28.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:56:28.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:56:29.713 [DEBUG] [Thread-21830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:56:29.713 [DEBUG] [Thread-21830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:56:29.760 [DEBUG] [Thread-21830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:56:29.760 [DEBUG] [Thread-21830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:56:29.769 [DEBUG] [Thread-21830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:56:29.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:56:29.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:56:29.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-11-12T19:56:29.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:56:29.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:56:29.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:56:29.804 [DEBUG] [Thread-21830] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:56:33.277 [DEBUG] [Thread-21832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:56:48.342 [DEBUG] [Thread-21833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:56:49.876 [DEBUG] [Thread-21834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:56:59.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:56:59.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:56:59.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-11-12T19:57:00.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 56, 29), 20.5, 25.65, 0.0, 26.68, 20.82, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:57:00.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:56:29
2025-11-12T19:57:00.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:57:00.715 [DEBUG] [Thread-21835] [transport.py] [_log()] starting thread (client mode): 0x14907790
2025-11-12T19:57:00.715 [DEBUG] [Thread-21835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:57:00.737 [DEBUG] [Thread-21835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:57:00.737 [INFO] [Thread-21835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:57:00.741 [DEBUG] [Thread-21835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:57:00.741 [DEBUG] [Thread-21835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:57:00.741 [DEBUG] [Thread-21835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:57:00.741 [DEBUG] [Thread-21835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:57:00.741 [DEBUG] [Thread-21835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:57:00.741 [DEBUG] [Thread-21835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:57:00.741 [DEBUG] [Thread-21835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:57:00.741 [DEBUG] [Thread-21835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] client lang: <none>
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] server lang: <none>
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] kex follows: False
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] Compression: none
2025-11-12T19:57:00.742 [DEBUG] [Thread-21835] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:57:00.759 [DEBUG] [Thread-21835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:57:00.760 [DEBUG] [Thread-21835] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:57:00.761 [DEBUG] [Thread-21835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:57:00.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:57:00.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:57:00.763 [DEBUG] [Thread-21835] [transport.py] [_log()] userauth is OK
2025-11-12T19:57:00.763 [DEBUG] [Thread-21835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:57:00.763 [DEBUG] [Thread-21835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:57:00.763 [DEBUG] [Thread-21835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:57:00.763 [DEBUG] [Thread-21835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:57:00.790 [INFO] [Thread-21835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:57:00.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:57:01.468 [DEBUG] [Thread-21835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:57:01.468 [DEBUG] [Thread-21835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:57:01.468 [DEBUG] [Thread-21835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:57:01.509 [DEBUG] [Thread-21835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:57:01.510 [DEBUG] [Thread-21835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:57:01.513 [DEBUG] [Thread-21835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:57:01.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:57:01.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:57:01.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:57:01.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:57:01.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:57:01.536 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:57:01.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:57:01.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:57:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:57:01.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.747654 -999.00  +20.70  18.07     31   +3.10 1 2 1 1 1    12    0 16.16 -72.37 ----- 20.3 18.1 270.0 20.8 21.3 -21.6 21.3 -20.3 21.0 -20.3 21.2 -21.4
2025-11-12T19:57:01.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:57:01.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:57:01.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.747654
2025-11-12T19:57:01.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:57:01.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:57:01.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:57:01.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:57:01.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:57:01.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:56:29', tmtdew=20.5, humidity=25.65, cloud=0.0, wind=26.68, temperature=20.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:56:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:57:01.538 [DEBUG] [Thread-21835] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:57:01.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:57:01.634 [DEBUG] [Thread-21838] [transport.py] [_log()] starting thread (client mode): 0x149221a0
2025-11-12T19:57:01.634 [DEBUG] [Thread-21838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:57:01.650 [DEBUG] [Thread-21838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:57:01.650 [INFO] [Thread-21838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:57:01.657 [DEBUG] [Thread-21838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:57:01.657 [DEBUG] [Thread-21838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] client lang: <none>
2025-11-12T19:57:01.658 [DEBUG] [Thread-21838] [transport.py] [_log()] server lang: <none>
2025-11-12T19:57:01.659 [DEBUG] [Thread-21838] [transport.py] [_log()] kex follows: False
2025-11-12T19:57:01.659 [DEBUG] [Thread-21838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:57:01.659 [DEBUG] [Thread-21838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:57:01.659 [DEBUG] [Thread-21838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:57:01.659 [DEBUG] [Thread-21838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:57:01.659 [DEBUG] [Thread-21838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:57:01.659 [DEBUG] [Thread-21838] [transport.py] [_log()] Compression: none
2025-11-12T19:57:01.660 [DEBUG] [Thread-21838] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:57:01.716 [DEBUG] [Thread-21838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:57:01.717 [DEBUG] [Thread-21838] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:57:01.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:57:01.719 [DEBUG] [Thread-21838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:57:01.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:57:01.775 [DEBUG] [Thread-21838] [transport.py] [_log()] userauth is OK
2025-11-12T19:57:01.775 [DEBUG] [Thread-21838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:57:01.776 [DEBUG] [Thread-21838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:57:01.776 [DEBUG] [Thread-21838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:57:01.776 [DEBUG] [Thread-21838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:57:01.800 [INFO] [Thread-21838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:57:01.800 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:57:01.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:57:02.651 [DEBUG] [Thread-21838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:57:02.651 [DEBUG] [Thread-21838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:57:02.699 [DEBUG] [Thread-21838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:57:02.699 [DEBUG] [Thread-21838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:57:02.708 [DEBUG] [Thread-21838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:57:02.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:57:02.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T19:57:02.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:57:02.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:57:02.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:57:02.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:57:02.739 [DEBUG] [Thread-21838] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:57:03.370 [DEBUG] [Thread-21840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:57:11.918 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:57:11.918 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:57:18.409 [DEBUG] [Thread-21841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:57:32.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:57:32.762 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:57:32.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T19:57:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 57, 1), 20.48, 25.68, 0.0, 24.14, 20.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:57:33.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:57:01
2025-11-12T19:57:33.440 [DEBUG] [Thread-21842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:57:33.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:57:33.674 [DEBUG] [Thread-21843] [transport.py] [_log()] starting thread (client mode): 0x173bc730
2025-11-12T19:57:33.674 [DEBUG] [Thread-21843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:57:33.693 [DEBUG] [Thread-21843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:57:33.693 [INFO] [Thread-21843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:57:33.696 [DEBUG] [Thread-21843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] client lang: <none>
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] server lang: <none>
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] kex follows: False
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:57:33.697 [DEBUG] [Thread-21843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:57:33.698 [DEBUG] [Thread-21843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:57:33.698 [DEBUG] [Thread-21843] [transport.py] [_log()] Compression: none
2025-11-12T19:57:33.698 [DEBUG] [Thread-21843] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:57:33.717 [DEBUG] [Thread-21843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:57:33.718 [DEBUG] [Thread-21843] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:57:33.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:57:33.719 [DEBUG] [Thread-21843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:57:33.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:57:33.721 [DEBUG] [Thread-21843] [transport.py] [_log()] userauth is OK
2025-11-12T19:57:33.722 [DEBUG] [Thread-21843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:57:33.722 [DEBUG] [Thread-21843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:57:33.722 [DEBUG] [Thread-21843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:57:33.722 [DEBUG] [Thread-21843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:57:33.758 [INFO] [Thread-21843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:57:33.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:57:34.332 [DEBUG] [Thread-21843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:57:34.332 [DEBUG] [Thread-21843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:57:34.333 [DEBUG] [Thread-21843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:57:34.374 [DEBUG] [Thread-21843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:57:34.374 [DEBUG] [Thread-21843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:57:34.377 [DEBUG] [Thread-21843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:57:34.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:57:34.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:57:34.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:57:34.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:57:34.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:57:34.404 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:57:34.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:57:34.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:57:34.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:57:34.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.748001 -999.00  +20.70  25.44     31   +3.10 1 2 1 1 1    11    0 15.90 -86.85 ----- 19.4 25.4 258.0 28.0 21.3 -21.6 21.2 -20.4 20.9 -20.3 21.2 -21.2
2025-11-12T19:57:34.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:57:34.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:57:34.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.748001
2025-11-12T19:57:34.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:57:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:57:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:57:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:57:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:57:34.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:57:01', tmtdew=20.48, humidity=25.68, cloud=0.0, wind=24.14, temperature=20.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:57:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:57:34.407 [DEBUG] [Thread-21843] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:57:34.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:57:34.507 [DEBUG] [Thread-21846] [transport.py] [_log()] starting thread (client mode): 0x14917af0
2025-11-12T19:57:34.507 [DEBUG] [Thread-21846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:57:34.524 [DEBUG] [Thread-21846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:57:34.524 [INFO] [Thread-21846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] client lang: <none>
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] server lang: <none>
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] kex follows: False
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] Compression: none
2025-11-12T19:57:34.534 [DEBUG] [Thread-21846] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:57:34.597 [DEBUG] [Thread-21846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:57:34.597 [DEBUG] [Thread-21846] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:57:34.597 [DEBUG] [Thread-21846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:57:34.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:57:34.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:57:34.655 [DEBUG] [Thread-21846] [transport.py] [_log()] userauth is OK
2025-11-12T19:57:34.655 [DEBUG] [Thread-21846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:57:34.655 [DEBUG] [Thread-21846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:57:34.655 [DEBUG] [Thread-21846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:57:34.655 [DEBUG] [Thread-21846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:57:34.673 [INFO] [Thread-21846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:57:34.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:57:34.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:57:35.503 [DEBUG] [Thread-21846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:57:35.503 [DEBUG] [Thread-21846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:57:35.550 [DEBUG] [Thread-21846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:57:35.550 [DEBUG] [Thread-21846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:57:35.558 [DEBUG] [Thread-21846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:57:35.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:57:35.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-11-12T19:57:35.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-11-12T19:57:35.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:57:35.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:57:35.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:57:35.590 [DEBUG] [Thread-21846] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:57:48.472 [DEBUG] [Thread-21848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:57:49.935 [DEBUG] [Thread-21849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:58:03.524 [DEBUG] [Thread-21850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:58:05.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:58:05.586 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:58:05.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-11-12T19:58:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 57, 34), 20.43, 25.68, 0.0, 24.21, 20.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:58:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:57:34
2025-11-12T19:58:06.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:58:06.510 [DEBUG] [Thread-21851] [transport.py] [_log()] starting thread (client mode): 0x11f12200
2025-11-12T19:58:06.510 [DEBUG] [Thread-21851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:58:06.531 [DEBUG] [Thread-21851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:58:06.531 [INFO] [Thread-21851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] client lang: <none>
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] server lang: <none>
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] kex follows: False
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:58:06.534 [DEBUG] [Thread-21851] [transport.py] [_log()] Compression: none
2025-11-12T19:58:06.535 [DEBUG] [Thread-21851] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:58:06.550 [DEBUG] [Thread-21851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:58:06.551 [DEBUG] [Thread-21851] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:58:06.551 [DEBUG] [Thread-21851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:58:06.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:58:06.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:58:06.552 [DEBUG] [Thread-21851] [transport.py] [_log()] userauth is OK
2025-11-12T19:58:06.552 [DEBUG] [Thread-21851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:58:06.552 [DEBUG] [Thread-21851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:58:06.552 [DEBUG] [Thread-21851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:58:06.552 [DEBUG] [Thread-21851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:58:06.571 [INFO] [Thread-21851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:58:06.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:58:07.206 [DEBUG] [Thread-21851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:58:07.206 [DEBUG] [Thread-21851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:58:07.206 [DEBUG] [Thread-21851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:58:07.247 [DEBUG] [Thread-21851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:58:07.247 [DEBUG] [Thread-21851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:58:07.249 [DEBUG] [Thread-21851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:58:07.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:58:07.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:58:07.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:58:07.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:58:07.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:58:07.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:58:07.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:58:07.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:58:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:58:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.748349 -999.00  +20.70  25.91     31   +3.20 1 2 1 1 1    10    0 16.10 -87.17 ----- 15.5 25.9 271.0 39.1 21.3 -21.6 21.2 -20.4 20.9 -20.4 21.2 -21.3
2025-11-12T19:58:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:58:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:58:07.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.748349
2025-11-12T19:58:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:58:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:58:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:58:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:58:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:58:07.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:57:34', tmtdew=20.43, humidity=25.68, cloud=0.0, wind=24.21, temperature=20.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:57:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:58:07.266 [DEBUG] [Thread-21851] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:58:07.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:58:07.354 [DEBUG] [Thread-21854] [transport.py] [_log()] starting thread (client mode): 0x149058d0
2025-11-12T19:58:07.354 [DEBUG] [Thread-21854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:58:07.372 [DEBUG] [Thread-21854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:58:07.372 [INFO] [Thread-21854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] client lang: <none>
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] server lang: <none>
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] kex follows: False
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] Compression: none
2025-11-12T19:58:07.383 [DEBUG] [Thread-21854] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:58:07.442 [DEBUG] [Thread-21854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:58:07.442 [DEBUG] [Thread-21854] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:58:07.442 [DEBUG] [Thread-21854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:58:07.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:58:07.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:58:07.502 [DEBUG] [Thread-21854] [transport.py] [_log()] userauth is OK
2025-11-12T19:58:07.503 [DEBUG] [Thread-21854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:58:07.503 [DEBUG] [Thread-21854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:58:07.503 [DEBUG] [Thread-21854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:58:07.503 [DEBUG] [Thread-21854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:58:07.517 [INFO] [Thread-21854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:58:07.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:58:07.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:58:08.356 [DEBUG] [Thread-21854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:58:08.356 [DEBUG] [Thread-21854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:58:08.404 [DEBUG] [Thread-21854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:58:08.404 [DEBUG] [Thread-21854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:58:08.412 [DEBUG] [Thread-21854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:58:08.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:58:08.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-11-12T19:58:08.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-11-12T19:58:08.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:58:08.436 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:58:08.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:58:08.444 [DEBUG] [Thread-21854] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:58:17.300 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:58:17.301 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:58:18.557 [DEBUG] [Thread-21856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:58:33.610 [DEBUG] [Thread-21857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:58:38.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:58:38.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:58:38.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-11-12T19:58:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 58, 5), 20.45, 25.65, 0.0, 24.14, 20.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:58:39.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:58:05
2025-11-12T19:58:39.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:58:39.425 [DEBUG] [Thread-21858] [transport.py] [_log()] starting thread (client mode): 0x173bc280
2025-11-12T19:58:39.426 [DEBUG] [Thread-21858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:58:39.444 [DEBUG] [Thread-21858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:58:39.444 [INFO] [Thread-21858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] client lang: <none>
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] server lang: <none>
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] kex follows: False
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] Compression: none
2025-11-12T19:58:39.448 [DEBUG] [Thread-21858] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:58:39.464 [DEBUG] [Thread-21858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:58:39.464 [DEBUG] [Thread-21858] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:58:39.464 [DEBUG] [Thread-21858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:58:39.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:58:39.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:58:39.465 [DEBUG] [Thread-21858] [transport.py] [_log()] userauth is OK
2025-11-12T19:58:39.465 [DEBUG] [Thread-21858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:58:39.465 [DEBUG] [Thread-21858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:58:39.465 [DEBUG] [Thread-21858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:58:39.465 [DEBUG] [Thread-21858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:58:39.478 [INFO] [Thread-21858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:58:39.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:58:40.097 [DEBUG] [Thread-21858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:58:40.097 [DEBUG] [Thread-21858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:58:40.097 [DEBUG] [Thread-21858] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:58:40.138 [DEBUG] [Thread-21858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:58:40.138 [DEBUG] [Thread-21858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:58:40.141 [DEBUG] [Thread-21858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:58:40.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:58:40.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:58:40.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:58:40.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:58:40.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:58:40.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:58:40.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:58:40.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:58:40.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:58:40.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.748696 -999.00  +20.70  14.33     31   +3.20 1 2 1 1 1     9    0 15.63 -89.26 ----- 14.5 14.3 271.0 24.7 21.2 -21.7 21.2 -20.4 20.9 -20.4 21.1 -21.3
2025-11-12T19:58:40.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:58:40.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:58:40.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.748696
2025-11-12T19:58:40.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:58:40.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:58:40.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:58:40.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:58:40.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:58:40.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:58:05', tmtdew=20.45, humidity=25.65, cloud=0.0, wind=24.14, temperature=20.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:58:07.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:58:40.160 [DEBUG] [Thread-21858] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:58:40.234 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:58:40.246 [DEBUG] [Thread-21861] [transport.py] [_log()] starting thread (client mode): 0x173bd540
2025-11-12T19:58:40.246 [DEBUG] [Thread-21861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:58:40.264 [DEBUG] [Thread-21861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:58:40.264 [INFO] [Thread-21861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:58:40.271 [DEBUG] [Thread-21861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] client lang: <none>
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] server lang: <none>
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] kex follows: False
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] Compression: none
2025-11-12T19:58:40.272 [DEBUG] [Thread-21861] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:58:40.331 [DEBUG] [Thread-21861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:58:40.331 [DEBUG] [Thread-21861] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:58:40.331 [DEBUG] [Thread-21861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:58:40.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:58:40.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:58:40.386 [DEBUG] [Thread-21861] [transport.py] [_log()] userauth is OK
2025-11-12T19:58:40.386 [DEBUG] [Thread-21861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:58:40.387 [DEBUG] [Thread-21861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:58:40.387 [DEBUG] [Thread-21861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:58:40.387 [DEBUG] [Thread-21861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:58:40.401 [INFO] [Thread-21861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:58:40.401 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:58:40.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:58:41.224 [DEBUG] [Thread-21861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:58:41.225 [DEBUG] [Thread-21861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:58:41.272 [DEBUG] [Thread-21861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:58:41.272 [DEBUG] [Thread-21861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:58:41.281 [DEBUG] [Thread-21861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:58:41.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:58: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')
2025-11-12T19:58:41.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T19:58:41.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:58:41.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:58:41.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:58:41.315 [DEBUG] [Thread-21861] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:58:48.647 [DEBUG] [Thread-21863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:58:49.987 [DEBUG] [Thread-21864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:59:03.688 [DEBUG] [Thread-21865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:59:11.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:59:11.337 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:59:11.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-11-12T19:59:12.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 58, 38), 20.36, 25.72, 0.0, 27.61, 20.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:59:12.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:58:38
2025-11-12T19:59:12.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:59:12.298 [DEBUG] [Thread-21866] [transport.py] [_log()] starting thread (client mode): 0x173be8f0
2025-11-12T19:59:12.298 [DEBUG] [Thread-21866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:59:12.321 [DEBUG] [Thread-21866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:59:12.321 [INFO] [Thread-21866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] client lang: <none>
2025-11-12T19:59:12.322 [DEBUG] [Thread-21866] [transport.py] [_log()] server lang: <none>
2025-11-12T19:59:12.323 [DEBUG] [Thread-21866] [transport.py] [_log()] kex follows: False
2025-11-12T19:59:12.323 [DEBUG] [Thread-21866] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:59:12.323 [DEBUG] [Thread-21866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:59:12.323 [DEBUG] [Thread-21866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:59:12.323 [DEBUG] [Thread-21866] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:59:12.323 [DEBUG] [Thread-21866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:59:12.323 [DEBUG] [Thread-21866] [transport.py] [_log()] Compression: none
2025-11-12T19:59:12.323 [DEBUG] [Thread-21866] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:59:12.330 [DEBUG] [Thread-21866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:59:12.331 [DEBUG] [Thread-21866] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:59:12.331 [DEBUG] [Thread-21866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:59:12.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:59:12.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:59:12.332 [DEBUG] [Thread-21866] [transport.py] [_log()] userauth is OK
2025-11-12T19:59:12.332 [DEBUG] [Thread-21866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:59:12.332 [DEBUG] [Thread-21866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:59:12.332 [DEBUG] [Thread-21866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:59:12.332 [DEBUG] [Thread-21866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:59:12.347 [INFO] [Thread-21866] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:59:12.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:59:12.971 [DEBUG] [Thread-21866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:59:12.971 [DEBUG] [Thread-21866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:59:12.972 [DEBUG] [Thread-21866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:59:13.012 [DEBUG] [Thread-21866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:59:13.013 [DEBUG] [Thread-21866] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:59:13.015 [DEBUG] [Thread-21866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:59:13.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:59:13.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:59:13.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:59:13.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:59:13.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:59:13.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:59:13.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:59:13.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:59:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:59:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.749043 -999.00  +20.70  15.21     31   +3.20 1 2 1 1 1     8    0 15.61 -80.83 ----- 15.5 15.2 269.8 27.6 21.2 -21.7 21.2 -20.5 20.9 -20.4 21.1 -21.3
2025-11-12T19:59:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:59:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:59:13.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.749043
2025-11-12T19:59:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:59:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:59:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:59:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:59:13.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:59:13.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:58:38', tmtdew=20.36, humidity=25.72, cloud=0.0, wind=27.61, temperature=20.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:58:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:59:13.039 [DEBUG] [Thread-21866] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:59:13.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T19:59:13.137 [DEBUG] [Thread-21869] [transport.py] [_log()] starting thread (client mode): 0x149443a0
2025-11-12T19:59:13.137 [DEBUG] [Thread-21869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:59:13.152 [DEBUG] [Thread-21869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:59:13.152 [INFO] [Thread-21869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:59:13.159 [DEBUG] [Thread-21869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] client lang: <none>
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] server lang: <none>
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] kex follows: False
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:59:13.160 [DEBUG] [Thread-21869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:59:13.161 [DEBUG] [Thread-21869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:59:13.161 [DEBUG] [Thread-21869] [transport.py] [_log()] Compression: none
2025-11-12T19:59:13.161 [DEBUG] [Thread-21869] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:59:13.222 [DEBUG] [Thread-21869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:59:13.222 [DEBUG] [Thread-21869] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:59:13.223 [DEBUG] [Thread-21869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:59:13.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:59:13.223 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:59:13.278 [DEBUG] [Thread-21869] [transport.py] [_log()] userauth is OK
2025-11-12T19:59:13.279 [DEBUG] [Thread-21869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:59:13.279 [DEBUG] [Thread-21869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:59:13.279 [DEBUG] [Thread-21869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:59:13.279 [DEBUG] [Thread-21869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:59:13.301 [INFO] [Thread-21869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:59:13.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T19:59:13.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:59:14.129 [DEBUG] [Thread-21869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:59:14.129 [DEBUG] [Thread-21869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:59:14.177 [DEBUG] [Thread-21869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:59:14.178 [DEBUG] [Thread-21869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:59:14.187 [DEBUG] [Thread-21869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:59:14.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:59:14.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-11-12T19:59:14.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-11-12T19:59:14.215 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:59:14.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:59:14.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:59:14.224 [DEBUG] [Thread-21869] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:59:18.720 [DEBUG] [Thread-21871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:59:23.145 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:59:23.146 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:59:33.776 [DEBUG] [Thread-21872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:59:44.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T19:59:44.245 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T19:59:44.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-11-12T19:59:44.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 19, 59, 10), 20.33, 25.77, 0.0, 24.19, 20.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T19:59:44.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 19:59:10
2025-11-12T19:59:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T19:59:45.160 [DEBUG] [Thread-21873] [transport.py] [_log()] starting thread (client mode): 0x14905420
2025-11-12T19:59:45.160 [DEBUG] [Thread-21873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:59:45.176 [DEBUG] [Thread-21873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T19:59:45.176 [INFO] [Thread-21873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:59:45.179 [DEBUG] [Thread-21873] [transport.py] [_log()] client lang: <none>
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] server lang: <none>
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] kex follows: False
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] Compression: none
2025-11-12T19:59:45.180 [DEBUG] [Thread-21873] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:59:45.190 [DEBUG] [Thread-21873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:59:45.191 [DEBUG] [Thread-21873] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:59:45.191 [DEBUG] [Thread-21873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T19:59:45.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T19:59:45.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:59:45.192 [DEBUG] [Thread-21873] [transport.py] [_log()] userauth is OK
2025-11-12T19:59:45.193 [DEBUG] [Thread-21873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:59:45.193 [DEBUG] [Thread-21873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:59:45.193 [DEBUG] [Thread-21873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T19:59:45.193 [DEBUG] [Thread-21873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:59:45.216 [INFO] [Thread-21873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:59:45.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:59:45.804 [DEBUG] [Thread-21873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:59:45.804 [DEBUG] [Thread-21873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:59:45.805 [DEBUG] [Thread-21873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T19:59:45.845 [DEBUG] [Thread-21873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:59:45.846 [DEBUG] [Thread-21873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:59:45.849 [DEBUG] [Thread-21873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:59:45.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:59:45.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T19:59:45.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T19:59:45.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T19:59:45.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:59:45.871 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T19:59:45.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:59:45.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:59:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T19:59:45.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.749390 -999.00  +20.70  23.03     31   +3.30 1 2 1 1 1     7    0 15.24 -97.84 ----- 15.8 23.0 270.6 29.3 21.2 -21.7 21.2 -20.6 20.9 -20.5 21.1 -21.3
2025-11-12T19:59:45.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T19:59:45.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T19:59:45.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.749390
2025-11-12T19:59:45.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T19:59:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T19:59:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T19:59:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T19:59:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T19:59:45.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T19:59:10', tmtdew=20.33, humidity=25.77, cloud=0.0, wind=24.19, temperature=20.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:59:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T19:59:45.874 [DEBUG] [Thread-21873] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:59: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-11-12T19:59:45.970 [DEBUG] [Thread-21876] [transport.py] [_log()] starting thread (client mode): 0x173bfd60
2025-11-12T19:59:45.970 [DEBUG] [Thread-21876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T19:59:45.984 [DEBUG] [Thread-21876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T19:59:45.984 [INFO] [Thread-21876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] client lang: <none>
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] server lang: <none>
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] kex follows: False
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T19:59:45.992 [DEBUG] [Thread-21876] [transport.py] [_log()] Compression: none
2025-11-12T19:59:45.993 [DEBUG] [Thread-21876] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T19:59:46.055 [DEBUG] [Thread-21876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T19:59:46.055 [DEBUG] [Thread-21876] [transport.py] [_log()] Switch to new keys ...
2025-11-12T19:59:46.056 [DEBUG] [Thread-21876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T19:59:46.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T19:59:46.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T19:59:46.111 [DEBUG] [Thread-21876] [transport.py] [_log()] userauth is OK
2025-11-12T19:59:46.111 [DEBUG] [Thread-21876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T19:59:46.112 [DEBUG] [Thread-21876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T19:59:46.112 [DEBUG] [Thread-21876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T19:59:46.112 [DEBUG] [Thread-21876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T19:59:46.130 [INFO] [Thread-21876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T19:59: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-11-12T19:59:46.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T19:59:46.991 [DEBUG] [Thread-21876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T19:59:46.991 [DEBUG] [Thread-21876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T19:59:47.040 [DEBUG] [Thread-21876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T19:59:47.040 [DEBUG] [Thread-21876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T19:59:47.049 [DEBUG] [Thread-21876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T19:59:47.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T19:59:47.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-11-12T19:59:47.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-11-12T19:59:47.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T19:59:47.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T19:59:47.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T19:59:47.084 [DEBUG] [Thread-21876] [transport.py] [_log()] EOF in transport thread
2025-11-12T19:59:48.810 [DEBUG] [Thread-21878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T19:59:50.058 [DEBUG] [Thread-21879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:00:03.855 [DEBUG] [Thread-21880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:00:17.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:00:17.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:00:17.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-11-12T20:00:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 0, 14), 20.16, 25.9, 0.0, 28.51, 20.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:00:17.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:00:14
2025-11-12T20:00:17.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:00:17.997 [DEBUG] [Thread-21881] [transport.py] [_log()] starting thread (client mode): 0x14946b30
2025-11-12T20:00:17.997 [DEBUG] [Thread-21881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:00:18.018 [DEBUG] [Thread-21881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:00:18.018 [INFO] [Thread-21881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] client lang: <none>
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] server lang: <none>
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] kex follows: False
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] Compression: none
2025-11-12T20:00:18.021 [DEBUG] [Thread-21881] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:00:18.039 [DEBUG] [Thread-21881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:00:18.040 [DEBUG] [Thread-21881] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:00:18.040 [DEBUG] [Thread-21881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:00:18.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:00:18.041 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:00:18.042 [DEBUG] [Thread-21881] [transport.py] [_log()] userauth is OK
2025-11-12T20:00:18.043 [DEBUG] [Thread-21881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:00:18.043 [DEBUG] [Thread-21881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:00:18.043 [DEBUG] [Thread-21881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:00:18.043 [DEBUG] [Thread-21881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:00:18.079 [INFO] [Thread-21881] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:00:18.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:00:18.695 [DEBUG] [Thread-21881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:00:18.695 [DEBUG] [Thread-21881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:00:18.696 [DEBUG] [Thread-21881] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:00:18.737 [DEBUG] [Thread-21881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:00:18.737 [DEBUG] [Thread-21881] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:00:18.740 [DEBUG] [Thread-21881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:00:18.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:00:18.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:00:18.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:00:18.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:00:18.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:00:18.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:00:18.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:00:18.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:00:18.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:00:18.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.749738 -999.00  +20.60  25.60     31   +3.30 1 2 1 1 1     7    0 15.30 -97.98 ----- 20.6 25.6 263.6 31.0 21.2 -21.7 21.1 -20.5 20.8 -20.4 21.1 -21.3
2025-11-12T20:00:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:00:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:00:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.749738
2025-11-12T20:00:18.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:00:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:00:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:00:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:00:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:00:18.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:00:14', tmtdew=20.16, humidity=25.9, cloud=0.0, wind=28.51, temperature=20.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T17:59:37.363', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:00:18.768 [DEBUG] [Thread-21881] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:00:18.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:00:18.866 [DEBUG] [Thread-21884] [transport.py] [_log()] starting thread (client mode): 0x173bf970
2025-11-12T20:00:18.866 [DEBUG] [Thread-21884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:00:18.882 [DEBUG] [Thread-21885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:00:18.882 [DEBUG] [Thread-21884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:00:18.882 [INFO] [Thread-21884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:00:18.889 [DEBUG] [Thread-21884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:00:18.890 [DEBUG] [Thread-21884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:00:18.890 [DEBUG] [Thread-21884] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:00:18.890 [DEBUG] [Thread-21884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:00:18.890 [DEBUG] [Thread-21884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:00:18.890 [DEBUG] [Thread-21884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:00:18.890 [DEBUG] [Thread-21884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:00:18.890 [DEBUG] [Thread-21884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:00:18.890 [DEBUG] [Thread-21884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:00:18.891 [DEBUG] [Thread-21884] [transport.py] [_log()] client lang: <none>
2025-11-12T20:00:18.891 [DEBUG] [Thread-21884] [transport.py] [_log()] server lang: <none>
2025-11-12T20:00:18.891 [DEBUG] [Thread-21884] [transport.py] [_log()] kex follows: False
2025-11-12T20:00:18.891 [DEBUG] [Thread-21884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:00:18.891 [DEBUG] [Thread-21884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:00:18.891 [DEBUG] [Thread-21884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:00:18.891 [DEBUG] [Thread-21884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:00:18.891 [DEBUG] [Thread-21884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:00:18.892 [DEBUG] [Thread-21884] [transport.py] [_log()] Compression: none
2025-11-12T20:00:18.892 [DEBUG] [Thread-21884] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:00:18.947 [DEBUG] [Thread-21884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:00:18.947 [DEBUG] [Thread-21884] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:00:18.947 [DEBUG] [Thread-21884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:00:18.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:00:18.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:00:19.005 [DEBUG] [Thread-21884] [transport.py] [_log()] userauth is OK
2025-11-12T20:00:19.006 [DEBUG] [Thread-21884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:00:19.006 [DEBUG] [Thread-21884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:00:19.006 [DEBUG] [Thread-21884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:00:19.006 [DEBUG] [Thread-21884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:00:19.031 [INFO] [Thread-21884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:00:19.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:00:19.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:00:19.884 [DEBUG] [Thread-21884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:00:19.885 [DEBUG] [Thread-21884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:00:19.933 [DEBUG] [Thread-21884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:00:19.933 [DEBUG] [Thread-21884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:00:19.943 [DEBUG] [Thread-21884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:00:19.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:00:19.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:00:19.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-11-12T20:00:19.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:00:19.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:00:19.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:00:19.979 [DEBUG] [Thread-21884] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:00:28.527 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:00:28.528 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:00:33.942 [DEBUG] [Thread-21887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:00:48.980 [DEBUG] [Thread-21888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:00:50.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:00:50.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:00:50.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-11-12T20:00:50.111 [DEBUG] [Thread-21889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:00:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 0, 46), 20.11, 25.98, 0.0, 23.89, 20.6, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:00:50.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:00:46
2025-11-12T20:00:50.745 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:00:50.890 [DEBUG] [Thread-21890] [transport.py] [_log()] starting thread (client mode): 0x14922da0
2025-11-12T20:00:50.890 [DEBUG] [Thread-21890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:00:50.911 [DEBUG] [Thread-21890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:00:50.911 [INFO] [Thread-21890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:00:50.914 [DEBUG] [Thread-21890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] client lang: <none>
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] server lang: <none>
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] kex follows: False
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] Compression: none
2025-11-12T20:00:50.915 [DEBUG] [Thread-21890] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:00:50.932 [DEBUG] [Thread-21890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:00:50.933 [DEBUG] [Thread-21890] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:00:50.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:00:50.934 [DEBUG] [Thread-21890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:00:50.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:00:50.936 [DEBUG] [Thread-21890] [transport.py] [_log()] userauth is OK
2025-11-12T20:00:50.936 [DEBUG] [Thread-21890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:00:50.936 [DEBUG] [Thread-21890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:00:50.936 [DEBUG] [Thread-21890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:00:50.936 [DEBUG] [Thread-21890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:00:50.961 [INFO] [Thread-21890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:00:50.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:00:51.541 [DEBUG] [Thread-21890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:00:51.541 [DEBUG] [Thread-21890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:00:51.542 [DEBUG] [Thread-21890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:00:51.582 [DEBUG] [Thread-21890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:00:51.582 [DEBUG] [Thread-21890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:00:51.585 [DEBUG] [Thread-21890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:00:51.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:00:51.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:00:51.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:00:51.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:00:51.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:00:51.608 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:00:51.608 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:00:51.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:00:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:00:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.750432 -999.00  +20.60  14.11     31   +3.30 1 2 1 1 1     5    0 14.47 -112.56 ----- 19.0 14.1 275.0 29.4 21.1 -21.8 21.1 -20.5 20.8 -20.5 21.1 -21.2
2025-11-12T20:00:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:00:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:00:51.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.750432
2025-11-12T20:00:51.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:00:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:00:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:00:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:00:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:00:51.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:00:46', tmtdew=20.11, humidity=25.98, cloud=0.0, wind=23.89, temperature=20.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:00:37.325', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:00:51.611 [DEBUG] [Thread-21890] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:00:51.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:00:51.708 [DEBUG] [Thread-21893] [transport.py] [_log()] starting thread (client mode): 0x14945180
2025-11-12T20:00:51.708 [DEBUG] [Thread-21893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:00:51.726 [DEBUG] [Thread-21893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:00:51.726 [INFO] [Thread-21893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] client lang: <none>
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] server lang: <none>
2025-11-12T20:00:51.734 [DEBUG] [Thread-21893] [transport.py] [_log()] kex follows: False
2025-11-12T20:00:51.735 [DEBUG] [Thread-21893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:00:51.735 [DEBUG] [Thread-21893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:00:51.735 [DEBUG] [Thread-21893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:00:51.735 [DEBUG] [Thread-21893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:00:51.735 [DEBUG] [Thread-21893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:00:51.735 [DEBUG] [Thread-21893] [transport.py] [_log()] Compression: none
2025-11-12T20:00:51.735 [DEBUG] [Thread-21893] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:00:51.795 [DEBUG] [Thread-21893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:00:51.796 [DEBUG] [Thread-21893] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:00:51.796 [DEBUG] [Thread-21893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:00:51.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:00:51.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:00:51.851 [DEBUG] [Thread-21893] [transport.py] [_log()] userauth is OK
2025-11-12T20:00:51.851 [DEBUG] [Thread-21893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:00:51.852 [DEBUG] [Thread-21893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:00:51.852 [DEBUG] [Thread-21893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:00:51.852 [DEBUG] [Thread-21893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:00:51.874 [INFO] [Thread-21893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:00:51.875 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:00:51.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:00:52.691 [DEBUG] [Thread-21893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:00:52.692 [DEBUG] [Thread-21893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:00:52.739 [DEBUG] [Thread-21893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:00:52.740 [DEBUG] [Thread-21893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:00:52.749 [DEBUG] [Thread-21893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:00:52.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:00:52.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-11-12T20:00: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') -> 00000000
2025-11-12T20:00:52.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:00:52.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:00:52.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:00:52.785 [DEBUG] [Thread-21893] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:01:04.017 [DEBUG] [Thread-21895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:01:19.067 [DEBUG] [Thread-21896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:01:22.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:01:22.807 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:01:22.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-11-12T20:01:23.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 1, 18), 20.12, 25.95, 0.0, 21.46, 20.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:01:23.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:01:18
2025-11-12T20:01:23.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:01:23.751 [DEBUG] [Thread-21897] [transport.py] [_log()] starting thread (client mode): 0x14946e90
2025-11-12T20:01:23.751 [DEBUG] [Thread-21897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:01:23.771 [DEBUG] [Thread-21897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:01:23.771 [INFO] [Thread-21897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] client lang: <none>
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] server lang: <none>
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] kex follows: False
2025-11-12T20:01:23.774 [DEBUG] [Thread-21897] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:01:23.775 [DEBUG] [Thread-21897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:01:23.775 [DEBUG] [Thread-21897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:01:23.775 [DEBUG] [Thread-21897] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:01:23.775 [DEBUG] [Thread-21897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:01:23.775 [DEBUG] [Thread-21897] [transport.py] [_log()] Compression: none
2025-11-12T20:01:23.775 [DEBUG] [Thread-21897] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:01:23.789 [DEBUG] [Thread-21897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:01:23.789 [DEBUG] [Thread-21897] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:01:23.789 [DEBUG] [Thread-21897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:01:23.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:01:23.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:01:23.832 [DEBUG] [Thread-21897] [transport.py] [_log()] userauth is OK
2025-11-12T20:01:23.832 [DEBUG] [Thread-21897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:01:23.832 [DEBUG] [Thread-21897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:01:23.832 [DEBUG] [Thread-21897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:01:23.832 [DEBUG] [Thread-21897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:01:23.848 [INFO] [Thread-21897] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:01:23.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:01:24.477 [DEBUG] [Thread-21897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:01:24.478 [DEBUG] [Thread-21897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:01:24.478 [DEBUG] [Thread-21897] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:01:24.519 [DEBUG] [Thread-21897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:01:24.519 [DEBUG] [Thread-21897] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:01:24.521 [DEBUG] [Thread-21897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:01:24.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:01:24.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:01:24.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:01:24.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:01:24.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:01:24.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:01:24.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:01:24.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:01:24.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:01:24.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.750779 -999.00  +20.60  15.22     31   +3.20 1 2 1 1 1     5    0 14.54 -109.48 NA 16.9 15.2 264.6 26.9 21.1 -21.7 21.1 -20.6 20.8 -20.4 21.0 -21.3
2025-11-12T20:01:24.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:01:24.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:01:24.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.750779
2025-11-12T20:01:24.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:01:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:01:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:01:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:01:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:01:24.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:01:18', tmtdew=20.12, humidity=25.95, cloud=0.0, wind=21.46, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:01:07.306', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:01:24.540 [DEBUG] [Thread-21897] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:01:24.614 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:01:24.628 [DEBUG] [Thread-21900] [transport.py] [_log()] starting thread (client mode): 0x14944d30
2025-11-12T20:01:24.628 [DEBUG] [Thread-21900] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:01:24.643 [DEBUG] [Thread-21900] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:01:24.643 [INFO] [Thread-21900] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] client lang: <none>
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] server lang: <none>
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] kex follows: False
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] Compression: none
2025-11-12T20:01:24.650 [DEBUG] [Thread-21900] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:01:24.705 [DEBUG] [Thread-21900] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:01:24.705 [DEBUG] [Thread-21900] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:01:24.706 [DEBUG] [Thread-21900] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:01:24.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:01:24.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:01:24.762 [DEBUG] [Thread-21900] [transport.py] [_log()] userauth is OK
2025-11-12T20:01:24.763 [DEBUG] [Thread-21900] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:01:24.763 [DEBUG] [Thread-21900] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:01:24.763 [DEBUG] [Thread-21900] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:01:24.763 [DEBUG] [Thread-21900] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:01:24.776 [INFO] [Thread-21900] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:01:24.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:01:24.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:01:25.632 [DEBUG] [Thread-21900] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:01:25.632 [DEBUG] [Thread-21900] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:01:25.680 [DEBUG] [Thread-21900] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:01:25.680 [DEBUG] [Thread-21900] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:01:25.688 [DEBUG] [Thread-21900] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:01:25.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:01:25.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:01:25.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:01:25.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:01:25.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:01:25.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:01:25.719 [DEBUG] [Thread-21900] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:01:33.401 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:01:33.402 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:01:34.096 [DEBUG] [Thread-21902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:01:49.157 [DEBUG] [Thread-21903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:01:50.166 [DEBUG] [Thread-21904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:01:55.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:01:55.742 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:01:55.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-11-12T20:01:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 1, 50), 20.0, 26.08, 0.0, 29.01, 20.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:01:56.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:01:50
2025-11-12T20:01:56.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:01:56.664 [DEBUG] [Thread-21905] [transport.py] [_log()] starting thread (client mode): 0x173bdff0
2025-11-12T20:01:56.664 [DEBUG] [Thread-21905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:01:56.684 [DEBUG] [Thread-21905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:01:56.684 [INFO] [Thread-21905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:01:56.687 [DEBUG] [Thread-21905] [transport.py] [_log()] client lang: <none>
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] server lang: <none>
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] kex follows: False
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] Compression: none
2025-11-12T20:01:56.688 [DEBUG] [Thread-21905] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:01:56.703 [DEBUG] [Thread-21905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:01:56.704 [DEBUG] [Thread-21905] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:01:56.704 [DEBUG] [Thread-21905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:01:56.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:01:56.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:01:56.706 [DEBUG] [Thread-21905] [transport.py] [_log()] userauth is OK
2025-11-12T20:01:56.706 [DEBUG] [Thread-21905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:01:56.706 [DEBUG] [Thread-21905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:01:56.706 [DEBUG] [Thread-21905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:01:56.706 [DEBUG] [Thread-21905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:01:56.726 [INFO] [Thread-21905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:01:56.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:01:57.334 [DEBUG] [Thread-21905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:01:57.334 [DEBUG] [Thread-21905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:01:57.335 [DEBUG] [Thread-21905] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:01:57.375 [DEBUG] [Thread-21905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:01:57.376 [DEBUG] [Thread-21905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:01:57.379 [DEBUG] [Thread-21905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:01:57.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:01:57.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:01:57.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:01:57.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:01:57.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:01:57.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:01:57.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:01:57.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:01:57.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:01:57.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.751126 -999.00  +20.50  12.62     32   +3.30 1 2 1 1 1     4    0 14.97 -108.69 ..... 14.2 12.6 258.4 19.8 21.1 -21.7 21.1 -20.5 20.8 -20.4 21.0 -21.3
2025-11-12T20:01:57.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:01:57.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:01:57.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.751126
2025-11-12T20:01:57.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:01:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:01:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:01:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:01:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:01:57.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:01:50', tmtdew=20.0, humidity=26.08, cloud=0.0, wind=29.01, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:01:37.286', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:01:57.402 [DEBUG] [Thread-21905] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:01:57.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:01:57.501 [DEBUG] [Thread-21908] [transport.py] [_log()] starting thread (client mode): 0x173bf760
2025-11-12T20:01:57.501 [DEBUG] [Thread-21908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:01:57.516 [DEBUG] [Thread-21908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:01:57.516 [INFO] [Thread-21908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] client lang: <none>
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] server lang: <none>
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] kex follows: False
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:01:57.524 [DEBUG] [Thread-21908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:01:57.525 [DEBUG] [Thread-21908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:01:57.525 [DEBUG] [Thread-21908] [transport.py] [_log()] Compression: none
2025-11-12T20:01:57.525 [DEBUG] [Thread-21908] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:01:57.582 [DEBUG] [Thread-21908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:01:57.583 [DEBUG] [Thread-21908] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:01:57.583 [DEBUG] [Thread-21908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:01:57.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:01:57.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:01:57.639 [DEBUG] [Thread-21908] [transport.py] [_log()] userauth is OK
2025-11-12T20:01:57.640 [DEBUG] [Thread-21908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:01:57.640 [DEBUG] [Thread-21908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:01:57.640 [DEBUG] [Thread-21908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:01:57.640 [DEBUG] [Thread-21908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:01:57.658 [INFO] [Thread-21908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:01:57.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:01:57.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:01:58.485 [DEBUG] [Thread-21908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:01:58.486 [DEBUG] [Thread-21908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:01:58.534 [DEBUG] [Thread-21908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:01:58.534 [DEBUG] [Thread-21908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:01:58.543 [DEBUG] [Thread-21908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:01:58.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:01:58.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-11-12T20:01:58.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:01:58.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:01:58.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:01:58.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:01:58.584 [DEBUG] [Thread-21908] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:02:04.187 [DEBUG] [Thread-21910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:02:19.238 [DEBUG] [Thread-21911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:02:28.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:02:28.594 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:02:28.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-11-12T20:02:29.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 2, 22), 20.01, 26.07, 0.0, 25.59, 20.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:02:29.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:02:22
2025-11-12T20:02:29.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:02:29.496 [DEBUG] [Thread-21912] [transport.py] [_log()] starting thread (client mode): 0x14914c70
2025-11-12T20:02:29.496 [DEBUG] [Thread-21912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:02:29.516 [DEBUG] [Thread-21912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:02:29.517 [INFO] [Thread-21912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] client lang: <none>
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] server lang: <none>
2025-11-12T20:02:29.519 [DEBUG] [Thread-21912] [transport.py] [_log()] kex follows: False
2025-11-12T20:02:29.520 [DEBUG] [Thread-21912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:02:29.520 [DEBUG] [Thread-21912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:02:29.520 [DEBUG] [Thread-21912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:02:29.520 [DEBUG] [Thread-21912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:02:29.520 [DEBUG] [Thread-21912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:02:29.520 [DEBUG] [Thread-21912] [transport.py] [_log()] Compression: none
2025-11-12T20:02:29.520 [DEBUG] [Thread-21912] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:02:29.535 [DEBUG] [Thread-21912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:02:29.535 [DEBUG] [Thread-21912] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:02:29.536 [DEBUG] [Thread-21912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:02:29.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:02:29.536 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:02:29.536 [DEBUG] [Thread-21912] [transport.py] [_log()] userauth is OK
2025-11-12T20:02:29.536 [DEBUG] [Thread-21912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:02:29.536 [DEBUG] [Thread-21912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:02:29.536 [DEBUG] [Thread-21912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:02:29.536 [DEBUG] [Thread-21912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:02:29.549 [INFO] [Thread-21912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:02:29.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:02:30.189 [DEBUG] [Thread-21912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:02:30.189 [DEBUG] [Thread-21912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:02:30.190 [DEBUG] [Thread-21912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:02:30.229 [DEBUG] [Thread-21912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:02:30.230 [DEBUG] [Thread-21912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:02:30.233 [DEBUG] [Thread-21912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:02:30.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:02:30.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:02:30.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:02:30.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:02:30.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:02:30.257 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:02:30.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:02:30.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:02:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:02:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.751474 -999.00  +20.50  18.65     32   +3.30 1 2 1 1 1     4    0 14.76 -124.43 Z.... 26.3 18.6 267.8 25.8 21.1 -21.6 21.1 -20.6 20.7 -20.3 21.0 -21.2
2025-11-12T20:02:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:02:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:02:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.751474
2025-11-12T20:02:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:02:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:02:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:02:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:02:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:02:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:02:22', tmtdew=20.01, humidity=26.07, cloud=0.0, wind=25.59, temperature=20.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:02:07.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:02:30.260 [DEBUG] [Thread-21912] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:02:30.355 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:02:34.273 [DEBUG] [Thread-21915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:02:38.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:02:38.421 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:02:49.321 [DEBUG] [Thread-21916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:02:50.224 [DEBUG] [Thread-21917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:03:04.356 [DEBUG] [Thread-21918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:03:19.390 [DEBUG] [Thread-21919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:03:34.418 [DEBUG] [Thread-21920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:03:44.809 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:03:44.810 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:03:49.456 [DEBUG] [Thread-21921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:03:50.280 [DEBUG] [Thread-21922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:04:04.490 [DEBUG] [Thread-21923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:04:19.529 [DEBUG] [Thread-21924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:04:34.564 [DEBUG] [Thread-21925 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:04:42.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-11-12T20:04:49.598 [DEBUG] [Thread-21926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:04:50.368 [DEBUG] [Thread-21927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:04:52.224 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:04:52.226 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:05:04.632 [DEBUG] [Thread-21928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:05:12.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:05:12.074 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:05:12.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-11-12T20:05:12.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 5, 2), 19.9, 26.68, 0.0, 22.81, 20.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:05:12.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:05:02
2025-11-12T20:05:12.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:05:13.003 [DEBUG] [Thread-21929] [transport.py] [_log()] starting thread (client mode): 0x14905420
2025-11-12T20:05:13.003 [DEBUG] [Thread-21929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:05:13.024 [DEBUG] [Thread-21929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:05:13.024 [INFO] [Thread-21929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:05:13.027 [DEBUG] [Thread-21929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:05:13.027 [DEBUG] [Thread-21929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:05:13.027 [DEBUG] [Thread-21929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:05:13.027 [DEBUG] [Thread-21929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:05:13.027 [DEBUG] [Thread-21929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:05:13.027 [DEBUG] [Thread-21929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:05:13.027 [DEBUG] [Thread-21929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] client lang: <none>
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] server lang: <none>
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] kex follows: False
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] Compression: none
2025-11-12T20:05:13.028 [DEBUG] [Thread-21929] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:05:13.047 [DEBUG] [Thread-21929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:05:13.047 [DEBUG] [Thread-21929] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:05:13.048 [DEBUG] [Thread-21929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:05:13.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:05:13.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:05:13.089 [DEBUG] [Thread-21929] [transport.py] [_log()] userauth is OK
2025-11-12T20:05:13.089 [DEBUG] [Thread-21929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:05:13.089 [DEBUG] [Thread-21929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:05:13.089 [DEBUG] [Thread-21929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:05:13.089 [DEBUG] [Thread-21929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:05:13.110 [INFO] [Thread-21929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:05:13.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:05:13.775 [DEBUG] [Thread-21929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:05:13.775 [DEBUG] [Thread-21929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:05:13.776 [DEBUG] [Thread-21929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:05:13.817 [DEBUG] [Thread-21929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:05:13.817 [DEBUG] [Thread-21929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:05:13.820 [DEBUG] [Thread-21929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:05:13.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:05:13.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:05:13.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:05:13.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:05:13.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:05:13.844 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:05:13.844 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:05:13.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:05:13.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:05:13.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.753210 -999.00  +20.50  12.82     32   +3.30 1 2 1 1 1     2    0 13.56 -127.06 z.... 12.3 12.8 256.6 17.1 21.0 -21.5 21.0 -20.5 20.7 -20.3 20.9 -21.1
2025-11-12T20:05:13.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:05:13.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:05:13.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.753210
2025-11-12T20:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:05:13.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:05:13.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:05:02', tmtdew=19.9, humidity=26.68, cloud=0.0, wind=22.81, temperature=20.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:04:37.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:05:13.847 [DEBUG] [Thread-21929] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:05: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-11-12T20:05:13.945 [DEBUG] [Thread-21932] [transport.py] [_log()] starting thread (client mode): 0x14914d30
2025-11-12T20:05:13.945 [DEBUG] [Thread-21932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:05:13.960 [DEBUG] [Thread-21932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:05:13.960 [INFO] [Thread-21932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] client lang: <none>
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] server lang: <none>
2025-11-12T20:05:13.967 [DEBUG] [Thread-21932] [transport.py] [_log()] kex follows: False
2025-11-12T20:05:13.968 [DEBUG] [Thread-21932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:05:13.968 [DEBUG] [Thread-21932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:05:13.968 [DEBUG] [Thread-21932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:05:13.968 [DEBUG] [Thread-21932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:05:13.968 [DEBUG] [Thread-21932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:05:13.968 [DEBUG] [Thread-21932] [transport.py] [_log()] Compression: none
2025-11-12T20:05:13.968 [DEBUG] [Thread-21932] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:05:14.023 [DEBUG] [Thread-21932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:05:14.023 [DEBUG] [Thread-21932] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:05:14.023 [DEBUG] [Thread-21932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:05:14.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:05:14.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:05:14.079 [DEBUG] [Thread-21932] [transport.py] [_log()] userauth is OK
2025-11-12T20:05:14.079 [DEBUG] [Thread-21932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:05:14.080 [DEBUG] [Thread-21932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:05:14.080 [DEBUG] [Thread-21932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:05:14.080 [DEBUG] [Thread-21932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:05:14.094 [INFO] [Thread-21932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:05:14.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:05:14.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:05:14.930 [DEBUG] [Thread-21932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:05:14.930 [DEBUG] [Thread-21932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:05:14.979 [DEBUG] [Thread-21932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:05:14.979 [DEBUG] [Thread-21932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:05:14.988 [DEBUG] [Thread-21932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:05:14.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:05: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-11-12T20:05: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-11-12T20:05:15.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:05:15.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:05:15.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:05:15.022 [DEBUG] [Thread-21932] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:05:19.665 [DEBUG] [Thread-21934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:05:34.718 [DEBUG] [Thread-21935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:05:45.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:05:45.041 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:05:45.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-11-12T20:05:45.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 5, 34), 19.85, 26.66, 0.0, 26.85, 20.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:05:45.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:05:34
2025-11-12T20:05:45.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:05:45.964 [DEBUG] [Thread-21936] [transport.py] [_log()] starting thread (client mode): 0x11f00df0
2025-11-12T20:05:45.964 [DEBUG] [Thread-21936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:05:45.984 [DEBUG] [Thread-21936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:05:45.984 [INFO] [Thread-21936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:05:45.987 [DEBUG] [Thread-21936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:05:45.987 [DEBUG] [Thread-21936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:05:45.987 [DEBUG] [Thread-21936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:05:45.987 [DEBUG] [Thread-21936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] client lang: <none>
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] server lang: <none>
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] kex follows: False
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] Compression: none
2025-11-12T20:05:45.988 [DEBUG] [Thread-21936] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:05:46.003 [DEBUG] [Thread-21936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:05:46.004 [DEBUG] [Thread-21936] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:05:46.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:05:46.005 [DEBUG] [Thread-21936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:05:46.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:05:46.007 [DEBUG] [Thread-21936] [transport.py] [_log()] userauth is OK
2025-11-12T20:05:46.007 [DEBUG] [Thread-21936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:05:46.007 [DEBUG] [Thread-21936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:05:46.008 [DEBUG] [Thread-21936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:05:46.008 [DEBUG] [Thread-21936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:05:46.044 [INFO] [Thread-21936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:05:46.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:05:46.684 [DEBUG] [Thread-21936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:05:46.684 [DEBUG] [Thread-21936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:05:46.685 [DEBUG] [Thread-21936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:05:46.726 [DEBUG] [Thread-21936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:05:46.726 [DEBUG] [Thread-21936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:05:46.729 [DEBUG] [Thread-21936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:05:46.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:05:46.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:05:46.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:05:46.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:05:46.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:05:46.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:05:46.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:05:46.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:05:46.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:05:46.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.753904 -999.00  +20.50  17.04     32   +3.40 1 2 1 1 1     2    0 14.35 -116.71 Z.... 16.7 17.0 259.1 20.2 21.0 -21.6 21.0 -20.5 20.7 -20.3 20.9 -21.1
2025-11-12T20:05:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:05:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:05:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.753904
2025-11-12T20:05:46.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:05:46.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:05:46.754 [DEBUG] [Thread-21936] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:05:46.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:05:34', tmtdew=19.85, humidity=26.66, cloud=0.0, wind=26.85, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:05:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:05:46.840 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:05:46.852 [DEBUG] [Thread-21939] [transport.py] [_log()] starting thread (client mode): 0x149220b0
2025-11-12T20:05:46.852 [DEBUG] [Thread-21939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:05:46.867 [DEBUG] [Thread-21939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:05:46.867 [INFO] [Thread-21939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] client lang: <none>
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] server lang: <none>
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] kex follows: False
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:05:46.875 [DEBUG] [Thread-21939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:05:46.876 [DEBUG] [Thread-21939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:05:46.876 [DEBUG] [Thread-21939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:05:46.876 [DEBUG] [Thread-21939] [transport.py] [_log()] Compression: none
2025-11-12T20:05:46.876 [DEBUG] [Thread-21939] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:05:46.933 [DEBUG] [Thread-21939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:05:46.933 [DEBUG] [Thread-21939] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:05:46.934 [DEBUG] [Thread-21939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:05:46.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:05:46.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:05:46.988 [DEBUG] [Thread-21939] [transport.py] [_log()] userauth is OK
2025-11-12T20:05:46.989 [DEBUG] [Thread-21939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:05:46.989 [DEBUG] [Thread-21939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:05:46.989 [DEBUG] [Thread-21939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:05:46.989 [DEBUG] [Thread-21939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:05:47.007 [INFO] [Thread-21939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:05:47.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:05:47.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:05:47.840 [DEBUG] [Thread-21939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:05:47.840 [DEBUG] [Thread-21939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:05:47.887 [DEBUG] [Thread-21939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:05:47.888 [DEBUG] [Thread-21939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:05:47.897 [DEBUG] [Thread-21939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:05:47.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:05:47.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-11-12T20:05:47.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-11-12T20:05:47.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:05:47.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:05:47.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:05:47.934 [DEBUG] [Thread-21939] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:05:49.750 [DEBUG] [Thread-21941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:05:50.424 [DEBUG] [Thread-21942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:05:58.141 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:05:58.142 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:06:04.794 [DEBUG] [Thread-21943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:06:17.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:06:17.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:06:17.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:06:18.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 6, 6), 19.82, 26.73, 0.0, 25.36, 20.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:06:18.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:06:06
2025-11-12T20:06:18.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:06:18.884 [DEBUG] [Thread-21944] [transport.py] [_log()] starting thread (client mode): 0x11f03e50
2025-11-12T20:06:18.885 [DEBUG] [Thread-21944] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:06:18.906 [DEBUG] [Thread-21944] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:06:18.907 [INFO] [Thread-21944] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:06:18.910 [DEBUG] [Thread-21944] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:06:18.910 [DEBUG] [Thread-21944] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:06:18.910 [DEBUG] [Thread-21944] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:06:18.910 [DEBUG] [Thread-21944] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] client lang: <none>
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] server lang: <none>
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] kex follows: False
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:06:18.911 [DEBUG] [Thread-21944] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:06:18.912 [DEBUG] [Thread-21944] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:06:18.912 [DEBUG] [Thread-21944] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:06:18.912 [DEBUG] [Thread-21944] [transport.py] [_log()] Compression: none
2025-11-12T20:06:18.912 [DEBUG] [Thread-21944] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:06:18.932 [DEBUG] [Thread-21944] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:06:18.932 [DEBUG] [Thread-21944] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:06:18.933 [DEBUG] [Thread-21944] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:06:18.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:06:18.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:06:18.935 [DEBUG] [Thread-21944] [transport.py] [_log()] userauth is OK
2025-11-12T20:06:18.936 [DEBUG] [Thread-21944] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:06:18.936 [DEBUG] [Thread-21944] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:06:18.936 [DEBUG] [Thread-21944] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:06:18.936 [DEBUG] [Thread-21944] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:06:18.972 [INFO] [Thread-21944] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:06:18.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:06:19.631 [DEBUG] [Thread-21944] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:06:19.632 [DEBUG] [Thread-21944] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:06:19.632 [DEBUG] [Thread-21944] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:06:19.672 [DEBUG] [Thread-21944] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:06:19.673 [DEBUG] [Thread-21944] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:06:19.676 [DEBUG] [Thread-21944] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:06:19.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:06:19.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:06:19.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:06:19.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:06:19.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:06:19.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:06:19.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:06:19.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:06:19.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:06:19.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.754251 -999.00  +20.40  13.64     32   +3.40 1 2 1 1 1     2    0 13.74 -120.11 Z.... 12.7 13.6 261.6 24.5 21.0 -21.5 21.0 -20.4 20.6 -20.2 20.9 -20.9
2025-11-12T20:06:19.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:06:19.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:06:19.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.754251
2025-11-12T20:06:19.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:06:19.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:06:19.701 [DEBUG] [Thread-21944] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:06:19.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:06:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:06:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:06:19.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:06:06', tmtdew=19.82, humidity=26.73, cloud=0.0, wind=25.36, temperature=20.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:06:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:06:19.782 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:06:19.794 [DEBUG] [Thread-21947] [transport.py] [_log()] starting thread (client mode): 0x14921510
2025-11-12T20:06:19.794 [DEBUG] [Thread-21947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:06:19.809 [DEBUG] [Thread-21947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:06:19.809 [INFO] [Thread-21947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] client lang: <none>
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] server lang: <none>
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] kex follows: False
2025-11-12T20:06:19.817 [DEBUG] [Thread-21947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:06:19.818 [DEBUG] [Thread-21947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:06:19.818 [DEBUG] [Thread-21947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:06:19.818 [DEBUG] [Thread-21947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:06:19.818 [DEBUG] [Thread-21947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:06:19.818 [DEBUG] [Thread-21947] [transport.py] [_log()] Compression: none
2025-11-12T20:06:19.818 [DEBUG] [Thread-21947] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:06:19.828 [DEBUG] [Thread-21949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:06:19.876 [DEBUG] [Thread-21947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:06:19.876 [DEBUG] [Thread-21947] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:06:19.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:06:19.877 [DEBUG] [Thread-21947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:06:19.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:06:19.933 [DEBUG] [Thread-21947] [transport.py] [_log()] userauth is OK
2025-11-12T20:06:19.933 [DEBUG] [Thread-21947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:06:19.933 [DEBUG] [Thread-21947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:06:19.933 [DEBUG] [Thread-21947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:06:19.933 [DEBUG] [Thread-21947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:06:19.951 [INFO] [Thread-21947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:06:19.951 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:06:19.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:06:20.769 [DEBUG] [Thread-21947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:06:20.770 [DEBUG] [Thread-21947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:06:20.817 [DEBUG] [Thread-21947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:06:20.817 [DEBUG] [Thread-21947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:06:20.826 [DEBUG] [Thread-21947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:06:20.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:06:20.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-11-12T20:06:20.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-11-12T20:06:20.853 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:06:20.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:06:20.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:06:20.861 [DEBUG] [Thread-21947] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:06:34.879 [DEBUG] [Thread-21950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:06:49.910 [DEBUG] [Thread-21951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:06:50.481 [DEBUG] [Thread-21952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:06:50.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:06:50.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:06:50.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-11-12T20:06:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 6, 38), 19.85, 26.66, 0.0, 25.14, 20.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:06:51.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:06:38
2025-11-12T20:06:51.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:06:51.806 [DEBUG] [Thread-21953] [transport.py] [_log()] starting thread (client mode): 0x11f033a0
2025-11-12T20:06:51.806 [DEBUG] [Thread-21953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:06:51.826 [DEBUG] [Thread-21953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:06:51.827 [INFO] [Thread-21953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:06:51.829 [DEBUG] [Thread-21953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] client lang: <none>
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] server lang: <none>
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] kex follows: False
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] Compression: none
2025-11-12T20:06:51.830 [DEBUG] [Thread-21953] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:06:51.848 [DEBUG] [Thread-21953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:06:51.848 [DEBUG] [Thread-21953] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:06:51.849 [DEBUG] [Thread-21953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:06:51.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:06:51.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:06:51.851 [DEBUG] [Thread-21953] [transport.py] [_log()] userauth is OK
2025-11-12T20:06:51.851 [DEBUG] [Thread-21953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:06:51.851 [DEBUG] [Thread-21953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:06:51.851 [DEBUG] [Thread-21953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:06:51.851 [DEBUG] [Thread-21953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:06:51.877 [INFO] [Thread-21953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:06:51.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:06:52.497 [DEBUG] [Thread-21953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:06:52.497 [DEBUG] [Thread-21953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:06:52.497 [DEBUG] [Thread-21953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:06:52.538 [DEBUG] [Thread-21953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:06:52.538 [DEBUG] [Thread-21953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:06:52.541 [DEBUG] [Thread-21953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:06:52.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:06:52.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:06:52.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:06:52.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:06:52.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:06:52.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:06:52.563 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:06:52.563 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:06:52.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:06:52.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.754599 -999.00  +20.40  16.58     32   +3.40 1 2 1 1 1     1    0 14.28 -114.18 ZN... 13.0 16.6 262.0 21.1 21.0 -21.5 20.9 -20.5 20.6 -20.3 20.9 -21.1
2025-11-12T20:06:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:06:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:06:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.754599
2025-11-12T20:06:52.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:06:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:06:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:06:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:06:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:06:52.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:06:38', tmtdew=19.85, humidity=26.66, cloud=0.0, wind=25.14, temperature=20.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:06:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:06:52.565 [DEBUG] [Thread-21953] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:06:52.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:06:52.660 [DEBUG] [Thread-21956] [transport.py] [_log()] starting thread (client mode): 0x14915840
2025-11-12T20:06:52.661 [DEBUG] [Thread-21956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:06:52.677 [DEBUG] [Thread-21956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:06:52.677 [INFO] [Thread-21956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] client lang: <none>
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] server lang: <none>
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] kex follows: False
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:06:52.685 [DEBUG] [Thread-21956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:06:52.686 [DEBUG] [Thread-21956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:06:52.686 [DEBUG] [Thread-21956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:06:52.686 [DEBUG] [Thread-21956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:06:52.686 [DEBUG] [Thread-21956] [transport.py] [_log()] Compression: none
2025-11-12T20:06:52.686 [DEBUG] [Thread-21956] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:06:52.746 [DEBUG] [Thread-21956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:06:52.747 [DEBUG] [Thread-21956] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:06:52.747 [DEBUG] [Thread-21956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:06:52.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:06:52.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:06:52.805 [DEBUG] [Thread-21956] [transport.py] [_log()] userauth is OK
2025-11-12T20:06:52.805 [DEBUG] [Thread-21956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:06:52.805 [DEBUG] [Thread-21956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:06:52.805 [DEBUG] [Thread-21956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:06:52.805 [DEBUG] [Thread-21956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:06:52.825 [INFO] [Thread-21956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:06:52.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:06:52.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:06:53.637 [DEBUG] [Thread-21956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:06:53.637 [DEBUG] [Thread-21956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:06:53.686 [DEBUG] [Thread-21956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:06:53.686 [DEBUG] [Thread-21956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:06:53.695 [DEBUG] [Thread-21956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:06:53.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:06:53.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:06:53.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-11-12T20:06:53.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:06:53.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:06:53.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:06:53.732 [DEBUG] [Thread-21956] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:07:03.003 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:07:03.005 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:07:04.947 [DEBUG] [Thread-21958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:07:19.998 [DEBUG] [Thread-21959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:07:23.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:07:23.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:07:23.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-11-12T20:07:24.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 7, 10), 19.81, 26.75, 0.0, 26.56, 20.47, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:07:24.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:07:10
2025-11-12T20:07:24.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:07:24.684 [DEBUG] [Thread-21960] [transport.py] [_log()] starting thread (client mode): 0x14917220
2025-11-12T20:07:24.684 [DEBUG] [Thread-21960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:07:24.704 [DEBUG] [Thread-21960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:07:24.704 [INFO] [Thread-21960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:07:24.707 [DEBUG] [Thread-21960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:07:24.707 [DEBUG] [Thread-21960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:07:24.707 [DEBUG] [Thread-21960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:07:24.707 [DEBUG] [Thread-21960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:07:24.707 [DEBUG] [Thread-21960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:07:24.707 [DEBUG] [Thread-21960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] client lang: <none>
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] server lang: <none>
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] kex follows: False
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] Compression: none
2025-11-12T20:07:24.708 [DEBUG] [Thread-21960] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:07:24.724 [DEBUG] [Thread-21960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:07:24.724 [DEBUG] [Thread-21960] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:07:24.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:07:24.726 [DEBUG] [Thread-21960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:07:24.726 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:07:24.727 [DEBUG] [Thread-21960] [transport.py] [_log()] userauth is OK
2025-11-12T20:07:24.728 [DEBUG] [Thread-21960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:07:24.728 [DEBUG] [Thread-21960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:07:24.728 [DEBUG] [Thread-21960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:07:24.728 [DEBUG] [Thread-21960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:07:24.751 [INFO] [Thread-21960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:07:24.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:07:25.364 [DEBUG] [Thread-21960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:07:25.364 [DEBUG] [Thread-21960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:07:25.364 [DEBUG] [Thread-21960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:07:25.405 [DEBUG] [Thread-21960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:07:25.405 [DEBUG] [Thread-21960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:07:25.408 [DEBUG] [Thread-21960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:07:25.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:07:25.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:07:25.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:07:25.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:07:25.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:07:25.431 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:07:25.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:07:25.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:07:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:07:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.754946 -999.00  +20.40  14.54     32   +3.40 1 2 1 1 1     1    0 14.44 -106.52 ZN... 15.4 14.5 259.8 22.0 21.0 -21.5 20.9 -20.5 20.6 -20.2 20.9 -21.0
2025-11-12T20:07:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:07:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:07:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.754946
2025-11-12T20:07:25.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:07:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:07:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:07:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:07:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:07:25.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:07:10', tmtdew=19.81, humidity=26.75, cloud=0.0, wind=26.56, temperature=20.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:07:07.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:07:25.434 [DEBUG] [Thread-21960] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:07:25.517 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:07:25.529 [DEBUG] [Thread-21963] [transport.py] [_log()] starting thread (client mode): 0x149474c0
2025-11-12T20:07:25.529 [DEBUG] [Thread-21963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:07:25.544 [DEBUG] [Thread-21963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:07:25.544 [INFO] [Thread-21963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:07:25.551 [DEBUG] [Thread-21963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] client lang: <none>
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] server lang: <none>
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] kex follows: False
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] Compression: none
2025-11-12T20:07:25.552 [DEBUG] [Thread-21963] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:07:25.608 [DEBUG] [Thread-21963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:07:25.609 [DEBUG] [Thread-21963] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:07:25.609 [DEBUG] [Thread-21963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:07:25.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:07:25.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:07:25.664 [DEBUG] [Thread-21963] [transport.py] [_log()] userauth is OK
2025-11-12T20:07:25.665 [DEBUG] [Thread-21963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:07:25.665 [DEBUG] [Thread-21963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:07:25.665 [DEBUG] [Thread-21963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:07:25.665 [DEBUG] [Thread-21963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:07:25.684 [INFO] [Thread-21963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:07:25.685 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:07:25.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:07:26.510 [DEBUG] [Thread-21963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:07:26.510 [DEBUG] [Thread-21963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:07:26.559 [DEBUG] [Thread-21963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:07:26.559 [DEBUG] [Thread-21963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:07:26.568 [DEBUG] [Thread-21963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:07:26.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:07:26.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-11-12T20:07:26.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:07:26.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:07:26.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:07:26.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:07:26.605 [DEBUG] [Thread-21963] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:07:35.039 [DEBUG] [Thread-21965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:07:50.096 [DEBUG] [Thread-21966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:07:50.535 [DEBUG] [Thread-21967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:07:56.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:07:56.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:07:56.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-11-12T20:07:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 7, 42), 19.77, 26.71, 0.0, 19.85, 20.4, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:07:57.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:07:42
2025-11-12T20:07:57.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:07:57.560 [DEBUG] [Thread-21968] [transport.py] [_log()] starting thread (client mode): 0x149156c0
2025-11-12T20:07:57.560 [DEBUG] [Thread-21968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:07:57.580 [DEBUG] [Thread-21968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:07:57.581 [INFO] [Thread-21968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:07:57.584 [DEBUG] [Thread-21968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:07:57.584 [DEBUG] [Thread-21968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:07:57.584 [DEBUG] [Thread-21968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:07:57.584 [DEBUG] [Thread-21968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:07:57.584 [DEBUG] [Thread-21968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:07:57.584 [DEBUG] [Thread-21968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:07:57.584 [DEBUG] [Thread-21968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:07:57.584 [DEBUG] [Thread-21968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] client lang: <none>
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] server lang: <none>
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] kex follows: False
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] Compression: none
2025-11-12T20:07:57.585 [DEBUG] [Thread-21968] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:07:57.605 [DEBUG] [Thread-21968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:07:57.606 [DEBUG] [Thread-21968] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:07:57.606 [DEBUG] [Thread-21968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:07:57.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:07:57.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:07:57.609 [DEBUG] [Thread-21968] [transport.py] [_log()] userauth is OK
2025-11-12T20:07:57.609 [DEBUG] [Thread-21968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:07:57.609 [DEBUG] [Thread-21968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:07:57.609 [DEBUG] [Thread-21968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:07:57.609 [DEBUG] [Thread-21968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:07:57.633 [INFO] [Thread-21968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:07:57.636 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:07:58.276 [DEBUG] [Thread-21968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:07:58.277 [DEBUG] [Thread-21968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:07:58.277 [DEBUG] [Thread-21968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:07:58.317 [DEBUG] [Thread-21968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:07:58.317 [DEBUG] [Thread-21968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:07:58.320 [DEBUG] [Thread-21968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:07:58.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:07:58.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:07:58.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:07:58.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:07:58.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:07:58.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:07:58.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:07:58.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.755293 -999.00  +20.40  15.20     32   +3.40 1 2 1 1 1     1    0 14.07 -111.98 ZN... 15.2 15.2 259.8 18.5 20.9 -21.5 20.9 -20.5 20.6 -20.3 20.9 -21.0
2025-11-12T20:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.755293
2025-11-12T20:07:58.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:07:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:07:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:07:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:07:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:07:58.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:07:42', tmtdew=19.77, humidity=26.71, cloud=0.0, wind=19.85, temperature=20.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:07:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:07:58.347 [DEBUG] [Thread-21968] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:07:58.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:07:58.443 [DEBUG] [Thread-21971] [transport.py] [_log()] starting thread (client mode): 0x149a9210
2025-11-12T20:07:58.443 [DEBUG] [Thread-21971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:07:58.458 [DEBUG] [Thread-21971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:07:58.458 [INFO] [Thread-21971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:07:58.465 [DEBUG] [Thread-21971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] client lang: <none>
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] server lang: <none>
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] kex follows: False
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:07:58.466 [DEBUG] [Thread-21971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:07:58.467 [DEBUG] [Thread-21971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:07:58.467 [DEBUG] [Thread-21971] [transport.py] [_log()] Compression: none
2025-11-12T20:07:58.467 [DEBUG] [Thread-21971] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:07:58.524 [DEBUG] [Thread-21971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:07:58.524 [DEBUG] [Thread-21971] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:07:58.525 [DEBUG] [Thread-21971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:07:58.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:07:58.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:07:58.581 [DEBUG] [Thread-21971] [transport.py] [_log()] userauth is OK
2025-11-12T20:07:58.581 [DEBUG] [Thread-21971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:07:58.581 [DEBUG] [Thread-21971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:07:58.581 [DEBUG] [Thread-21971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:07:58.581 [DEBUG] [Thread-21971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:07:58.600 [INFO] [Thread-21971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:07:58.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:07:58.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:07:59.448 [DEBUG] [Thread-21971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:07:59.449 [DEBUG] [Thread-21971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:07:59.496 [DEBUG] [Thread-21971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:07:59.496 [DEBUG] [Thread-21971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:07:59.505 [DEBUG] [Thread-21971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:07:59.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:07:59.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-11-12T20:07:59.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:07:59.533 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:07:59.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:07:59.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:07:59.542 [DEBUG] [Thread-21971] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:08:05.127 [DEBUG] [Thread-21973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:08:12.076 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:08:12.077 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:08:20.178 [DEBUG] [Thread-21974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:08:29.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:08:29.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:08: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-11-12T20:08:30.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 8, 14), 19.78, 26.71, 0.0, 23.08, 20.42, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:08:30.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:08:14
2025-11-12T20:08:30.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:08:30.526 [DEBUG] [Thread-21975] [transport.py] [_log()] starting thread (client mode): 0x17399f00
2025-11-12T20:08:30.526 [DEBUG] [Thread-21975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:08:30.546 [DEBUG] [Thread-21975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:08:30.546 [INFO] [Thread-21975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] client lang: <none>
2025-11-12T20:08:30.547 [DEBUG] [Thread-21975] [transport.py] [_log()] server lang: <none>
2025-11-12T20:08:30.548 [DEBUG] [Thread-21975] [transport.py] [_log()] kex follows: False
2025-11-12T20:08:30.548 [DEBUG] [Thread-21975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:08:30.548 [DEBUG] [Thread-21975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:08:30.548 [DEBUG] [Thread-21975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:08:30.548 [DEBUG] [Thread-21975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:08:30.548 [DEBUG] [Thread-21975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:08:30.548 [DEBUG] [Thread-21975] [transport.py] [_log()] Compression: none
2025-11-12T20:08:30.548 [DEBUG] [Thread-21975] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:08:30.555 [DEBUG] [Thread-21975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:08:30.555 [DEBUG] [Thread-21975] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:08:30.555 [DEBUG] [Thread-21975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:08:30.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:08:30.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:08:30.556 [DEBUG] [Thread-21975] [transport.py] [_log()] userauth is OK
2025-11-12T20:08:30.556 [DEBUG] [Thread-21975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:08:30.556 [DEBUG] [Thread-21975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:08:30.556 [DEBUG] [Thread-21975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:08:30.556 [DEBUG] [Thread-21975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:08:30.565 [INFO] [Thread-21975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:08:30.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:08:31.196 [DEBUG] [Thread-21975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:08:31.196 [DEBUG] [Thread-21975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:08:31.196 [DEBUG] [Thread-21975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:08:31.237 [DEBUG] [Thread-21975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:08:31.237 [DEBUG] [Thread-21975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:08:31.239 [DEBUG] [Thread-21975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:08:31.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:08:31.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:08:31.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:08:31.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:08:31.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:08:31.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:08:31.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.755640 -999.00  +20.40  12.71     32   +3.30 1 2 1 1 1     1    0 15.22 -102.86 ZN..W 18.9 12.7 262.0 18.1 20.9 -21.5 20.9 -20.5 20.6 -20.2 20.9 -21.0
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.755640
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:08:31.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:08:14', tmtdew=19.78, humidity=26.71, cloud=0.0, wind=23.08, temperature=20.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:08:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:08:31.260 [DEBUG] [Thread-21975] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:08:31.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:08:35.211 [DEBUG] [Thread-21978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:08:50.265 [DEBUG] [Thread-21979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:08:50.591 [DEBUG] [Thread-21980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:09:05.300 [DEBUG] [Thread-21981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:09:17.518 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:09:17.520 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:09:20.327 [DEBUG] [Thread-21982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:09:35.362 [DEBUG] [Thread-21983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:09:50.393 [DEBUG] [Thread-21984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:09:50.645 [DEBUG] [Thread-21985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:10:05.422 [DEBUG] [Thread-21986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:10:20.461 [DEBUG] [Thread-21987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:10:26.497 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:10:26.498 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:10:35.493 [DEBUG] [Thread-21988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:10:46.587 [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-11-12T20:10:50.532 [DEBUG] [Thread-21989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:10:50.722 [DEBUG] [Thread-21990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:11:05.567 [DEBUG] [Thread-21991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:11:16.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:11:16.618 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:11:16.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-11-12T20:11:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 10, 53), 19.64, 26.86, 0.0, 22.23, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:11:17.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:10:53
2025-11-12T20:11:17.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:11:17.556 [DEBUG] [Thread-21992] [transport.py] [_log()] starting thread (client mode): 0x17399ff0
2025-11-12T20:11:17.556 [DEBUG] [Thread-21992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:11:17.577 [DEBUG] [Thread-21992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:11:17.577 [INFO] [Thread-21992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:11:17.580 [DEBUG] [Thread-21992] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:11:17.580 [DEBUG] [Thread-21992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:11:17.580 [DEBUG] [Thread-21992] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:11:17.580 [DEBUG] [Thread-21992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:11:17.580 [DEBUG] [Thread-21992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:11:17.580 [DEBUG] [Thread-21992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] client lang: <none>
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] server lang: <none>
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] kex follows: False
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] Compression: none
2025-11-12T20:11:17.581 [DEBUG] [Thread-21992] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:11:17.597 [DEBUG] [Thread-21992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:11:17.598 [DEBUG] [Thread-21992] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:11:17.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:11:17.599 [DEBUG] [Thread-21992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:11:17.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:11:17.601 [DEBUG] [Thread-21992] [transport.py] [_log()] userauth is OK
2025-11-12T20:11:17.601 [DEBUG] [Thread-21992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:11:17.601 [DEBUG] [Thread-21992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:11:17.601 [DEBUG] [Thread-21992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:11:17.601 [DEBUG] [Thread-21992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:11:17.626 [INFO] [Thread-21992] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:11:17.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:11:18.239 [DEBUG] [Thread-21992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:11:18.239 [DEBUG] [Thread-21992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:11:18.240 [DEBUG] [Thread-21992] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:11:18.280 [DEBUG] [Thread-21992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:11:18.281 [DEBUG] [Thread-21992] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:11:18.284 [DEBUG] [Thread-21992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:11:18.296 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:11:18.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:11:18.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:11:18.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:11:18.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:11:18.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:11:18.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:11:18.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:11:18.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:11:18.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.757724 -999.00  +20.30  20.84     33   +3.60 1 2 1 1 1     0    0 15.02 -88.98 ZnE.W 19.4 20.8 255.6 31.8 -999.0 -999.0 20.8 -20.5 20.5 -20.4 20.8 -21.0
2025-11-12T20:11:18.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:11:18.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:11:18.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.757724
2025-11-12T20:11:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:11:18.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:11:18.313 [DEBUG] [Thread-21992] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:11:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:11:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:11:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:11:18.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:10:53', tmtdew=19.64, humidity=26.86, cloud=0.0, wind=22.23, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:11:07.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:11: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-11-12T20:11:18.405 [DEBUG] [Thread-21995] [transport.py] [_log()] starting thread (client mode): 0x1739a110
2025-11-12T20:11:18.406 [DEBUG] [Thread-21995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:11:18.421 [DEBUG] [Thread-21995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:11:18.421 [INFO] [Thread-21995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] client lang: <none>
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] server lang: <none>
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] kex follows: False
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:11:18.429 [DEBUG] [Thread-21995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:11:18.430 [DEBUG] [Thread-21995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:11:18.430 [DEBUG] [Thread-21995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:11:18.430 [DEBUG] [Thread-21995] [transport.py] [_log()] Compression: none
2025-11-12T20:11:18.430 [DEBUG] [Thread-21995] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:11:18.489 [DEBUG] [Thread-21995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:11:18.490 [DEBUG] [Thread-21995] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:11:18.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:11:18.491 [DEBUG] [Thread-21995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:11:18.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:11:18.544 [DEBUG] [Thread-21995] [transport.py] [_log()] userauth is OK
2025-11-12T20:11:18.545 [DEBUG] [Thread-21995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:11:18.545 [DEBUG] [Thread-21995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:11:18.545 [DEBUG] [Thread-21995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:11:18.545 [DEBUG] [Thread-21995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:11:18.564 [INFO] [Thread-21995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:11:18.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:11:18.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:11:19.397 [DEBUG] [Thread-21995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:11:19.398 [DEBUG] [Thread-21995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:11:19.450 [DEBUG] [Thread-21995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:11:19.450 [DEBUG] [Thread-21995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:11:19.461 [DEBUG] [Thread-21995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:11:19.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:11:19.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-11-12T20:11: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') -> 00000000
2025-11-12T20:11:19.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:11:19.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:11:19.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:11:19.498 [DEBUG] [Thread-21995] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:11:20.600 [DEBUG] [Thread-21997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:11:33.027 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:11:33.028 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:11:35.655 [DEBUG] [Thread-21998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:11:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:11:49.521 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:11:49.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:11:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 11, 25), 19.62, 26.91, 0.0, 22.87, 20.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:11:50.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:11:25
2025-11-12T20:11:50.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:11:50.438 [DEBUG] [Thread-21999] [transport.py] [_log()] starting thread (client mode): 0x1739a6b0
2025-11-12T20:11:50.438 [DEBUG] [Thread-21999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:11:50.457 [DEBUG] [Thread-21999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:11:50.457 [INFO] [Thread-21999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] client lang: <none>
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] server lang: <none>
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] kex follows: False
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:11:50.460 [DEBUG] [Thread-21999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:11:50.461 [DEBUG] [Thread-21999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:11:50.461 [DEBUG] [Thread-21999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:11:50.461 [DEBUG] [Thread-21999] [transport.py] [_log()] Compression: none
2025-11-12T20:11:50.461 [DEBUG] [Thread-21999] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:11:50.478 [DEBUG] [Thread-21999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:11:50.478 [DEBUG] [Thread-21999] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:11:50.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:11:50.479 [DEBUG] [Thread-21999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:11:50.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:11:50.481 [DEBUG] [Thread-21999] [transport.py] [_log()] userauth is OK
2025-11-12T20:11:50.482 [DEBUG] [Thread-21999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:11:50.482 [DEBUG] [Thread-21999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:11:50.482 [DEBUG] [Thread-21999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:11:50.482 [DEBUG] [Thread-21999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:11:50.518 [INFO] [Thread-21999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:11:50.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:11:50.688 [DEBUG] [Thread-22001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:11:50.798 [DEBUG] [Thread-22002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:11:51.125 [DEBUG] [Thread-21999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:11:51.125 [DEBUG] [Thread-21999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:11:51.126 [DEBUG] [Thread-21999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:11:51.166 [DEBUG] [Thread-21999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:11:51.167 [DEBUG] [Thread-21999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:11:51.170 [DEBUG] [Thread-21999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:11:51.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:11:51.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:11:51.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:11:51.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:11:51.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:11:51.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:11:51.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:11:51.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:11:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:11:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.758071 -999.00  +20.30  17.37     32   +3.50 1 2 1 1 1     0    0 14.91 -83.76 ZnE.W 16.1 17.4 264.4 25.6 20.9 -21.7 20.9 -20.6 20.5 -20.4 20.7 -21.1
2025-11-12T20:11:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:11:51.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:11:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.758071
2025-11-12T20:11:51.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:11:51.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:11:51.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:11:51.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:11:51.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:11:51.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:11:25', tmtdew=19.62, humidity=26.91, cloud=0.0, wind=22.87, temperature=20.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:11:37.334', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:11:51.193 [DEBUG] [Thread-21999] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:11:51.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:11:51.287 [DEBUG] [Thread-22004] [transport.py] [_log()] starting thread (client mode): 0x17399030
2025-11-12T20:11:51.287 [DEBUG] [Thread-22004] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:11:51.307 [DEBUG] [Thread-22004] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:11:51.307 [INFO] [Thread-22004] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:11:51.314 [DEBUG] [Thread-22004] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] client lang: <none>
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] server lang: <none>
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] kex follows: False
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:11:51.315 [DEBUG] [Thread-22004] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:11:51.316 [DEBUG] [Thread-22004] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:11:51.316 [DEBUG] [Thread-22004] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:11:51.316 [DEBUG] [Thread-22004] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:11:51.316 [DEBUG] [Thread-22004] [transport.py] [_log()] Compression: none
2025-11-12T20:11:51.316 [DEBUG] [Thread-22004] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:11:51.373 [DEBUG] [Thread-22004] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:11:51.374 [DEBUG] [Thread-22004] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:11:51.374 [DEBUG] [Thread-22004] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:11:51.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:11:51.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:11:51.429 [DEBUG] [Thread-22004] [transport.py] [_log()] userauth is OK
2025-11-12T20:11:51.429 [DEBUG] [Thread-22004] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:11:51.429 [DEBUG] [Thread-22004] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:11:51.429 [DEBUG] [Thread-22004] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:11:51.429 [DEBUG] [Thread-22004] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:11:51.448 [INFO] [Thread-22004] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:11: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-11-12T20:11:51.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:11:52.303 [DEBUG] [Thread-22004] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:11:52.303 [DEBUG] [Thread-22004] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:11:52.350 [DEBUG] [Thread-22004] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:11:52.351 [DEBUG] [Thread-22004] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:11:52.360 [DEBUG] [Thread-22004] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:11:52.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:11:52.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:11: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') -> 00000000
2025-11-12T20:11:52.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:11:52.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:11:52.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:11:52.397 [DEBUG] [Thread-22004] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:12:05.719 [DEBUG] [Thread-22006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:12:20.771 [DEBUG] [Thread-22007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:12:22.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:12:22.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:12:22.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:12:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 11, 57), 19.58, 26.88, 0.0, 24.14, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:12:23.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:11:57
2025-11-12T20:12:23.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:12:23.403 [DEBUG] [Thread-22008] [transport.py] [_log()] starting thread (client mode): 0x1739a380
2025-11-12T20:12:23.403 [DEBUG] [Thread-22008] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:12:23.419 [DEBUG] [Thread-22008] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:12:23.419 [INFO] [Thread-22008] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] client lang: <none>
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] server lang: <none>
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] kex follows: False
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:12:23.422 [DEBUG] [Thread-22008] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:12:23.423 [DEBUG] [Thread-22008] [transport.py] [_log()] Compression: none
2025-11-12T20:12:23.423 [DEBUG] [Thread-22008] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:12:23.438 [DEBUG] [Thread-22008] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:12:23.438 [DEBUG] [Thread-22008] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:12:23.439 [DEBUG] [Thread-22008] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:12:23.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:12:23.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:12:23.439 [DEBUG] [Thread-22008] [transport.py] [_log()] userauth is OK
2025-11-12T20:12:23.439 [DEBUG] [Thread-22008] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:12:23.439 [DEBUG] [Thread-22008] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:12:23.439 [DEBUG] [Thread-22008] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:12:23.439 [DEBUG] [Thread-22008] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:12:23.448 [INFO] [Thread-22008] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:12:23.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:12:24.107 [DEBUG] [Thread-22008] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:12:24.107 [DEBUG] [Thread-22008] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:12:24.107 [DEBUG] [Thread-22008] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:12:24.148 [DEBUG] [Thread-22008] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:12:24.148 [DEBUG] [Thread-22008] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:12:24.150 [DEBUG] [Thread-22008] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:12:24.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:12:24.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:12:24.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:12:24.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:12:24.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:12:24.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:12:24.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:12:24.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:12:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:12:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.758418 -999.00  +20.30  17.53     33   +3.50 1 2 1 1 1     0    0 14.84 -77.71 ZNE.W 18.9 17.5 263.0 24.6 20.8 -21.6 20.8 -20.6 20.5 -20.4 20.7 -21.1
2025-11-12T20:12:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:12:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:12:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.758418
2025-11-12T20:12:24.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:12:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:12:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:12:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:12:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:12:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:11:57', tmtdew=19.58, humidity=26.88, cloud=0.0, wind=24.14, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:12:07.315', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:12:24.165 [DEBUG] [Thread-22008] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:12:24.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:12:24.251 [DEBUG] [Thread-22011] [transport.py] [_log()] starting thread (client mode): 0x1739aa70
2025-11-12T20:12:24.251 [DEBUG] [Thread-22011] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:12:24.264 [DEBUG] [Thread-22011] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:12:24.265 [INFO] [Thread-22011] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] client lang: <none>
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] server lang: <none>
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] kex follows: False
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:12:24.272 [DEBUG] [Thread-22011] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:12:24.273 [DEBUG] [Thread-22011] [transport.py] [_log()] Compression: none
2025-11-12T20:12:24.273 [DEBUG] [Thread-22011] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:12:24.331 [DEBUG] [Thread-22011] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:12:24.331 [DEBUG] [Thread-22011] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:12:24.331 [DEBUG] [Thread-22011] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:12:24.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:12:24.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:12:24.392 [DEBUG] [Thread-22011] [transport.py] [_log()] userauth is OK
2025-11-12T20:12:24.393 [DEBUG] [Thread-22011] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:12:24.393 [DEBUG] [Thread-22011] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:12:24.393 [DEBUG] [Thread-22011] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:12:24.393 [DEBUG] [Thread-22011] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:12:24.410 [INFO] [Thread-22011] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:12:24.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:12:24.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:12:25.299 [DEBUG] [Thread-22011] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:12:25.299 [DEBUG] [Thread-22011] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:12:25.348 [DEBUG] [Thread-22011] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:12:25.348 [DEBUG] [Thread-22011] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:12:25.357 [DEBUG] [Thread-22011] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:12:25.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:12:25.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-11-12T20:12:25.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-11-12T20:12:25.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:12:25.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:12:25.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:12:25.389 [DEBUG] [Thread-22011] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:12:33.240 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:12:33.241 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:12:35.803 [DEBUG] [Thread-22013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:12:50.856 [DEBUG] [Thread-22014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:12:50.866 [DEBUG] [Thread-22015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:12:55.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:12:55.412 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:12:55.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-11-12T20:12:56.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 12, 29), 19.57, 26.88, 0.0, 25.0, 20.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:12:56.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:12:29
2025-11-12T20:12:56.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:12:56.337 [DEBUG] [Thread-22016] [transport.py] [_log()] starting thread (client mode): 0x1739bf70
2025-11-12T20:12:56.337 [DEBUG] [Thread-22016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:12:56.357 [DEBUG] [Thread-22016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:12:56.357 [INFO] [Thread-22016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:12:56.360 [DEBUG] [Thread-22016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:12:56.361 [DEBUG] [Thread-22016] [transport.py] [_log()] client lang: <none>
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] server lang: <none>
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] kex follows: False
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] Compression: none
2025-11-12T20:12:56.362 [DEBUG] [Thread-22016] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:12:56.370 [DEBUG] [Thread-22016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:12:56.371 [DEBUG] [Thread-22016] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:12:56.371 [DEBUG] [Thread-22016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:12:56.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:12:56.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:12:56.372 [DEBUG] [Thread-22016] [transport.py] [_log()] userauth is OK
2025-11-12T20:12:56.373 [DEBUG] [Thread-22016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:12:56.373 [DEBUG] [Thread-22016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:12:56.373 [DEBUG] [Thread-22016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:12:56.373 [DEBUG] [Thread-22016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:12:56.387 [INFO] [Thread-22016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:12:56.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:12:56.988 [DEBUG] [Thread-22016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:12:56.988 [DEBUG] [Thread-22016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:12:56.988 [DEBUG] [Thread-22016] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:12:57.028 [DEBUG] [Thread-22016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:12:57.029 [DEBUG] [Thread-22016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:12:57.031 [DEBUG] [Thread-22016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:12:57.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:12:57.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:12:57.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:12:57.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:12:57.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:12:57.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:12:57.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:12:57.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:12:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:12:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.758765 -999.00  +20.30  11.39     33   +3.50 1 2 1 1 1     0    0 14.75 -82.44 ZNE.W 13.7 11.4 271.6 25.2 20.9 -21.7 20.8 -20.6 20.5 -20.4 20.7 -21.2
2025-11-12T20:12:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:12:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:12:57.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.758765
2025-11-12T20:12:57.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:12:57.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:12:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:12:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:12:57.056 [DEBUG] [Thread-22016] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:12:57.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:12:57.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:12:29', tmtdew=19.57, humidity=26.88, cloud=0.0, wind=25.0, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:12:37.296', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:12:57.140 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:12:57.151 [DEBUG] [Thread-22019] [transport.py] [_log()] starting thread (client mode): 0x17398be0
2025-11-12T20:12:57.151 [DEBUG] [Thread-22019] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:12:57.166 [DEBUG] [Thread-22019] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:12:57.166 [INFO] [Thread-22019] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:12:57.173 [DEBUG] [Thread-22019] [transport.py] [_log()] client lang: <none>
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] server lang: <none>
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] kex follows: False
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] Compression: none
2025-11-12T20:12:57.174 [DEBUG] [Thread-22019] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:12:57.233 [DEBUG] [Thread-22019] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:12:57.233 [DEBUG] [Thread-22019] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:12:57.234 [DEBUG] [Thread-22019] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:12:57.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:12:57.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:12:57.293 [DEBUG] [Thread-22019] [transport.py] [_log()] userauth is OK
2025-11-12T20:12:57.293 [DEBUG] [Thread-22019] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:12:57.293 [DEBUG] [Thread-22019] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:12:57.293 [DEBUG] [Thread-22019] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:12:57.293 [DEBUG] [Thread-22019] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:12:57.311 [INFO] [Thread-22019] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:12:57.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:12:57.312 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:12:58.130 [DEBUG] [Thread-22019] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:12:58.130 [DEBUG] [Thread-22019] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:12:58.179 [DEBUG] [Thread-22019] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:12:58.179 [DEBUG] [Thread-22019] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:12:58.188 [DEBUG] [Thread-22019] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:12:58.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:12:58.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-11-12T20:12:58.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-11-12T20:12:58.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:12:58.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:12:58.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:12:58.224 [DEBUG] [Thread-22019] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:13:05.884 [DEBUG] [Thread-22021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:13:20.925 [DEBUG] [Thread-22022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:13:28.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:13:28.222 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:13:28.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-11-12T20:13:28.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 13, 1), 19.54, 26.95, 0.0, 25.09, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:13:28.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:13:01
2025-11-12T20:13:28.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:13:29.140 [DEBUG] [Thread-22023] [transport.py] [_log()] starting thread (client mode): 0x17399780
2025-11-12T20:13:29.141 [DEBUG] [Thread-22023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:13:29.162 [DEBUG] [Thread-22023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:13:29.162 [INFO] [Thread-22023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:13:29.163 [DEBUG] [Thread-22023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:13:29.163 [DEBUG] [Thread-22023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:13:29.163 [DEBUG] [Thread-22023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:13:29.163 [DEBUG] [Thread-22023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] client lang: <none>
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] server lang: <none>
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] kex follows: False
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] Compression: none
2025-11-12T20:13:29.164 [DEBUG] [Thread-22023] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:13:29.181 [DEBUG] [Thread-22023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:13:29.181 [DEBUG] [Thread-22023] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:13:29.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:13:29.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:13:29.183 [DEBUG] [Thread-22023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:13:29.183 [DEBUG] [Thread-22023] [transport.py] [_log()] userauth is OK
2025-11-12T20:13:29.184 [DEBUG] [Thread-22023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:13:29.184 [DEBUG] [Thread-22023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:13:29.184 [DEBUG] [Thread-22023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:13:29.184 [DEBUG] [Thread-22023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:13:29.201 [INFO] [Thread-22023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:13:29.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:13:29.847 [DEBUG] [Thread-22023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:13:29.847 [DEBUG] [Thread-22023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:13:29.847 [DEBUG] [Thread-22023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:13:29.887 [DEBUG] [Thread-22023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:13:29.888 [DEBUG] [Thread-22023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:13:29.890 [DEBUG] [Thread-22023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:13:29.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:13:29.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:13:29.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:13:29.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:13:29.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:13:29.913 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:13:29.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:13:29.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:13:29.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:13:29.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.758765 -999.00  +20.30  11.39     33   +3.50 1 2 1 1 1     0    0 14.75 -82.44 ZNE.W 13.7 11.4 271.6 25.2 20.9 -21.7 20.8 -20.6 20.5 -20.4 20.7 -21.2
2025-11-12T20:13:29.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:13:29.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:13:29.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.758765
2025-11-12T20:13:29.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:13:29.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:13:29.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:13:29.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:13:29.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:13:29.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:13:01', tmtdew=19.54, humidity=26.95, cloud=0.0, wind=25.09, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:12:37.296', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T02:42:00')
2025-11-12T20:13:29.916 [DEBUG] [Thread-22023] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:13: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-11-12T20:13:30.012 [DEBUG] [Thread-22026] [transport.py] [_log()] starting thread (client mode): 0x1739a8c0
2025-11-12T20:13:30.012 [DEBUG] [Thread-22026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:13:30.030 [DEBUG] [Thread-22026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:13:30.030 [INFO] [Thread-22026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:13:30.041 [DEBUG] [Thread-22026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:13:30.041 [DEBUG] [Thread-22026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:13:30.041 [DEBUG] [Thread-22026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:13:30.041 [DEBUG] [Thread-22026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:13:30.041 [DEBUG] [Thread-22026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] client lang: <none>
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] server lang: <none>
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] kex follows: False
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] Compression: none
2025-11-12T20:13:30.042 [DEBUG] [Thread-22026] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:13:30.097 [DEBUG] [Thread-22026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:13:30.098 [DEBUG] [Thread-22026] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:13:30.098 [DEBUG] [Thread-22026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:13:30.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:13:30.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:13:30.153 [DEBUG] [Thread-22026] [transport.py] [_log()] userauth is OK
2025-11-12T20:13:30.154 [DEBUG] [Thread-22026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:13:30.154 [DEBUG] [Thread-22026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:13:30.154 [DEBUG] [Thread-22026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:13:30.154 [DEBUG] [Thread-22026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:13:30.178 [INFO] [Thread-22026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:13: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-11-12T20:13:30.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:13:30.978 [DEBUG] [Thread-22026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:13:30.978 [DEBUG] [Thread-22026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:13:31.025 [DEBUG] [Thread-22026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:13:31.025 [DEBUG] [Thread-22026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:13:31.034 [DEBUG] [Thread-22026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:13:31.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:13:31.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-11-12T20:13:31.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-11-12T20:13:31.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:13:31.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:13:31.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:13:31.067 [DEBUG] [Thread-22026] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:13:33.444 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:13:33.445 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:13:35.958 [DEBUG] [Thread-22028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:13:50.930 [DEBUG] [Thread-22029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:13:51.000 [DEBUG] [Thread-22030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:14:01.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:14:01.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:14:01.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-11-12T20:14:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 13, 33), 19.65, 26.96, 0.0, 25.9, 20.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:14:01.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:13:33
2025-11-12T20:14:01.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:14:02.018 [DEBUG] [Thread-22031] [transport.py] [_log()] starting thread (client mode): 0x149a90f0
2025-11-12T20:14:02.018 [DEBUG] [Thread-22031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:14:02.038 [DEBUG] [Thread-22031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:14:02.038 [INFO] [Thread-22031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:14:02.041 [DEBUG] [Thread-22031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] client lang: <none>
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] server lang: <none>
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] kex follows: False
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] Compression: none
2025-11-12T20:14:02.042 [DEBUG] [Thread-22031] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:14:02.060 [DEBUG] [Thread-22031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:14:02.061 [DEBUG] [Thread-22031] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:14:02.061 [DEBUG] [Thread-22031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:14:02.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:14:02.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:14:02.063 [DEBUG] [Thread-22031] [transport.py] [_log()] userauth is OK
2025-11-12T20:14:02.063 [DEBUG] [Thread-22031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:14:02.064 [DEBUG] [Thread-22031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:14:02.064 [DEBUG] [Thread-22031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:14:02.064 [DEBUG] [Thread-22031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:14:02.088 [INFO] [Thread-22031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:14:02.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:14:02.698 [DEBUG] [Thread-22031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:14:02.699 [DEBUG] [Thread-22031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:14:02.699 [DEBUG] [Thread-22031] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:14:02.740 [DEBUG] [Thread-22031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:14:02.740 [DEBUG] [Thread-22031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:14:02.743 [DEBUG] [Thread-22031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:14:02.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:14:02.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:14:02.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:14:02.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:14:02.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:14:02.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:14:02.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:14:02.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:14:02.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:14:02.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.759112 -999.00  +20.30  19.71     33   +3.50 1 2 1 1 1     0    0 15.31 -73.76 ZNE.W 11.8 19.7 259.2 28.8 20.9 -21.7 20.8 -20.6 20.4 -20.3 20.7 -21.1
2025-11-12T20:14:02.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:14:02.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:14:02.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.759112
2025-11-12T20:14:02.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:14:02.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:14:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:14:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:14:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:14:02.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:13:33', tmtdew=19.65, humidity=26.96, cloud=0.0, wind=25.9, temperature=20.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:13:07.277', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T18:13:00')
2025-11-12T20:14:02.770 [DEBUG] [Thread-22031] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:14:02.854 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:14:02.866 [DEBUG] [Thread-22034] [transport.py] [_log()] starting thread (client mode): 0x11f023b0
2025-11-12T20:14:02.867 [DEBUG] [Thread-22034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:14:02.881 [DEBUG] [Thread-22034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:14:02.881 [INFO] [Thread-22034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] client lang: <none>
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] server lang: <none>
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] kex follows: False
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:14:02.889 [DEBUG] [Thread-22034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:14:02.890 [DEBUG] [Thread-22034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:14:02.890 [DEBUG] [Thread-22034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:14:02.890 [DEBUG] [Thread-22034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:14:02.890 [DEBUG] [Thread-22034] [transport.py] [_log()] Compression: none
2025-11-12T20:14:02.890 [DEBUG] [Thread-22034] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:14:02.949 [DEBUG] [Thread-22034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:14:02.950 [DEBUG] [Thread-22034] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:14:02.950 [DEBUG] [Thread-22034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:14:02.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:14:02.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:14:03.005 [DEBUG] [Thread-22034] [transport.py] [_log()] userauth is OK
2025-11-12T20:14:03.006 [DEBUG] [Thread-22034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:14:03.006 [DEBUG] [Thread-22034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:14:03.006 [DEBUG] [Thread-22034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:14:03.006 [DEBUG] [Thread-22034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:14:03.025 [INFO] [Thread-22034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:14:03.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:14:03.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:14:03.873 [DEBUG] [Thread-22034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:14:03.873 [DEBUG] [Thread-22034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:14:03.921 [DEBUG] [Thread-22034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:14:03.921 [DEBUG] [Thread-22034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:14:03.931 [DEBUG] [Thread-22034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:14:03.940 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:14:03.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-11-12T20:14:03.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-11-12T20:14:03.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:14:03.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:14:03.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:14:03.967 [DEBUG] [Thread-22034] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:14:06.033 [DEBUG] [Thread-22036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:14:21.086 [DEBUG] [Thread-22037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:14:33.649 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:14:33.651 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:14:33.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:14:33.990 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:14:33.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-11-12T20:14:34.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 14, 5), 19.44, 27.06, 0.0, 25.8, 20.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:14:34.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:14:05
2025-11-12T20:14:34.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:14:34.899 [DEBUG] [Thread-22038] [transport.py] [_log()] starting thread (client mode): 0x11f006a0
2025-11-12T20:14:34.899 [DEBUG] [Thread-22038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:14:34.919 [DEBUG] [Thread-22038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:14:34.919 [INFO] [Thread-22038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] client lang: <none>
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] server lang: <none>
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] kex follows: False
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] Compression: none
2025-11-12T20:14:34.923 [DEBUG] [Thread-22038] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:14:34.941 [DEBUG] [Thread-22038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:14:34.941 [DEBUG] [Thread-22038] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:14:34.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:14:34.942 [DEBUG] [Thread-22038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:14:34.943 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:14:34.944 [DEBUG] [Thread-22038] [transport.py] [_log()] userauth is OK
2025-11-12T20:14:34.944 [DEBUG] [Thread-22038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:14:34.944 [DEBUG] [Thread-22038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:14:34.944 [DEBUG] [Thread-22038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:14:34.944 [DEBUG] [Thread-22038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:14:34.969 [INFO] [Thread-22038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:14:34.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:14:35.603 [DEBUG] [Thread-22038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:14:35.603 [DEBUG] [Thread-22038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:14:35.604 [DEBUG] [Thread-22038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:14:35.644 [DEBUG] [Thread-22038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:14:35.644 [DEBUG] [Thread-22038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:14:35.647 [DEBUG] [Thread-22038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:14:35.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:14:35.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:14:35.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:14:35.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:14:35.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:14:35.671 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:14:35.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:14:35.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:14:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:14:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.759460 -999.00  +20.30  19.59     33   +3.60 1 2 1 1 1     0    0 14.97 -76.98 ZNE.W 20.5 19.6 262.6 27.9 20.8 -21.7 20.7 -20.6 20.5 -20.4 20.7 -21.0
2025-11-12T20:14:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:14:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:14:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.759460
2025-11-12T20:14:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:14:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:14:35.673 [DEBUG] [Thread-22038] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:14:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:14:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:14:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:14:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:14:05', tmtdew=19.44, humidity=27.06, cloud=0.0, wind=25.8, temperature=20.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:13:37.344', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T18:13:00')
2025-11-12T20:14:35.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:14:35.769 [DEBUG] [Thread-22041] [transport.py] [_log()] starting thread (client mode): 0x11f018d0
2025-11-12T20:14:35.769 [DEBUG] [Thread-22041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:14:35.788 [DEBUG] [Thread-22041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:14:35.788 [INFO] [Thread-22041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:14:35.796 [DEBUG] [Thread-22041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:14:35.796 [DEBUG] [Thread-22041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:14:35.796 [DEBUG] [Thread-22041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:14:35.796 [DEBUG] [Thread-22041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:14:35.796 [DEBUG] [Thread-22041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:14:35.796 [DEBUG] [Thread-22041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:14:35.797 [DEBUG] [Thread-22041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:14:35.797 [DEBUG] [Thread-22041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:14:35.797 [DEBUG] [Thread-22041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:14:35.797 [DEBUG] [Thread-22041] [transport.py] [_log()] client lang: <none>
2025-11-12T20:14:35.797 [DEBUG] [Thread-22041] [transport.py] [_log()] server lang: <none>
2025-11-12T20:14:35.797 [DEBUG] [Thread-22041] [transport.py] [_log()] kex follows: False
2025-11-12T20:14:35.797 [DEBUG] [Thread-22041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:14:35.797 [DEBUG] [Thread-22041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:14:35.798 [DEBUG] [Thread-22041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:14:35.798 [DEBUG] [Thread-22041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:14:35.798 [DEBUG] [Thread-22041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:14:35.798 [DEBUG] [Thread-22041] [transport.py] [_log()] Compression: none
2025-11-12T20:14:35.798 [DEBUG] [Thread-22041] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:14:35.855 [DEBUG] [Thread-22041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:14:35.856 [DEBUG] [Thread-22041] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:14:35.857 [DEBUG] [Thread-22041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:14:35.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:14:35.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:14:35.914 [DEBUG] [Thread-22041] [transport.py] [_log()] userauth is OK
2025-11-12T20:14:35.914 [DEBUG] [Thread-22041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:14:35.914 [DEBUG] [Thread-22041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:14:35.914 [DEBUG] [Thread-22041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:14:35.914 [DEBUG] [Thread-22041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:14:35.933 [INFO] [Thread-22041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:14:35.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:14:35.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:14:36.118 [DEBUG] [Thread-22043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:14:36.774 [DEBUG] [Thread-22041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:14:36.774 [DEBUG] [Thread-22041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:14:36.822 [DEBUG] [Thread-22041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:14:36.822 [DEBUG] [Thread-22041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:14:36.831 [DEBUG] [Thread-22041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:14:36.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:14:36.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')
2025-11-12T20:14:36.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:14:36.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:14:36.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:14:36.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:14:36.868 [DEBUG] [Thread-22041] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:14:50.998 [DEBUG] [Thread-22044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:14:51.170 [DEBUG] [Thread-22045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:15:06.208 [DEBUG] [Thread-22046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:15:06.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:15:06.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:15:06.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-11-12T20:15:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 14, 37), 19.43, 27.58, 0.0, 24.03, 20.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:15:07.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:14:37
2025-11-12T20:15:07.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:15:07.828 [DEBUG] [Thread-22047] [transport.py] [_log()] starting thread (client mode): 0x11f03d90
2025-11-12T20:15:07.828 [DEBUG] [Thread-22047] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:15:07.847 [DEBUG] [Thread-22047] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:15:07.848 [INFO] [Thread-22047] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:15:07.850 [DEBUG] [Thread-22047] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] client lang: <none>
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] server lang: <none>
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] kex follows: False
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:15:07.851 [DEBUG] [Thread-22047] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:15:07.852 [DEBUG] [Thread-22047] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:15:07.852 [DEBUG] [Thread-22047] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:15:07.852 [DEBUG] [Thread-22047] [transport.py] [_log()] Compression: none
2025-11-12T20:15:07.852 [DEBUG] [Thread-22047] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:15:07.870 [DEBUG] [Thread-22047] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:15:07.871 [DEBUG] [Thread-22047] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:15:07.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:15:07.873 [DEBUG] [Thread-22047] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:15:07.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:15:07.875 [DEBUG] [Thread-22047] [transport.py] [_log()] userauth is OK
2025-11-12T20:15:07.876 [DEBUG] [Thread-22047] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:15:07.876 [DEBUG] [Thread-22047] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:15:07.876 [DEBUG] [Thread-22047] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:15:07.876 [DEBUG] [Thread-22047] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:15:07.913 [INFO] [Thread-22047] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:15:07.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:15:10.483 [DEBUG] [Thread-22047] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:15:10.483 [DEBUG] [Thread-22047] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:15:10.483 [DEBUG] [Thread-22047] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:15:10.524 [DEBUG] [Thread-22047] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:15:10.524 [DEBUG] [Thread-22047] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:15:10.526 [DEBUG] [Thread-22047] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:15:10.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:15:10.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:15:10.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:15:10.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:15:10.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:15:10.589 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:15:10.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.760154 -999.00  +20.20  25.91     33   +3.60 1 2 1 1 1     0    0 14.79 -78.31 ZNE.W 25.3 25.9 268.6 28.1 20.8 -21.6 20.7 -20.5 20.4 -20.3 20.7 -21.1
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.760154
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:15:10.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:14:37', tmtdew=19.43, humidity=27.58, cloud=0.0, wind=24.03, temperature=20.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:14:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T18:13:00')
2025-11-12T20:15:10.590 [DEBUG] [Thread-22047] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:15:10.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:15:10.676 [DEBUG] [Thread-22050] [transport.py] [_log()] starting thread (client mode): 0x173bf340
2025-11-12T20:15:10.676 [DEBUG] [Thread-22050] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:15:10.691 [DEBUG] [Thread-22050] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:15:10.691 [INFO] [Thread-22050] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:15:10.698 [DEBUG] [Thread-22050] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:15:10.698 [DEBUG] [Thread-22050] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] client lang: <none>
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] server lang: <none>
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] kex follows: False
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] Compression: none
2025-11-12T20:15:10.699 [DEBUG] [Thread-22050] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:15:10.755 [DEBUG] [Thread-22050] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:15:10.755 [DEBUG] [Thread-22050] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:15:10.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:15:10.755 [DEBUG] [Thread-22050] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:15:10.755 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:15:10.812 [DEBUG] [Thread-22050] [transport.py] [_log()] userauth is OK
2025-11-12T20:15:10.813 [DEBUG] [Thread-22050] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:15:10.813 [DEBUG] [Thread-22050] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:15:10.813 [DEBUG] [Thread-22050] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:15:10.813 [DEBUG] [Thread-22050] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:15:10.827 [INFO] [Thread-22050] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:15:10.827 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:15:10.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:15:11.655 [DEBUG] [Thread-22050] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:15:11.655 [DEBUG] [Thread-22050] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:15:11.703 [DEBUG] [Thread-22050] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:15:11.703 [DEBUG] [Thread-22050] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:15:11.711 [DEBUG] [Thread-22050] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:15:11.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:15:11.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:15:11.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-11-12T20:15:11.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:15:11.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:15:11.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:15:11.743 [DEBUG] [Thread-22050] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:15:21.243 [DEBUG] [Thread-22052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:15:33.857 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:15:33.858 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:15:36.302 [DEBUG] [Thread-22053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:15:41.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:15:41.765 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:15:41.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-11-12T20:15:42.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 15, 9), 19.46, 27.53, 0.0, 20.63, 20.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:15:42.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:15:09
2025-11-12T20:15:42.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:15:42.722 [DEBUG] [Thread-22054] [transport.py] [_log()] starting thread (client mode): 0x1739b6a0
2025-11-12T20:15:42.722 [DEBUG] [Thread-22054] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:15:42.741 [DEBUG] [Thread-22054] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:15:42.742 [INFO] [Thread-22054] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] client lang: <none>
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] server lang: <none>
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] kex follows: False
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] Compression: none
2025-11-12T20:15:42.745 [DEBUG] [Thread-22054] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:15:42.765 [DEBUG] [Thread-22054] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:15:42.766 [DEBUG] [Thread-22054] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:15:42.766 [DEBUG] [Thread-22054] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:15:42.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:15:42.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:15:42.767 [DEBUG] [Thread-22054] [transport.py] [_log()] userauth is OK
2025-11-12T20:15:42.767 [DEBUG] [Thread-22054] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:15:42.767 [DEBUG] [Thread-22054] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:15:42.767 [DEBUG] [Thread-22054] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:15:42.767 [DEBUG] [Thread-22054] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:15:42.777 [INFO] [Thread-22054] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:15:42.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:15:43.409 [DEBUG] [Thread-22054] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:15:43.409 [DEBUG] [Thread-22054] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:15:43.409 [DEBUG] [Thread-22054] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:15:43.450 [DEBUG] [Thread-22054] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:15:43.450 [DEBUG] [Thread-22054] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:15:43.452 [DEBUG] [Thread-22054] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:15:43.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:15:43.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:15:43.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:15:43.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:15:43.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:15:43.472 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:15:43.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.760501 -999.00  +20.20  15.81     33   +3.60 1 2 1 1 1     0    0 14.83 -81.70 ZNE.W 17.7 15.8 266.8 29.3 20.8 -21.6 20.7 -20.5 20.4 -20.4 20.7 -21.1
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.760501
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:15:43.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:15:09', tmtdew=19.46, humidity=27.53, cloud=0.0, wind=20.63, temperature=20.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:15:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T18:13:00')
2025-11-12T20:15:43.473 [DEBUG] [Thread-22054] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:15:43.547 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:15:43.558 [DEBUG] [Thread-22057] [transport.py] [_log()] starting thread (client mode): 0x1739a020
2025-11-12T20:15:43.558 [DEBUG] [Thread-22057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:15:43.573 [DEBUG] [Thread-22057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:15:43.573 [INFO] [Thread-22057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] client lang: <none>
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] server lang: <none>
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] kex follows: False
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] Compression: none
2025-11-12T20:15:43.580 [DEBUG] [Thread-22057] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:15:43.636 [DEBUG] [Thread-22057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:15:43.636 [DEBUG] [Thread-22057] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:15:43.636 [DEBUG] [Thread-22057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:15:43.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:15:43.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:15:43.693 [DEBUG] [Thread-22057] [transport.py] [_log()] userauth is OK
2025-11-12T20:15:43.693 [DEBUG] [Thread-22057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:15:43.693 [DEBUG] [Thread-22057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:15:43.693 [DEBUG] [Thread-22057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:15:43.693 [DEBUG] [Thread-22057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:15:43.707 [INFO] [Thread-22057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:15:43.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:15:43.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:15:44.560 [DEBUG] [Thread-22057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:15:44.560 [DEBUG] [Thread-22057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:15:44.609 [DEBUG] [Thread-22057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:15:44.609 [DEBUG] [Thread-22057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:15:44.618 [DEBUG] [Thread-22057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:15:44.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:15:44.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-11-12T20:15:44.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-11-12T20:15:44.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:15:44.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:15:44.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:15:44.655 [DEBUG] [Thread-22057] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:15:51.082 [DEBUG] [Thread-22059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:15:51.331 [DEBUG] [Thread-22060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:16:06.384 [DEBUG] [Thread-22061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:16:14.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:16:14.666 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:16:14.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-11-12T20:16:15.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 15, 41), 19.43, 27.56, 0.0, 24.84, 20.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:16:15.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:15:41
2025-11-12T20:16:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:16:15.681 [DEBUG] [Thread-22062] [transport.py] [_log()] starting thread (client mode): 0x11f03370
2025-11-12T20:16:15.681 [DEBUG] [Thread-22062] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:16:15.701 [DEBUG] [Thread-22062] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:16:15.701 [INFO] [Thread-22062] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:16:15.704 [DEBUG] [Thread-22062] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] client lang: <none>
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] server lang: <none>
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] kex follows: False
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] Compression: none
2025-11-12T20:16:15.705 [DEBUG] [Thread-22062] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:16:15.721 [DEBUG] [Thread-22062] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:16:15.721 [DEBUG] [Thread-22062] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:16:15.721 [DEBUG] [Thread-22062] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:16:15.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:16:15.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:16:15.722 [DEBUG] [Thread-22062] [transport.py] [_log()] userauth is OK
2025-11-12T20:16:15.722 [DEBUG] [Thread-22062] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:16:15.722 [DEBUG] [Thread-22062] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:16:15.722 [DEBUG] [Thread-22062] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:16:15.722 [DEBUG] [Thread-22062] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:16:15.735 [INFO] [Thread-22062] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:16:15.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:16:16.518 [DEBUG] [Thread-22062] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:16:16.518 [DEBUG] [Thread-22062] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:16:16.518 [DEBUG] [Thread-22062] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:16:16.559 [DEBUG] [Thread-22062] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:16:16.559 [DEBUG] [Thread-22062] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:16:16.561 [DEBUG] [Thread-22062] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:16:16.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:16:16.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:16:16.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:16:16.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:16:16.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:16:16.578 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:16:16.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:16:16.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:16:16.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:16:16.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.760849 -999.00  +20.20  19.36     33   +3.60 1 2 1 1 1     0    0 14.50 -82.92 ZNE.W 15.5 19.4 272.6 25.1 20.8 -21.6 20.7 -20.5 20.4 -20.4 20.7 -21.2
2025-11-12T20:16:16.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:16:16.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:16:16.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.760849
2025-11-12T20:16:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:16:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:16:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:16:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:16:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:16:16.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:15:41', tmtdew=19.43, humidity=27.56, cloud=0.0, wind=24.84, temperature=20.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:15:37.354', atlas_cloud=2, atlas_rain=1, zp_data=[-0.0072499999999990905, -0.008749999999999147, 0.009249999999999758, 0.05299999999999905, 0.0730000000000004, 0.0912500000000005, 0.06799999999999962, -0.0067499999999984794, -0.0070000000000014495, 0.04100000000000037, -0.019750000000000156, 0.12700000000000067, 0.14599999999999902, 0.003249999999999531, -0.05400000000000027, -0.09950000000000081, 0.08724999999999916, 0.03250000000000064, -0.061500000000000554, 0.14224999999999888, 0.14599999999999902, 0.12074999999999747, 0.056750000000000966, -0.28575000000000017, 0.01699999999999946, 0.12049999999999983, 0.05925000000000047, 0.05550000000000033, 0.2370000000000001, 0.12600000000000122, 0.10500000000000043, -0.3999999999999986, 0.060249999999999915], zp_timestamp='2025-11-12T18:13:00')
2025-11-12T20:16:16.580 [DEBUG] [Thread-22062] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:16:16.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:16:16.671 [DEBUG] [Thread-22065] [transport.py] [_log()] starting thread (client mode): 0x11f02650
2025-11-12T20:16:16.671 [DEBUG] [Thread-22065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:16:16.685 [DEBUG] [Thread-22065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:16:16.685 [INFO] [Thread-22065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] client lang: <none>
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] server lang: <none>
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] kex follows: False
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] Compression: none
2025-11-12T20:16:16.693 [DEBUG] [Thread-22065] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:16:16.747 [DEBUG] [Thread-22065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:16:16.748 [DEBUG] [Thread-22065] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:16:16.748 [DEBUG] [Thread-22065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:16:16.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:16:16.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:16:16.805 [DEBUG] [Thread-22065] [transport.py] [_log()] userauth is OK
2025-11-12T20:16:16.805 [DEBUG] [Thread-22065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:16:16.805 [DEBUG] [Thread-22065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:16:16.805 [DEBUG] [Thread-22065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:16:16.805 [DEBUG] [Thread-22065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:16:16.820 [INFO] [Thread-22065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:16:16.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:16:16.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:16:17.667 [DEBUG] [Thread-22065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:16:17.667 [DEBUG] [Thread-22065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:16:17.715 [DEBUG] [Thread-22065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:16:17.715 [DEBUG] [Thread-22065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:16:17.723 [DEBUG] [Thread-22065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:16:17.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:16:17.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:16:17.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:16:17.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:16:17.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:16:17.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:16:17.754 [DEBUG] [Thread-22065] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:16:21.420 [DEBUG] [Thread-22067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:16:34.061 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:16:34.062 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:16:36.472 [DEBUG] [Thread-22068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:16:47.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:16:47.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:16:47.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-11-12T20:16:48.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 16, 13), 19.41, 27.58, 0.0, 23.22, 20.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:16:48.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:16:13
2025-11-12T20:16:48.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:16:48.701 [DEBUG] [Thread-22069] [transport.py] [_log()] starting thread (client mode): 0x11f030d0
2025-11-12T20:16:48.701 [DEBUG] [Thread-22069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:16:48.723 [DEBUG] [Thread-22069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:16:48.723 [INFO] [Thread-22069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:16:48.726 [DEBUG] [Thread-22069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:16:48.726 [DEBUG] [Thread-22069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:16:48.726 [DEBUG] [Thread-22069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:16:48.726 [DEBUG] [Thread-22069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:16:48.726 [DEBUG] [Thread-22069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] client lang: <none>
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] server lang: <none>
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] kex follows: False
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:16:48.727 [DEBUG] [Thread-22069] [transport.py] [_log()] Compression: none
2025-11-12T20:16:48.728 [DEBUG] [Thread-22069] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:16:48.745 [DEBUG] [Thread-22069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:16:48.746 [DEBUG] [Thread-22069] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:16:48.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:16:48.748 [DEBUG] [Thread-22069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:16:48.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:16:48.751 [DEBUG] [Thread-22069] [transport.py] [_log()] userauth is OK
2025-11-12T20:16:48.751 [DEBUG] [Thread-22069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:16:48.751 [DEBUG] [Thread-22069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:16:48.751 [DEBUG] [Thread-22069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:16:48.751 [DEBUG] [Thread-22069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:16:48.775 [INFO] [Thread-22069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:16:48.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:16:49.407 [DEBUG] [Thread-22069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:16:49.408 [DEBUG] [Thread-22069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:16:49.408 [DEBUG] [Thread-22069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:16:49.449 [DEBUG] [Thread-22069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:16:49.449 [DEBUG] [Thread-22069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:16:49.453 [DEBUG] [Thread-22069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:16:49.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:16:49.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:16:49.465 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:16:49.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:16:49.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:16:49.474 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:16:49.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:16:49.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:16:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:16:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.761196 -999.00  +20.20  15.81     33   +3.60 1 2 1 1 1     0    0 14.09 -86.88 ZNE.w 14.9 15.8 265.4 20.0 20.8 -21.7 20.7 -20.7 20.4 -20.3 20.7 -21.1
2025-11-12T20:16:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:16:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:16:49.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.761196
2025-11-12T20:16:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:16:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:16:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:16:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:16:49.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:16:49.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:16:13', tmtdew=19.41, humidity=27.58, cloud=0.0, wind=23.22, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:16:07.334', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:15:00')
2025-11-12T20:16:49.477 [DEBUG] [Thread-22069] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:16:49.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:16:49.571 [DEBUG] [Thread-22072] [transport.py] [_log()] starting thread (client mode): 0x14914250
2025-11-12T20:16:49.572 [DEBUG] [Thread-22072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:16:49.586 [DEBUG] [Thread-22072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:16:49.586 [INFO] [Thread-22072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:16:49.593 [DEBUG] [Thread-22072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:16:49.593 [DEBUG] [Thread-22072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] client lang: <none>
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] server lang: <none>
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] kex follows: False
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] Compression: none
2025-11-12T20:16:49.594 [DEBUG] [Thread-22072] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:16:49.653 [DEBUG] [Thread-22072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:16:49.653 [DEBUG] [Thread-22072] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:16:49.654 [DEBUG] [Thread-22072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:16:49.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:16:49.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:16:49.710 [DEBUG] [Thread-22072] [transport.py] [_log()] userauth is OK
2025-11-12T20:16:49.710 [DEBUG] [Thread-22072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:16:49.710 [DEBUG] [Thread-22072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:16:49.710 [DEBUG] [Thread-22072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:16:49.710 [DEBUG] [Thread-22072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:16:49.735 [INFO] [Thread-22072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:16:49.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:16:49.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:16:50.553 [DEBUG] [Thread-22072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:16:50.554 [DEBUG] [Thread-22072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:16:50.601 [DEBUG] [Thread-22072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:16:50.602 [DEBUG] [Thread-22072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:16:50.611 [DEBUG] [Thread-22072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:16:50.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:16:50.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-11-12T20:16:50.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-11-12T20:16:50.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:16:50.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:16:50.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:16:50.647 [DEBUG] [Thread-22072] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:16:51.135 [DEBUG] [Thread-22074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:16:51.507 [DEBUG] [Thread-22075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:17:06.558 [DEBUG] [Thread-22076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:17:20.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:17:20.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:17:20.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-11-12T20:17:21.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 17, 17), 19.27, 27.68, 0.0, 25.81, 20.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:17:21.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:17:17
2025-11-12T20:17:21.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:17:21.594 [DEBUG] [Thread-22077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:17:21.605 [DEBUG] [Thread-22078] [transport.py] [_log()] starting thread (client mode): 0x173be890
2025-11-12T20:17:21.605 [DEBUG] [Thread-22078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:17:21.625 [DEBUG] [Thread-22078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:17:21.625 [INFO] [Thread-22078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:17:21.626 [DEBUG] [Thread-22078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] client lang: <none>
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] server lang: <none>
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] kex follows: False
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:17:21.627 [DEBUG] [Thread-22078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:17:21.628 [DEBUG] [Thread-22078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:17:21.628 [DEBUG] [Thread-22078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:17:21.628 [DEBUG] [Thread-22078] [transport.py] [_log()] Compression: none
2025-11-12T20:17:21.628 [DEBUG] [Thread-22078] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:17:21.637 [DEBUG] [Thread-22078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:17:21.638 [DEBUG] [Thread-22078] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:17:21.639 [DEBUG] [Thread-22078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:17:21.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:17:21.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:17:21.642 [DEBUG] [Thread-22078] [transport.py] [_log()] userauth is OK
2025-11-12T20:17:21.642 [DEBUG] [Thread-22078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:17:21.642 [DEBUG] [Thread-22078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:17:21.642 [DEBUG] [Thread-22078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:17:21.642 [DEBUG] [Thread-22078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:17:21.657 [INFO] [Thread-22078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:17:21.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:17:22.412 [DEBUG] [Thread-22078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:17:22.412 [DEBUG] [Thread-22078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:17:22.412 [DEBUG] [Thread-22078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:17:22.452 [DEBUG] [Thread-22078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:17:22.453 [DEBUG] [Thread-22078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:17:22.457 [DEBUG] [Thread-22078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:17:22.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:17:22.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:17:22.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:17:22.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:17:22.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:17:22.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:17:22.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:17:22.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:17:22.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:17:22.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.761543 -999.00  +20.20  16.92     33   +3.60 1 2 1 1 1     0    0 15.33 -81.12 ZNE.w 22.0 16.9 267.8 27.8 20.7 -21.6 20.6 -20.6 20.4 -20.4 20.6 -21.1
2025-11-12T20:17:22.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:17:22.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:17:22.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.761543
2025-11-12T20:17:22.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:17:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:17:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:17:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:17:22.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:17:22.482 [DEBUG] [Thread-22078] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:17:22.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:17:17', tmtdew=19.27, humidity=27.68, cloud=0.0, wind=25.81, temperature=20.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:16:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:15:00')
2025-11-12T20:17:22.574 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:17:22.586 [DEBUG] [Thread-22081] [transport.py] [_log()] starting thread (client mode): 0x173bc640
2025-11-12T20:17:22.586 [DEBUG] [Thread-22081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:17:22.601 [DEBUG] [Thread-22081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:17:22.602 [INFO] [Thread-22081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:17:22.609 [DEBUG] [Thread-22081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:17:22.610 [DEBUG] [Thread-22081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:17:22.610 [DEBUG] [Thread-22081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:17:22.610 [DEBUG] [Thread-22081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:17:22.610 [DEBUG] [Thread-22081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:17:22.610 [DEBUG] [Thread-22081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:17:22.610 [DEBUG] [Thread-22081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:17:22.611 [DEBUG] [Thread-22081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:17:22.611 [DEBUG] [Thread-22081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:17:22.611 [DEBUG] [Thread-22081] [transport.py] [_log()] client lang: <none>
2025-11-12T20:17:22.611 [DEBUG] [Thread-22081] [transport.py] [_log()] server lang: <none>
2025-11-12T20:17:22.611 [DEBUG] [Thread-22081] [transport.py] [_log()] kex follows: False
2025-11-12T20:17:22.611 [DEBUG] [Thread-22081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:17:22.611 [DEBUG] [Thread-22081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:17:22.611 [DEBUG] [Thread-22081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:17:22.612 [DEBUG] [Thread-22081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:17:22.612 [DEBUG] [Thread-22081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:17:22.612 [DEBUG] [Thread-22081] [transport.py] [_log()] Compression: none
2025-11-12T20:17:22.612 [DEBUG] [Thread-22081] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:17:22.669 [DEBUG] [Thread-22081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:17:22.670 [DEBUG] [Thread-22081] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:17:22.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:17:22.671 [DEBUG] [Thread-22081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:17:22.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:17:22.727 [DEBUG] [Thread-22081] [transport.py] [_log()] userauth is OK
2025-11-12T20:17:22.727 [DEBUG] [Thread-22081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:17:22.727 [DEBUG] [Thread-22081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:17:22.727 [DEBUG] [Thread-22081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:17:22.727 [DEBUG] [Thread-22081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:17:22.749 [INFO] [Thread-22081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:17:22.749 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:17:22.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:17:23.618 [DEBUG] [Thread-22081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:17:23.618 [DEBUG] [Thread-22081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:17:23.666 [DEBUG] [Thread-22081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:17:23.666 [DEBUG] [Thread-22081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:17:23.675 [DEBUG] [Thread-22081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:17:23.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:17:23.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-11-12T20:17:23.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-11-12T20:17:23.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:17:23.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:17:23.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:17:23.713 [DEBUG] [Thread-22081] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:17:34.268 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:17:34.269 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:17:36.624 [DEBUG] [Thread-22083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:17:51.188 [DEBUG] [Thread-22084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:17:51.677 [DEBUG] [Thread-22085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:17:53.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:17:53.735 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:17:53.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-11-12T20:17:54.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 17, 49), 19.23, 27.76, 0.0, 25.64, 20.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:17:54.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:17:49
2025-11-12T20:17:54.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:17:54.636 [DEBUG] [Thread-22086] [transport.py] [_log()] starting thread (client mode): 0x11f035e0
2025-11-12T20:17:54.636 [DEBUG] [Thread-22086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:17:54.657 [DEBUG] [Thread-22086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:17:54.657 [INFO] [Thread-22086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:17:54.660 [DEBUG] [Thread-22086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] client lang: <none>
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] server lang: <none>
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] kex follows: False
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] Compression: none
2025-11-12T20:17:54.661 [DEBUG] [Thread-22086] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:17:54.678 [DEBUG] [Thread-22086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:17:54.679 [DEBUG] [Thread-22086] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:17:54.679 [DEBUG] [Thread-22086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:17:54.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:17:54.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:17:54.682 [DEBUG] [Thread-22086] [transport.py] [_log()] userauth is OK
2025-11-12T20:17:54.682 [DEBUG] [Thread-22086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:17:54.682 [DEBUG] [Thread-22086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:17:54.682 [DEBUG] [Thread-22086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:17:54.682 [DEBUG] [Thread-22086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:17:54.707 [INFO] [Thread-22086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:17:54.707 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:17:55.343 [DEBUG] [Thread-22086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:17:55.343 [DEBUG] [Thread-22086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:17:55.343 [DEBUG] [Thread-22086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:17:55.384 [DEBUG] [Thread-22086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:17:55.384 [DEBUG] [Thread-22086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:17:55.387 [DEBUG] [Thread-22086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:17:55.398 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:17:55.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:17:55.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:17:55.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:17:55.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:17:55.411 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:17:55.412 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:17:55.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:17:55.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:17:55.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.761897 -999.00  +20.20  22.80     33   +3.60 1 2 1 1 1     0    0 14.41 -86.31 ZNE.W 21.5 22.8 255.8 27.5 20.7 -21.6 20.7 -20.5 20.4 -20.4 20.6 -21.1
2025-11-12T20:17:55.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:17:55.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:17:55.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.761897
2025-11-12T20:17:55.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:17:55.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:17:55.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:17:55.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:17:55.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:17:55.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:17:49', tmtdew=19.23, humidity=27.76, cloud=0.0, wind=25.64, temperature=20.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:17:07.901', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:15:00')
2025-11-12T20:17:55.414 [DEBUG] [Thread-22086] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:17:55.497 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:17:55.509 [DEBUG] [Thread-22089] [transport.py] [_log()] starting thread (client mode): 0x14947ca0
2025-11-12T20:17:55.510 [DEBUG] [Thread-22089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:17:55.525 [DEBUG] [Thread-22089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:17:55.525 [INFO] [Thread-22089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] client lang: <none>
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] server lang: <none>
2025-11-12T20:17:55.533 [DEBUG] [Thread-22089] [transport.py] [_log()] kex follows: False
2025-11-12T20:17:55.534 [DEBUG] [Thread-22089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:17:55.534 [DEBUG] [Thread-22089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:17:55.534 [DEBUG] [Thread-22089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:17:55.534 [DEBUG] [Thread-22089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:17:55.534 [DEBUG] [Thread-22089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:17:55.534 [DEBUG] [Thread-22089] [transport.py] [_log()] Compression: none
2025-11-12T20:17:55.534 [DEBUG] [Thread-22089] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:17:55.593 [DEBUG] [Thread-22089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:17:55.594 [DEBUG] [Thread-22089] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:17:55.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:17:55.595 [DEBUG] [Thread-22089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:17:55.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:17:55.654 [DEBUG] [Thread-22089] [transport.py] [_log()] userauth is OK
2025-11-12T20:17:55.654 [DEBUG] [Thread-22089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:17:55.654 [DEBUG] [Thread-22089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:17:55.654 [DEBUG] [Thread-22089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:17:55.654 [DEBUG] [Thread-22089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:17:55.674 [INFO] [Thread-22089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:17:55.674 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:17:55.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:17:56.524 [DEBUG] [Thread-22089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:17:56.524 [DEBUG] [Thread-22089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:17:56.571 [DEBUG] [Thread-22089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:17:56.571 [DEBUG] [Thread-22089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:17:56.580 [DEBUG] [Thread-22089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:17:56.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:17:56.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-11-12T20:17:56.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:17:56.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:17:56.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:17:56.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:17:56.615 [DEBUG] [Thread-22089] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:18:06.710 [DEBUG] [Thread-22091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:18:21.754 [DEBUG] [Thread-22092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:18:26.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:18:26.639 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:18:26.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:18:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 18, 21), 19.22, 27.78, 0.0, 27.6, 20.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:18:27.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:18:21
2025-11-12T20:18:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:18:27.547 [DEBUG] [Thread-22093] [transport.py] [_log()] starting thread (client mode): 0x173bf370
2025-11-12T20:18:27.547 [DEBUG] [Thread-22093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:18:27.567 [DEBUG] [Thread-22093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:18:27.568 [INFO] [Thread-22093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:18:27.571 [DEBUG] [Thread-22093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:18:27.571 [DEBUG] [Thread-22093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:18:27.571 [DEBUG] [Thread-22093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:18:27.571 [DEBUG] [Thread-22093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:18:27.571 [DEBUG] [Thread-22093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:18:27.571 [DEBUG] [Thread-22093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:18:27.571 [DEBUG] [Thread-22093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] client lang: <none>
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] server lang: <none>
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] kex follows: False
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] Compression: none
2025-11-12T20:18:27.572 [DEBUG] [Thread-22093] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:18:27.591 [DEBUG] [Thread-22093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:18:27.592 [DEBUG] [Thread-22093] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:18:27.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:18:27.593 [DEBUG] [Thread-22093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:18:27.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:18:27.595 [DEBUG] [Thread-22093] [transport.py] [_log()] userauth is OK
2025-11-12T20:18:27.595 [DEBUG] [Thread-22093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:18:27.595 [DEBUG] [Thread-22093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:18:27.595 [DEBUG] [Thread-22093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:18:27.595 [DEBUG] [Thread-22093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:18:27.620 [INFO] [Thread-22093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:18:27.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:18:28.347 [DEBUG] [Thread-22093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:18:28.347 [DEBUG] [Thread-22093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:18:28.347 [DEBUG] [Thread-22093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:18:28.387 [DEBUG] [Thread-22093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:18:28.387 [DEBUG] [Thread-22093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:18:28.389 [DEBUG] [Thread-22093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:18:28.403 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:18:28.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:18:28.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:18:28.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:18:28.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:18:28.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:18:28.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:18:28.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.762237 -999.00  +20.20  19.13     33   +3.60 1 2 1 1 1     0    0 14.50 -85.14 ZNE.W 14.4 19.1 253.6 25.7 20.7 -21.7 20.6 -20.6 20.4 -20.4 20.6 -21.1
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.762237
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:18:28.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:18:21', tmtdew=19.22, humidity=27.78, cloud=0.0, wind=27.6, temperature=20.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:17:37.277', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:15:00')
2025-11-12T20:18:28.410 [DEBUG] [Thread-22093] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:18:28.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:18:28.499 [DEBUG] [Thread-22096] [transport.py] [_log()] starting thread (client mode): 0x173be050
2025-11-12T20:18:28.499 [DEBUG] [Thread-22096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:18:28.513 [DEBUG] [Thread-22096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:18:28.513 [INFO] [Thread-22096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:18:28.521 [DEBUG] [Thread-22096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:18:28.521 [DEBUG] [Thread-22096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] client lang: <none>
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] server lang: <none>
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] kex follows: False
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] Compression: none
2025-11-12T20:18:28.522 [DEBUG] [Thread-22096] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:18:28.581 [DEBUG] [Thread-22096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:18:28.581 [DEBUG] [Thread-22096] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:18:28.582 [DEBUG] [Thread-22096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:18:28.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:18:28.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:18:28.637 [DEBUG] [Thread-22096] [transport.py] [_log()] userauth is OK
2025-11-12T20:18:28.637 [DEBUG] [Thread-22096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:18:28.637 [DEBUG] [Thread-22096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:18:28.637 [DEBUG] [Thread-22096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:18:28.637 [DEBUG] [Thread-22096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:18:28.656 [INFO] [Thread-22096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:18:28.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:18:28.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:18:29.546 [DEBUG] [Thread-22096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:18:29.546 [DEBUG] [Thread-22096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:18:29.594 [DEBUG] [Thread-22096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:18:29.594 [DEBUG] [Thread-22096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:18:29.602 [DEBUG] [Thread-22096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:18:29.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:18:29.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:18:29.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:18:29.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:18:29.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:18:29.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:18:29.635 [DEBUG] [Thread-22096] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:18:34.477 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:18:34.478 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:18:36.789 [DEBUG] [Thread-22098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:18:51.270 [DEBUG] [Thread-22099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:18:51.839 [DEBUG] [Thread-22100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:18:59.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:18:59.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:18:59.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:19:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 18, 53), 19.22, 27.75, 0.0, 23.13, 20.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:19:00.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:18:53
2025-11-12T20:19:00.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:19:00.551 [DEBUG] [Thread-22101] [transport.py] [_log()] starting thread (client mode): 0x173bf430
2025-11-12T20:19:00.551 [DEBUG] [Thread-22101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:19:00.570 [DEBUG] [Thread-22101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:19:00.571 [INFO] [Thread-22101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:19:00.574 [DEBUG] [Thread-22101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] client lang: <none>
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] server lang: <none>
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] kex follows: False
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] Compression: none
2025-11-12T20:19:00.575 [DEBUG] [Thread-22101] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:19:00.591 [DEBUG] [Thread-22101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:19:00.592 [DEBUG] [Thread-22101] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:19:00.592 [DEBUG] [Thread-22101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:19:00.592 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:19:00.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:19:00.594 [DEBUG] [Thread-22101] [transport.py] [_log()] userauth is OK
2025-11-12T20:19:00.594 [DEBUG] [Thread-22101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:19:00.594 [DEBUG] [Thread-22101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:19:00.594 [DEBUG] [Thread-22101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:19:00.594 [DEBUG] [Thread-22101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:19:00.607 [INFO] [Thread-22101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:19:00.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:19:01.235 [DEBUG] [Thread-22101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:19:01.236 [DEBUG] [Thread-22101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:19:01.236 [DEBUG] [Thread-22101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:19:01.276 [DEBUG] [Thread-22101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:19:01.277 [DEBUG] [Thread-22101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:19:01.280 [DEBUG] [Thread-22101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:19:01.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:19:01.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:19:01.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:19:01.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:19:01.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:19:01.305 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:19:01.305 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:19:01.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:19:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:19:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.762933 -999.00  +20.10  17.37     33   +3.60 1 2 1 1 1     0    0 14.82 -87.95 ZNE.W 17.0 17.4 260.4 24.1 20.7 -21.7 20.6 -20.6 20.3 -20.5 20.6 -21.1
2025-11-12T20:19:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:19:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:19:01.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.762933
2025-11-12T20:19:01.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:19:01.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:19:01.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:19:01.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:19:01.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:19:01.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:18:53', tmtdew=19.22, humidity=27.75, cloud=0.0, wind=23.13, temperature=20.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:18:37.411', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:15:00')
2025-11-12T20:19:01.309 [DEBUG] [Thread-22101] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:19:01.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:19:01.416 [DEBUG] [Thread-22104] [transport.py] [_log()] starting thread (client mode): 0x149160e0
2025-11-12T20:19:01.416 [DEBUG] [Thread-22104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:19:01.430 [DEBUG] [Thread-22104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:19:01.430 [INFO] [Thread-22104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] client lang: <none>
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] server lang: <none>
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] kex follows: False
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:19:01.438 [DEBUG] [Thread-22104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:19:01.439 [DEBUG] [Thread-22104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:19:01.439 [DEBUG] [Thread-22104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:19:01.439 [DEBUG] [Thread-22104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:19:01.439 [DEBUG] [Thread-22104] [transport.py] [_log()] Compression: none
2025-11-12T20:19:01.439 [DEBUG] [Thread-22104] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:19:01.497 [DEBUG] [Thread-22104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:19:01.498 [DEBUG] [Thread-22104] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:19:01.499 [DEBUG] [Thread-22104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:19:01.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:19:01.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:19:01.554 [DEBUG] [Thread-22104] [transport.py] [_log()] userauth is OK
2025-11-12T20:19:01.554 [DEBUG] [Thread-22104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:19:01.554 [DEBUG] [Thread-22104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:19:01.554 [DEBUG] [Thread-22104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:19:01.554 [DEBUG] [Thread-22104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:19:01.578 [INFO] [Thread-22104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:19:01.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:19:01.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:19:02.442 [DEBUG] [Thread-22104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:19:02.442 [DEBUG] [Thread-22104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:19:02.490 [DEBUG] [Thread-22104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:19:02.491 [DEBUG] [Thread-22104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:19:02.500 [DEBUG] [Thread-22104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:19:02.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:19:02.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:19:02.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-11-12T20:19:02.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:19:02.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:19:02.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:19:02.537 [DEBUG] [Thread-22104] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:19:06.878 [DEBUG] [Thread-22106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:19:21.932 [DEBUG] [Thread-22107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:19:32.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:19:32.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:19:32.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-11-12T20:19:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 19, 25), 19.21, 27.78, 0.0, 21.77, 20.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:19:33.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:19:25
2025-11-12T20:19:33.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:19:33.451 [DEBUG] [Thread-22108] [transport.py] [_log()] starting thread (client mode): 0x149143a0
2025-11-12T20:19:33.452 [DEBUG] [Thread-22108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:19:33.472 [DEBUG] [Thread-22108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:19:33.472 [INFO] [Thread-22108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] client lang: <none>
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] server lang: <none>
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] kex follows: False
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] Compression: none
2025-11-12T20:19:33.475 [DEBUG] [Thread-22108] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:19:33.494 [DEBUG] [Thread-22108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:19:33.494 [DEBUG] [Thread-22108] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:19:33.495 [DEBUG] [Thread-22108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:19:33.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:19:33.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:19:33.497 [DEBUG] [Thread-22108] [transport.py] [_log()] userauth is OK
2025-11-12T20:19:33.497 [DEBUG] [Thread-22108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:19:33.497 [DEBUG] [Thread-22108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:19:33.498 [DEBUG] [Thread-22108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:19:33.498 [DEBUG] [Thread-22108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:19:33.522 [INFO] [Thread-22108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:19:33.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:19:34.271 [DEBUG] [Thread-22108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:19:34.272 [DEBUG] [Thread-22108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:19:34.272 [DEBUG] [Thread-22108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:19:34.313 [DEBUG] [Thread-22108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:19:34.313 [DEBUG] [Thread-22108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:19:34.316 [DEBUG] [Thread-22108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:19:34.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:19:34.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:19:34.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:19:34.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:19:34.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:19:34.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:19:34.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:19:34.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:19:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:19:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.763279 -999.00  +20.10  14.13     33   +3.60 1 2 1 1 1     0    0 14.76 -79.31 ZNEsW 17.4 14.1 259.4 27.6 20.7 -21.7 20.6 -20.7 20.3 -20.3 20.6 -21.1
2025-11-12T20:19:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:19:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:19:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.763279
2025-11-12T20:19:34.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:19:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:19:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:19:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:19:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:19:34.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:19:25', tmtdew=19.21, humidity=27.78, cloud=0.0, wind=21.77, temperature=20.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:19:07.306', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:15:00')
2025-11-12T20:19:34.335 [DEBUG] [Thread-22108] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:19:34.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:19:34.431 [DEBUG] [Thread-22111] [transport.py] [_log()] starting thread (client mode): 0x149a5480
2025-11-12T20:19:34.431 [DEBUG] [Thread-22111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:19:34.446 [DEBUG] [Thread-22111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:19:34.446 [INFO] [Thread-22111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:19:34.454 [DEBUG] [Thread-22111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:19:34.454 [DEBUG] [Thread-22111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:19:34.454 [DEBUG] [Thread-22111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:19:34.454 [DEBUG] [Thread-22111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:19:34.454 [DEBUG] [Thread-22111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] client lang: <none>
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] server lang: <none>
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] kex follows: False
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:19:34.455 [DEBUG] [Thread-22111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:19:34.456 [DEBUG] [Thread-22111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:19:34.456 [DEBUG] [Thread-22111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:19:34.456 [DEBUG] [Thread-22111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:19:34.456 [DEBUG] [Thread-22111] [transport.py] [_log()] Compression: none
2025-11-12T20:19:34.456 [DEBUG] [Thread-22111] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:19:34.514 [DEBUG] [Thread-22111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:19:34.515 [DEBUG] [Thread-22111] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:19:34.516 [DEBUG] [Thread-22111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:19:34.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:19:34.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:19:34.573 [DEBUG] [Thread-22111] [transport.py] [_log()] userauth is OK
2025-11-12T20:19:34.573 [DEBUG] [Thread-22111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:19:34.574 [DEBUG] [Thread-22111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:19:34.574 [DEBUG] [Thread-22111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:19:34.574 [DEBUG] [Thread-22111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:19:34.595 [INFO] [Thread-22111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:19:34.596 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:19:34.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:19:34.683 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:19:34.684 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:19:35.464 [DEBUG] [Thread-22111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:19:35.464 [DEBUG] [Thread-22111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:19:35.512 [DEBUG] [Thread-22111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:19:35.512 [DEBUG] [Thread-22111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:19:35.521 [DEBUG] [Thread-22111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:19:35.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:19:35.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-11-12T20:19:35.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-11-12T20:19:35.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:19:35.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:19:35.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:19:35.558 [DEBUG] [Thread-22111] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:19:36.961 [DEBUG] [Thread-22113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:19:51.325 [DEBUG] [Thread-22114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:19:52.015 [DEBUG] [Thread-22115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:20:05.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:20:05.559 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:20:05.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-11-12T20:20:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 19, 57), 19.1, 27.8, 0.0, 23.45, 20.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:20:06.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:19:57
2025-11-12T20:20:06.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:20:06.507 [DEBUG] [Thread-22116] [transport.py] [_log()] starting thread (client mode): 0x173bf190
2025-11-12T20:20:06.507 [DEBUG] [Thread-22116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:20:06.527 [DEBUG] [Thread-22116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:20:06.527 [INFO] [Thread-22116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] client lang: <none>
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] server lang: <none>
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] kex follows: False
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] Compression: none
2025-11-12T20:20:06.531 [DEBUG] [Thread-22116] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:20:06.546 [DEBUG] [Thread-22116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:20:06.546 [DEBUG] [Thread-22116] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:20:06.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:20:06.547 [DEBUG] [Thread-22116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:20:06.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:20:06.588 [DEBUG] [Thread-22116] [transport.py] [_log()] userauth is OK
2025-11-12T20:20:06.588 [DEBUG] [Thread-22116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:20:06.588 [DEBUG] [Thread-22116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:20:06.588 [DEBUG] [Thread-22116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:20:06.588 [DEBUG] [Thread-22116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:20:06.614 [INFO] [Thread-22116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:20:06.615 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:20:07.045 [DEBUG] [Thread-22118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:20:10.076 [DEBUG] [Thread-22116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:20:10.076 [DEBUG] [Thread-22116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:20:10.077 [DEBUG] [Thread-22116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:20:10.118 [DEBUG] [Thread-22116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:20:10.118 [DEBUG] [Thread-22116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:20:10.121 [DEBUG] [Thread-22116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:20:10.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:20:10.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:20:10.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:20:10.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:20:10.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:20:10.145 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:20:10.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:20:10.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:20:10.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:20:10.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.763626 -999.00  +20.10  20.35     33   +3.60 1 2 1 1 1     0    0 14.68 -72.97 ZNEsW 16.6 20.4 260.0 26.5 20.6 -21.7 20.6 -20.6 20.3 -20.4 20.6 -21.0
2025-11-12T20:20:10.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:20:10.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:20:10.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.763626
2025-11-12T20:20:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:20:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:20:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:20:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:20:10.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:20:10.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:19:57', tmtdew=19.1, humidity=27.8, cloud=0.0, wind=23.45, temperature=20.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:19:37.286', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:18:00')
2025-11-12T20:20:10.148 [DEBUG] [Thread-22116] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:20:10.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:20:10.248 [DEBUG] [Thread-22120] [transport.py] [_log()] starting thread (client mode): 0x14914400
2025-11-12T20:20:10.248 [DEBUG] [Thread-22120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:20:10.264 [DEBUG] [Thread-22120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:20:10.265 [INFO] [Thread-22120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] client lang: <none>
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] server lang: <none>
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] kex follows: False
2025-11-12T20:20:10.273 [DEBUG] [Thread-22120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:20:10.274 [DEBUG] [Thread-22120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:20:10.274 [DEBUG] [Thread-22120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:20:10.274 [DEBUG] [Thread-22120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:20:10.274 [DEBUG] [Thread-22120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:20:10.274 [DEBUG] [Thread-22120] [transport.py] [_log()] Compression: none
2025-11-12T20:20:10.274 [DEBUG] [Thread-22120] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:20:10.334 [DEBUG] [Thread-22120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:20:10.335 [DEBUG] [Thread-22120] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:20:10.335 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:20:10.336 [DEBUG] [Thread-22120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:20:10.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:20:10.394 [DEBUG] [Thread-22120] [transport.py] [_log()] userauth is OK
2025-11-12T20:20:10.394 [DEBUG] [Thread-22120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:20:10.394 [DEBUG] [Thread-22120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:20:10.394 [DEBUG] [Thread-22120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:20:10.395 [DEBUG] [Thread-22120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:20:10.413 [INFO] [Thread-22120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:20:10.414 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:20:10.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:20:11.247 [DEBUG] [Thread-22120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:20:11.247 [DEBUG] [Thread-22120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:20:11.294 [DEBUG] [Thread-22120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:20:11.295 [DEBUG] [Thread-22120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:20:11.304 [DEBUG] [Thread-22120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:20:11.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:20:11.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-11-12T20:20:11.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:20:11.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:20:11.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:20:11.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:20:11.339 [DEBUG] [Thread-22120] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:20:22.078 [DEBUG] [Thread-22122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:20:34.891 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:20:34.892 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:20:37.123 [DEBUG] [Thread-22123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:20:41.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:20:41.362 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:20:41.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-11-12T20:20:42.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 20, 29), 19.09, 27.81, 0.0, 23.41, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:20:42.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:20:29
2025-11-12T20:20:42.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:20:42.294 [DEBUG] [Thread-22124] [transport.py] [_log()] starting thread (client mode): 0x14917a00
2025-11-12T20:20:42.294 [DEBUG] [Thread-22124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:20:42.314 [DEBUG] [Thread-22124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:20:42.314 [INFO] [Thread-22124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:20:42.317 [DEBUG] [Thread-22124] [transport.py] [_log()] client lang: <none>
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] server lang: <none>
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] kex follows: False
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] Compression: none
2025-11-12T20:20:42.318 [DEBUG] [Thread-22124] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:20:42.332 [DEBUG] [Thread-22124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:20:42.333 [DEBUG] [Thread-22124] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:20:42.333 [DEBUG] [Thread-22124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:20:42.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:20:42.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:20:42.333 [DEBUG] [Thread-22124] [transport.py] [_log()] userauth is OK
2025-11-12T20:20:42.333 [DEBUG] [Thread-22124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:20:42.333 [DEBUG] [Thread-22124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:20:42.333 [DEBUG] [Thread-22124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:20:42.333 [DEBUG] [Thread-22124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:20:42.342 [INFO] [Thread-22124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:20:42.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:20:42.965 [DEBUG] [Thread-22124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:20:42.965 [DEBUG] [Thread-22124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:20:42.965 [DEBUG] [Thread-22124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:20:43.006 [DEBUG] [Thread-22124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:20:43.006 [DEBUG] [Thread-22124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:20:43.008 [DEBUG] [Thread-22124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:20:43.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:20:43.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:20:43.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:20:43.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:20:43.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:20:43.028 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:20:43.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:20:43.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:20:43.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:20:43.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.763973 -999.00  +20.10  13.38     33   +3.60 1 2 1 1 1     0    0 15.00 -69.35 ZNEsW 16.3 13.4 254.8 20.2 20.6 -21.7 20.6 -20.6 20.3 -20.3 20.5 -21.0
2025-11-12T20:20:43.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:20:43.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:20:43.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.763973
2025-11-12T20:20:43.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:20:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:20:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:20:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:20:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:20:43.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:20:29', tmtdew=19.09, humidity=27.81, cloud=0.0, wind=23.41, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:20:07.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:18:00')
2025-11-12T20:20:43.029 [DEBUG] [Thread-22124] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:20:43.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:20:43.114 [DEBUG] [Thread-22127] [transport.py] [_log()] starting thread (client mode): 0x173bf370
2025-11-12T20:20:43.114 [DEBUG] [Thread-22127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:20:43.128 [DEBUG] [Thread-22127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:20:43.128 [INFO] [Thread-22127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] client lang: <none>
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] server lang: <none>
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] kex follows: False
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] Compression: none
2025-11-12T20:20:43.136 [DEBUG] [Thread-22127] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:20:43.192 [DEBUG] [Thread-22127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:20:43.192 [DEBUG] [Thread-22127] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:20:43.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:20:43.192 [DEBUG] [Thread-22127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:20:43.192 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:20:43.249 [DEBUG] [Thread-22127] [transport.py] [_log()] userauth is OK
2025-11-12T20:20:43.249 [DEBUG] [Thread-22127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:20:43.249 [DEBUG] [Thread-22127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:20:43.249 [DEBUG] [Thread-22127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:20:43.249 [DEBUG] [Thread-22127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:20:43.271 [INFO] [Thread-22127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:20:43.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:20:43.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:20:44.104 [DEBUG] [Thread-22127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:20:44.104 [DEBUG] [Thread-22127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:20:44.152 [DEBUG] [Thread-22127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:20:44.152 [DEBUG] [Thread-22127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:20:44.160 [DEBUG] [Thread-22127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:20:44.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:20:44.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-11-12T20:20:44.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:20:44.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:20:44.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:20:44.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:20:44.191 [DEBUG] [Thread-22127] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:20:51.380 [DEBUG] [Thread-22129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:20:52.157 [DEBUG] [Thread-22130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:21:07.208 [DEBUG] [Thread-22131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:21:14.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:21:14.214 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:21:14.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-11-12T20:21:14.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 21, 1), 19.05, 27.88, 0.0, 24.51, 20.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:21:14.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:21:01
2025-11-12T20:21:14.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:21:15.134 [DEBUG] [Thread-22132] [transport.py] [_log()] starting thread (client mode): 0x11f00eb0
2025-11-12T20:21:15.135 [DEBUG] [Thread-22132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:21:15.158 [DEBUG] [Thread-22132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:21:15.158 [INFO] [Thread-22132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] client lang: <none>
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] server lang: <none>
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] kex follows: False
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:21:15.162 [DEBUG] [Thread-22132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:21:15.163 [DEBUG] [Thread-22132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:21:15.163 [DEBUG] [Thread-22132] [transport.py] [_log()] Compression: none
2025-11-12T20:21:15.163 [DEBUG] [Thread-22132] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:21:15.182 [DEBUG] [Thread-22132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:21:15.183 [DEBUG] [Thread-22132] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:21:15.183 [DEBUG] [Thread-22132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:21:15.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:21:15.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:21:15.185 [DEBUG] [Thread-22132] [transport.py] [_log()] userauth is OK
2025-11-12T20:21:15.186 [DEBUG] [Thread-22132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:21:15.186 [DEBUG] [Thread-22132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:21:15.186 [DEBUG] [Thread-22132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:21:15.186 [DEBUG] [Thread-22132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:21:15.221 [INFO] [Thread-22132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:21:15.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:21:15.854 [DEBUG] [Thread-22132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:21:15.855 [DEBUG] [Thread-22132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:21:15.855 [DEBUG] [Thread-22132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:21:15.895 [DEBUG] [Thread-22132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:21:15.896 [DEBUG] [Thread-22132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:21:15.899 [DEBUG] [Thread-22132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:21:15.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:21:15.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:21:15.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:21:15.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:21:15.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:21:15.921 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:21:15.921 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:21:15.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:21:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:21:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.764321 -999.00  +20.10  17.44     33   +3.60 1 2 1 1 1     0    0 15.14 -66.58 ZNE.W 15.4 17.4 267.4 23.1 20.6 -21.8 20.6 -20.6 20.3 -20.5 20.5 -21.0
2025-11-12T20:21:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:21:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:21:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.764321
2025-11-12T20:21:15.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:21:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:21:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:21:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:21:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:21:15.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:21:01', tmtdew=19.05, humidity=27.88, cloud=0.0, wind=24.51, temperature=20.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:20:37.334', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:18:00')
2025-11-12T20:21:15.924 [DEBUG] [Thread-22132] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:21:16.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:21:16.026 [DEBUG] [Thread-22135] [transport.py] [_log()] starting thread (client mode): 0x14904880
2025-11-12T20:21:16.026 [DEBUG] [Thread-22135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:21:16.041 [DEBUG] [Thread-22135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:21:16.042 [INFO] [Thread-22135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] client lang: <none>
2025-11-12T20:21:16.049 [DEBUG] [Thread-22135] [transport.py] [_log()] server lang: <none>
2025-11-12T20:21:16.050 [DEBUG] [Thread-22135] [transport.py] [_log()] kex follows: False
2025-11-12T20:21:16.050 [DEBUG] [Thread-22135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:21:16.050 [DEBUG] [Thread-22135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:21:16.050 [DEBUG] [Thread-22135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:21:16.050 [DEBUG] [Thread-22135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:21:16.050 [DEBUG] [Thread-22135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:21:16.050 [DEBUG] [Thread-22135] [transport.py] [_log()] Compression: none
2025-11-12T20:21:16.050 [DEBUG] [Thread-22135] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:21:16.111 [DEBUG] [Thread-22135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:21:16.111 [DEBUG] [Thread-22135] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:21:16.112 [DEBUG] [Thread-22135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:21:16.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:21:16.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:21:16.169 [DEBUG] [Thread-22135] [transport.py] [_log()] userauth is OK
2025-11-12T20:21:16.170 [DEBUG] [Thread-22135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:21:16.170 [DEBUG] [Thread-22135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:21:16.170 [DEBUG] [Thread-22135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:21:16.170 [DEBUG] [Thread-22135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:21:16.189 [INFO] [Thread-22135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:21:16.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:21:16.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:21:17.055 [DEBUG] [Thread-22135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:21:17.056 [DEBUG] [Thread-22135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:21:17.106 [DEBUG] [Thread-22135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:21:17.106 [DEBUG] [Thread-22135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:21:17.115 [DEBUG] [Thread-22135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:21:17.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:21:17.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-11-12T20:21:17.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-11-12T20:21:17.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:21:17.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:21:17.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:21:17.156 [DEBUG] [Thread-22135] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:21:22.241 [DEBUG] [Thread-22137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:21:35.096 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:21:35.097 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:21:37.279 [DEBUG] [Thread-22138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:21:47.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:21:47.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:21:47.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-11-12T20:21:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 21, 33), 19.19, 27.79, 0.0, 24.14, 20.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:21:47.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:21:33
2025-11-12T20:21:47.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:21:48.098 [DEBUG] [Thread-22139] [transport.py] [_log()] starting thread (client mode): 0x149aaaa0
2025-11-12T20:21:48.099 [DEBUG] [Thread-22139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:21:48.118 [DEBUG] [Thread-22139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:21:48.118 [INFO] [Thread-22139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] client lang: <none>
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] server lang: <none>
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] kex follows: False
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] Compression: none
2025-11-12T20:21:48.122 [DEBUG] [Thread-22139] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:21:48.139 [DEBUG] [Thread-22139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:21:48.140 [DEBUG] [Thread-22139] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:21:48.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:21:48.141 [DEBUG] [Thread-22139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:21:48.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:21:48.143 [DEBUG] [Thread-22139] [transport.py] [_log()] userauth is OK
2025-11-12T20:21:48.143 [DEBUG] [Thread-22139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:21:48.143 [DEBUG] [Thread-22139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:21:48.143 [DEBUG] [Thread-22139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:21:48.143 [DEBUG] [Thread-22139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:21:48.179 [INFO] [Thread-22139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:21:48.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:21:48.814 [DEBUG] [Thread-22139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:21:48.815 [DEBUG] [Thread-22139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:21:48.815 [DEBUG] [Thread-22139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:21:48.856 [DEBUG] [Thread-22139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:21:48.856 [DEBUG] [Thread-22139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:21:48.859 [DEBUG] [Thread-22139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:21:48.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:21:48.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:21:48.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:21:48.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:21:48.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:21:48.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:21:48.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:21:48.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:21:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:21:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.764668 -999.00  +20.10  13.72     33   +3.70 1 2 1 1 1     0    0 14.74 -64.57 ZNE.W 20.4 13.7 262.4 21.1 20.6 -21.7 20.6 -20.6 20.3 -20.4 20.5 -21.1
2025-11-12T20:21:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:21:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:21:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.764668
2025-11-12T20:21:48.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:21:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:21:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:21:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:21:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:21:48.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:21:33', tmtdew=19.19, humidity=27.79, cloud=0.0, wind=24.14, temperature=20.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:21:07.315', atlas_cloud=2, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:18:00')
2025-11-12T20:21:48.888 [DEBUG] [Thread-22139] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:21:48.965 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:21:48.977 [DEBUG] [Thread-22142] [transport.py] [_log()] starting thread (client mode): 0x14906bf0
2025-11-12T20:21:48.977 [DEBUG] [Thread-22142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:21:48.992 [DEBUG] [Thread-22142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:21:48.993 [INFO] [Thread-22142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:21:49.002 [DEBUG] [Thread-22142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] client lang: <none>
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] server lang: <none>
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] kex follows: False
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:21:49.003 [DEBUG] [Thread-22142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:21:49.004 [DEBUG] [Thread-22142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:21:49.004 [DEBUG] [Thread-22142] [transport.py] [_log()] Compression: none
2025-11-12T20:21:49.004 [DEBUG] [Thread-22142] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:21:49.061 [DEBUG] [Thread-22142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:21:49.062 [DEBUG] [Thread-22142] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:21:49.063 [DEBUG] [Thread-22142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:21:49.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:21:49.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:21:49.118 [DEBUG] [Thread-22142] [transport.py] [_log()] userauth is OK
2025-11-12T20:21:49.118 [DEBUG] [Thread-22142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:21:49.118 [DEBUG] [Thread-22142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:21:49.118 [DEBUG] [Thread-22142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:21:49.118 [DEBUG] [Thread-22142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:21:49.137 [INFO] [Thread-22142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:21:49.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:21:49.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:21:49.981 [DEBUG] [Thread-22142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:21:49.982 [DEBUG] [Thread-22142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:21:50.031 [DEBUG] [Thread-22142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:21:50.032 [DEBUG] [Thread-22142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:21:50.041 [DEBUG] [Thread-22142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:21:50.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:21:50.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:21:50.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:21:50.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:21:50.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:21:50.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:21:50.076 [DEBUG] [Thread-22142] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:21:51.437 [DEBUG] [Thread-22144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:21:52.317 [DEBUG] [Thread-22145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:22:07.365 [DEBUG] [Thread-22146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:22:20.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:22:20.070 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:22:20.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-11-12T20:22:20.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 22, 5), 19.04, 27.91, 0.0, 24.17, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:22:20.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:22:05
2025-11-12T20:22:20.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:22:21.001 [DEBUG] [Thread-22147] [transport.py] [_log()] starting thread (client mode): 0x14923340
2025-11-12T20:22:21.001 [DEBUG] [Thread-22147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:22:21.021 [DEBUG] [Thread-22147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:22:21.021 [INFO] [Thread-22147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:22:21.025 [DEBUG] [Thread-22147] [transport.py] [_log()] client lang: <none>
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] server lang: <none>
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] kex follows: False
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] Compression: none
2025-11-12T20:22:21.026 [DEBUG] [Thread-22147] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:22:21.046 [DEBUG] [Thread-22147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:22:21.047 [DEBUG] [Thread-22147] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:22:21.047 [DEBUG] [Thread-22147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:22:21.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:22:21.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:22:21.049 [DEBUG] [Thread-22147] [transport.py] [_log()] userauth is OK
2025-11-12T20:22:21.050 [DEBUG] [Thread-22147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:22:21.050 [DEBUG] [Thread-22147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:22:21.050 [DEBUG] [Thread-22147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:22:21.050 [DEBUG] [Thread-22147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:22:21.075 [INFO] [Thread-22147] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:22:21.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:22:21.697 [DEBUG] [Thread-22147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:22:21.697 [DEBUG] [Thread-22147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:22:21.698 [DEBUG] [Thread-22147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:22:21.739 [DEBUG] [Thread-22147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:22:21.739 [DEBUG] [Thread-22147] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:22:21.742 [DEBUG] [Thread-22147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:22:21.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:22:21.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:22:21.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:22:21.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:22:21.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:22:21.766 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:22:21.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:22:21.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:22:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:22:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.765362 -999.00  +20.00  17.53     33   +3.60 1 1 1 1 1     0    0 14.97 -60.12 ZNESW 17.2 17.5 262.6 29.4 20.6 -21.7 20.5 -20.6 20.2 -20.4 20.5 -21.1
2025-11-12T20:22:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:22:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:22:21.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.765362
2025-11-12T20:22:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:22:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:22:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:22:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:22:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T20:22:21.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:22:05', tmtdew=19.04, humidity=27.91, cloud=0.0, wind=24.17, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:22:07.277', atlas_cloud=1, atlas_rain=1, zp_data=[0.8607499999999995, nan, nan, 1.293499999999999, 1.2530000000000001, 0.9232500000000012, 0.8829999999999991, 0.8562500000000011, 1.152499999999999, nan, nan, 1.452, 1.1235, 0.8132499999999991, 0.637999999999999, 1.0734999999999992, 1.01525, nan, nan, nan, 2.0279999999999987, nan, nan, nan, 1.0859999999999994, nan, nan, -1.3554999999999993, -1.3279999999999994, nan, nan, 1.4750000000000005, nan], zp_timestamp='2025-11-12T18:18:00')
2025-11-12T20:22:21.769 [DEBUG] [Thread-22147] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:22:21.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:22:21.864 [DEBUG] [Thread-22150] [transport.py] [_log()] starting thread (client mode): 0x149a52d0
2025-11-12T20:22:21.864 [DEBUG] [Thread-22150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:22:21.878 [DEBUG] [Thread-22150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:22:21.879 [INFO] [Thread-22150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:22:21.886 [DEBUG] [Thread-22150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:22:21.886 [DEBUG] [Thread-22150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:22:21.886 [DEBUG] [Thread-22150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] client lang: <none>
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] server lang: <none>
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] kex follows: False
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] Compression: none
2025-11-12T20:22:21.887 [DEBUG] [Thread-22150] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:22:21.946 [DEBUG] [Thread-22150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:22:21.947 [DEBUG] [Thread-22150] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:22:21.947 [DEBUG] [Thread-22150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:22:21.947 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:22:21.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:22:22.002 [DEBUG] [Thread-22150] [transport.py] [_log()] userauth is OK
2025-11-12T20:22:22.002 [DEBUG] [Thread-22150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:22:22.002 [DEBUG] [Thread-22150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:22:22.002 [DEBUG] [Thread-22150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:22:22.003 [DEBUG] [Thread-22150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:22:22.021 [INFO] [Thread-22150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:22: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-11-12T20:22:22.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:22:22.398 [DEBUG] [Thread-22152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:22:22.850 [DEBUG] [Thread-22150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:22:22.850 [DEBUG] [Thread-22150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:22:22.898 [DEBUG] [Thread-22150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:22:22.899 [DEBUG] [Thread-22150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:22:22.908 [DEBUG] [Thread-22150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:22:22.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:22:22.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-11-12T20:22:22.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:22:22.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:22:22.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:22:22.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:22:22.946 [DEBUG] [Thread-22150] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:22:35.301 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:22:35.302 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:22:37.450 [DEBUG] [Thread-22153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:22:51.502 [DEBUG] [Thread-22154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:22:52.484 [DEBUG] [Thread-22155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:22:52.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:22:52.941 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:22:52.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-11-12T20:22:53.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 22, 37), 19.01, 27.96, 0.0, 19.13, 20.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:22:53.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:22:37
2025-11-12T20:22:53.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:22:53.862 [DEBUG] [Thread-22156] [transport.py] [_log()] starting thread (client mode): 0x149222c0
2025-11-12T20:22:53.862 [DEBUG] [Thread-22156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:22:53.882 [DEBUG] [Thread-22156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:22:53.882 [INFO] [Thread-22156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:22:53.885 [DEBUG] [Thread-22156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:22:53.885 [DEBUG] [Thread-22156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:22:53.885 [DEBUG] [Thread-22156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:22:53.885 [DEBUG] [Thread-22156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] client lang: <none>
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] server lang: <none>
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] kex follows: False
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:22:53.886 [DEBUG] [Thread-22156] [transport.py] [_log()] Compression: none
2025-11-12T20:22:53.887 [DEBUG] [Thread-22156] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:22:53.904 [DEBUG] [Thread-22156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:22:53.904 [DEBUG] [Thread-22156] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:22:53.905 [DEBUG] [Thread-22156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:22:53.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:22:53.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:22:53.907 [DEBUG] [Thread-22156] [transport.py] [_log()] userauth is OK
2025-11-12T20:22:53.907 [DEBUG] [Thread-22156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:22:53.907 [DEBUG] [Thread-22156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:22:53.907 [DEBUG] [Thread-22156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:22:53.908 [DEBUG] [Thread-22156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:22:53.932 [INFO] [Thread-22156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:22:53.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:22:54.558 [DEBUG] [Thread-22156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:22:54.558 [DEBUG] [Thread-22156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:22:54.558 [DEBUG] [Thread-22156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:22:54.599 [DEBUG] [Thread-22156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:22:54.599 [DEBUG] [Thread-22156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:22:54.602 [DEBUG] [Thread-22156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:22:54.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:22:54.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:22:54.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:22:54.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:22:54.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:22:54.629 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:22:54.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:22:54.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:22:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:22:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.765710 -999.00  +20.00  13.98     33   +3.60 1 2 1 1 1     0    0 15.25 -60.73 ZnE.w 17.5 14.0 258.0 25.1 20.6 -21.8 20.5 -20.8 20.2 -20.4 20.5 -21.1
2025-11-12T20:22:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:22:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:22:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.765710
2025-11-12T20:22:54.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:22:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:22:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:22:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:22:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:22:54.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:22:37', tmtdew=19.01, humidity=27.96, cloud=0.0, wind=19.13, temperature=20.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:22:37.344', atlas_cloud=2, atlas_rain=1, zp_data=[1.1552499999999997, 1.3697499999999998, 1.1672500000000001, 1.213499999999999, 1.3935000000000004, 0.8292500000000009, 0.8834999999999997, 1.1282500000000004, 1.0094999999999992, nan, nan, 1.4660000000000002, 1.343, 1.0127499999999996, 1.1279999999999992, 0.7379999999999995, 1.1857499999999996, nan, nan, nan, 1.8649999999999984, nan, nan, 1.2777500000000002, 1.3139999999999992, nan, nan, -1.3755000000000006, 1.1880000000000006, nan, nan, 1.2380000000000004, nan], zp_timestamp='2025-11-12T18:21:00')
2025-11-12T20:22:54.632 [DEBUG] [Thread-22156] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:22:54.715 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:22:54.727 [DEBUG] [Thread-22159] [transport.py] [_log()] starting thread (client mode): 0x14922a40
2025-11-12T20:22:54.728 [DEBUG] [Thread-22159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:22:54.746 [DEBUG] [Thread-22159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:22:54.746 [INFO] [Thread-22159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:22:54.753 [DEBUG] [Thread-22159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:22:54.754 [DEBUG] [Thread-22159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:22:54.754 [DEBUG] [Thread-22159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:22:54.754 [DEBUG] [Thread-22159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:22:54.754 [DEBUG] [Thread-22159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:22:54.754 [DEBUG] [Thread-22159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:22:54.755 [DEBUG] [Thread-22159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:22:54.755 [DEBUG] [Thread-22159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:22:54.755 [DEBUG] [Thread-22159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:22:54.755 [DEBUG] [Thread-22159] [transport.py] [_log()] client lang: <none>
2025-11-12T20:22:54.755 [DEBUG] [Thread-22159] [transport.py] [_log()] server lang: <none>
2025-11-12T20:22:54.755 [DEBUG] [Thread-22159] [transport.py] [_log()] kex follows: False
2025-11-12T20:22:54.755 [DEBUG] [Thread-22159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:22:54.755 [DEBUG] [Thread-22159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:22:54.756 [DEBUG] [Thread-22159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:22:54.756 [DEBUG] [Thread-22159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:22:54.756 [DEBUG] [Thread-22159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:22:54.756 [DEBUG] [Thread-22159] [transport.py] [_log()] Compression: none
2025-11-12T20:22:54.756 [DEBUG] [Thread-22159] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:22:54.814 [DEBUG] [Thread-22159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:22:54.814 [DEBUG] [Thread-22159] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:22:54.815 [DEBUG] [Thread-22159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:22:54.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:22:54.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:22:54.870 [DEBUG] [Thread-22159] [transport.py] [_log()] userauth is OK
2025-11-12T20:22:54.870 [DEBUG] [Thread-22159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:22:54.870 [DEBUG] [Thread-22159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:22:54.870 [DEBUG] [Thread-22159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:22:54.870 [DEBUG] [Thread-22159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:22:54.888 [INFO] [Thread-22159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:22:54.888 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:22:54.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:22:55.712 [DEBUG] [Thread-22159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:22:55.712 [DEBUG] [Thread-22159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:22:55.760 [DEBUG] [Thread-22159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:22:55.760 [DEBUG] [Thread-22159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:22:55.770 [DEBUG] [Thread-22159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:22:55.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:22:55.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-11-12T20:22:55.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-11-12T20:22:55.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:22:55.798 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:22:55.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:22:55.807 [DEBUG] [Thread-22159] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:23:07.521 [DEBUG] [Thread-22161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:23:22.580 [DEBUG] [Thread-22162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:23:25.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:23:25.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:23:25.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-11-12T20:23:26.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 23, 9), 19.0, 27.99, 0.0, 21.83, 20.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:23:26.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:23:09
2025-11-12T20:23:26.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:23:26.750 [DEBUG] [Thread-22163] [transport.py] [_log()] starting thread (client mode): 0x14922890
2025-11-12T20:23:26.750 [DEBUG] [Thread-22163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:23:26.769 [DEBUG] [Thread-22163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:23:26.770 [INFO] [Thread-22163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:23:26.772 [DEBUG] [Thread-22163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:23:26.772 [DEBUG] [Thread-22163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:23:26.772 [DEBUG] [Thread-22163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:23:26.772 [DEBUG] [Thread-22163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] client lang: <none>
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] server lang: <none>
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] kex follows: False
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] Compression: none
2025-11-12T20:23:26.773 [DEBUG] [Thread-22163] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:23:26.792 [DEBUG] [Thread-22163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:23:26.792 [DEBUG] [Thread-22163] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:23:26.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:23:26.793 [DEBUG] [Thread-22163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:23:26.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:23:26.796 [DEBUG] [Thread-22163] [transport.py] [_log()] userauth is OK
2025-11-12T20:23:26.796 [DEBUG] [Thread-22163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:23:26.796 [DEBUG] [Thread-22163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:23:26.796 [DEBUG] [Thread-22163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:23:26.796 [DEBUG] [Thread-22163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:23:26.821 [INFO] [Thread-22163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:23:26.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:23:27.443 [DEBUG] [Thread-22163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:23:27.443 [DEBUG] [Thread-22163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:23:27.444 [DEBUG] [Thread-22163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:23:27.484 [DEBUG] [Thread-22163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:23:27.484 [DEBUG] [Thread-22163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:23:27.487 [DEBUG] [Thread-22163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:23:27.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:23:27.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:23:27.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:23:27.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:23:27.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:23:27.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:23:27.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:23:27.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:23:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:23:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.766057 -999.00  +20.00  13.23     33   +3.60 1 2 1 1 1     0    0 15.30 -57.54 ZnE.w 13.0 13.2 271.4 23.8 20.6 -21.7 20.6 -20.7 20.2 -20.5 20.5 -21.2
2025-11-12T20:23:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:23:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:23:27.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.766057
2025-11-12T20:23:27.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:23:27.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:23:27.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:23:27.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:23:27.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:23:27.517 [DEBUG] [Thread-22163] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:23:27.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:23:09', tmtdew=19.0, humidity=27.99, cloud=0.0, wind=21.83, temperature=20.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:23:07.325', atlas_cloud=2, atlas_rain=1, zp_data=[1.1552499999999997, 1.3697499999999998, 1.1672500000000001, 1.213499999999999, 1.3935000000000004, 0.8292500000000009, 0.8834999999999997, 1.1282500000000004, 1.0094999999999992, nan, nan, 1.4660000000000002, 1.343, 1.0127499999999996, 1.1279999999999992, 0.7379999999999995, 1.1857499999999996, nan, nan, nan, 1.8649999999999984, nan, nan, 1.2777500000000002, 1.3139999999999992, nan, nan, -1.3755000000000006, 1.1880000000000006, nan, nan, 1.2380000000000004, nan], zp_timestamp='2025-11-12T18:21:00')
2025-11-12T20:23:27.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:23:27.613 [DEBUG] [Thread-22166] [transport.py] [_log()] starting thread (client mode): 0x14944a30
2025-11-12T20:23:27.613 [DEBUG] [Thread-22166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:23:27.628 [DEBUG] [Thread-22166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:23:27.628 [INFO] [Thread-22166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:23:27.636 [DEBUG] [Thread-22166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:23:27.636 [DEBUG] [Thread-22166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:23:27.636 [DEBUG] [Thread-22166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:23:27.636 [DEBUG] [Thread-22166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:23:27.636 [DEBUG] [Thread-22166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:23:27.636 [DEBUG] [Thread-22166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:23:27.637 [DEBUG] [Thread-22166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:23:27.637 [DEBUG] [Thread-22166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:23:27.637 [DEBUG] [Thread-22166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:23:27.637 [DEBUG] [Thread-22166] [transport.py] [_log()] client lang: <none>
2025-11-12T20:23:27.637 [DEBUG] [Thread-22166] [transport.py] [_log()] server lang: <none>
2025-11-12T20:23:27.637 [DEBUG] [Thread-22166] [transport.py] [_log()] kex follows: False
2025-11-12T20:23:27.637 [DEBUG] [Thread-22166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:23:27.637 [DEBUG] [Thread-22166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:23:27.638 [DEBUG] [Thread-22166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:23:27.638 [DEBUG] [Thread-22166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:23:27.638 [DEBUG] [Thread-22166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:23:27.638 [DEBUG] [Thread-22166] [transport.py] [_log()] Compression: none
2025-11-12T20:23:27.638 [DEBUG] [Thread-22166] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:23:27.696 [DEBUG] [Thread-22166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:23:27.697 [DEBUG] [Thread-22166] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:23:27.698 [DEBUG] [Thread-22166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:23:27.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:23:27.700 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:23:27.754 [DEBUG] [Thread-22166] [transport.py] [_log()] userauth is OK
2025-11-12T20:23:27.755 [DEBUG] [Thread-22166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:23:27.755 [DEBUG] [Thread-22166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:23:27.755 [DEBUG] [Thread-22166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:23:27.755 [DEBUG] [Thread-22166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:23:27.776 [INFO] [Thread-22166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:23:27.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:23:27.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:23:28.634 [DEBUG] [Thread-22166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:23:28.634 [DEBUG] [Thread-22166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:23:28.682 [DEBUG] [Thread-22166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:23:28.682 [DEBUG] [Thread-22166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:23:28.691 [DEBUG] [Thread-22166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:23:28.700 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:23:28.700 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:23: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') -> 00000000
2025-11-12T20:23:28.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:23:28.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:23:28.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:23:28.726 [DEBUG] [Thread-22166] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:23:35.506 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:23:35.508 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:23:37.623 [DEBUG] [Thread-22168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:23:51.581 [DEBUG] [Thread-22169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:23:52.676 [DEBUG] [Thread-22170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:23:58.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:23:58.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:23:58.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-11-12T20:23:59.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 23, 41), 18.93, 28.03, 0.0, 21.77, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:23:59.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:23:41
2025-11-12T20:23:59.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:23:59.673 [DEBUG] [Thread-22171] [transport.py] [_log()] starting thread (client mode): 0x14906140
2025-11-12T20:23:59.673 [DEBUG] [Thread-22171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:23:59.684 [DEBUG] [Thread-22171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:23:59.684 [INFO] [Thread-22171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:23:59.687 [DEBUG] [Thread-22171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] client lang: <none>
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] server lang: <none>
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] kex follows: False
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] Compression: none
2025-11-12T20:23:59.688 [DEBUG] [Thread-22171] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:23:59.705 [DEBUG] [Thread-22171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:23:59.705 [DEBUG] [Thread-22171] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:23:59.705 [DEBUG] [Thread-22171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:23:59.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:23:59.705 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:23:59.706 [DEBUG] [Thread-22171] [transport.py] [_log()] userauth is OK
2025-11-12T20:23:59.706 [DEBUG] [Thread-22171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:23:59.706 [DEBUG] [Thread-22171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:23:59.706 [DEBUG] [Thread-22171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:23:59.706 [DEBUG] [Thread-22171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:23:59.738 [INFO] [Thread-22171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:23:59.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:24:00.359 [DEBUG] [Thread-22171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:24:00.359 [DEBUG] [Thread-22171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:24:00.360 [DEBUG] [Thread-22171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:24:00.400 [DEBUG] [Thread-22171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:24:00.401 [DEBUG] [Thread-22171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:24:00.405 [DEBUG] [Thread-22171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:24:00.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:24:00.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:24:00.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:24:00.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:24:00.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:24:00.427 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:24:00.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:24:00.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:24:00.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:24:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.766404 -999.00  +20.00  14.04     34   +3.60 1 2 1 1 1     0    0 15.22 -56.85 ZnESw 13.5 14.0 260.0 20.8 20.6 -21.8 20.5 -20.7 20.2 -20.5 20.5 -21.1
2025-11-12T20:24:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:24:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:24:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.766404
2025-11-12T20:24:00.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:24:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:24:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:24:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:24:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:24:00.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:23:41', tmtdew=18.93, humidity=28.03, cloud=0.0, wind=21.77, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:23:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[1.1552499999999997, 1.3697499999999998, 1.1672500000000001, 1.213499999999999, 1.3935000000000004, 0.8292500000000009, 0.8834999999999997, 1.1282500000000004, 1.0094999999999992, nan, nan, 1.4660000000000002, 1.343, 1.0127499999999996, 1.1279999999999992, 0.7379999999999995, 1.1857499999999996, nan, nan, nan, 1.8649999999999984, nan, nan, 1.2777500000000002, 1.3139999999999992, nan, nan, -1.3755000000000006, 1.1880000000000006, nan, nan, 1.2380000000000004, nan], zp_timestamp='2025-11-12T18:21:00')
2025-11-12T20:24:00.430 [DEBUG] [Thread-22171] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:24:00.515 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:24:00.526 [DEBUG] [Thread-22174] [transport.py] [_log()] starting thread (client mode): 0x149aa050
2025-11-12T20:24:00.527 [DEBUG] [Thread-22174] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:24:00.541 [DEBUG] [Thread-22174] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:24:00.541 [INFO] [Thread-22174] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] client lang: <none>
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] server lang: <none>
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] kex follows: False
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:24:00.549 [DEBUG] [Thread-22174] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:24:00.550 [DEBUG] [Thread-22174] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:24:00.550 [DEBUG] [Thread-22174] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:24:00.550 [DEBUG] [Thread-22174] [transport.py] [_log()] Compression: none
2025-11-12T20:24:00.550 [DEBUG] [Thread-22174] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:24:00.606 [DEBUG] [Thread-22174] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:24:00.606 [DEBUG] [Thread-22174] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:24:00.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:24:00.607 [DEBUG] [Thread-22174] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:24:00.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:24:00.661 [DEBUG] [Thread-22174] [transport.py] [_log()] userauth is OK
2025-11-12T20:24:00.661 [DEBUG] [Thread-22174] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:24:00.661 [DEBUG] [Thread-22174] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:24:00.662 [DEBUG] [Thread-22174] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:24:00.662 [DEBUG] [Thread-22174] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:24:00.680 [INFO] [Thread-22174] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:24:00.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:24:00.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:24:01.511 [DEBUG] [Thread-22174] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:24:01.511 [DEBUG] [Thread-22174] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:24:01.560 [DEBUG] [Thread-22174] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:24:01.560 [DEBUG] [Thread-22174] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:24:01.569 [DEBUG] [Thread-22174] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:24:01.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:24:01.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-11-12T20:24:01.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:24:01.597 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:24:01.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:24:01.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:24:01.605 [DEBUG] [Thread-22174] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:24:07.709 [DEBUG] [Thread-22176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:24:22.760 [DEBUG] [Thread-22177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:24:31.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:24:31.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:24:31.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:24:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 24, 13), 18.93, 28.03, 0.0, 21.51, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:24:32.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:24:13
2025-11-12T20:24:32.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:24:32.587 [DEBUG] [Thread-22178] [transport.py] [_log()] starting thread (client mode): 0x14905420
2025-11-12T20:24:32.587 [DEBUG] [Thread-22178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:24:32.607 [DEBUG] [Thread-22178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:24:32.607 [INFO] [Thread-22178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] client lang: <none>
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] server lang: <none>
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] kex follows: False
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] Compression: none
2025-11-12T20:24:32.609 [DEBUG] [Thread-22178] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:24:32.621 [DEBUG] [Thread-22178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:24:32.621 [DEBUG] [Thread-22178] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:24:32.621 [DEBUG] [Thread-22178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:24:32.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:24:32.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:24:32.622 [DEBUG] [Thread-22178] [transport.py] [_log()] userauth is OK
2025-11-12T20:24:32.622 [DEBUG] [Thread-22178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:24:32.622 [DEBUG] [Thread-22178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:24:32.622 [DEBUG] [Thread-22178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:24:32.622 [DEBUG] [Thread-22178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:24:32.631 [INFO] [Thread-22178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:24:32.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:24:33.261 [DEBUG] [Thread-22178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:24:33.261 [DEBUG] [Thread-22178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:24:33.261 [DEBUG] [Thread-22178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:24:33.302 [DEBUG] [Thread-22178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:24:33.302 [DEBUG] [Thread-22178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:24:33.304 [DEBUG] [Thread-22178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:24:33.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:24:33.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:24:33.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:24:33.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:24:33.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:24:33.321 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:24:33.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.766751 -999.00  +20.00  10.68     34   +3.60 1 2 1 1 1     0    0 15.32 -56.12 Z.Esw 13.7 10.7 265.8 16.6 20.6 -21.8 20.5 -20.7 20.2 -20.5 20.5 -21.0
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.766751
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:24:33.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:24:13', tmtdew=18.93, humidity=28.03, cloud=0.0, wind=21.51, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:24:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[1.1552499999999997, 1.3697499999999998, 1.1672500000000001, 1.213499999999999, 1.3935000000000004, 0.8292500000000009, 0.8834999999999997, 1.1282500000000004, 1.0094999999999992, nan, nan, 1.4660000000000002, 1.343, 1.0127499999999996, 1.1279999999999992, 0.7379999999999995, 1.1857499999999996, nan, nan, nan, 1.8649999999999984, nan, nan, 1.2777500000000002, 1.3139999999999992, nan, nan, -1.3755000000000006, 1.1880000000000006, nan, nan, 1.2380000000000004, nan], zp_timestamp='2025-11-12T18:21:00')
2025-11-12T20:24:33.322 [DEBUG] [Thread-22178] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:24:33.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:24:33.408 [DEBUG] [Thread-22181] [transport.py] [_log()] starting thread (client mode): 0x149a6b90
2025-11-12T20:24:33.408 [DEBUG] [Thread-22181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:24:33.428 [DEBUG] [Thread-22181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:24:33.428 [INFO] [Thread-22181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] client lang: <none>
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] server lang: <none>
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] kex follows: False
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] Compression: none
2025-11-12T20:24:33.436 [DEBUG] [Thread-22181] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:24:33.492 [DEBUG] [Thread-22181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:24:33.492 [DEBUG] [Thread-22181] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:24:33.492 [DEBUG] [Thread-22181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:24:33.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:24:33.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:24:33.549 [DEBUG] [Thread-22181] [transport.py] [_log()] userauth is OK
2025-11-12T20:24:33.549 [DEBUG] [Thread-22181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:24:33.549 [DEBUG] [Thread-22181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:24:33.549 [DEBUG] [Thread-22181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:24:33.549 [DEBUG] [Thread-22181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:24:33.566 [INFO] [Thread-22181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:24:33.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:24:33.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:24:34.485 [DEBUG] [Thread-22181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:24:34.485 [DEBUG] [Thread-22181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:24:34.533 [DEBUG] [Thread-22181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:24:34.533 [DEBUG] [Thread-22181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:24:34.541 [DEBUG] [Thread-22181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:24:34.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:24:34.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')
2025-11-12T20:24:34.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-11-12T20:24:34.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:24:34.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:24:34.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:24:34.573 [DEBUG] [Thread-22181] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:24:35.713 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:24:35.714 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:24:37.791 [DEBUG] [Thread-22183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:24:51.639 [DEBUG] [Thread-22184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:24:52.838 [DEBUG] [Thread-22185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:25:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:25:04.596 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:25:04.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-11-12T20:25:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 24, 45), 18.94, 27.99, 0.0, 23.13, 19.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:25:05.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:24:45
2025-11-12T20:25:05.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:25:05.513 [DEBUG] [Thread-22186] [transport.py] [_log()] starting thread (client mode): 0x14907f70
2025-11-12T20:25:05.513 [DEBUG] [Thread-22186] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:25:05.529 [DEBUG] [Thread-22186] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:25:05.529 [INFO] [Thread-22186] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:25:05.530 [DEBUG] [Thread-22186] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:25:05.530 [DEBUG] [Thread-22186] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] client lang: <none>
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] server lang: <none>
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] kex follows: False
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] Compression: none
2025-11-12T20:25:05.531 [DEBUG] [Thread-22186] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:25:05.546 [DEBUG] [Thread-22186] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:25:05.546 [DEBUG] [Thread-22186] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:25:05.546 [DEBUG] [Thread-22186] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:25:05.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:25:05.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:25:05.551 [DEBUG] [Thread-22186] [transport.py] [_log()] userauth is OK
2025-11-12T20:25:05.552 [DEBUG] [Thread-22186] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:25:05.552 [DEBUG] [Thread-22186] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:25:05.552 [DEBUG] [Thread-22186] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:25:05.552 [DEBUG] [Thread-22186] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:25:05.566 [INFO] [Thread-22186] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:25:05.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:25:07.570 [DEBUG] [Thread-22186] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:25:07.571 [DEBUG] [Thread-22186] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:25:07.571 [DEBUG] [Thread-22186] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:25:07.612 [DEBUG] [Thread-22186] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:25:07.612 [DEBUG] [Thread-22186] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:25:07.614 [DEBUG] [Thread-22186] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:25:07.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:25:07.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:25:07.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:25:07.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:25:07.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:25:07.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:25:07.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:25:07.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:25:07.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:25:07.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.767098 -999.00  +19.90  17.46     34   +3.60 1 2 1 1 1     0    0 15.31 -59.54 Z.Esw 17.1 17.5 255.0 23.4 20.5 -21.7 20.5 -20.8 20.2 -20.3 20.4 -21.0
2025-11-12T20:25:07.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:25:07.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:25:07.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.767098
2025-11-12T20:25:07.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:25:07.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:25:07.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:25:07.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:25:07.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:25:07.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:24:45', tmtdew=18.94, humidity=27.99, cloud=0.0, wind=23.13, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:24:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[1.1552499999999997, 1.3697499999999998, 1.1672500000000001, 1.213499999999999, 1.3935000000000004, 0.8292500000000009, 0.8834999999999997, 1.1282500000000004, 1.0094999999999992, nan, nan, 1.4660000000000002, 1.343, 1.0127499999999996, 1.1279999999999992, 0.7379999999999995, 1.1857499999999996, nan, nan, nan, 1.8649999999999984, nan, nan, 1.2777500000000002, 1.3139999999999992, nan, nan, -1.3755000000000006, 1.1880000000000006, nan, nan, 1.2380000000000004, nan], zp_timestamp='2025-11-12T18:21:00')
2025-11-12T20:25:07.647 [DEBUG] [Thread-22186] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:25:07.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:25:07.737 [DEBUG] [Thread-22189] [transport.py] [_log()] starting thread (client mode): 0x173bfa00
2025-11-12T20:25:07.737 [DEBUG] [Thread-22189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:25:07.753 [DEBUG] [Thread-22189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:25:07.753 [INFO] [Thread-22189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] client lang: <none>
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] server lang: <none>
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] kex follows: False
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:25:07.761 [DEBUG] [Thread-22189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:25:07.762 [DEBUG] [Thread-22189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:25:07.762 [DEBUG] [Thread-22189] [transport.py] [_log()] Compression: none
2025-11-12T20:25:07.762 [DEBUG] [Thread-22189] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:25:07.818 [DEBUG] [Thread-22189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:25:07.818 [DEBUG] [Thread-22189] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:25:07.819 [DEBUG] [Thread-22189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:25:07.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:25:07.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:25:07.875 [DEBUG] [Thread-22189] [transport.py] [_log()] userauth is OK
2025-11-12T20:25:07.875 [DEBUG] [Thread-22189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:25:07.875 [DEBUG] [Thread-22189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:25:07.875 [DEBUG] [Thread-22189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:25:07.875 [DEBUG] [Thread-22189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:25:07.876 [DEBUG] [Thread-22191 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:25:07.897 [INFO] [Thread-22189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:25:07.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:25:07.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:25:08.730 [DEBUG] [Thread-22189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:25:08.731 [DEBUG] [Thread-22189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:25:08.779 [DEBUG] [Thread-22189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:25:08.779 [DEBUG] [Thread-22189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:25:08.791 [DEBUG] [Thread-22189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:25:08.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:25:08.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:25:08.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-11-12T20:25:08.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:25:08.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:25:08.827 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:25:08.837 [DEBUG] [Thread-22189] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:25:22.921 [DEBUG] [Thread-22192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:25:35.919 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:25:35.920 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:25:37.958 [DEBUG] [Thread-22193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:25:38.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:25:38.857 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:25:38.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:25:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 25, 17), 18.92, 28.04, 0.0, 21.03, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:25:39.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:25:17
2025-11-12T20:25:39.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:25:39.776 [DEBUG] [Thread-22194] [transport.py] [_log()] starting thread (client mode): 0x14904d30
2025-11-12T20:25:39.776 [DEBUG] [Thread-22194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:25:39.797 [DEBUG] [Thread-22194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:25:39.797 [INFO] [Thread-22194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:25:39.800 [DEBUG] [Thread-22194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:25:39.800 [DEBUG] [Thread-22194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:25:39.800 [DEBUG] [Thread-22194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:25:39.800 [DEBUG] [Thread-22194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:25:39.800 [DEBUG] [Thread-22194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:25:39.800 [DEBUG] [Thread-22194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:25:39.800 [DEBUG] [Thread-22194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:25:39.800 [DEBUG] [Thread-22194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] client lang: <none>
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] server lang: <none>
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] kex follows: False
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] Compression: none
2025-11-12T20:25:39.801 [DEBUG] [Thread-22194] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:25:39.821 [DEBUG] [Thread-22194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:25:39.822 [DEBUG] [Thread-22194] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:25:39.823 [DEBUG] [Thread-22194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:25:39.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:25:39.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:25:39.825 [DEBUG] [Thread-22194] [transport.py] [_log()] userauth is OK
2025-11-12T20:25:39.825 [DEBUG] [Thread-22194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:25:39.825 [DEBUG] [Thread-22194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:25:39.825 [DEBUG] [Thread-22194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:25:39.825 [DEBUG] [Thread-22194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:25:39.850 [INFO] [Thread-22194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:25:39.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:25:40.502 [DEBUG] [Thread-22194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:25:40.503 [DEBUG] [Thread-22194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:25:40.503 [DEBUG] [Thread-22194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:25:40.543 [DEBUG] [Thread-22194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:25:40.544 [DEBUG] [Thread-22194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:25:40.547 [DEBUG] [Thread-22194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:25:40.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:25:40.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:25:40.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:25:40.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:25:40.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:25:40.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:25:40.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:25:40.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:25:40.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:25:40.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.767098 -999.00  +19.90  17.46     34   +3.60 1 2 1 1 1     0    0 15.31 -59.54 Z.Esw 17.1 17.5 255.0 23.4 20.5 -21.7 20.5 -20.8 20.2 -20.3 20.4 -21.0
2025-11-12T20:25:40.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:25:40.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:25:40.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.767098
2025-11-12T20:25:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:25:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:25:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:25:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:25:40.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:25:40.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:25:17', tmtdew=18.92, humidity=28.04, cloud=0.0, wind=21.03, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:24:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[1.1552499999999997, 1.3697499999999998, 1.1672500000000001, 1.213499999999999, 1.3935000000000004, 0.8292500000000009, 0.8834999999999997, 1.1282500000000004, 1.0094999999999992, nan, nan, 1.4660000000000002, 1.343, 1.0127499999999996, 1.1279999999999992, 0.7379999999999995, 1.1857499999999996, nan, nan, nan, 1.8649999999999984, nan, nan, 1.2777500000000002, 1.3139999999999992, nan, nan, -1.3755000000000006, 1.1880000000000006, nan, nan, 1.2380000000000004, nan], zp_timestamp='2025-11-12T18:21:00')
2025-11-12T20:25:40.573 [DEBUG] [Thread-22194] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:25:40.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:25:40.672 [DEBUG] [Thread-22197] [transport.py] [_log()] starting thread (client mode): 0x149a6d10
2025-11-12T20:25:40.672 [DEBUG] [Thread-22197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:25:40.687 [DEBUG] [Thread-22197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:25:40.687 [INFO] [Thread-22197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:25:40.697 [DEBUG] [Thread-22197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] client lang: <none>
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] server lang: <none>
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] kex follows: False
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:25:40.698 [DEBUG] [Thread-22197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:25:40.699 [DEBUG] [Thread-22197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:25:40.699 [DEBUG] [Thread-22197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:25:40.699 [DEBUG] [Thread-22197] [transport.py] [_log()] Compression: none
2025-11-12T20:25:40.699 [DEBUG] [Thread-22197] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:25:40.755 [DEBUG] [Thread-22197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:25:40.756 [DEBUG] [Thread-22197] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:25:40.757 [DEBUG] [Thread-22197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:25:40.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:25:40.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:25:40.814 [DEBUG] [Thread-22197] [transport.py] [_log()] userauth is OK
2025-11-12T20:25:40.814 [DEBUG] [Thread-22197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:25:40.814 [DEBUG] [Thread-22197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:25:40.814 [DEBUG] [Thread-22197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:25:40.814 [DEBUG] [Thread-22197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:25:40.834 [INFO] [Thread-22197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:25:40.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:25:40.834 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:25:41.673 [DEBUG] [Thread-22197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:25:41.674 [DEBUG] [Thread-22197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:25:41.721 [DEBUG] [Thread-22197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:25:41.722 [DEBUG] [Thread-22197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:25:41.730 [DEBUG] [Thread-22197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:25:41.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:25:41.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-11-12T20:25:41.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-11-12T20:25:41.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:25:41.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:25:41.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:25:41.764 [DEBUG] [Thread-22197] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:25:51.695 [DEBUG] [Thread-22199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:25:52.991 [DEBUG] [Thread-22200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:26:08.033 [DEBUG] [Thread-22201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:26:11.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:26:11.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:26:11.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-11-12T20:26:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 25, 49), 18.84, 28.61, 0.0, 20.08, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:26:12.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:25:49
2025-11-12T20:26:12.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:26:12.688 [DEBUG] [Thread-22202] [transport.py] [_log()] starting thread (client mode): 0x14907580
2025-11-12T20:26:12.688 [DEBUG] [Thread-22202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:26:12.707 [DEBUG] [Thread-22202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:26:12.707 [INFO] [Thread-22202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:26:12.710 [DEBUG] [Thread-22202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:26:12.710 [DEBUG] [Thread-22202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:26:12.710 [DEBUG] [Thread-22202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] client lang: <none>
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] server lang: <none>
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] kex follows: False
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] Compression: none
2025-11-12T20:26:12.711 [DEBUG] [Thread-22202] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:26:12.728 [DEBUG] [Thread-22202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:26:12.729 [DEBUG] [Thread-22202] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:26:12.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:26:12.730 [DEBUG] [Thread-22202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:26:12.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:26:12.732 [DEBUG] [Thread-22202] [transport.py] [_log()] userauth is OK
2025-11-12T20:26:12.732 [DEBUG] [Thread-22202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:26:12.732 [DEBUG] [Thread-22202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:26:12.732 [DEBUG] [Thread-22202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:26:12.732 [DEBUG] [Thread-22202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:26:12.755 [INFO] [Thread-22202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:26:12.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:26:13.395 [DEBUG] [Thread-22202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:26:13.395 [DEBUG] [Thread-22202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:26:13.395 [DEBUG] [Thread-22202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:26:13.436 [DEBUG] [Thread-22202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:26:13.436 [DEBUG] [Thread-22202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:26:13.439 [DEBUG] [Thread-22202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:26:13.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:26:13.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:26:13.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:26:13.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:26:13.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:26:13.463 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:26:13.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:26:13.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:26:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:26:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.767793 -999.00  +20.00   7.75     34   +3.70 1 2 1 1 1     0    0 15.06 -57.54 ZNEsw 14.4 7.8 252.0 22.1 20.5 -21.7 20.5 -20.7 20.2 -20.6 20.4 -21.0
2025-11-12T20:26:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:26:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:26:13.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.767793
2025-11-12T20:26:13.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:26:13.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:26:13.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:26:13.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:26:13.466 [DEBUG] [Thread-22202] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:26:13.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:26:13.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:25:49', tmtdew=18.84, humidity=28.61, cloud=0.0, wind=20.08, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:25:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:24:00')
2025-11-12T20:26:13.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:26:13.558 [DEBUG] [Thread-22205] [transport.py] [_log()] starting thread (client mode): 0x149a60e0
2025-11-12T20:26:13.558 [DEBUG] [Thread-22205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:26:13.572 [DEBUG] [Thread-22205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:26:13.572 [INFO] [Thread-22205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:26:13.579 [DEBUG] [Thread-22205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:26:13.579 [DEBUG] [Thread-22205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] client lang: <none>
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] server lang: <none>
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] kex follows: False
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] Compression: none
2025-11-12T20:26:13.580 [DEBUG] [Thread-22205] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:26:13.638 [DEBUG] [Thread-22205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:26:13.638 [DEBUG] [Thread-22205] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:26:13.639 [DEBUG] [Thread-22205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:26:13.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:26:13.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:26:13.694 [DEBUG] [Thread-22205] [transport.py] [_log()] userauth is OK
2025-11-12T20:26:13.694 [DEBUG] [Thread-22205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:26:13.695 [DEBUG] [Thread-22205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:26:13.695 [DEBUG] [Thread-22205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:26:13.695 [DEBUG] [Thread-22205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:26:13.713 [INFO] [Thread-22205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:26:13.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:26:13.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:26:14.551 [DEBUG] [Thread-22205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:26:14.551 [DEBUG] [Thread-22205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:26:14.599 [DEBUG] [Thread-22205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:26:14.600 [DEBUG] [Thread-22205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:26:14.609 [DEBUG] [Thread-22205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:26:14.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:26:14.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-11-12T20:26:14.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-11-12T20:26:14.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:26:14.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:26:14.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:26:14.645 [DEBUG] [Thread-22205] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:26:23.068 [DEBUG] [Thread-22207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:26:36.125 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:26:36.126 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:26:38.103 [DEBUG] [Thread-22208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:26:44.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:26:44.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:26:44.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-11-12T20:26:45.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 26, 21), 18.81, 28.66, 0.0, 18.88, 19.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:26:45.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:26:21
2025-11-12T20:26:45.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:26:45.586 [DEBUG] [Thread-22209] [transport.py] [_log()] starting thread (client mode): 0x149476d0
2025-11-12T20:26:45.586 [DEBUG] [Thread-22209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:26:45.606 [DEBUG] [Thread-22209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:26:45.606 [INFO] [Thread-22209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] client lang: <none>
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] server lang: <none>
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] kex follows: False
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] Compression: none
2025-11-12T20:26:45.610 [DEBUG] [Thread-22209] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:26:45.630 [DEBUG] [Thread-22209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:26:45.631 [DEBUG] [Thread-22209] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:26:45.631 [DEBUG] [Thread-22209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:26:45.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:26:45.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:26:45.633 [DEBUG] [Thread-22209] [transport.py] [_log()] userauth is OK
2025-11-12T20:26:45.634 [DEBUG] [Thread-22209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:26:45.634 [DEBUG] [Thread-22209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:26:45.634 [DEBUG] [Thread-22209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:26:45.634 [DEBUG] [Thread-22209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:26:45.670 [INFO] [Thread-22209] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:26:45.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:26:46.295 [DEBUG] [Thread-22209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:26:46.296 [DEBUG] [Thread-22209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:26:46.296 [DEBUG] [Thread-22209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:26:46.337 [DEBUG] [Thread-22209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:26:46.337 [DEBUG] [Thread-22209] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:26:46.340 [DEBUG] [Thread-22209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:26:46.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:26:46.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:26:46.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:26:46.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:26:46.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:26:46.366 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:26:46.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:26:46.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:26:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:26:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.768140 -999.00  +19.90  11.21     34   +3.60 1 2 1 1 1     0    0 15.20 -57.54 ZNEsw 11.3 11.2 254.8 22.2 20.5 -21.8 20.4 -20.8 20.2 -20.5 20.4 -21.1
2025-11-12T20:26:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:26:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:26:46.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.768140
2025-11-12T20:26:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:26:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:26:46.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:26:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:26:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:26:46.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:26:21', tmtdew=18.81, humidity=28.66, cloud=0.0, wind=18.88, temperature=19.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:26:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:24:00')
2025-11-12T20:26:46.369 [DEBUG] [Thread-22209] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:26:46.452 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:26:46.465 [DEBUG] [Thread-22212] [transport.py] [_log()] starting thread (client mode): 0x14904070
2025-11-12T20:26:46.465 [DEBUG] [Thread-22212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:26:46.479 [DEBUG] [Thread-22212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:26:46.480 [INFO] [Thread-22212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:26:46.487 [DEBUG] [Thread-22212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:26:46.487 [DEBUG] [Thread-22212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:26:46.487 [DEBUG] [Thread-22212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:26:46.487 [DEBUG] [Thread-22212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:26:46.487 [DEBUG] [Thread-22212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:26:46.487 [DEBUG] [Thread-22212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] client lang: <none>
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] server lang: <none>
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] kex follows: False
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] Compression: none
2025-11-12T20:26:46.488 [DEBUG] [Thread-22212] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:26:46.552 [DEBUG] [Thread-22212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:26:46.552 [DEBUG] [Thread-22212] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:26:46.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:26:46.553 [DEBUG] [Thread-22212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:26:46.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:26:46.610 [DEBUG] [Thread-22212] [transport.py] [_log()] userauth is OK
2025-11-12T20:26:46.610 [DEBUG] [Thread-22212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:26:46.610 [DEBUG] [Thread-22212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:26:46.610 [DEBUG] [Thread-22212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:26:46.611 [DEBUG] [Thread-22212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:26:46.631 [INFO] [Thread-22212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:26:46.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:26:46.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:26:47.522 [DEBUG] [Thread-22212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:26:47.522 [DEBUG] [Thread-22212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:26:47.570 [DEBUG] [Thread-22212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:26:47.570 [DEBUG] [Thread-22212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:26:47.579 [DEBUG] [Thread-22212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:26:47.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:26:47.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-11-12T20:26:47.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-11-12T20:26:47.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:26:47.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:26:47.608 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:26:47.616 [DEBUG] [Thread-22212] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:26:51.766 [DEBUG] [Thread-22214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:26:53.139 [DEBUG] [Thread-22215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:27:08.187 [DEBUG] [Thread-22216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:27:17.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:27:17.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:27: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-11-12T20:27:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 26, 53), 18.85, 28.59, 0.0, 20.98, 19.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:27:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:26:53
2025-11-12T20:27:18.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:27:18.541 [DEBUG] [Thread-22217] [transport.py] [_log()] starting thread (client mode): 0x149a8280
2025-11-12T20:27:18.541 [DEBUG] [Thread-22217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:27:18.563 [DEBUG] [Thread-22217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:27:18.563 [INFO] [Thread-22217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:27:18.566 [DEBUG] [Thread-22217] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] client lang: <none>
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] server lang: <none>
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] kex follows: False
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] Compression: none
2025-11-12T20:27:18.567 [DEBUG] [Thread-22217] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:27:18.584 [DEBUG] [Thread-22217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:27:18.585 [DEBUG] [Thread-22217] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:27:18.585 [DEBUG] [Thread-22217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:27:18.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:27:18.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:27:18.588 [DEBUG] [Thread-22217] [transport.py] [_log()] userauth is OK
2025-11-12T20:27:18.588 [DEBUG] [Thread-22217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:27:18.588 [DEBUG] [Thread-22217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:27:18.588 [DEBUG] [Thread-22217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:27:18.588 [DEBUG] [Thread-22217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:27:18.613 [INFO] [Thread-22217] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:27:18.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:27:19.227 [DEBUG] [Thread-22217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:27:19.228 [DEBUG] [Thread-22217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:27:19.228 [DEBUG] [Thread-22217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:27:19.270 [DEBUG] [Thread-22217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:27:19.270 [DEBUG] [Thread-22217] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:27:19.273 [DEBUG] [Thread-22217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:27:19.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:27:19.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:27:19.288 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:27:19.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:27:19.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:27:19.295 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:27:19.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:27:19.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:27:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:27:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.768487 -999.00  +19.90  18.14     34   +3.70 1 2 1 1 1     0    0 14.83 -62.94 Znesw 20.3 18.1 268.8 25.2 20.5 -21.8 20.4 -20.7 20.1 -20.4 20.4 -20.9
2025-11-12T20:27:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:27:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:27:19.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.768487
2025-11-12T20:27:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:27:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:27:19.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:27:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:27:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:27:19.297 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:26:53', tmtdew=18.85, humidity=28.59, cloud=0.0, wind=20.98, temperature=19.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T04:16:26', seeing=0.95, atlas_timestamp='2025-11-12T18:26:37.277', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:24:00')
2025-11-12T20:27:19.297 [DEBUG] [Thread-22217] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:27:19.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:27:19.394 [DEBUG] [Thread-22220] [transport.py] [_log()] starting thread (client mode): 0x149a6620
2025-11-12T20:27:19.394 [DEBUG] [Thread-22220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:27:19.409 [DEBUG] [Thread-22220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:27:19.409 [INFO] [Thread-22220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:27:19.416 [DEBUG] [Thread-22220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] client lang: <none>
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] server lang: <none>
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] kex follows: False
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:27:19.417 [DEBUG] [Thread-22220] [transport.py] [_log()] Compression: none
2025-11-12T20:27:19.418 [DEBUG] [Thread-22220] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:27:19.474 [DEBUG] [Thread-22220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:27:19.475 [DEBUG] [Thread-22220] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:27:19.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:27:19.476 [DEBUG] [Thread-22220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:27:19.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:27:19.530 [DEBUG] [Thread-22220] [transport.py] [_log()] userauth is OK
2025-11-12T20:27:19.530 [DEBUG] [Thread-22220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:27:19.531 [DEBUG] [Thread-22220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:27:19.531 [DEBUG] [Thread-22220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:27:19.531 [DEBUG] [Thread-22220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:27:19.550 [INFO] [Thread-22220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:27:19.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:27:19.551 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:27:20.427 [DEBUG] [Thread-22220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:27:20.427 [DEBUG] [Thread-22220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:27:20.475 [DEBUG] [Thread-22220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:27:20.475 [DEBUG] [Thread-22220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:27:20.485 [DEBUG] [Thread-22220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:27:20.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:27:20.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-11-12T20:27:20.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:27:20.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:27:20.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:27:20.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:27:20.522 [DEBUG] [Thread-22220] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:27:23.218 [DEBUG] [Thread-22222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:27:36.330 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:27:36.331 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:27:38.272 [DEBUG] [Thread-22223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:27:50.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:27:50.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:27:50.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-11-12T20:27:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 27, 25), 18.83, 28.59, 0.0, 22.48, 19.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:27:51.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:27:25
2025-11-12T20:27:51.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:27:51.430 [DEBUG] [Thread-22224] [transport.py] [_log()] starting thread (client mode): 0x149a7280
2025-11-12T20:27:51.430 [DEBUG] [Thread-22224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:27:51.450 [DEBUG] [Thread-22224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:27:51.450 [INFO] [Thread-22224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:27:51.453 [DEBUG] [Thread-22224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:27:51.453 [DEBUG] [Thread-22224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] client lang: <none>
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] server lang: <none>
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] kex follows: False
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] Compression: none
2025-11-12T20:27:51.454 [DEBUG] [Thread-22224] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:27:51.469 [DEBUG] [Thread-22224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:27:51.469 [DEBUG] [Thread-22224] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:27:51.470 [DEBUG] [Thread-22224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:27:51.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:27:51.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:27:51.470 [DEBUG] [Thread-22224] [transport.py] [_log()] userauth is OK
2025-11-12T20:27:51.470 [DEBUG] [Thread-22224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:27:51.470 [DEBUG] [Thread-22224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:27:51.470 [DEBUG] [Thread-22224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:27:51.470 [DEBUG] [Thread-22224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:27:51.486 [INFO] [Thread-22224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:27:51.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:27:51.818 [DEBUG] [Thread-22226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:27:52.125 [DEBUG] [Thread-22224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:27:52.125 [DEBUG] [Thread-22224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:27:52.125 [DEBUG] [Thread-22224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:27:52.166 [DEBUG] [Thread-22224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:27:52.166 [DEBUG] [Thread-22224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:27:52.168 [DEBUG] [Thread-22224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:27:52.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:27:52.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:27:52.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:27:52.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:27:52.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:27:52.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:27:52.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.768834 -999.00  +19.90  16.16     34   +3.70 1 2 1 1 1     0    0 14.72 -65.72 Znesw 18.8 16.2 263.0 22.9 20.5 -21.7 20.5 -20.8 20.2 -20.5 20.4 -21.0
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.768834
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:27:52.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:27:25', tmtdew=18.83, humidity=28.59, cloud=0.0, wind=22.48, temperature=19.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:27:26', seeing=0.81, atlas_timestamp='2025-11-12T18:27:07.258', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:24:00')
2025-11-12T20:27:52.187 [DEBUG] [Thread-22224] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:27:52.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:27:52.273 [DEBUG] [Thread-22228] [transport.py] [_log()] starting thread (client mode): 0x173bc640
2025-11-12T20:27:52.273 [DEBUG] [Thread-22228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:27:52.290 [DEBUG] [Thread-22228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:27:52.290 [INFO] [Thread-22228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:27:52.297 [DEBUG] [Thread-22228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:27:52.297 [DEBUG] [Thread-22228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:27:52.297 [DEBUG] [Thread-22228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:27:52.297 [DEBUG] [Thread-22228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:27:52.297 [DEBUG] [Thread-22228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:27:52.297 [DEBUG] [Thread-22228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] client lang: <none>
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] server lang: <none>
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] kex follows: False
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] Compression: none
2025-11-12T20:27:52.298 [DEBUG] [Thread-22228] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:27:52.353 [DEBUG] [Thread-22228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:27:52.353 [DEBUG] [Thread-22228] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:27:52.353 [DEBUG] [Thread-22228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:27:52.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:27:52.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:27:52.409 [DEBUG] [Thread-22228] [transport.py] [_log()] userauth is OK
2025-11-12T20:27:52.409 [DEBUG] [Thread-22228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:27:52.409 [DEBUG] [Thread-22228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:27:52.409 [DEBUG] [Thread-22228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:27:52.409 [DEBUG] [Thread-22228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:27:52.427 [INFO] [Thread-22228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:27:52.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:27:52.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:27:53.301 [DEBUG] [Thread-22230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:27:53.306 [DEBUG] [Thread-22228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:27:53.306 [DEBUG] [Thread-22228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:27:53.355 [DEBUG] [Thread-22228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:27:53.355 [DEBUG] [Thread-22228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:27:53.363 [DEBUG] [Thread-22228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:27:53.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:27:53.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-11-12T20:27:53.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-11-12T20:27:53.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:27:53.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:27:53.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:27:53.394 [DEBUG] [Thread-22228] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:28:08.342 [DEBUG] [Thread-22231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:28:23.367 [DEBUG] [Thread-22232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:28:23.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:28:23.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:28:23.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-11-12T20:28:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 27, 57), 18.8, 28.68, 0.0, 23.63, 19.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:28:24.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:27:57
2025-11-12T20:28:24.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:28:24.306 [DEBUG] [Thread-22233] [transport.py] [_log()] starting thread (client mode): 0x173bcf70
2025-11-12T20:28:24.306 [DEBUG] [Thread-22233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:28:24.326 [DEBUG] [Thread-22233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:28:24.326 [INFO] [Thread-22233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:28:24.329 [DEBUG] [Thread-22233] [transport.py] [_log()] client lang: <none>
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] server lang: <none>
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] kex follows: False
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] Compression: none
2025-11-12T20:28:24.330 [DEBUG] [Thread-22233] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:28:24.348 [DEBUG] [Thread-22233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:28:24.348 [DEBUG] [Thread-22233] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:28:24.348 [DEBUG] [Thread-22233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:28:24.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:28:24.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:28:24.349 [DEBUG] [Thread-22233] [transport.py] [_log()] userauth is OK
2025-11-12T20:28:24.349 [DEBUG] [Thread-22233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:28:24.350 [DEBUG] [Thread-22233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:28:24.350 [DEBUG] [Thread-22233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:28:24.350 [DEBUG] [Thread-22233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:28:24.376 [INFO] [Thread-22233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:28:24.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:28:24.991 [DEBUG] [Thread-22233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:28:24.991 [DEBUG] [Thread-22233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:28:24.991 [DEBUG] [Thread-22233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:28:25.032 [DEBUG] [Thread-22233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:28:25.032 [DEBUG] [Thread-22233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:28:25.034 [DEBUG] [Thread-22233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:28:25.046 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:28:25.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:28:25.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:28:25.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:28:25.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:28:25.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:28:25.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.769182 -999.00  +19.90  21.90     34   +3.70 1 2 1 1 1     0    0 14.64 -73.33 ZnESw 16.1 21.9 249.8 25.4 20.5 -21.7 20.4 -20.9 20.1 -20.5 20.4 -21.0
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.769182
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:28:25.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:27:57', tmtdew=18.8, humidity=28.68, cloud=0.0, wind=23.63, temperature=19.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:27:58', seeing=0.76, atlas_timestamp='2025-11-12T18:27:37.325', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:24:00')
2025-11-12T20:28:25.054 [DEBUG] [Thread-22233] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:28:25.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:28:25.138 [DEBUG] [Thread-22236] [transport.py] [_log()] starting thread (client mode): 0x1739be50
2025-11-12T20:28:25.138 [DEBUG] [Thread-22236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:28:25.153 [DEBUG] [Thread-22236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:28:25.153 [INFO] [Thread-22236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] client lang: <none>
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] server lang: <none>
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] kex follows: False
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] Compression: none
2025-11-12T20:28:25.161 [DEBUG] [Thread-22236] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:28:25.220 [DEBUG] [Thread-22236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:28:25.220 [DEBUG] [Thread-22236] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:28:25.221 [DEBUG] [Thread-22236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:28:25.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:28:25.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:28:25.278 [DEBUG] [Thread-22236] [transport.py] [_log()] userauth is OK
2025-11-12T20:28:25.278 [DEBUG] [Thread-22236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:28:25.278 [DEBUG] [Thread-22236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:28:25.278 [DEBUG] [Thread-22236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:28:25.278 [DEBUG] [Thread-22236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:28:25.293 [INFO] [Thread-22236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:28:25.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:28:25.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:28:26.152 [DEBUG] [Thread-22236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:28:26.153 [DEBUG] [Thread-22236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:28:26.200 [DEBUG] [Thread-22236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:28:26.200 [DEBUG] [Thread-22236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:28:26.208 [DEBUG] [Thread-22236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:28:26.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:28:26.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-11-12T20:28:26.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-11-12T20:28:26.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:28:26.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:28:26.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:28:26.241 [DEBUG] [Thread-22236] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:28:36.537 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:28:36.537 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:28:38.390 [DEBUG] [Thread-22238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:28:51.869 [DEBUG] [Thread-22239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:28:53.422 [DEBUG] [Thread-22240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:28:56.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:28:56.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:28:56.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-11-12T20:28:56.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 28, 29), 18.8, 28.68, 0.0, 21.56, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:28:56.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:28:29
2025-11-12T20:28:57.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:28:57.202 [DEBUG] [Thread-22241] [transport.py] [_log()] starting thread (client mode): 0x173bf610
2025-11-12T20:28:57.202 [DEBUG] [Thread-22241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:28:57.221 [DEBUG] [Thread-22241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:28:57.221 [INFO] [Thread-22241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:28:57.222 [DEBUG] [Thread-22241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] client lang: <none>
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] server lang: <none>
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] kex follows: False
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] Compression: none
2025-11-12T20:28:57.223 [DEBUG] [Thread-22241] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:28:57.230 [DEBUG] [Thread-22241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:28:57.230 [DEBUG] [Thread-22241] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:28:57.231 [DEBUG] [Thread-22241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:28:57.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:28:57.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:28:57.231 [DEBUG] [Thread-22241] [transport.py] [_log()] userauth is OK
2025-11-12T20:28:57.231 [DEBUG] [Thread-22241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:28:57.231 [DEBUG] [Thread-22241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:28:57.232 [DEBUG] [Thread-22241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:28:57.232 [DEBUG] [Thread-22241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:28:57.242 [INFO] [Thread-22241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:28:57.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:28:57.892 [DEBUG] [Thread-22241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:28:57.892 [DEBUG] [Thread-22241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:28:57.892 [DEBUG] [Thread-22241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:28:57.933 [DEBUG] [Thread-22241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:28:57.933 [DEBUG] [Thread-22241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:28:57.935 [DEBUG] [Thread-22241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:28:57.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:28:57.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:28:57.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:28:57.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:28:57.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:28:57.953 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:28:57.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:28:57.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:28:57.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:28:57.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.769529 -999.00  +19.90  11.97     34   +3.70 1 2 1 1 1     0    0 14.37 -75.76 Z.ESw 15.0 12.0 252.0 19.9 20.5 -21.8 20.4 -20.7 20.1 -20.5 20.4 -20.9
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.769529
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:28:57.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:28:29', tmtdew=18.8, humidity=28.68, cloud=0.0, wind=21.56, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:28:30', seeing=0.76, atlas_timestamp='2025-11-12T18:28:07.306', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:28:00')
2025-11-12T20:28:57.955 [DEBUG] [Thread-22241] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:28:58.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:28:58.038 [DEBUG] [Thread-22244] [transport.py] [_log()] starting thread (client mode): 0x14944a30
2025-11-12T20:28:58.038 [DEBUG] [Thread-22244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:28:58.053 [DEBUG] [Thread-22244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:28:58.053 [INFO] [Thread-22244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:28:58.060 [DEBUG] [Thread-22244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] client lang: <none>
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] server lang: <none>
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] kex follows: False
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] Compression: none
2025-11-12T20:28:58.061 [DEBUG] [Thread-22244] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:28:58.116 [DEBUG] [Thread-22244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:28:58.116 [DEBUG] [Thread-22244] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:28:58.116 [DEBUG] [Thread-22244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:28:58.116 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:28:58.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:28:58.177 [DEBUG] [Thread-22244] [transport.py] [_log()] userauth is OK
2025-11-12T20:28:58.177 [DEBUG] [Thread-22244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:28:58.177 [DEBUG] [Thread-22244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:28:58.177 [DEBUG] [Thread-22244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:28:58.177 [DEBUG] [Thread-22244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:28:58.193 [INFO] [Thread-22244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:28:58.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:28:58.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:28:59.081 [DEBUG] [Thread-22244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:28:59.081 [DEBUG] [Thread-22244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:28:59.129 [DEBUG] [Thread-22244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:28:59.129 [DEBUG] [Thread-22244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:28:59.137 [DEBUG] [Thread-22244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:28:59.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:28:59.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:28:59.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:28:59.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:28:59.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:28:59.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:28:59.168 [DEBUG] [Thread-22244] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:29:08.445 [DEBUG] [Thread-22246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:29:23.478 [DEBUG] [Thread-22247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:29:29.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:29:29.191 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:29:29.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-11-12T20:29:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 29, 1), 18.77, 28.73, 0.0, 21.86, 19.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:29:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:29:01
2025-11-12T20:29:29.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:29:30.099 [DEBUG] [Thread-22248] [transport.py] [_log()] starting thread (client mode): 0x1739aa70
2025-11-12T20:29:30.099 [DEBUG] [Thread-22248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:29:30.119 [DEBUG] [Thread-22248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:29:30.119 [INFO] [Thread-22248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] client lang: <none>
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] server lang: <none>
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] kex follows: False
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] Compression: none
2025-11-12T20:29:30.122 [DEBUG] [Thread-22248] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:29:30.138 [DEBUG] [Thread-22248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:29:30.138 [DEBUG] [Thread-22248] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:29:30.139 [DEBUG] [Thread-22248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:29:30.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:29:30.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:29:30.139 [DEBUG] [Thread-22248] [transport.py] [_log()] userauth is OK
2025-11-12T20:29:30.139 [DEBUG] [Thread-22248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:29:30.139 [DEBUG] [Thread-22248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:29:30.139 [DEBUG] [Thread-22248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:29:30.139 [DEBUG] [Thread-22248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:29:30.149 [INFO] [Thread-22248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:29:30.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:29:30.777 [DEBUG] [Thread-22248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:29:30.777 [DEBUG] [Thread-22248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:29:30.777 [DEBUG] [Thread-22248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:29:30.818 [DEBUG] [Thread-22248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:29:30.818 [DEBUG] [Thread-22248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:29:30.821 [DEBUG] [Thread-22248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:29:30.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:29:30.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:29:30.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:29:30.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:29:30.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:29:30.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:29:30.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:29:30.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:29:30.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.770223 -999.00  +19.90  12.38     34   +3.70 1 2 1 1 1     0    0 14.67 -72.48 Z.eSW 17.6 12.4 262.2 19.9 20.5 -21.9 20.4 -20.8 20.1 -20.5 20.3 -21.1
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.770223
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:29:30.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:29:01', tmtdew=18.77, humidity=28.73, cloud=0.0, wind=21.86, temperature=19.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:29:02', seeing=0.76, atlas_timestamp='2025-11-12T18:29:07.267', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:28:00')
2025-11-12T20:29:30.839 [DEBUG] [Thread-22248] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:29:30.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:29:30.925 [DEBUG] [Thread-22251] [transport.py] [_log()] starting thread (client mode): 0x149aa6b0
2025-11-12T20:29:30.925 [DEBUG] [Thread-22251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:29:30.940 [DEBUG] [Thread-22251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:29:30.940 [INFO] [Thread-22251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] client lang: <none>
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] server lang: <none>
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] kex follows: False
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] Compression: none
2025-11-12T20:29:30.948 [DEBUG] [Thread-22251] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:29:31.008 [DEBUG] [Thread-22251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:29:31.008 [DEBUG] [Thread-22251] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:29:31.008 [DEBUG] [Thread-22251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:29:31.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:29:31.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:29:31.065 [DEBUG] [Thread-22251] [transport.py] [_log()] userauth is OK
2025-11-12T20:29:31.065 [DEBUG] [Thread-22251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:29:31.065 [DEBUG] [Thread-22251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:29:31.065 [DEBUG] [Thread-22251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:29:31.066 [DEBUG] [Thread-22251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:29:31.079 [INFO] [Thread-22251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:29:31.080 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:29:31.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:29:31.903 [DEBUG] [Thread-22251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:29:31.903 [DEBUG] [Thread-22251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:29:31.951 [DEBUG] [Thread-22251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:29:31.951 [DEBUG] [Thread-22251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:29:31.959 [DEBUG] [Thread-22251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:29:31.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:29:31.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-11-12T20:29:31.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-11-12T20:29:31.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:29:31.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:29:31.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:29:31.991 [DEBUG] [Thread-22251] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:29:36.741 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:29:36.742 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:29:38.503 [DEBUG] [Thread-22253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:29:51.921 [DEBUG] [Thread-22254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:29:53.536 [DEBUG] [Thread-22255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:30:02.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:30:02.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:30:02.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-11-12T20:30:02.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 29, 33), 18.82, 28.49, 0.0, 24.1, 20.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:30:02.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:29:33
2025-11-12T20:30:02.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:30:02.992 [DEBUG] [Thread-22256] [transport.py] [_log()] starting thread (client mode): 0x173bf190
2025-11-12T20:30:02.992 [DEBUG] [Thread-22256] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:30:03.004 [DEBUG] [Thread-22256] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:30:03.004 [INFO] [Thread-22256] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:30:03.005 [DEBUG] [Thread-22256] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:30:03.005 [DEBUG] [Thread-22256] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:30:03.005 [DEBUG] [Thread-22256] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:30:03.005 [DEBUG] [Thread-22256] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] client lang: <none>
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] server lang: <none>
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] kex follows: False
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] Compression: none
2025-11-12T20:30:03.006 [DEBUG] [Thread-22256] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:30:03.014 [DEBUG] [Thread-22256] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:30:03.014 [DEBUG] [Thread-22256] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:30:03.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:30:03.014 [DEBUG] [Thread-22256] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:30:03.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:30:03.015 [DEBUG] [Thread-22256] [transport.py] [_log()] userauth is OK
2025-11-12T20:30:03.015 [DEBUG] [Thread-22256] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:30:03.015 [DEBUG] [Thread-22256] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:30:03.015 [DEBUG] [Thread-22256] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:30:03.015 [DEBUG] [Thread-22256] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:30:03.026 [INFO] [Thread-22256] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:30:03.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:30:04.428 [DEBUG] [Thread-22256] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:30:04.428 [DEBUG] [Thread-22256] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:30:04.429 [DEBUG] [Thread-22256] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:30:04.469 [DEBUG] [Thread-22256] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:30:04.469 [DEBUG] [Thread-22256] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:30:04.471 [DEBUG] [Thread-22256] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:30:04.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:30:04.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:30:04.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:30:04.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:30:04.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:30:04.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:30:04.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.770571 -999.00  +19.90  15.85     34   +3.70 1 2 1 1 1     0    0 14.34 -72.68 Z.eSW 16.8 15.8 256.4 25.9 20.4 -21.8 20.3 -20.8 20.1 -20.5 20.3 -21.0
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.770571
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:30:04.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:29:33', tmtdew=18.82, humidity=28.49, cloud=0.0, wind=24.1, temperature=20.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:29:34', seeing=0.7, atlas_timestamp='2025-11-12T18:29:37.334', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:28:00')
2025-11-12T20:30:04.570 [DEBUG] [Thread-22256] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:30:04.641 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:30:04.652 [DEBUG] [Thread-22259] [transport.py] [_log()] starting thread (client mode): 0x14923f70
2025-11-12T20:30:04.652 [DEBUG] [Thread-22259] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:30:04.666 [DEBUG] [Thread-22259] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:30:04.666 [INFO] [Thread-22259] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:30:04.673 [DEBUG] [Thread-22259] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:30:04.673 [DEBUG] [Thread-22259] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] client lang: <none>
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] server lang: <none>
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] kex follows: False
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] Compression: none
2025-11-12T20:30:04.674 [DEBUG] [Thread-22259] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:30:04.732 [DEBUG] [Thread-22259] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:30:04.732 [DEBUG] [Thread-22259] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:30:04.732 [DEBUG] [Thread-22259] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:30:04.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:30:04.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:30:04.789 [DEBUG] [Thread-22259] [transport.py] [_log()] userauth is OK
2025-11-12T20:30:04.789 [DEBUG] [Thread-22259] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:30:04.790 [DEBUG] [Thread-22259] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:30:04.790 [DEBUG] [Thread-22259] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:30:04.790 [DEBUG] [Thread-22259] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:30:04.803 [INFO] [Thread-22259] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:30:04.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:30:04.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:30:05.668 [DEBUG] [Thread-22259] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:30:05.668 [DEBUG] [Thread-22259] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:30:05.716 [DEBUG] [Thread-22259] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:30:05.716 [DEBUG] [Thread-22259] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:30:05.724 [DEBUG] [Thread-22259] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:30:05.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:30:05.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-11-12T20:30:05.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:30:05.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:30:05.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:30:05.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:30:05.755 [DEBUG] [Thread-22259] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:30:08.560 [DEBUG] [Thread-22261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:30:23.594 [DEBUG] [Thread-22262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:30:35.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:30:35.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:30:35.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-11-12T20:30:36.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 30, 5), 18.72, 28.73, 0.0, 18.33, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:30:36.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:30:05
2025-11-12T20:30:36.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:30:36.678 [DEBUG] [Thread-22263] [transport.py] [_log()] starting thread (client mode): 0x17399d50
2025-11-12T20:30:36.678 [DEBUG] [Thread-22263] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:30:36.697 [DEBUG] [Thread-22263] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:30:36.697 [INFO] [Thread-22263] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] client lang: <none>
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] server lang: <none>
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] kex follows: False
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] Compression: none
2025-11-12T20:30:36.701 [DEBUG] [Thread-22263] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:30:36.716 [DEBUG] [Thread-22263] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:30:36.716 [DEBUG] [Thread-22263] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:30:36.716 [DEBUG] [Thread-22263] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:30:36.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:30:36.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:30:36.717 [DEBUG] [Thread-22263] [transport.py] [_log()] userauth is OK
2025-11-12T20:30:36.717 [DEBUG] [Thread-22263] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:30:36.717 [DEBUG] [Thread-22263] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:30:36.717 [DEBUG] [Thread-22263] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:30:36.717 [DEBUG] [Thread-22263] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:30:36.726 [INFO] [Thread-22263] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:30:36.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:30:36.946 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:30:36.947 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:30:37.324 [DEBUG] [Thread-22263] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:30:37.324 [DEBUG] [Thread-22263] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:30:37.324 [DEBUG] [Thread-22263] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:30:37.365 [DEBUG] [Thread-22263] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:30:37.365 [DEBUG] [Thread-22263] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:30:37.368 [DEBUG] [Thread-22263] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:30:37.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:30:37.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:30:37.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:30:37.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:30:37.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:30:37.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:30:37.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.770917 -999.00  +19.80  11.76     34   +3.70 1 2 1 1 1     0    0 14.72 -67.83 Z.eSW 15.7 11.8 252.6 19.6 20.4 -21.9 20.3 -20.9 20.1 -20.4 20.3 -21.1
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.770917
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:30:37.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:30:05', tmtdew=18.72, humidity=28.73, cloud=0.0, wind=18.33, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:30:06', seeing=0.7, atlas_timestamp='2025-11-12T18:30:07.229', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:28:00')
2025-11-12T20:30:37.389 [DEBUG] [Thread-22263] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:30:37.460 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:30:37.472 [DEBUG] [Thread-22266] [transport.py] [_log()] starting thread (client mode): 0x149467d0
2025-11-12T20:30:37.472 [DEBUG] [Thread-22266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:30:37.488 [DEBUG] [Thread-22266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:30:37.488 [INFO] [Thread-22266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:30:37.495 [DEBUG] [Thread-22266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:30:37.495 [DEBUG] [Thread-22266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:30:37.495 [DEBUG] [Thread-22266] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:30:37.495 [DEBUG] [Thread-22266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] client lang: <none>
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] server lang: <none>
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] kex follows: False
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] Compression: none
2025-11-12T20:30:37.496 [DEBUG] [Thread-22266] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:30:37.552 [DEBUG] [Thread-22266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:30:37.552 [DEBUG] [Thread-22266] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:30:37.553 [DEBUG] [Thread-22266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:30:37.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:30:37.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:30:37.609 [DEBUG] [Thread-22266] [transport.py] [_log()] userauth is OK
2025-11-12T20:30:37.609 [DEBUG] [Thread-22266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:30:37.609 [DEBUG] [Thread-22266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:30:37.609 [DEBUG] [Thread-22266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:30:37.609 [DEBUG] [Thread-22266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:30:37.624 [INFO] [Thread-22266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:30:37.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:30:37.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:30:38.477 [DEBUG] [Thread-22266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:30:38.477 [DEBUG] [Thread-22266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:30:38.525 [DEBUG] [Thread-22266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:30:38.525 [DEBUG] [Thread-22266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:30:38.533 [DEBUG] [Thread-22266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:30:38.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:30:38.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-11-12T20:30:38.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-11-12T20:30:38.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:30:38.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:30:38.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:30:38.565 [DEBUG] [Thread-22266] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:30:38.618 [DEBUG] [Thread-22268 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:30:51.974 [DEBUG] [Thread-22269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:30:53.655 [DEBUG] [Thread-22270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:31:08.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:31:08.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:31:08.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-11-12T20:31:08.687 [DEBUG] [Thread-22271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:31:09.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 30, 37), 18.7, 28.76, 0.0, 19.57, 19.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:31:09.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:30:37
2025-11-12T20:31:09.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:31:09.495 [DEBUG] [Thread-22272] [transport.py] [_log()] starting thread (client mode): 0x149a9a50
2025-11-12T20:31:09.495 [DEBUG] [Thread-22272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:31:09.515 [DEBUG] [Thread-22272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:31:09.515 [INFO] [Thread-22272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:31:09.518 [DEBUG] [Thread-22272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] client lang: <none>
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] server lang: <none>
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] kex follows: False
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] Compression: none
2025-11-12T20:31:09.519 [DEBUG] [Thread-22272] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:31:09.535 [DEBUG] [Thread-22272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:31:09.535 [DEBUG] [Thread-22272] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:31:09.535 [DEBUG] [Thread-22272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:31:09.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:31:09.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:31:09.580 [DEBUG] [Thread-22272] [transport.py] [_log()] userauth is OK
2025-11-12T20:31:09.580 [DEBUG] [Thread-22272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:31:09.580 [DEBUG] [Thread-22272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:31:09.580 [DEBUG] [Thread-22272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:31:09.580 [DEBUG] [Thread-22272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:31:09.595 [INFO] [Thread-22272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:31:09.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:31:10.240 [DEBUG] [Thread-22272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:31:10.240 [DEBUG] [Thread-22272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:31:10.240 [DEBUG] [Thread-22272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:31:10.281 [DEBUG] [Thread-22272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:31:10.281 [DEBUG] [Thread-22272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:31:10.283 [DEBUG] [Thread-22272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:31:10.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:31:10.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:31:10.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:31:10.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:31:10.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:31:10.298 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:31:10.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.771265 -999.00  +19.80  10.81     34   +3.70 1 2 1 1 1     0    0 14.71 -66.78 Z.eSW 11.6 10.8 269.0 19.2 20.4 -21.8 20.3 -20.8 20.0 -20.6 20.3 -21.0
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.771265
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:31:10.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:30:37', tmtdew=18.7, humidity=28.76, cloud=0.0, wind=19.57, temperature=19.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:30:38', seeing=0.74, atlas_timestamp='2025-11-12T18:30:37.296', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:28:00')
2025-11-12T20:31:10.298 [DEBUG] [Thread-22272] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:31:10.374 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:31:10.384 [DEBUG] [Thread-22275] [transport.py] [_log()] starting thread (client mode): 0x17399bd0
2025-11-12T20:31:10.385 [DEBUG] [Thread-22275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:31:10.399 [DEBUG] [Thread-22275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:31:10.399 [INFO] [Thread-22275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] client lang: <none>
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] server lang: <none>
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] kex follows: False
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:31:10.407 [DEBUG] [Thread-22275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:31:10.408 [DEBUG] [Thread-22275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:31:10.408 [DEBUG] [Thread-22275] [transport.py] [_log()] Compression: none
2025-11-12T20:31:10.408 [DEBUG] [Thread-22275] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:31:10.464 [DEBUG] [Thread-22275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:31:10.465 [DEBUG] [Thread-22275] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:31:10.465 [DEBUG] [Thread-22275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:31:10.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:31:10.465 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:31:10.521 [DEBUG] [Thread-22275] [transport.py] [_log()] userauth is OK
2025-11-12T20:31:10.521 [DEBUG] [Thread-22275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:31:10.521 [DEBUG] [Thread-22275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:31:10.522 [DEBUG] [Thread-22275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:31:10.522 [DEBUG] [Thread-22275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:31:10.537 [INFO] [Thread-22275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:31:10.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:31:10.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:31:11.354 [DEBUG] [Thread-22275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:31:11.354 [DEBUG] [Thread-22275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:31:11.402 [DEBUG] [Thread-22275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:31:11.402 [DEBUG] [Thread-22275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:31:11.410 [DEBUG] [Thread-22275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:31:11.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:31:11.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-11-12T20:31:11.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-11-12T20:31:11.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:31:11.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:31:11.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:31:11.442 [DEBUG] [Thread-22275] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:31:23.714 [DEBUG] [Thread-22277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:31:37.152 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:31:37.153 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:31:38.757 [DEBUG] [Thread-22278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:31:41.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:31:41.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:31:41.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-11-12T20:31:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 31, 9), 18.7, 28.76, 0.0, 20.45, 19.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:31:42.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:31:09
2025-11-12T20:31:42.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:31:42.367 [DEBUG] [Thread-22279] [transport.py] [_log()] starting thread (client mode): 0x11f01db0
2025-11-12T20:31:42.367 [DEBUG] [Thread-22279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:31:42.387 [DEBUG] [Thread-22279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:31:42.387 [INFO] [Thread-22279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] client lang: <none>
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] server lang: <none>
2025-11-12T20:31:42.390 [DEBUG] [Thread-22279] [transport.py] [_log()] kex follows: False
2025-11-12T20:31:42.391 [DEBUG] [Thread-22279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:31:42.391 [DEBUG] [Thread-22279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:31:42.391 [DEBUG] [Thread-22279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:31:42.391 [DEBUG] [Thread-22279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:31:42.391 [DEBUG] [Thread-22279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:31:42.391 [DEBUG] [Thread-22279] [transport.py] [_log()] Compression: none
2025-11-12T20:31:42.391 [DEBUG] [Thread-22279] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:31:42.398 [DEBUG] [Thread-22279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:31:42.398 [DEBUG] [Thread-22279] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:31:42.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:31:42.398 [DEBUG] [Thread-22279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:31:42.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:31:42.399 [DEBUG] [Thread-22279] [transport.py] [_log()] userauth is OK
2025-11-12T20:31:42.399 [DEBUG] [Thread-22279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:31:42.399 [DEBUG] [Thread-22279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:31:42.399 [DEBUG] [Thread-22279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:31:42.399 [DEBUG] [Thread-22279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:31:42.409 [INFO] [Thread-22279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:31:42.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:31:43.060 [DEBUG] [Thread-22279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:31:43.060 [DEBUG] [Thread-22279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:31:43.060 [DEBUG] [Thread-22279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:31:43.101 [DEBUG] [Thread-22279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:31:43.101 [DEBUG] [Thread-22279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:31:43.103 [DEBUG] [Thread-22279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:31:43.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:31:43.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:31:43.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:31:43.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:31:43.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:31:43.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:31:43.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:31:43.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:31:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:31:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.771612 -999.00  +19.80   9.94     34   +3.70 1 2 1 1 1     0    0 14.67 -62.68 Z.eSw 12.5 9.9 262.4 16.6 20.4 -21.9 20.3 -20.8 20.0 -20.6 20.3 -21.0
2025-11-12T20:31:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:31:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:31:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.771612
2025-11-12T20:31:43.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:31:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:31:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:31:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:31:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:31:43.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:31:09', tmtdew=18.7, humidity=28.76, cloud=0.0, wind=20.45, temperature=19.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:31:10', seeing=0.82, atlas_timestamp='2025-11-12T18:31:07.277', atlas_cloud=2, atlas_rain=1, zp_data=[1.0947499999999994, 1.2857500000000002, 1.1537500000000005, 1.0294999999999996, 1.1110000000000007, 0.8757500000000009, 0.6434999999999995, 0.7877500000000008, 1.301499999999999, 1.795, 1.6382499999999993, 1.4269999999999996, 1.6519999999999992, 1.4722499999999998, 1.3899999999999997, 1.081999999999999, 1.3257500000000002, nan, nan, 1.7627499999999987, 1.7364999999999986, nan, nan, 1.1507500000000004, 1.5204999999999993, nan, nan, nan, 2.4825, nan, nan, nan, nan], zp_timestamp='2025-11-12T18:28:00')
2025-11-12T20:31:43.115 [DEBUG] [Thread-22279] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:31:43.189 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:31:43.200 [DEBUG] [Thread-22282] [transport.py] [_log()] starting thread (client mode): 0x11f003d0
2025-11-12T20:31:43.200 [DEBUG] [Thread-22282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:31:43.214 [DEBUG] [Thread-22282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:31:43.214 [INFO] [Thread-22282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] client lang: <none>
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] server lang: <none>
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] kex follows: False
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] Compression: none
2025-11-12T20:31:43.222 [DEBUG] [Thread-22282] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:31:43.280 [DEBUG] [Thread-22282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:31:43.280 [DEBUG] [Thread-22282] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:31:43.280 [DEBUG] [Thread-22282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:31:43.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:31:43.280 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:31:43.337 [DEBUG] [Thread-22282] [transport.py] [_log()] userauth is OK
2025-11-12T20:31:43.337 [DEBUG] [Thread-22282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:31:43.337 [DEBUG] [Thread-22282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:31:43.337 [DEBUG] [Thread-22282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:31:43.337 [DEBUG] [Thread-22282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:31:43.351 [INFO] [Thread-22282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:31:43.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:31:43.351 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:31:44.201 [DEBUG] [Thread-22282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:31:44.201 [DEBUG] [Thread-22282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:31:44.249 [DEBUG] [Thread-22282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:31:44.250 [DEBUG] [Thread-22282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:31:44.258 [DEBUG] [Thread-22282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:31:44.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:31:44.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-11-12T20:31: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-11-12T20:31:44.281 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:31:44.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:31:44.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:31:44.289 [DEBUG] [Thread-22282] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:31:52.043 [DEBUG] [Thread-22284 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:31:53.779 [DEBUG] [Thread-22285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:32:08.811 [DEBUG] [Thread-22286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:32:14.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:32:14.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:32:14.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-11-12T20:32:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 31, 41), 18.59, 28.78, 0.0, 17.03, 19.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:32:15.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:31:41
2025-11-12T20:32:15.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:32:15.299 [DEBUG] [Thread-22287] [transport.py] [_log()] starting thread (client mode): 0x17398a30
2025-11-12T20:32:15.299 [DEBUG] [Thread-22287] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:32:15.319 [DEBUG] [Thread-22287] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:32:15.319 [INFO] [Thread-22287] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] client lang: <none>
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] server lang: <none>
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] kex follows: False
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] Compression: none
2025-11-12T20:32:15.323 [DEBUG] [Thread-22287] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:32:15.341 [DEBUG] [Thread-22287] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:32:15.341 [DEBUG] [Thread-22287] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:32:15.342 [DEBUG] [Thread-22287] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:32:15.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:32:15.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:32:15.384 [DEBUG] [Thread-22287] [transport.py] [_log()] userauth is OK
2025-11-12T20:32:15.384 [DEBUG] [Thread-22287] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:32:15.384 [DEBUG] [Thread-22287] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:32:15.384 [DEBUG] [Thread-22287] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:32:15.384 [DEBUG] [Thread-22287] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:32:15.399 [INFO] [Thread-22287] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:32:15.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:32:15.992 [DEBUG] [Thread-22287] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:32:15.993 [DEBUG] [Thread-22287] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:32:15.993 [DEBUG] [Thread-22287] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:32:16.034 [DEBUG] [Thread-22287] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:32:16.034 [DEBUG] [Thread-22287] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:32:16.036 [DEBUG] [Thread-22287] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:32:16.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:32:16.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:32:16.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:32:16.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:32:16.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:32:16.048 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:32:16.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.771959 -999.00  +19.80  11.10     34   +3.70 1 2 1 1 1     0    0 14.39 -59.72 Z.eSw 9.9 11.1 251.6 16.1 20.4 -21.9 20.3 -20.8 20.0 -20.5 20.3 -20.9
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.771959
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:32:16.048 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:31:41', tmtdew=18.59, humidity=28.78, cloud=0.0, wind=17.03, temperature=19.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:32:14', seeing=0.81, atlas_timestamp='2025-11-12T18:31:37.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:31:00')
2025-11-12T20:32:16.049 [DEBUG] [Thread-22287] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:32:16.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:32:16.134 [DEBUG] [Thread-22290] [transport.py] [_log()] starting thread (client mode): 0x1739ace0
2025-11-12T20:32:16.134 [DEBUG] [Thread-22290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:32:16.147 [DEBUG] [Thread-22290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:32:16.147 [INFO] [Thread-22290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] client lang: <none>
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] server lang: <none>
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] kex follows: False
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] Compression: none
2025-11-12T20:32:16.155 [DEBUG] [Thread-22290] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:32:16.212 [DEBUG] [Thread-22290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:32:16.212 [DEBUG] [Thread-22290] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:32:16.212 [DEBUG] [Thread-22290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:32:16.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:32:16.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:32:16.269 [DEBUG] [Thread-22290] [transport.py] [_log()] userauth is OK
2025-11-12T20:32:16.269 [DEBUG] [Thread-22290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:32:16.269 [DEBUG] [Thread-22290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:32:16.269 [DEBUG] [Thread-22290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:32:16.269 [DEBUG] [Thread-22290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:32:16.283 [INFO] [Thread-22290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:32:16.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:32:16.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:32:17.111 [DEBUG] [Thread-22290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:32:17.111 [DEBUG] [Thread-22290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:32:17.159 [DEBUG] [Thread-22290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:32:17.159 [DEBUG] [Thread-22290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:32:17.167 [DEBUG] [Thread-22290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:32:17.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:32:17.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-11-12T20:32:17.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-11-12T20:32:17.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:32:17.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:32:17.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:32:17.198 [DEBUG] [Thread-22290] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:32:23.837 [DEBUG] [Thread-22292 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:32:37.357 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:32:37.358 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:32:38.873 [DEBUG] [Thread-22293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:32:47.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:32:47.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:32:47.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:32:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 32, 13), 18.57, 28.83, 0.0, 18.88, 19.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:32:47.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:32:13
2025-11-12T20:32:48.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:32:48.173 [DEBUG] [Thread-22294] [transport.py] [_log()] starting thread (client mode): 0x11f00670
2025-11-12T20:32:48.173 [DEBUG] [Thread-22294] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:32:48.184 [DEBUG] [Thread-22294] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:32:48.184 [INFO] [Thread-22294] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] client lang: <none>
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] server lang: <none>
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] kex follows: False
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:32:48.187 [DEBUG] [Thread-22294] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:32:48.188 [DEBUG] [Thread-22294] [transport.py] [_log()] Compression: none
2025-11-12T20:32:48.188 [DEBUG] [Thread-22294] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:32:48.204 [DEBUG] [Thread-22294] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:32:48.204 [DEBUG] [Thread-22294] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:32:48.204 [DEBUG] [Thread-22294] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:32:48.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:32:48.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:32:48.205 [DEBUG] [Thread-22294] [transport.py] [_log()] userauth is OK
2025-11-12T20:32:48.205 [DEBUG] [Thread-22294] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:32:48.205 [DEBUG] [Thread-22294] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:32:48.205 [DEBUG] [Thread-22294] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:32:48.205 [DEBUG] [Thread-22294] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:32:48.217 [INFO] [Thread-22294] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:32:48.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:32:48.821 [DEBUG] [Thread-22294] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:32:48.822 [DEBUG] [Thread-22294] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:32:48.822 [DEBUG] [Thread-22294] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:32:48.862 [DEBUG] [Thread-22294] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:32:48.862 [DEBUG] [Thread-22294] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:32:48.864 [DEBUG] [Thread-22294] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:32:48.876 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:32:48.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:32:48.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:32:48.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:32:48.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:32:48.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:32:48.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:32:48.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:32:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:32:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.772654 -999.00  +19.80  14.57     34   +3.70 1 2 1 1 1     0    0 14.84 -52.92 Z.eSW 12.5 14.6 261.6 25.2 20.4 -21.9 20.3 -20.8 20.0 -20.7 20.2 -20.9
2025-11-12T20:32:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:32:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:32:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.772654
2025-11-12T20:32:48.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:32:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:32:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:32:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:32:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:32:48.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:32:13', tmtdew=18.57, humidity=28.83, cloud=0.0, wind=18.88, temperature=19.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:32:46', seeing=0.76, atlas_timestamp='2025-11-12T18:32:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:31:00')
2025-11-12T20:32:48.882 [DEBUG] [Thread-22294] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:32:48.954 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:32:48.966 [DEBUG] [Thread-22297] [transport.py] [_log()] starting thread (client mode): 0x11f00d90
2025-11-12T20:32:48.966 [DEBUG] [Thread-22297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:32:48.981 [DEBUG] [Thread-22297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:32:48.981 [INFO] [Thread-22297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] client lang: <none>
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] server lang: <none>
2025-11-12T20:32:48.992 [DEBUG] [Thread-22297] [transport.py] [_log()] kex follows: False
2025-11-12T20:32:48.993 [DEBUG] [Thread-22297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:32:48.993 [DEBUG] [Thread-22297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:32:48.993 [DEBUG] [Thread-22297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:32:48.993 [DEBUG] [Thread-22297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:32:48.993 [DEBUG] [Thread-22297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:32:48.993 [DEBUG] [Thread-22297] [transport.py] [_log()] Compression: none
2025-11-12T20:32:48.993 [DEBUG] [Thread-22297] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:32:49.048 [DEBUG] [Thread-22297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:32:49.048 [DEBUG] [Thread-22297] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:32:49.049 [DEBUG] [Thread-22297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:32:49.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:32:49.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:32:49.105 [DEBUG] [Thread-22297] [transport.py] [_log()] userauth is OK
2025-11-12T20:32:49.105 [DEBUG] [Thread-22297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:32:49.105 [DEBUG] [Thread-22297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:32:49.106 [DEBUG] [Thread-22297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:32:49.106 [DEBUG] [Thread-22297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:32:49.121 [INFO] [Thread-22297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:32:49.121 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:32:49.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:32:49.916 [DEBUG] [Thread-22297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:32:49.916 [DEBUG] [Thread-22297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:32:49.966 [DEBUG] [Thread-22297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:32:49.966 [DEBUG] [Thread-22297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:32:49.975 [DEBUG] [Thread-22297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:32:49.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:32:49.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-11-12T20:32:49.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-11-12T20:32:49.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:32:49.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:32:49.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:32:50.007 [DEBUG] [Thread-22297] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:32:52.095 [DEBUG] [Thread-22299 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:32:53.899 [DEBUG] [Thread-22300 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:33:08.931 [DEBUG] [Thread-22301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:33:20.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:33:20.028 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:33:20.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-11-12T20:33:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 32, 45), 18.55, 28.86, 0.0, 17.5, 19.74, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:33:20.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:32:45
2025-11-12T20:33:20.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:33:20.986 [DEBUG] [Thread-22302] [transport.py] [_log()] starting thread (client mode): 0x11f02500
2025-11-12T20:33:20.986 [DEBUG] [Thread-22302] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:33:21.006 [DEBUG] [Thread-22302] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:33:21.006 [INFO] [Thread-22302] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] client lang: <none>
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] server lang: <none>
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] kex follows: False
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] Compression: none
2025-11-12T20:33:21.010 [DEBUG] [Thread-22302] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:33:21.026 [DEBUG] [Thread-22302] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:33:21.026 [DEBUG] [Thread-22302] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:33:21.027 [DEBUG] [Thread-22302] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:33:21.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:33:21.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:33:21.028 [DEBUG] [Thread-22302] [transport.py] [_log()] userauth is OK
2025-11-12T20:33:21.028 [DEBUG] [Thread-22302] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:33:21.028 [DEBUG] [Thread-22302] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:33:21.028 [DEBUG] [Thread-22302] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:33:21.028 [DEBUG] [Thread-22302] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:33:21.038 [INFO] [Thread-22302] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:33:21.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:33:21.694 [DEBUG] [Thread-22302] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:33:21.695 [DEBUG] [Thread-22302] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:33:21.695 [DEBUG] [Thread-22302] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:33:21.735 [DEBUG] [Thread-22302] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:33:21.735 [DEBUG] [Thread-22302] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:33:21.737 [DEBUG] [Thread-22302] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:33:21.749 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:33:21.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:33:21.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:33:21.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:33:21.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:33:21.757 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:33:21.757 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.773001 -999.00  +19.80  16.09     34   +3.70 1 2 1 1 1     0    0 14.90 -52.60 Z.eSW 11.9 16.1 254.0 18.0 20.4 -21.8 20.3 -20.8 20.0 -20.5 20.2 -21.0
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.773001
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:33:21.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:32:45', tmtdew=18.55, humidity=28.86, cloud=0.0, wind=17.5, temperature=19.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:33:18', seeing=0.76, atlas_timestamp='2025-11-12T18:33:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:31:00')
2025-11-12T20:33:21.758 [DEBUG] [Thread-22302] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:33:21.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:33:21.841 [DEBUG] [Thread-22305] [transport.py] [_log()] starting thread (client mode): 0x11f02890
2025-11-12T20:33:21.841 [DEBUG] [Thread-22305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:33:21.855 [DEBUG] [Thread-22305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:33:21.855 [INFO] [Thread-22305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] client lang: <none>
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] server lang: <none>
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] kex follows: False
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] Compression: none
2025-11-12T20:33:21.863 [DEBUG] [Thread-22305] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:33:21.920 [DEBUG] [Thread-22305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:33:21.920 [DEBUG] [Thread-22305] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:33:21.920 [DEBUG] [Thread-22305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:33:21.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:33:21.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:33:21.978 [DEBUG] [Thread-22305] [transport.py] [_log()] userauth is OK
2025-11-12T20:33:21.978 [DEBUG] [Thread-22305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:33:21.978 [DEBUG] [Thread-22305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:33:21.978 [DEBUG] [Thread-22305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:33:21.978 [DEBUG] [Thread-22305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:33:21.992 [INFO] [Thread-22305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:33:21.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:33:21.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:33:22.799 [DEBUG] [Thread-22305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:33:22.799 [DEBUG] [Thread-22305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:33:22.847 [DEBUG] [Thread-22305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:33:22.847 [DEBUG] [Thread-22305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:33:22.855 [DEBUG] [Thread-22305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:33:22.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:33:22.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:33:22.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-11-12T20:33:22.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:33:22.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:33:22.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:33:22.887 [DEBUG] [Thread-22305] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:33:23.953 [DEBUG] [Thread-22307 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:33:37.562 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:33:37.563 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:33:38.996 [DEBUG] [Thread-22308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:33:52.170 [DEBUG] [Thread-22309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:33:52.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:33:52.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:33:52.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-11-12T20:33:53.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 33, 50), 18.51, 28.84, 0.0, 18.44, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:33:53.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:33:50
2025-11-12T20:33:53.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:33:53.818 [DEBUG] [Thread-22310] [transport.py] [_log()] starting thread (client mode): 0x11f00820
2025-11-12T20:33:53.818 [DEBUG] [Thread-22310] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:33:53.838 [DEBUG] [Thread-22310] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:33:53.838 [INFO] [Thread-22310] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] client lang: <none>
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] server lang: <none>
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] kex follows: False
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] Compression: none
2025-11-12T20:33:53.841 [DEBUG] [Thread-22310] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:33:53.858 [DEBUG] [Thread-22310] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:33:53.858 [DEBUG] [Thread-22310] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:33:53.858 [DEBUG] [Thread-22310] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:33:53.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:33:53.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:33:53.859 [DEBUG] [Thread-22310] [transport.py] [_log()] userauth is OK
2025-11-12T20:33:53.859 [DEBUG] [Thread-22310] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:33:53.859 [DEBUG] [Thread-22310] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:33:53.859 [DEBUG] [Thread-22310] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:33:53.859 [DEBUG] [Thread-22310] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:33:53.868 [INFO] [Thread-22310] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:33:53.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:33:54.022 [DEBUG] [Thread-22312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:33:54.451 [DEBUG] [Thread-22310] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:33:54.451 [DEBUG] [Thread-22310] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:33:54.451 [DEBUG] [Thread-22310] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:33:54.492 [DEBUG] [Thread-22310] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:33:54.492 [DEBUG] [Thread-22310] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:33:54.494 [DEBUG] [Thread-22310] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:33:54.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:33:54.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:33:54.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:33:54.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:33:54.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:33:54.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:33:54.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.773348 -999.00  +19.80  17.70     34   +3.80 1 2 1 1 1     0    0 15.03 -51.78 Z.eSW 17.6 17.7 260.8 20.5 20.3 -21.8 20.3 -20.8 20.0 -20.5 20.2 -20.9
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.773348
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:33:54.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:33:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:33:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:33:54.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:33:50', tmtdew=18.51, humidity=28.84, cloud=0.0, wind=18.44, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:33:50', seeing=0.7, atlas_timestamp='2025-11-12T18:33:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:31:00')
2025-11-12T20:33:54.513 [DEBUG] [Thread-22310] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:33: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-11-12T20:33:54.596 [DEBUG] [Thread-22314] [transport.py] [_log()] starting thread (client mode): 0x11f03ca0
2025-11-12T20:33:54.596 [DEBUG] [Thread-22314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:33:54.610 [DEBUG] [Thread-22314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:33:54.610 [INFO] [Thread-22314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:33:54.617 [DEBUG] [Thread-22314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:33:54.617 [DEBUG] [Thread-22314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:33:54.617 [DEBUG] [Thread-22314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:33:54.617 [DEBUG] [Thread-22314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:33:54.617 [DEBUG] [Thread-22314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] client lang: <none>
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] server lang: <none>
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] kex follows: False
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] Compression: none
2025-11-12T20:33:54.618 [DEBUG] [Thread-22314] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:33:54.672 [DEBUG] [Thread-22314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:33:54.672 [DEBUG] [Thread-22314] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:33:54.672 [DEBUG] [Thread-22314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:33:54.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:33:54.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:33:54.729 [DEBUG] [Thread-22314] [transport.py] [_log()] userauth is OK
2025-11-12T20:33:54.729 [DEBUG] [Thread-22314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:33:54.729 [DEBUG] [Thread-22314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:33:54.729 [DEBUG] [Thread-22314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:33:54.729 [DEBUG] [Thread-22314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:33:54.747 [INFO] [Thread-22314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:33:54.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:33:54.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:33:55.545 [DEBUG] [Thread-22314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:33:55.546 [DEBUG] [Thread-22314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:33:55.593 [DEBUG] [Thread-22314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:33:55.593 [DEBUG] [Thread-22314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:33:55.601 [DEBUG] [Thread-22314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:33:55.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:33:55.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-11-12T20:33:55.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-11-12T20:33:55.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:33:55.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:33:55.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:33:55.632 [DEBUG] [Thread-22314] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:34:09.048 [DEBUG] [Thread-22316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:34:24.080 [DEBUG] [Thread-22317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:34:25.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:34:25.655 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:34: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-11-12T20:34:26.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 34, 22), 18.46, 28.94, 0.0, 19.69, 19.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:34:26.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:34:22
2025-11-12T20:34:26.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:34:26.571 [DEBUG] [Thread-22318] [transport.py] [_log()] starting thread (client mode): 0x11f00130
2025-11-12T20:34:26.571 [DEBUG] [Thread-22318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:34:26.587 [DEBUG] [Thread-22318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:34:26.587 [INFO] [Thread-22318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] client lang: <none>
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] server lang: <none>
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] kex follows: False
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] Compression: none
2025-11-12T20:34:26.590 [DEBUG] [Thread-22318] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:34:26.605 [DEBUG] [Thread-22318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:34:26.605 [DEBUG] [Thread-22318] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:34:26.605 [DEBUG] [Thread-22318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:34:26.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:34:26.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:34:26.606 [DEBUG] [Thread-22318] [transport.py] [_log()] userauth is OK
2025-11-12T20:34:26.606 [DEBUG] [Thread-22318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:34:26.606 [DEBUG] [Thread-22318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:34:26.606 [DEBUG] [Thread-22318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:34:26.606 [DEBUG] [Thread-22318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:34:26.619 [INFO] [Thread-22318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:34:26.619 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:34:27.229 [DEBUG] [Thread-22318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:34:27.229 [DEBUG] [Thread-22318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:34:27.229 [DEBUG] [Thread-22318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:34:27.270 [DEBUG] [Thread-22318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:34:27.270 [DEBUG] [Thread-22318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:34:27.272 [DEBUG] [Thread-22318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:34:27.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:34:27.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:34:27.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:34:27.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:34:27.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:34:27.288 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:34:27.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:34:27.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:34:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:34:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.773696 -999.00  +19.80  13.23     34   +3.70 1 2 1 1 1     0    0 15.09 -51.68 Z.ESW 11.8 13.2 262.3 23.1 20.3 -21.9 20.3 -20.9 20.0 -20.7 20.2 -21.0
2025-11-12T20:34:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:34:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:34:27.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.773696
2025-11-12T20:34:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:34:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:34:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:34:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:34:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:34:27.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:34:22', tmtdew=18.46, humidity=28.94, cloud=0.0, wind=19.69, temperature=19.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:34:22', seeing=0.7, atlas_timestamp='2025-11-12T18:34:07.334', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:31:00')
2025-11-12T20:34:27.289 [DEBUG] [Thread-22318] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:34:27.362 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:34:27.374 [DEBUG] [Thread-22321] [transport.py] [_log()] starting thread (client mode): 0x11f00e50
2025-11-12T20:34:27.374 [DEBUG] [Thread-22321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:34:27.388 [DEBUG] [Thread-22321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:34:27.388 [INFO] [Thread-22321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] client lang: <none>
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] server lang: <none>
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] kex follows: False
2025-11-12T20:34:27.395 [DEBUG] [Thread-22321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:34:27.396 [DEBUG] [Thread-22321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:34:27.396 [DEBUG] [Thread-22321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:34:27.396 [DEBUG] [Thread-22321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:34:27.396 [DEBUG] [Thread-22321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:34:27.396 [DEBUG] [Thread-22321] [transport.py] [_log()] Compression: none
2025-11-12T20:34:27.396 [DEBUG] [Thread-22321] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:34:27.453 [DEBUG] [Thread-22321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:34:27.453 [DEBUG] [Thread-22321] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:34:27.454 [DEBUG] [Thread-22321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:34:27.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:34:27.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:34:27.509 [DEBUG] [Thread-22321] [transport.py] [_log()] userauth is OK
2025-11-12T20:34:27.509 [DEBUG] [Thread-22321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:34:27.509 [DEBUG] [Thread-22321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:34:27.509 [DEBUG] [Thread-22321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:34:27.509 [DEBUG] [Thread-22321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:34:27.524 [INFO] [Thread-22321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:34:27.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:34:27.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:34:28.341 [DEBUG] [Thread-22321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:34:28.341 [DEBUG] [Thread-22321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:34:28.389 [DEBUG] [Thread-22321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:34:28.389 [DEBUG] [Thread-22321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:34:28.397 [DEBUG] [Thread-22321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:34:28.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:34:28.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-11-12T20:34:28.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-11-12T20:34:28.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:34:28.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:34:28.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:34:28.430 [DEBUG] [Thread-22321] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:34:37.780 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:34:37.781 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:34:39.103 [DEBUG] [Thread-22323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:34:52.224 [DEBUG] [Thread-22324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:34:54.135 [DEBUG] [Thread-22325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:34:58.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:34:58.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:34:58.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-11-12T20:34:59.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 34, 54), 18.47, 28.93, 0.0, 18.51, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:34:59.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:34:54
2025-11-12T20:34:59.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:34:59.372 [DEBUG] [Thread-22326] [transport.py] [_log()] starting thread (client mode): 0x11f02f50
2025-11-12T20:34:59.372 [DEBUG] [Thread-22326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:34:59.383 [DEBUG] [Thread-22326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:34:59.383 [INFO] [Thread-22326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:34:59.385 [DEBUG] [Thread-22326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:34:59.385 [DEBUG] [Thread-22326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:34:59.385 [DEBUG] [Thread-22326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] client lang: <none>
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] server lang: <none>
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] kex follows: False
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] Compression: none
2025-11-12T20:34:59.386 [DEBUG] [Thread-22326] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:34:59.396 [DEBUG] [Thread-22326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:34:59.396 [DEBUG] [Thread-22326] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:34:59.396 [DEBUG] [Thread-22326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:34:59.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:34:59.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:34:59.397 [DEBUG] [Thread-22326] [transport.py] [_log()] userauth is OK
2025-11-12T20:34:59.397 [DEBUG] [Thread-22326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:34:59.397 [DEBUG] [Thread-22326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:34:59.397 [DEBUG] [Thread-22326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:34:59.397 [DEBUG] [Thread-22326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:34:59.406 [INFO] [Thread-22326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:34:59.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:35:00.091 [DEBUG] [Thread-22326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:35:00.091 [DEBUG] [Thread-22326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:35:00.091 [DEBUG] [Thread-22326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:35:00.132 [DEBUG] [Thread-22326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:35:00.132 [DEBUG] [Thread-22326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:35:00.134 [DEBUG] [Thread-22326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:35:00.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:35:00.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:35:00.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:35:00.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:35:00.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:35:00.147 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:35:00.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:35:00.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.774043 -999.00  +19.80  16.08     34   +3.80 1 2 1 1 1     0    0 15.14 -50.23 Z.ESW 15.6 16.1 255.2 19.0 20.3 -21.8 20.2 -20.9 20.0 -20.5 20.2 -21.1
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.774043
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:35:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:34:54', tmtdew=18.47, humidity=28.93, cloud=0.0, wind=18.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-11-12T20:34:54', seeing=0.78, atlas_timestamp='2025-11-12T18:34:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:33:00')
2025-11-12T20:35:00.148 [DEBUG] [Thread-22326] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:35:00.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:35:00.232 [DEBUG] [Thread-22329] [transport.py] [_log()] starting thread (client mode): 0x11f019f0
2025-11-12T20:35:00.232 [DEBUG] [Thread-22329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:35:00.247 [DEBUG] [Thread-22329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:35:00.247 [INFO] [Thread-22329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] client lang: <none>
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] server lang: <none>
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] kex follows: False
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] Compression: none
2025-11-12T20:35:00.255 [DEBUG] [Thread-22329] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:35:00.313 [DEBUG] [Thread-22329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:35:00.313 [DEBUG] [Thread-22329] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:35:00.313 [DEBUG] [Thread-22329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:35:00.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:35:00.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:35:00.374 [DEBUG] [Thread-22329] [transport.py] [_log()] userauth is OK
2025-11-12T20:35:00.374 [DEBUG] [Thread-22329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:35:00.374 [DEBUG] [Thread-22329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:35:00.374 [DEBUG] [Thread-22329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:35:00.374 [DEBUG] [Thread-22329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:35:00.388 [INFO] [Thread-22329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:35:00.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:35:00.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:35:01.245 [DEBUG] [Thread-22329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:35:01.245 [DEBUG] [Thread-22329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:35:01.293 [DEBUG] [Thread-22329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:35:01.293 [DEBUG] [Thread-22329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:35:01.301 [DEBUG] [Thread-22329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:35:01.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:35: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')
2025-11-12T20:35:01.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-11-12T20:35:01.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:35:01.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:35:01.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:35:01.332 [DEBUG] [Thread-22329] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:35:09.160 [DEBUG] [Thread-22331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:35:24.207 [DEBUG] [Thread-22332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:35:31.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:35:31.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:35:31.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:35:32.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 35, 26), 18.47, 28.93, 0.0, 19.2, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:35:32.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:35:26
2025-11-12T20:35:32.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:35:32.274 [DEBUG] [Thread-22333] [transport.py] [_log()] starting thread (client mode): 0x11f01ed0
2025-11-12T20:35:32.274 [DEBUG] [Thread-22333] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:35:32.299 [DEBUG] [Thread-22333] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:35:32.299 [INFO] [Thread-22333] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:35:32.300 [DEBUG] [Thread-22333] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] client lang: <none>
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] server lang: <none>
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] kex follows: False
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] Compression: none
2025-11-12T20:35:32.301 [DEBUG] [Thread-22333] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:35:32.322 [DEBUG] [Thread-22333] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:35:32.323 [DEBUG] [Thread-22333] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:35:32.323 [DEBUG] [Thread-22333] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:35:32.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:35:32.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:35:32.325 [DEBUG] [Thread-22333] [transport.py] [_log()] userauth is OK
2025-11-12T20:35:32.325 [DEBUG] [Thread-22333] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:35:32.325 [DEBUG] [Thread-22333] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:35:32.325 [DEBUG] [Thread-22333] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:35:32.325 [DEBUG] [Thread-22333] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:35:32.363 [INFO] [Thread-22333] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:35:32.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:35:33.091 [DEBUG] [Thread-22333] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:35:33.092 [DEBUG] [Thread-22333] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:35:33.092 [DEBUG] [Thread-22333] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:35:33.132 [DEBUG] [Thread-22333] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:35:33.133 [DEBUG] [Thread-22333] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:35:33.136 [DEBUG] [Thread-22333] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:35:33.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:35:33.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:35:33.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:35:33.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:35:33.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:35:33.160 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:35:33.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:35:33.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:35:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:35:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.774043 -999.00  +19.80  16.08     34   +3.80 1 2 1 1 1     0    0 15.14 -50.23 Z.ESW 15.6 16.1 255.2 19.0 20.3 -21.8 20.2 -20.9 20.0 -20.5 20.2 -21.1
2025-11-12T20:35:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:35:33.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:35:33.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.774043
2025-11-12T20:35:33.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:35:33.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:35:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:35:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:35:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:35:33.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:35:26', tmtdew=18.47, humidity=28.93, cloud=0.0, wind=19.2, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:35:26', seeing=0.65, atlas_timestamp='2025-11-12T18:34:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:33:00')
2025-11-12T20:35:33.163 [DEBUG] [Thread-22333] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:35:33.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:35:33.259 [DEBUG] [Thread-22336] [transport.py] [_log()] starting thread (client mode): 0x11f03d90
2025-11-12T20:35:33.259 [DEBUG] [Thread-22336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:35:33.274 [DEBUG] [Thread-22336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:35:33.274 [INFO] [Thread-22336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:35:33.281 [DEBUG] [Thread-22336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:35:33.282 [DEBUG] [Thread-22336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:35:33.282 [DEBUG] [Thread-22336] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:35:33.282 [DEBUG] [Thread-22336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:35:33.282 [DEBUG] [Thread-22336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:35:33.282 [DEBUG] [Thread-22336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:35:33.282 [DEBUG] [Thread-22336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:35:33.283 [DEBUG] [Thread-22336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:35:33.283 [DEBUG] [Thread-22336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:35:33.283 [DEBUG] [Thread-22336] [transport.py] [_log()] client lang: <none>
2025-11-12T20:35:33.283 [DEBUG] [Thread-22336] [transport.py] [_log()] server lang: <none>
2025-11-12T20:35:33.283 [DEBUG] [Thread-22336] [transport.py] [_log()] kex follows: False
2025-11-12T20:35:33.283 [DEBUG] [Thread-22336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:35:33.283 [DEBUG] [Thread-22336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:35:33.283 [DEBUG] [Thread-22336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:35:33.284 [DEBUG] [Thread-22336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:35:33.284 [DEBUG] [Thread-22336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:35:33.284 [DEBUG] [Thread-22336] [transport.py] [_log()] Compression: none
2025-11-12T20:35:33.284 [DEBUG] [Thread-22336] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:35:33.342 [DEBUG] [Thread-22336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:35:33.343 [DEBUG] [Thread-22336] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:35:33.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:35:33.344 [DEBUG] [Thread-22336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:35:33.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:35:33.398 [DEBUG] [Thread-22336] [transport.py] [_log()] userauth is OK
2025-11-12T20:35:33.398 [DEBUG] [Thread-22336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:35:33.398 [DEBUG] [Thread-22336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:35:33.398 [DEBUG] [Thread-22336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:35:33.398 [DEBUG] [Thread-22336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:35:33.417 [INFO] [Thread-22336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:35:33.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:35:33.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:35:34.242 [DEBUG] [Thread-22336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:35:34.242 [DEBUG] [Thread-22336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:35:34.290 [DEBUG] [Thread-22336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:35:34.290 [DEBUG] [Thread-22336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:35:34.299 [DEBUG] [Thread-22336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:35:34.309 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:35:34.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-11-12T20:35:34.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-11-12T20:35:34.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:35:34.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:35:34.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:35:34.337 [DEBUG] [Thread-22336] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:35:37.986 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:35:37.987 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:35:39.244 [DEBUG] [Thread-22338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:35:52.298 [DEBUG] [Thread-22339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:35:54.301 [DEBUG] [Thread-22340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:36:04.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:36:04.359 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:36: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-11-12T20:36:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 35, 58), 18.45, 28.96, 0.0, 18.07, 19.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:36:05.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:35:58
2025-11-12T20:36:05.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:36:05.288 [DEBUG] [Thread-22341] [transport.py] [_log()] starting thread (client mode): 0x1739a4a0
2025-11-12T20:36:05.288 [DEBUG] [Thread-22341] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:36:05.309 [DEBUG] [Thread-22341] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:36:05.309 [INFO] [Thread-22341] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] client lang: <none>
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] server lang: <none>
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] kex follows: False
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] Compression: none
2025-11-12T20:36:05.312 [DEBUG] [Thread-22341] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:36:05.330 [DEBUG] [Thread-22341] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:36:05.330 [DEBUG] [Thread-22341] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:36:05.331 [DEBUG] [Thread-22341] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:36:05.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:36:05.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:36:05.333 [DEBUG] [Thread-22341] [transport.py] [_log()] userauth is OK
2025-11-12T20:36:05.333 [DEBUG] [Thread-22341] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:36:05.333 [DEBUG] [Thread-22341] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:36:05.333 [DEBUG] [Thread-22341] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:36:05.334 [DEBUG] [Thread-22341] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:36:05.357 [INFO] [Thread-22341] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:36:05.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:36:05.996 [DEBUG] [Thread-22341] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:36:05.996 [DEBUG] [Thread-22341] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:36:05.996 [DEBUG] [Thread-22341] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:36:06.037 [DEBUG] [Thread-22341] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:36:06.037 [DEBUG] [Thread-22341] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:36:06.040 [DEBUG] [Thread-22341] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:36:06.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:36:06.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:36:06.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:36:06.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:36:06.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:36:06.064 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:36:06.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.774390 -999.00  +19.80  19.32     34   +3.80 1 2 1 1 1     0    0 15.05 -47.21 ZneSW 17.6 19.3 257.6 23.3 20.3 -21.9 20.2 -20.9 19.9 -20.7 20.2 -21.1
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.774390
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:36:06.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:35:58', tmtdew=18.45, humidity=28.96, cloud=0.0, wind=18.07, temperature=19.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:35:58', seeing=0.65, atlas_timestamp='2025-11-12T18:35:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:33:00')
2025-11-12T20:36:06.065 [DEBUG] [Thread-22341] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:36:06.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:36:06.159 [DEBUG] [Thread-22344] [transport.py] [_log()] starting thread (client mode): 0x173bc280
2025-11-12T20:36:06.160 [DEBUG] [Thread-22344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:36:06.177 [DEBUG] [Thread-22344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:36:06.178 [INFO] [Thread-22344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:36:06.185 [DEBUG] [Thread-22344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] client lang: <none>
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] server lang: <none>
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] kex follows: False
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:36:06.186 [DEBUG] [Thread-22344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:36:06.187 [DEBUG] [Thread-22344] [transport.py] [_log()] Compression: none
2025-11-12T20:36:06.187 [DEBUG] [Thread-22344] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:36:06.247 [DEBUG] [Thread-22344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:36:06.248 [DEBUG] [Thread-22344] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:36:06.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:36:06.249 [DEBUG] [Thread-22344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:36:06.250 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:36:06.306 [DEBUG] [Thread-22344] [transport.py] [_log()] userauth is OK
2025-11-12T20:36:06.307 [DEBUG] [Thread-22344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:36:06.307 [DEBUG] [Thread-22344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:36:06.307 [DEBUG] [Thread-22344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:36:06.307 [DEBUG] [Thread-22344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:36:06.325 [INFO] [Thread-22344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:36:06.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:36:06.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:36:07.127 [DEBUG] [Thread-22344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:36:07.127 [DEBUG] [Thread-22344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:36:07.176 [DEBUG] [Thread-22344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:36:07.176 [DEBUG] [Thread-22344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:36:07.186 [DEBUG] [Thread-22344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:36:07.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:36:07.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-11-12T20:36:07.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-11-12T20:36:07.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:36:07.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:36:07.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:36:07.223 [DEBUG] [Thread-22344] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:36:09.335 [DEBUG] [Thread-22346 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:36:24.396 [DEBUG] [Thread-22347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:36:37.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:36:37.246 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:36:37.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-11-12T20:36:37.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 36, 30), 18.46, 28.94, 0.0, 14.7, 19.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:36:37.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:36:30
2025-11-12T20:36:38.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:36:38.157 [DEBUG] [Thread-22348] [transport.py] [_log()] starting thread (client mode): 0x173bcdc0
2025-11-12T20:36:38.157 [DEBUG] [Thread-22348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:36:38.179 [DEBUG] [Thread-22348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:36:38.180 [INFO] [Thread-22348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] client lang: <none>
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] server lang: <none>
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] kex follows: False
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:36:38.183 [DEBUG] [Thread-22348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:36:38.184 [DEBUG] [Thread-22348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:36:38.184 [DEBUG] [Thread-22348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:36:38.184 [DEBUG] [Thread-22348] [transport.py] [_log()] Compression: none
2025-11-12T20:36:38.184 [DEBUG] [Thread-22348] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:36:38.192 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:36:38.193 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:36:38.202 [DEBUG] [Thread-22348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:36:38.202 [DEBUG] [Thread-22348] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:36:38.203 [DEBUG] [Thread-22348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:36:38.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:36:38.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:36:38.205 [DEBUG] [Thread-22348] [transport.py] [_log()] userauth is OK
2025-11-12T20:36:38.205 [DEBUG] [Thread-22348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:36:38.206 [DEBUG] [Thread-22348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:36:38.206 [DEBUG] [Thread-22348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:36:38.206 [DEBUG] [Thread-22348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:36:38.222 [INFO] [Thread-22348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:36:38.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:36:38.989 [DEBUG] [Thread-22348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:36:38.990 [DEBUG] [Thread-22348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:36:38.990 [DEBUG] [Thread-22348] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:36:39.030 [DEBUG] [Thread-22348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:36:39.031 [DEBUG] [Thread-22348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:36:39.034 [DEBUG] [Thread-22348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:36:39.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:36:39.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:36:39.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:36:39.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:36:39.054 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:36:39.056 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:36:39.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:36:39.057 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:36:39.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:36:39.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.775084 -999.00  +19.70  10.20     34   +3.70 1 2 1 1 1     0    0 15.14 -44.53 Z.eSw 16.2 10.2 243.0 15.1 20.3 -21.9 20.2 -20.9 19.9 -20.6 20.1 -21.0
2025-11-12T20:36:39.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:36:39.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:36:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.775084
2025-11-12T20:36:39.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:36:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:36:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:36:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:36:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:36:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:36:30', tmtdew=18.46, humidity=28.94, cloud=0.0, wind=14.7, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:36:30', seeing=0.76, atlas_timestamp='2025-11-12T18:36:07.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:33:00')
2025-11-12T20:36:39.059 [DEBUG] [Thread-22348] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:36:39.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:36:39.155 [DEBUG] [Thread-22351] [transport.py] [_log()] starting thread (client mode): 0x1739bd90
2025-11-12T20:36:39.155 [DEBUG] [Thread-22351] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:36:39.170 [DEBUG] [Thread-22351] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:36:39.170 [INFO] [Thread-22351] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] client lang: <none>
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] server lang: <none>
2025-11-12T20:36:39.178 [DEBUG] [Thread-22351] [transport.py] [_log()] kex follows: False
2025-11-12T20:36:39.179 [DEBUG] [Thread-22351] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:36:39.179 [DEBUG] [Thread-22351] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:36:39.179 [DEBUG] [Thread-22351] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:36:39.179 [DEBUG] [Thread-22351] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:36:39.179 [DEBUG] [Thread-22351] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:36:39.179 [DEBUG] [Thread-22351] [transport.py] [_log()] Compression: none
2025-11-12T20:36:39.179 [DEBUG] [Thread-22351] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:36:39.239 [DEBUG] [Thread-22351] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:36:39.240 [DEBUG] [Thread-22351] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:36:39.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:36:39.241 [DEBUG] [Thread-22351] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:36:39.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:36:39.298 [DEBUG] [Thread-22351] [transport.py] [_log()] userauth is OK
2025-11-12T20:36:39.298 [DEBUG] [Thread-22351] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:36:39.298 [DEBUG] [Thread-22351] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:36:39.298 [DEBUG] [Thread-22351] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:36:39.298 [DEBUG] [Thread-22351] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:36:39.317 [INFO] [Thread-22351] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:36:39.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:36:39.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:36:39.429 [DEBUG] [Thread-22353 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:36:40.156 [DEBUG] [Thread-22351] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:36:40.156 [DEBUG] [Thread-22351] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:36:40.205 [DEBUG] [Thread-22351] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:36:40.205 [DEBUG] [Thread-22351] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:36:40.217 [DEBUG] [Thread-22351] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:36:40.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:36:40.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-11-12T20:36: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') -> 00000000
2025-11-12T20:36:40.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:36:40.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:36:40.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:36:40.256 [DEBUG] [Thread-22351] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:36:52.364 [DEBUG] [Thread-22354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:36:54.483 [DEBUG] [Thread-22355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:37:09.517 [DEBUG] [Thread-22356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:37:10.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:37:10.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:37:10.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-11-12T20:37:10.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 37, 2), 18.43, 28.99, 0.0, 16.94, 19.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:37:10.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:37:02
2025-11-12T20:37:11.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:37:11.167 [DEBUG] [Thread-22357] [transport.py] [_log()] starting thread (client mode): 0x1739a380
2025-11-12T20:37:11.167 [DEBUG] [Thread-22357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:37:11.187 [DEBUG] [Thread-22357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:37:11.188 [INFO] [Thread-22357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:37:11.191 [DEBUG] [Thread-22357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] client lang: <none>
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] server lang: <none>
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] kex follows: False
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] Compression: none
2025-11-12T20:37:11.192 [DEBUG] [Thread-22357] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:37:11.212 [DEBUG] [Thread-22357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:37:11.213 [DEBUG] [Thread-22357] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:37:11.214 [DEBUG] [Thread-22357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:37:11.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:37:11.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:37:11.256 [DEBUG] [Thread-22357] [transport.py] [_log()] userauth is OK
2025-11-12T20:37:11.257 [DEBUG] [Thread-22357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:37:11.257 [DEBUG] [Thread-22357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:37:11.257 [DEBUG] [Thread-22357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:37:11.257 [DEBUG] [Thread-22357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:37:11.292 [INFO] [Thread-22357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:37:11.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:37:11.931 [DEBUG] [Thread-22357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:37:11.932 [DEBUG] [Thread-22357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:37:11.932 [DEBUG] [Thread-22357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:37:11.973 [DEBUG] [Thread-22357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:37:11.973 [DEBUG] [Thread-22357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:37:11.976 [DEBUG] [Thread-22357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:37:11.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:37:11.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:37:11.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:37:11.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:37:11.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:37:12.001 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:37:12.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:37:12.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:37:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:37:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.775432 -999.00  +19.70  17.93     34   +3.80 1 2 1 1 1     0    0 15.28 -45.30 Z.eSw 17.8 17.9 255.0 20.2 20.3 -21.9 20.2 -20.9 19.9 -20.7 20.1 -21.2
2025-11-12T20:37:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:37:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:37:12.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.775432
2025-11-12T20:37:12.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:37:12.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:37:12.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:37:12.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:37:12.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:37:12.004 [DEBUG] [Thread-22357] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:37:12.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:37:02', tmtdew=18.43, humidity=28.99, cloud=0.0, wind=16.94, temperature=19.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:37:02', seeing=0.76, atlas_timestamp='2025-11-12T18:36:37.325', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:33:00')
2025-11-12T20:37:12.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:37:12.102 [DEBUG] [Thread-22360] [transport.py] [_log()] starting thread (client mode): 0x149aa9b0
2025-11-12T20:37:12.103 [DEBUG] [Thread-22360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:37:12.117 [DEBUG] [Thread-22360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:37:12.118 [INFO] [Thread-22360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:37:12.125 [DEBUG] [Thread-22360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:37:12.125 [DEBUG] [Thread-22360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:37:12.125 [DEBUG] [Thread-22360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:37:12.125 [DEBUG] [Thread-22360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] client lang: <none>
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] server lang: <none>
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] kex follows: False
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] Compression: none
2025-11-12T20:37:12.126 [DEBUG] [Thread-22360] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:37:12.185 [DEBUG] [Thread-22360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:37:12.186 [DEBUG] [Thread-22360] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:37:12.187 [DEBUG] [Thread-22360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:37:12.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:37:12.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:37:12.246 [DEBUG] [Thread-22360] [transport.py] [_log()] userauth is OK
2025-11-12T20:37:12.246 [DEBUG] [Thread-22360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:37:12.246 [DEBUG] [Thread-22360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:37:12.246 [DEBUG] [Thread-22360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:37:12.246 [DEBUG] [Thread-22360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:37:12.264 [INFO] [Thread-22360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:37:12.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:37:12.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:37:13.095 [DEBUG] [Thread-22360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:37:13.096 [DEBUG] [Thread-22360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:37:13.143 [DEBUG] [Thread-22360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:37:13.144 [DEBUG] [Thread-22360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:37:13.153 [DEBUG] [Thread-22360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:37:13.162 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:37:13.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-11-12T20:37:13.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-11-12T20:37:13.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:37:13.181 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:37:13.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:37:13.189 [DEBUG] [Thread-22360] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:37:24.557 [DEBUG] [Thread-22362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:37:38.398 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:37:38.399 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:37:39.614 [DEBUG] [Thread-22363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:37:43.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:37:43.212 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:37:43.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-11-12T20:37:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 37, 34), 18.43, 28.99, 0.0, 19.13, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:37:43.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:37:34
2025-11-12T20:37:44.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:37:44.169 [DEBUG] [Thread-22364] [transport.py] [_log()] starting thread (client mode): 0x11f00d30
2025-11-12T20:37:44.169 [DEBUG] [Thread-22364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:37:44.179 [DEBUG] [Thread-22364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:37:44.179 [INFO] [Thread-22364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:37:44.182 [DEBUG] [Thread-22364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:37:44.182 [DEBUG] [Thread-22364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:37:44.182 [DEBUG] [Thread-22364] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:37:44.182 [DEBUG] [Thread-22364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:37:44.182 [DEBUG] [Thread-22364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:37:44.182 [DEBUG] [Thread-22364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] client lang: <none>
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] server lang: <none>
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] kex follows: False
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] Compression: none
2025-11-12T20:37:44.183 [DEBUG] [Thread-22364] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:37:44.198 [DEBUG] [Thread-22364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:37:44.198 [DEBUG] [Thread-22364] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:37:44.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:37:44.198 [DEBUG] [Thread-22364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:37:44.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:37:44.199 [DEBUG] [Thread-22364] [transport.py] [_log()] userauth is OK
2025-11-12T20:37:44.199 [DEBUG] [Thread-22364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:37:44.199 [DEBUG] [Thread-22364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:37:44.199 [DEBUG] [Thread-22364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:37:44.199 [DEBUG] [Thread-22364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:37:44.226 [INFO] [Thread-22364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:37:44.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:37:45.018 [DEBUG] [Thread-22364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:37:45.018 [DEBUG] [Thread-22364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:37:45.018 [DEBUG] [Thread-22364] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:37:45.059 [DEBUG] [Thread-22364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:37:45.059 [DEBUG] [Thread-22364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:37:45.061 [DEBUG] [Thread-22364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:37:45.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:37:45.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:37:45.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:37:45.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:37:45.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:37:45.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:37:45.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.775779 -999.00  +19.70  16.37     34   +3.80 1 2 1 1 1     0    0 14.89 -46.49 Z.eSw 9.8 16.4 256.6 22.3 20.3 -21.9 20.2 -20.8 20.0 -20.7 20.2 -21.0
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.775779
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:37:45.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:37:34', tmtdew=18.43, humidity=28.99, cloud=0.0, wind=19.13, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:37:34', seeing=0.68, atlas_timestamp='2025-11-12T18:37:07.306', atlas_cloud=2, atlas_rain=1, zp_data=[0.8087499999999999, 1.1107500000000012, 0.9632500000000004, 0.9724999999999993, 1.0915, 1.0542500000000006, 0.8339999999999996, 0.7402500000000005, 1.266, 1.5920000000000005, 1.2007499999999993, 0.9509999999999996, 1.2269999999999994, 1.6842499999999996, 1.6504999999999992, 0.8039999999999994, 1.3962500000000002, nan, nan, 1.2492499999999982, 1.6129999999999987, nan, nan, 1.12275, 1.3499999999999996, nan, nan, nan, 2.88, nan, nan, 1.394000000000001, 1.8692499999999992], zp_timestamp='2025-11-12T18:33:00')
2025-11-12T20:37:45.080 [DEBUG] [Thread-22364] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:37:45.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:37:45.162 [DEBUG] [Thread-22367] [transport.py] [_log()] starting thread (client mode): 0x17399690
2025-11-12T20:37:45.162 [DEBUG] [Thread-22367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:37:45.177 [DEBUG] [Thread-22367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:37:45.178 [INFO] [Thread-22367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] client lang: <none>
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] server lang: <none>
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] kex follows: False
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] Compression: none
2025-11-12T20:37:45.185 [DEBUG] [Thread-22367] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:37:45.240 [DEBUG] [Thread-22367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:37:45.240 [DEBUG] [Thread-22367] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:37:45.240 [DEBUG] [Thread-22367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:37:45.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:37:45.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:37:45.297 [DEBUG] [Thread-22367] [transport.py] [_log()] userauth is OK
2025-11-12T20:37:45.297 [DEBUG] [Thread-22367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:37:45.298 [DEBUG] [Thread-22367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:37:45.298 [DEBUG] [Thread-22367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:37:45.298 [DEBUG] [Thread-22367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:37:45.315 [INFO] [Thread-22367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:37:45.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:37:45.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:37:46.181 [DEBUG] [Thread-22367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:37:46.181 [DEBUG] [Thread-22367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:37:46.229 [DEBUG] [Thread-22367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:37:46.229 [DEBUG] [Thread-22367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:37:46.237 [DEBUG] [Thread-22367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:37:46.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:37:46.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-11-12T20:37:46.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-11-12T20:37:46.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:37:46.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:37:46.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:37:46.268 [DEBUG] [Thread-22367] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:37:52.419 [DEBUG] [Thread-22369 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:37:54.648 [DEBUG] [Thread-22370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:38:09.699 [DEBUG] [Thread-22371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:38:16.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:38:16.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:38:16.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-11-12T20:38:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 38, 6), 18.43, 28.99, 0.0, 17.33, 19.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:38:16.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:38:06
2025-11-12T20:38:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:38:17.199 [DEBUG] [Thread-22372] [transport.py] [_log()] starting thread (client mode): 0x1739a770
2025-11-12T20:38:17.199 [DEBUG] [Thread-22372] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:38:17.219 [DEBUG] [Thread-22372] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:38:17.219 [INFO] [Thread-22372] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] client lang: <none>
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] server lang: <none>
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] kex follows: False
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] Compression: none
2025-11-12T20:38:17.223 [DEBUG] [Thread-22372] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:38:17.239 [DEBUG] [Thread-22372] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:38:17.239 [DEBUG] [Thread-22372] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:38:17.239 [DEBUG] [Thread-22372] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:38:17.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:38:17.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:38:17.280 [DEBUG] [Thread-22372] [transport.py] [_log()] userauth is OK
2025-11-12T20:38:17.280 [DEBUG] [Thread-22372] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:38:17.280 [DEBUG] [Thread-22372] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:38:17.281 [DEBUG] [Thread-22372] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:38:17.281 [DEBUG] [Thread-22372] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:38:17.296 [INFO] [Thread-22372] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:38:17.296 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:38:17.965 [DEBUG] [Thread-22372] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:38:17.965 [DEBUG] [Thread-22372] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:38:17.966 [DEBUG] [Thread-22372] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:38:18.006 [DEBUG] [Thread-22372] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:38:18.006 [DEBUG] [Thread-22372] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:38:18.009 [DEBUG] [Thread-22372] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:38:18.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:38:18.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:38:18.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:38:18.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:38:18.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:38:18.033 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:38:18.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:38:18.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:38:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:38:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.776126 -999.00  +19.70  11.97     34   +3.80 1 2 1 1 1     0    0 14.99 -46.53 Z.eSw 14.1 12.0 264.0 18.4 20.2 -21.9 20.2 -20.9 19.9 -20.6 20.1 -21.0
2025-11-12T20:38:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:38:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:38:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.776126
2025-11-12T20:38:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:38:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:38:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:38:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:38:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:38:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:38:06', tmtdew=18.43, humidity=28.99, cloud=0.0, wind=17.33, temperature=19.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:38:06', seeing=0.82, atlas_timestamp='2025-11-12T18:37:37.286', atlas_cloud=2, atlas_rain=1, zp_data=[0.85975, 1.09525, 0.8382500000000004, 1.1214999999999993, 0.5175000000000001, 0.7712500000000002, 1.5169999999999995, 0.8792500000000008, 0.9604999999999997, 1.2880000000000003, 0.8172499999999996, 1.0510000000000002, 0.9179999999999993, 1.3372499999999992, 1.8469999999999995, 1.0459999999999994, 1.02325, nan, nan, 1.3362499999999988, 1.366999999999999, nan, nan, 1.1317500000000003, 1.4539999999999988, nan, nan, nan, 2.6944999999999997, nan, nan, nan, 1.4947499999999998], zp_timestamp='2025-11-12T18:37:00')
2025-11-12T20:38:18.036 [DEBUG] [Thread-22372] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:38:18.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:38:18.143 [DEBUG] [Thread-22375] [transport.py] [_log()] starting thread (client mode): 0x17398b20
2025-11-12T20:38:18.144 [DEBUG] [Thread-22375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:38:18.158 [DEBUG] [Thread-22375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:38:18.158 [INFO] [Thread-22375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:38:18.165 [DEBUG] [Thread-22375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:38:18.165 [DEBUG] [Thread-22375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] client lang: <none>
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] server lang: <none>
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] kex follows: False
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] Compression: none
2025-11-12T20:38:18.166 [DEBUG] [Thread-22375] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:38:18.226 [DEBUG] [Thread-22375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:38:18.226 [DEBUG] [Thread-22375] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:38:18.227 [DEBUG] [Thread-22375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:38:18.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:38:18.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:38:18.282 [DEBUG] [Thread-22375] [transport.py] [_log()] userauth is OK
2025-11-12T20:38:18.282 [DEBUG] [Thread-22375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:38:18.283 [DEBUG] [Thread-22375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:38:18.283 [DEBUG] [Thread-22375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:38:18.283 [DEBUG] [Thread-22375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:38:18.302 [INFO] [Thread-22375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:38:18.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:38:18.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:38:19.145 [DEBUG] [Thread-22375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:38:19.145 [DEBUG] [Thread-22375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:38:19.193 [DEBUG] [Thread-22375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:38:19.194 [DEBUG] [Thread-22375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:38:19.203 [DEBUG] [Thread-22375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:38:19.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:38:19.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:38:19.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-11-12T20:38:19.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:38:19.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:38:19.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:38:19.239 [DEBUG] [Thread-22375] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:38:24.734 [DEBUG] [Thread-22377 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:38:38.604 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:38:38.605 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:38:39.784 [DEBUG] [Thread-22378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:38:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:38:49.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:38:49.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-11-12T20:38:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 38, 38), 18.35, 29.54, 0.0, 14.31, 19.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:38:49.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:38:38
2025-11-12T20:38:50.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:38:50.162 [DEBUG] [Thread-22379] [transport.py] [_log()] starting thread (client mode): 0x173bf280
2025-11-12T20:38:50.162 [DEBUG] [Thread-22379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:38:50.182 [DEBUG] [Thread-22379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:38:50.182 [INFO] [Thread-22379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:38:50.185 [DEBUG] [Thread-22379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:38:50.185 [DEBUG] [Thread-22379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:38:50.185 [DEBUG] [Thread-22379] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:38:50.185 [DEBUG] [Thread-22379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:38:50.185 [DEBUG] [Thread-22379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] client lang: <none>
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] server lang: <none>
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] kex follows: False
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] Compression: none
2025-11-12T20:38:50.186 [DEBUG] [Thread-22379] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:38:50.205 [DEBUG] [Thread-22379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:38:50.205 [DEBUG] [Thread-22379] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:38:50.206 [DEBUG] [Thread-22379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:38:50.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:38:50.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:38:50.208 [DEBUG] [Thread-22379] [transport.py] [_log()] userauth is OK
2025-11-12T20:38:50.208 [DEBUG] [Thread-22379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:38:50.208 [DEBUG] [Thread-22379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:38:50.208 [DEBUG] [Thread-22379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:38:50.208 [DEBUG] [Thread-22379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:38:50.232 [INFO] [Thread-22379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:38:50.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:38:51.008 [DEBUG] [Thread-22379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:38:51.008 [DEBUG] [Thread-22379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:38:51.009 [DEBUG] [Thread-22379] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:38:51.050 [DEBUG] [Thread-22379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:38:51.050 [DEBUG] [Thread-22379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:38:51.053 [DEBUG] [Thread-22379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:38:51.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:38:51.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:38:51.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:38:51.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:38:51.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:38:51.076 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:38:51.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:38:51.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:38:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:38:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.776473 -999.00  +19.70  10.47     34   +3.80 1 2 1 1 1     0    0 15.06 -45.32 Z.eSw 10.2 10.5 254.6 17.0 20.2 -21.9 20.2 -20.8 19.9 -20.6 20.1 -21.0
2025-11-12T20:38:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:38:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:38:51.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.776473
2025-11-12T20:38:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:38:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:38:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:38:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:38:51.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:38:51.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:38:38', tmtdew=18.35, humidity=29.54, cloud=0.0, wind=14.31, temperature=19.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:38:38', seeing=0.82, atlas_timestamp='2025-11-12T18:38:07.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.85975, 1.09525, 0.8382500000000004, 1.1214999999999993, 0.5175000000000001, 0.7712500000000002, 1.5169999999999995, 0.8792500000000008, 0.9604999999999997, 1.2880000000000003, 0.8172499999999996, 1.0510000000000002, 0.9179999999999993, 1.3372499999999992, 1.8469999999999995, 1.0459999999999994, 1.02325, nan, nan, 1.3362499999999988, 1.366999999999999, nan, nan, 1.1317500000000003, 1.4539999999999988, nan, nan, nan, 2.6944999999999997, nan, nan, nan, 1.4947499999999998], zp_timestamp='2025-11-12T18:37:00')
2025-11-12T20:38:51.079 [DEBUG] [Thread-22379] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:38: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-11-12T20:38:51.174 [DEBUG] [Thread-22382] [transport.py] [_log()] starting thread (client mode): 0x149143a0
2025-11-12T20:38:51.174 [DEBUG] [Thread-22382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:38:51.188 [DEBUG] [Thread-22382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:38:51.189 [INFO] [Thread-22382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] client lang: <none>
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] server lang: <none>
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] kex follows: False
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:38:51.197 [DEBUG] [Thread-22382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:38:51.198 [DEBUG] [Thread-22382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:38:51.198 [DEBUG] [Thread-22382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:38:51.198 [DEBUG] [Thread-22382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:38:51.198 [DEBUG] [Thread-22382] [transport.py] [_log()] Compression: none
2025-11-12T20:38:51.198 [DEBUG] [Thread-22382] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:38:51.254 [DEBUG] [Thread-22382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:38:51.254 [DEBUG] [Thread-22382] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:38:51.255 [DEBUG] [Thread-22382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:38:51.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:38:51.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:38:51.309 [DEBUG] [Thread-22382] [transport.py] [_log()] userauth is OK
2025-11-12T20:38:51.310 [DEBUG] [Thread-22382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:38:51.310 [DEBUG] [Thread-22382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:38:51.310 [DEBUG] [Thread-22382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:38:51.310 [DEBUG] [Thread-22382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:38:51.329 [INFO] [Thread-22382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:38:51.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:38:51.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:38:52.155 [DEBUG] [Thread-22382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:38:52.155 [DEBUG] [Thread-22382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:38:52.204 [DEBUG] [Thread-22382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:38:52.204 [DEBUG] [Thread-22382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:38:52.213 [DEBUG] [Thread-22382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:38:52.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:38:52.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-11-12T20:38:52.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-11-12T20:38:52.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:38:52.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:38:52.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:38:52.250 [DEBUG] [Thread-22382] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:38:52.499 [DEBUG] [Thread-22384 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:38:54.817 [DEBUG] [Thread-22385 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:39:09.866 [DEBUG] [Thread-22386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:39:22.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:39:22.273 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:39:22.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:39:22.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 39, 10), 18.36, 29.54, 0.0, 14.56, 19.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:39:22.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:39:10
2025-11-12T20:39:23.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:39:23.167 [DEBUG] [Thread-22387] [transport.py] [_log()] starting thread (client mode): 0x173bff70
2025-11-12T20:39:23.168 [DEBUG] [Thread-22387] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:39:23.188 [DEBUG] [Thread-22387] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:39:23.188 [INFO] [Thread-22387] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:39:23.189 [DEBUG] [Thread-22387] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] client lang: <none>
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] server lang: <none>
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] kex follows: False
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] Compression: none
2025-11-12T20:39:23.190 [DEBUG] [Thread-22387] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:39:23.198 [DEBUG] [Thread-22387] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:39:23.199 [DEBUG] [Thread-22387] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:39:23.199 [DEBUG] [Thread-22387] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:39:23.199 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:39:23.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:39:23.201 [DEBUG] [Thread-22387] [transport.py] [_log()] userauth is OK
2025-11-12T20:39:23.201 [DEBUG] [Thread-22387] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:39:23.201 [DEBUG] [Thread-22387] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:39:23.201 [DEBUG] [Thread-22387] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:39:23.201 [DEBUG] [Thread-22387] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:39:23.225 [INFO] [Thread-22387] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:39:23.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:39:23.863 [DEBUG] [Thread-22387] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:39:23.863 [DEBUG] [Thread-22387] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:39:23.864 [DEBUG] [Thread-22387] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:39:23.904 [DEBUG] [Thread-22387] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:39:23.905 [DEBUG] [Thread-22387] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:39:23.908 [DEBUG] [Thread-22387] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:39:23.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:39:23.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:39:23.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:39:23.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:39:23.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:39:23.931 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:39:23.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:39:23.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:39:23.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:39:23.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.776820 -999.00  +19.70  12.54     35   +3.80 1 2 1 1 1     0    0 14.96 -44.96 Z.eSw 10.7 12.5 255.6 16.3 20.3 -21.9 20.2 -21.1 19.9 -20.6 20.2 -21.1
2025-11-12T20:39:23.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:39:23.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:39:23.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.776820
2025-11-12T20:39:23.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:39:23.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:39:23.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:39:23.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:39:23.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:39:23.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:39:10', tmtdew=18.36, humidity=29.54, cloud=0.0, wind=14.56, temperature=19.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:39:10', seeing=0.67, atlas_timestamp='2025-11-12T18:38:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[0.85975, 1.09525, 0.8382500000000004, 1.1214999999999993, 0.5175000000000001, 0.7712500000000002, 1.5169999999999995, 0.8792500000000008, 0.9604999999999997, 1.2880000000000003, 0.8172499999999996, 1.0510000000000002, 0.9179999999999993, 1.3372499999999992, 1.8469999999999995, 1.0459999999999994, 1.02325, nan, nan, 1.3362499999999988, 1.366999999999999, nan, nan, 1.1317500000000003, 1.4539999999999988, nan, nan, nan, 2.6944999999999997, nan, nan, nan, 1.4947499999999998], zp_timestamp='2025-11-12T18:37:00')
2025-11-12T20:39:23.934 [DEBUG] [Thread-22387] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:39:24.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:39:24.030 [DEBUG] [Thread-22390] [transport.py] [_log()] starting thread (client mode): 0x173988e0
2025-11-12T20:39:24.030 [DEBUG] [Thread-22390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:39:24.044 [DEBUG] [Thread-22390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:39:24.045 [INFO] [Thread-22390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:39:24.052 [DEBUG] [Thread-22390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:39:24.052 [DEBUG] [Thread-22390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:39:24.052 [DEBUG] [Thread-22390] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] client lang: <none>
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] server lang: <none>
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] kex follows: False
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] Compression: none
2025-11-12T20:39:24.053 [DEBUG] [Thread-22390] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:39:24.110 [DEBUG] [Thread-22390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:39:24.111 [DEBUG] [Thread-22390] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:39:24.111 [DEBUG] [Thread-22390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:39:24.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:39:24.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:39:24.170 [DEBUG] [Thread-22390] [transport.py] [_log()] userauth is OK
2025-11-12T20:39:24.170 [DEBUG] [Thread-22390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:39:24.170 [DEBUG] [Thread-22390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:39:24.170 [DEBUG] [Thread-22390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:39:24.170 [DEBUG] [Thread-22390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:39:24.189 [INFO] [Thread-22390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:39:24.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:39:24.190 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:39:24.902 [DEBUG] [Thread-22392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:39:25.072 [DEBUG] [Thread-22390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:39:25.073 [DEBUG] [Thread-22390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:39:25.121 [DEBUG] [Thread-22390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:39:25.121 [DEBUG] [Thread-22390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:39:25.131 [DEBUG] [Thread-22390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:39:25.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:39:25.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-11-12T20:39:25.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-11-12T20:39:25.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:39:25.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:39:25.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:39:25.168 [DEBUG] [Thread-22390] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:39:38.810 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:39:38.811 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:39:39.947 [DEBUG] [Thread-22393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:39:52.571 [DEBUG] [Thread-22394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:39:54.978 [DEBUG] [Thread-22395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:39:55.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:39:55.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:39:55.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-11-12T20:39:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 39, 42), 18.3, 29.66, 0.0, 19.22, 19.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:39:55.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:39:42
2025-11-12T20:39:55.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:39:56.078 [DEBUG] [Thread-22396] [transport.py] [_log()] starting thread (client mode): 0x14923850
2025-11-12T20:39:56.078 [DEBUG] [Thread-22396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:39:56.101 [DEBUG] [Thread-22396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:39:56.102 [INFO] [Thread-22396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:39:56.105 [DEBUG] [Thread-22396] [transport.py] [_log()] client lang: <none>
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] server lang: <none>
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] kex follows: False
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] Compression: none
2025-11-12T20:39:56.106 [DEBUG] [Thread-22396] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:39:56.126 [DEBUG] [Thread-22396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:39:56.126 [DEBUG] [Thread-22396] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:39:56.127 [DEBUG] [Thread-22396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:39:56.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:39:56.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:39:56.129 [DEBUG] [Thread-22396] [transport.py] [_log()] userauth is OK
2025-11-12T20:39:56.129 [DEBUG] [Thread-22396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:39:56.129 [DEBUG] [Thread-22396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:39:56.129 [DEBUG] [Thread-22396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:39:56.129 [DEBUG] [Thread-22396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:39:56.151 [INFO] [Thread-22396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:39:56.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:39:56.960 [DEBUG] [Thread-22396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:39:56.960 [DEBUG] [Thread-22396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:39:56.960 [DEBUG] [Thread-22396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:39:57.000 [DEBUG] [Thread-22396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:39:57.001 [DEBUG] [Thread-22396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:39:57.004 [DEBUG] [Thread-22396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:39:57.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:39:57.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:39:57.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:39:57.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:39:57.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:39:57.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:39:57.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:39:57.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:39:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:39:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.777515 -999.00  +19.70  11.77     35   +3.80 1 2 1 1 1     0    0 14.85 -46.70 Z.ES. 18.5 11.8 244.4 19.8 20.3 -21.8 20.2 -21.1 19.9 -20.7 20.1 -21.1
2025-11-12T20:39:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:39:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:39:57.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.777515
2025-11-12T20:39:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:39:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:39:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:39:57.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:39:57.031 [DEBUG] [Thread-22396] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:39:57.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:39:57.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:39:42', tmtdew=18.3, humidity=29.66, cloud=0.0, wind=19.22, temperature=19.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:39:42', seeing=0.57, atlas_timestamp='2025-11-12T18:39:37.296', atlas_cloud=2, atlas_rain=1, zp_data=[0.85975, 1.09525, 0.8382500000000004, 1.1214999999999993, 0.5175000000000001, 0.7712500000000002, 1.5169999999999995, 0.8792500000000008, 0.9604999999999997, 1.2880000000000003, 0.8172499999999996, 1.0510000000000002, 0.9179999999999993, 1.3372499999999992, 1.8469999999999995, 1.0459999999999994, 1.02325, nan, nan, 1.3362499999999988, 1.366999999999999, nan, nan, 1.1317500000000003, 1.4539999999999988, nan, nan, nan, 2.6944999999999997, nan, nan, nan, 1.4947499999999998], zp_timestamp='2025-11-12T18:37:00')
2025-11-12T20:39:57.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:39:57.130 [DEBUG] [Thread-22399] [transport.py] [_log()] starting thread (client mode): 0x173be7a0
2025-11-12T20:39:57.130 [DEBUG] [Thread-22399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:39:57.146 [DEBUG] [Thread-22399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:39:57.146 [INFO] [Thread-22399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:39:57.153 [DEBUG] [Thread-22399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:39:57.153 [DEBUG] [Thread-22399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] client lang: <none>
2025-11-12T20:39:57.154 [DEBUG] [Thread-22399] [transport.py] [_log()] server lang: <none>
2025-11-12T20:39:57.155 [DEBUG] [Thread-22399] [transport.py] [_log()] kex follows: False
2025-11-12T20:39:57.155 [DEBUG] [Thread-22399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:39:57.155 [DEBUG] [Thread-22399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:39:57.155 [DEBUG] [Thread-22399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:39:57.155 [DEBUG] [Thread-22399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:39:57.155 [DEBUG] [Thread-22399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:39:57.155 [DEBUG] [Thread-22399] [transport.py] [_log()] Compression: none
2025-11-12T20:39:57.155 [DEBUG] [Thread-22399] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:39:57.214 [DEBUG] [Thread-22399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:39:57.215 [DEBUG] [Thread-22399] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:39:57.215 [DEBUG] [Thread-22399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:39:57.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:39:57.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:39:57.270 [DEBUG] [Thread-22399] [transport.py] [_log()] userauth is OK
2025-11-12T20:39:57.270 [DEBUG] [Thread-22399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:39:57.270 [DEBUG] [Thread-22399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:39:57.270 [DEBUG] [Thread-22399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:39:57.270 [DEBUG] [Thread-22399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:39:57.289 [INFO] [Thread-22399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:39:57.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:39:57.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:39:58.122 [DEBUG] [Thread-22399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:39:58.123 [DEBUG] [Thread-22399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:39:58.171 [DEBUG] [Thread-22399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:39:58.171 [DEBUG] [Thread-22399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:39:58.180 [DEBUG] [Thread-22399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:39:58.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:39:58.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:39:58.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-11-12T20:39:58.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:39:58.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:39:58.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:39:58.217 [DEBUG] [Thread-22399] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:40:10.015 [DEBUG] [Thread-22401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:40:25.076 [DEBUG] [Thread-22402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:40:28.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:40:28.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:40: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-11-12T20:40:28.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 40, 14), 18.31, 29.64, 0.0, 20.06, 19.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:40:28.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:40:14
2025-11-12T20:40:29.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:40:29.146 [DEBUG] [Thread-22403] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T20:40:29.146 [DEBUG] [Thread-22403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:40:29.166 [DEBUG] [Thread-22403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:40:29.166 [INFO] [Thread-22403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] client lang: <none>
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] server lang: <none>
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] kex follows: False
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] Compression: none
2025-11-12T20:40:29.170 [DEBUG] [Thread-22403] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:40:29.188 [DEBUG] [Thread-22403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:40:29.188 [DEBUG] [Thread-22403] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:40:29.189 [DEBUG] [Thread-22403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:40:29.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:40:29.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:40:29.191 [DEBUG] [Thread-22403] [transport.py] [_log()] userauth is OK
2025-11-12T20:40:29.191 [DEBUG] [Thread-22403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:40:29.191 [DEBUG] [Thread-22403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:40:29.192 [DEBUG] [Thread-22403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:40:29.192 [DEBUG] [Thread-22403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:40:29.218 [INFO] [Thread-22403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:40:29.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:40:29.831 [DEBUG] [Thread-22403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:40:29.831 [DEBUG] [Thread-22403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:40:29.831 [DEBUG] [Thread-22403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:40:29.871 [DEBUG] [Thread-22403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:40:29.872 [DEBUG] [Thread-22403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:40:29.875 [DEBUG] [Thread-22403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:40:29.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:40:29.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:40:29.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:40:29.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:40:29.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:40:29.894 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:40:29.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:40:29.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:40:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:40:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.777862 -999.00  +19.70  15.89     35   +3.80 1 2 1 1 1     0    0 14.94 -45.46 Z.eSw 14.6 15.9 261.8 21.4 20.2 -21.8 20.1 -21.0 19.9 -20.6 20.1 -21.0
2025-11-12T20:40:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:40:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:40:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.777862
2025-11-12T20:40:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:40:29.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:40:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:40:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:40:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:40:29.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:40:14', tmtdew=18.31, humidity=29.64, cloud=0.0, wind=20.06, temperature=19.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:40:14', seeing=0.57, atlas_timestamp='2025-11-12T18:40:07.277', atlas_cloud=2, atlas_rain=1, zp_data=[0.85975, 1.09525, 0.8382500000000004, 1.1214999999999993, 0.5175000000000001, 0.7712500000000002, 1.5169999999999995, 0.8792500000000008, 0.9604999999999997, 1.2880000000000003, 0.8172499999999996, 1.0510000000000002, 0.9179999999999993, 1.3372499999999992, 1.8469999999999995, 1.0459999999999994, 1.02325, nan, nan, 1.3362499999999988, 1.366999999999999, nan, nan, 1.1317500000000003, 1.4539999999999988, nan, nan, nan, 2.6944999999999997, nan, nan, nan, 1.4947499999999998], zp_timestamp='2025-11-12T18:37:00')
2025-11-12T20:40:29.895 [DEBUG] [Thread-22403] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:40:29.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:40:29.983 [DEBUG] [Thread-22406] [transport.py] [_log()] starting thread (client mode): 0x149209a0
2025-11-12T20:40:29.983 [DEBUG] [Thread-22406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:40:29.998 [DEBUG] [Thread-22406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:40:29.998 [INFO] [Thread-22406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:40:30.006 [DEBUG] [Thread-22406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:40:30.006 [DEBUG] [Thread-22406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:40:30.006 [DEBUG] [Thread-22406] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:40:30.006 [DEBUG] [Thread-22406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] client lang: <none>
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] server lang: <none>
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] kex follows: False
2025-11-12T20:40:30.007 [DEBUG] [Thread-22406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:40:30.008 [DEBUG] [Thread-22406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:40:30.008 [DEBUG] [Thread-22406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:40:30.008 [DEBUG] [Thread-22406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:40:30.008 [DEBUG] [Thread-22406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:40:30.008 [DEBUG] [Thread-22406] [transport.py] [_log()] Compression: none
2025-11-12T20:40:30.008 [DEBUG] [Thread-22406] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:40:30.071 [DEBUG] [Thread-22406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:40:30.072 [DEBUG] [Thread-22406] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:40:30.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:40:30.073 [DEBUG] [Thread-22406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:40:30.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:40:30.130 [DEBUG] [Thread-22406] [transport.py] [_log()] userauth is OK
2025-11-12T20:40:30.130 [DEBUG] [Thread-22406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:40:30.130 [DEBUG] [Thread-22406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:40:30.131 [DEBUG] [Thread-22406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:40:30.131 [DEBUG] [Thread-22406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:40:30.152 [INFO] [Thread-22406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:40:30.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:40:30.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:40:30.992 [DEBUG] [Thread-22406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:40:30.993 [DEBUG] [Thread-22406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:40:31.041 [DEBUG] [Thread-22406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:40:31.041 [DEBUG] [Thread-22406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:40:31.051 [DEBUG] [Thread-22406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:40:31.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:40:31.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:40:31.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-11-12T20:40:31.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:40:31.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:40:31.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:40:31.091 [DEBUG] [Thread-22406] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:40:39.017 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:40:39.018 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:40:40.117 [DEBUG] [Thread-22408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:40:52.639 [DEBUG] [Thread-22409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:40:55.167 [DEBUG] [Thread-22410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:41:01.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:41:01.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:41:01.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:41:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 40, 46), 18.25, 29.64, 0.0, 18.76, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:41:01.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:40:46
2025-11-12T20:41:01.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:41:02.012 [DEBUG] [Thread-22411] [transport.py] [_log()] starting thread (client mode): 0x1739bf40
2025-11-12T20:41:02.012 [DEBUG] [Thread-22411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:41:02.029 [DEBUG] [Thread-22411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:41:02.029 [INFO] [Thread-22411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] client lang: <none>
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] server lang: <none>
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] kex follows: False
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] Compression: none
2025-11-12T20:41:02.032 [DEBUG] [Thread-22411] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:41:02.051 [DEBUG] [Thread-22411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:41:02.052 [DEBUG] [Thread-22411] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:41:02.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:41:02.053 [DEBUG] [Thread-22411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:41:02.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:41:02.055 [DEBUG] [Thread-22411] [transport.py] [_log()] userauth is OK
2025-11-12T20:41:02.055 [DEBUG] [Thread-22411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:41:02.056 [DEBUG] [Thread-22411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:41:02.056 [DEBUG] [Thread-22411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:41:02.056 [DEBUG] [Thread-22411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:41:02.080 [INFO] [Thread-22411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:41:02.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:41:02.690 [DEBUG] [Thread-22411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:41:02.690 [DEBUG] [Thread-22411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:41:02.691 [DEBUG] [Thread-22411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:41:02.731 [DEBUG] [Thread-22411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:41:02.732 [DEBUG] [Thread-22411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:41:02.735 [DEBUG] [Thread-22411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:41:02.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:41:02.742 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:41:02.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:41:02.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:41:02.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:41:02.753 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:41:02.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:41:02.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:41:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:41:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.778209 -999.00  +19.70  13.67     35   +3.80 1 2 1 1 1     0    0 15.11 -41.12 Z.eSw 18.2 13.7 257.8 20.3 20.2 -22.0 20.2 -21.0 19.9 -20.7 20.1 -21.1
2025-11-12T20:41:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:41:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:41:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.778209
2025-11-12T20:41:02.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:41:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:41:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:41:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:41:02.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:41:02.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:40:46', tmtdew=18.25, humidity=29.64, cloud=0.0, wind=18.76, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:40:46', seeing=0.74, atlas_timestamp='2025-11-12T18:40:37.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:39:00')
2025-11-12T20:41:02.756 [DEBUG] [Thread-22411] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:41:02.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:41:02.851 [DEBUG] [Thread-22414] [transport.py] [_log()] starting thread (client mode): 0x149aa9b0
2025-11-12T20:41:02.851 [DEBUG] [Thread-22414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:41:02.868 [DEBUG] [Thread-22414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:41:02.869 [INFO] [Thread-22414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:41:02.876 [DEBUG] [Thread-22414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:41:02.877 [DEBUG] [Thread-22414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:41:02.877 [DEBUG] [Thread-22414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:41:02.877 [DEBUG] [Thread-22414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:41:02.877 [DEBUG] [Thread-22414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:41:02.877 [DEBUG] [Thread-22414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:41:02.877 [DEBUG] [Thread-22414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:41:02.878 [DEBUG] [Thread-22414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:41:02.878 [DEBUG] [Thread-22414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:41:02.878 [DEBUG] [Thread-22414] [transport.py] [_log()] client lang: <none>
2025-11-12T20:41:02.878 [DEBUG] [Thread-22414] [transport.py] [_log()] server lang: <none>
2025-11-12T20:41:02.878 [DEBUG] [Thread-22414] [transport.py] [_log()] kex follows: False
2025-11-12T20:41:02.878 [DEBUG] [Thread-22414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:41:02.878 [DEBUG] [Thread-22414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:41:02.879 [DEBUG] [Thread-22414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:41:02.879 [DEBUG] [Thread-22414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:41:02.879 [DEBUG] [Thread-22414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:41:02.879 [DEBUG] [Thread-22414] [transport.py] [_log()] Compression: none
2025-11-12T20:41:02.879 [DEBUG] [Thread-22414] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:41:02.934 [DEBUG] [Thread-22414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:41:02.934 [DEBUG] [Thread-22414] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:41:02.935 [DEBUG] [Thread-22414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:41:02.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:41:02.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:41:02.990 [DEBUG] [Thread-22414] [transport.py] [_log()] userauth is OK
2025-11-12T20:41:02.990 [DEBUG] [Thread-22414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:41:02.990 [DEBUG] [Thread-22414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:41:02.990 [DEBUG] [Thread-22414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:41:02.990 [DEBUG] [Thread-22414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:41:03.009 [INFO] [Thread-22414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:41:03.010 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:41:03.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:41:03.882 [DEBUG] [Thread-22414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:41:03.882 [DEBUG] [Thread-22414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:41:03.930 [DEBUG] [Thread-22414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:41:03.930 [DEBUG] [Thread-22414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:41:03.939 [DEBUG] [Thread-22414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:41:03.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:41:03.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-11-12T20:41:03.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-11-12T20:41:03.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:41:03.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:41:03.968 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:41:03.976 [DEBUG] [Thread-22414] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:41:10.201 [DEBUG] [Thread-22416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:41:25.263 [DEBUG] [Thread-22417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:41:33.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:41:33.998 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:41:33.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-11-12T20:41:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 41, 18), 18.25, 29.64, 0.0, 18.65, 19.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:41:34.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:41:18
2025-11-12T20:41:34.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:41:34.965 [DEBUG] [Thread-22418] [transport.py] [_log()] starting thread (client mode): 0x149170a0
2025-11-12T20:41:34.965 [DEBUG] [Thread-22418] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:41:34.985 [DEBUG] [Thread-22418] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:41:34.985 [INFO] [Thread-22418] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:41:34.988 [DEBUG] [Thread-22418] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:41:34.988 [DEBUG] [Thread-22418] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:41:34.988 [DEBUG] [Thread-22418] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:41:34.988 [DEBUG] [Thread-22418] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:41:34.988 [DEBUG] [Thread-22418] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:41:34.988 [DEBUG] [Thread-22418] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:41:34.988 [DEBUG] [Thread-22418] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:41:34.988 [DEBUG] [Thread-22418] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] client lang: <none>
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] server lang: <none>
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] kex follows: False
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] Compression: none
2025-11-12T20:41:34.989 [DEBUG] [Thread-22418] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:41:35.004 [DEBUG] [Thread-22418] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:41:35.004 [DEBUG] [Thread-22418] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:41:35.004 [DEBUG] [Thread-22418] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:41:35.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:41:35.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:41:35.005 [DEBUG] [Thread-22418] [transport.py] [_log()] userauth is OK
2025-11-12T20:41:35.005 [DEBUG] [Thread-22418] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:41:35.005 [DEBUG] [Thread-22418] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:41:35.005 [DEBUG] [Thread-22418] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:41:35.005 [DEBUG] [Thread-22418] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:41:35.014 [INFO] [Thread-22418] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:41:35.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:41:35.634 [DEBUG] [Thread-22418] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:41:35.634 [DEBUG] [Thread-22418] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:41:35.634 [DEBUG] [Thread-22418] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:41:35.675 [DEBUG] [Thread-22418] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:41:35.675 [DEBUG] [Thread-22418] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:41:35.677 [DEBUG] [Thread-22418] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:41:35.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:41:35.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:41:35.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:41:35.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:41:35.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:41:35.697 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:41:35.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:41:35.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:41:35.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.778557 -999.00  +19.60  16.19     35   +3.80 1 2 1 1 1     0    0 15.14 -40.39 Z.ESw 15.7 16.2 256.8 20.9 20.2 -21.9 -999.0 -999.0 19.9 -20.7 20.1 -21.0
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.778557
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:41:35.698 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:41:18', tmtdew=18.25, humidity=29.64, cloud=0.0, wind=18.65, temperature=19.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:41:19', seeing=0.71, atlas_timestamp='2025-11-12T18:41:07.325', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:39:00')
2025-11-12T20:41:35.699 [DEBUG] [Thread-22418] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:41:35.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:41:35.784 [DEBUG] [Thread-22421] [transport.py] [_log()] starting thread (client mode): 0x149a56c0
2025-11-12T20:41:35.784 [DEBUG] [Thread-22421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:41:35.800 [DEBUG] [Thread-22421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:41:35.800 [INFO] [Thread-22421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:41:35.807 [DEBUG] [Thread-22421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:41:35.807 [DEBUG] [Thread-22421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] client lang: <none>
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] server lang: <none>
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] kex follows: False
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] Compression: none
2025-11-12T20:41:35.808 [DEBUG] [Thread-22421] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:41:35.864 [DEBUG] [Thread-22421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:41:35.864 [DEBUG] [Thread-22421] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:41:35.864 [DEBUG] [Thread-22421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:41:35.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:41:35.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:41:35.921 [DEBUG] [Thread-22421] [transport.py] [_log()] userauth is OK
2025-11-12T20:41:35.921 [DEBUG] [Thread-22421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:41:35.921 [DEBUG] [Thread-22421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:41:35.921 [DEBUG] [Thread-22421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:41:35.921 [DEBUG] [Thread-22421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:41:35.939 [INFO] [Thread-22421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:41:35.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:41:35.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:41:36.791 [DEBUG] [Thread-22421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:41:36.791 [DEBUG] [Thread-22421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:41:36.839 [DEBUG] [Thread-22421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:41:36.839 [DEBUG] [Thread-22421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:41:36.847 [DEBUG] [Thread-22421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:41:36.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:41:36.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-11-12T20:41:36.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-11-12T20:41:36.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:41:36.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:41:36.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:41:36.879 [DEBUG] [Thread-22421] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:41:39.225 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:41:39.226 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:41:40.297 [DEBUG] [Thread-22423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:41:52.691 [DEBUG] [Thread-22424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:41:55.345 [DEBUG] [Thread-22425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:42:06.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:42:06.878 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:42:06.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-11-12T20:42:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 41, 51), 18.27, 29.71, 0.0, 17.06, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:42:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:41:51
2025-11-12T20:42:07.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:42:07.792 [DEBUG] [Thread-22426] [transport.py] [_log()] starting thread (client mode): 0x149aadd0
2025-11-12T20:42:07.792 [DEBUG] [Thread-22426] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:42:07.811 [DEBUG] [Thread-22426] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:42:07.811 [INFO] [Thread-22426] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:42:07.812 [DEBUG] [Thread-22426] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] client lang: <none>
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] server lang: <none>
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] kex follows: False
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] Compression: none
2025-11-12T20:42:07.813 [DEBUG] [Thread-22426] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:42:07.830 [DEBUG] [Thread-22426] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:42:07.831 [DEBUG] [Thread-22426] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:42:07.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:42:07.832 [DEBUG] [Thread-22426] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:42:07.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:42:07.834 [DEBUG] [Thread-22426] [transport.py] [_log()] userauth is OK
2025-11-12T20:42:07.834 [DEBUG] [Thread-22426] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:42:07.834 [DEBUG] [Thread-22426] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:42:07.834 [DEBUG] [Thread-22426] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:42:07.834 [DEBUG] [Thread-22426] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:42:07.860 [INFO] [Thread-22426] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:42:07.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:42:08.424 [DEBUG] [Thread-22426] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:42:08.424 [DEBUG] [Thread-22426] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:42:08.424 [DEBUG] [Thread-22426] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:42:08.464 [DEBUG] [Thread-22426] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:42:08.465 [DEBUG] [Thread-22426] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:42:08.468 [DEBUG] [Thread-22426] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:42:08.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:42:08.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:42:08.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:42:08.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:42:08.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:42:08.491 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:42:08.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:42:08.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:42:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:42:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.778904 -999.00  +19.60  14.95     35   +3.80 1 2 1 1 1     0    0 15.26 -40.41 Z.eSw 13.7 14.9 257.0 18.9 20.2 -21.9 20.1 -21.0 19.8 -20.5 20.1 -21.1
2025-11-12T20:42:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:42:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:42:08.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.778904
2025-11-12T20:42:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:42:08.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:42:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:42:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:42:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:42:08.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:41:51', tmtdew=18.27, humidity=29.71, cloud=0.0, wind=17.06, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:41:51', seeing=0.71, atlas_timestamp='2025-11-12T18:41:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:39:00')
2025-11-12T20:42:08.494 [DEBUG] [Thread-22426] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:42:08.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:42:08.588 [DEBUG] [Thread-22429] [transport.py] [_log()] starting thread (client mode): 0x14922380
2025-11-12T20:42:08.588 [DEBUG] [Thread-22429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:42:08.603 [DEBUG] [Thread-22429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:42:08.604 [INFO] [Thread-22429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:42:08.611 [DEBUG] [Thread-22429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] client lang: <none>
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] server lang: <none>
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] kex follows: False
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:42:08.612 [DEBUG] [Thread-22429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:42:08.613 [DEBUG] [Thread-22429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:42:08.613 [DEBUG] [Thread-22429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:42:08.613 [DEBUG] [Thread-22429] [transport.py] [_log()] Compression: none
2025-11-12T20:42:08.613 [DEBUG] [Thread-22429] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:42:08.670 [DEBUG] [Thread-22429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:42:08.671 [DEBUG] [Thread-22429] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:42:08.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:42:08.672 [DEBUG] [Thread-22429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:42:08.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:42:08.725 [DEBUG] [Thread-22429] [transport.py] [_log()] userauth is OK
2025-11-12T20:42:08.726 [DEBUG] [Thread-22429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:42:08.726 [DEBUG] [Thread-22429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:42:08.726 [DEBUG] [Thread-22429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:42:08.726 [DEBUG] [Thread-22429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:42:08.750 [INFO] [Thread-22429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:42:08.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:42:08.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:42:09.562 [DEBUG] [Thread-22429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:42:09.562 [DEBUG] [Thread-22429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:42:09.614 [DEBUG] [Thread-22429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:42:09.614 [DEBUG] [Thread-22429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:42:09.626 [DEBUG] [Thread-22429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:42:09.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:42:09.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-11-12T20:42:09.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-11-12T20:42:09.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:42:09.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:42:09.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:42:09.672 [DEBUG] [Thread-22429] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:42:10.385 [DEBUG] [Thread-22431 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:42:25.435 [DEBUG] [Thread-22432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:42:39.432 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:42:39.433 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:42:39.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:42:39.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:42:39.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-11-12T20:42:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 42, 23), 18.27, 29.71, 0.0, 16.16, 19.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:42:40.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:42:23
2025-11-12T20:42:40.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:42:40.467 [DEBUG] [Thread-22433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:42:40.598 [DEBUG] [Thread-22434] [transport.py] [_log()] starting thread (client mode): 0x14914b20
2025-11-12T20:42:40.598 [DEBUG] [Thread-22434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:42:40.618 [DEBUG] [Thread-22434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:42:40.618 [INFO] [Thread-22434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] client lang: <none>
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] server lang: <none>
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] kex follows: False
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:42:40.622 [DEBUG] [Thread-22434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:42:40.623 [DEBUG] [Thread-22434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:42:40.623 [DEBUG] [Thread-22434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:42:40.623 [DEBUG] [Thread-22434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:42:40.623 [DEBUG] [Thread-22434] [transport.py] [_log()] Compression: none
2025-11-12T20:42:40.623 [DEBUG] [Thread-22434] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:42:40.640 [DEBUG] [Thread-22434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:42:40.640 [DEBUG] [Thread-22434] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:42:40.640 [DEBUG] [Thread-22434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:42:40.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:42:40.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:42:40.642 [DEBUG] [Thread-22434] [transport.py] [_log()] userauth is OK
2025-11-12T20:42:40.643 [DEBUG] [Thread-22434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:42:40.643 [DEBUG] [Thread-22434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:42:40.643 [DEBUG] [Thread-22434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:42:40.643 [DEBUG] [Thread-22434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:42:40.663 [INFO] [Thread-22434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:42:40.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:42:41.273 [DEBUG] [Thread-22434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:42:41.274 [DEBUG] [Thread-22434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:42:41.274 [DEBUG] [Thread-22434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:42:41.315 [DEBUG] [Thread-22434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:42:41.315 [DEBUG] [Thread-22434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:42:41.318 [DEBUG] [Thread-22434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:42:41.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:42:41.331 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:42:41.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:42:41.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:42:41.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:42:41.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:42:41.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:42:41.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:42:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:42:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.779251 -999.00  +19.60  10.25     35   +3.80 1 2 1 1 1     0    0 15.03 -42.51 Z.eSw 10.9 10.2 244.0 14.4 20.2 -21.9 20.1 -21.0 19.8 -20.7 20.1 -21.1
2025-11-12T20:42:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:42:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:42:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.779251
2025-11-12T20:42:41.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:42:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:42:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:42:41.345 [DEBUG] [Thread-22434] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:42:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:42:41.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:42:41.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:42:23', tmtdew=18.27, humidity=29.71, cloud=0.0, wind=16.16, temperature=19.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:42:23', seeing=0.7, atlas_timestamp='2025-11-12T18:42:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:39:00')
2025-11-12T20:42:41.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:42:41.441 [DEBUG] [Thread-22437] [transport.py] [_log()] starting thread (client mode): 0x14922380
2025-11-12T20:42:41.441 [DEBUG] [Thread-22437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:42:41.456 [DEBUG] [Thread-22437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:42:41.456 [INFO] [Thread-22437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:42:41.463 [DEBUG] [Thread-22437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:42:41.463 [DEBUG] [Thread-22437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:42:41.463 [DEBUG] [Thread-22437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:42:41.463 [DEBUG] [Thread-22437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] client lang: <none>
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] server lang: <none>
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] kex follows: False
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] Compression: none
2025-11-12T20:42:41.464 [DEBUG] [Thread-22437] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:42:41.521 [DEBUG] [Thread-22437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:42:41.522 [DEBUG] [Thread-22437] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:42:41.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:42:41.522 [DEBUG] [Thread-22437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:42:41.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:42:41.577 [DEBUG] [Thread-22437] [transport.py] [_log()] userauth is OK
2025-11-12T20:42:41.577 [DEBUG] [Thread-22437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:42:41.577 [DEBUG] [Thread-22437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:42:41.578 [DEBUG] [Thread-22437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:42:41.578 [DEBUG] [Thread-22437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:42:41.597 [INFO] [Thread-22437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:42:41.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:42:41.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:42:42.460 [DEBUG] [Thread-22437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:42:42.460 [DEBUG] [Thread-22437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:42:42.508 [DEBUG] [Thread-22437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:42:42.508 [DEBUG] [Thread-22437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:42:42.517 [DEBUG] [Thread-22437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:42:42.526 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:42:42.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-11-12T20:42:42.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-11-12T20:42:42.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:42:42.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:42:42.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:42:42.554 [DEBUG] [Thread-22437] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:42:52.744 [DEBUG] [Thread-22439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:42:55.496 [DEBUG] [Thread-22440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:43:10.536 [DEBUG] [Thread-22441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:43:12.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:43:12.560 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:43:12.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-11-12T20:43:13.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 42, 55), 18.21, 29.72, 0.0, 14.73, 19.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:43:13.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:42:55
2025-11-12T20:43:13.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:43:13.469 [DEBUG] [Thread-22442] [transport.py] [_log()] starting thread (client mode): 0x149453f0
2025-11-12T20:43:13.470 [DEBUG] [Thread-22442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:43:13.490 [DEBUG] [Thread-22442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:43:13.490 [INFO] [Thread-22442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:43:13.491 [DEBUG] [Thread-22442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:43:13.491 [DEBUG] [Thread-22442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:43:13.491 [DEBUG] [Thread-22442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:43:13.491 [DEBUG] [Thread-22442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:43:13.491 [DEBUG] [Thread-22442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] client lang: <none>
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] server lang: <none>
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] kex follows: False
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:43:13.492 [DEBUG] [Thread-22442] [transport.py] [_log()] Compression: none
2025-11-12T20:43:13.493 [DEBUG] [Thread-22442] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:43:13.515 [DEBUG] [Thread-22442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:43:13.516 [DEBUG] [Thread-22442] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:43:13.516 [DEBUG] [Thread-22442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:43:13.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:43:13.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:43:13.518 [DEBUG] [Thread-22442] [transport.py] [_log()] userauth is OK
2025-11-12T20:43:13.518 [DEBUG] [Thread-22442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:43:13.518 [DEBUG] [Thread-22442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:43:13.519 [DEBUG] [Thread-22442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:43:13.519 [DEBUG] [Thread-22442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:43:13.541 [INFO] [Thread-22442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:43:13.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:43:14.193 [DEBUG] [Thread-22442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:43:14.193 [DEBUG] [Thread-22442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:43:14.193 [DEBUG] [Thread-22442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:43:14.234 [DEBUG] [Thread-22442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:43:14.234 [DEBUG] [Thread-22442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:43:14.238 [DEBUG] [Thread-22442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:43:14.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:43:14.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:43:14.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:43:14.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:43:14.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:43:14.263 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:43:14.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:43:14.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:43:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:43:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.779598 -999.00  +19.60  17.36     35   +3.80 1 2 1 1 1     0    0 14.94 -46.97 Z.eSw 13.0 17.4 248.4 21.0 20.1 -21.9 20.1 -21.1 19.8 -20.7 20.1 -21.1
2025-11-12T20:43:14.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:43:14.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:43:14.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.779598
2025-11-12T20:43:14.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:43:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:43:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:43:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:43:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:43:14.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:42:55', tmtdew=18.21, humidity=29.72, cloud=0.0, wind=14.73, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:42:55', seeing=0.7, atlas_timestamp='2025-11-12T18:42:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:39:00')
2025-11-12T20:43:14.266 [DEBUG] [Thread-22442] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:43:14.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:43:14.362 [DEBUG] [Thread-22445] [transport.py] [_log()] starting thread (client mode): 0x173bfc10
2025-11-12T20:43:14.362 [DEBUG] [Thread-22445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:43:14.376 [DEBUG] [Thread-22445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:43:14.376 [INFO] [Thread-22445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:43:14.383 [DEBUG] [Thread-22445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] client lang: <none>
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] server lang: <none>
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] kex follows: False
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] Compression: none
2025-11-12T20:43:14.384 [DEBUG] [Thread-22445] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:43:14.440 [DEBUG] [Thread-22445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:43:14.442 [DEBUG] [Thread-22445] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:43:14.443 [DEBUG] [Thread-22445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:43:14.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:43:14.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:43:14.498 [DEBUG] [Thread-22445] [transport.py] [_log()] userauth is OK
2025-11-12T20:43:14.498 [DEBUG] [Thread-22445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:43:14.498 [DEBUG] [Thread-22445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:43:14.498 [DEBUG] [Thread-22445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:43:14.498 [DEBUG] [Thread-22445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:43:14.517 [INFO] [Thread-22445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:43: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-11-12T20:43:14.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:43:15.344 [DEBUG] [Thread-22445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:43:15.344 [DEBUG] [Thread-22445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:43:15.392 [DEBUG] [Thread-22445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:43:15.392 [DEBUG] [Thread-22445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:43:15.401 [DEBUG] [Thread-22445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:43:15.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:43:15.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-11-12T20:43: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') -> 00000000
2025-11-12T20:43:15.428 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:43:15.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:43:15.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:43:15.437 [DEBUG] [Thread-22445] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:43:25.577 [DEBUG] [Thread-22447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:43:39.637 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:43:39.638 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:43:40.626 [DEBUG] [Thread-22448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:43:45.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:43:45.459 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:43:45.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-11-12T20:43:46.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 43, 27), 18.2, 29.74, 0.0, 14.08, 19.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:43:46.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:43:27
2025-11-12T20:43:46.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:43:46.373 [DEBUG] [Thread-22449] [transport.py] [_log()] starting thread (client mode): 0x149a9960
2025-11-12T20:43:46.373 [DEBUG] [Thread-22449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:43:46.391 [DEBUG] [Thread-22449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:43:46.391 [INFO] [Thread-22449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:43:46.393 [DEBUG] [Thread-22449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:43:46.393 [DEBUG] [Thread-22449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:43:46.393 [DEBUG] [Thread-22449] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:43:46.393 [DEBUG] [Thread-22449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] client lang: <none>
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] server lang: <none>
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] kex follows: False
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] Compression: none
2025-11-12T20:43:46.394 [DEBUG] [Thread-22449] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:43:46.412 [DEBUG] [Thread-22449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:43:46.412 [DEBUG] [Thread-22449] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:43:46.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:43:46.413 [DEBUG] [Thread-22449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:43:46.414 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:43:46.415 [DEBUG] [Thread-22449] [transport.py] [_log()] userauth is OK
2025-11-12T20:43:46.416 [DEBUG] [Thread-22449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:43:46.416 [DEBUG] [Thread-22449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:43:46.416 [DEBUG] [Thread-22449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:43:46.416 [DEBUG] [Thread-22449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:43:46.440 [INFO] [Thread-22449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:43:46.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:43:47.053 [DEBUG] [Thread-22449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:43:47.053 [DEBUG] [Thread-22449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:43:47.053 [DEBUG] [Thread-22449] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:43:47.094 [DEBUG] [Thread-22449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:43:47.094 [DEBUG] [Thread-22449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:43:47.097 [DEBUG] [Thread-22449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:43:47.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:43:47.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:43:47.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:43:47.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:43:47.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:43:47.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:43:47.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:43:47.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:43:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:43:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.780293 -999.00  +19.60  15.14     35   +3.80 1 2 1 1 1     0    0 14.59 -47.09 Z.ESw 13.3 15.1 256.0 17.0 20.1 -22.0 20.1 -21.1 19.8 -20.7 20.1 -21.1
2025-11-12T20:43:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:43:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:43:47.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.780293
2025-11-12T20:43:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:43:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:43:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:43:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:43:47.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:43:47.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:43:27', tmtdew=18.2, humidity=29.74, cloud=0.0, wind=14.08, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:43:27', seeing=0.63, atlas_timestamp='2025-11-12T18:43:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:39:00')
2025-11-12T20:43:47.122 [DEBUG] [Thread-22449] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:43:47.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:43:47.218 [DEBUG] [Thread-22452] [transport.py] [_log()] starting thread (client mode): 0x149abee0
2025-11-12T20:43:47.218 [DEBUG] [Thread-22452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:43:47.233 [DEBUG] [Thread-22452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:43:47.233 [INFO] [Thread-22452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:43:47.240 [DEBUG] [Thread-22452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:43:47.240 [DEBUG] [Thread-22452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:43:47.240 [DEBUG] [Thread-22452] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] client lang: <none>
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] server lang: <none>
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] kex follows: False
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:43:47.241 [DEBUG] [Thread-22452] [transport.py] [_log()] Compression: none
2025-11-12T20:43:47.242 [DEBUG] [Thread-22452] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:43:47.296 [DEBUG] [Thread-22452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:43:47.297 [DEBUG] [Thread-22452] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:43:47.297 [DEBUG] [Thread-22452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:43:47.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:43:47.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:43:47.353 [DEBUG] [Thread-22452] [transport.py] [_log()] userauth is OK
2025-11-12T20:43:47.353 [DEBUG] [Thread-22452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:43:47.353 [DEBUG] [Thread-22452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:43:47.353 [DEBUG] [Thread-22452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:43:47.353 [DEBUG] [Thread-22452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:43:47.375 [INFO] [Thread-22452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:43:47.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:43:47.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:43:48.214 [DEBUG] [Thread-22452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:43:48.215 [DEBUG] [Thread-22452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:43:48.262 [DEBUG] [Thread-22452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:43:48.262 [DEBUG] [Thread-22452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:43:48.275 [DEBUG] [Thread-22452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:43:48.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:43:48.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-11-12T20:43:48.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-11-12T20:43:48.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:43:48.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:43:48.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:43:48.308 [DEBUG] [Thread-22452] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:43:52.801 [DEBUG] [Thread-22454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:43:55.661 [DEBUG] [Thread-22455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:44:10.718 [DEBUG] [Thread-22456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:44:18.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:44:18.305 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:44:18.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-11-12T20:44:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 43, 59), 18.16, 29.72, 0.0, 15.12, 19.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:44:18.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:43:59
2025-11-12T20:44:19.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:44:19.207 [DEBUG] [Thread-22457] [transport.py] [_log()] starting thread (client mode): 0x14945720
2025-11-12T20:44:19.207 [DEBUG] [Thread-22457] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:44:19.224 [DEBUG] [Thread-22457] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:44:19.225 [INFO] [Thread-22457] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:44:19.226 [DEBUG] [Thread-22457] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] client lang: <none>
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] server lang: <none>
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] kex follows: False
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] Compression: none
2025-11-12T20:44:19.227 [DEBUG] [Thread-22457] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:44:19.243 [DEBUG] [Thread-22457] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:44:19.244 [DEBUG] [Thread-22457] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:44:19.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:44:19.245 [DEBUG] [Thread-22457] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:44:19.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:44:19.246 [DEBUG] [Thread-22457] [transport.py] [_log()] userauth is OK
2025-11-12T20:44:19.247 [DEBUG] [Thread-22457] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:44:19.247 [DEBUG] [Thread-22457] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:44:19.247 [DEBUG] [Thread-22457] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:44:19.247 [DEBUG] [Thread-22457] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:44:19.283 [INFO] [Thread-22457] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:44:19.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:44:19.862 [DEBUG] [Thread-22457] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:44:19.862 [DEBUG] [Thread-22457] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:44:19.863 [DEBUG] [Thread-22457] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:44:19.903 [DEBUG] [Thread-22457] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:44:19.903 [DEBUG] [Thread-22457] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:44:19.906 [DEBUG] [Thread-22457] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:44:19.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:44:19.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:44:19.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:44:19.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:44:19.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:44:19.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:44:19.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:44:19.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:44:19.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:44:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.780640 -999.00  +19.60  12.04     35   +3.80 1 2 1 1 1     0    0 14.88 -43.38 Z.ESw 13.4 12.0 258.6 14.9 20.1 -21.9 20.1 -21.0 19.8 -20.6 20.1 -21.1
2025-11-12T20:44:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:44:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:44:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.780640
2025-11-12T20:44:19.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:44:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:44:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:44:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:44:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:44:19.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:43:59', tmtdew=18.16, humidity=29.72, cloud=0.0, wind=15.12, temperature=19.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:43:59', seeing=0.63, atlas_timestamp='2025-11-12T18:44:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:42:00')
2025-11-12T20:44:19.925 [DEBUG] [Thread-22457] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:44:20.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:44:20.021 [DEBUG] [Thread-22460] [transport.py] [_log()] starting thread (client mode): 0x14917af0
2025-11-12T20:44:20.021 [DEBUG] [Thread-22460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:44:20.035 [DEBUG] [Thread-22460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:44:20.035 [INFO] [Thread-22460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:44:20.043 [DEBUG] [Thread-22460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:44:20.043 [DEBUG] [Thread-22460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] client lang: <none>
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] server lang: <none>
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] kex follows: False
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:44:20.044 [DEBUG] [Thread-22460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:44:20.045 [DEBUG] [Thread-22460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:44:20.045 [DEBUG] [Thread-22460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:44:20.045 [DEBUG] [Thread-22460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:44:20.045 [DEBUG] [Thread-22460] [transport.py] [_log()] Compression: none
2025-11-12T20:44:20.045 [DEBUG] [Thread-22460] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:44:20.102 [DEBUG] [Thread-22460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:44:20.102 [DEBUG] [Thread-22460] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:44:20.103 [DEBUG] [Thread-22460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:44:20.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:44:20.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:44:20.157 [DEBUG] [Thread-22460] [transport.py] [_log()] userauth is OK
2025-11-12T20:44:20.158 [DEBUG] [Thread-22460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:44:20.158 [DEBUG] [Thread-22460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:44:20.158 [DEBUG] [Thread-22460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:44:20.158 [DEBUG] [Thread-22460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:44:20.177 [INFO] [Thread-22460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:44:20.177 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:44:20.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:44:21.002 [DEBUG] [Thread-22460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:44:21.003 [DEBUG] [Thread-22460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:44:21.051 [DEBUG] [Thread-22460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:44:21.051 [DEBUG] [Thread-22460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:44:21.060 [DEBUG] [Thread-22460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:44:21.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:44:21.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-11-12T20:44:21.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-11-12T20:44:21.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:44:21.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:44:21.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:44:21.098 [DEBUG] [Thread-22460] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:44:25.753 [DEBUG] [Thread-22462 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:44:39.845 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:44:39.846 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:44:40.804 [DEBUG] [Thread-22463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:44:51.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:44:51.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:44:51.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-11-12T20:44:51.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 44, 31), 18.13, 29.79, 0.0, 16.37, 19.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:44:51.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:44:31
2025-11-12T20:44:51.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:44:52.047 [DEBUG] [Thread-22464] [transport.py] [_log()] starting thread (client mode): 0x149a8610
2025-11-12T20:44:52.047 [DEBUG] [Thread-22464] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:44:52.067 [DEBUG] [Thread-22464] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:44:52.067 [INFO] [Thread-22464] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:44:52.070 [DEBUG] [Thread-22464] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:44:52.070 [DEBUG] [Thread-22464] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:44:52.070 [DEBUG] [Thread-22464] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:44:52.070 [DEBUG] [Thread-22464] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] client lang: <none>
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] server lang: <none>
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] kex follows: False
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] Compression: none
2025-11-12T20:44:52.071 [DEBUG] [Thread-22464] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:44:52.089 [DEBUG] [Thread-22464] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:44:52.090 [DEBUG] [Thread-22464] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:44:52.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:44:52.091 [DEBUG] [Thread-22464] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:44:52.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:44:52.093 [DEBUG] [Thread-22464] [transport.py] [_log()] userauth is OK
2025-11-12T20:44:52.093 [DEBUG] [Thread-22464] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:44:52.093 [DEBUG] [Thread-22464] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:44:52.093 [DEBUG] [Thread-22464] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:44:52.093 [DEBUG] [Thread-22464] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:44:52.109 [INFO] [Thread-22464] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:44:52.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:44:52.832 [DEBUG] [Thread-22464] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:44:52.832 [DEBUG] [Thread-22464] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:44:52.832 [DEBUG] [Thread-22464] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:44:52.855 [DEBUG] [Thread-22466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:44:52.873 [DEBUG] [Thread-22464] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:44:52.873 [DEBUG] [Thread-22464] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:44:52.874 [DEBUG] [Thread-22464] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:44:52.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:44:52.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:44:52.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:44:52.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:44:52.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:44:52.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:44:52.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:44:52.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:44:52.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:44:52.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.780640 -999.00  +19.60  12.04     35   +3.80 1 2 1 1 1     0    0 14.88 -43.38 Z.ESw 13.4 12.0 258.6 14.9 20.1 -21.9 20.1 -21.0 19.8 -20.6 20.1 -21.1
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.780640
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:44:52.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:44:31', tmtdew=18.13, humidity=29.79, cloud=0.0, wind=16.37, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:44:31', seeing=0.74, atlas_timestamp='2025-11-12T18:44:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:42:00')
2025-11-12T20:44:52.886 [DEBUG] [Thread-22464] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:44:52.969 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:44:52.981 [DEBUG] [Thread-22468] [transport.py] [_log()] starting thread (client mode): 0x149442e0
2025-11-12T20:44:52.982 [DEBUG] [Thread-22468] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:44:52.996 [DEBUG] [Thread-22468] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:44:52.996 [INFO] [Thread-22468] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:44:53.004 [DEBUG] [Thread-22468] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:44:53.004 [DEBUG] [Thread-22468] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:44:53.004 [DEBUG] [Thread-22468] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:44:53.004 [DEBUG] [Thread-22468] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:44:53.004 [DEBUG] [Thread-22468] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:44:53.004 [DEBUG] [Thread-22468] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] client lang: <none>
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] server lang: <none>
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] kex follows: False
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:44:53.005 [DEBUG] [Thread-22468] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:44:53.006 [DEBUG] [Thread-22468] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:44:53.006 [DEBUG] [Thread-22468] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:44:53.006 [DEBUG] [Thread-22468] [transport.py] [_log()] Compression: none
2025-11-12T20:44:53.006 [DEBUG] [Thread-22468] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:44:53.062 [DEBUG] [Thread-22468] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:44:53.063 [DEBUG] [Thread-22468] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:44:53.063 [DEBUG] [Thread-22468] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:44:53.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:44:53.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:44:53.121 [DEBUG] [Thread-22468] [transport.py] [_log()] userauth is OK
2025-11-12T20:44:53.122 [DEBUG] [Thread-22468] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:44:53.122 [DEBUG] [Thread-22468] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:44:53.122 [DEBUG] [Thread-22468] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:44:53.122 [DEBUG] [Thread-22468] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:44:53.140 [INFO] [Thread-22468] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:44:53.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:44:53.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:44:53.962 [DEBUG] [Thread-22468] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:44:53.962 [DEBUG] [Thread-22468] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:44:54.010 [DEBUG] [Thread-22468] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:44:54.010 [DEBUG] [Thread-22468] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:44:54.019 [DEBUG] [Thread-22468] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:44:54.028 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:44: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')
2025-11-12T20:44:54.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-11-12T20:44:54.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:44:54.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:44:54.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:44:54.056 [DEBUG] [Thread-22468] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:44:55.839 [DEBUG] [Thread-22470 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:45:10.898 [DEBUG] [Thread-22471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:45:24.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:45:24.049 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:45:24.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-11-12T20:45:24.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 45, 3), 18.11, 29.82, 0.0, 15.14, 19.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:45:24.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:45:03
2025-11-12T20:45:24.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:45:25.006 [DEBUG] [Thread-22472] [transport.py] [_log()] starting thread (client mode): 0x14906110
2025-11-12T20:45:25.006 [DEBUG] [Thread-22472] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:45:25.026 [DEBUG] [Thread-22472] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:45:25.026 [INFO] [Thread-22472] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] client lang: <none>
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] server lang: <none>
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] kex follows: False
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] Compression: none
2025-11-12T20:45:25.030 [DEBUG] [Thread-22472] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:45:25.047 [DEBUG] [Thread-22472] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:45:25.047 [DEBUG] [Thread-22472] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:45:25.047 [DEBUG] [Thread-22472] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:45:25.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:45:25.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:45:25.048 [DEBUG] [Thread-22472] [transport.py] [_log()] userauth is OK
2025-11-12T20:45:25.048 [DEBUG] [Thread-22472] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:45:25.048 [DEBUG] [Thread-22472] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:45:25.048 [DEBUG] [Thread-22472] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:45:25.048 [DEBUG] [Thread-22472] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:45:25.064 [INFO] [Thread-22472] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:45:25.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:45:25.691 [DEBUG] [Thread-22472] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:45:25.692 [DEBUG] [Thread-22472] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:45:25.692 [DEBUG] [Thread-22472] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:45:25.732 [DEBUG] [Thread-22472] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:45:25.732 [DEBUG] [Thread-22472] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:45:25.734 [DEBUG] [Thread-22472] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:45:25.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:45:25.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:45:25.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:45:25.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:45:25.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:45:25.752 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:45:25.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.780987 -999.00  +19.60  16.08     35   +3.80 1 2 1 1 1     0    0 14.61 -44.11 Z.Es. 15.2 16.1 262.6 19.3 20.2 -21.8 20.1 -21.1 19.8 -20.7 20.0 -21.2
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.780987
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:45:25.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:45:03', tmtdew=18.11, humidity=29.82, cloud=0.0, wind=15.14, temperature=19.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:45:03', seeing=0.69, atlas_timestamp='2025-11-12T18:44:37.277', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:42:00')
2025-11-12T20:45:25.753 [DEBUG] [Thread-22472] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:45:25.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:45:25.841 [DEBUG] [Thread-22475] [transport.py] [_log()] starting thread (client mode): 0x14906ef0
2025-11-12T20:45:25.841 [DEBUG] [Thread-22475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:45:25.856 [DEBUG] [Thread-22475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:45:25.856 [INFO] [Thread-22475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:45:25.863 [DEBUG] [Thread-22475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:45:25.863 [DEBUG] [Thread-22475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:45:25.863 [DEBUG] [Thread-22475] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:45:25.863 [DEBUG] [Thread-22475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:45:25.863 [DEBUG] [Thread-22475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:45:25.863 [DEBUG] [Thread-22475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:45:25.863 [DEBUG] [Thread-22475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] client lang: <none>
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] server lang: <none>
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] kex follows: False
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] Compression: none
2025-11-12T20:45:25.864 [DEBUG] [Thread-22475] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:45:25.920 [DEBUG] [Thread-22475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:45:25.920 [DEBUG] [Thread-22475] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:45:25.920 [DEBUG] [Thread-22475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:45:25.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:45:25.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:45:25.936 [DEBUG] [Thread-22477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:45:25.977 [DEBUG] [Thread-22475] [transport.py] [_log()] userauth is OK
2025-11-12T20:45:25.977 [DEBUG] [Thread-22475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:45:25.977 [DEBUG] [Thread-22475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:45:25.977 [DEBUG] [Thread-22475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:45:25.977 [DEBUG] [Thread-22475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:45:25.992 [INFO] [Thread-22475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:45:25.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:45:25.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:45:26.819 [DEBUG] [Thread-22475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:45:26.819 [DEBUG] [Thread-22475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:45:26.867 [DEBUG] [Thread-22475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:45:26.867 [DEBUG] [Thread-22475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:45:26.877 [DEBUG] [Thread-22475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:45:26.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:45:26.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-11-12T20:45:26.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-11-12T20:45:26.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:45:26.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:45:26.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:45:26.909 [DEBUG] [Thread-22475] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:45:40.052 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:45:40.054 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:45:40.982 [DEBUG] [Thread-22478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:45:52.910 [DEBUG] [Thread-22479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:45:56.018 [DEBUG] [Thread-22480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:45:56.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:45:56.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:45:56.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-11-12T20:45:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 45, 35), 18.13, 29.79, 0.0, 12.97, 19.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:45:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:45:35
2025-11-12T20:45:57.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:45:57.858 [DEBUG] [Thread-22481] [transport.py] [_log()] starting thread (client mode): 0x14947130
2025-11-12T20:45:57.858 [DEBUG] [Thread-22481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:45:57.879 [DEBUG] [Thread-22481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:45:57.879 [INFO] [Thread-22481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:45:57.883 [DEBUG] [Thread-22481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:45:57.883 [DEBUG] [Thread-22481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:45:57.883 [DEBUG] [Thread-22481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:45:57.883 [DEBUG] [Thread-22481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:45:57.883 [DEBUG] [Thread-22481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:45:57.883 [DEBUG] [Thread-22481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:45:57.883 [DEBUG] [Thread-22481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:45:57.883 [DEBUG] [Thread-22481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] client lang: <none>
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] server lang: <none>
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] kex follows: False
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] Compression: none
2025-11-12T20:45:57.884 [DEBUG] [Thread-22481] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:45:57.902 [DEBUG] [Thread-22481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:45:57.902 [DEBUG] [Thread-22481] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:45:57.903 [DEBUG] [Thread-22481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:45:57.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:45:57.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:45:57.904 [DEBUG] [Thread-22481] [transport.py] [_log()] userauth is OK
2025-11-12T20:45:57.905 [DEBUG] [Thread-22481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:45:57.905 [DEBUG] [Thread-22481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:45:57.905 [DEBUG] [Thread-22481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:45:57.905 [DEBUG] [Thread-22481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:45:57.939 [INFO] [Thread-22481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:45:57.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:45:58.608 [DEBUG] [Thread-22481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:45:58.608 [DEBUG] [Thread-22481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:45:58.609 [DEBUG] [Thread-22481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:45:58.649 [DEBUG] [Thread-22481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:45:58.649 [DEBUG] [Thread-22481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:45:58.652 [DEBUG] [Thread-22481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:45:58.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:45:58.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:45:58.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:45:58.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:45:58.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:45:58.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:45:58.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:45:58.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:45:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:45:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.781334 -999.00  +19.50  14.95     35   +3.80 1 2 1 1 1     0    0 14.96 -44.03 Z.ES. 9.7 14.9 266.0 19.4 20.1 -22.0 20.0 -21.0 19.8 -20.7 20.0 -21.3
2025-11-12T20:45:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:45:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:45:58.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.781334
2025-11-12T20:45:58.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:45:58.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:45:58.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:45:58.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:45:58.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:45:58.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:45:35', tmtdew=18.13, humidity=29.79, cloud=0.0, wind=12.97, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:45:35', seeing=0.69, atlas_timestamp='2025-11-12T18:45:07.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:42:00')
2025-11-12T20:45:58.677 [DEBUG] [Thread-22481] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:45:58.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:45:58.764 [DEBUG] [Thread-22484] [transport.py] [_log()] starting thread (client mode): 0x149474f0
2025-11-12T20:45:58.764 [DEBUG] [Thread-22484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:45:58.779 [DEBUG] [Thread-22484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:45:58.780 [INFO] [Thread-22484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:45:58.787 [DEBUG] [Thread-22484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:45:58.787 [DEBUG] [Thread-22484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:45:58.787 [DEBUG] [Thread-22484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:45:58.787 [DEBUG] [Thread-22484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:45:58.787 [DEBUG] [Thread-22484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] client lang: <none>
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] server lang: <none>
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] kex follows: False
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:45:58.788 [DEBUG] [Thread-22484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:45:58.789 [DEBUG] [Thread-22484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:45:58.789 [DEBUG] [Thread-22484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:45:58.789 [DEBUG] [Thread-22484] [transport.py] [_log()] Compression: none
2025-11-12T20:45:58.789 [DEBUG] [Thread-22484] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:45:58.845 [DEBUG] [Thread-22484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:45:58.845 [DEBUG] [Thread-22484] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:45:58.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:45:58.847 [DEBUG] [Thread-22484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:45:58.847 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:45:58.901 [DEBUG] [Thread-22484] [transport.py] [_log()] userauth is OK
2025-11-12T20:45:58.901 [DEBUG] [Thread-22484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:45:58.901 [DEBUG] [Thread-22484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:45:58.901 [DEBUG] [Thread-22484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:45:58.901 [DEBUG] [Thread-22484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:45:58.924 [INFO] [Thread-22484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:45:58.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:45:58.925 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:45:59.741 [DEBUG] [Thread-22484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:45:59.742 [DEBUG] [Thread-22484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:45:59.790 [DEBUG] [Thread-22484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:45:59.790 [DEBUG] [Thread-22484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:45:59.799 [DEBUG] [Thread-22484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:45:59.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:45:59.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-11-12T20:45:59.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') -> 00000000
2025-11-12T20:45:59.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:45:59.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:45:59.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:45:59.834 [DEBUG] [Thread-22484] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:46:11.045 [DEBUG] [Thread-22486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:46:26.107 [DEBUG] [Thread-22487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:46:29.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:46:29.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:46:29.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:46:30.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 46, 7), 18.12, 29.79, 0.0, 13.11, 19.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:46:30.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:46:07
2025-11-12T20:46:30.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:46:30.738 [DEBUG] [Thread-22488] [transport.py] [_log()] starting thread (client mode): 0x14917280
2025-11-12T20:46:30.739 [DEBUG] [Thread-22488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:46:30.758 [DEBUG] [Thread-22488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:46:30.759 [INFO] [Thread-22488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:46:30.762 [DEBUG] [Thread-22488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:46:30.762 [DEBUG] [Thread-22488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:46:30.762 [DEBUG] [Thread-22488] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:46:30.762 [DEBUG] [Thread-22488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:46:30.762 [DEBUG] [Thread-22488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:46:30.762 [DEBUG] [Thread-22488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] client lang: <none>
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] server lang: <none>
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] kex follows: False
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] Compression: none
2025-11-12T20:46:30.763 [DEBUG] [Thread-22488] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:46:30.782 [DEBUG] [Thread-22488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:46:30.783 [DEBUG] [Thread-22488] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:46:30.783 [DEBUG] [Thread-22488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:46:30.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:46:30.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:46:30.785 [DEBUG] [Thread-22488] [transport.py] [_log()] userauth is OK
2025-11-12T20:46:30.786 [DEBUG] [Thread-22488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:46:30.786 [DEBUG] [Thread-22488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:46:30.786 [DEBUG] [Thread-22488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:46:30.786 [DEBUG] [Thread-22488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:46:30.821 [INFO] [Thread-22488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:46:30.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:46:31.428 [DEBUG] [Thread-22488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:46:31.428 [DEBUG] [Thread-22488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:46:31.428 [DEBUG] [Thread-22488] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:46:31.468 [DEBUG] [Thread-22488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:46:31.468 [DEBUG] [Thread-22488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:46:31.471 [DEBUG] [Thread-22488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:46:31.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:46:31.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:46:31.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:46:31.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:46:31.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:46:31.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:46:31.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:46:31.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:46:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:46:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.781681 -999.00  +19.50  10.25     35   +3.80 1 2 1 1 1     0    0 14.98 -42.66 Z.ES. 11.9 10.2 247.1 15.5 20.1 -22.0 20.1 -21.1 19.8 -20.6 20.0 -21.1
2025-11-12T20:46:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:46:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:46:31.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.781681
2025-11-12T20:46:31.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:46:31.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:46:31.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:46:31.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:46:31.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:46:31.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:46:07', tmtdew=18.12, humidity=29.79, cloud=0.0, wind=13.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-11-12T20:46:07', seeing=0.79, atlas_timestamp='2025-11-12T18:45:37.238', atlas_cloud=2, atlas_rain=1, zp_data=[0.473749999999999, 0.8712499999999999, 1.0212500000000002, 1.0939999999999994, 0.7445000000000004, 0.8822500000000009, 0.7589999999999995, 0.957250000000001, 1.1594999999999995, 1.1059999999999999, 0.8712499999999999, 1.2190000000000003, 1.1389999999999993, 1.4677499999999997, 2.1869999999999994, 1.1389999999999993, 0.83725, nan, 1.8549999999999986, 1.3627499999999984, 1.5789999999999988, nan, nan, 1.6957500000000003, 1.1639999999999988, nan, nan, nan, 0.8529999999999998, nan, nan, nan, 1.4197499999999987], zp_timestamp='2025-11-12T18:42:00')
2025-11-12T20:46:31.498 [DEBUG] [Thread-22488] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:46:31.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:46:31.605 [DEBUG] [Thread-22491] [transport.py] [_log()] starting thread (client mode): 0x149aa6b0
2025-11-12T20:46:31.605 [DEBUG] [Thread-22491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:46:31.619 [DEBUG] [Thread-22491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:46:31.620 [INFO] [Thread-22491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] client lang: <none>
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] server lang: <none>
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] kex follows: False
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] Compression: none
2025-11-12T20:46:31.627 [DEBUG] [Thread-22491] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:46:31.685 [DEBUG] [Thread-22491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:46:31.686 [DEBUG] [Thread-22491] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:46:31.686 [DEBUG] [Thread-22491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:46:31.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:46:31.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:46:31.741 [DEBUG] [Thread-22491] [transport.py] [_log()] userauth is OK
2025-11-12T20:46:31.742 [DEBUG] [Thread-22491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:46:31.742 [DEBUG] [Thread-22491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:46:31.742 [DEBUG] [Thread-22491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:46:31.742 [DEBUG] [Thread-22491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:46:31.761 [INFO] [Thread-22491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:46:31.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:46:31.762 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:46:32.586 [DEBUG] [Thread-22491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:46:32.587 [DEBUG] [Thread-22491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:46:32.635 [DEBUG] [Thread-22491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:46:32.635 [DEBUG] [Thread-22491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:46:32.644 [DEBUG] [Thread-22491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:46:32.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:46:32.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-11-12T20:46:32.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-11-12T20:46:32.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:46:32.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:46:32.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:46:32.681 [DEBUG] [Thread-22491] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:46:40.261 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:46:40.261 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:46:41.145 [DEBUG] [Thread-22493 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:46:52.967 [DEBUG] [Thread-22494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:46:56.184 [DEBUG] [Thread-22495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:47:02.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:47:02.703 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:47:02.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-11-12T20:47:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 46, 39), 18.12, 29.79, 0.0, 15.1, 19.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:47:03.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:46:39
2025-11-12T20:47:03.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:47:03.620 [DEBUG] [Thread-22496] [transport.py] [_log()] starting thread (client mode): 0x14915210
2025-11-12T20:47:03.620 [DEBUG] [Thread-22496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:47:03.641 [DEBUG] [Thread-22496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:47:03.641 [INFO] [Thread-22496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] client lang: <none>
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] server lang: <none>
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] kex follows: False
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] Compression: none
2025-11-12T20:47:03.644 [DEBUG] [Thread-22496] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:47:03.664 [DEBUG] [Thread-22496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:47:03.665 [DEBUG] [Thread-22496] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:47:03.666 [DEBUG] [Thread-22496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:47:03.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:47:03.666 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:47:03.667 [DEBUG] [Thread-22496] [transport.py] [_log()] userauth is OK
2025-11-12T20:47:03.668 [DEBUG] [Thread-22496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:47:03.668 [DEBUG] [Thread-22496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:47:03.668 [DEBUG] [Thread-22496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:47:03.668 [DEBUG] [Thread-22496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:47:03.684 [INFO] [Thread-22496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:47:03.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:47:04.338 [DEBUG] [Thread-22496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:47:04.338 [DEBUG] [Thread-22496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:47:04.339 [DEBUG] [Thread-22496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:47:04.378 [DEBUG] [Thread-22496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:47:04.379 [DEBUG] [Thread-22496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:47:04.382 [DEBUG] [Thread-22496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:47:04.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:47:04.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:47:04.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:47:04.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:47:04.419 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:47:04.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:47:04.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:47:04.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:47:04.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:47:04.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.782029 -999.00  +19.50   9.83     35   +3.80 1 2 1 1 1     0    0 14.91 -42.53 Z.Esw 5.7 9.8 270.2 15.7 20.1 -22.0 20.0 -21.1 19.8 -20.6 20.0 -21.2
2025-11-12T20:47:04.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:47:04.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:47:04.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.782029
2025-11-12T20:47:04.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:47:04.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:47:04.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:47:04.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:47:04.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:47:04.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:46:39', tmtdew=18.12, humidity=29.79, cloud=0.0, wind=15.1, temperature=19.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:46:39', seeing=0.91, atlas_timestamp='2025-11-12T18:46:07.306', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:46:00')
2025-11-12T20:47:04.425 [DEBUG] [Thread-22496] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:47:04.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:47:04.519 [DEBUG] [Thread-22499] [transport.py] [_log()] starting thread (client mode): 0x173bc460
2025-11-12T20:47:04.519 [DEBUG] [Thread-22499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:47:04.534 [DEBUG] [Thread-22499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:47:04.534 [INFO] [Thread-22499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:47:04.541 [DEBUG] [Thread-22499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:47:04.541 [DEBUG] [Thread-22499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] client lang: <none>
2025-11-12T20:47:04.542 [DEBUG] [Thread-22499] [transport.py] [_log()] server lang: <none>
2025-11-12T20:47:04.543 [DEBUG] [Thread-22499] [transport.py] [_log()] kex follows: False
2025-11-12T20:47:04.543 [DEBUG] [Thread-22499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:47:04.543 [DEBUG] [Thread-22499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:47:04.543 [DEBUG] [Thread-22499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:47:04.543 [DEBUG] [Thread-22499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:47:04.543 [DEBUG] [Thread-22499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:47:04.543 [DEBUG] [Thread-22499] [transport.py] [_log()] Compression: none
2025-11-12T20:47:04.544 [DEBUG] [Thread-22499] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:47:04.604 [DEBUG] [Thread-22499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:47:04.605 [DEBUG] [Thread-22499] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:47:04.606 [DEBUG] [Thread-22499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:47:04.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:47:04.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:47:04.661 [DEBUG] [Thread-22499] [transport.py] [_log()] userauth is OK
2025-11-12T20:47:04.662 [DEBUG] [Thread-22499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:47:04.662 [DEBUG] [Thread-22499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:47:04.662 [DEBUG] [Thread-22499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:47:04.662 [DEBUG] [Thread-22499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:47:04.681 [INFO] [Thread-22499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:47:04.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:47:04.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:47:05.562 [DEBUG] [Thread-22499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:47:05.562 [DEBUG] [Thread-22499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:47:05.613 [DEBUG] [Thread-22499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:47:05.614 [DEBUG] [Thread-22499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:47:05.623 [DEBUG] [Thread-22499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:47:05.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:47:05.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-11-12T20:47:05.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:47:05.650 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:47:05.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:47:05.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:47:05.659 [DEBUG] [Thread-22499] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:47:11.221 [DEBUG] [Thread-22501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:47:26.273 [DEBUG] [Thread-22502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:47:35.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:47:35.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:47:35.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-11-12T20:47:36.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 47, 11), 18.1, 29.82, 0.0, 14.96, 19.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:47:36.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:47:11
2025-11-12T20:47:36.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:47:36.591 [DEBUG] [Thread-22503] [transport.py] [_log()] starting thread (client mode): 0x149ab880
2025-11-12T20:47:36.591 [DEBUG] [Thread-22503] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:47:36.611 [DEBUG] [Thread-22503] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:47:36.611 [INFO] [Thread-22503] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:47:36.614 [DEBUG] [Thread-22503] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] client lang: <none>
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] server lang: <none>
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] kex follows: False
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] Compression: none
2025-11-12T20:47:36.615 [DEBUG] [Thread-22503] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:47:36.636 [DEBUG] [Thread-22503] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:47:36.636 [DEBUG] [Thread-22503] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:47:36.637 [DEBUG] [Thread-22503] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:47:36.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:47:36.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:47:36.681 [DEBUG] [Thread-22503] [transport.py] [_log()] userauth is OK
2025-11-12T20:47:36.681 [DEBUG] [Thread-22503] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:47:36.681 [DEBUG] [Thread-22503] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:47:36.681 [DEBUG] [Thread-22503] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:47:36.681 [DEBUG] [Thread-22503] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:47:36.712 [INFO] [Thread-22503] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:47:36.713 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:47:37.338 [DEBUG] [Thread-22503] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:47:37.338 [DEBUG] [Thread-22503] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:47:37.339 [DEBUG] [Thread-22503] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:47:37.380 [DEBUG] [Thread-22503] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:47:37.380 [DEBUG] [Thread-22503] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:47:37.383 [DEBUG] [Thread-22503] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:47:37.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:47:37.395 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:47:37.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:47:37.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:47:37.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:47:37.406 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:47:37.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:47:37.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:47:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:47:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.782723 -999.00  +19.50   8.85     35   +3.80 1 2 1 1 1     0    0 14.93 -40.79 Z.EsW 11.3 8.8 263.2 15.1 20.1 -22.1 20.0 -21.1 19.6 -20.8 19.9 -21.2
2025-11-12T20:47:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:47:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:47:37.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.782723
2025-11-12T20:47:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:47:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:47:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:47:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:47:37.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:47:37.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:47:11', tmtdew=18.1, humidity=29.82, cloud=0.0, wind=14.96, temperature=19.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:47:11', seeing=0.91, atlas_timestamp='2025-11-12T18:47:07.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:46:00')
2025-11-12T20:47:37.409 [DEBUG] [Thread-22503] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:47:37.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:47:37.505 [DEBUG] [Thread-22506] [transport.py] [_log()] starting thread (client mode): 0x173bd1e0
2025-11-12T20:47:37.505 [DEBUG] [Thread-22506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:47:37.520 [DEBUG] [Thread-22506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:47:37.520 [INFO] [Thread-22506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:47:37.528 [DEBUG] [Thread-22506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:47:37.528 [DEBUG] [Thread-22506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:47:37.528 [DEBUG] [Thread-22506] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:47:37.528 [DEBUG] [Thread-22506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:47:37.528 [DEBUG] [Thread-22506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:47:37.528 [DEBUG] [Thread-22506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] client lang: <none>
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] server lang: <none>
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] kex follows: False
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:47:37.529 [DEBUG] [Thread-22506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:47:37.530 [DEBUG] [Thread-22506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:47:37.530 [DEBUG] [Thread-22506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:47:37.530 [DEBUG] [Thread-22506] [transport.py] [_log()] Compression: none
2025-11-12T20:47:37.530 [DEBUG] [Thread-22506] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:47:37.586 [DEBUG] [Thread-22506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:47:37.587 [DEBUG] [Thread-22506] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:47:37.588 [DEBUG] [Thread-22506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:47:37.588 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:47:37.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:47:37.642 [DEBUG] [Thread-22506] [transport.py] [_log()] userauth is OK
2025-11-12T20:47:37.642 [DEBUG] [Thread-22506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:47:37.642 [DEBUG] [Thread-22506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:47:37.642 [DEBUG] [Thread-22506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:47:37.642 [DEBUG] [Thread-22506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:47:37.661 [INFO] [Thread-22506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:47:37.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:47:37.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:47:38.482 [DEBUG] [Thread-22506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:47:38.483 [DEBUG] [Thread-22506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:47:38.531 [DEBUG] [Thread-22506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:47:38.531 [DEBUG] [Thread-22506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:47:38.540 [DEBUG] [Thread-22506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:47:38.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:47:38.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-11-12T20:47:38.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-11-12T20:47:38.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:47:38.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:47:38.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:47:38.577 [DEBUG] [Thread-22506] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:47:40.467 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:47:40.469 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:47:41.307 [DEBUG] [Thread-22508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:47:53.025 [DEBUG] [Thread-22509 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:47:56.360 [DEBUG] [Thread-22510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:48:08.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:48:08.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:48:08.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-11-12T20:48:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 47, 43), 18.03, 29.87, 0.0, 13.38, 19.43, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:48:09.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:47:43
2025-11-12T20:48:09.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:48:09.499 [DEBUG] [Thread-22511] [transport.py] [_log()] starting thread (client mode): 0x14907b80
2025-11-12T20:48:09.499 [DEBUG] [Thread-22511] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:48:09.519 [DEBUG] [Thread-22511] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:48:09.520 [INFO] [Thread-22511] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:48:09.523 [DEBUG] [Thread-22511] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:48:09.523 [DEBUG] [Thread-22511] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:48:09.523 [DEBUG] [Thread-22511] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:48:09.523 [DEBUG] [Thread-22511] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:48:09.523 [DEBUG] [Thread-22511] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:48:09.523 [DEBUG] [Thread-22511] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:48:09.523 [DEBUG] [Thread-22511] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] client lang: <none>
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] server lang: <none>
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] kex follows: False
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] Compression: none
2025-11-12T20:48:09.524 [DEBUG] [Thread-22511] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:48:09.542 [DEBUG] [Thread-22511] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:48:09.543 [DEBUG] [Thread-22511] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:48:09.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:48:09.545 [DEBUG] [Thread-22511] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:48:09.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:48:09.585 [DEBUG] [Thread-22511] [transport.py] [_log()] userauth is OK
2025-11-12T20:48:09.585 [DEBUG] [Thread-22511] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:48:09.585 [DEBUG] [Thread-22511] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:48:09.585 [DEBUG] [Thread-22511] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:48:09.586 [DEBUG] [Thread-22511] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:48:09.623 [INFO] [Thread-22511] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:48:09.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:48:10.276 [DEBUG] [Thread-22511] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:48:10.276 [DEBUG] [Thread-22511] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:48:10.276 [DEBUG] [Thread-22511] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:48:10.317 [DEBUG] [Thread-22511] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:48:10.317 [DEBUG] [Thread-22511] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:48:10.320 [DEBUG] [Thread-22511] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:48:10.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:48:10.333 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:48:10.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:48:10.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:48:10.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:48:10.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:48:10.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:48:10.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:48:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:48:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.783070 -999.00  +19.50  12.51     35   +3.80 1 2 1 1 1     0    0 14.80 -38.77 Z.Esw 10.6 12.5 266.0 15.4 20.0 -21.9 20.0 -21.1 19.8 -20.8 20.0 -21.2
2025-11-12T20:48:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:48:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:48:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.783070
2025-11-12T20:48:10.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:48:10.347 [DEBUG] [Thread-22511] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:48:10.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:48:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:48:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:48:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:48:10.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:47:43', tmtdew=18.03, humidity=29.87, cloud=0.0, wind=13.38, temperature=19.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:47:43', seeing=0.75, atlas_timestamp='2025-11-12T18:47:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:46:00')
2025-11-12T20:48:10.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:48:10.443 [DEBUG] [Thread-22514] [transport.py] [_log()] starting thread (client mode): 0x173997b0
2025-11-12T20:48:10.443 [DEBUG] [Thread-22514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:48:10.458 [DEBUG] [Thread-22514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:48:10.458 [INFO] [Thread-22514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:48:10.466 [DEBUG] [Thread-22514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:48:10.466 [DEBUG] [Thread-22514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:48:10.466 [DEBUG] [Thread-22514] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:48:10.466 [DEBUG] [Thread-22514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] client lang: <none>
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] server lang: <none>
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] kex follows: False
2025-11-12T20:48:10.467 [DEBUG] [Thread-22514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:48:10.468 [DEBUG] [Thread-22514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:48:10.468 [DEBUG] [Thread-22514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:48:10.468 [DEBUG] [Thread-22514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:48:10.468 [DEBUG] [Thread-22514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:48:10.468 [DEBUG] [Thread-22514] [transport.py] [_log()] Compression: none
2025-11-12T20:48:10.468 [DEBUG] [Thread-22514] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:48:10.525 [DEBUG] [Thread-22514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:48:10.526 [DEBUG] [Thread-22514] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:48:10.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:48:10.527 [DEBUG] [Thread-22514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:48:10.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:48:10.581 [DEBUG] [Thread-22514] [transport.py] [_log()] userauth is OK
2025-11-12T20:48:10.581 [DEBUG] [Thread-22514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:48:10.581 [DEBUG] [Thread-22514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:48:10.581 [DEBUG] [Thread-22514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:48:10.581 [DEBUG] [Thread-22514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:48:10.601 [INFO] [Thread-22514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:48:10.601 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:48:10.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:48:11.393 [DEBUG] [Thread-22516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:48:11.471 [DEBUG] [Thread-22514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:48:11.472 [DEBUG] [Thread-22514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:48:11.519 [DEBUG] [Thread-22514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:48:11.520 [DEBUG] [Thread-22514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:48:11.529 [DEBUG] [Thread-22514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:48:11.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:48:11.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-11-12T20:48:11.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-11-12T20:48:11.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:48:11.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:48:11.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:48:11.565 [DEBUG] [Thread-22514] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:48:26.453 [DEBUG] [Thread-22517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:48:40.675 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:48:40.676 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:48:41.488 [DEBUG] [Thread-22518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:48:41.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:48:41.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:48:41.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-11-12T20:48:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 48, 15), 17.98, 29.97, 0.0, 15.09, 19.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:48:42.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:48:15
2025-11-12T20:48:42.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:48:42.537 [DEBUG] [Thread-22519] [transport.py] [_log()] starting thread (client mode): 0x149068c0
2025-11-12T20:48:42.537 [DEBUG] [Thread-22519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:48:42.557 [DEBUG] [Thread-22519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:48:42.557 [INFO] [Thread-22519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] client lang: <none>
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] server lang: <none>
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] kex follows: False
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] Compression: none
2025-11-12T20:48:42.560 [DEBUG] [Thread-22519] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:48:42.576 [DEBUG] [Thread-22519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:48:42.576 [DEBUG] [Thread-22519] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:48:42.576 [DEBUG] [Thread-22519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:48:42.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:48:42.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:48:42.578 [DEBUG] [Thread-22519] [transport.py] [_log()] userauth is OK
2025-11-12T20:48:42.578 [DEBUG] [Thread-22519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:48:42.578 [DEBUG] [Thread-22519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:48:42.578 [DEBUG] [Thread-22519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:48:42.578 [DEBUG] [Thread-22519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:48:42.596 [INFO] [Thread-22519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:48:42.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:48:43.237 [DEBUG] [Thread-22519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:48:43.237 [DEBUG] [Thread-22519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:48:43.237 [DEBUG] [Thread-22519] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:48:43.278 [DEBUG] [Thread-22519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:48:43.278 [DEBUG] [Thread-22519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:48:43.280 [DEBUG] [Thread-22519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:48:43.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:48:43.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:48:43.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:48:43.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:48:43.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:48:43.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:48:43.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.783417 -999.00  +19.50  12.02     35   +3.80 1 2 1 1 1     0    0 15.01 -39.23 Z.Esw 13.2 12.0 262.0 14.6 20.1 -22.0 20.0 -21.0 19.7 -20.7 19.9 -21.1
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.783417
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:48:43.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:48:15', tmtdew=17.98, humidity=29.97, cloud=0.0, wind=15.09, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:48:15', seeing=0.75, atlas_timestamp='2025-11-12T18:48:07.229', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:46:00')
2025-11-12T20:48:43.302 [DEBUG] [Thread-22519] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:48:43.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:48:43.389 [DEBUG] [Thread-22522] [transport.py] [_log()] starting thread (client mode): 0x149079a0
2025-11-12T20:48:43.390 [DEBUG] [Thread-22522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:48:43.405 [DEBUG] [Thread-22522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:48:43.405 [INFO] [Thread-22522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] client lang: <none>
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] server lang: <none>
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] kex follows: False
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:48:43.413 [DEBUG] [Thread-22522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:48:43.414 [DEBUG] [Thread-22522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:48:43.414 [DEBUG] [Thread-22522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:48:43.414 [DEBUG] [Thread-22522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:48:43.414 [DEBUG] [Thread-22522] [transport.py] [_log()] Compression: none
2025-11-12T20:48:43.414 [DEBUG] [Thread-22522] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:48:43.471 [DEBUG] [Thread-22522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:48:43.471 [DEBUG] [Thread-22522] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:48:43.472 [DEBUG] [Thread-22522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:48:43.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:48:43.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:48:43.531 [DEBUG] [Thread-22522] [transport.py] [_log()] userauth is OK
2025-11-12T20:48:43.531 [DEBUG] [Thread-22522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:48:43.531 [DEBUG] [Thread-22522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:48:43.531 [DEBUG] [Thread-22522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:48:43.531 [DEBUG] [Thread-22522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:48:43.545 [INFO] [Thread-22522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:48:43.545 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:48:43.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:48:44.382 [DEBUG] [Thread-22522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:48:44.382 [DEBUG] [Thread-22522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:48:44.430 [DEBUG] [Thread-22522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:48:44.430 [DEBUG] [Thread-22522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:48:44.442 [DEBUG] [Thread-22522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:48:44.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:48:44.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-11-12T20:48:44.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-11-12T20:48:44.472 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:48:44.472 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:48:44.473 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:48:44.481 [DEBUG] [Thread-22522] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:48:53.094 [DEBUG] [Thread-22524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:48:56.518 [DEBUG] [Thread-22525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:49:11.579 [DEBUG] [Thread-22526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:49:14.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:49:14.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:49:14.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-11-12T20:49:15.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 48, 47), 17.94, 29.96, 0.0, 15.16, 19.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:49:15.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:48:47
2025-11-12T20:49:15.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:49:15.387 [DEBUG] [Thread-22527] [transport.py] [_log()] starting thread (client mode): 0x14904b80
2025-11-12T20:49:15.388 [DEBUG] [Thread-22527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:49:15.408 [DEBUG] [Thread-22527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:49:15.408 [INFO] [Thread-22527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:49:15.411 [DEBUG] [Thread-22527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:49:15.411 [DEBUG] [Thread-22527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:49:15.411 [DEBUG] [Thread-22527] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:49:15.411 [DEBUG] [Thread-22527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:49:15.411 [DEBUG] [Thread-22527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:49:15.411 [DEBUG] [Thread-22527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] client lang: <none>
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] server lang: <none>
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] kex follows: False
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] Compression: none
2025-11-12T20:49:15.412 [DEBUG] [Thread-22527] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:49:15.428 [DEBUG] [Thread-22527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:49:15.429 [DEBUG] [Thread-22527] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:49:15.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:49:15.430 [DEBUG] [Thread-22527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:49:15.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:49:15.433 [DEBUG] [Thread-22527] [transport.py] [_log()] userauth is OK
2025-11-12T20:49:15.433 [DEBUG] [Thread-22527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:49:15.433 [DEBUG] [Thread-22527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:49:15.433 [DEBUG] [Thread-22527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:49:15.433 [DEBUG] [Thread-22527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:49:15.457 [INFO] [Thread-22527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:49:15.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:49:16.099 [DEBUG] [Thread-22527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:49:16.099 [DEBUG] [Thread-22527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:49:16.100 [DEBUG] [Thread-22527] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:49:16.140 [DEBUG] [Thread-22527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:49:16.140 [DEBUG] [Thread-22527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:49:16.143 [DEBUG] [Thread-22527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:49:16.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:49:16.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:49:16.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:49:16.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:49:16.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:49:16.170 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:49:16.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:49:16.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:49:16.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:49:16.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.783765 -999.00  +19.50  14.99     35   +3.80 1 2 1 1 1     0    0 14.90 -35.76 Z.Esw 10.3 15.0 267.4 15.9 20.1 -22.0 20.0 -21.2 19.7 -20.6 19.9 -21.0
2025-11-12T20:49:16.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:49:16.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:49:16.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.783765
2025-11-12T20:49:16.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:49:16.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:49:16.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:49:16.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:49:16.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:49:16.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:48:47', tmtdew=17.94, humidity=29.96, cloud=0.0, wind=15.16, temperature=19.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:48:47', seeing=1.03, atlas_timestamp='2025-11-12T18:48:37.296', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:46:00')
2025-11-12T20:49:16.173 [DEBUG] [Thread-22527] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:49:16.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:49:16.270 [DEBUG] [Thread-22530] [transport.py] [_log()] starting thread (client mode): 0x173bc460
2025-11-12T20:49:16.270 [DEBUG] [Thread-22530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:49:16.288 [DEBUG] [Thread-22530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:49:16.288 [INFO] [Thread-22530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:49:16.295 [DEBUG] [Thread-22530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] client lang: <none>
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] server lang: <none>
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] kex follows: False
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:49:16.296 [DEBUG] [Thread-22530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:49:16.297 [DEBUG] [Thread-22530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:49:16.297 [DEBUG] [Thread-22530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:49:16.297 [DEBUG] [Thread-22530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:49:16.297 [DEBUG] [Thread-22530] [transport.py] [_log()] Compression: none
2025-11-12T20:49:16.297 [DEBUG] [Thread-22530] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:49:16.353 [DEBUG] [Thread-22530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:49:16.353 [DEBUG] [Thread-22530] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:49:16.354 [DEBUG] [Thread-22530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:49:16.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:49:16.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:49:16.410 [DEBUG] [Thread-22530] [transport.py] [_log()] userauth is OK
2025-11-12T20:49:16.410 [DEBUG] [Thread-22530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:49:16.410 [DEBUG] [Thread-22530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:49:16.410 [DEBUG] [Thread-22530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:49:16.410 [DEBUG] [Thread-22530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:49:16.428 [INFO] [Thread-22530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:49:16.429 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:49:16.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:49:17.267 [DEBUG] [Thread-22530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:49:17.267 [DEBUG] [Thread-22530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:49:17.316 [DEBUG] [Thread-22530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:49:17.316 [DEBUG] [Thread-22530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:49:17.324 [DEBUG] [Thread-22530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:49:17.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:49:17.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-11-12T20:49:17.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-11-12T20:49:17.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:49:17.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:49:17.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:49:17.355 [DEBUG] [Thread-22530] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:49:26.613 [DEBUG] [Thread-22532 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:49:40.880 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:49:40.881 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:49:41.674 [DEBUG] [Thread-22533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:49:47.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:49:47.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:49:47.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-11-12T20:49:47.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 49, 19), 17.91, 30.01, 0.0, 13.73, 19.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:49:47.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:49:19
2025-11-12T20:49:48.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:49:48.258 [DEBUG] [Thread-22534] [transport.py] [_log()] starting thread (client mode): 0x17399360
2025-11-12T20:49:48.258 [DEBUG] [Thread-22534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:49:48.278 [DEBUG] [Thread-22534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:49:48.278 [INFO] [Thread-22534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] client lang: <none>
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] server lang: <none>
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] kex follows: False
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] Compression: none
2025-11-12T20:49:48.281 [DEBUG] [Thread-22534] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:49:48.298 [DEBUG] [Thread-22534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:49:48.299 [DEBUG] [Thread-22534] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:49:48.299 [DEBUG] [Thread-22534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:49:48.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:49:48.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:49:48.301 [DEBUG] [Thread-22534] [transport.py] [_log()] userauth is OK
2025-11-12T20:49:48.301 [DEBUG] [Thread-22534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:49:48.301 [DEBUG] [Thread-22534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:49:48.302 [DEBUG] [Thread-22534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:49:48.302 [DEBUG] [Thread-22534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:49:48.327 [INFO] [Thread-22534] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:49:48.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:49:48.961 [DEBUG] [Thread-22534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:49:48.962 [DEBUG] [Thread-22534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:49:48.962 [DEBUG] [Thread-22534] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:49:49.003 [DEBUG] [Thread-22534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:49:49.003 [DEBUG] [Thread-22534] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:49:49.006 [DEBUG] [Thread-22534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:49:49.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:49:49.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:49:49.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:49:49.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:49:49.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:49:49.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:49:49.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:49:49.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:49:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:49:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.784112 -999.00  +19.40  12.48     35   +3.80 1 2 1 1 1     0    0 14.84 -36.24 Z.Esw 9.9 12.5 266.4 14.3 20.1 -22.1 20.0 -21.2 19.6 -20.8 19.9 -21.2
2025-11-12T20:49:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:49:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:49:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.784112
2025-11-12T20:49:49.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:49:49.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:49:49.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:49:49.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:49:49.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:49:49.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:49:19', tmtdew=17.91, humidity=30.01, cloud=0.0, wind=13.73, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:49:19', seeing=1.03, atlas_timestamp='2025-11-12T18:49:07.277', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:49:00')
2025-11-12T20:49:49.034 [DEBUG] [Thread-22534] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:49:49.125 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:49:49.137 [DEBUG] [Thread-22537] [transport.py] [_log()] starting thread (client mode): 0x14945c60
2025-11-12T20:49:49.138 [DEBUG] [Thread-22537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:49:49.152 [DEBUG] [Thread-22537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:49:49.152 [INFO] [Thread-22537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:49:49.159 [DEBUG] [Thread-22537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] client lang: <none>
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] server lang: <none>
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] kex follows: False
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:49:49.160 [DEBUG] [Thread-22537] [transport.py] [_log()] Compression: none
2025-11-12T20:49:49.161 [DEBUG] [Thread-22537] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:49:49.217 [DEBUG] [Thread-22537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:49:49.218 [DEBUG] [Thread-22537] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:49:49.219 [DEBUG] [Thread-22537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:49:49.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:49:49.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:49:49.273 [DEBUG] [Thread-22537] [transport.py] [_log()] userauth is OK
2025-11-12T20:49:49.273 [DEBUG] [Thread-22537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:49:49.274 [DEBUG] [Thread-22537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:49:49.274 [DEBUG] [Thread-22537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:49:49.274 [DEBUG] [Thread-22537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:49:49.293 [INFO] [Thread-22537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:49:49.294 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:49:49.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:49:50.137 [DEBUG] [Thread-22537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:49:50.138 [DEBUG] [Thread-22537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:49:50.185 [DEBUG] [Thread-22537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:49:50.185 [DEBUG] [Thread-22537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:49:50.195 [DEBUG] [Thread-22537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:49:50.203 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:49:50.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-11-12T20:49:50.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:49:50.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:49:50.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:49:50.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:49:50.231 [DEBUG] [Thread-22537] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:49:53.146 [DEBUG] [Thread-22539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:49:56.711 [DEBUG] [Thread-22540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:50:11.747 [DEBUG] [Thread-22541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:50:20.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:50:20.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:50:20.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-11-12T20:50:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 49, 51), 17.92, 29.99, 0.0, 12.3, 19.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:50:20.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:49:51
2025-11-12T20:50:20.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:50:21.131 [DEBUG] [Thread-22542] [transport.py] [_log()] starting thread (client mode): 0x173bf790
2025-11-12T20:50:21.131 [DEBUG] [Thread-22542] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:50:21.151 [DEBUG] [Thread-22542] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:50:21.152 [INFO] [Thread-22542] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:50:21.155 [DEBUG] [Thread-22542] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:50:21.155 [DEBUG] [Thread-22542] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:50:21.155 [DEBUG] [Thread-22542] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:50:21.155 [DEBUG] [Thread-22542] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:50:21.155 [DEBUG] [Thread-22542] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] client lang: <none>
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] server lang: <none>
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] kex follows: False
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:50:21.156 [DEBUG] [Thread-22542] [transport.py] [_log()] Compression: none
2025-11-12T20:50:21.157 [DEBUG] [Thread-22542] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:50:21.178 [DEBUG] [Thread-22542] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:50:21.179 [DEBUG] [Thread-22542] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:50:21.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:50:21.180 [DEBUG] [Thread-22542] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:50:21.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:50:21.182 [DEBUG] [Thread-22542] [transport.py] [_log()] userauth is OK
2025-11-12T20:50:21.182 [DEBUG] [Thread-22542] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:50:21.183 [DEBUG] [Thread-22542] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:50:21.183 [DEBUG] [Thread-22542] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:50:21.183 [DEBUG] [Thread-22542] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:50:21.206 [INFO] [Thread-22542] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:50:21.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:50:21.835 [DEBUG] [Thread-22542] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:50:21.835 [DEBUG] [Thread-22542] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:50:21.836 [DEBUG] [Thread-22542] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:50:21.877 [DEBUG] [Thread-22542] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:50:21.877 [DEBUG] [Thread-22542] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:50:21.880 [DEBUG] [Thread-22542] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:50:21.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:50:21.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:50:21.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:50:21.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:50:21.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:50:21.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:50:21.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:50:21.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:50:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:50:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.784459 -999.00  +19.40  11.97     35   +3.80 1 2 1 1 1     0    0 14.85 -35.28 Z.Es. 11.2 12.0 274.0 16.9 20.0 -22.1 19.9 -21.2 19.7 -20.6 19.9 -21.2
2025-11-12T20:50:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:50:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:50:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.784459
2025-11-12T20:50:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:50:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:50:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:50:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:50:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:50:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:49:51', tmtdew=17.92, humidity=29.99, cloud=0.0, wind=12.3, temperature=19.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:49:51', seeing=0.84, atlas_timestamp='2025-11-12T18:49:37.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:49:00')
2025-11-12T20:50:21.908 [DEBUG] [Thread-22542] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:50:21.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:50:22.004 [DEBUG] [Thread-22545] [transport.py] [_log()] starting thread (client mode): 0x1739bf70
2025-11-12T20:50:22.004 [DEBUG] [Thread-22545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:50:22.018 [DEBUG] [Thread-22545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:50:22.019 [INFO] [Thread-22545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:50:22.026 [DEBUG] [Thread-22545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:50:22.026 [DEBUG] [Thread-22545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:50:22.026 [DEBUG] [Thread-22545] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] client lang: <none>
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] server lang: <none>
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] kex follows: False
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:50:22.027 [DEBUG] [Thread-22545] [transport.py] [_log()] Compression: none
2025-11-12T20:50:22.028 [DEBUG] [Thread-22545] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:50:22.085 [DEBUG] [Thread-22545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:50:22.086 [DEBUG] [Thread-22545] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:50:22.086 [DEBUG] [Thread-22545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:50:22.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:50:22.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:50:22.141 [DEBUG] [Thread-22545] [transport.py] [_log()] userauth is OK
2025-11-12T20:50:22.142 [DEBUG] [Thread-22545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:50:22.142 [DEBUG] [Thread-22545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:50:22.142 [DEBUG] [Thread-22545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:50:22.142 [DEBUG] [Thread-22545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:50:22.160 [INFO] [Thread-22545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:50:22.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:50:22.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:50:23.049 [DEBUG] [Thread-22545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:50:23.049 [DEBUG] [Thread-22545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:50:23.097 [DEBUG] [Thread-22545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:50:23.097 [DEBUG] [Thread-22545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:50:23.106 [DEBUG] [Thread-22545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:50:23.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:50:23.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-11-12T20:50:23.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-11-12T20:50:23.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:50:23.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:50:23.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:50:23.144 [DEBUG] [Thread-22545] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:50:26.780 [DEBUG] [Thread-22547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:50:41.087 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:50:41.088 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:50:41.827 [DEBUG] [Thread-22548 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:50:53.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:50:53.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:50:53.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-11-12T20:50:53.205 [DEBUG] [Thread-22549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:50:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 50, 23), 17.9, 30.01, 0.0, 13.46, 19.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:50:53.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:50:23
2025-11-12T20:50:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:50:54.051 [DEBUG] [Thread-22550] [transport.py] [_log()] starting thread (client mode): 0x1739a1a0
2025-11-12T20:50:54.051 [DEBUG] [Thread-22550] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:50:54.071 [DEBUG] [Thread-22550] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:50:54.071 [INFO] [Thread-22550] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] client lang: <none>
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] server lang: <none>
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] kex follows: False
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:50:54.074 [DEBUG] [Thread-22550] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:50:54.075 [DEBUG] [Thread-22550] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:50:54.075 [DEBUG] [Thread-22550] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:50:54.075 [DEBUG] [Thread-22550] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:50:54.075 [DEBUG] [Thread-22550] [transport.py] [_log()] Compression: none
2025-11-12T20:50:54.075 [DEBUG] [Thread-22550] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:50:54.092 [DEBUG] [Thread-22550] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:50:54.093 [DEBUG] [Thread-22550] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:50:54.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:50:54.094 [DEBUG] [Thread-22550] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:50:54.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:50:54.096 [DEBUG] [Thread-22550] [transport.py] [_log()] userauth is OK
2025-11-12T20:50:54.096 [DEBUG] [Thread-22550] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:50:54.096 [DEBUG] [Thread-22550] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:50:54.096 [DEBUG] [Thread-22550] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:50:54.096 [DEBUG] [Thread-22550] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:50:54.112 [INFO] [Thread-22550] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:50:54.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:50:54.698 [DEBUG] [Thread-22550] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:50:54.699 [DEBUG] [Thread-22550] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:50:54.699 [DEBUG] [Thread-22550] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:50:54.740 [DEBUG] [Thread-22550] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:50:54.740 [DEBUG] [Thread-22550] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:50:54.743 [DEBUG] [Thread-22550] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:50:54.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:50:54.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:50:54.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:50:54.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:50:54.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:50:54.768 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:50:54.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:50:54.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:50:54.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:50:54.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.785154 -999.00  +19.40  10.57     35   +3.80 1 2 1 1 1     0    0 14.74 -35.47 Z.E.w 13.4 10.6 260.7 14.5 20.0 -22.0 19.9 -21.2 19.6 -20.8 19.9 -21.3
2025-11-12T20:50:54.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:50:54.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:50:54.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.785154
2025-11-12T20:50:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:50:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:50:54.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:50:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:50:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:50:54.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:50:23', tmtdew=17.9, humidity=30.01, cloud=0.0, wind=13.46, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:50:23', seeing=0.77, atlas_timestamp='2025-11-12T18:50:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:49:00')
2025-11-12T20:50:54.771 [DEBUG] [Thread-22550] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:50:54.855 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:50:54.868 [DEBUG] [Thread-22553] [transport.py] [_log()] starting thread (client mode): 0x1739ac20
2025-11-12T20:50:54.868 [DEBUG] [Thread-22553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:50:54.882 [DEBUG] [Thread-22553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:50:54.883 [INFO] [Thread-22553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:50:54.892 [DEBUG] [Thread-22553] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:50:54.892 [DEBUG] [Thread-22553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:50:54.892 [DEBUG] [Thread-22553] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:50:54.892 [DEBUG] [Thread-22553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:50:54.892 [DEBUG] [Thread-22553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:50:54.892 [DEBUG] [Thread-22553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] client lang: <none>
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] server lang: <none>
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] kex follows: False
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] Compression: none
2025-11-12T20:50:54.893 [DEBUG] [Thread-22553] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:50:54.949 [DEBUG] [Thread-22553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:50:54.950 [DEBUG] [Thread-22553] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:50:54.950 [DEBUG] [Thread-22553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:50:54.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:50:54.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:50:55.009 [DEBUG] [Thread-22553] [transport.py] [_log()] userauth is OK
2025-11-12T20:50:55.009 [DEBUG] [Thread-22553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:50:55.009 [DEBUG] [Thread-22553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:50:55.009 [DEBUG] [Thread-22553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:50:55.009 [DEBUG] [Thread-22553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:50:55.029 [INFO] [Thread-22553] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:50:55.029 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:50:55.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:50:55.877 [DEBUG] [Thread-22553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:50:55.877 [DEBUG] [Thread-22553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:50:55.925 [DEBUG] [Thread-22553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:50:55.925 [DEBUG] [Thread-22553] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:50:55.933 [DEBUG] [Thread-22553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:50:55.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:50:55.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-11-12T20:50:55.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-11-12T20:50:55.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:50:55.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:50:55.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:50:55.966 [DEBUG] [Thread-22553] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:50:56.862 [DEBUG] [Thread-22555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:51:11.908 [DEBUG] [Thread-22556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:51:25.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:51:25.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:51:25.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-11-12T20:51:26.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 50, 55), 17.87, 30.07, 0.0, 15.03, 19.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:51:26.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:50:55
2025-11-12T20:51:26.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:51:26.889 [DEBUG] [Thread-22557] [transport.py] [_log()] starting thread (client mode): 0x14946620
2025-11-12T20:51:26.889 [DEBUG] [Thread-22557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:51:26.909 [DEBUG] [Thread-22557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:51:26.910 [INFO] [Thread-22557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:51:26.913 [DEBUG] [Thread-22557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:51:26.913 [DEBUG] [Thread-22557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:51:26.913 [DEBUG] [Thread-22557] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:51:26.913 [DEBUG] [Thread-22557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:51:26.913 [DEBUG] [Thread-22557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:51:26.913 [DEBUG] [Thread-22557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:51:26.913 [DEBUG] [Thread-22557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] client lang: <none>
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] server lang: <none>
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] kex follows: False
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] Compression: none
2025-11-12T20:51:26.914 [DEBUG] [Thread-22557] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:51:26.932 [DEBUG] [Thread-22557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:51:26.933 [DEBUG] [Thread-22557] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:51:26.934 [DEBUG] [Thread-22557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:51:26.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:51:26.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:51:26.936 [DEBUG] [Thread-22557] [transport.py] [_log()] userauth is OK
2025-11-12T20:51:26.936 [DEBUG] [Thread-22557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:51:26.937 [DEBUG] [Thread-22557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:51:26.937 [DEBUG] [Thread-22557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:51:26.937 [DEBUG] [Thread-22557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:51:26.942 [DEBUG] [Thread-22559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:51:26.973 [INFO] [Thread-22557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:51:26.974 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:51:27.612 [DEBUG] [Thread-22557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:51:27.612 [DEBUG] [Thread-22557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:51:27.613 [DEBUG] [Thread-22557] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:51:27.653 [DEBUG] [Thread-22557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:51:27.654 [DEBUG] [Thread-22557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:51:27.657 [DEBUG] [Thread-22557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:51:27.671 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:51:27.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:51:27.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:51:27.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:51:27.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:51:27.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:51:27.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:51:27.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:51:27.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:51:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.785501 -999.00  +19.30  14.98     35   +3.80 1 2 1 1 1     0    0 14.98 -33.46 Z.Es. 12.8 15.0 266.8 16.6 20.0 -22.1 19.9 -21.1 19.6 -20.7 19.9 -21.2
2025-11-12T20:51:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:51:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:51:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.785501
2025-11-12T20:51:27.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:51:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:51:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:51:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:51:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:51:27.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:50:55', tmtdew=17.87, humidity=30.07, cloud=0.0, wind=15.03, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:50:55', seeing=0.77, atlas_timestamp='2025-11-12T18:51:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:49:00')
2025-11-12T20:51:27.682 [DEBUG] [Thread-22557] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:51:27.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:51:27.782 [DEBUG] [Thread-22561] [transport.py] [_log()] starting thread (client mode): 0x14914cd0
2025-11-12T20:51:27.782 [DEBUG] [Thread-22561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:51:27.799 [DEBUG] [Thread-22561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:51:27.799 [INFO] [Thread-22561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] client lang: <none>
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] server lang: <none>
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] kex follows: False
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:51:27.806 [DEBUG] [Thread-22561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:51:27.807 [DEBUG] [Thread-22561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:51:27.807 [DEBUG] [Thread-22561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:51:27.807 [DEBUG] [Thread-22561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:51:27.807 [DEBUG] [Thread-22561] [transport.py] [_log()] Compression: none
2025-11-12T20:51:27.807 [DEBUG] [Thread-22561] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:51:27.864 [DEBUG] [Thread-22561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:51:27.864 [DEBUG] [Thread-22561] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:51:27.864 [DEBUG] [Thread-22561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:51:27.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:51:27.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:51:27.921 [DEBUG] [Thread-22561] [transport.py] [_log()] userauth is OK
2025-11-12T20:51:27.921 [DEBUG] [Thread-22561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:51:27.921 [DEBUG] [Thread-22561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:51:27.921 [DEBUG] [Thread-22561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:51:27.921 [DEBUG] [Thread-22561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:51:27.935 [INFO] [Thread-22561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:51:27.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:51:27.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:51:28.815 [DEBUG] [Thread-22561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:51:28.816 [DEBUG] [Thread-22561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:51:28.864 [DEBUG] [Thread-22561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:51:28.864 [DEBUG] [Thread-22561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:51:28.872 [DEBUG] [Thread-22561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:51:28.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:51:28.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:51:28.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:51:28.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:51:28.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:51:28.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:51:28.903 [DEBUG] [Thread-22561] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:51:41.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:51:41.297 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:51:41.978 [DEBUG] [Thread-22563 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:51:53.257 [DEBUG] [Thread-22564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:51:57.025 [DEBUG] [Thread-22565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:51:58.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:51:58.924 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:51:58.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-11-12T20:51:59.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 51, 27), 17.86, 30.11, 0.0, 15.16, 19.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:51:59.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:51:27
2025-11-12T20:51:59.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:51:59.844 [DEBUG] [Thread-22566] [transport.py] [_log()] starting thread (client mode): 0x173bc6d0
2025-11-12T20:51:59.844 [DEBUG] [Thread-22566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:51:59.864 [DEBUG] [Thread-22566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:51:59.864 [INFO] [Thread-22566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] client lang: <none>
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] server lang: <none>
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] kex follows: False
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:51:59.867 [DEBUG] [Thread-22566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:51:59.868 [DEBUG] [Thread-22566] [transport.py] [_log()] Compression: none
2025-11-12T20:51:59.868 [DEBUG] [Thread-22566] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:51:59.875 [DEBUG] [Thread-22566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:51:59.875 [DEBUG] [Thread-22566] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:51:59.875 [DEBUG] [Thread-22566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:51:59.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:51:59.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:51:59.876 [DEBUG] [Thread-22566] [transport.py] [_log()] userauth is OK
2025-11-12T20:51:59.876 [DEBUG] [Thread-22566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:51:59.876 [DEBUG] [Thread-22566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:51:59.876 [DEBUG] [Thread-22566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:51:59.876 [DEBUG] [Thread-22566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:51:59.891 [INFO] [Thread-22566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:51:59.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:52:00.507 [DEBUG] [Thread-22566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:52:00.507 [DEBUG] [Thread-22566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:52:00.507 [DEBUG] [Thread-22566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:52:00.548 [DEBUG] [Thread-22566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:52:00.548 [DEBUG] [Thread-22566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:52:00.551 [DEBUG] [Thread-22566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:52:00.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:52:00.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:52:00.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:52:00.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:52:00.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:52:00.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:52:00.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:52:00.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:52:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:52:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.785848 -999.00  +19.30  14.90     35   +3.80 1 2 1 1 1     0    0 14.75 -33.24 Z.Es. 10.4 14.9 266.2 17.6 20.0 -22.1 19.9 -21.1 19.6 -20.7 19.9 -21.2
2025-11-12T20:52:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:52:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:52:00.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.785848
2025-11-12T20:52:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:52:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:52:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:52:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:52:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:52:00.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:51:27', tmtdew=17.86, humidity=30.11, cloud=0.0, wind=15.16, temperature=19.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:51:27', seeing=0.8, atlas_timestamp='2025-11-12T18:51:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:49:00')
2025-11-12T20:52:00.565 [DEBUG] [Thread-22566] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:52:00.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:52:00.650 [DEBUG] [Thread-22569] [transport.py] [_log()] starting thread (client mode): 0x14914bb0
2025-11-12T20:52:00.651 [DEBUG] [Thread-22569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:52:00.666 [DEBUG] [Thread-22569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:52:00.666 [INFO] [Thread-22569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] client lang: <none>
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] server lang: <none>
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] kex follows: False
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:52:00.673 [DEBUG] [Thread-22569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:52:00.674 [DEBUG] [Thread-22569] [transport.py] [_log()] Compression: none
2025-11-12T20:52:00.674 [DEBUG] [Thread-22569] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:52:00.731 [DEBUG] [Thread-22569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:52:00.732 [DEBUG] [Thread-22569] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:52:00.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:52:00.732 [DEBUG] [Thread-22569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:52:00.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:52:00.789 [DEBUG] [Thread-22569] [transport.py] [_log()] userauth is OK
2025-11-12T20:52:00.789 [DEBUG] [Thread-22569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:52:00.789 [DEBUG] [Thread-22569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:52:00.789 [DEBUG] [Thread-22569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:52:00.789 [DEBUG] [Thread-22569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:52:00.807 [INFO] [Thread-22569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:52: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-11-12T20:52:00.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:52:01.648 [DEBUG] [Thread-22569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:52:01.648 [DEBUG] [Thread-22569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:52:01.696 [DEBUG] [Thread-22569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:52:01.697 [DEBUG] [Thread-22569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:52:01.706 [DEBUG] [Thread-22569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:52:01.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:52:01.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:52:01.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-11-12T20:52:01.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:52:01.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:52:01.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:52:01.742 [DEBUG] [Thread-22569] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:52:12.063 [DEBUG] [Thread-22571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:52:27.116 [DEBUG] [Thread-22572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:52:31.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:52:31.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:52:31.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-11-12T20:52:32.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 51, 59), 17.8, 30.62, 0.0, 14.24, 19.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:52:32.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:51:59
2025-11-12T20:52:32.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:52:32.769 [DEBUG] [Thread-22573] [transport.py] [_log()] starting thread (client mode): 0x11f01090
2025-11-12T20:52:32.769 [DEBUG] [Thread-22573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:52:32.790 [DEBUG] [Thread-22573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:52:32.790 [INFO] [Thread-22573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] client lang: <none>
2025-11-12T20:52:32.793 [DEBUG] [Thread-22573] [transport.py] [_log()] server lang: <none>
2025-11-12T20:52:32.794 [DEBUG] [Thread-22573] [transport.py] [_log()] kex follows: False
2025-11-12T20:52:32.794 [DEBUG] [Thread-22573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:52:32.794 [DEBUG] [Thread-22573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:52:32.794 [DEBUG] [Thread-22573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:52:32.794 [DEBUG] [Thread-22573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:52:32.794 [DEBUG] [Thread-22573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:52:32.794 [DEBUG] [Thread-22573] [transport.py] [_log()] Compression: none
2025-11-12T20:52:32.794 [DEBUG] [Thread-22573] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:52:32.809 [DEBUG] [Thread-22573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:52:32.810 [DEBUG] [Thread-22573] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:52:32.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:52:32.810 [DEBUG] [Thread-22573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:52:32.810 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:52:32.811 [DEBUG] [Thread-22573] [transport.py] [_log()] userauth is OK
2025-11-12T20:52:32.811 [DEBUG] [Thread-22573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:52:32.811 [DEBUG] [Thread-22573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:52:32.811 [DEBUG] [Thread-22573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:52:32.811 [DEBUG] [Thread-22573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:52:32.839 [INFO] [Thread-22573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:52:32.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:52:33.497 [DEBUG] [Thread-22573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:52:33.497 [DEBUG] [Thread-22573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:52:33.497 [DEBUG] [Thread-22573] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:52:33.538 [DEBUG] [Thread-22573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:52:33.538 [DEBUG] [Thread-22573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:52:33.540 [DEBUG] [Thread-22573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:52:33.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:52:33.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:52:33.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:52:33.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:52:33.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:52:33.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:52:33.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.786196 -999.00  +19.30   7.11     35   +3.80 1 2 1 1 1     0    0 14.75 -38.56 Z.Esw 11.8 7.1 253.2 12.6 19.9 -22.0 19.9 -21.2 19.6 -20.8 19.9 -21.1
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.786196
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:52:33.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:51:59', tmtdew=17.8, humidity=30.62, cloud=0.0, wind=14.24, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:52:31', seeing=0.8, atlas_timestamp='2025-11-12T18:52:07.334', atlas_cloud=2, atlas_rain=1, zp_data=[0.6337499999999991, 1.1892500000000004, 1.39025, 0.8065000000000007, 0.9184999999999999, 0.9992500000000009, 0.9234999999999998, 0.7512500000000006, 0.5154999999999994, 1.0950000000000006, 1.2202499999999992, 1.1470000000000002, 1.4034999999999993, 1.7992499999999998, 2.1659999999999995, 0.8199999999999994, 0.8522499999999997, 1.3335, 1.6529999999999996, 1.6622499999999985, 2.017999999999999, 2.0257499999999986, nan, 1.6027500000000003, 1.179499999999999, nan, nan, 2.4079999999999995, 2.314, nan, nan, nan, 1.513749999999999], zp_timestamp='2025-11-12T18:49:00')
2025-11-12T20:52:33.559 [DEBUG] [Thread-22573] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:52:33.633 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:52:33.645 [DEBUG] [Thread-22576] [transport.py] [_log()] starting thread (client mode): 0x173befb0
2025-11-12T20:52:33.646 [DEBUG] [Thread-22576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:52:33.660 [DEBUG] [Thread-22576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:52:33.660 [INFO] [Thread-22576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] client lang: <none>
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] server lang: <none>
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] kex follows: False
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:52:33.668 [DEBUG] [Thread-22576] [transport.py] [_log()] Compression: none
2025-11-12T20:52:33.669 [DEBUG] [Thread-22576] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:52:33.724 [DEBUG] [Thread-22576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:52:33.724 [DEBUG] [Thread-22576] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:52:33.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:52:33.724 [DEBUG] [Thread-22576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:52:33.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:52:33.781 [DEBUG] [Thread-22576] [transport.py] [_log()] userauth is OK
2025-11-12T20:52:33.781 [DEBUG] [Thread-22576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:52:33.781 [DEBUG] [Thread-22576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:52:33.781 [DEBUG] [Thread-22576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:52:33.781 [DEBUG] [Thread-22576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:52:33.797 [INFO] [Thread-22576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:52:33.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:52:33.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:52:34.633 [DEBUG] [Thread-22576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:52:34.633 [DEBUG] [Thread-22576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:52:34.681 [DEBUG] [Thread-22576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:52:34.681 [DEBUG] [Thread-22576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:52:34.689 [DEBUG] [Thread-22576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:52:34.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:52:34.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-11-12T20:52:34.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:52:34.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:52:34.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:52:34.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:52:34.722 [DEBUG] [Thread-22576] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:52:41.502 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:52:41.503 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:52:42.148 [DEBUG] [Thread-22578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:52:53.331 [DEBUG] [Thread-22579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:52:57.200 [DEBUG] [Thread-22580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:53:04.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:53:04.744 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:53:04.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-11-12T20:53:05.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 52, 31), 17.78, 30.65, 0.0, 13.87, 19.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:53:05.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:52:31
2025-11-12T20:53:05.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:53:05.700 [DEBUG] [Thread-22581] [transport.py] [_log()] starting thread (client mode): 0x11f00d60
2025-11-12T20:53:05.700 [DEBUG] [Thread-22581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:53:05.720 [DEBUG] [Thread-22581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:53:05.720 [INFO] [Thread-22581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] client lang: <none>
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] server lang: <none>
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] kex follows: False
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] Compression: none
2025-11-12T20:53:05.724 [DEBUG] [Thread-22581] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:53:05.740 [DEBUG] [Thread-22581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:53:05.740 [DEBUG] [Thread-22581] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:53:05.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:53:05.740 [DEBUG] [Thread-22581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:53:05.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:53:05.741 [DEBUG] [Thread-22581] [transport.py] [_log()] userauth is OK
2025-11-12T20:53:05.741 [DEBUG] [Thread-22581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:53:05.741 [DEBUG] [Thread-22581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:53:05.741 [DEBUG] [Thread-22581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:53:05.741 [DEBUG] [Thread-22581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:53:05.750 [INFO] [Thread-22581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:53:05.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:53:06.367 [DEBUG] [Thread-22581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:53:06.377 [DEBUG] [Thread-22581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:53:06.377 [DEBUG] [Thread-22581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:53:06.409 [DEBUG] [Thread-22581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:53:06.409 [DEBUG] [Thread-22581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:53:06.412 [DEBUG] [Thread-22581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:53:06.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:53:06.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:53:06.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:53:06.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:53:06.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:53:06.434 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:53:06.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:53:06.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:53:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:53:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.786543 -999.00  +19.30   8.16     35   +3.80 1 2 1 1 1     0    0 14.90 -38.05 Z.Esw 8.1 8.2 275.4 13.4 19.9 -22.1 19.9 -21.1 19.6 -20.8 19.9 -21.1
2025-11-12T20:53:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:53:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:53:06.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.786543
2025-11-12T20:53:06.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:53:06.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:53:06.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:53:06.437 [DEBUG] [Thread-22581] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:53:06.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:53:06.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:53:06.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:52:31', tmtdew=17.78, humidity=30.65, cloud=0.0, wind=13.87, temperature=19.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:53:03', seeing=0.8, atlas_timestamp='2025-11-12T18:52:37.315', atlas_cloud=2, atlas_rain=1, zp_data=[0.675749999999999, 0.7662500000000012, 0.7707500000000005, 0.8744999999999994, 1.1185, 1.3192500000000011, 1.2229999999999999, 0.7007500000000011, 0.6149999999999993, 1.3740000000000006, 1.4682499999999994, 1.2909999999999995, 1.806, 1.7272499999999997, 1.9959999999999996, 1.0619999999999994, 0.6937499999999996, 1.1985000000000001, 1.9914999999999994, 1.4702499999999992, 2.0439999999999987, nan, nan, 1.8937500000000007, 1.1549999999999994, nan, nan, 2.7115, 1.362, nan, nan, nan, 1.4232499999999995], zp_timestamp='2025-11-12T18:51:00')
2025-11-12T20:53:06.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:53:06.531 [DEBUG] [Thread-22584] [transport.py] [_log()] starting thread (client mode): 0x11f000a0
2025-11-12T20:53:06.531 [DEBUG] [Thread-22584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:53:06.545 [DEBUG] [Thread-22584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:53:06.545 [INFO] [Thread-22584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] client lang: <none>
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] server lang: <none>
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] kex follows: False
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:53:06.553 [DEBUG] [Thread-22584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:53:06.554 [DEBUG] [Thread-22584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:53:06.554 [DEBUG] [Thread-22584] [transport.py] [_log()] Compression: none
2025-11-12T20:53:06.554 [DEBUG] [Thread-22584] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:53:06.613 [DEBUG] [Thread-22584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:53:06.614 [DEBUG] [Thread-22584] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:53:06.615 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:53:06.615 [DEBUG] [Thread-22584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:53:06.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:53:06.668 [DEBUG] [Thread-22584] [transport.py] [_log()] userauth is OK
2025-11-12T20:53:06.669 [DEBUG] [Thread-22584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:53:06.669 [DEBUG] [Thread-22584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:53:06.669 [DEBUG] [Thread-22584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:53:06.669 [DEBUG] [Thread-22584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:53:06.683 [INFO] [Thread-22584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:53:06.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:53:06.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:53:07.553 [DEBUG] [Thread-22584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:53:07.562 [DEBUG] [Thread-22584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:53:07.601 [DEBUG] [Thread-22584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:53:07.601 [DEBUG] [Thread-22584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:53:07.610 [DEBUG] [Thread-22584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:53:07.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:53:07.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-11-12T20:53: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') -> 00000000
2025-11-12T20:53:07.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:53:07.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:53:07.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:53:07.646 [DEBUG] [Thread-22584] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:53:12.232 [DEBUG] [Thread-22586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:53:27.283 [DEBUG] [Thread-22587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:53:37.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:53:37.668 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:53:37.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-11-12T20:53:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 53, 3), 17.75, 30.72, 0.0, 14.13, 19.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:53:38.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:53:03
2025-11-12T20:53:38.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:53:38.584 [DEBUG] [Thread-22588] [transport.py] [_log()] starting thread (client mode): 0x11f03970
2025-11-12T20:53:38.584 [DEBUG] [Thread-22588] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:53:38.602 [DEBUG] [Thread-22588] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:53:38.602 [INFO] [Thread-22588] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:53:38.604 [DEBUG] [Thread-22588] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] client lang: <none>
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] server lang: <none>
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] kex follows: False
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] Compression: none
2025-11-12T20:53:38.605 [DEBUG] [Thread-22588] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:53:38.615 [DEBUG] [Thread-22588] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:53:38.616 [DEBUG] [Thread-22588] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:53:38.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:53:38.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:53:38.618 [DEBUG] [Thread-22588] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:53:38.618 [DEBUG] [Thread-22588] [transport.py] [_log()] userauth is OK
2025-11-12T20:53:38.618 [DEBUG] [Thread-22588] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:53:38.618 [DEBUG] [Thread-22588] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:53:38.618 [DEBUG] [Thread-22588] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:53:38.619 [DEBUG] [Thread-22588] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:53:38.634 [INFO] [Thread-22588] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:53:38.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:53:39.259 [DEBUG] [Thread-22588] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:53:39.259 [DEBUG] [Thread-22588] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:53:39.259 [DEBUG] [Thread-22588] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:53:39.299 [DEBUG] [Thread-22588] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:53:39.300 [DEBUG] [Thread-22588] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:53:39.303 [DEBUG] [Thread-22588] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:53:39.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:53:39.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:53:39.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:53:39.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:53:39.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:53:39.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:53:39.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:53:39.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:53:39.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:53:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.786890 -999.00  +19.30   7.97     35   +3.80 1 2 1 1 1     0    0 14.76 -36.09 Z.Esw 8.3 8.0 273.0 11.4 19.9 -22.1 19.9 -21.2 19.6 -20.7 19.8 -21.2
2025-11-12T20:53:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:53:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:53:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.786890
2025-11-12T20:53:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:53:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:53:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:53:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:53:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:53:39.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:53:03', tmtdew=17.75, humidity=30.72, cloud=0.0, wind=14.13, temperature=19.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:53:35', seeing=0.81, atlas_timestamp='2025-11-12T18:53:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[0.675749999999999, 0.7662500000000012, 0.7707500000000005, 0.8744999999999994, 1.1185, 1.3192500000000011, 1.2229999999999999, 0.7007500000000011, 0.6149999999999993, 1.3740000000000006, 1.4682499999999994, 1.2909999999999995, 1.806, 1.7272499999999997, 1.9959999999999996, 1.0619999999999994, 0.6937499999999996, 1.1985000000000001, 1.9914999999999994, 1.4702499999999992, 2.0439999999999987, nan, nan, 1.8937500000000007, 1.1549999999999994, nan, nan, 2.7115, 1.362, nan, nan, nan, 1.4232499999999995], zp_timestamp='2025-11-12T18:51:00')
2025-11-12T20:53:39.327 [DEBUG] [Thread-22588] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:53:39.410 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:53:39.422 [DEBUG] [Thread-22591] [transport.py] [_log()] starting thread (client mode): 0x173998a0
2025-11-12T20:53:39.422 [DEBUG] [Thread-22591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:53:39.440 [DEBUG] [Thread-22591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:53:39.440 [INFO] [Thread-22591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:53:39.447 [DEBUG] [Thread-22591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:53:39.447 [DEBUG] [Thread-22591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:53:39.447 [DEBUG] [Thread-22591] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:53:39.447 [DEBUG] [Thread-22591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:53:39.447 [DEBUG] [Thread-22591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:53:39.447 [DEBUG] [Thread-22591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] client lang: <none>
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] server lang: <none>
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] kex follows: False
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] Compression: none
2025-11-12T20:53:39.448 [DEBUG] [Thread-22591] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:53:39.504 [DEBUG] [Thread-22591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:53:39.505 [DEBUG] [Thread-22591] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:53:39.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:53:39.506 [DEBUG] [Thread-22591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:53:39.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:53:39.562 [DEBUG] [Thread-22591] [transport.py] [_log()] userauth is OK
2025-11-12T20:53:39.562 [DEBUG] [Thread-22591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:53:39.562 [DEBUG] [Thread-22591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:53:39.562 [DEBUG] [Thread-22591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:53:39.562 [DEBUG] [Thread-22591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:53:39.581 [INFO] [Thread-22591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:53:39.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:53:39.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:53:40.414 [DEBUG] [Thread-22591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:53:40.414 [DEBUG] [Thread-22591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:53:40.462 [DEBUG] [Thread-22591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:53:40.463 [DEBUG] [Thread-22591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:53:40.472 [DEBUG] [Thread-22591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:53:40.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:53:40.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-11-12T20:53:40.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:53:40.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:53:40.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:53:40.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:53:40.509 [DEBUG] [Thread-22591] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:53:41.708 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:53:41.709 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:53:42.317 [DEBUG] [Thread-22593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:53:53.382 [DEBUG] [Thread-22594 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:53:57.365 [DEBUG] [Thread-22595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:54:10.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:54:10.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:54: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-11-12T20:54:11.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 54, 7), 17.67, 30.77, 0.0, 14.61, 19.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:54:11.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:54:07
2025-11-12T20:54:11.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:54:11.440 [DEBUG] [Thread-22596] [transport.py] [_log()] starting thread (client mode): 0x11f01690
2025-11-12T20:54:11.441 [DEBUG] [Thread-22596] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:54:11.460 [DEBUG] [Thread-22596] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:54:11.460 [INFO] [Thread-22596] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] client lang: <none>
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] server lang: <none>
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] kex follows: False
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:54:11.464 [DEBUG] [Thread-22596] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:54:11.465 [DEBUG] [Thread-22596] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:54:11.465 [DEBUG] [Thread-22596] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:54:11.465 [DEBUG] [Thread-22596] [transport.py] [_log()] Compression: none
2025-11-12T20:54:11.465 [DEBUG] [Thread-22596] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:54:11.473 [DEBUG] [Thread-22596] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:54:11.474 [DEBUG] [Thread-22596] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:54:11.474 [DEBUG] [Thread-22596] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:54:11.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:54:11.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:54:11.476 [DEBUG] [Thread-22596] [transport.py] [_log()] userauth is OK
2025-11-12T20:54:11.476 [DEBUG] [Thread-22596] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:54:11.476 [DEBUG] [Thread-22596] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:54:11.476 [DEBUG] [Thread-22596] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:54:11.476 [DEBUG] [Thread-22596] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:54:11.501 [INFO] [Thread-22596] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:54:11.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:54:12.112 [DEBUG] [Thread-22596] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:54:12.113 [DEBUG] [Thread-22596] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:54:12.113 [DEBUG] [Thread-22596] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:54:12.153 [DEBUG] [Thread-22596] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:54:12.153 [DEBUG] [Thread-22596] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:54:12.156 [DEBUG] [Thread-22596] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:54:12.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:54:12.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:54:12.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:54:12.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:54:12.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:54:12.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:54:12.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:54:12.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:54:12.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:54:12.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.787584 -999.00  +19.30   7.63     35   +3.70 1 2 1 1 1     0    0 14.93 -33.71 Z.Es. 10.4 7.6 280.4 10.1 19.9 -22.1 19.9 -21.2 19.5 -20.6 19.8 -21.3
2025-11-12T20:54:12.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:54:12.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:54:12.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.787584
2025-11-12T20:54:12.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:54:12.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:54:12.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:54:12.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:54:12.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:54:12.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:54:07', tmtdew=17.67, humidity=30.77, cloud=0.0, wind=14.61, temperature=19.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:54:07', seeing=0.87, atlas_timestamp='2025-11-12T18:54:07.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.675749999999999, 0.7662500000000012, 0.7707500000000005, 0.8744999999999994, 1.1185, 1.3192500000000011, 1.2229999999999999, 0.7007500000000011, 0.6149999999999993, 1.3740000000000006, 1.4682499999999994, 1.2909999999999995, 1.806, 1.7272499999999997, 1.9959999999999996, 1.0619999999999994, 0.6937499999999996, 1.1985000000000001, 1.9914999999999994, 1.4702499999999992, 2.0439999999999987, nan, nan, 1.8937500000000007, 1.1549999999999994, nan, nan, 2.7115, 1.362, nan, nan, nan, 1.4232499999999995], zp_timestamp='2025-11-12T18:51:00')
2025-11-12T20:54:12.180 [DEBUG] [Thread-22596] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:54:12.264 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:54:12.277 [DEBUG] [Thread-22599] [transport.py] [_log()] starting thread (client mode): 0x173be740
2025-11-12T20:54:12.277 [DEBUG] [Thread-22599] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:54:12.291 [DEBUG] [Thread-22599] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:54:12.292 [INFO] [Thread-22599] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] client lang: <none>
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] server lang: <none>
2025-11-12T20:54:12.300 [DEBUG] [Thread-22599] [transport.py] [_log()] kex follows: False
2025-11-12T20:54:12.301 [DEBUG] [Thread-22599] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:54:12.301 [DEBUG] [Thread-22599] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:54:12.301 [DEBUG] [Thread-22599] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:54:12.301 [DEBUG] [Thread-22599] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:54:12.301 [DEBUG] [Thread-22599] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:54:12.301 [DEBUG] [Thread-22599] [transport.py] [_log()] Compression: none
2025-11-12T20:54:12.301 [DEBUG] [Thread-22599] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:54:12.361 [DEBUG] [Thread-22599] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:54:12.362 [DEBUG] [Thread-22599] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:54:12.363 [DEBUG] [Thread-22599] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:54:12.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:54:12.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:54:12.401 [DEBUG] [Thread-22601 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:54:12.420 [DEBUG] [Thread-22599] [transport.py] [_log()] userauth is OK
2025-11-12T20:54:12.420 [DEBUG] [Thread-22599] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:54:12.420 [DEBUG] [Thread-22599] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:54:12.420 [DEBUG] [Thread-22599] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:54:12.420 [DEBUG] [Thread-22599] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:54:12.447 [INFO] [Thread-22599] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:54:12.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:54:12.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:54:13.279 [DEBUG] [Thread-22599] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:54:13.279 [DEBUG] [Thread-22599] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:54:13.327 [DEBUG] [Thread-22599] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:54:13.327 [DEBUG] [Thread-22599] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:54:13.336 [DEBUG] [Thread-22599] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:54:13.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:54:13.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-11-12T20:54:13.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-11-12T20:54:13.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:54:13.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:54:13.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:54:13.373 [DEBUG] [Thread-22599] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:54:27.453 [DEBUG] [Thread-22602 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:54:41.916 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:54:41.917 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:54:42.481 [DEBUG] [Thread-22603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:54:43.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:54:43.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:54:43.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-11-12T20:54:44.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 54, 39), 17.67, 30.79, 0.0, 12.3, 19.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:54:44.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:54:39
2025-11-12T20:54:44.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:54:44.291 [DEBUG] [Thread-22604] [transport.py] [_log()] starting thread (client mode): 0x14907fd0
2025-11-12T20:54:44.291 [DEBUG] [Thread-22604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:54:44.313 [DEBUG] [Thread-22604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:54:44.313 [INFO] [Thread-22604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:54:44.315 [DEBUG] [Thread-22604] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] client lang: <none>
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] server lang: <none>
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] kex follows: False
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] Compression: none
2025-11-12T20:54:44.316 [DEBUG] [Thread-22604] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:54:44.337 [DEBUG] [Thread-22604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:54:44.338 [DEBUG] [Thread-22604] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:54:44.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:54:44.339 [DEBUG] [Thread-22604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:54:44.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:54:44.341 [DEBUG] [Thread-22604] [transport.py] [_log()] userauth is OK
2025-11-12T20:54:44.341 [DEBUG] [Thread-22604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:54:44.341 [DEBUG] [Thread-22604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:54:44.341 [DEBUG] [Thread-22604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:54:44.341 [DEBUG] [Thread-22604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:54:44.362 [INFO] [Thread-22604] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:54:44.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:54:44.944 [DEBUG] [Thread-22604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:54:44.944 [DEBUG] [Thread-22604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:54:44.944 [DEBUG] [Thread-22604] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:54:44.985 [DEBUG] [Thread-22604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:54:44.985 [DEBUG] [Thread-22604] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:54:44.988 [DEBUG] [Thread-22604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:54:45.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:54:45.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:54:45.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:54:45.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:54:45.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:54:45.012 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:54:45.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:54:45.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:54:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:54:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.787931 -999.00  +19.30   7.00     35   +3.70 1 2 1 1 1     0    0 15.08 -35.34 Z.Es. 8.6 7.0 266.4 12.2 19.9 -22.1 19.9 -21.1 19.6 -20.7 19.8 -21.2
2025-11-12T20:54:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:54:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:54:45.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.787931
2025-11-12T20:54:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:54:45.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:54:45.015 [DEBUG] [Thread-22604] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:54:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:54:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:54:45.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:54:45.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:54:39', tmtdew=17.67, humidity=30.79, cloud=0.0, wind=12.3, temperature=19.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:54:39', seeing=0.87, atlas_timestamp='2025-11-12T18:54:37.238', atlas_cloud=2, atlas_rain=1, zp_data=[0.675749999999999, 0.7662500000000012, 0.7707500000000005, 0.8744999999999994, 1.1185, 1.3192500000000011, 1.2229999999999999, 0.7007500000000011, 0.6149999999999993, 1.3740000000000006, 1.4682499999999994, 1.2909999999999995, 1.806, 1.7272499999999997, 1.9959999999999996, 1.0619999999999994, 0.6937499999999996, 1.1985000000000001, 1.9914999999999994, 1.4702499999999992, 2.0439999999999987, nan, nan, 1.8937500000000007, 1.1549999999999994, nan, nan, 2.7115, 1.362, nan, nan, nan, 1.4232499999999995], zp_timestamp='2025-11-12T18:51:00')
2025-11-12T20:54:45.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:54:53.442 [DEBUG] [Thread-22607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:54:57.518 [DEBUG] [Thread-22608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:55:12.562 [DEBUG] [Thread-22609 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:55:27.598 [DEBUG] [Thread-22610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:55:42.123 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:55:42.124 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:55:42.639 [DEBUG] [Thread-22611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:55:53.498 [DEBUG] [Thread-22612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:55:57.677 [DEBUG] [Thread-22613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:56:12.714 [DEBUG] [Thread-22614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:56:27.745 [DEBUG] [Thread-22615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:56:42.329 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:56:42.330 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:56:42.775 [DEBUG] [Thread-22616 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:56:53.555 [DEBUG] [Thread-22617 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:56:57.810 [DEBUG] [Thread-22618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:56:59.579 [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-11-12T20:57:12.842 [DEBUG] [Thread-22619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:57:27.879 [DEBUG] [Thread-22620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:57:29.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:57:29.609 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:57:29.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-11-12T20:57:30.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 57, 19), 17.53, 30.95, 0.0, 12.51, 19.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:57:30.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:57:19
2025-11-12T20:57:30.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:57:30.525 [DEBUG] [Thread-22621] [transport.py] [_log()] starting thread (client mode): 0x14906bf0
2025-11-12T20:57:30.525 [DEBUG] [Thread-22621] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:57:30.541 [DEBUG] [Thread-22621] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:57:30.541 [INFO] [Thread-22621] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:57:30.544 [DEBUG] [Thread-22621] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:57:30.544 [DEBUG] [Thread-22621] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:57:30.544 [DEBUG] [Thread-22621] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:57:30.544 [DEBUG] [Thread-22621] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:57:30.544 [DEBUG] [Thread-22621] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] client lang: <none>
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] server lang: <none>
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] kex follows: False
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] Compression: none
2025-11-12T20:57:30.545 [DEBUG] [Thread-22621] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:57:30.563 [DEBUG] [Thread-22621] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:57:30.564 [DEBUG] [Thread-22621] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:57:30.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:57:30.564 [DEBUG] [Thread-22621] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:57:30.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:57:30.566 [DEBUG] [Thread-22621] [transport.py] [_log()] userauth is OK
2025-11-12T20:57:30.567 [DEBUG] [Thread-22621] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:57:30.567 [DEBUG] [Thread-22621] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:57:30.567 [DEBUG] [Thread-22621] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:57:30.567 [DEBUG] [Thread-22621] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:57:30.591 [INFO] [Thread-22621] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:57:30.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:57:31.190 [DEBUG] [Thread-22621] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:57:31.190 [DEBUG] [Thread-22621] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:57:31.190 [DEBUG] [Thread-22621] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:57:31.230 [DEBUG] [Thread-22621] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:57:31.231 [DEBUG] [Thread-22621] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:57:31.234 [DEBUG] [Thread-22621] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:57:31.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:57:31.245 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:57:31.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:57:31.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:57:31.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:57:31.264 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:57:31.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:57:31.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:57:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:57:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.789320 -999.00  +19.20   9.38     36   +3.80 1 2 1 1 1     0    0 14.63 -36.77 Z.Esw 7.1 9.4 267.5 16.1 19.9 -22.0 19.8 -21.1 19.5 -20.6 19.8 -21.1
2025-11-12T20:57:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:57:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:57:31.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.789320
2025-11-12T20:57:31.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:57:31.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:57:31.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:57:31.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:57:31.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:57:31.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:57:19', tmtdew=17.53, humidity=30.95, cloud=0.0, wind=12.51, temperature=19.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:57:19', seeing=0.74, atlas_timestamp='2025-11-12T18:56:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[0.6847499999999993, 0.6022500000000006, 0.75075, 0.8104999999999993, 1.5190000000000001, 1.587250000000001, 1.242, 1.0282500000000008, 0.7044999999999995, 1.061, 1.2127499999999998, 1.4104999999999999, 1.7559999999999993, 1.7537499999999993, 1.677999999999999, 0.8969999999999994, 0.5802499999999995, 1.5744999999999996, 1.7234999999999996, 1.621249999999999, 1.6359999999999983, 1.5767499999999988, nan, 1.4067499999999997, 0.690999999999999, nan, nan, 2.0745000000000005, 1.287, nan, nan, nan, 1.5087499999999991], zp_timestamp='2025-11-12T18:55:00')
2025-11-12T20:57:31.267 [DEBUG] [Thread-22621] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:57:31.351 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:57:31.363 [DEBUG] [Thread-22624] [transport.py] [_log()] starting thread (client mode): 0x14904b50
2025-11-12T20:57:31.364 [DEBUG] [Thread-22624] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:57:31.379 [DEBUG] [Thread-22624] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:57:31.379 [INFO] [Thread-22624] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] client lang: <none>
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] server lang: <none>
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] kex follows: False
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:57:31.387 [DEBUG] [Thread-22624] [transport.py] [_log()] Compression: none
2025-11-12T20:57:31.388 [DEBUG] [Thread-22624] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:57:31.445 [DEBUG] [Thread-22624] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:57:31.445 [DEBUG] [Thread-22624] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:57:31.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:57:31.446 [DEBUG] [Thread-22624] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:57:31.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:57:31.506 [DEBUG] [Thread-22624] [transport.py] [_log()] userauth is OK
2025-11-12T20:57:31.506 [DEBUG] [Thread-22624] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:57:31.506 [DEBUG] [Thread-22624] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:57:31.506 [DEBUG] [Thread-22624] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:57:31.506 [DEBUG] [Thread-22624] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:57:31.525 [INFO] [Thread-22624] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:57:31.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:57:31.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:57:32.355 [DEBUG] [Thread-22624] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:57:32.355 [DEBUG] [Thread-22624] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:57:32.403 [DEBUG] [Thread-22624] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:57:32.404 [DEBUG] [Thread-22624] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:57:32.413 [DEBUG] [Thread-22624] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:57:32.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:57:32.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:57:32.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:57:32.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:57:32.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:57:32.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:57:32.449 [DEBUG] [Thread-22624] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:57:42.535 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:57:42.536 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:57:42.912 [DEBUG] [Thread-22626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:57:53.607 [DEBUG] [Thread-22627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:57:57.963 [DEBUG] [Thread-22628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:58:02.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:58:02.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:58:02.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-11-12T20:58:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 57, 51), 17.51, 31.0, 0.0, 11.52, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:58:03.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:57:51
2025-11-12T20:58:03.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:58:03.387 [DEBUG] [Thread-22629] [transport.py] [_log()] starting thread (client mode): 0x14907820
2025-11-12T20:58:03.387 [DEBUG] [Thread-22629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:58:03.407 [DEBUG] [Thread-22629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:58:03.407 [INFO] [Thread-22629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] client lang: <none>
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] server lang: <none>
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] kex follows: False
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] Compression: none
2025-11-12T20:58:03.410 [DEBUG] [Thread-22629] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:58:03.428 [DEBUG] [Thread-22629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:58:03.428 [DEBUG] [Thread-22629] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:58:03.429 [DEBUG] [Thread-22629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:58:03.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:58:03.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:58:03.431 [DEBUG] [Thread-22629] [transport.py] [_log()] userauth is OK
2025-11-12T20:58:03.431 [DEBUG] [Thread-22629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:58:03.431 [DEBUG] [Thread-22629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:58:03.431 [DEBUG] [Thread-22629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:58:03.432 [DEBUG] [Thread-22629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:58:03.456 [INFO] [Thread-22629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:58:03.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:58:04.100 [DEBUG] [Thread-22629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:58:04.100 [DEBUG] [Thread-22629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:58:04.101 [DEBUG] [Thread-22629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:58:04.142 [DEBUG] [Thread-22629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:58:04.142 [DEBUG] [Thread-22629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:58:04.145 [DEBUG] [Thread-22629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:58:04.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:58:04.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:58:04.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:58:04.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:58:04.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:58:04.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:58:04.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:58:04.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:58:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:58:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.789667 -999.00  +19.20   7.31     36   +3.80 1 2 1 1 1     0    0 14.50 -37.86 Z.Esw 8.5 7.3 247.6 9.4 19.9 -21.9 19.8 -21.0 19.4 -20.6 19.7 -21.0
2025-11-12T20:58:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:58:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:58:04.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.789667
2025-11-12T20:58:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:58:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:58:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:58:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:58:04.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:58:04.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:57:51', tmtdew=17.51, humidity=31.0, cloud=0.0, wind=11.52, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:57:51', seeing=0.74, atlas_timestamp='2025-11-12T18:57:07.229', atlas_cloud=2, atlas_rain=1, zp_data=[0.6847499999999993, 0.6022500000000006, 0.75075, 0.8104999999999993, 1.5190000000000001, 1.587250000000001, 1.242, 1.0282500000000008, 0.7044999999999995, 1.061, 1.2127499999999998, 1.4104999999999999, 1.7559999999999993, 1.7537499999999993, 1.677999999999999, 0.8969999999999994, 0.5802499999999995, 1.5744999999999996, 1.7234999999999996, 1.621249999999999, 1.6359999999999983, 1.5767499999999988, nan, 1.4067499999999997, 0.690999999999999, nan, nan, 2.0745000000000005, 1.287, nan, nan, nan, 1.5087499999999991], zp_timestamp='2025-11-12T18:55:00')
2025-11-12T20:58:04.172 [DEBUG] [Thread-22629] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:58:04.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:58:04.267 [DEBUG] [Thread-22632] [transport.py] [_log()] starting thread (client mode): 0x149050c0
2025-11-12T20:58:04.268 [DEBUG] [Thread-22632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:58:04.282 [DEBUG] [Thread-22632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:58:04.282 [INFO] [Thread-22632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:58:04.290 [DEBUG] [Thread-22632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:58:04.290 [DEBUG] [Thread-22632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:58:04.290 [DEBUG] [Thread-22632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:58:04.290 [DEBUG] [Thread-22632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] client lang: <none>
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] server lang: <none>
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] kex follows: False
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:58:04.291 [DEBUG] [Thread-22632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:58:04.292 [DEBUG] [Thread-22632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:58:04.292 [DEBUG] [Thread-22632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:58:04.292 [DEBUG] [Thread-22632] [transport.py] [_log()] Compression: none
2025-11-12T20:58:04.292 [DEBUG] [Thread-22632] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:58:04.349 [DEBUG] [Thread-22632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:58:04.350 [DEBUG] [Thread-22632] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:58:04.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:58:04.351 [DEBUG] [Thread-22632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:58:04.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:58:04.405 [DEBUG] [Thread-22632] [transport.py] [_log()] userauth is OK
2025-11-12T20:58:04.405 [DEBUG] [Thread-22632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:58:04.405 [DEBUG] [Thread-22632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:58:04.405 [DEBUG] [Thread-22632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:58:04.406 [DEBUG] [Thread-22632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:58:04.425 [INFO] [Thread-22632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:58:04.425 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:58:04.425 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:58:05.287 [DEBUG] [Thread-22632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:58:05.287 [DEBUG] [Thread-22632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:58:05.334 [DEBUG] [Thread-22632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:58:05.334 [DEBUG] [Thread-22632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:58:05.343 [DEBUG] [Thread-22632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:58:05.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:58:05.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')
2025-11-12T20:58:05.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-11-12T20:58:05.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:58:05.368 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:58:05.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:58:05.376 [DEBUG] [Thread-22632] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:58:13.000 [DEBUG] [Thread-22634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:58:28.049 [DEBUG] [Thread-22635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:58:35.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:58:35.391 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:58:35.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T20:58:36.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 58, 23), 17.55, 30.92, 0.0, 8.56, 19.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:58:36.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:58:23
2025-11-12T20:58:36.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:58:36.317 [DEBUG] [Thread-22636] [transport.py] [_log()] starting thread (client mode): 0x11f011b0
2025-11-12T20:58:36.317 [DEBUG] [Thread-22636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:58:36.337 [DEBUG] [Thread-22636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:58:36.337 [INFO] [Thread-22636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] client lang: <none>
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] server lang: <none>
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] kex follows: False
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:58:36.340 [DEBUG] [Thread-22636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:58:36.341 [DEBUG] [Thread-22636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:58:36.341 [DEBUG] [Thread-22636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:58:36.341 [DEBUG] [Thread-22636] [transport.py] [_log()] Compression: none
2025-11-12T20:58:36.341 [DEBUG] [Thread-22636] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:58:36.357 [DEBUG] [Thread-22636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:58:36.358 [DEBUG] [Thread-22636] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:58:36.358 [DEBUG] [Thread-22636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:58:36.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:58:36.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:58:36.360 [DEBUG] [Thread-22636] [transport.py] [_log()] userauth is OK
2025-11-12T20:58:36.361 [DEBUG] [Thread-22636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:58:36.361 [DEBUG] [Thread-22636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:58:36.361 [DEBUG] [Thread-22636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:58:36.361 [DEBUG] [Thread-22636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:58:36.384 [INFO] [Thread-22636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:58:36.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:58:36.995 [DEBUG] [Thread-22636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:58:36.995 [DEBUG] [Thread-22636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:58:36.995 [DEBUG] [Thread-22636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:58:37.036 [DEBUG] [Thread-22636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:58:37.036 [DEBUG] [Thread-22636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:58:37.039 [DEBUG] [Thread-22636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:58:37.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:58:37.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:58:37.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:58:37.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:58:37.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:58:37.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:58:37.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:58:37.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:58:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:58:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.790362 -999.00  +19.20   8.14     36   +3.80 1 2 1 1 1     0    0 14.45 -43.30 Z.EsW 8.6 8.1 262.0 11.7 19.9 -21.9 19.8 -21.0 19.4 -20.5 19.7 -21.1
2025-11-12T20:58:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:58:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:58:37.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.790362
2025-11-12T20:58:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:58:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:58:37.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:58:37.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:58:37.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:58:37.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:58:23', tmtdew=17.55, humidity=30.92, cloud=0.0, wind=8.56, temperature=19.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:58:23', seeing=0.88, atlas_timestamp='2025-11-12T18:58:07.277', atlas_cloud=2, atlas_rain=1, zp_data=[0.6847499999999993, 0.6022500000000006, 0.75075, 0.8104999999999993, 1.5190000000000001, 1.587250000000001, 1.242, 1.0282500000000008, 0.7044999999999995, 1.061, 1.2127499999999998, 1.4104999999999999, 1.7559999999999993, 1.7537499999999993, 1.677999999999999, 0.8969999999999994, 0.5802499999999995, 1.5744999999999996, 1.7234999999999996, 1.621249999999999, 1.6359999999999983, 1.5767499999999988, nan, 1.4067499999999997, 0.690999999999999, nan, nan, 2.0745000000000005, 1.287, nan, nan, nan, 1.5087499999999991], zp_timestamp='2025-11-12T18:55:00')
2025-11-12T20:58:37.066 [DEBUG] [Thread-22636] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:58:37.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:58:37.162 [DEBUG] [Thread-22639] [transport.py] [_log()] starting thread (client mode): 0x11f03370
2025-11-12T20:58:37.162 [DEBUG] [Thread-22639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:58:37.177 [DEBUG] [Thread-22639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:58:37.177 [INFO] [Thread-22639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:58:37.184 [DEBUG] [Thread-22639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:58:37.184 [DEBUG] [Thread-22639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] client lang: <none>
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] server lang: <none>
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] kex follows: False
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] Compression: none
2025-11-12T20:58:37.185 [DEBUG] [Thread-22639] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:58:37.241 [DEBUG] [Thread-22639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:58:37.241 [DEBUG] [Thread-22639] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:58:37.242 [DEBUG] [Thread-22639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:58:37.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:58:37.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:58:37.298 [DEBUG] [Thread-22639] [transport.py] [_log()] userauth is OK
2025-11-12T20:58:37.298 [DEBUG] [Thread-22639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:58:37.298 [DEBUG] [Thread-22639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:58:37.298 [DEBUG] [Thread-22639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:58:37.298 [DEBUG] [Thread-22639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:58:37.317 [INFO] [Thread-22639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:58:37.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:58:37.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:58:38.140 [DEBUG] [Thread-22639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:58:38.140 [DEBUG] [Thread-22639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:58:38.187 [DEBUG] [Thread-22639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:58:38.187 [DEBUG] [Thread-22639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:58:38.196 [DEBUG] [Thread-22639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:58:38.205 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:58:38.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T20:58:38.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T20:58:38.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:58:38.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:58:38.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:58:38.230 [DEBUG] [Thread-22639] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:58:42.740 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:58:42.741 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:58:43.083 [DEBUG] [Thread-22641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:58:53.667 [DEBUG] [Thread-22642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:58:58.128 [DEBUG] [Thread-22643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:59:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:59:08.225 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:59:08.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-11-12T20:59:08.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 58, 55), 17.5, 30.92, 0.0, 10.75, 19.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:59:08.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:58:55
2025-11-12T20:59:09.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:59:09.162 [DEBUG] [Thread-22644] [transport.py] [_log()] starting thread (client mode): 0x11f00fd0
2025-11-12T20:59:09.162 [DEBUG] [Thread-22644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:59:09.184 [DEBUG] [Thread-22644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:59:09.185 [INFO] [Thread-22644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] client lang: <none>
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] server lang: <none>
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] kex follows: False
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:59:09.188 [DEBUG] [Thread-22644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:59:09.189 [DEBUG] [Thread-22644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:59:09.189 [DEBUG] [Thread-22644] [transport.py] [_log()] Compression: none
2025-11-12T20:59:09.189 [DEBUG] [Thread-22644] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:59:09.207 [DEBUG] [Thread-22644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:59:09.207 [DEBUG] [Thread-22644] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:59:09.208 [DEBUG] [Thread-22644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:59:09.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:59:09.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:59:09.210 [DEBUG] [Thread-22644] [transport.py] [_log()] userauth is OK
2025-11-12T20:59:09.210 [DEBUG] [Thread-22644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:59:09.211 [DEBUG] [Thread-22644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:59:09.211 [DEBUG] [Thread-22644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:59:09.211 [DEBUG] [Thread-22644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:59:09.224 [INFO] [Thread-22644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:59:09.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:59:09.860 [DEBUG] [Thread-22644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:59:09.860 [DEBUG] [Thread-22644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:59:09.861 [DEBUG] [Thread-22644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:59:09.900 [DEBUG] [Thread-22644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:59:09.901 [DEBUG] [Thread-22644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:59:09.904 [DEBUG] [Thread-22644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:59:09.915 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:59:09.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:59:09.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:59:09.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:59:09.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:59:09.926 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:59:09.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:59:09.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:59:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:59:09.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.790709 -999.00  +19.20   6.61     36   +3.80 1 2 1 1 1     0    0 14.25 -43.07 ZnEsW 5.6 6.6 271.4 9.7 19.8 -21.7 19.8 -20.8 19.5 -20.5 19.7 -21.0
2025-11-12T20:59:09.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:59:09.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:59:09.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.790709
2025-11-12T20:59:09.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:59:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:59:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:59:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:59:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:59:09.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:58:55', tmtdew=17.5, humidity=30.92, cloud=0.0, wind=10.75, temperature=19.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:58:55', seeing=0.8, atlas_timestamp='2025-11-12T18:58:37.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.6847499999999993, 0.6022500000000006, 0.75075, 0.8104999999999993, 1.5190000000000001, 1.587250000000001, 1.242, 1.0282500000000008, 0.7044999999999995, 1.061, 1.2127499999999998, 1.4104999999999999, 1.7559999999999993, 1.7537499999999993, 1.677999999999999, 0.8969999999999994, 0.5802499999999995, 1.5744999999999996, 1.7234999999999996, 1.621249999999999, 1.6359999999999983, 1.5767499999999988, nan, 1.4067499999999997, 0.690999999999999, nan, nan, 2.0745000000000005, 1.287, nan, nan, nan, 1.5087499999999991], zp_timestamp='2025-11-12T18:57:00')
2025-11-12T20:59:09.929 [DEBUG] [Thread-22644] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:59:10.013 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:59:10.026 [DEBUG] [Thread-22647] [transport.py] [_log()] starting thread (client mode): 0x11f00880
2025-11-12T20:59:10.026 [DEBUG] [Thread-22647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:59:10.041 [DEBUG] [Thread-22647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:59:10.041 [INFO] [Thread-22647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:59:10.049 [DEBUG] [Thread-22647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:59:10.050 [DEBUG] [Thread-22647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:59:10.050 [DEBUG] [Thread-22647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:59:10.050 [DEBUG] [Thread-22647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:59:10.050 [DEBUG] [Thread-22647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:59:10.050 [DEBUG] [Thread-22647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:59:10.050 [DEBUG] [Thread-22647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:59:10.050 [DEBUG] [Thread-22647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:59:10.050 [DEBUG] [Thread-22647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:59:10.051 [DEBUG] [Thread-22647] [transport.py] [_log()] client lang: <none>
2025-11-12T20:59:10.051 [DEBUG] [Thread-22647] [transport.py] [_log()] server lang: <none>
2025-11-12T20:59:10.051 [DEBUG] [Thread-22647] [transport.py] [_log()] kex follows: False
2025-11-12T20:59:10.051 [DEBUG] [Thread-22647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:59:10.051 [DEBUG] [Thread-22647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:59:10.051 [DEBUG] [Thread-22647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:59:10.051 [DEBUG] [Thread-22647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:59:10.051 [DEBUG] [Thread-22647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:59:10.052 [DEBUG] [Thread-22647] [transport.py] [_log()] Compression: none
2025-11-12T20:59:10.052 [DEBUG] [Thread-22647] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:59:10.110 [DEBUG] [Thread-22647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:59:10.111 [DEBUG] [Thread-22647] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:59:10.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:59:10.113 [DEBUG] [Thread-22647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:59:10.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:59:10.170 [DEBUG] [Thread-22647] [transport.py] [_log()] userauth is OK
2025-11-12T20:59:10.171 [DEBUG] [Thread-22647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:59:10.171 [DEBUG] [Thread-22647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:59:10.171 [DEBUG] [Thread-22647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:59:10.171 [DEBUG] [Thread-22647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:59:10.191 [INFO] [Thread-22647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:59:10.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:59:10.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:59:11.022 [DEBUG] [Thread-22647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:59:11.023 [DEBUG] [Thread-22647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:59:11.071 [DEBUG] [Thread-22647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:59:11.071 [DEBUG] [Thread-22647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:59:11.080 [DEBUG] [Thread-22647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:59:11.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:59:11.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-11-12T20:59:11.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-11-12T20:59:11.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:59:11.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:59:11.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:59:11.118 [DEBUG] [Thread-22647] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:59:13.158 [DEBUG] [Thread-22649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:59:28.211 [DEBUG] [Thread-22650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:59:41.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T20:59:41.131 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T20:59:41.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-11-12T20:59:41.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 59, 27), 17.49, 30.94, 0.0, 10.71, 19.03, 0, 0, 0, 2, 0, 0),)
2025-11-12T20:59:41.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:59:27
2025-11-12T20:59:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T20:59:42.075 [DEBUG] [Thread-22651] [transport.py] [_log()] starting thread (client mode): 0x14904790
2025-11-12T20:59:42.076 [DEBUG] [Thread-22651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:59:42.094 [DEBUG] [Thread-22651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T20:59:42.094 [INFO] [Thread-22651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] client lang: <none>
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] server lang: <none>
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] kex follows: False
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] Compression: none
2025-11-12T20:59:42.098 [DEBUG] [Thread-22651] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:59:42.113 [DEBUG] [Thread-22651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:59:42.113 [DEBUG] [Thread-22651] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:59:42.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T20:59:42.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:59:42.114 [DEBUG] [Thread-22651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T20:59:42.114 [DEBUG] [Thread-22651] [transport.py] [_log()] userauth is OK
2025-11-12T20:59:42.114 [DEBUG] [Thread-22651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:59:42.115 [DEBUG] [Thread-22651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:59:42.115 [DEBUG] [Thread-22651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T20:59:42.115 [DEBUG] [Thread-22651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:59:42.130 [INFO] [Thread-22651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:59:42.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:59:42.753 [DEBUG] [Thread-22651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:59:42.753 [DEBUG] [Thread-22651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:59:42.753 [DEBUG] [Thread-22651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T20:59:42.794 [DEBUG] [Thread-22651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:59:42.794 [DEBUG] [Thread-22651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:59:42.798 [DEBUG] [Thread-22651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:59:42.811 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:59:42.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T20:59:42.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T20:59:42.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T20:59:42.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:59:42.822 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T20:59:42.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:59:42.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:59:42.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T20:59:42.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.791056 -999.00  +19.20   6.69     36   +3.80 1 2 1 1 1     0    0 14.50 -40.92 ZnEsW 7.2 6.7 251.0 9.8 19.8 -21.8 19.8 -20.9 19.4 -20.6 19.7 -20.9
2025-11-12T20:59:42.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T20:59:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T20:59:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.791056
2025-11-12T20:59:42.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T20:59:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T20:59:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T20:59:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T20:59:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T20:59:42.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:59:27', tmtdew=17.49, humidity=30.94, cloud=0.0, wind=10.71, temperature=19.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:59:27', seeing=0.8, atlas_timestamp='2025-11-12T18:59:07.238', atlas_cloud=2, atlas_rain=1, zp_data=[0.6847499999999993, 0.6022500000000006, 0.75075, 0.8104999999999993, 1.5190000000000001, 1.587250000000001, 1.242, 1.0282500000000008, 0.7044999999999995, 1.061, 1.2127499999999998, 1.4104999999999999, 1.7559999999999993, 1.7537499999999993, 1.677999999999999, 0.8969999999999994, 0.5802499999999995, 1.5744999999999996, 1.7234999999999996, 1.621249999999999, 1.6359999999999983, 1.5767499999999988, nan, 1.4067499999999997, 0.690999999999999, nan, nan, 2.0745000000000005, 1.287, nan, nan, nan, 1.5087499999999991], zp_timestamp='2025-11-12T18:57:00')
2025-11-12T20:59:42.825 [DEBUG] [Thread-22651] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:59:42.904 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T20:59:42.915 [DEBUG] [Thread-22654] [transport.py] [_log()] starting thread (client mode): 0x14907ac0
2025-11-12T20:59:42.916 [DEBUG] [Thread-22654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T20:59:42.930 [DEBUG] [Thread-22654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T20:59:42.930 [INFO] [Thread-22654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T20:59:42.938 [DEBUG] [Thread-22654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T20:59:42.938 [DEBUG] [Thread-22654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T20:59:42.938 [DEBUG] [Thread-22654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T20:59:42.938 [DEBUG] [Thread-22654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:59:42.938 [DEBUG] [Thread-22654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] client lang: <none>
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] server lang: <none>
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] kex follows: False
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] Compression: none
2025-11-12T20:59:42.939 [DEBUG] [Thread-22654] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T20:59:42.947 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:59:42.948 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:59:42.998 [DEBUG] [Thread-22654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T20:59:42.999 [DEBUG] [Thread-22654] [transport.py] [_log()] Switch to new keys ...
2025-11-12T20:59:42.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T20:59:43.000 [DEBUG] [Thread-22654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T20:59:43.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T20:59:43.058 [DEBUG] [Thread-22654] [transport.py] [_log()] userauth is OK
2025-11-12T20:59:43.058 [DEBUG] [Thread-22654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T20:59:43.058 [DEBUG] [Thread-22654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T20:59:43.058 [DEBUG] [Thread-22654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T20:59:43.058 [DEBUG] [Thread-22654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T20:59:43.078 [INFO] [Thread-22654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T20:59:43.078 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T20:59:43.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T20:59:43.239 [DEBUG] [Thread-22656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:59:43.893 [DEBUG] [Thread-22654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T20:59:43.894 [DEBUG] [Thread-22654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T20:59:43.941 [DEBUG] [Thread-22654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T20:59:43.942 [DEBUG] [Thread-22654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T20:59:43.951 [DEBUG] [Thread-22654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T20:59:43.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T20:59:43.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-11-12T20:59:43.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-11-12T20:59:43.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T20:59:43.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T20:59:43.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T20:59:43.988 [DEBUG] [Thread-22654] [transport.py] [_log()] EOF in transport thread
2025-11-12T20:59:53.724 [DEBUG] [Thread-22657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T20:59:58.296 [DEBUG] [Thread-22658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:00:13.334 [DEBUG] [Thread-22659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:00:14.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:00:14.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:00:14.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-11-12T21:00:14.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 20, 59, 59), 17.49, 30.94, 0.0, 11.22, 19.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:00:14.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 20:59:59
2025-11-12T21:00:14.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:00:14.952 [DEBUG] [Thread-22660] [transport.py] [_log()] starting thread (client mode): 0x11f03610
2025-11-12T21:00:14.952 [DEBUG] [Thread-22660] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:00:14.974 [DEBUG] [Thread-22660] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:00:14.975 [INFO] [Thread-22660] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:00:14.977 [DEBUG] [Thread-22660] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] client lang: <none>
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] server lang: <none>
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] kex follows: False
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] Compression: none
2025-11-12T21:00:14.978 [DEBUG] [Thread-22660] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:00:14.995 [DEBUG] [Thread-22660] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:00:14.995 [DEBUG] [Thread-22660] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:00:14.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:00:14.996 [DEBUG] [Thread-22660] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:00:14.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:00:14.998 [DEBUG] [Thread-22660] [transport.py] [_log()] userauth is OK
2025-11-12T21:00:14.999 [DEBUG] [Thread-22660] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:00:14.999 [DEBUG] [Thread-22660] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:00:14.999 [DEBUG] [Thread-22660] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:00:14.999 [DEBUG] [Thread-22660] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:00:15.023 [INFO] [Thread-22660] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:00:15.023 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:00:16.489 [DEBUG] [Thread-22660] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:00:16.489 [DEBUG] [Thread-22660] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:00:16.489 [DEBUG] [Thread-22660] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:00:16.530 [DEBUG] [Thread-22660] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:00:16.530 [DEBUG] [Thread-22660] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:00:16.532 [DEBUG] [Thread-22660] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:00:16.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:00:16.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:00:16.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:00:16.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:00:16.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:00:16.618 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:00:16.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:00:16.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:00:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:00:16.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.791404 -999.00  +19.10  10.30     36   +3.90 1 2 1 1 1     0    0 14.43 -42.10 ZnEsW 10.3 10.3 267.0 12.3 19.8 -21.9 19.8 -20.9 19.4 -20.6 19.7 -20.9
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.791404
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:00:16.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T20:59:59', tmtdew=17.49, humidity=30.94, cloud=0.0, wind=11.22, temperature=19.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T20:59:59', seeing=0.69, atlas_timestamp='2025-11-12T18:59:37.306', atlas_cloud=2, atlas_rain=1, zp_data=[0.6847499999999993, 0.6022500000000006, 0.75075, 0.8104999999999993, 1.5190000000000001, 1.587250000000001, 1.242, 1.0282500000000008, 0.7044999999999995, 1.061, 1.2127499999999998, 1.4104999999999999, 1.7559999999999993, 1.7537499999999993, 1.677999999999999, 0.8969999999999994, 0.5802499999999995, 1.5744999999999996, 1.7234999999999996, 1.621249999999999, 1.6359999999999983, 1.5767499999999988, nan, 1.4067499999999997, 0.690999999999999, nan, nan, 2.0745000000000005, 1.287, nan, nan, nan, 1.5087499999999991], zp_timestamp='2025-11-12T18:57:00')
2025-11-12T21:00:16.620 [DEBUG] [Thread-22660] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:00:16.694 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:00:16.705 [DEBUG] [Thread-22663] [transport.py] [_log()] starting thread (client mode): 0x11f01c00
2025-11-12T21:00:16.705 [DEBUG] [Thread-22663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:00:16.721 [DEBUG] [Thread-22663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:00:16.721 [INFO] [Thread-22663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:00:16.728 [DEBUG] [Thread-22663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:00:16.728 [DEBUG] [Thread-22663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:00:16.728 [DEBUG] [Thread-22663] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:00:16.728 [DEBUG] [Thread-22663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:00:16.728 [DEBUG] [Thread-22663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] client lang: <none>
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] server lang: <none>
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] kex follows: False
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] Compression: none
2025-11-12T21:00:16.729 [DEBUG] [Thread-22663] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:00:16.784 [DEBUG] [Thread-22663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:00:16.784 [DEBUG] [Thread-22663] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:00:16.784 [DEBUG] [Thread-22663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:00:16.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:00:16.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:00:16.841 [DEBUG] [Thread-22663] [transport.py] [_log()] userauth is OK
2025-11-12T21:00:16.841 [DEBUG] [Thread-22663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:00:16.841 [DEBUG] [Thread-22663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:00:16.841 [DEBUG] [Thread-22663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:00:16.841 [DEBUG] [Thread-22663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:00:16.859 [INFO] [Thread-22663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:00:16.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:00:16.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:00:17.703 [DEBUG] [Thread-22663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:00:17.703 [DEBUG] [Thread-22663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:00:17.751 [DEBUG] [Thread-22663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:00:17.751 [DEBUG] [Thread-22663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:00:17.759 [DEBUG] [Thread-22663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:00:17.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:00:17.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-11-12T21:00:17.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-11-12T21:00:17.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:00:17.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:00:17.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:00:17.792 [DEBUG] [Thread-22663] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:00:28.368 [DEBUG] [Thread-22665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:00:43.154 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:00:43.155 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:00:43.430 [DEBUG] [Thread-22666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:00:47.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:00:47.814 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:00:47.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-11-12T21:00:48.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 0, 31), 17.45, 31.0, 0.0, 12.0, 19.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:00:48.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:00:31
2025-11-12T21:00:48.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:00:48.754 [DEBUG] [Thread-22667] [transport.py] [_log()] starting thread (client mode): 0x11f03a30
2025-11-12T21:00:48.754 [DEBUG] [Thread-22667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:00:48.773 [DEBUG] [Thread-22667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:00:48.773 [INFO] [Thread-22667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:00:48.776 [DEBUG] [Thread-22667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:00:48.776 [DEBUG] [Thread-22667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:00:48.776 [DEBUG] [Thread-22667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:00:48.776 [DEBUG] [Thread-22667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:00:48.776 [DEBUG] [Thread-22667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:00:48.776 [DEBUG] [Thread-22667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] client lang: <none>
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] server lang: <none>
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] kex follows: False
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] Compression: none
2025-11-12T21:00:48.777 [DEBUG] [Thread-22667] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:00:48.792 [DEBUG] [Thread-22667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:00:48.793 [DEBUG] [Thread-22667] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:00:48.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:00:48.794 [DEBUG] [Thread-22667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:00:48.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:00:48.795 [DEBUG] [Thread-22667] [transport.py] [_log()] userauth is OK
2025-11-12T21:00:48.795 [DEBUG] [Thread-22667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:00:48.795 [DEBUG] [Thread-22667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:00:48.796 [DEBUG] [Thread-22667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:00:48.796 [DEBUG] [Thread-22667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:00:48.815 [INFO] [Thread-22667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:00:48.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:00:49.454 [DEBUG] [Thread-22667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:00:49.454 [DEBUG] [Thread-22667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:00:49.454 [DEBUG] [Thread-22667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:00:49.494 [DEBUG] [Thread-22667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:00:49.494 [DEBUG] [Thread-22667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:00:49.497 [DEBUG] [Thread-22667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:00:49.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:00:49.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:00:49.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:00:49.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:00:49.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:00:49.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:00:49.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:00:49.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:00:49.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:00:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.791750 -999.00  +19.10   9.75     36   +3.90 1 2 1 1 1     0    0 14.37 -42.72 ZnEsw 7.9 9.8 263.4 12.2 19.8 -21.8 19.7 -20.9 19.4 -20.5 19.7 -21.0
2025-11-12T21:00:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:00:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:00:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.791750
2025-11-12T21:00:49.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:00:49.520 [DEBUG] [Thread-22667] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:00:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:00:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:00:49.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:00:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:00:49.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:00:31', tmtdew=17.45, humidity=31.0, cloud=0.0, wind=12.0, temperature=19.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:00:31', seeing=1.19, atlas_timestamp='2025-11-12T19:00:07.200', atlas_cloud=2, atlas_rain=1, zp_data=[0.6847499999999993, 0.6022500000000006, 0.75075, 0.8104999999999993, 1.5190000000000001, 1.587250000000001, 1.242, 1.0282500000000008, 0.7044999999999995, 1.061, 1.2127499999999998, 1.4104999999999999, 1.7559999999999993, 1.7537499999999993, 1.677999999999999, 0.8969999999999994, 0.5802499999999995, 1.5744999999999996, 1.7234999999999996, 1.621249999999999, 1.6359999999999983, 1.5767499999999988, nan, 1.4067499999999997, 0.690999999999999, nan, nan, 2.0745000000000005, 1.287, nan, nan, nan, 1.5087499999999991], zp_timestamp='2025-11-12T18:57:00')
2025-11-12T21:00:49.606 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:00:49.618 [DEBUG] [Thread-22670] [transport.py] [_log()] starting thread (client mode): 0x11f025f0
2025-11-12T21:00:49.619 [DEBUG] [Thread-22670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:00:49.635 [DEBUG] [Thread-22670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:00:49.635 [INFO] [Thread-22670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] client lang: <none>
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] server lang: <none>
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] kex follows: False
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] Compression: none
2025-11-12T21:00:49.643 [DEBUG] [Thread-22670] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:00:49.700 [DEBUG] [Thread-22670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:00:49.701 [DEBUG] [Thread-22670] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:00:49.701 [DEBUG] [Thread-22670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:00:49.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:00:49.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:00:49.757 [DEBUG] [Thread-22670] [transport.py] [_log()] userauth is OK
2025-11-12T21:00:49.757 [DEBUG] [Thread-22670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:00:49.757 [DEBUG] [Thread-22670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:00:49.757 [DEBUG] [Thread-22670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:00:49.757 [DEBUG] [Thread-22670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:00:49.779 [INFO] [Thread-22670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:00:49.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:00:49.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:00:50.630 [DEBUG] [Thread-22670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:00:50.630 [DEBUG] [Thread-22670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:00:50.677 [DEBUG] [Thread-22670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:00:50.677 [DEBUG] [Thread-22670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:00:50.686 [DEBUG] [Thread-22670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:00:50.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:00:50.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-11-12T21:00:50.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-11-12T21:00:50.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:00:50.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:00:50.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:00:50.719 [DEBUG] [Thread-22670] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:00:53.788 [DEBUG] [Thread-22672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:00:58.460 [DEBUG] [Thread-22673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:01:13.512 [DEBUG] [Thread-22674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:01:20.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:01:20.743 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:01:20.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-11-12T21:01:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 1, 3), 17.43, 31.05, 0.0, 11.26, 18.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:01:21.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:01:03
2025-11-12T21:01:21.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:01:21.661 [DEBUG] [Thread-22675] [transport.py] [_log()] starting thread (client mode): 0x11f03640
2025-11-12T21:01:21.662 [DEBUG] [Thread-22675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:01:21.682 [DEBUG] [Thread-22675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:01:21.682 [INFO] [Thread-22675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] client lang: <none>
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] server lang: <none>
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] kex follows: False
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:01:21.683 [DEBUG] [Thread-22675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:01:21.684 [DEBUG] [Thread-22675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:01:21.684 [DEBUG] [Thread-22675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:01:21.684 [DEBUG] [Thread-22675] [transport.py] [_log()] Compression: none
2025-11-12T21:01:21.684 [DEBUG] [Thread-22675] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:01:21.701 [DEBUG] [Thread-22675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:01:21.701 [DEBUG] [Thread-22675] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:01:21.702 [DEBUG] [Thread-22675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:01:21.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:01:21.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:01:21.704 [DEBUG] [Thread-22675] [transport.py] [_log()] userauth is OK
2025-11-12T21:01:21.704 [DEBUG] [Thread-22675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:01:21.704 [DEBUG] [Thread-22675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:01:21.704 [DEBUG] [Thread-22675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:01:21.704 [DEBUG] [Thread-22675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:01:21.729 [INFO] [Thread-22675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:01:21.730 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:01:22.319 [DEBUG] [Thread-22675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:01:22.319 [DEBUG] [Thread-22675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:01:22.320 [DEBUG] [Thread-22675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:01:22.360 [DEBUG] [Thread-22675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:01:22.361 [DEBUG] [Thread-22675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:01:22.364 [DEBUG] [Thread-22675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:01:22.369 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:01:22.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:01:22.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:01:22.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:01:22.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:01:22.380 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:01:22.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:01:22.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:01:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:01:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.792098 -999.00  +19.10   6.47     36   +3.90 1 2 1 1 1     0    0 14.25 -47.52 ZnEsw 5.4 6.5 242.0 9.3 19.8 -21.8 19.7 -20.9 19.4 -20.5 19.6 -21.0
2025-11-12T21:01:22.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:01:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:01:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.792098
2025-11-12T21:01:22.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:01:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:01:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:01:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:01:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:01:22.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:01:03', tmtdew=17.43, humidity=31.05, cloud=0.0, wind=11.26, temperature=18.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:01:03', seeing=1.19, atlas_timestamp='2025-11-12T19:00:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.6847499999999993, 0.6022500000000006, 0.75075, 0.8104999999999993, 1.5190000000000001, 1.587250000000001, 1.242, 1.0282500000000008, 0.7044999999999995, 1.061, 1.2127499999999998, 1.4104999999999999, 1.7559999999999993, 1.7537499999999993, 1.677999999999999, 0.8969999999999994, 0.5802499999999995, 1.5744999999999996, 1.7234999999999996, 1.621249999999999, 1.6359999999999983, 1.5767499999999988, nan, 1.4067499999999997, 0.690999999999999, nan, nan, 2.0745000000000005, 1.287, nan, nan, nan, 1.5087499999999991], zp_timestamp='2025-11-12T18:57:00')
2025-11-12T21:01:22.383 [DEBUG] [Thread-22675] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:01:22.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:01:22.489 [DEBUG] [Thread-22678] [transport.py] [_log()] starting thread (client mode): 0x11f03bb0
2025-11-12T21:01:22.489 [DEBUG] [Thread-22678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:01:22.504 [DEBUG] [Thread-22678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:01:22.505 [INFO] [Thread-22678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] client lang: <none>
2025-11-12T21:01:22.512 [DEBUG] [Thread-22678] [transport.py] [_log()] server lang: <none>
2025-11-12T21:01:22.513 [DEBUG] [Thread-22678] [transport.py] [_log()] kex follows: False
2025-11-12T21:01:22.513 [DEBUG] [Thread-22678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:01:22.513 [DEBUG] [Thread-22678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:01:22.513 [DEBUG] [Thread-22678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:01:22.513 [DEBUG] [Thread-22678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:01:22.513 [DEBUG] [Thread-22678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:01:22.513 [DEBUG] [Thread-22678] [transport.py] [_log()] Compression: none
2025-11-12T21:01:22.513 [DEBUG] [Thread-22678] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:01:22.569 [DEBUG] [Thread-22678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:01:22.570 [DEBUG] [Thread-22678] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:01:22.571 [DEBUG] [Thread-22678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:01:22.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:01:22.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:01:22.626 [DEBUG] [Thread-22678] [transport.py] [_log()] userauth is OK
2025-11-12T21:01:22.626 [DEBUG] [Thread-22678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:01:22.627 [DEBUG] [Thread-22678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:01:22.627 [DEBUG] [Thread-22678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:01:22.627 [DEBUG] [Thread-22678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:01:22.645 [INFO] [Thread-22678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:01:22.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:01:22.647 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:01:23.475 [DEBUG] [Thread-22678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:01:23.475 [DEBUG] [Thread-22678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:01:23.522 [DEBUG] [Thread-22678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:01:23.523 [DEBUG] [Thread-22678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:01:23.532 [DEBUG] [Thread-22678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:01:23.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:01:23.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-11-12T21:01:23.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-11-12T21:01:23.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:01:23.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:01:23.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:01:23.567 [DEBUG] [Thread-22678] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:01:28.549 [DEBUG] [Thread-22680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:01:43.360 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:01:43.362 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:01:43.596 [DEBUG] [Thread-22681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:01:53.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:01:53.589 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:01:53.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-11-12T21:01:53.841 [DEBUG] [Thread-22682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:01:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 1, 35), 17.36, 31.1, 0.0, 11.82, 18.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:01:54.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:01:35
2025-11-12T21:01:54.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:01:54.500 [DEBUG] [Thread-22683] [transport.py] [_log()] starting thread (client mode): 0x149050c0
2025-11-12T21:01:54.500 [DEBUG] [Thread-22683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:01:54.520 [DEBUG] [Thread-22683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:01:54.520 [INFO] [Thread-22683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:01:54.523 [DEBUG] [Thread-22683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] client lang: <none>
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] server lang: <none>
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] kex follows: False
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] Compression: none
2025-11-12T21:01:54.524 [DEBUG] [Thread-22683] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:01:54.542 [DEBUG] [Thread-22683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:01:54.542 [DEBUG] [Thread-22683] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:01:54.543 [DEBUG] [Thread-22683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:01:54.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:01:54.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:01:54.545 [DEBUG] [Thread-22683] [transport.py] [_log()] userauth is OK
2025-11-12T21:01:54.545 [DEBUG] [Thread-22683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:01:54.545 [DEBUG] [Thread-22683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:01:54.545 [DEBUG] [Thread-22683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:01:54.546 [DEBUG] [Thread-22683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:01:54.581 [INFO] [Thread-22683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:01:54.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:01:55.222 [DEBUG] [Thread-22683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:01:55.223 [DEBUG] [Thread-22683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:01:55.223 [DEBUG] [Thread-22683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:01:55.264 [DEBUG] [Thread-22683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:01:55.264 [DEBUG] [Thread-22683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:01:55.267 [DEBUG] [Thread-22683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:01:55.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:01:55.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:01:55.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:01:55.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:01:55.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:01:55.289 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:01:55.289 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:01:55.289 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:01:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:01:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.792792 -999.00  +19.10   6.20     36   +3.80 1 2 1 1 1     0    0 14.09 -54.14 ZnESw 9.8 6.2 256.8 9.3 19.8 -21.8 19.7 -20.9 19.4 -20.4 19.6 -21.0
2025-11-12T21:01:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:01:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:01:55.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.792792
2025-11-12T21:01:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:01:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:01:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:01:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:01:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:01:55.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:01:35', tmtdew=17.36, humidity=31.1, cloud=0.0, wind=11.82, temperature=18.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:01:35', seeing=1.19, atlas_timestamp='2025-11-12T19:01:37.229', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:01:00')
2025-11-12T21:01:55.292 [DEBUG] [Thread-22683] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:01:55.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:01:55.387 [DEBUG] [Thread-22686] [transport.py] [_log()] starting thread (client mode): 0x1739b9d0
2025-11-12T21:01:55.387 [DEBUG] [Thread-22686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:01:55.403 [DEBUG] [Thread-22686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:01:55.403 [INFO] [Thread-22686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:01:55.410 [DEBUG] [Thread-22686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:01:55.410 [DEBUG] [Thread-22686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:01:55.410 [DEBUG] [Thread-22686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] client lang: <none>
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] server lang: <none>
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] kex follows: False
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] Compression: none
2025-11-12T21:01:55.411 [DEBUG] [Thread-22686] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:01:55.470 [DEBUG] [Thread-22686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:01:55.471 [DEBUG] [Thread-22686] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:01:55.471 [DEBUG] [Thread-22686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:01:55.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:01:55.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:01:55.525 [DEBUG] [Thread-22686] [transport.py] [_log()] userauth is OK
2025-11-12T21:01:55.525 [DEBUG] [Thread-22686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:01:55.525 [DEBUG] [Thread-22686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:01:55.525 [DEBUG] [Thread-22686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:01:55.525 [DEBUG] [Thread-22686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:01:55.544 [INFO] [Thread-22686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:01:55.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:01:55.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:01:56.423 [DEBUG] [Thread-22686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:01:56.423 [DEBUG] [Thread-22686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:01:56.471 [DEBUG] [Thread-22686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:01:56.471 [DEBUG] [Thread-22686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:01:56.480 [DEBUG] [Thread-22686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:01:56.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:01:56.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:01: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') -> 00000000
2025-11-12T21:01:56.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:01:56.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:01:56.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:01:56.513 [DEBUG] [Thread-22686] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:01:58.633 [DEBUG] [Thread-22688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:02:13.691 [DEBUG] [Thread-22689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:02:26.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:02:26.536 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:02:26.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:02:27.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 2, 7), 17.33, 31.17, 0.0, 11.72, 18.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:02:27.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:02:07
2025-11-12T21:02:27.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:02:27.454 [DEBUG] [Thread-22690] [transport.py] [_log()] starting thread (client mode): 0x14914850
2025-11-12T21:02:27.455 [DEBUG] [Thread-22690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:02:27.478 [DEBUG] [Thread-22690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:02:27.478 [INFO] [Thread-22690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:02:27.482 [DEBUG] [Thread-22690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:02:27.482 [DEBUG] [Thread-22690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:02:27.482 [DEBUG] [Thread-22690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] client lang: <none>
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] server lang: <none>
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] kex follows: False
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] Compression: none
2025-11-12T21:02:27.483 [DEBUG] [Thread-22690] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:02:27.496 [DEBUG] [Thread-22690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:02:27.497 [DEBUG] [Thread-22690] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:02:27.498 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:02:27.498 [DEBUG] [Thread-22690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:02:27.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:02:27.500 [DEBUG] [Thread-22690] [transport.py] [_log()] userauth is OK
2025-11-12T21:02:27.500 [DEBUG] [Thread-22690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:02:27.501 [DEBUG] [Thread-22690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:02:27.501 [DEBUG] [Thread-22690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:02:27.501 [DEBUG] [Thread-22690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:02:27.524 [INFO] [Thread-22690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:02:27.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:02:28.164 [DEBUG] [Thread-22690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:02:28.164 [DEBUG] [Thread-22690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:02:28.164 [DEBUG] [Thread-22690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:02:28.204 [DEBUG] [Thread-22690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:02:28.205 [DEBUG] [Thread-22690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:02:28.207 [DEBUG] [Thread-22690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:02:28.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:02:28.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:02:28.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:02:28.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:02:28.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:02:28.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:02:28.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:02:28.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:02:28.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:02:28.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.793140 -999.00  +19.10   8.17     36   +3.90 1 2 1 1 1     0    0 13.93 -49.19 ZnESw 11.6 8.2 242.2 11.7 19.8 -21.8 19.7 -20.9 19.4 -20.5 19.6 -20.9
2025-11-12T21:02:28.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:02:28.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:02:28.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.793140
2025-11-12T21:02:28.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:02:28.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:02:28.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:02:28.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:02:28.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:02:28.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:02:07', tmtdew=17.33, humidity=31.17, cloud=0.0, wind=11.72, temperature=18.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:02:07', seeing=1.19, atlas_timestamp='2025-11-12T19:02:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:01:00')
2025-11-12T21:02:28.231 [DEBUG] [Thread-22690] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:02:28.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:02:28.326 [DEBUG] [Thread-22693] [transport.py] [_log()] starting thread (client mode): 0x14947f70
2025-11-12T21:02:28.326 [DEBUG] [Thread-22693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:02:28.341 [DEBUG] [Thread-22693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:02:28.341 [INFO] [Thread-22693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] client lang: <none>
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] server lang: <none>
2025-11-12T21:02:28.349 [DEBUG] [Thread-22693] [transport.py] [_log()] kex follows: False
2025-11-12T21:02:28.350 [DEBUG] [Thread-22693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:02:28.350 [DEBUG] [Thread-22693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:02:28.350 [DEBUG] [Thread-22693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:02:28.350 [DEBUG] [Thread-22693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:02:28.350 [DEBUG] [Thread-22693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:02:28.350 [DEBUG] [Thread-22693] [transport.py] [_log()] Compression: none
2025-11-12T21:02:28.350 [DEBUG] [Thread-22693] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:02:28.410 [DEBUG] [Thread-22693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:02:28.410 [DEBUG] [Thread-22693] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:02:28.411 [DEBUG] [Thread-22693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:02:28.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:02:28.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:02:28.465 [DEBUG] [Thread-22693] [transport.py] [_log()] userauth is OK
2025-11-12T21:02:28.465 [DEBUG] [Thread-22693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:02:28.465 [DEBUG] [Thread-22693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:02:28.466 [DEBUG] [Thread-22693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:02:28.466 [DEBUG] [Thread-22693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:02:28.486 [INFO] [Thread-22693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:02:28.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:02:28.487 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:02:28.723 [DEBUG] [Thread-22695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:02:29.288 [DEBUG] [Thread-22693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:02:29.288 [DEBUG] [Thread-22693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:02:29.336 [DEBUG] [Thread-22693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:02:29.337 [DEBUG] [Thread-22693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:02:29.346 [DEBUG] [Thread-22693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:02:29.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:02:29.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-11-12T21:02:29.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-11-12T21:02:29.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:02:29.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:02:29.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:02:29.386 [DEBUG] [Thread-22693] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:02:43.568 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:02:43.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:02:43.772 [DEBUG] [Thread-22696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:02:53.912 [DEBUG] [Thread-22697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:02:58.802 [DEBUG] [Thread-22698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:02:59.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:02:59.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:02:59.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-11-12T21:03:00.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 2, 39), 17.3, 31.64, 0.0, 12.92, 18.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:03:00.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:02:39
2025-11-12T21:03:00.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:03:00.331 [DEBUG] [Thread-22699] [transport.py] [_log()] starting thread (client mode): 0x14907ac0
2025-11-12T21:03:00.331 [DEBUG] [Thread-22699] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:03:00.351 [DEBUG] [Thread-22699] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:03:00.351 [INFO] [Thread-22699] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:03:00.354 [DEBUG] [Thread-22699] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:03:00.354 [DEBUG] [Thread-22699] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:03:00.354 [DEBUG] [Thread-22699] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:03:00.354 [DEBUG] [Thread-22699] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:03:00.354 [DEBUG] [Thread-22699] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] client lang: <none>
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] server lang: <none>
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] kex follows: False
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] Compression: none
2025-11-12T21:03:00.355 [DEBUG] [Thread-22699] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:03:00.374 [DEBUG] [Thread-22699] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:03:00.374 [DEBUG] [Thread-22699] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:03:00.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:03:00.375 [DEBUG] [Thread-22699] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:03:00.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:03:00.416 [DEBUG] [Thread-22699] [transport.py] [_log()] userauth is OK
2025-11-12T21:03:00.417 [DEBUG] [Thread-22699] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:03:00.417 [DEBUG] [Thread-22699] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:03:00.417 [DEBUG] [Thread-22699] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:03:00.417 [DEBUG] [Thread-22699] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:03:00.437 [INFO] [Thread-22699] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:03:00.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:03:01.080 [DEBUG] [Thread-22699] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:03:01.081 [DEBUG] [Thread-22699] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:03:01.081 [DEBUG] [Thread-22699] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:03:01.121 [DEBUG] [Thread-22699] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:03:01.121 [DEBUG] [Thread-22699] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:03:01.124 [DEBUG] [Thread-22699] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:03:01.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:03:01.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:03:01.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:03:01.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:03:01.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:03:01.144 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:03:01.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:03:01.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:03:01.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:03:01.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.793487 -999.00  +19.10  11.02     36   +3.90 1 2 1 1 1     0    0 14.47 -43.16 ZnESw 11.3 11.0 249.0 15.3 19.8 -21.7 19.7 -20.9 19.4 -20.5 19.6 -20.9
2025-11-12T21:03:01.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:03:01.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:03:01.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.793487
2025-11-12T21:03:01.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:03:01.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:03:01.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:03:01.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:03:01.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:03:01.145 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:02:39', tmtdew=17.3, humidity=31.64, cloud=0.0, wind=12.92, temperature=18.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:02:39', seeing=0.97, atlas_timestamp='2025-11-12T19:02:37.277', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:01:00')
2025-11-12T21:03:01.145 [DEBUG] [Thread-22699] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:03:01.219 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:03:01.231 [DEBUG] [Thread-22702] [transport.py] [_log()] starting thread (client mode): 0x14914a60
2025-11-12T21:03:01.231 [DEBUG] [Thread-22702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:03:01.245 [DEBUG] [Thread-22702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:03:01.245 [INFO] [Thread-22702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] client lang: <none>
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] server lang: <none>
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] kex follows: False
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] Compression: none
2025-11-12T21:03:01.253 [DEBUG] [Thread-22702] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:03:01.311 [DEBUG] [Thread-22702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:03:01.312 [DEBUG] [Thread-22702] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:03:01.312 [DEBUG] [Thread-22702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:03:01.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:03:01.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:03:01.369 [DEBUG] [Thread-22702] [transport.py] [_log()] userauth is OK
2025-11-12T21:03:01.369 [DEBUG] [Thread-22702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:03:01.369 [DEBUG] [Thread-22702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:03:01.370 [DEBUG] [Thread-22702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:03:01.370 [DEBUG] [Thread-22702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:03:01.394 [INFO] [Thread-22702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:03:01.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:03:01.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:03:02.303 [DEBUG] [Thread-22702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:03:02.303 [DEBUG] [Thread-22702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:03:02.352 [DEBUG] [Thread-22702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:03:02.352 [DEBUG] [Thread-22702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:03:02.361 [DEBUG] [Thread-22702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:03:02.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:03:02.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:03:02.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-11-12T21:03:02.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:03:02.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:03:02.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:03:02.397 [DEBUG] [Thread-22702] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:03:13.836 [DEBUG] [Thread-22704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:03:28.896 [DEBUG] [Thread-22705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:03:32.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:03:32.418 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:03:32.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-11-12T21:03:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 3, 11), 17.35, 31.5, 0.0, 11.44, 18.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:03:33.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:03:11
2025-11-12T21:03:33.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:03:33.394 [DEBUG] [Thread-22706] [transport.py] [_log()] starting thread (client mode): 0x149a9a50
2025-11-12T21:03:33.394 [DEBUG] [Thread-22706] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:03:33.414 [DEBUG] [Thread-22706] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:03:33.414 [INFO] [Thread-22706] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] client lang: <none>
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] server lang: <none>
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] kex follows: False
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] Compression: none
2025-11-12T21:03:33.418 [DEBUG] [Thread-22706] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:03:33.435 [DEBUG] [Thread-22706] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:03:33.435 [DEBUG] [Thread-22706] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:03:33.435 [DEBUG] [Thread-22706] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:03:33.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:03:33.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:03:33.436 [DEBUG] [Thread-22706] [transport.py] [_log()] userauth is OK
2025-11-12T21:03:33.436 [DEBUG] [Thread-22706] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:03:33.436 [DEBUG] [Thread-22706] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:03:33.436 [DEBUG] [Thread-22706] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:03:33.436 [DEBUG] [Thread-22706] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:03:33.445 [INFO] [Thread-22706] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:03:33.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:03:34.082 [DEBUG] [Thread-22706] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:03:34.082 [DEBUG] [Thread-22706] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:03:34.082 [DEBUG] [Thread-22706] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:03:34.123 [DEBUG] [Thread-22706] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:03:34.123 [DEBUG] [Thread-22706] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:03:34.125 [DEBUG] [Thread-22706] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:03:34.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:03:34.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:03:34.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:03:34.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:03:34.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:03:34.143 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:03:34.143 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:03:34.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.793834 -999.00  +19.10   8.96     36   +3.90 1 2 1 1 1     0    0 14.02 -47.76 ZnESw 11.1 9.0 260.4 14.9 19.8 -21.8 19.7 -20.9 19.4 -20.4 19.7 -21.0
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.793834
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:03:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:03:11', tmtdew=17.35, humidity=31.5, cloud=0.0, wind=11.44, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:03:11', seeing=1.02, atlas_timestamp='2025-11-12T19:03:07.258', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:01:00')
2025-11-12T21:03:34.145 [DEBUG] [Thread-22706] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:03:34.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:03:34.229 [DEBUG] [Thread-22709] [transport.py] [_log()] starting thread (client mode): 0x173bc460
2025-11-12T21:03:34.229 [DEBUG] [Thread-22709] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:03:34.244 [DEBUG] [Thread-22709] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:03:34.244 [INFO] [Thread-22709] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:03:34.251 [DEBUG] [Thread-22709] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:03:34.251 [DEBUG] [Thread-22709] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:03:34.251 [DEBUG] [Thread-22709] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:03:34.251 [DEBUG] [Thread-22709] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:03:34.251 [DEBUG] [Thread-22709] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:03:34.251 [DEBUG] [Thread-22709] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:03:34.251 [DEBUG] [Thread-22709] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:03:34.251 [DEBUG] [Thread-22709] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] client lang: <none>
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] server lang: <none>
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] kex follows: False
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] Compression: none
2025-11-12T21:03:34.252 [DEBUG] [Thread-22709] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:03:34.310 [DEBUG] [Thread-22709] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:03:34.311 [DEBUG] [Thread-22709] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:03:34.311 [DEBUG] [Thread-22709] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:03:34.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:03:34.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:03:34.369 [DEBUG] [Thread-22709] [transport.py] [_log()] userauth is OK
2025-11-12T21:03:34.369 [DEBUG] [Thread-22709] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:03:34.369 [DEBUG] [Thread-22709] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:03:34.369 [DEBUG] [Thread-22709] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:03:34.369 [DEBUG] [Thread-22709] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:03:34.387 [INFO] [Thread-22709] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:03:34.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:03:34.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:03:35.227 [DEBUG] [Thread-22709] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:03:35.227 [DEBUG] [Thread-22709] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:03:35.275 [DEBUG] [Thread-22709] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:03:35.275 [DEBUG] [Thread-22709] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:03:35.284 [DEBUG] [Thread-22709] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:03:35.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:03:35.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-11-12T21:03:35.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-11-12T21:03:35.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:03:35.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:03:35.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:03:35.322 [DEBUG] [Thread-22709] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:03:43.774 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:03:43.775 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:03:43.929 [DEBUG] [Thread-22711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:03:53.975 [DEBUG] [Thread-22712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:03:58.967 [DEBUG] [Thread-22713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:04:05.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:04:05.345 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:04:05.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-11-12T21:04:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 3, 43), 17.31, 31.6, 0.0, 11.47, 18.97, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:04:06.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:03:43
2025-11-12T21:04:06.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:04:06.265 [DEBUG] [Thread-22714] [transport.py] [_log()] starting thread (client mode): 0x11f01b40
2025-11-12T21:04:06.266 [DEBUG] [Thread-22714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:04:06.286 [DEBUG] [Thread-22714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:04:06.286 [INFO] [Thread-22714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:04:06.289 [DEBUG] [Thread-22714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:04:06.289 [DEBUG] [Thread-22714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:04:06.289 [DEBUG] [Thread-22714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:04:06.289 [DEBUG] [Thread-22714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:04:06.289 [DEBUG] [Thread-22714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] client lang: <none>
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] server lang: <none>
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] kex follows: False
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] Compression: none
2025-11-12T21:04:06.290 [DEBUG] [Thread-22714] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:04:06.308 [DEBUG] [Thread-22714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:04:06.309 [DEBUG] [Thread-22714] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:04:06.309 [DEBUG] [Thread-22714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:04:06.309 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:04:06.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:04:06.311 [DEBUG] [Thread-22714] [transport.py] [_log()] userauth is OK
2025-11-12T21:04:06.311 [DEBUG] [Thread-22714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:04:06.311 [DEBUG] [Thread-22714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:04:06.311 [DEBUG] [Thread-22714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:04:06.312 [DEBUG] [Thread-22714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:04:06.336 [INFO] [Thread-22714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:04:06.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:04:06.948 [DEBUG] [Thread-22714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:04:06.948 [DEBUG] [Thread-22714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:04:06.949 [DEBUG] [Thread-22714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:04:06.990 [DEBUG] [Thread-22714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:04:06.990 [DEBUG] [Thread-22714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:04:06.993 [DEBUG] [Thread-22714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:04:07.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:04:07.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:04:07.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:04:07.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:04:07.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:04:07.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:04:07.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:04:07.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:04:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:04:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.794181 -999.00  +19.10   8.74     36   +3.90 1 2 1 1 1     0    0 14.36 -44.88 ZnESw 11.1 8.7 243.2 14.3 19.8 -21.8 19.6 -20.9 19.4 -20.3 19.6 -21.0
2025-11-12T21:04:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:04:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:04:07.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.794181
2025-11-12T21:04:07.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:04:07.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:04:07.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:04:07.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:04:07.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:04:07.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:03:43', tmtdew=17.31, humidity=31.6, cloud=0.0, wind=11.47, temperature=18.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:03:43', seeing=1.02, atlas_timestamp='2025-11-12T19:03:37.238', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:01:00')
2025-11-12T21:04:07.021 [DEBUG] [Thread-22714] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:04:07.109 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:04:07.121 [DEBUG] [Thread-22717] [transport.py] [_log()] starting thread (client mode): 0x149060e0
2025-11-12T21:04:07.121 [DEBUG] [Thread-22717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:04:07.135 [DEBUG] [Thread-22717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:04:07.135 [INFO] [Thread-22717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:04:07.143 [DEBUG] [Thread-22717] [transport.py] [_log()] client lang: <none>
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] server lang: <none>
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] kex follows: False
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] Compression: none
2025-11-12T21:04:07.144 [DEBUG] [Thread-22717] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:04:07.206 [DEBUG] [Thread-22717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:04:07.206 [DEBUG] [Thread-22717] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:04:07.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:04:07.207 [DEBUG] [Thread-22717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:04:07.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:04:07.261 [DEBUG] [Thread-22717] [transport.py] [_log()] userauth is OK
2025-11-12T21:04:07.261 [DEBUG] [Thread-22717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:04:07.262 [DEBUG] [Thread-22717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:04:07.262 [DEBUG] [Thread-22717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:04:07.262 [DEBUG] [Thread-22717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:04:07.280 [INFO] [Thread-22717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:04:07.281 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:04:07.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:04:08.113 [DEBUG] [Thread-22717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:04:08.113 [DEBUG] [Thread-22717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:04:08.161 [DEBUG] [Thread-22717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:04:08.161 [DEBUG] [Thread-22717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:04:08.169 [DEBUG] [Thread-22717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:04:08.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:04:08.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:04:08.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-11-12T21:04:08.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:04:08.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:04:08.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:04:08.201 [DEBUG] [Thread-22717] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:04:14.002 [DEBUG] [Thread-22719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:04:29.053 [DEBUG] [Thread-22720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:04:38.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:04:38.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:04:38.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-11-12T21:04:38.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 4, 15), 17.33, 31.57, 0.0, 12.67, 18.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:04:38.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:04:15
2025-11-12T21:04:38.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:04:39.126 [DEBUG] [Thread-22721] [transport.py] [_log()] starting thread (client mode): 0x149aa980
2025-11-12T21:04:39.127 [DEBUG] [Thread-22721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:04:39.145 [DEBUG] [Thread-22721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:04:39.146 [INFO] [Thread-22721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:04:39.146 [DEBUG] [Thread-22721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:04:39.146 [DEBUG] [Thread-22721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:04:39.146 [DEBUG] [Thread-22721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] client lang: <none>
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] server lang: <none>
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] kex follows: False
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] Compression: none
2025-11-12T21:04:39.147 [DEBUG] [Thread-22721] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:04:39.158 [DEBUG] [Thread-22721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:04:39.159 [DEBUG] [Thread-22721] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:04:39.159 [DEBUG] [Thread-22721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:04:39.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:04:39.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:04:39.161 [DEBUG] [Thread-22721] [transport.py] [_log()] userauth is OK
2025-11-12T21:04:39.161 [DEBUG] [Thread-22721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:04:39.161 [DEBUG] [Thread-22721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:04:39.161 [DEBUG] [Thread-22721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:04:39.161 [DEBUG] [Thread-22721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:04:39.173 [INFO] [Thread-22721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:04:39.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:04:39.778 [DEBUG] [Thread-22721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:04:39.778 [DEBUG] [Thread-22721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:04:39.778 [DEBUG] [Thread-22721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:04:39.819 [DEBUG] [Thread-22721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:04:39.819 [DEBUG] [Thread-22721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:04:39.822 [DEBUG] [Thread-22721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:04:39.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:04:39.835 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:04:39.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:04:39.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:04:39.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:04:39.847 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:04:39.847 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:04:39.847 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:04:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:04:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.794528 -999.00  +19.10   8.81     36   +3.90 1 2 1 1 1     0    0 14.22 -43.19 ZnESw 5.6 8.8 242.1 12.3 19.7 -21.8 19.7 -20.9 19.4 -20.5 19.6 -21.0
2025-11-12T21:04:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:04:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:04:39.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.794528
2025-11-12T21:04:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:04:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:04:39.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:04:39.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:04:39.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:04:39.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:04:15', tmtdew=17.33, humidity=31.57, cloud=0.0, wind=12.67, temperature=18.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:04:15', seeing=0.91, atlas_timestamp='2025-11-12T19:04:07.219', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:01:00')
2025-11-12T21:04:39.850 [DEBUG] [Thread-22721] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:04:39.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:04:39.946 [DEBUG] [Thread-22724] [transport.py] [_log()] starting thread (client mode): 0x14944ca0
2025-11-12T21:04:39.946 [DEBUG] [Thread-22724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:04:39.961 [DEBUG] [Thread-22724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:04:39.961 [INFO] [Thread-22724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:04:39.969 [DEBUG] [Thread-22724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:04:39.969 [DEBUG] [Thread-22724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:04:39.969 [DEBUG] [Thread-22724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:04:39.969 [DEBUG] [Thread-22724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] client lang: <none>
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] server lang: <none>
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] kex follows: False
2025-11-12T21:04:39.970 [DEBUG] [Thread-22724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:04:39.971 [DEBUG] [Thread-22724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:04:39.971 [DEBUG] [Thread-22724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:04:39.971 [DEBUG] [Thread-22724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:04:39.971 [DEBUG] [Thread-22724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:04:39.971 [DEBUG] [Thread-22724] [transport.py] [_log()] Compression: none
2025-11-12T21:04:39.971 [DEBUG] [Thread-22724] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:04:40.030 [DEBUG] [Thread-22724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:04:40.031 [DEBUG] [Thread-22724] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:04:40.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:04:40.033 [DEBUG] [Thread-22724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:04:40.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:04:40.085 [DEBUG] [Thread-22724] [transport.py] [_log()] userauth is OK
2025-11-12T21:04:40.086 [DEBUG] [Thread-22724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:04:40.086 [DEBUG] [Thread-22724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:04:40.086 [DEBUG] [Thread-22724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:04:40.086 [DEBUG] [Thread-22724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:04:40.107 [INFO] [Thread-22724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:04:40.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:04:40.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:04:40.912 [DEBUG] [Thread-22724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:04:40.912 [DEBUG] [Thread-22724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:04:40.960 [DEBUG] [Thread-22724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:04:40.960 [DEBUG] [Thread-22724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:04:40.970 [DEBUG] [Thread-22724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:04:40.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:04:40.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-11-12T21:04:40.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-11-12T21:04:40.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:04:41.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:04:41.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:04:41.008 [DEBUG] [Thread-22724] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:04:43.982 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:04:43.983 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:04:44.089 [DEBUG] [Thread-22726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:04:54.042 [DEBUG] [Thread-22727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:04:59.139 [DEBUG] [Thread-22728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:05:11.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:05:11.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:05:11.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-11-12T21:05:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 4, 47), 17.3, 31.6, 0.0, 11.08, 18.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:05:11.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:04:47
2025-11-12T21:05:11.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:05:11.928 [DEBUG] [Thread-22729] [transport.py] [_log()] starting thread (client mode): 0x11f02c50
2025-11-12T21:05:11.929 [DEBUG] [Thread-22729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:05:11.950 [DEBUG] [Thread-22729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:05:11.950 [INFO] [Thread-22729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:05:11.951 [DEBUG] [Thread-22729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] client lang: <none>
2025-11-12T21:05:11.952 [DEBUG] [Thread-22729] [transport.py] [_log()] server lang: <none>
2025-11-12T21:05:11.953 [DEBUG] [Thread-22729] [transport.py] [_log()] kex follows: False
2025-11-12T21:05:11.953 [DEBUG] [Thread-22729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:05:11.953 [DEBUG] [Thread-22729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:05:11.953 [DEBUG] [Thread-22729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:05:11.953 [DEBUG] [Thread-22729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:05:11.953 [DEBUG] [Thread-22729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:05:11.953 [DEBUG] [Thread-22729] [transport.py] [_log()] Compression: none
2025-11-12T21:05:11.953 [DEBUG] [Thread-22729] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:05:11.967 [DEBUG] [Thread-22729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:05:11.968 [DEBUG] [Thread-22729] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:05:11.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:05:11.969 [DEBUG] [Thread-22729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:05:11.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:05:11.971 [DEBUG] [Thread-22729] [transport.py] [_log()] userauth is OK
2025-11-12T21:05:11.971 [DEBUG] [Thread-22729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:05:11.971 [DEBUG] [Thread-22729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:05:11.971 [DEBUG] [Thread-22729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:05:11.972 [DEBUG] [Thread-22729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:05:11.990 [INFO] [Thread-22729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:05:11.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:05:12.608 [DEBUG] [Thread-22729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:05:12.609 [DEBUG] [Thread-22729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:05:12.609 [DEBUG] [Thread-22729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:05:12.650 [DEBUG] [Thread-22729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:05:12.650 [DEBUG] [Thread-22729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:05:12.653 [DEBUG] [Thread-22729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:05:12.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:05:12.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:05:12.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:05:12.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:05:12.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:05:12.685 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:05:12.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:05:12.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.795222 -999.00  +19.10   9.41     36   +3.90 1 2 1 1 1     0    0 14.34 -44.28 Z.ESW 7.0 9.4 244.8 13.0 19.7 -21.8 19.6 -20.9 19.4 -20.5 19.6 -21.0
2025-11-12T21:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:05:12.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.795222
2025-11-12T21:05:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:05:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:05:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:05:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:05:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:05:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:04:47', tmtdew=17.3, humidity=31.6, cloud=0.0, wind=11.08, temperature=18.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:04:47', seeing=0.91, atlas_timestamp='2025-11-12T19:05:07.181', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:04:00')
2025-11-12T21:05:12.688 [DEBUG] [Thread-22729] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:05:12.772 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:05:12.785 [DEBUG] [Thread-22732] [transport.py] [_log()] starting thread (client mode): 0x14921c00
2025-11-12T21:05:12.785 [DEBUG] [Thread-22732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:05:12.802 [DEBUG] [Thread-22732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:05:12.803 [INFO] [Thread-22732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:05:12.810 [DEBUG] [Thread-22732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:05:12.810 [DEBUG] [Thread-22732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] client lang: <none>
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] server lang: <none>
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] kex follows: False
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:05:12.811 [DEBUG] [Thread-22732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:05:12.812 [DEBUG] [Thread-22732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:05:12.812 [DEBUG] [Thread-22732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:05:12.812 [DEBUG] [Thread-22732] [transport.py] [_log()] Compression: none
2025-11-12T21:05:12.812 [DEBUG] [Thread-22732] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:05:12.870 [DEBUG] [Thread-22732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:05:12.871 [DEBUG] [Thread-22732] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:05:12.871 [DEBUG] [Thread-22732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:05:12.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:05:12.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:05:12.926 [DEBUG] [Thread-22732] [transport.py] [_log()] userauth is OK
2025-11-12T21:05:12.926 [DEBUG] [Thread-22732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:05:12.926 [DEBUG] [Thread-22732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:05:12.926 [DEBUG] [Thread-22732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:05:12.926 [DEBUG] [Thread-22732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:05:12.947 [INFO] [Thread-22732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:05:12.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:05:12.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:05:13.754 [DEBUG] [Thread-22732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:05:13.754 [DEBUG] [Thread-22732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:05:13.803 [DEBUG] [Thread-22732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:05:13.803 [DEBUG] [Thread-22732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:05:13.812 [DEBUG] [Thread-22732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:05:13.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:05:13.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-11-12T21:05:13.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:05:13.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:05:13.840 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:05:13.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:05:13.849 [DEBUG] [Thread-22732] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:05:14.174 [DEBUG] [Thread-22734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:05:29.214 [DEBUG] [Thread-22735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:05:43.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:05:43.858 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:05:43.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-11-12T21:05:44.193 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:05:44.194 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:05:44.246 [DEBUG] [Thread-22736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:05:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 5, 19), 17.25, 31.74, 0.0, 10.87, 18.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:05:44.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:05:19
2025-11-12T21:05:44.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:05:44.782 [DEBUG] [Thread-22737] [transport.py] [_log()] starting thread (client mode): 0x149ab430
2025-11-12T21:05:44.782 [DEBUG] [Thread-22737] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:05:44.801 [DEBUG] [Thread-22737] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:05:44.801 [INFO] [Thread-22737] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] client lang: <none>
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] server lang: <none>
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] kex follows: False
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] Compression: none
2025-11-12T21:05:44.804 [DEBUG] [Thread-22737] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:05:44.821 [DEBUG] [Thread-22737] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:05:44.821 [DEBUG] [Thread-22737] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:05:44.822 [DEBUG] [Thread-22737] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:05:44.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:05:44.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:05:44.824 [DEBUG] [Thread-22737] [transport.py] [_log()] userauth is OK
2025-11-12T21:05:44.824 [DEBUG] [Thread-22737] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:05:44.824 [DEBUG] [Thread-22737] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:05:44.824 [DEBUG] [Thread-22737] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:05:44.824 [DEBUG] [Thread-22737] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:05:44.848 [INFO] [Thread-22737] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:05:44.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:05:45.444 [DEBUG] [Thread-22737] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:05:45.444 [DEBUG] [Thread-22737] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:05:45.445 [DEBUG] [Thread-22737] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:05:45.485 [DEBUG] [Thread-22737] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:05:45.486 [DEBUG] [Thread-22737] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:05:45.489 [DEBUG] [Thread-22737] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:05:45.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:05:45.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:05:45.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:05:45.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:05:45.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:05:45.512 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:05:45.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:05:45.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:05:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:05:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.795222 -999.00  +19.10   9.41     36   +3.90 1 2 1 1 1     0    0 14.34 -44.28 Z.ESW 7.0 9.4 244.8 13.0 19.7 -21.8 19.6 -20.9 19.4 -20.5 19.6 -21.0
2025-11-12T21:05:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:05:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:05:45.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.795222
2025-11-12T21:05:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:05:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:05:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:05:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:05:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:05:45.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:05:19', tmtdew=17.25, humidity=31.74, cloud=0.0, wind=10.87, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:05:19', seeing=0.89, atlas_timestamp='2025-11-12T19:05:07.181', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:04:00')
2025-11-12T21:05:45.515 [DEBUG] [Thread-22737] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:05:45.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:05:45.609 [DEBUG] [Thread-22740] [transport.py] [_log()] starting thread (client mode): 0x14947f70
2025-11-12T21:05:45.609 [DEBUG] [Thread-22740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:05:45.626 [DEBUG] [Thread-22740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:05:45.626 [INFO] [Thread-22740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] client lang: <none>
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] server lang: <none>
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] kex follows: False
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:05:45.634 [DEBUG] [Thread-22740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:05:45.635 [DEBUG] [Thread-22740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:05:45.635 [DEBUG] [Thread-22740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:05:45.635 [DEBUG] [Thread-22740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:05:45.635 [DEBUG] [Thread-22740] [transport.py] [_log()] Compression: none
2025-11-12T21:05:45.635 [DEBUG] [Thread-22740] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:05:45.693 [DEBUG] [Thread-22740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:05:45.694 [DEBUG] [Thread-22740] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:05:45.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:05:45.695 [DEBUG] [Thread-22740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:05:45.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:05:45.750 [DEBUG] [Thread-22740] [transport.py] [_log()] userauth is OK
2025-11-12T21:05:45.750 [DEBUG] [Thread-22740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:05:45.750 [DEBUG] [Thread-22740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:05:45.750 [DEBUG] [Thread-22740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:05:45.750 [DEBUG] [Thread-22740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:05:45.769 [INFO] [Thread-22740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:05:45.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:05:45.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:05:46.592 [DEBUG] [Thread-22740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:05:46.592 [DEBUG] [Thread-22740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:05:46.639 [DEBUG] [Thread-22740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:05:46.640 [DEBUG] [Thread-22740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:05:46.649 [DEBUG] [Thread-22740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:05:46.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:05:46.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-11-12T21:05:46.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-11-12T21:05:46.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:05:46.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:05:46.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:05:46.685 [DEBUG] [Thread-22740] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:05:54.094 [DEBUG] [Thread-22742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:05:59.281 [DEBUG] [Thread-22743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:06:14.331 [DEBUG] [Thread-22744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:06:16.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:06:16.683 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:06:16.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:06:17.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 5, 51), 17.27, 31.8, 0.0, 11.47, 18.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:06:17.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:05:51
2025-11-12T21:06:17.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:06:17.610 [DEBUG] [Thread-22745] [transport.py] [_log()] starting thread (client mode): 0x173bd7e0
2025-11-12T21:06:17.610 [DEBUG] [Thread-22745] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:06:17.630 [DEBUG] [Thread-22745] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:06:17.631 [INFO] [Thread-22745] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] client lang: <none>
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] server lang: <none>
2025-11-12T21:06:17.634 [DEBUG] [Thread-22745] [transport.py] [_log()] kex follows: False
2025-11-12T21:06:17.635 [DEBUG] [Thread-22745] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:06:17.635 [DEBUG] [Thread-22745] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:06:17.635 [DEBUG] [Thread-22745] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:06:17.635 [DEBUG] [Thread-22745] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:06:17.635 [DEBUG] [Thread-22745] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:06:17.635 [DEBUG] [Thread-22745] [transport.py] [_log()] Compression: none
2025-11-12T21:06:17.635 [DEBUG] [Thread-22745] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:06:17.653 [DEBUG] [Thread-22745] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:06:17.654 [DEBUG] [Thread-22745] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:06:17.654 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:06:17.655 [DEBUG] [Thread-22745] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:06:17.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:06:17.657 [DEBUG] [Thread-22745] [transport.py] [_log()] userauth is OK
2025-11-12T21:06:17.658 [DEBUG] [Thread-22745] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:06:17.658 [DEBUG] [Thread-22745] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:06:17.658 [DEBUG] [Thread-22745] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:06:17.658 [DEBUG] [Thread-22745] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:06:17.680 [INFO] [Thread-22745] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:06:17.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:06:18.318 [DEBUG] [Thread-22745] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:06:18.319 [DEBUG] [Thread-22745] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:06:18.319 [DEBUG] [Thread-22745] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:06:18.360 [DEBUG] [Thread-22745] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:06:18.360 [DEBUG] [Thread-22745] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:06:18.363 [DEBUG] [Thread-22745] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:06:18.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:06:18.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:06:18.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:06:18.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:06:18.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:06:18.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:06:18.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:06:18.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:06:18.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:06:18.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.795570 -999.00  +19.10   4.39     36   +3.80 1 2 1 1 1     0    0 14.27 -42.99 ZnESW 4.8 4.4 223.8 8.7 19.6 -21.8 19.6 -20.9 19.4 -20.5 19.6 -21.0
2025-11-12T21:06:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:06:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:06:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.795570
2025-11-12T21:06:18.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:06:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:06:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:06:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:06:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:06:18.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:05:51', tmtdew=17.27, humidity=31.8, cloud=0.0, wind=11.47, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:05:52', seeing=0.89, atlas_timestamp='2025-11-12T19:05:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:04:00')
2025-11-12T21:06:18.391 [DEBUG] [Thread-22745] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:06:18.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:06:18.487 [DEBUG] [Thread-22748] [transport.py] [_log()] starting thread (client mode): 0x149459c0
2025-11-12T21:06:18.487 [DEBUG] [Thread-22748] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:06:18.502 [DEBUG] [Thread-22748] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:06:18.502 [INFO] [Thread-22748] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] client lang: <none>
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] server lang: <none>
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] kex follows: False
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:06:18.510 [DEBUG] [Thread-22748] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:06:18.511 [DEBUG] [Thread-22748] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:06:18.511 [DEBUG] [Thread-22748] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:06:18.511 [DEBUG] [Thread-22748] [transport.py] [_log()] Compression: none
2025-11-12T21:06:18.511 [DEBUG] [Thread-22748] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:06:18.568 [DEBUG] [Thread-22748] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:06:18.569 [DEBUG] [Thread-22748] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:06:18.570 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:06:18.570 [DEBUG] [Thread-22748] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:06:18.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:06:18.625 [DEBUG] [Thread-22748] [transport.py] [_log()] userauth is OK
2025-11-12T21:06:18.626 [DEBUG] [Thread-22748] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:06:18.626 [DEBUG] [Thread-22748] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:06:18.626 [DEBUG] [Thread-22748] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:06:18.626 [DEBUG] [Thread-22748] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:06:18.645 [INFO] [Thread-22748] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:06:18.646 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:06:18.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:06:19.445 [DEBUG] [Thread-22748] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:06:19.445 [DEBUG] [Thread-22748] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:06:19.493 [DEBUG] [Thread-22748] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:06:19.493 [DEBUG] [Thread-22748] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:06:19.502 [DEBUG] [Thread-22748] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:06:19.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:06:19.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:06:19.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-11-12T21:06:19.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:06:19.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:06:19.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:06:19.539 [DEBUG] [Thread-22748] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:06:29.368 [DEBUG] [Thread-22750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:06:44.400 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:06:44.401 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:06:44.414 [DEBUG] [Thread-22751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:06:49.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:06:49.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:06:49.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:06:50.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 6, 23), 17.28, 31.79, 0.0, 11.21, 18.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:06:50.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:06:23
2025-11-12T21:06:50.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:06:50.489 [DEBUG] [Thread-22752] [transport.py] [_log()] starting thread (client mode): 0x14915fc0
2025-11-12T21:06:50.489 [DEBUG] [Thread-22752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:06:50.511 [DEBUG] [Thread-22752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:06:50.511 [INFO] [Thread-22752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] client lang: <none>
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] server lang: <none>
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] kex follows: False
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] Compression: none
2025-11-12T21:06:50.515 [DEBUG] [Thread-22752] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:06:50.532 [DEBUG] [Thread-22752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:06:50.533 [DEBUG] [Thread-22752] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:06:50.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:06:50.534 [DEBUG] [Thread-22752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:06:50.535 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:06:50.536 [DEBUG] [Thread-22752] [transport.py] [_log()] userauth is OK
2025-11-12T21:06:50.536 [DEBUG] [Thread-22752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:06:50.536 [DEBUG] [Thread-22752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:06:50.536 [DEBUG] [Thread-22752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:06:50.536 [DEBUG] [Thread-22752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:06:50.569 [INFO] [Thread-22752] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:06:50.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:06:51.214 [DEBUG] [Thread-22752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:06:51.214 [DEBUG] [Thread-22752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:06:51.215 [DEBUG] [Thread-22752] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:06:51.255 [DEBUG] [Thread-22752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:06:51.256 [DEBUG] [Thread-22752] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:06:51.259 [DEBUG] [Thread-22752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:06:51.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:06:51.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:06:51.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:06:51.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:06:51.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:06:51.284 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:06:51.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:06:51.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:06:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:06:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.795917 -999.00  +19.10   4.49     36   +3.90 1 2 1 1 1     0    0 14.34 -42.98 ZnESW 5.4 4.5 258.3 9.5 19.7 -21.8 19.6 -20.9 19.4 -20.5 19.6 -21.0
2025-11-12T21:06:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:06:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:06:51.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.795917
2025-11-12T21:06:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:06:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:06:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:06:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:06:51.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:06:51.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:06:23', tmtdew=17.28, humidity=31.79, cloud=0.0, wind=11.21, temperature=18.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:06:24', seeing=0.97, atlas_timestamp='2025-11-12T19:06:07.229', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:04:00')
2025-11-12T21:06:51.287 [DEBUG] [Thread-22752] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:06:51.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:06:51.383 [DEBUG] [Thread-22755] [transport.py] [_log()] starting thread (client mode): 0x149446a0
2025-11-12T21:06:51.383 [DEBUG] [Thread-22755] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:06:51.398 [DEBUG] [Thread-22755] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:06:51.398 [INFO] [Thread-22755] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:06:51.405 [DEBUG] [Thread-22755] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] client lang: <none>
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] server lang: <none>
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] kex follows: False
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] Compression: none
2025-11-12T21:06:51.406 [DEBUG] [Thread-22755] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:06:51.465 [DEBUG] [Thread-22755] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:06:51.466 [DEBUG] [Thread-22755] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:06:51.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:06:51.467 [DEBUG] [Thread-22755] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:06:51.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:06:51.522 [DEBUG] [Thread-22755] [transport.py] [_log()] userauth is OK
2025-11-12T21:06:51.522 [DEBUG] [Thread-22755] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:06:51.522 [DEBUG] [Thread-22755] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:06:51.522 [DEBUG] [Thread-22755] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:06:51.522 [DEBUG] [Thread-22755] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:06:51.541 [INFO] [Thread-22755] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:06: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-11-12T21:06:51.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:06:52.354 [DEBUG] [Thread-22755] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:06:52.355 [DEBUG] [Thread-22755] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:06:52.403 [DEBUG] [Thread-22755] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:06:52.403 [DEBUG] [Thread-22755] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:06:52.413 [DEBUG] [Thread-22755] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:06:52.422 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:06:52.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:06:52.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:06:52.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:06:52.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:06:52.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:06:52.449 [DEBUG] [Thread-22755] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:06:54.156 [DEBUG] [Thread-22757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:06:59.444 [DEBUG] [Thread-22758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:07:14.495 [DEBUG] [Thread-22759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:07:22.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:07:22.472 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:07:22.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-11-12T21:07:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 6, 55), 17.18, 31.77, 0.0, 13.01, 18.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:07:23.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:06:55
2025-11-12T21:07:23.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:07:23.440 [DEBUG] [Thread-22760] [transport.py] [_log()] starting thread (client mode): 0x149150f0
2025-11-12T21:07:23.441 [DEBUG] [Thread-22760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:07:23.461 [DEBUG] [Thread-22760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:07:23.461 [INFO] [Thread-22760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] client lang: <none>
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] server lang: <none>
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] kex follows: False
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] Compression: none
2025-11-12T21:07:23.464 [DEBUG] [Thread-22760] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:07:23.481 [DEBUG] [Thread-22760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:07:23.481 [DEBUG] [Thread-22760] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:07:23.481 [DEBUG] [Thread-22760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:07:23.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:07:23.481 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:07:23.482 [DEBUG] [Thread-22760] [transport.py] [_log()] userauth is OK
2025-11-12T21:07:23.482 [DEBUG] [Thread-22760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:07:23.482 [DEBUG] [Thread-22760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:07:23.482 [DEBUG] [Thread-22760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:07:23.482 [DEBUG] [Thread-22760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:07:23.491 [INFO] [Thread-22760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:07:23.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:07:24.131 [DEBUG] [Thread-22760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:07:24.131 [DEBUG] [Thread-22760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:07:24.131 [DEBUG] [Thread-22760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:07:24.172 [DEBUG] [Thread-22760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:07:24.172 [DEBUG] [Thread-22760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:07:24.175 [DEBUG] [Thread-22760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:07:24.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:07:24.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:07:24.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:07:24.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:07:24.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:07:24.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:07:24.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.796265 -999.00  +19.00   4.83     36   +3.90 1 2 1 1 1     0    0 14.08 -42.76 ZnESW 7.1 4.8 230.2 8.8 19.6 -21.7 19.6 -20.9 19.3 -20.6 19.6 -21.1
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.796265
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:07:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:06:55', tmtdew=17.18, humidity=31.77, cloud=0.0, wind=13.01, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:06:56', seeing=0.97, atlas_timestamp='2025-11-12T19:06:37.296', atlas_cloud=2, atlas_rain=1, zp_data=[1.05375, 0.5442500000000008, 0.9282500000000002, 1.1864999999999997, 1.3775000000000004, 1.3572500000000005, 1.5399999999999991, 1.2882500000000006, 0.7464999999999993, 0.7300000000000004, 1.2472499999999993, 1.3629999999999995, 1.63, 1.7382499999999999, 1.5059999999999993, 0.9919999999999991, 0.6452499999999999, 1.4284999999999997, 1.7449999999999992, 1.3222499999999986, 1.7624999999999993, 1.9327499999999986, nan, 1.3457499999999998, 0.6069999999999993, 1.4400000000000004, nan, 1.8675000000000006, 1.5145, nan, nan, 1.3260000000000005, 1.1682499999999987], zp_timestamp='2025-11-12T19:04:00')
2025-11-12T21:07:24.194 [DEBUG] [Thread-22760] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:07:24.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:07:24.280 [DEBUG] [Thread-22763] [transport.py] [_log()] starting thread (client mode): 0x17398370
2025-11-12T21:07:24.280 [DEBUG] [Thread-22763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:07:24.294 [DEBUG] [Thread-22763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:07:24.294 [INFO] [Thread-22763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] client lang: <none>
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] server lang: <none>
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] kex follows: False
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:07:24.302 [DEBUG] [Thread-22763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:07:24.303 [DEBUG] [Thread-22763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:07:24.303 [DEBUG] [Thread-22763] [transport.py] [_log()] Compression: none
2025-11-12T21:07:24.303 [DEBUG] [Thread-22763] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:07:24.361 [DEBUG] [Thread-22763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:07:24.361 [DEBUG] [Thread-22763] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:07:24.361 [DEBUG] [Thread-22763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:07:24.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:07:24.361 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:07:24.417 [DEBUG] [Thread-22763] [transport.py] [_log()] userauth is OK
2025-11-12T21:07:24.417 [DEBUG] [Thread-22763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:07:24.417 [DEBUG] [Thread-22763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:07:24.417 [DEBUG] [Thread-22763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:07:24.417 [DEBUG] [Thread-22763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:07:24.431 [INFO] [Thread-22763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:07: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-11-12T21:07:24.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:07:25.249 [DEBUG] [Thread-22763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:07:25.249 [DEBUG] [Thread-22763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:07:25.300 [DEBUG] [Thread-22763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:07:25.300 [DEBUG] [Thread-22763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:07:25.308 [DEBUG] [Thread-22763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:07:25.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:07:25.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-11-12T21:07:25.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-11-12T21:07:25.333 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:07:25.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:07:25.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:07:25.341 [DEBUG] [Thread-22763] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:07:29.526 [DEBUG] [Thread-22765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:07:44.569 [DEBUG] [Thread-22766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:07:44.606 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:07:44.608 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:07:54.219 [DEBUG] [Thread-22767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:07:55.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:07:55.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:07:55.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:07:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 7, 27), 17.21, 31.72, 0.0, 12.53, 18.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:07:56.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:07:27
2025-11-12T21:07:56.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:07:56.272 [DEBUG] [Thread-22768] [transport.py] [_log()] starting thread (client mode): 0x14947d30
2025-11-12T21:07:56.272 [DEBUG] [Thread-22768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:07:56.291 [DEBUG] [Thread-22768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:07:56.291 [INFO] [Thread-22768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:07:56.294 [DEBUG] [Thread-22768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] client lang: <none>
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] server lang: <none>
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] kex follows: False
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:07:56.295 [DEBUG] [Thread-22768] [transport.py] [_log()] Compression: none
2025-11-12T21:07:56.296 [DEBUG] [Thread-22768] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:07:56.315 [DEBUG] [Thread-22768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:07:56.316 [DEBUG] [Thread-22768] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:07:56.317 [DEBUG] [Thread-22768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:07:56.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:07:56.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:07:56.319 [DEBUG] [Thread-22768] [transport.py] [_log()] userauth is OK
2025-11-12T21:07:56.319 [DEBUG] [Thread-22768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:07:56.319 [DEBUG] [Thread-22768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:07:56.319 [DEBUG] [Thread-22768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:07:56.319 [DEBUG] [Thread-22768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:07:56.343 [INFO] [Thread-22768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:07:56.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:07:57.002 [DEBUG] [Thread-22768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:07:57.003 [DEBUG] [Thread-22768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:07:57.003 [DEBUG] [Thread-22768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:07:57.044 [DEBUG] [Thread-22768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:07:57.044 [DEBUG] [Thread-22768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:07:57.047 [DEBUG] [Thread-22768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:07:57.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:07:57.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:07:57.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:07:57.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:07:57.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:07:57.071 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:07:57.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:07:57.071 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:07:57.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:07:57.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.796612 -999.00  +19.00   5.47     37   +4.00 1 2 1 1 1     0    0 14.14 -46.46 ZnESW 9.9 5.5 233.7 10.3 19.6 -21.8 19.6 -20.9 19.3 -20.5 19.6 -20.9
2025-11-12T21:07:57.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:07:57.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:07:57.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.796612
2025-11-12T21:07:57.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:07:57.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:07:57.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:07:57.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:07:57.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:07:57.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:07:27', tmtdew=17.21, humidity=31.72, cloud=0.0, wind=12.53, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:07:28', seeing=0.95, atlas_timestamp='2025-11-12T19:07:07.277', atlas_cloud=2, atlas_rain=1, zp_data=[1.125750000000001, 1.0362500000000008, 0.9252500000000001, 0.9624999999999995, 1.5534999999999997, 1.4372500000000006, 1.5484999999999989, 1.5332500000000007, 1.2074999999999996, 0.8479999999999999, 1.1622499999999993, 1.0510000000000002, 1.3899999999999997, 1.5317499999999988, 1.5309999999999997, 1.3499999999999996, 0.6282499999999995, 0.9874999999999998, 1.589999999999999, 1.116249999999999, 1.147499999999999, 1.5992499999999987, 2.244250000000001, 1.43175, 0.5969999999999995, 1.5164999999999997, 2.35375, 1.852500000000001, 1.2110000000000003, nan, nan, 1.1880000000000006, 0.6697499999999987], zp_timestamp='2025-11-12T19:06:00')
2025-11-12T21:07:57.074 [DEBUG] [Thread-22768] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:07:57.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:07:57.170 [DEBUG] [Thread-22771] [transport.py] [_log()] starting thread (client mode): 0x149a8c10
2025-11-12T21:07:57.170 [DEBUG] [Thread-22771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:07:57.186 [DEBUG] [Thread-22771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:07:57.186 [INFO] [Thread-22771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] client lang: <none>
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] server lang: <none>
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] kex follows: False
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:07:57.194 [DEBUG] [Thread-22771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:07:57.195 [DEBUG] [Thread-22771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:07:57.195 [DEBUG] [Thread-22771] [transport.py] [_log()] Compression: none
2025-11-12T21:07:57.195 [DEBUG] [Thread-22771] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:07:57.253 [DEBUG] [Thread-22771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:07:57.254 [DEBUG] [Thread-22771] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:07:57.254 [DEBUG] [Thread-22771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:07:57.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:07:57.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:07:57.309 [DEBUG] [Thread-22771] [transport.py] [_log()] userauth is OK
2025-11-12T21:07:57.309 [DEBUG] [Thread-22771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:07:57.309 [DEBUG] [Thread-22771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:07:57.309 [DEBUG] [Thread-22771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:07:57.309 [DEBUG] [Thread-22771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:07:57.323 [INFO] [Thread-22771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:07:57.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:07:57.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:07:58.130 [DEBUG] [Thread-22771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:07:58.131 [DEBUG] [Thread-22771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:07:58.179 [DEBUG] [Thread-22771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:07:58.179 [DEBUG] [Thread-22771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:07:58.188 [DEBUG] [Thread-22771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:07:58.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:07:58.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-11-12T21:07:58.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-11-12T21:07:58.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:07:58.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:07:58.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:07:58.225 [DEBUG] [Thread-22771] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:07:59.604 [DEBUG] [Thread-22773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:08:14.659 [DEBUG] [Thread-22774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:08:28.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:08:28.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:08:28.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-11-12T21:08:28.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 7, 59), 16.97, 32.3, 0.0, 15.14, 18.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:08:28.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:07:59
2025-11-12T21:08:28.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:08:29.137 [DEBUG] [Thread-22775] [transport.py] [_log()] starting thread (client mode): 0x173be080
2025-11-12T21:08:29.137 [DEBUG] [Thread-22775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:08:29.150 [DEBUG] [Thread-22775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:08:29.151 [INFO] [Thread-22775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] client lang: <none>
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] server lang: <none>
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] kex follows: False
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:08:29.154 [DEBUG] [Thread-22775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:08:29.155 [DEBUG] [Thread-22775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:08:29.155 [DEBUG] [Thread-22775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:08:29.155 [DEBUG] [Thread-22775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:08:29.155 [DEBUG] [Thread-22775] [transport.py] [_log()] Compression: none
2025-11-12T21:08:29.155 [DEBUG] [Thread-22775] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:08:29.173 [DEBUG] [Thread-22775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:08:29.173 [DEBUG] [Thread-22775] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:08:29.174 [DEBUG] [Thread-22775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:08:29.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:08:29.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:08:29.176 [DEBUG] [Thread-22775] [transport.py] [_log()] userauth is OK
2025-11-12T21:08:29.176 [DEBUG] [Thread-22775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:08:29.176 [DEBUG] [Thread-22775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:08:29.176 [DEBUG] [Thread-22775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:08:29.176 [DEBUG] [Thread-22775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:08:29.195 [INFO] [Thread-22775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:08:29.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:08:29.695 [DEBUG] [Thread-22777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:08:29.807 [DEBUG] [Thread-22775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:08:29.807 [DEBUG] [Thread-22775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:08:29.808 [DEBUG] [Thread-22775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:08:29.848 [DEBUG] [Thread-22775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:08:29.848 [DEBUG] [Thread-22775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:08:29.851 [DEBUG] [Thread-22775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:08:29.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:08:29.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:08:29.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:08:29.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:08:29.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:08:29.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:08:29.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:08:29.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:08:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:08:29.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.796959 -999.00  +19.00  13.08     37   +4.20 1 2 1 1 1     0    0 14.16 -46.01 ZnESW 7.7 13.1 256.2 18.0 19.6 -21.7 19.6 -20.8 19.3 -20.5 19.5 -21.0
2025-11-12T21:08:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:08:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:08:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.796959
2025-11-12T21:08:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:08:29.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:08:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:08:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:08:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:08:29.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:07:59', tmtdew=16.97, humidity=32.3, cloud=0.0, wind=15.14, temperature=18.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:08:00', seeing=0.85, atlas_timestamp='2025-11-12T19:07:37.258', atlas_cloud=2, atlas_rain=1, zp_data=[1.125750000000001, 1.0362500000000008, 0.9252500000000001, 0.9624999999999995, 1.5534999999999997, 1.4372500000000006, 1.5484999999999989, 1.5332500000000007, 1.2074999999999996, 0.8479999999999999, 1.1622499999999993, 1.0510000000000002, 1.3899999999999997, 1.5317499999999988, 1.5309999999999997, 1.3499999999999996, 0.6282499999999995, 0.9874999999999998, 1.589999999999999, 1.116249999999999, 1.147499999999999, 1.5992499999999987, 2.244250000000001, 1.43175, 0.5969999999999995, 1.5164999999999997, 2.35375, 1.852500000000001, 1.2110000000000003, nan, nan, 1.1880000000000006, 0.6697499999999987], zp_timestamp='2025-11-12T19:06:00')
2025-11-12T21:08:29.876 [DEBUG] [Thread-22775] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:08:29.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:08:29.973 [DEBUG] [Thread-22779] [transport.py] [_log()] starting thread (client mode): 0x173be7a0
2025-11-12T21:08:29.973 [DEBUG] [Thread-22779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:08:29.988 [DEBUG] [Thread-22779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:08:29.988 [INFO] [Thread-22779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:08:29.995 [DEBUG] [Thread-22779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:08:29.995 [DEBUG] [Thread-22779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:08:29.995 [DEBUG] [Thread-22779] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:08:29.995 [DEBUG] [Thread-22779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:08:29.995 [DEBUG] [Thread-22779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] client lang: <none>
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] server lang: <none>
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] kex follows: False
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] Compression: none
2025-11-12T21:08:29.996 [DEBUG] [Thread-22779] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:08:30.052 [DEBUG] [Thread-22779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:08:30.052 [DEBUG] [Thread-22779] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:08:30.053 [DEBUG] [Thread-22779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:08:30.053 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:08:30.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:08:30.109 [DEBUG] [Thread-22779] [transport.py] [_log()] userauth is OK
2025-11-12T21:08:30.109 [DEBUG] [Thread-22779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:08:30.109 [DEBUG] [Thread-22779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:08:30.109 [DEBUG] [Thread-22779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:08:30.109 [DEBUG] [Thread-22779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:08:30.133 [INFO] [Thread-22779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:08:30.133 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:08:30.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:08:30.945 [DEBUG] [Thread-22779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:08:30.945 [DEBUG] [Thread-22779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:08:30.994 [DEBUG] [Thread-22779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:08:30.994 [DEBUG] [Thread-22779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:08:31.006 [DEBUG] [Thread-22779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:08:31.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:08:31.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-11-12T21:08:31.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-11-12T21:08:31.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:08:31.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:08:31.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:08:31.047 [DEBUG] [Thread-22779] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:08:44.726 [DEBUG] [Thread-22781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:08:44.813 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:08:44.814 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:08:54.271 [DEBUG] [Thread-22782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:08:59.774 [DEBUG] [Thread-22783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:09:01.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:09:01.042 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:09:01.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:09:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 8, 31), 16.96, 32.32, 0.0, 14.29, 18.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:09:01.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:08:31
2025-11-12T21:09:01.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:09:01.950 [DEBUG] [Thread-22784] [transport.py] [_log()] starting thread (client mode): 0x14921420
2025-11-12T21:09:01.950 [DEBUG] [Thread-22784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:09:01.970 [DEBUG] [Thread-22784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:09:01.970 [INFO] [Thread-22784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:09:01.973 [DEBUG] [Thread-22784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] client lang: <none>
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] server lang: <none>
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] kex follows: False
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:09:01.974 [DEBUG] [Thread-22784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:09:01.975 [DEBUG] [Thread-22784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:09:01.975 [DEBUG] [Thread-22784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:09:01.975 [DEBUG] [Thread-22784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:09:01.975 [DEBUG] [Thread-22784] [transport.py] [_log()] Compression: none
2025-11-12T21:09:01.975 [DEBUG] [Thread-22784] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:09:01.992 [DEBUG] [Thread-22784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:09:01.993 [DEBUG] [Thread-22784] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:09:01.994 [DEBUG] [Thread-22784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:09:01.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:09:01.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:09:01.996 [DEBUG] [Thread-22784] [transport.py] [_log()] userauth is OK
2025-11-12T21:09:01.996 [DEBUG] [Thread-22784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:09:01.996 [DEBUG] [Thread-22784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:09:01.996 [DEBUG] [Thread-22784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:09:01.996 [DEBUG] [Thread-22784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:09:02.021 [INFO] [Thread-22784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:09:02.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:09:02.704 [DEBUG] [Thread-22784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:09:02.704 [DEBUG] [Thread-22784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:09:02.705 [DEBUG] [Thread-22784] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:09:02.745 [DEBUG] [Thread-22784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:09:02.746 [DEBUG] [Thread-22784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:09:02.749 [DEBUG] [Thread-22784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:09:02.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:09:02.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:09:02.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:09:02.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:09:02.771 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:09:02.773 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:09:02.773 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:09:02.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:09:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:09:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.797653 -999.00  +19.00  12.91     38   +4.50 1 1 1 1 1     0    0 13.62 -53.70 ZNESW 17.0 12.9 221.1 22.0 19.6 -21.8 19.5 -21.0 19.3 -20.6 19.6 -21.1
2025-11-12T21:09:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:09:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:09:02.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.797653
2025-11-12T21:09:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:09:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:09:02.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:09:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:09:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:09:02.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:08:31', tmtdew=16.96, humidity=32.32, cloud=0.0, wind=14.29, temperature=18.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:08:32', seeing=0.85, atlas_timestamp='2025-11-12T19:08:37.219', atlas_cloud=1, atlas_rain=1, zp_data=[1.125750000000001, 1.0362500000000008, 0.9252500000000001, 0.9624999999999995, 1.5534999999999997, 1.4372500000000006, 1.5484999999999989, 1.5332500000000007, 1.2074999999999996, 0.8479999999999999, 1.1622499999999993, 1.0510000000000002, 1.3899999999999997, 1.5317499999999988, 1.5309999999999997, 1.3499999999999996, 0.6282499999999995, 0.9874999999999998, 1.589999999999999, 1.116249999999999, 1.147499999999999, 1.5992499999999987, 2.244250000000001, 1.43175, 0.5969999999999995, 1.5164999999999997, 2.35375, 1.852500000000001, 1.2110000000000003, nan, nan, 1.1880000000000006, 0.6697499999999987], zp_timestamp='2025-11-12T19:06:00')
2025-11-12T21:09:02.776 [DEBUG] [Thread-22784] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:09:02.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:09:02.872 [DEBUG] [Thread-22787] [transport.py] [_log()] starting thread (client mode): 0x173bc850
2025-11-12T21:09:02.872 [DEBUG] [Thread-22787] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:09:02.887 [DEBUG] [Thread-22787] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:09:02.887 [INFO] [Thread-22787] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:09:02.895 [DEBUG] [Thread-22787] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:09:02.895 [DEBUG] [Thread-22787] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:09:02.895 [DEBUG] [Thread-22787] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:09:02.895 [DEBUG] [Thread-22787] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:09:02.895 [DEBUG] [Thread-22787] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:09:02.895 [DEBUG] [Thread-22787] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:09:02.896 [DEBUG] [Thread-22787] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:09:02.896 [DEBUG] [Thread-22787] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:09:02.896 [DEBUG] [Thread-22787] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:09:02.896 [DEBUG] [Thread-22787] [transport.py] [_log()] client lang: <none>
2025-11-12T21:09:02.896 [DEBUG] [Thread-22787] [transport.py] [_log()] server lang: <none>
2025-11-12T21:09:02.896 [DEBUG] [Thread-22787] [transport.py] [_log()] kex follows: False
2025-11-12T21:09:02.896 [DEBUG] [Thread-22787] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:09:02.896 [DEBUG] [Thread-22787] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:09:02.897 [DEBUG] [Thread-22787] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:09:02.897 [DEBUG] [Thread-22787] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:09:02.897 [DEBUG] [Thread-22787] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:09:02.897 [DEBUG] [Thread-22787] [transport.py] [_log()] Compression: none
2025-11-12T21:09:02.897 [DEBUG] [Thread-22787] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:09:02.954 [DEBUG] [Thread-22787] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:09:02.955 [DEBUG] [Thread-22787] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:09:02.955 [DEBUG] [Thread-22787] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:09:02.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:09:02.957 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:09:03.010 [DEBUG] [Thread-22787] [transport.py] [_log()] userauth is OK
2025-11-12T21:09:03.010 [DEBUG] [Thread-22787] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:09:03.010 [DEBUG] [Thread-22787] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:09:03.010 [DEBUG] [Thread-22787] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:09:03.011 [DEBUG] [Thread-22787] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:09:03.032 [INFO] [Thread-22787] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:09:03.033 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:09:03.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:09:03.868 [DEBUG] [Thread-22787] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:09:03.868 [DEBUG] [Thread-22787] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:09:03.915 [DEBUG] [Thread-22787] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:09:03.916 [DEBUG] [Thread-22787] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:09:03.925 [DEBUG] [Thread-22787] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:09:03.933 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:09:03.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:09:03.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-11-12T21:09:03.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:09:03.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:09:03.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:09:03.959 [DEBUG] [Thread-22787] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:09:14.809 [DEBUG] [Thread-22789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:09:29.858 [DEBUG] [Thread-22790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:09:33.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:09:33.982 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:09: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-11-12T21:09:34.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 9, 3), 16.72, 32.87, 0.0, 18.77, 18.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:09:34.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:09:03
2025-11-12T21:09:34.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:09:34.897 [DEBUG] [Thread-22791] [transport.py] [_log()] starting thread (client mode): 0x173bd7e0
2025-11-12T21:09:34.898 [DEBUG] [Thread-22791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:09:34.917 [DEBUG] [Thread-22791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:09:34.918 [INFO] [Thread-22791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] client lang: <none>
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] server lang: <none>
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] kex follows: False
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] Compression: none
2025-11-12T21:09:34.921 [DEBUG] [Thread-22791] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:09:34.931 [DEBUG] [Thread-22791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:09:34.932 [DEBUG] [Thread-22791] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:09:34.932 [DEBUG] [Thread-22791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:09:34.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:09:34.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:09:34.934 [DEBUG] [Thread-22791] [transport.py] [_log()] userauth is OK
2025-11-12T21:09:34.934 [DEBUG] [Thread-22791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:09:34.934 [DEBUG] [Thread-22791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:09:34.934 [DEBUG] [Thread-22791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:09:34.934 [DEBUG] [Thread-22791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:09:34.955 [INFO] [Thread-22791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:09:34.955 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:09:35.526 [DEBUG] [Thread-22791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:09:35.526 [DEBUG] [Thread-22791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:09:35.526 [DEBUG] [Thread-22791] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:09:35.566 [DEBUG] [Thread-22791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:09:35.567 [DEBUG] [Thread-22791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:09:35.570 [DEBUG] [Thread-22791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:09:35.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:09:35.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:09:35.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:09:35.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:09:35.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:09:35.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:09:35.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:09:35.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:09:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:09:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.798001 -999.00  +18.90  10.02     38   +4.40 1 2 1 1 1     0    0 13.90 -56.06 Z.ESW 13.2 10.0 218.2 20.3 19.6 -21.9 19.5 -21.0 19.3 -20.6 19.5 -21.1
2025-11-12T21:09:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:09:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:09:35.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.798001
2025-11-12T21:09:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:09:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:09:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:09:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:09:35.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:09:35.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:09:03', tmtdew=16.72, humidity=32.87, cloud=0.0, wind=18.77, temperature=18.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:09:04', seeing=0.91, atlas_timestamp='2025-11-12T19:09:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[1.125750000000001, 1.0362500000000008, 0.9252500000000001, 0.9624999999999995, 1.5534999999999997, 1.4372500000000006, 1.5484999999999989, 1.5332500000000007, 1.2074999999999996, 0.8479999999999999, 1.1622499999999993, 1.0510000000000002, 1.3899999999999997, 1.5317499999999988, 1.5309999999999997, 1.3499999999999996, 0.6282499999999995, 0.9874999999999998, 1.589999999999999, 1.116249999999999, 1.147499999999999, 1.5992499999999987, 2.244250000000001, 1.43175, 0.5969999999999995, 1.5164999999999997, 2.35375, 1.852500000000001, 1.2110000000000003, nan, nan, 1.1880000000000006, 0.6697499999999987], zp_timestamp='2025-11-12T19:06:00')
2025-11-12T21:09:35.598 [DEBUG] [Thread-22791] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:09:35.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:09:35.696 [DEBUG] [Thread-22794] [transport.py] [_log()] starting thread (client mode): 0x17345600
2025-11-12T21:09:35.697 [DEBUG] [Thread-22794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:09:35.712 [DEBUG] [Thread-22794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:09:35.712 [INFO] [Thread-22794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] client lang: <none>
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] server lang: <none>
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] kex follows: False
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:09:35.720 [DEBUG] [Thread-22794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:09:35.721 [DEBUG] [Thread-22794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:09:35.721 [DEBUG] [Thread-22794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:09:35.721 [DEBUG] [Thread-22794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:09:35.721 [DEBUG] [Thread-22794] [transport.py] [_log()] Compression: none
2025-11-12T21:09:35.721 [DEBUG] [Thread-22794] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:09:35.777 [DEBUG] [Thread-22794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:09:35.778 [DEBUG] [Thread-22794] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:09:35.779 [DEBUG] [Thread-22794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:09:35.779 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:09:35.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:09:35.834 [DEBUG] [Thread-22794] [transport.py] [_log()] userauth is OK
2025-11-12T21:09:35.834 [DEBUG] [Thread-22794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:09:35.834 [DEBUG] [Thread-22794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:09:35.834 [DEBUG] [Thread-22794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:09:35.834 [DEBUG] [Thread-22794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:09:35.852 [INFO] [Thread-22794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:09:35.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:09:35.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:09:36.659 [DEBUG] [Thread-22794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:09:36.659 [DEBUG] [Thread-22794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:09:36.707 [DEBUG] [Thread-22794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:09:36.707 [DEBUG] [Thread-22794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:09:36.715 [DEBUG] [Thread-22794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:09:36.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:09:36.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-11-12T21:09:36.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-11-12T21:09:36.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:09:36.739 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:09:36.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:09:36.747 [DEBUG] [Thread-22794] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:09:44.888 [DEBUG] [Thread-22796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:09:45.020 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:09:45.021 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:09:54.350 [DEBUG] [Thread-22797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:09:59.942 [DEBUG] [Thread-22798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:10:06.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:10:06.759 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:10:06.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-11-12T21:10:07.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 9, 35), 16.52, 32.98, 0.0, 15.6, 18.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:10:07.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:09:35
2025-11-12T21:10:07.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:10:07.683 [DEBUG] [Thread-22799] [transport.py] [_log()] starting thread (client mode): 0x149aa380
2025-11-12T21:10:07.683 [DEBUG] [Thread-22799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:10:07.704 [DEBUG] [Thread-22799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:10:07.704 [INFO] [Thread-22799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:10:07.707 [DEBUG] [Thread-22799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:10:07.707 [DEBUG] [Thread-22799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] client lang: <none>
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] server lang: <none>
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] kex follows: False
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] Compression: none
2025-11-12T21:10:07.708 [DEBUG] [Thread-22799] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:10:07.724 [DEBUG] [Thread-22799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:10:07.724 [DEBUG] [Thread-22799] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:10:07.724 [DEBUG] [Thread-22799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:10:07.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:10:07.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:10:07.725 [DEBUG] [Thread-22799] [transport.py] [_log()] userauth is OK
2025-11-12T21:10:07.725 [DEBUG] [Thread-22799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:10:07.725 [DEBUG] [Thread-22799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:10:07.725 [DEBUG] [Thread-22799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:10:07.725 [DEBUG] [Thread-22799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:10:07.740 [INFO] [Thread-22799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:10:07.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:10:10.275 [DEBUG] [Thread-22799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:10:10.275 [DEBUG] [Thread-22799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:10:10.275 [DEBUG] [Thread-22799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:10:10.316 [DEBUG] [Thread-22799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:10:10.316 [DEBUG] [Thread-22799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:10:10.318 [DEBUG] [Thread-22799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:10:10.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:10:10.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:10:10.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:10:10.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:10:10.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:10:10.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:10:10.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:10:10.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:10:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:10:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.798348 -999.00  +19.00   8.40     38   +4.50 1 2 1 1 1     0    0 13.81 -58.60 ZnESW 8.5 8.4 194.1 16.7 19.6 -21.9 19.5 -21.3 19.2 -20.7 19.5 -21.2
2025-11-12T21:10:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:10:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:10:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.798348
2025-11-12T21:10:10.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:10:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:10:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:10:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:10:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:10:10.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:09:35', tmtdew=16.52, humidity=32.98, cloud=0.0, wind=15.6, temperature=18.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:09:36', seeing=0.91, atlas_timestamp='2025-11-12T19:09:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[1.125750000000001, 1.0362500000000008, 0.9252500000000001, 0.9624999999999995, 1.5534999999999997, 1.4372500000000006, 1.5484999999999989, 1.5332500000000007, 1.2074999999999996, 0.8479999999999999, 1.1622499999999993, 1.0510000000000002, 1.3899999999999997, 1.5317499999999988, 1.5309999999999997, 1.3499999999999996, 0.6282499999999995, 0.9874999999999998, 1.589999999999999, 1.116249999999999, 1.147499999999999, 1.5992499999999987, 2.244250000000001, 1.43175, 0.5969999999999995, 1.5164999999999997, 2.35375, 1.852500000000001, 1.2110000000000003, nan, nan, 1.1880000000000006, 0.6697499999999987], zp_timestamp='2025-11-12T19:06:00')
2025-11-12T21:10:10.385 [DEBUG] [Thread-22799] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:10:10.466 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:10:10.478 [DEBUG] [Thread-22802] [transport.py] [_log()] starting thread (client mode): 0x17346fb0
2025-11-12T21:10:10.479 [DEBUG] [Thread-22802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:10:10.494 [DEBUG] [Thread-22802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:10:10.494 [INFO] [Thread-22802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] client lang: <none>
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] server lang: <none>
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] kex follows: False
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:10:10.501 [DEBUG] [Thread-22802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:10:10.502 [DEBUG] [Thread-22802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:10:10.502 [DEBUG] [Thread-22802] [transport.py] [_log()] Compression: none
2025-11-12T21:10:10.502 [DEBUG] [Thread-22802] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:10:10.559 [DEBUG] [Thread-22802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:10:10.559 [DEBUG] [Thread-22802] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:10:10.559 [DEBUG] [Thread-22802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:10:10.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:10:10.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:10:10.617 [DEBUG] [Thread-22802] [transport.py] [_log()] userauth is OK
2025-11-12T21:10:10.617 [DEBUG] [Thread-22802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:10:10.617 [DEBUG] [Thread-22802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:10:10.617 [DEBUG] [Thread-22802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:10:10.617 [DEBUG] [Thread-22802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:10:10.630 [INFO] [Thread-22802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:10:10.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:10:10.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:10:11.465 [DEBUG] [Thread-22802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:10:11.465 [DEBUG] [Thread-22802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:10:11.513 [DEBUG] [Thread-22802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:10:11.513 [DEBUG] [Thread-22802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:10:11.521 [DEBUG] [Thread-22802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:10:11.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:10:11.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:10:11.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:10:11.545 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:10:11.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:10:11.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:10:11.553 [DEBUG] [Thread-22802] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:10:14.973 [DEBUG] [Thread-22804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:10:30.027 [DEBUG] [Thread-22805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:10:41.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:10:41.574 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:10:41.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-11-12T21:10:42.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 10, 7), 16.49, 33.06, 0.0, 16.97, 18.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:10:42.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:10:07
2025-11-12T21:10:42.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:10:42.546 [DEBUG] [Thread-22806] [transport.py] [_log()] starting thread (client mode): 0x14920dc0
2025-11-12T21:10:42.546 [DEBUG] [Thread-22806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:10:42.567 [DEBUG] [Thread-22806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:10:42.567 [INFO] [Thread-22806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:10:42.570 [DEBUG] [Thread-22806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:10:42.570 [DEBUG] [Thread-22806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] client lang: <none>
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] server lang: <none>
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] kex follows: False
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] Compression: none
2025-11-12T21:10:42.571 [DEBUG] [Thread-22806] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:10:42.588 [DEBUG] [Thread-22806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:10:42.589 [DEBUG] [Thread-22806] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:10:42.589 [DEBUG] [Thread-22806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:10:42.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:10:42.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:10:42.591 [DEBUG] [Thread-22806] [transport.py] [_log()] userauth is OK
2025-11-12T21:10:42.592 [DEBUG] [Thread-22806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:10:42.592 [DEBUG] [Thread-22806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:10:42.592 [DEBUG] [Thread-22806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:10:42.592 [DEBUG] [Thread-22806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:10:42.615 [INFO] [Thread-22806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:10:42.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:10:43.215 [DEBUG] [Thread-22806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:10:43.215 [DEBUG] [Thread-22806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:10:43.216 [DEBUG] [Thread-22806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:10:43.256 [DEBUG] [Thread-22806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:10:43.256 [DEBUG] [Thread-22806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:10:43.259 [DEBUG] [Thread-22806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:10:43.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:10:43.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:10:43.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:10:43.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:10:43.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:10:43.283 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:10:43.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:10:43.284 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:10:43.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:10:43.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.798695 -999.00  +18.90   7.29     38   +4.40 1 2 1 1 1     0    0 13.42 -57.05 ZnESW 3.9 7.3 215.9 14.5 19.6 -21.9 19.4 -21.1 19.2 -20.7 19.4 -21.3
2025-11-12T21:10:43.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:10:43.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:10:43.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.798695
2025-11-12T21:10:43.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:10:43.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:10:43.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:10:43.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:10:43.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:10:43.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:10:07', tmtdew=16.49, humidity=33.06, cloud=0.0, wind=16.97, temperature=18.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:10:40', seeing=1.01, atlas_timestamp='2025-11-12T19:10:07.248', atlas_cloud=2, atlas_rain=1, zp_data=[1.125750000000001, 1.0362500000000008, 0.9252500000000001, 0.9624999999999995, 1.5534999999999997, 1.4372500000000006, 1.5484999999999989, 1.5332500000000007, 1.2074999999999996, 0.8479999999999999, 1.1622499999999993, 1.0510000000000002, 1.3899999999999997, 1.5317499999999988, 1.5309999999999997, 1.3499999999999996, 0.6282499999999995, 0.9874999999999998, 1.589999999999999, 1.116249999999999, 1.147499999999999, 1.5992499999999987, 2.244250000000001, 1.43175, 0.5969999999999995, 1.5164999999999997, 2.35375, 1.852500000000001, 1.2110000000000003, nan, nan, 1.1880000000000006, 0.6697499999999987], zp_timestamp='2025-11-12T19:06:00')
2025-11-12T21:10:43.286 [DEBUG] [Thread-22806] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:10:43.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:10:43.382 [DEBUG] [Thread-22809] [transport.py] [_log()] starting thread (client mode): 0x149467d0
2025-11-12T21:10:43.383 [DEBUG] [Thread-22809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:10:43.399 [DEBUG] [Thread-22809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:10:43.400 [INFO] [Thread-22809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:10:43.407 [DEBUG] [Thread-22809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:10:43.407 [DEBUG] [Thread-22809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:10:43.407 [DEBUG] [Thread-22809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:10:43.407 [DEBUG] [Thread-22809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] client lang: <none>
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] server lang: <none>
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] kex follows: False
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] Compression: none
2025-11-12T21:10:43.408 [DEBUG] [Thread-22809] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:10:43.465 [DEBUG] [Thread-22809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:10:43.466 [DEBUG] [Thread-22809] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:10:43.466 [DEBUG] [Thread-22809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:10:43.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:10:43.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:10:43.521 [DEBUG] [Thread-22809] [transport.py] [_log()] userauth is OK
2025-11-12T21:10:43.522 [DEBUG] [Thread-22809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:10:43.522 [DEBUG] [Thread-22809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:10:43.522 [DEBUG] [Thread-22809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:10:43.522 [DEBUG] [Thread-22809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:10:43.540 [INFO] [Thread-22809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:10:43.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:10:43.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:10:44.376 [DEBUG] [Thread-22809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:10:44.376 [DEBUG] [Thread-22809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:10:44.424 [DEBUG] [Thread-22809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:10:44.424 [DEBUG] [Thread-22809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:10:44.433 [DEBUG] [Thread-22809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:10:44.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:10:44.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-11-12T21:10: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-11-12T21:10:44.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:10:44.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:10:44.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:10:44.467 [DEBUG] [Thread-22809] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:10:45.062 [DEBUG] [Thread-22811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:10:45.224 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:10:45.225 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:10:54.421 [DEBUG] [Thread-22812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:11:00.103 [DEBUG] [Thread-22813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:11:14.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:11:14.490 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:11:14.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:11:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 11, 11), 16.46, 33.13, 0.0, 14.61, 18.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:11:15.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:11:11
2025-11-12T21:11:15.136 [DEBUG] [Thread-22814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:11:15.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:11:15.398 [DEBUG] [Thread-22815] [transport.py] [_log()] starting thread (client mode): 0x173bd7e0
2025-11-12T21:11:15.398 [DEBUG] [Thread-22815] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:11:15.417 [DEBUG] [Thread-22815] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:11:15.417 [INFO] [Thread-22815] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:11:15.420 [DEBUG] [Thread-22815] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:11:15.420 [DEBUG] [Thread-22815] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] client lang: <none>
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] server lang: <none>
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] kex follows: False
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:11:15.421 [DEBUG] [Thread-22815] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:11:15.422 [DEBUG] [Thread-22815] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:11:15.422 [DEBUG] [Thread-22815] [transport.py] [_log()] Compression: none
2025-11-12T21:11:15.422 [DEBUG] [Thread-22815] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:11:15.439 [DEBUG] [Thread-22815] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:11:15.440 [DEBUG] [Thread-22815] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:11:15.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:11:15.441 [DEBUG] [Thread-22815] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:11:15.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:11:15.443 [DEBUG] [Thread-22815] [transport.py] [_log()] userauth is OK
2025-11-12T21:11:15.443 [DEBUG] [Thread-22815] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:11:15.443 [DEBUG] [Thread-22815] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:11:15.443 [DEBUG] [Thread-22815] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:11:15.443 [DEBUG] [Thread-22815] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:11:15.468 [INFO] [Thread-22815] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:11:15.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:11:16.097 [DEBUG] [Thread-22815] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:11:16.097 [DEBUG] [Thread-22815] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:11:16.097 [DEBUG] [Thread-22815] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:11:16.138 [DEBUG] [Thread-22815] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:11:16.138 [DEBUG] [Thread-22815] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:11:16.141 [DEBUG] [Thread-22815] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:11:16.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:11:16.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:11:16.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:11:16.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:11:16.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:11:16.164 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:11:16.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:11:16.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:11:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:11:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.799042 -999.00  +18.90   3.72     38   +4.30 1 2 1 1 1     0    0 13.51 -58.99 Z.ESW 5.2 3.7 247.6 10.8 19.5 -21.9 19.5 -21.1 19.2 -20.7 19.5 -21.2
2025-11-12T21:11:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:11:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:11:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.799042
2025-11-12T21:11:16.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:11:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:11:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:11:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:11:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:11:16.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:11:11', tmtdew=16.46, humidity=33.13, cloud=0.0, wind=14.61, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:11:12', seeing=0.82, atlas_timestamp='2025-11-12T19:10:37.229', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:09:00')
2025-11-12T21:11:16.165 [DEBUG] [Thread-22815] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:11:16.238 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:11:16.249 [DEBUG] [Thread-22818] [transport.py] [_log()] starting thread (client mode): 0x14921180
2025-11-12T21:11:16.250 [DEBUG] [Thread-22818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:11:16.264 [DEBUG] [Thread-22818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:11:16.264 [INFO] [Thread-22818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] client lang: <none>
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] server lang: <none>
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] kex follows: False
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] Compression: none
2025-11-12T21:11:16.272 [DEBUG] [Thread-22818] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:11:16.329 [DEBUG] [Thread-22818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:11:16.330 [DEBUG] [Thread-22818] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:11:16.331 [DEBUG] [Thread-22818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:11:16.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:11:16.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:11:16.385 [DEBUG] [Thread-22818] [transport.py] [_log()] userauth is OK
2025-11-12T21:11:16.386 [DEBUG] [Thread-22818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:11:16.386 [DEBUG] [Thread-22818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:11:16.386 [DEBUG] [Thread-22818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:11:16.386 [DEBUG] [Thread-22818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:11:16.405 [INFO] [Thread-22818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:11:16.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:11:16.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:11:17.284 [DEBUG] [Thread-22818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:11:17.284 [DEBUG] [Thread-22818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:11:17.332 [DEBUG] [Thread-22818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:11:17.332 [DEBUG] [Thread-22818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:11:17.343 [DEBUG] [Thread-22818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:11:17.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:11:17.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-11-12T21:11:17.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:11:17.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:11:17.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:11:17.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:11:17.383 [DEBUG] [Thread-22818] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:11:30.169 [DEBUG] [Thread-22820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:11:45.230 [DEBUG] [Thread-22821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:11:45.430 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:11:45.431 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:11:47.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:11:47.406 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:11:47.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-11-12T21:11:48.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 11, 43), 16.0, 34.51, 0.0, 16.04, 18.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:11:48.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:11:43
2025-11-12T21:11:48.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:11:48.310 [DEBUG] [Thread-22822] [transport.py] [_log()] starting thread (client mode): 0x149208e0
2025-11-12T21:11:48.310 [DEBUG] [Thread-22822] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:11:48.330 [DEBUG] [Thread-22822] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:11:48.331 [INFO] [Thread-22822] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:11:48.333 [DEBUG] [Thread-22822] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] client lang: <none>
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] server lang: <none>
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] kex follows: False
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] Compression: none
2025-11-12T21:11:48.334 [DEBUG] [Thread-22822] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:11:48.354 [DEBUG] [Thread-22822] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:11:48.354 [DEBUG] [Thread-22822] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:11:48.355 [DEBUG] [Thread-22822] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:11:48.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:11:48.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:11:48.357 [DEBUG] [Thread-22822] [transport.py] [_log()] userauth is OK
2025-11-12T21:11:48.357 [DEBUG] [Thread-22822] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:11:48.357 [DEBUG] [Thread-22822] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:11:48.358 [DEBUG] [Thread-22822] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:11:48.358 [DEBUG] [Thread-22822] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:11:48.373 [INFO] [Thread-22822] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:11:48.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:11:49.023 [DEBUG] [Thread-22822] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:11:49.024 [DEBUG] [Thread-22822] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:11:49.024 [DEBUG] [Thread-22822] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:11:49.065 [DEBUG] [Thread-22822] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:11:49.065 [DEBUG] [Thread-22822] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:11:49.068 [DEBUG] [Thread-22822] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:11:49.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:11:49.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:11:49.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:11:49.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:11:49.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:11:49.094 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:11:49.094 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:11:49.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:11:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:11:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.799390 -999.00  +18.90   4.09     38   +4.30 1 2 1 1 1     0    0 13.32 -63.39 Z.ESW 4.0 4.1 225.2 13.3 19.5 -21.9 19.4 -21.2 19.2 -20.7 19.4 -21.4
2025-11-12T21:11:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:11:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:11:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.799390
2025-11-12T21:11:49.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:11:49.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:11:49.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:11:49.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:11:49.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:11:49.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:11:43', tmtdew=16.0, humidity=34.51, cloud=0.0, wind=16.04, temperature=18.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:11:44', seeing=0.73, atlas_timestamp='2025-11-12T19:11:07.296', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:09:00')
2025-11-12T21:11:49.097 [DEBUG] [Thread-22822] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:11:49.181 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:11:49.192 [DEBUG] [Thread-22825] [transport.py] [_log()] starting thread (client mode): 0x14915ea0
2025-11-12T21:11:49.193 [DEBUG] [Thread-22825] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:11:49.208 [DEBUG] [Thread-22825] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:11:49.208 [INFO] [Thread-22825] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:11:49.216 [DEBUG] [Thread-22825] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:11:49.216 [DEBUG] [Thread-22825] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:11:49.216 [DEBUG] [Thread-22825] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:11:49.216 [DEBUG] [Thread-22825] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] client lang: <none>
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] server lang: <none>
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] kex follows: False
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:11:49.217 [DEBUG] [Thread-22825] [transport.py] [_log()] Compression: none
2025-11-12T21:11:49.218 [DEBUG] [Thread-22825] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:11:49.273 [DEBUG] [Thread-22825] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:11:49.273 [DEBUG] [Thread-22825] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:11:49.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:11:49.275 [DEBUG] [Thread-22825] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:11:49.276 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:11:49.329 [DEBUG] [Thread-22825] [transport.py] [_log()] userauth is OK
2025-11-12T21:11:49.330 [DEBUG] [Thread-22825] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:11:49.330 [DEBUG] [Thread-22825] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:11:49.330 [DEBUG] [Thread-22825] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:11:49.330 [DEBUG] [Thread-22825] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:11:49.349 [INFO] [Thread-22825] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:11:49.350 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:11:49.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:11:50.139 [DEBUG] [Thread-22825] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:11:50.139 [DEBUG] [Thread-22825] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:11:50.186 [DEBUG] [Thread-22825] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:11:50.187 [DEBUG] [Thread-22825] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:11:50.195 [DEBUG] [Thread-22825] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:11:50.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:11:50.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-11-12T21:11:50.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:11:50.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:11:50.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:11:50.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:11:50.230 [DEBUG] [Thread-22825] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:11:54.498 [DEBUG] [Thread-22827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:12:00.264 [DEBUG] [Thread-22828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:12:15.318 [DEBUG] [Thread-22829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:12:20.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:12:20.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:12:20.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-11-12T21:12:20.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 12, 15), 15.9, 34.73, 0.0, 15.47, 18.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:12:20.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:12:15
2025-11-12T21:12:21.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:12:21.148 [DEBUG] [Thread-22830] [transport.py] [_log()] starting thread (client mode): 0x17346bc0
2025-11-12T21:12:21.148 [DEBUG] [Thread-22830] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:12:21.169 [DEBUG] [Thread-22830] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:12:21.170 [INFO] [Thread-22830] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] client lang: <none>
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] server lang: <none>
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] kex follows: False
2025-11-12T21:12:21.173 [DEBUG] [Thread-22830] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:12:21.174 [DEBUG] [Thread-22830] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:12:21.174 [DEBUG] [Thread-22830] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:12:21.174 [DEBUG] [Thread-22830] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:12:21.174 [DEBUG] [Thread-22830] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:12:21.174 [DEBUG] [Thread-22830] [transport.py] [_log()] Compression: none
2025-11-12T21:12:21.174 [DEBUG] [Thread-22830] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:12:21.194 [DEBUG] [Thread-22830] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:12:21.195 [DEBUG] [Thread-22830] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:12:21.195 [DEBUG] [Thread-22830] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:12:21.195 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:12:21.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:12:21.197 [DEBUG] [Thread-22830] [transport.py] [_log()] userauth is OK
2025-11-12T21:12:21.198 [DEBUG] [Thread-22830] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:12:21.198 [DEBUG] [Thread-22830] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:12:21.198 [DEBUG] [Thread-22830] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:12:21.198 [DEBUG] [Thread-22830] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:12:21.222 [INFO] [Thread-22830] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:12:21.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:12:21.870 [DEBUG] [Thread-22830] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:12:21.870 [DEBUG] [Thread-22830] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:12:21.871 [DEBUG] [Thread-22830] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:12:21.911 [DEBUG] [Thread-22830] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:12:21.911 [DEBUG] [Thread-22830] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:12:21.914 [DEBUG] [Thread-22830] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:12:21.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:12:21.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:12:21.928 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:12:21.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:12:21.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:12:21.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:12:21.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:12:21.939 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:12:21.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:12:21.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.799737 -999.00  +18.90   8.39     38   +4.50 1 2 1 1 1     0    0 13.27 -60.26 ZnESW 8.1 8.4 210.9 10.3 19.5 -22.1 19.4 -21.2 19.2 -20.7 19.4 -21.4
2025-11-12T21:12:21.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:12:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:12:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.799737
2025-11-12T21:12:21.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:12:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:12:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:12:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:12:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:12:21.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:12:15', tmtdew=15.9, humidity=34.73, cloud=0.0, wind=15.47, temperature=18.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:12:16', seeing=0.73, atlas_timestamp='2025-11-12T19:11:37.277', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:09:00')
2025-11-12T21:12:21.941 [DEBUG] [Thread-22830] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:12:22.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:12:22.038 [DEBUG] [Thread-22833] [transport.py] [_log()] starting thread (client mode): 0x17346fb0
2025-11-12T21:12:22.038 [DEBUG] [Thread-22833] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:12:22.055 [DEBUG] [Thread-22833] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:12:22.055 [INFO] [Thread-22833] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:12:22.062 [DEBUG] [Thread-22833] [transport.py] [_log()] client lang: <none>
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] server lang: <none>
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] kex follows: False
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] Compression: none
2025-11-12T21:12:22.063 [DEBUG] [Thread-22833] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:12:22.127 [DEBUG] [Thread-22833] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:12:22.128 [DEBUG] [Thread-22833] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:12:22.128 [DEBUG] [Thread-22833] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:12:22.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:12:22.129 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:12:22.191 [DEBUG] [Thread-22833] [transport.py] [_log()] userauth is OK
2025-11-12T21:12:22.192 [DEBUG] [Thread-22833] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:12:22.192 [DEBUG] [Thread-22833] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:12:22.192 [DEBUG] [Thread-22833] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:12:22.192 [DEBUG] [Thread-22833] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:12:22.211 [INFO] [Thread-22833] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:12:22.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:12:22.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:12:23.043 [DEBUG] [Thread-22833] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:12:23.043 [DEBUG] [Thread-22833] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:12:23.091 [DEBUG] [Thread-22833] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:12:23.091 [DEBUG] [Thread-22833] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:12:23.100 [DEBUG] [Thread-22833] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:12:23.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:12:23.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:12:23.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-11-12T21:12:23.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:12:23.129 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:12:23.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:12:23.137 [DEBUG] [Thread-22833] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:12:30.355 [DEBUG] [Thread-22835 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:12:45.402 [DEBUG] [Thread-22836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:12:45.637 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:12:45.638 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:12:53.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:12:53.160 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:12:53.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-11-12T21:12:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 12, 47), 15.65, 35.11, 0.0, 14.89, 18.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:12:53.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:12:47
2025-11-12T21:12:53.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:12:54.050 [DEBUG] [Thread-22837] [transport.py] [_log()] starting thread (client mode): 0x14920550
2025-11-12T21:12:54.050 [DEBUG] [Thread-22837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:12:54.071 [DEBUG] [Thread-22837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:12:54.071 [INFO] [Thread-22837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] client lang: <none>
2025-11-12T21:12:54.074 [DEBUG] [Thread-22837] [transport.py] [_log()] server lang: <none>
2025-11-12T21:12:54.075 [DEBUG] [Thread-22837] [transport.py] [_log()] kex follows: False
2025-11-12T21:12:54.075 [DEBUG] [Thread-22837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:12:54.075 [DEBUG] [Thread-22837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:12:54.075 [DEBUG] [Thread-22837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:12:54.075 [DEBUG] [Thread-22837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:12:54.075 [DEBUG] [Thread-22837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:12:54.075 [DEBUG] [Thread-22837] [transport.py] [_log()] Compression: none
2025-11-12T21:12:54.075 [DEBUG] [Thread-22837] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:12:54.093 [DEBUG] [Thread-22837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:12:54.094 [DEBUG] [Thread-22837] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:12:54.094 [DEBUG] [Thread-22837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:12:54.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:12:54.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:12:54.096 [DEBUG] [Thread-22837] [transport.py] [_log()] userauth is OK
2025-11-12T21:12:54.096 [DEBUG] [Thread-22837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:12:54.097 [DEBUG] [Thread-22837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:12:54.097 [DEBUG] [Thread-22837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:12:54.097 [DEBUG] [Thread-22837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:12:54.115 [INFO] [Thread-22837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:12:54.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:12:54.554 [DEBUG] [Thread-22839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:12:54.773 [DEBUG] [Thread-22837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:12:54.773 [DEBUG] [Thread-22837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:12:54.774 [DEBUG] [Thread-22837] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:12:54.814 [DEBUG] [Thread-22837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:12:54.814 [DEBUG] [Thread-22837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:12:54.817 [DEBUG] [Thread-22837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:12:54.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:12:54.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:12:54.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:12:54.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:12:54.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:12:54.841 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:12:54.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:12:54.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:12:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:12:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.800431 -999.00  +18.80   4.15     40   +5.00 1 2 1 1 1     0    0 13.14 -71.64 Z.ESW 8.0 4.2 170.5 10.7 19.4 -22.0 19.4 -21.2 19.1 -20.8 19.4 -21.2
2025-11-12T21:12:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:12:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:12:54.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.800431
2025-11-12T21:12:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:12:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:12:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:12:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:12:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:12:54.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:12:47', tmtdew=15.65, humidity=35.11, cloud=0.0, wind=14.89, temperature=18.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:12:48', seeing=0.84, atlas_timestamp='2025-11-12T19:12:37.238', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:09:00')
2025-11-12T21:12:54.844 [DEBUG] [Thread-22837] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:12:54.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:12:54.940 [DEBUG] [Thread-22841] [transport.py] [_log()] starting thread (client mode): 0x14945e10
2025-11-12T21:12:54.940 [DEBUG] [Thread-22841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:12:54.955 [DEBUG] [Thread-22841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:12:54.956 [INFO] [Thread-22841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:12:54.963 [DEBUG] [Thread-22841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:12:54.963 [DEBUG] [Thread-22841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:12:54.963 [DEBUG] [Thread-22841] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:12:54.963 [DEBUG] [Thread-22841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] client lang: <none>
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] server lang: <none>
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] kex follows: False
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] Compression: none
2025-11-12T21:12:54.964 [DEBUG] [Thread-22841] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:12:55.021 [DEBUG] [Thread-22841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:12:55.022 [DEBUG] [Thread-22841] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:12:55.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:12:55.023 [DEBUG] [Thread-22841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:12:55.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:12:55.077 [DEBUG] [Thread-22841] [transport.py] [_log()] userauth is OK
2025-11-12T21:12:55.078 [DEBUG] [Thread-22841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:12:55.078 [DEBUG] [Thread-22841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:12:55.078 [DEBUG] [Thread-22841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:12:55.078 [DEBUG] [Thread-22841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:12:55.100 [INFO] [Thread-22841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:12:55.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:12:55.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:12:55.995 [DEBUG] [Thread-22841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:12:55.995 [DEBUG] [Thread-22841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:12:56.043 [DEBUG] [Thread-22841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:12:56.043 [DEBUG] [Thread-22841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:12:56.051 [DEBUG] [Thread-22841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:12:56.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:12:56.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:12:56.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-11-12T21:12:56.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:12:56.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:12:56.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:12:56.083 [DEBUG] [Thread-22841] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:13:00.434 [DEBUG] [Thread-22843 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:13:15.486 [DEBUG] [Thread-22844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:13:26.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:13:26.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:13:26.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-11-12T21:13:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 13, 19), 15.62, 35.16, 0.0, 13.71, 18.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:13:26.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:13:19
2025-11-12T21:13:26.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:13:26.991 [DEBUG] [Thread-22845] [transport.py] [_log()] starting thread (client mode): 0x14947f70
2025-11-12T21:13:26.991 [DEBUG] [Thread-22845] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:13:27.011 [DEBUG] [Thread-22845] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:13:27.012 [INFO] [Thread-22845] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:13:27.014 [DEBUG] [Thread-22845] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] client lang: <none>
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] server lang: <none>
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] kex follows: False
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] Compression: none
2025-11-12T21:13:27.015 [DEBUG] [Thread-22845] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:13:27.033 [DEBUG] [Thread-22845] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:13:27.033 [DEBUG] [Thread-22845] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:13:27.034 [DEBUG] [Thread-22845] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:13:27.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:13:27.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:13:27.036 [DEBUG] [Thread-22845] [transport.py] [_log()] userauth is OK
2025-11-12T21:13:27.036 [DEBUG] [Thread-22845] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:13:27.036 [DEBUG] [Thread-22845] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:13:27.036 [DEBUG] [Thread-22845] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:13:27.036 [DEBUG] [Thread-22845] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:13:27.060 [INFO] [Thread-22845] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:13:27.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:13:27.673 [DEBUG] [Thread-22845] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:13:27.673 [DEBUG] [Thread-22845] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:13:27.673 [DEBUG] [Thread-22845] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:13:27.714 [DEBUG] [Thread-22845] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:13:27.714 [DEBUG] [Thread-22845] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:13:27.717 [DEBUG] [Thread-22845] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:13:27.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:13:27.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:13:27.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:13:27.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:13:27.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:13:27.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:13:27.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:13:27.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:13:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:13:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.800778 -999.00  +18.80  11.94     40   +5.20 1 2 1 1 1     0    0 13.01 -78.37 Z.ESW 6.8 11.9 197.6 12.7 19.4 -22.1 19.3 -21.1 19.1 -20.8 19.4 -21.3
2025-11-12T21:13:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:13:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:13:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.800778
2025-11-12T21:13:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:13:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:13:27.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:13:27.743 [DEBUG] [Thread-22845] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:13:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:13:27.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:13:27.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:13:19', tmtdew=15.62, humidity=35.16, cloud=0.0, wind=13.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-11-12T21:13:20', seeing=0.81, atlas_timestamp='2025-11-12T19:13:07.219', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:09:00')
2025-11-12T21:13:27.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:13:27.838 [DEBUG] [Thread-22848] [transport.py] [_log()] starting thread (client mode): 0x14905ab0
2025-11-12T21:13:27.839 [DEBUG] [Thread-22848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:13:27.853 [DEBUG] [Thread-22848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:13:27.854 [INFO] [Thread-22848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:13:27.861 [DEBUG] [Thread-22848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:13:27.861 [DEBUG] [Thread-22848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:13:27.861 [DEBUG] [Thread-22848] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:13:27.861 [DEBUG] [Thread-22848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] client lang: <none>
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] server lang: <none>
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] kex follows: False
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] Compression: none
2025-11-12T21:13:27.862 [DEBUG] [Thread-22848] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:13:27.922 [DEBUG] [Thread-22848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:13:27.922 [DEBUG] [Thread-22848] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:13:27.923 [DEBUG] [Thread-22848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:13:27.923 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:13:27.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:13:27.977 [DEBUG] [Thread-22848] [transport.py] [_log()] userauth is OK
2025-11-12T21:13:27.978 [DEBUG] [Thread-22848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:13:27.978 [DEBUG] [Thread-22848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:13:27.978 [DEBUG] [Thread-22848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:13:27.978 [DEBUG] [Thread-22848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:13:27.998 [INFO] [Thread-22848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:13:27.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:13:27.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:13:28.848 [DEBUG] [Thread-22848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:13:28.849 [DEBUG] [Thread-22848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:13:28.896 [DEBUG] [Thread-22848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:13:28.896 [DEBUG] [Thread-22848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:13:28.905 [DEBUG] [Thread-22848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:13:28.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:13:28.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-11-12T21:13:28.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-11-12T21:13:28.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:13:28.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:13:28.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:13:28.940 [DEBUG] [Thread-22848] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:13:30.518 [DEBUG] [Thread-22850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:13:45.565 [DEBUG] [Thread-22851 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:13:45.842 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:13:45.843 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:13:54.616 [DEBUG] [Thread-22852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:13:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:13:58.963 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:13:58.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-11-12T21:13:59.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 13, 52), 15.32, 36.06, 0.0, 14.95, 18.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:13:59.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:13:52
2025-11-12T21:13:59.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:13:59.893 [DEBUG] [Thread-22853] [transport.py] [_log()] starting thread (client mode): 0x14945150
2025-11-12T21:13:59.893 [DEBUG] [Thread-22853] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:13:59.907 [DEBUG] [Thread-22853] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:13:59.907 [INFO] [Thread-22853] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] client lang: <none>
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] server lang: <none>
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] kex follows: False
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] Compression: none
2025-11-12T21:13:59.910 [DEBUG] [Thread-22853] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:13:59.923 [DEBUG] [Thread-22853] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:13:59.923 [DEBUG] [Thread-22853] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:13:59.924 [DEBUG] [Thread-22853] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:13:59.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:13:59.924 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:13:59.924 [DEBUG] [Thread-22853] [transport.py] [_log()] userauth is OK
2025-11-12T21:13:59.925 [DEBUG] [Thread-22853] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:13:59.925 [DEBUG] [Thread-22853] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:13:59.925 [DEBUG] [Thread-22853] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:13:59.925 [DEBUG] [Thread-22853] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:13:59.937 [INFO] [Thread-22853] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:13:59.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:14:00.568 [DEBUG] [Thread-22853] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:14:00.568 [DEBUG] [Thread-22853] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:14:00.568 [DEBUG] [Thread-22853] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:14:00.597 [DEBUG] [Thread-22855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:14:00.609 [DEBUG] [Thread-22853] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:14:00.609 [DEBUG] [Thread-22853] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:14:00.611 [DEBUG] [Thread-22853] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:14:00.622 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:14:00.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:14:00.623 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:14:00.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:14:00.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:14:00.627 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:14:00.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:14:00.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:14:00.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:14:00.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.801126 -999.00  +18.80  10.57     41   +5.40 1 2 1 1 1     0    0 12.66 -79.91 Z.ESW 5.8 10.6 239.4 15.2 19.4 -22.1 19.3 -21.2 19.1 -20.8 19.4 -21.3
2025-11-12T21:14:00.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:14:00.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:14:00.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.801126
2025-11-12T21:14:00.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:14:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:14:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:14:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:14:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:14:00.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:13:52', tmtdew=15.32, humidity=36.06, cloud=0.0, wind=14.95, temperature=18.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:13:52', seeing=0.81, atlas_timestamp='2025-11-12T19:13:37.286', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:13:00')
2025-11-12T21:14:00.628 [DEBUG] [Thread-22853] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:14:00.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:14:00.716 [DEBUG] [Thread-22857] [transport.py] [_log()] starting thread (client mode): 0x149452d0
2025-11-12T21:14:00.716 [DEBUG] [Thread-22857] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:14:00.732 [DEBUG] [Thread-22857] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:14:00.733 [INFO] [Thread-22857] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] client lang: <none>
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] server lang: <none>
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] kex follows: False
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] Compression: none
2025-11-12T21:14:00.740 [DEBUG] [Thread-22857] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:14:00.796 [DEBUG] [Thread-22857] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:14:00.796 [DEBUG] [Thread-22857] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:14:00.796 [DEBUG] [Thread-22857] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:14:00.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:14:00.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:14:00.853 [DEBUG] [Thread-22857] [transport.py] [_log()] userauth is OK
2025-11-12T21:14:00.853 [DEBUG] [Thread-22857] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:14:00.853 [DEBUG] [Thread-22857] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:14:00.853 [DEBUG] [Thread-22857] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:14:00.853 [DEBUG] [Thread-22857] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:14:00.870 [INFO] [Thread-22857] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:14:00.870 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:14:00.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:14:01.748 [DEBUG] [Thread-22857] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:14:01.748 [DEBUG] [Thread-22857] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:14:01.796 [DEBUG] [Thread-22857] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:14:01.796 [DEBUG] [Thread-22857] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:14:01.804 [DEBUG] [Thread-22857] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:14:01.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:14:01.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-11-12T21:14:01.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-11-12T21:14:01.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:14:01.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:14:01.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:14:01.836 [DEBUG] [Thread-22857] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:14:15.630 [DEBUG] [Thread-22859 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:14:30.681 [DEBUG] [Thread-22860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:14:31.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:14:31.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:14:31.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-11-12T21:14:32.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 14, 24), 15.15, 36.47, 0.0, 15.58, 18.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:14:32.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:14:24
2025-11-12T21:14:32.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:14:32.762 [DEBUG] [Thread-22861] [transport.py] [_log()] starting thread (client mode): 0x17399e70
2025-11-12T21:14:32.762 [DEBUG] [Thread-22861] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:14:32.781 [DEBUG] [Thread-22861] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:14:32.781 [INFO] [Thread-22861] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:14:32.784 [DEBUG] [Thread-22861] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] client lang: <none>
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] server lang: <none>
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] kex follows: False
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] Compression: none
2025-11-12T21:14:32.785 [DEBUG] [Thread-22861] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:14:32.802 [DEBUG] [Thread-22861] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:14:32.802 [DEBUG] [Thread-22861] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:14:32.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:14:32.803 [DEBUG] [Thread-22861] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:14:32.803 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:14:32.804 [DEBUG] [Thread-22861] [transport.py] [_log()] userauth is OK
2025-11-12T21:14:32.804 [DEBUG] [Thread-22861] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:14:32.804 [DEBUG] [Thread-22861] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:14:32.805 [DEBUG] [Thread-22861] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:14:32.805 [DEBUG] [Thread-22861] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:14:32.817 [INFO] [Thread-22861] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:14:32.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:14:33.400 [DEBUG] [Thread-22861] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:14:33.400 [DEBUG] [Thread-22861] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:14:33.401 [DEBUG] [Thread-22861] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:14:33.441 [DEBUG] [Thread-22861] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:14:33.442 [DEBUG] [Thread-22861] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:14:33.445 [DEBUG] [Thread-22861] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:14:33.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:14:33.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:14:33.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:14:33.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:14:33.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:14:33.466 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:14:33.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:14:33.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:14:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:14:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.801473 -999.00  +18.70   9.37     41   +5.40 1 2 1 1 1     0    0 12.52 -87.21 Z.ESW 7.6 9.4 202.2 13.0 19.4 -22.0 19.3 -21.1 19.1 -20.9 19.4 -21.4
2025-11-12T21:14:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:14:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:14:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.801473
2025-11-12T21:14:33.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:14:33.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:14:33.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:14:33.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:14:33.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:14:33.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:14:24', tmtdew=15.15, humidity=36.47, cloud=0.0, wind=15.58, temperature=18.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:14:24', seeing=0.87, atlas_timestamp='2025-11-12T19:14:07.267', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:13:00')
2025-11-12T21:14:33.468 [DEBUG] [Thread-22861] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:14:33.551 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:14:33.569 [DEBUG] [Thread-22864] [transport.py] [_log()] starting thread (client mode): 0x149462f0
2025-11-12T21:14:33.569 [DEBUG] [Thread-22864] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:14:33.588 [DEBUG] [Thread-22864] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:14:33.589 [INFO] [Thread-22864] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:14:33.601 [DEBUG] [Thread-22864] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:14:33.601 [DEBUG] [Thread-22864] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:14:33.601 [DEBUG] [Thread-22864] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:14:33.601 [DEBUG] [Thread-22864] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] client lang: <none>
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] server lang: <none>
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] kex follows: False
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] Compression: none
2025-11-12T21:14:33.602 [DEBUG] [Thread-22864] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:14:33.666 [DEBUG] [Thread-22864] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:14:33.667 [DEBUG] [Thread-22864] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:14:33.668 [DEBUG] [Thread-22864] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:14:33.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:14:33.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:14:33.733 [DEBUG] [Thread-22864] [transport.py] [_log()] userauth is OK
2025-11-12T21:14:33.733 [DEBUG] [Thread-22864] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:14:33.733 [DEBUG] [Thread-22864] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:14:33.733 [DEBUG] [Thread-22864] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:14:33.734 [DEBUG] [Thread-22864] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:14:33.752 [INFO] [Thread-22864] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:14:33.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:14:33.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:14:34.579 [DEBUG] [Thread-22864] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:14:34.580 [DEBUG] [Thread-22864] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:14:34.627 [DEBUG] [Thread-22864] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:14:34.628 [DEBUG] [Thread-22864] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:14:34.637 [DEBUG] [Thread-22864] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:14:34.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:14:34.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-11-12T21:14:34.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:14:34.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:14:34.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:14:34.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:14:34.674 [DEBUG] [Thread-22864] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:14:45.715 [DEBUG] [Thread-22866 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:14:46.050 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:14:46.051 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:14:54.674 [DEBUG] [Thread-22867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:15:00.767 [DEBUG] [Thread-22868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:15:04.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:15:04.697 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:15:04.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-11-12T21:15:05.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 14, 56), 15.07, 36.54, 0.0, 14.17, 18.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:15:05.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:14:56
2025-11-12T21:15:05.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:15:05.571 [DEBUG] [Thread-22869] [transport.py] [_log()] starting thread (client mode): 0x17399780
2025-11-12T21:15:05.571 [DEBUG] [Thread-22869] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:15:05.591 [DEBUG] [Thread-22869] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:15:05.592 [INFO] [Thread-22869] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] client lang: <none>
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] server lang: <none>
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] kex follows: False
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:15:05.593 [DEBUG] [Thread-22869] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:15:05.594 [DEBUG] [Thread-22869] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:15:05.594 [DEBUG] [Thread-22869] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:15:05.594 [DEBUG] [Thread-22869] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:15:05.594 [DEBUG] [Thread-22869] [transport.py] [_log()] Compression: none
2025-11-12T21:15:05.594 [DEBUG] [Thread-22869] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:15:05.607 [DEBUG] [Thread-22869] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:15:05.607 [DEBUG] [Thread-22869] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:15:05.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:15:05.609 [DEBUG] [Thread-22869] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:15:05.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:15:05.611 [DEBUG] [Thread-22869] [transport.py] [_log()] userauth is OK
2025-11-12T21:15:05.611 [DEBUG] [Thread-22869] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:15:05.611 [DEBUG] [Thread-22869] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:15:05.611 [DEBUG] [Thread-22869] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:15:05.611 [DEBUG] [Thread-22869] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:15:05.633 [INFO] [Thread-22869] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:15:05.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:15:06.371 [DEBUG] [Thread-22869] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:15:06.371 [DEBUG] [Thread-22869] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:15:06.371 [DEBUG] [Thread-22869] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:15:06.412 [DEBUG] [Thread-22869] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:15:06.412 [DEBUG] [Thread-22869] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:15:06.415 [DEBUG] [Thread-22869] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:15:06.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:15:06.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:15:06.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:15:06.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:15:06.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:15:06.438 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:15:06.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:15:06.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:15:06.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:15:06.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.801820 -999.00  +18.70  12.00     41   +5.50 1 2 1 1 1     0    0 11.90 -103.65 Z.ESW 6.8 12.0 208.0 16.7 19.4 -22.1 19.2 -21.2 19.1 -20.9 19.4 -21.5
2025-11-12T21:15:06.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:15:06.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:15:06.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.801820
2025-11-12T21:15:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:15:06.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:15:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:15:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:15:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:15:06.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:14:56', tmtdew=15.07, humidity=36.54, cloud=0.0, wind=14.17, temperature=18.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:14:56', seeing=0.87, atlas_timestamp='2025-11-12T19:14:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:13:00')
2025-11-12T21:15:06.442 [DEBUG] [Thread-22869] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:15: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-11-12T21:15:06.536 [DEBUG] [Thread-22872] [transport.py] [_log()] starting thread (client mode): 0x17345c30
2025-11-12T21:15:06.536 [DEBUG] [Thread-22872] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:15:06.550 [DEBUG] [Thread-22872] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:15:06.550 [INFO] [Thread-22872] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:15:06.559 [DEBUG] [Thread-22872] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] client lang: <none>
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] server lang: <none>
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] kex follows: False
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:15:06.560 [DEBUG] [Thread-22872] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:15:06.561 [DEBUG] [Thread-22872] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:15:06.561 [DEBUG] [Thread-22872] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:15:06.561 [DEBUG] [Thread-22872] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:15:06.561 [DEBUG] [Thread-22872] [transport.py] [_log()] Compression: none
2025-11-12T21:15:06.561 [DEBUG] [Thread-22872] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:15:06.618 [DEBUG] [Thread-22872] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:15:06.619 [DEBUG] [Thread-22872] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:15:06.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:15:06.620 [DEBUG] [Thread-22872] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:15:06.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:15:06.678 [DEBUG] [Thread-22872] [transport.py] [_log()] userauth is OK
2025-11-12T21:15:06.678 [DEBUG] [Thread-22872] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:15:06.678 [DEBUG] [Thread-22872] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:15:06.678 [DEBUG] [Thread-22872] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:15:06.678 [DEBUG] [Thread-22872] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:15:06.702 [INFO] [Thread-22872] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:15:06.702 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:15:06.703 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:15:07.497 [DEBUG] [Thread-22872] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:15:07.497 [DEBUG] [Thread-22872] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:15:07.545 [DEBUG] [Thread-22872] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:15:07.545 [DEBUG] [Thread-22872] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:15:07.559 [DEBUG] [Thread-22872] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:15:07.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:15:07.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-11-12T21:15:07.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:15:07.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:15:07.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:15:07.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:15:07.601 [DEBUG] [Thread-22872] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:15:15.801 [DEBUG] [Thread-22874 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:15:30.839 [DEBUG] [Thread-22875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:15:37.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:15:37.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:15: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-11-12T21:15:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 15, 28), 14.99, 36.74, 0.0, 16.27, 18.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:15:38.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:15:28
2025-11-12T21:15:38.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:15:38.488 [DEBUG] [Thread-22876] [transport.py] [_log()] starting thread (client mode): 0x17346bc0
2025-11-12T21:15:38.488 [DEBUG] [Thread-22876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:15:38.510 [DEBUG] [Thread-22876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:15:38.510 [INFO] [Thread-22876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] client lang: <none>
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] server lang: <none>
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] kex follows: False
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:15:38.513 [DEBUG] [Thread-22876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:15:38.514 [DEBUG] [Thread-22876] [transport.py] [_log()] Compression: none
2025-11-12T21:15:38.514 [DEBUG] [Thread-22876] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:15:38.531 [DEBUG] [Thread-22876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:15:38.532 [DEBUG] [Thread-22876] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:15:38.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:15:38.533 [DEBUG] [Thread-22876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:15:38.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:15:38.535 [DEBUG] [Thread-22876] [transport.py] [_log()] userauth is OK
2025-11-12T21:15:38.535 [DEBUG] [Thread-22876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:15:38.536 [DEBUG] [Thread-22876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:15:38.536 [DEBUG] [Thread-22876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:15:38.536 [DEBUG] [Thread-22876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:15:38.560 [INFO] [Thread-22876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:15:38.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:15:39.167 [DEBUG] [Thread-22876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:15:39.167 [DEBUG] [Thread-22876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:15:39.168 [DEBUG] [Thread-22876] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:15:39.209 [DEBUG] [Thread-22876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:15:39.209 [DEBUG] [Thread-22876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:15:39.213 [DEBUG] [Thread-22876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:15:39.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:15:39.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:15:39.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:15:39.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:15:39.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:15:39.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:15:39.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:15:39.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:15:39.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:15:39.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.801820 -999.00  +18.70  12.00     41   +5.50 1 2 1 1 1     0    0 11.90 -103.65 Z.ESW 6.8 12.0 208.0 16.7 19.4 -22.1 19.2 -21.2 19.1 -20.9 19.4 -21.5
2025-11-12T21:15:39.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:15:39.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:15:39.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.801820
2025-11-12T21:15:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:15:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:15:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:15:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:15:39.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:15:39.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:15:28', tmtdew=14.99, humidity=36.74, cloud=0.0, wind=16.27, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:15:28', seeing=1.09, atlas_timestamp='2025-11-12T19:14:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:13:00')
2025-11-12T21:15:39.238 [DEBUG] [Thread-22876] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:15:39.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:15:39.336 [DEBUG] [Thread-22879] [transport.py] [_log()] starting thread (client mode): 0x14907ac0
2025-11-12T21:15:39.336 [DEBUG] [Thread-22879] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:15:39.351 [DEBUG] [Thread-22879] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:15:39.351 [INFO] [Thread-22879] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:15:39.358 [DEBUG] [Thread-22879] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] client lang: <none>
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] server lang: <none>
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] kex follows: False
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] Compression: none
2025-11-12T21:15:39.359 [DEBUG] [Thread-22879] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:15:39.421 [DEBUG] [Thread-22879] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:15:39.422 [DEBUG] [Thread-22879] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:15:39.423 [DEBUG] [Thread-22879] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:15:39.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:15:39.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:15:39.477 [DEBUG] [Thread-22879] [transport.py] [_log()] userauth is OK
2025-11-12T21:15:39.477 [DEBUG] [Thread-22879] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:15:39.477 [DEBUG] [Thread-22879] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:15:39.477 [DEBUG] [Thread-22879] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:15:39.477 [DEBUG] [Thread-22879] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:15:39.499 [INFO] [Thread-22879] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:15:39.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:15:39.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:15:40.334 [DEBUG] [Thread-22879] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:15:40.334 [DEBUG] [Thread-22879] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:15:40.381 [DEBUG] [Thread-22879] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:15:40.382 [DEBUG] [Thread-22879] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:15:40.390 [DEBUG] [Thread-22879] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:15:40.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:15:40.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:15:40.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-11-12T21:15:40.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:15:40.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:15:40.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:15:40.425 [DEBUG] [Thread-22879] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:15:45.870 [DEBUG] [Thread-22881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:15:46.269 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:15:46.271 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:15:54.727 [DEBUG] [Thread-22882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:16:00.917 [DEBUG] [Thread-22883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:16:10.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:16:10.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:16:10.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-11-12T21:16:11.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 15, 28), 14.99, 36.74, 0.0, 16.27, 18.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:16:11.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:15:28
2025-11-12T21:16:11.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:16:11.302 [DEBUG] [Thread-22884] [transport.py] [_log()] starting thread (client mode): 0x14907580
2025-11-12T21:16:11.302 [DEBUG] [Thread-22884] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:16:11.324 [DEBUG] [Thread-22884] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:16:11.325 [INFO] [Thread-22884] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] client lang: <none>
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] server lang: <none>
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] kex follows: False
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] Compression: none
2025-11-12T21:16:11.328 [DEBUG] [Thread-22884] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:16:11.346 [DEBUG] [Thread-22884] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:16:11.347 [DEBUG] [Thread-22884] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:16:11.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:16:11.348 [DEBUG] [Thread-22884] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:16:11.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:16:11.350 [DEBUG] [Thread-22884] [transport.py] [_log()] userauth is OK
2025-11-12T21:16:11.350 [DEBUG] [Thread-22884] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:16:11.351 [DEBUG] [Thread-22884] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:16:11.351 [DEBUG] [Thread-22884] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:16:11.351 [DEBUG] [Thread-22884] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:16:11.371 [INFO] [Thread-22884] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:16:11.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:16:12.183 [DEBUG] [Thread-22884] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:16:12.183 [DEBUG] [Thread-22884] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:16:12.183 [DEBUG] [Thread-22884] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:16:12.223 [DEBUG] [Thread-22884] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:16:12.224 [DEBUG] [Thread-22884] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:16:12.227 [DEBUG] [Thread-22884] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:16:12.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:16:12.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:16:12.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:16:12.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:16:12.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:16:12.250 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:16:12.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:16:12.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:16:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:16:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.802514 -999.00  +18.70   9.28     42   +5.60 1 2 1 1 1     0    0 11.25 -117.89 ZnESw 9.2 9.3 211.7 14.0 19.3 -22.2 19.2 -21.3 19.0 -20.9 19.2 -21.4
2025-11-12T21:16:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:16:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:16:12.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.802514
2025-11-12T21:16:12.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:16:12.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:16:12.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:16:12.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:16:12.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:16:12.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:15:28', tmtdew=14.99, humidity=36.74, cloud=0.0, wind=16.27, temperature=18.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:16:00', seeing=1.05, atlas_timestamp='2025-11-12T19:15:37.210', atlas_cloud=2, atlas_rain=1, zp_data=[1.1177499999999991, 0.83725, 0.8497500000000002, 1.0844999999999994, 0.8985000000000003, 1.2542500000000008, 1.2069999999999999, 1.2207500000000007, 0.8594999999999997, 1.0585000000000004, 0.86625, 0.9799999999999995, 1.088, 1.4742499999999996, 1.517999999999999, 1.3139999999999992, 1.1412499999999994, 0.8825000000000003, 1.6189999999999989, 1.1102499999999988, 1.033999999999999, 1.5527499999999987, nan, 1.45425, 0.6069999999999993, 1.463, 1.9627499999999998, 1.5804999999999998, 1.521, nan, nan, nan, 0.739749999999999], zp_timestamp='2025-11-12T19:13:00')
2025-11-12T21:16:12.253 [DEBUG] [Thread-22884] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:16:12.336 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:16:15.950 [DEBUG] [Thread-22887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:16:31.007 [DEBUG] [Thread-22888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:16:46.043 [DEBUG] [Thread-22889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:16:46.478 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:16:46.479 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:16:54.782 [DEBUG] [Thread-22890 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:17:01.082 [DEBUG] [Thread-22891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:17:16.115 [DEBUG] [Thread-22892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:17:31.150 [DEBUG] [Thread-22893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:17:46.192 [DEBUG] [Thread-22894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:17:46.683 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:17:46.685 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:17:54.834 [DEBUG] [Thread-22895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:18:01.222 [DEBUG] [Thread-22896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:18:16.257 [DEBUG] [Thread-22897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:18:25.723 [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-11-12T21:18:31.294 [DEBUG] [Thread-22898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:18:46.325 [DEBUG] [Thread-22899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:18:46.891 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:18:46.892 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:18:54.899 [DEBUG] [Thread-22900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:18:55.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:18:55.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:18:55.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-11-12T21:18:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 18, 40), 14.01, 39.5, 0.0, 13.5, 18.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:18:56.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:18:40
2025-11-12T21:18:56.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:18:56.684 [DEBUG] [Thread-22901] [transport.py] [_log()] starting thread (client mode): 0x17344f10
2025-11-12T21:18:56.685 [DEBUG] [Thread-22901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:18:56.704 [DEBUG] [Thread-22901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:18:56.704 [INFO] [Thread-22901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:18:56.707 [DEBUG] [Thread-22901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:18:56.707 [DEBUG] [Thread-22901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:18:56.707 [DEBUG] [Thread-22901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:18:56.707 [DEBUG] [Thread-22901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:18:56.707 [DEBUG] [Thread-22901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] client lang: <none>
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] server lang: <none>
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] kex follows: False
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] Compression: none
2025-11-12T21:18:56.708 [DEBUG] [Thread-22901] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:18:56.723 [DEBUG] [Thread-22901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:18:56.723 [DEBUG] [Thread-22901] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:18:56.723 [DEBUG] [Thread-22901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:18:56.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:18:56.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:18:56.725 [DEBUG] [Thread-22901] [transport.py] [_log()] userauth is OK
2025-11-12T21:18:56.725 [DEBUG] [Thread-22901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:18:56.725 [DEBUG] [Thread-22901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:18:56.725 [DEBUG] [Thread-22901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:18:56.725 [DEBUG] [Thread-22901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:18:56.737 [INFO] [Thread-22901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:18:56.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:18:57.352 [DEBUG] [Thread-22901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:18:57.352 [DEBUG] [Thread-22901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:18:57.353 [DEBUG] [Thread-22901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:18:57.393 [DEBUG] [Thread-22901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:18:57.393 [DEBUG] [Thread-22901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:18:57.397 [DEBUG] [Thread-22901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:18:57.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:18:57.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:18:57.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:18:57.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:18:57.418 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:18:57.420 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:18:57.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:18:57.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:18:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:18:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.804251 -999.00  +18.50   4.94     44   +6.00 1 2 1 1 1     0    0 10.08 -158.87 ZnESW 6.7 4.9 231.6 13.8 19.2 -22.2 19.1 -21.4 18.9 -21.0 19.2 -21.6
2025-11-12T21:18:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:18:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:18:57.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.804251
2025-11-12T21:18:57.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:18:57.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:18:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:18:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:18:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:18:57.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:18:40', tmtdew=14.01, humidity=39.5, cloud=0.0, wind=13.5, temperature=18.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:18:41', seeing=0.99, atlas_timestamp='2025-11-12T19:18:07.286', atlas_cloud=2, atlas_rain=1, zp_data=[0.941749999999999, 0.7997500000000004, 1.1407500000000006, 0.9834999999999994, 0.7940000000000005, 0.8042500000000006, 0.9524999999999997, 1.103250000000001, 1.059499999999999, 0.7390000000000017, 0.8432499999999994, 0.9370000000000003, 0.8420000000000005, 1.4012499999999992, 1.770999999999999, 1.0344999999999995, 0.9792500000000004, 1.0065, 1.512999999999999, 0.9067499999999988, 0.8404999999999987, 1.9397499999999983, nan, 1.4137500000000003, 0.9519999999999991, 1.4705000000000004, 2.7887500000000003, 2.4255000000000004, 2.1640000000000006, nan, nan, nan, 0.6347499999999995], zp_timestamp='2025-11-12T19:15:00')
2025-11-12T21:18:57.424 [DEBUG] [Thread-22901] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:18:57.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:18:57.519 [DEBUG] [Thread-22904] [transport.py] [_log()] starting thread (client mode): 0x14921b10
2025-11-12T21:18:57.519 [DEBUG] [Thread-22904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:18:57.534 [DEBUG] [Thread-22904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:18:57.534 [INFO] [Thread-22904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:18:57.542 [DEBUG] [Thread-22904] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:18:57.542 [DEBUG] [Thread-22904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:18:57.542 [DEBUG] [Thread-22904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:18:57.542 [DEBUG] [Thread-22904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:18:57.542 [DEBUG] [Thread-22904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] client lang: <none>
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] server lang: <none>
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] kex follows: False
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:18:57.543 [DEBUG] [Thread-22904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:18:57.544 [DEBUG] [Thread-22904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:18:57.544 [DEBUG] [Thread-22904] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:18:57.544 [DEBUG] [Thread-22904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:18:57.544 [DEBUG] [Thread-22904] [transport.py] [_log()] Compression: none
2025-11-12T21:18:57.544 [DEBUG] [Thread-22904] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:18:57.601 [DEBUG] [Thread-22904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:18:57.602 [DEBUG] [Thread-22904] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:18:57.603 [DEBUG] [Thread-22904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:18:57.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:18:57.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:18:57.657 [DEBUG] [Thread-22904] [transport.py] [_log()] userauth is OK
2025-11-12T21:18:57.658 [DEBUG] [Thread-22904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:18:57.658 [DEBUG] [Thread-22904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:18:57.658 [DEBUG] [Thread-22904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:18:57.658 [DEBUG] [Thread-22904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:18:57.681 [INFO] [Thread-22904] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:18:57.681 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:18:57.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:18:58.491 [DEBUG] [Thread-22904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:18:58.492 [DEBUG] [Thread-22904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:18:58.539 [DEBUG] [Thread-22904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:18:58.540 [DEBUG] [Thread-22904] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:18:58.549 [DEBUG] [Thread-22904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:18:58.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:18:58.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-11-12T21:18:58.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-11-12T21:18:58.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:18:58.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:18:58.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:18:58.586 [DEBUG] [Thread-22904] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:19:01.365 [DEBUG] [Thread-22906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:19:16.417 [DEBUG] [Thread-22907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:19:28.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:19:28.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:19:28.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-11-12T21:19:29.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 19, 12), 13.95, 39.65, 0.0, 13.2, 18.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:19:29.259 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:19:12
2025-11-12T21:19:29.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:19:29.528 [DEBUG] [Thread-22908] [transport.py] [_log()] starting thread (client mode): 0x149215d0
2025-11-12T21:19:29.528 [DEBUG] [Thread-22908] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:19:29.548 [DEBUG] [Thread-22908] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:19:29.548 [INFO] [Thread-22908] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] client lang: <none>
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] server lang: <none>
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] kex follows: False
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] Compression: none
2025-11-12T21:19:29.552 [DEBUG] [Thread-22908] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:19:29.568 [DEBUG] [Thread-22908] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:19:29.568 [DEBUG] [Thread-22908] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:19:29.568 [DEBUG] [Thread-22908] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:19:29.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:19:29.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:19:29.569 [DEBUG] [Thread-22908] [transport.py] [_log()] userauth is OK
2025-11-12T21:19:29.569 [DEBUG] [Thread-22908] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:19:29.569 [DEBUG] [Thread-22908] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:19:29.569 [DEBUG] [Thread-22908] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:19:29.569 [DEBUG] [Thread-22908] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:19:29.585 [INFO] [Thread-22908] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:19:29.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:19:30.141 [DEBUG] [Thread-22908] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:19:30.141 [DEBUG] [Thread-22908] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:19:30.142 [DEBUG] [Thread-22908] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:19:30.183 [DEBUG] [Thread-22908] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:19:30.183 [DEBUG] [Thread-22908] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:19:30.186 [DEBUG] [Thread-22908] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:19:30.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:19:30.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:19:30.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:19:30.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:19:30.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:19:30.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:19:30.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:19:30.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:19:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:19:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.804598 -999.00  +18.50   8.17     44   +6.10 1 2 1 1 1     0    0 9.84 -162.81 ZnESW 7.2 8.2 246.9 11.2 19.2 -22.3 19.1 -21.5 18.9 -21.0 19.1 -19.1
2025-11-12T21:19:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:19:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:19:30.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.804598
2025-11-12T21:19:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:19:30.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:19:30.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:19:30.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:19:30.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:19:30.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:19:12', tmtdew=13.95, humidity=39.65, cloud=0.0, wind=13.2, temperature=18.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:19:13', seeing=0.96, atlas_timestamp='2025-11-12T19:18:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.941749999999999, 0.7997500000000004, 1.1407500000000006, 0.9834999999999994, 0.7940000000000005, 0.8042500000000006, 0.9524999999999997, 1.103250000000001, 1.059499999999999, 0.7390000000000017, 0.8432499999999994, 0.9370000000000003, 0.8420000000000005, 1.4012499999999992, 1.770999999999999, 1.0344999999999995, 0.9792500000000004, 1.0065, 1.512999999999999, 0.9067499999999988, 0.8404999999999987, 1.9397499999999983, nan, 1.4137500000000003, 0.9519999999999991, 1.4705000000000004, 2.7887500000000003, 2.4255000000000004, 2.1640000000000006, nan, nan, nan, 0.6347499999999995], zp_timestamp='2025-11-12T19:15:00')
2025-11-12T21:19:30.212 [DEBUG] [Thread-22908] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:19:30.298 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:19:30.311 [DEBUG] [Thread-22911] [transport.py] [_log()] starting thread (client mode): 0x149465c0
2025-11-12T21:19:30.311 [DEBUG] [Thread-22911] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:19:30.328 [DEBUG] [Thread-22911] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:19:30.328 [INFO] [Thread-22911] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:19:30.335 [DEBUG] [Thread-22911] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:19:30.335 [DEBUG] [Thread-22911] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] client lang: <none>
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] server lang: <none>
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] kex follows: False
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] Compression: none
2025-11-12T21:19:30.336 [DEBUG] [Thread-22911] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:19:30.394 [DEBUG] [Thread-22911] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:19:30.394 [DEBUG] [Thread-22911] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:19:30.395 [DEBUG] [Thread-22911] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:19:30.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:19:30.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:19:30.453 [DEBUG] [Thread-22911] [transport.py] [_log()] userauth is OK
2025-11-12T21:19:30.453 [DEBUG] [Thread-22911] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:19:30.454 [DEBUG] [Thread-22911] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:19:30.454 [DEBUG] [Thread-22911] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:19:30.454 [DEBUG] [Thread-22911] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:19:30.474 [INFO] [Thread-22911] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:19:30.475 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:19:30.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:19:31.307 [DEBUG] [Thread-22911] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:19:31.307 [DEBUG] [Thread-22911] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:19:31.355 [DEBUG] [Thread-22911] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:19:31.355 [DEBUG] [Thread-22911] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:19:31.364 [DEBUG] [Thread-22911] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:19:31.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:19:31.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-11-12T21:19:31.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-11-12T21:19:31.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:19:31.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:19:31.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:19:31.397 [DEBUG] [Thread-22911] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:19:31.458 [DEBUG] [Thread-22913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:19:46.516 [DEBUG] [Thread-22914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:19:47.098 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:19:47.099 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:19:54.957 [DEBUG] [Thread-22915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:20:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:20:01.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:20:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:20:01.543 [DEBUG] [Thread-22916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:20:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 19, 44), 13.83, 39.84, 0.0, 13.34, 18.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:20:02.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:19:44
2025-11-12T21:20:02.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:20:02.339 [DEBUG] [Thread-22917] [transport.py] [_log()] starting thread (client mode): 0x149462f0
2025-11-12T21:20:02.339 [DEBUG] [Thread-22917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:20:02.360 [DEBUG] [Thread-22917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:20:02.361 [INFO] [Thread-22917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:20:02.363 [DEBUG] [Thread-22917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:20:02.363 [DEBUG] [Thread-22917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:20:02.363 [DEBUG] [Thread-22917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:20:02.363 [DEBUG] [Thread-22917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:20:02.363 [DEBUG] [Thread-22917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:20:02.363 [DEBUG] [Thread-22917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] client lang: <none>
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] server lang: <none>
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] kex follows: False
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] Compression: none
2025-11-12T21:20:02.364 [DEBUG] [Thread-22917] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:20:02.380 [DEBUG] [Thread-22917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:20:02.381 [DEBUG] [Thread-22917] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:20:02.381 [DEBUG] [Thread-22917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:20:02.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:20:02.382 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:20:02.383 [DEBUG] [Thread-22917] [transport.py] [_log()] userauth is OK
2025-11-12T21:20:02.383 [DEBUG] [Thread-22917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:20:02.383 [DEBUG] [Thread-22917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:20:02.383 [DEBUG] [Thread-22917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:20:02.383 [DEBUG] [Thread-22917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:20:02.401 [INFO] [Thread-22917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:20:02.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:20:03.129 [DEBUG] [Thread-22917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:20:03.129 [DEBUG] [Thread-22917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:20:03.129 [DEBUG] [Thread-22917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:20:03.169 [DEBUG] [Thread-22917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:20:03.169 [DEBUG] [Thread-22917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:20:03.173 [DEBUG] [Thread-22917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:20:03.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:20:03.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:20:03.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:20:03.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:20:03.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:20:03.195 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:20:03.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:20:03.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:20:03.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:20:03.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.805292 -999.00  +18.50   9.78     44   +6.10 1 1 1 1 1     0    0 8.48 -192.18 ZNESW 10.8 9.8 209.1 13.6 19.1 -22.4 19.1 -21.4 18.9 -21.0 19.1 -21.6
2025-11-12T21:20:03.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:20:03.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:20:03.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.805292
2025-11-12T21:20:03.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:20:03.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:20:03.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:20:03.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:20:03.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:20:03.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:19:44', tmtdew=13.83, humidity=39.84, cloud=0.0, wind=13.34, temperature=18.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:19:45', seeing=0.99, atlas_timestamp='2025-11-12T19:19:37.229', atlas_cloud=1, atlas_rain=1, zp_data=[0.941749999999999, 0.7997500000000004, 1.1407500000000006, 0.9834999999999994, 0.7940000000000005, 0.8042500000000006, 0.9524999999999997, 1.103250000000001, 1.059499999999999, 0.7390000000000017, 0.8432499999999994, 0.9370000000000003, 0.8420000000000005, 1.4012499999999992, 1.770999999999999, 1.0344999999999995, 0.9792500000000004, 1.0065, 1.512999999999999, 0.9067499999999988, 0.8404999999999987, 1.9397499999999983, nan, 1.4137500000000003, 0.9519999999999991, 1.4705000000000004, 2.7887500000000003, 2.4255000000000004, 2.1640000000000006, nan, nan, nan, 0.6347499999999995], zp_timestamp='2025-11-12T19:19:00')
2025-11-12T21:20:03.197 [DEBUG] [Thread-22917] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:20:03.283 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:20:03.295 [DEBUG] [Thread-22920] [transport.py] [_log()] starting thread (client mode): 0x17398a00
2025-11-12T21:20:03.295 [DEBUG] [Thread-22920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:20:03.311 [DEBUG] [Thread-22920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:20:03.311 [INFO] [Thread-22920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:20:03.319 [DEBUG] [Thread-22920] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:20:03.319 [DEBUG] [Thread-22920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:20:03.320 [DEBUG] [Thread-22920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:20:03.320 [DEBUG] [Thread-22920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:20:03.320 [DEBUG] [Thread-22920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:20:03.320 [DEBUG] [Thread-22920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:20:03.320 [DEBUG] [Thread-22920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:20:03.320 [DEBUG] [Thread-22920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:20:03.320 [DEBUG] [Thread-22920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:20:03.320 [DEBUG] [Thread-22920] [transport.py] [_log()] client lang: <none>
2025-11-12T21:20:03.321 [DEBUG] [Thread-22920] [transport.py] [_log()] server lang: <none>
2025-11-12T21:20:03.321 [DEBUG] [Thread-22920] [transport.py] [_log()] kex follows: False
2025-11-12T21:20:03.321 [DEBUG] [Thread-22920] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:20:03.321 [DEBUG] [Thread-22920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:20:03.321 [DEBUG] [Thread-22920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:20:03.321 [DEBUG] [Thread-22920] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:20:03.321 [DEBUG] [Thread-22920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:20:03.321 [DEBUG] [Thread-22920] [transport.py] [_log()] Compression: none
2025-11-12T21:20:03.322 [DEBUG] [Thread-22920] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:20:03.377 [DEBUG] [Thread-22920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:20:03.378 [DEBUG] [Thread-22920] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:20:03.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:20:03.379 [DEBUG] [Thread-22920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:20:03.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:20:03.433 [DEBUG] [Thread-22920] [transport.py] [_log()] userauth is OK
2025-11-12T21:20:03.433 [DEBUG] [Thread-22920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:20:03.433 [DEBUG] [Thread-22920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:20:03.433 [DEBUG] [Thread-22920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:20:03.433 [DEBUG] [Thread-22920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:20:03.457 [INFO] [Thread-22920] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:20:03.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:20:03.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:20:04.287 [DEBUG] [Thread-22920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:20:04.296 [DEBUG] [Thread-22920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:20:04.335 [DEBUG] [Thread-22920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:20:04.336 [DEBUG] [Thread-22920] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:20:04.345 [DEBUG] [Thread-22920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:20:04.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:20:04.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:20:04.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-11-12T21:20:04.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:20:04.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:20:04.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:20:04.383 [DEBUG] [Thread-22920] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:20:16.577 [DEBUG] [Thread-22922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:20:31.630 [DEBUG] [Thread-22923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:20:34.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:20:34.405 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:20:34.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-11-12T21:20:35.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 20, 16), 13.83, 39.83, 0.0, 12.79, 18.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:20:35.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:20:16
2025-11-12T21:20:35.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:20:35.331 [DEBUG] [Thread-22924] [transport.py] [_log()] starting thread (client mode): 0x14944ee0
2025-11-12T21:20:35.332 [DEBUG] [Thread-22924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:20:35.353 [DEBUG] [Thread-22924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:20:35.353 [INFO] [Thread-22924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:20:35.356 [DEBUG] [Thread-22924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:20:35.356 [DEBUG] [Thread-22924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:20:35.356 [DEBUG] [Thread-22924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:20:35.356 [DEBUG] [Thread-22924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:20:35.356 [DEBUG] [Thread-22924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:20:35.356 [DEBUG] [Thread-22924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] client lang: <none>
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] server lang: <none>
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] kex follows: False
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:20:35.357 [DEBUG] [Thread-22924] [transport.py] [_log()] Compression: none
2025-11-12T21:20:35.358 [DEBUG] [Thread-22924] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:20:35.376 [DEBUG] [Thread-22924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:20:35.377 [DEBUG] [Thread-22924] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:20:35.378 [DEBUG] [Thread-22924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:20:35.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:20:35.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:20:35.380 [DEBUG] [Thread-22924] [transport.py] [_log()] userauth is OK
2025-11-12T21:20:35.380 [DEBUG] [Thread-22924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:20:35.380 [DEBUG] [Thread-22924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:20:35.380 [DEBUG] [Thread-22924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:20:35.380 [DEBUG] [Thread-22924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:20:35.420 [INFO] [Thread-22924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:20:35.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:20:36.047 [DEBUG] [Thread-22924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:20:36.047 [DEBUG] [Thread-22924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:20:36.048 [DEBUG] [Thread-22924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:20:36.088 [DEBUG] [Thread-22924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:20:36.088 [DEBUG] [Thread-22924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:20:36.092 [DEBUG] [Thread-22924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:20:36.104 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:20:36.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:20:36.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:20:36.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:20:36.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:20:36.115 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:20:36.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:20:36.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:20:36.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:20:36.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.805639 -999.00  +18.40   9.29     44   +6.20 1 1 1 1 1     0    0 8.79 -187.70 ZNESW 9.1 9.3 218.3 13.4 19.1 -22.4 19.1 -21.6 18.8 -21.1 19.1 -21.8
2025-11-12T21:20:36.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:20:36.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:20:36.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.805639
2025-11-12T21:20:36.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:20:36.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:20:36.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:20:36.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:20:36.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:20:36.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:20:16', tmtdew=13.83, humidity=39.83, cloud=0.0, wind=12.79, temperature=18.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:20:17', seeing=0.99, atlas_timestamp='2025-11-12T19:20:07.210', atlas_cloud=1, atlas_rain=1, zp_data=[0.941749999999999, 0.7997500000000004, 1.1407500000000006, 0.9834999999999994, 0.7940000000000005, 0.8042500000000006, 0.9524999999999997, 1.103250000000001, 1.059499999999999, 0.7390000000000017, 0.8432499999999994, 0.9370000000000003, 0.8420000000000005, 1.4012499999999992, 1.770999999999999, 1.0344999999999995, 0.9792500000000004, 1.0065, 1.512999999999999, 0.9067499999999988, 0.8404999999999987, 1.9397499999999983, nan, 1.4137500000000003, 0.9519999999999991, 1.4705000000000004, 2.7887500000000003, 2.4255000000000004, 2.1640000000000006, nan, nan, nan, 0.6347499999999995], zp_timestamp='2025-11-12T19:19:00')
2025-11-12T21:20:36.118 [DEBUG] [Thread-22924] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:20:36.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:20:36.229 [DEBUG] [Thread-22927] [transport.py] [_log()] starting thread (client mode): 0x11f01900
2025-11-12T21:20:36.229 [DEBUG] [Thread-22927] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:20:36.245 [DEBUG] [Thread-22927] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:20:36.245 [INFO] [Thread-22927] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:20:36.252 [DEBUG] [Thread-22927] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] client lang: <none>
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] server lang: <none>
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] kex follows: False
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:20:36.253 [DEBUG] [Thread-22927] [transport.py] [_log()] Compression: none
2025-11-12T21:20:36.254 [DEBUG] [Thread-22927] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:20:36.314 [DEBUG] [Thread-22927] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:20:36.315 [DEBUG] [Thread-22927] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:20:36.315 [DEBUG] [Thread-22927] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:20:36.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:20:36.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:20:36.374 [DEBUG] [Thread-22927] [transport.py] [_log()] userauth is OK
2025-11-12T21:20:36.374 [DEBUG] [Thread-22927] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:20:36.374 [DEBUG] [Thread-22927] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:20:36.374 [DEBUG] [Thread-22927] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:20:36.374 [DEBUG] [Thread-22927] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:20:36.393 [INFO] [Thread-22927] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:20:36.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:20:36.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:20:37.229 [DEBUG] [Thread-22927] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:20:37.229 [DEBUG] [Thread-22927] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:20:37.277 [DEBUG] [Thread-22927] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:20:37.277 [DEBUG] [Thread-22927] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:20:37.286 [DEBUG] [Thread-22927] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:20:37.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:20:37.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-11-12T21:20:37.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-11-12T21:20:37.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:20:37.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:20:37.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:20:37.324 [DEBUG] [Thread-22927] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:20:46.669 [DEBUG] [Thread-22929 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:20:47.307 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:20:47.308 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:20:55.034 [DEBUG] [Thread-22930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:21:01.722 [DEBUG] [Thread-22931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:21:07.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:21:07.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:21:07.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-11-12T21:21:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 20, 48), 13.79, 39.81, 0.0, 12.18, 18.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:21:08.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:20:48
2025-11-12T21:21:08.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:21:08.308 [DEBUG] [Thread-22932] [transport.py] [_log()] starting thread (client mode): 0x14921db0
2025-11-12T21:21:08.308 [DEBUG] [Thread-22932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:21:08.324 [DEBUG] [Thread-22932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:21:08.324 [INFO] [Thread-22932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:21:08.327 [DEBUG] [Thread-22932] [transport.py] [_log()] client lang: <none>
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] server lang: <none>
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] kex follows: False
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] Compression: none
2025-11-12T21:21:08.328 [DEBUG] [Thread-22932] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:21:08.349 [DEBUG] [Thread-22932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:21:08.350 [DEBUG] [Thread-22932] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:21:08.350 [DEBUG] [Thread-22932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:21:08.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:21:08.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:21:08.351 [DEBUG] [Thread-22932] [transport.py] [_log()] userauth is OK
2025-11-12T21:21:08.351 [DEBUG] [Thread-22932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:21:08.351 [DEBUG] [Thread-22932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:21:08.351 [DEBUG] [Thread-22932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:21:08.351 [DEBUG] [Thread-22932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:21:08.370 [INFO] [Thread-22932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:21:08.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:21:09.282 [DEBUG] [Thread-22932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:21:09.282 [DEBUG] [Thread-22932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:21:09.283 [DEBUG] [Thread-22932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:21:09.323 [DEBUG] [Thread-22932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:21:09.323 [DEBUG] [Thread-22932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:21:09.325 [DEBUG] [Thread-22932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:21:09.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:21:09.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:21:09.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:21:09.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:21:09.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:21:09.345 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:21:09.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:21:09.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:21:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:21:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.805987 -999.00  +18.40   7.21     44   +6.20 1 1 1 1 1     0    0 7.96 -204.22 ZNESW 7.5 7.2 190.5 15.8 19.1 -22.3 19.1 -21.6 18.8 -20.9 19.1 -21.6
2025-11-12T21:21:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:21:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:21:09.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.805987
2025-11-12T21:21:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:21:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:21:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:21:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:21:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:21:09.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:20:48', tmtdew=13.79, humidity=39.81, cloud=0.0, wind=12.18, temperature=18.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:20:49', seeing=0.9, atlas_timestamp='2025-11-12T19:20:37.277', atlas_cloud=1, atlas_rain=1, zp_data=[0.941749999999999, 0.7997500000000004, 1.1407500000000006, 0.9834999999999994, 0.7940000000000005, 0.8042500000000006, 0.9524999999999997, 1.103250000000001, 1.059499999999999, 0.7390000000000017, 0.8432499999999994, 0.9370000000000003, 0.8420000000000005, 1.4012499999999992, 1.770999999999999, 1.0344999999999995, 0.9792500000000004, 1.0065, 1.512999999999999, 0.9067499999999988, 0.8404999999999987, 1.9397499999999983, nan, 1.4137500000000003, 0.9519999999999991, 1.4705000000000004, 2.7887500000000003, 2.4255000000000004, 2.1640000000000006, nan, nan, nan, 0.6347499999999995], zp_timestamp='2025-11-12T19:19:00')
2025-11-12T21:21:09.346 [DEBUG] [Thread-22932] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:21:09.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:21:09.440 [DEBUG] [Thread-22935] [transport.py] [_log()] starting thread (client mode): 0x1739ac20
2025-11-12T21:21:09.441 [DEBUG] [Thread-22935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:21:09.456 [DEBUG] [Thread-22935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:21:09.456 [INFO] [Thread-22935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] client lang: <none>
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] server lang: <none>
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] kex follows: False
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:21:09.464 [DEBUG] [Thread-22935] [transport.py] [_log()] Compression: none
2025-11-12T21:21:09.465 [DEBUG] [Thread-22935] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:21:09.522 [DEBUG] [Thread-22935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:21:09.523 [DEBUG] [Thread-22935] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:21:09.523 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:21:09.524 [DEBUG] [Thread-22935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:21:09.524 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:21:09.581 [DEBUG] [Thread-22935] [transport.py] [_log()] userauth is OK
2025-11-12T21:21:09.582 [DEBUG] [Thread-22935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:21:09.582 [DEBUG] [Thread-22935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:21:09.582 [DEBUG] [Thread-22935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:21:09.582 [DEBUG] [Thread-22935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:21:09.601 [INFO] [Thread-22935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:21:09.610 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:21:09.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:21:10.439 [DEBUG] [Thread-22935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:21:10.439 [DEBUG] [Thread-22935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:21:10.488 [DEBUG] [Thread-22935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:21:10.488 [DEBUG] [Thread-22935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:21:10.497 [DEBUG] [Thread-22935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:21:10.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:21:10.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-11-12T21:21:10.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:21:10.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:21:10.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:21:10.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:21:10.533 [DEBUG] [Thread-22935] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:21:16.755 [DEBUG] [Thread-22937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:21:31.807 [DEBUG] [Thread-22938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:21:40.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:21:40.556 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:21:40.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-11-12T21:21:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 21, 20), 13.74, 39.93, 0.0, 12.11, 18.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:21:41.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:21:20
2025-11-12T21:21:41.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:21:41.474 [DEBUG] [Thread-22939] [transport.py] [_log()] starting thread (client mode): 0x173bc850
2025-11-12T21:21:41.474 [DEBUG] [Thread-22939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:21:41.493 [DEBUG] [Thread-22939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:21:41.494 [INFO] [Thread-22939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:21:41.497 [DEBUG] [Thread-22939] [transport.py] [_log()] client lang: <none>
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] server lang: <none>
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] kex follows: False
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] Compression: none
2025-11-12T21:21:41.498 [DEBUG] [Thread-22939] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:21:41.517 [DEBUG] [Thread-22939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:21:41.517 [DEBUG] [Thread-22939] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:21:41.518 [DEBUG] [Thread-22939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:21:41.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:21:41.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:21:41.519 [DEBUG] [Thread-22939] [transport.py] [_log()] userauth is OK
2025-11-12T21:21:41.520 [DEBUG] [Thread-22939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:21:41.520 [DEBUG] [Thread-22939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:21:41.520 [DEBUG] [Thread-22939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:21:41.520 [DEBUG] [Thread-22939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:21:41.556 [INFO] [Thread-22939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:21:41.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:21:42.202 [DEBUG] [Thread-22939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:21:42.202 [DEBUG] [Thread-22939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:21:42.202 [DEBUG] [Thread-22939] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:21:42.243 [DEBUG] [Thread-22939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:21:42.243 [DEBUG] [Thread-22939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:21:42.247 [DEBUG] [Thread-22939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:21:42.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:21:42.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:21:42.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:21:42.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:21:42.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:21:42.270 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:21:42.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:21:42.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:21:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:21:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.806334 -999.00  +18.40   5.64     44   +6.20 1 2 1 1 1     0    0 8.26 -204.41 Z.ESw 8.5 5.6 247.7 11.2 19.1 -22.4 19.0 -21.5 18.9 -21.1 19.1 -21.6
2025-11-12T21:21:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:21:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:21:42.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.806334
2025-11-12T21:21:42.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:21:42.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:21:42.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:21:42.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:21:42.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:21:42.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:21:20', tmtdew=13.74, humidity=39.93, cloud=0.0, wind=12.11, temperature=18.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:21:21', seeing=0.9, atlas_timestamp='2025-11-12T19:21:07.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.941749999999999, 0.7997500000000004, 1.1407500000000006, 0.9834999999999994, 0.7940000000000005, 0.8042500000000006, 0.9524999999999997, 1.103250000000001, 1.059499999999999, 0.7390000000000017, 0.8432499999999994, 0.9370000000000003, 0.8420000000000005, 1.4012499999999992, 1.770999999999999, 1.0344999999999995, 0.9792500000000004, 1.0065, 1.512999999999999, 0.9067499999999988, 0.8404999999999987, 1.9397499999999983, nan, 1.4137500000000003, 0.9519999999999991, 1.4705000000000004, 2.7887500000000003, 2.4255000000000004, 2.1640000000000006, nan, nan, nan, 0.6347499999999995], zp_timestamp='2025-11-12T19:19:00')
2025-11-12T21:21:42.273 [DEBUG] [Thread-22939] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:21:42.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:21:42.370 [DEBUG] [Thread-22942] [transport.py] [_log()] starting thread (client mode): 0x173bee60
2025-11-12T21:21:42.370 [DEBUG] [Thread-22942] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:21:42.385 [DEBUG] [Thread-22942] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:21:42.385 [INFO] [Thread-22942] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] client lang: <none>
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] server lang: <none>
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] kex follows: False
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] Compression: none
2025-11-12T21:21:42.393 [DEBUG] [Thread-22942] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:21:42.452 [DEBUG] [Thread-22942] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:21:42.452 [DEBUG] [Thread-22942] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:21:42.452 [DEBUG] [Thread-22942] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:21:42.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:21:42.452 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:21:42.508 [DEBUG] [Thread-22942] [transport.py] [_log()] userauth is OK
2025-11-12T21:21:42.509 [DEBUG] [Thread-22942] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:21:42.509 [DEBUG] [Thread-22942] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:21:42.509 [DEBUG] [Thread-22942] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:21:42.509 [DEBUG] [Thread-22942] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:21:42.523 [INFO] [Thread-22942] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:21:42.523 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:21:42.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:21:43.377 [DEBUG] [Thread-22942] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:21:43.378 [DEBUG] [Thread-22942] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:21:43.425 [DEBUG] [Thread-22942] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:21:43.425 [DEBUG] [Thread-22942] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:21:43.433 [DEBUG] [Thread-22942] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:21:43.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:21:43.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-11-12T21:21: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') -> 00000000
2025-11-12T21:21:43.457 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:21:43.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:21:43.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:21:43.464 [DEBUG] [Thread-22942] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:21:46.837 [DEBUG] [Thread-22944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:21:47.512 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:21:47.513 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:21:55.089 [DEBUG] [Thread-22945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:22:01.877 [DEBUG] [Thread-22946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:22:13.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:22:13.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:22:13.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-11-12T21:22:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 21, 52), 13.61, 40.51, 0.0, 13.83, 18.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:22:14.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:21:52
2025-11-12T21:22:14.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:22:14.404 [DEBUG] [Thread-22947] [transport.py] [_log()] starting thread (client mode): 0x173bf280
2025-11-12T21:22:14.405 [DEBUG] [Thread-22947] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:22:14.424 [DEBUG] [Thread-22947] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:22:14.424 [INFO] [Thread-22947] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:22:14.427 [DEBUG] [Thread-22947] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] client lang: <none>
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] server lang: <none>
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] kex follows: False
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] Compression: none
2025-11-12T21:22:14.428 [DEBUG] [Thread-22947] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:22:14.449 [DEBUG] [Thread-22947] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:22:14.449 [DEBUG] [Thread-22947] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:22:14.450 [DEBUG] [Thread-22947] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:22:14.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:22:14.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:22:14.452 [DEBUG] [Thread-22947] [transport.py] [_log()] userauth is OK
2025-11-12T21:22:14.452 [DEBUG] [Thread-22947] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:22:14.452 [DEBUG] [Thread-22947] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:22:14.452 [DEBUG] [Thread-22947] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:22:14.453 [DEBUG] [Thread-22947] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:22:14.490 [INFO] [Thread-22947] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:22:14.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:22:15.151 [DEBUG] [Thread-22947] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:22:15.152 [DEBUG] [Thread-22947] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:22:15.152 [DEBUG] [Thread-22947] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:22:15.193 [DEBUG] [Thread-22947] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:22:15.193 [DEBUG] [Thread-22947] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:22:15.196 [DEBUG] [Thread-22947] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:22:15.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:22:15.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:22:15.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:22:15.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:22:15.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:22:15.220 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:22:15.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:22:15.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:22:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:22:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.806681 -999.00  +18.40   6.62     44   +6.20 1 2 1 1 1     0    0 7.97 -204.52 ZnESw 7.8 6.6 209.9 13.0 19.1 -22.5 19.0 -21.9 18.8 -21.1 19.1 -21.6
2025-11-12T21:22:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:22:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:22:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.806681
2025-11-12T21:22:15.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:22:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:22:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:22:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:22:15.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:22:15.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:21:52', tmtdew=13.61, humidity=40.51, cloud=0.0, wind=13.83, temperature=18.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:21:53', seeing=0.9, atlas_timestamp='2025-11-12T19:21:37.238', atlas_cloud=2, atlas_rain=1, zp_data=[0.941749999999999, 0.7997500000000004, 1.1407500000000006, 0.9834999999999994, 0.7940000000000005, 0.8042500000000006, 0.9524999999999997, 1.103250000000001, 1.059499999999999, 0.7390000000000017, 0.8432499999999994, 0.9370000000000003, 0.8420000000000005, 1.4012499999999992, 1.770999999999999, 1.0344999999999995, 0.9792500000000004, 1.0065, 1.512999999999999, 0.9067499999999988, 0.8404999999999987, 1.9397499999999983, nan, 1.4137500000000003, 0.9519999999999991, 1.4705000000000004, 2.7887500000000003, 2.4255000000000004, 2.1640000000000006, nan, nan, nan, 0.6347499999999995], zp_timestamp='2025-11-12T19:19:00')
2025-11-12T21:22:15.223 [DEBUG] [Thread-22947] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:22:15.306 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:22:15.317 [DEBUG] [Thread-22950] [transport.py] [_log()] starting thread (client mode): 0x173bed10
2025-11-12T21:22:15.318 [DEBUG] [Thread-22950] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:22:15.333 [DEBUG] [Thread-22950] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:22:15.333 [INFO] [Thread-22950] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:22:15.340 [DEBUG] [Thread-22950] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:22:15.340 [DEBUG] [Thread-22950] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:22:15.340 [DEBUG] [Thread-22950] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:22:15.340 [DEBUG] [Thread-22950] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:22:15.340 [DEBUG] [Thread-22950] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:22:15.340 [DEBUG] [Thread-22950] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] client lang: <none>
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] server lang: <none>
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] kex follows: False
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] Compression: none
2025-11-12T21:22:15.341 [DEBUG] [Thread-22950] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:22:15.401 [DEBUG] [Thread-22950] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:22:15.402 [DEBUG] [Thread-22950] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:22:15.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:22:15.403 [DEBUG] [Thread-22950] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:22:15.404 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:22:15.457 [DEBUG] [Thread-22950] [transport.py] [_log()] userauth is OK
2025-11-12T21:22:15.457 [DEBUG] [Thread-22950] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:22:15.458 [DEBUG] [Thread-22950] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:22:15.458 [DEBUG] [Thread-22950] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:22:15.458 [DEBUG] [Thread-22950] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:22:15.477 [INFO] [Thread-22950] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:22:15.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:22:15.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:22:16.313 [DEBUG] [Thread-22950] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:22:16.313 [DEBUG] [Thread-22950] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:22:16.362 [DEBUG] [Thread-22950] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:22:16.362 [DEBUG] [Thread-22950] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:22:16.371 [DEBUG] [Thread-22950] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:22:16.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:22:16.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:22:16.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-11-12T21:22:16.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:22:16.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:22:16.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:22:16.408 [DEBUG] [Thread-22950] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:22:16.912 [DEBUG] [Thread-22952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:22:31.968 [DEBUG] [Thread-22953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:22:46.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:22:46.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:22:46.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-11-12T21:22:47.004 [DEBUG] [Thread-22954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:22:47.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 22, 24), 13.62, 40.49, 0.0, 14.1, 18.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:22:47.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:22:24
2025-11-12T21:22:47.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:22:47.360 [DEBUG] [Thread-22955] [transport.py] [_log()] starting thread (client mode): 0x173bdff0
2025-11-12T21:22:47.361 [DEBUG] [Thread-22955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:22:47.383 [DEBUG] [Thread-22955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:22:47.383 [INFO] [Thread-22955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:22:47.386 [DEBUG] [Thread-22955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:22:47.386 [DEBUG] [Thread-22955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] client lang: <none>
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] server lang: <none>
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] kex follows: False
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:22:47.387 [DEBUG] [Thread-22955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:22:47.388 [DEBUG] [Thread-22955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:22:47.388 [DEBUG] [Thread-22955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:22:47.388 [DEBUG] [Thread-22955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:22:47.388 [DEBUG] [Thread-22955] [transport.py] [_log()] Compression: none
2025-11-12T21:22:47.388 [DEBUG] [Thread-22955] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:22:47.411 [DEBUG] [Thread-22955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:22:47.412 [DEBUG] [Thread-22955] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:22:47.413 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:22:47.414 [DEBUG] [Thread-22955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:22:47.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:22:47.416 [DEBUG] [Thread-22955] [transport.py] [_log()] userauth is OK
2025-11-12T21:22:47.417 [DEBUG] [Thread-22955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:22:47.417 [DEBUG] [Thread-22955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:22:47.417 [DEBUG] [Thread-22955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:22:47.417 [DEBUG] [Thread-22955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:22:47.450 [INFO] [Thread-22955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:22:47.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:22:47.719 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:22:47.720 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:22:48.078 [DEBUG] [Thread-22955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:22:48.078 [DEBUG] [Thread-22955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:22:48.079 [DEBUG] [Thread-22955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:22:48.120 [DEBUG] [Thread-22955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:22:48.120 [DEBUG] [Thread-22955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:22:48.124 [DEBUG] [Thread-22955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:22:48.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:22:48.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:22:48.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:22:48.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:22:48.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:22:48.148 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:22:48.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:22:48.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:22:48.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:22:48.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.807028 -999.00  +18.40   8.83     45   +6.30 1 2 1 1 1     0    0 7.65 -204.47 ZnESw 8.7 8.8 196.8 13.4 19.1 -22.4 19.0 -21.5 18.8 -21.1 19.0 -21.6
2025-11-12T21:22:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:22:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:22:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.807028
2025-11-12T21:22:48.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:22:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:22:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:22:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:22:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:22:48.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:22:24', tmtdew=13.62, humidity=40.49, cloud=0.0, wind=14.1, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:22:25', seeing=0.96, atlas_timestamp='2025-11-12T19:22:07.219', atlas_cloud=2, atlas_rain=1, zp_data=[0.941749999999999, 0.7997500000000004, 1.1407500000000006, 0.9834999999999994, 0.7940000000000005, 0.8042500000000006, 0.9524999999999997, 1.103250000000001, 1.059499999999999, 0.7390000000000017, 0.8432499999999994, 0.9370000000000003, 0.8420000000000005, 1.4012499999999992, 1.770999999999999, 1.0344999999999995, 0.9792500000000004, 1.0065, 1.512999999999999, 0.9067499999999988, 0.8404999999999987, 1.9397499999999983, nan, 1.4137500000000003, 0.9519999999999991, 1.4705000000000004, 2.7887500000000003, 2.4255000000000004, 2.1640000000000006, nan, nan, nan, 0.6347499999999995], zp_timestamp='2025-11-12T19:19:00')
2025-11-12T21:22:48.151 [DEBUG] [Thread-22955] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:22:48.235 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:22:48.247 [DEBUG] [Thread-22958] [transport.py] [_log()] starting thread (client mode): 0x173bf340
2025-11-12T21:22:48.247 [DEBUG] [Thread-22958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:22:48.262 [DEBUG] [Thread-22958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:22:48.263 [INFO] [Thread-22958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:22:48.270 [DEBUG] [Thread-22958] [transport.py] [_log()] client lang: <none>
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] server lang: <none>
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] kex follows: False
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] Compression: none
2025-11-12T21:22:48.271 [DEBUG] [Thread-22958] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:22:48.329 [DEBUG] [Thread-22958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:22:48.330 [DEBUG] [Thread-22958] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:22:48.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:22:48.331 [DEBUG] [Thread-22958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:22:48.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:22:48.386 [DEBUG] [Thread-22958] [transport.py] [_log()] userauth is OK
2025-11-12T21:22:48.386 [DEBUG] [Thread-22958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:22:48.387 [DEBUG] [Thread-22958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:22:48.387 [DEBUG] [Thread-22958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:22:48.387 [DEBUG] [Thread-22958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:22:48.407 [INFO] [Thread-22958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:22:48.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:22:48.408 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:22:49.251 [DEBUG] [Thread-22958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:22:49.251 [DEBUG] [Thread-22958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:22:49.300 [DEBUG] [Thread-22958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:22:49.300 [DEBUG] [Thread-22958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:22:49.311 [DEBUG] [Thread-22958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:22:49.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:22:49.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-11-12T21:22:49.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-11-12T21:22:49.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:22:49.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:22:49.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:22:49.346 [DEBUG] [Thread-22958] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:22:55.141 [DEBUG] [Thread-22960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:23:02.032 [DEBUG] [Thread-22961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:23:17.082 [DEBUG] [Thread-22962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:23:19.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:23:19.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:23:19.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-11-12T21:23:20.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 22, 56), 13.56, 40.53, 0.0, 9.49, 18.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:23:20.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:22:56
2025-11-12T21:23:20.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:23:20.289 [DEBUG] [Thread-22963] [transport.py] [_log()] starting thread (client mode): 0x173998d0
2025-11-12T21:23:20.289 [DEBUG] [Thread-22963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:23:20.308 [DEBUG] [Thread-22963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:23:20.309 [INFO] [Thread-22963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] client lang: <none>
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] server lang: <none>
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] kex follows: False
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:23:20.312 [DEBUG] [Thread-22963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:23:20.313 [DEBUG] [Thread-22963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:23:20.313 [DEBUG] [Thread-22963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:23:20.313 [DEBUG] [Thread-22963] [transport.py] [_log()] Compression: none
2025-11-12T21:23:20.313 [DEBUG] [Thread-22963] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:23:20.330 [DEBUG] [Thread-22963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:23:20.330 [DEBUG] [Thread-22963] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:23:20.331 [DEBUG] [Thread-22963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:23:20.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:23:20.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:23:20.333 [DEBUG] [Thread-22963] [transport.py] [_log()] userauth is OK
2025-11-12T21:23:20.334 [DEBUG] [Thread-22963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:23:20.334 [DEBUG] [Thread-22963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:23:20.334 [DEBUG] [Thread-22963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:23:20.334 [DEBUG] [Thread-22963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:23:20.361 [INFO] [Thread-22963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:23:20.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:23:20.997 [DEBUG] [Thread-22963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:23:20.997 [DEBUG] [Thread-22963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:23:20.997 [DEBUG] [Thread-22963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:23:21.038 [DEBUG] [Thread-22963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:23:21.038 [DEBUG] [Thread-22963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:23:21.041 [DEBUG] [Thread-22963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:23:21.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:23:21.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:23:21.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:23:21.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:23:21.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:23:21.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:23:21.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:23:21.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:23:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:23:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.807723 -999.00  +18.40   5.51     45   +6.40 1 2 1 1 1     0    0 6.85 -235.77 Z.ES. 8.5 5.5 220.2 12.5 19.1 -22.4 18.9 -21.6 18.7 -21.1 19.1 -21.7
2025-11-12T21:23:21.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:23:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:23:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.807723
2025-11-12T21:23:21.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:23:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:23:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:23:21.068 [DEBUG] [Thread-22963] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:23:21.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:23:21.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:23:21.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:22:56', tmtdew=13.56, humidity=40.53, cloud=0.0, wind=9.49, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:22:57', seeing=1.01, atlas_timestamp='2025-11-12T19:23:07.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.60025, 0.7792500000000002, 0.7852500000000004, 0.7344999999999997, 0.6995000000000005, 0.861250000000001, 0.7469999999999999, 0.3982500000000009, 0.6724999999999994, 0.7910000000000004, 0.8192499999999994, 0.6319999999999997, 0.7539999999999996, 1.5052500000000002, 1.5459999999999994, 0.6339999999999995, 0.9092500000000001, 0.6734999999999998, 1.363999999999999, 0.730249999999999, 1.5039999999999987, 2.401749999999999, nan, 0.9517500000000005, 0.8424999999999994, 1.3845, 1.5742500000000001, nan, nan, nan, nan, 1.4120000000000008, 0.87425], zp_timestamp='2025-11-12T19:22:00')
2025-11-12T21:23:21.146 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:23:21.162 [DEBUG] [Thread-22966] [transport.py] [_log()] starting thread (client mode): 0x1739be80
2025-11-12T21:23:21.163 [DEBUG] [Thread-22966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:23:21.177 [DEBUG] [Thread-22966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:23:21.178 [INFO] [Thread-22966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:23:21.186 [DEBUG] [Thread-22966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:23:21.186 [DEBUG] [Thread-22966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:23:21.186 [DEBUG] [Thread-22966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:23:21.186 [DEBUG] [Thread-22966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] client lang: <none>
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] server lang: <none>
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] kex follows: False
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] Compression: none
2025-11-12T21:23:21.187 [DEBUG] [Thread-22966] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:23:21.253 [DEBUG] [Thread-22966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:23:21.253 [DEBUG] [Thread-22966] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:23:21.254 [DEBUG] [Thread-22966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:23:21.254 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:23:21.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:23:21.309 [DEBUG] [Thread-22966] [transport.py] [_log()] userauth is OK
2025-11-12T21:23:21.310 [DEBUG] [Thread-22966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:23:21.310 [DEBUG] [Thread-22966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:23:21.310 [DEBUG] [Thread-22966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:23:21.310 [DEBUG] [Thread-22966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:23:21.329 [INFO] [Thread-22966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:23:21.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:23:21.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:23:22.164 [DEBUG] [Thread-22966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:23:22.164 [DEBUG] [Thread-22966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:23:22.211 [DEBUG] [Thread-22966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:23:22.212 [DEBUG] [Thread-22966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:23:22.221 [DEBUG] [Thread-22966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:23:22.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:23:22.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:23:22.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:23:22.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:23:22.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:23:22.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:23:22.258 [DEBUG] [Thread-22966] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:23:32.117 [DEBUG] [Thread-22968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:23:47.169 [DEBUG] [Thread-22969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:23:47.924 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:23:47.925 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:23:52.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:23:52.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:23:52.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-11-12T21:23:52.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 23, 28), 13.49, 40.71, 0.0, 11.47, 18.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:23:52.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:23:28
2025-11-12T21:23:53.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:23:53.199 [DEBUG] [Thread-22970] [transport.py] [_log()] starting thread (client mode): 0x17399690
2025-11-12T21:23:53.200 [DEBUG] [Thread-22970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:23:53.221 [DEBUG] [Thread-22970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:23:53.221 [INFO] [Thread-22970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:23:53.224 [DEBUG] [Thread-22970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] client lang: <none>
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] server lang: <none>
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] kex follows: False
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] Compression: none
2025-11-12T21:23:53.225 [DEBUG] [Thread-22970] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:23:53.242 [DEBUG] [Thread-22970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:23:53.242 [DEBUG] [Thread-22970] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:23:53.243 [DEBUG] [Thread-22970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:23:53.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:23:53.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:23:53.245 [DEBUG] [Thread-22970] [transport.py] [_log()] userauth is OK
2025-11-12T21:23:53.245 [DEBUG] [Thread-22970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:23:53.245 [DEBUG] [Thread-22970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:23:53.245 [DEBUG] [Thread-22970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:23:53.245 [DEBUG] [Thread-22970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:23:53.277 [INFO] [Thread-22970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:23:53.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:23:53.923 [DEBUG] [Thread-22970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:23:53.924 [DEBUG] [Thread-22970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:23:53.924 [DEBUG] [Thread-22970] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:23:53.965 [DEBUG] [Thread-22970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:23:53.965 [DEBUG] [Thread-22970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:23:53.968 [DEBUG] [Thread-22970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:23:53.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:23:53.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:23:53.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:23:53.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:23:53.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:23:53.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:23:53.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:23:53.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:23:53.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:23:53.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.808070 -999.00  +18.30   7.44     45   +6.40 1 2 1 1 1     0    0 6.91 -237.46 Z.ES. 10.4 7.4 213.0 11.6 19.0 -22.4 19.0 -21.6 18.7 -21.1 19.0 -21.6
2025-11-12T21:23:53.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:23:53.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:23:53.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.808070
2025-11-12T21:23:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:23:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:23:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:23:53.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:23:53.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:23:53.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:23:28', tmtdew=13.49, humidity=40.71, cloud=0.0, wind=11.47, temperature=18.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:23:29', seeing=1.04, atlas_timestamp='2025-11-12T19:23:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[0.60025, 0.7792500000000002, 0.7852500000000004, 0.7344999999999997, 0.6995000000000005, 0.861250000000001, 0.7469999999999999, 0.3982500000000009, 0.6724999999999994, 0.7910000000000004, 0.8192499999999994, 0.6319999999999997, 0.7539999999999996, 1.5052500000000002, 1.5459999999999994, 0.6339999999999995, 0.9092500000000001, 0.6734999999999998, 1.363999999999999, 0.730249999999999, 1.5039999999999987, 2.401749999999999, nan, 0.9517500000000005, 0.8424999999999994, 1.3845, 1.5742500000000001, nan, nan, nan, nan, 1.4120000000000008, 0.87425], zp_timestamp='2025-11-12T19:22:00')
2025-11-12T21:23:53.996 [DEBUG] [Thread-22970] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:23:54.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:23:54.093 [DEBUG] [Thread-22973] [transport.py] [_log()] starting thread (client mode): 0x11f025c0
2025-11-12T21:23:54.093 [DEBUG] [Thread-22973] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:23:54.111 [DEBUG] [Thread-22973] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:23:54.112 [INFO] [Thread-22973] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:23:54.119 [DEBUG] [Thread-22973] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:23:54.119 [DEBUG] [Thread-22973] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:23:54.119 [DEBUG] [Thread-22973] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:23:54.119 [DEBUG] [Thread-22973] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:23:54.119 [DEBUG] [Thread-22973] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:23:54.119 [DEBUG] [Thread-22973] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] client lang: <none>
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] server lang: <none>
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] kex follows: False
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] Compression: none
2025-11-12T21:23:54.120 [DEBUG] [Thread-22973] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:23:54.178 [DEBUG] [Thread-22973] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:23:54.178 [DEBUG] [Thread-22973] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:23:54.179 [DEBUG] [Thread-22973] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:23:54.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:23:54.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:23:54.237 [DEBUG] [Thread-22973] [transport.py] [_log()] userauth is OK
2025-11-12T21:23:54.238 [DEBUG] [Thread-22973] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:23:54.238 [DEBUG] [Thread-22973] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:23:54.238 [DEBUG] [Thread-22973] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:23:54.238 [DEBUG] [Thread-22973] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:23:54.258 [INFO] [Thread-22973] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:23:54.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:23:54.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:23:55.125 [DEBUG] [Thread-22973] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:23:55.125 [DEBUG] [Thread-22973] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:23:55.172 [DEBUG] [Thread-22973] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:23:55.172 [DEBUG] [Thread-22973] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:23:55.181 [DEBUG] [Thread-22973] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:23:55.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:23:55.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:23:55.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-11-12T21:23:55.198 [DEBUG] [Thread-22975 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:23:55.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:23:55.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:23:55.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:23:55.213 [DEBUG] [Thread-22973] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:24:02.206 [DEBUG] [Thread-22976 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:24:17.241 [DEBUG] [Thread-22977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:24:25.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:24:25.206 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:24:25.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-11-12T21:24:25.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 24), 13.35, 41.44, 0.0, 11.13, 18.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:24:25.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:24:00
2025-11-12T21:24:25.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:24:26.109 [DEBUG] [Thread-22978] [transport.py] [_log()] starting thread (client mode): 0x173be050
2025-11-12T21:24:26.109 [DEBUG] [Thread-22978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:24:26.129 [DEBUG] [Thread-22978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:24:26.129 [INFO] [Thread-22978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:24:26.132 [DEBUG] [Thread-22978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:24:26.132 [DEBUG] [Thread-22978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:24:26.132 [DEBUG] [Thread-22978] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:24:26.132 [DEBUG] [Thread-22978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:24:26.132 [DEBUG] [Thread-22978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:24:26.132 [DEBUG] [Thread-22978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:24:26.132 [DEBUG] [Thread-22978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] client lang: <none>
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] server lang: <none>
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] kex follows: False
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] Compression: none
2025-11-12T21:24:26.133 [DEBUG] [Thread-22978] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:24:26.150 [DEBUG] [Thread-22978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:24:26.150 [DEBUG] [Thread-22978] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:24:26.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:24:26.151 [DEBUG] [Thread-22978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:24:26.152 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:24:26.154 [DEBUG] [Thread-22978] [transport.py] [_log()] userauth is OK
2025-11-12T21:24:26.154 [DEBUG] [Thread-22978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:24:26.154 [DEBUG] [Thread-22978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:24:26.154 [DEBUG] [Thread-22978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:24:26.154 [DEBUG] [Thread-22978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:24:26.178 [INFO] [Thread-22978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:24:26.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:24:26.882 [DEBUG] [Thread-22978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:24:26.882 [DEBUG] [Thread-22978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:24:26.882 [DEBUG] [Thread-22978] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:24:26.924 [DEBUG] [Thread-22978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:24:26.924 [DEBUG] [Thread-22978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:24:26.928 [DEBUG] [Thread-22978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:24:26.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:24:26.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:24:26.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:24:26.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:24:26.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:24:26.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:24:26.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:24:26.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:24:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:24:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.808417 -999.00  +18.30   6.61     45   +6.50 1 2 1 1 1     0    0 6.71 -235.59 Z.ES. 8.8 6.6 228.6 13.2 19.0 -22.5 18.9 -21.5 18.8 -21.1 19.0 -21.6
2025-11-12T21:24:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:24:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:24:26.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.808417
2025-11-12T21:24:26.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:24:26.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:24:26.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:24:26.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:24:26.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:24:26.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:24:00', tmtdew=13.35, humidity=41.44, cloud=0.0, wind=11.13, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:24:01', seeing=1.04, atlas_timestamp='2025-11-12T19:24:07.229', atlas_cloud=2, atlas_rain=1, zp_data=[0.60025, 0.7792500000000002, 0.7852500000000004, 0.7344999999999997, 0.6995000000000005, 0.861250000000001, 0.7469999999999999, 0.3982500000000009, 0.6724999999999994, 0.7910000000000004, 0.8192499999999994, 0.6319999999999997, 0.7539999999999996, 1.5052500000000002, 1.5459999999999994, 0.6339999999999995, 0.9092500000000001, 0.6734999999999998, 1.363999999999999, 0.730249999999999, 1.5039999999999987, 2.401749999999999, nan, 0.9517500000000005, 0.8424999999999994, 1.3845, 1.5742500000000001, nan, nan, nan, nan, 1.4120000000000008, 0.87425], zp_timestamp='2025-11-12T19:22:00')
2025-11-12T21:24:26.955 [DEBUG] [Thread-22978] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:24:27.039 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:24:27.053 [DEBUG] [Thread-22981] [transport.py] [_log()] starting thread (client mode): 0x173bc280
2025-11-12T21:24:27.053 [DEBUG] [Thread-22981] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:24:27.072 [DEBUG] [Thread-22981] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:24:27.073 [INFO] [Thread-22981] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:24:27.082 [DEBUG] [Thread-22981] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:24:27.082 [DEBUG] [Thread-22981] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] client lang: <none>
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] server lang: <none>
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] kex follows: False
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:24:27.083 [DEBUG] [Thread-22981] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:24:27.084 [DEBUG] [Thread-22981] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:24:27.084 [DEBUG] [Thread-22981] [transport.py] [_log()] Compression: none
2025-11-12T21:24:27.084 [DEBUG] [Thread-22981] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:24:27.141 [DEBUG] [Thread-22981] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:24:27.142 [DEBUG] [Thread-22981] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:24:27.142 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:24:27.143 [DEBUG] [Thread-22981] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:24:27.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:24:27.198 [DEBUG] [Thread-22981] [transport.py] [_log()] userauth is OK
2025-11-12T21:24:27.198 [DEBUG] [Thread-22981] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:24:27.198 [DEBUG] [Thread-22981] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:24:27.199 [DEBUG] [Thread-22981] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:24:27.199 [DEBUG] [Thread-22981] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:24:27.217 [INFO] [Thread-22981] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:24:27.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:24:27.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:24:28.087 [DEBUG] [Thread-22981] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:24:28.087 [DEBUG] [Thread-22981] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:24:28.134 [DEBUG] [Thread-22981] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:24:28.135 [DEBUG] [Thread-22981] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:24:28.144 [DEBUG] [Thread-22981] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:24:28.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:24:28.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-11-12T21:24:28.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-11-12T21:24:28.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:24:28.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:24:28.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:24:28.181 [DEBUG] [Thread-22981] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:24:32.271 [DEBUG] [Thread-22983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:24:47.331 [DEBUG] [Thread-22984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:24:48.131 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:24:48.132 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:24:55.256 [DEBUG] [Thread-22985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:24:58.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:24:58.203 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:24:58.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:24:58.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 24, 32), 13.33, 41.52, 0.0, 10.99, 18.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:24:58.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:24:32
2025-11-12T21:24:59.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:24:59.173 [DEBUG] [Thread-22986] [transport.py] [_log()] starting thread (client mode): 0x1739a470
2025-11-12T21:24:59.173 [DEBUG] [Thread-22986] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:24:59.192 [DEBUG] [Thread-22986] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:24:59.192 [INFO] [Thread-22986] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] client lang: <none>
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] server lang: <none>
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] kex follows: False
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] Compression: none
2025-11-12T21:24:59.195 [DEBUG] [Thread-22986] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:24:59.207 [DEBUG] [Thread-22986] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:24:59.208 [DEBUG] [Thread-22986] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:24:59.208 [DEBUG] [Thread-22986] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:24:59.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:24:59.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:24:59.208 [DEBUG] [Thread-22986] [transport.py] [_log()] userauth is OK
2025-11-12T21:24:59.208 [DEBUG] [Thread-22986] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:24:59.208 [DEBUG] [Thread-22986] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:24:59.208 [DEBUG] [Thread-22986] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:24:59.209 [DEBUG] [Thread-22986] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:24:59.224 [INFO] [Thread-22986] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:24:59.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:24:59.882 [DEBUG] [Thread-22986] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:24:59.882 [DEBUG] [Thread-22986] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:24:59.882 [DEBUG] [Thread-22986] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:24:59.923 [DEBUG] [Thread-22986] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:24:59.923 [DEBUG] [Thread-22986] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:24:59.925 [DEBUG] [Thread-22986] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:24:59.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:24:59.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:24:59.938 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:24:59.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:24:59.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:24:59.942 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:24:59.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:24:59.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.808764 -999.00  +18.30   5.78     45   +6.40 1 2 1 1 1     0    0 7.13 -222.65 ZNES. 7.0 5.8 224.9 10.9 19.0 -22.5 18.9 -21.7 18.8 -21.1 19.0 -21.6
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.808764
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:24:59.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:24:32', tmtdew=13.33, humidity=41.52, cloud=0.0, wind=10.99, temperature=18.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:24:33', seeing=0.97, atlas_timestamp='2025-11-12T19:24:37.210', atlas_cloud=2, atlas_rain=1, zp_data=[0.60025, 0.7792500000000002, 0.7852500000000004, 0.7344999999999997, 0.6995000000000005, 0.861250000000001, 0.7469999999999999, 0.3982500000000009, 0.6724999999999994, 0.7910000000000004, 0.8192499999999994, 0.6319999999999997, 0.7539999999999996, 1.5052500000000002, 1.5459999999999994, 0.6339999999999995, 0.9092500000000001, 0.6734999999999998, 1.363999999999999, 0.730249999999999, 1.5039999999999987, 2.401749999999999, nan, 0.9517500000000005, 0.8424999999999994, 1.3845, 1.5742500000000001, nan, nan, nan, nan, 1.4120000000000008, 0.87425], zp_timestamp='2025-11-12T19:22:00')
2025-11-12T21:24:59.944 [DEBUG] [Thread-22986] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:25:00.018 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:25:00.028 [DEBUG] [Thread-22989] [transport.py] [_log()] starting thread (client mode): 0x149a9b70
2025-11-12T21:25:00.028 [DEBUG] [Thread-22989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:25:00.043 [DEBUG] [Thread-22989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:25:00.043 [INFO] [Thread-22989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] client lang: <none>
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] server lang: <none>
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] kex follows: False
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:25:00.050 [DEBUG] [Thread-22989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:25:00.051 [DEBUG] [Thread-22989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:25:00.051 [DEBUG] [Thread-22989] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:25:00.051 [DEBUG] [Thread-22989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:25:00.051 [DEBUG] [Thread-22989] [transport.py] [_log()] Compression: none
2025-11-12T21:25:00.051 [DEBUG] [Thread-22989] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:25:00.108 [DEBUG] [Thread-22989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:25:00.108 [DEBUG] [Thread-22989] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:25:00.108 [DEBUG] [Thread-22989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:25:00.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:25:00.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:25:00.164 [DEBUG] [Thread-22989] [transport.py] [_log()] userauth is OK
2025-11-12T21:25:00.164 [DEBUG] [Thread-22989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:25:00.164 [DEBUG] [Thread-22989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:25:00.164 [DEBUG] [Thread-22989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:25:00.164 [DEBUG] [Thread-22989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:25:00.178 [INFO] [Thread-22989] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:25:00.178 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:25:00.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:25:00.987 [DEBUG] [Thread-22989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:25:00.987 [DEBUG] [Thread-22989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:25:01.035 [DEBUG] [Thread-22989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:25:01.035 [DEBUG] [Thread-22989] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:25:01.043 [DEBUG] [Thread-22989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:25:01.051 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:25:01.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-11-12T21:25:01.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-11-12T21:25:01.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:25:01.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:25:01.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:25:01.075 [DEBUG] [Thread-22989] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:25:02.366 [DEBUG] [Thread-22991 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:25:17.421 [DEBUG] [Thread-22992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:25:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:25:31.071 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:25:31.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-11-12T21:25:31.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 25, 4), 13.31, 41.56, 0.0, 12.44, 18.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:25:31.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:25:04
2025-11-12T21:25:31.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:25:32.011 [DEBUG] [Thread-22993] [transport.py] [_log()] starting thread (client mode): 0x1739b580
2025-11-12T21:25:32.011 [DEBUG] [Thread-22993] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:25:32.031 [DEBUG] [Thread-22993] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:25:32.031 [INFO] [Thread-22993] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] client lang: <none>
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] server lang: <none>
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] kex follows: False
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:25:32.034 [DEBUG] [Thread-22993] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:25:32.035 [DEBUG] [Thread-22993] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:25:32.035 [DEBUG] [Thread-22993] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:25:32.035 [DEBUG] [Thread-22993] [transport.py] [_log()] Compression: none
2025-11-12T21:25:32.035 [DEBUG] [Thread-22993] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:25:32.047 [DEBUG] [Thread-22993] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:25:32.047 [DEBUG] [Thread-22993] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:25:32.048 [DEBUG] [Thread-22993] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:25:32.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:25:32.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:25:32.050 [DEBUG] [Thread-22993] [transport.py] [_log()] userauth is OK
2025-11-12T21:25:32.050 [DEBUG] [Thread-22993] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:25:32.050 [DEBUG] [Thread-22993] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:25:32.050 [DEBUG] [Thread-22993] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:25:32.051 [DEBUG] [Thread-22993] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:25:32.069 [INFO] [Thread-22993] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:25:32.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:25:32.456 [DEBUG] [Thread-22995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:25:32.688 [DEBUG] [Thread-22993] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:25:32.688 [DEBUG] [Thread-22993] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:25:32.689 [DEBUG] [Thread-22993] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:25:32.729 [DEBUG] [Thread-22993] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:25:32.730 [DEBUG] [Thread-22993] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:25:32.731 [DEBUG] [Thread-22993] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:25:32.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:25:32.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:25:32.745 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:25:32.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:25:32.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:25:32.751 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:25:32.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:25:32.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:25:32.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:25:32.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.809111 -999.00  +18.30   9.47     46   +6.50 1 2 1 1 1     0    0 6.89 -229.73 ZNES. 9.1 9.5 216.6 13.5 19.0 -22.4 18.9 -21.8 18.7 -21.0 19.0 -21.6
2025-11-12T21:25:32.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:25:32.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:25:32.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.809111
2025-11-12T21:25:32.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:25:32.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:25:32.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:25:32.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:25:32.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:25:32.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:25:04', tmtdew=13.31, humidity=41.56, cloud=0.0, wind=12.44, temperature=18.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:25:05', seeing=1.11, atlas_timestamp='2025-11-12T19:25:07.190', atlas_cloud=2, atlas_rain=1, zp_data=[0.60025, 0.7792500000000002, 0.7852500000000004, 0.7344999999999997, 0.6995000000000005, 0.861250000000001, 0.7469999999999999, 0.3982500000000009, 0.6724999999999994, 0.7910000000000004, 0.8192499999999994, 0.6319999999999997, 0.7539999999999996, 1.5052500000000002, 1.5459999999999994, 0.6339999999999995, 0.9092500000000001, 0.6734999999999998, 1.363999999999999, 0.730249999999999, 1.5039999999999987, 2.401749999999999, nan, 0.9517500000000005, 0.8424999999999994, 1.3845, 1.5742500000000001, nan, nan, nan, nan, 1.4120000000000008, 0.87425], zp_timestamp='2025-11-12T19:22:00')
2025-11-12T21:25:32.753 [DEBUG] [Thread-22993] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:25:32.837 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:25:32.850 [DEBUG] [Thread-22997] [transport.py] [_log()] starting thread (client mode): 0x1739a830
2025-11-12T21:25:32.850 [DEBUG] [Thread-22997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:25:32.864 [DEBUG] [Thread-22997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:25:32.864 [INFO] [Thread-22997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] client lang: <none>
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] server lang: <none>
2025-11-12T21:25:32.872 [DEBUG] [Thread-22997] [transport.py] [_log()] kex follows: False
2025-11-12T21:25:32.873 [DEBUG] [Thread-22997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:25:32.873 [DEBUG] [Thread-22997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:25:32.873 [DEBUG] [Thread-22997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:25:32.873 [DEBUG] [Thread-22997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:25:32.873 [DEBUG] [Thread-22997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:25:32.873 [DEBUG] [Thread-22997] [transport.py] [_log()] Compression: none
2025-11-12T21:25:32.873 [DEBUG] [Thread-22997] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:25:32.933 [DEBUG] [Thread-22997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:25:32.934 [DEBUG] [Thread-22997] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:25:32.934 [DEBUG] [Thread-22997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:25:32.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:25:32.935 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:25:32.989 [DEBUG] [Thread-22997] [transport.py] [_log()] userauth is OK
2025-11-12T21:25:32.989 [DEBUG] [Thread-22997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:25:32.990 [DEBUG] [Thread-22997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:25:32.990 [DEBUG] [Thread-22997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:25:32.990 [DEBUG] [Thread-22997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:25:33.008 [INFO] [Thread-22997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:25:33.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:25:33.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:25:33.832 [DEBUG] [Thread-22997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:25:33.832 [DEBUG] [Thread-22997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:25:33.880 [DEBUG] [Thread-22997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:25:33.881 [DEBUG] [Thread-22997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:25:33.889 [DEBUG] [Thread-22997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:25:33.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:25:33.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-11-12T21:25:33.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-11-12T21:25:33.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:25:33.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:25:33.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:25:33.926 [DEBUG] [Thread-22997] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:25:47.490 [DEBUG] [Thread-22999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:25:48.345 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:25:48.346 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:25:55.324 [DEBUG] [Thread-23000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:26:02.546 [DEBUG] [Thread-23001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:26:03.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:26:03.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:26:03.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-11-12T21:26:04.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 25, 36), 13.12, 41.69, 0.0, 13.46, 18.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:26:04.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:25:36
2025-11-12T21:26:04.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:26:04.843 [DEBUG] [Thread-23002] [transport.py] [_log()] starting thread (client mode): 0x14904160
2025-11-12T21:26:04.843 [DEBUG] [Thread-23002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:26:04.863 [DEBUG] [Thread-23002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:26:04.864 [INFO] [Thread-23002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:26:04.867 [DEBUG] [Thread-23002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:26:04.867 [DEBUG] [Thread-23002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:26:04.867 [DEBUG] [Thread-23002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:26:04.867 [DEBUG] [Thread-23002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:26:04.867 [DEBUG] [Thread-23002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:26:04.867 [DEBUG] [Thread-23002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:26:04.867 [DEBUG] [Thread-23002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] client lang: <none>
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] server lang: <none>
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] kex follows: False
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] Compression: none
2025-11-12T21:26:04.868 [DEBUG] [Thread-23002] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:26:04.886 [DEBUG] [Thread-23002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:26:04.887 [DEBUG] [Thread-23002] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:26:04.888 [DEBUG] [Thread-23002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:26:04.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:26:04.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:26:04.889 [DEBUG] [Thread-23002] [transport.py] [_log()] userauth is OK
2025-11-12T21:26:04.890 [DEBUG] [Thread-23002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:26:04.890 [DEBUG] [Thread-23002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:26:04.890 [DEBUG] [Thread-23002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:26:04.890 [DEBUG] [Thread-23002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:26:04.915 [INFO] [Thread-23002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:26:04.916 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:26:05.682 [DEBUG] [Thread-23002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:26:05.682 [DEBUG] [Thread-23002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:26:05.682 [DEBUG] [Thread-23002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:26:05.722 [DEBUG] [Thread-23002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:26:05.723 [DEBUG] [Thread-23002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:26:05.725 [DEBUG] [Thread-23002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:26:05.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:26:05.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:26:05.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:26:05.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:26:05.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:26:05.748 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:26:05.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:26:05.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:26:05.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:26:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.809111 -999.00  +18.30   9.47     46   +6.50 1 2 1 1 1     0    0 6.89 -229.73 ZNES. 9.1 9.5 216.6 13.5 19.0 -22.4 18.9 -21.8 18.7 -21.0 19.0 -21.6
2025-11-12T21:26:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:26:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:26:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.809111
2025-11-12T21:26:05.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:26:05.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:26:05.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:26:05.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:26:05.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:26:05.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:25:36', tmtdew=13.12, humidity=41.69, cloud=0.0, wind=13.46, temperature=18.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:25:37', seeing=1.09, atlas_timestamp='2025-11-12T19:25:07.190', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:25:00')
2025-11-12T21:26:05.750 [DEBUG] [Thread-23002] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:26:05.834 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:26:05.848 [DEBUG] [Thread-23005] [transport.py] [_log()] starting thread (client mode): 0x14906980
2025-11-12T21:26:05.848 [DEBUG] [Thread-23005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:26:05.862 [DEBUG] [Thread-23005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:26:05.863 [INFO] [Thread-23005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] client lang: <none>
2025-11-12T21:26:05.870 [DEBUG] [Thread-23005] [transport.py] [_log()] server lang: <none>
2025-11-12T21:26:05.871 [DEBUG] [Thread-23005] [transport.py] [_log()] kex follows: False
2025-11-12T21:26:05.871 [DEBUG] [Thread-23005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:26:05.871 [DEBUG] [Thread-23005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:26:05.871 [DEBUG] [Thread-23005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:26:05.871 [DEBUG] [Thread-23005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:26:05.871 [DEBUG] [Thread-23005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:26:05.871 [DEBUG] [Thread-23005] [transport.py] [_log()] Compression: none
2025-11-12T21:26:05.871 [DEBUG] [Thread-23005] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:26:05.929 [DEBUG] [Thread-23005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:26:05.930 [DEBUG] [Thread-23005] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:26:05.931 [DEBUG] [Thread-23005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:26:05.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:26:05.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:26:05.985 [DEBUG] [Thread-23005] [transport.py] [_log()] userauth is OK
2025-11-12T21:26:05.986 [DEBUG] [Thread-23005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:26:05.986 [DEBUG] [Thread-23005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:26:05.986 [DEBUG] [Thread-23005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:26:05.986 [DEBUG] [Thread-23005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:26:06.005 [INFO] [Thread-23005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:26:06.005 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:26:06.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:26:06.819 [DEBUG] [Thread-23005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:26:06.819 [DEBUG] [Thread-23005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:26:06.867 [DEBUG] [Thread-23005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:26:06.867 [DEBUG] [Thread-23005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:26:06.876 [DEBUG] [Thread-23005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:26:06.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:26:06.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-11-12T21:26:06.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:26:06.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:26:06.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:26:06.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:26:06.912 [DEBUG] [Thread-23005] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:26:17.576 [DEBUG] [Thread-23007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:26:32.614 [DEBUG] [Thread-23008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:26:36.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:26:36.935 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:26:36.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-11-12T21:26:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 26, 8), 13.09, 41.77, 0.0, 14.36, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:26:37.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:26:08
2025-11-12T21:26:37.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:26:37.836 [DEBUG] [Thread-23009] [transport.py] [_log()] starting thread (client mode): 0x1739a830
2025-11-12T21:26:37.837 [DEBUG] [Thread-23009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:26:37.856 [DEBUG] [Thread-23009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:26:37.856 [INFO] [Thread-23009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:26:37.859 [DEBUG] [Thread-23009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:26:37.859 [DEBUG] [Thread-23009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:26:37.859 [DEBUG] [Thread-23009] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:26:37.859 [DEBUG] [Thread-23009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] client lang: <none>
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] server lang: <none>
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] kex follows: False
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] Compression: none
2025-11-12T21:26:37.860 [DEBUG] [Thread-23009] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:26:37.879 [DEBUG] [Thread-23009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:26:37.880 [DEBUG] [Thread-23009] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:26:37.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:26:37.880 [DEBUG] [Thread-23009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:26:37.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:26:37.883 [DEBUG] [Thread-23009] [transport.py] [_log()] userauth is OK
2025-11-12T21:26:37.883 [DEBUG] [Thread-23009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:26:37.883 [DEBUG] [Thread-23009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:26:37.883 [DEBUG] [Thread-23009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:26:37.884 [DEBUG] [Thread-23009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:26:37.904 [INFO] [Thread-23009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:26:37.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:26:38.509 [DEBUG] [Thread-23009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:26:38.509 [DEBUG] [Thread-23009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:26:38.509 [DEBUG] [Thread-23009] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:26:38.550 [DEBUG] [Thread-23009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:26:38.551 [DEBUG] [Thread-23009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:26:38.553 [DEBUG] [Thread-23009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:26:38.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:26:38.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:26:38.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:26:38.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:26:38.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:26:38.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:26:38.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:26:38.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:26:38.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:26:38.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.809459 -999.00  +18.30   4.87     46   +6.50 1 2 1 1 1     0    0 6.23 -247.66 ZnES. 6.5 4.9 253.4 12.5 18.9 -22.5 18.9 -21.5 18.7 -21.1 19.0 -21.6
2025-11-12T21:26:38.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:26:38.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:26:38.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.809459
2025-11-12T21:26:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:26:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:26:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:26:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:26:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:26:38.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:26:08', tmtdew=13.09, humidity=41.77, cloud=0.0, wind=14.36, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:26:09', seeing=1.09, atlas_timestamp='2025-11-12T19:25:37.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:25:00')
2025-11-12T21:26:38.579 [DEBUG] [Thread-23009] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:26:38.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:26:38.674 [DEBUG] [Thread-23012] [transport.py] [_log()] starting thread (client mode): 0x1739a5c0
2025-11-12T21:26:38.674 [DEBUG] [Thread-23012] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:26:38.693 [DEBUG] [Thread-23012] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:26:38.693 [INFO] [Thread-23012] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:26:38.701 [DEBUG] [Thread-23012] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:26:38.701 [DEBUG] [Thread-23012] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:26:38.701 [DEBUG] [Thread-23012] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:26:38.701 [DEBUG] [Thread-23012] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] client lang: <none>
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] server lang: <none>
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] kex follows: False
2025-11-12T21:26:38.702 [DEBUG] [Thread-23012] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:26:38.703 [DEBUG] [Thread-23012] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:26:38.703 [DEBUG] [Thread-23012] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:26:38.703 [DEBUG] [Thread-23012] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:26:38.703 [DEBUG] [Thread-23012] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:26:38.703 [DEBUG] [Thread-23012] [transport.py] [_log()] Compression: none
2025-11-12T21:26:38.703 [DEBUG] [Thread-23012] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:26:38.761 [DEBUG] [Thread-23012] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:26:38.762 [DEBUG] [Thread-23012] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:26:38.763 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:26:38.763 [DEBUG] [Thread-23012] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:26:38.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:26:38.821 [DEBUG] [Thread-23012] [transport.py] [_log()] userauth is OK
2025-11-12T21:26:38.821 [DEBUG] [Thread-23012] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:26:38.822 [DEBUG] [Thread-23012] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:26:38.822 [DEBUG] [Thread-23012] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:26:38.822 [DEBUG] [Thread-23012] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:26:38.841 [INFO] [Thread-23012] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:26:38.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:26:38.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:26:39.690 [DEBUG] [Thread-23012] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:26:39.690 [DEBUG] [Thread-23012] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:26:39.739 [DEBUG] [Thread-23012] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:26:39.739 [DEBUG] [Thread-23012] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:26:39.749 [DEBUG] [Thread-23012] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:26:39.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:26:39.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-11-12T21:26:39.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-11-12T21:26:39.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:26:39.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:26:39.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:26:39.789 [DEBUG] [Thread-23012] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:26:47.650 [DEBUG] [Thread-23014 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:26:48.551 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:26:48.552 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:26:55.376 [DEBUG] [Thread-23015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:27:02.701 [DEBUG] [Thread-23016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:27:09.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:27:09.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:27:09.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-11-12T21:27:10.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 26, 40), 13.07, 42.34, 0.0, 14.13, 18.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:27:10.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:26:40
2025-11-12T21:27:10.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:27:10.731 [DEBUG] [Thread-23017] [transport.py] [_log()] starting thread (client mode): 0x1739a6e0
2025-11-12T21:27:10.731 [DEBUG] [Thread-23017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:27:10.751 [DEBUG] [Thread-23017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:27:10.752 [INFO] [Thread-23017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] client lang: <none>
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] server lang: <none>
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] kex follows: False
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:27:10.755 [DEBUG] [Thread-23017] [transport.py] [_log()] Compression: none
2025-11-12T21:27:10.756 [DEBUG] [Thread-23017] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:27:10.774 [DEBUG] [Thread-23017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:27:10.775 [DEBUG] [Thread-23017] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:27:10.775 [DEBUG] [Thread-23017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:27:10.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:27:10.776 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:27:10.777 [DEBUG] [Thread-23017] [transport.py] [_log()] userauth is OK
2025-11-12T21:27:10.777 [DEBUG] [Thread-23017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:27:10.777 [DEBUG] [Thread-23017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:27:10.777 [DEBUG] [Thread-23017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:27:10.777 [DEBUG] [Thread-23017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:27:10.801 [INFO] [Thread-23017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:27:10.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:27:11.573 [DEBUG] [Thread-23017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:27:11.574 [DEBUG] [Thread-23017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:27:11.574 [DEBUG] [Thread-23017] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:27:11.615 [DEBUG] [Thread-23017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:27:11.615 [DEBUG] [Thread-23017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:27:11.618 [DEBUG] [Thread-23017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:27:11.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:27:11.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:27:11.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:27:11.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:27:11.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:27:11.642 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:27:11.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:27:11.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:27:11.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:27:11.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.810153 -999.00  +18.30   3.11     46   +6.60 1 2 1 1 1     0    0 5.75 -258.29 Z.ES. 8.3 3.1 147.1 11.2 18.9 -22.6 18.9 -21.7 18.6 -21.0 18.9 -21.6
2025-11-12T21:27:11.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:27:11.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:27:11.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.810153
2025-11-12T21:27:11.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:27:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:27:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:27:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:27:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:27:11.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:26:40', tmtdew=13.07, humidity=42.34, cloud=0.0, wind=14.13, temperature=18.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:26:41', seeing=0.95, atlas_timestamp='2025-11-12T19:26:37.219', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:25:00')
2025-11-12T21:27:11.644 [DEBUG] [Thread-23017] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:27:11.727 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:27:11.740 [DEBUG] [Thread-23020] [transport.py] [_log()] starting thread (client mode): 0x14920b20
2025-11-12T21:27:11.740 [DEBUG] [Thread-23020] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:27:11.755 [DEBUG] [Thread-23020] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:27:11.755 [INFO] [Thread-23020] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:27:11.763 [DEBUG] [Thread-23020] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:27:11.763 [DEBUG] [Thread-23020] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:27:11.763 [DEBUG] [Thread-23020] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:27:11.763 [DEBUG] [Thread-23020] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:27:11.763 [DEBUG] [Thread-23020] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:27:11.763 [DEBUG] [Thread-23020] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] client lang: <none>
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] server lang: <none>
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] kex follows: False
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] Compression: none
2025-11-12T21:27:11.764 [DEBUG] [Thread-23020] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:27:11.822 [DEBUG] [Thread-23020] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:27:11.823 [DEBUG] [Thread-23020] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:27:11.824 [DEBUG] [Thread-23020] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:27:11.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:27:11.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:27:11.881 [DEBUG] [Thread-23020] [transport.py] [_log()] userauth is OK
2025-11-12T21:27:11.882 [DEBUG] [Thread-23020] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:27:11.882 [DEBUG] [Thread-23020] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:27:11.882 [DEBUG] [Thread-23020] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:27:11.882 [DEBUG] [Thread-23020] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:27:11.902 [INFO] [Thread-23020] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:27:11.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:27:11.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:27:12.770 [DEBUG] [Thread-23020] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:27:12.770 [DEBUG] [Thread-23020] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:27:12.819 [DEBUG] [Thread-23020] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:27:12.819 [DEBUG] [Thread-23020] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:27:12.828 [DEBUG] [Thread-23020] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:27:12.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:27:12.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-11-12T21:27: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') -> 00000000
2025-11-12T21:27:12.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:27:12.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:27:12.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:27:12.865 [DEBUG] [Thread-23020] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:27:17.739 [DEBUG] [Thread-23022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:27:32.789 [DEBUG] [Thread-23023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:27:42.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:27:42.888 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:27:42.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-11-12T21:27:43.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 27, 12), 13.04, 42.42, 0.0, 14.65, 18.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:27:43.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:27:12
2025-11-12T21:27:43.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:27:43.804 [DEBUG] [Thread-23024] [transport.py] [_log()] starting thread (client mode): 0x11f02170
2025-11-12T21:27:43.804 [DEBUG] [Thread-23024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:27:43.824 [DEBUG] [Thread-23024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:27:43.824 [INFO] [Thread-23024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] client lang: <none>
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] server lang: <none>
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] kex follows: False
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:27:43.827 [DEBUG] [Thread-23024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:27:43.828 [DEBUG] [Thread-23024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:27:43.828 [DEBUG] [Thread-23024] [transport.py] [_log()] Compression: none
2025-11-12T21:27:43.828 [DEBUG] [Thread-23024] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:27:43.844 [DEBUG] [Thread-23024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:27:43.844 [DEBUG] [Thread-23024] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:27:43.845 [DEBUG] [Thread-23024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:27:43.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:27:43.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:27:43.847 [DEBUG] [Thread-23024] [transport.py] [_log()] userauth is OK
2025-11-12T21:27:43.847 [DEBUG] [Thread-23024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:27:43.847 [DEBUG] [Thread-23024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:27:43.847 [DEBUG] [Thread-23024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:27:43.847 [DEBUG] [Thread-23024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:27:43.881 [INFO] [Thread-23024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:27:43.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:27:44.505 [DEBUG] [Thread-23024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:27:44.505 [DEBUG] [Thread-23024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:27:44.506 [DEBUG] [Thread-23024] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:27:44.546 [DEBUG] [Thread-23024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:27:44.546 [DEBUG] [Thread-23024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:27:44.550 [DEBUG] [Thread-23024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:27:44.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:27:44.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:27:44.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:27:44.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:27:44.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:27:44.575 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:27:44.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:27:44.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:27:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:27:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.810500 -999.00  +18.20   8.24     46   +6.50 1 2 1 1 1     0    0 6.89 -214.16 Z.ES. 8.4 8.2 204.0 10.1 18.9 -22.6 18.9 -21.6 18.6 -21.1 18.9 -21.5
2025-11-12T21:27:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:27:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:27:44.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.810500
2025-11-12T21:27:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:27:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:27:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:27:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:27:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:27:44.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:27:12', tmtdew=13.04, humidity=42.42, cloud=0.0, wind=14.65, temperature=18.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:27:13', seeing=0.96, atlas_timestamp='2025-11-12T19:27:07.200', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:25:00')
2025-11-12T21:27:44.578 [DEBUG] [Thread-23024] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:27:44.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:27:44.674 [DEBUG] [Thread-23027] [transport.py] [_log()] starting thread (client mode): 0x14915390
2025-11-12T21:27:44.674 [DEBUG] [Thread-23027] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:27:44.689 [DEBUG] [Thread-23027] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:27:44.690 [INFO] [Thread-23027] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:27:44.697 [DEBUG] [Thread-23027] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] client lang: <none>
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] server lang: <none>
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] kex follows: False
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] Compression: none
2025-11-12T21:27:44.698 [DEBUG] [Thread-23027] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:27:44.757 [DEBUG] [Thread-23027] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:27:44.757 [DEBUG] [Thread-23027] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:27:44.758 [DEBUG] [Thread-23027] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:27:44.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:27:44.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:27:44.813 [DEBUG] [Thread-23027] [transport.py] [_log()] userauth is OK
2025-11-12T21:27:44.813 [DEBUG] [Thread-23027] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:27:44.814 [DEBUG] [Thread-23027] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:27:44.814 [DEBUG] [Thread-23027] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:27:44.814 [DEBUG] [Thread-23027] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:27:44.835 [INFO] [Thread-23027] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:27:44.835 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:27:44.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:27:45.668 [DEBUG] [Thread-23027] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:27:45.669 [DEBUG] [Thread-23027] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:27:45.717 [DEBUG] [Thread-23027] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:27:45.717 [DEBUG] [Thread-23027] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:27:45.725 [DEBUG] [Thread-23027] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:27:45.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:27:45.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:27:45.740 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:27:45.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:27:45.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:27:45.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:27:45.756 [DEBUG] [Thread-23027] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:27:47.821 [DEBUG] [Thread-23029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:27:48.759 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:27:48.760 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:27:55.445 [DEBUG] [Thread-23030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:28:02.872 [DEBUG] [Thread-23031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:28:15.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:28:15.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:28:15.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:28:16.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 27, 44), 12.98, 42.45, 0.0, 12.49, 18.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:28:16.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:27:44
2025-11-12T21:28:16.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:28:16.688 [DEBUG] [Thread-23032] [transport.py] [_log()] starting thread (client mode): 0x17398100
2025-11-12T21:28:16.688 [DEBUG] [Thread-23032] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:28:16.704 [DEBUG] [Thread-23032] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:28:16.704 [INFO] [Thread-23032] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:28:16.705 [DEBUG] [Thread-23032] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] client lang: <none>
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] server lang: <none>
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] kex follows: False
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] Compression: none
2025-11-12T21:28:16.706 [DEBUG] [Thread-23032] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:28:16.715 [DEBUG] [Thread-23032] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:28:16.715 [DEBUG] [Thread-23032] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:28:16.715 [DEBUG] [Thread-23032] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:28:16.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:28:16.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:28:16.716 [DEBUG] [Thread-23032] [transport.py] [_log()] userauth is OK
2025-11-12T21:28:16.716 [DEBUG] [Thread-23032] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:28:16.717 [DEBUG] [Thread-23032] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:28:16.717 [DEBUG] [Thread-23032] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:28:16.717 [DEBUG] [Thread-23032] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:28:16.750 [INFO] [Thread-23032] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:28:16.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:28:17.482 [DEBUG] [Thread-23032] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:28:17.483 [DEBUG] [Thread-23032] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:28:17.483 [DEBUG] [Thread-23032] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:28:17.524 [DEBUG] [Thread-23032] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:28:17.524 [DEBUG] [Thread-23032] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:28:17.526 [DEBUG] [Thread-23032] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:28:17.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:28:17.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:28:17.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:28:17.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:28:17.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:28:17.543 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:28:17.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:28:17.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:28:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:28:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.810848 -999.00  +18.20   4.88     46   +6.50 1 2 1 1 1     0    0 7.44 -202.96 ZnES. 7.6 4.9 191.2 9.9 18.9 -22.5 18.9 -21.6 18.6 -20.9 18.9 -21.5
2025-11-12T21:28:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:28:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:28:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.810848
2025-11-12T21:28:17.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:28:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:28:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:28:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:28:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:28:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:27:44', tmtdew=12.98, humidity=42.45, cloud=0.0, wind=12.49, temperature=18.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:27:45', seeing=0.96, atlas_timestamp='2025-11-12T19:27:37.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:25:00')
2025-11-12T21:28:17.544 [DEBUG] [Thread-23032] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:28:17.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:28:17.632 [DEBUG] [Thread-23035] [transport.py] [_log()] starting thread (client mode): 0x14917c40
2025-11-12T21:28:17.632 [DEBUG] [Thread-23035] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:28:17.648 [DEBUG] [Thread-23035] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:28:17.648 [INFO] [Thread-23035] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:28:17.655 [DEBUG] [Thread-23035] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:28:17.655 [DEBUG] [Thread-23035] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:28:17.655 [DEBUG] [Thread-23035] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:28:17.655 [DEBUG] [Thread-23035] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:28:17.655 [DEBUG] [Thread-23035] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] client lang: <none>
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] server lang: <none>
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] kex follows: False
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] Compression: none
2025-11-12T21:28:17.656 [DEBUG] [Thread-23035] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:28:17.712 [DEBUG] [Thread-23035] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:28:17.712 [DEBUG] [Thread-23035] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:28:17.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:28:17.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:28:17.712 [DEBUG] [Thread-23035] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:28:17.769 [DEBUG] [Thread-23035] [transport.py] [_log()] userauth is OK
2025-11-12T21:28:17.769 [DEBUG] [Thread-23035] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:28:17.769 [DEBUG] [Thread-23035] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:28:17.769 [DEBUG] [Thread-23035] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:28:17.769 [DEBUG] [Thread-23035] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:28:17.783 [INFO] [Thread-23035] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:28:17.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:28:17.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:28:17.903 [DEBUG] [Thread-23037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:28:18.650 [DEBUG] [Thread-23035] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:28:18.650 [DEBUG] [Thread-23035] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:28:18.698 [DEBUG] [Thread-23035] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:28:18.698 [DEBUG] [Thread-23035] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:28:18.706 [DEBUG] [Thread-23035] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:28:18.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:28:18.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-11-12T21:28:18.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-11-12T21:28:18.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:28:18.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:28:18.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:28:18.737 [DEBUG] [Thread-23035] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:28:32.943 [DEBUG] [Thread-23038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:28:47.979 [DEBUG] [Thread-23039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:28:48.750 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:28:48.750 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:28:48.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:28:48.965 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:28:48.966 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:28:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 28, 16), 12.96, 42.5, 0.0, 11.52, 18.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:28:49.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:28:16
2025-11-12T21:28:49.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:28:49.784 [DEBUG] [Thread-23040] [transport.py] [_log()] starting thread (client mode): 0x1739a6e0
2025-11-12T21:28:49.784 [DEBUG] [Thread-23040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:28:49.804 [DEBUG] [Thread-23040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:28:49.804 [INFO] [Thread-23040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] client lang: <none>
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] server lang: <none>
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] kex follows: False
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] Compression: none
2025-11-12T21:28:49.808 [DEBUG] [Thread-23040] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:28:49.824 [DEBUG] [Thread-23040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:28:49.824 [DEBUG] [Thread-23040] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:28:49.824 [DEBUG] [Thread-23040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:28:49.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:28:49.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:28:49.825 [DEBUG] [Thread-23040] [transport.py] [_log()] userauth is OK
2025-11-12T21:28:49.825 [DEBUG] [Thread-23040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:28:49.825 [DEBUG] [Thread-23040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:28:49.825 [DEBUG] [Thread-23040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:28:49.825 [DEBUG] [Thread-23040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:28:49.844 [INFO] [Thread-23040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:28:49.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:28:50.460 [DEBUG] [Thread-23040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:28:50.460 [DEBUG] [Thread-23040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:28:50.460 [DEBUG] [Thread-23040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:28:50.501 [DEBUG] [Thread-23040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:28:50.501 [DEBUG] [Thread-23040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:28:50.503 [DEBUG] [Thread-23040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:28:50.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:28:50.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:28:50.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:28:50.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:28:50.519 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:28:50.519 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:28:50.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.811195 -999.00  +18.20   6.93     46   +6.50 1 2 1 1 1     0    0 7.17 -203.89 ZnES. 7.3 6.9 208.2 9.4 18.9 -22.5 18.8 -21.5 18.6 -20.9 18.9 -21.6
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.811195
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:28:50.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:28:16', tmtdew=12.96, humidity=42.5, cloud=0.0, wind=11.52, temperature=18.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:28:17', seeing=1.03, atlas_timestamp='2025-11-12T19:28:07.248', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:25:00')
2025-11-12T21:28:50.521 [DEBUG] [Thread-23040] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:28:50.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:28:50.606 [DEBUG] [Thread-23043] [transport.py] [_log()] starting thread (client mode): 0x149230d0
2025-11-12T21:28:50.606 [DEBUG] [Thread-23043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:28:50.624 [DEBUG] [Thread-23043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:28:50.624 [INFO] [Thread-23043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:28:50.631 [DEBUG] [Thread-23043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:28:50.631 [DEBUG] [Thread-23043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:28:50.631 [DEBUG] [Thread-23043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:28:50.631 [DEBUG] [Thread-23043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:28:50.631 [DEBUG] [Thread-23043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:28:50.631 [DEBUG] [Thread-23043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:28:50.631 [DEBUG] [Thread-23043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] client lang: <none>
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] server lang: <none>
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] kex follows: False
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] Compression: none
2025-11-12T21:28:50.632 [DEBUG] [Thread-23043] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:28:50.687 [DEBUG] [Thread-23043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:28:50.688 [DEBUG] [Thread-23043] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:28:50.688 [DEBUG] [Thread-23043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:28:50.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:28:50.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:28:50.745 [DEBUG] [Thread-23043] [transport.py] [_log()] userauth is OK
2025-11-12T21:28:50.745 [DEBUG] [Thread-23043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:28:50.745 [DEBUG] [Thread-23043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:28:50.745 [DEBUG] [Thread-23043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:28:50.745 [DEBUG] [Thread-23043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:28:50.760 [INFO] [Thread-23043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:28:50.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:28:50.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:28:51.604 [DEBUG] [Thread-23043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:28:51.604 [DEBUG] [Thread-23043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:28:51.652 [DEBUG] [Thread-23043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:28:51.652 [DEBUG] [Thread-23043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:28:51.660 [DEBUG] [Thread-23043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:28:51.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:28:51.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-11-12T21:28:51.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-11-12T21:28:51.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:28:51.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:28:51.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:28:51.692 [DEBUG] [Thread-23043] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:28:55.501 [DEBUG] [Thread-23045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:29:03.017 [DEBUG] [Thread-23046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:29:18.081 [DEBUG] [Thread-23047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:29:21.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:29:21.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:29:21.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-11-12T21:29:22.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 28, 48), 12.93, 42.44, 0.0, 8.88, 18.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:29:22.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:28:48
2025-11-12T21:29:22.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:29:22.692 [DEBUG] [Thread-23048] [transport.py] [_log()] starting thread (client mode): 0x17344f10
2025-11-12T21:29:22.692 [DEBUG] [Thread-23048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:29:22.713 [DEBUG] [Thread-23048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:29:22.713 [INFO] [Thread-23048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] client lang: <none>
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] server lang: <none>
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] kex follows: False
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] Compression: none
2025-11-12T21:29:22.716 [DEBUG] [Thread-23048] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:29:22.732 [DEBUG] [Thread-23048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:29:22.732 [DEBUG] [Thread-23048] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:29:22.732 [DEBUG] [Thread-23048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:29:22.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:29:22.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:29:22.732 [DEBUG] [Thread-23048] [transport.py] [_log()] userauth is OK
2025-11-12T21:29:22.732 [DEBUG] [Thread-23048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:29:22.732 [DEBUG] [Thread-23048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:29:22.733 [DEBUG] [Thread-23048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:29:22.733 [DEBUG] [Thread-23048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:29:22.741 [INFO] [Thread-23048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:29:22.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:29:23.371 [DEBUG] [Thread-23048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:29:23.371 [DEBUG] [Thread-23048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:29:23.371 [DEBUG] [Thread-23048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:29:23.412 [DEBUG] [Thread-23048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:29:23.413 [DEBUG] [Thread-23048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:29:23.416 [DEBUG] [Thread-23048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:29:23.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:29:23.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:29:23.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:29:23.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:29:23.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:29:23.437 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:29:23.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:29:23.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:29:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:29:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.811542 -999.00  +18.20   5.41     46   +6.60 1 2 1 1 1     0    0 7.40 -195.17 Z.ES. 6.1 5.4 216.2 9.4 18.9 -22.5 18.9 -21.5 18.6 -20.8 18.9 -21.4
2025-11-12T21:29:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:29:23.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:29:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.811542
2025-11-12T21:29:23.439 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:29:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:29:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:29:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:29:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:29:23.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:28:48', tmtdew=12.93, humidity=42.44, cloud=0.0, wind=8.88, temperature=18.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:29:21', seeing=0.86, atlas_timestamp='2025-11-12T19:28:37.229', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:28:00')
2025-11-12T21:29:23.440 [DEBUG] [Thread-23048] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:29:23.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:29:23.536 [DEBUG] [Thread-23051] [transport.py] [_log()] starting thread (client mode): 0x11f00a30
2025-11-12T21:29:23.536 [DEBUG] [Thread-23051] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:29:23.554 [DEBUG] [Thread-23051] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:29:23.555 [INFO] [Thread-23051] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:29:23.562 [DEBUG] [Thread-23051] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:29:23.562 [DEBUG] [Thread-23051] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:29:23.562 [DEBUG] [Thread-23051] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:29:23.562 [DEBUG] [Thread-23051] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:29:23.562 [DEBUG] [Thread-23051] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] client lang: <none>
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] server lang: <none>
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] kex follows: False
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] Compression: none
2025-11-12T21:29:23.563 [DEBUG] [Thread-23051] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:29:23.621 [DEBUG] [Thread-23051] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:29:23.621 [DEBUG] [Thread-23051] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:29:23.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:29:23.623 [DEBUG] [Thread-23051] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:29:23.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:29:23.677 [DEBUG] [Thread-23051] [transport.py] [_log()] userauth is OK
2025-11-12T21:29:23.677 [DEBUG] [Thread-23051] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:29:23.678 [DEBUG] [Thread-23051] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:29:23.678 [DEBUG] [Thread-23051] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:29:23.678 [DEBUG] [Thread-23051] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:29:23.697 [INFO] [Thread-23051] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:29:23.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:29:23.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:29:24.566 [DEBUG] [Thread-23051] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:29:24.566 [DEBUG] [Thread-23051] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:29:24.614 [DEBUG] [Thread-23051] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:29:24.614 [DEBUG] [Thread-23051] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:29:24.623 [DEBUG] [Thread-23051] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:29:24.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21: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-11-12T21: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-11-12T21:29:24.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:29:24.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:29:24.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:29:24.660 [DEBUG] [Thread-23051] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:29:33.109 [DEBUG] [Thread-23053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:29:48.151 [DEBUG] [Thread-23054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:29:49.167 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:29:49.168 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:29:54.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:29:54.669 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:29:54.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-11-12T21:29:55.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 29, 20), 12.88, 42.57, 0.0, 10.83, 17.99, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:29:55.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:29:20
2025-11-12T21:29:55.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:29:55.554 [DEBUG] [Thread-23055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:29:55.623 [DEBUG] [Thread-23056] [transport.py] [_log()] starting thread (client mode): 0x173bff70
2025-11-12T21:29:55.623 [DEBUG] [Thread-23056] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:29:55.641 [DEBUG] [Thread-23056] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:29:55.642 [INFO] [Thread-23056] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] client lang: <none>
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] server lang: <none>
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] kex follows: False
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] Compression: none
2025-11-12T21:29:55.645 [DEBUG] [Thread-23056] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:29:55.662 [DEBUG] [Thread-23056] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:29:55.663 [DEBUG] [Thread-23056] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:29:55.663 [DEBUG] [Thread-23056] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:29:55.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:29:55.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:29:55.665 [DEBUG] [Thread-23056] [transport.py] [_log()] userauth is OK
2025-11-12T21:29:55.665 [DEBUG] [Thread-23056] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:29:55.665 [DEBUG] [Thread-23056] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:29:55.665 [DEBUG] [Thread-23056] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:29:55.665 [DEBUG] [Thread-23056] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:29:55.691 [INFO] [Thread-23056] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:29:55.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:29:56.309 [DEBUG] [Thread-23056] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:29:56.309 [DEBUG] [Thread-23056] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:29:56.309 [DEBUG] [Thread-23056] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:29:56.349 [DEBUG] [Thread-23056] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:29:56.349 [DEBUG] [Thread-23056] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:29:56.352 [DEBUG] [Thread-23056] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:29:56.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:29:56.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:29:56.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:29:56.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:29:56.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:29:56.375 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:29:56.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:29:56.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:29:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:29:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.811889 -999.00  +18.10   8.24     46   +6.50 1 2 1 1 1     0    0 7.05 -204.78 Z.ES. 6.6 8.2 208.4 9.8 18.9 -22.5 18.8 -21.5 18.6 -20.8 18.8 -21.5
2025-11-12T21:29:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:29:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:29:56.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.811889
2025-11-12T21:29:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:29:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:29:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:29:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:29:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:29:56.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:29:20', tmtdew=12.88, humidity=42.57, cloud=0.0, wind=10.83, temperature=17.99, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:29:53', seeing=0.86, atlas_timestamp='2025-11-12T19:29:07.210', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:28:00')
2025-11-12T21:29:56.378 [DEBUG] [Thread-23056] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:29:56.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:29:56.473 [DEBUG] [Thread-23059] [transport.py] [_log()] starting thread (client mode): 0x173be440
2025-11-12T21:29:56.473 [DEBUG] [Thread-23059] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:29:56.488 [DEBUG] [Thread-23059] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:29:56.488 [INFO] [Thread-23059] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:29:56.496 [DEBUG] [Thread-23059] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:29:56.496 [DEBUG] [Thread-23059] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:29:56.496 [DEBUG] [Thread-23059] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:29:56.496 [DEBUG] [Thread-23059] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:29:56.496 [DEBUG] [Thread-23059] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:29:56.496 [DEBUG] [Thread-23059] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] client lang: <none>
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] server lang: <none>
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] kex follows: False
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] Compression: none
2025-11-12T21:29:56.497 [DEBUG] [Thread-23059] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:29:56.552 [DEBUG] [Thread-23059] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:29:56.553 [DEBUG] [Thread-23059] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:29:56.553 [DEBUG] [Thread-23059] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:29:56.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:29:56.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:29:56.609 [DEBUG] [Thread-23059] [transport.py] [_log()] userauth is OK
2025-11-12T21:29:56.609 [DEBUG] [Thread-23059] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:29:56.609 [DEBUG] [Thread-23059] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:29:56.609 [DEBUG] [Thread-23059] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:29:56.609 [DEBUG] [Thread-23059] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:29:56.625 [INFO] [Thread-23059] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:29:56.626 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:29:56.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:29:57.439 [DEBUG] [Thread-23059] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:29:57.439 [DEBUG] [Thread-23059] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:29:57.486 [DEBUG] [Thread-23059] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:29:57.486 [DEBUG] [Thread-23059] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:29:57.495 [DEBUG] [Thread-23059] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:29:57.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:29:57.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-11-12T21:29: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') -> 00000000
2025-11-12T21:29:57.522 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:29:57.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:29:57.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:29:57.531 [DEBUG] [Thread-23059] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:30:03.187 [DEBUG] [Thread-23061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:30:18.244 [DEBUG] [Thread-23062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:30:27.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:30:27.531 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:30:27.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-11-12T21:30:28.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 30, 24), 12.89, 42.69, 0.0, 10.02, 17.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:30:28.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:30:24
2025-11-12T21:30:28.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:30:28.472 [DEBUG] [Thread-23063] [transport.py] [_log()] starting thread (client mode): 0x17399ff0
2025-11-12T21:30:28.473 [DEBUG] [Thread-23063] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:30:28.493 [DEBUG] [Thread-23063] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:30:28.493 [INFO] [Thread-23063] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:30:28.496 [DEBUG] [Thread-23063] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:30:28.496 [DEBUG] [Thread-23063] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:30:28.496 [DEBUG] [Thread-23063] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:30:28.496 [DEBUG] [Thread-23063] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:30:28.496 [DEBUG] [Thread-23063] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:30:28.496 [DEBUG] [Thread-23063] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] client lang: <none>
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] server lang: <none>
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] kex follows: False
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] Compression: none
2025-11-12T21:30:28.497 [DEBUG] [Thread-23063] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:30:28.516 [DEBUG] [Thread-23063] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:30:28.516 [DEBUG] [Thread-23063] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:30:28.517 [DEBUG] [Thread-23063] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:30:28.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:30:28.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:30:28.519 [DEBUG] [Thread-23063] [transport.py] [_log()] userauth is OK
2025-11-12T21:30:28.519 [DEBUG] [Thread-23063] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:30:28.519 [DEBUG] [Thread-23063] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:30:28.519 [DEBUG] [Thread-23063] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:30:28.519 [DEBUG] [Thread-23063] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:30:28.559 [INFO] [Thread-23063] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:30:28.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:30:29.219 [DEBUG] [Thread-23063] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:30:29.219 [DEBUG] [Thread-23063] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:30:29.220 [DEBUG] [Thread-23063] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:30:29.260 [DEBUG] [Thread-23063] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:30:29.260 [DEBUG] [Thread-23063] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:30:29.264 [DEBUG] [Thread-23063] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:30:29.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:30:29.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:30:29.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:30:29.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:30:29.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:30:29.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:30:29.288 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:30:29.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:30:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:30:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.812583 -999.00  +18.10   9.45     47   +6.60 1 2 1 1 1     0    0 7.02 -195.59 Z.ES. 3.1 9.4 217.0 13.0 18.9 -22.4 18.8 -21.6 18.6 -20.8 18.8 -21.4
2025-11-12T21:30:29.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:30:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:30:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.812583
2025-11-12T21:30:29.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:30:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:30:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:30:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:30:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:30:29.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:30:24', tmtdew=12.89, humidity=42.69, cloud=0.0, wind=10.02, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:30:25', seeing=1.07, atlas_timestamp='2025-11-12T19:30:07.171', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:28:00')
2025-11-12T21:30:29.290 [DEBUG] [Thread-23063] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:30:29.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:30:29.390 [DEBUG] [Thread-23066] [transport.py] [_log()] starting thread (client mode): 0x14906860
2025-11-12T21:30:29.390 [DEBUG] [Thread-23066] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:30:29.405 [DEBUG] [Thread-23066] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:30:29.405 [INFO] [Thread-23066] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:30:29.412 [DEBUG] [Thread-23066] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] client lang: <none>
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] server lang: <none>
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] kex follows: False
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:30:29.413 [DEBUG] [Thread-23066] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:30:29.414 [DEBUG] [Thread-23066] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:30:29.414 [DEBUG] [Thread-23066] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:30:29.414 [DEBUG] [Thread-23066] [transport.py] [_log()] Compression: none
2025-11-12T21:30:29.414 [DEBUG] [Thread-23066] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:30:29.474 [DEBUG] [Thread-23066] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:30:29.475 [DEBUG] [Thread-23066] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:30:29.475 [DEBUG] [Thread-23066] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:30:29.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:30:29.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:30:29.535 [DEBUG] [Thread-23066] [transport.py] [_log()] userauth is OK
2025-11-12T21:30:29.535 [DEBUG] [Thread-23066] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:30:29.535 [DEBUG] [Thread-23066] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:30:29.535 [DEBUG] [Thread-23066] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:30:29.535 [DEBUG] [Thread-23066] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:30:29.555 [INFO] [Thread-23066] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:30:29.555 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:30:29.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:30:30.406 [DEBUG] [Thread-23066] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:30:30.406 [DEBUG] [Thread-23066] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:30:30.455 [DEBUG] [Thread-23066] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:30:30.456 [DEBUG] [Thread-23066] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:30:30.468 [DEBUG] [Thread-23066] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:30:30.481 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:30:30.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-11-12T21:30:30.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:30:30.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:30:30.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:30:30.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:30:30.513 [DEBUG] [Thread-23066] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:30:33.283 [DEBUG] [Thread-23068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:30:48.330 [DEBUG] [Thread-23069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:30:49.373 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:30:49.374 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:30:55.647 [DEBUG] [Thread-23070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:00.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:31:00.535 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:31:00.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-11-12T21:31:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 30, 56), 12.77, 43.25, 0.0, 12.58, 17.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:31:01.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:30:56
2025-11-12T21:31:01.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:31:01.469 [DEBUG] [Thread-23071] [transport.py] [_log()] starting thread (client mode): 0x14915e40
2025-11-12T21:31:01.469 [DEBUG] [Thread-23071] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:31:01.488 [DEBUG] [Thread-23071] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:31:01.488 [INFO] [Thread-23071] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:31:01.489 [DEBUG] [Thread-23071] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:31:01.489 [DEBUG] [Thread-23071] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:31:01.489 [DEBUG] [Thread-23071] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:31:01.489 [DEBUG] [Thread-23071] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] client lang: <none>
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] server lang: <none>
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] kex follows: False
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] Compression: none
2025-11-12T21:31:01.490 [DEBUG] [Thread-23071] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:31:01.509 [DEBUG] [Thread-23071] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:31:01.509 [DEBUG] [Thread-23071] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:31:01.510 [DEBUG] [Thread-23071] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:31:01.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:31:01.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:31:01.512 [DEBUG] [Thread-23071] [transport.py] [_log()] userauth is OK
2025-11-12T21:31:01.512 [DEBUG] [Thread-23071] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:31:01.512 [DEBUG] [Thread-23071] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:31:01.512 [DEBUG] [Thread-23071] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:31:01.513 [DEBUG] [Thread-23071] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:31:01.537 [INFO] [Thread-23071] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:31:01.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:31:01.601 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:02.130 [DEBUG] [Thread-23071] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:31:02.130 [DEBUG] [Thread-23071] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:31:02.131 [DEBUG] [Thread-23071] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:31:02.171 [DEBUG] [Thread-23071] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:31:02.171 [DEBUG] [Thread-23071] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:31:02.174 [DEBUG] [Thread-23071] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:31:02.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:31:02.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:31:02.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:31:02.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:31:02.196 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:31:02.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:31:02.197 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:31:02.197 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:31:02.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:31:02.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.812931 -999.00  +18.10   5.12     47   +6.70 1 2 1 1 1     0    0 7.46 -193.33 Z.ES. 6.8 5.1 196.8 8.9 18.9 -22.4 18.7 -21.4 18.6 -20.6 18.8 -21.4
2025-11-12T21:31:02.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:31:02.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:31:02.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.812931
2025-11-12T21:31:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:31:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:31:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:31:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:31:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:31:02.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:30:56', tmtdew=12.77, humidity=43.25, cloud=0.0, wind=12.58, temperature=17.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:30:57', seeing=1.02, atlas_timestamp='2025-11-12T19:30:37.238', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:28:00')
2025-11-12T21:31:02.200 [DEBUG] [Thread-23071] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:31:02.282 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:31:02.295 [DEBUG] [Thread-23074] [transport.py] [_log()] starting thread (client mode): 0x173bd060
2025-11-12T21:31:02.295 [DEBUG] [Thread-23074] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:31:02.309 [DEBUG] [Thread-23074] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:31:02.310 [INFO] [Thread-23074] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:31:02.317 [DEBUG] [Thread-23074] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:31:02.317 [DEBUG] [Thread-23074] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:31:02.317 [DEBUG] [Thread-23074] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:31:02.317 [DEBUG] [Thread-23074] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:31:02.317 [DEBUG] [Thread-23074] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:31:02.317 [DEBUG] [Thread-23074] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:31:02.317 [DEBUG] [Thread-23074] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] client lang: <none>
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] server lang: <none>
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] kex follows: False
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] Compression: none
2025-11-12T21:31:02.318 [DEBUG] [Thread-23074] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:31:02.377 [DEBUG] [Thread-23074] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:31:02.378 [DEBUG] [Thread-23074] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:31:02.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:31:02.379 [DEBUG] [Thread-23074] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:31:02.380 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:31:02.433 [DEBUG] [Thread-23074] [transport.py] [_log()] userauth is OK
2025-11-12T21:31:02.434 [DEBUG] [Thread-23074] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:31:02.434 [DEBUG] [Thread-23074] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:31:02.434 [DEBUG] [Thread-23074] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:31:02.434 [DEBUG] [Thread-23074] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:31:02.452 [INFO] [Thread-23074] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:31:02.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:31:02.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:31:03.306 [DEBUG] [Thread-23074] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:31:03.306 [DEBUG] [Thread-23074] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:31:03.354 [DEBUG] [Thread-23074] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:31:03.354 [DEBUG] [Thread-23074] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:31:03.362 [DEBUG] [Thread-23076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:03.363 [DEBUG] [Thread-23074] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:31:03.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:31:03.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:31:03.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:31:03.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:31:03.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:31:03.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:31:03.398 [DEBUG] [Thread-23074] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:31:05.797 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:17.705 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:18.417 [DEBUG] [Thread-23077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:28.585 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:33.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:31:33.421 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:31:33.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-11-12T21:31:33.448 [DEBUG] [Thread-23078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:34.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 31, 28), 12.76, 43.27, 0.0, 12.37, 17.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:31:34.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:31:28
2025-11-12T21:31:34.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:31:34.349 [DEBUG] [Thread-23079] [transport.py] [_log()] starting thread (client mode): 0x14904670
2025-11-12T21:31:34.349 [DEBUG] [Thread-23079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:31:34.371 [DEBUG] [Thread-23079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:31:34.371 [INFO] [Thread-23079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:31:34.374 [DEBUG] [Thread-23079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:31:34.374 [DEBUG] [Thread-23079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:31:34.374 [DEBUG] [Thread-23079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] client lang: <none>
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] server lang: <none>
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] kex follows: False
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:31:34.375 [DEBUG] [Thread-23079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:31:34.376 [DEBUG] [Thread-23079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:31:34.376 [DEBUG] [Thread-23079] [transport.py] [_log()] Compression: none
2025-11-12T21:31:34.376 [DEBUG] [Thread-23079] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:31:34.394 [DEBUG] [Thread-23079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:31:34.395 [DEBUG] [Thread-23079] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:31:34.395 [DEBUG] [Thread-23079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:31:34.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:31:34.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:31:34.398 [DEBUG] [Thread-23079] [transport.py] [_log()] userauth is OK
2025-11-12T21:31:34.398 [DEBUG] [Thread-23079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:31:34.398 [DEBUG] [Thread-23079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:31:34.398 [DEBUG] [Thread-23079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:31:34.398 [DEBUG] [Thread-23079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:31:34.422 [INFO] [Thread-23079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:31:34.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:31:35.068 [DEBUG] [Thread-23079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:31:35.068 [DEBUG] [Thread-23079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:31:35.068 [DEBUG] [Thread-23079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:31:35.109 [DEBUG] [Thread-23079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:31:35.109 [DEBUG] [Thread-23079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:31:35.112 [DEBUG] [Thread-23079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:31:35.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:31:35.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:31:35.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:31:35.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:31:35.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:31:35.138 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:31:35.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:31:35.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:31:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:31:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.813278 -999.00  +18.10   5.53     47   +6.60 1 2 1 1 1     0    0 7.49 -184.34 Z.ES. 6.8 5.5 201.4 8.0 18.8 -22.3 18.8 -21.2 18.6 -20.7 18.8 -21.1
2025-11-12T21:31:35.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:31:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:31:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.813278
2025-11-12T21:31:35.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:31:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:31:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:31:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:31:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:31:35.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:31:28', tmtdew=12.76, humidity=43.27, cloud=0.0, wind=12.37, temperature=17.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:31:29', seeing=1.02, atlas_timestamp='2025-11-12T19:31:07.219', atlas_cloud=2, atlas_rain=1, zp_data=[0.5927499999999997, 0.6987500000000004, 0.8182500000000008, 0.5054999999999996, 0.7534999999999998, 1.1567500000000006, 0.71, 0.46424999999999983, 0.4764999999999997, 0.7130000000000001, 0.6682499999999996, 0.798, 1.4879999999999995, 2.0382499999999997, 1.8279999999999994, 0.7459999999999987, 0.61625, 0.9429999999999996, 1.2829999999999995, 1.0432499999999987, nan, 2.398249999999999, 2.2512500000000006, 0.7837499999999995, 0.8484999999999996, 1.1564999999999994, 1.02475, 2.7645, nan, nan, nan, 1.0860000000000012, 0.9407499999999995], zp_timestamp='2025-11-12T19:28:00')
2025-11-12T21:31:35.141 [DEBUG] [Thread-23079] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:31:35.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:31:35.238 [DEBUG] [Thread-23082] [transport.py] [_log()] starting thread (client mode): 0x11f00be0
2025-11-12T21:31:35.238 [DEBUG] [Thread-23082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:31:35.253 [DEBUG] [Thread-23082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:31:35.253 [INFO] [Thread-23082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] client lang: <none>
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] server lang: <none>
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] kex follows: False
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:31:35.260 [DEBUG] [Thread-23082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:31:35.261 [DEBUG] [Thread-23082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:31:35.261 [DEBUG] [Thread-23082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:31:35.261 [DEBUG] [Thread-23082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:31:35.261 [DEBUG] [Thread-23082] [transport.py] [_log()] Compression: none
2025-11-12T21:31:35.261 [DEBUG] [Thread-23082] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:31:35.321 [DEBUG] [Thread-23082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:31:35.321 [DEBUG] [Thread-23082] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:31:35.322 [DEBUG] [Thread-23082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:31:35.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:31:35.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:31:35.384 [DEBUG] [Thread-23082] [transport.py] [_log()] userauth is OK
2025-11-12T21:31:35.384 [DEBUG] [Thread-23082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:31:35.384 [DEBUG] [Thread-23082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:31:35.384 [DEBUG] [Thread-23082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:31:35.384 [DEBUG] [Thread-23082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:31:35.403 [INFO] [Thread-23082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:31:35.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:31:35.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:31:36.244 [DEBUG] [Thread-23082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:31:36.245 [DEBUG] [Thread-23082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:31:36.292 [DEBUG] [Thread-23082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:31:36.293 [DEBUG] [Thread-23082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:31:36.302 [DEBUG] [Thread-23082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:31:36.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:31:36.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-11-12T21:31:36.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:31:36.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:31:36.330 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:31:36.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:31:36.338 [DEBUG] [Thread-23082] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:31:39.343 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:48.484 [DEBUG] [Thread-23084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:49.585 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:49.586 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:49.938 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:31:55.724 [DEBUG] [Thread-23085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:00.727 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:03.541 [DEBUG] [Thread-23086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:06.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:32:06.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:32:06.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-11-12T21:32:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 32), 12.7, 43.3, 0.0, 10.01, 17.89, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:32:07.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:32:00
2025-11-12T21:32:07.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:32:07.311 [DEBUG] [Thread-23087] [transport.py] [_log()] starting thread (client mode): 0x14915e40
2025-11-12T21:32:07.311 [DEBUG] [Thread-23087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:32:07.330 [DEBUG] [Thread-23087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:32:07.330 [INFO] [Thread-23087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:32:07.333 [DEBUG] [Thread-23087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:32:07.333 [DEBUG] [Thread-23087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] client lang: <none>
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] server lang: <none>
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] kex follows: False
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] Compression: none
2025-11-12T21:32:07.334 [DEBUG] [Thread-23087] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:32:07.350 [DEBUG] [Thread-23087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:32:07.350 [DEBUG] [Thread-23087] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:32:07.350 [DEBUG] [Thread-23087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:32:07.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:32:07.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:32:07.351 [DEBUG] [Thread-23087] [transport.py] [_log()] userauth is OK
2025-11-12T21:32:07.351 [DEBUG] [Thread-23087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:32:07.351 [DEBUG] [Thread-23087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:32:07.351 [DEBUG] [Thread-23087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:32:07.351 [DEBUG] [Thread-23087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:32:07.361 [INFO] [Thread-23087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:32:07.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:32:07.969 [DEBUG] [Thread-23087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:32:07.969 [DEBUG] [Thread-23087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:32:07.969 [DEBUG] [Thread-23087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:32:08.010 [DEBUG] [Thread-23087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:32:08.010 [DEBUG] [Thread-23087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:32:08.012 [DEBUG] [Thread-23087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:32:08.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:32:08.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:32:08.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:32:08.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:32:08.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:32:08.031 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:32:08.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.813625 -999.00  +18.10   5.57     47   +6.60 1 2 1 1 1     0    0 6.94 -191.53 Z.ES. 6.4 5.6 199.7 7.9 18.8 -22.3 18.7 -21.2 18.5 -20.7 18.8 -21.2
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.813625
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:32:08.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:32:00', tmtdew=12.7, humidity=43.3, cloud=0.0, wind=10.01, temperature=17.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:32:01', seeing=0.94, atlas_timestamp='2025-11-12T19:31:37.200', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:30:00')
2025-11-12T21:32:08.032 [DEBUG] [Thread-23087] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:32:08.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:32:08.115 [DEBUG] [Thread-23090] [transport.py] [_log()] starting thread (client mode): 0x14946260
2025-11-12T21:32:08.115 [DEBUG] [Thread-23090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:32:08.130 [DEBUG] [Thread-23090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:32:08.130 [INFO] [Thread-23090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:32:08.137 [DEBUG] [Thread-23090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:32:08.137 [DEBUG] [Thread-23090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:32:08.137 [DEBUG] [Thread-23090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:32:08.137 [DEBUG] [Thread-23090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:32:08.137 [DEBUG] [Thread-23090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:32:08.137 [DEBUG] [Thread-23090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:32:08.137 [DEBUG] [Thread-23090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:32:08.137 [DEBUG] [Thread-23090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] client lang: <none>
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] server lang: <none>
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] kex follows: False
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] Compression: none
2025-11-12T21:32:08.138 [DEBUG] [Thread-23090] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:32:08.196 [DEBUG] [Thread-23090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:32:08.196 [DEBUG] [Thread-23090] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:32:08.196 [DEBUG] [Thread-23090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:32:08.196 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:32:08.197 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:32:08.252 [DEBUG] [Thread-23090] [transport.py] [_log()] userauth is OK
2025-11-12T21:32:08.253 [DEBUG] [Thread-23090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:32:08.253 [DEBUG] [Thread-23090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:32:08.253 [DEBUG] [Thread-23090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:32:08.253 [DEBUG] [Thread-23090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:32:08.267 [INFO] [Thread-23090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:32:08.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:32:08.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:32:09.092 [DEBUG] [Thread-23090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:32:09.093 [DEBUG] [Thread-23090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:32:09.141 [DEBUG] [Thread-23090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:32:09.141 [DEBUG] [Thread-23090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:32:09.150 [DEBUG] [Thread-23090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:32:09.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:32:09.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-11-12T21:32:09.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-11-12T21:32:09.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:32:09.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:32:09.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:32:09.186 [DEBUG] [Thread-23090] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:32:11.369 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:18.575 [DEBUG] [Thread-23092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:22.166 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:33.067 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:33.627 [DEBUG] [Thread-23093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:39.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:32:39.209 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:32:39.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-11-12T21:32:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 32, 32), 12.74, 43.17, 0.0, 8.75, 17.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:32:39.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:32:32
2025-11-12T21:32:39.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:32:40.143 [DEBUG] [Thread-23094] [transport.py] [_log()] starting thread (client mode): 0x173bd9f0
2025-11-12T21:32:40.143 [DEBUG] [Thread-23094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:32:40.162 [DEBUG] [Thread-23094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:32:40.163 [INFO] [Thread-23094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:32:40.165 [DEBUG] [Thread-23094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] client lang: <none>
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] server lang: <none>
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] kex follows: False
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] Compression: none
2025-11-12T21:32:40.166 [DEBUG] [Thread-23094] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:32:40.185 [DEBUG] [Thread-23094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:32:40.185 [DEBUG] [Thread-23094] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:32:40.185 [DEBUG] [Thread-23094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:32:40.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:32:40.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:32:40.188 [DEBUG] [Thread-23094] [transport.py] [_log()] userauth is OK
2025-11-12T21:32:40.188 [DEBUG] [Thread-23094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:32:40.188 [DEBUG] [Thread-23094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:32:40.188 [DEBUG] [Thread-23094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:32:40.188 [DEBUG] [Thread-23094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:32:40.211 [INFO] [Thread-23094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:32:40.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:32:40.847 [DEBUG] [Thread-23094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:32:40.847 [DEBUG] [Thread-23094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:32:40.847 [DEBUG] [Thread-23094] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:32:40.887 [DEBUG] [Thread-23094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:32:40.888 [DEBUG] [Thread-23094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:32:40.890 [DEBUG] [Thread-23094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:32:40.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:32:40.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:32:40.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:32:40.905 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:32:40.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:32:40.911 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:32:40.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:32:40.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:32:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:32:40.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.813973 -999.00  +18.10   6.71     47   +6.60 1 2 1 1 1     0    0 6.89 -196.46 Z.ES. 7.1 6.7 211.0 9.3 18.8 -22.2 18.7 -21.4 18.5 -20.5 18.8 -21.1
2025-11-12T21:32:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:32:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:32:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.813973
2025-11-12T21:32:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:32:40.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:32:40.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:32:40.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:32:40.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:32:40.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:32:32', tmtdew=12.74, humidity=43.17, cloud=0.0, wind=8.75, temperature=17.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:32:33', seeing=1.13, atlas_timestamp='2025-11-12T19:32:07.267', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:30:00')
2025-11-12T21:32:40.913 [DEBUG] [Thread-23094] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:32:40.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:32:41.012 [DEBUG] [Thread-23097] [transport.py] [_log()] starting thread (client mode): 0x14945de0
2025-11-12T21:32:41.012 [DEBUG] [Thread-23097] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:32:41.026 [DEBUG] [Thread-23097] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:32:41.026 [INFO] [Thread-23097] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] client lang: <none>
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] server lang: <none>
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] kex follows: False
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:32:41.034 [DEBUG] [Thread-23097] [transport.py] [_log()] Compression: none
2025-11-12T21:32:41.035 [DEBUG] [Thread-23097] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:32:41.092 [DEBUG] [Thread-23097] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:32:41.092 [DEBUG] [Thread-23097] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:32:41.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:32:41.093 [DEBUG] [Thread-23097] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:32:41.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:32:41.149 [DEBUG] [Thread-23097] [transport.py] [_log()] userauth is OK
2025-11-12T21:32:41.149 [DEBUG] [Thread-23097] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:32:41.149 [DEBUG] [Thread-23097] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:32:41.149 [DEBUG] [Thread-23097] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:32:41.149 [DEBUG] [Thread-23097] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:32:41.171 [INFO] [Thread-23097] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:32:41.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:32:41.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:32:41.987 [DEBUG] [Thread-23097] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:32:41.987 [DEBUG] [Thread-23097] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:32:42.035 [DEBUG] [Thread-23097] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:32:42.035 [DEBUG] [Thread-23097] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:32:42.043 [DEBUG] [Thread-23097] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:32:42.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:32:42.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:32:42.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:32:42.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:32:42.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:32:42.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:32:42.073 [DEBUG] [Thread-23097] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:32:43.717 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:48.658 [DEBUG] [Thread-23099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:49.789 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:49.790 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:54.156 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:32:55.802 [DEBUG] [Thread-23100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:03.711 [DEBUG] [Thread-23101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:04.892 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:12.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:33:12.097 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:33:12.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-11-12T21:33:12.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 33, 4), 12.71, 43.24, 0.0, 9.67, 17.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:33:12.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:33:04
2025-11-12T21:33:12.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:33:13.013 [DEBUG] [Thread-23102] [transport.py] [_log()] starting thread (client mode): 0x14946290
2025-11-12T21:33:13.013 [DEBUG] [Thread-23102] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:33:13.032 [DEBUG] [Thread-23102] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:33:13.032 [INFO] [Thread-23102] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:33:13.035 [DEBUG] [Thread-23102] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] client lang: <none>
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] server lang: <none>
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] kex follows: False
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] Compression: none
2025-11-12T21:33:13.036 [DEBUG] [Thread-23102] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:33:13.044 [DEBUG] [Thread-23102] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:33:13.045 [DEBUG] [Thread-23102] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:33:13.045 [DEBUG] [Thread-23102] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:33:13.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:33:13.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:33:13.046 [DEBUG] [Thread-23102] [transport.py] [_log()] userauth is OK
2025-11-12T21:33:13.046 [DEBUG] [Thread-23102] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:33:13.046 [DEBUG] [Thread-23102] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:33:13.046 [DEBUG] [Thread-23102] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:33:13.046 [DEBUG] [Thread-23102] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:33:13.058 [INFO] [Thread-23102] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:33:13.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:33:13.713 [DEBUG] [Thread-23102] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:33:13.714 [DEBUG] [Thread-23102] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:33:13.714 [DEBUG] [Thread-23102] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:33:13.755 [DEBUG] [Thread-23102] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:33:13.755 [DEBUG] [Thread-23102] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:33:13.758 [DEBUG] [Thread-23102] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:33:13.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:33:13.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:33:13.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:33:13.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:33:13.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:33:13.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:33:13.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:33:13.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:33:13.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:33:13.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.814320 -999.00  +18.00   6.44     47   +6.60 1 2 1 1 1     0    0 6.71 -196.77 Z.ES. 6.7 6.4 209.4 9.5 18.8 -22.3 18.7 -21.2 18.5 -20.6 18.8 -21.1
2025-11-12T21:33:13.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:33:13.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:33:13.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.814320
2025-11-12T21:33:13.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:33:13.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:33:13.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:33:13.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:33:13.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:33:13.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:33:04', tmtdew=12.71, humidity=43.24, cloud=0.0, wind=9.67, temperature=17.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:33:05', seeing=1.13, atlas_timestamp='2025-11-12T19:32:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:30:00')
2025-11-12T21:33:13.788 [DEBUG] [Thread-23102] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:33:13.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:33:13.885 [DEBUG] [Thread-23105] [transport.py] [_log()] starting thread (client mode): 0x173bd600
2025-11-12T21:33:13.886 [DEBUG] [Thread-23105] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:33:13.903 [DEBUG] [Thread-23105] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:33:13.903 [INFO] [Thread-23105] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:33:13.912 [DEBUG] [Thread-23105] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:33:13.912 [DEBUG] [Thread-23105] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] client lang: <none>
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] server lang: <none>
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] kex follows: False
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:33:13.913 [DEBUG] [Thread-23105] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:33:13.914 [DEBUG] [Thread-23105] [transport.py] [_log()] Compression: none
2025-11-12T21:33:13.914 [DEBUG] [Thread-23105] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:33:13.969 [DEBUG] [Thread-23105] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:33:13.969 [DEBUG] [Thread-23105] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:33:13.970 [DEBUG] [Thread-23105] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:33:13.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:33:13.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:33:14.028 [DEBUG] [Thread-23105] [transport.py] [_log()] userauth is OK
2025-11-12T21:33:14.028 [DEBUG] [Thread-23105] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:33:14.029 [DEBUG] [Thread-23105] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:33:14.029 [DEBUG] [Thread-23105] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:33:14.029 [DEBUG] [Thread-23105] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:33:14.050 [INFO] [Thread-23105] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:33:14.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:33:14.051 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:33:14.953 [DEBUG] [Thread-23105] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:33:14.953 [DEBUG] [Thread-23105] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:33:15.002 [DEBUG] [Thread-23105] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:33:15.002 [DEBUG] [Thread-23105] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:33:15.011 [DEBUG] [Thread-23105] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:33:15.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:33:15.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-11-12T21:33: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-11-12T21:33:15.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:33:15.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:33:15.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:33:15.047 [DEBUG] [Thread-23105] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:33:15.509 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:18.744 [DEBUG] [Thread-23107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:25.942 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:33.783 [DEBUG] [Thread-23108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:36.856 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:45.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:33:45.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:33: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-11-12T21:33:45.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 33, 36), 12.69, 43.3, 0.0, 9.95, 17.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:33:45.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:33:36
2025-11-12T21:33:45.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:33:45.983 [DEBUG] [Thread-23109] [transport.py] [_log()] starting thread (client mode): 0x17347490
2025-11-12T21:33:45.983 [DEBUG] [Thread-23109] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:33:46.004 [DEBUG] [Thread-23109] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:33:46.004 [INFO] [Thread-23109] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] client lang: <none>
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] server lang: <none>
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] kex follows: False
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] Compression: none
2025-11-12T21:33:46.008 [DEBUG] [Thread-23109] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:33:46.028 [DEBUG] [Thread-23109] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:33:46.029 [DEBUG] [Thread-23109] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:33:46.030 [DEBUG] [Thread-23109] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:33:46.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:33:46.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:33:46.032 [DEBUG] [Thread-23109] [transport.py] [_log()] userauth is OK
2025-11-12T21:33:46.032 [DEBUG] [Thread-23109] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:33:46.032 [DEBUG] [Thread-23109] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:33:46.032 [DEBUG] [Thread-23109] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:33:46.032 [DEBUG] [Thread-23109] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:33:46.053 [INFO] [Thread-23109] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:33:46.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:33:46.717 [DEBUG] [Thread-23109] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:33:46.717 [DEBUG] [Thread-23109] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:33:46.718 [DEBUG] [Thread-23109] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:33:46.758 [DEBUG] [Thread-23109] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:33:46.759 [DEBUG] [Thread-23109] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:33:46.762 [DEBUG] [Thread-23109] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:33:46.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:33:46.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:33:46.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:33:46.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:33:46.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:33:46.785 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:33:46.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:33:46.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:33:46.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:33:46.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.815014 -999.00  +17.90   8.16     47   +6.60 1 2 1 1 1     0    0 6.99 -193.62 z.ES. 5.8 8.2 213.8 11.2 18.8 -22.1 18.7 -21.2 18.5 -20.4 18.7 -21.2
2025-11-12T21:33:46.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:33:46.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:33:46.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.815014
2025-11-12T21:33:46.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:33:46.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:33:46.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:33:46.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:33:46.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:33:46.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:33:36', tmtdew=12.69, humidity=43.3, cloud=0.0, wind=9.95, temperature=17.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:33:37', seeing=0.87, atlas_timestamp='2025-11-12T19:33:37.210', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:30:00')
2025-11-12T21:33:46.788 [DEBUG] [Thread-23109] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:33:46.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:33:46.883 [DEBUG] [Thread-23112] [transport.py] [_log()] starting thread (client mode): 0x17347d00
2025-11-12T21:33:46.883 [DEBUG] [Thread-23112] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:33:46.897 [DEBUG] [Thread-23112] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:33:46.897 [INFO] [Thread-23112] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] client lang: <none>
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] server lang: <none>
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] kex follows: False
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:33:46.905 [DEBUG] [Thread-23112] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:33:46.906 [DEBUG] [Thread-23112] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:33:46.906 [DEBUG] [Thread-23112] [transport.py] [_log()] Compression: none
2025-11-12T21:33:46.906 [DEBUG] [Thread-23112] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:33:46.965 [DEBUG] [Thread-23112] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:33:46.966 [DEBUG] [Thread-23112] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:33:46.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:33:46.967 [DEBUG] [Thread-23112] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:33:46.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:33:47.021 [DEBUG] [Thread-23112] [transport.py] [_log()] userauth is OK
2025-11-12T21:33:47.022 [DEBUG] [Thread-23112] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:33:47.022 [DEBUG] [Thread-23112] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:33:47.022 [DEBUG] [Thread-23112] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:33:47.022 [DEBUG] [Thread-23112] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:33:47.040 [INFO] [Thread-23112] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:33:47.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:33:47.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:33:47.649 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:47.870 [DEBUG] [Thread-23112] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:33:47.870 [DEBUG] [Thread-23112] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:33:47.919 [DEBUG] [Thread-23112] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:33:47.919 [DEBUG] [Thread-23112] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:33:47.928 [DEBUG] [Thread-23112] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:33:47.937 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:33:47.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-11-12T21:33:47.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-11-12T21:33:47.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:33:47.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:33:47.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:33:47.965 [DEBUG] [Thread-23112] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:33:48.820 [DEBUG] [Thread-23114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:49.993 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:49.994 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:55.873 [DEBUG] [Thread-23115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:33:58.392 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:03.866 [DEBUG] [Thread-23116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:09.536 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:17.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:34:17.986 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:34:17.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-11-12T21:34:18.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 34, 8), 12.65, 43.42, 0.0, 8.75, 17.76, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:34:18.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:34:08
2025-11-12T21:34:18.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:34:18.906 [DEBUG] [Thread-23117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:18.921 [DEBUG] [Thread-23118] [transport.py] [_log()] starting thread (client mode): 0x14915750
2025-11-12T21:34:18.921 [DEBUG] [Thread-23118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:34:18.941 [DEBUG] [Thread-23118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:34:18.942 [INFO] [Thread-23118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:34:18.944 [DEBUG] [Thread-23118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] client lang: <none>
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] server lang: <none>
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] kex follows: False
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] Compression: none
2025-11-12T21:34:18.945 [DEBUG] [Thread-23118] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:34:18.963 [DEBUG] [Thread-23118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:34:18.963 [DEBUG] [Thread-23118] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:34:18.964 [DEBUG] [Thread-23118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:34:18.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:34:18.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:34:18.966 [DEBUG] [Thread-23118] [transport.py] [_log()] userauth is OK
2025-11-12T21:34:18.966 [DEBUG] [Thread-23118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:34:18.966 [DEBUG] [Thread-23118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:34:18.966 [DEBUG] [Thread-23118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:34:18.966 [DEBUG] [Thread-23118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:34:19.003 [INFO] [Thread-23118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:34:19.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:34:19.585 [DEBUG] [Thread-23118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:34:19.585 [DEBUG] [Thread-23118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:34:19.585 [DEBUG] [Thread-23118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:34:19.626 [DEBUG] [Thread-23118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:34:19.626 [DEBUG] [Thread-23118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:34:19.629 [DEBUG] [Thread-23118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:34:19.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:34:19.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:34:19.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:34:19.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:34:19.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:34:19.653 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:34:19.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:34:19.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:34:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:34:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.815361 -999.00  +17.90   4.10     47   +6.60 1 2 1 1 1     0    0 6.44 -205.42 z.ES. 7.4 4.1 230.2 11.0 18.8 -22.0 18.6 -21.1 18.4 -20.4 18.7 -21.0
2025-11-12T21:34:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:34:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:34:19.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.815361
2025-11-12T21:34:19.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:34:19.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:34:19.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:34:19.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:34:19.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:34:19.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:34:08', tmtdew=12.65, humidity=43.42, cloud=0.0, wind=8.75, temperature=17.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:34:09', seeing=0.87, atlas_timestamp='2025-11-12T19:34:07.190', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:30:00')
2025-11-12T21:34:19.656 [DEBUG] [Thread-23118] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:34:19.739 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:34:19.751 [DEBUG] [Thread-23121] [transport.py] [_log()] starting thread (client mode): 0x14914c40
2025-11-12T21:34:19.752 [DEBUG] [Thread-23121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:34:19.769 [DEBUG] [Thread-23121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:34:19.769 [INFO] [Thread-23121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] client lang: <none>
2025-11-12T21:34:19.777 [DEBUG] [Thread-23121] [transport.py] [_log()] server lang: <none>
2025-11-12T21:34:19.778 [DEBUG] [Thread-23121] [transport.py] [_log()] kex follows: False
2025-11-12T21:34:19.778 [DEBUG] [Thread-23121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:34:19.778 [DEBUG] [Thread-23121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:34:19.778 [DEBUG] [Thread-23121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:34:19.778 [DEBUG] [Thread-23121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:34:19.778 [DEBUG] [Thread-23121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:34:19.778 [DEBUG] [Thread-23121] [transport.py] [_log()] Compression: none
2025-11-12T21:34:19.778 [DEBUG] [Thread-23121] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:34:19.835 [DEBUG] [Thread-23121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:34:19.836 [DEBUG] [Thread-23121] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:34:19.837 [DEBUG] [Thread-23121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:34:19.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:34:19.838 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:34:19.899 [DEBUG] [Thread-23121] [transport.py] [_log()] userauth is OK
2025-11-12T21:34:19.899 [DEBUG] [Thread-23121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:34:19.899 [DEBUG] [Thread-23121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:34:19.899 [DEBUG] [Thread-23121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:34:19.900 [DEBUG] [Thread-23121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:34:19.922 [INFO] [Thread-23121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:34:19.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:34:19.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:34:20.652 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:20.826 [DEBUG] [Thread-23121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:34:20.826 [DEBUG] [Thread-23121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:34:20.873 [DEBUG] [Thread-23121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:34:20.874 [DEBUG] [Thread-23121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:34:20.882 [DEBUG] [Thread-23121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:34:20.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:34:20.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-11-12T21:34:20.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-11-12T21:34:20.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:34:20.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:34:20.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:34:20.918 [DEBUG] [Thread-23121] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:34:31.709 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:33.941 [DEBUG] [Thread-23123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:42.625 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:48.987 [DEBUG] [Thread-23124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:50.195 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:50.196 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:50.932 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:34:50.933 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:34:50.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-11-12T21:34:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 34, 40), 12.47, 43.65, 0.0, 11.36, 17.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:34:51.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:34:40
2025-11-12T21:34:51.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:34:51.856 [DEBUG] [Thread-23125] [transport.py] [_log()] starting thread (client mode): 0x17347460
2025-11-12T21:34:51.856 [DEBUG] [Thread-23125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:34:51.876 [DEBUG] [Thread-23125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:34:51.876 [INFO] [Thread-23125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:34:51.877 [DEBUG] [Thread-23125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:34:51.877 [DEBUG] [Thread-23125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:34:51.877 [DEBUG] [Thread-23125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:34:51.877 [DEBUG] [Thread-23125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] client lang: <none>
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] server lang: <none>
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] kex follows: False
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] Compression: none
2025-11-12T21:34:51.878 [DEBUG] [Thread-23125] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:34:51.886 [DEBUG] [Thread-23125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:34:51.886 [DEBUG] [Thread-23125] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:34:51.887 [DEBUG] [Thread-23125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:34:51.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:34:51.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:34:51.888 [DEBUG] [Thread-23125] [transport.py] [_log()] userauth is OK
2025-11-12T21:34:51.888 [DEBUG] [Thread-23125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:34:51.888 [DEBUG] [Thread-23125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:34:51.888 [DEBUG] [Thread-23125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:34:51.888 [DEBUG] [Thread-23125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:34:51.905 [INFO] [Thread-23125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:34:51.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:34:52.474 [DEBUG] [Thread-23125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:34:52.474 [DEBUG] [Thread-23125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:34:52.475 [DEBUG] [Thread-23125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:34:52.515 [DEBUG] [Thread-23125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:34:52.515 [DEBUG] [Thread-23125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:34:52.518 [DEBUG] [Thread-23125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:34:52.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:34:52.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:34:52.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:34:52.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:34:52.536 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:34:52.537 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:34:52.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:34:52.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:34:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:34:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.815709 -999.00  +17.90   6.52     47   +6.60 1 2 1 1 1     0    0 6.35 -204.18 z.ES. 6.2 6.5 208.4 9.3 18.8 -22.1 18.6 -21.0 18.5 -20.4 18.7 -20.9
2025-11-12T21:34:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:34:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:34:52.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.815709
2025-11-12T21:34:52.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:34:52.539 [DEBUG] [Thread-23125] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:34:52.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:34:52.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:34:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:34:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:34:52.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:34:40', tmtdew=12.47, humidity=43.65, cloud=0.0, wind=11.36, temperature=17.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:34:41', seeing=0.94, atlas_timestamp='2025-11-12T19:34:37.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:30:00')
2025-11-12T21:34:52.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:34:52.637 [DEBUG] [Thread-23128] [transport.py] [_log()] starting thread (client mode): 0x173441c0
2025-11-12T21:34:52.637 [DEBUG] [Thread-23128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:34:52.652 [DEBUG] [Thread-23128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:34:52.652 [INFO] [Thread-23128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:34:52.659 [DEBUG] [Thread-23128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:34:52.659 [DEBUG] [Thread-23128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] client lang: <none>
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] server lang: <none>
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] kex follows: False
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:34:52.660 [DEBUG] [Thread-23128] [transport.py] [_log()] Compression: none
2025-11-12T21:34:52.661 [DEBUG] [Thread-23128] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:34:52.716 [DEBUG] [Thread-23128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:34:52.717 [DEBUG] [Thread-23128] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:34:52.717 [DEBUG] [Thread-23128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:34:52.717 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:34:52.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:34:52.781 [DEBUG] [Thread-23128] [transport.py] [_log()] userauth is OK
2025-11-12T21:34:52.781 [DEBUG] [Thread-23128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:34:52.781 [DEBUG] [Thread-23128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:34:52.781 [DEBUG] [Thread-23128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:34:52.781 [DEBUG] [Thread-23128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:34:52.803 [INFO] [Thread-23128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:34:52.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:34:52.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:34:53.461 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:34:53.611 [DEBUG] [Thread-23128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:34:53.612 [DEBUG] [Thread-23128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:34:53.659 [DEBUG] [Thread-23128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:34:53.660 [DEBUG] [Thread-23128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:34:53.668 [DEBUG] [Thread-23128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:34:53.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:34:53.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:34:53.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-11-12T21:34:53.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:34:53.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:34:53.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:34:53.704 [DEBUG] [Thread-23128] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:34:55.960 [DEBUG] [Thread-23130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:04.020 [DEBUG] [Thread-23131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:04.332 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:14.998 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:19.076 [DEBUG] [Thread-23132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:23.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:35:23.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:35:23.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-11-12T21:35:24.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 35, 12), 12.51, 43.52, 0.0, 11.05, 17.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:35:24.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:35:12
2025-11-12T21:35:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:35:24.635 [DEBUG] [Thread-23133] [transport.py] [_log()] starting thread (client mode): 0x173bf190
2025-11-12T21:35:24.635 [DEBUG] [Thread-23133] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:35:24.651 [DEBUG] [Thread-23133] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:35:24.651 [INFO] [Thread-23133] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:35:24.654 [DEBUG] [Thread-23133] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] client lang: <none>
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] server lang: <none>
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] kex follows: False
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] Compression: none
2025-11-12T21:35:24.655 [DEBUG] [Thread-23133] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:35:24.673 [DEBUG] [Thread-23133] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:35:24.674 [DEBUG] [Thread-23133] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:35:24.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:35:24.675 [DEBUG] [Thread-23133] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:35:24.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:35:24.677 [DEBUG] [Thread-23133] [transport.py] [_log()] userauth is OK
2025-11-12T21:35:24.677 [DEBUG] [Thread-23133] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:35:24.677 [DEBUG] [Thread-23133] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:35:24.677 [DEBUG] [Thread-23133] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:35:24.677 [DEBUG] [Thread-23133] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:35:24.696 [INFO] [Thread-23133] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:35:24.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:35:25.270 [DEBUG] [Thread-23133] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:35:25.270 [DEBUG] [Thread-23133] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:35:25.270 [DEBUG] [Thread-23133] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:35:25.310 [DEBUG] [Thread-23133] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:35:25.311 [DEBUG] [Thread-23133] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:35:25.313 [DEBUG] [Thread-23133] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:35:25.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:35:25.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:35:25.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:35:25.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:35:25.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:35:25.332 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:35:25.332 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:35:25.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:35:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:35:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.816055 -999.00  +17.90   5.66     47   +6.60 1 2 1 1 1     0    0 6.55 -199.61 z.ES. 6.2 5.7 237.0 9.7 18.7 -22.1 18.6 -21.3 18.4 -20.4 18.7 -20.9
2025-11-12T21:35:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:35:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:35:25.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.816055
2025-11-12T21:35:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:35:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:35:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:35:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:35:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:35:25.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:35:12', tmtdew=12.51, humidity=43.52, cloud=0.0, wind=11.05, temperature=17.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:35:13', seeing=0.94, atlas_timestamp='2025-11-12T19:35:07.152', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:33:00')
2025-11-12T21:35:25.335 [DEBUG] [Thread-23133] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:35:25.418 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:35:25.431 [DEBUG] [Thread-23136] [transport.py] [_log()] starting thread (client mode): 0x17344160
2025-11-12T21:35:25.431 [DEBUG] [Thread-23136] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:35:25.446 [DEBUG] [Thread-23136] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:35:25.446 [INFO] [Thread-23136] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:35:25.454 [DEBUG] [Thread-23136] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:35:25.454 [DEBUG] [Thread-23136] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:35:25.454 [DEBUG] [Thread-23136] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:35:25.454 [DEBUG] [Thread-23136] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] client lang: <none>
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] server lang: <none>
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] kex follows: False
2025-11-12T21:35:25.455 [DEBUG] [Thread-23136] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:35:25.456 [DEBUG] [Thread-23136] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:35:25.456 [DEBUG] [Thread-23136] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:35:25.456 [DEBUG] [Thread-23136] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:35:25.456 [DEBUG] [Thread-23136] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:35:25.456 [DEBUG] [Thread-23136] [transport.py] [_log()] Compression: none
2025-11-12T21:35:25.456 [DEBUG] [Thread-23136] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:35:25.514 [DEBUG] [Thread-23136] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:35:25.515 [DEBUG] [Thread-23136] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:35:25.516 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:35:25.516 [DEBUG] [Thread-23136] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:35:25.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:35:25.574 [DEBUG] [Thread-23136] [transport.py] [_log()] userauth is OK
2025-11-12T21:35:25.574 [DEBUG] [Thread-23136] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:35:25.574 [DEBUG] [Thread-23136] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:35:25.575 [DEBUG] [Thread-23136] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:35:25.575 [DEBUG] [Thread-23136] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:35:25.593 [INFO] [Thread-23136] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:35:25.594 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:35:25.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:35:25.639 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:26.451 [DEBUG] [Thread-23136] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:35:26.451 [DEBUG] [Thread-23136] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:35:26.499 [DEBUG] [Thread-23136] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:35:26.500 [DEBUG] [Thread-23136] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:35:26.509 [DEBUG] [Thread-23136] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:35:26.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:35:26.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-11-12T21:35:26.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-11-12T21:35:26.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:35:26.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:35:26.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:35:26.546 [DEBUG] [Thread-23136] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:35:34.108 [DEBUG] [Thread-23138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:36.199 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:46.967 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:49.161 [DEBUG] [Thread-23139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:50.406 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:50.407 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:56.011 [DEBUG] [Thread-23140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:56.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:35:56.541 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:35:56.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-11-12T21:35:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 35, 44), 12.51, 43.52, 0.0, 9.85, 17.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:35:57.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:35:44
2025-11-12T21:35:57.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:35:57.535 [DEBUG] [Thread-23141] [transport.py] [_log()] starting thread (client mode): 0x17344a60
2025-11-12T21:35:57.535 [DEBUG] [Thread-23141] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:35:57.556 [DEBUG] [Thread-23141] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:35:57.556 [INFO] [Thread-23141] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:35:57.559 [DEBUG] [Thread-23141] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:35:57.559 [DEBUG] [Thread-23141] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:35:57.559 [DEBUG] [Thread-23141] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] client lang: <none>
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] server lang: <none>
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] kex follows: False
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] Compression: none
2025-11-12T21:35:57.560 [DEBUG] [Thread-23141] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:35:57.575 [DEBUG] [Thread-23141] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:35:57.575 [DEBUG] [Thread-23141] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:35:57.576 [DEBUG] [Thread-23141] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:35:57.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:35:57.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:35:57.577 [DEBUG] [Thread-23141] [transport.py] [_log()] userauth is OK
2025-11-12T21:35:57.577 [DEBUG] [Thread-23141] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:35:57.577 [DEBUG] [Thread-23141] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:35:57.577 [DEBUG] [Thread-23141] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:35:57.577 [DEBUG] [Thread-23141] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:35:57.589 [INFO] [Thread-23141] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:35:57.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:35:57.838 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:35:58.186 [DEBUG] [Thread-23141] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:35:58.186 [DEBUG] [Thread-23141] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:35:58.186 [DEBUG] [Thread-23141] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:35:58.227 [DEBUG] [Thread-23141] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:35:58.227 [DEBUG] [Thread-23141] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:35:58.229 [DEBUG] [Thread-23141] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:35:58.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:35:58.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:35:58.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:35:58.237 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:35:58.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:35:58.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:35:58.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.816055 -999.00  +17.90   5.66     47   +6.60 1 2 1 1 1     0    0 6.55 -199.61 z.ES. 6.2 5.7 237.0 9.7 18.7 -22.1 18.6 -21.3 18.4 -20.4 18.7 -20.9
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.816055
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:35:58.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:35:58.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:35:44', tmtdew=12.51, humidity=43.52, cloud=0.0, wind=9.85, temperature=17.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:35:45', seeing=0.92, atlas_timestamp='2025-11-12T19:35:07.152', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:33:00')
2025-11-12T21:35:58.242 [DEBUG] [Thread-23141] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:35:58.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:35:58.328 [DEBUG] [Thread-23144] [transport.py] [_log()] starting thread (client mode): 0x14905840
2025-11-12T21:35:58.328 [DEBUG] [Thread-23144] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:35:58.343 [DEBUG] [Thread-23144] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:35:58.343 [INFO] [Thread-23144] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:35:58.350 [DEBUG] [Thread-23144] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:35:58.350 [DEBUG] [Thread-23144] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:35:58.350 [DEBUG] [Thread-23144] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:35:58.350 [DEBUG] [Thread-23144] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:35:58.350 [DEBUG] [Thread-23144] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:35:58.350 [DEBUG] [Thread-23144] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:35:58.350 [DEBUG] [Thread-23144] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] client lang: <none>
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] server lang: <none>
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] kex follows: False
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] Compression: none
2025-11-12T21:35:58.351 [DEBUG] [Thread-23144] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:35:58.407 [DEBUG] [Thread-23144] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:35:58.407 [DEBUG] [Thread-23144] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:35:58.407 [DEBUG] [Thread-23144] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:35:58.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:35:58.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:35:58.465 [DEBUG] [Thread-23144] [transport.py] [_log()] userauth is OK
2025-11-12T21:35:58.465 [DEBUG] [Thread-23144] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:35:58.465 [DEBUG] [Thread-23144] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:35:58.465 [DEBUG] [Thread-23144] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:35:58.465 [DEBUG] [Thread-23144] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:35:58.481 [INFO] [Thread-23144] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:35:58.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:35:58.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:35:59.303 [DEBUG] [Thread-23144] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:35:59.303 [DEBUG] [Thread-23144] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:35:59.351 [DEBUG] [Thread-23144] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:35:59.351 [DEBUG] [Thread-23144] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:35:59.359 [DEBUG] [Thread-23144] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:35:59.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:35:59.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-11-12T21:35:59.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-11-12T21:35:59.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:35:59.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:35:59.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:35:59.391 [DEBUG] [Thread-23144] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:36:04.199 [DEBUG] [Thread-23146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:08.792 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:19.252 [DEBUG] [Thread-23147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:20.069 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:29.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:36:29.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:36:29.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-11-12T21:36:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 36, 16), 12.43, 43.75, 0.0, 9.65, 17.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:36:30.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:36:16
2025-11-12T21:36:30.173 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:36:30.318 [DEBUG] [Thread-23148] [transport.py] [_log()] starting thread (client mode): 0x149441f0
2025-11-12T21:36:30.318 [DEBUG] [Thread-23148] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:36:30.339 [DEBUG] [Thread-23148] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:36:30.339 [INFO] [Thread-23148] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:36:30.342 [DEBUG] [Thread-23148] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:36:30.342 [DEBUG] [Thread-23148] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:36:30.342 [DEBUG] [Thread-23148] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] client lang: <none>
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] server lang: <none>
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] kex follows: False
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] Compression: none
2025-11-12T21:36:30.343 [DEBUG] [Thread-23148] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:36:30.361 [DEBUG] [Thread-23148] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:36:30.361 [DEBUG] [Thread-23148] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:36:30.362 [DEBUG] [Thread-23148] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:36:30.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:36:30.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:36:30.364 [DEBUG] [Thread-23148] [transport.py] [_log()] userauth is OK
2025-11-12T21:36:30.364 [DEBUG] [Thread-23148] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:36:30.364 [DEBUG] [Thread-23148] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:36:30.364 [DEBUG] [Thread-23148] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:36:30.364 [DEBUG] [Thread-23148] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:36:30.389 [INFO] [Thread-23148] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:36:30.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:36:30.850 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:31.027 [DEBUG] [Thread-23148] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:36:31.027 [DEBUG] [Thread-23148] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:36:31.027 [DEBUG] [Thread-23148] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:36:31.067 [DEBUG] [Thread-23148] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:36:31.068 [DEBUG] [Thread-23148] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:36:31.071 [DEBUG] [Thread-23148] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:36:31.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:36:31.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:36:31.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:36:31.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:36:31.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:36:31.092 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:36:31.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:36:31.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:36:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:36:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.816403 -999.00  +17.90   6.79     47   +6.70 1 2 1 1 1     0    0 6.38 -199.77 z.ES. 8.2 6.8 182.4 8.6 18.7 -21.9 18.6 -21.1 -999.0 -999.0 18.7 -20.9
2025-11-12T21:36:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:36:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:36:31.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.816403
2025-11-12T21:36:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:36:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:36:31.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:36:31.094 [DEBUG] [Thread-23148] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:36:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:36:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:36:31.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:36:16', tmtdew=12.43, humidity=43.75, cloud=0.0, wind=9.65, temperature=17.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:36:17', seeing=0.87, atlas_timestamp='2025-11-12T19:35:37.219', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:33:00')
2025-11-12T21:36:31.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:36:31.188 [DEBUG] [Thread-23151] [transport.py] [_log()] starting thread (client mode): 0x149459f0
2025-11-12T21:36:31.188 [DEBUG] [Thread-23151] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:36:31.202 [DEBUG] [Thread-23151] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:36:31.202 [INFO] [Thread-23151] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] client lang: <none>
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] server lang: <none>
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] kex follows: False
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:36:31.209 [DEBUG] [Thread-23151] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:36:31.210 [DEBUG] [Thread-23151] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:36:31.210 [DEBUG] [Thread-23151] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:36:31.210 [DEBUG] [Thread-23151] [transport.py] [_log()] Compression: none
2025-11-12T21:36:31.210 [DEBUG] [Thread-23151] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:36:31.268 [DEBUG] [Thread-23151] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:36:31.269 [DEBUG] [Thread-23151] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:36:31.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:36:31.270 [DEBUG] [Thread-23151] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:36:31.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:36:31.325 [DEBUG] [Thread-23151] [transport.py] [_log()] userauth is OK
2025-11-12T21:36:31.326 [DEBUG] [Thread-23151] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:36:31.326 [DEBUG] [Thread-23151] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:36:31.326 [DEBUG] [Thread-23151] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:36:31.326 [DEBUG] [Thread-23151] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:36:31.344 [INFO] [Thread-23151] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:36:31.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:36:31.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:36:32.193 [DEBUG] [Thread-23151] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:36:32.194 [DEBUG] [Thread-23151] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:36:32.241 [DEBUG] [Thread-23151] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:36:32.241 [DEBUG] [Thread-23151] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:36:32.249 [DEBUG] [Thread-23151] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:36:32.257 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:36:32.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-11-12T21:36:32.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-11-12T21:36:32.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:36:32.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:36:32.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:36:32.281 [DEBUG] [Thread-23151] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:36:34.287 [DEBUG] [Thread-23153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:41.539 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:49.327 [DEBUG] [Thread-23154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:50.609 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:50.610 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:52.218 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:36:56.062 [DEBUG] [Thread-23155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:02.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:37:02.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:37:02.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-11-12T21:37:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 36, 48), 12.34, 43.85, 0.0, 10.87, 17.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:37:02.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:36:48
2025-11-12T21:37:03.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:37:03.135 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:03.228 [DEBUG] [Thread-23156] [transport.py] [_log()] starting thread (client mode): 0x149238b0
2025-11-12T21:37:03.228 [DEBUG] [Thread-23156] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:37:03.243 [DEBUG] [Thread-23156] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:37:03.244 [INFO] [Thread-23156] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] client lang: <none>
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] server lang: <none>
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] kex follows: False
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] Compression: none
2025-11-12T21:37:03.247 [DEBUG] [Thread-23156] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:37:03.266 [DEBUG] [Thread-23156] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:37:03.267 [DEBUG] [Thread-23156] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:37:03.268 [DEBUG] [Thread-23156] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:37:03.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:37:03.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:37:03.309 [DEBUG] [Thread-23156] [transport.py] [_log()] userauth is OK
2025-11-12T21:37:03.309 [DEBUG] [Thread-23156] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:37:03.309 [DEBUG] [Thread-23156] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:37:03.309 [DEBUG] [Thread-23156] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:37:03.310 [DEBUG] [Thread-23156] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:37:03.341 [INFO] [Thread-23156] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:37:03.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:37:03.920 [DEBUG] [Thread-23156] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:37:03.920 [DEBUG] [Thread-23156] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:37:03.920 [DEBUG] [Thread-23156] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:37:03.961 [DEBUG] [Thread-23156] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:37:03.961 [DEBUG] [Thread-23156] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:37:03.964 [DEBUG] [Thread-23156] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:37:03.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:37:03.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:37:03.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:37:03.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:37:03.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:37:03.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:37:03.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:37:03.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:37:03.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:37:03.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.816750 -999.00  +17.90   4.25     48   +6.80 1 2 1 1 1     0    0 6.67 -194.29 z.ES. 9.9 4.2 214.7 11.6 18.7 -21.9 18.6 -21.0 18.4 -20.2 18.7 -20.9
2025-11-12T21:37:03.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:37:03.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:37:03.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.816750
2025-11-12T21:37:03.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:37:03.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:37:03.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:37:03.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:37:03.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:37:03.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:36:48', tmtdew=12.34, humidity=43.85, cloud=0.0, wind=10.87, temperature=17.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:36:49', seeing=0.87, atlas_timestamp='2025-11-12T19:36:07.200', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:33:00')
2025-11-12T21:37:03.993 [DEBUG] [Thread-23156] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:37:04.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:37:04.089 [DEBUG] [Thread-23159] [transport.py] [_log()] starting thread (client mode): 0x149aa8c0
2025-11-12T21:37:04.089 [DEBUG] [Thread-23159] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:37:04.108 [DEBUG] [Thread-23159] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:37:04.108 [INFO] [Thread-23159] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:37:04.116 [DEBUG] [Thread-23159] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] client lang: <none>
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] server lang: <none>
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] kex follows: False
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] Compression: none
2025-11-12T21:37:04.117 [DEBUG] [Thread-23159] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:37:04.173 [DEBUG] [Thread-23159] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:37:04.174 [DEBUG] [Thread-23159] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:37:04.175 [DEBUG] [Thread-23159] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:37:04.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:37:04.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:37:04.229 [DEBUG] [Thread-23159] [transport.py] [_log()] userauth is OK
2025-11-12T21:37:04.229 [DEBUG] [Thread-23159] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:37:04.229 [DEBUG] [Thread-23159] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:37:04.230 [DEBUG] [Thread-23159] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:37:04.230 [DEBUG] [Thread-23159] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:37:04.249 [INFO] [Thread-23159] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:37:04.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:37:04.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:37:04.355 [DEBUG] [Thread-23161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:05.134 [DEBUG] [Thread-23159] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:37:05.134 [DEBUG] [Thread-23159] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:37:05.182 [DEBUG] [Thread-23159] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:37:05.182 [DEBUG] [Thread-23159] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:37:05.190 [DEBUG] [Thread-23159] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:37:05.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:37:05.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-11-12T21:37:05.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-11-12T21:37:05.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:37:05.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:37:05.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:37:05.224 [DEBUG] [Thread-23159] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:37:14.017 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:19.403 [DEBUG] [Thread-23162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:24.946 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:34.440 [DEBUG] [Thread-23163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:35.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:37:35.227 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:37:35.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:37:35.827 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 37, 20), 12.36, 43.82, 0.0, 11.17, 17.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:37:35.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:37:20
2025-11-12T21:37:35.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:37:36.134 [DEBUG] [Thread-23164] [transport.py] [_log()] starting thread (client mode): 0x149a9a50
2025-11-12T21:37:36.134 [DEBUG] [Thread-23164] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:37:36.154 [DEBUG] [Thread-23164] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:37:36.154 [INFO] [Thread-23164] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] client lang: <none>
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] server lang: <none>
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] kex follows: False
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] Compression: none
2025-11-12T21:37:36.157 [DEBUG] [Thread-23164] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:37:36.172 [DEBUG] [Thread-23164] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:37:36.173 [DEBUG] [Thread-23164] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:37:36.173 [DEBUG] [Thread-23164] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:37:36.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:37:36.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:37:36.175 [DEBUG] [Thread-23164] [transport.py] [_log()] userauth is OK
2025-11-12T21:37:36.176 [DEBUG] [Thread-23164] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:37:36.176 [DEBUG] [Thread-23164] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:37:36.176 [DEBUG] [Thread-23164] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:37:36.176 [DEBUG] [Thread-23164] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:37:36.194 [INFO] [Thread-23164] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:37:36.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:37:36.816 [DEBUG] [Thread-23164] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:37:36.816 [DEBUG] [Thread-23164] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:37:36.816 [DEBUG] [Thread-23164] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:37:36.858 [DEBUG] [Thread-23164] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:37:36.858 [DEBUG] [Thread-23164] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:37:36.861 [DEBUG] [Thread-23164] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:37:36.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:37:36.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:37:36.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:37:36.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:37:36.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:37:36.886 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:37:36.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:37:36.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:37:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:37:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.817097 -999.00  +17.90   7.80     48   +6.80 1 2 1 1 1     0    0 6.54 -191.30 z.ES. 6.8 7.8 197.6 11.2 18.7 -21.8 18.6 -20.9 18.4 -20.2 18.6 -20.7
2025-11-12T21:37:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:37:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:37:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.817097
2025-11-12T21:37:36.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:37:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:37:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:37:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:37:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:37:36.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:37:20', tmtdew=12.36, humidity=43.82, cloud=0.0, wind=11.17, temperature=17.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:37:21', seeing=0.96, atlas_timestamp='2025-11-12T19:36:37.181', atlas_cloud=2, atlas_rain=1, zp_data=[0.5562499999999995, 0.46825000000000117, 0.5012500000000006, 0.942499999999999, 1.2845000000000004, 1.4842500000000012, 1.1075, 0.526250000000001, 0.4949999999999992, 0.5050000000000008, 0.5472499999999982, 1.2519999999999998, 1.8579999999999997, 2.29275, 1.9894999999999996, 0.7394999999999996, 0.5282499999999999, 0.8014999999999999, 0.9819999999999993, 1.658249999999999, nan, nan, nan, 1.6952499999999997, 0.5085000000000006, 1.0564999999999998, 1.5107499999999998, 2.5335, nan, nan, nan, 1.8660000000000014, 0.9492499999999993], zp_timestamp='2025-11-12T19:33:00')
2025-11-12T21:37:36.889 [DEBUG] [Thread-23164] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:37:36.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:37:36.986 [DEBUG] [Thread-23167] [transport.py] [_log()] starting thread (client mode): 0x149173d0
2025-11-12T21:37:36.986 [DEBUG] [Thread-23167] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:37:37.001 [DEBUG] [Thread-23167] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:37:37.001 [INFO] [Thread-23167] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] client lang: <none>
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] server lang: <none>
2025-11-12T21:37:37.009 [DEBUG] [Thread-23167] [transport.py] [_log()] kex follows: False
2025-11-12T21:37:37.010 [DEBUG] [Thread-23167] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:37:37.010 [DEBUG] [Thread-23167] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:37:37.010 [DEBUG] [Thread-23167] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:37:37.010 [DEBUG] [Thread-23167] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:37:37.010 [DEBUG] [Thread-23167] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:37:37.010 [DEBUG] [Thread-23167] [transport.py] [_log()] Compression: none
2025-11-12T21:37:37.010 [DEBUG] [Thread-23167] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:37:37.071 [DEBUG] [Thread-23167] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:37:37.072 [DEBUG] [Thread-23167] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:37:37.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:37:37.073 [DEBUG] [Thread-23167] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:37:37.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:37:37.129 [DEBUG] [Thread-23167] [transport.py] [_log()] userauth is OK
2025-11-12T21:37:37.130 [DEBUG] [Thread-23167] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:37:37.130 [DEBUG] [Thread-23167] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:37:37.130 [DEBUG] [Thread-23167] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:37:37.130 [DEBUG] [Thread-23167] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:37:37.150 [INFO] [Thread-23167] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:37:37.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:37:37.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:37:38.004 [DEBUG] [Thread-23167] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:37:38.005 [DEBUG] [Thread-23167] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:37:38.052 [DEBUG] [Thread-23167] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:37:38.052 [DEBUG] [Thread-23167] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:37:38.061 [DEBUG] [Thread-23167] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:37:38.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:37:38.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-11-12T21:37:38.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-11-12T21:37:38.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:37:38.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:37:38.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:37:38.096 [DEBUG] [Thread-23167] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:37:46.843 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:49.478 [DEBUG] [Thread-23169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:50.812 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:50.813 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:56.115 [DEBUG] [Thread-23170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:37:57.439 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:04.527 [DEBUG] [Thread-23171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:38:08.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:38:08.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-11-12T21:38:08.483 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 37, 52), 12.32, 43.93, 0.0, 10.09, 17.56, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:38:08.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:37:52
2025-11-12T21:38:08.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:38:09.044 [DEBUG] [Thread-23172] [transport.py] [_log()] starting thread (client mode): 0x14921510
2025-11-12T21:38:09.044 [DEBUG] [Thread-23172] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:38:09.065 [DEBUG] [Thread-23172] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:38:09.065 [INFO] [Thread-23172] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] client lang: <none>
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] server lang: <none>
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] kex follows: False
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:38:09.069 [DEBUG] [Thread-23172] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:38:09.070 [DEBUG] [Thread-23172] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:38:09.070 [DEBUG] [Thread-23172] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:38:09.070 [DEBUG] [Thread-23172] [transport.py] [_log()] Compression: none
2025-11-12T21:38:09.070 [DEBUG] [Thread-23172] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:38:09.086 [DEBUG] [Thread-23172] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:38:09.087 [DEBUG] [Thread-23172] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:38:09.087 [DEBUG] [Thread-23172] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:38:09.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:38:09.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:38:09.089 [DEBUG] [Thread-23172] [transport.py] [_log()] userauth is OK
2025-11-12T21:38:09.089 [DEBUG] [Thread-23172] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:38:09.089 [DEBUG] [Thread-23172] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:38:09.089 [DEBUG] [Thread-23172] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:38:09.090 [DEBUG] [Thread-23172] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:38:09.115 [INFO] [Thread-23172] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:38:09.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:38:09.865 [DEBUG] [Thread-23172] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:38:09.865 [DEBUG] [Thread-23172] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:38:09.865 [DEBUG] [Thread-23172] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:38:09.906 [DEBUG] [Thread-23172] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:38:09.906 [DEBUG] [Thread-23172] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:38:09.909 [DEBUG] [Thread-23172] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:38:09.922 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:38:09.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:38:09.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:38:09.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:38:09.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:38:09.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:38:09.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:38:09.934 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:38:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:38:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.817792 -999.00  +17.90   6.03     48   +6.90 1 2 1 1 1     0    0 7.36 -160.33 z.ES. 7.8 6.0 204.4 11.3 18.6 -21.8 18.6 -20.9 18.4 -20.2 18.6 -20.8
2025-11-12T21:38:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:38:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:38:09.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.817792
2025-11-12T21:38:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:38:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:38:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:38:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:38:09.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:38:09.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:37:52', tmtdew=12.32, humidity=43.93, cloud=0.0, wind=10.09, temperature=17.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:37:53', seeing=0.96, atlas_timestamp='2025-11-12T19:37:37.229', atlas_cloud=2, atlas_rain=1, zp_data=[0.8682499999999997, 0.6052500000000007, 0.8437500000000009, 1.6564999999999994, 1.7255000000000003, 1.9132500000000006, 1.6359999999999992, 0.9597500000000005, 0.46149999999999913, 0.464500000000001, 0.7672499999999998, 1.564, nan, nan, 2.2689999999999992, 0.722999999999999, 0.5132499999999993, 0.5439999999999996, 0.9144999999999994, 1.9997499999999988, nan, nan, nan, 1.7207499999999998, 0.5359999999999996, 1.1155, 1.4857500000000003, 2.6305000000000005, nan, nan, nan, nan, 0.9727499999999996], zp_timestamp='2025-11-12T19:36:00')
2025-11-12T21:38:09.938 [DEBUG] [Thread-23172] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:38:10.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:38:10.032 [DEBUG] [Thread-23175] [transport.py] [_log()] starting thread (client mode): 0x14904d30
2025-11-12T21:38:10.032 [DEBUG] [Thread-23175] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:38:10.047 [DEBUG] [Thread-23175] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:38:10.047 [INFO] [Thread-23175] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:38:10.055 [DEBUG] [Thread-23175] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:38:10.055 [DEBUG] [Thread-23175] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:38:10.056 [DEBUG] [Thread-23175] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:38:10.056 [DEBUG] [Thread-23175] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:38:10.056 [DEBUG] [Thread-23175] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:38:10.056 [DEBUG] [Thread-23175] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:38:10.056 [DEBUG] [Thread-23175] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:38:10.056 [DEBUG] [Thread-23175] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:38:10.056 [DEBUG] [Thread-23175] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:38:10.056 [DEBUG] [Thread-23175] [transport.py] [_log()] client lang: <none>
2025-11-12T21:38:10.057 [DEBUG] [Thread-23175] [transport.py] [_log()] server lang: <none>
2025-11-12T21:38:10.057 [DEBUG] [Thread-23175] [transport.py] [_log()] kex follows: False
2025-11-12T21:38:10.057 [DEBUG] [Thread-23175] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:38:10.057 [DEBUG] [Thread-23175] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:38:10.057 [DEBUG] [Thread-23175] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:38:10.057 [DEBUG] [Thread-23175] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:38:10.057 [DEBUG] [Thread-23175] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:38:10.058 [DEBUG] [Thread-23175] [transport.py] [_log()] Compression: none
2025-11-12T21:38:10.058 [DEBUG] [Thread-23175] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:38:10.114 [DEBUG] [Thread-23175] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:38:10.115 [DEBUG] [Thread-23175] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:38:10.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:38:10.116 [DEBUG] [Thread-23175] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:38:10.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:38:10.169 [DEBUG] [Thread-23175] [transport.py] [_log()] userauth is OK
2025-11-12T21:38:10.170 [DEBUG] [Thread-23175] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:38:10.170 [DEBUG] [Thread-23175] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:38:10.170 [DEBUG] [Thread-23175] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:38:10.170 [DEBUG] [Thread-23175] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:38:10.190 [INFO] [Thread-23175] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:38:10.190 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:38:10.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:38:11.042 [DEBUG] [Thread-23175] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:38:11.042 [DEBUG] [Thread-23175] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:38:11.091 [DEBUG] [Thread-23175] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:38:11.091 [DEBUG] [Thread-23175] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:38:11.100 [DEBUG] [Thread-23175] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:38:11.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:38:11.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:38:11.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-11-12T21:38:11.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:38:11.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:38:11.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:38:11.137 [DEBUG] [Thread-23175] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:38:19.148 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:19.567 [DEBUG] [Thread-23177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:29.952 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:34.613 [DEBUG] [Thread-23178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:40.368 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:41.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:38:41.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:38:41.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-11-12T21:38:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 38, 24), 12.26, 44.11, 0.0, 10.27, 17.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:38:41.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:38:24
2025-11-12T21:38:41.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:38:42.067 [DEBUG] [Thread-23179] [transport.py] [_log()] starting thread (client mode): 0x14916560
2025-11-12T21:38:42.067 [DEBUG] [Thread-23179] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:38:42.087 [DEBUG] [Thread-23179] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:38:42.087 [INFO] [Thread-23179] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:38:42.090 [DEBUG] [Thread-23179] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:38:42.090 [DEBUG] [Thread-23179] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:38:42.090 [DEBUG] [Thread-23179] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:38:42.090 [DEBUG] [Thread-23179] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:38:42.090 [DEBUG] [Thread-23179] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:38:42.090 [DEBUG] [Thread-23179] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:38:42.090 [DEBUG] [Thread-23179] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:38:42.090 [DEBUG] [Thread-23179] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] client lang: <none>
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] server lang: <none>
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] kex follows: False
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] Compression: none
2025-11-12T21:38:42.091 [DEBUG] [Thread-23179] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:38:42.109 [DEBUG] [Thread-23179] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:38:42.109 [DEBUG] [Thread-23179] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:38:42.110 [DEBUG] [Thread-23179] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:38:42.110 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:38:42.111 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:38:42.112 [DEBUG] [Thread-23179] [transport.py] [_log()] userauth is OK
2025-11-12T21:38:42.112 [DEBUG] [Thread-23179] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:38:42.112 [DEBUG] [Thread-23179] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:38:42.112 [DEBUG] [Thread-23179] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:38:42.112 [DEBUG] [Thread-23179] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:38:42.136 [INFO] [Thread-23179] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:38:42.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:38:42.771 [DEBUG] [Thread-23179] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:38:42.771 [DEBUG] [Thread-23179] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:38:42.772 [DEBUG] [Thread-23179] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:38:42.812 [DEBUG] [Thread-23179] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:38:42.813 [DEBUG] [Thread-23179] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:38:42.816 [DEBUG] [Thread-23179] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:38:42.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:38:42.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:38:42.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:38:42.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:38:42.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:38:42.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:38:42.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:38:42.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:38:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:38:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.818139 -999.00  +17.90   6.13     48   +6.80 1 2 1 1 1     0    0 7.57 -152.02 z.ES. 7.3 6.1 176.4 11.8 18.7 -21.6 18.6 -21.1 18.4 -20.1 18.7 -20.7
2025-11-12T21:38:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:38:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:38:42.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.818139
2025-11-12T21:38:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:38:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:38:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:38:42.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:38:42.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:38:42.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:38:24', tmtdew=12.26, humidity=44.11, cloud=0.0, wind=10.27, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:38:25', seeing=0.87, atlas_timestamp='2025-11-12T19:38:07.210', atlas_cloud=2, atlas_rain=1, zp_data=[0.8682499999999997, 0.6052500000000007, 0.8437500000000009, 1.6564999999999994, 1.7255000000000003, 1.9132500000000006, 1.6359999999999992, 0.9597500000000005, 0.46149999999999913, 0.464500000000001, 0.7672499999999998, 1.564, nan, nan, 2.2689999999999992, 0.722999999999999, 0.5132499999999993, 0.5439999999999996, 0.9144999999999994, 1.9997499999999988, nan, nan, nan, 1.7207499999999998, 0.5359999999999996, 1.1155, 1.4857500000000003, 2.6305000000000005, nan, nan, nan, nan, 0.9727499999999996], zp_timestamp='2025-11-12T19:36:00')
2025-11-12T21:38:42.845 [DEBUG] [Thread-23179] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:38: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-11-12T21:38:42.942 [DEBUG] [Thread-23182] [transport.py] [_log()] starting thread (client mode): 0x1739be50
2025-11-12T21:38:42.942 [DEBUG] [Thread-23182] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:38:42.956 [DEBUG] [Thread-23182] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:38:42.957 [INFO] [Thread-23182] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:38:42.964 [DEBUG] [Thread-23182] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] client lang: <none>
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] server lang: <none>
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] kex follows: False
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] Compression: none
2025-11-12T21:38:42.965 [DEBUG] [Thread-23182] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:38:43.021 [DEBUG] [Thread-23182] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:38:43.022 [DEBUG] [Thread-23182] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:38:43.023 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:38:43.023 [DEBUG] [Thread-23182] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:38:43.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:38:43.077 [DEBUG] [Thread-23182] [transport.py] [_log()] userauth is OK
2025-11-12T21:38:43.078 [DEBUG] [Thread-23182] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:38:43.078 [DEBUG] [Thread-23182] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:38:43.078 [DEBUG] [Thread-23182] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:38:43.078 [DEBUG] [Thread-23182] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:38:43.097 [INFO] [Thread-23182] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:38:43.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:38:43.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:38:43.945 [DEBUG] [Thread-23182] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:38:43.945 [DEBUG] [Thread-23182] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:38:43.993 [DEBUG] [Thread-23182] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:38:43.993 [DEBUG] [Thread-23182] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:38:44.002 [DEBUG] [Thread-23182] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:38:44.012 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:38: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-11-12T21:38:44.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-11-12T21:38:44.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:38:44.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:38:44.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:38:44.040 [DEBUG] [Thread-23182] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:38:49.647 [DEBUG] [Thread-23184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:51.015 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:51.016 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:51.312 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:38:56.188 [DEBUG] [Thread-23185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:01.839 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:04.702 [DEBUG] [Thread-23186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:12.710 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:14.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:39:14.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:39:14.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:39:14.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 38, 56), 12.28, 44.55, 0.0, 11.01, 17.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:39:14.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:38:56
2025-11-12T21:39:14.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:39:14.980 [DEBUG] [Thread-23187] [transport.py] [_log()] starting thread (client mode): 0x149a8280
2025-11-12T21:39:14.980 [DEBUG] [Thread-23187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:39:15.001 [DEBUG] [Thread-23187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:39:15.001 [INFO] [Thread-23187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:39:15.004 [DEBUG] [Thread-23187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:39:15.004 [DEBUG] [Thread-23187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:39:15.004 [DEBUG] [Thread-23187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:39:15.004 [DEBUG] [Thread-23187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:39:15.004 [DEBUG] [Thread-23187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] client lang: <none>
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] server lang: <none>
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] kex follows: False
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] Compression: none
2025-11-12T21:39:15.005 [DEBUG] [Thread-23187] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:39:15.024 [DEBUG] [Thread-23187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:39:15.024 [DEBUG] [Thread-23187] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:39:15.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:39:15.025 [DEBUG] [Thread-23187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:39:15.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:39:15.028 [DEBUG] [Thread-23187] [transport.py] [_log()] userauth is OK
2025-11-12T21:39:15.028 [DEBUG] [Thread-23187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:39:15.028 [DEBUG] [Thread-23187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:39:15.028 [DEBUG] [Thread-23187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:39:15.028 [DEBUG] [Thread-23187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:39:15.055 [INFO] [Thread-23187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:39:15.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:39:15.813 [DEBUG] [Thread-23187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:39:15.813 [DEBUG] [Thread-23187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:39:15.814 [DEBUG] [Thread-23187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:39:15.854 [DEBUG] [Thread-23187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:39:15.855 [DEBUG] [Thread-23187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:39:15.858 [DEBUG] [Thread-23187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:39:15.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:39:15.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:39:15.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:39:15.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:39:15.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:39:15.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:39:15.883 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:39:15.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:39:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:39:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.818486 -999.00  +17.90  10.07     48   +6.80 1 2 1 1 1     0    0 7.54 -149.30 z.ES. 9.3 10.1 205.2 11.4 18.6 -21.6 18.6 -20.8 18.4 -20.2 18.6 -20.7
2025-11-12T21:39:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:39:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:39:15.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.818486
2025-11-12T21:39:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:39:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:39:15.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:39:15.885 [DEBUG] [Thread-23187] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:39:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:39:15.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:39:15.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:38:56', tmtdew=12.28, humidity=44.55, cloud=0.0, wind=11.01, temperature=17.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:38:57', seeing=0.87, atlas_timestamp='2025-11-12T19:38:37.190', atlas_cloud=2, atlas_rain=1, zp_data=[0.8682499999999997, 0.6052500000000007, 0.8437500000000009, 1.6564999999999994, 1.7255000000000003, 1.9132500000000006, 1.6359999999999992, 0.9597500000000005, 0.46149999999999913, 0.464500000000001, 0.7672499999999998, 1.564, nan, nan, 2.2689999999999992, 0.722999999999999, 0.5132499999999993, 0.5439999999999996, 0.9144999999999994, 1.9997499999999988, nan, nan, nan, 1.7207499999999998, 0.5359999999999996, 1.1155, 1.4857500000000003, 2.6305000000000005, nan, nan, nan, nan, 0.9727499999999996], zp_timestamp='2025-11-12T19:36:00')
2025-11-12T21:39: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-11-12T21:39:15.984 [DEBUG] [Thread-23190] [transport.py] [_log()] starting thread (client mode): 0x14917bb0
2025-11-12T21:39:15.984 [DEBUG] [Thread-23190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:39:16.000 [DEBUG] [Thread-23190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:39:16.001 [INFO] [Thread-23190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] client lang: <none>
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] server lang: <none>
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] kex follows: False
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:39:16.008 [DEBUG] [Thread-23190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:39:16.009 [DEBUG] [Thread-23190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:39:16.009 [DEBUG] [Thread-23190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:39:16.009 [DEBUG] [Thread-23190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:39:16.009 [DEBUG] [Thread-23190] [transport.py] [_log()] Compression: none
2025-11-12T21:39:16.009 [DEBUG] [Thread-23190] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:39:16.069 [DEBUG] [Thread-23190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:39:16.070 [DEBUG] [Thread-23190] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:39:16.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:39:16.071 [DEBUG] [Thread-23190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:39:16.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:39:16.125 [DEBUG] [Thread-23190] [transport.py] [_log()] userauth is OK
2025-11-12T21:39:16.125 [DEBUG] [Thread-23190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:39:16.126 [DEBUG] [Thread-23190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:39:16.126 [DEBUG] [Thread-23190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:39:16.126 [DEBUG] [Thread-23190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:39:16.144 [INFO] [Thread-23190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:39:16.145 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:39:16.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:39:17.012 [DEBUG] [Thread-23190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:39:17.012 [DEBUG] [Thread-23190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:39:17.060 [DEBUG] [Thread-23190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:39:17.060 [DEBUG] [Thread-23190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:39:17.069 [DEBUG] [Thread-23190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:39:17.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:39:17.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-11-12T21:39:17.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-11-12T21:39:17.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:39:17.098 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:39:17.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:39:17.106 [DEBUG] [Thread-23190] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:39:19.737 [DEBUG] [Thread-23192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:23.409 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:34.371 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:34.791 [DEBUG] [Thread-23193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:45.147 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:47.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:39:47.129 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:39:47.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-11-12T21:39:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 39, 28), 12.22, 44.73, 0.0, 11.01, 17.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:39:47.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:39:28
2025-11-12T21:39:47.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:39:48.080 [DEBUG] [Thread-23194] [transport.py] [_log()] starting thread (client mode): 0x14946800
2025-11-12T21:39:48.080 [DEBUG] [Thread-23194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:39:48.100 [DEBUG] [Thread-23194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:39:48.100 [INFO] [Thread-23194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:39:48.103 [DEBUG] [Thread-23194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:39:48.103 [DEBUG] [Thread-23194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] client lang: <none>
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] server lang: <none>
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] kex follows: False
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] Compression: none
2025-11-12T21:39:48.104 [DEBUG] [Thread-23194] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:39:48.120 [DEBUG] [Thread-23194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:39:48.120 [DEBUG] [Thread-23194] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:39:48.121 [DEBUG] [Thread-23194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:39:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:39:48.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:39:48.122 [DEBUG] [Thread-23194] [transport.py] [_log()] userauth is OK
2025-11-12T21:39:48.122 [DEBUG] [Thread-23194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:39:48.122 [DEBUG] [Thread-23194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:39:48.122 [DEBUG] [Thread-23194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:39:48.122 [DEBUG] [Thread-23194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:39:48.132 [INFO] [Thread-23194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:39:48.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:39:48.762 [DEBUG] [Thread-23194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:39:48.763 [DEBUG] [Thread-23194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:39:48.763 [DEBUG] [Thread-23194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:39:48.804 [DEBUG] [Thread-23194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:39:48.804 [DEBUG] [Thread-23194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:39:48.806 [DEBUG] [Thread-23194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:39:48.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:39:48.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:39:48.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:39:48.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:39:48.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:39:48.823 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:39:48.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.818834 -999.00  +17.90   6.06     48   +6.80 1 2 1 1 1     0    0 7.72 -143.18 ..Es. 8.7 6.1 201.4 11.5 18.6 -21.6 18.6 -20.7 18.4 -20.1 18.6 -20.6
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.818834
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:39:48.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:39:28', tmtdew=12.22, humidity=44.73, cloud=0.0, wind=11.01, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:39:29', seeing=1.1, atlas_timestamp='2025-11-12T19:39:07.258', atlas_cloud=2, atlas_rain=1, zp_data=[0.8682499999999997, 0.6052500000000007, 0.8437500000000009, 1.6564999999999994, 1.7255000000000003, 1.9132500000000006, 1.6359999999999992, 0.9597500000000005, 0.46149999999999913, 0.464500000000001, 0.7672499999999998, 1.564, nan, nan, 2.2689999999999992, 0.722999999999999, 0.5132499999999993, 0.5439999999999996, 0.9144999999999994, 1.9997499999999988, nan, nan, nan, 1.7207499999999998, 0.5359999999999996, 1.1155, 1.4857500000000003, 2.6305000000000005, nan, nan, nan, nan, 0.9727499999999996], zp_timestamp='2025-11-12T19:36:00')
2025-11-12T21:39:48.824 [DEBUG] [Thread-23194] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:39:48.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:39:48.911 [DEBUG] [Thread-23197] [transport.py] [_log()] starting thread (client mode): 0x14916890
2025-11-12T21:39:48.911 [DEBUG] [Thread-23197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:39:48.926 [DEBUG] [Thread-23197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:39:48.926 [INFO] [Thread-23197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:39:48.933 [DEBUG] [Thread-23197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:39:48.933 [DEBUG] [Thread-23197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:39:48.933 [DEBUG] [Thread-23197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:39:48.933 [DEBUG] [Thread-23197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:39:48.933 [DEBUG] [Thread-23197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:39:48.933 [DEBUG] [Thread-23197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:39:48.933 [DEBUG] [Thread-23197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] client lang: <none>
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] server lang: <none>
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] kex follows: False
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] Compression: none
2025-11-12T21:39:48.934 [DEBUG] [Thread-23197] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:39:48.995 [DEBUG] [Thread-23197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:39:48.995 [DEBUG] [Thread-23197] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:39:48.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:39:48.996 [DEBUG] [Thread-23197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:39:48.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:39:49.052 [DEBUG] [Thread-23197] [transport.py] [_log()] userauth is OK
2025-11-12T21:39:49.053 [DEBUG] [Thread-23197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:39:49.053 [DEBUG] [Thread-23197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:39:49.053 [DEBUG] [Thread-23197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:39:49.053 [DEBUG] [Thread-23197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:39:49.066 [INFO] [Thread-23197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:39:49.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:39:49.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:39:49.826 [DEBUG] [Thread-23199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:49.896 [DEBUG] [Thread-23197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:39:49.896 [DEBUG] [Thread-23197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:39:49.947 [DEBUG] [Thread-23197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:39:49.947 [DEBUG] [Thread-23197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:39:49.955 [DEBUG] [Thread-23197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:39:49.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:39:49.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-11-12T21:39:49.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-11-12T21:39:49.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:39:49.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:39:49.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:39:49.987 [DEBUG] [Thread-23197] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:39:51.217 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:51.218 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:55.687 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:39:56.240 [DEBUG] [Thread-23200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:04.865 [DEBUG] [Thread-23201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:06.258 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:17.102 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:19.904 [DEBUG] [Thread-23202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:19.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:40:19.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:40:19.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-11-12T21:40:20.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 40), 12.23, 44.71, 0.0, 10.68, 17.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:40:20.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:40:00
2025-11-12T21:40:20.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:40:20.902 [DEBUG] [Thread-23203] [transport.py] [_log()] starting thread (client mode): 0x149a8c10
2025-11-12T21:40:20.903 [DEBUG] [Thread-23203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:40:20.924 [DEBUG] [Thread-23203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:40:20.925 [INFO] [Thread-23203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] client lang: <none>
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] server lang: <none>
2025-11-12T21:40:20.927 [DEBUG] [Thread-23203] [transport.py] [_log()] kex follows: False
2025-11-12T21:40:20.928 [DEBUG] [Thread-23203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:40:20.928 [DEBUG] [Thread-23203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:40:20.928 [DEBUG] [Thread-23203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:40:20.928 [DEBUG] [Thread-23203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:40:20.928 [DEBUG] [Thread-23203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:40:20.928 [DEBUG] [Thread-23203] [transport.py] [_log()] Compression: none
2025-11-12T21:40:20.928 [DEBUG] [Thread-23203] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:40:20.944 [DEBUG] [Thread-23203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:40:20.945 [DEBUG] [Thread-23203] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:40:20.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:40:20.946 [DEBUG] [Thread-23203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:40:20.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:40:20.947 [DEBUG] [Thread-23203] [transport.py] [_log()] userauth is OK
2025-11-12T21:40:20.947 [DEBUG] [Thread-23203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:40:20.948 [DEBUG] [Thread-23203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:40:20.948 [DEBUG] [Thread-23203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:40:20.948 [DEBUG] [Thread-23203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:40:20.972 [INFO] [Thread-23203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:40:20.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:40:21.834 [DEBUG] [Thread-23203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:40:21.835 [DEBUG] [Thread-23203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:40:21.835 [DEBUG] [Thread-23203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:40:21.875 [DEBUG] [Thread-23203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:40:21.876 [DEBUG] [Thread-23203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:40:21.879 [DEBUG] [Thread-23203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:40:21.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:40:21.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:40:21.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:40:21.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:40:21.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:40:21.904 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:40:21.904 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:40:21.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:40:21.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:40:21.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.819181 -999.00  +17.90   7.90     48   +6.90 1 2 1 1 1     0    0 8.11 -132.00 ..Es. 7.6 7.9 211.4 10.3 18.6 -21.6 18.5 -20.7 18.4 -20.1 18.6 -20.7
2025-11-12T21:40:21.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:40:21.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:40:21.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.819181
2025-11-12T21:40:21.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:40:21.906 [DEBUG] [Thread-23203] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:40:21.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:40:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:40:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:40:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:40:21.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:40:00', tmtdew=12.23, humidity=44.71, cloud=0.0, wind=10.68, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:40:01', seeing=1.1, atlas_timestamp='2025-11-12T19:39:37.238', atlas_cloud=2, atlas_rain=1, zp_data=[0.8682499999999997, 0.6052500000000007, 0.8437500000000009, 1.6564999999999994, 1.7255000000000003, 1.9132500000000006, 1.6359999999999992, 0.9597500000000005, 0.46149999999999913, 0.464500000000001, 0.7672499999999998, 1.564, nan, nan, 2.2689999999999992, 0.722999999999999, 0.5132499999999993, 0.5439999999999996, 0.9144999999999994, 1.9997499999999988, nan, nan, nan, 1.7207499999999998, 0.5359999999999996, 1.1155, 1.4857500000000003, 2.6305000000000005, nan, nan, nan, nan, 0.9727499999999996], zp_timestamp='2025-11-12T19:36:00')
2025-11-12T21:40:21.990 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:40:22.002 [DEBUG] [Thread-23206] [transport.py] [_log()] starting thread (client mode): 0x17399840
2025-11-12T21:40:22.002 [DEBUG] [Thread-23206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:40:22.018 [DEBUG] [Thread-23206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:40:22.018 [INFO] [Thread-23206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:40:22.026 [DEBUG] [Thread-23206] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:40:22.026 [DEBUG] [Thread-23206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:40:22.026 [DEBUG] [Thread-23206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:40:22.026 [DEBUG] [Thread-23206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:40:22.026 [DEBUG] [Thread-23206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:40:22.026 [DEBUG] [Thread-23206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] client lang: <none>
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] server lang: <none>
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] kex follows: False
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:40:22.027 [DEBUG] [Thread-23206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:40:22.028 [DEBUG] [Thread-23206] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:40:22.028 [DEBUG] [Thread-23206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:40:22.028 [DEBUG] [Thread-23206] [transport.py] [_log()] Compression: none
2025-11-12T21:40:22.028 [DEBUG] [Thread-23206] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:40:22.085 [DEBUG] [Thread-23206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:40:22.086 [DEBUG] [Thread-23206] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:40:22.087 [DEBUG] [Thread-23206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:40:22.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:40:22.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:40:22.142 [DEBUG] [Thread-23206] [transport.py] [_log()] userauth is OK
2025-11-12T21:40:22.142 [DEBUG] [Thread-23206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:40:22.142 [DEBUG] [Thread-23206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:40:22.142 [DEBUG] [Thread-23206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:40:22.142 [DEBUG] [Thread-23206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:40:22.161 [INFO] [Thread-23206] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:40:22.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:40:22.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:40:22.995 [DEBUG] [Thread-23206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:40:22.996 [DEBUG] [Thread-23206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:40:23.044 [DEBUG] [Thread-23206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:40:23.044 [DEBUG] [Thread-23206] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:40:23.053 [DEBUG] [Thread-23206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:40:23.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:40:23.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-11-12T21:40:23.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-11-12T21:40:23.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:40:23.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:40:23.082 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:40:23.090 [DEBUG] [Thread-23206] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:40:27.911 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:34.939 [DEBUG] [Thread-23208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:38.454 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:49.214 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:49.983 [DEBUG] [Thread-23209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:51.421 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:51.422 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:40:53.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:40:53.088 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:40:53.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-11-12T21:40:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 40, 32), 12.2, 44.8, 0.0, 10.75, 17.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:40:53.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:40:32
2025-11-12T21:40:53.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:40:54.004 [DEBUG] [Thread-23210] [transport.py] [_log()] starting thread (client mode): 0x1739aaa0
2025-11-12T21:40:54.004 [DEBUG] [Thread-23210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:40:54.024 [DEBUG] [Thread-23210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:40:54.024 [INFO] [Thread-23210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:40:54.026 [DEBUG] [Thread-23210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] client lang: <none>
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] server lang: <none>
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] kex follows: False
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] Compression: none
2025-11-12T21:40:54.027 [DEBUG] [Thread-23210] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:40:54.046 [DEBUG] [Thread-23210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:40:54.047 [DEBUG] [Thread-23210] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:40:54.047 [DEBUG] [Thread-23210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:40:54.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:40:54.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:40:54.049 [DEBUG] [Thread-23210] [transport.py] [_log()] userauth is OK
2025-11-12T21:40:54.050 [DEBUG] [Thread-23210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:40:54.050 [DEBUG] [Thread-23210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:40:54.050 [DEBUG] [Thread-23210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:40:54.050 [DEBUG] [Thread-23210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:40:54.075 [INFO] [Thread-23210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:40:54.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:40:54.729 [DEBUG] [Thread-23210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:40:54.730 [DEBUG] [Thread-23210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:40:54.730 [DEBUG] [Thread-23210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:40:54.771 [DEBUG] [Thread-23210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:40:54.771 [DEBUG] [Thread-23210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:40:54.774 [DEBUG] [Thread-23210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:40:54.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:40:54.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:40:54.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:40:54.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:40:54.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:40:54.801 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:40:54.801 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:40:54.801 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:40:54.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:40:54.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.819528 -999.00  +17.80   7.50     48   +6.80 1 2 1 1 1     0    0 8.46 -123.82 ..Es. 4.9 7.5 201.6 10.7 18.6 -21.6 18.5 -20.8 18.4 -20.1 18.6 -20.5
2025-11-12T21:40:54.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:40:54.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:40:54.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.819528
2025-11-12T21:40:54.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:40:54.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:40:54.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:40:54.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:40:54.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:40:54.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:40:32', tmtdew=12.2, humidity=44.8, cloud=0.0, wind=10.75, temperature=17.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:40:33', seeing=1.16, atlas_timestamp='2025-11-12T19:40:07.219', atlas_cloud=2, atlas_rain=1, zp_data=[0.8682499999999997, 0.6052500000000007, 0.8437500000000009, 1.6564999999999994, 1.7255000000000003, 1.9132500000000006, 1.6359999999999992, 0.9597500000000005, 0.46149999999999913, 0.464500000000001, 0.7672499999999998, 1.564, nan, nan, 2.2689999999999992, 0.722999999999999, 0.5132499999999993, 0.5439999999999996, 0.9144999999999994, 1.9997499999999988, nan, nan, nan, 1.7207499999999998, 0.5359999999999996, 1.1155, 1.4857500000000003, 2.6305000000000005, nan, nan, nan, nan, 0.9727499999999996], zp_timestamp='2025-11-12T19:36:00')
2025-11-12T21:40:54.804 [DEBUG] [Thread-23210] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:40:54.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:40:54.900 [DEBUG] [Thread-23213] [transport.py] [_log()] starting thread (client mode): 0x1739bb80
2025-11-12T21:40:54.901 [DEBUG] [Thread-23213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:40:54.915 [DEBUG] [Thread-23213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:40:54.915 [INFO] [Thread-23213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] client lang: <none>
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] server lang: <none>
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] kex follows: False
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:40:54.923 [DEBUG] [Thread-23213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:40:54.924 [DEBUG] [Thread-23213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:40:54.924 [DEBUG] [Thread-23213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:40:54.924 [DEBUG] [Thread-23213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:40:54.924 [DEBUG] [Thread-23213] [transport.py] [_log()] Compression: none
2025-11-12T21:40:54.924 [DEBUG] [Thread-23213] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:40:54.981 [DEBUG] [Thread-23213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:40:54.982 [DEBUG] [Thread-23213] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:40:54.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:40:54.983 [DEBUG] [Thread-23213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:40:54.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:40:55.037 [DEBUG] [Thread-23213] [transport.py] [_log()] userauth is OK
2025-11-12T21:40:55.038 [DEBUG] [Thread-23213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:40:55.038 [DEBUG] [Thread-23213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:40:55.038 [DEBUG] [Thread-23213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:40:55.038 [DEBUG] [Thread-23213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:40:55.057 [INFO] [Thread-23213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:40:55.057 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:40:55.058 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:40:55.905 [DEBUG] [Thread-23213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:40:55.905 [DEBUG] [Thread-23213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:40:55.953 [DEBUG] [Thread-23213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:40:55.953 [DEBUG] [Thread-23213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:40:55.962 [DEBUG] [Thread-23213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:40:55.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:40:55.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')
2025-11-12T21:40:55.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-11-12T21:40:55.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:40:55.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:40:55.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:40:55.999 [DEBUG] [Thread-23213] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:40:56.298 [DEBUG] [Thread-23215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:00.007 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:05.021 [DEBUG] [Thread-23216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:10.642 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:20.072 [DEBUG] [Thread-23217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:21.226 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:26.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:41:26.022 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:41:26.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-11-12T21:41:26.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 41, 4), 12.26, 44.6, 0.0, 10.48, 17.58, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:41:26.657 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:41:04
2025-11-12T21:41:26.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:41:26.924 [DEBUG] [Thread-23218] [transport.py] [_log()] starting thread (client mode): 0x17399ed0
2025-11-12T21:41:26.924 [DEBUG] [Thread-23218] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:41:26.944 [DEBUG] [Thread-23218] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:41:26.944 [INFO] [Thread-23218] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:41:26.947 [DEBUG] [Thread-23218] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] client lang: <none>
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] server lang: <none>
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] kex follows: False
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] Compression: none
2025-11-12T21:41:26.948 [DEBUG] [Thread-23218] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:41:26.965 [DEBUG] [Thread-23218] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:41:26.966 [DEBUG] [Thread-23218] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:41:26.966 [DEBUG] [Thread-23218] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:41:26.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:41:26.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:41:26.968 [DEBUG] [Thread-23218] [transport.py] [_log()] userauth is OK
2025-11-12T21:41:26.969 [DEBUG] [Thread-23218] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:41:26.969 [DEBUG] [Thread-23218] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:41:26.969 [DEBUG] [Thread-23218] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:41:26.969 [DEBUG] [Thread-23218] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:41:26.993 [INFO] [Thread-23218] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:41:26.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:41:27.715 [DEBUG] [Thread-23218] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:41:27.715 [DEBUG] [Thread-23218] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:41:27.716 [DEBUG] [Thread-23218] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:41:27.757 [DEBUG] [Thread-23218] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:41:27.757 [DEBUG] [Thread-23218] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:41:27.761 [DEBUG] [Thread-23218] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:41:27.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:41:27.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:41:27.774 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:41:27.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:41:27.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:41:27.780 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:41:27.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:41:27.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:41:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:41:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.820223 -999.00  +17.80   5.03     48   +6.80 1 2 1 1 1     0    0 8.37 -116.98 ..ESw 6.4 5.0 193.8 10.7 18.6 -21.5 18.5 -20.7 18.3 -20.0 18.6 -20.8
2025-11-12T21:41:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:41:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:41:27.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.820223
2025-11-12T21:41:27.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:41:27.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:41:27.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:41:27.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:41:27.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:41:27.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:41:04', tmtdew=12.26, humidity=44.6, cloud=0.0, wind=10.48, temperature=17.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:41:05', seeing=1.16, atlas_timestamp='2025-11-12T19:41:07.267', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:39:00')
2025-11-12T21:41:27.782 [DEBUG] [Thread-23218] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:41:27.863 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:41:27.877 [DEBUG] [Thread-23221] [transport.py] [_log()] starting thread (client mode): 0x149224d0
2025-11-12T21:41:27.877 [DEBUG] [Thread-23221] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:41:27.892 [DEBUG] [Thread-23221] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:41:27.892 [INFO] [Thread-23221] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:41:27.900 [DEBUG] [Thread-23221] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:41:27.900 [DEBUG] [Thread-23221] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:41:27.900 [DEBUG] [Thread-23221] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:41:27.900 [DEBUG] [Thread-23221] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] client lang: <none>
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] server lang: <none>
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] kex follows: False
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:41:27.901 [DEBUG] [Thread-23221] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:41:27.902 [DEBUG] [Thread-23221] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:41:27.902 [DEBUG] [Thread-23221] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:41:27.902 [DEBUG] [Thread-23221] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:41:27.902 [DEBUG] [Thread-23221] [transport.py] [_log()] Compression: none
2025-11-12T21:41:27.902 [DEBUG] [Thread-23221] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:41:27.958 [DEBUG] [Thread-23221] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:41:27.958 [DEBUG] [Thread-23221] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:41:27.959 [DEBUG] [Thread-23221] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:41:27.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:41:27.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:41:28.017 [DEBUG] [Thread-23221] [transport.py] [_log()] userauth is OK
2025-11-12T21:41:28.017 [DEBUG] [Thread-23221] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:41:28.018 [DEBUG] [Thread-23221] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:41:28.018 [DEBUG] [Thread-23221] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:41:28.018 [DEBUG] [Thread-23221] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:41:28.037 [INFO] [Thread-23221] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:41:28.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:41:28.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:41:28.875 [DEBUG] [Thread-23221] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:41:28.875 [DEBUG] [Thread-23221] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:41:28.923 [DEBUG] [Thread-23221] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:41:28.923 [DEBUG] [Thread-23221] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:41:28.933 [DEBUG] [Thread-23221] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:41:28.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:41:28.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-11-12T21:41:28.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-11-12T21:41:28.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:41:28.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:41:28.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:41:28.967 [DEBUG] [Thread-23221] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:41:31.744 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:35.110 [DEBUG] [Thread-23223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:42.541 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:50.163 [DEBUG] [Thread-23224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:51.643 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:51.644 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:53.213 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:56.356 [DEBUG] [Thread-23225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:41:58.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:41:58.988 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:41:58.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-11-12T21:41:59.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 41, 36), 12.25, 44.5, 0.0, 9.72, 17.59, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:41:59.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:41:36
2025-11-12T21:41:59.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:41:59.900 [DEBUG] [Thread-23226] [transport.py] [_log()] starting thread (client mode): 0x1739a440
2025-11-12T21:41:59.900 [DEBUG] [Thread-23226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:41:59.920 [DEBUG] [Thread-23226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:41:59.920 [INFO] [Thread-23226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] client lang: <none>
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] server lang: <none>
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] kex follows: False
2025-11-12T21:41:59.923 [DEBUG] [Thread-23226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:41:59.924 [DEBUG] [Thread-23226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:41:59.924 [DEBUG] [Thread-23226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:41:59.924 [DEBUG] [Thread-23226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:41:59.924 [DEBUG] [Thread-23226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:41:59.924 [DEBUG] [Thread-23226] [transport.py] [_log()] Compression: none
2025-11-12T21:41:59.924 [DEBUG] [Thread-23226] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:41:59.943 [DEBUG] [Thread-23226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:41:59.943 [DEBUG] [Thread-23226] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:41:59.944 [DEBUG] [Thread-23226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:41:59.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:41:59.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:41:59.946 [DEBUG] [Thread-23226] [transport.py] [_log()] userauth is OK
2025-11-12T21:41:59.946 [DEBUG] [Thread-23226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:41:59.946 [DEBUG] [Thread-23226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:41:59.947 [DEBUG] [Thread-23226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:41:59.947 [DEBUG] [Thread-23226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:41:59.970 [INFO] [Thread-23226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:41:59.971 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:42:00.606 [DEBUG] [Thread-23226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:42:00.607 [DEBUG] [Thread-23226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:42:00.607 [DEBUG] [Thread-23226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:42:00.648 [DEBUG] [Thread-23226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:42:00.648 [DEBUG] [Thread-23226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:42:00.651 [DEBUG] [Thread-23226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:42:00.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:42:00.665 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:42:00.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:42:00.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:42:00.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:42:00.676 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:42:00.676 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:42:00.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:42:00.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:42:00.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.820570 -999.00  +17.80   6.93     48   +6.80 1 2 1 1 1     0    0 8.54 -115.16 ..ES. 3.5 6.9 183.0 9.1 18.6 -21.4 18.5 -20.5 18.3 -20.0 18.6 -20.4
2025-11-12T21:42:00.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:42:00.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:42:00.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.820570
2025-11-12T21:42:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:42:00.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:42:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:42:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:42:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:42:00.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:41:36', tmtdew=12.25, humidity=44.5, cloud=0.0, wind=9.72, temperature=17.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:41:37', seeing=1.16, atlas_timestamp='2025-11-12T19:41:37.248', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:39:00')
2025-11-12T21:42:00.679 [DEBUG] [Thread-23226] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:42:00.761 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:42:00.774 [DEBUG] [Thread-23229] [transport.py] [_log()] starting thread (client mode): 0x1739a830
2025-11-12T21:42:00.774 [DEBUG] [Thread-23229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:42:00.792 [DEBUG] [Thread-23229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:42:00.793 [INFO] [Thread-23229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:42:00.800 [DEBUG] [Thread-23229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:42:00.800 [DEBUG] [Thread-23229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:42:00.800 [DEBUG] [Thread-23229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:42:00.800 [DEBUG] [Thread-23229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:42:00.800 [DEBUG] [Thread-23229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:42:00.800 [DEBUG] [Thread-23229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] client lang: <none>
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] server lang: <none>
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] kex follows: False
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:42:00.801 [DEBUG] [Thread-23229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:42:00.802 [DEBUG] [Thread-23229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:42:00.802 [DEBUG] [Thread-23229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:42:00.802 [DEBUG] [Thread-23229] [transport.py] [_log()] Compression: none
2025-11-12T21:42:00.802 [DEBUG] [Thread-23229] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:42:00.857 [DEBUG] [Thread-23229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:42:00.857 [DEBUG] [Thread-23229] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:42:00.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:42:00.858 [DEBUG] [Thread-23229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:42:00.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:42:00.913 [DEBUG] [Thread-23229] [transport.py] [_log()] userauth is OK
2025-11-12T21:42:00.913 [DEBUG] [Thread-23229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:42:00.913 [DEBUG] [Thread-23229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:42:00.913 [DEBUG] [Thread-23229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:42:00.913 [DEBUG] [Thread-23229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:42:00.930 [INFO] [Thread-23229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:42:00.931 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:42:00.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:42:01.769 [DEBUG] [Thread-23229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:42:01.770 [DEBUG] [Thread-23229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:42:01.817 [DEBUG] [Thread-23229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:42:01.817 [DEBUG] [Thread-23229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:42:01.829 [DEBUG] [Thread-23229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:42:01.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:42:01.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-11-12T21:42:01.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-11-12T21:42:01.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:42:01.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:42:01.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:42:01.869 [DEBUG] [Thread-23229] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:42:03.892 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:42:05.204 [DEBUG] [Thread-23231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:42:08.268 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:42:20.266 [DEBUG] [Thread-23232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:42:31.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:42:31.867 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:42:31.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-11-12T21:42:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 42, 8), 12.26, 44.43, 0.0, 9.42, 17.53, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:42:32.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:42:08
2025-11-12T21:42:32.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:42:32.776 [DEBUG] [Thread-23233] [transport.py] [_log()] starting thread (client mode): 0x11f01030
2025-11-12T21:42:32.777 [DEBUG] [Thread-23233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:42:32.793 [DEBUG] [Thread-23233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:42:32.793 [INFO] [Thread-23233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:42:32.796 [DEBUG] [Thread-23233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] client lang: <none>
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] server lang: <none>
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] kex follows: False
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] Compression: none
2025-11-12T21:42:32.797 [DEBUG] [Thread-23233] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:42:32.814 [DEBUG] [Thread-23233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:42:32.814 [DEBUG] [Thread-23233] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:42:32.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:42:32.816 [DEBUG] [Thread-23233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:42:32.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:42:32.818 [DEBUG] [Thread-23233] [transport.py] [_log()] userauth is OK
2025-11-12T21:42:32.818 [DEBUG] [Thread-23233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:42:32.818 [DEBUG] [Thread-23233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:42:32.818 [DEBUG] [Thread-23233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:42:32.818 [DEBUG] [Thread-23233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:42:32.837 [INFO] [Thread-23233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:42:32.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:42:33.481 [DEBUG] [Thread-23233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:42:33.481 [DEBUG] [Thread-23233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:42:33.481 [DEBUG] [Thread-23233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:42:33.522 [DEBUG] [Thread-23233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:42:33.522 [DEBUG] [Thread-23233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:42:33.525 [DEBUG] [Thread-23233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:42:33.537 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:42:33.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:42:33.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:42:33.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:42:33.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:42:33.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:42:33.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:42:33.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:42:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:42:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.820917 -999.00  +17.80   6.09     48   +6.80 1 2 1 1 1     0    0 8.34 -107.88 ..ES. 6.6 6.1 194.7 11.7 18.6 -21.4 18.4 -20.6 18.3 -20.1 18.6 -20.6
2025-11-12T21:42:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:42:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:42:33.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.820917
2025-11-12T21:42:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:42:33.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:42:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:42:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:42:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:42:33.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:42:08', tmtdew=12.26, humidity=44.43, cloud=0.0, wind=9.42, temperature=17.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:42:09', seeing=1.21, atlas_timestamp='2025-11-12T19:42:07.229', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:39:00')
2025-11-12T21:42:33.552 [DEBUG] [Thread-23233] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:42:33.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:42:33.650 [DEBUG] [Thread-23236] [transport.py] [_log()] starting thread (client mode): 0x149478b0
2025-11-12T21:42:33.650 [DEBUG] [Thread-23236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:42:33.665 [DEBUG] [Thread-23236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:42:33.665 [INFO] [Thread-23236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:42:33.673 [DEBUG] [Thread-23236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:42:33.673 [DEBUG] [Thread-23236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:42:33.673 [DEBUG] [Thread-23236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:42:33.673 [DEBUG] [Thread-23236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] client lang: <none>
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] server lang: <none>
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] kex follows: False
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:42:33.674 [DEBUG] [Thread-23236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:42:33.675 [DEBUG] [Thread-23236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:42:33.675 [DEBUG] [Thread-23236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:42:33.675 [DEBUG] [Thread-23236] [transport.py] [_log()] Compression: none
2025-11-12T21:42:33.675 [DEBUG] [Thread-23236] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:42:33.733 [DEBUG] [Thread-23236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:42:33.734 [DEBUG] [Thread-23236] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:42:33.735 [DEBUG] [Thread-23236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:42:33.735 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:42:33.736 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:42:33.789 [DEBUG] [Thread-23236] [transport.py] [_log()] userauth is OK
2025-11-12T21:42:33.790 [DEBUG] [Thread-23236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:42:33.790 [DEBUG] [Thread-23236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:42:33.790 [DEBUG] [Thread-23236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:42:33.790 [DEBUG] [Thread-23236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:42:33.809 [INFO] [Thread-23236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:42:33.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:42:33.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:42:34.655 [DEBUG] [Thread-23236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:42:34.655 [DEBUG] [Thread-23236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:42:34.703 [DEBUG] [Thread-23236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:42:34.703 [DEBUG] [Thread-23236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:42:34.712 [DEBUG] [Thread-23236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:42:34.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:42:34.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-11-12T21:42: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') -> 00000000
2025-11-12T21:42:34.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:42:34.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:42:34.741 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:42:34.749 [DEBUG] [Thread-23236] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:42:35.299 [DEBUG] [Thread-23238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:42:50.351 [DEBUG] [Thread-23239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:42:51.860 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:42:51.862 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:42:56.412 [DEBUG] [Thread-23240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:43:04.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:43:04.771 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:43:04.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-11-12T21:43:05.384 [DEBUG] [Thread-23241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:43:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 42, 40), 12.2, 44.62, 0.0, 10.5, 17.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:43:05.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:42:40
2025-11-12T21:43:05.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:43:05.738 [DEBUG] [Thread-23242] [transport.py] [_log()] starting thread (client mode): 0x17346860
2025-11-12T21:43:05.738 [DEBUG] [Thread-23242] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:43:05.759 [DEBUG] [Thread-23242] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:43:05.759 [INFO] [Thread-23242] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] client lang: <none>
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] server lang: <none>
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] kex follows: False
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] Compression: none
2025-11-12T21:43:05.762 [DEBUG] [Thread-23242] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:43:05.778 [DEBUG] [Thread-23242] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:43:05.778 [DEBUG] [Thread-23242] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:43:05.778 [DEBUG] [Thread-23242] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:43:05.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:43:05.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:43:05.779 [DEBUG] [Thread-23242] [transport.py] [_log()] userauth is OK
2025-11-12T21:43:05.779 [DEBUG] [Thread-23242] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:43:05.779 [DEBUG] [Thread-23242] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:43:05.779 [DEBUG] [Thread-23242] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:43:05.779 [DEBUG] [Thread-23242] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:43:05.788 [INFO] [Thread-23242] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:43:05.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:43:06.415 [DEBUG] [Thread-23242] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:43:06.415 [DEBUG] [Thread-23242] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:43:06.415 [DEBUG] [Thread-23242] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:43:06.456 [DEBUG] [Thread-23242] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:43:06.456 [DEBUG] [Thread-23242] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:43:06.458 [DEBUG] [Thread-23242] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:43:06.470 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:43:06.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:43:06.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:43:06.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:43:06.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:43:06.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:43:06.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:43:06.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:43:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:43:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.821264 -999.00  +17.80   8.91     48   +6.80 1 2 1 1 1     0    0 8.32 -113.87 ..ES. 6.9 8.9 206.0 11.1 18.6 -21.4 18.5 -20.8 18.3 -19.9 18.5 -20.5
2025-11-12T21:43:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:43:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:43:06.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.821264
2025-11-12T21:43:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:43:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:43:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:43:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:43:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:43:06.477 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:42:40', tmtdew=12.2, humidity=44.62, cloud=0.0, wind=10.5, temperature=17.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:42:42', seeing=1.21, atlas_timestamp='2025-11-12T19:42:37.210', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:39:00')
2025-11-12T21:43:06.478 [DEBUG] [Thread-23242] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:43:06.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:43:06.567 [DEBUG] [Thread-23245] [transport.py] [_log()] starting thread (client mode): 0x11f01e40
2025-11-12T21:43:06.567 [DEBUG] [Thread-23245] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:43:06.582 [DEBUG] [Thread-23245] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:43:06.582 [INFO] [Thread-23245] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] client lang: <none>
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] server lang: <none>
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] kex follows: False
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] Compression: none
2025-11-12T21:43:06.590 [DEBUG] [Thread-23245] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:43:06.648 [DEBUG] [Thread-23245] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:43:06.648 [DEBUG] [Thread-23245] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:43:06.648 [DEBUG] [Thread-23245] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:43:06.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:43:06.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:43:06.705 [DEBUG] [Thread-23245] [transport.py] [_log()] userauth is OK
2025-11-12T21:43:06.705 [DEBUG] [Thread-23245] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:43:06.705 [DEBUG] [Thread-23245] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:43:06.705 [DEBUG] [Thread-23245] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:43:06.705 [DEBUG] [Thread-23245] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:43:06.720 [INFO] [Thread-23245] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:43: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-11-12T21:43:06.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:43:07.547 [DEBUG] [Thread-23245] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:43:07.548 [DEBUG] [Thread-23245] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:43:07.596 [DEBUG] [Thread-23245] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:43:07.596 [DEBUG] [Thread-23245] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:43:07.605 [DEBUG] [Thread-23245] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:43:07.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:43:07.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-11-12T21:43:07.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-11-12T21:43:07.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:43:07.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:43:07.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:43:07.642 [DEBUG] [Thread-23245] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:43:20.416 [DEBUG] [Thread-23247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:43:35.469 [DEBUG] [Thread-23248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:43:37.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:43:37.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:43:37.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-11-12T21:43:38.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 43, 14), 12.21, 44.58, 0.0, 9.55, 17.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:43:38.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:43:14
2025-11-12T21:43:38.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:43:38.591 [DEBUG] [Thread-23249] [transport.py] [_log()] starting thread (client mode): 0x173bf6d0
2025-11-12T21:43:38.592 [DEBUG] [Thread-23249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:43:38.613 [DEBUG] [Thread-23249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:43:38.614 [INFO] [Thread-23249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:43:38.616 [DEBUG] [Thread-23249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] client lang: <none>
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] server lang: <none>
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] kex follows: False
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] Compression: none
2025-11-12T21:43:38.617 [DEBUG] [Thread-23249] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:43:38.634 [DEBUG] [Thread-23249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:43:38.635 [DEBUG] [Thread-23249] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:43:38.635 [DEBUG] [Thread-23249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:43:38.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:43:38.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:43:38.637 [DEBUG] [Thread-23249] [transport.py] [_log()] userauth is OK
2025-11-12T21:43:38.638 [DEBUG] [Thread-23249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:43:38.638 [DEBUG] [Thread-23249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:43:38.638 [DEBUG] [Thread-23249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:43:38.638 [DEBUG] [Thread-23249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:43:38.664 [INFO] [Thread-23249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:43:38.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:43:39.326 [DEBUG] [Thread-23249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:43:39.327 [DEBUG] [Thread-23249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:43:39.327 [DEBUG] [Thread-23249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:43:39.368 [DEBUG] [Thread-23249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:43:39.368 [DEBUG] [Thread-23249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:43:39.371 [DEBUG] [Thread-23249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:43:39.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:43:39.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:43:39.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:43:39.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:43:39.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:43:39.395 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:43:39.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:43:39.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:43:39.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:43:39.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.821611 -999.00  +17.80   4.74     48   +6.90 1 2 1 1 1     0    0 8.36 -112.37 z.ES. 8.1 4.7 195.5 8.6 18.6 -21.4 18.5 -20.6 18.2 -19.9 18.5 -20.5
2025-11-12T21:43:39.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:43:39.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:43:39.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.821611
2025-11-12T21:43:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:43:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:43:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:43:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:43:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:43:39.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:43:14', tmtdew=12.21, humidity=44.58, cloud=0.0, wind=9.55, temperature=17.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:43:14', seeing=0.96, atlas_timestamp='2025-11-12T19:43:07.190', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:39:00')
2025-11-12T21:43:39.398 [DEBUG] [Thread-23249] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:43:39.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:43:39.497 [DEBUG] [Thread-23252] [transport.py] [_log()] starting thread (client mode): 0x149a8280
2025-11-12T21:43:39.497 [DEBUG] [Thread-23252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:43:39.513 [DEBUG] [Thread-23252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:43:39.513 [INFO] [Thread-23252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:43:39.523 [DEBUG] [Thread-23252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:43:39.523 [DEBUG] [Thread-23252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:43:39.523 [DEBUG] [Thread-23252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] client lang: <none>
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] server lang: <none>
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] kex follows: False
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:43:39.524 [DEBUG] [Thread-23252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:43:39.525 [DEBUG] [Thread-23252] [transport.py] [_log()] Compression: none
2025-11-12T21:43:39.525 [DEBUG] [Thread-23252] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:43:39.583 [DEBUG] [Thread-23252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:43:39.584 [DEBUG] [Thread-23252] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:43:39.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:43:39.585 [DEBUG] [Thread-23252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:43:39.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:43:39.648 [DEBUG] [Thread-23252] [transport.py] [_log()] userauth is OK
2025-11-12T21:43:39.648 [DEBUG] [Thread-23252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:43:39.649 [DEBUG] [Thread-23252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:43:39.649 [DEBUG] [Thread-23252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:43:39.649 [DEBUG] [Thread-23252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:43:39.668 [INFO] [Thread-23252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:43:39.668 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:43:39.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:43:40.498 [DEBUG] [Thread-23252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:43:40.498 [DEBUG] [Thread-23252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:43:40.546 [DEBUG] [Thread-23252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:43:40.546 [DEBUG] [Thread-23252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:43:40.554 [DEBUG] [Thread-23252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:43:40.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:43:40.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-11-12T21:43:40.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:43:40.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:43:40.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:43:40.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:43:40.585 [DEBUG] [Thread-23252] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:43:50.502 [DEBUG] [Thread-23254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:43:52.067 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:43:52.068 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:43:56.468 [DEBUG] [Thread-23255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:44:05.556 [DEBUG] [Thread-23256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:44:10.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:44:10.608 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:44:10.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-11-12T21:44:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 43, 46), 12.11, 44.73, 0.0, 8.61, 17.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:44:11.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:43:46
2025-11-12T21:44:11.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:44:11.534 [DEBUG] [Thread-23257] [transport.py] [_log()] starting thread (client mode): 0x173be440
2025-11-12T21:44:11.534 [DEBUG] [Thread-23257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:44:11.555 [DEBUG] [Thread-23257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:44:11.555 [INFO] [Thread-23257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:44:11.558 [DEBUG] [Thread-23257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:44:11.558 [DEBUG] [Thread-23257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:44:11.558 [DEBUG] [Thread-23257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:44:11.558 [DEBUG] [Thread-23257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:44:11.558 [DEBUG] [Thread-23257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:44:11.558 [DEBUG] [Thread-23257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:44:11.558 [DEBUG] [Thread-23257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:44:11.558 [DEBUG] [Thread-23257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] client lang: <none>
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] server lang: <none>
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] kex follows: False
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] Compression: none
2025-11-12T21:44:11.559 [DEBUG] [Thread-23257] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:44:11.578 [DEBUG] [Thread-23257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:44:11.579 [DEBUG] [Thread-23257] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:44:11.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:44:11.580 [DEBUG] [Thread-23257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:44:11.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:44:11.582 [DEBUG] [Thread-23257] [transport.py] [_log()] userauth is OK
2025-11-12T21:44:11.582 [DEBUG] [Thread-23257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:44:11.582 [DEBUG] [Thread-23257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:44:11.582 [DEBUG] [Thread-23257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:44:11.582 [DEBUG] [Thread-23257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:44:11.601 [INFO] [Thread-23257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:44:11.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:44:12.255 [DEBUG] [Thread-23257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:44:12.255 [DEBUG] [Thread-23257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:44:12.255 [DEBUG] [Thread-23257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:44:12.296 [DEBUG] [Thread-23257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:44:12.296 [DEBUG] [Thread-23257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:44:12.299 [DEBUG] [Thread-23257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:44:12.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:44:12.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:44:12.313 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:44:12.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:44:12.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:44:12.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:44:12.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:44:12.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:44:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:44:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.821958 -999.00  +17.80   4.63     48   +6.90 1 2 1 1 1     0    0 8.76 -103.79 z.ES. 7.0 4.6 192.8 9.2 18.5 -21.3 18.4 -20.6 18.3 -20.0 18.5 -20.5
2025-11-12T21:44:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:44:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:44:12.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.821958
2025-11-12T21:44:12.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:44:12.325 [DEBUG] [Thread-23257] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:44:12.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:44:12.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:44:12.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:44:12.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:44:12.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:43:46', tmtdew=12.11, humidity=44.73, cloud=0.0, wind=8.61, temperature=17.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:43:46', seeing=0.99, atlas_timestamp='2025-11-12T19:43:37.171', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:42:00')
2025-11-12T21:44:12.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:44:12.424 [DEBUG] [Thread-23260] [transport.py] [_log()] starting thread (client mode): 0x173bd240
2025-11-12T21:44:12.424 [DEBUG] [Thread-23260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:44:12.439 [DEBUG] [Thread-23260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:44:12.439 [INFO] [Thread-23260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:44:12.447 [DEBUG] [Thread-23260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:44:12.447 [DEBUG] [Thread-23260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:44:12.447 [DEBUG] [Thread-23260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:44:12.447 [DEBUG] [Thread-23260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:44:12.447 [DEBUG] [Thread-23260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:44:12.447 [DEBUG] [Thread-23260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:44:12.447 [DEBUG] [Thread-23260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] client lang: <none>
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] server lang: <none>
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] kex follows: False
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] Compression: none
2025-11-12T21:44:12.448 [DEBUG] [Thread-23260] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:44:12.505 [DEBUG] [Thread-23260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:44:12.506 [DEBUG] [Thread-23260] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:44:12.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:44:12.507 [DEBUG] [Thread-23260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:44:12.508 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:44:12.561 [DEBUG] [Thread-23260] [transport.py] [_log()] userauth is OK
2025-11-12T21:44:12.562 [DEBUG] [Thread-23260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:44:12.562 [DEBUG] [Thread-23260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:44:12.562 [DEBUG] [Thread-23260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:44:12.562 [DEBUG] [Thread-23260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:44:12.581 [INFO] [Thread-23260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:44:12.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:44:12.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:44:13.418 [DEBUG] [Thread-23260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:44:13.418 [DEBUG] [Thread-23260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:44:13.466 [DEBUG] [Thread-23260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:44:13.466 [DEBUG] [Thread-23260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:44:13.475 [DEBUG] [Thread-23260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:44:13.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:44:13.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-11-12T21:44:13.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-11-12T21:44:13.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:44:13.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:44:13.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:44:13.512 [DEBUG] [Thread-23260] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:44:20.591 [DEBUG] [Thread-23262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:44:35.630 [DEBUG] [Thread-23263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:44:43.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:44:43.534 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:44:43.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-11-12T21:44:44.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 44, 18), 12.06, 44.9, 0.0, 9.16, 17.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:44:44.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:44:18
2025-11-12T21:44:44.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:44:44.433 [DEBUG] [Thread-23264] [transport.py] [_log()] starting thread (client mode): 0x173bd060
2025-11-12T21:44:44.433 [DEBUG] [Thread-23264] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:44:44.453 [DEBUG] [Thread-23264] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:44:44.453 [INFO] [Thread-23264] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:44:44.456 [DEBUG] [Thread-23264] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:44:44.456 [DEBUG] [Thread-23264] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:44:44.456 [DEBUG] [Thread-23264] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] client lang: <none>
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] server lang: <none>
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] kex follows: False
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] Compression: none
2025-11-12T21:44:44.457 [DEBUG] [Thread-23264] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:44:44.473 [DEBUG] [Thread-23264] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:44:44.474 [DEBUG] [Thread-23264] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:44:44.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:44:44.474 [DEBUG] [Thread-23264] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:44:44.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:44:44.475 [DEBUG] [Thread-23264] [transport.py] [_log()] userauth is OK
2025-11-12T21:44:44.476 [DEBUG] [Thread-23264] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:44:44.476 [DEBUG] [Thread-23264] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:44:44.476 [DEBUG] [Thread-23264] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:44:44.476 [DEBUG] [Thread-23264] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:44:44.495 [INFO] [Thread-23264] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:44:44.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:44:45.127 [DEBUG] [Thread-23264] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:44:45.127 [DEBUG] [Thread-23264] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:44:45.128 [DEBUG] [Thread-23264] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:44:45.169 [DEBUG] [Thread-23264] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:44:45.169 [DEBUG] [Thread-23264] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:44:45.172 [DEBUG] [Thread-23264] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:44:45.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:44:45.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:44:45.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:44:45.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:44:45.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:44:45.196 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:44:45.196 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:44:45.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.822653 -999.00  +17.80   5.92     48   +6.80 1 2 1 1 1     0    0 8.81 -89.17 ..ESW 4.6 5.9 216.5 8.6 18.5 -21.3 18.4 -20.4 18.2 -20.0 18.5 -20.5
2025-11-12T21:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:44:45.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.822653
2025-11-12T21:44:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:44:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:44:45.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:44:45.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:44:45.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:44:45.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:44:18', tmtdew=12.06, humidity=44.9, cloud=0.0, wind=9.16, temperature=17.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:44:18', seeing=0.99, atlas_timestamp='2025-11-12T19:44:37.219', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:42:00')
2025-11-12T21:44:45.199 [DEBUG] [Thread-23264] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:44:45.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:44:45.293 [DEBUG] [Thread-23267] [transport.py] [_log()] starting thread (client mode): 0x11f02c80
2025-11-12T21:44:45.293 [DEBUG] [Thread-23267] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:44:45.307 [DEBUG] [Thread-23267] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:44:45.307 [INFO] [Thread-23267] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] client lang: <none>
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] server lang: <none>
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] kex follows: False
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:44:45.315 [DEBUG] [Thread-23267] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:44:45.316 [DEBUG] [Thread-23267] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:44:45.316 [DEBUG] [Thread-23267] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:44:45.316 [DEBUG] [Thread-23267] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:44:45.316 [DEBUG] [Thread-23267] [transport.py] [_log()] Compression: none
2025-11-12T21:44:45.316 [DEBUG] [Thread-23267] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:44:45.373 [DEBUG] [Thread-23267] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:44:45.374 [DEBUG] [Thread-23267] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:44:45.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:44:45.375 [DEBUG] [Thread-23267] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:44:45.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:44:45.429 [DEBUG] [Thread-23267] [transport.py] [_log()] userauth is OK
2025-11-12T21:44:45.429 [DEBUG] [Thread-23267] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:44:45.429 [DEBUG] [Thread-23267] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:44:45.429 [DEBUG] [Thread-23267] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:44:45.429 [DEBUG] [Thread-23267] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:44:45.448 [INFO] [Thread-23267] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:44:45.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:44:45.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:44:46.276 [DEBUG] [Thread-23267] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:44:46.276 [DEBUG] [Thread-23267] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:44:46.324 [DEBUG] [Thread-23267] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:44:46.325 [DEBUG] [Thread-23267] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:44:46.334 [DEBUG] [Thread-23267] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:44:46.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:44:46.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-11-12T21:44:46.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-11-12T21:44:46.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:44:46.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:44:46.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:44:46.371 [DEBUG] [Thread-23267] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:44:50.673 [DEBUG] [Thread-23269 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:44:52.274 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:44:52.275 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:44:56.524 [DEBUG] [Thread-23270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:45:05.729 [DEBUG] [Thread-23271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:45:16.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:45:16.393 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:45:16.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-11-12T21:45:17.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 44, 50), 11.95, 45.1, 0.0, 8.58, 17.46, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:45:17.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:44:50
2025-11-12T21:45:17.151 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:45:17.297 [DEBUG] [Thread-23272] [transport.py] [_log()] starting thread (client mode): 0x11f00f70
2025-11-12T21:45:17.297 [DEBUG] [Thread-23272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:45:17.312 [DEBUG] [Thread-23272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:45:17.312 [INFO] [Thread-23272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] client lang: <none>
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] server lang: <none>
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] kex follows: False
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] Compression: none
2025-11-12T21:45:17.314 [DEBUG] [Thread-23272] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:45:17.322 [DEBUG] [Thread-23272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:45:17.323 [DEBUG] [Thread-23272] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:45:17.323 [DEBUG] [Thread-23272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:45:17.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:45:17.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:45:17.324 [DEBUG] [Thread-23272] [transport.py] [_log()] userauth is OK
2025-11-12T21:45:17.324 [DEBUG] [Thread-23272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:45:17.324 [DEBUG] [Thread-23272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:45:17.324 [DEBUG] [Thread-23272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:45:17.324 [DEBUG] [Thread-23272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:45:17.339 [INFO] [Thread-23272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:45:17.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:45:17.941 [DEBUG] [Thread-23272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:45:17.942 [DEBUG] [Thread-23272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:45:17.942 [DEBUG] [Thread-23272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:45:17.983 [DEBUG] [Thread-23272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:45:17.983 [DEBUG] [Thread-23272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:45:17.986 [DEBUG] [Thread-23272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:45:17.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:45:17.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:45:17.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:45:17.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:45:18.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:45:18.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:45:18.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:45:18.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:45:18.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:45:18.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.823000 -999.00  +17.70   6.73     49   +6.90 1 2 1 1 1     0    0 8.98 -90.03 ..ESw 6.5 6.7 215.3 8.6 18.5 -21.3 18.4 -20.4 18.2 -19.9 18.5 -20.7
2025-11-12T21:45:18.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:45:18.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:45:18.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.823000
2025-11-12T21:45:18.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:45:18.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:45:18.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:45:18.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:45:18.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:45:18.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:44:50', tmtdew=11.95, humidity=45.1, cloud=0.0, wind=8.58, temperature=17.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:44:50', seeing=0.99, atlas_timestamp='2025-11-12T19:45:07.200', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:42:00')
2025-11-12T21:45:18.010 [DEBUG] [Thread-23272] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:45:18.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:45:18.105 [DEBUG] [Thread-23275] [transport.py] [_log()] starting thread (client mode): 0x14947c10
2025-11-12T21:45:18.105 [DEBUG] [Thread-23275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:45:18.119 [DEBUG] [Thread-23275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:45:18.119 [INFO] [Thread-23275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:45:18.127 [DEBUG] [Thread-23275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:45:18.127 [DEBUG] [Thread-23275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:45:18.127 [DEBUG] [Thread-23275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:45:18.127 [DEBUG] [Thread-23275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:45:18.127 [DEBUG] [Thread-23275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:45:18.127 [DEBUG] [Thread-23275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] client lang: <none>
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] server lang: <none>
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] kex follows: False
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] Compression: none
2025-11-12T21:45:18.128 [DEBUG] [Thread-23275] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:45:18.185 [DEBUG] [Thread-23275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:45:18.186 [DEBUG] [Thread-23275] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:45:18.186 [DEBUG] [Thread-23275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:45:18.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:45:18.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:45:18.241 [DEBUG] [Thread-23275] [transport.py] [_log()] userauth is OK
2025-11-12T21:45:18.242 [DEBUG] [Thread-23275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:45:18.242 [DEBUG] [Thread-23275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:45:18.242 [DEBUG] [Thread-23275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:45:18.242 [DEBUG] [Thread-23275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:45:18.261 [INFO] [Thread-23275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:45:18.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:45:18.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:45:19.064 [DEBUG] [Thread-23275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:45:19.064 [DEBUG] [Thread-23275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:45:19.112 [DEBUG] [Thread-23275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:45:19.112 [DEBUG] [Thread-23275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:45:19.122 [DEBUG] [Thread-23275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:45:19.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:45:19.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-11-12T21:45:19.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-11-12T21:45:19.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:45:19.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:45:19.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:45:19.156 [DEBUG] [Thread-23275] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:45:20.765 [DEBUG] [Thread-23277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:45:35.817 [DEBUG] [Thread-23278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:45:49.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:45:49.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:45:49.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-11-12T21:45:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 45, 22), 12.06, 44.75, 0.0, 8.19, 17.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:45:49.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:45:22
2025-11-12T21:45:49.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:45:50.054 [DEBUG] [Thread-23279] [transport.py] [_log()] starting thread (client mode): 0x11f020e0
2025-11-12T21:45:50.055 [DEBUG] [Thread-23279] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:45:50.075 [DEBUG] [Thread-23279] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:45:50.075 [INFO] [Thread-23279] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:45:50.078 [DEBUG] [Thread-23279] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] client lang: <none>
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] server lang: <none>
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] kex follows: False
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] Compression: none
2025-11-12T21:45:50.079 [DEBUG] [Thread-23279] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:45:50.097 [DEBUG] [Thread-23279] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:45:50.098 [DEBUG] [Thread-23279] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:45:50.098 [DEBUG] [Thread-23279] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:45:50.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:45:50.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:45:50.100 [DEBUG] [Thread-23279] [transport.py] [_log()] userauth is OK
2025-11-12T21:45:50.101 [DEBUG] [Thread-23279] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:45:50.101 [DEBUG] [Thread-23279] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:45:50.101 [DEBUG] [Thread-23279] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:45:50.101 [DEBUG] [Thread-23279] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:45:50.125 [INFO] [Thread-23279] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:45:50.126 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:45:50.746 [DEBUG] [Thread-23279] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:45:50.746 [DEBUG] [Thread-23279] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:45:50.747 [DEBUG] [Thread-23279] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:45:50.787 [DEBUG] [Thread-23279] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:45:50.788 [DEBUG] [Thread-23279] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:45:50.791 [DEBUG] [Thread-23279] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:45:50.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:45:50.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:45:50.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:45:50.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:45:50.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:45:50.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:45:50.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:45:50.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:45:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:45:50.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.823000 -999.00  +17.70   6.73     49   +6.90 1 2 1 1 1     0    0 8.98 -90.03 ..ESw 6.5 6.7 215.3 8.6 18.5 -21.3 18.4 -20.4 18.2 -19.9 18.5 -20.7
2025-11-12T21:45:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:45:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:45:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.823000
2025-11-12T21:45:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:45:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:45:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:45:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:45:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:45:50.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:45:22', tmtdew=12.06, humidity=44.75, cloud=0.0, wind=8.19, temperature=17.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:45:22', seeing=0.99, atlas_timestamp='2025-11-12T19:45:07.200', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:42:00')
2025-11-12T21:45:50.815 [DEBUG] [Thread-23279] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:45:50.849 [DEBUG] [Thread-23282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:45:50.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:45:50.911 [DEBUG] [Thread-23283] [transport.py] [_log()] starting thread (client mode): 0x11f01ea0
2025-11-12T21:45:50.911 [DEBUG] [Thread-23283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:45:50.926 [DEBUG] [Thread-23283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:45:50.933 [INFO] [Thread-23283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:45:50.934 [DEBUG] [Thread-23283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] client lang: <none>
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] server lang: <none>
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] kex follows: False
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] Compression: none
2025-11-12T21:45:50.935 [DEBUG] [Thread-23283] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:45:51.007 [DEBUG] [Thread-23283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:45:51.007 [DEBUG] [Thread-23283] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:45:51.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:45:51.008 [DEBUG] [Thread-23283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:45:51.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:45:51.071 [DEBUG] [Thread-23283] [transport.py] [_log()] userauth is OK
2025-11-12T21:45:51.071 [DEBUG] [Thread-23283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:45:51.071 [DEBUG] [Thread-23283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:45:51.071 [DEBUG] [Thread-23283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:45:51.071 [DEBUG] [Thread-23283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:45:51.093 [INFO] [Thread-23283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:45:51.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:45:51.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:45:51.924 [DEBUG] [Thread-23283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:45:51.924 [DEBUG] [Thread-23283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:45:51.972 [DEBUG] [Thread-23283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:45:51.972 [DEBUG] [Thread-23283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:45:51.981 [DEBUG] [Thread-23283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:45:51.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:45:51.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:45:51.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-11-12T21:45:52.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:45:52.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:45:52.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:45:52.015 [DEBUG] [Thread-23283] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:45:52.478 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:45:52.479 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:45:56.576 [DEBUG] [Thread-23285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:46:05.888 [DEBUG] [Thread-23286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:46:20.924 [DEBUG] [Thread-23287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:46:22.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:46:22.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:46:22.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-11-12T21:46:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 45, 54), 12.12, 44.72, 0.0, 8.4, 17.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:46:22.655 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:45:54
2025-11-12T21:46:22.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:46:22.921 [DEBUG] [Thread-23288] [transport.py] [_log()] starting thread (client mode): 0x149a9360
2025-11-12T21:46:22.922 [DEBUG] [Thread-23288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:46:22.941 [DEBUG] [Thread-23288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:46:22.941 [INFO] [Thread-23288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] client lang: <none>
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] server lang: <none>
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] kex follows: False
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:46:22.944 [DEBUG] [Thread-23288] [transport.py] [_log()] Compression: none
2025-11-12T21:46:22.945 [DEBUG] [Thread-23288] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:46:22.952 [DEBUG] [Thread-23288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:46:22.953 [DEBUG] [Thread-23288] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:46:22.953 [DEBUG] [Thread-23288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:46:22.953 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:46:22.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:46:22.954 [DEBUG] [Thread-23288] [transport.py] [_log()] userauth is OK
2025-11-12T21:46:22.955 [DEBUG] [Thread-23288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:46:22.955 [DEBUG] [Thread-23288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:46:22.955 [DEBUG] [Thread-23288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:46:22.955 [DEBUG] [Thread-23288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:46:22.971 [INFO] [Thread-23288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:46:22.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:46:23.608 [DEBUG] [Thread-23288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:46:23.608 [DEBUG] [Thread-23288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:46:23.609 [DEBUG] [Thread-23288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:46:23.650 [DEBUG] [Thread-23288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:46:23.650 [DEBUG] [Thread-23288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:46:23.653 [DEBUG] [Thread-23288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:46:23.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:46:23.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:46:23.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:46:23.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:46:23.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:46:23.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:46:23.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:46:23.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:46:23.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:46:23.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.823347 -999.00  +17.70   7.53     49   +6.80 1 2 1 1 1     0    0 8.77 -88.74 z.ESw 8.2 7.5 198.8 9.2 18.5 -21.3 18.4 -20.4 18.2 -20.1 18.5 -20.5
2025-11-12T21:46:23.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:46:23.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:46:23.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.823347
2025-11-12T21:46:23.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:46:23.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:46:23.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:46:23.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:46:23.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:46:23.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:45:54', tmtdew=12.12, humidity=44.72, cloud=0.0, wind=8.4, temperature=17.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:45:54', seeing=0.99, atlas_timestamp='2025-11-12T19:45:37.181', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:42:00')
2025-11-12T21:46:23.682 [DEBUG] [Thread-23288] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:46:23.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:46:23.777 [DEBUG] [Thread-23291] [transport.py] [_log()] starting thread (client mode): 0x173bf340
2025-11-12T21:46:23.777 [DEBUG] [Thread-23291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:46:23.791 [DEBUG] [Thread-23291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:46:23.791 [INFO] [Thread-23291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:46:23.798 [DEBUG] [Thread-23291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] client lang: <none>
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] server lang: <none>
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] kex follows: False
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] Compression: none
2025-11-12T21:46:23.799 [DEBUG] [Thread-23291] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:46:23.862 [DEBUG] [Thread-23291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:46:23.862 [DEBUG] [Thread-23291] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:46:23.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:46:23.863 [DEBUG] [Thread-23291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:46:23.864 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:46:23.917 [DEBUG] [Thread-23291] [transport.py] [_log()] userauth is OK
2025-11-12T21:46:23.918 [DEBUG] [Thread-23291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:46:23.918 [DEBUG] [Thread-23291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:46:23.918 [DEBUG] [Thread-23291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:46:23.918 [DEBUG] [Thread-23291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:46:23.937 [INFO] [Thread-23291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:46: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-11-12T21:46:23.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:46:24.774 [DEBUG] [Thread-23291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:46:24.774 [DEBUG] [Thread-23291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:46:24.822 [DEBUG] [Thread-23291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:46:24.823 [DEBUG] [Thread-23291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:46:24.832 [DEBUG] [Thread-23291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:46:24.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:46:24.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')
2025-11-12T21:46: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') -> 00000000
2025-11-12T21:46:24.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:46:24.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:46:24.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:46:24.868 [DEBUG] [Thread-23291] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:46:35.960 [DEBUG] [Thread-23293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:46:51.017 [DEBUG] [Thread-23294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:46:52.688 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:46:52.690 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:46:54.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:46:54.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:46:54.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:46:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 46, 26), 12.11, 44.73, 0.0, 9.21, 17.41, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:46:55.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:46:26
2025-11-12T21:46:55.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:46:55.839 [DEBUG] [Thread-23295] [transport.py] [_log()] starting thread (client mode): 0x149a50c0
2025-11-12T21:46:55.840 [DEBUG] [Thread-23295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:46:55.860 [DEBUG] [Thread-23295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:46:55.860 [INFO] [Thread-23295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] client lang: <none>
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] server lang: <none>
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] kex follows: False
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:46:55.863 [DEBUG] [Thread-23295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:46:55.864 [DEBUG] [Thread-23295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:46:55.864 [DEBUG] [Thread-23295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:46:55.864 [DEBUG] [Thread-23295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:46:55.864 [DEBUG] [Thread-23295] [transport.py] [_log()] Compression: none
2025-11-12T21:46:55.864 [DEBUG] [Thread-23295] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:46:55.880 [DEBUG] [Thread-23295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:46:55.880 [DEBUG] [Thread-23295] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:46:55.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:46:55.880 [DEBUG] [Thread-23295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:46:55.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:46:55.881 [DEBUG] [Thread-23295] [transport.py] [_log()] userauth is OK
2025-11-12T21:46:55.881 [DEBUG] [Thread-23295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:46:55.881 [DEBUG] [Thread-23295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:46:55.881 [DEBUG] [Thread-23295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:46:55.881 [DEBUG] [Thread-23295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:46:55.892 [INFO] [Thread-23295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:46:55.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:46:56.535 [DEBUG] [Thread-23295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:46:56.535 [DEBUG] [Thread-23295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:46:56.535 [DEBUG] [Thread-23295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:46:56.576 [DEBUG] [Thread-23295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:46:56.576 [DEBUG] [Thread-23295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:46:56.578 [DEBUG] [Thread-23295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:46:56.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:46:56.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:46:56.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:46:56.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:46:56.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:46:56.599 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:46:56.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:46:56.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:46:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:46:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.823694 -999.00  +17.70   7.70     49   +6.90 1 2 1 1 1     0    0 8.87 -89.00 z.ESw 4.3 7.7 204.4 10.2 18.5 -21.2 18.4 -20.4 18.2 -20.0 18.5 -20.6
2025-11-12T21:46:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:46:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:46:56.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.823694
2025-11-12T21:46:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:46:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:46:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:46:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:46:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:46:56.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:46:26', tmtdew=12.11, humidity=44.73, cloud=0.0, wind=9.21, temperature=17.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:46:26', seeing=1.22, atlas_timestamp='2025-11-12T19:46:07.162', atlas_cloud=2, atlas_rain=1, zp_data=[1.48475, 1.0062500000000005, 1.5002500000000003, 2.2669999999999995, nan, nan, nan, 1.4432500000000008, 0.8219999999999992, 0.5440000000000005, 1.23325, 1.862, nan, nan, 2.8499999999999996, 1.3249999999999993, 0.4792500000000004, 0.5195000000000007, 1.3379999999999992, 2.0452499999999993, nan, 2.641749999999999, nan, 1.5597500000000002, 0.38399999999999856, 0.8565000000000005, 1.6847500000000002, 2.3445, nan, nan, nan, nan, 0.6927499999999993], zp_timestamp='2025-11-12T19:42:00')
2025-11-12T21:46:56.600 [DEBUG] [Thread-23295] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:46:56.628 [DEBUG] [Thread-23298 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:46:56.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:46:56.690 [DEBUG] [Thread-23299] [transport.py] [_log()] starting thread (client mode): 0x14922890
2025-11-12T21:46:56.690 [DEBUG] [Thread-23299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:46:56.705 [DEBUG] [Thread-23299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:46:56.705 [INFO] [Thread-23299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] client lang: <none>
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] server lang: <none>
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] kex follows: False
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:46:56.712 [DEBUG] [Thread-23299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:46:56.713 [DEBUG] [Thread-23299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:46:56.713 [DEBUG] [Thread-23299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:46:56.713 [DEBUG] [Thread-23299] [transport.py] [_log()] Compression: none
2025-11-12T21:46:56.713 [DEBUG] [Thread-23299] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:46:56.768 [DEBUG] [Thread-23299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:46:56.768 [DEBUG] [Thread-23299] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:46:56.768 [DEBUG] [Thread-23299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:46:56.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:46:56.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:46:56.824 [DEBUG] [Thread-23299] [transport.py] [_log()] userauth is OK
2025-11-12T21:46:56.825 [DEBUG] [Thread-23299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:46:56.825 [DEBUG] [Thread-23299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:46:56.825 [DEBUG] [Thread-23299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:46:56.825 [DEBUG] [Thread-23299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:46:56.838 [INFO] [Thread-23299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:46:56.838 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:46:56.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:46:57.677 [DEBUG] [Thread-23299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:46:57.677 [DEBUG] [Thread-23299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:46:57.725 [DEBUG] [Thread-23299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:46:57.725 [DEBUG] [Thread-23299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:46:57.733 [DEBUG] [Thread-23299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:46:57.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:46:57.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-11-12T21:46:57.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:46:57.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:46:57.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:46:57.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:46:57.764 [DEBUG] [Thread-23299] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:47:06.048 [DEBUG] [Thread-23301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:47:21.104 [DEBUG] [Thread-23302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:47:27.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:47:27.787 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:47:27.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-11-12T21:47:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 46, 58), 12.04, 44.8, 0.0, 9.28, 17.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:47:28.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:46:58
2025-11-12T21:47:28.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:47:28.718 [DEBUG] [Thread-23303] [transport.py] [_log()] starting thread (client mode): 0x149aa380
2025-11-12T21:47:28.719 [DEBUG] [Thread-23303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:47:28.738 [DEBUG] [Thread-23303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:47:28.738 [INFO] [Thread-23303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] client lang: <none>
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] server lang: <none>
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] kex follows: False
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] Compression: none
2025-11-12T21:47:28.742 [DEBUG] [Thread-23303] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:47:28.759 [DEBUG] [Thread-23303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:47:28.759 [DEBUG] [Thread-23303] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:47:28.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:47:28.760 [DEBUG] [Thread-23303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:47:28.761 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:47:28.762 [DEBUG] [Thread-23303] [transport.py] [_log()] userauth is OK
2025-11-12T21:47:28.762 [DEBUG] [Thread-23303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:47:28.762 [DEBUG] [Thread-23303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:47:28.762 [DEBUG] [Thread-23303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:47:28.762 [DEBUG] [Thread-23303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:47:28.797 [INFO] [Thread-23303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:47:28.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:47:29.522 [DEBUG] [Thread-23303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:47:29.522 [DEBUG] [Thread-23303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:47:29.523 [DEBUG] [Thread-23303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:47:29.562 [DEBUG] [Thread-23303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:47:29.562 [DEBUG] [Thread-23303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:47:29.565 [DEBUG] [Thread-23303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:47:29.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:47:29.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:47:29.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:47:29.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:47:29.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:47:29.582 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:47:29.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:47:29.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:47:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:47:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.824042 -999.00  +17.70   6.37     49   +6.80 1 2 1 1 1     0    0 8.74 -88.20 .nESw 3.9 6.4 192.9 8.3 18.5 -21.2 18.4 -20.6 18.2 -20.0 18.5 -20.5
2025-11-12T21:47:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:47:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:47:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.824042
2025-11-12T21:47:29.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:47:29.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:47:29.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:47:29.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:47:29.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:47:29.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:46:58', tmtdew=12.04, humidity=44.8, cloud=0.0, wind=9.28, temperature=17.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:46:58', seeing=1.22, atlas_timestamp='2025-11-12T19:46:37.229', atlas_cloud=2, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:46:00')
2025-11-12T21:47:29.583 [DEBUG] [Thread-23303] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:47: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-11-12T21:47:29.668 [DEBUG] [Thread-23306] [transport.py] [_log()] starting thread (client mode): 0x173bf970
2025-11-12T21:47:29.668 [DEBUG] [Thread-23306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:47:29.683 [DEBUG] [Thread-23306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:47:29.683 [INFO] [Thread-23306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] client lang: <none>
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] server lang: <none>
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] kex follows: False
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] Compression: none
2025-11-12T21:47:29.691 [DEBUG] [Thread-23306] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:47:29.748 [DEBUG] [Thread-23306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:47:29.749 [DEBUG] [Thread-23306] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:47:29.749 [DEBUG] [Thread-23306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:47:29.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:47:29.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:47:29.805 [DEBUG] [Thread-23306] [transport.py] [_log()] userauth is OK
2025-11-12T21:47:29.805 [DEBUG] [Thread-23306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:47:29.805 [DEBUG] [Thread-23306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:47:29.805 [DEBUG] [Thread-23306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:47:29.805 [DEBUG] [Thread-23306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:47:29.824 [INFO] [Thread-23306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:47:29.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:47:29.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:47:30.717 [DEBUG] [Thread-23306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:47:30.717 [DEBUG] [Thread-23306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:47:30.765 [DEBUG] [Thread-23306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:47:30.765 [DEBUG] [Thread-23306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:47:30.774 [DEBUG] [Thread-23306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:47:30.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:47: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')
2025-11-12T21:47:30.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-11-12T21:47:30.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:47:30.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:47:30.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:47:30.807 [DEBUG] [Thread-23306] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:47:36.134 [DEBUG] [Thread-23308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:47:51.187 [DEBUG] [Thread-23309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:47:52.896 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:47:52.898 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:47:56.690 [DEBUG] [Thread-23310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:48:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:48:00.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:48:00.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-11-12T21:48:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 47, 30), 12.01, 44.88, 0.0, 8.52, 17.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:48:01.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:47:30
2025-11-12T21:48:01.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:48:01.737 [DEBUG] [Thread-23311] [transport.py] [_log()] starting thread (client mode): 0x173bd540
2025-11-12T21:48:01.737 [DEBUG] [Thread-23311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:48:01.757 [DEBUG] [Thread-23311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:48:01.757 [INFO] [Thread-23311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] client lang: <none>
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] server lang: <none>
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] kex follows: False
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:48:01.760 [DEBUG] [Thread-23311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:48:01.761 [DEBUG] [Thread-23311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:48:01.761 [DEBUG] [Thread-23311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:48:01.761 [DEBUG] [Thread-23311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:48:01.761 [DEBUG] [Thread-23311] [transport.py] [_log()] Compression: none
2025-11-12T21:48:01.761 [DEBUG] [Thread-23311] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:48:01.783 [DEBUG] [Thread-23311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:48:01.783 [DEBUG] [Thread-23311] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:48:01.784 [DEBUG] [Thread-23311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:48:01.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:48:01.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:48:01.786 [DEBUG] [Thread-23311] [transport.py] [_log()] userauth is OK
2025-11-12T21:48:01.786 [DEBUG] [Thread-23311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:48:01.786 [DEBUG] [Thread-23311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:48:01.787 [DEBUG] [Thread-23311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:48:01.787 [DEBUG] [Thread-23311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:48:01.825 [INFO] [Thread-23311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:48:01.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:48:02.450 [DEBUG] [Thread-23311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:48:02.450 [DEBUG] [Thread-23311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:48:02.451 [DEBUG] [Thread-23311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:48:02.490 [DEBUG] [Thread-23311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:48:02.491 [DEBUG] [Thread-23311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:48:02.494 [DEBUG] [Thread-23311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:48:02.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:48:02.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:48:02.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:48:02.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:48:02.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:48:02.518 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:48:02.518 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:48:02.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:48:02.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:48:02.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.824389 -999.00  +17.70   6.67     49   +6.80 1 2 1 1 1     0    0 8.84 -86.92 .nESw 6.9 6.7 204.6 9.6 18.5 -21.3 18.4 -20.3 18.2 -20.0 18.4 -20.5
2025-11-12T21:48:02.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:48:02.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:48:02.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.824389
2025-11-12T21:48:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:48:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:48:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:48:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:48:02.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:48:02.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:47:30', tmtdew=12.01, humidity=44.88, cloud=0.0, wind=8.52, temperature=17.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:47:30', seeing=0.97, atlas_timestamp='2025-11-12T19:47:07.210', atlas_cloud=2, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:46:00')
2025-11-12T21:48:02.521 [DEBUG] [Thread-23311] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:48:02.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:48:02.617 [DEBUG] [Thread-23314] [transport.py] [_log()] starting thread (client mode): 0x14905090
2025-11-12T21:48:02.617 [DEBUG] [Thread-23314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:48:02.632 [DEBUG] [Thread-23314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:48:02.632 [INFO] [Thread-23314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:48:02.639 [DEBUG] [Thread-23314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:48:02.639 [DEBUG] [Thread-23314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] client lang: <none>
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] server lang: <none>
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] kex follows: False
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] Compression: none
2025-11-12T21:48:02.640 [DEBUG] [Thread-23314] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:48:02.701 [DEBUG] [Thread-23314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:48:02.702 [DEBUG] [Thread-23314] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:48:02.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:48:02.703 [DEBUG] [Thread-23314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:48:02.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:48:02.758 [DEBUG] [Thread-23314] [transport.py] [_log()] userauth is OK
2025-11-12T21:48:02.758 [DEBUG] [Thread-23314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:48:02.758 [DEBUG] [Thread-23314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:48:02.758 [DEBUG] [Thread-23314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:48:02.758 [DEBUG] [Thread-23314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:48:02.777 [INFO] [Thread-23314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:48:02.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:48:02.778 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:48:03.599 [DEBUG] [Thread-23314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:48:03.600 [DEBUG] [Thread-23314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:48:03.648 [DEBUG] [Thread-23314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:48:03.648 [DEBUG] [Thread-23314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:48:03.656 [DEBUG] [Thread-23314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:48:03.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:48:03.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-11-12T21:48:03.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-11-12T21:48:03.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:48:03.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:48:03.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:48:03.687 [DEBUG] [Thread-23314] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:48:06.225 [DEBUG] [Thread-23316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:48:21.276 [DEBUG] [Thread-23317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:48:33.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:48:33.680 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:48:33.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-11-12T21:48:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 48, 2), 11.98, 44.98, 0.0, 9.0, 17.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:48:34.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:48:02
2025-11-12T21:48:34.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:48:34.569 [DEBUG] [Thread-23318] [transport.py] [_log()] starting thread (client mode): 0x11f01060
2025-11-12T21:48:34.569 [DEBUG] [Thread-23318] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:48:34.589 [DEBUG] [Thread-23318] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:48:34.589 [INFO] [Thread-23318] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:48:34.592 [DEBUG] [Thread-23318] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:48:34.592 [DEBUG] [Thread-23318] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:48:34.592 [DEBUG] [Thread-23318] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:48:34.592 [DEBUG] [Thread-23318] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:48:34.592 [DEBUG] [Thread-23318] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:48:34.592 [DEBUG] [Thread-23318] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] client lang: <none>
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] server lang: <none>
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] kex follows: False
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] Compression: none
2025-11-12T21:48:34.593 [DEBUG] [Thread-23318] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:48:34.609 [DEBUG] [Thread-23318] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:48:34.609 [DEBUG] [Thread-23318] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:48:34.610 [DEBUG] [Thread-23318] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:48:34.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:48:34.611 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:48:34.612 [DEBUG] [Thread-23318] [transport.py] [_log()] userauth is OK
2025-11-12T21:48:34.612 [DEBUG] [Thread-23318] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:48:34.612 [DEBUG] [Thread-23318] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:48:34.612 [DEBUG] [Thread-23318] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:48:34.612 [DEBUG] [Thread-23318] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:48:34.627 [INFO] [Thread-23318] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:48:34.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:48:35.332 [DEBUG] [Thread-23318] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:48:35.332 [DEBUG] [Thread-23318] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:48:35.332 [DEBUG] [Thread-23318] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:48:35.373 [DEBUG] [Thread-23318] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:48:35.373 [DEBUG] [Thread-23318] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:48:35.375 [DEBUG] [Thread-23318] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:48:35.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:48:35.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:48:35.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:48:35.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:48:35.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:48:35.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:48:35.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:48:35.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.825083 -999.00  +17.60   8.14     49   +7.00 1 2 1 1 1     0    0 9.04 -74.05 zNESW 8.5 8.1 198.4 11.5 18.5 -21.2 18.4 -20.4 18.2 -20.1 18.4 -20.7
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.825083
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:48:35.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:48:02', tmtdew=11.98, humidity=44.98, cloud=0.0, wind=9.0, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:48:02', seeing=1.08, atlas_timestamp='2025-11-12T19:48:07.171', atlas_cloud=2, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:46:00')
2025-11-12T21:48:35.394 [DEBUG] [Thread-23318] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:48:35.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:48:35.481 [DEBUG] [Thread-23321] [transport.py] [_log()] starting thread (client mode): 0x17398670
2025-11-12T21:48:35.481 [DEBUG] [Thread-23321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:48:35.495 [DEBUG] [Thread-23321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:48:35.495 [INFO] [Thread-23321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] client lang: <none>
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] server lang: <none>
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] kex follows: False
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] Compression: none
2025-11-12T21:48:35.503 [DEBUG] [Thread-23321] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:48:35.559 [DEBUG] [Thread-23321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:48:35.559 [DEBUG] [Thread-23321] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:48:35.559 [DEBUG] [Thread-23321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:48:35.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:48:35.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:48:35.617 [DEBUG] [Thread-23321] [transport.py] [_log()] userauth is OK
2025-11-12T21:48:35.617 [DEBUG] [Thread-23321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:48:35.617 [DEBUG] [Thread-23321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:48:35.617 [DEBUG] [Thread-23321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:48:35.617 [DEBUG] [Thread-23321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:48:35.631 [INFO] [Thread-23321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:48:35.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:48:35.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:48:36.314 [DEBUG] [Thread-23323 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:48:36.466 [DEBUG] [Thread-23321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:48:36.466 [DEBUG] [Thread-23321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:48:36.514 [DEBUG] [Thread-23321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:48:36.514 [DEBUG] [Thread-23321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:48:36.523 [DEBUG] [Thread-23321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:48:36.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21: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-11-12T21: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-11-12T21:48:36.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:48:36.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:48:36.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:48:36.556 [DEBUG] [Thread-23321] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:48:51.355 [DEBUG] [Thread-23324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:48:53.105 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:48:53.106 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:48:56.750 [DEBUG] [Thread-23325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:49:06.387 [DEBUG] [Thread-23326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:49:06.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:49:06.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:49:06.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-11-12T21:49:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 48, 34), 11.98, 44.96, 0.0, 9.76, 17.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:49:07.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:48:34
2025-11-12T21:49:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:49:07.516 [DEBUG] [Thread-23327] [transport.py] [_log()] starting thread (client mode): 0x149467a0
2025-11-12T21:49:07.516 [DEBUG] [Thread-23327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:49:07.536 [DEBUG] [Thread-23327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:49:07.536 [INFO] [Thread-23327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] client lang: <none>
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] server lang: <none>
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] kex follows: False
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:49:07.539 [DEBUG] [Thread-23327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:49:07.540 [DEBUG] [Thread-23327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:49:07.540 [DEBUG] [Thread-23327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:49:07.540 [DEBUG] [Thread-23327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:49:07.540 [DEBUG] [Thread-23327] [transport.py] [_log()] Compression: none
2025-11-12T21:49:07.540 [DEBUG] [Thread-23327] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:49:07.553 [DEBUG] [Thread-23327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:49:07.554 [DEBUG] [Thread-23327] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:49:07.554 [DEBUG] [Thread-23327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:49:07.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:49:07.554 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:49:07.555 [DEBUG] [Thread-23327] [transport.py] [_log()] userauth is OK
2025-11-12T21:49:07.555 [DEBUG] [Thread-23327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:49:07.555 [DEBUG] [Thread-23327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:49:07.555 [DEBUG] [Thread-23327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:49:07.555 [DEBUG] [Thread-23327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:49:07.566 [INFO] [Thread-23327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:49:07.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:49:08.211 [DEBUG] [Thread-23327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:49:08.212 [DEBUG] [Thread-23327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:49:08.212 [DEBUG] [Thread-23327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:49:08.252 [DEBUG] [Thread-23327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:49:08.252 [DEBUG] [Thread-23327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:49:08.254 [DEBUG] [Thread-23327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:49:08.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:49:08.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:49:08.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:49:08.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:49:08.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:49:08.271 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:49:08.271 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:49:08.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:49:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:49:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.825431 -999.00  +17.60   6.47     49   +6.90 1 2 1 1 1     0    0 8.81 -79.71 zNESW 11.0 6.5 192.6 10.6 18.5 -21.2 18.4 -20.9 18.2 -20.1 18.4 -20.7
2025-11-12T21:49:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:49:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:49:08.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.825431
2025-11-12T21:49:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:49:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:49:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:49:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:49:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:49:08.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:48:34', tmtdew=11.98, humidity=44.96, cloud=0.0, wind=9.76, temperature=17.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:48:34', seeing=1.08, atlas_timestamp='2025-11-12T19:48:37.238', atlas_cloud=2, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:46:00')
2025-11-12T21:49:08.272 [DEBUG] [Thread-23327] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:49:08.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:49:08.357 [DEBUG] [Thread-23330] [transport.py] [_log()] starting thread (client mode): 0x17399d50
2025-11-12T21:49:08.357 [DEBUG] [Thread-23330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:49:08.372 [DEBUG] [Thread-23330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:49:08.372 [INFO] [Thread-23330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:49:08.379 [DEBUG] [Thread-23330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:49:08.379 [DEBUG] [Thread-23330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:49:08.379 [DEBUG] [Thread-23330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:49:08.379 [DEBUG] [Thread-23330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:49:08.379 [DEBUG] [Thread-23330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] client lang: <none>
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] server lang: <none>
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] kex follows: False
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] Compression: none
2025-11-12T21:49:08.380 [DEBUG] [Thread-23330] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:49:08.436 [DEBUG] [Thread-23330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:49:08.436 [DEBUG] [Thread-23330] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:49:08.436 [DEBUG] [Thread-23330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:49:08.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:49:08.436 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:49:08.493 [DEBUG] [Thread-23330] [transport.py] [_log()] userauth is OK
2025-11-12T21:49:08.493 [DEBUG] [Thread-23330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:49:08.493 [DEBUG] [Thread-23330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:49:08.493 [DEBUG] [Thread-23330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:49:08.493 [DEBUG] [Thread-23330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:49:08.506 [INFO] [Thread-23330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:49:08.507 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:49:08.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:49:09.331 [DEBUG] [Thread-23330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:49:09.332 [DEBUG] [Thread-23330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:49:09.380 [DEBUG] [Thread-23330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:49:09.380 [DEBUG] [Thread-23330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:49:09.389 [DEBUG] [Thread-23330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:49:09.397 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:49:09.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:49:09.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-11-12T21:49:09.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:49:09.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:49:09.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:49:09.425 [DEBUG] [Thread-23330] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:49:21.423 [DEBUG] [Thread-23332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:49:36.469 [DEBUG] [Thread-23333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:49:39.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:49:39.447 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:49:39.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T21:49:40.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 49, 6), 11.98, 44.96, 0.0, 9.32, 17.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:49:40.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:49:06
2025-11-12T21:49:40.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:49:40.440 [DEBUG] [Thread-23334] [transport.py] [_log()] starting thread (client mode): 0x14920070
2025-11-12T21:49:40.440 [DEBUG] [Thread-23334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:49:40.460 [DEBUG] [Thread-23334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:49:40.460 [INFO] [Thread-23334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:49:40.463 [DEBUG] [Thread-23334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:49:40.463 [DEBUG] [Thread-23334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] client lang: <none>
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] server lang: <none>
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] kex follows: False
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] Compression: none
2025-11-12T21:49:40.464 [DEBUG] [Thread-23334] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:49:40.479 [DEBUG] [Thread-23334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:49:40.479 [DEBUG] [Thread-23334] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:49:40.479 [DEBUG] [Thread-23334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:49:40.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:49:40.480 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:49:40.480 [DEBUG] [Thread-23334] [transport.py] [_log()] userauth is OK
2025-11-12T21:49:40.480 [DEBUG] [Thread-23334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:49:40.480 [DEBUG] [Thread-23334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:49:40.480 [DEBUG] [Thread-23334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:49:40.480 [DEBUG] [Thread-23334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:49:40.496 [INFO] [Thread-23334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:49:40.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:49:41.246 [DEBUG] [Thread-23334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:49:41.247 [DEBUG] [Thread-23334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:49:41.247 [DEBUG] [Thread-23334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:49:41.287 [DEBUG] [Thread-23334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:49:41.287 [DEBUG] [Thread-23334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:49:41.290 [DEBUG] [Thread-23334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:49:41.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:49:41.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:49:41.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:49:41.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:49:41.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:49:41.311 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:49:41.311 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:49:41.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:49:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:49:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.825778 -999.00  +17.60  10.28     49   +7.00 1 1 1 1 1     0    0 9.07 -76.38 ZNESW 8.7 10.3 196.0 12.1 18.4 -21.2 18.4 -20.9 18.1 -20.1 18.4 -20.8
2025-11-12T21:49:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:49:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:49:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.825778
2025-11-12T21:49:41.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:49:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:49:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:49:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:49:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:49:41.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:49:06', tmtdew=11.98, humidity=44.96, cloud=0.0, wind=9.32, temperature=17.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:49:38', seeing=1.05, atlas_timestamp='2025-11-12T19:49:07.219', atlas_cloud=1, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:46:00')
2025-11-12T21:49:41.313 [DEBUG] [Thread-23334] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:49:41.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:49:41.409 [DEBUG] [Thread-23337] [transport.py] [_log()] starting thread (client mode): 0x149212a0
2025-11-12T21:49:41.409 [DEBUG] [Thread-23337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:49:41.423 [DEBUG] [Thread-23337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:49:41.423 [INFO] [Thread-23337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:49:41.431 [DEBUG] [Thread-23337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:49:41.431 [DEBUG] [Thread-23337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:49:41.431 [DEBUG] [Thread-23337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:49:41.431 [DEBUG] [Thread-23337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:49:41.431 [DEBUG] [Thread-23337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:49:41.431 [DEBUG] [Thread-23337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:49:41.431 [DEBUG] [Thread-23337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:49:41.431 [DEBUG] [Thread-23337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] client lang: <none>
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] server lang: <none>
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] kex follows: False
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:49:41.432 [DEBUG] [Thread-23337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:49:41.433 [DEBUG] [Thread-23337] [transport.py] [_log()] Compression: none
2025-11-12T21:49:41.433 [DEBUG] [Thread-23337] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:49:41.489 [DEBUG] [Thread-23337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:49:41.489 [DEBUG] [Thread-23337] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:49:41.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:49:41.490 [DEBUG] [Thread-23337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:49:41.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:49:41.545 [DEBUG] [Thread-23337] [transport.py] [_log()] userauth is OK
2025-11-12T21:49:41.545 [DEBUG] [Thread-23337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:49:41.545 [DEBUG] [Thread-23337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:49:41.545 [DEBUG] [Thread-23337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:49:41.545 [DEBUG] [Thread-23337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:49:41.564 [INFO] [Thread-23337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:49:41.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:49:41.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:49:42.377 [DEBUG] [Thread-23337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:49:42.377 [DEBUG] [Thread-23337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:49:42.424 [DEBUG] [Thread-23337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:49:42.424 [DEBUG] [Thread-23337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:49:42.433 [DEBUG] [Thread-23337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:49:42.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:49:42.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:49:42.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:49:42.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:49:42.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:49:42.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:49:42.467 [DEBUG] [Thread-23337] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:49:51.504 [DEBUG] [Thread-23339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:49:53.310 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:49:53.311 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:49:56.825 [DEBUG] [Thread-23340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:50:06.565 [DEBUG] [Thread-23341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:50:12.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:50:12.489 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:50:12.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-11-12T21:50:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 49, 38), 11.91, 45.51, 0.0, 9.88, 17.3, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:50:13.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:49:38
2025-11-12T21:50:13.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:50:13.430 [DEBUG] [Thread-23342] [transport.py] [_log()] starting thread (client mode): 0x1739a410
2025-11-12T21:50:13.430 [DEBUG] [Thread-23342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:50:13.450 [DEBUG] [Thread-23342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:50:13.450 [INFO] [Thread-23342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:50:13.453 [DEBUG] [Thread-23342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] client lang: <none>
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] server lang: <none>
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] kex follows: False
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] Compression: none
2025-11-12T21:50:13.454 [DEBUG] [Thread-23342] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:50:13.475 [DEBUG] [Thread-23342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:50:13.476 [DEBUG] [Thread-23342] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:50:13.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:50:13.477 [DEBUG] [Thread-23342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:50:13.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:50:13.479 [DEBUG] [Thread-23342] [transport.py] [_log()] userauth is OK
2025-11-12T21:50:13.479 [DEBUG] [Thread-23342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:50:13.479 [DEBUG] [Thread-23342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:50:13.479 [DEBUG] [Thread-23342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:50:13.479 [DEBUG] [Thread-23342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:50:13.504 [INFO] [Thread-23342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:50:13.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:50:14.137 [DEBUG] [Thread-23342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:50:14.137 [DEBUG] [Thread-23342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:50:14.137 [DEBUG] [Thread-23342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:50:14.178 [DEBUG] [Thread-23342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:50:14.178 [DEBUG] [Thread-23342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:50:14.181 [DEBUG] [Thread-23342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:50:14.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:50:14.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:50:14.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:50:14.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:50:14.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:50:14.206 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:50:14.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:50:14.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:50:14.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:50:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.826125 -999.00  +17.60   7.33     49   +6.90 1 1 1 1 1     0    0 9.08 -75.22 ZNESW 5.5 7.3 201.8 10.5 18.4 -21.3 18.3 -20.4 18.1 -20.2 18.4 -20.8
2025-11-12T21:50:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:50:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:50:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.826125
2025-11-12T21:50:14.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:50:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:50:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:50:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:50:14.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:50:14.209 [DEBUG] [Thread-23342] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:50:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:49:38', tmtdew=11.91, humidity=45.51, cloud=0.0, wind=9.88, temperature=17.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:50:10', seeing=1.05, atlas_timestamp='2025-11-12T19:49:37.200', atlas_cloud=1, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:49:00')
2025-11-12T21:50:14.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:50:14.311 [DEBUG] [Thread-23345] [transport.py] [_log()] starting thread (client mode): 0x149045e0
2025-11-12T21:50:14.311 [DEBUG] [Thread-23345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:50:14.328 [DEBUG] [Thread-23345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:50:14.329 [INFO] [Thread-23345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:50:14.336 [DEBUG] [Thread-23345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:50:14.336 [DEBUG] [Thread-23345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:50:14.336 [DEBUG] [Thread-23345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:50:14.336 [DEBUG] [Thread-23345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] client lang: <none>
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] server lang: <none>
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] kex follows: False
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] Compression: none
2025-11-12T21:50:14.337 [DEBUG] [Thread-23345] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:50:14.399 [DEBUG] [Thread-23345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:50:14.400 [DEBUG] [Thread-23345] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:50:14.401 [DEBUG] [Thread-23345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:50:14.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:50:14.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:50:14.457 [DEBUG] [Thread-23345] [transport.py] [_log()] userauth is OK
2025-11-12T21:50:14.458 [DEBUG] [Thread-23345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:50:14.458 [DEBUG] [Thread-23345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:50:14.458 [DEBUG] [Thread-23345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:50:14.458 [DEBUG] [Thread-23345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:50:14.478 [INFO] [Thread-23345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:50:14.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:50:14.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:50:15.347 [DEBUG] [Thread-23345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:50:15.347 [DEBUG] [Thread-23345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:50:15.395 [DEBUG] [Thread-23345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:50:15.396 [DEBUG] [Thread-23345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:50:15.405 [DEBUG] [Thread-23345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:50:15.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:50:15.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:50:15.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:50:15.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:50:15.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:50:15.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:50:15.442 [DEBUG] [Thread-23345] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:50:21.597 [DEBUG] [Thread-23347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:50:36.652 [DEBUG] [Thread-23348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:50:45.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:50:45.465 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:50:45.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-11-12T21:50:46.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 50, 42), 11.92, 45.63, 0.0, 11.19, 17.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:50:46.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:50:42
2025-11-12T21:50:46.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:50:46.427 [DEBUG] [Thread-23349] [transport.py] [_log()] starting thread (client mode): 0x149041f0
2025-11-12T21:50:46.428 [DEBUG] [Thread-23349] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:50:46.448 [DEBUG] [Thread-23349] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:50:46.448 [INFO] [Thread-23349] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:50:46.451 [DEBUG] [Thread-23349] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] client lang: <none>
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] server lang: <none>
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] kex follows: False
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] Compression: none
2025-11-12T21:50:46.452 [DEBUG] [Thread-23349] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:50:46.467 [DEBUG] [Thread-23349] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:50:46.468 [DEBUG] [Thread-23349] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:50:46.468 [DEBUG] [Thread-23349] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:50:46.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:50:46.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:50:46.468 [DEBUG] [Thread-23349] [transport.py] [_log()] userauth is OK
2025-11-12T21:50:46.468 [DEBUG] [Thread-23349] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:50:46.469 [DEBUG] [Thread-23349] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:50:46.469 [DEBUG] [Thread-23349] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:50:46.469 [DEBUG] [Thread-23349] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:50:46.477 [INFO] [Thread-23349] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:50:46.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:50:47.106 [DEBUG] [Thread-23349] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:50:47.106 [DEBUG] [Thread-23349] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:50:47.106 [DEBUG] [Thread-23349] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:50:47.147 [DEBUG] [Thread-23349] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:50:47.147 [DEBUG] [Thread-23349] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:50:47.150 [DEBUG] [Thread-23349] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:50:47.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:50:47.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:50:47.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:50:47.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:50:47.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:50:47.167 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:50:47.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.826472 -999.00  +17.60   7.91     49   +6.90 1 2 1 1 1     0    0 9.07 -71.73 zNESW 7.7 7.9 201.6 11.4 18.4 -21.4 18.3 -20.4 18.1 -20.1 18.4 -20.9
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.826472
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:50:47.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:50:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:50:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:50:47.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:50:42', tmtdew=11.92, humidity=45.63, cloud=0.0, wind=11.19, temperature=17.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:50:43', seeing=1.05, atlas_timestamp='2025-11-12T19:50:07.181', atlas_cloud=2, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:49:00')
2025-11-12T21:50:47.168 [DEBUG] [Thread-23349] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:50:47.246 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:50:47.258 [DEBUG] [Thread-23352] [transport.py] [_log()] starting thread (client mode): 0x173445e0
2025-11-12T21:50:47.258 [DEBUG] [Thread-23352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:50:47.273 [DEBUG] [Thread-23352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:50:47.273 [INFO] [Thread-23352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] client lang: <none>
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] server lang: <none>
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] kex follows: False
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] Compression: none
2025-11-12T21:50:47.281 [DEBUG] [Thread-23352] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:50:47.340 [DEBUG] [Thread-23352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:50:47.340 [DEBUG] [Thread-23352] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:50:47.340 [DEBUG] [Thread-23352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:50:47.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:50:47.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:50:47.397 [DEBUG] [Thread-23352] [transport.py] [_log()] userauth is OK
2025-11-12T21:50:47.397 [DEBUG] [Thread-23352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:50:47.397 [DEBUG] [Thread-23352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:50:47.397 [DEBUG] [Thread-23352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:50:47.397 [DEBUG] [Thread-23352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:50:47.410 [INFO] [Thread-23352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:50:47.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:50:47.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:50:48.243 [DEBUG] [Thread-23352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:50:48.243 [DEBUG] [Thread-23352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:50:48.291 [DEBUG] [Thread-23352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:50:48.291 [DEBUG] [Thread-23352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:50:48.299 [DEBUG] [Thread-23352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:50:48.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:50:48.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-11-12T21:50:48.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-11-12T21:50:48.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:50:48.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:50:48.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:50:48.332 [DEBUG] [Thread-23352] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:50:51.688 [DEBUG] [Thread-23354 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:50:53.516 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:50:53.517 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:50:56.901 [DEBUG] [Thread-23355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:51:06.739 [DEBUG] [Thread-23356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:51:18.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:51:18.325 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:51:18.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-11-12T21:51:18.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 51, 14), 11.9, 45.7, 0.0, 11.68, 17.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:51:18.986 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:51:14
2025-11-12T21:51:19.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:51:19.249 [DEBUG] [Thread-23357] [transport.py] [_log()] starting thread (client mode): 0x11f02aa0
2025-11-12T21:51:19.249 [DEBUG] [Thread-23357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:51:19.269 [DEBUG] [Thread-23357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:51:19.269 [INFO] [Thread-23357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:51:19.272 [DEBUG] [Thread-23357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] client lang: <none>
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] server lang: <none>
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] kex follows: False
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:51:19.273 [DEBUG] [Thread-23357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:51:19.274 [DEBUG] [Thread-23357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:51:19.274 [DEBUG] [Thread-23357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:51:19.274 [DEBUG] [Thread-23357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:51:19.274 [DEBUG] [Thread-23357] [transport.py] [_log()] Compression: none
2025-11-12T21:51:19.274 [DEBUG] [Thread-23357] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:51:19.291 [DEBUG] [Thread-23357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:51:19.292 [DEBUG] [Thread-23357] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:51:19.292 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:51:19.293 [DEBUG] [Thread-23357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:51:19.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:51:19.294 [DEBUG] [Thread-23357] [transport.py] [_log()] userauth is OK
2025-11-12T21:51:19.294 [DEBUG] [Thread-23357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:51:19.295 [DEBUG] [Thread-23357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:51:19.295 [DEBUG] [Thread-23357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:51:19.295 [DEBUG] [Thread-23357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:51:19.327 [INFO] [Thread-23357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:51:19.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:51:19.923 [DEBUG] [Thread-23357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:51:19.923 [DEBUG] [Thread-23357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:51:19.924 [DEBUG] [Thread-23357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:51:19.965 [DEBUG] [Thread-23357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:51:19.965 [DEBUG] [Thread-23357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:51:19.968 [DEBUG] [Thread-23357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:51:19.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:51:19.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:51:19.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:51:19.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:51:19.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:51:19.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:51:19.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:51:19.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:51:19.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:51:19.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.826819 -999.00  +17.50   7.54     49   +6.90 1 2 1 1 1     0    0 9.03 -70.50 zNESW 9.0 7.5 211.4 8.6 18.4 -21.4 18.3 -20.4 18.1 -20.1 18.4 -20.8
2025-11-12T21:51:19.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:51:19.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:51:19.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.826819
2025-11-12T21:51:19.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:51:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:51:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:51:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:51:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T21:51:19.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:51:14', tmtdew=11.9, humidity=45.7, cloud=0.0, wind=11.68, temperature=17.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:51:14', seeing=1.05, atlas_timestamp='2025-11-12T19:50:37.162', atlas_cloud=2, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:49:00')
2025-11-12T21:51:19.997 [DEBUG] [Thread-23357] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:51:20.079 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:51:20.092 [DEBUG] [Thread-23360] [transport.py] [_log()] starting thread (client mode): 0x14917a00
2025-11-12T21:51:20.092 [DEBUG] [Thread-23360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:51:20.107 [DEBUG] [Thread-23360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:51:20.107 [INFO] [Thread-23360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:51:20.115 [DEBUG] [Thread-23360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:51:20.116 [DEBUG] [Thread-23360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:51:20.116 [DEBUG] [Thread-23360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:51:20.116 [DEBUG] [Thread-23360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:51:20.116 [DEBUG] [Thread-23360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:51:20.116 [DEBUG] [Thread-23360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:51:20.116 [DEBUG] [Thread-23360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:51:20.116 [DEBUG] [Thread-23360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:51:20.116 [DEBUG] [Thread-23360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:51:20.117 [DEBUG] [Thread-23360] [transport.py] [_log()] client lang: <none>
2025-11-12T21:51:20.117 [DEBUG] [Thread-23360] [transport.py] [_log()] server lang: <none>
2025-11-12T21:51:20.117 [DEBUG] [Thread-23360] [transport.py] [_log()] kex follows: False
2025-11-12T21:51:20.117 [DEBUG] [Thread-23360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:51:20.117 [DEBUG] [Thread-23360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:51:20.117 [DEBUG] [Thread-23360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:51:20.117 [DEBUG] [Thread-23360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:51:20.118 [DEBUG] [Thread-23360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:51:20.118 [DEBUG] [Thread-23360] [transport.py] [_log()] Compression: none
2025-11-12T21:51:20.118 [DEBUG] [Thread-23360] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:51:20.174 [DEBUG] [Thread-23360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:51:20.174 [DEBUG] [Thread-23360] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:51:20.175 [DEBUG] [Thread-23360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:51:20.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:51:20.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:51:20.229 [DEBUG] [Thread-23360] [transport.py] [_log()] userauth is OK
2025-11-12T21:51:20.229 [DEBUG] [Thread-23360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:51:20.229 [DEBUG] [Thread-23360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:51:20.230 [DEBUG] [Thread-23360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:51:20.230 [DEBUG] [Thread-23360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:51:20.253 [INFO] [Thread-23360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:51:20.254 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:51:20.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:51:21.083 [DEBUG] [Thread-23360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:51:21.084 [DEBUG] [Thread-23360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:51:21.131 [DEBUG] [Thread-23360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:51:21.132 [DEBUG] [Thread-23360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:51:21.141 [DEBUG] [Thread-23360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:51:21.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:51:21.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:51:21.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-11-12T21:51:21.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:51:21.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:51:21.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:51:21.178 [DEBUG] [Thread-23360] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:51:21.776 [DEBUG] [Thread-23362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:51:36.827 [DEBUG] [Thread-23363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:51:51.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:51:51.200 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:51:51.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-11-12T21:51:51.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 51, 46), 11.81, 45.83, 0.0, 10.02, 17.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:51:51.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:51:46
2025-11-12T21:51:51.859 [DEBUG] [Thread-23364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:51:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:51:52.114 [DEBUG] [Thread-23365] [transport.py] [_log()] starting thread (client mode): 0x14920eb0
2025-11-12T21:51:52.114 [DEBUG] [Thread-23365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:51:52.133 [DEBUG] [Thread-23365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:51:52.133 [INFO] [Thread-23365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:51:52.136 [DEBUG] [Thread-23365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:51:52.136 [DEBUG] [Thread-23365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:51:52.136 [DEBUG] [Thread-23365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:51:52.136 [DEBUG] [Thread-23365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:51:52.136 [DEBUG] [Thread-23365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:51:52.136 [DEBUG] [Thread-23365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] client lang: <none>
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] server lang: <none>
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] kex follows: False
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] Compression: none
2025-11-12T21:51:52.137 [DEBUG] [Thread-23365] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:51:52.155 [DEBUG] [Thread-23365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:51:52.155 [DEBUG] [Thread-23365] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:51:52.156 [DEBUG] [Thread-23365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:51:52.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:51:52.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:51:52.158 [DEBUG] [Thread-23365] [transport.py] [_log()] userauth is OK
2025-11-12T21:51:52.158 [DEBUG] [Thread-23365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:51:52.158 [DEBUG] [Thread-23365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:51:52.158 [DEBUG] [Thread-23365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:51:52.158 [DEBUG] [Thread-23365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:51:52.193 [INFO] [Thread-23365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:51:52.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:51:52.843 [DEBUG] [Thread-23365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:51:52.843 [DEBUG] [Thread-23365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:51:52.844 [DEBUG] [Thread-23365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:51:52.884 [DEBUG] [Thread-23365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:51:52.884 [DEBUG] [Thread-23365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:51:52.887 [DEBUG] [Thread-23365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:51:52.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:51:52.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:51:52.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:51:52.906 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:51:52.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:51:52.912 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:51:52.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:51:52.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:51:52.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:51:52.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.827167 -999.00  +17.50   5.82     49   +6.90 1 1 1 1 1     0    0 9.24 -67.67 ZNESW 7.2 5.8 197.2 10.3 18.4 -21.5 18.3 -20.5 18.1 -20.3 18.4 -20.9
2025-11-12T21:51:52.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:51:52.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:51:52.913 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.827167
2025-11-12T21:51:52.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:51:52.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:51:52.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:51:52.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:51:52.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:51:52.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:51:46', tmtdew=11.81, humidity=45.83, cloud=0.0, wind=10.02, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:51:46', seeing=0.93, atlas_timestamp='2025-11-12T19:51:07.229', atlas_cloud=1, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:49:00')
2025-11-12T21:51:52.915 [DEBUG] [Thread-23365] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:51:53.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:51:53.020 [DEBUG] [Thread-23368] [transport.py] [_log()] starting thread (client mode): 0x11f01f00
2025-11-12T21:51:53.020 [DEBUG] [Thread-23368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:51:53.036 [DEBUG] [Thread-23368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:51:53.036 [INFO] [Thread-23368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:51:53.043 [DEBUG] [Thread-23368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:51:53.043 [DEBUG] [Thread-23368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] client lang: <none>
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] server lang: <none>
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] kex follows: False
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:51:53.044 [DEBUG] [Thread-23368] [transport.py] [_log()] Compression: none
2025-11-12T21:51:53.045 [DEBUG] [Thread-23368] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:51:53.100 [DEBUG] [Thread-23368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:51:53.100 [DEBUG] [Thread-23368] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:51:53.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:51:53.101 [DEBUG] [Thread-23368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:51:53.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:51:53.157 [DEBUG] [Thread-23368] [transport.py] [_log()] userauth is OK
2025-11-12T21:51:53.157 [DEBUG] [Thread-23368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:51:53.157 [DEBUG] [Thread-23368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:51:53.157 [DEBUG] [Thread-23368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:51:53.157 [DEBUG] [Thread-23368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:51:53.175 [INFO] [Thread-23368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:51:53.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:51:53.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:51:53.723 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:51:53.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:51:54.062 [DEBUG] [Thread-23368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:51:54.063 [DEBUG] [Thread-23368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:51:54.114 [DEBUG] [Thread-23368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:51:54.114 [DEBUG] [Thread-23368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:51:54.125 [DEBUG] [Thread-23368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:51:54.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:51:54.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-11-12T21:51:54.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:51:54.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:51:54.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:51:54.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:51:54.163 [DEBUG] [Thread-23368] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:51:56.974 [DEBUG] [Thread-23370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:52:06.886 [DEBUG] [Thread-23371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:52:21.935 [DEBUG] [Thread-23372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:52:24.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:52:24.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:52:24.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-11-12T21:52:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 52, 18), 11.8, 45.86, 0.0, 9.62, 17.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:52:24.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:52:18
2025-11-12T21:52:24.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:52:25.059 [DEBUG] [Thread-23373] [transport.py] [_log()] starting thread (client mode): 0x17346620
2025-11-12T21:52:25.060 [DEBUG] [Thread-23373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:52:25.079 [DEBUG] [Thread-23373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:52:25.079 [INFO] [Thread-23373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:52:25.082 [DEBUG] [Thread-23373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] client lang: <none>
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] server lang: <none>
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] kex follows: False
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] Compression: none
2025-11-12T21:52:25.083 [DEBUG] [Thread-23373] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:52:25.091 [DEBUG] [Thread-23373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:52:25.091 [DEBUG] [Thread-23373] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:52:25.091 [DEBUG] [Thread-23373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:52:25.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:52:25.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:52:25.133 [DEBUG] [Thread-23373] [transport.py] [_log()] userauth is OK
2025-11-12T21:52:25.133 [DEBUG] [Thread-23373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:52:25.133 [DEBUG] [Thread-23373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:52:25.133 [DEBUG] [Thread-23373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:52:25.133 [DEBUG] [Thread-23373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:52:25.170 [INFO] [Thread-23373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:52:25.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:52:25.793 [DEBUG] [Thread-23373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:52:25.793 [DEBUG] [Thread-23373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:52:25.794 [DEBUG] [Thread-23373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:52:25.834 [DEBUG] [Thread-23373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:52:25.834 [DEBUG] [Thread-23373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:52:25.837 [DEBUG] [Thread-23373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:52:25.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:52:25.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:52:25.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:52:25.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:52:25.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:52:25.861 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:52:25.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:52:25.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:52:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:52:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.827861 -999.00  +17.50   6.83     49   +6.90 1 1 1 1 1     0    0 9.06 -64.32 ZNESW 8.8 6.8 206.4 11.7 18.3 -21.4 18.2 -20.6 18.0 -20.5 18.3 -21.0
2025-11-12T21:52:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:52:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:52:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.827861
2025-11-12T21:52:25.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:52:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:52:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:52:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:52:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:52:25.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:52:18', tmtdew=11.8, humidity=45.86, cloud=0.0, wind=9.62, temperature=17.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:52:18', seeing=0.93, atlas_timestamp='2025-11-12T19:52:07.190', atlas_cloud=1, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:49:00')
2025-11-12T21:52:25.863 [DEBUG] [Thread-23373] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:52:25.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:52:25.959 [DEBUG] [Thread-23376] [transport.py] [_log()] starting thread (client mode): 0x14982950
2025-11-12T21:52:25.959 [DEBUG] [Thread-23376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:52:25.974 [DEBUG] [Thread-23376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:52:25.974 [INFO] [Thread-23376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:52:25.981 [DEBUG] [Thread-23376] [transport.py] [_log()] client lang: <none>
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] server lang: <none>
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] kex follows: False
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] Compression: none
2025-11-12T21:52:25.982 [DEBUG] [Thread-23376] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:52:26.042 [DEBUG] [Thread-23376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:52:26.042 [DEBUG] [Thread-23376] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:52:26.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:52:26.043 [DEBUG] [Thread-23376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:52:26.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:52:26.097 [DEBUG] [Thread-23376] [transport.py] [_log()] userauth is OK
2025-11-12T21:52:26.097 [DEBUG] [Thread-23376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:52:26.098 [DEBUG] [Thread-23376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:52:26.098 [DEBUG] [Thread-23376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:52:26.098 [DEBUG] [Thread-23376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:52:26.116 [INFO] [Thread-23376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:52:26.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:52:26.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:52:27.004 [DEBUG] [Thread-23376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:52:27.005 [DEBUG] [Thread-23376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:52:27.052 [DEBUG] [Thread-23376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:52:27.053 [DEBUG] [Thread-23376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:52:27.062 [DEBUG] [Thread-23376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:52:27.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:52:27.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-11-12T21:52:27.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:52:27.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:52:27.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:52:27.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:52:27.098 [DEBUG] [Thread-23376] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:52:36.971 [DEBUG] [Thread-23378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:52:52.025 [DEBUG] [Thread-23379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:52:53.931 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:52:53.932 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:52:57.033 [DEBUG] [Thread-23380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:52:57.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:52:57.120 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:52:57.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-11-12T21:52:57.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 52, 50), 11.72, 45.78, 0.0, 13.13, 17.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:52:57.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:52:50
2025-11-12T21:52:57.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:52:58.006 [DEBUG] [Thread-23381] [transport.py] [_log()] starting thread (client mode): 0x14922da0
2025-11-12T21:52:58.006 [DEBUG] [Thread-23381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:52:58.026 [DEBUG] [Thread-23381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:52:58.027 [INFO] [Thread-23381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:52:58.030 [DEBUG] [Thread-23381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] client lang: <none>
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] server lang: <none>
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] kex follows: False
2025-11-12T21:52:58.031 [DEBUG] [Thread-23381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:52:58.032 [DEBUG] [Thread-23381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:52:58.032 [DEBUG] [Thread-23381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:52:58.032 [DEBUG] [Thread-23381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:52:58.032 [DEBUG] [Thread-23381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:52:58.032 [DEBUG] [Thread-23381] [transport.py] [_log()] Compression: none
2025-11-12T21:52:58.032 [DEBUG] [Thread-23381] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:52:58.049 [DEBUG] [Thread-23381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:52:58.050 [DEBUG] [Thread-23381] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:52:58.050 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:52:58.051 [DEBUG] [Thread-23381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:52:58.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:52:58.053 [DEBUG] [Thread-23381] [transport.py] [_log()] userauth is OK
2025-11-12T21:52:58.053 [DEBUG] [Thread-23381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:52:58.053 [DEBUG] [Thread-23381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:52:58.053 [DEBUG] [Thread-23381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:52:58.053 [DEBUG] [Thread-23381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:52:58.079 [INFO] [Thread-23381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:52:58.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:52:58.688 [DEBUG] [Thread-23381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:52:58.688 [DEBUG] [Thread-23381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:52:58.688 [DEBUG] [Thread-23381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:52:58.729 [DEBUG] [Thread-23381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:52:58.729 [DEBUG] [Thread-23381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:52:58.732 [DEBUG] [Thread-23381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:52:58.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:52:58.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:52:58.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:52:58.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:52:58.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:52:58.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:52:58.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:52:58.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:52:58.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:52:58.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.828208 -999.00  +17.50   9.84     50   +7.00 1 1 1 1 1     0    0 9.48 -62.62 ZNESW 9.4 9.8 192.8 11.6 18.4 -21.5 18.3 -21.1 18.0 -20.5 18.3 -21.0
2025-11-12T21:52:58.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:52:58.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:52:58.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.828208
2025-11-12T21:52:58.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:52:58.767 [DEBUG] [Thread-23381] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:52:58.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:52:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:52:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:52:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:52:58.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:52:50', tmtdew=11.72, humidity=45.78, cloud=0.0, wind=13.13, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:52:50', seeing=0.93, atlas_timestamp='2025-11-12T19:52:37.171', atlas_cloud=1, atlas_rain=1, zp_data=[2.273249999999999, 1.4137500000000003, 1.6972500000000004, nan, nan, 2.1137500000000005, 2.156999999999999, nan, 1.3424999999999994, 0.8810000000000002, 1.2552499999999993, nan, 2.0454999999999997, 2.3922499999999998, 2.5184999999999995, 1.7439999999999998, 0.9812500000000002, 0.6070000000000002, 1.4399999999999995, 1.8492499999999987, 1.9069999999999991, 1.8687499999999986, 2.0042500000000008, 2.0977500000000004, 0.395999999999999, 0.6870000000000003, 1.6517499999999998, 2.0845000000000002, 1.6989999999999998, nan, nan, nan, 0.5052499999999993], zp_timestamp='2025-11-12T19:49:00')
2025-11-12T21:52:58.853 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:52:58.869 [DEBUG] [Thread-23384] [transport.py] [_log()] starting thread (client mode): 0x11f03c70
2025-11-12T21:52:58.869 [DEBUG] [Thread-23384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:52:58.885 [DEBUG] [Thread-23384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:52:58.885 [INFO] [Thread-23384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:52:58.897 [DEBUG] [Thread-23384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:52:58.897 [DEBUG] [Thread-23384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:52:58.897 [DEBUG] [Thread-23384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:52:58.897 [DEBUG] [Thread-23384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:52:58.898 [DEBUG] [Thread-23384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:52:58.898 [DEBUG] [Thread-23384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:52:58.898 [DEBUG] [Thread-23384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:52:58.898 [DEBUG] [Thread-23384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:52:58.898 [DEBUG] [Thread-23384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:52:58.898 [DEBUG] [Thread-23384] [transport.py] [_log()] client lang: <none>
2025-11-12T21:52:58.898 [DEBUG] [Thread-23384] [transport.py] [_log()] server lang: <none>
2025-11-12T21:52:58.898 [DEBUG] [Thread-23384] [transport.py] [_log()] kex follows: False
2025-11-12T21:52:58.899 [DEBUG] [Thread-23384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:52:58.899 [DEBUG] [Thread-23384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:52:58.899 [DEBUG] [Thread-23384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:52:58.899 [DEBUG] [Thread-23384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:52:58.899 [DEBUG] [Thread-23384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:52:58.899 [DEBUG] [Thread-23384] [transport.py] [_log()] Compression: none
2025-11-12T21:52:58.899 [DEBUG] [Thread-23384] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:52:58.957 [DEBUG] [Thread-23384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:52:58.958 [DEBUG] [Thread-23384] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:52:58.959 [DEBUG] [Thread-23384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:52:58.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:52:58.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:52:59.014 [DEBUG] [Thread-23384] [transport.py] [_log()] userauth is OK
2025-11-12T21:52:59.014 [DEBUG] [Thread-23384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:52:59.014 [DEBUG] [Thread-23384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:52:59.014 [DEBUG] [Thread-23384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:52:59.015 [DEBUG] [Thread-23384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:52:59.033 [INFO] [Thread-23384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:52:59.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:52:59.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:52:59.858 [DEBUG] [Thread-23384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:52:59.858 [DEBUG] [Thread-23384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:52:59.906 [DEBUG] [Thread-23384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:52:59.906 [DEBUG] [Thread-23384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:52:59.915 [DEBUG] [Thread-23384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:52:59.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:52:59.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-11-12T21:52:59.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-11-12T21:52:59.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:52:59.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:52:59.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:52:59.950 [DEBUG] [Thread-23384] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:53:07.057 [DEBUG] [Thread-23386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:53:22.107 [DEBUG] [Thread-23387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:53:29.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:53:29.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:53:29.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-11-12T21:53:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 53, 22), 11.65, 45.99, 0.0, 12.93, 17.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:53:30.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:53:22
2025-11-12T21:53:30.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:53:30.866 [DEBUG] [Thread-23388] [transport.py] [_log()] starting thread (client mode): 0x11f02020
2025-11-12T21:53:30.866 [DEBUG] [Thread-23388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:53:30.886 [DEBUG] [Thread-23388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:53:30.886 [INFO] [Thread-23388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:53:30.889 [DEBUG] [Thread-23388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] client lang: <none>
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] server lang: <none>
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] kex follows: False
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] Compression: none
2025-11-12T21:53:30.890 [DEBUG] [Thread-23388] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:53:30.907 [DEBUG] [Thread-23388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:53:30.908 [DEBUG] [Thread-23388] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:53:30.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:53:30.909 [DEBUG] [Thread-23388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:53:30.910 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:53:30.911 [DEBUG] [Thread-23388] [transport.py] [_log()] userauth is OK
2025-11-12T21:53:30.912 [DEBUG] [Thread-23388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:53:30.912 [DEBUG] [Thread-23388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:53:30.912 [DEBUG] [Thread-23388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:53:30.912 [DEBUG] [Thread-23388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:53:30.937 [INFO] [Thread-23388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:53:30.937 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:53:31.570 [DEBUG] [Thread-23388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:53:31.570 [DEBUG] [Thread-23388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:53:31.571 [DEBUG] [Thread-23388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:53:31.612 [DEBUG] [Thread-23388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:53:31.612 [DEBUG] [Thread-23388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:53:31.615 [DEBUG] [Thread-23388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:53:31.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:53:31.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:53:31.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:53:31.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:53:31.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:53:31.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:53:31.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:53:31.641 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:53:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:53:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.828556 -999.00  +17.40   7.55     50   +6.90 1 1 1 1 1     0    0 9.27 -60.35 ZNESW 8.0 7.5 200.6 11.3 18.3 -21.5 18.2 -20.9 18.0 -20.4 18.3 -21.2
2025-11-12T21:53:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:53:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:53:31.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.828556
2025-11-12T21:53:31.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:53:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:53:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:53:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:53:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:53:31.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:53:22', tmtdew=11.65, humidity=45.99, cloud=0.0, wind=12.93, temperature=17.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:53:22', seeing=0.93, atlas_timestamp='2025-11-12T19:53:07.238', atlas_cloud=1, atlas_rain=1, zp_data=[1.4027499999999993, 1.9042500000000002, 1.7872500000000002, 1.6734999999999989, 1.7595, 1.7577500000000006, 1.4419999999999993, 1.7932500000000005, nan, 1.157, 1.5122499999999999, 1.8229999999999995, 1.8709999999999996, 1.7387499999999996, 1.626999999999999, 1.738999999999999, 1.6132499999999999, 0.9165000000000001, 1.5139999999999993, 1.670749999999999, 1.4199999999999982, 1.4822499999999987, 1.5777500000000009, 2.6727499999999997, 0.8979999999999988, 0.45750000000000046, 1.10175, 1.9864999999999995, 1.1289999999999996, 1.3760000000000012, nan, nan, 0.4322499999999998], zp_timestamp='2025-11-12T19:51:00')
2025-11-12T21:53:31.645 [DEBUG] [Thread-23388] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:53:31.724 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:53:31.736 [DEBUG] [Thread-23391] [transport.py] [_log()] starting thread (client mode): 0x1739a5f0
2025-11-12T21:53:31.736 [DEBUG] [Thread-23391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:53:31.751 [DEBUG] [Thread-23391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:53:31.751 [INFO] [Thread-23391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] client lang: <none>
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] server lang: <none>
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] kex follows: False
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:53:31.759 [DEBUG] [Thread-23391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:53:31.760 [DEBUG] [Thread-23391] [transport.py] [_log()] Compression: none
2025-11-12T21:53:31.760 [DEBUG] [Thread-23391] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:53:31.821 [DEBUG] [Thread-23391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:53:31.822 [DEBUG] [Thread-23391] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:53:31.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:53:31.823 [DEBUG] [Thread-23391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:53:31.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:53:31.877 [DEBUG] [Thread-23391] [transport.py] [_log()] userauth is OK
2025-11-12T21:53:31.878 [DEBUG] [Thread-23391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:53:31.878 [DEBUG] [Thread-23391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:53:31.878 [DEBUG] [Thread-23391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:53:31.878 [DEBUG] [Thread-23391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:53:31.897 [INFO] [Thread-23391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:53:31.897 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:53:31.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:53:32.755 [DEBUG] [Thread-23391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:53:32.755 [DEBUG] [Thread-23391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:53:32.803 [DEBUG] [Thread-23391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:53:32.804 [DEBUG] [Thread-23391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:53:32.813 [DEBUG] [Thread-23391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:53:32.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:53:32.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:53:32.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:53:32.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:53:32.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:53:32.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:53:32.849 [DEBUG] [Thread-23391] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:53:37.138 [DEBUG] [Thread-23393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:53:52.204 [DEBUG] [Thread-23394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:53:54.140 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:53:54.141 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:53:57.091 [DEBUG] [Thread-23395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:54:02.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:54:02.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:54:02.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-11-12T21:54:03.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 53, 54), 11.68, 45.93, 0.0, 12.0, 17.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:54:03.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:53:54
2025-11-12T21:54:03.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:54:03.820 [DEBUG] [Thread-23396] [transport.py] [_log()] starting thread (client mode): 0x14904130
2025-11-12T21:54:03.820 [DEBUG] [Thread-23396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:54:03.839 [DEBUG] [Thread-23396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:54:03.839 [INFO] [Thread-23396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] client lang: <none>
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] server lang: <none>
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] kex follows: False
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] Compression: none
2025-11-12T21:54:03.843 [DEBUG] [Thread-23396] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:54:03.861 [DEBUG] [Thread-23396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:54:03.861 [DEBUG] [Thread-23396] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:54:03.861 [DEBUG] [Thread-23396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:54:03.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:54:03.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:54:03.862 [DEBUG] [Thread-23396] [transport.py] [_log()] userauth is OK
2025-11-12T21:54:03.862 [DEBUG] [Thread-23396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:54:03.862 [DEBUG] [Thread-23396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:54:03.862 [DEBUG] [Thread-23396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:54:03.862 [DEBUG] [Thread-23396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:54:03.877 [INFO] [Thread-23396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:54:03.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:54:04.529 [DEBUG] [Thread-23396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:54:04.529 [DEBUG] [Thread-23396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:54:04.529 [DEBUG] [Thread-23396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:54:04.570 [DEBUG] [Thread-23396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:54:04.570 [DEBUG] [Thread-23396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:54:04.572 [DEBUG] [Thread-23396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:54:04.586 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:54:04.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:54:04.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:54:04.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:54:04.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:54:04.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:54:04.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:54:04.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:54:04.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:54:04.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.828903 -999.00  +17.40   8.12     50   +7.00 1 1 1 1 1     0    0 9.29 -59.23 ZNESW 7.8 8.1 188.0 11.5 18.3 -21.6 18.2 -20.5 18.0 -20.6 18.3 -21.2
2025-11-12T21:54:04.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:54:04.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:54:04.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.828903
2025-11-12T21:54:04.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:54:04.601 [DEBUG] [Thread-23396] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:54:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:54:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:54:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:54:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:54:04.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:53:54', tmtdew=11.68, humidity=45.93, cloud=0.0, wind=12.0, temperature=17.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:53:55', seeing=0.93, atlas_timestamp='2025-11-12T19:53:37.219', atlas_cloud=1, atlas_rain=1, zp_data=[1.4027499999999993, 1.9042500000000002, 1.7872500000000002, 1.6734999999999989, 1.7595, 1.7577500000000006, 1.4419999999999993, 1.7932500000000005, nan, 1.157, 1.5122499999999999, 1.8229999999999995, 1.8709999999999996, 1.7387499999999996, 1.626999999999999, 1.738999999999999, 1.6132499999999999, 0.9165000000000001, 1.5139999999999993, 1.670749999999999, 1.4199999999999982, 1.4822499999999987, 1.5777500000000009, 2.6727499999999997, 0.8979999999999988, 0.45750000000000046, 1.10175, 1.9864999999999995, 1.1289999999999996, 1.3760000000000012, nan, nan, 0.4322499999999998], zp_timestamp='2025-11-12T19:51:00')
2025-11-12T21:54:04.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:54:04.688 [DEBUG] [Thread-23399] [transport.py] [_log()] starting thread (client mode): 0x17347460
2025-11-12T21:54:04.688 [DEBUG] [Thread-23399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:54:04.702 [DEBUG] [Thread-23399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:54:04.703 [INFO] [Thread-23399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] client lang: <none>
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] server lang: <none>
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] kex follows: False
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] Compression: none
2025-11-12T21:54:04.710 [DEBUG] [Thread-23399] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:54:04.768 [DEBUG] [Thread-23399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:54:04.768 [DEBUG] [Thread-23399] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:54:04.768 [DEBUG] [Thread-23399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:54:04.768 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:54:04.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:54:04.824 [DEBUG] [Thread-23399] [transport.py] [_log()] userauth is OK
2025-11-12T21:54:04.825 [DEBUG] [Thread-23399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:54:04.825 [DEBUG] [Thread-23399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:54:04.825 [DEBUG] [Thread-23399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:54:04.825 [DEBUG] [Thread-23399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:54:04.838 [INFO] [Thread-23399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:54:04.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:54:04.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:54:05.675 [DEBUG] [Thread-23399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:54:05.676 [DEBUG] [Thread-23399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:54:05.725 [DEBUG] [Thread-23399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:54:05.725 [DEBUG] [Thread-23399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:54:05.737 [DEBUG] [Thread-23399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:54:05.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:54:05.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:54: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-11-12T21:54:05.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:54:05.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:54:05.769 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:54:05.777 [DEBUG] [Thread-23399] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:54:07.234 [DEBUG] [Thread-23401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:54:22.297 [DEBUG] [Thread-23402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:54:35.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:54:35.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:54:35.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-11-12T21:54:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 54, 26), 11.69, 45.89, 0.0, 10.27, 17.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:54:36.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:54:26
2025-11-12T21:54:36.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:54:36.680 [DEBUG] [Thread-23403] [transport.py] [_log()] starting thread (client mode): 0x149810f0
2025-11-12T21:54:36.680 [DEBUG] [Thread-23403] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:54:36.704 [DEBUG] [Thread-23403] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:54:36.705 [INFO] [Thread-23403] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] client lang: <none>
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] server lang: <none>
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] kex follows: False
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] Compression: none
2025-11-12T21:54:36.706 [DEBUG] [Thread-23403] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:54:36.714 [DEBUG] [Thread-23403] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:54:36.714 [DEBUG] [Thread-23403] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:54:36.715 [DEBUG] [Thread-23403] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:54:36.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:54:36.715 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:54:36.716 [DEBUG] [Thread-23403] [transport.py] [_log()] userauth is OK
2025-11-12T21:54:36.716 [DEBUG] [Thread-23403] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:54:36.716 [DEBUG] [Thread-23403] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:54:36.716 [DEBUG] [Thread-23403] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:54:36.716 [DEBUG] [Thread-23403] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:54:36.728 [INFO] [Thread-23403] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:54:36.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:54:37.301 [DEBUG] [Thread-23403] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:54:37.301 [DEBUG] [Thread-23403] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:54:37.302 [DEBUG] [Thread-23403] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:54:37.332 [DEBUG] [Thread-23405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:54:37.342 [DEBUG] [Thread-23403] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:54:37.343 [DEBUG] [Thread-23403] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:54:37.345 [DEBUG] [Thread-23403] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:54:37.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:54:37.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:54:37.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:54:37.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:54:37.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:54:37.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:54:37.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:54:37.360 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:54:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:54:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.829250 -999.00  +17.40  10.55     50   +7.00 1 1 1 1 1     0    0 9.48 -55.25 ZNESW 8.8 10.6 190.0 11.9 18.3 -21.5 18.2 -21.1 18.0 -20.6 18.3 -21.2
2025-11-12T21:54:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:54:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:54:37.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.829250
2025-11-12T21:54:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:54:37.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:54:37.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:54:37.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:54:37.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:54:37.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:54:26', tmtdew=11.69, humidity=45.89, cloud=0.0, wind=10.27, temperature=17.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:54:27', seeing=0.93, atlas_timestamp='2025-11-12T19:54:07.200', atlas_cloud=1, atlas_rain=1, zp_data=[1.4027499999999993, 1.9042500000000002, 1.7872500000000002, 1.6734999999999989, 1.7595, 1.7577500000000006, 1.4419999999999993, 1.7932500000000005, nan, 1.157, 1.5122499999999999, 1.8229999999999995, 1.8709999999999996, 1.7387499999999996, 1.626999999999999, 1.738999999999999, 1.6132499999999999, 0.9165000000000001, 1.5139999999999993, 1.670749999999999, 1.4199999999999982, 1.4822499999999987, 1.5777500000000009, 2.6727499999999997, 0.8979999999999988, 0.45750000000000046, 1.10175, 1.9864999999999995, 1.1289999999999996, 1.3760000000000012, nan, nan, 0.4322499999999998], zp_timestamp='2025-11-12T19:51:00')
2025-11-12T21:54:37.363 [DEBUG] [Thread-23403] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:54:37.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:54:37.463 [DEBUG] [Thread-23407] [transport.py] [_log()] starting thread (client mode): 0x14981180
2025-11-12T21:54:37.463 [DEBUG] [Thread-23407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:54:37.477 [DEBUG] [Thread-23407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:54:37.478 [INFO] [Thread-23407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:54:37.485 [DEBUG] [Thread-23407] [transport.py] [_log()] client lang: <none>
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] server lang: <none>
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] kex follows: False
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] Compression: none
2025-11-12T21:54:37.486 [DEBUG] [Thread-23407] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:54:37.549 [DEBUG] [Thread-23407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:54:37.550 [DEBUG] [Thread-23407] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:54:37.551 [DEBUG] [Thread-23407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:54:37.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:54:37.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:54:37.605 [DEBUG] [Thread-23407] [transport.py] [_log()] userauth is OK
2025-11-12T21:54:37.605 [DEBUG] [Thread-23407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:54:37.605 [DEBUG] [Thread-23407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:54:37.605 [DEBUG] [Thread-23407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:54:37.605 [DEBUG] [Thread-23407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:54:37.623 [INFO] [Thread-23407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:54:37.624 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:54:37.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:54:38.433 [DEBUG] [Thread-23407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:54:38.433 [DEBUG] [Thread-23407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:54:38.483 [DEBUG] [Thread-23407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:54:38.483 [DEBUG] [Thread-23407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:54:38.495 [DEBUG] [Thread-23407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:54:38.508 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:54:38.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:54:38.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-11-12T21:54:38.524 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:54:38.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:54:38.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:54:38.532 [DEBUG] [Thread-23407] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:54:52.366 [DEBUG] [Thread-23409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:54:54.348 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:54:54.349 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:54:57.166 [DEBUG] [Thread-23410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:55:07.418 [DEBUG] [Thread-23411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:55:08.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:55:08.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:55: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-11-12T21:55:09.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 54, 58), 11.64, 45.86, 0.0, 11.35, 17.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:55:09.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:54:58
2025-11-12T21:55:09.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:55:09.464 [DEBUG] [Thread-23412] [transport.py] [_log()] starting thread (client mode): 0x17346fb0
2025-11-12T21:55:09.464 [DEBUG] [Thread-23412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:55:09.486 [DEBUG] [Thread-23412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:55:09.486 [INFO] [Thread-23412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] client lang: <none>
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] server lang: <none>
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] kex follows: False
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:55:09.489 [DEBUG] [Thread-23412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:55:09.490 [DEBUG] [Thread-23412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:55:09.490 [DEBUG] [Thread-23412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:55:09.490 [DEBUG] [Thread-23412] [transport.py] [_log()] Compression: none
2025-11-12T21:55:09.490 [DEBUG] [Thread-23412] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:55:09.509 [DEBUG] [Thread-23412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:55:09.509 [DEBUG] [Thread-23412] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:55:09.510 [DEBUG] [Thread-23412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:55:09.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:55:09.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:55:09.513 [DEBUG] [Thread-23412] [transport.py] [_log()] userauth is OK
2025-11-12T21:55:09.513 [DEBUG] [Thread-23412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:55:09.513 [DEBUG] [Thread-23412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:55:09.513 [DEBUG] [Thread-23412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:55:09.513 [DEBUG] [Thread-23412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:55:09.531 [INFO] [Thread-23412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:55:09.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:55:10.130 [DEBUG] [Thread-23412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:55:10.130 [DEBUG] [Thread-23412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:55:10.130 [DEBUG] [Thread-23412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:55:10.170 [DEBUG] [Thread-23412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:55:10.171 [DEBUG] [Thread-23412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:55:10.173 [DEBUG] [Thread-23412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:55:10.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:55:10.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:55:10.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:55:10.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:55:10.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:55:10.194 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:55:10.194 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:55:10.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:55:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:55:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.829597 -999.00  +17.40   8.27     50   +6.90 1 1 1 1 1     0    0 9.33 -56.86 ZNESW 6.7 8.3 189.4 9.7 18.3 -21.5 18.2 -21.0 18.0 -20.5 18.2 -21.3
2025-11-12T21:55:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:55:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:55:10.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.829597
2025-11-12T21:55:10.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:55:10.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:55:10.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:55:10.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:55:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:55:10.197 [DEBUG] [Thread-23412] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:55:10.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:54:58', tmtdew=11.64, humidity=45.86, cloud=0.0, wind=11.35, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:54:59', seeing=0.93, atlas_timestamp='2025-11-12T19:54:37.181', atlas_cloud=1, atlas_rain=1, zp_data=[1.4027499999999993, 1.9042500000000002, 1.7872500000000002, 1.6734999999999989, 1.7595, 1.7577500000000006, 1.4419999999999993, 1.7932500000000005, nan, 1.157, 1.5122499999999999, 1.8229999999999995, 1.8709999999999996, 1.7387499999999996, 1.626999999999999, 1.738999999999999, 1.6132499999999999, 0.9165000000000001, 1.5139999999999993, 1.670749999999999, 1.4199999999999982, 1.4822499999999987, 1.5777500000000009, 2.6727499999999997, 0.8979999999999988, 0.45750000000000046, 1.10175, 1.9864999999999995, 1.1289999999999996, 1.3760000000000012, nan, nan, 0.4322499999999998], zp_timestamp='2025-11-12T19:51:00')
2025-11-12T21:55:10.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:55:10.293 [DEBUG] [Thread-23415] [transport.py] [_log()] starting thread (client mode): 0x17347f70
2025-11-12T21:55:10.293 [DEBUG] [Thread-23415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:55:10.308 [DEBUG] [Thread-23415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:55:10.308 [INFO] [Thread-23415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:55:10.317 [DEBUG] [Thread-23415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:55:10.317 [DEBUG] [Thread-23415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:55:10.317 [DEBUG] [Thread-23415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:55:10.317 [DEBUG] [Thread-23415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] client lang: <none>
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] server lang: <none>
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] kex follows: False
2025-11-12T21:55:10.318 [DEBUG] [Thread-23415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:55:10.319 [DEBUG] [Thread-23415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:55:10.319 [DEBUG] [Thread-23415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:55:10.319 [DEBUG] [Thread-23415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:55:10.319 [DEBUG] [Thread-23415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:55:10.319 [DEBUG] [Thread-23415] [transport.py] [_log()] Compression: none
2025-11-12T21:55:10.319 [DEBUG] [Thread-23415] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:55:10.373 [DEBUG] [Thread-23415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:55:10.374 [DEBUG] [Thread-23415] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:55:10.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:55:10.375 [DEBUG] [Thread-23415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:55:10.376 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:55:10.429 [DEBUG] [Thread-23415] [transport.py] [_log()] userauth is OK
2025-11-12T21:55:10.430 [DEBUG] [Thread-23415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:55:10.430 [DEBUG] [Thread-23415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:55:10.430 [DEBUG] [Thread-23415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:55:10.430 [DEBUG] [Thread-23415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:55:10.448 [INFO] [Thread-23415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:55:10.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:55:10.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:55:11.255 [DEBUG] [Thread-23415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:55:11.255 [DEBUG] [Thread-23415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:55:11.304 [DEBUG] [Thread-23415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:55:11.304 [DEBUG] [Thread-23415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:55:11.313 [DEBUG] [Thread-23415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:55:11.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:55:11.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:55:11.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-11-12T21:55:11.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:55:11.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:55:11.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:55:11.350 [DEBUG] [Thread-23415] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:55:22.452 [DEBUG] [Thread-23417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:55:37.505 [DEBUG] [Thread-23418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:55:41.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:55:41.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:55:41.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-11-12T21:55:41.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 55, 30), 11.56, 46.14, 0.0, 11.56, 17.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:55:41.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:55:30
2025-11-12T21:55:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:55:42.265 [DEBUG] [Thread-23419] [transport.py] [_log()] starting thread (client mode): 0x17344d00
2025-11-12T21:55:42.265 [DEBUG] [Thread-23419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:55:42.285 [DEBUG] [Thread-23419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:55:42.285 [INFO] [Thread-23419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:55:42.288 [DEBUG] [Thread-23419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:55:42.288 [DEBUG] [Thread-23419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] client lang: <none>
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] server lang: <none>
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] kex follows: False
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:55:42.289 [DEBUG] [Thread-23419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:55:42.290 [DEBUG] [Thread-23419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:55:42.290 [DEBUG] [Thread-23419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:55:42.290 [DEBUG] [Thread-23419] [transport.py] [_log()] Compression: none
2025-11-12T21:55:42.290 [DEBUG] [Thread-23419] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:55:42.309 [DEBUG] [Thread-23419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:55:42.310 [DEBUG] [Thread-23419] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:55:42.310 [DEBUG] [Thread-23419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:55:42.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:55:42.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:55:42.312 [DEBUG] [Thread-23419] [transport.py] [_log()] userauth is OK
2025-11-12T21:55:42.313 [DEBUG] [Thread-23419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:55:42.313 [DEBUG] [Thread-23419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:55:42.313 [DEBUG] [Thread-23419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:55:42.313 [DEBUG] [Thread-23419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:55:42.349 [INFO] [Thread-23419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:55:42.350 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:55:42.973 [DEBUG] [Thread-23419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:55:42.973 [DEBUG] [Thread-23419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:55:42.974 [DEBUG] [Thread-23419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:55:43.015 [DEBUG] [Thread-23419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:55:43.015 [DEBUG] [Thread-23419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:55:43.019 [DEBUG] [Thread-23419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:55:43.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:55:43.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:55:43.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:55:43.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:55:43.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:55:43.043 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:55:43.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:55:43.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:55:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:55:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.829597 -999.00  +17.40   8.27     50   +6.90 1 1 1 1 1     0    0 9.33 -56.86 ZNESW 6.7 8.3 189.4 9.7 18.3 -21.5 18.2 -21.0 18.0 -20.5 18.2 -21.3
2025-11-12T21:55:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:55:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:55:43.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.829597
2025-11-12T21:55:43.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:55:43.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:55:43.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:55:43.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:55:43.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:55:43.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:55:30', tmtdew=11.56, humidity=46.14, cloud=0.0, wind=11.56, temperature=17.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:55:31', seeing=1.1, atlas_timestamp='2025-11-12T19:54:37.181', atlas_cloud=1, atlas_rain=1, zp_data=[1.4027499999999993, 1.9042500000000002, 1.7872500000000002, 1.6734999999999989, 1.7595, 1.7577500000000006, 1.4419999999999993, 1.7932500000000005, nan, 1.157, 1.5122499999999999, 1.8229999999999995, 1.8709999999999996, 1.7387499999999996, 1.626999999999999, 1.738999999999999, 1.6132499999999999, 0.9165000000000001, 1.5139999999999993, 1.670749999999999, 1.4199999999999982, 1.4822499999999987, 1.5777500000000009, 2.6727499999999997, 0.8979999999999988, 0.45750000000000046, 1.10175, 1.9864999999999995, 1.1289999999999996, 1.3760000000000012, nan, nan, 0.4322499999999998], zp_timestamp='2025-11-12T19:51:00')
2025-11-12T21:55:43.046 [DEBUG] [Thread-23419] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:55:43.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:55:43.142 [DEBUG] [Thread-23422] [transport.py] [_log()] starting thread (client mode): 0x17344c40
2025-11-12T21:55:43.142 [DEBUG] [Thread-23422] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:55:43.157 [DEBUG] [Thread-23422] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:55:43.157 [INFO] [Thread-23422] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] client lang: <none>
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] server lang: <none>
2025-11-12T21:55:43.165 [DEBUG] [Thread-23422] [transport.py] [_log()] kex follows: False
2025-11-12T21:55:43.166 [DEBUG] [Thread-23422] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:55:43.166 [DEBUG] [Thread-23422] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:55:43.166 [DEBUG] [Thread-23422] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:55:43.166 [DEBUG] [Thread-23422] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:55:43.166 [DEBUG] [Thread-23422] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:55:43.166 [DEBUG] [Thread-23422] [transport.py] [_log()] Compression: none
2025-11-12T21:55:43.166 [DEBUG] [Thread-23422] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:55:43.225 [DEBUG] [Thread-23422] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:55:43.226 [DEBUG] [Thread-23422] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:55:43.227 [DEBUG] [Thread-23422] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:55:43.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:55:43.228 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:55:43.281 [DEBUG] [Thread-23422] [transport.py] [_log()] userauth is OK
2025-11-12T21:55:43.281 [DEBUG] [Thread-23422] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:55:43.281 [DEBUG] [Thread-23422] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:55:43.281 [DEBUG] [Thread-23422] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:55:43.281 [DEBUG] [Thread-23422] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:55:43.305 [INFO] [Thread-23422] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:55:43.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:55:43.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:55:44.138 [DEBUG] [Thread-23422] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:55:44.138 [DEBUG] [Thread-23422] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:55:44.186 [DEBUG] [Thread-23422] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:55:44.186 [DEBUG] [Thread-23422] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:55:44.195 [DEBUG] [Thread-23422] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:55:44.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:55:44.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:55:44.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T21:55:44.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:55:44.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:55:44.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:55:44.232 [DEBUG] [Thread-23422] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:55:52.542 [DEBUG] [Thread-23424 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:55:54.556 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:55:54.557 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:55:57.219 [DEBUG] [Thread-23425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:56:07.579 [DEBUG] [Thread-23426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:56:14.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:56:14.234 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:56:14.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-11-12T21:56:14.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 56, 2), 11.57, 46.11, 0.0, 10.54, 17.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:56:14.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:56:02
2025-11-12T21:56:14.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:56:15.134 [DEBUG] [Thread-23427] [transport.py] [_log()] starting thread (client mode): 0x173be8f0
2025-11-12T21:56:15.134 [DEBUG] [Thread-23427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:56:15.154 [DEBUG] [Thread-23427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:56:15.154 [INFO] [Thread-23427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:56:15.157 [DEBUG] [Thread-23427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] client lang: <none>
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] server lang: <none>
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] kex follows: False
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] Compression: none
2025-11-12T21:56:15.158 [DEBUG] [Thread-23427] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:56:15.175 [DEBUG] [Thread-23427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:56:15.176 [DEBUG] [Thread-23427] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:56:15.176 [DEBUG] [Thread-23427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:56:15.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:56:15.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:56:15.178 [DEBUG] [Thread-23427] [transport.py] [_log()] userauth is OK
2025-11-12T21:56:15.178 [DEBUG] [Thread-23427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:56:15.178 [DEBUG] [Thread-23427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:56:15.178 [DEBUG] [Thread-23427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:56:15.179 [DEBUG] [Thread-23427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:56:15.202 [INFO] [Thread-23427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:56:15.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:56:15.832 [DEBUG] [Thread-23427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:56:15.832 [DEBUG] [Thread-23427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:56:15.832 [DEBUG] [Thread-23427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:56:15.873 [DEBUG] [Thread-23427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:56:15.873 [DEBUG] [Thread-23427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:56:15.876 [DEBUG] [Thread-23427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:56:15.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:56:15.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:56:15.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:56:15.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:56:15.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:56:15.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:56:15.900 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:56:15.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:56:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:56:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.830292 -999.00  +17.40   9.42     50   +7.00 1 1 1 1 1     0    0 9.48 -47.72 ZNESW 9.8 9.4 193.4 10.9 18.3 -21.6 18.1 -21.2 18.0 -20.6 18.2 -21.4
2025-11-12T21:56:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:56:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:56:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.830292
2025-11-12T21:56:15.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:56:15.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:56:15.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:56:15.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:56:15.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:56:15.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:56:02', tmtdew=11.57, humidity=46.11, cloud=0.0, wind=10.54, temperature=17.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:56:03', seeing=1.1, atlas_timestamp='2025-11-12T19:55:37.229', atlas_cloud=1, atlas_rain=1, zp_data=[1.3157499999999995, 1.4567500000000004, 1.3187500000000005, 1.3209999999999997, 1.6965000000000003, 1.704250000000001, 1.3119999999999994, 1.4337500000000007, 1.6744999999999992, 1.641, 1.7182499999999994, 1.662, 1.4849999999999994, 1.5482499999999995, 1.0864999999999991, 1.443999999999999, 1.9072499999999994, 1.2575000000000003, 1.5969999999999995, 1.6472499999999988, 1.387999999999999, 1.4502499999999987, 1.2912500000000007, 1.5397499999999997, 1.4309999999999992, 0.5984999999999996, 1.7307500000000005, 1.2999999999999998, 1.2240000000000002, 1.6960000000000006, nan, nan, 0.5127499999999996], zp_timestamp='2025-11-12T19:54:00')
2025-11-12T21:56:15.902 [DEBUG] [Thread-23427] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:56:15.986 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:56:15.998 [DEBUG] [Thread-23430] [transport.py] [_log()] starting thread (client mode): 0x14981180
2025-11-12T21:56:15.998 [DEBUG] [Thread-23430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:56:16.014 [DEBUG] [Thread-23430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:56:16.014 [INFO] [Thread-23430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:56:16.022 [DEBUG] [Thread-23430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:56:16.022 [DEBUG] [Thread-23430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:56:16.022 [DEBUG] [Thread-23430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:56:16.022 [DEBUG] [Thread-23430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:56:16.022 [DEBUG] [Thread-23430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] client lang: <none>
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] server lang: <none>
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] kex follows: False
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:56:16.023 [DEBUG] [Thread-23430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:56:16.024 [DEBUG] [Thread-23430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:56:16.024 [DEBUG] [Thread-23430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:56:16.024 [DEBUG] [Thread-23430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:56:16.024 [DEBUG] [Thread-23430] [transport.py] [_log()] Compression: none
2025-11-12T21:56:16.024 [DEBUG] [Thread-23430] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:56:16.086 [DEBUG] [Thread-23430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:56:16.087 [DEBUG] [Thread-23430] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:56:16.088 [DEBUG] [Thread-23430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:56:16.088 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:56:16.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:56:16.145 [DEBUG] [Thread-23430] [transport.py] [_log()] userauth is OK
2025-11-12T21:56:16.146 [DEBUG] [Thread-23430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:56:16.146 [DEBUG] [Thread-23430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:56:16.146 [DEBUG] [Thread-23430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:56:16.146 [DEBUG] [Thread-23430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:56:16.165 [INFO] [Thread-23430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:56:16.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:56:16.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:56:16.996 [DEBUG] [Thread-23430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:56:16.996 [DEBUG] [Thread-23430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:56:17.045 [DEBUG] [Thread-23430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:56:17.045 [DEBUG] [Thread-23430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:56:17.054 [DEBUG] [Thread-23430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:56:17.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:56:17.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T21:56:17.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-11-12T21:56:17.083 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:56:17.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:56:17.084 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:56:17.092 [DEBUG] [Thread-23430] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:56:22.618 [DEBUG] [Thread-23432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:56:37.665 [DEBUG] [Thread-23433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:56:47.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:56:47.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:56:47.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-11-12T21:56:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 56, 34), 11.57, 46.09, 0.0, 11.49, 17.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:56:47.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:56:34
2025-11-12T21:56:47.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:56:48.016 [DEBUG] [Thread-23434] [transport.py] [_log()] starting thread (client mode): 0x14982860
2025-11-12T21:56:48.016 [DEBUG] [Thread-23434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:56:48.035 [DEBUG] [Thread-23434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:56:48.035 [INFO] [Thread-23434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] client lang: <none>
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] server lang: <none>
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] kex follows: False
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] Compression: none
2025-11-12T21:56:48.037 [DEBUG] [Thread-23434] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:56:48.048 [DEBUG] [Thread-23434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:56:48.048 [DEBUG] [Thread-23434] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:56:48.049 [DEBUG] [Thread-23434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:56:48.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:56:48.049 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:56:48.050 [DEBUG] [Thread-23434] [transport.py] [_log()] userauth is OK
2025-11-12T21:56:48.050 [DEBUG] [Thread-23434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:56:48.051 [DEBUG] [Thread-23434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:56:48.051 [DEBUG] [Thread-23434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:56:48.051 [DEBUG] [Thread-23434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:56:48.075 [INFO] [Thread-23434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:56:48.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:56:48.736 [DEBUG] [Thread-23434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:56:48.736 [DEBUG] [Thread-23434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:56:48.737 [DEBUG] [Thread-23434] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:56:48.778 [DEBUG] [Thread-23434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:56:48.778 [DEBUG] [Thread-23434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:56:48.782 [DEBUG] [Thread-23434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:56:48.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:56:48.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:56:48.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:56:48.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:56:48.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:56:48.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:56:48.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:56:48.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:56:48.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:56:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.830639 -999.00  +17.40   6.42     50   +7.00 1 1 1 1 1     0    0 9.41 -49.81 ZNESW 6.6 6.4 195.8 11.6 18.2 -21.6 18.1 -20.7 17.9 -20.6 18.2 -21.4
2025-11-12T21:56:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:56:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:56:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.830639
2025-11-12T21:56:48.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:56:48.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:56:48.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:56:48.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:56:48.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:56:48.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:56:34', tmtdew=11.57, humidity=46.09, cloud=0.0, wind=11.49, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:56:35', seeing=1.06, atlas_timestamp='2025-11-12T19:56:07.210', atlas_cloud=1, atlas_rain=1, zp_data=[1.3157499999999995, 1.4567500000000004, 1.3187500000000005, 1.3209999999999997, 1.6965000000000003, 1.704250000000001, 1.3119999999999994, 1.4337500000000007, 1.6744999999999992, 1.641, 1.7182499999999994, 1.662, 1.4849999999999994, 1.5482499999999995, 1.0864999999999991, 1.443999999999999, 1.9072499999999994, 1.2575000000000003, 1.5969999999999995, 1.6472499999999988, 1.387999999999999, 1.4502499999999987, 1.2912500000000007, 1.5397499999999997, 1.4309999999999992, 0.5984999999999996, 1.7307500000000005, 1.2999999999999998, 1.2240000000000002, 1.6960000000000006, nan, nan, 0.5127499999999996], zp_timestamp='2025-11-12T19:54:00')
2025-11-12T21:56:48.811 [DEBUG] [Thread-23434] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:56:48.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:56:48.906 [DEBUG] [Thread-23437] [transport.py] [_log()] starting thread (client mode): 0x17346e90
2025-11-12T21:56:48.907 [DEBUG] [Thread-23437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:56:48.924 [DEBUG] [Thread-23437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T21:56:48.924 [INFO] [Thread-23437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T21:56:48.932 [DEBUG] [Thread-23437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:56:48.932 [DEBUG] [Thread-23437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T21:56:48.932 [DEBUG] [Thread-23437] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:56:48.932 [DEBUG] [Thread-23437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] client lang: <none>
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] server lang: <none>
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] kex follows: False
2025-11-12T21:56:48.933 [DEBUG] [Thread-23437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:56:48.934 [DEBUG] [Thread-23437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:56:48.934 [DEBUG] [Thread-23437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:56:48.934 [DEBUG] [Thread-23437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:56:48.934 [DEBUG] [Thread-23437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:56:48.934 [DEBUG] [Thread-23437] [transport.py] [_log()] Compression: none
2025-11-12T21:56:48.934 [DEBUG] [Thread-23437] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:56:48.994 [DEBUG] [Thread-23437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:56:48.994 [DEBUG] [Thread-23437] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:56:48.995 [DEBUG] [Thread-23437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T21:56:48.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T21:56:48.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:56:49.049 [DEBUG] [Thread-23437] [transport.py] [_log()] userauth is OK
2025-11-12T21:56:49.050 [DEBUG] [Thread-23437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:56:49.050 [DEBUG] [Thread-23437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:56:49.050 [DEBUG] [Thread-23437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T21:56:49.050 [DEBUG] [Thread-23437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:56:49.069 [INFO] [Thread-23437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:56:49.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T21:56:49.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:56:49.910 [DEBUG] [Thread-23437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:56:49.910 [DEBUG] [Thread-23437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:56:49.957 [DEBUG] [Thread-23437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:56:49.958 [DEBUG] [Thread-23437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:56:49.967 [DEBUG] [Thread-23437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:56:49.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:56:49.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-11-12T21:56: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-11-12T21:56:49.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:56:49.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:56:49.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:56:50.004 [DEBUG] [Thread-23437] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:56:52.701 [DEBUG] [Thread-23439 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:56:54.768 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:56:54.769 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:56:57.288 [DEBUG] [Thread-23440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:57:07.754 [DEBUG] [Thread-23441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:57:20.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T21:57:20.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T21:57:20.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-11-12T21:57:20.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 57, 6), 11.53, 46.23, 0.0, 12.11, 17.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T21:57:20.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:57:06
2025-11-12T21:57:20.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T21:57:20.918 [DEBUG] [Thread-23442] [transport.py] [_log()] starting thread (client mode): 0x14917430
2025-11-12T21:57:20.918 [DEBUG] [Thread-23442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T21:57:20.940 [DEBUG] [Thread-23442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T21:57:20.940 [INFO] [Thread-23442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T21:57:20.943 [DEBUG] [Thread-23442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T21:57:20.943 [DEBUG] [Thread-23442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T21:57:20.943 [DEBUG] [Thread-23442] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] client lang: <none>
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] server lang: <none>
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] kex follows: False
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] Compression: none
2025-11-12T21:57:20.944 [DEBUG] [Thread-23442] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T21:57:20.963 [DEBUG] [Thread-23442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T21:57:20.963 [DEBUG] [Thread-23442] [transport.py] [_log()] Switch to new keys ...
2025-11-12T21:57:20.964 [DEBUG] [Thread-23442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T21:57:20.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T21:57:20.965 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T21:57:20.966 [DEBUG] [Thread-23442] [transport.py] [_log()] userauth is OK
2025-11-12T21:57:20.966 [DEBUG] [Thread-23442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T21:57:20.966 [DEBUG] [Thread-23442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T21:57:20.966 [DEBUG] [Thread-23442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T21:57:20.967 [DEBUG] [Thread-23442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T21:57:21.003 [INFO] [Thread-23442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T21:57:21.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T21:57:22.267 [DEBUG] [Thread-23442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T21:57:22.268 [DEBUG] [Thread-23442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T21:57:22.268 [DEBUG] [Thread-23442] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T21:57:22.309 [DEBUG] [Thread-23442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T21:57:22.309 [DEBUG] [Thread-23442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T21:57:22.313 [DEBUG] [Thread-23442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T21:57:22.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T21:57:22.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T21:57:22.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T21:57:22.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T21:57:22.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T21:57:22.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T21:57:22.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T21:57:22.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T21:57:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T21:57:22.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.830986 -999.00  +17.40   7.32     50   +7.00 1 1 1 1 1     0    0 9.68 -47.57 ZNESW 6.7 7.3 183.6 10.0 18.2 -21.7 18.1 -21.0 17.9 -20.6 18.2 -21.4
2025-11-12T21:57:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T21:57:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T21:57:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.830986
2025-11-12T21:57:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T21:57:22.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T21:57:22.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T21:57:22.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T21:57:22.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T21:57:22.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:57:06', tmtdew=11.53, humidity=46.23, cloud=0.0, wind=12.11, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:57:07', seeing=1.01, atlas_timestamp='2025-11-12T19:56:37.190', atlas_cloud=1, atlas_rain=1, zp_data=[1.3157499999999995, 1.4567500000000004, 1.3187500000000005, 1.3209999999999997, 1.6965000000000003, 1.704250000000001, 1.3119999999999994, 1.4337500000000007, 1.6744999999999992, 1.641, 1.7182499999999994, 1.662, 1.4849999999999994, 1.5482499999999995, 1.0864999999999991, 1.443999999999999, 1.9072499999999994, 1.2575000000000003, 1.5969999999999995, 1.6472499999999988, 1.387999999999999, 1.4502499999999987, 1.2912500000000007, 1.5397499999999997, 1.4309999999999992, 0.5984999999999996, 1.7307500000000005, 1.2999999999999998, 1.2240000000000002, 1.6960000000000006, nan, nan, 0.5127499999999996], zp_timestamp='2025-11-12T19:54:00')
2025-11-12T21:57:22.340 [DEBUG] [Thread-23442] [transport.py] [_log()] EOF in transport thread
2025-11-12T21:57:22.436 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T21:57:22.784 [DEBUG] [Thread-23445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:57:37.837 [DEBUG] [Thread-23446 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:57:52.870 [DEBUG] [Thread-23447 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:57:54.973 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:57:54.974 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:57:57.344 [DEBUG] [Thread-23448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:58:07.901 [DEBUG] [Thread-23449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:58:22.939 [DEBUG] [Thread-23450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:58:37.971 [DEBUG] [Thread-23451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:58:53.007 [DEBUG] [Thread-23452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:58:55.181 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:58:55.182 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:58:57.414 [DEBUG] [Thread-23453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:59:08.041 [DEBUG] [Thread-23454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:59:23.072 [DEBUG] [Thread-23455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:59:35.611 [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-11-12T21:59:38.110 [DEBUG] [Thread-23456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:59:53.145 [DEBUG] [Thread-23457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:59:55.387 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:59:55.389 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T21:59:57.471 [DEBUG] [Thread-23458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:00:05.617 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:00:05.617 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:00:05.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:00:06.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 21, 59, 46), 11.46, 46.78, 0.0, 11.12, 17.03, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:00:06.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 21:59:46
2025-11-12T22:00:06.399 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:00:06.544 [DEBUG] [Thread-23459] [transport.py] [_log()] starting thread (client mode): 0x14917a00
2025-11-12T22:00:06.545 [DEBUG] [Thread-23459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:00:06.567 [DEBUG] [Thread-23459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:00:06.567 [INFO] [Thread-23459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:00:06.570 [DEBUG] [Thread-23459] [transport.py] [_log()] client lang: <none>
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] server lang: <none>
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] kex follows: False
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] Compression: none
2025-11-12T22:00:06.571 [DEBUG] [Thread-23459] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:00:06.587 [DEBUG] [Thread-23459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:00:06.587 [DEBUG] [Thread-23459] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:00:06.597 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:00:06.598 [DEBUG] [Thread-23459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:00:06.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:00:06.600 [DEBUG] [Thread-23459] [transport.py] [_log()] userauth is OK
2025-11-12T22:00:06.600 [DEBUG] [Thread-23459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:00:06.600 [DEBUG] [Thread-23459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:00:06.600 [DEBUG] [Thread-23459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:00:06.600 [DEBUG] [Thread-23459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:00:06.637 [INFO] [Thread-23459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:00:06.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:00:08.182 [DEBUG] [Thread-23461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:00:10.275 [DEBUG] [Thread-23459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:00:10.276 [DEBUG] [Thread-23459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:00:10.276 [DEBUG] [Thread-23459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:00:10.317 [DEBUG] [Thread-23459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:00:10.317 [DEBUG] [Thread-23459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:00:10.320 [DEBUG] [Thread-23459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:00:10.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:00:10.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:00:10.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:00:10.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:00:10.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:00:10.374 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:00:10.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:00:10.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:00:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:00:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.833069 -999.00  +17.30   7.65     51   +7.10 1 2 1 1 1     0    0 9.36 -48.09 ZNeSW 10.9 7.7 196.8 13.4 18.1 -22.0 18.0 -20.9 17.8 -20.6 18.1 -21.4
2025-11-12T22:00:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:00:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:00:10.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.833069
2025-11-12T22:00:10.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:00:10.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:00:10.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:00:10.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:00:10.377 [DEBUG] [Thread-23459] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:00:10.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:00:10.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T21:59:46', tmtdew=11.46, humidity=46.78, cloud=0.0, wind=11.12, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T21:59:47', seeing=1.11, atlas_timestamp='2025-11-12T19:59:37.162', atlas_cloud=2, atlas_rain=1, zp_data=[1.3157499999999995, 1.4567500000000004, 1.3187500000000005, 1.3209999999999997, 1.6965000000000003, 1.704250000000001, 1.3119999999999994, 1.4337500000000007, 1.6744999999999992, 1.641, 1.7182499999999994, 1.662, 1.4849999999999994, 1.5482499999999995, 1.0864999999999991, 1.443999999999999, 1.9072499999999994, 1.2575000000000003, 1.5969999999999995, 1.6472499999999988, 1.387999999999999, 1.4502499999999987, 1.2912500000000007, 1.5397499999999997, 1.4309999999999992, 0.5984999999999996, 1.7307500000000005, 1.2999999999999998, 1.2240000000000002, 1.6960000000000006, nan, nan, 0.5127499999999996], zp_timestamp='2025-11-12T19:58:00')
2025-11-12T22:00:10.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:00:10.475 [DEBUG] [Thread-23463] [transport.py] [_log()] starting thread (client mode): 0x14914280
2025-11-12T22:00:10.475 [DEBUG] [Thread-23463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:00:10.494 [DEBUG] [Thread-23463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:00:10.494 [INFO] [Thread-23463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:00:10.505 [DEBUG] [Thread-23463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:00:10.505 [DEBUG] [Thread-23463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:00:10.505 [DEBUG] [Thread-23463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:00:10.505 [DEBUG] [Thread-23463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:00:10.505 [DEBUG] [Thread-23463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:00:10.505 [DEBUG] [Thread-23463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:00:10.505 [DEBUG] [Thread-23463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] client lang: <none>
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] server lang: <none>
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] kex follows: False
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] Compression: none
2025-11-12T22:00:10.506 [DEBUG] [Thread-23463] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:00:10.561 [DEBUG] [Thread-23463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:00:10.561 [DEBUG] [Thread-23463] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:00:10.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:00:10.562 [DEBUG] [Thread-23463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:00:10.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:00:10.617 [DEBUG] [Thread-23463] [transport.py] [_log()] userauth is OK
2025-11-12T22:00:10.618 [DEBUG] [Thread-23463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:00:10.618 [DEBUG] [Thread-23463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:00:10.618 [DEBUG] [Thread-23463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:00:10.618 [DEBUG] [Thread-23463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:00:10.637 [INFO] [Thread-23463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:00:10.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:00:10.638 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:00:11.476 [DEBUG] [Thread-23463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:00:11.476 [DEBUG] [Thread-23463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:00:11.524 [DEBUG] [Thread-23463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:00:11.524 [DEBUG] [Thread-23463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:00:11.532 [DEBUG] [Thread-23463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:00:11.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:00:11.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-11-12T22:00:11.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-11-12T22:00:11.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:00:11.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:00:11.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:00:11.566 [DEBUG] [Thread-23463] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:00:23.216 [DEBUG] [Thread-23465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:00:38.266 [DEBUG] [Thread-23466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:00:41.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:00:41.588 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:00:41.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-11-12T22:00:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 0, 19), 11.43, 46.91, 0.0, 10.94, 17.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:00:42.239 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:00:19
2025-11-12T22:00:42.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:00:42.502 [DEBUG] [Thread-23467] [transport.py] [_log()] starting thread (client mode): 0x14921900
2025-11-12T22:00:42.503 [DEBUG] [Thread-23467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:00:42.521 [DEBUG] [Thread-23467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:00:42.521 [INFO] [Thread-23467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] client lang: <none>
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] server lang: <none>
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] kex follows: False
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:00:42.524 [DEBUG] [Thread-23467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:00:42.525 [DEBUG] [Thread-23467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:00:42.525 [DEBUG] [Thread-23467] [transport.py] [_log()] Compression: none
2025-11-12T22:00:42.525 [DEBUG] [Thread-23467] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:00:42.542 [DEBUG] [Thread-23467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:00:42.543 [DEBUG] [Thread-23467] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:00:42.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:00:42.544 [DEBUG] [Thread-23467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:00:42.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:00:42.545 [DEBUG] [Thread-23467] [transport.py] [_log()] userauth is OK
2025-11-12T22:00:42.545 [DEBUG] [Thread-23467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:00:42.545 [DEBUG] [Thread-23467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:00:42.545 [DEBUG] [Thread-23467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:00:42.545 [DEBUG] [Thread-23467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:00:42.569 [INFO] [Thread-23467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:00:42.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:00:43.224 [DEBUG] [Thread-23467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:00:43.224 [DEBUG] [Thread-23467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:00:43.225 [DEBUG] [Thread-23467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:00:43.266 [DEBUG] [Thread-23467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:00:43.266 [DEBUG] [Thread-23467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:00:43.269 [DEBUG] [Thread-23467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:00:43.282 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:00:43.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:00:43.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:00:43.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:00:43.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:00:43.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:00:43.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:00:43.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:00:43.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:00:43.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.833416 -999.00  +17.30   9.30     51   +7.10 1 2 1 1 1     0    0 9.14 -47.83 ZNeSW 9.5 9.3 186.4 12.2 18.1 -21.9 18.0 -21.1 17.8 -20.8 18.1 -21.6
2025-11-12T22:00:43.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:00:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:00:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.833416
2025-11-12T22:00:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:00:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:00:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:00:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:00:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:00:43.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:00:19', tmtdew=11.43, humidity=46.91, cloud=0.0, wind=10.94, temperature=17.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:00:19', seeing=1.16, atlas_timestamp='2025-11-12T20:00:07.142', atlas_cloud=2, atlas_rain=1, zp_data=[1.3157499999999995, 1.4567500000000004, 1.3187500000000005, 1.3209999999999997, 1.6965000000000003, 1.704250000000001, 1.3119999999999994, 1.4337500000000007, 1.6744999999999992, 1.641, 1.7182499999999994, 1.662, 1.4849999999999994, 1.5482499999999995, 1.0864999999999991, 1.443999999999999, 1.9072499999999994, 1.2575000000000003, 1.5969999999999995, 1.6472499999999988, 1.387999999999999, 1.4502499999999987, 1.2912500000000007, 1.5397499999999997, 1.4309999999999992, 0.5984999999999996, 1.7307500000000005, 1.2999999999999998, 1.2240000000000002, 1.6960000000000006, nan, nan, 0.5127499999999996], zp_timestamp='2025-11-12T19:58:00')
2025-11-12T22:00:43.296 [DEBUG] [Thread-23467] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:00:43.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:00:43.389 [DEBUG] [Thread-23470] [transport.py] [_log()] starting thread (client mode): 0x14920eb0
2025-11-12T22:00:43.389 [DEBUG] [Thread-23470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:00:43.405 [DEBUG] [Thread-23470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:00:43.405 [INFO] [Thread-23470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:00:43.413 [DEBUG] [Thread-23470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:00:43.413 [DEBUG] [Thread-23470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:00:43.413 [DEBUG] [Thread-23470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:00:43.413 [DEBUG] [Thread-23470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] client lang: <none>
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] server lang: <none>
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] kex follows: False
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:00:43.414 [DEBUG] [Thread-23470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:00:43.415 [DEBUG] [Thread-23470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:00:43.415 [DEBUG] [Thread-23470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:00:43.415 [DEBUG] [Thread-23470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:00:43.415 [DEBUG] [Thread-23470] [transport.py] [_log()] Compression: none
2025-11-12T22:00:43.415 [DEBUG] [Thread-23470] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:00:43.473 [DEBUG] [Thread-23470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:00:43.473 [DEBUG] [Thread-23470] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:00:43.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:00:43.475 [DEBUG] [Thread-23470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:00:43.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:00:43.529 [DEBUG] [Thread-23470] [transport.py] [_log()] userauth is OK
2025-11-12T22:00:43.529 [DEBUG] [Thread-23470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:00:43.530 [DEBUG] [Thread-23470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:00:43.530 [DEBUG] [Thread-23470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:00:43.530 [DEBUG] [Thread-23470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:00:43.549 [INFO] [Thread-23470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:00:43.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:00:43.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:00:44.370 [DEBUG] [Thread-23470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:00:44.370 [DEBUG] [Thread-23470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:00:44.419 [DEBUG] [Thread-23470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:00:44.419 [DEBUG] [Thread-23470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:00:44.428 [DEBUG] [Thread-23470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:00:44.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:00:44.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')
2025-11-12T22:00:44.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-11-12T22:00:44.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:00:44.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:00:44.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:00:44.464 [DEBUG] [Thread-23470] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:00:53.304 [DEBUG] [Thread-23472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:00:55.594 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:00:55.596 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:00:57.530 [DEBUG] [Thread-23473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:01:08.353 [DEBUG] [Thread-23474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:01:14.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:01:14.487 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:01:14.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-11-12T22:01:15.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 0, 51), 11.4, 46.99, 0.0, 9.56, 17.02, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:01:15.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:00:51
2025-11-12T22:01:15.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:01:15.401 [DEBUG] [Thread-23475] [transport.py] [_log()] starting thread (client mode): 0x14907730
2025-11-12T22:01:15.401 [DEBUG] [Thread-23475] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:01:15.421 [DEBUG] [Thread-23475] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:01:15.421 [INFO] [Thread-23475] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:01:15.424 [DEBUG] [Thread-23475] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:01:15.424 [DEBUG] [Thread-23475] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:01:15.424 [DEBUG] [Thread-23475] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] client lang: <none>
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] server lang: <none>
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] kex follows: False
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:01:15.425 [DEBUG] [Thread-23475] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:01:15.426 [DEBUG] [Thread-23475] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:01:15.426 [DEBUG] [Thread-23475] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:01:15.426 [DEBUG] [Thread-23475] [transport.py] [_log()] Compression: none
2025-11-12T22:01:15.426 [DEBUG] [Thread-23475] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:01:15.443 [DEBUG] [Thread-23475] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:01:15.443 [DEBUG] [Thread-23475] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:01:15.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:01:15.445 [DEBUG] [Thread-23475] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:01:15.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:01:15.447 [DEBUG] [Thread-23475] [transport.py] [_log()] userauth is OK
2025-11-12T22:01:15.447 [DEBUG] [Thread-23475] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:01:15.447 [DEBUG] [Thread-23475] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:01:15.447 [DEBUG] [Thread-23475] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:01:15.448 [DEBUG] [Thread-23475] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:01:15.468 [INFO] [Thread-23475] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:01:15.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:01:16.165 [DEBUG] [Thread-23475] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:01:16.165 [DEBUG] [Thread-23475] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:01:16.166 [DEBUG] [Thread-23475] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:01:16.206 [DEBUG] [Thread-23475] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:01:16.206 [DEBUG] [Thread-23475] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:01:16.209 [DEBUG] [Thread-23475] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:01:16.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:01:16.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:01:16.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:01:16.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:01:16.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:01:16.232 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:01:16.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:01:16.232 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:01:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:01:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.833764 -999.00  +17.30   8.00     51   +7.00 1 2 1 1 1     0    0 9.30 -47.40 ZNeSW 9.0 8.0 197.0 11.4 18.1 -21.9 18.0 -21.0 17.8 -20.8 18.1 -21.5
2025-11-12T22:01:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:01:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:01:16.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.833764
2025-11-12T22:01:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:01:16.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:01:16.234 [DEBUG] [Thread-23475] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:01:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:01:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:01:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:01:16.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:00:51', tmtdew=11.4, humidity=46.99, cloud=0.0, wind=9.56, temperature=17.02, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:00:51', seeing=1.08, atlas_timestamp='2025-11-12T20:00:37.210', atlas_cloud=2, atlas_rain=1, zp_data=[1.3157499999999995, 1.4567500000000004, 1.3187500000000005, 1.3209999999999997, 1.6965000000000003, 1.704250000000001, 1.3119999999999994, 1.4337500000000007, 1.6744999999999992, 1.641, 1.7182499999999994, 1.662, 1.4849999999999994, 1.5482499999999995, 1.0864999999999991, 1.443999999999999, 1.9072499999999994, 1.2575000000000003, 1.5969999999999995, 1.6472499999999988, 1.387999999999999, 1.4502499999999987, 1.2912500000000007, 1.5397499999999997, 1.4309999999999992, 0.5984999999999996, 1.7307500000000005, 1.2999999999999998, 1.2240000000000002, 1.6960000000000006, nan, nan, 0.5127499999999996], zp_timestamp='2025-11-12T19:58:00')
2025-11-12T22:01:16.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:01:23.388 [DEBUG] [Thread-23478 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:01:38.447 [DEBUG] [Thread-23479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:01:53.482 [DEBUG] [Thread-23480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:01:55.802 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:01:55.803 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:01:57.587 [DEBUG] [Thread-23481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:02:08.521 [DEBUG] [Thread-23482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:02:23.555 [DEBUG] [Thread-23483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:02:38.585 [DEBUG] [Thread-23484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:02:53.624 [DEBUG] [Thread-23485 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:02:56.007 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:02:56.008 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:02:57.654 [DEBUG] [Thread-23486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:03:08.656 [DEBUG] [Thread-23487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:03:23.695 [DEBUG] [Thread-23488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:03:29.083 [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-11-12T22:03:38.735 [DEBUG] [Thread-23489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:03:53.772 [DEBUG] [Thread-23490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:03:56.211 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:03:56.212 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:03:57.711 [DEBUG] [Thread-23491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:03:59.113 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:03:59.114 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:03:59.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-11-12T22:03:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 3, 30), 11.41, 46.94, 0.0, 7.61, 16.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:03:59.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:03:30
2025-11-12T22:03:59.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:04:00.027 [DEBUG] [Thread-23492] [transport.py] [_log()] starting thread (client mode): 0x14905ba0
2025-11-12T22:04:00.027 [DEBUG] [Thread-23492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:04:00.047 [DEBUG] [Thread-23492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:04:00.047 [INFO] [Thread-23492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:04:00.050 [DEBUG] [Thread-23492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:04:00.050 [DEBUG] [Thread-23492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:04:00.050 [DEBUG] [Thread-23492] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:04:00.050 [DEBUG] [Thread-23492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:04:00.050 [DEBUG] [Thread-23492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] client lang: <none>
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] server lang: <none>
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] kex follows: False
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] Compression: none
2025-11-12T22:04:00.051 [DEBUG] [Thread-23492] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:04:00.063 [DEBUG] [Thread-23492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:04:00.063 [DEBUG] [Thread-23492] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:04:00.064 [DEBUG] [Thread-23492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:04:00.064 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:04:00.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:04:00.104 [DEBUG] [Thread-23492] [transport.py] [_log()] userauth is OK
2025-11-12T22:04:00.105 [DEBUG] [Thread-23492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:04:00.105 [DEBUG] [Thread-23492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:04:00.105 [DEBUG] [Thread-23492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:04:00.105 [DEBUG] [Thread-23492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:04:00.124 [INFO] [Thread-23492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:04:00.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:04:00.786 [DEBUG] [Thread-23492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:04:00.786 [DEBUG] [Thread-23492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:04:00.786 [DEBUG] [Thread-23492] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:04:00.827 [DEBUG] [Thread-23492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:04:00.827 [DEBUG] [Thread-23492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:04:00.830 [DEBUG] [Thread-23492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:04:00.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:04:00.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:04:00.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:04:00.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:04:00.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:04:00.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:04:00.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:04:00.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:04:00.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:04:00.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.835847 -999.00  +17.20   4.77     51   +7.00 1 2 1 1 1     0    0 9.30 -53.53 ZNeSW 6.8 4.8 208.8 8.9 18.1 -22.0 18.0 -20.9 17.8 -20.9 18.1 -21.6
2025-11-12T22:04:00.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:04:00.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:04:00.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.835847
2025-11-12T22:04:00.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:04:00.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:04:00.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:04:00.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:04:00.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:04:00.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:03:30', tmtdew=11.41, humidity=46.94, cloud=0.0, wind=7.61, temperature=16.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:03:31', seeing=1.35, atlas_timestamp='2025-11-12T20:03:37.181', atlas_cloud=2, atlas_rain=1, zp_data=[1.2387499999999996, 1.075750000000001, 1.1037499999999998, 1.0709999999999997, 1.3535000000000004, 1.4272500000000008, 0.9369999999999994, 0.9372500000000006, 0.9475000000000007, 1.5285000000000002, 1.3747499999999997, 1.1579999999999995, 1.3689999999999998, 1.1992499999999993, 0.7659999999999991, 0.7920000000000007, 1.1797500000000012, 1.5685000000000002, 1.4869999999999992, 1.2952499999999993, 1.2529999999999983, 1.3127499999999985, 0.9232500000000012, 0.8952499999999999, 1.8099999999999987, 0.5295000000000005, 1.6437499999999998, 1.4215, 0.7439999999999998, 1.7910000000000013, nan, 1.278500000000001, 0.3897499999999994], zp_timestamp='2025-11-12T20:00:00')
2025-11-12T22:04:00.854 [DEBUG] [Thread-23492] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:04:00.946 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:04:00.961 [DEBUG] [Thread-23495] [transport.py] [_log()] starting thread (client mode): 0x17344e50
2025-11-12T22:04:00.961 [DEBUG] [Thread-23495] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:04:00.976 [DEBUG] [Thread-23495] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:04:00.977 [INFO] [Thread-23495] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:04:00.984 [DEBUG] [Thread-23495] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:04:00.984 [DEBUG] [Thread-23495] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:04:00.984 [DEBUG] [Thread-23495] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:04:00.984 [DEBUG] [Thread-23495] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:04:00.984 [DEBUG] [Thread-23495] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:04:00.984 [DEBUG] [Thread-23495] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:04:00.984 [DEBUG] [Thread-23495] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] client lang: <none>
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] server lang: <none>
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] kex follows: False
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] Compression: none
2025-11-12T22:04:00.985 [DEBUG] [Thread-23495] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:04:01.042 [DEBUG] [Thread-23495] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:04:01.042 [DEBUG] [Thread-23495] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:04:01.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:04:01.044 [DEBUG] [Thread-23495] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:04:01.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:04:01.098 [DEBUG] [Thread-23495] [transport.py] [_log()] userauth is OK
2025-11-12T22:04:01.099 [DEBUG] [Thread-23495] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:04:01.099 [DEBUG] [Thread-23495] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:04:01.099 [DEBUG] [Thread-23495] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:04:01.099 [DEBUG] [Thread-23495] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:04:01.119 [INFO] [Thread-23495] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:04:01.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:04:01.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:04:01.953 [DEBUG] [Thread-23495] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:04:01.953 [DEBUG] [Thread-23495] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:04:02.002 [DEBUG] [Thread-23495] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:04:02.002 [DEBUG] [Thread-23495] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:04:02.012 [DEBUG] [Thread-23495] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:04:02.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:04:02.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-11-12T22:04:02.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-11-12T22:04:02.047 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:04:02.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:04:02.048 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:04:02.056 [DEBUG] [Thread-23495] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:04:08.807 [DEBUG] [Thread-23497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:04:23.856 [DEBUG] [Thread-23498 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:04:32.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:04:32.079 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:04:32.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:04:32.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 4, 2), 11.39, 46.99, 0.0, 7.61, 16.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:04:32.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:04:02
2025-11-12T22:04:32.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:04:33.021 [DEBUG] [Thread-23499] [transport.py] [_log()] starting thread (client mode): 0x149828f0
2025-11-12T22:04:33.021 [DEBUG] [Thread-23499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:04:33.042 [DEBUG] [Thread-23499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:04:33.042 [INFO] [Thread-23499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:04:33.045 [DEBUG] [Thread-23499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:04:33.045 [DEBUG] [Thread-23499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] client lang: <none>
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] server lang: <none>
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] kex follows: False
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] Compression: none
2025-11-12T22:04:33.046 [DEBUG] [Thread-23499] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:04:33.065 [DEBUG] [Thread-23499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:04:33.065 [DEBUG] [Thread-23499] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:04:33.066 [DEBUG] [Thread-23499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:04:33.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:04:33.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:04:33.068 [DEBUG] [Thread-23499] [transport.py] [_log()] userauth is OK
2025-11-12T22:04:33.068 [DEBUG] [Thread-23499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:04:33.068 [DEBUG] [Thread-23499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:04:33.068 [DEBUG] [Thread-23499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:04:33.068 [DEBUG] [Thread-23499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:04:33.090 [INFO] [Thread-23499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:04:33.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:04:33.776 [DEBUG] [Thread-23499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:04:33.776 [DEBUG] [Thread-23499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:04:33.777 [DEBUG] [Thread-23499] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:04:33.817 [DEBUG] [Thread-23499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:04:33.817 [DEBUG] [Thread-23499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:04:33.820 [DEBUG] [Thread-23499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:04:33.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:04:33.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:04:33.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:04:33.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:04:33.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:04:33.838 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:04:33.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:04:33.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:04:33.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:04:33.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.836194 -999.00  +17.20   7.06     51   +7.00 1 1 1 1 1     0    0 9.04 -53.62 ZNESW 6.0 7.1 216.3 8.2 18.0 -21.9 17.9 -21.0 17.8 -20.9 18.1 -21.5
2025-11-12T22:04:33.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:04:33.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:04:33.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.836194
2025-11-12T22:04:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:04:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:04:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:04:33.840 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:04:33.840 [DEBUG] [Thread-23499] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:04:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:04:33.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:04:02', tmtdew=11.39, humidity=46.99, cloud=0.0, wind=7.61, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:04:03', seeing=1.36, atlas_timestamp='2025-11-12T20:04:07.162', atlas_cloud=1, atlas_rain=1, zp_data=[1.2387499999999996, 1.075750000000001, 1.1037499999999998, 1.0709999999999997, 1.3535000000000004, 1.4272500000000008, 0.9369999999999994, 0.9372500000000006, 0.9475000000000007, 1.5285000000000002, 1.3747499999999997, 1.1579999999999995, 1.3689999999999998, 1.1992499999999993, 0.7659999999999991, 0.7920000000000007, 1.1797500000000012, 1.5685000000000002, 1.4869999999999992, 1.2952499999999993, 1.2529999999999983, 1.3127499999999985, 0.9232500000000012, 0.8952499999999999, 1.8099999999999987, 0.5295000000000005, 1.6437499999999998, 1.4215, 0.7439999999999998, 1.7910000000000013, nan, 1.278500000000001, 0.3897499999999994], zp_timestamp='2025-11-12T20:00:00')
2025-11-12T22:04:33.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:04:33.936 [DEBUG] [Thread-23502] [transport.py] [_log()] starting thread (client mode): 0x14904640
2025-11-12T22:04:33.937 [DEBUG] [Thread-23502] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:04:33.951 [DEBUG] [Thread-23502] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:04:33.951 [INFO] [Thread-23502] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:04:33.958 [DEBUG] [Thread-23502] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:04:33.958 [DEBUG] [Thread-23502] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] client lang: <none>
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] server lang: <none>
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] kex follows: False
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] Compression: none
2025-11-12T22:04:33.959 [DEBUG] [Thread-23502] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:04:34.016 [DEBUG] [Thread-23502] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:04:34.016 [DEBUG] [Thread-23502] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:04:34.017 [DEBUG] [Thread-23502] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:04:34.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:04:34.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:04:34.073 [DEBUG] [Thread-23502] [transport.py] [_log()] userauth is OK
2025-11-12T22:04:34.073 [DEBUG] [Thread-23502] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:04:34.073 [DEBUG] [Thread-23502] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:04:34.073 [DEBUG] [Thread-23502] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:04:34.073 [DEBUG] [Thread-23502] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:04:34.095 [INFO] [Thread-23502] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:04:34.096 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:04:34.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:04:34.938 [DEBUG] [Thread-23502] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:04:34.938 [DEBUG] [Thread-23502] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:04:34.986 [DEBUG] [Thread-23502] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:04:34.986 [DEBUG] [Thread-23502] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:04:34.995 [DEBUG] [Thread-23502] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:04:35.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:04:35.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-11-12T22:04:35.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-11-12T22:04:35.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:04:35.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:04:35.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:04:35.029 [DEBUG] [Thread-23502] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:04:38.888 [DEBUG] [Thread-23504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:04:53.941 [DEBUG] [Thread-23505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:04:56.427 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:04:56.428 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:04:57.788 [DEBUG] [Thread-23506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:05:05.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:05:05.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:05:05.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-11-12T22:05:05.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 4, 34), 11.33, 47.04, 0.0, 9.3, 16.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:05:05.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:04:34
2025-11-12T22:05:05.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:05:05.981 [DEBUG] [Thread-23507] [transport.py] [_log()] starting thread (client mode): 0x14981a20
2025-11-12T22:05:05.981 [DEBUG] [Thread-23507] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:05:06.001 [DEBUG] [Thread-23507] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:05:06.001 [INFO] [Thread-23507] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] client lang: <none>
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] server lang: <none>
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] kex follows: False
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] Compression: none
2025-11-12T22:05:06.004 [DEBUG] [Thread-23507] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:05:06.012 [DEBUG] [Thread-23507] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:05:06.012 [DEBUG] [Thread-23507] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:05:06.012 [DEBUG] [Thread-23507] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:05:06.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:05:06.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:05:06.013 [DEBUG] [Thread-23507] [transport.py] [_log()] userauth is OK
2025-11-12T22:05:06.013 [DEBUG] [Thread-23507] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:05:06.013 [DEBUG] [Thread-23507] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:05:06.013 [DEBUG] [Thread-23507] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:05:06.013 [DEBUG] [Thread-23507] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:05:06.040 [INFO] [Thread-23507] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:05:06.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:05:07.124 [DEBUG] [Thread-23507] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:05:07.124 [DEBUG] [Thread-23507] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:05:07.125 [DEBUG] [Thread-23507] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:05:07.166 [DEBUG] [Thread-23507] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:05:07.166 [DEBUG] [Thread-23507] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:05:07.169 [DEBUG] [Thread-23507] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:05:07.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:05:07.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:05:07.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:05:07.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:05:07.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:05:07.211 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:05:07.211 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:05:07.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:05:07.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:05:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.836541 -999.00  +17.20   4.90     51   +7.00 1 1 1 1 1     0    0 9.15 -53.55 ZNESW 6.5 4.9 196.4 9.3 18.1 -22.1 17.9 -21.1 17.8 -20.8 18.0 -21.5
2025-11-12T22:05:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:05:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:05:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.836541
2025-11-12T22:05:07.212 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:05:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:05:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:05:07.213 [DEBUG] [Thread-23507] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:05:07.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:05:07.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:05:07.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:04:34', tmtdew=11.33, humidity=47.04, cloud=0.0, wind=9.3, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:04:35', seeing=1.37, atlas_timestamp='2025-11-12T20:04:37.142', atlas_cloud=1, atlas_rain=1, zp_data=[1.2387499999999996, 1.075750000000001, 1.1037499999999998, 1.0709999999999997, 1.3535000000000004, 1.4272500000000008, 0.9369999999999994, 0.9372500000000006, 0.9475000000000007, 1.5285000000000002, 1.3747499999999997, 1.1579999999999995, 1.3689999999999998, 1.1992499999999993, 0.7659999999999991, 0.7920000000000007, 1.1797500000000012, 1.5685000000000002, 1.4869999999999992, 1.2952499999999993, 1.2529999999999983, 1.3127499999999985, 0.9232500000000012, 0.8952499999999999, 1.8099999999999987, 0.5295000000000005, 1.6437499999999998, 1.4215, 0.7439999999999998, 1.7910000000000013, nan, 1.278500000000001, 0.3897499999999994], zp_timestamp='2025-11-12T20:00:00')
2025-11-12T22:05:07.302 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:05:07.313 [DEBUG] [Thread-23510] [transport.py] [_log()] starting thread (client mode): 0x14947c70
2025-11-12T22:05:07.313 [DEBUG] [Thread-23510] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:05:07.327 [DEBUG] [Thread-23510] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:05:07.328 [INFO] [Thread-23510] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:05:07.335 [DEBUG] [Thread-23510] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:05:07.335 [DEBUG] [Thread-23510] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] client lang: <none>
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] server lang: <none>
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] kex follows: False
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] Compression: none
2025-11-12T22:05:07.336 [DEBUG] [Thread-23510] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:05:07.392 [DEBUG] [Thread-23510] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:05:07.392 [DEBUG] [Thread-23510] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:05:07.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:05:07.393 [DEBUG] [Thread-23510] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:05:07.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:05:07.448 [DEBUG] [Thread-23510] [transport.py] [_log()] userauth is OK
2025-11-12T22:05:07.448 [DEBUG] [Thread-23510] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:05:07.448 [DEBUG] [Thread-23510] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:05:07.448 [DEBUG] [Thread-23510] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:05:07.448 [DEBUG] [Thread-23510] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:05:07.462 [INFO] [Thread-23510] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:05:07.462 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:05:07.462 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:05:08.343 [DEBUG] [Thread-23510] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:05:08.343 [DEBUG] [Thread-23510] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:05:08.391 [DEBUG] [Thread-23510] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:05:08.391 [DEBUG] [Thread-23510] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:05:08.400 [DEBUG] [Thread-23510] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:05:08.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:05:08.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-11-12T22:05:08.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:05:08.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:05:08.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:05:08.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:05:08.432 [DEBUG] [Thread-23510] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:05:08.970 [DEBUG] [Thread-23512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:05:24.022 [DEBUG] [Thread-23513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:05:38.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:05:38.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:05: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-11-12T22:05:39.058 [DEBUG] [Thread-23514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:05:39.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 5, 6), 11.3, 47.13, 0.0, 7.76, 16.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:05:39.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:05:06
2025-11-12T22:05:39.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:05:39.446 [DEBUG] [Thread-23515] [transport.py] [_log()] starting thread (client mode): 0x14907fd0
2025-11-12T22:05:39.446 [DEBUG] [Thread-23515] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:05:39.460 [DEBUG] [Thread-23515] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:05:39.460 [INFO] [Thread-23515] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] client lang: <none>
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] server lang: <none>
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] kex follows: False
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] Compression: none
2025-11-12T22:05:39.463 [DEBUG] [Thread-23515] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:05:39.478 [DEBUG] [Thread-23515] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:05:39.478 [DEBUG] [Thread-23515] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:05:39.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:05:39.478 [DEBUG] [Thread-23515] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:05:39.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:05:39.479 [DEBUG] [Thread-23515] [transport.py] [_log()] userauth is OK
2025-11-12T22:05:39.479 [DEBUG] [Thread-23515] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:05:39.479 [DEBUG] [Thread-23515] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:05:39.479 [DEBUG] [Thread-23515] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:05:39.479 [DEBUG] [Thread-23515] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:05:39.497 [INFO] [Thread-23515] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:05:39.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:05:40.134 [DEBUG] [Thread-23515] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:05:40.134 [DEBUG] [Thread-23515] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:05:40.134 [DEBUG] [Thread-23515] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:05:40.175 [DEBUG] [Thread-23515] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:05:40.175 [DEBUG] [Thread-23515] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:05:40.177 [DEBUG] [Thread-23515] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:05:40.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:05:40.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:05:40.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:05:40.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:05:40.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:05:40.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:05:40.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:05:40.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.836888 -999.00  +17.20   7.21     51   +7.00 1 1 1 1 1     0    0 9.14 -48.97 ZNESW 5.6 7.2 202.0 8.6 18.0 -22.0 17.9 -21.1 17.7 -20.9 18.0 -21.6
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.836888
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:05:40.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:05:06', tmtdew=11.3, humidity=47.13, cloud=0.0, wind=7.76, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:05:07', seeing=1.37, atlas_timestamp='2025-11-12T20:05:07.123', atlas_cloud=1, atlas_rain=1, zp_data=[1.2387499999999996, 1.075750000000001, 1.1037499999999998, 1.0709999999999997, 1.3535000000000004, 1.4272500000000008, 0.9369999999999994, 0.9372500000000006, 0.9475000000000007, 1.5285000000000002, 1.3747499999999997, 1.1579999999999995, 1.3689999999999998, 1.1992499999999993, 0.7659999999999991, 0.7920000000000007, 1.1797500000000012, 1.5685000000000002, 1.4869999999999992, 1.2952499999999993, 1.2529999999999983, 1.3127499999999985, 0.9232500000000012, 0.8952499999999999, 1.8099999999999987, 0.5295000000000005, 1.6437499999999998, 1.4215, 0.7439999999999998, 1.7910000000000013, nan, 1.278500000000001, 0.3897499999999994], zp_timestamp='2025-11-12T20:03:00')
2025-11-12T22:05:40.189 [DEBUG] [Thread-23515] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:05:40.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:05:40.275 [DEBUG] [Thread-23518] [transport.py] [_log()] starting thread (client mode): 0x14906590
2025-11-12T22:05:40.275 [DEBUG] [Thread-23518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:05:40.290 [DEBUG] [Thread-23518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:05:40.290 [INFO] [Thread-23518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] client lang: <none>
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] server lang: <none>
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] kex follows: False
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] Compression: none
2025-11-12T22:05:40.298 [DEBUG] [Thread-23518] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:05:40.356 [DEBUG] [Thread-23518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:05:40.356 [DEBUG] [Thread-23518] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:05:40.356 [DEBUG] [Thread-23518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:05:40.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:05:40.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:05:40.413 [DEBUG] [Thread-23518] [transport.py] [_log()] userauth is OK
2025-11-12T22:05:40.413 [DEBUG] [Thread-23518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:05:40.413 [DEBUG] [Thread-23518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:05:40.413 [DEBUG] [Thread-23518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:05:40.413 [DEBUG] [Thread-23518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:05:40.427 [INFO] [Thread-23518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:05:40.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:05:40.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:05:41.265 [DEBUG] [Thread-23518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:05:41.265 [DEBUG] [Thread-23518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:05:41.313 [DEBUG] [Thread-23518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:05:41.313 [DEBUG] [Thread-23518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:05:41.321 [DEBUG] [Thread-23518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:05:41.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:05:41.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:05:41.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:05:41.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:05:41.345 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:05:41.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:05:41.352 [DEBUG] [Thread-23518] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:05:54.090 [DEBUG] [Thread-23520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:05:56.633 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:05:56.634 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:05:57.846 [DEBUG] [Thread-23521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:06:09.146 [DEBUG] [Thread-23522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:06:11.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:06:11.375 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:06:11.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:06:12.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 5, 38), 11.3, 47.48, 0.0, 10.39, 16.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:06:12.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:05:38
2025-11-12T22:06:12.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:06:12.368 [DEBUG] [Thread-23523] [transport.py] [_log()] starting thread (client mode): 0x17345a50
2025-11-12T22:06:12.368 [DEBUG] [Thread-23523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:06:12.381 [DEBUG] [Thread-23523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:06:12.381 [INFO] [Thread-23523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] client lang: <none>
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] server lang: <none>
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] kex follows: False
2025-11-12T22:06:12.384 [DEBUG] [Thread-23523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:06:12.385 [DEBUG] [Thread-23523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:06:12.385 [DEBUG] [Thread-23523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:06:12.385 [DEBUG] [Thread-23523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:06:12.385 [DEBUG] [Thread-23523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:06:12.385 [DEBUG] [Thread-23523] [transport.py] [_log()] Compression: none
2025-11-12T22:06:12.385 [DEBUG] [Thread-23523] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:06:12.392 [DEBUG] [Thread-23523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:06:12.392 [DEBUG] [Thread-23523] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:06:12.393 [DEBUG] [Thread-23523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:06:12.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:06:12.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:06:12.393 [DEBUG] [Thread-23523] [transport.py] [_log()] userauth is OK
2025-11-12T22:06:12.394 [DEBUG] [Thread-23523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:06:12.394 [DEBUG] [Thread-23523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:06:12.394 [DEBUG] [Thread-23523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:06:12.394 [DEBUG] [Thread-23523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:06:12.407 [INFO] [Thread-23523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:06:12.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:06:13.044 [DEBUG] [Thread-23523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:06:13.044 [DEBUG] [Thread-23523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:06:13.044 [DEBUG] [Thread-23523] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:06:13.085 [DEBUG] [Thread-23523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:06:13.086 [DEBUG] [Thread-23523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:06:13.088 [DEBUG] [Thread-23523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:06:13.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:06:13.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:06:13.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:06:13.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:06:13.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:06:13.107 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:06:13.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:06:13.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:06:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:06:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.837583 -999.00  +17.20   3.91     51   +7.00 1 1 1 1 1     0    0 9.07 -51.88 ZNESW 7.6 3.9 212.2 9.4 18.0 -22.0 17.9 -21.0 17.7 -21.0 18.0 -21.6
2025-11-12T22:06:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:06:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:06:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.837583
2025-11-12T22:06:13.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:06:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:06:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:06:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:06:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:06:13.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:05:38', tmtdew=11.3, humidity=47.48, cloud=0.0, wind=10.39, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:05:39', seeing=1.37, atlas_timestamp='2025-11-12T20:06:07.171', atlas_cloud=1, atlas_rain=1, zp_data=[1.2387499999999996, 1.075750000000001, 1.1037499999999998, 1.0709999999999997, 1.3535000000000004, 1.4272500000000008, 0.9369999999999994, 0.9372500000000006, 0.9475000000000007, 1.5285000000000002, 1.3747499999999997, 1.1579999999999995, 1.3689999999999998, 1.1992499999999993, 0.7659999999999991, 0.7920000000000007, 1.1797500000000012, 1.5685000000000002, 1.4869999999999992, 1.2952499999999993, 1.2529999999999983, 1.3127499999999985, 0.9232500000000012, 0.8952499999999999, 1.8099999999999987, 0.5295000000000005, 1.6437499999999998, 1.4215, 0.7439999999999998, 1.7910000000000013, nan, 1.278500000000001, 0.3897499999999994], zp_timestamp='2025-11-12T20:03:00')
2025-11-12T22:06:13.108 [DEBUG] [Thread-23523] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:06:13.180 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:06:13.191 [DEBUG] [Thread-23526] [transport.py] [_log()] starting thread (client mode): 0x149227d0
2025-11-12T22:06:13.191 [DEBUG] [Thread-23526] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:06:13.206 [DEBUG] [Thread-23526] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:06:13.206 [INFO] [Thread-23526] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] client lang: <none>
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] server lang: <none>
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] kex follows: False
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] Compression: none
2025-11-12T22:06:13.214 [DEBUG] [Thread-23526] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:06:13.272 [DEBUG] [Thread-23526] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:06:13.272 [DEBUG] [Thread-23526] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:06:13.272 [DEBUG] [Thread-23526] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:06:13.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:06:13.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:06:13.329 [DEBUG] [Thread-23526] [transport.py] [_log()] userauth is OK
2025-11-12T22:06:13.329 [DEBUG] [Thread-23526] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:06:13.329 [DEBUG] [Thread-23526] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:06:13.329 [DEBUG] [Thread-23526] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:06:13.329 [DEBUG] [Thread-23526] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:06:13.343 [INFO] [Thread-23526] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:06:13.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:06:13.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:06:14.192 [DEBUG] [Thread-23526] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:06:14.192 [DEBUG] [Thread-23526] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:06:14.240 [DEBUG] [Thread-23526] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:06:14.241 [DEBUG] [Thread-23526] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:06:14.250 [DEBUG] [Thread-23526] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:06:14.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:06:14.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:06:14.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:06:14.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:06:14.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:06:14.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:06:14.286 [DEBUG] [Thread-23526] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:06:24.177 [DEBUG] [Thread-23528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:06:39.236 [DEBUG] [Thread-23529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:06:44.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:06:44.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:06:44.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-11-12T22:06:45.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 6, 10), 11.27, 47.56, 0.0, 10.66, 16.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:06:45.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:06:10
2025-11-12T22:06:45.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:06:45.297 [DEBUG] [Thread-23530] [transport.py] [_log()] starting thread (client mode): 0x14923f70
2025-11-12T22:06:45.297 [DEBUG] [Thread-23530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:06:45.317 [DEBUG] [Thread-23530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:06:45.317 [INFO] [Thread-23530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] client lang: <none>
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] server lang: <none>
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] kex follows: False
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:06:45.320 [DEBUG] [Thread-23530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:06:45.321 [DEBUG] [Thread-23530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:06:45.321 [DEBUG] [Thread-23530] [transport.py] [_log()] Compression: none
2025-11-12T22:06:45.321 [DEBUG] [Thread-23530] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:06:45.337 [DEBUG] [Thread-23530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:06:45.337 [DEBUG] [Thread-23530] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:06:45.337 [DEBUG] [Thread-23530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:06:45.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:06:45.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:06:45.338 [DEBUG] [Thread-23530] [transport.py] [_log()] userauth is OK
2025-11-12T22:06:45.338 [DEBUG] [Thread-23530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:06:45.338 [DEBUG] [Thread-23530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:06:45.338 [DEBUG] [Thread-23530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:06:45.338 [DEBUG] [Thread-23530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:06:45.357 [INFO] [Thread-23530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:06:45.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:06:45.985 [DEBUG] [Thread-23530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:06:45.985 [DEBUG] [Thread-23530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:06:45.985 [DEBUG] [Thread-23530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:06:46.026 [DEBUG] [Thread-23530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:06:46.026 [DEBUG] [Thread-23530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:06:46.029 [DEBUG] [Thread-23530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:06:46.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:06:46.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:06:46.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:06:46.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:06:46.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:06:46.051 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:06:46.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:06:46.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:06:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:06:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.837583 -999.00  +17.20   3.91     51   +7.00 1 1 1 1 1     0    0 9.07 -51.88 ZNESW 7.6 3.9 212.2 9.4 18.0 -22.0 17.9 -21.0 17.7 -21.0 18.0 -21.6
2025-11-12T22:06:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:06:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:06:46.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.837583
2025-11-12T22:06:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:06:46.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:06:46.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:06:46.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:06:46.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:06:46.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:06:10', tmtdew=11.27, humidity=47.56, cloud=0.0, wind=10.66, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:06:43', seeing=1.23, atlas_timestamp='2025-11-12T20:06:07.171', atlas_cloud=1, atlas_rain=1, zp_data=[1.2387499999999996, 1.075750000000001, 1.1037499999999998, 1.0709999999999997, 1.3535000000000004, 1.4272500000000008, 0.9369999999999994, 0.9372500000000006, 0.9475000000000007, 1.5285000000000002, 1.3747499999999997, 1.1579999999999995, 1.3689999999999998, 1.1992499999999993, 0.7659999999999991, 0.7920000000000007, 1.1797500000000012, 1.5685000000000002, 1.4869999999999992, 1.2952499999999993, 1.2529999999999983, 1.3127499999999985, 0.9232500000000012, 0.8952499999999999, 1.8099999999999987, 0.5295000000000005, 1.6437499999999998, 1.4215, 0.7439999999999998, 1.7910000000000013, nan, 1.278500000000001, 0.3897499999999994], zp_timestamp='2025-11-12T20:03:00')
2025-11-12T22:06:46.054 [DEBUG] [Thread-23530] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:06:46.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:06:46.150 [DEBUG] [Thread-23533] [transport.py] [_log()] starting thread (client mode): 0x149062f0
2025-11-12T22:06:46.150 [DEBUG] [Thread-23533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:06:46.164 [DEBUG] [Thread-23533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:06:46.165 [INFO] [Thread-23533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:06:46.172 [DEBUG] [Thread-23533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:06:46.172 [DEBUG] [Thread-23533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:06:46.173 [DEBUG] [Thread-23533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:06:46.173 [DEBUG] [Thread-23533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:06:46.173 [DEBUG] [Thread-23533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:06:46.173 [DEBUG] [Thread-23533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:06:46.173 [DEBUG] [Thread-23533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:06:46.173 [DEBUG] [Thread-23533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:06:46.173 [DEBUG] [Thread-23533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:06:46.173 [DEBUG] [Thread-23533] [transport.py] [_log()] client lang: <none>
2025-11-12T22:06:46.174 [DEBUG] [Thread-23533] [transport.py] [_log()] server lang: <none>
2025-11-12T22:06:46.174 [DEBUG] [Thread-23533] [transport.py] [_log()] kex follows: False
2025-11-12T22:06:46.174 [DEBUG] [Thread-23533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:06:46.174 [DEBUG] [Thread-23533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:06:46.174 [DEBUG] [Thread-23533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:06:46.174 [DEBUG] [Thread-23533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:06:46.174 [DEBUG] [Thread-23533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:06:46.175 [DEBUG] [Thread-23533] [transport.py] [_log()] Compression: none
2025-11-12T22:06:46.175 [DEBUG] [Thread-23533] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:06:46.234 [DEBUG] [Thread-23533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:06:46.235 [DEBUG] [Thread-23533] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:06:46.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:06:46.236 [DEBUG] [Thread-23533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:06:46.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:06:46.297 [DEBUG] [Thread-23533] [transport.py] [_log()] userauth is OK
2025-11-12T22:06:46.298 [DEBUG] [Thread-23533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:06:46.298 [DEBUG] [Thread-23533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:06:46.298 [DEBUG] [Thread-23533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:06:46.298 [DEBUG] [Thread-23533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:06:46.318 [INFO] [Thread-23533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:06:46.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:06:46.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:06:47.163 [DEBUG] [Thread-23533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:06:47.163 [DEBUG] [Thread-23533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:06:47.211 [DEBUG] [Thread-23533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:06:47.212 [DEBUG] [Thread-23533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:06:47.225 [DEBUG] [Thread-23533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:06:47.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:06:47.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-11-12T22:06:47.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-11-12T22:06:47.253 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:06:47.253 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:06:47.254 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:06:47.262 [DEBUG] [Thread-23533] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:06:54.266 [DEBUG] [Thread-23535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:06:56.841 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:06:56.842 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:06:57.917 [DEBUG] [Thread-23536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:07:09.304 [DEBUG] [Thread-23537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:07:17.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:07:17.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:07:17.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-11-12T22:07:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 6, 42), 11.21, 47.76, 0.0, 11.47, 16.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:07:17.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:06:42
2025-11-12T22:07:18.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:07:18.220 [DEBUG] [Thread-23538] [transport.py] [_log()] starting thread (client mode): 0x14915f00
2025-11-12T22:07:18.221 [DEBUG] [Thread-23538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:07:18.242 [DEBUG] [Thread-23538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:07:18.242 [INFO] [Thread-23538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] client lang: <none>
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] server lang: <none>
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] kex follows: False
2025-11-12T22:07:18.245 [DEBUG] [Thread-23538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:07:18.246 [DEBUG] [Thread-23538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:07:18.246 [DEBUG] [Thread-23538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:07:18.246 [DEBUG] [Thread-23538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:07:18.246 [DEBUG] [Thread-23538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:07:18.246 [DEBUG] [Thread-23538] [transport.py] [_log()] Compression: none
2025-11-12T22:07:18.246 [DEBUG] [Thread-23538] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:07:18.263 [DEBUG] [Thread-23538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:07:18.264 [DEBUG] [Thread-23538] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:07:18.264 [DEBUG] [Thread-23538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:07:18.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:07:18.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:07:18.266 [DEBUG] [Thread-23538] [transport.py] [_log()] userauth is OK
2025-11-12T22:07:18.267 [DEBUG] [Thread-23538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:07:18.267 [DEBUG] [Thread-23538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:07:18.267 [DEBUG] [Thread-23538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:07:18.267 [DEBUG] [Thread-23538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:07:18.291 [INFO] [Thread-23538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:07:18.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:07:18.920 [DEBUG] [Thread-23538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:07:18.920 [DEBUG] [Thread-23538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:07:18.920 [DEBUG] [Thread-23538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:07:18.960 [DEBUG] [Thread-23538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:07:18.961 [DEBUG] [Thread-23538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:07:18.964 [DEBUG] [Thread-23538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:07:18.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:07:18.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:07:18.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:07:18.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:07:18.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:07:18.989 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:07:18.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:07:18.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:07:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:07:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.837930 -999.00  +17.20   4.59     51   +7.00 1 1 1 1 1     0    0 8.60 -55.62 ZNESW 6.9 4.6 256.2 9.4 18.0 -22.1 17.9 -21.1 17.7 -21.0 18.0 -21.7
2025-11-12T22:07:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:07:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:07:18.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.837930
2025-11-12T22:07:18.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:07:18.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:07:18.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:07:18.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:07:18.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:07:18.992 [DEBUG] [Thread-23538] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:07:18.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:06:42', tmtdew=11.21, humidity=47.76, cloud=0.0, wind=11.47, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:07:15', seeing=1.23, atlas_timestamp='2025-11-12T20:06:37.152', atlas_cloud=1, atlas_rain=1, zp_data=[1.2387499999999996, 1.075750000000001, 1.1037499999999998, 1.0709999999999997, 1.3535000000000004, 1.4272500000000008, 0.9369999999999994, 0.9372500000000006, 0.9475000000000007, 1.5285000000000002, 1.3747499999999997, 1.1579999999999995, 1.3689999999999998, 1.1992499999999993, 0.7659999999999991, 0.7920000000000007, 1.1797500000000012, 1.5685000000000002, 1.4869999999999992, 1.2952499999999993, 1.2529999999999983, 1.3127499999999985, 0.9232500000000012, 0.8952499999999999, 1.8099999999999987, 0.5295000000000005, 1.6437499999999998, 1.4215, 0.7439999999999998, 1.7910000000000013, nan, 1.278500000000001, 0.3897499999999994], zp_timestamp='2025-11-12T20:03:00')
2025-11-12T22:07:19.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:07:19.085 [DEBUG] [Thread-23541] [transport.py] [_log()] starting thread (client mode): 0x149446a0
2025-11-12T22:07:19.085 [DEBUG] [Thread-23541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:07:19.100 [DEBUG] [Thread-23541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:07:19.100 [INFO] [Thread-23541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] client lang: <none>
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] server lang: <none>
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] kex follows: False
2025-11-12T22:07:19.108 [DEBUG] [Thread-23541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:07:19.109 [DEBUG] [Thread-23541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:07:19.109 [DEBUG] [Thread-23541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:07:19.109 [DEBUG] [Thread-23541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:07:19.109 [DEBUG] [Thread-23541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:07:19.109 [DEBUG] [Thread-23541] [transport.py] [_log()] Compression: none
2025-11-12T22:07:19.109 [DEBUG] [Thread-23541] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:07:19.168 [DEBUG] [Thread-23541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:07:19.169 [DEBUG] [Thread-23541] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:07:19.169 [DEBUG] [Thread-23541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:07:19.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:07:19.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:07:19.225 [DEBUG] [Thread-23541] [transport.py] [_log()] userauth is OK
2025-11-12T22:07:19.226 [DEBUG] [Thread-23541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:07:19.226 [DEBUG] [Thread-23541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:07:19.226 [DEBUG] [Thread-23541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:07:19.226 [DEBUG] [Thread-23541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:07:19.245 [INFO] [Thread-23541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:07:19.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:07:19.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:07:20.056 [DEBUG] [Thread-23541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:07:20.057 [DEBUG] [Thread-23541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:07:20.105 [DEBUG] [Thread-23541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:07:20.105 [DEBUG] [Thread-23541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:07:20.114 [DEBUG] [Thread-23541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:07:20.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:07:20.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-11-12T22:07:20.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-11-12T22:07:20.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:07:20.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:07:20.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:07:20.151 [DEBUG] [Thread-23541] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:07:24.340 [DEBUG] [Thread-23543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:07:39.392 [DEBUG] [Thread-23544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:07:50.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:07:50.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:07:50.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-11-12T22:07:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 7, 47), 11.17, 47.89, 0.0, 13.25, 16.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:07:50.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:07:47
2025-11-12T22:07:50.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:07:51.107 [DEBUG] [Thread-23545] [transport.py] [_log()] starting thread (client mode): 0x14947c10
2025-11-12T22:07:51.107 [DEBUG] [Thread-23545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:07:51.127 [DEBUG] [Thread-23545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:07:51.127 [INFO] [Thread-23545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:07:51.130 [DEBUG] [Thread-23545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:07:51.130 [DEBUG] [Thread-23545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] client lang: <none>
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] server lang: <none>
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] kex follows: False
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:07:51.131 [DEBUG] [Thread-23545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:07:51.132 [DEBUG] [Thread-23545] [transport.py] [_log()] Compression: none
2025-11-12T22:07:51.132 [DEBUG] [Thread-23545] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:07:51.151 [DEBUG] [Thread-23545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:07:51.152 [DEBUG] [Thread-23545] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:07:51.152 [DEBUG] [Thread-23545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:07:51.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:07:51.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:07:51.197 [DEBUG] [Thread-23545] [transport.py] [_log()] userauth is OK
2025-11-12T22:07:51.197 [DEBUG] [Thread-23545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:07:51.198 [DEBUG] [Thread-23545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:07:51.198 [DEBUG] [Thread-23545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:07:51.198 [DEBUG] [Thread-23545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:07:51.231 [INFO] [Thread-23545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:07:51.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:07:51.867 [DEBUG] [Thread-23545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:07:51.867 [DEBUG] [Thread-23545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:07:51.867 [DEBUG] [Thread-23545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:07:51.908 [DEBUG] [Thread-23545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:07:51.908 [DEBUG] [Thread-23545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:07:51.911 [DEBUG] [Thread-23545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:07:51.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:07:51.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:07:51.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:07:51.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:07:51.936 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:07:51.938 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:07:51.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:07:51.938 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:07:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:07:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.838278 -999.00  +17.10   9.00     51   +7.10 1 1 1 1 1     0    0 8.97 -56.12 ZNESW 6.6 9.0 211.2 11.9 18.0 -22.2 17.9 -21.3 17.7 -20.9 17.9 -21.8
2025-11-12T22:07:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:07:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:07:51.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.838278
2025-11-12T22:07:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:07:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:07:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:07:51.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:07:51.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:07:51.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:07:47', tmtdew=11.17, humidity=47.89, 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-11-12T22:07:47', seeing=1.08, atlas_timestamp='2025-11-12T20:07:07.219', atlas_cloud=1, atlas_rain=1, zp_data=[1.2387499999999996, 1.075750000000001, 1.1037499999999998, 1.0709999999999997, 1.3535000000000004, 1.4272500000000008, 0.9369999999999994, 0.9372500000000006, 0.9475000000000007, 1.5285000000000002, 1.3747499999999997, 1.1579999999999995, 1.3689999999999998, 1.1992499999999993, 0.7659999999999991, 0.7920000000000007, 1.1797500000000012, 1.5685000000000002, 1.4869999999999992, 1.2952499999999993, 1.2529999999999983, 1.3127499999999985, 0.9232500000000012, 0.8952499999999999, 1.8099999999999987, 0.5295000000000005, 1.6437499999999998, 1.4215, 0.7439999999999998, 1.7910000000000013, nan, 1.278500000000001, 0.3897499999999994], zp_timestamp='2025-11-12T20:03:00')
2025-11-12T22:07:51.941 [DEBUG] [Thread-23545] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:07: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-11-12T22:07:52.036 [DEBUG] [Thread-23548] [transport.py] [_log()] starting thread (client mode): 0x14980bb0
2025-11-12T22:07:52.036 [DEBUG] [Thread-23548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:07:52.050 [DEBUG] [Thread-23548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:07:52.050 [INFO] [Thread-23548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:07:52.058 [DEBUG] [Thread-23548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:07:52.058 [DEBUG] [Thread-23548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:07:52.058 [DEBUG] [Thread-23548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:07:52.058 [DEBUG] [Thread-23548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:07:52.058 [DEBUG] [Thread-23548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:07:52.058 [DEBUG] [Thread-23548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] client lang: <none>
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] server lang: <none>
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] kex follows: False
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] Compression: none
2025-11-12T22:07:52.059 [DEBUG] [Thread-23548] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:07:52.117 [DEBUG] [Thread-23548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:07:52.117 [DEBUG] [Thread-23548] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:07:52.118 [DEBUG] [Thread-23548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:07:52.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:07:52.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:07:52.177 [DEBUG] [Thread-23548] [transport.py] [_log()] userauth is OK
2025-11-12T22:07:52.177 [DEBUG] [Thread-23548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:07:52.177 [DEBUG] [Thread-23548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:07:52.177 [DEBUG] [Thread-23548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:07:52.177 [DEBUG] [Thread-23548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:07:52.201 [INFO] [Thread-23548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:07:52.201 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:07:52.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:07:53.053 [DEBUG] [Thread-23548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:07:53.054 [DEBUG] [Thread-23548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:07:53.106 [DEBUG] [Thread-23548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:07:53.106 [DEBUG] [Thread-23548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:07:53.119 [DEBUG] [Thread-23548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:07:53.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:07:53.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-11-12T22:07:53.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-11-12T22:07:53.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:07:53.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:07:53.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:07:53.160 [DEBUG] [Thread-23548] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:07:54.429 [DEBUG] [Thread-23550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:07:57.051 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:07:57.053 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:07:57.973 [DEBUG] [Thread-23551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:08:09.480 [DEBUG] [Thread-23552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:08:23.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:08:23.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:08:23.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:08:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 8, 19), 11.17, 47.87, 0.0, 10.98, 16.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:08:23.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:08:19
2025-11-12T22:08:23.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:08:24.122 [DEBUG] [Thread-23553] [transport.py] [_log()] starting thread (client mode): 0x17346860
2025-11-12T22:08:24.122 [DEBUG] [Thread-23553] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:08:24.142 [DEBUG] [Thread-23553] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:08:24.142 [INFO] [Thread-23553] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:08:24.145 [DEBUG] [Thread-23553] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] client lang: <none>
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] server lang: <none>
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] kex follows: False
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:08:24.146 [DEBUG] [Thread-23553] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:08:24.147 [DEBUG] [Thread-23553] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:08:24.147 [DEBUG] [Thread-23553] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:08:24.147 [DEBUG] [Thread-23553] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:08:24.147 [DEBUG] [Thread-23553] [transport.py] [_log()] Compression: none
2025-11-12T22:08:24.147 [DEBUG] [Thread-23553] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:08:24.165 [DEBUG] [Thread-23553] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:08:24.166 [DEBUG] [Thread-23553] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:08:24.166 [DEBUG] [Thread-23553] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:08:24.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:08:24.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:08:24.168 [DEBUG] [Thread-23553] [transport.py] [_log()] userauth is OK
2025-11-12T22:08:24.168 [DEBUG] [Thread-23553] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:08:24.169 [DEBUG] [Thread-23553] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:08:24.169 [DEBUG] [Thread-23553] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:08:24.169 [DEBUG] [Thread-23553] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:08:24.203 [INFO] [Thread-23553] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:08:24.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:08:24.509 [DEBUG] [Thread-23555 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:08:24.835 [DEBUG] [Thread-23553] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:08:24.835 [DEBUG] [Thread-23553] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:08:24.836 [DEBUG] [Thread-23553] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:08:24.877 [DEBUG] [Thread-23553] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:08:24.877 [DEBUG] [Thread-23553] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:08:24.881 [DEBUG] [Thread-23553] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:08:24.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:08:24.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:08:24.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:08:24.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:08:24.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:08:24.905 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:08:24.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:08:24.905 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:08:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:08:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.838625 -999.00  +17.10   8.47     51   +7.10 1 2 1 1 1     0    0 8.71 -60.37 ZNeSW 7.7 8.5 214.6 9.9 18.0 -22.1 17.9 -21.1 17.7 -21.1 17.9 -21.6
2025-11-12T22:08:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:08:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:08:24.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.838625
2025-11-12T22:08:24.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:08:24.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:08:24.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:08:24.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:08:24.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:08:24.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:08:19', tmtdew=11.17, humidity=47.87, cloud=0.0, wind=10.98, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:08:19', seeing=1.26, atlas_timestamp='2025-11-12T20:07:37.200', atlas_cloud=2, atlas_rain=1, zp_data=[0.9147499999999997, 0.8892500000000005, 0.8642500000000002, 0.8434999999999997, 0.9634999999999998, 1.010250000000001, 0.7149999999999999, 0.6492500000000003, 0.9064999999999994, 0.9885000000000002, 0.98325, 0.9319999999999995, 0.9109999999999996, 0.9272499999999999, 0.6484999999999994, 0.560999999999999, 0.8907500000000006, 1.4145000000000003, 1.2189999999999994, 0.9922499999999985, 0.8649999999999984, 1.082749999999999, 1.1157500000000011, 0.8577500000000002, 1.0324999999999989, 0.6515000000000004, 1.4937500000000004, 1.2505000000000006, 0.6660000000000004, 1.5070000000000006, nan, 0.8975000000000009, 0.3282499999999988], zp_timestamp='2025-11-12T20:07:00')
2025-11-12T22:08:24.908 [DEBUG] [Thread-23553] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:08:24.992 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:08:25.004 [DEBUG] [Thread-23557] [transport.py] [_log()] starting thread (client mode): 0x14904910
2025-11-12T22:08:25.004 [DEBUG] [Thread-23557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:08:25.018 [DEBUG] [Thread-23557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:08:25.019 [INFO] [Thread-23557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:08:25.026 [DEBUG] [Thread-23557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:08:25.026 [DEBUG] [Thread-23557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] client lang: <none>
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] server lang: <none>
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] kex follows: False
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] Compression: none
2025-11-12T22:08:25.027 [DEBUG] [Thread-23557] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:08:25.084 [DEBUG] [Thread-23557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:08:25.085 [DEBUG] [Thread-23557] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:08:25.085 [DEBUG] [Thread-23557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:08:25.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:08:25.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:08:25.141 [DEBUG] [Thread-23557] [transport.py] [_log()] userauth is OK
2025-11-12T22:08:25.141 [DEBUG] [Thread-23557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:08:25.141 [DEBUG] [Thread-23557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:08:25.141 [DEBUG] [Thread-23557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:08:25.141 [DEBUG] [Thread-23557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:08:25.160 [INFO] [Thread-23557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:08:25.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:08:25.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:08:26.026 [DEBUG] [Thread-23557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:08:26.027 [DEBUG] [Thread-23557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:08:26.075 [DEBUG] [Thread-23557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:08:26.075 [DEBUG] [Thread-23557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:08:26.084 [DEBUG] [Thread-23557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:08:26.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:08: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-11-12T22:08:26.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-11-12T22:08:26.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:08:26.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:08:26.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:08:26.121 [DEBUG] [Thread-23557] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:08:39.551 [DEBUG] [Thread-23559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:08:54.601 [DEBUG] [Thread-23560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:08:56.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:08:56.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:08:56.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-11-12T22:08:56.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 8, 51), 11.08, 48.04, 0.0, 11.79, 16.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:08:56.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:08:51
2025-11-12T22:08:56.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:08:57.082 [DEBUG] [Thread-23561] [transport.py] [_log()] starting thread (client mode): 0x1739a3e0
2025-11-12T22:08:57.082 [DEBUG] [Thread-23561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:08:57.105 [DEBUG] [Thread-23561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:08:57.105 [INFO] [Thread-23561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] client lang: <none>
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] server lang: <none>
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] kex follows: False
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:08:57.107 [DEBUG] [Thread-23561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:08:57.108 [DEBUG] [Thread-23561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:08:57.108 [DEBUG] [Thread-23561] [transport.py] [_log()] Compression: none
2025-11-12T22:08:57.108 [DEBUG] [Thread-23561] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:08:57.118 [DEBUG] [Thread-23561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:08:57.118 [DEBUG] [Thread-23561] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:08:57.119 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:08:57.119 [DEBUG] [Thread-23561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:08:57.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:08:57.121 [DEBUG] [Thread-23561] [transport.py] [_log()] userauth is OK
2025-11-12T22:08:57.121 [DEBUG] [Thread-23561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:08:57.121 [DEBUG] [Thread-23561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:08:57.122 [DEBUG] [Thread-23561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:08:57.122 [DEBUG] [Thread-23561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:08:57.147 [INFO] [Thread-23561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:08:57.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:08:57.262 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:08:57.263 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:08:57.801 [DEBUG] [Thread-23561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:08:57.801 [DEBUG] [Thread-23561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:08:57.802 [DEBUG] [Thread-23561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:08:57.843 [DEBUG] [Thread-23561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:08:57.843 [DEBUG] [Thread-23561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:08:57.846 [DEBUG] [Thread-23561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:08:57.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:08:57.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:08:57.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:08:57.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:08:57.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:08:57.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:08:57.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:08:57.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:08:57.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:08:57.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.838972 -999.00  +17.10   6.76     51   +7.10 1 2 1 1 1     0    0 8.59 -60.42 ZNeSW 6.1 6.8 221.3 12.1 18.0 -22.2 17.9 -21.1 17.7 -21.0 17.9 -21.7
2025-11-12T22:08:57.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:08:57.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:08:57.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.838972
2025-11-12T22:08:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:08:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:08:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:08:57.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:08:57.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:08:57.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:08:51', tmtdew=11.08, humidity=48.04, cloud=0.0, wind=11.79, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:08:51', seeing=1.09, atlas_timestamp='2025-11-12T20:08:07.181', atlas_cloud=2, atlas_rain=1, zp_data=[0.9147499999999997, 0.8892500000000005, 0.8642500000000002, 0.8434999999999997, 0.9634999999999998, 1.010250000000001, 0.7149999999999999, 0.6492500000000003, 0.9064999999999994, 0.9885000000000002, 0.98325, 0.9319999999999995, 0.9109999999999996, 0.9272499999999999, 0.6484999999999994, 0.560999999999999, 0.8907500000000006, 1.4145000000000003, 1.2189999999999994, 0.9922499999999985, 0.8649999999999984, 1.082749999999999, 1.1157500000000011, 0.8577500000000002, 1.0324999999999989, 0.6515000000000004, 1.4937500000000004, 1.2505000000000006, 0.6660000000000004, 1.5070000000000006, nan, 0.8975000000000009, 0.3282499999999988], zp_timestamp='2025-11-12T20:07:00')
2025-11-12T22:08:57.875 [DEBUG] [Thread-23561] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:08:57.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:08:57.980 [DEBUG] [Thread-23564] [transport.py] [_log()] starting thread (client mode): 0x14920a90
2025-11-12T22:08:57.980 [DEBUG] [Thread-23564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:08:57.996 [DEBUG] [Thread-23564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:08:57.996 [INFO] [Thread-23564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] client lang: <none>
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] server lang: <none>
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] kex follows: False
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] Compression: none
2025-11-12T22:08:58.005 [DEBUG] [Thread-23564] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:08:58.025 [DEBUG] [Thread-23566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:08:58.061 [DEBUG] [Thread-23564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:08:58.062 [DEBUG] [Thread-23564] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:08:58.062 [DEBUG] [Thread-23564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:08:58.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:08:58.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:08:58.117 [DEBUG] [Thread-23564] [transport.py] [_log()] userauth is OK
2025-11-12T22:08:58.118 [DEBUG] [Thread-23564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:08:58.118 [DEBUG] [Thread-23564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:08:58.118 [DEBUG] [Thread-23564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:08:58.118 [DEBUG] [Thread-23564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:08:58.140 [INFO] [Thread-23564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:08:58.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:08:58.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:08:58.962 [DEBUG] [Thread-23564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:08:58.963 [DEBUG] [Thread-23564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:08:59.011 [DEBUG] [Thread-23564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:08:59.011 [DEBUG] [Thread-23564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:08:59.020 [DEBUG] [Thread-23564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:08:59.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:08:59.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-11-12T22:08:59.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-11-12T22:08:59.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:08:59.048 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:08:59.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:08:59.058 [DEBUG] [Thread-23564] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:09:09.637 [DEBUG] [Thread-23567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:09:24.694 [DEBUG] [Thread-23568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:09:29.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:09:29.080 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:09:29.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-11-12T22:09:29.737 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 9, 23), 11.07, 48.06, 0.0, 13.11, 16.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:09:29.738 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:09:23
2025-11-12T22:09:29.868 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:09:30.020 [DEBUG] [Thread-23569] [transport.py] [_log()] starting thread (client mode): 0x14982c80
2025-11-12T22:09:30.020 [DEBUG] [Thread-23569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:09:30.040 [DEBUG] [Thread-23569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:09:30.040 [INFO] [Thread-23569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:09:30.042 [DEBUG] [Thread-23569] [transport.py] [_log()] client lang: <none>
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] server lang: <none>
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] kex follows: False
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] Compression: none
2025-11-12T22:09:30.043 [DEBUG] [Thread-23569] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:09:30.054 [DEBUG] [Thread-23569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:09:30.054 [DEBUG] [Thread-23569] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:09:30.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:09:30.054 [DEBUG] [Thread-23569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:09:30.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:09:30.055 [DEBUG] [Thread-23569] [transport.py] [_log()] userauth is OK
2025-11-12T22:09:30.055 [DEBUG] [Thread-23569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:09:30.055 [DEBUG] [Thread-23569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:09:30.055 [DEBUG] [Thread-23569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:09:30.055 [DEBUG] [Thread-23569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:09:30.064 [INFO] [Thread-23569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:09:30.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:09:30.727 [DEBUG] [Thread-23569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:09:30.727 [DEBUG] [Thread-23569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:09:30.727 [DEBUG] [Thread-23569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:09:30.768 [DEBUG] [Thread-23569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:09:30.768 [DEBUG] [Thread-23569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:09:30.770 [DEBUG] [Thread-23569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:09:30.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:09:30.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:09:30.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:09:30.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:09:30.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:09:30.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:09:30.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:09:30.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:09:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:09:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.839319 -999.00  +17.10   6.73     51   +7.10 1 2 1 1 1     0    0 8.42 -65.04 ZNeSW 10.2 6.7 195.2 10.0 18.0 -22.1 17.9 -21.4 17.7 -21.0 17.9 -21.7
2025-11-12T22:09:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:09:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:09:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.839319
2025-11-12T22:09:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:09:30.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:09:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:09:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:09:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:09:30.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:09:23', tmtdew=11.07, humidity=48.06, cloud=0.0, wind=13.11, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:09:23', seeing=1.09, atlas_timestamp='2025-11-12T20:08:37.162', atlas_cloud=2, atlas_rain=1, zp_data=[0.9147499999999997, 0.8892500000000005, 0.8642500000000002, 0.8434999999999997, 0.9634999999999998, 1.010250000000001, 0.7149999999999999, 0.6492500000000003, 0.9064999999999994, 0.9885000000000002, 0.98325, 0.9319999999999995, 0.9109999999999996, 0.9272499999999999, 0.6484999999999994, 0.560999999999999, 0.8907500000000006, 1.4145000000000003, 1.2189999999999994, 0.9922499999999985, 0.8649999999999984, 1.082749999999999, 1.1157500000000011, 0.8577500000000002, 1.0324999999999989, 0.6515000000000004, 1.4937500000000004, 1.2505000000000006, 0.6660000000000004, 1.5070000000000006, nan, 0.8975000000000009, 0.3282499999999988], zp_timestamp='2025-11-12T20:07:00')
2025-11-12T22:09:30.788 [DEBUG] [Thread-23569] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:09:30.864 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:09:30.876 [DEBUG] [Thread-23572] [transport.py] [_log()] starting thread (client mode): 0x14981150
2025-11-12T22:09:30.876 [DEBUG] [Thread-23572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:09:30.891 [DEBUG] [Thread-23572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:09:30.891 [INFO] [Thread-23572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] client lang: <none>
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] server lang: <none>
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] kex follows: False
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] Compression: none
2025-11-12T22:09:30.899 [DEBUG] [Thread-23572] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:09:30.956 [DEBUG] [Thread-23572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:09:30.956 [DEBUG] [Thread-23572] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:09:30.956 [DEBUG] [Thread-23572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:09:30.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:09:30.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:09:31.012 [DEBUG] [Thread-23572] [transport.py] [_log()] userauth is OK
2025-11-12T22:09:31.013 [DEBUG] [Thread-23572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:09:31.013 [DEBUG] [Thread-23572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:09:31.013 [DEBUG] [Thread-23572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:09:31.013 [DEBUG] [Thread-23572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:09:31.027 [INFO] [Thread-23572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:09:31.027 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:09:31.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:09:31.846 [DEBUG] [Thread-23572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:09:31.846 [DEBUG] [Thread-23572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:09:31.894 [DEBUG] [Thread-23572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:09:31.894 [DEBUG] [Thread-23572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:09:31.902 [DEBUG] [Thread-23572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:09:31.910 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:09:31.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')
2025-11-12T22:09:31.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-11-12T22:09:31.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:09:31.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:09:31.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:09:31.934 [DEBUG] [Thread-23572] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:09:39.723 [DEBUG] [Thread-23574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:09:54.775 [DEBUG] [Thread-23575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:09:57.468 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:09:57.469 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:09:58.082 [DEBUG] [Thread-23576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:10:01.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:10:01.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:10:01.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:10:02.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 9, 55), 11.11, 47.96, 0.0, 14.82, 16.98, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:10:02.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:09:55
2025-11-12T22:10:02.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:10:02.880 [DEBUG] [Thread-23577] [transport.py] [_log()] starting thread (client mode): 0x14904d30
2025-11-12T22:10:02.880 [DEBUG] [Thread-23577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:10:02.900 [DEBUG] [Thread-23577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:10:02.900 [INFO] [Thread-23577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:10:02.903 [DEBUG] [Thread-23577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:10:02.903 [DEBUG] [Thread-23577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:10:02.903 [DEBUG] [Thread-23577] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:10:02.903 [DEBUG] [Thread-23577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] client lang: <none>
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] server lang: <none>
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] kex follows: False
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] Compression: none
2025-11-12T22:10:02.904 [DEBUG] [Thread-23577] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:10:02.920 [DEBUG] [Thread-23577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:10:02.920 [DEBUG] [Thread-23577] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:10:02.921 [DEBUG] [Thread-23577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:10:02.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:10:02.922 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:10:02.923 [DEBUG] [Thread-23577] [transport.py] [_log()] userauth is OK
2025-11-12T22:10:02.923 [DEBUG] [Thread-23577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:10:02.923 [DEBUG] [Thread-23577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:10:02.923 [DEBUG] [Thread-23577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:10:02.923 [DEBUG] [Thread-23577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:10:02.947 [INFO] [Thread-23577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:10:02.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:10:03.763 [DEBUG] [Thread-23577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:10:03.764 [DEBUG] [Thread-23577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:10:03.764 [DEBUG] [Thread-23577] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:10:03.805 [DEBUG] [Thread-23577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:10:03.805 [DEBUG] [Thread-23577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:10:03.808 [DEBUG] [Thread-23577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:10:03.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:10:03.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:10:03.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:10:03.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:10:03.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:10:03.845 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:10:03.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:10:03.846 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:10:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:10:03.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.840014 -999.00  +17.10   7.63     51   +7.20 1 1 1 1 1     0    0 8.65 -60.57 ZNESW 6.5 7.6 217.8 14.5 17.9 -22.2 17.9 -21.2 17.6 -21.0 17.9 -21.6
2025-11-12T22:10:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:10:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:10:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.840014
2025-11-12T22:10:03.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:10:03.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:10:03.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:10:03.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:10:03.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:10:03.848 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:09:55', tmtdew=11.11, humidity=47.96, cloud=0.0, wind=14.82, temperature=16.98, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:09:55', seeing=0.94, atlas_timestamp='2025-11-12T20:09:37.210', atlas_cloud=1, atlas_rain=1, zp_data=[0.9147499999999997, 0.8892500000000005, 0.8642500000000002, 0.8434999999999997, 0.9634999999999998, 1.010250000000001, 0.7149999999999999, 0.6492500000000003, 0.9064999999999994, 0.9885000000000002, 0.98325, 0.9319999999999995, 0.9109999999999996, 0.9272499999999999, 0.6484999999999994, 0.560999999999999, 0.8907500000000006, 1.4145000000000003, 1.2189999999999994, 0.9922499999999985, 0.8649999999999984, 1.082749999999999, 1.1157500000000011, 0.8577500000000002, 1.0324999999999989, 0.6515000000000004, 1.4937500000000004, 1.2505000000000006, 0.6660000000000004, 1.5070000000000006, nan, 0.8975000000000009, 0.3282499999999988], zp_timestamp='2025-11-12T20:07:00')
2025-11-12T22:10:03.849 [DEBUG] [Thread-23577] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:10:03.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:10:03.944 [DEBUG] [Thread-23580] [transport.py] [_log()] starting thread (client mode): 0x11f02710
2025-11-12T22:10:03.944 [DEBUG] [Thread-23580] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:10:03.960 [DEBUG] [Thread-23580] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:10:03.960 [INFO] [Thread-23580] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:10:03.968 [DEBUG] [Thread-23580] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] client lang: <none>
2025-11-12T22:10:03.969 [DEBUG] [Thread-23580] [transport.py] [_log()] server lang: <none>
2025-11-12T22:10:03.970 [DEBUG] [Thread-23580] [transport.py] [_log()] kex follows: False
2025-11-12T22:10:03.970 [DEBUG] [Thread-23580] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:10:03.970 [DEBUG] [Thread-23580] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:10:03.970 [DEBUG] [Thread-23580] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:10:03.970 [DEBUG] [Thread-23580] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:10:03.970 [DEBUG] [Thread-23580] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:10:03.970 [DEBUG] [Thread-23580] [transport.py] [_log()] Compression: none
2025-11-12T22:10:03.970 [DEBUG] [Thread-23580] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:10:04.026 [DEBUG] [Thread-23580] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:10:04.026 [DEBUG] [Thread-23580] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:10:04.027 [DEBUG] [Thread-23580] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:10:04.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:10:04.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:10:04.085 [DEBUG] [Thread-23580] [transport.py] [_log()] userauth is OK
2025-11-12T22:10:04.085 [DEBUG] [Thread-23580] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:10:04.085 [DEBUG] [Thread-23580] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:10:04.086 [DEBUG] [Thread-23580] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:10:04.086 [DEBUG] [Thread-23580] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:10:04.105 [INFO] [Thread-23580] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:10:04.114 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:10:04.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:10:04.974 [DEBUG] [Thread-23580] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:10:04.975 [DEBUG] [Thread-23580] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:10:05.024 [DEBUG] [Thread-23580] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:10:05.024 [DEBUG] [Thread-23580] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:10:05.034 [DEBUG] [Thread-23580] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:10:05.043 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:10:05.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-11-12T22:10:05.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-11-12T22:10:05.060 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:10:05.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:10:05.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:10:05.069 [DEBUG] [Thread-23580] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:10:09.806 [DEBUG] [Thread-23582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:10:24.849 [DEBUG] [Thread-23583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:10:35.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:10:35.067 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:10:35.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-11-12T22:10:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 10, 27), 11.11, 47.96, 0.0, 14.91, 17.03, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:10:35.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:10:27
2025-11-12T22:10:35.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:10:36.010 [DEBUG] [Thread-23584] [transport.py] [_log()] starting thread (client mode): 0x1739a3e0
2025-11-12T22:10:36.010 [DEBUG] [Thread-23584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:10:36.030 [DEBUG] [Thread-23584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:10:36.030 [INFO] [Thread-23584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] client lang: <none>
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] server lang: <none>
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] kex follows: False
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:10:36.033 [DEBUG] [Thread-23584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:10:36.034 [DEBUG] [Thread-23584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:10:36.034 [DEBUG] [Thread-23584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:10:36.034 [DEBUG] [Thread-23584] [transport.py] [_log()] Compression: none
2025-11-12T22:10:36.034 [DEBUG] [Thread-23584] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:10:36.053 [DEBUG] [Thread-23584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:10:36.053 [DEBUG] [Thread-23584] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:10:36.054 [DEBUG] [Thread-23584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:10:36.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:10:36.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:10:36.056 [DEBUG] [Thread-23584] [transport.py] [_log()] userauth is OK
2025-11-12T22:10:36.056 [DEBUG] [Thread-23584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:10:36.056 [DEBUG] [Thread-23584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:10:36.056 [DEBUG] [Thread-23584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:10:36.056 [DEBUG] [Thread-23584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:10:36.082 [INFO] [Thread-23584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:10:36.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:10:36.719 [DEBUG] [Thread-23584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:10:36.719 [DEBUG] [Thread-23584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:10:36.719 [DEBUG] [Thread-23584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:10:36.759 [DEBUG] [Thread-23584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:10:36.760 [DEBUG] [Thread-23584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:10:36.763 [DEBUG] [Thread-23584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:10:36.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:10:36.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:10:36.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:10:36.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:10:36.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:10:36.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:10:36.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:10:36.779 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:10:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:10:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.840360 -999.00  +17.20   7.55     51   +7.20 1 1 1 1 1     0    0 8.35 -64.16 ZNESW 10.6 7.5 211.1 14.4 17.9 -22.2 17.8 -21.1 17.6 -20.8 17.9 -21.6
2025-11-12T22:10:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:10:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:10:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.840360
2025-11-12T22:10:36.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:10:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:10:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:10:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:10:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:10:36.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:10:27', tmtdew=11.11, humidity=47.96, cloud=0.0, wind=14.91, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:10:27', seeing=0.97, atlas_timestamp='2025-11-12T20:10:07.104', atlas_cloud=1, atlas_rain=1, zp_data=[0.9147499999999997, 0.8892500000000005, 0.8642500000000002, 0.8434999999999997, 0.9634999999999998, 1.010250000000001, 0.7149999999999999, 0.6492500000000003, 0.9064999999999994, 0.9885000000000002, 0.98325, 0.9319999999999995, 0.9109999999999996, 0.9272499999999999, 0.6484999999999994, 0.560999999999999, 0.8907500000000006, 1.4145000000000003, 1.2189999999999994, 0.9922499999999985, 0.8649999999999984, 1.082749999999999, 1.1157500000000011, 0.8577500000000002, 1.0324999999999989, 0.6515000000000004, 1.4937500000000004, 1.2505000000000006, 0.6660000000000004, 1.5070000000000006, nan, 0.8975000000000009, 0.3282499999999988], zp_timestamp='2025-11-12T20:07:00')
2025-11-12T22:10:36.782 [DEBUG] [Thread-23584] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:10:36.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:10:36.887 [DEBUG] [Thread-23587] [transport.py] [_log()] starting thread (client mode): 0x19dd9990
2025-11-12T22:10:36.888 [DEBUG] [Thread-23587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:10:36.907 [DEBUG] [Thread-23587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:10:36.907 [INFO] [Thread-23587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:10:36.914 [DEBUG] [Thread-23587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:10:36.914 [DEBUG] [Thread-23587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] client lang: <none>
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] server lang: <none>
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] kex follows: False
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:10:36.915 [DEBUG] [Thread-23587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:10:36.916 [DEBUG] [Thread-23587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:10:36.916 [DEBUG] [Thread-23587] [transport.py] [_log()] Compression: none
2025-11-12T22:10:36.916 [DEBUG] [Thread-23587] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:10:36.973 [DEBUG] [Thread-23587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:10:36.974 [DEBUG] [Thread-23587] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:10:36.974 [DEBUG] [Thread-23587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:10:36.974 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:10:36.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:10:37.029 [DEBUG] [Thread-23587] [transport.py] [_log()] userauth is OK
2025-11-12T22:10:37.030 [DEBUG] [Thread-23587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:10:37.030 [DEBUG] [Thread-23587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:10:37.030 [DEBUG] [Thread-23587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:10:37.030 [DEBUG] [Thread-23587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:10:37.049 [INFO] [Thread-23587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:10:37.049 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:10:37.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:10:37.897 [DEBUG] [Thread-23587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:10:37.897 [DEBUG] [Thread-23587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:10:37.945 [DEBUG] [Thread-23587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:10:37.946 [DEBUG] [Thread-23587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:10:37.955 [DEBUG] [Thread-23587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:10:37.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:10:37.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:10:37.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-11-12T22:10:37.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:10:37.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:10:37.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:10:37.991 [DEBUG] [Thread-23587] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:10:39.886 [DEBUG] [Thread-23589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:10:54.936 [DEBUG] [Thread-23590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:10:57.673 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:10:57.674 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:10:58.151 [DEBUG] [Thread-23591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:11:08.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:11:08.014 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:11:08.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-11-12T22:11:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 10, 59), 11.15, 47.84, 0.0, 12.53, 17.03, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:11:08.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:10:59
2025-11-12T22:11:08.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:11:08.954 [DEBUG] [Thread-23592] [transport.py] [_log()] starting thread (client mode): 0x19dda6e0
2025-11-12T22:11:08.954 [DEBUG] [Thread-23592] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:11:08.980 [DEBUG] [Thread-23592] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:11:08.980 [INFO] [Thread-23592] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:11:08.983 [DEBUG] [Thread-23592] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:11:08.983 [DEBUG] [Thread-23592] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] client lang: <none>
2025-11-12T22:11:08.984 [DEBUG] [Thread-23592] [transport.py] [_log()] server lang: <none>
2025-11-12T22:11:08.985 [DEBUG] [Thread-23592] [transport.py] [_log()] kex follows: False
2025-11-12T22:11:08.985 [DEBUG] [Thread-23592] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:11:08.985 [DEBUG] [Thread-23592] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:11:08.985 [DEBUG] [Thread-23592] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:11:08.985 [DEBUG] [Thread-23592] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:11:08.985 [DEBUG] [Thread-23592] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:11:08.985 [DEBUG] [Thread-23592] [transport.py] [_log()] Compression: none
2025-11-12T22:11:08.986 [DEBUG] [Thread-23592] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:11:09.008 [DEBUG] [Thread-23592] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:11:09.009 [DEBUG] [Thread-23592] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:11:09.009 [DEBUG] [Thread-23592] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:11:09.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:11:09.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:11:09.012 [DEBUG] [Thread-23592] [transport.py] [_log()] userauth is OK
2025-11-12T22:11:09.012 [DEBUG] [Thread-23592] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:11:09.012 [DEBUG] [Thread-23592] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:11:09.012 [DEBUG] [Thread-23592] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:11:09.012 [DEBUG] [Thread-23592] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:11:09.037 [INFO] [Thread-23592] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:11:09.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:11:09.661 [DEBUG] [Thread-23592] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:11:09.661 [DEBUG] [Thread-23592] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:11:09.662 [DEBUG] [Thread-23592] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:11:09.703 [DEBUG] [Thread-23592] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:11:09.703 [DEBUG] [Thread-23592] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:11:09.706 [DEBUG] [Thread-23592] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:11:09.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:11:09.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:11:09.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:11:09.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:11:09.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:11:09.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:11:09.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:11:09.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:11:09.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:11:09.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.840708 -999.00  +17.20  12.35     52   +7.20 1 1 1 1 1     0    0 8.56 -63.94 ZNESW 12.0 12.3 209.6 16.7 17.9 -22.2 17.9 -21.3 17.6 -21.0 17.9 -21.7
2025-11-12T22:11:09.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:11:09.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:11:09.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.840708
2025-11-12T22:11:09.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:11:09.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:11:09.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:11:09.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:11:09.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:11:09.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:10:59', tmtdew=11.15, humidity=47.84, cloud=0.0, wind=12.53, temperature=17.03, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:10:59', seeing=0.97, atlas_timestamp='2025-11-12T20:10:37.171', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:10:00')
2025-11-12T22:11:09.731 [DEBUG] [Thread-23592] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:11:09.813 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:11:09.824 [DEBUG] [Thread-23595] [transport.py] [_log()] starting thread (client mode): 0x14905570
2025-11-12T22:11:09.824 [DEBUG] [Thread-23595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:11:09.839 [DEBUG] [Thread-23595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:11:09.839 [INFO] [Thread-23595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:11:09.846 [DEBUG] [Thread-23595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] client lang: <none>
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] server lang: <none>
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] kex follows: False
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] Compression: none
2025-11-12T22:11:09.847 [DEBUG] [Thread-23595] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:11:09.904 [DEBUG] [Thread-23595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:11:09.905 [DEBUG] [Thread-23595] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:11:09.905 [DEBUG] [Thread-23595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:11:09.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:11:09.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:11:09.961 [DEBUG] [Thread-23595] [transport.py] [_log()] userauth is OK
2025-11-12T22:11:09.962 [DEBUG] [Thread-23595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:11:09.962 [DEBUG] [Thread-23595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:11:09.962 [DEBUG] [Thread-23595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:11:09.962 [DEBUG] [Thread-23595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:11:09.973 [DEBUG] [Thread-23597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:11:09.987 [INFO] [Thread-23595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:11:09.988 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:11:09.989 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:11:10.814 [DEBUG] [Thread-23595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:11:10.815 [DEBUG] [Thread-23595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:11:10.863 [DEBUG] [Thread-23595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:11:10.863 [DEBUG] [Thread-23595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:11:10.872 [DEBUG] [Thread-23595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:11:10.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:11:10.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:11:10.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:11:10.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:11:10.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:11:10.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:11:10.910 [DEBUG] [Thread-23595] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:11:25.038 [DEBUG] [Thread-23598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:11:40.071 [DEBUG] [Thread-23599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:11:40.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:11:40.909 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:11:40.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-11-12T22:11:41.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 11, 31), 11.2, 47.68, 0.0, 12.53, 17.07, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:11:41.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:11:31
2025-11-12T22:11:41.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:11:41.824 [DEBUG] [Thread-23600] [transport.py] [_log()] starting thread (client mode): 0x14904d30
2025-11-12T22:11:41.825 [DEBUG] [Thread-23600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:11:41.846 [DEBUG] [Thread-23600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:11:41.847 [INFO] [Thread-23600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] client lang: <none>
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] server lang: <none>
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] kex follows: False
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] Compression: none
2025-11-12T22:11:41.850 [DEBUG] [Thread-23600] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:11:41.867 [DEBUG] [Thread-23600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:11:41.867 [DEBUG] [Thread-23600] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:11:41.868 [DEBUG] [Thread-23600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:11:41.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:11:41.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:11:41.870 [DEBUG] [Thread-23600] [transport.py] [_log()] userauth is OK
2025-11-12T22:11:41.870 [DEBUG] [Thread-23600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:11:41.870 [DEBUG] [Thread-23600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:11:41.870 [DEBUG] [Thread-23600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:11:41.870 [DEBUG] [Thread-23600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:11:41.891 [INFO] [Thread-23600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:11:41.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:11:42.543 [DEBUG] [Thread-23600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:11:42.543 [DEBUG] [Thread-23600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:11:42.544 [DEBUG] [Thread-23600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:11:42.584 [DEBUG] [Thread-23600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:11:42.585 [DEBUG] [Thread-23600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:11:42.588 [DEBUG] [Thread-23600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:11:42.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:11:42.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:11:42.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:11:42.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:11:42.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:11:42.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:11:42.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:11:42.611 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:11:42.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:11:42.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.841055 -999.00  +17.20   7.60     52   +7.20 1 1 1 1 1     0    0 8.40 -66.55 ZNESW 9.6 7.6 233.1 17.6 17.9 -22.1 17.9 -21.1 17.6 -21.0 17.9 -21.6
2025-11-12T22:11:42.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:11:42.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:11:42.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.841055
2025-11-12T22:11:42.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:11:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:11:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:11:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:11:42.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:11:42.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:11:31', tmtdew=11.2, humidity=47.68, cloud=0.0, wind=12.53, temperature=17.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:11:31', seeing=0.88, atlas_timestamp='2025-11-12T20:11:07.152', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:10:00')
2025-11-12T22:11:42.614 [DEBUG] [Thread-23600] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:11:42.697 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:11:42.709 [DEBUG] [Thread-23603] [transport.py] [_log()] starting thread (client mode): 0x14906d10
2025-11-12T22:11:42.709 [DEBUG] [Thread-23603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:11:42.727 [DEBUG] [Thread-23603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:11:42.728 [INFO] [Thread-23603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:11:42.738 [DEBUG] [Thread-23603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:11:42.738 [DEBUG] [Thread-23603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] client lang: <none>
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] server lang: <none>
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] kex follows: False
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:11:42.739 [DEBUG] [Thread-23603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:11:42.740 [DEBUG] [Thread-23603] [transport.py] [_log()] Compression: none
2025-11-12T22:11:42.740 [DEBUG] [Thread-23603] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:11:42.797 [DEBUG] [Thread-23603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:11:42.798 [DEBUG] [Thread-23603] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:11:42.799 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:11:42.799 [DEBUG] [Thread-23603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:11:42.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:11:42.853 [DEBUG] [Thread-23603] [transport.py] [_log()] userauth is OK
2025-11-12T22:11:42.854 [DEBUG] [Thread-23603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:11:42.854 [DEBUG] [Thread-23603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:11:42.854 [DEBUG] [Thread-23603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:11:42.854 [DEBUG] [Thread-23603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:11:42.872 [INFO] [Thread-23603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:11: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-11-12T22:11:42.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:11:43.755 [DEBUG] [Thread-23603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:11:43.755 [DEBUG] [Thread-23603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:11:43.803 [DEBUG] [Thread-23603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:11:43.803 [DEBUG] [Thread-23603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:11:43.812 [DEBUG] [Thread-23603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:11:43.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:11:43.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-11-12T22:11:43.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:11:43.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:11:43.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:11:43.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:11:43.849 [DEBUG] [Thread-23603] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:11:55.108 [DEBUG] [Thread-23605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:11:57.879 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:11:57.881 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:11:58.207 [DEBUG] [Thread-23606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:12:10.156 [DEBUG] [Thread-23607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:12:13.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:12:13.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:12:13.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-11-12T22:12:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 12, 3), 11.18, 47.76, 0.0, 11.84, 17.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:12:14.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:12:03
2025-11-12T22:12:14.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:12:14.791 [DEBUG] [Thread-23608] [transport.py] [_log()] starting thread (client mode): 0x14944f40
2025-11-12T22:12:14.791 [DEBUG] [Thread-23608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:12:14.811 [DEBUG] [Thread-23608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:12:14.811 [INFO] [Thread-23608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] client lang: <none>
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] server lang: <none>
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] kex follows: False
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] Compression: none
2025-11-12T22:12:14.814 [DEBUG] [Thread-23608] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:12:14.833 [DEBUG] [Thread-23608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:12:14.834 [DEBUG] [Thread-23608] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:12:14.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:12:14.835 [DEBUG] [Thread-23608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:12:14.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:12:14.837 [DEBUG] [Thread-23608] [transport.py] [_log()] userauth is OK
2025-11-12T22:12:14.837 [DEBUG] [Thread-23608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:12:14.837 [DEBUG] [Thread-23608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:12:14.838 [DEBUG] [Thread-23608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:12:14.838 [DEBUG] [Thread-23608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:12:14.862 [INFO] [Thread-23608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:12:14.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:12:15.467 [DEBUG] [Thread-23608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:12:15.467 [DEBUG] [Thread-23608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:12:15.467 [DEBUG] [Thread-23608] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:12:15.508 [DEBUG] [Thread-23608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:12:15.508 [DEBUG] [Thread-23608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:12:15.511 [DEBUG] [Thread-23608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:12:15.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:12:15.523 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:12:15.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:12:15.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:12:15.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:12:15.535 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:12:15.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:12:15.536 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:12:15.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:12:15.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.841402 -999.00  +17.20   7.70     51   +7.20 1 1 1 1 1     0    0 8.37 -61.43 ZNESW 6.3 7.7 203.8 14.1 17.9 -22.2 17.8 -21.2 17.6 -20.9 17.9 -21.6
2025-11-12T22:12:15.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:12:15.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:12:15.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.841402
2025-11-12T22:12:15.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:12:15.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:12:15.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:12:15.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:12:15.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:12:15.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:12:03', tmtdew=11.18, humidity=47.76, cloud=0.0, wind=11.84, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:12:03', seeing=0.85, atlas_timestamp='2025-11-12T20:11:37.133', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:10:00')
2025-11-12T22:12:15.539 [DEBUG] [Thread-23608] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:12:15.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:12:15.634 [DEBUG] [Thread-23611] [transport.py] [_log()] starting thread (client mode): 0x14923ee0
2025-11-12T22:12:15.634 [DEBUG] [Thread-23611] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:12:15.652 [DEBUG] [Thread-23611] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:12:15.652 [INFO] [Thread-23611] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:12:15.659 [DEBUG] [Thread-23611] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:12:15.660 [DEBUG] [Thread-23611] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:12:15.660 [DEBUG] [Thread-23611] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:12:15.660 [DEBUG] [Thread-23611] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:12:15.660 [DEBUG] [Thread-23611] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:12:15.660 [DEBUG] [Thread-23611] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:12:15.660 [DEBUG] [Thread-23611] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:12:15.660 [DEBUG] [Thread-23611] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:12:15.660 [DEBUG] [Thread-23611] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:12:15.661 [DEBUG] [Thread-23611] [transport.py] [_log()] client lang: <none>
2025-11-12T22:12:15.661 [DEBUG] [Thread-23611] [transport.py] [_log()] server lang: <none>
2025-11-12T22:12:15.661 [DEBUG] [Thread-23611] [transport.py] [_log()] kex follows: False
2025-11-12T22:12:15.661 [DEBUG] [Thread-23611] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:12:15.661 [DEBUG] [Thread-23611] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:12:15.661 [DEBUG] [Thread-23611] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:12:15.661 [DEBUG] [Thread-23611] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:12:15.661 [DEBUG] [Thread-23611] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:12:15.662 [DEBUG] [Thread-23611] [transport.py] [_log()] Compression: none
2025-11-12T22:12:15.662 [DEBUG] [Thread-23611] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:12:15.718 [DEBUG] [Thread-23611] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:12:15.719 [DEBUG] [Thread-23611] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:12:15.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:12:15.720 [DEBUG] [Thread-23611] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:12:15.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:12:15.773 [DEBUG] [Thread-23611] [transport.py] [_log()] userauth is OK
2025-11-12T22:12:15.774 [DEBUG] [Thread-23611] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:12:15.774 [DEBUG] [Thread-23611] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:12:15.774 [DEBUG] [Thread-23611] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:12:15.774 [DEBUG] [Thread-23611] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:12:15.792 [INFO] [Thread-23611] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:12: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-11-12T22:12:15.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:12:16.657 [DEBUG] [Thread-23611] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:12:16.657 [DEBUG] [Thread-23611] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:12:16.706 [DEBUG] [Thread-23611] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:12:16.706 [DEBUG] [Thread-23611] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:12:16.716 [DEBUG] [Thread-23611] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:12:16.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:12:16.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-11-12T22:12:16.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-11-12T22:12:16.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:12:16.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:12:16.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:12:16.754 [DEBUG] [Thread-23611] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:12:25.190 [DEBUG] [Thread-23613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:12:40.252 [DEBUG] [Thread-23614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:12:46.776 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:12:46.776 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:12:46.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:12:47.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 12, 35), 11.17, 47.76, 0.0, 12.19, 17.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:12:47.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:12:35
2025-11-12T22:12:47.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:12:47.746 [DEBUG] [Thread-23615] [transport.py] [_log()] starting thread (client mode): 0x149477f0
2025-11-12T22:12:47.746 [DEBUG] [Thread-23615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:12:47.770 [DEBUG] [Thread-23615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:12:47.770 [INFO] [Thread-23615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:12:47.771 [DEBUG] [Thread-23615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:12:47.771 [DEBUG] [Thread-23615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] client lang: <none>
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] server lang: <none>
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] kex follows: False
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] Compression: none
2025-11-12T22:12:47.772 [DEBUG] [Thread-23615] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:12:47.780 [DEBUG] [Thread-23615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:12:47.780 [DEBUG] [Thread-23615] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:12:47.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:12:47.780 [DEBUG] [Thread-23615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:12:47.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:12:47.780 [DEBUG] [Thread-23615] [transport.py] [_log()] userauth is OK
2025-11-12T22:12:47.781 [DEBUG] [Thread-23615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:12:47.781 [DEBUG] [Thread-23615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:12:47.781 [DEBUG] [Thread-23615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:12:47.781 [DEBUG] [Thread-23615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:12:47.792 [INFO] [Thread-23615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:12:47.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:12:48.371 [DEBUG] [Thread-23615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:12:48.371 [DEBUG] [Thread-23615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:12:48.371 [DEBUG] [Thread-23615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:12:48.412 [DEBUG] [Thread-23615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:12:48.412 [DEBUG] [Thread-23615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:12:48.414 [DEBUG] [Thread-23615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:12:48.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:12:48.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:12:48.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:12:48.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:12:48.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:12:48.432 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:12:48.432 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:12:48.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.841750 -999.00  +17.20   8.82     52   +7.20 1 1 1 1 1     0    0 8.47 -59.79 ZNESW 7.5 8.8 222.1 13.1 17.9 -22.2 17.8 -21.2 17.6 -21.0 17.9 -21.6
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.841750
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:12:48.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:12:35', tmtdew=11.17, humidity=47.76, cloud=0.0, wind=12.19, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:12:35', seeing=0.85, atlas_timestamp='2025-11-12T20:12:07.200', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:10:00')
2025-11-12T22:12:48.434 [DEBUG] [Thread-23615] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:12:48.508 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:12:48.519 [DEBUG] [Thread-23618] [transport.py] [_log()] starting thread (client mode): 0x149446a0
2025-11-12T22:12:48.519 [DEBUG] [Thread-23618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:12:48.536 [DEBUG] [Thread-23618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:12:48.536 [INFO] [Thread-23618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:12:48.543 [DEBUG] [Thread-23618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:12:48.543 [DEBUG] [Thread-23618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:12:48.543 [DEBUG] [Thread-23618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:12:48.543 [DEBUG] [Thread-23618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] client lang: <none>
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] server lang: <none>
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] kex follows: False
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] Compression: none
2025-11-12T22:12:48.544 [DEBUG] [Thread-23618] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:12:48.603 [DEBUG] [Thread-23618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:12:48.603 [DEBUG] [Thread-23618] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:12:48.604 [DEBUG] [Thread-23618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:12:48.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:12:48.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:12:48.661 [DEBUG] [Thread-23618] [transport.py] [_log()] userauth is OK
2025-11-12T22:12:48.661 [DEBUG] [Thread-23618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:12:48.661 [DEBUG] [Thread-23618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:12:48.661 [DEBUG] [Thread-23618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:12:48.661 [DEBUG] [Thread-23618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:12:48.676 [INFO] [Thread-23618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:12:48.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:12:48.676 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:12:49.608 [DEBUG] [Thread-23618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:12:49.608 [DEBUG] [Thread-23618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:12:49.656 [DEBUG] [Thread-23618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:12:49.656 [DEBUG] [Thread-23618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:12:49.666 [DEBUG] [Thread-23618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:12:49.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:12:49.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')
2025-11-12T22:12:49.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-11-12T22:12:49.694 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:12:49.694 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:12:49.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:12:49.703 [DEBUG] [Thread-23618] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:12:55.286 [DEBUG] [Thread-23620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:12:58.088 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:12:58.089 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:12:58.273 [DEBUG] [Thread-23621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:13:10.333 [DEBUG] [Thread-23622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:13:19.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:13:19.719 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:13:19.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-11-12T22:13:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 13, 7), 11.17, 47.77, 0.0, 13.02, 17.1, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:13:20.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:13:07
2025-11-12T22:13:20.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:13:20.635 [DEBUG] [Thread-23623] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T22:13:20.635 [DEBUG] [Thread-23623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:13:20.655 [DEBUG] [Thread-23623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:13:20.655 [INFO] [Thread-23623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:13:20.658 [DEBUG] [Thread-23623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:13:20.658 [DEBUG] [Thread-23623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] client lang: <none>
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] server lang: <none>
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] kex follows: False
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:13:20.659 [DEBUG] [Thread-23623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:13:20.660 [DEBUG] [Thread-23623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:13:20.660 [DEBUG] [Thread-23623] [transport.py] [_log()] Compression: none
2025-11-12T22:13:20.660 [DEBUG] [Thread-23623] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:13:20.677 [DEBUG] [Thread-23623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:13:20.678 [DEBUG] [Thread-23623] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:13:20.678 [DEBUG] [Thread-23623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:13:20.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:13:20.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:13:20.680 [DEBUG] [Thread-23623] [transport.py] [_log()] userauth is OK
2025-11-12T22:13:20.680 [DEBUG] [Thread-23623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:13:20.680 [DEBUG] [Thread-23623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:13:20.680 [DEBUG] [Thread-23623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:13:20.681 [DEBUG] [Thread-23623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:13:20.704 [INFO] [Thread-23623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:13:20.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:13:21.346 [DEBUG] [Thread-23623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:13:21.346 [DEBUG] [Thread-23623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:13:21.346 [DEBUG] [Thread-23623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:13:21.386 [DEBUG] [Thread-23623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:13:21.387 [DEBUG] [Thread-23623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:13:21.390 [DEBUG] [Thread-23623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:13:21.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:13:21.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:13:21.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:13:21.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:13:21.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:13:21.416 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:13:21.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:13:21.416 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:13:21.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:13:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.842444 -999.00  +17.20   7.70     52   +7.20 1 1 1 1 1     0    0 8.88 -54.50 ZNESW 7.2 7.7 219.7 13.6 17.9 -22.3 17.8 -21.3 17.5 -20.9 17.9 -21.8
2025-11-12T22:13:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:13:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:13:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.842444
2025-11-12T22:13:21.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:13:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:13:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:13:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:13:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:13:21.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:13:07', tmtdew=11.17, humidity=47.77, cloud=0.0, wind=13.02, temperature=17.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:13:07', seeing=0.81, atlas_timestamp='2025-11-12T20:13:07.162', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:10:00')
2025-11-12T22:13:21.419 [DEBUG] [Thread-23623] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:13:21.503 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:13:21.515 [DEBUG] [Thread-23626] [transport.py] [_log()] starting thread (client mode): 0x149447c0
2025-11-12T22:13:21.516 [DEBUG] [Thread-23626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:13:21.531 [DEBUG] [Thread-23626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:13:21.531 [INFO] [Thread-23626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] client lang: <none>
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] server lang: <none>
2025-11-12T22:13:21.539 [DEBUG] [Thread-23626] [transport.py] [_log()] kex follows: False
2025-11-12T22:13:21.540 [DEBUG] [Thread-23626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:13:21.540 [DEBUG] [Thread-23626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:13:21.540 [DEBUG] [Thread-23626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:13:21.540 [DEBUG] [Thread-23626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:13:21.540 [DEBUG] [Thread-23626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:13:21.540 [DEBUG] [Thread-23626] [transport.py] [_log()] Compression: none
2025-11-12T22:13:21.540 [DEBUG] [Thread-23626] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:13:21.597 [DEBUG] [Thread-23626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:13:21.598 [DEBUG] [Thread-23626] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:13:21.598 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:13:21.599 [DEBUG] [Thread-23626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:13:21.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:13:21.654 [DEBUG] [Thread-23626] [transport.py] [_log()] userauth is OK
2025-11-12T22:13:21.654 [DEBUG] [Thread-23626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:13:21.654 [DEBUG] [Thread-23626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:13:21.655 [DEBUG] [Thread-23626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:13:21.655 [DEBUG] [Thread-23626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:13:21.679 [INFO] [Thread-23626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:13:21.679 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:13:21.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:13:22.495 [DEBUG] [Thread-23626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:13:22.495 [DEBUG] [Thread-23626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:13:22.543 [DEBUG] [Thread-23626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:13:22.543 [DEBUG] [Thread-23626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:13:22.551 [DEBUG] [Thread-23626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:13:22.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:13:22.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-11-12T22:13: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') -> 00000000
2025-11-12T22:13:22.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:13:22.575 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:13:22.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:13:22.583 [DEBUG] [Thread-23626] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:13:25.369 [DEBUG] [Thread-23628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:13:40.408 [DEBUG] [Thread-23629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:13:52.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:13:52.606 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:13:52.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-11-12T22:13:53.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 13, 39), 11.2, 47.68, 0.0, 12.69, 17.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:13:53.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:13:39
2025-11-12T22:13:53.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:13:53.512 [DEBUG] [Thread-23630] [transport.py] [_log()] starting thread (client mode): 0x14905bd0
2025-11-12T22:13:53.512 [DEBUG] [Thread-23630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:13:53.533 [DEBUG] [Thread-23630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:13:53.534 [INFO] [Thread-23630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] client lang: <none>
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] server lang: <none>
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] kex follows: False
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] Compression: none
2025-11-12T22:13:53.537 [DEBUG] [Thread-23630] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:13:53.557 [DEBUG] [Thread-23630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:13:53.557 [DEBUG] [Thread-23630] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:13:53.558 [DEBUG] [Thread-23630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:13:53.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:13:53.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:13:53.560 [DEBUG] [Thread-23630] [transport.py] [_log()] userauth is OK
2025-11-12T22:13:53.560 [DEBUG] [Thread-23630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:13:53.560 [DEBUG] [Thread-23630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:13:53.560 [DEBUG] [Thread-23630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:13:53.561 [DEBUG] [Thread-23630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:13:53.596 [INFO] [Thread-23630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:13:53.597 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:13:54.183 [DEBUG] [Thread-23630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:13:54.184 [DEBUG] [Thread-23630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:13:54.184 [DEBUG] [Thread-23630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:13:54.224 [DEBUG] [Thread-23630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:13:54.225 [DEBUG] [Thread-23630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:13:54.229 [DEBUG] [Thread-23630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:13:54.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:13:54.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:13:54.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:13:54.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:13:54.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:13:54.252 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:13:54.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:13:54.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:13:54.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:13:54.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.842791 -999.00  +17.20   5.41     52   +7.20 1 1 1 1 1     0    0 8.41 -53.36 ZNESW 8.2 5.4 224.5 12.7 17.9 -22.4 17.8 -21.3 17.6 -21.1 17.8 -21.6
2025-11-12T22:13:54.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:13:54.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:13:54.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.842791
2025-11-12T22:13:54.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:13:54.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:13:54.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:13:54.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:13:54.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:13:54.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:13:39', tmtdew=11.2, humidity=47.68, cloud=0.0, wind=12.69, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:13:39', seeing=0.81, atlas_timestamp='2025-11-12T20:13:37.142', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:10:00')
2025-11-12T22:13:54.255 [DEBUG] [Thread-23630] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:13:54.349 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:13:54.360 [DEBUG] [Thread-23633] [transport.py] [_log()] starting thread (client mode): 0x19dd9c60
2025-11-12T22:13:54.361 [DEBUG] [Thread-23633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:13:54.377 [DEBUG] [Thread-23633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:13:54.377 [INFO] [Thread-23633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] client lang: <none>
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] server lang: <none>
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] kex follows: False
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:13:54.385 [DEBUG] [Thread-23633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:13:54.386 [DEBUG] [Thread-23633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:13:54.386 [DEBUG] [Thread-23633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:13:54.386 [DEBUG] [Thread-23633] [transport.py] [_log()] Compression: none
2025-11-12T22:13:54.386 [DEBUG] [Thread-23633] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:13:54.445 [DEBUG] [Thread-23633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:13:54.446 [DEBUG] [Thread-23633] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:13:54.446 [DEBUG] [Thread-23633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:13:54.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:13:54.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:13:54.501 [DEBUG] [Thread-23633] [transport.py] [_log()] userauth is OK
2025-11-12T22:13:54.502 [DEBUG] [Thread-23633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:13:54.502 [DEBUG] [Thread-23633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:13:54.502 [DEBUG] [Thread-23633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:13:54.502 [DEBUG] [Thread-23633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:13:54.521 [INFO] [Thread-23633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:13:54.521 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:13:54.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:13:55.325 [DEBUG] [Thread-23633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:13:55.325 [DEBUG] [Thread-23633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:13:55.373 [DEBUG] [Thread-23633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:13:55.373 [DEBUG] [Thread-23633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:13:55.383 [DEBUG] [Thread-23633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:13:55.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:13:55.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:13:55.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-11-12T22:13:55.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:13:55.411 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:13:55.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:13:55.419 [DEBUG] [Thread-23633] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:13:55.443 [DEBUG] [Thread-23635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:13:58.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:13:58.295 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:13:58.341 [DEBUG] [Thread-23636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:14:10.501 [DEBUG] [Thread-23637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:14:25.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:14:25.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:14:25.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:14:25.536 [DEBUG] [Thread-23638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:14:26.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 14, 11), 11.18, 47.73, 0.0, 12.7, 17.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:14:26.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:14:11
2025-11-12T22:14:26.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:14:26.352 [DEBUG] [Thread-23639] [transport.py] [_log()] starting thread (client mode): 0x149441f0
2025-11-12T22:14:26.352 [DEBUG] [Thread-23639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:14:26.372 [DEBUG] [Thread-23639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:14:26.372 [INFO] [Thread-23639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] client lang: <none>
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] server lang: <none>
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] kex follows: False
2025-11-12T22:14:26.375 [DEBUG] [Thread-23639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:14:26.376 [DEBUG] [Thread-23639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:14:26.376 [DEBUG] [Thread-23639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:14:26.376 [DEBUG] [Thread-23639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:14:26.376 [DEBUG] [Thread-23639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:14:26.376 [DEBUG] [Thread-23639] [transport.py] [_log()] Compression: none
2025-11-12T22:14:26.376 [DEBUG] [Thread-23639] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:14:26.396 [DEBUG] [Thread-23639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:14:26.397 [DEBUG] [Thread-23639] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:14:26.397 [DEBUG] [Thread-23639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:14:26.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:14:26.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:14:26.399 [DEBUG] [Thread-23639] [transport.py] [_log()] userauth is OK
2025-11-12T22:14:26.400 [DEBUG] [Thread-23639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:14:26.400 [DEBUG] [Thread-23639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:14:26.400 [DEBUG] [Thread-23639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:14:26.400 [DEBUG] [Thread-23639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:14:26.437 [INFO] [Thread-23639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:14:26.437 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:14:27.059 [DEBUG] [Thread-23639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:14:27.059 [DEBUG] [Thread-23639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:14:27.059 [DEBUG] [Thread-23639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:14:27.100 [DEBUG] [Thread-23639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:14:27.100 [DEBUG] [Thread-23639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:14:27.103 [DEBUG] [Thread-23639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:14:27.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:14:27.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:14:27.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:14:27.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:14:27.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:14:27.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:14:27.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:14:27.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:14:27.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:14:27.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.843138 -999.00  +17.20   5.62     51   +7.20 1 1 1 1 1     0    0 8.76 -51.66 ZNESW 5.8 5.6 195.0 10.9 17.8 -22.3 17.8 -21.4 17.6 -21.0 17.9 -21.8
2025-11-12T22:14:27.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:14:27.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:14:27.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.843138
2025-11-12T22:14:27.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:14:27.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:14:27.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:14:27.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:14:27.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:14:27.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:14:11', tmtdew=11.18, humidity=47.73, cloud=0.0, wind=12.7, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:14:11', seeing=0.82, atlas_timestamp='2025-11-12T20:14:07.123', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:13:00')
2025-11-12T22:14:27.130 [DEBUG] [Thread-23639] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:14:27.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:14:27.225 [DEBUG] [Thread-23642] [transport.py] [_log()] starting thread (client mode): 0x173bd240
2025-11-12T22:14:27.226 [DEBUG] [Thread-23642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:14:27.240 [DEBUG] [Thread-23642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:14:27.240 [INFO] [Thread-23642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:14:27.248 [DEBUG] [Thread-23642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:14:27.248 [DEBUG] [Thread-23642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:14:27.248 [DEBUG] [Thread-23642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:14:27.248 [DEBUG] [Thread-23642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] client lang: <none>
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] server lang: <none>
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] kex follows: False
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] Compression: none
2025-11-12T22:14:27.249 [DEBUG] [Thread-23642] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:14:27.306 [DEBUG] [Thread-23642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:14:27.306 [DEBUG] [Thread-23642] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:14:27.307 [DEBUG] [Thread-23642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:14:27.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:14:27.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:14:27.362 [DEBUG] [Thread-23642] [transport.py] [_log()] userauth is OK
2025-11-12T22:14:27.363 [DEBUG] [Thread-23642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:14:27.363 [DEBUG] [Thread-23642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:14:27.363 [DEBUG] [Thread-23642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:14:27.363 [DEBUG] [Thread-23642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:14:27.382 [INFO] [Thread-23642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:14:27.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:14:27.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:14:28.247 [DEBUG] [Thread-23642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:14:28.247 [DEBUG] [Thread-23642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:14:28.298 [DEBUG] [Thread-23642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:14:28.298 [DEBUG] [Thread-23642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:14:28.310 [DEBUG] [Thread-23642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:14:28.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:14:28.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:14:28.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:14:28.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:14:28.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:14:28.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:14:28.346 [DEBUG] [Thread-23642] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:14:40.566 [DEBUG] [Thread-23644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:14:55.607 [DEBUG] [Thread-23645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:14:58.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:14:58.342 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:14:58.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-11-12T22:14:58.405 [DEBUG] [Thread-23646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:14:58.500 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:14:58.501 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:14:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 14, 43), 11.21, 47.64, 0.0, 12.3, 17.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:14:58.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:14:43
2025-11-12T22:14:59.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:14:59.255 [DEBUG] [Thread-23647] [transport.py] [_log()] starting thread (client mode): 0x19dd8cd0
2025-11-12T22:14:59.255 [DEBUG] [Thread-23647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:14:59.274 [DEBUG] [Thread-23647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:14:59.274 [INFO] [Thread-23647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] client lang: <none>
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] server lang: <none>
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] kex follows: False
2025-11-12T22:14:59.277 [DEBUG] [Thread-23647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:14:59.278 [DEBUG] [Thread-23647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:14:59.278 [DEBUG] [Thread-23647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:14:59.278 [DEBUG] [Thread-23647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:14:59.278 [DEBUG] [Thread-23647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:14:59.278 [DEBUG] [Thread-23647] [transport.py] [_log()] Compression: none
2025-11-12T22:14:59.278 [DEBUG] [Thread-23647] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:14:59.294 [DEBUG] [Thread-23647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:14:59.295 [DEBUG] [Thread-23647] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:14:59.295 [DEBUG] [Thread-23647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:14:59.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:14:59.296 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:14:59.298 [DEBUG] [Thread-23647] [transport.py] [_log()] userauth is OK
2025-11-12T22:14:59.298 [DEBUG] [Thread-23647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:14:59.298 [DEBUG] [Thread-23647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:14:59.298 [DEBUG] [Thread-23647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:14:59.298 [DEBUG] [Thread-23647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:14:59.317 [INFO] [Thread-23647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:14:59.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:14:59.928 [DEBUG] [Thread-23647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:14:59.928 [DEBUG] [Thread-23647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:14:59.929 [DEBUG] [Thread-23647] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:14:59.969 [DEBUG] [Thread-23647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:14:59.970 [DEBUG] [Thread-23647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:14:59.972 [DEBUG] [Thread-23647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:14:59.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:14:59.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:14:59.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:14:59.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:14:59.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:14:59.990 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:14:59.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:14:59.991 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:14:59.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:14:59.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.843486 -999.00  +17.20   6.20     51   +7.20 1 1 1 1 1     0    0 8.75 -48.06 ZNESW 9.9 6.2 267.7 9.9 17.9 -22.3 17.8 -21.4 17.6 -21.1 17.9 -21.6
2025-11-12T22:14:59.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:14:59.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:14:59.991 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.843486
2025-11-12T22:14:59.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:14:59.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:14:59.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:14:59.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:14:59.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:14:59.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:14:43', tmtdew=11.21, humidity=47.64, cloud=0.0, wind=12.3, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:14:43', seeing=0.9, atlas_timestamp='2025-11-12T20:14:37.190', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:13:00')
2025-11-12T22:14:59.993 [DEBUG] [Thread-23647] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:15:00.077 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:15:00.089 [DEBUG] [Thread-23650] [transport.py] [_log()] starting thread (client mode): 0x14947670
2025-11-12T22:15:00.089 [DEBUG] [Thread-23650] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:15:00.103 [DEBUG] [Thread-23650] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:15:00.103 [INFO] [Thread-23650] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] client lang: <none>
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] server lang: <none>
2025-11-12T22:15:00.111 [DEBUG] [Thread-23650] [transport.py] [_log()] kex follows: False
2025-11-12T22:15:00.112 [DEBUG] [Thread-23650] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:15:00.112 [DEBUG] [Thread-23650] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:15:00.112 [DEBUG] [Thread-23650] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:15:00.112 [DEBUG] [Thread-23650] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:15:00.112 [DEBUG] [Thread-23650] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:15:00.112 [DEBUG] [Thread-23650] [transport.py] [_log()] Compression: none
2025-11-12T22:15:00.112 [DEBUG] [Thread-23650] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:15:00.169 [DEBUG] [Thread-23650] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:15:00.170 [DEBUG] [Thread-23650] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:15:00.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:15:00.171 [DEBUG] [Thread-23650] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:15:00.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:15:00.226 [DEBUG] [Thread-23650] [transport.py] [_log()] userauth is OK
2025-11-12T22:15:00.226 [DEBUG] [Thread-23650] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:15:00.226 [DEBUG] [Thread-23650] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:15:00.226 [DEBUG] [Thread-23650] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:15:00.226 [DEBUG] [Thread-23650] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:15:00.245 [INFO] [Thread-23650] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:15:00.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:15:00.246 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:15:01.058 [DEBUG] [Thread-23650] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:15:01.059 [DEBUG] [Thread-23650] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:15:01.106 [DEBUG] [Thread-23650] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:15:01.106 [DEBUG] [Thread-23650] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:15:01.115 [DEBUG] [Thread-23650] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:15:01.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:15:01.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-11-12T22:15:01.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:15:01.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:15:01.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:15:01.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:15:01.149 [DEBUG] [Thread-23650] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:15:10.645 [DEBUG] [Thread-23652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:15:25.691 [DEBUG] [Thread-23653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:15:31.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:15:31.152 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:15:31.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-11-12T22:15:31.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 15, 15), 11.16, 47.79, 0.0, 12.55, 17.05, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:15:31.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:15:15
2025-11-12T22:15:31.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:15:32.062 [DEBUG] [Thread-23654] [transport.py] [_log()] starting thread (client mode): 0x11f03280
2025-11-12T22:15:32.062 [DEBUG] [Thread-23654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:15:32.088 [DEBUG] [Thread-23654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:15:32.089 [INFO] [Thread-23654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:15:32.089 [DEBUG] [Thread-23654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] client lang: <none>
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] server lang: <none>
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] kex follows: False
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] Compression: none
2025-11-12T22:15:32.090 [DEBUG] [Thread-23654] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:15:32.100 [DEBUG] [Thread-23654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:15:32.100 [DEBUG] [Thread-23654] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:15:32.101 [DEBUG] [Thread-23654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:15:32.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:15:32.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:15:32.103 [DEBUG] [Thread-23654] [transport.py] [_log()] userauth is OK
2025-11-12T22:15:32.103 [DEBUG] [Thread-23654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:15:32.103 [DEBUG] [Thread-23654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:15:32.103 [DEBUG] [Thread-23654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:15:32.103 [DEBUG] [Thread-23654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:15:32.122 [INFO] [Thread-23654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:15:32.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:15:32.676 [DEBUG] [Thread-23654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:15:32.676 [DEBUG] [Thread-23654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:15:32.677 [DEBUG] [Thread-23654] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:15:32.718 [DEBUG] [Thread-23654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:15:32.718 [DEBUG] [Thread-23654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:15:32.722 [DEBUG] [Thread-23654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:15:32.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:15:32.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:15:32.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:15:32.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:15:32.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:15:32.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:15:32.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:15:32.745 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:15:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:15:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.843832 -999.00  +17.20   3.08     51   +7.20 1 1 1 1 1     0    0 8.92 -44.50 ZNESW 9.6 3.1 208.0 13.9 17.9 -22.2 17.8 -21.3 17.5 -20.9 17.8 -21.6
2025-11-12T22:15:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:15:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:15:32.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.843832
2025-11-12T22:15:32.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:15:32.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:15:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:15:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:15:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:15:32.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:15:15', tmtdew=11.16, humidity=47.79, cloud=0.0, wind=12.55, temperature=17.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:15:15', seeing=0.9, atlas_timestamp='2025-11-12T20:15:07.085', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:13:00')
2025-11-12T22:15:32.748 [DEBUG] [Thread-23654] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:15:32.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:15:32.845 [DEBUG] [Thread-23657] [transport.py] [_log()] starting thread (client mode): 0x11f034f0
2025-11-12T22:15:32.845 [DEBUG] [Thread-23657] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:15:32.859 [DEBUG] [Thread-23657] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:15:32.859 [INFO] [Thread-23657] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:15:32.866 [DEBUG] [Thread-23657] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] client lang: <none>
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] server lang: <none>
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] kex follows: False
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:15:32.867 [DEBUG] [Thread-23657] [transport.py] [_log()] Compression: none
2025-11-12T22:15:32.868 [DEBUG] [Thread-23657] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:15:32.925 [DEBUG] [Thread-23657] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:15:32.925 [DEBUG] [Thread-23657] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:15:32.926 [DEBUG] [Thread-23657] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:15:32.926 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:15:32.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:15:32.981 [DEBUG] [Thread-23657] [transport.py] [_log()] userauth is OK
2025-11-12T22:15:32.982 [DEBUG] [Thread-23657] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:15:32.982 [DEBUG] [Thread-23657] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:15:32.982 [DEBUG] [Thread-23657] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:15:32.982 [DEBUG] [Thread-23657] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:15:33.000 [INFO] [Thread-23657] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:15:33.001 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:15:33.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:15:33.813 [DEBUG] [Thread-23657] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:15:33.814 [DEBUG] [Thread-23657] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:15:33.863 [DEBUG] [Thread-23657] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:15:33.863 [DEBUG] [Thread-23657] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:15:33.878 [DEBUG] [Thread-23657] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:15:33.887 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:15:33.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:15:33.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-11-12T22:15:33.906 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:15:33.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:15:33.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:15:33.915 [DEBUG] [Thread-23657] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:15:40.729 [DEBUG] [Thread-23659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:15:55.782 [DEBUG] [Thread-23660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:15:58.461 [DEBUG] [Thread-23661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:15:58.705 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:15:58.706 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:16:03.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:16:03.938 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:16:03.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:16:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 15, 47), 11.13, 47.73, 0.0, 10.31, 17.08, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:16:04.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:15:47
2025-11-12T22:16:04.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:16:04.858 [DEBUG] [Thread-23662] [transport.py] [_log()] starting thread (client mode): 0x11f02530
2025-11-12T22:16:04.858 [DEBUG] [Thread-23662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:16:04.872 [DEBUG] [Thread-23662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:16:04.872 [INFO] [Thread-23662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:16:04.874 [DEBUG] [Thread-23662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:16:04.874 [DEBUG] [Thread-23662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:16:04.874 [DEBUG] [Thread-23662] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:16:04.874 [DEBUG] [Thread-23662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:16:04.874 [DEBUG] [Thread-23662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:16:04.874 [DEBUG] [Thread-23662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:16:04.874 [DEBUG] [Thread-23662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] client lang: <none>
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] server lang: <none>
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] kex follows: False
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] Compression: none
2025-11-12T22:16:04.875 [DEBUG] [Thread-23662] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:16:04.887 [DEBUG] [Thread-23662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:16:04.887 [DEBUG] [Thread-23662] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:16:04.888 [DEBUG] [Thread-23662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:16:04.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:16:04.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:16:04.889 [DEBUG] [Thread-23662] [transport.py] [_log()] userauth is OK
2025-11-12T22:16:04.889 [DEBUG] [Thread-23662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:16:04.889 [DEBUG] [Thread-23662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:16:04.889 [DEBUG] [Thread-23662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:16:04.890 [DEBUG] [Thread-23662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:16:04.902 [INFO] [Thread-23662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:16:04.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:16:05.444 [DEBUG] [Thread-23662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:16:05.445 [DEBUG] [Thread-23662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:16:05.445 [DEBUG] [Thread-23662] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:16:05.485 [DEBUG] [Thread-23662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:16:05.486 [DEBUG] [Thread-23662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:16:05.488 [DEBUG] [Thread-23662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:16:05.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:16:05.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:16:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:16:05.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:16:05.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:16:05.509 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:16:05.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:16:05.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:16:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:16:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.844180 -999.00  +17.10   5.85     51   +7.20 1 1 1 1 1     0    0 8.49 -49.95 ZNESW 6.7 5.8 223.4 14.5 17.8 -22.2 17.8 -21.3 17.6 -21.0 17.8 -21.6
2025-11-12T22:16:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:16:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:16:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.844180
2025-11-12T22:16:05.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:16:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:16:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:16:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:16:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:16:05.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:15:47', tmtdew=11.13, humidity=47.73, cloud=0.0, wind=10.31, temperature=17.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:15:47', seeing=0.99, atlas_timestamp='2025-11-12T20:15:37.152', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:13:00')
2025-11-12T22:16:05.512 [DEBUG] [Thread-23662] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:16:05.595 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:16:05.606 [DEBUG] [Thread-23665] [transport.py] [_log()] starting thread (client mode): 0x17399690
2025-11-12T22:16:05.607 [DEBUG] [Thread-23665] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:16:05.622 [DEBUG] [Thread-23665] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:16:05.622 [INFO] [Thread-23665] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] client lang: <none>
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] server lang: <none>
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] kex follows: False
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:16:05.629 [DEBUG] [Thread-23665] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:16:05.630 [DEBUG] [Thread-23665] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:16:05.630 [DEBUG] [Thread-23665] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:16:05.630 [DEBUG] [Thread-23665] [transport.py] [_log()] Compression: none
2025-11-12T22:16:05.630 [DEBUG] [Thread-23665] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:16:05.689 [DEBUG] [Thread-23665] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:16:05.690 [DEBUG] [Thread-23665] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:16:05.691 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:16:05.691 [DEBUG] [Thread-23665] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:16:05.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:16:05.745 [DEBUG] [Thread-23665] [transport.py] [_log()] userauth is OK
2025-11-12T22:16:05.746 [DEBUG] [Thread-23665] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:16:05.746 [DEBUG] [Thread-23665] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:16:05.746 [DEBUG] [Thread-23665] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:16:05.746 [DEBUG] [Thread-23665] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:16:05.765 [INFO] [Thread-23665] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:16:05.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:16:05.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:16:06.598 [DEBUG] [Thread-23665] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:16:06.599 [DEBUG] [Thread-23665] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:16:06.647 [DEBUG] [Thread-23665] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:16:06.647 [DEBUG] [Thread-23665] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:16:06.656 [DEBUG] [Thread-23665] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:16:06.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:16:06.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-11-12T22:16:06.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-11-12T22:16:06.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:16:06.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:16:06.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:16:06.693 [DEBUG] [Thread-23665] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:16:10.816 [DEBUG] [Thread-23667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:16:25.870 [DEBUG] [Thread-23668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:16:36.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:16:36.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:16:36.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-11-12T22:16:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 16, 19), 11.15, 47.66, 0.0, 12.21, 17.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:16:37.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:16:19
2025-11-12T22:16:37.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:16:37.684 [DEBUG] [Thread-23669] [transport.py] [_log()] starting thread (client mode): 0x1739bb20
2025-11-12T22:16:37.684 [DEBUG] [Thread-23669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:16:37.705 [DEBUG] [Thread-23669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:16:37.705 [INFO] [Thread-23669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] client lang: <none>
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] server lang: <none>
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] kex follows: False
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] Compression: none
2025-11-12T22:16:37.708 [DEBUG] [Thread-23669] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:16:37.723 [DEBUG] [Thread-23669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:16:37.723 [DEBUG] [Thread-23669] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:16:37.723 [DEBUG] [Thread-23669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:16:37.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:16:37.723 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:16:37.724 [DEBUG] [Thread-23669] [transport.py] [_log()] userauth is OK
2025-11-12T22:16:37.724 [DEBUG] [Thread-23669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:16:37.724 [DEBUG] [Thread-23669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:16:37.724 [DEBUG] [Thread-23669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:16:37.724 [DEBUG] [Thread-23669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:16:37.733 [INFO] [Thread-23669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:16:37.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:16:38.373 [DEBUG] [Thread-23669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:16:38.373 [DEBUG] [Thread-23669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:16:38.374 [DEBUG] [Thread-23669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:16:38.414 [DEBUG] [Thread-23669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:16:38.414 [DEBUG] [Thread-23669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:16:38.416 [DEBUG] [Thread-23669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:16:38.429 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:16:38.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:16:38.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:16:38.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:16:38.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:16:38.435 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:16:38.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.844180 -999.00  +17.10   5.85     51   +7.20 1 1 1 1 1     0    0 8.49 -49.95 ZNESW 6.7 5.8 223.4 14.5 17.8 -22.2 17.8 -21.3 17.6 -21.0 17.8 -21.6
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.844180
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:16:38.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:16:19', tmtdew=11.15, humidity=47.66, cloud=0.0, wind=12.21, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:16:19', seeing=0.85, atlas_timestamp='2025-11-12T20:15:37.152', atlas_cloud=1, atlas_rain=1, zp_data=[0.79725, 0.8427500000000006, 0.8652500000000005, 0.6519999999999992, 0.7725, 0.8817500000000011, 0.7709999999999999, 0.5962500000000004, 0.6494999999999997, 0.8070000000000004, 0.8317499999999995, 1.0430000000000001, 0.8605, 0.7572499999999991, 0.7959999999999994, 0.48499999999999943, 0.79725, 1.2645, 1.0334999999999992, 0.871249999999999, 0.7794999999999987, 1.199749999999999, 1.2257500000000006, 0.7307500000000005, 1.029, 0.7949999999999999, 1.2517500000000004, 1.2865000000000002, 0.7015000000000002, nan, nan, 1.4610000000000012, 0.32674999999999876], zp_timestamp='2025-11-12T20:13:00')
2025-11-12T22:16:38.436 [DEBUG] [Thread-23669] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:16:38.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:16:38.522 [DEBUG] [Thread-23672] [transport.py] [_log()] starting thread (client mode): 0x11f03c40
2025-11-12T22:16:38.523 [DEBUG] [Thread-23672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:16:38.537 [DEBUG] [Thread-23672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:16:38.537 [INFO] [Thread-23672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] client lang: <none>
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] server lang: <none>
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] kex follows: False
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] Compression: none
2025-11-12T22:16:38.545 [DEBUG] [Thread-23672] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:16:38.599 [DEBUG] [Thread-23672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:16:38.599 [DEBUG] [Thread-23672] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:16:38.599 [DEBUG] [Thread-23672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:16:38.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:16:38.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:16:38.657 [DEBUG] [Thread-23672] [transport.py] [_log()] userauth is OK
2025-11-12T22:16:38.657 [DEBUG] [Thread-23672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:16:38.657 [DEBUG] [Thread-23672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:16:38.657 [DEBUG] [Thread-23672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:16:38.657 [DEBUG] [Thread-23672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:16:38.671 [INFO] [Thread-23672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:16:38.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:16:38.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:16:39.489 [DEBUG] [Thread-23672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:16:39.489 [DEBUG] [Thread-23672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:16:39.537 [DEBUG] [Thread-23672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:16:39.537 [DEBUG] [Thread-23672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:16:39.545 [DEBUG] [Thread-23672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:16:39.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:16:39.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-11-12T22:16:39.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-11-12T22:16:39.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:16:39.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:16:39.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:16:39.577 [DEBUG] [Thread-23672] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:16:40.903 [DEBUG] [Thread-23674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:16:55.944 [DEBUG] [Thread-23675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:16:58.517 [DEBUG] [Thread-23676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:16:58.920 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:16:58.921 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:17:09.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:17:09.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:17:09.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-11-12T22:17:10.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 16, 51), 11.12, 47.76, 0.0, 12.83, 17.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:17:10.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:16:51
2025-11-12T22:17:10.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:17:10.519 [DEBUG] [Thread-23677] [transport.py] [_log()] starting thread (client mode): 0x14920250
2025-11-12T22:17:10.519 [DEBUG] [Thread-23677] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:17:10.539 [DEBUG] [Thread-23677] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:17:10.539 [INFO] [Thread-23677] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:17:10.542 [DEBUG] [Thread-23677] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:17:10.542 [DEBUG] [Thread-23677] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:17:10.542 [DEBUG] [Thread-23677] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:17:10.542 [DEBUG] [Thread-23677] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:17:10.542 [DEBUG] [Thread-23677] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] client lang: <none>
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] server lang: <none>
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] kex follows: False
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:17:10.543 [DEBUG] [Thread-23677] [transport.py] [_log()] Compression: none
2025-11-12T22:17:10.544 [DEBUG] [Thread-23677] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:17:10.562 [DEBUG] [Thread-23677] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:17:10.562 [DEBUG] [Thread-23677] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:17:10.563 [DEBUG] [Thread-23677] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:17:10.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:17:10.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:17:10.566 [DEBUG] [Thread-23677] [transport.py] [_log()] userauth is OK
2025-11-12T22:17:10.566 [DEBUG] [Thread-23677] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:17:10.566 [DEBUG] [Thread-23677] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:17:10.566 [DEBUG] [Thread-23677] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:17:10.566 [DEBUG] [Thread-23677] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:17:10.585 [INFO] [Thread-23677] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:17:10.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:17:10.982 [DEBUG] [Thread-23679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:17:11.235 [DEBUG] [Thread-23677] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:17:11.235 [DEBUG] [Thread-23677] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:17:11.235 [DEBUG] [Thread-23677] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:17:11.275 [DEBUG] [Thread-23677] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:17:11.276 [DEBUG] [Thread-23677] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:17:11.279 [DEBUG] [Thread-23677] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:17:11.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:17:11.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:17:11.294 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:17:11.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:17:11.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:17:11.302 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:17:11.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:17:11.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:17:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:17:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.844875 -999.00  +17.10   3.46     51   +7.20 1 1 1 1 1     0    0 9.22 -42.61 ZNESW 3.4 3.5 199.7 10.0 17.8 -22.1 17.7 -21.2 17.5 -20.9 17.8 -21.6
2025-11-12T22:17:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:17:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:17:11.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.844875
2025-11-12T22:17:11.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:17:11.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:17:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:17:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:17:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T22:17:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:16:51', tmtdew=11.12, humidity=47.76, cloud=0.0, wind=12.83, temperature=17.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:16:51', seeing=0.81, atlas_timestamp='2025-11-12T20:16:37.200', atlas_cloud=1, atlas_rain=1, zp_data=[0.5947499999999994, 0.6432500000000001, 0.6272500000000001, 0.4794999999999998, 0.6530000000000005, 0.5192500000000004, 0.6219999999999999, 0.4562500000000007, 0.6504999999999992, 0.6624999999999996, 0.7102499999999994, 0.7010000000000005, 0.7389999999999999, 0.6482499999999991, 0.7684999999999995, 0.46199999999999974, 0.45425000000000004, 0.8309999999999995, 0.7829999999999995, 0.5822499999999984, 0.5299999999999985, 1.239749999999999, 1.300250000000001, 0.78775, 0.7319999999999993, 0.79, 0.8892500000000014, 1.1395, 0.7439999999999998, nan, nan, 0.7920000000000007, 0.9867499999999989], zp_timestamp='2025-11-12T20:16:00')
2025-11-12T22:17:11.305 [DEBUG] [Thread-23677] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:17:11.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:17:11.401 [DEBUG] [Thread-23681] [transport.py] [_log()] starting thread (client mode): 0x11f00850
2025-11-12T22:17:11.401 [DEBUG] [Thread-23681] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:17:11.416 [DEBUG] [Thread-23681] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:17:11.416 [INFO] [Thread-23681] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:17:11.424 [DEBUG] [Thread-23681] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:17:11.424 [DEBUG] [Thread-23681] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] client lang: <none>
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] server lang: <none>
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] kex follows: False
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] Compression: none
2025-11-12T22:17:11.425 [DEBUG] [Thread-23681] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:17:11.482 [DEBUG] [Thread-23681] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:17:11.482 [DEBUG] [Thread-23681] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:17:11.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:17:11.484 [DEBUG] [Thread-23681] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:17:11.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:17:11.538 [DEBUG] [Thread-23681] [transport.py] [_log()] userauth is OK
2025-11-12T22:17:11.538 [DEBUG] [Thread-23681] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:17:11.538 [DEBUG] [Thread-23681] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:17:11.538 [DEBUG] [Thread-23681] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:17:11.538 [DEBUG] [Thread-23681] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:17:11.557 [INFO] [Thread-23681] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:17:11.557 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:17:11.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:17:12.408 [DEBUG] [Thread-23681] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:17:12.408 [DEBUG] [Thread-23681] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:17:12.457 [DEBUG] [Thread-23681] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:17:12.457 [DEBUG] [Thread-23681] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:17:12.466 [DEBUG] [Thread-23681] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:17:12.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:17:12.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-11-12T22:17:12.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-11-12T22:17:12.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:17:12.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:17:12.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:17:12.503 [DEBUG] [Thread-23681] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:17:26.017 [DEBUG] [Thread-23683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:17:41.072 [DEBUG] [Thread-23684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:17:42.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:17:42.514 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:17: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-11-12T22:17:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 17, 23), 11.08, 47.87, 0.0, 13.02, 16.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:17:43.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:17:23
2025-11-12T22:17:43.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:17:43.418 [DEBUG] [Thread-23685] [transport.py] [_log()] starting thread (client mode): 0x11f00640
2025-11-12T22:17:43.419 [DEBUG] [Thread-23685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:17:43.439 [DEBUG] [Thread-23685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:17:43.439 [INFO] [Thread-23685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] client lang: <none>
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] server lang: <none>
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] kex follows: False
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:17:43.442 [DEBUG] [Thread-23685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:17:43.443 [DEBUG] [Thread-23685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:17:43.443 [DEBUG] [Thread-23685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:17:43.443 [DEBUG] [Thread-23685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:17:43.443 [DEBUG] [Thread-23685] [transport.py] [_log()] Compression: none
2025-11-12T22:17:43.443 [DEBUG] [Thread-23685] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:17:43.460 [DEBUG] [Thread-23685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:17:43.460 [DEBUG] [Thread-23685] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:17:43.461 [DEBUG] [Thread-23685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:17:43.461 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:17:43.462 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:17:43.463 [DEBUG] [Thread-23685] [transport.py] [_log()] userauth is OK
2025-11-12T22:17:43.463 [DEBUG] [Thread-23685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:17:43.463 [DEBUG] [Thread-23685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:17:43.463 [DEBUG] [Thread-23685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:17:43.464 [DEBUG] [Thread-23685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:17:43.488 [INFO] [Thread-23685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:17:43.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:17:44.107 [DEBUG] [Thread-23685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:17:44.107 [DEBUG] [Thread-23685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:17:44.107 [DEBUG] [Thread-23685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:17:44.148 [DEBUG] [Thread-23685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:17:44.148 [DEBUG] [Thread-23685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:17:44.151 [DEBUG] [Thread-23685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:17:44.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:17:44.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:17:44.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:17:44.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:17:44.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:17:44.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:17:44.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:17:44.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:17:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:17:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.845222 -999.00  +17.10   4.26     52   +7.20 1 2 1 1 1     0    0 8.98 -42.30 ZnESW 5.1 4.3 216.2 11.6 17.8 -22.2 17.8 -21.3 17.5 -20.9 17.8 -21.6
2025-11-12T22:17:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:17:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:17:44.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.845222
2025-11-12T22:17:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:17:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:17:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:17:44.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:17:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:17:44.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:17:23', tmtdew=11.08, humidity=47.87, cloud=0.0, wind=13.02, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:17:23', seeing=1.03, atlas_timestamp='2025-11-12T20:17:07.181', atlas_cloud=2, atlas_rain=1, zp_data=[0.5947499999999994, 0.6432500000000001, 0.6272500000000001, 0.4794999999999998, 0.6530000000000005, 0.5192500000000004, 0.6219999999999999, 0.4562500000000007, 0.6504999999999992, 0.6624999999999996, 0.7102499999999994, 0.7010000000000005, 0.7389999999999999, 0.6482499999999991, 0.7684999999999995, 0.46199999999999974, 0.45425000000000004, 0.8309999999999995, 0.7829999999999995, 0.5822499999999984, 0.5299999999999985, 1.239749999999999, 1.300250000000001, 0.78775, 0.7319999999999993, 0.79, 0.8892500000000014, 1.1395, 0.7439999999999998, nan, nan, 0.7920000000000007, 0.9867499999999989], zp_timestamp='2025-11-12T20:16:00')
2025-11-12T22:17:44.179 [DEBUG] [Thread-23685] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:17:44.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:17:44.274 [DEBUG] [Thread-23688] [transport.py] [_log()] starting thread (client mode): 0x14982200
2025-11-12T22:17:44.274 [DEBUG] [Thread-23688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:17:44.289 [DEBUG] [Thread-23688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:17:44.290 [INFO] [Thread-23688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:17:44.297 [DEBUG] [Thread-23688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:17:44.297 [DEBUG] [Thread-23688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:17:44.297 [DEBUG] [Thread-23688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:17:44.297 [DEBUG] [Thread-23688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:17:44.297 [DEBUG] [Thread-23688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:17:44.297 [DEBUG] [Thread-23688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:17:44.297 [DEBUG] [Thread-23688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] client lang: <none>
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] server lang: <none>
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] kex follows: False
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] Compression: none
2025-11-12T22:17:44.298 [DEBUG] [Thread-23688] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:17:44.353 [DEBUG] [Thread-23688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:17:44.354 [DEBUG] [Thread-23688] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:17:44.355 [DEBUG] [Thread-23688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:17:44.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:17:44.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:17:44.410 [DEBUG] [Thread-23688] [transport.py] [_log()] userauth is OK
2025-11-12T22:17:44.410 [DEBUG] [Thread-23688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:17:44.411 [DEBUG] [Thread-23688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:17:44.411 [DEBUG] [Thread-23688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:17:44.411 [DEBUG] [Thread-23688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:17:44.430 [INFO] [Thread-23688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:17:44.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:17:44.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:17:45.255 [DEBUG] [Thread-23688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:17:45.255 [DEBUG] [Thread-23688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:17:45.303 [DEBUG] [Thread-23688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:17:45.303 [DEBUG] [Thread-23688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:17:45.312 [DEBUG] [Thread-23688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:17:45.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:17:45.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:17: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') -> 00000000
2025-11-12T22:17:45.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:17:45.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:17:45.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:17:45.350 [DEBUG] [Thread-23688] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:17:56.109 [DEBUG] [Thread-23690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:17:58.569 [DEBUG] [Thread-23691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:17:59.128 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:17:59.129 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:18:11.153 [DEBUG] [Thread-23692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:18:15.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:18:15.373 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:18:15.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-11-12T22:18:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 17, 55), 11.09, 47.84, 0.0, 11.42, 16.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:18:16.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:17:55
2025-11-12T22:18:16.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:18:16.275 [DEBUG] [Thread-23693] [transport.py] [_log()] starting thread (client mode): 0x14920340
2025-11-12T22:18:16.275 [DEBUG] [Thread-23693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:18:16.295 [DEBUG] [Thread-23693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:18:16.296 [INFO] [Thread-23693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:18:16.298 [DEBUG] [Thread-23693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] client lang: <none>
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] server lang: <none>
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] kex follows: False
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] Compression: none
2025-11-12T22:18:16.299 [DEBUG] [Thread-23693] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:18:16.317 [DEBUG] [Thread-23693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:18:16.317 [DEBUG] [Thread-23693] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:18:16.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:18:16.318 [DEBUG] [Thread-23693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:18:16.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:18:16.321 [DEBUG] [Thread-23693] [transport.py] [_log()] userauth is OK
2025-11-12T22:18:16.321 [DEBUG] [Thread-23693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:18:16.321 [DEBUG] [Thread-23693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:18:16.321 [DEBUG] [Thread-23693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:18:16.321 [DEBUG] [Thread-23693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:18:16.356 [INFO] [Thread-23693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:18:16.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:18:16.986 [DEBUG] [Thread-23693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:18:16.986 [DEBUG] [Thread-23693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:18:16.986 [DEBUG] [Thread-23693] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:18:17.028 [DEBUG] [Thread-23693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:18:17.028 [DEBUG] [Thread-23693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:18:17.031 [DEBUG] [Thread-23693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:18:17.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:18:17.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:18:17.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:18:17.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:18:17.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:18:17.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:18:17.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:18:17.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:18:17.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:18:17.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.845569 -999.00  +17.10   6.10     51   +7.10 1 2 1 1 1     0    0 8.88 -40.81 ZnESW 6.9 6.1 205.3 10.6 17.8 -22.1 17.7 -21.3 17.5 -20.8 17.8 -21.5
2025-11-12T22:18:17.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:18:17.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:18:17.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.845569
2025-11-12T22:18:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:18:17.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:18:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:18:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:18:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:18:17.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:17:55', tmtdew=11.09, humidity=47.84, cloud=0.0, wind=11.42, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:17:55', seeing=1.03, atlas_timestamp='2025-11-12T20:17:37.162', atlas_cloud=2, atlas_rain=1, zp_data=[0.5947499999999994, 0.6432500000000001, 0.6272500000000001, 0.4794999999999998, 0.6530000000000005, 0.5192500000000004, 0.6219999999999999, 0.4562500000000007, 0.6504999999999992, 0.6624999999999996, 0.7102499999999994, 0.7010000000000005, 0.7389999999999999, 0.6482499999999991, 0.7684999999999995, 0.46199999999999974, 0.45425000000000004, 0.8309999999999995, 0.7829999999999995, 0.5822499999999984, 0.5299999999999985, 1.239749999999999, 1.300250000000001, 0.78775, 0.7319999999999993, 0.79, 0.8892500000000014, 1.1395, 0.7439999999999998, nan, nan, 0.7920000000000007, 0.9867499999999989], zp_timestamp='2025-11-12T20:16:00')
2025-11-12T22:18:17.056 [DEBUG] [Thread-23693] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:18:17.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:18:17.152 [DEBUG] [Thread-23696] [transport.py] [_log()] starting thread (client mode): 0x17399690
2025-11-12T22:18:17.152 [DEBUG] [Thread-23696] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:18:17.167 [DEBUG] [Thread-23696] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:18:17.167 [INFO] [Thread-23696] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:18:17.174 [DEBUG] [Thread-23696] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] client lang: <none>
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] server lang: <none>
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] kex follows: False
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:18:17.175 [DEBUG] [Thread-23696] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:18:17.176 [DEBUG] [Thread-23696] [transport.py] [_log()] Compression: none
2025-11-12T22:18:17.176 [DEBUG] [Thread-23696] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:18:17.233 [DEBUG] [Thread-23696] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:18:17.234 [DEBUG] [Thread-23696] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:18:17.235 [DEBUG] [Thread-23696] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:18:17.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:18:17.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:18:17.290 [DEBUG] [Thread-23696] [transport.py] [_log()] userauth is OK
2025-11-12T22:18:17.290 [DEBUG] [Thread-23696] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:18:17.291 [DEBUG] [Thread-23696] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:18:17.291 [DEBUG] [Thread-23696] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:18:17.291 [DEBUG] [Thread-23696] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:18:17.310 [INFO] [Thread-23696] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:18:17.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:18:17.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:18:18.183 [DEBUG] [Thread-23696] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:18:18.183 [DEBUG] [Thread-23696] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:18:18.231 [DEBUG] [Thread-23696] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:18:18.231 [DEBUG] [Thread-23696] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:18:18.241 [DEBUG] [Thread-23696] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:18:18.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:18:18.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:18:18.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:18:18.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:18:18.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:18:18.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:18:18.278 [DEBUG] [Thread-23696] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:18:26.191 [DEBUG] [Thread-23698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:18:41.247 [DEBUG] [Thread-23699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:18:48.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:18:48.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:18:48.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-11-12T22:18:48.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 18, 27), 11.11, 47.79, 0.0, 13.23, 16.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:18:48.938 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:18:27
2025-11-12T22:18:49.061 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:18:49.207 [DEBUG] [Thread-23700] [transport.py] [_log()] starting thread (client mode): 0x149a9960
2025-11-12T22:18:49.207 [DEBUG] [Thread-23700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:18:49.229 [DEBUG] [Thread-23700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:18:49.230 [INFO] [Thread-23700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:18:49.233 [DEBUG] [Thread-23700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:18:49.233 [DEBUG] [Thread-23700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:18:49.233 [DEBUG] [Thread-23700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:18:49.233 [DEBUG] [Thread-23700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] client lang: <none>
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] server lang: <none>
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] kex follows: False
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:18:49.234 [DEBUG] [Thread-23700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:18:49.235 [DEBUG] [Thread-23700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:18:49.235 [DEBUG] [Thread-23700] [transport.py] [_log()] Compression: none
2025-11-12T22:18:49.235 [DEBUG] [Thread-23700] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:18:49.254 [DEBUG] [Thread-23700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:18:49.254 [DEBUG] [Thread-23700] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:18:49.255 [DEBUG] [Thread-23700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:18:49.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:18:49.256 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:18:49.257 [DEBUG] [Thread-23700] [transport.py] [_log()] userauth is OK
2025-11-12T22:18:49.257 [DEBUG] [Thread-23700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:18:49.257 [DEBUG] [Thread-23700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:18:49.257 [DEBUG] [Thread-23700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:18:49.257 [DEBUG] [Thread-23700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:18:49.282 [INFO] [Thread-23700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:18:49.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:18:49.929 [DEBUG] [Thread-23700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:18:49.929 [DEBUG] [Thread-23700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:18:49.930 [DEBUG] [Thread-23700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:18:49.971 [DEBUG] [Thread-23700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:18:49.971 [DEBUG] [Thread-23700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:18:49.974 [DEBUG] [Thread-23700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:18:49.986 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:18:49.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:18:49.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:18:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:18:49.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:18:49.997 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:18:49.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:18:49.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:18:49.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:18:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.845916 -999.00  +17.10  11.92     52   +7.20 1 2 1 1 1     0    0 8.94 -37.89 ZnESW 7.4 11.9 217.4 14.0 17.8 -22.2 17.7 -21.3 17.5 -20.9 17.8 -21.5
2025-11-12T22:18:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:18:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:18:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.845916
2025-11-12T22:18:49.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:18:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:18:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:18:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:18:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:18:50.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:18:27', tmtdew=11.11, humidity=47.79, cloud=0.0, wind=13.23, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:18:27', seeing=1.16, atlas_timestamp='2025-11-12T20:18:07.142', atlas_cloud=2, atlas_rain=1, zp_data=[0.5947499999999994, 0.6432500000000001, 0.6272500000000001, 0.4794999999999998, 0.6530000000000005, 0.5192500000000004, 0.6219999999999999, 0.4562500000000007, 0.6504999999999992, 0.6624999999999996, 0.7102499999999994, 0.7010000000000005, 0.7389999999999999, 0.6482499999999991, 0.7684999999999995, 0.46199999999999974, 0.45425000000000004, 0.8309999999999995, 0.7829999999999995, 0.5822499999999984, 0.5299999999999985, 1.239749999999999, 1.300250000000001, 0.78775, 0.7319999999999993, 0.79, 0.8892500000000014, 1.1395, 0.7439999999999998, nan, nan, 0.7920000000000007, 0.9867499999999989], zp_timestamp='2025-11-12T20:16:00')
2025-11-12T22:18:50.001 [DEBUG] [Thread-23700] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:18:50.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:18:50.096 [DEBUG] [Thread-23703] [transport.py] [_log()] starting thread (client mode): 0x14916650
2025-11-12T22:18:50.096 [DEBUG] [Thread-23703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:18:50.111 [DEBUG] [Thread-23703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:18:50.111 [INFO] [Thread-23703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:18:50.119 [DEBUG] [Thread-23703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:18:50.119 [DEBUG] [Thread-23703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:18:50.119 [DEBUG] [Thread-23703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:18:50.119 [DEBUG] [Thread-23703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:18:50.119 [DEBUG] [Thread-23703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:18:50.120 [DEBUG] [Thread-23703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:18:50.120 [DEBUG] [Thread-23703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:18:50.120 [DEBUG] [Thread-23703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:18:50.120 [DEBUG] [Thread-23703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:18:50.120 [DEBUG] [Thread-23703] [transport.py] [_log()] client lang: <none>
2025-11-12T22:18:50.120 [DEBUG] [Thread-23703] [transport.py] [_log()] server lang: <none>
2025-11-12T22:18:50.120 [DEBUG] [Thread-23703] [transport.py] [_log()] kex follows: False
2025-11-12T22:18:50.120 [DEBUG] [Thread-23703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:18:50.121 [DEBUG] [Thread-23703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:18:50.121 [DEBUG] [Thread-23703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:18:50.121 [DEBUG] [Thread-23703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:18:50.121 [DEBUG] [Thread-23703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:18:50.121 [DEBUG] [Thread-23703] [transport.py] [_log()] Compression: none
2025-11-12T22:18:50.121 [DEBUG] [Thread-23703] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:18:50.183 [DEBUG] [Thread-23703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:18:50.183 [DEBUG] [Thread-23703] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:18:50.184 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:18:50.184 [DEBUG] [Thread-23703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:18:50.185 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:18:50.242 [DEBUG] [Thread-23703] [transport.py] [_log()] userauth is OK
2025-11-12T22:18:50.242 [DEBUG] [Thread-23703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:18:50.243 [DEBUG] [Thread-23703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:18:50.243 [DEBUG] [Thread-23703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:18:50.243 [DEBUG] [Thread-23703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:18:50.262 [INFO] [Thread-23703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:18:50.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:18:50.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:18:51.098 [DEBUG] [Thread-23703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:18:51.098 [DEBUG] [Thread-23703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:18:51.147 [DEBUG] [Thread-23703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:18:51.147 [DEBUG] [Thread-23703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:18:51.161 [DEBUG] [Thread-23703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:18:51.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:18: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')
2025-11-12T22:18:51.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-11-12T22:18:51.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:18:51.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:18:51.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:18:51.198 [DEBUG] [Thread-23703] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:18:56.285 [DEBUG] [Thread-23705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:18:58.654 [DEBUG] [Thread-23706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:18:59.332 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:18:59.334 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:19:11.336 [DEBUG] [Thread-23707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:19:21.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:19:21.211 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:19:21.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:19:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 18, 59), 11.11, 47.76, 0.0, 13.76, 16.92, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:19:21.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:18:59
2025-11-12T22:19:21.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:19:22.125 [DEBUG] [Thread-23708] [transport.py] [_log()] starting thread (client mode): 0x19ddb6a0
2025-11-12T22:19:22.125 [DEBUG] [Thread-23708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:19:22.145 [DEBUG] [Thread-23708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:19:22.145 [INFO] [Thread-23708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] client lang: <none>
2025-11-12T22:19:22.148 [DEBUG] [Thread-23708] [transport.py] [_log()] server lang: <none>
2025-11-12T22:19:22.149 [DEBUG] [Thread-23708] [transport.py] [_log()] kex follows: False
2025-11-12T22:19:22.149 [DEBUG] [Thread-23708] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:19:22.149 [DEBUG] [Thread-23708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:19:22.149 [DEBUG] [Thread-23708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:19:22.149 [DEBUG] [Thread-23708] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:19:22.149 [DEBUG] [Thread-23708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:19:22.149 [DEBUG] [Thread-23708] [transport.py] [_log()] Compression: none
2025-11-12T22:19:22.149 [DEBUG] [Thread-23708] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:19:22.167 [DEBUG] [Thread-23708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:19:22.167 [DEBUG] [Thread-23708] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:19:22.168 [DEBUG] [Thread-23708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:19:22.168 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:19:22.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:19:22.170 [DEBUG] [Thread-23708] [transport.py] [_log()] userauth is OK
2025-11-12T22:19:22.170 [DEBUG] [Thread-23708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:19:22.170 [DEBUG] [Thread-23708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:19:22.170 [DEBUG] [Thread-23708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:19:22.170 [DEBUG] [Thread-23708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:19:22.194 [INFO] [Thread-23708] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:19:22.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:19:22.791 [DEBUG] [Thread-23708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:19:22.791 [DEBUG] [Thread-23708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:19:22.791 [DEBUG] [Thread-23708] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:19:22.831 [DEBUG] [Thread-23708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:19:22.831 [DEBUG] [Thread-23708] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:19:22.834 [DEBUG] [Thread-23708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:19:22.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:19:22.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:19:22.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:19:22.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:19:22.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:19:22.854 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:19:22.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:19:22.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:19:22.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:19:22.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.846263 -999.00  +17.10   8.91     52   +7.20 1 2 1 1 1     0    0 8.98 -39.36 ZnESW 11.3 8.9 216.2 13.5 17.8 -22.0 17.7 -21.2 17.4 -20.9 17.8 -21.6
2025-11-12T22:19:22.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:19:22.855 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:19:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.846263
2025-11-12T22:19:22.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:19:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:19:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:19:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:19:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:19:22.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:18:59', tmtdew=11.11, humidity=47.76, cloud=0.0, wind=13.76, temperature=16.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:18:59', seeing=0.96, atlas_timestamp='2025-11-12T20:18:37.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.5947499999999994, 0.6432500000000001, 0.6272500000000001, 0.4794999999999998, 0.6530000000000005, 0.5192500000000004, 0.6219999999999999, 0.4562500000000007, 0.6504999999999992, 0.6624999999999996, 0.7102499999999994, 0.7010000000000005, 0.7389999999999999, 0.6482499999999991, 0.7684999999999995, 0.46199999999999974, 0.45425000000000004, 0.8309999999999995, 0.7829999999999995, 0.5822499999999984, 0.5299999999999985, 1.239749999999999, 1.300250000000001, 0.78775, 0.7319999999999993, 0.79, 0.8892500000000014, 1.1395, 0.7439999999999998, nan, nan, 0.7920000000000007, 0.9867499999999989], zp_timestamp='2025-11-12T20:16:00')
2025-11-12T22:19:22.858 [DEBUG] [Thread-23708] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:19:22.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:19:22.957 [DEBUG] [Thread-23711] [transport.py] [_log()] starting thread (client mode): 0x19ddbcd0
2025-11-12T22:19:22.957 [DEBUG] [Thread-23711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:19:22.972 [DEBUG] [Thread-23711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:19:22.973 [INFO] [Thread-23711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] client lang: <none>
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] server lang: <none>
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] kex follows: False
2025-11-12T22:19:22.980 [DEBUG] [Thread-23711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:19:22.981 [DEBUG] [Thread-23711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:19:22.981 [DEBUG] [Thread-23711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:19:22.981 [DEBUG] [Thread-23711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:19:22.981 [DEBUG] [Thread-23711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:19:22.981 [DEBUG] [Thread-23711] [transport.py] [_log()] Compression: none
2025-11-12T22:19:22.981 [DEBUG] [Thread-23711] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:19:23.037 [DEBUG] [Thread-23711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:19:23.037 [DEBUG] [Thread-23711] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:19:23.038 [DEBUG] [Thread-23711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:19:23.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:19:23.038 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:19:23.093 [DEBUG] [Thread-23711] [transport.py] [_log()] userauth is OK
2025-11-12T22:19:23.093 [DEBUG] [Thread-23711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:19:23.094 [DEBUG] [Thread-23711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:19:23.094 [DEBUG] [Thread-23711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:19:23.094 [DEBUG] [Thread-23711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:19:23.116 [INFO] [Thread-23711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:19:23.116 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:19:23.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:19:23.962 [DEBUG] [Thread-23711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:19:23.963 [DEBUG] [Thread-23711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:19:24.010 [DEBUG] [Thread-23711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:19:24.010 [DEBUG] [Thread-23711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:19:24.019 [DEBUG] [Thread-23711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:19:24.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:19:24.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-11-12T22:19:24.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-11-12T22:19:24.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:19:24.044 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:19:24.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:19:24.052 [DEBUG] [Thread-23711] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:19:26.365 [DEBUG] [Thread-23713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:19:41.413 [DEBUG] [Thread-23714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:19:54.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:19:54.054 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:19:54.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-11-12T22:19:54.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 19, 31), 11.05, 47.97, 0.0, 15.42, 16.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:19:54.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:19:31
2025-11-12T22:19:54.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:19:55.010 [DEBUG] [Thread-23715] [transport.py] [_log()] starting thread (client mode): 0x14917c40
2025-11-12T22:19:55.010 [DEBUG] [Thread-23715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:19:55.029 [DEBUG] [Thread-23715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:19:55.029 [INFO] [Thread-23715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] client lang: <none>
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] server lang: <none>
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] kex follows: False
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] Compression: none
2025-11-12T22:19:55.033 [DEBUG] [Thread-23715] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:19:55.048 [DEBUG] [Thread-23715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:19:55.048 [DEBUG] [Thread-23715] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:19:55.048 [DEBUG] [Thread-23715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:19:55.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:19:55.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:19:55.049 [DEBUG] [Thread-23715] [transport.py] [_log()] userauth is OK
2025-11-12T22:19:55.049 [DEBUG] [Thread-23715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:19:55.049 [DEBUG] [Thread-23715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:19:55.049 [DEBUG] [Thread-23715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:19:55.049 [DEBUG] [Thread-23715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:19:55.064 [INFO] [Thread-23715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:19:55.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:19:55.727 [DEBUG] [Thread-23715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:19:55.728 [DEBUG] [Thread-23715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:19:55.728 [DEBUG] [Thread-23715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:19:55.768 [DEBUG] [Thread-23715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:19:55.769 [DEBUG] [Thread-23715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:19:55.771 [DEBUG] [Thread-23715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:19:55.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:19:55.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:19:55.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:19:55.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:19:55.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:19:55.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:19:55.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:19:55.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:19:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:19:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.846611 -999.00  +17.10   8.24     52   +7.30 1 2 1 1 1     0    0 9.02 -40.62 ZnESw 9.1 8.2 205.4 20.1 17.8 -22.2 17.7 -21.3 17.5 -21.0 17.8 -21.5
2025-11-12T22:19:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:19:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:19:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.846611
2025-11-12T22:19:55.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:19:55.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:19:55.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:19:55.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:19:55.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:19:55.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:19:31', tmtdew=11.05, humidity=47.97, cloud=0.0, wind=15.42, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:19:31', seeing=0.96, atlas_timestamp='2025-11-12T20:19:07.190', atlas_cloud=2, atlas_rain=1, zp_data=[0.5947499999999994, 0.6432500000000001, 0.6272500000000001, 0.4794999999999998, 0.6530000000000005, 0.5192500000000004, 0.6219999999999999, 0.4562500000000007, 0.6504999999999992, 0.6624999999999996, 0.7102499999999994, 0.7010000000000005, 0.7389999999999999, 0.6482499999999991, 0.7684999999999995, 0.46199999999999974, 0.45425000000000004, 0.8309999999999995, 0.7829999999999995, 0.5822499999999984, 0.5299999999999985, 1.239749999999999, 1.300250000000001, 0.78775, 0.7319999999999993, 0.79, 0.8892500000000014, 1.1395, 0.7439999999999998, nan, nan, 0.7920000000000007, 0.9867499999999989], zp_timestamp='2025-11-12T20:16:00')
2025-11-12T22:19:55.797 [DEBUG] [Thread-23715] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:19:55.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:19:55.883 [DEBUG] [Thread-23718] [transport.py] [_log()] starting thread (client mode): 0x19dd8c10
2025-11-12T22:19:55.883 [DEBUG] [Thread-23718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:19:55.899 [DEBUG] [Thread-23718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:19:55.899 [INFO] [Thread-23718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] client lang: <none>
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] server lang: <none>
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] kex follows: False
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:19:55.907 [DEBUG] [Thread-23718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:19:55.908 [DEBUG] [Thread-23718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:19:55.908 [DEBUG] [Thread-23718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:19:55.908 [DEBUG] [Thread-23718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:19:55.908 [DEBUG] [Thread-23718] [transport.py] [_log()] Compression: none
2025-11-12T22:19:55.908 [DEBUG] [Thread-23718] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:19:55.968 [DEBUG] [Thread-23718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:19:55.969 [DEBUG] [Thread-23718] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:19:55.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:19:55.970 [DEBUG] [Thread-23718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:19:55.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:19:56.026 [DEBUG] [Thread-23718] [transport.py] [_log()] userauth is OK
2025-11-12T22:19:56.026 [DEBUG] [Thread-23718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:19:56.026 [DEBUG] [Thread-23718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:19:56.026 [DEBUG] [Thread-23718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:19:56.026 [DEBUG] [Thread-23718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:19:56.040 [INFO] [Thread-23718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:19:56.040 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:19:56.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:19:56.446 [DEBUG] [Thread-23720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:19:56.893 [DEBUG] [Thread-23718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:19:56.893 [DEBUG] [Thread-23718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:19:56.941 [DEBUG] [Thread-23718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:19:56.941 [DEBUG] [Thread-23718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:19:56.950 [DEBUG] [Thread-23718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:19:56.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:19:56.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:19: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') -> 00000000
2025-11-12T22:19:56.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:19:56.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:19:56.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:19:56.987 [DEBUG] [Thread-23718] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:19:58.710 [DEBUG] [Thread-23721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:19:59.535 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:19:59.536 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:20:11.499 [DEBUG] [Thread-23722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:20:26.540 [DEBUG] [Thread-23723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:20:27.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:20:27.010 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:20:27.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-11-12T22:20:27.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 20, 3), 11.04, 48.01, 0.0, 14.93, 16.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:20:27.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:20:03
2025-11-12T22:20:27.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:20:27.929 [DEBUG] [Thread-23724] [transport.py] [_log()] starting thread (client mode): 0x14947550
2025-11-12T22:20:27.929 [DEBUG] [Thread-23724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:20:27.949 [DEBUG] [Thread-23724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:20:27.949 [INFO] [Thread-23724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:20:27.952 [DEBUG] [Thread-23724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:20:27.952 [DEBUG] [Thread-23724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] client lang: <none>
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] server lang: <none>
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] kex follows: False
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:20:27.953 [DEBUG] [Thread-23724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:20:27.954 [DEBUG] [Thread-23724] [transport.py] [_log()] Compression: none
2025-11-12T22:20:27.954 [DEBUG] [Thread-23724] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:20:27.973 [DEBUG] [Thread-23724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:20:27.973 [DEBUG] [Thread-23724] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:20:27.974 [DEBUG] [Thread-23724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:20:27.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:20:27.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:20:27.976 [DEBUG] [Thread-23724] [transport.py] [_log()] userauth is OK
2025-11-12T22:20:27.977 [DEBUG] [Thread-23724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:20:27.977 [DEBUG] [Thread-23724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:20:27.977 [DEBUG] [Thread-23724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:20:27.977 [DEBUG] [Thread-23724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:20:28.000 [INFO] [Thread-23724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:20:28.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:20:28.595 [DEBUG] [Thread-23724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:20:28.595 [DEBUG] [Thread-23724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:20:28.595 [DEBUG] [Thread-23724] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:20:28.636 [DEBUG] [Thread-23724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:20:28.636 [DEBUG] [Thread-23724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:20:28.638 [DEBUG] [Thread-23724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:20:28.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:20:28.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:20:28.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:20:28.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:20:28.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:20:28.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:20:28.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.846958 -999.00  +17.10  10.61     52   +7.20 1 2 1 1 1     0    0 9.23 -38.06 ZnESw 10.6 10.6 201.7 14.5 17.8 -22.2 17.7 -21.3 17.5 -21.0 17.7 -21.5
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.846958
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:20:28.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:20:03', tmtdew=11.04, humidity=48.01, cloud=0.0, wind=14.93, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:20:03', seeing=0.91, atlas_timestamp='2025-11-12T20:19:37.171', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:18:00')
2025-11-12T22:20:28.649 [DEBUG] [Thread-23724] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:20:28.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:20:28.735 [DEBUG] [Thread-23727] [transport.py] [_log()] starting thread (client mode): 0x14917c40
2025-11-12T22:20:28.735 [DEBUG] [Thread-23727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:20:28.749 [DEBUG] [Thread-23727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:20:28.749 [INFO] [Thread-23727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] client lang: <none>
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] server lang: <none>
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] kex follows: False
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] Compression: none
2025-11-12T22:20:28.762 [DEBUG] [Thread-23727] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:20:28.816 [DEBUG] [Thread-23727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:20:28.817 [DEBUG] [Thread-23727] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:20:28.817 [DEBUG] [Thread-23727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:20:28.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:20:28.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:20:28.881 [DEBUG] [Thread-23727] [transport.py] [_log()] userauth is OK
2025-11-12T22:20:28.881 [DEBUG] [Thread-23727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:20:28.881 [DEBUG] [Thread-23727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:20:28.881 [DEBUG] [Thread-23727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:20:28.881 [DEBUG] [Thread-23727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:20:28.898 [INFO] [Thread-23727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:20:28.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:20:28.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:20:29.719 [DEBUG] [Thread-23727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:20:29.719 [DEBUG] [Thread-23727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:20:29.767 [DEBUG] [Thread-23727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:20:29.767 [DEBUG] [Thread-23727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:20:29.775 [DEBUG] [Thread-23727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:20:29.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:20:29.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-11-12T22:20:29.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-11-12T22:20:29.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:20:29.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:20:29.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:20:29.806 [DEBUG] [Thread-23727] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:20:41.570 [DEBUG] [Thread-23729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:20:56.636 [DEBUG] [Thread-23730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:20:58.766 [DEBUG] [Thread-23731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:20:59.738 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:20:59.739 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:20:59.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:20:59.829 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:20:59.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-11-12T22:21:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 20, 35), 11.02, 47.92, 0.0, 14.86, 16.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:21:00.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:20:35
2025-11-12T22:21:00.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:21:00.743 [DEBUG] [Thread-23732] [transport.py] [_log()] starting thread (client mode): 0x14923850
2025-11-12T22:21:00.744 [DEBUG] [Thread-23732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:21:00.763 [DEBUG] [Thread-23732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:21:00.763 [INFO] [Thread-23732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] client lang: <none>
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] server lang: <none>
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] kex follows: False
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] Compression: none
2025-11-12T22:21:00.766 [DEBUG] [Thread-23732] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:21:00.783 [DEBUG] [Thread-23732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:21:00.783 [DEBUG] [Thread-23732] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:21:00.784 [DEBUG] [Thread-23732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:21:00.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:21:00.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:21:00.785 [DEBUG] [Thread-23732] [transport.py] [_log()] userauth is OK
2025-11-12T22:21:00.785 [DEBUG] [Thread-23732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:21:00.785 [DEBUG] [Thread-23732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:21:00.785 [DEBUG] [Thread-23732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:21:00.785 [DEBUG] [Thread-23732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:21:00.796 [INFO] [Thread-23732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:21:00.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:21:01.458 [DEBUG] [Thread-23732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:21:01.467 [DEBUG] [Thread-23732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:21:01.468 [DEBUG] [Thread-23732] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:21:01.499 [DEBUG] [Thread-23732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:21:01.499 [DEBUG] [Thread-23732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:21:01.502 [DEBUG] [Thread-23732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:21:01.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:21:01.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:21:01.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:21:01.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:21:01.526 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:21:01.528 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:21:01.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:21:01.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:21:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:21:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.847652 -999.00  +17.10   9.29     52   +7.20 1 2 1 1 1     0    0 8.76 -38.91 ZnESW 10.7 9.3 213.3 15.8 17.7 -22.1 17.7 -21.4 17.4 -21.1 17.7 -21.5
2025-11-12T22:21:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:21:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:21:01.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.847652
2025-11-12T22:21:01.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:21:01.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:21:01.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:21:01.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:21:01.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:21:01.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:20:35', tmtdew=11.02, humidity=47.92, cloud=0.0, wind=14.86, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:20:35', seeing=0.91, atlas_timestamp='2025-11-12T20:20:37.133', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:18:00')
2025-11-12T22:21:01.531 [DEBUG] [Thread-23732] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:21:01.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:21:01.630 [DEBUG] [Thread-23735] [transport.py] [_log()] starting thread (client mode): 0x17346380
2025-11-12T22:21:01.630 [DEBUG] [Thread-23735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:21:01.645 [DEBUG] [Thread-23735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:21:01.645 [INFO] [Thread-23735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:21:01.652 [DEBUG] [Thread-23735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:21:01.653 [DEBUG] [Thread-23735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:21:01.653 [DEBUG] [Thread-23735] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:21:01.653 [DEBUG] [Thread-23735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:21:01.653 [DEBUG] [Thread-23735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:21:01.653 [DEBUG] [Thread-23735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:21:01.653 [DEBUG] [Thread-23735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:21:01.653 [DEBUG] [Thread-23735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:21:01.654 [DEBUG] [Thread-23735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:21:01.654 [DEBUG] [Thread-23735] [transport.py] [_log()] client lang: <none>
2025-11-12T22:21:01.654 [DEBUG] [Thread-23735] [transport.py] [_log()] server lang: <none>
2025-11-12T22:21:01.654 [DEBUG] [Thread-23735] [transport.py] [_log()] kex follows: False
2025-11-12T22:21:01.654 [DEBUG] [Thread-23735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:21:01.654 [DEBUG] [Thread-23735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:21:01.654 [DEBUG] [Thread-23735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:21:01.654 [DEBUG] [Thread-23735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:21:01.655 [DEBUG] [Thread-23735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:21:01.655 [DEBUG] [Thread-23735] [transport.py] [_log()] Compression: none
2025-11-12T22:21:01.655 [DEBUG] [Thread-23735] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:21:01.710 [DEBUG] [Thread-23735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:21:01.711 [DEBUG] [Thread-23735] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:21:01.711 [DEBUG] [Thread-23735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:21:01.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:21:01.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:21:01.775 [DEBUG] [Thread-23735] [transport.py] [_log()] userauth is OK
2025-11-12T22:21:01.775 [DEBUG] [Thread-23735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:21:01.775 [DEBUG] [Thread-23735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:21:01.775 [DEBUG] [Thread-23735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:21:01.775 [DEBUG] [Thread-23735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:21:01.794 [INFO] [Thread-23735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:21:01.794 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:21:01.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:21:02.695 [DEBUG] [Thread-23735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:21:02.695 [DEBUG] [Thread-23735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:21:02.743 [DEBUG] [Thread-23735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:21:02.744 [DEBUG] [Thread-23735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:21:02.753 [DEBUG] [Thread-23735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:21:02.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:21:02.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-11-12T22:21:02.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-11-12T22:21:02.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:21:02.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:21:02.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:21:02.790 [DEBUG] [Thread-23735] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:21:04.333 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:07.529 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:11.666 [DEBUG] [Thread-23737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:12.567 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:17.943 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:26.708 [DEBUG] [Thread-23738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:32.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:21:32.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:21:32.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-11-12T22:21:33.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 21, 7), 11.02, 47.92, 0.0, 15.9, 16.95, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:21:33.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:21:07
2025-11-12T22:21:33.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:21:33.730 [DEBUG] [Thread-23739] [transport.py] [_log()] starting thread (client mode): 0x149047f0
2025-11-12T22:21:33.730 [DEBUG] [Thread-23739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:21:33.750 [DEBUG] [Thread-23739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:21:33.750 [INFO] [Thread-23739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] client lang: <none>
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] server lang: <none>
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] kex follows: False
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] Compression: none
2025-11-12T22:21:33.754 [DEBUG] [Thread-23739] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:21:33.770 [DEBUG] [Thread-23739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:21:33.771 [DEBUG] [Thread-23739] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:21:33.771 [DEBUG] [Thread-23739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:21:33.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:21:33.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:21:33.773 [DEBUG] [Thread-23739] [transport.py] [_log()] userauth is OK
2025-11-12T22:21:33.773 [DEBUG] [Thread-23739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:21:33.773 [DEBUG] [Thread-23739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:21:33.773 [DEBUG] [Thread-23739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:21:33.773 [DEBUG] [Thread-23739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:21:33.788 [INFO] [Thread-23739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:21:33.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:21:34.422 [DEBUG] [Thread-23739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:21:34.422 [DEBUG] [Thread-23739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:21:34.422 [DEBUG] [Thread-23739] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:21:34.463 [DEBUG] [Thread-23739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:21:34.463 [DEBUG] [Thread-23739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:21:34.466 [DEBUG] [Thread-23739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:21:34.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:21:34.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:21:34.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:21:34.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:21:34.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:21:34.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:21:34.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:21:34.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:21:34.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:21:34.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.847999 -999.00  +17.10  10.62     52   +7.20 1 2 1 1 1     0    0 8.81 -40.21 ZnESW 9.5 10.6 203.8 13.6 17.7 -22.2 17.7 -21.3 17.5 -21.0 17.7 -21.6
2025-11-12T22:21:34.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:21:34.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:21:34.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.847999
2025-11-12T22:21:34.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:21:34.490 [DEBUG] [Thread-23739] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:21:34.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:21:34.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:21:34.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:21:34.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:21:34.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:21:07', tmtdew=11.02, humidity=47.92, cloud=0.0, wind=15.9, temperature=16.95, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:21:07', seeing=0.9, atlas_timestamp='2025-11-12T20:21:07.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:18:00')
2025-11-12T22:21:34.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:21:34.590 [DEBUG] [Thread-23742] [transport.py] [_log()] starting thread (client mode): 0x17345c60
2025-11-12T22:21:34.590 [DEBUG] [Thread-23742] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:21:34.605 [DEBUG] [Thread-23742] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:21:34.605 [INFO] [Thread-23742] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:21:34.612 [DEBUG] [Thread-23742] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:21:34.612 [DEBUG] [Thread-23742] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:21:34.612 [DEBUG] [Thread-23742] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:21:34.612 [DEBUG] [Thread-23742] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:21:34.612 [DEBUG] [Thread-23742] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] client lang: <none>
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] server lang: <none>
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] kex follows: False
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] Compression: none
2025-11-12T22:21:34.613 [DEBUG] [Thread-23742] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:21:34.669 [DEBUG] [Thread-23742] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:21:34.670 [DEBUG] [Thread-23742] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:21:34.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:21:34.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:21:34.671 [DEBUG] [Thread-23742] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:21:34.726 [DEBUG] [Thread-23742] [transport.py] [_log()] userauth is OK
2025-11-12T22:21:34.727 [DEBUG] [Thread-23742] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:21:34.727 [DEBUG] [Thread-23742] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:21:34.727 [DEBUG] [Thread-23742] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:21:34.727 [DEBUG] [Thread-23742] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:21:34.747 [INFO] [Thread-23742] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:21:34.748 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:21:34.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:21:35.588 [DEBUG] [Thread-23742] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:21:35.588 [DEBUG] [Thread-23742] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:21:35.636 [DEBUG] [Thread-23742] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:21:35.636 [DEBUG] [Thread-23742] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:21:35.645 [DEBUG] [Thread-23742] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:21:35.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:21:35.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-11-12T22:21:35.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-11-12T22:21:35.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:21:35.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:21:35.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:21:35.679 [DEBUG] [Thread-23742] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:21:37.484 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:41.739 [DEBUG] [Thread-23744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:41.868 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:51.226 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:55.596 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:56.774 [DEBUG] [Thread-23745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:58.820 [DEBUG] [Thread-23746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:59.941 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:21:59.943 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:22:02.541 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:22:05.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:22:05.676 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:22:05.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-11-12T22:22:06.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 21, 39), 11.09, 47.83, 0.0, 15.67, 16.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:22:06.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:21:39
2025-11-12T22:22:06.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:22:06.589 [DEBUG] [Thread-23747] [transport.py] [_log()] starting thread (client mode): 0x173456c0
2025-11-12T22:22:06.589 [DEBUG] [Thread-23747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:22:06.609 [DEBUG] [Thread-23747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:22:06.609 [INFO] [Thread-23747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] client lang: <none>
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] server lang: <none>
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] kex follows: False
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] Compression: none
2025-11-12T22:22:06.613 [DEBUG] [Thread-23747] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:22:06.631 [DEBUG] [Thread-23747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:22:06.632 [DEBUG] [Thread-23747] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:22:06.633 [DEBUG] [Thread-23747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:22:06.633 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:22:06.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:22:06.635 [DEBUG] [Thread-23747] [transport.py] [_log()] userauth is OK
2025-11-12T22:22:06.635 [DEBUG] [Thread-23747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:22:06.635 [DEBUG] [Thread-23747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:22:06.635 [DEBUG] [Thread-23747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:22:06.635 [DEBUG] [Thread-23747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:22:06.671 [INFO] [Thread-23747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:22:06.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:22:06.915 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:22:07.294 [DEBUG] [Thread-23747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:22:07.294 [DEBUG] [Thread-23747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:22:07.294 [DEBUG] [Thread-23747] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:22:07.335 [DEBUG] [Thread-23747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:22:07.335 [DEBUG] [Thread-23747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:22:07.338 [DEBUG] [Thread-23747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:22:07.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:22:07.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:22:07.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:22:07.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:22:07.360 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:22:07.362 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:22:07.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:22:07.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:22:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:22:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.848347 -999.00  +17.00  11.20     52   +7.20 1 2 1 1 1     0    0 8.50 -39.66 ZnESW 7.1 11.2 208.8 14.7 17.7 -22.2 17.6 -21.4 17.4 -21.0 17.7 -21.6
2025-11-12T22:22:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:22:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:22:07.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.848347
2025-11-12T22:22:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:22:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:22:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:22:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:22:07.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:22:07.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:21:39', tmtdew=11.09, humidity=47.83, cloud=0.0, wind=15.67, temperature=16.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:21:39', seeing=0.81, atlas_timestamp='2025-11-12T20:21:37.181', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:18:00')
2025-11-12T22:22:07.365 [DEBUG] [Thread-23747] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:22:07.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:22:07.460 [DEBUG] [Thread-23750] [transport.py] [_log()] starting thread (client mode): 0x14917c40
2025-11-12T22:22:07.460 [DEBUG] [Thread-23750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:22:07.477 [DEBUG] [Thread-23750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:22:07.477 [INFO] [Thread-23750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:22:07.484 [DEBUG] [Thread-23750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:22:07.485 [DEBUG] [Thread-23750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:22:07.485 [DEBUG] [Thread-23750] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:22:07.485 [DEBUG] [Thread-23750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:22:07.485 [DEBUG] [Thread-23750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:22:07.485 [DEBUG] [Thread-23750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:22:07.485 [DEBUG] [Thread-23750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:22:07.485 [DEBUG] [Thread-23750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:22:07.486 [DEBUG] [Thread-23750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:22:07.486 [DEBUG] [Thread-23750] [transport.py] [_log()] client lang: <none>
2025-11-12T22:22:07.486 [DEBUG] [Thread-23750] [transport.py] [_log()] server lang: <none>
2025-11-12T22:22:07.486 [DEBUG] [Thread-23750] [transport.py] [_log()] kex follows: False
2025-11-12T22:22:07.486 [DEBUG] [Thread-23750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:22:07.486 [DEBUG] [Thread-23750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:22:07.486 [DEBUG] [Thread-23750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:22:07.486 [DEBUG] [Thread-23750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:22:07.487 [DEBUG] [Thread-23750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:22:07.487 [DEBUG] [Thread-23750] [transport.py] [_log()] Compression: none
2025-11-12T22:22:07.487 [DEBUG] [Thread-23750] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:22:07.543 [DEBUG] [Thread-23750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:22:07.544 [DEBUG] [Thread-23750] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:22:07.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:22:07.545 [DEBUG] [Thread-23750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:22:07.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:22:07.599 [DEBUG] [Thread-23750] [transport.py] [_log()] userauth is OK
2025-11-12T22:22:07.599 [DEBUG] [Thread-23750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:22:07.599 [DEBUG] [Thread-23750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:22:07.599 [DEBUG] [Thread-23750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:22:07.600 [DEBUG] [Thread-23750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:22:07.618 [INFO] [Thread-23750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:22:07.619 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:22:07.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:22:08.482 [DEBUG] [Thread-23750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:22:08.482 [DEBUG] [Thread-23750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:22:08.531 [DEBUG] [Thread-23750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:22:08.531 [DEBUG] [Thread-23750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:22:08.540 [DEBUG] [Thread-23750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:22:08.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:22:08.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')
2025-11-12T22:22:08.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-11-12T22:22:08.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:22:08.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:22:08.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:22:08.577 [DEBUG] [Thread-23750] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:22:11.812 [DEBUG] [Thread-23752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:22:26.862 [DEBUG] [Thread-23753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:22:38.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:22:38.569 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:22:38.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-11-12T22:22:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 22, 11), 11.05, 47.97, 0.0, 17.06, 16.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:22:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:22:11
2025-11-12T22:22:39.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:22:39.471 [DEBUG] [Thread-23754] [transport.py] [_log()] starting thread (client mode): 0x14917430
2025-11-12T22:22:39.472 [DEBUG] [Thread-23754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:22:39.492 [DEBUG] [Thread-23754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:22:39.492 [INFO] [Thread-23754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:22:39.495 [DEBUG] [Thread-23754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:22:39.495 [DEBUG] [Thread-23754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] client lang: <none>
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] server lang: <none>
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] kex follows: False
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:22:39.496 [DEBUG] [Thread-23754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:22:39.497 [DEBUG] [Thread-23754] [transport.py] [_log()] Compression: none
2025-11-12T22:22:39.497 [DEBUG] [Thread-23754] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:22:39.517 [DEBUG] [Thread-23754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:22:39.517 [DEBUG] [Thread-23754] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:22:39.518 [DEBUG] [Thread-23754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:22:39.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:22:39.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:22:39.520 [DEBUG] [Thread-23754] [transport.py] [_log()] userauth is OK
2025-11-12T22:22:39.520 [DEBUG] [Thread-23754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:22:39.520 [DEBUG] [Thread-23754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:22:39.520 [DEBUG] [Thread-23754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:22:39.521 [DEBUG] [Thread-23754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:22:39.537 [INFO] [Thread-23754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:22:39.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:22:40.102 [DEBUG] [Thread-23754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:22:40.102 [DEBUG] [Thread-23754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:22:40.103 [DEBUG] [Thread-23754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:22:40.143 [DEBUG] [Thread-23754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:22:40.143 [DEBUG] [Thread-23754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:22:40.146 [DEBUG] [Thread-23754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:22:40.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:22:40.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:22:40.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:22:40.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:22:40.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:22:40.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:22:40.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:22:40.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:22:40.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:22:40.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.848694 -999.00  +17.00   3.34     52   +7.20 1 2 1 1 1     0    0 8.93 -44.64 ZnESW 8.4 3.3 174.2 11.7 17.7 -22.3 17.6 -21.5 17.4 -21.1 17.6 -21.7
2025-11-12T22:22:40.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:22:40.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:22:40.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.848694
2025-11-12T22:22:40.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:22:40.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:22:40.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:22:40.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:22:40.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:22:40.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:22:11', tmtdew=11.05, humidity=47.97, cloud=0.0, wind=17.06, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:22:12', seeing=0.81, atlas_timestamp='2025-11-12T20:22:07.162', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:18:00')
2025-11-12T22:22:40.172 [DEBUG] [Thread-23754] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:22:40.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:22:40.274 [DEBUG] [Thread-23757] [transport.py] [_log()] starting thread (client mode): 0x14914070
2025-11-12T22:22:40.274 [DEBUG] [Thread-23757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:22:40.289 [DEBUG] [Thread-23757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:22:40.289 [INFO] [Thread-23757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:22:40.297 [DEBUG] [Thread-23757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:22:40.297 [DEBUG] [Thread-23757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:22:40.297 [DEBUG] [Thread-23757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:22:40.297 [DEBUG] [Thread-23757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:22:40.297 [DEBUG] [Thread-23757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] client lang: <none>
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] server lang: <none>
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] kex follows: False
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] Compression: none
2025-11-12T22:22:40.298 [DEBUG] [Thread-23757] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:22:40.354 [DEBUG] [Thread-23757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:22:40.354 [DEBUG] [Thread-23757] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:22:40.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:22:40.355 [DEBUG] [Thread-23757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:22:40.356 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:22:40.411 [DEBUG] [Thread-23757] [transport.py] [_log()] userauth is OK
2025-11-12T22:22:40.411 [DEBUG] [Thread-23757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:22:40.412 [DEBUG] [Thread-23757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:22:40.412 [DEBUG] [Thread-23757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:22:40.412 [DEBUG] [Thread-23757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:22:40.431 [INFO] [Thread-23757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:22:40.432 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:22:40.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:22:41.248 [DEBUG] [Thread-23757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:22:41.248 [DEBUG] [Thread-23757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:22:41.297 [DEBUG] [Thread-23757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:22:41.297 [DEBUG] [Thread-23757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:22:41.306 [DEBUG] [Thread-23757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:22:41.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:22:41.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:22:41.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:22:41.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:22:41.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:22:41.334 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:22:41.344 [DEBUG] [Thread-23757] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:22:41.895 [DEBUG] [Thread-23759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:22:56.946 [DEBUG] [Thread-23760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:22:58.876 [DEBUG] [Thread-23761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:00.144 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:00.145 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:10.453 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:11.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:23:11.363 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:23:11.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:23:11.978 [DEBUG] [Thread-23762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:12.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 22, 44), 11.05, 47.99, 0.0, 15.53, 16.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:23:12.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:22:44
2025-11-12T22:23:12.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:23:12.284 [DEBUG] [Thread-23763] [transport.py] [_log()] starting thread (client mode): 0x149171c0
2025-11-12T22:23:12.284 [DEBUG] [Thread-23763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:23:12.300 [DEBUG] [Thread-23763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:23:12.300 [INFO] [Thread-23763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] client lang: <none>
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] server lang: <none>
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] kex follows: False
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:23:12.303 [DEBUG] [Thread-23763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:23:12.304 [DEBUG] [Thread-23763] [transport.py] [_log()] Compression: none
2025-11-12T22:23:12.304 [DEBUG] [Thread-23763] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:23:12.318 [DEBUG] [Thread-23763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:23:12.318 [DEBUG] [Thread-23763] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:23:12.319 [DEBUG] [Thread-23763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:23:12.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:23:12.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:23:12.321 [DEBUG] [Thread-23763] [transport.py] [_log()] userauth is OK
2025-11-12T22:23:12.321 [DEBUG] [Thread-23763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:23:12.321 [DEBUG] [Thread-23763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:23:12.321 [DEBUG] [Thread-23763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:23:12.321 [DEBUG] [Thread-23763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:23:12.346 [INFO] [Thread-23763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:23:12.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:23:12.952 [DEBUG] [Thread-23763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:23:12.952 [DEBUG] [Thread-23763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:23:12.952 [DEBUG] [Thread-23763] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:23:12.992 [DEBUG] [Thread-23763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:23:12.993 [DEBUG] [Thread-23763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:23:12.996 [DEBUG] [Thread-23763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:23:13.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:23:13.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:23:13.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:23:13.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:23:13.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:23:13.020 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:23:13.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:23:13.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:23:13.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:23:13.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.849041 -999.00  +17.00   7.18     52   +7.20 1 2 1 1 1     0    0 8.62 -47.45 ZnESW 7.7 7.2 206.6 12.7 17.7 -22.3 17.6 -21.4 17.4 -21.0 17.7 -21.5
2025-11-12T22:23:13.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:23:13.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:23:13.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.849041
2025-11-12T22:23:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:23:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:23:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:23:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:23:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:23:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:22:44', tmtdew=11.05, humidity=47.99, cloud=0.0, wind=15.53, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:22:44', seeing=0.82, atlas_timestamp='2025-11-12T20:22:37.142', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:22:00')
2025-11-12T22:23:13.023 [DEBUG] [Thread-23763] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:23:13.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:23:13.129 [DEBUG] [Thread-23766] [transport.py] [_log()] starting thread (client mode): 0x14915ed0
2025-11-12T22:23:13.130 [DEBUG] [Thread-23766] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:23:13.143 [DEBUG] [Thread-23766] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:23:13.144 [INFO] [Thread-23766] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] client lang: <none>
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] server lang: <none>
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] kex follows: False
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:23:13.151 [DEBUG] [Thread-23766] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:23:13.152 [DEBUG] [Thread-23766] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:23:13.152 [DEBUG] [Thread-23766] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:23:13.152 [DEBUG] [Thread-23766] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:23:13.152 [DEBUG] [Thread-23766] [transport.py] [_log()] Compression: none
2025-11-12T22:23:13.152 [DEBUG] [Thread-23766] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:23:13.210 [DEBUG] [Thread-23766] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:23:13.211 [DEBUG] [Thread-23766] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:23:13.212 [DEBUG] [Thread-23766] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:23:13.212 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:23:13.213 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:23:13.267 [DEBUG] [Thread-23766] [transport.py] [_log()] userauth is OK
2025-11-12T22:23:13.268 [DEBUG] [Thread-23766] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:23:13.268 [DEBUG] [Thread-23766] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:23:13.268 [DEBUG] [Thread-23766] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:23:13.268 [DEBUG] [Thread-23766] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:23:13.286 [INFO] [Thread-23766] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:23:13.287 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:23:13.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:23:13.506 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:14.124 [DEBUG] [Thread-23766] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:23:14.124 [DEBUG] [Thread-23766] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:23:14.172 [DEBUG] [Thread-23766] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:23:14.172 [DEBUG] [Thread-23766] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:23:14.181 [DEBUG] [Thread-23766] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:23:14.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:23:14.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:23:14.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:23:14.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:23:14.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:23:14.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:23:14.215 [DEBUG] [Thread-23766] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:23:27.012 [DEBUG] [Thread-23768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:42.062 [DEBUG] [Thread-23769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:44.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:23:44.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:23:44.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-11-12T22:23:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 23, 16), 11.03, 48.04, 0.0, 14.49, 16.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:23:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:23:16
2025-11-12T22:23:45.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:23:45.188 [DEBUG] [Thread-23770] [transport.py] [_log()] starting thread (client mode): 0x14983490
2025-11-12T22:23:45.188 [DEBUG] [Thread-23770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:23:45.207 [DEBUG] [Thread-23770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:23:45.208 [INFO] [Thread-23770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:23:45.211 [DEBUG] [Thread-23770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:23:45.211 [DEBUG] [Thread-23770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:23:45.211 [DEBUG] [Thread-23770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:23:45.211 [DEBUG] [Thread-23770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:23:45.211 [DEBUG] [Thread-23770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:23:45.211 [DEBUG] [Thread-23770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:23:45.211 [DEBUG] [Thread-23770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] client lang: <none>
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] server lang: <none>
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] kex follows: False
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] Compression: none
2025-11-12T22:23:45.212 [DEBUG] [Thread-23770] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:23:45.229 [DEBUG] [Thread-23770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:23:45.229 [DEBUG] [Thread-23770] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:23:45.229 [DEBUG] [Thread-23770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:23:45.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:23:45.230 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:23:45.230 [DEBUG] [Thread-23770] [transport.py] [_log()] userauth is OK
2025-11-12T22:23:45.230 [DEBUG] [Thread-23770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:23:45.230 [DEBUG] [Thread-23770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:23:45.230 [DEBUG] [Thread-23770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:23:45.230 [DEBUG] [Thread-23770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:23:45.239 [INFO] [Thread-23770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:23:45.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:23:45.862 [DEBUG] [Thread-23770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:23:45.862 [DEBUG] [Thread-23770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:23:45.862 [DEBUG] [Thread-23770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:23:45.903 [DEBUG] [Thread-23770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:23:45.903 [DEBUG] [Thread-23770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:23:45.905 [DEBUG] [Thread-23770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:23:45.917 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:23:45.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:23:45.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:23:45.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:23:45.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:23:45.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:23:45.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:23:45.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:23:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:23:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.849388 -999.00  +17.00   5.88     52   +7.20 1 2 1 1 1     0    0 8.63 -41.78 ZnESW 9.6 5.9 242.6 14.4 17.6 -22.1 17.6 -21.3 17.4 -21.1 17.6 -21.6
2025-11-12T22:23:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:23:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:23:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.849388
2025-11-12T22:23:45.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:23:45.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:23:45.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:23:45.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:23:45.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:23:45.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:23:16', tmtdew=11.03, humidity=48.04, cloud=0.0, wind=14.49, temperature=16.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:23:16', seeing=0.74, atlas_timestamp='2025-11-12T20:23:07.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:22:00')
2025-11-12T22:23:45.924 [DEBUG] [Thread-23770] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:23:45.998 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:23:46.011 [DEBUG] [Thread-23773] [transport.py] [_log()] starting thread (client mode): 0x149802b0
2025-11-12T22:23:46.011 [DEBUG] [Thread-23773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:23:46.026 [DEBUG] [Thread-23773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:23:46.026 [INFO] [Thread-23773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] client lang: <none>
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] server lang: <none>
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] kex follows: False
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] Compression: none
2025-11-12T22:23:46.034 [DEBUG] [Thread-23773] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:23:46.090 [DEBUG] [Thread-23773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:23:46.090 [DEBUG] [Thread-23773] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:23:46.090 [DEBUG] [Thread-23773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:23:46.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:23:46.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:23:46.150 [DEBUG] [Thread-23773] [transport.py] [_log()] userauth is OK
2025-11-12T22:23:46.150 [DEBUG] [Thread-23773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:23:46.150 [DEBUG] [Thread-23773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:23:46.150 [DEBUG] [Thread-23773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:23:46.150 [DEBUG] [Thread-23773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:23:46.164 [INFO] [Thread-23773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:23:46.164 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:23:46.164 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:23:47.012 [DEBUG] [Thread-23773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:23:47.012 [DEBUG] [Thread-23773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:23:47.061 [DEBUG] [Thread-23773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:23:47.061 [DEBUG] [Thread-23773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:23:47.069 [DEBUG] [Thread-23773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:23:47.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:23:47.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-11-12T22:23:47.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-11-12T22:23:47.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:23:47.097 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:23:47.097 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:23:47.105 [DEBUG] [Thread-23773] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:23:57.092 [DEBUG] [Thread-23775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:23:58.943 [DEBUG] [Thread-23776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:24:00.348 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:24:00.349 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:24:12.148 [DEBUG] [Thread-23777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:24:17.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:24:17.121 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:24:17.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-11-12T22:24:17.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 23, 48), 11.0, 47.99, 0.0, 16.02, 16.9, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:24:17.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:23:48
2025-11-12T22:24:17.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:24:18.049 [DEBUG] [Thread-23778] [transport.py] [_log()] starting thread (client mode): 0x14983e50
2025-11-12T22:24:18.049 [DEBUG] [Thread-23778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:24:18.068 [DEBUG] [Thread-23778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:24:18.069 [INFO] [Thread-23778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:24:18.071 [DEBUG] [Thread-23778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:24:18.071 [DEBUG] [Thread-23778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:24:18.071 [DEBUG] [Thread-23778] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:24:18.071 [DEBUG] [Thread-23778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:24:18.071 [DEBUG] [Thread-23778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:24:18.071 [DEBUG] [Thread-23778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] client lang: <none>
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] server lang: <none>
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] kex follows: False
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] Compression: none
2025-11-12T22:24:18.072 [DEBUG] [Thread-23778] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:24:18.088 [DEBUG] [Thread-23778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:24:18.088 [DEBUG] [Thread-23778] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:24:18.089 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:24:18.089 [DEBUG] [Thread-23778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:24:18.090 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:24:18.091 [DEBUG] [Thread-23778] [transport.py] [_log()] userauth is OK
2025-11-12T22:24:18.092 [DEBUG] [Thread-23778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:24:18.092 [DEBUG] [Thread-23778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:24:18.092 [DEBUG] [Thread-23778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:24:18.092 [DEBUG] [Thread-23778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:24:18.116 [INFO] [Thread-23778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:24:18.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:24:18.696 [DEBUG] [Thread-23778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:24:18.696 [DEBUG] [Thread-23778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:24:18.696 [DEBUG] [Thread-23778] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:24:18.738 [DEBUG] [Thread-23778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:24:18.738 [DEBUG] [Thread-23778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:24:18.741 [DEBUG] [Thread-23778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:24:18.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:24:18.747 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:24:18.749 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:24:18.751 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:24:18.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:24:18.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:24:18.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:24:18.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:24:18.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:24:18.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.850083 -999.00  +17.00   9.69     52   +7.20 1 2 1 1 1     0    0 8.59 -46.58 ZnESW 9.0 9.7 206.8 13.5 17.6 -22.3 17.5 -21.6 17.3 -21.1 17.6 -21.5
2025-11-12T22:24:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:24:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:24:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.850083
2025-11-12T22:24:18.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:24:18.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:24:18.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:24:18.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:24:18.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:24:18.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:23:48', tmtdew=11.0, humidity=47.99, cloud=0.0, wind=16.02, temperature=16.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:23:48', seeing=0.74, atlas_timestamp='2025-11-12T20:24:07.171', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:22:00')
2025-11-12T22:24:18.761 [DEBUG] [Thread-23778] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:24:18.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:24:18.857 [DEBUG] [Thread-23781] [transport.py] [_log()] starting thread (client mode): 0x17344820
2025-11-12T22:24:18.858 [DEBUG] [Thread-23781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:24:18.874 [DEBUG] [Thread-23781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:24:18.874 [INFO] [Thread-23781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] client lang: <none>
2025-11-12T22:24:18.885 [DEBUG] [Thread-23781] [transport.py] [_log()] server lang: <none>
2025-11-12T22:24:18.886 [DEBUG] [Thread-23781] [transport.py] [_log()] kex follows: False
2025-11-12T22:24:18.886 [DEBUG] [Thread-23781] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:24:18.886 [DEBUG] [Thread-23781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:24:18.886 [DEBUG] [Thread-23781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:24:18.886 [DEBUG] [Thread-23781] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:24:18.886 [DEBUG] [Thread-23781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:24:18.886 [DEBUG] [Thread-23781] [transport.py] [_log()] Compression: none
2025-11-12T22:24:18.886 [DEBUG] [Thread-23781] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:24:18.943 [DEBUG] [Thread-23781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:24:18.943 [DEBUG] [Thread-23781] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:24:18.944 [DEBUG] [Thread-23781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:24:18.944 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:24:18.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:24:18.999 [DEBUG] [Thread-23781] [transport.py] [_log()] userauth is OK
2025-11-12T22:24:18.999 [DEBUG] [Thread-23781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:24:19.000 [DEBUG] [Thread-23781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:24:19.000 [DEBUG] [Thread-23781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:24:19.000 [DEBUG] [Thread-23781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:24:19.020 [INFO] [Thread-23781] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:24:19.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:24:19.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:24:19.831 [DEBUG] [Thread-23781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:24:19.831 [DEBUG] [Thread-23781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:24:19.879 [DEBUG] [Thread-23781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:24:19.879 [DEBUG] [Thread-23781] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:24:19.887 [DEBUG] [Thread-23781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:24:19.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:24:19.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-11-12T22:24:19.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-11-12T22:24:19.911 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:24:19.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:24:19.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:24:19.919 [DEBUG] [Thread-23781] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:24:27.181 [DEBUG] [Thread-23783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:24:42.234 [DEBUG] [Thread-23784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:24:49.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:24:49.939 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:24:49.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-11-12T22:24:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 24, 20), 10.98, 48.04, 0.0, 16.23, 16.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:24:50.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:24:20
2025-11-12T22:24:50.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:24:50.859 [DEBUG] [Thread-23785] [transport.py] [_log()] starting thread (client mode): 0x14980f40
2025-11-12T22:24:50.859 [DEBUG] [Thread-23785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:24:50.878 [DEBUG] [Thread-23785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:24:50.878 [INFO] [Thread-23785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:24:50.881 [DEBUG] [Thread-23785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:24:50.881 [DEBUG] [Thread-23785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:24:50.881 [DEBUG] [Thread-23785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:24:50.881 [DEBUG] [Thread-23785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:24:50.881 [DEBUG] [Thread-23785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:24:50.881 [DEBUG] [Thread-23785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:24:50.881 [DEBUG] [Thread-23785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:24:50.881 [DEBUG] [Thread-23785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] client lang: <none>
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] server lang: <none>
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] kex follows: False
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] Compression: none
2025-11-12T22:24:50.882 [DEBUG] [Thread-23785] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:24:50.892 [DEBUG] [Thread-23785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:24:50.893 [DEBUG] [Thread-23785] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:24:50.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:24:50.894 [DEBUG] [Thread-23785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:24:50.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:24:50.896 [DEBUG] [Thread-23785] [transport.py] [_log()] userauth is OK
2025-11-12T22:24:50.897 [DEBUG] [Thread-23785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:24:50.897 [DEBUG] [Thread-23785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:24:50.897 [DEBUG] [Thread-23785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:24:50.897 [DEBUG] [Thread-23785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:24:50.923 [INFO] [Thread-23785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:24:50.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:24:51.572 [DEBUG] [Thread-23785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:24:51.572 [DEBUG] [Thread-23785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:24:51.573 [DEBUG] [Thread-23785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:24:51.614 [DEBUG] [Thread-23785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:24:51.614 [DEBUG] [Thread-23785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:24:51.618 [DEBUG] [Thread-23785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:24:51.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:24:51.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:24:51.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:24:51.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:24:51.639 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:24:51.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:24:51.641 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:24:51.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:24:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:24:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.850430 -999.00  +17.00   6.98     52   +7.20 1 2 1 1 1     0    0 8.97 -48.05 Z.ESw 7.3 7.0 195.3 15.1 17.6 -22.2 17.5 -21.7 17.3 -21.2 17.6 -21.5
2025-11-12T22:24:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:24:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:24:51.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.850430
2025-11-12T22:24:51.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:24:51.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:24:51.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:24:51.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:24:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:24:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:24:20', tmtdew=10.98, humidity=48.04, cloud=0.0, wind=16.23, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:24:20', seeing=0.8, atlas_timestamp='2025-11-12T20:24:37.152', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:22:00')
2025-11-12T22:24:51.644 [DEBUG] [Thread-23785] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:24: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-11-12T22:24:51.738 [DEBUG] [Thread-23788] [transport.py] [_log()] starting thread (client mode): 0x14983880
2025-11-12T22:24:51.738 [DEBUG] [Thread-23788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:24:51.753 [DEBUG] [Thread-23788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:24:51.754 [INFO] [Thread-23788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:24:51.761 [DEBUG] [Thread-23788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:24:51.761 [DEBUG] [Thread-23788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:24:51.761 [DEBUG] [Thread-23788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:24:51.761 [DEBUG] [Thread-23788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:24:51.761 [DEBUG] [Thread-23788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:24:51.761 [DEBUG] [Thread-23788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] client lang: <none>
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] server lang: <none>
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] kex follows: False
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] Compression: none
2025-11-12T22:24:51.762 [DEBUG] [Thread-23788] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:24:51.818 [DEBUG] [Thread-23788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:24:51.819 [DEBUG] [Thread-23788] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:24:51.819 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:24:51.820 [DEBUG] [Thread-23788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:24:51.821 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:24:51.875 [DEBUG] [Thread-23788] [transport.py] [_log()] userauth is OK
2025-11-12T22:24:51.875 [DEBUG] [Thread-23788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:24:51.876 [DEBUG] [Thread-23788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:24:51.876 [DEBUG] [Thread-23788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:24:51.876 [DEBUG] [Thread-23788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:24:51.895 [INFO] [Thread-23788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:24: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-11-12T22:24:51.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:24:52.705 [DEBUG] [Thread-23788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:24:52.705 [DEBUG] [Thread-23788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:24:52.753 [DEBUG] [Thread-23788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:24:52.753 [DEBUG] [Thread-23788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:24:52.761 [DEBUG] [Thread-23788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:24:52.769 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:24:52.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-11-12T22:24: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-11-12T22:24:52.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:24:52.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:24:52.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:24:52.792 [DEBUG] [Thread-23788] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:24:57.272 [DEBUG] [Thread-23790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:24:59.010 [DEBUG] [Thread-23791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:25:00.553 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:25:00.553 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:25:12.325 [DEBUG] [Thread-23792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:25:22.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:25:22.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:25:22.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-11-12T22:25:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 24, 52), 10.98, 48.52, 0.0, 15.99, 16.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:25:23.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:24:52
2025-11-12T22:25:23.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:25:23.719 [DEBUG] [Thread-23793] [transport.py] [_log()] starting thread (client mode): 0x14915f30
2025-11-12T22:25:23.719 [DEBUG] [Thread-23793] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:25:23.739 [DEBUG] [Thread-23793] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:25:23.739 [INFO] [Thread-23793] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:25:23.742 [DEBUG] [Thread-23793] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:25:23.742 [DEBUG] [Thread-23793] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:25:23.742 [DEBUG] [Thread-23793] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:25:23.742 [DEBUG] [Thread-23793] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] client lang: <none>
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] server lang: <none>
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] kex follows: False
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] Compression: none
2025-11-12T22:25:23.743 [DEBUG] [Thread-23793] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:25:23.758 [DEBUG] [Thread-23793] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:25:23.758 [DEBUG] [Thread-23793] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:25:23.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:25:23.760 [DEBUG] [Thread-23793] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:25:23.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:25:23.761 [DEBUG] [Thread-23793] [transport.py] [_log()] userauth is OK
2025-11-12T22:25:23.762 [DEBUG] [Thread-23793] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:25:23.762 [DEBUG] [Thread-23793] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:25:23.762 [DEBUG] [Thread-23793] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:25:23.762 [DEBUG] [Thread-23793] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:25:23.787 [INFO] [Thread-23793] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:25:23.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:25:24.369 [DEBUG] [Thread-23793] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:25:24.369 [DEBUG] [Thread-23793] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:25:24.369 [DEBUG] [Thread-23793] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:25:24.409 [DEBUG] [Thread-23793] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:25:24.410 [DEBUG] [Thread-23793] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:25:24.413 [DEBUG] [Thread-23793] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:25:24.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:25:24.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:25:24.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:25:24.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:25:24.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:25:24.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:25:24.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:25:24.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:25:24.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:25:24.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.850777 -999.00  +17.00   5.60     52   +7.20 1 2 1 1 1     0    0 8.48 -45.02 Z.ESw 9.6 5.6 203.4 14.5 17.6 -22.3 17.5 -21.6 17.3 -21.0 17.6 -21.6
2025-11-12T22:25:24.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:25:24.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:25:24.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.850777
2025-11-12T22:25:24.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:25:24.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:25:24.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:25:24.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:25:24.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:25:24.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:24:52', tmtdew=10.98, humidity=48.52, cloud=0.0, wind=15.99, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:24:52', seeing=0.92, atlas_timestamp='2025-11-12T20:25:07.133', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:22:00')
2025-11-12T22:25:24.433 [DEBUG] [Thread-23793] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:25:24.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:25:24.528 [DEBUG] [Thread-23796] [transport.py] [_log()] starting thread (client mode): 0x149804f0
2025-11-12T22:25:24.528 [DEBUG] [Thread-23796] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:25:24.547 [DEBUG] [Thread-23796] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:25:24.547 [INFO] [Thread-23796] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:25:24.555 [DEBUG] [Thread-23796] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:25:24.555 [DEBUG] [Thread-23796] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:25:24.555 [DEBUG] [Thread-23796] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:25:24.555 [DEBUG] [Thread-23796] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:25:24.555 [DEBUG] [Thread-23796] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] client lang: <none>
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] server lang: <none>
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] kex follows: False
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:25:24.556 [DEBUG] [Thread-23796] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:25:24.557 [DEBUG] [Thread-23796] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:25:24.557 [DEBUG] [Thread-23796] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:25:24.557 [DEBUG] [Thread-23796] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:25:24.557 [DEBUG] [Thread-23796] [transport.py] [_log()] Compression: none
2025-11-12T22:25:24.557 [DEBUG] [Thread-23796] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:25:24.619 [DEBUG] [Thread-23796] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:25:24.620 [DEBUG] [Thread-23796] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:25:24.622 [DEBUG] [Thread-23796] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:25:24.622 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:25:24.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:25:24.675 [DEBUG] [Thread-23796] [transport.py] [_log()] userauth is OK
2025-11-12T22:25:24.675 [DEBUG] [Thread-23796] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:25:24.675 [DEBUG] [Thread-23796] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:25:24.675 [DEBUG] [Thread-23796] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:25:24.675 [DEBUG] [Thread-23796] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:25:24.690 [INFO] [Thread-23796] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:25:24.690 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:25:24.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:25:25.516 [DEBUG] [Thread-23796] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:25:25.517 [DEBUG] [Thread-23796] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:25:25.564 [DEBUG] [Thread-23796] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:25:25.564 [DEBUG] [Thread-23796] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:25:25.572 [DEBUG] [Thread-23796] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:25:25.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:25:25.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-11-12T22:25:25.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:25:25.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:25:25.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:25:25.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:25:25.604 [DEBUG] [Thread-23796] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:25:27.358 [DEBUG] [Thread-23798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:25:42.405 [DEBUG] [Thread-23799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:25:55.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:25:55.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:25:55.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:25:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 25, 24), 10.96, 48.61, 0.0, 16.15, 16.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:25:56.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:25:24
2025-11-12T22:25:56.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:25:56.550 [DEBUG] [Thread-23800] [transport.py] [_log()] starting thread (client mode): 0x14917dc0
2025-11-12T22:25:56.551 [DEBUG] [Thread-23800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:25:56.566 [DEBUG] [Thread-23800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:25:56.567 [INFO] [Thread-23800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] client lang: <none>
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] server lang: <none>
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] kex follows: False
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] Compression: none
2025-11-12T22:25:56.569 [DEBUG] [Thread-23800] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:25:56.585 [DEBUG] [Thread-23800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:25:56.585 [DEBUG] [Thread-23800] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:25:56.585 [DEBUG] [Thread-23800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:25:56.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:25:56.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:25:56.587 [DEBUG] [Thread-23800] [transport.py] [_log()] userauth is OK
2025-11-12T22:25:56.587 [DEBUG] [Thread-23800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:25:56.587 [DEBUG] [Thread-23800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:25:56.588 [DEBUG] [Thread-23800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:25:56.588 [DEBUG] [Thread-23800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:25:56.601 [INFO] [Thread-23800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:25:56.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:25:57.159 [DEBUG] [Thread-23800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:25:57.159 [DEBUG] [Thread-23800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:25:57.160 [DEBUG] [Thread-23800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:25:57.200 [DEBUG] [Thread-23800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:25:57.200 [DEBUG] [Thread-23800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:25:57.202 [DEBUG] [Thread-23800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:25:57.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:25:57.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:25:57.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:25:57.214 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:25:57.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:25:57.218 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:25:57.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.851124 -999.00  +17.00   5.51     53   +7.30 1 2 1 1 1     0    0 8.26 -51.33 Z.ESw 11.1 5.5 214.7 15.2 17.6 -22.3 17.5 -21.5 17.3 -21.1 17.6 -21.5
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.851124
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:25:57.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:25:24', tmtdew=10.96, humidity=48.61, cloud=0.0, wind=16.15, temperature=16.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:25:24', seeing=0.91, atlas_timestamp='2025-11-12T20:25:37.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.4977499999999999, 0.4892500000000002, 0.5862500000000006, 0.4994999999999994, 0.6304999999999996, 0.5212500000000011, 0.5604999999999993, 0.44425000000000026, 0.5554999999999994, 0.601, 0.6752499999999992, 0.5564999999999998, 0.6624999999999996, 0.8102499999999999, 0.7624999999999993, 0.528999999999999, 0.5692499999999994, 0.6590000000000007, 0.6529999999999996, 0.5067499999999994, 0.5029999999999983, 1.3427499999999988, 1.3632500000000007, 1.07275, 0.653999999999999, 0.6785000000000005, 0.8007499999999999, 0.8515000000000006, 1.0070000000000006, nan, nan, 1.931000000000001, 0.8982499999999991], zp_timestamp='2025-11-12T20:22:00')
2025-11-12T22:25:57.218 [DEBUG] [Thread-23800] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:25:57.293 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:25:57.304 [DEBUG] [Thread-23803] [transport.py] [_log()] starting thread (client mode): 0x14915ed0
2025-11-12T22:25:57.305 [DEBUG] [Thread-23803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:25:57.322 [DEBUG] [Thread-23803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:25:57.322 [INFO] [Thread-23803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:25:57.329 [DEBUG] [Thread-23803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:25:57.329 [DEBUG] [Thread-23803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:25:57.329 [DEBUG] [Thread-23803] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:25:57.329 [DEBUG] [Thread-23803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] client lang: <none>
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] server lang: <none>
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] kex follows: False
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] Compression: none
2025-11-12T22:25:57.330 [DEBUG] [Thread-23803] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:25:57.385 [DEBUG] [Thread-23803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:25:57.385 [DEBUG] [Thread-23803] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:25:57.386 [DEBUG] [Thread-23803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:25:57.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:25:57.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:25:57.436 [DEBUG] [Thread-23805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:25:57.442 [DEBUG] [Thread-23803] [transport.py] [_log()] userauth is OK
2025-11-12T22:25:57.442 [DEBUG] [Thread-23803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:25:57.442 [DEBUG] [Thread-23803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:25:57.442 [DEBUG] [Thread-23803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:25:57.442 [DEBUG] [Thread-23803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:25:57.456 [INFO] [Thread-23803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:25:57.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:25:57.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:25:58.320 [DEBUG] [Thread-23803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:25:58.320 [DEBUG] [Thread-23803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:25:58.369 [DEBUG] [Thread-23803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:25:58.369 [DEBUG] [Thread-23803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:25:58.377 [DEBUG] [Thread-23803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:25:58.386 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:25:58.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:25:58.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:25:58.405 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:25:58.405 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:25:58.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:25:58.414 [DEBUG] [Thread-23803] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:25:59.078 [DEBUG] [Thread-23806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:26:00.756 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:26:00.757 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:26:12.478 [DEBUG] [Thread-23807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:26:27.512 [DEBUG] [Thread-23808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:26:28.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:26:28.431 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:26:28.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-11-12T22:26:29.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 25, 56), 10.88, 48.69, 0.0, 14.79, 16.87, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:26:29.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:25:56
2025-11-12T22:26:29.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:26:29.400 [DEBUG] [Thread-23809] [transport.py] [_log()] starting thread (client mode): 0x14982f20
2025-11-12T22:26:29.400 [DEBUG] [Thread-23809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:26:29.420 [DEBUG] [Thread-23809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:26:29.420 [INFO] [Thread-23809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] client lang: <none>
2025-11-12T22:26:29.423 [DEBUG] [Thread-23809] [transport.py] [_log()] server lang: <none>
2025-11-12T22:26:29.424 [DEBUG] [Thread-23809] [transport.py] [_log()] kex follows: False
2025-11-12T22:26:29.424 [DEBUG] [Thread-23809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:26:29.424 [DEBUG] [Thread-23809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:26:29.424 [DEBUG] [Thread-23809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:26:29.424 [DEBUG] [Thread-23809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:26:29.424 [DEBUG] [Thread-23809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:26:29.424 [DEBUG] [Thread-23809] [transport.py] [_log()] Compression: none
2025-11-12T22:26:29.424 [DEBUG] [Thread-23809] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:26:29.440 [DEBUG] [Thread-23809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:26:29.440 [DEBUG] [Thread-23809] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:26:29.440 [DEBUG] [Thread-23809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:26:29.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:26:29.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:26:29.484 [DEBUG] [Thread-23809] [transport.py] [_log()] userauth is OK
2025-11-12T22:26:29.484 [DEBUG] [Thread-23809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:26:29.484 [DEBUG] [Thread-23809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:26:29.484 [DEBUG] [Thread-23809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:26:29.484 [DEBUG] [Thread-23809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:26:29.515 [INFO] [Thread-23809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:26:29.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:26:30.153 [DEBUG] [Thread-23809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:26:30.153 [DEBUG] [Thread-23809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:26:30.153 [DEBUG] [Thread-23809] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:26:30.194 [DEBUG] [Thread-23809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:26:30.194 [DEBUG] [Thread-23809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:26:30.197 [DEBUG] [Thread-23809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:26:30.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:26:30.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:26:30.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:26:30.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:26:30.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:26:30.216 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:26:30.216 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.851124 -999.00  +17.00   5.51     53   +7.30 1 2 1 1 1     0    0 8.26 -51.33 Z.ESw 11.1 5.5 214.7 15.2 17.6 -22.3 17.5 -21.5 17.3 -21.1 17.6 -21.5
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.851124
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:26:30.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:25:56', tmtdew=10.88, humidity=48.69, cloud=0.0, wind=14.79, temperature=16.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:25:56', seeing=0.91, atlas_timestamp='2025-11-12T20:25:37.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:25:00')
2025-11-12T22:26:30.216 [DEBUG] [Thread-23809] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:26:30.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:26:30.300 [DEBUG] [Thread-23812] [transport.py] [_log()] starting thread (client mode): 0x14981900
2025-11-12T22:26:30.300 [DEBUG] [Thread-23812] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:26:30.314 [DEBUG] [Thread-23812] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:26:30.315 [INFO] [Thread-23812] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] client lang: <none>
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] server lang: <none>
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] kex follows: False
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] Compression: none
2025-11-12T22:26:30.322 [DEBUG] [Thread-23812] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:26:30.377 [DEBUG] [Thread-23812] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:26:30.378 [DEBUG] [Thread-23812] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:26:30.378 [DEBUG] [Thread-23812] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:26:30.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:26:30.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:26:30.435 [DEBUG] [Thread-23812] [transport.py] [_log()] userauth is OK
2025-11-12T22:26:30.435 [DEBUG] [Thread-23812] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:26:30.435 [DEBUG] [Thread-23812] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:26:30.435 [DEBUG] [Thread-23812] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:26:30.435 [DEBUG] [Thread-23812] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:26:30.448 [INFO] [Thread-23812] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:26:30.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:26:30.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:26:31.244 [DEBUG] [Thread-23812] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:26:31.244 [DEBUG] [Thread-23812] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:26:31.292 [DEBUG] [Thread-23812] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:26:31.292 [DEBUG] [Thread-23812] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:26:31.301 [DEBUG] [Thread-23812] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:26:31.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:26:31.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-11-12T22:26:31.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-11-12T22:26:31.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:26:31.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:26:31.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:26:31.337 [DEBUG] [Thread-23812] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:26:42.549 [DEBUG] [Thread-23814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:26:57.599 [DEBUG] [Thread-23815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:26:59.135 [DEBUG] [Thread-23816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:27:00.959 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:27:00.960 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:27:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:27:01.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:27:01.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-11-12T22:27:02.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 26, 28), 10.88, 48.67, 0.0, 14.93, 16.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:27:02.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:26:28
2025-11-12T22:27:02.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:27:02.330 [DEBUG] [Thread-23817] [transport.py] [_log()] starting thread (client mode): 0x11f015d0
2025-11-12T22:27:02.330 [DEBUG] [Thread-23817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:27:02.348 [DEBUG] [Thread-23817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:27:02.348 [INFO] [Thread-23817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:27:02.351 [DEBUG] [Thread-23817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:27:02.351 [DEBUG] [Thread-23817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] client lang: <none>
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] server lang: <none>
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] kex follows: False
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] Compression: none
2025-11-12T22:27:02.352 [DEBUG] [Thread-23817] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:27:02.359 [DEBUG] [Thread-23817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:27:02.359 [DEBUG] [Thread-23817] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:27:02.359 [DEBUG] [Thread-23817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:27:02.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:27:02.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:27:02.360 [DEBUG] [Thread-23817] [transport.py] [_log()] userauth is OK
2025-11-12T22:27:02.360 [DEBUG] [Thread-23817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:27:02.360 [DEBUG] [Thread-23817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:27:02.360 [DEBUG] [Thread-23817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:27:02.360 [DEBUG] [Thread-23817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:27:02.369 [INFO] [Thread-23817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:27:02.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:27:02.997 [DEBUG] [Thread-23817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:27:02.997 [DEBUG] [Thread-23817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:27:02.997 [DEBUG] [Thread-23817] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:27:03.037 [DEBUG] [Thread-23817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:27:03.038 [DEBUG] [Thread-23817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:27:03.041 [DEBUG] [Thread-23817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:27:03.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:27:03.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:27:03.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:27:03.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:27:03.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:27:03.065 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:27:03.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:27:03.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:27:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:27:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.851472 -999.00  +17.00   7.00     52   +7.30 1 2 1 1 1     0    0 8.64 -49.77 Z.ESW 6.5 7.0 205.9 16.9 17.6 -22.3 17.5 -21.7 17.3 -21.1 17.6 -21.6
2025-11-12T22:27:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:27:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:27:03.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.851472
2025-11-12T22:27:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:27:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:27:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:27:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:27:03.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:27:03.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:26:28', tmtdew=10.88, humidity=48.67, cloud=0.0, wind=14.93, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:27:00', seeing=0.94, atlas_timestamp='2025-11-12T20:26:07.181', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:25:00')
2025-11-12T22:27:03.068 [DEBUG] [Thread-23817] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:27:03.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:27:03.163 [DEBUG] [Thread-23820] [transport.py] [_log()] starting thread (client mode): 0x14983c40
2025-11-12T22:27:03.164 [DEBUG] [Thread-23820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:27:03.179 [DEBUG] [Thread-23820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:27:03.179 [INFO] [Thread-23820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:27:03.186 [DEBUG] [Thread-23820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] client lang: <none>
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] server lang: <none>
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] kex follows: False
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:27:03.187 [DEBUG] [Thread-23820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:27:03.188 [DEBUG] [Thread-23820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:27:03.188 [DEBUG] [Thread-23820] [transport.py] [_log()] Compression: none
2025-11-12T22:27:03.188 [DEBUG] [Thread-23820] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:27:03.244 [DEBUG] [Thread-23820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:27:03.244 [DEBUG] [Thread-23820] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:27:03.245 [DEBUG] [Thread-23820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:27:03.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:27:03.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:27:03.303 [DEBUG] [Thread-23820] [transport.py] [_log()] userauth is OK
2025-11-12T22:27:03.304 [DEBUG] [Thread-23820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:27:03.304 [DEBUG] [Thread-23820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:27:03.304 [DEBUG] [Thread-23820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:27:03.304 [DEBUG] [Thread-23820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:27:03.323 [INFO] [Thread-23820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:27:03.324 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:27:03.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:27:04.153 [DEBUG] [Thread-23820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:27:04.153 [DEBUG] [Thread-23820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:27:04.201 [DEBUG] [Thread-23820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:27:04.201 [DEBUG] [Thread-23820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:27:04.210 [DEBUG] [Thread-23820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:27:04.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:27:04.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-11-12T22:27:04.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-11-12T22:27:04.237 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:27:04.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:27:04.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:27:04.245 [DEBUG] [Thread-23820] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:27:12.631 [DEBUG] [Thread-23822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:27:27.692 [DEBUG] [Thread-23823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:27:34.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:27:34.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:27:34.258 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:27:34.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 26, 28), 10.88, 48.67, 0.0, 14.93, 16.77, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:27:34.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:26:28
2025-11-12T22:27:35.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:27:35.243 [DEBUG] [Thread-23824] [transport.py] [_log()] starting thread (client mode): 0x11f01f60
2025-11-12T22:27:35.243 [DEBUG] [Thread-23824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:27:35.267 [DEBUG] [Thread-23824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:27:35.267 [INFO] [Thread-23824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] client lang: <none>
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] server lang: <none>
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] kex follows: False
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:27:35.271 [DEBUG] [Thread-23824] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:27:35.272 [DEBUG] [Thread-23824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:27:35.272 [DEBUG] [Thread-23824] [transport.py] [_log()] Compression: none
2025-11-12T22:27:35.272 [DEBUG] [Thread-23824] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:27:35.286 [DEBUG] [Thread-23824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:27:35.286 [DEBUG] [Thread-23824] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:27:35.286 [DEBUG] [Thread-23824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:27:35.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:27:35.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:27:35.329 [DEBUG] [Thread-23824] [transport.py] [_log()] userauth is OK
2025-11-12T22:27:35.329 [DEBUG] [Thread-23824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:27:35.329 [DEBUG] [Thread-23824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:27:35.329 [DEBUG] [Thread-23824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:27:35.329 [DEBUG] [Thread-23824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:27:35.358 [INFO] [Thread-23824] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:27:35.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:27:35.983 [DEBUG] [Thread-23824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:27:35.984 [DEBUG] [Thread-23824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:27:35.984 [DEBUG] [Thread-23824] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:27:36.025 [DEBUG] [Thread-23824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:27:36.025 [DEBUG] [Thread-23824] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:27:36.028 [DEBUG] [Thread-23824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:27:36.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:27:36.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:27:36.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:27:36.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:27:36.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:27:36.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:27:36.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.851819 -999.00  +16.90   4.29     53   +7.30 1 2 1 1 1     0    0 8.71 -45.47 Z.ESW 8.0 4.3 208.6 15.3 17.6 -22.3 17.5 -21.7 17.3 -21.1 17.5 -21.6
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.851819
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:27:36.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:26:28', tmtdew=10.88, humidity=48.67, cloud=0.0, wind=14.93, temperature=16.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:27:32', seeing=0.81, atlas_timestamp='2025-11-12T20:26:37.162', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:25:00')
2025-11-12T22:27:36.046 [DEBUG] [Thread-23824] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:27:36.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:27:36.129 [DEBUG] [Thread-23827] [transport.py] [_log()] starting thread (client mode): 0x17345e40
2025-11-12T22:27:36.129 [DEBUG] [Thread-23827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:27:36.151 [DEBUG] [Thread-23827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:27:36.151 [INFO] [Thread-23827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:27:36.158 [DEBUG] [Thread-23827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:27:36.158 [DEBUG] [Thread-23827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:27:36.158 [DEBUG] [Thread-23827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] client lang: <none>
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] server lang: <none>
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] kex follows: False
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] Compression: none
2025-11-12T22:27:36.159 [DEBUG] [Thread-23827] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:27:36.214 [DEBUG] [Thread-23827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:27:36.214 [DEBUG] [Thread-23827] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:27:36.214 [DEBUG] [Thread-23827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:27:36.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:27:36.214 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:27:36.271 [DEBUG] [Thread-23827] [transport.py] [_log()] userauth is OK
2025-11-12T22:27:36.271 [DEBUG] [Thread-23827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:27:36.271 [DEBUG] [Thread-23827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:27:36.271 [DEBUG] [Thread-23827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:27:36.271 [DEBUG] [Thread-23827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:27:36.285 [INFO] [Thread-23827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:27:36.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:27:36.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:27:37.103 [DEBUG] [Thread-23827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:27:37.103 [DEBUG] [Thread-23827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:27:37.151 [DEBUG] [Thread-23827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:27:37.151 [DEBUG] [Thread-23827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:27:37.161 [DEBUG] [Thread-23827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:27:37.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:27:37.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-11-12T22:27:37.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-11-12T22:27:37.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:27:37.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:27:37.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:27:37.194 [DEBUG] [Thread-23827] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:27:42.722 [DEBUG] [Thread-23829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:27:57.771 [DEBUG] [Thread-23830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:27:59.192 [DEBUG] [Thread-23831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:28:01.163 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:28:01.165 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:28:07.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:28:07.192 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:28:07.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-11-12T22:28:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 28, 4), 10.79, 48.81, 0.0, 15.95, 16.79, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:28:07.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:28:04
2025-11-12T22:28:07.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:28:08.117 [DEBUG] [Thread-23832] [transport.py] [_log()] starting thread (client mode): 0x14923ee0
2025-11-12T22:28:08.117 [DEBUG] [Thread-23832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:28:08.138 [DEBUG] [Thread-23832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:28:08.138 [INFO] [Thread-23832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] client lang: <none>
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] server lang: <none>
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] kex follows: False
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] Compression: none
2025-11-12T22:28:08.141 [DEBUG] [Thread-23832] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:28:08.150 [DEBUG] [Thread-23832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:28:08.150 [DEBUG] [Thread-23832] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:28:08.151 [DEBUG] [Thread-23832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:28:08.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:28:08.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:28:08.152 [DEBUG] [Thread-23832] [transport.py] [_log()] userauth is OK
2025-11-12T22:28:08.153 [DEBUG] [Thread-23832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:28:08.153 [DEBUG] [Thread-23832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:28:08.153 [DEBUG] [Thread-23832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:28:08.153 [DEBUG] [Thread-23832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:28:08.171 [INFO] [Thread-23832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:28:08.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:28:08.938 [DEBUG] [Thread-23832] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:28:08.938 [DEBUG] [Thread-23832] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:28:08.938 [DEBUG] [Thread-23832] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:28:08.979 [DEBUG] [Thread-23832] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:28:08.979 [DEBUG] [Thread-23832] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:28:08.982 [DEBUG] [Thread-23832] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:28:08.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:28:08.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:28:08.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:28:08.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:28:09.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:28:09.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:28:09.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:28:09.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:28:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:28:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.852513 -999.00  +16.90  10.42     53   +7.30 1 2 1 1 1     0    0 8.48 -42.78 ZnESw 11.5 10.4 201.5 15.8 17.6 -22.2 17.4 -21.6 17.2 -21.0 17.6 -21.6
2025-11-12T22:28:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:28:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:28:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.852513
2025-11-12T22:28:09.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:28:09.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:28:09.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:28:09.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:28:09.009 [DEBUG] [Thread-23832] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:28:09.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:28:09.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:28:04', tmtdew=10.79, humidity=48.81, cloud=0.0, wind=15.95, temperature=16.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:28:04', seeing=0.85, atlas_timestamp='2025-11-12T20:27:37.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:25:00')
2025-11-12T22:28:09.094 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:28:09.106 [DEBUG] [Thread-23835] [transport.py] [_log()] starting thread (client mode): 0x14915510
2025-11-12T22:28:09.106 [DEBUG] [Thread-23835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:28:09.120 [DEBUG] [Thread-23835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:28:09.120 [INFO] [Thread-23835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:28:09.128 [DEBUG] [Thread-23835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:28:09.128 [DEBUG] [Thread-23835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:28:09.128 [DEBUG] [Thread-23835] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:28:09.128 [DEBUG] [Thread-23835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:28:09.128 [DEBUG] [Thread-23835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] client lang: <none>
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] server lang: <none>
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] kex follows: False
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:28:09.129 [DEBUG] [Thread-23835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:28:09.130 [DEBUG] [Thread-23835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:28:09.130 [DEBUG] [Thread-23835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:28:09.130 [DEBUG] [Thread-23835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:28:09.130 [DEBUG] [Thread-23835] [transport.py] [_log()] Compression: none
2025-11-12T22:28:09.130 [DEBUG] [Thread-23835] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:28:09.187 [DEBUG] [Thread-23835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:28:09.187 [DEBUG] [Thread-23835] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:28:09.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:28:09.188 [DEBUG] [Thread-23835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:28:09.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:28:09.243 [DEBUG] [Thread-23835] [transport.py] [_log()] userauth is OK
2025-11-12T22:28:09.243 [DEBUG] [Thread-23835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:28:09.243 [DEBUG] [Thread-23835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:28:09.243 [DEBUG] [Thread-23835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:28:09.243 [DEBUG] [Thread-23835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:28:09.260 [INFO] [Thread-23835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:28:09.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:28:09.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:28:10.080 [DEBUG] [Thread-23835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:28:10.081 [DEBUG] [Thread-23835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:28:10.129 [DEBUG] [Thread-23835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:28:10.129 [DEBUG] [Thread-23835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:28:10.138 [DEBUG] [Thread-23835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:28:10.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:28:10.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:28:10.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:28:10.166 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:28:10.166 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:28:10.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:28:10.175 [DEBUG] [Thread-23835] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:28:12.803 [DEBUG] [Thread-23837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:28:27.842 [DEBUG] [Thread-23838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:28:40.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:28:40.168 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:28:40.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-11-12T22:28:40.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 28, 36), 10.71, 49.42, 0.0, 16.02, 16.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:28:40.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:28:36
2025-11-12T22:28:40.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:28:41.108 [DEBUG] [Thread-23839] [transport.py] [_log()] starting thread (client mode): 0x14983b50
2025-11-12T22:28:41.108 [DEBUG] [Thread-23839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:28:41.129 [DEBUG] [Thread-23839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:28:41.129 [INFO] [Thread-23839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] client lang: <none>
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] server lang: <none>
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] kex follows: False
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:28:41.133 [DEBUG] [Thread-23839] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:28:41.134 [DEBUG] [Thread-23839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:28:41.134 [DEBUG] [Thread-23839] [transport.py] [_log()] Compression: none
2025-11-12T22:28:41.134 [DEBUG] [Thread-23839] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:28:41.142 [DEBUG] [Thread-23839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:28:41.142 [DEBUG] [Thread-23839] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:28:41.142 [DEBUG] [Thread-23839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:28:41.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:28:41.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:28:41.144 [DEBUG] [Thread-23839] [transport.py] [_log()] userauth is OK
2025-11-12T22:28:41.144 [DEBUG] [Thread-23839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:28:41.144 [DEBUG] [Thread-23839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:28:41.144 [DEBUG] [Thread-23839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:28:41.144 [DEBUG] [Thread-23839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:28:41.168 [INFO] [Thread-23839] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:28:41.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:28:41.806 [DEBUG] [Thread-23839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:28:41.807 [DEBUG] [Thread-23839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:28:41.807 [DEBUG] [Thread-23839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:28:41.848 [DEBUG] [Thread-23839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:28:41.848 [DEBUG] [Thread-23839] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:28:41.852 [DEBUG] [Thread-23839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:28:41.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:28:41.863 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:28:41.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:28:41.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:28:41.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:28:41.874 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:28:41.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:28:41.875 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:28:41.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:28:41.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.852860 -999.00  +16.80   9.84     53   +7.30 1 2 1 1 1     0    0 8.81 -38.24 Z.ESw 5.3 9.8 205.8 14.4 17.6 -22.2 17.4 -21.6 17.2 -21.2 17.6 -21.6
2025-11-12T22:28:41.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:28:41.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:28:41.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.852860
2025-11-12T22:28:41.876 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:28:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:28:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:28:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:28:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:28:41.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:28:36', tmtdew=10.71, humidity=49.42, cloud=0.0, wind=16.02, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:28:36', seeing=0.94, atlas_timestamp='2025-11-12T20:28:07.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:25:00')
2025-11-12T22:28:41.877 [DEBUG] [Thread-23839] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:28:41.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:28:41.973 [DEBUG] [Thread-23842] [transport.py] [_log()] starting thread (client mode): 0x14980d60
2025-11-12T22:28:41.973 [DEBUG] [Thread-23842] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:28:41.987 [DEBUG] [Thread-23842] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:28:41.988 [INFO] [Thread-23842] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:28:41.995 [DEBUG] [Thread-23842] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:28:41.995 [DEBUG] [Thread-23842] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:28:41.995 [DEBUG] [Thread-23842] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] client lang: <none>
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] server lang: <none>
2025-11-12T22:28:41.996 [DEBUG] [Thread-23842] [transport.py] [_log()] kex follows: False
2025-11-12T22:28:41.997 [DEBUG] [Thread-23842] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:28:41.997 [DEBUG] [Thread-23842] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:28:41.997 [DEBUG] [Thread-23842] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:28:41.997 [DEBUG] [Thread-23842] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:28:41.997 [DEBUG] [Thread-23842] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:28:41.997 [DEBUG] [Thread-23842] [transport.py] [_log()] Compression: none
2025-11-12T22:28:41.997 [DEBUG] [Thread-23842] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:28:42.055 [DEBUG] [Thread-23842] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:28:42.056 [DEBUG] [Thread-23842] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:28:42.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:28:42.057 [DEBUG] [Thread-23842] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:28:42.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:28:42.111 [DEBUG] [Thread-23842] [transport.py] [_log()] userauth is OK
2025-11-12T22:28:42.112 [DEBUG] [Thread-23842] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:28:42.112 [DEBUG] [Thread-23842] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:28:42.112 [DEBUG] [Thread-23842] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:28:42.112 [DEBUG] [Thread-23842] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:28:42.131 [INFO] [Thread-23842] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:28:42.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:28:42.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:28:42.877 [DEBUG] [Thread-23844 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:28:42.949 [DEBUG] [Thread-23842] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:28:42.949 [DEBUG] [Thread-23842] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:28:42.997 [DEBUG] [Thread-23842] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:28:42.997 [DEBUG] [Thread-23842] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:28:43.006 [DEBUG] [Thread-23842] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:28:43.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:28:43.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-11-12T22:28:43.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-11-12T22:28:43.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:28:43.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:28:43.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:28:43.046 [DEBUG] [Thread-23842] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:28:57.936 [DEBUG] [Thread-23845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:28:59.248 [DEBUG] [Thread-23846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:29:01.425 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:29:01.426 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:29:12.974 [DEBUG] [Thread-23847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:29:13.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:29:13.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:29:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:29:13.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 29, 8), 10.71, 49.41, 0.0, 14.1, 16.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:29:13.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:29:08
2025-11-12T22:29:13.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:29:14.001 [DEBUG] [Thread-23848] [transport.py] [_log()] starting thread (client mode): 0x14922830
2025-11-12T22:29:14.002 [DEBUG] [Thread-23848] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:29:14.022 [DEBUG] [Thread-23848] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:29:14.022 [INFO] [Thread-23848] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:29:14.025 [DEBUG] [Thread-23848] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:29:14.025 [DEBUG] [Thread-23848] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:29:14.025 [DEBUG] [Thread-23848] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] client lang: <none>
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] server lang: <none>
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] kex follows: False
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] Compression: none
2025-11-12T22:29:14.026 [DEBUG] [Thread-23848] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:29:14.044 [DEBUG] [Thread-23848] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:29:14.044 [DEBUG] [Thread-23848] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:29:14.045 [DEBUG] [Thread-23848] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:29:14.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:29:14.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:29:14.046 [DEBUG] [Thread-23848] [transport.py] [_log()] userauth is OK
2025-11-12T22:29:14.047 [DEBUG] [Thread-23848] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:29:14.047 [DEBUG] [Thread-23848] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:29:14.047 [DEBUG] [Thread-23848] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:29:14.047 [DEBUG] [Thread-23848] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:29:14.064 [INFO] [Thread-23848] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:29:14.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:29:14.807 [DEBUG] [Thread-23848] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:29:14.808 [DEBUG] [Thread-23848] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:29:14.808 [DEBUG] [Thread-23848] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:29:14.849 [DEBUG] [Thread-23848] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:29:14.849 [DEBUG] [Thread-23848] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:29:14.852 [DEBUG] [Thread-23848] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:29:14.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:29:14.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:29:14.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:29:14.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:29:14.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:29:14.877 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:29:14.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:29:14.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:29:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:29:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.853208 -999.00  +16.80   8.37     53   +7.30 1 2 1 1 1     0    0 8.82 -39.34 Z.ESw 11.3 8.4 212.0 13.9 17.6 -22.3 17.4 -21.6 17.2 -21.1 17.5 -21.5
2025-11-12T22:29:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:29:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:29:14.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.853208
2025-11-12T22:29:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:29:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:29:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:29:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:29:14.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:29:14.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:29:08', tmtdew=10.71, humidity=49.41, cloud=0.0, wind=14.1, temperature=16.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:29:08', seeing=0.94, atlas_timestamp='2025-11-12T20:28:37.171', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:28:00')
2025-11-12T22:29:14.880 [DEBUG] [Thread-23848] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:29:14.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:29:14.971 [DEBUG] [Thread-23851] [transport.py] [_log()] starting thread (client mode): 0x149238b0
2025-11-12T22:29:14.971 [DEBUG] [Thread-23851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:29:14.985 [DEBUG] [Thread-23851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:29:14.986 [INFO] [Thread-23851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] client lang: <none>
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] server lang: <none>
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] kex follows: False
2025-11-12T22:29:14.994 [DEBUG] [Thread-23851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:29:14.995 [DEBUG] [Thread-23851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:29:14.995 [DEBUG] [Thread-23851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:29:14.995 [DEBUG] [Thread-23851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:29:14.995 [DEBUG] [Thread-23851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:29:14.995 [DEBUG] [Thread-23851] [transport.py] [_log()] Compression: none
2025-11-12T22:29:14.995 [DEBUG] [Thread-23851] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:29:15.056 [DEBUG] [Thread-23851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:29:15.057 [DEBUG] [Thread-23851] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:29:15.057 [DEBUG] [Thread-23851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:29:15.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:29:15.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:29:15.119 [DEBUG] [Thread-23851] [transport.py] [_log()] userauth is OK
2025-11-12T22:29:15.120 [DEBUG] [Thread-23851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:29:15.120 [DEBUG] [Thread-23851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:29:15.120 [DEBUG] [Thread-23851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:29:15.120 [DEBUG] [Thread-23851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:29:15.142 [INFO] [Thread-23851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:29: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-11-12T22:29:15.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:29:16.021 [DEBUG] [Thread-23851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:29:16.021 [DEBUG] [Thread-23851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:29:16.068 [DEBUG] [Thread-23851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:29:16.069 [DEBUG] [Thread-23851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:29:16.078 [DEBUG] [Thread-23851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:29:16.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:29:16.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:29:16.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-11-12T22:29:16.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:29:16.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:29:16.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:29:16.115 [DEBUG] [Thread-23851] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:29:28.013 [DEBUG] [Thread-23853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:29:43.061 [DEBUG] [Thread-23854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:29:46.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:29:46.137 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:29:46.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-11-12T22:29:46.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 29, 40), 10.67, 49.37, 0.0, 14.13, 16.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:29:46.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:29:40
2025-11-12T22:29:46.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:29:47.057 [DEBUG] [Thread-23855] [transport.py] [_log()] starting thread (client mode): 0x14921c00
2025-11-12T22:29:47.057 [DEBUG] [Thread-23855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:29:47.078 [DEBUG] [Thread-23855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:29:47.078 [INFO] [Thread-23855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:29:47.081 [DEBUG] [Thread-23855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] client lang: <none>
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] server lang: <none>
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] kex follows: False
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] Compression: none
2025-11-12T22:29:47.082 [DEBUG] [Thread-23855] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:29:47.100 [DEBUG] [Thread-23855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:29:47.101 [DEBUG] [Thread-23855] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:29:47.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:29:47.102 [DEBUG] [Thread-23855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:29:47.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:29:47.104 [DEBUG] [Thread-23855] [transport.py] [_log()] userauth is OK
2025-11-12T22:29:47.104 [DEBUG] [Thread-23855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:29:47.104 [DEBUG] [Thread-23855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:29:47.105 [DEBUG] [Thread-23855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:29:47.105 [DEBUG] [Thread-23855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:29:47.141 [INFO] [Thread-23855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:29:47.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:29:47.762 [DEBUG] [Thread-23855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:29:47.762 [DEBUG] [Thread-23855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:29:47.763 [DEBUG] [Thread-23855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:29:47.804 [DEBUG] [Thread-23855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:29:47.804 [DEBUG] [Thread-23855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:29:47.807 [DEBUG] [Thread-23855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:29:47.820 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:29:47.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:29:47.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:29:47.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:29:47.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:29:47.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:29:47.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:29:47.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:29:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:29:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.853555 -999.00  +16.80   4.15     53   +7.30 1 2 1 1 1     0    0 8.77 -38.27 ZnESw 6.5 4.2 203.4 15.0 17.5 -22.2 17.4 -21.7 17.2 -21.0 17.5 -21.5
2025-11-12T22:29:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:29:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:29:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.853555
2025-11-12T22:29:47.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:29:47.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:29:47.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:29:47.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:29:47.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:29:47.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:29:40', tmtdew=10.67, humidity=49.37, cloud=0.0, wind=14.13, temperature=16.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:29:40', seeing=0.84, atlas_timestamp='2025-11-12T20:29:07.152', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:28:00')
2025-11-12T22:29:47.833 [DEBUG] [Thread-23855] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:29:47.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:29:47.928 [DEBUG] [Thread-23858] [transport.py] [_log()] starting thread (client mode): 0x14945db0
2025-11-12T22:29:47.928 [DEBUG] [Thread-23858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:29:47.942 [DEBUG] [Thread-23858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:29:47.943 [INFO] [Thread-23858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:29:47.950 [DEBUG] [Thread-23858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] client lang: <none>
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] server lang: <none>
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] kex follows: False
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] Compression: none
2025-11-12T22:29:47.951 [DEBUG] [Thread-23858] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:29:48.007 [DEBUG] [Thread-23858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:29:48.007 [DEBUG] [Thread-23858] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:29:48.008 [DEBUG] [Thread-23858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:29:48.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:29:48.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:29:48.063 [DEBUG] [Thread-23858] [transport.py] [_log()] userauth is OK
2025-11-12T22:29:48.064 [DEBUG] [Thread-23858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:29:48.064 [DEBUG] [Thread-23858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:29:48.064 [DEBUG] [Thread-23858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:29:48.064 [DEBUG] [Thread-23858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:29:48.083 [INFO] [Thread-23858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:29:48.083 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:29:48.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:29:48.891 [DEBUG] [Thread-23858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:29:48.891 [DEBUG] [Thread-23858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:29:48.939 [DEBUG] [Thread-23858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:29:48.939 [DEBUG] [Thread-23858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:29:48.948 [DEBUG] [Thread-23858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:29:48.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:29:48.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-11-12T22:29:48.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-11-12T22:29:48.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:29:48.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:29:48.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:29:48.985 [DEBUG] [Thread-23858] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:29:58.097 [DEBUG] [Thread-23860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:29:59.305 [DEBUG] [Thread-23861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:30:01.674 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:30:01.674 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:30:13.142 [DEBUG] [Thread-23862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:30:19.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:30:19.008 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:30:19.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-11-12T22:30:19.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 30, 12), 10.64, 49.47, 0.0, 15.37, 16.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:30:19.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:30:12
2025-11-12T22:30:19.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:30:19.937 [DEBUG] [Thread-23863] [transport.py] [_log()] starting thread (client mode): 0x19dda710
2025-11-12T22:30:19.938 [DEBUG] [Thread-23863] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:30:19.960 [DEBUG] [Thread-23863] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:30:19.960 [INFO] [Thread-23863] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] client lang: <none>
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] server lang: <none>
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] kex follows: False
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] Compression: none
2025-11-12T22:30:19.963 [DEBUG] [Thread-23863] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:30:19.981 [DEBUG] [Thread-23863] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:30:19.982 [DEBUG] [Thread-23863] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:30:19.982 [DEBUG] [Thread-23863] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:30:19.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:30:19.983 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:30:19.984 [DEBUG] [Thread-23863] [transport.py] [_log()] userauth is OK
2025-11-12T22:30:19.985 [DEBUG] [Thread-23863] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:30:19.985 [DEBUG] [Thread-23863] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:30:19.985 [DEBUG] [Thread-23863] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:30:19.985 [DEBUG] [Thread-23863] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:30:20.008 [INFO] [Thread-23863] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:30:20.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:30:21.011 [DEBUG] [Thread-23863] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:30:21.011 [DEBUG] [Thread-23863] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:30:21.012 [DEBUG] [Thread-23863] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:30:21.052 [DEBUG] [Thread-23863] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:30:21.053 [DEBUG] [Thread-23863] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:30:21.056 [DEBUG] [Thread-23863] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:30:21.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:30:21.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:30:21.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:30:21.073 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:30:21.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:30:21.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:30:21.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:30:21.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:30:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:30:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.853902 -999.00  +16.80  12.90     53   +7.40 1 2 1 1 1     0    0 8.92 -36.86 ZnESw 9.5 12.9 212.6 14.2 17.5 -22.4 17.4 -21.7 17.1 -20.9 17.5 -21.6
2025-11-12T22:30:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:30:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:30:21.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.853902
2025-11-12T22:30:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:30:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:30:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:30:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:30:21.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:30:21.082 [DEBUG] [Thread-23863] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:30:21.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:30:12', tmtdew=10.64, humidity=49.47, cloud=0.0, wind=15.37, temperature=16.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:30:12', seeing=0.99, atlas_timestamp='2025-11-12T20:29:37.133', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:28:00')
2025-11-12T22:30:21.165 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:30:21.177 [DEBUG] [Thread-23866] [transport.py] [_log()] starting thread (client mode): 0x19ddae60
2025-11-12T22:30:21.177 [DEBUG] [Thread-23866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:30:21.192 [DEBUG] [Thread-23866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:30:21.192 [INFO] [Thread-23866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:30:21.200 [DEBUG] [Thread-23866] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:30:21.200 [DEBUG] [Thread-23866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:30:21.201 [DEBUG] [Thread-23866] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:30:21.201 [DEBUG] [Thread-23866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:30:21.201 [DEBUG] [Thread-23866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:30:21.201 [DEBUG] [Thread-23866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:30:21.201 [DEBUG] [Thread-23866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:30:21.201 [DEBUG] [Thread-23866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:30:21.201 [DEBUG] [Thread-23866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:30:21.201 [DEBUG] [Thread-23866] [transport.py] [_log()] client lang: <none>
2025-11-12T22:30:21.202 [DEBUG] [Thread-23866] [transport.py] [_log()] server lang: <none>
2025-11-12T22:30:21.202 [DEBUG] [Thread-23866] [transport.py] [_log()] kex follows: False
2025-11-12T22:30:21.202 [DEBUG] [Thread-23866] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:30:21.202 [DEBUG] [Thread-23866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:30:21.202 [DEBUG] [Thread-23866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:30:21.202 [DEBUG] [Thread-23866] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:30:21.202 [DEBUG] [Thread-23866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:30:21.203 [DEBUG] [Thread-23866] [transport.py] [_log()] Compression: none
2025-11-12T22:30:21.203 [DEBUG] [Thread-23866] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:30:21.261 [DEBUG] [Thread-23866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:30:21.261 [DEBUG] [Thread-23866] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:30:21.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:30:21.271 [DEBUG] [Thread-23866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:30:21.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:30:21.320 [DEBUG] [Thread-23866] [transport.py] [_log()] userauth is OK
2025-11-12T22:30:21.320 [DEBUG] [Thread-23866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:30:21.321 [DEBUG] [Thread-23866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:30:21.321 [DEBUG] [Thread-23866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:30:21.321 [DEBUG] [Thread-23866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:30:21.342 [INFO] [Thread-23866] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:30:21.343 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:30:21.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:30:22.135 [DEBUG] [Thread-23866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:30:22.135 [DEBUG] [Thread-23866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:30:22.183 [DEBUG] [Thread-23866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:30:22.183 [DEBUG] [Thread-23866] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:30:22.192 [DEBUG] [Thread-23866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:30:22.201 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:30:22.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-11-12T22:30:22.211 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:30:22.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:30:22.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:30:22.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:30:22.229 [DEBUG] [Thread-23866] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:30:28.175 [DEBUG] [Thread-23868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:30:43.232 [DEBUG] [Thread-23869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:30:52.250 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:30:52.251 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:30:52.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-11-12T22:30:52.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 30, 44), 10.54, 49.64, 0.0, 12.81, 16.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:30:52.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:30:44
2025-11-12T22:30:53.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:30:53.167 [DEBUG] [Thread-23870] [transport.py] [_log()] starting thread (client mode): 0x14982e30
2025-11-12T22:30:53.168 [DEBUG] [Thread-23870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:30:53.187 [DEBUG] [Thread-23870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:30:53.187 [INFO] [Thread-23870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] client lang: <none>
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] server lang: <none>
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] kex follows: False
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] Compression: none
2025-11-12T22:30:53.190 [DEBUG] [Thread-23870] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:30:53.207 [DEBUG] [Thread-23870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:30:53.208 [DEBUG] [Thread-23870] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:30:53.208 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:30:53.208 [DEBUG] [Thread-23870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:30:53.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:30:53.210 [DEBUG] [Thread-23870] [transport.py] [_log()] userauth is OK
2025-11-12T22:30:53.210 [DEBUG] [Thread-23870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:30:53.211 [DEBUG] [Thread-23870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:30:53.211 [DEBUG] [Thread-23870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:30:53.211 [DEBUG] [Thread-23870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:30:53.235 [INFO] [Thread-23870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:30:53.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:30:53.859 [DEBUG] [Thread-23870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:30:53.859 [DEBUG] [Thread-23870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:30:53.860 [DEBUG] [Thread-23870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:30:53.901 [DEBUG] [Thread-23870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:30:53.901 [DEBUG] [Thread-23870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:30:53.904 [DEBUG] [Thread-23870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:30:53.916 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:30:53.916 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:30:53.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:30:53.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:30:53.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:30:53.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:30:53.928 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:30:53.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:30:53.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:30:53.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.854249 -999.00  +16.80   9.17     53   +7.30 1 2 1 1 1     0    0 8.56 -39.36 Z.ESw 6.8 9.2 194.0 12.9 17.5 -22.2 17.4 -21.7 17.2 -20.9 17.4 -21.5
2025-11-12T22:30:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:30:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:30:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.854249
2025-11-12T22:30:53.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:30:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:30:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:30:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:30:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:30:53.930 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:30:44', tmtdew=10.54, humidity=49.64, cloud=0.0, wind=12.81, temperature=16.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:30:44', seeing=1.01, atlas_timestamp='2025-11-12T20:30:07.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:28:00')
2025-11-12T22:30:53.930 [DEBUG] [Thread-23870] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:30:54.022 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:30:54.034 [DEBUG] [Thread-23873] [transport.py] [_log()] starting thread (client mode): 0x19dd9990
2025-11-12T22:30:54.034 [DEBUG] [Thread-23873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:30:54.048 [DEBUG] [Thread-23873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:30:54.049 [INFO] [Thread-23873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:30:54.056 [DEBUG] [Thread-23873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:30:54.056 [DEBUG] [Thread-23873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:30:54.056 [DEBUG] [Thread-23873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] client lang: <none>
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] server lang: <none>
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] kex follows: False
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:30:54.057 [DEBUG] [Thread-23873] [transport.py] [_log()] Compression: none
2025-11-12T22:30:54.058 [DEBUG] [Thread-23873] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:30:54.116 [DEBUG] [Thread-23873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:30:54.116 [DEBUG] [Thread-23873] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:30:54.117 [DEBUG] [Thread-23873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:30:54.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:30:54.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:30:54.172 [DEBUG] [Thread-23873] [transport.py] [_log()] userauth is OK
2025-11-12T22:30:54.172 [DEBUG] [Thread-23873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:30:54.172 [DEBUG] [Thread-23873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:30:54.172 [DEBUG] [Thread-23873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:30:54.173 [DEBUG] [Thread-23873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:30:54.191 [INFO] [Thread-23873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:30:54.191 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:30:54.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:30:55.015 [DEBUG] [Thread-23873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:30:55.016 [DEBUG] [Thread-23873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:30:55.063 [DEBUG] [Thread-23873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:30:55.064 [DEBUG] [Thread-23873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:30:55.073 [DEBUG] [Thread-23873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:30:55.082 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:30:55.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-11-12T22:30:55.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-11-12T22:30:55.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:30:55.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:30:55.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:30:55.109 [DEBUG] [Thread-23873] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:30:58.265 [DEBUG] [Thread-23875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:30:59.371 [DEBUG] [Thread-23876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:31:01.889 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:31:01.890 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:31:13.320 [DEBUG] [Thread-23877 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:31:25.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:31:25.130 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:31:25.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-11-12T22:31:25.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 31, 16), 10.57, 49.56, 0.0, 13.13, 16.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:31:25.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:31:16
2025-11-12T22:31:25.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:31:26.087 [DEBUG] [Thread-23878] [transport.py] [_log()] starting thread (client mode): 0x19ddbd30
2025-11-12T22:31:26.088 [DEBUG] [Thread-23878] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:31:26.108 [DEBUG] [Thread-23878] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:31:26.109 [INFO] [Thread-23878] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] client lang: <none>
2025-11-12T22:31:26.110 [DEBUG] [Thread-23878] [transport.py] [_log()] server lang: <none>
2025-11-12T22:31:26.111 [DEBUG] [Thread-23878] [transport.py] [_log()] kex follows: False
2025-11-12T22:31:26.111 [DEBUG] [Thread-23878] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:31:26.111 [DEBUG] [Thread-23878] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:31:26.111 [DEBUG] [Thread-23878] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:31:26.111 [DEBUG] [Thread-23878] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:31:26.111 [DEBUG] [Thread-23878] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:31:26.111 [DEBUG] [Thread-23878] [transport.py] [_log()] Compression: none
2025-11-12T22:31:26.111 [DEBUG] [Thread-23878] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:31:26.118 [DEBUG] [Thread-23878] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:31:26.118 [DEBUG] [Thread-23878] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:31:26.118 [DEBUG] [Thread-23878] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:31:26.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:31:26.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:31:26.118 [DEBUG] [Thread-23878] [transport.py] [_log()] userauth is OK
2025-11-12T22:31:26.119 [DEBUG] [Thread-23878] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:31:26.119 [DEBUG] [Thread-23878] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:31:26.119 [DEBUG] [Thread-23878] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:31:26.119 [DEBUG] [Thread-23878] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:31:26.132 [INFO] [Thread-23878] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:31:26.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:31:26.903 [DEBUG] [Thread-23878] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:31:26.903 [DEBUG] [Thread-23878] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:31:26.903 [DEBUG] [Thread-23878] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:31:26.944 [DEBUG] [Thread-23878] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:31:26.944 [DEBUG] [Thread-23878] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:31:26.946 [DEBUG] [Thread-23878] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:31:26.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:31:26.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:31:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:31:26.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:31:26.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:31:26.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:31:26.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.854944 -999.00  +16.80   9.78     53   +7.40 1 2 1 1 1     0    0 8.78 -35.85 Z.ESw 7.6 9.8 218.5 15.7 17.5 -22.2 17.4 -21.6 17.1 -20.9 17.5 -21.3
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.854944
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:31:26.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:31:26.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:31:16', tmtdew=10.57, humidity=49.56, cloud=0.0, wind=13.13, temperature=16.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:31:16', seeing=0.99, atlas_timestamp='2025-11-12T20:31:07.162', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:28:00')
2025-11-12T22:31:26.965 [DEBUG] [Thread-23878] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:31:27.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:31:27.049 [DEBUG] [Thread-23881] [transport.py] [_log()] starting thread (client mode): 0x14905840
2025-11-12T22:31:27.049 [DEBUG] [Thread-23881] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:31:27.064 [DEBUG] [Thread-23881] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:31:27.064 [INFO] [Thread-23881] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:31:27.071 [DEBUG] [Thread-23881] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:31:27.071 [DEBUG] [Thread-23881] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] client lang: <none>
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] server lang: <none>
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] kex follows: False
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] Compression: none
2025-11-12T22:31:27.072 [DEBUG] [Thread-23881] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:31:27.126 [DEBUG] [Thread-23881] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:31:27.126 [DEBUG] [Thread-23881] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:31:27.126 [DEBUG] [Thread-23881] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:31:27.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:31:27.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:31:27.184 [DEBUG] [Thread-23881] [transport.py] [_log()] userauth is OK
2025-11-12T22:31:27.184 [DEBUG] [Thread-23881] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:31:27.184 [DEBUG] [Thread-23881] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:31:27.184 [DEBUG] [Thread-23881] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:31:27.184 [DEBUG] [Thread-23881] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:31:27.203 [INFO] [Thread-23881] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:31:27.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:31:27.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:31:27.996 [DEBUG] [Thread-23881] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:31:27.996 [DEBUG] [Thread-23881] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:31:28.048 [DEBUG] [Thread-23881] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:31:28.048 [DEBUG] [Thread-23881] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:31:28.056 [DEBUG] [Thread-23881] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:31:28.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:31:28.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-11-12T22:31:28.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-11-12T22:31:28.081 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:31:28.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:31:28.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:31:28.089 [DEBUG] [Thread-23881] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:31:28.354 [DEBUG] [Thread-23883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:31:43.396 [DEBUG] [Thread-23884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:31:58.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:31:58.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:31:58.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-11-12T22:31:58.429 [DEBUG] [Thread-23885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:31:58.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 31, 48), 10.46, 49.75, 0.0, 15.23, 16.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:31:58.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:31:48
2025-11-12T22:31:58.837 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:31:58.983 [DEBUG] [Thread-23886] [transport.py] [_log()] starting thread (client mode): 0x19ddb760
2025-11-12T22:31:58.983 [DEBUG] [Thread-23886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:31:59.004 [DEBUG] [Thread-23886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:31:59.005 [INFO] [Thread-23886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] client lang: <none>
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] server lang: <none>
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] kex follows: False
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] Compression: none
2025-11-12T22:31:59.008 [DEBUG] [Thread-23886] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:31:59.026 [DEBUG] [Thread-23886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:31:59.026 [DEBUG] [Thread-23886] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:31:59.027 [DEBUG] [Thread-23886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:31:59.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:31:59.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:31:59.029 [DEBUG] [Thread-23886] [transport.py] [_log()] userauth is OK
2025-11-12T22:31:59.029 [DEBUG] [Thread-23886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:31:59.029 [DEBUG] [Thread-23886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:31:59.029 [DEBUG] [Thread-23886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:31:59.029 [DEBUG] [Thread-23886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:31:59.066 [INFO] [Thread-23886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:31:59.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:31:59.427 [DEBUG] [Thread-23888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:31:59.676 [DEBUG] [Thread-23886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:31:59.686 [DEBUG] [Thread-23886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:31:59.686 [DEBUG] [Thread-23886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:31:59.718 [DEBUG] [Thread-23886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:31:59.718 [DEBUG] [Thread-23886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:31:59.721 [DEBUG] [Thread-23886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:31:59.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:31:59.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:31:59.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:31:59.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:31:59.743 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:31:59.745 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:31:59.746 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:31:59.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:31:59.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:31:59.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.855291 -999.00  +16.80   7.29     54   +7.40 1 2 1 1 1     0    0 8.83 -33.98 Z.ESw 8.1 7.3 262.8 16.0 17.4 -22.2 17.4 -21.5 17.1 -21.0 17.4 -21.6
2025-11-12T22:31:59.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:31:59.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:31:59.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.855291
2025-11-12T22:31:59.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:31:59.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:31:59.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:31:59.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:31:59.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:31:59.748 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:31:48', tmtdew=10.46, humidity=49.75, cloud=0.0, wind=15.23, temperature=16.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:31:48', seeing=0.99, atlas_timestamp='2025-11-12T20:31:37.142', atlas_cloud=2, atlas_rain=1, zp_data=[0.36024999999999885, 0.37575000000000003, 0.5372500000000002, 0.41549999999999976, 0.5574999999999992, 0.5312500000000009, 0.49849999999999994, 0.3572500000000005, 0.3484999999999996, 0.35249999999999915, 0.4612499999999997, 0.3454999999999995, 0.5739999999999998, 0.8307500000000001, 0.7429999999999994, 0.5249999999999995, 0.40625, 0.47250000000000014, 0.4239999999999995, 0.35224999999999973, 0.6009999999999991, 1.4007499999999986, 1.3762500000000006, 1.2167500000000002, 0.5009999999999994, 0.39700000000000024, 0.7712500000000002, 0.6245000000000003, 1.0090000000000003, 1.8430000000000009, nan, 1.7840000000000007, 0.6987499999999995], zp_timestamp='2025-11-12T20:28:00')
2025-11-12T22:31:59.749 [DEBUG] [Thread-23886] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:31:59.831 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:31:59.845 [DEBUG] [Thread-23890] [transport.py] [_log()] starting thread (client mode): 0x14945060
2025-11-12T22:31:59.845 [DEBUG] [Thread-23890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:31:59.860 [DEBUG] [Thread-23890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:31:59.860 [INFO] [Thread-23890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:31:59.868 [DEBUG] [Thread-23890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:31:59.868 [DEBUG] [Thread-23890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] client lang: <none>
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] server lang: <none>
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] kex follows: False
2025-11-12T22:31:59.869 [DEBUG] [Thread-23890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:31:59.870 [DEBUG] [Thread-23890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:31:59.870 [DEBUG] [Thread-23890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:31:59.870 [DEBUG] [Thread-23890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:31:59.870 [DEBUG] [Thread-23890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:31:59.870 [DEBUG] [Thread-23890] [transport.py] [_log()] Compression: none
2025-11-12T22:31:59.870 [DEBUG] [Thread-23890] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:31:59.929 [DEBUG] [Thread-23890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:31:59.929 [DEBUG] [Thread-23890] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:31:59.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:31:59.930 [DEBUG] [Thread-23890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:31:59.931 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:31:59.988 [DEBUG] [Thread-23890] [transport.py] [_log()] userauth is OK
2025-11-12T22:31:59.988 [DEBUG] [Thread-23890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:31:59.988 [DEBUG] [Thread-23890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:31:59.989 [DEBUG] [Thread-23890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:31:59.989 [DEBUG] [Thread-23890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:32:00.008 [INFO] [Thread-23890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:32:00.008 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:32:00.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:32:00.815 [DEBUG] [Thread-23890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:32:00.815 [DEBUG] [Thread-23890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:32:00.863 [DEBUG] [Thread-23890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:32:00.864 [DEBUG] [Thread-23890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:32:00.872 [DEBUG] [Thread-23890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:32:00.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:32:00.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-11-12T22:32:00.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-11-12T22:32:00.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:32:00.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:32:00.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:32:00.906 [DEBUG] [Thread-23890] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:32:02.117 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:32:02.118 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:32:13.458 [DEBUG] [Thread-23892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:32:28.515 [DEBUG] [Thread-23893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:32:30.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:32:30.911 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:32:30.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-11-12T22:32:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 32, 20), 10.45, 49.77, 0.0, 14.26, 16.57, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:32:31.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:32:20
2025-11-12T22:32:31.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:32:31.837 [DEBUG] [Thread-23894] [transport.py] [_log()] starting thread (client mode): 0x149a9210
2025-11-12T22:32:31.837 [DEBUG] [Thread-23894] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:32:31.857 [DEBUG] [Thread-23894] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:32:31.857 [INFO] [Thread-23894] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:32:31.859 [DEBUG] [Thread-23894] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] client lang: <none>
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] server lang: <none>
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] kex follows: False
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:32:31.860 [DEBUG] [Thread-23894] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:32:31.861 [DEBUG] [Thread-23894] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:32:31.861 [DEBUG] [Thread-23894] [transport.py] [_log()] Compression: none
2025-11-12T22:32:31.861 [DEBUG] [Thread-23894] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:32:31.878 [DEBUG] [Thread-23894] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:32:31.879 [DEBUG] [Thread-23894] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:32:31.879 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:32:31.880 [DEBUG] [Thread-23894] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:32:31.881 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:32:31.882 [DEBUG] [Thread-23894] [transport.py] [_log()] userauth is OK
2025-11-12T22:32:31.883 [DEBUG] [Thread-23894] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:32:31.883 [DEBUG] [Thread-23894] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:32:31.883 [DEBUG] [Thread-23894] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:32:31.883 [DEBUG] [Thread-23894] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:32:31.905 [INFO] [Thread-23894] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:32:31.906 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:32:32.526 [DEBUG] [Thread-23894] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:32:32.527 [DEBUG] [Thread-23894] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:32:32.527 [DEBUG] [Thread-23894] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:32:32.568 [DEBUG] [Thread-23894] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:32:32.568 [DEBUG] [Thread-23894] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:32:32.571 [DEBUG] [Thread-23894] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:32:32.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:32:32.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:32:32.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:32:32.586 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:32:32.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:32:32.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:32:32.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:32:32.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:32:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:32:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.855638 -999.00  +16.80  10.22     54   +7.40 1 2 1 1 1     0    0 8.67 -35.19 Z.ESw 10.4 10.2 208.3 15.4 17.4 -22.1 17.3 -21.5 17.1 -21.0 17.4 -21.4
2025-11-12T22:32:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:32:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:32:32.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.855638
2025-11-12T22:32:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:32:32.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:32:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:32:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:32:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:32:32.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:32:20', tmtdew=10.45, humidity=49.77, cloud=0.0, wind=14.26, temperature=16.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:32:20', seeing=0.99, atlas_timestamp='2025-11-12T20:32:07.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.49374999999999947, 0.3512500000000003, 0.3777500000000007, 0.3899999999999988, 0.48049999999999926, 0.6122500000000013, 0.6615000000000002, 0.5062500000000014, 0.333499999999999, 0.31200000000000117, 0.31824999999999903, 0.37100000000000044, 0.6609999999999996, 0.8902500000000009, 0.857499999999999, 0.544999999999999, 0.3432499999999994, 0.39649999999999963, 0.2939999999999987, 0.28724999999999845, 0.9609999999999985, 1.486749999999999, 1.2317500000000008, 1.0927499999999997, 0.5929999999999991, 0.35350000000000037, 0.6287500000000001, 0.5615000000000006, 0.8700000000000001, 1.8760000000000012, nan, 2.0820000000000007, 0.4587499999999993], zp_timestamp='2025-11-12T20:31:00')
2025-11-12T22:32:32.595 [DEBUG] [Thread-23894] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:32:32.678 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:32:32.691 [DEBUG] [Thread-23897] [transport.py] [_log()] starting thread (client mode): 0x149477c0
2025-11-12T22:32:32.691 [DEBUG] [Thread-23897] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:32:32.707 [DEBUG] [Thread-23897] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:32:32.707 [INFO] [Thread-23897] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:32:32.715 [DEBUG] [Thread-23897] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] client lang: <none>
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] server lang: <none>
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] kex follows: False
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] Compression: none
2025-11-12T22:32:32.716 [DEBUG] [Thread-23897] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:32:32.771 [DEBUG] [Thread-23897] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:32:32.771 [DEBUG] [Thread-23897] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:32:32.771 [DEBUG] [Thread-23897] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:32:32.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:32:32.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:32:32.828 [DEBUG] [Thread-23897] [transport.py] [_log()] userauth is OK
2025-11-12T22:32:32.828 [DEBUG] [Thread-23897] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:32:32.828 [DEBUG] [Thread-23897] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:32:32.829 [DEBUG] [Thread-23897] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:32:32.829 [DEBUG] [Thread-23897] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:32:32.847 [INFO] [Thread-23897] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:32:32.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:32:32.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:32:33.685 [DEBUG] [Thread-23897] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:32:33.685 [DEBUG] [Thread-23897] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:32:33.734 [DEBUG] [Thread-23897] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:32:33.734 [DEBUG] [Thread-23897] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:32:33.743 [DEBUG] [Thread-23897] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:32:33.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:32:33.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-11-12T22:32:33.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-11-12T22:32:33.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:32:33.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:32:33.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:32:33.780 [DEBUG] [Thread-23897] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:32:43.545 [DEBUG] [Thread-23899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:32:58.584 [DEBUG] [Thread-23900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:32:59.484 [DEBUG] [Thread-23901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:33:02.321 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:33:02.322 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:33:03.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:33:03.793 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:33:03.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-11-12T22:33:04.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 32, 52), 10.44, 49.82, 0.0, 14.38, 16.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:33:04.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:32:52
2025-11-12T22:33:04.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:33:04.700 [DEBUG] [Thread-23902] [transport.py] [_log()] starting thread (client mode): 0x19ddb4f0
2025-11-12T22:33:04.700 [DEBUG] [Thread-23902] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:33:04.721 [DEBUG] [Thread-23902] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:33:04.721 [INFO] [Thread-23902] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:33:04.724 [DEBUG] [Thread-23902] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:33:04.724 [DEBUG] [Thread-23902] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:33:04.724 [DEBUG] [Thread-23902] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:33:04.724 [DEBUG] [Thread-23902] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:33:04.724 [DEBUG] [Thread-23902] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:33:04.724 [DEBUG] [Thread-23902] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:33:04.724 [DEBUG] [Thread-23902] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] client lang: <none>
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] server lang: <none>
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] kex follows: False
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] Compression: none
2025-11-12T22:33:04.725 [DEBUG] [Thread-23902] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:33:04.744 [DEBUG] [Thread-23902] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:33:04.745 [DEBUG] [Thread-23902] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:33:04.746 [DEBUG] [Thread-23902] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:33:04.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:33:04.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:33:04.748 [DEBUG] [Thread-23902] [transport.py] [_log()] userauth is OK
2025-11-12T22:33:04.748 [DEBUG] [Thread-23902] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:33:04.748 [DEBUG] [Thread-23902] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:33:04.749 [DEBUG] [Thread-23902] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:33:04.749 [DEBUG] [Thread-23902] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:33:04.764 [INFO] [Thread-23902] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:33:04.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:33:05.417 [DEBUG] [Thread-23902] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:33:05.417 [DEBUG] [Thread-23902] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:33:05.417 [DEBUG] [Thread-23902] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:33:05.458 [DEBUG] [Thread-23902] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:33:05.458 [DEBUG] [Thread-23902] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:33:05.462 [DEBUG] [Thread-23902] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:33:05.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:33:05.474 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:33:05.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:33:05.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:33:05.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:33:05.485 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:33:05.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:33:05.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:33:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:33:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.855985 -999.00  +16.70   8.17     54   +7.40 1 2 1 1 1     0    0 8.78 -33.68 Z.ESw 7.5 8.2 207.8 15.7 17.4 -22.2 17.3 -21.5 17.1 -21.0 17.4 -21.3
2025-11-12T22:33:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:33:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:33:05.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.855985
2025-11-12T22:33:05.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:33:05.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:33:05.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:33:05.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:33:05.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:33:05.488 [DEBUG] [Thread-23902] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:33:05.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:32:52', tmtdew=10.44, humidity=49.82, cloud=0.0, wind=14.38, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:32:52', seeing=0.93, atlas_timestamp='2025-11-12T20:32:37.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.49374999999999947, 0.3512500000000003, 0.3777500000000007, 0.3899999999999988, 0.48049999999999926, 0.6122500000000013, 0.6615000000000002, 0.5062500000000014, 0.333499999999999, 0.31200000000000117, 0.31824999999999903, 0.37100000000000044, 0.6609999999999996, 0.8902500000000009, 0.857499999999999, 0.544999999999999, 0.3432499999999994, 0.39649999999999963, 0.2939999999999987, 0.28724999999999845, 0.9609999999999985, 1.486749999999999, 1.2317500000000008, 1.0927499999999997, 0.5929999999999991, 0.35350000000000037, 0.6287500000000001, 0.5615000000000006, 0.8700000000000001, 1.8760000000000012, nan, 2.0820000000000007, 0.4587499999999993], zp_timestamp='2025-11-12T20:31:00')
2025-11-12T22:33:05.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:33:05.583 [DEBUG] [Thread-23905] [transport.py] [_log()] starting thread (client mode): 0x19dd9cf0
2025-11-12T22:33:05.584 [DEBUG] [Thread-23905] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:33:05.599 [DEBUG] [Thread-23905] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:33:05.599 [INFO] [Thread-23905] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:33:05.610 [DEBUG] [Thread-23905] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:33:05.611 [DEBUG] [Thread-23905] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:33:05.611 [DEBUG] [Thread-23905] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:33:05.611 [DEBUG] [Thread-23905] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:33:05.611 [DEBUG] [Thread-23905] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:33:05.611 [DEBUG] [Thread-23905] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:33:05.611 [DEBUG] [Thread-23905] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:33:05.611 [DEBUG] [Thread-23905] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:33:05.612 [DEBUG] [Thread-23905] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:33:05.612 [DEBUG] [Thread-23905] [transport.py] [_log()] client lang: <none>
2025-11-12T22:33:05.612 [DEBUG] [Thread-23905] [transport.py] [_log()] server lang: <none>
2025-11-12T22:33:05.612 [DEBUG] [Thread-23905] [transport.py] [_log()] kex follows: False
2025-11-12T22:33:05.612 [DEBUG] [Thread-23905] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:33:05.612 [DEBUG] [Thread-23905] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:33:05.612 [DEBUG] [Thread-23905] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:33:05.613 [DEBUG] [Thread-23905] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:33:05.613 [DEBUG] [Thread-23905] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:33:05.613 [DEBUG] [Thread-23905] [transport.py] [_log()] Compression: none
2025-11-12T22:33:05.613 [DEBUG] [Thread-23905] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:33:05.669 [DEBUG] [Thread-23905] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:33:05.670 [DEBUG] [Thread-23905] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:33:05.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:33:05.671 [DEBUG] [Thread-23905] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:33:05.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:33:05.730 [DEBUG] [Thread-23905] [transport.py] [_log()] userauth is OK
2025-11-12T22:33:05.730 [DEBUG] [Thread-23905] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:33:05.731 [DEBUG] [Thread-23905] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:33:05.731 [DEBUG] [Thread-23905] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:33:05.731 [DEBUG] [Thread-23905] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:33:05.754 [INFO] [Thread-23905] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:33:05.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:33:05.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:33:06.620 [DEBUG] [Thread-23905] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:33:06.620 [DEBUG] [Thread-23905] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:33:06.668 [DEBUG] [Thread-23905] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:33:06.668 [DEBUG] [Thread-23905] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:33:06.677 [DEBUG] [Thread-23905] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:33:06.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:33:06.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-11-12T22:33: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') -> 00000000
2025-11-12T22:33:06.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:33:06.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:33:06.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:33:06.714 [DEBUG] [Thread-23905] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:33:13.622 [DEBUG] [Thread-23907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:33:28.670 [DEBUG] [Thread-23908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:33:36.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:33:36.706 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:33:36.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:33:37.101 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:33:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 33, 24), 10.39, 49.99, 0.0, 13.59, 16.55, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:33:37.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:33:24
2025-11-12T22:33:37.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:33:37.609 [DEBUG] [Thread-23909] [transport.py] [_log()] starting thread (client mode): 0x19dda2c0
2025-11-12T22:33:37.610 [DEBUG] [Thread-23909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:33:37.629 [DEBUG] [Thread-23909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:33:37.630 [INFO] [Thread-23909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:33:37.633 [DEBUG] [Thread-23909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:33:37.633 [DEBUG] [Thread-23909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:33:37.633 [DEBUG] [Thread-23909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:33:37.633 [DEBUG] [Thread-23909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:33:37.633 [DEBUG] [Thread-23909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:33:37.633 [DEBUG] [Thread-23909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] client lang: <none>
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] server lang: <none>
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] kex follows: False
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] Compression: none
2025-11-12T22:33:37.634 [DEBUG] [Thread-23909] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:33:37.650 [DEBUG] [Thread-23909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:33:37.651 [DEBUG] [Thread-23909] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:33:37.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:33:37.652 [DEBUG] [Thread-23909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:33:37.652 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:33:37.654 [DEBUG] [Thread-23909] [transport.py] [_log()] userauth is OK
2025-11-12T22:33:37.654 [DEBUG] [Thread-23909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:33:37.654 [DEBUG] [Thread-23909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:33:37.654 [DEBUG] [Thread-23909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:33:37.654 [DEBUG] [Thread-23909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:33:37.689 [INFO] [Thread-23909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:33:37.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:33:38.286 [DEBUG] [Thread-23909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:33:38.286 [DEBUG] [Thread-23909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:33:38.286 [DEBUG] [Thread-23909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:33:38.326 [DEBUG] [Thread-23909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:33:38.327 [DEBUG] [Thread-23909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:33:38.330 [DEBUG] [Thread-23909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:33:38.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:33:38.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:33:38.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:33:38.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:33:38.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:33:38.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:33:38.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:33:38.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:33:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:33:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.856333 -999.00  +16.70   4.36     54   +7.40 1 2 1 1 1     0    0 8.96 -31.18 Z.ESw 10.1 4.4 252.3 13.0 17.4 -22.1 17.3 -21.5 17.1 -20.9 17.4 -21.3
2025-11-12T22:33:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:33:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:33:38.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.856333
2025-11-12T22:33:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:33:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:33:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:33:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:33:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:33:38.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:33:24', tmtdew=10.39, humidity=49.99, cloud=0.0, wind=13.59, temperature=16.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:33:24', seeing=0.93, atlas_timestamp='2025-11-12T20:33:07.171', atlas_cloud=2, atlas_rain=1, zp_data=[0.49374999999999947, 0.3512500000000003, 0.3777500000000007, 0.3899999999999988, 0.48049999999999926, 0.6122500000000013, 0.6615000000000002, 0.5062500000000014, 0.333499999999999, 0.31200000000000117, 0.31824999999999903, 0.37100000000000044, 0.6609999999999996, 0.8902500000000009, 0.857499999999999, 0.544999999999999, 0.3432499999999994, 0.39649999999999963, 0.2939999999999987, 0.28724999999999845, 0.9609999999999985, 1.486749999999999, 1.2317500000000008, 1.0927499999999997, 0.5929999999999991, 0.35350000000000037, 0.6287500000000001, 0.5615000000000006, 0.8700000000000001, 1.8760000000000012, nan, 2.0820000000000007, 0.4587499999999993], zp_timestamp='2025-11-12T20:31:00')
2025-11-12T22:33:38.357 [DEBUG] [Thread-23909] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:33:38.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:33:38.452 [DEBUG] [Thread-23912] [transport.py] [_log()] starting thread (client mode): 0x14907820
2025-11-12T22:33:38.453 [DEBUG] [Thread-23912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:33:38.468 [DEBUG] [Thread-23912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:33:38.468 [INFO] [Thread-23912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] client lang: <none>
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] server lang: <none>
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] kex follows: False
2025-11-12T22:33:38.476 [DEBUG] [Thread-23912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:33:38.477 [DEBUG] [Thread-23912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:33:38.477 [DEBUG] [Thread-23912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:33:38.477 [DEBUG] [Thread-23912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:33:38.477 [DEBUG] [Thread-23912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:33:38.477 [DEBUG] [Thread-23912] [transport.py] [_log()] Compression: none
2025-11-12T22:33:38.477 [DEBUG] [Thread-23912] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:33:38.536 [DEBUG] [Thread-23912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:33:38.537 [DEBUG] [Thread-23912] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:33:38.537 [DEBUG] [Thread-23912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:33:38.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:33:38.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:33:38.592 [DEBUG] [Thread-23912] [transport.py] [_log()] userauth is OK
2025-11-12T22:33:38.593 [DEBUG] [Thread-23912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:33:38.593 [DEBUG] [Thread-23912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:33:38.593 [DEBUG] [Thread-23912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:33:38.593 [DEBUG] [Thread-23912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:33:38.612 [INFO] [Thread-23912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:33:38.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:33:38.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:33:39.468 [DEBUG] [Thread-23912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:33:39.468 [DEBUG] [Thread-23912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:33:39.517 [DEBUG] [Thread-23912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:33:39.517 [DEBUG] [Thread-23912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:33:39.527 [DEBUG] [Thread-23912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:33:39.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:33:39.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-11-12T22:33:39.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-11-12T22:33:39.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:33:39.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:33:39.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:33:39.561 [DEBUG] [Thread-23912] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:33:43.704 [DEBUG] [Thread-23914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:33:58.756 [DEBUG] [Thread-23915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:33:59.556 [DEBUG] [Thread-23916 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:34:02.525 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:34:02.526 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:34:09.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:34:09.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:34:09.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-11-12T22:34:10.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 33, 56), 10.34, 50.49, 0.0, 15.86, 16.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:34:10.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:33:56
2025-11-12T22:34:10.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:34:10.502 [DEBUG] [Thread-23917] [transport.py] [_log()] starting thread (client mode): 0x14945660
2025-11-12T22:34:10.503 [DEBUG] [Thread-23917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:34:10.522 [DEBUG] [Thread-23917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:34:10.522 [INFO] [Thread-23917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] client lang: <none>
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] server lang: <none>
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] kex follows: False
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] Compression: none
2025-11-12T22:34:10.525 [DEBUG] [Thread-23917] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:34:10.541 [DEBUG] [Thread-23917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:34:10.542 [DEBUG] [Thread-23917] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:34:10.542 [DEBUG] [Thread-23917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:34:10.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:34:10.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:34:10.544 [DEBUG] [Thread-23917] [transport.py] [_log()] userauth is OK
2025-11-12T22:34:10.545 [DEBUG] [Thread-23917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:34:10.545 [DEBUG] [Thread-23917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:34:10.545 [DEBUG] [Thread-23917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:34:10.545 [DEBUG] [Thread-23917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:34:10.563 [INFO] [Thread-23917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:34:10.564 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:34:11.161 [DEBUG] [Thread-23917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:34:11.161 [DEBUG] [Thread-23917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:34:11.162 [DEBUG] [Thread-23917] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:34:11.202 [DEBUG] [Thread-23917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:34:11.203 [DEBUG] [Thread-23917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:34:11.206 [DEBUG] [Thread-23917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:34:11.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:34:11.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:34:11.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:34:11.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:34:11.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:34:11.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:34:11.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:34:11.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:34:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:34:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.856680 -999.00  +16.70   9.94     54   +7.50 1 2 1 1 1     0    0 8.75 -32.46 Z.ESw 7.4 9.9 223.7 17.2 17.4 -22.2 17.3 -21.4 17.1 -20.9 17.4 -21.2
2025-11-12T22:34:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:34:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:34:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.856680
2025-11-12T22:34:11.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:34:11.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:34:11.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:34:11.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:34:11.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:34:11.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:33:56', tmtdew=10.34, humidity=50.49, cloud=0.0, wind=15.86, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:33:56', seeing=0.87, atlas_timestamp='2025-11-12T20:33:37.152', atlas_cloud=2, atlas_rain=1, zp_data=[0.49374999999999947, 0.3512500000000003, 0.3777500000000007, 0.3899999999999988, 0.48049999999999926, 0.6122500000000013, 0.6615000000000002, 0.5062500000000014, 0.333499999999999, 0.31200000000000117, 0.31824999999999903, 0.37100000000000044, 0.6609999999999996, 0.8902500000000009, 0.857499999999999, 0.544999999999999, 0.3432499999999994, 0.39649999999999963, 0.2939999999999987, 0.28724999999999845, 0.9609999999999985, 1.486749999999999, 1.2317500000000008, 1.0927499999999997, 0.5929999999999991, 0.35350000000000037, 0.6287500000000001, 0.5615000000000006, 0.8700000000000001, 1.8760000000000012, nan, 2.0820000000000007, 0.4587499999999993], zp_timestamp='2025-11-12T20:31:00')
2025-11-12T22:34:11.234 [DEBUG] [Thread-23917] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:34:11.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:34:11.331 [DEBUG] [Thread-23920] [transport.py] [_log()] starting thread (client mode): 0x14920dc0
2025-11-12T22:34:11.331 [DEBUG] [Thread-23920] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:34:11.346 [DEBUG] [Thread-23920] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:34:11.346 [INFO] [Thread-23920] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:34:11.354 [DEBUG] [Thread-23920] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:34:11.354 [DEBUG] [Thread-23920] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:34:11.354 [DEBUG] [Thread-23920] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:34:11.354 [DEBUG] [Thread-23920] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:34:11.354 [DEBUG] [Thread-23920] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:34:11.354 [DEBUG] [Thread-23920] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:34:11.355 [DEBUG] [Thread-23920] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:34:11.355 [DEBUG] [Thread-23920] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:34:11.355 [DEBUG] [Thread-23920] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:34:11.355 [DEBUG] [Thread-23920] [transport.py] [_log()] client lang: <none>
2025-11-12T22:34:11.355 [DEBUG] [Thread-23920] [transport.py] [_log()] server lang: <none>
2025-11-12T22:34:11.355 [DEBUG] [Thread-23920] [transport.py] [_log()] kex follows: False
2025-11-12T22:34:11.355 [DEBUG] [Thread-23920] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:34:11.355 [DEBUG] [Thread-23920] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:34:11.356 [DEBUG] [Thread-23920] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:34:11.356 [DEBUG] [Thread-23920] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:34:11.356 [DEBUG] [Thread-23920] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:34:11.356 [DEBUG] [Thread-23920] [transport.py] [_log()] Compression: none
2025-11-12T22:34:11.356 [DEBUG] [Thread-23920] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:34:11.413 [DEBUG] [Thread-23920] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:34:11.414 [DEBUG] [Thread-23920] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:34:11.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:34:11.415 [DEBUG] [Thread-23920] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:34:11.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:34:11.472 [DEBUG] [Thread-23920] [transport.py] [_log()] userauth is OK
2025-11-12T22:34:11.473 [DEBUG] [Thread-23920] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:34:11.473 [DEBUG] [Thread-23920] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:34:11.473 [DEBUG] [Thread-23920] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:34:11.473 [DEBUG] [Thread-23920] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:34:11.491 [INFO] [Thread-23920] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:34:11.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:34:11.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:34:12.334 [DEBUG] [Thread-23920] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:34:12.334 [DEBUG] [Thread-23920] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:34:12.383 [DEBUG] [Thread-23920] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:34:12.383 [DEBUG] [Thread-23920] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:34:12.393 [DEBUG] [Thread-23920] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:34:12.404 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:34:12.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-11-12T22:34:12.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-11-12T22:34:12.423 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:34:12.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:34:12.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:34:12.432 [DEBUG] [Thread-23920] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:34:13.785 [DEBUG] [Thread-23922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:34:28.841 [DEBUG] [Thread-23923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:34:42.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:34:42.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:34:42.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:34:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 34, 28), 10.3, 50.59, 0.0, 15.03, 16.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:34:43.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:34:28
2025-11-12T22:34:43.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:34:43.400 [DEBUG] [Thread-23924] [transport.py] [_log()] starting thread (client mode): 0x19ddb4f0
2025-11-12T22:34:43.400 [DEBUG] [Thread-23924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:34:43.417 [DEBUG] [Thread-23924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:34:43.417 [INFO] [Thread-23924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] client lang: <none>
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] server lang: <none>
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] kex follows: False
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] Compression: none
2025-11-12T22:34:43.419 [DEBUG] [Thread-23924] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:34:43.429 [DEBUG] [Thread-23924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:34:43.429 [DEBUG] [Thread-23924] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:34:43.429 [DEBUG] [Thread-23924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:34:43.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:34:43.429 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:34:43.429 [DEBUG] [Thread-23924] [transport.py] [_log()] userauth is OK
2025-11-12T22:34:43.429 [DEBUG] [Thread-23924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:34:43.429 [DEBUG] [Thread-23924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:34:43.429 [DEBUG] [Thread-23924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:34:43.430 [DEBUG] [Thread-23924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:34:43.438 [INFO] [Thread-23924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:34:43.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:34:43.871 [DEBUG] [Thread-23926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:34:44.045 [DEBUG] [Thread-23924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:34:44.045 [DEBUG] [Thread-23924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:34:44.045 [DEBUG] [Thread-23924] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:34:44.085 [DEBUG] [Thread-23924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:34:44.086 [DEBUG] [Thread-23924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:34:44.088 [DEBUG] [Thread-23924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:34:44.101 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:34:44.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:34:44.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:34:44.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:34:44.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:34:44.110 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:34:44.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:34:44.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:34:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:34:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.857374 -999.00  +16.70   6.67     54   +7.50 1 2 1 1 1     0    0 8.62 -38.48 Z.ESw 8.9 6.7 230.3 10.2 17.4 -21.9 17.3 -21.4 17.1 -20.8 17.3 -21.2
2025-11-12T22:34:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:34:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:34:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.857374
2025-11-12T22:34:44.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:34:44.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:34:44.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:34:44.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:34:44.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:34:44.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:34:28', tmtdew=10.3, humidity=50.59, cloud=0.0, wind=15.03, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:34:28', seeing=0.87, atlas_timestamp='2025-11-12T20:34:37.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.49374999999999947, 0.3512500000000003, 0.3777500000000007, 0.3899999999999988, 0.48049999999999926, 0.6122500000000013, 0.6615000000000002, 0.5062500000000014, 0.333499999999999, 0.31200000000000117, 0.31824999999999903, 0.37100000000000044, 0.6609999999999996, 0.8902500000000009, 0.857499999999999, 0.544999999999999, 0.3432499999999994, 0.39649999999999963, 0.2939999999999987, 0.28724999999999845, 0.9609999999999985, 1.486749999999999, 1.2317500000000008, 1.0927499999999997, 0.5929999999999991, 0.35350000000000037, 0.6287500000000001, 0.5615000000000006, 0.8700000000000001, 1.8760000000000012, nan, 2.0820000000000007, 0.4587499999999993], zp_timestamp='2025-11-12T20:31:00')
2025-11-12T22:34:44.112 [DEBUG] [Thread-23924] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:34:44.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:34:44.204 [DEBUG] [Thread-23928] [transport.py] [_log()] starting thread (client mode): 0x149050c0
2025-11-12T22:34:44.204 [DEBUG] [Thread-23928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:34:44.219 [DEBUG] [Thread-23928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:34:44.219 [INFO] [Thread-23928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:34:44.227 [DEBUG] [Thread-23928] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:34:44.227 [DEBUG] [Thread-23928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:34:44.227 [DEBUG] [Thread-23928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:34:44.227 [DEBUG] [Thread-23928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:34:44.227 [DEBUG] [Thread-23928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] client lang: <none>
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] server lang: <none>
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] kex follows: False
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:34:44.228 [DEBUG] [Thread-23928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:34:44.229 [DEBUG] [Thread-23928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:34:44.229 [DEBUG] [Thread-23928] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:34:44.229 [DEBUG] [Thread-23928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:34:44.229 [DEBUG] [Thread-23928] [transport.py] [_log()] Compression: none
2025-11-12T22:34:44.229 [DEBUG] [Thread-23928] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:34:44.285 [DEBUG] [Thread-23928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:34:44.286 [DEBUG] [Thread-23928] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:34:44.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:34:44.287 [DEBUG] [Thread-23928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:34:44.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:34:44.344 [DEBUG] [Thread-23928] [transport.py] [_log()] userauth is OK
2025-11-12T22:34:44.345 [DEBUG] [Thread-23928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:34:44.345 [DEBUG] [Thread-23928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:34:44.345 [DEBUG] [Thread-23928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:34:44.345 [DEBUG] [Thread-23928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:34:44.365 [INFO] [Thread-23928] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:34:44.365 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:34:44.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:34:45.176 [DEBUG] [Thread-23928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:34:45.177 [DEBUG] [Thread-23928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:34:45.226 [DEBUG] [Thread-23928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:34:45.226 [DEBUG] [Thread-23928] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:34:45.236 [DEBUG] [Thread-23928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:34:45.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:34:45.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-11-12T22:34:45.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-11-12T22:34:45.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:34:45.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:34:45.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:34:45.272 [DEBUG] [Thread-23928] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:34:58.905 [DEBUG] [Thread-23930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:34:59.613 [DEBUG] [Thread-23931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:35:02.727 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:35:02.728 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:35:13.956 [DEBUG] [Thread-23932 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:35:15.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:35:15.269 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:35:15.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-11-12T22:35:15.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 34, 28), 10.3, 50.59, 0.0, 15.03, 16.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:35:15.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:34:28
2025-11-12T22:35:16.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:35:16.170 [DEBUG] [Thread-23933] [transport.py] [_log()] starting thread (client mode): 0x14980040
2025-11-12T22:35:16.170 [DEBUG] [Thread-23933] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:35:16.191 [DEBUG] [Thread-23933] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:35:16.191 [INFO] [Thread-23933] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:35:16.194 [DEBUG] [Thread-23933] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] client lang: <none>
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] server lang: <none>
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] kex follows: False
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:35:16.195 [DEBUG] [Thread-23933] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:35:16.196 [DEBUG] [Thread-23933] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:35:16.196 [DEBUG] [Thread-23933] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:35:16.196 [DEBUG] [Thread-23933] [transport.py] [_log()] Compression: none
2025-11-12T22:35:16.196 [DEBUG] [Thread-23933] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:35:16.214 [DEBUG] [Thread-23933] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:35:16.214 [DEBUG] [Thread-23933] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:35:16.215 [DEBUG] [Thread-23933] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:35:16.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:35:16.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:35:16.217 [DEBUG] [Thread-23933] [transport.py] [_log()] userauth is OK
2025-11-12T22:35:16.217 [DEBUG] [Thread-23933] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:35:16.217 [DEBUG] [Thread-23933] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:35:16.217 [DEBUG] [Thread-23933] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:35:16.217 [DEBUG] [Thread-23933] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:35:16.235 [INFO] [Thread-23933] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:35:16.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:35:16.791 [DEBUG] [Thread-23933] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:35:16.791 [DEBUG] [Thread-23933] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:35:16.792 [DEBUG] [Thread-23933] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:35:16.832 [DEBUG] [Thread-23933] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:35:16.832 [DEBUG] [Thread-23933] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:35:16.835 [DEBUG] [Thread-23933] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:35:16.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:35:16.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:35:16.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:35:16.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:35:16.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:35:16.856 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:35:16.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.857721 -999.00  +16.70  11.77     54   +7.50 1 2 1 1 1     0    0 8.49 -37.86 ZnESw 7.0 11.8 219.3 15.4 17.4 -22.0 17.2 -21.3 17.1 -20.7 17.4 -21.2
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.857721
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:35:16.856 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:34:28', tmtdew=10.3, humidity=50.59, cloud=0.0, wind=15.03, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:35:01', seeing=0.87, atlas_timestamp='2025-11-12T20:35:07.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:33:00')
2025-11-12T22:35:16.856 [DEBUG] [Thread-23933] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:35:16.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:35:16.945 [DEBUG] [Thread-23936] [transport.py] [_log()] starting thread (client mode): 0x14983fa0
2025-11-12T22:35:16.945 [DEBUG] [Thread-23936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:35:16.960 [DEBUG] [Thread-23936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:35:16.960 [INFO] [Thread-23936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] client lang: <none>
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] server lang: <none>
2025-11-12T22:35:16.968 [DEBUG] [Thread-23936] [transport.py] [_log()] kex follows: False
2025-11-12T22:35:16.969 [DEBUG] [Thread-23936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:35:16.969 [DEBUG] [Thread-23936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:35:16.969 [DEBUG] [Thread-23936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:35:16.969 [DEBUG] [Thread-23936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:35:16.969 [DEBUG] [Thread-23936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:35:16.969 [DEBUG] [Thread-23936] [transport.py] [_log()] Compression: none
2025-11-12T22:35:16.969 [DEBUG] [Thread-23936] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:35:17.031 [DEBUG] [Thread-23936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:35:17.031 [DEBUG] [Thread-23936] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:35:17.031 [DEBUG] [Thread-23936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:35:17.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:35:17.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:35:17.087 [DEBUG] [Thread-23936] [transport.py] [_log()] userauth is OK
2025-11-12T22:35:17.088 [DEBUG] [Thread-23936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:35:17.088 [DEBUG] [Thread-23936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:35:17.088 [DEBUG] [Thread-23936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:35:17.088 [DEBUG] [Thread-23936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:35:17.101 [INFO] [Thread-23936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:35:17.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:35:17.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:35:17.954 [DEBUG] [Thread-23936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:35:17.954 [DEBUG] [Thread-23936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:35:18.002 [DEBUG] [Thread-23936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:35:18.002 [DEBUG] [Thread-23936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:35:18.011 [DEBUG] [Thread-23936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:35:18.019 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:35:18.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-11-12T22:35:18.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-11-12T22:35:18.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:35:18.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:35:18.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:35:18.043 [DEBUG] [Thread-23936] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:35:28.985 [DEBUG] [Thread-23938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:35:44.034 [DEBUG] [Thread-23939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:35:48.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:35:48.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:35:48.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-11-12T22:35:48.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 35, 32), 10.23, 50.67, 0.0, 14.19, 16.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:35:48.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:35:32
2025-11-12T22:35:48.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:35:48.976 [DEBUG] [Thread-23940] [transport.py] [_log()] starting thread (client mode): 0x149459c0
2025-11-12T22:35:48.976 [DEBUG] [Thread-23940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:35:48.995 [DEBUG] [Thread-23940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:35:48.995 [INFO] [Thread-23940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:35:48.998 [DEBUG] [Thread-23940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:35:48.998 [DEBUG] [Thread-23940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:35:48.998 [DEBUG] [Thread-23940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:35:48.998 [DEBUG] [Thread-23940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] client lang: <none>
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] server lang: <none>
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] kex follows: False
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] Compression: none
2025-11-12T22:35:48.999 [DEBUG] [Thread-23940] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:35:49.016 [DEBUG] [Thread-23940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:35:49.016 [DEBUG] [Thread-23940] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:35:49.017 [DEBUG] [Thread-23940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:35:49.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:35:49.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:35:49.019 [DEBUG] [Thread-23940] [transport.py] [_log()] userauth is OK
2025-11-12T22:35:49.019 [DEBUG] [Thread-23940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:35:49.020 [DEBUG] [Thread-23940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:35:49.020 [DEBUG] [Thread-23940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:35:49.020 [DEBUG] [Thread-23940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:35:49.039 [INFO] [Thread-23940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:35:49.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:35:49.613 [DEBUG] [Thread-23940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:35:49.614 [DEBUG] [Thread-23940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:35:49.614 [DEBUG] [Thread-23940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:35:49.655 [DEBUG] [Thread-23940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:35:49.655 [DEBUG] [Thread-23940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:35:49.658 [DEBUG] [Thread-23940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:35:49.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:35:49.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:35:49.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:35:49.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:35:49.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:35:49.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:35:49.684 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:35:49.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:35:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:35:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.857721 -999.00  +16.70  11.77     54   +7.50 1 2 1 1 1     0    0 8.49 -37.86 ZnESw 7.0 11.8 219.3 15.4 17.4 -22.0 17.2 -21.3 17.1 -20.7 17.4 -21.2
2025-11-12T22:35:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:35:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:35:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.857721
2025-11-12T22:35:49.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:35:49.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:35:49.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:35:49.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:35:49.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:35:49.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:35:32', tmtdew=10.23, humidity=50.67, cloud=0.0, wind=14.19, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:35:33', seeing=0.79, atlas_timestamp='2025-11-12T20:35:07.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:33:00')
2025-11-12T22:35:49.687 [DEBUG] [Thread-23940] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:35:49.771 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:35:49.783 [DEBUG] [Thread-23943] [transport.py] [_log()] starting thread (client mode): 0x14947c70
2025-11-12T22:35:49.783 [DEBUG] [Thread-23943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:35:49.798 [DEBUG] [Thread-23943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:35:49.798 [INFO] [Thread-23943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] client lang: <none>
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] server lang: <none>
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] kex follows: False
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:35:49.806 [DEBUG] [Thread-23943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:35:49.807 [DEBUG] [Thread-23943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:35:49.807 [DEBUG] [Thread-23943] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:35:49.807 [DEBUG] [Thread-23943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:35:49.807 [DEBUG] [Thread-23943] [transport.py] [_log()] Compression: none
2025-11-12T22:35:49.807 [DEBUG] [Thread-23943] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:35:49.868 [DEBUG] [Thread-23943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:35:49.868 [DEBUG] [Thread-23943] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:35:49.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:35:49.869 [DEBUG] [Thread-23943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:35:49.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:35:49.924 [DEBUG] [Thread-23943] [transport.py] [_log()] userauth is OK
2025-11-12T22:35:49.925 [DEBUG] [Thread-23943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:35:49.925 [DEBUG] [Thread-23943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:35:49.925 [DEBUG] [Thread-23943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:35:49.925 [DEBUG] [Thread-23943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:35:49.950 [INFO] [Thread-23943] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:35:49.950 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:35:49.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:35:50.775 [DEBUG] [Thread-23943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:35:50.775 [DEBUG] [Thread-23943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:35:50.824 [DEBUG] [Thread-23943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:35:50.824 [DEBUG] [Thread-23943] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:35:50.833 [DEBUG] [Thread-23943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:35:50.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:35:50.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:35:50.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:35:50.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:35:50.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:35:50.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:35:50.870 [DEBUG] [Thread-23943] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:35:59.072 [DEBUG] [Thread-23945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:35:59.669 [DEBUG] [Thread-23946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:36:02.932 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:36:02.933 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:36:14.113 [DEBUG] [Thread-23947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:36:20.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:36:20.892 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:36:20.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:36:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 36, 4), 10.18, 50.85, 0.0, 14.38, 16.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:36:21.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:36:04
2025-11-12T22:36:21.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:36:21.798 [DEBUG] [Thread-23948] [transport.py] [_log()] starting thread (client mode): 0x14922ad0
2025-11-12T22:36:21.799 [DEBUG] [Thread-23948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:36:21.819 [DEBUG] [Thread-23948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:36:21.819 [INFO] [Thread-23948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] client lang: <none>
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] server lang: <none>
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] kex follows: False
2025-11-12T22:36:21.822 [DEBUG] [Thread-23948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:36:21.823 [DEBUG] [Thread-23948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:36:21.823 [DEBUG] [Thread-23948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:36:21.823 [DEBUG] [Thread-23948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:36:21.823 [DEBUG] [Thread-23948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:36:21.823 [DEBUG] [Thread-23948] [transport.py] [_log()] Compression: none
2025-11-12T22:36:21.823 [DEBUG] [Thread-23948] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:36:21.843 [DEBUG] [Thread-23948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:36:21.844 [DEBUG] [Thread-23948] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:36:21.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:36:21.845 [DEBUG] [Thread-23948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:36:21.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:36:21.847 [DEBUG] [Thread-23948] [transport.py] [_log()] userauth is OK
2025-11-12T22:36:21.848 [DEBUG] [Thread-23948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:36:21.848 [DEBUG] [Thread-23948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:36:21.848 [DEBUG] [Thread-23948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:36:21.848 [DEBUG] [Thread-23948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:36:21.872 [INFO] [Thread-23948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:36:21.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:36:22.531 [DEBUG] [Thread-23948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:36:22.532 [DEBUG] [Thread-23948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:36:22.532 [DEBUG] [Thread-23948] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:36:22.572 [DEBUG] [Thread-23948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:36:22.572 [DEBUG] [Thread-23948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:36:22.575 [DEBUG] [Thread-23948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:36:22.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:36:22.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:36:22.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:36:22.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:36:22.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:36:22.596 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:36:22.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:36:22.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.858069 -999.00  +16.70   6.21     54   +7.50 1 2 1 1 1     0    0 8.32 -39.62 Z.ESw 11.3 6.2 211.0 15.8 17.4 -22.0 17.3 -21.5 17.1 -20.8 17.3 -21.2
2025-11-12T22:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:36:22.597 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.858069
2025-11-12T22:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:36:22.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:36:04', tmtdew=10.18, humidity=50.85, cloud=0.0, wind=14.38, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:36:05', seeing=0.84, atlas_timestamp='2025-11-12T20:35:37.162', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:33:00')
2025-11-12T22:36:22.599 [DEBUG] [Thread-23948] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:36:22.684 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:36:22.697 [DEBUG] [Thread-23951] [transport.py] [_log()] starting thread (client mode): 0x19ddb700
2025-11-12T22:36:22.697 [DEBUG] [Thread-23951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:36:22.711 [DEBUG] [Thread-23951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:36:22.712 [INFO] [Thread-23951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:36:22.719 [DEBUG] [Thread-23951] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:36:22.719 [DEBUG] [Thread-23951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:36:22.719 [DEBUG] [Thread-23951] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:36:22.719 [DEBUG] [Thread-23951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] client lang: <none>
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] server lang: <none>
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] kex follows: False
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:36:22.720 [DEBUG] [Thread-23951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:36:22.721 [DEBUG] [Thread-23951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:36:22.721 [DEBUG] [Thread-23951] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:36:22.721 [DEBUG] [Thread-23951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:36:22.721 [DEBUG] [Thread-23951] [transport.py] [_log()] Compression: none
2025-11-12T22:36:22.721 [DEBUG] [Thread-23951] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:36:22.775 [DEBUG] [Thread-23951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:36:22.776 [DEBUG] [Thread-23951] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:36:22.776 [DEBUG] [Thread-23951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:36:22.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:36:22.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:36:22.832 [DEBUG] [Thread-23951] [transport.py] [_log()] userauth is OK
2025-11-12T22:36:22.832 [DEBUG] [Thread-23951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:36:22.832 [DEBUG] [Thread-23951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:36:22.832 [DEBUG] [Thread-23951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:36:22.832 [DEBUG] [Thread-23951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:36:22.851 [INFO] [Thread-23951] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:36:22.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:36:22.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:36:23.705 [DEBUG] [Thread-23951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:36:23.706 [DEBUG] [Thread-23951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:36:23.757 [DEBUG] [Thread-23951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:36:23.757 [DEBUG] [Thread-23951] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:36:23.766 [DEBUG] [Thread-23951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:36:23.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:36:23.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:36:23.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-11-12T22:36:23.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:36:23.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:36:23.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:36:23.800 [DEBUG] [Thread-23951] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:36:29.147 [DEBUG] [Thread-23953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:36:44.193 [DEBUG] [Thread-23954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:36:53.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:36:53.803 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:36:53.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-11-12T22:36:54.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 36, 36), 10.17, 50.9, 0.0, 13.39, 16.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:36:54.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:36:36
2025-11-12T22:36:54.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:36:54.709 [DEBUG] [Thread-23955] [transport.py] [_log()] starting thread (client mode): 0x19dd8c40
2025-11-12T22:36:54.709 [DEBUG] [Thread-23955] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:36:54.729 [DEBUG] [Thread-23955] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:36:54.729 [INFO] [Thread-23955] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:36:54.732 [DEBUG] [Thread-23955] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:36:54.732 [DEBUG] [Thread-23955] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:36:54.732 [DEBUG] [Thread-23955] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] client lang: <none>
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] server lang: <none>
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] kex follows: False
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:36:54.733 [DEBUG] [Thread-23955] [transport.py] [_log()] Compression: none
2025-11-12T22:36:54.734 [DEBUG] [Thread-23955] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:36:54.753 [DEBUG] [Thread-23955] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:36:54.754 [DEBUG] [Thread-23955] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:36:54.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:36:54.755 [DEBUG] [Thread-23955] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:36:54.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:36:54.758 [DEBUG] [Thread-23955] [transport.py] [_log()] userauth is OK
2025-11-12T22:36:54.758 [DEBUG] [Thread-23955] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:36:54.758 [DEBUG] [Thread-23955] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:36:54.758 [DEBUG] [Thread-23955] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:36:54.758 [DEBUG] [Thread-23955] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:36:54.782 [INFO] [Thread-23955] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:36:54.783 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:36:55.407 [DEBUG] [Thread-23955] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:36:55.408 [DEBUG] [Thread-23955] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:36:55.408 [DEBUG] [Thread-23955] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:36:55.449 [DEBUG] [Thread-23955] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:36:55.449 [DEBUG] [Thread-23955] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:36:55.452 [DEBUG] [Thread-23955] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:36:55.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:36:55.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:36:55.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:36:55.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:36:55.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:36:55.478 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:36:55.479 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:36:55.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:36:55.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:36:55.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.858416 -999.00  +16.60  13.86     54   +7.50 1 2 1 1 1     0    0 8.56 -38.22 Z.ESw 8.6 13.9 213.8 17.9 17.3 -22.0 17.2 -21.4 17.0 -20.8 17.3 -21.2
2025-11-12T22:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.858416
2025-11-12T22:36:55.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:36:55.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:36:36', tmtdew=10.17, humidity=50.9, cloud=0.0, wind=13.39, temperature=16.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:36:37', seeing=0.83, atlas_timestamp='2025-11-12T20:36:07.142', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:33:00')
2025-11-12T22:36:55.481 [DEBUG] [Thread-23955] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:36:55.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:36:55.576 [DEBUG] [Thread-23958] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T22:36:55.576 [DEBUG] [Thread-23958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:36:55.591 [DEBUG] [Thread-23958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:36:55.592 [INFO] [Thread-23958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:36:55.599 [DEBUG] [Thread-23958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:36:55.599 [DEBUG] [Thread-23958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:36:55.599 [DEBUG] [Thread-23958] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:36:55.599 [DEBUG] [Thread-23958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:36:55.599 [DEBUG] [Thread-23958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:36:55.599 [DEBUG] [Thread-23958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:36:55.599 [DEBUG] [Thread-23958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] client lang: <none>
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] server lang: <none>
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] kex follows: False
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] Compression: none
2025-11-12T22:36:55.600 [DEBUG] [Thread-23958] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:36:55.656 [DEBUG] [Thread-23958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:36:55.656 [DEBUG] [Thread-23958] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:36:55.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:36:55.657 [DEBUG] [Thread-23958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:36:55.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:36:55.712 [DEBUG] [Thread-23958] [transport.py] [_log()] userauth is OK
2025-11-12T22:36:55.713 [DEBUG] [Thread-23958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:36:55.713 [DEBUG] [Thread-23958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:36:55.713 [DEBUG] [Thread-23958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:36:55.713 [DEBUG] [Thread-23958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:36:55.732 [INFO] [Thread-23958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:36:55.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:36:55.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:36:56.533 [DEBUG] [Thread-23958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:36:56.534 [DEBUG] [Thread-23958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:36:56.581 [DEBUG] [Thread-23958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:36:56.581 [DEBUG] [Thread-23958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:36:56.590 [DEBUG] [Thread-23958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:36:56.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:36:56.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:36:56.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-11-12T22:36:56.616 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:36:56.616 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:36:56.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:36:56.625 [DEBUG] [Thread-23958] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:36:59.234 [DEBUG] [Thread-23960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:36:59.756 [DEBUG] [Thread-23961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:37:03.136 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:37:03.138 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:37:14.284 [DEBUG] [Thread-23962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:37:26.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:37:26.632 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:37:26.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-11-12T22:37:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 37, 9), 10.21, 50.75, 0.0, 13.76, 16.5, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:37:27.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:37:09
2025-11-12T22:37:27.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:37:27.538 [DEBUG] [Thread-23963] [transport.py] [_log()] starting thread (client mode): 0x149049d0
2025-11-12T22:37:27.538 [DEBUG] [Thread-23963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:37:27.557 [DEBUG] [Thread-23963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:37:27.557 [INFO] [Thread-23963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] client lang: <none>
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] server lang: <none>
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] kex follows: False
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:37:27.561 [DEBUG] [Thread-23963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:37:27.562 [DEBUG] [Thread-23963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:37:27.562 [DEBUG] [Thread-23963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:37:27.562 [DEBUG] [Thread-23963] [transport.py] [_log()] Compression: none
2025-11-12T22:37:27.562 [DEBUG] [Thread-23963] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:37:27.580 [DEBUG] [Thread-23963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:37:27.580 [DEBUG] [Thread-23963] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:37:27.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:37:27.582 [DEBUG] [Thread-23963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:37:27.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:37:27.583 [DEBUG] [Thread-23963] [transport.py] [_log()] userauth is OK
2025-11-12T22:37:27.584 [DEBUG] [Thread-23963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:37:27.584 [DEBUG] [Thread-23963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:37:27.584 [DEBUG] [Thread-23963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:37:27.584 [DEBUG] [Thread-23963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:37:27.607 [INFO] [Thread-23963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:37:27.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:37:28.271 [DEBUG] [Thread-23963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:37:28.271 [DEBUG] [Thread-23963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:37:28.272 [DEBUG] [Thread-23963] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:37:28.313 [DEBUG] [Thread-23963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:37:28.313 [DEBUG] [Thread-23963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:37:28.316 [DEBUG] [Thread-23963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:37:28.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:37:28.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:37:28.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:37:28.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:37:28.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:37:28.343 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:37:28.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:37:28.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:37:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:37:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.858763 -999.00  +16.60   5.36     54   +7.50 1 2 1 1 1     0    0 8.57 -41.25 Z.ESw 8.6 5.4 184.7 15.8 17.3 -21.8 17.2 -21.4 17.0 -20.8 17.3 -21.2
2025-11-12T22:37:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:37:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:37:28.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.858763
2025-11-12T22:37:28.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:37:28.345 [DEBUG] [Thread-23963] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:37:28.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:37:28.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:37:28.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:37:28.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:37:28.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:37:09', tmtdew=10.21, humidity=50.75, cloud=0.0, wind=13.76, temperature=16.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:37:09', seeing=0.83, atlas_timestamp='2025-11-12T20:36:37.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:33:00')
2025-11-12T22:37:28.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:37:28.447 [DEBUG] [Thread-23966] [transport.py] [_log()] starting thread (client mode): 0x14947a00
2025-11-12T22:37:28.447 [DEBUG] [Thread-23966] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:37:28.462 [DEBUG] [Thread-23966] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:37:28.463 [INFO] [Thread-23966] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:37:28.470 [DEBUG] [Thread-23966] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:37:28.470 [DEBUG] [Thread-23966] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:37:28.470 [DEBUG] [Thread-23966] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:37:28.470 [DEBUG] [Thread-23966] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:37:28.470 [DEBUG] [Thread-23966] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:37:28.470 [DEBUG] [Thread-23966] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:37:28.470 [DEBUG] [Thread-23966] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:37:28.470 [DEBUG] [Thread-23966] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] client lang: <none>
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] server lang: <none>
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] kex follows: False
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] Compression: none
2025-11-12T22:37:28.471 [DEBUG] [Thread-23966] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:37:28.526 [DEBUG] [Thread-23966] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:37:28.527 [DEBUG] [Thread-23966] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:37:28.527 [DEBUG] [Thread-23966] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:37:28.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:37:28.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:37:28.584 [DEBUG] [Thread-23966] [transport.py] [_log()] userauth is OK
2025-11-12T22:37:28.584 [DEBUG] [Thread-23966] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:37:28.584 [DEBUG] [Thread-23966] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:37:28.584 [DEBUG] [Thread-23966] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:37:28.584 [DEBUG] [Thread-23966] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:37:28.603 [INFO] [Thread-23966] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:37:28.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:37:28.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:37:29.314 [DEBUG] [Thread-23968 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:37:29.448 [DEBUG] [Thread-23966] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:37:29.448 [DEBUG] [Thread-23966] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:37:29.497 [DEBUG] [Thread-23966] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:37:29.497 [DEBUG] [Thread-23966] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:37:29.506 [DEBUG] [Thread-23966] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:37:29.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:37:29.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-11-12T22:37:29.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:37:29.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:37:29.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:37:29.534 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:37:29.542 [DEBUG] [Thread-23966] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:37:44.368 [DEBUG] [Thread-23969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:37:59.400 [DEBUG] [Thread-23970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:37:59.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:37:59.565 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:37:59.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-11-12T22:37:59.809 [DEBUG] [Thread-23971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:38:00.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 37, 41), 10.22, 50.72, 0.0, 13.39, 16.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:38:00.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:37:41
2025-11-12T22:38:00.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:38:00.475 [DEBUG] [Thread-23972] [transport.py] [_log()] starting thread (client mode): 0x149446a0
2025-11-12T22:38:00.475 [DEBUG] [Thread-23972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:38:00.495 [DEBUG] [Thread-23972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:38:00.495 [INFO] [Thread-23972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] client lang: <none>
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] server lang: <none>
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] kex follows: False
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] Compression: none
2025-11-12T22:38:00.499 [DEBUG] [Thread-23972] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:38:00.517 [DEBUG] [Thread-23972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:38:00.517 [DEBUG] [Thread-23972] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:38:00.518 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:38:00.518 [DEBUG] [Thread-23972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:38:00.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:38:00.561 [DEBUG] [Thread-23972] [transport.py] [_log()] userauth is OK
2025-11-12T22:38:00.561 [DEBUG] [Thread-23972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:38:00.561 [DEBUG] [Thread-23972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:38:00.561 [DEBUG] [Thread-23972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:38:00.561 [DEBUG] [Thread-23972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:38:00.592 [INFO] [Thread-23972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:38:00.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:38:01.245 [DEBUG] [Thread-23972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:38:01.245 [DEBUG] [Thread-23972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:38:01.245 [DEBUG] [Thread-23972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:38:01.286 [DEBUG] [Thread-23972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:38:01.286 [DEBUG] [Thread-23972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:38:01.289 [DEBUG] [Thread-23972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:38:01.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:38:01.301 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:38:01.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:38:01.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:38:01.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:38:01.310 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:38:01.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:38:01.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:38:01.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:38:01.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.859110 -999.00  +16.60   8.52     54   +7.40 1 2 1 1 1     0    0 8.27 -38.64 Z.ESw 8.1 8.5 221.9 15.4 17.3 -21.8 17.2 -21.3 17.0 -20.8 17.3 -21.2
2025-11-12T22:38:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:38:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:38:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.859110
2025-11-12T22:38:01.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:38:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:38:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:38:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:38:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:38:01.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:37:41', tmtdew=10.22, humidity=50.72, cloud=0.0, wind=13.39, temperature=16.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:37:41', seeing=0.82, atlas_timestamp='2025-11-12T20:37:07.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:33:00')
2025-11-12T22:38:01.312 [DEBUG] [Thread-23972] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:38:01.397 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:38:01.409 [DEBUG] [Thread-23975] [transport.py] [_log()] starting thread (client mode): 0x14944b80
2025-11-12T22:38:01.409 [DEBUG] [Thread-23975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:38:01.424 [DEBUG] [Thread-23975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:38:01.424 [INFO] [Thread-23975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:38:01.431 [DEBUG] [Thread-23975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:38:01.432 [DEBUG] [Thread-23975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:38:01.432 [DEBUG] [Thread-23975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:38:01.432 [DEBUG] [Thread-23975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:38:01.432 [DEBUG] [Thread-23975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:38:01.432 [DEBUG] [Thread-23975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:38:01.432 [DEBUG] [Thread-23975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:38:01.432 [DEBUG] [Thread-23975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:38:01.433 [DEBUG] [Thread-23975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:38:01.433 [DEBUG] [Thread-23975] [transport.py] [_log()] client lang: <none>
2025-11-12T22:38:01.433 [DEBUG] [Thread-23975] [transport.py] [_log()] server lang: <none>
2025-11-12T22:38:01.433 [DEBUG] [Thread-23975] [transport.py] [_log()] kex follows: False
2025-11-12T22:38:01.433 [DEBUG] [Thread-23975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:38:01.433 [DEBUG] [Thread-23975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:38:01.433 [DEBUG] [Thread-23975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:38:01.434 [DEBUG] [Thread-23975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:38:01.434 [DEBUG] [Thread-23975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:38:01.434 [DEBUG] [Thread-23975] [transport.py] [_log()] Compression: none
2025-11-12T22:38:01.434 [DEBUG] [Thread-23975] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:38:01.493 [DEBUG] [Thread-23975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:38:01.494 [DEBUG] [Thread-23975] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:38:01.495 [DEBUG] [Thread-23975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:38:01.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:38:01.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:38:01.552 [DEBUG] [Thread-23975] [transport.py] [_log()] userauth is OK
2025-11-12T22:38:01.553 [DEBUG] [Thread-23975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:38:01.553 [DEBUG] [Thread-23975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:38:01.553 [DEBUG] [Thread-23975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:38:01.553 [DEBUG] [Thread-23975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:38:01.575 [INFO] [Thread-23975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:38:01.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:38:01.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:38:02.483 [DEBUG] [Thread-23975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:38:02.483 [DEBUG] [Thread-23975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:38:02.531 [DEBUG] [Thread-23975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:38:02.532 [DEBUG] [Thread-23975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:38:02.541 [DEBUG] [Thread-23975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:38:02.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:38:02.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-11-12T22:38:02.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-11-12T22:38:02.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:38:02.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:38:02.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:38:02.577 [DEBUG] [Thread-23975] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:38:03.341 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:38:03.342 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:38:14.435 [DEBUG] [Thread-23977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:38:29.478 [DEBUG] [Thread-23978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:38:32.599 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:38:32.599 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:38:32.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-11-12T22:38:33.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 38, 12), 10.23, 50.69, 0.0, 13.67, 16.52, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:38:33.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:38:12
2025-11-12T22:38:33.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:38:33.546 [DEBUG] [Thread-23979] [transport.py] [_log()] starting thread (client mode): 0x11f01f60
2025-11-12T22:38:33.546 [DEBUG] [Thread-23979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:38:33.566 [DEBUG] [Thread-23979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:38:33.566 [INFO] [Thread-23979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:38:33.569 [DEBUG] [Thread-23979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] client lang: <none>
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] server lang: <none>
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] kex follows: False
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] Compression: none
2025-11-12T22:38:33.570 [DEBUG] [Thread-23979] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:38:33.585 [DEBUG] [Thread-23979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:38:33.586 [DEBUG] [Thread-23979] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:38:33.586 [DEBUG] [Thread-23979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:38:33.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:38:33.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:38:33.586 [DEBUG] [Thread-23979] [transport.py] [_log()] userauth is OK
2025-11-12T22:38:33.586 [DEBUG] [Thread-23979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:38:33.586 [DEBUG] [Thread-23979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:38:33.586 [DEBUG] [Thread-23979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:38:33.586 [DEBUG] [Thread-23979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:38:33.595 [INFO] [Thread-23979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:38:33.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:38:34.226 [DEBUG] [Thread-23979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:38:34.226 [DEBUG] [Thread-23979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:38:34.226 [DEBUG] [Thread-23979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:38:34.267 [DEBUG] [Thread-23979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:38:34.267 [DEBUG] [Thread-23979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:38:34.269 [DEBUG] [Thread-23979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:38:34.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:38:34.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:38:34.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:38:34.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:38:34.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:38:34.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:38:34.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.859805 -999.00  +16.60  10.75     54   +7.50 1 2 1 1 1     0    0 8.33 -40.76 Z.ESw 5.7 10.8 196.2 16.1 17.4 -21.8 17.2 -21.2 17.0 -20.8 17.2 -21.1
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.859805
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:38:34.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:38:12', tmtdew=10.23, humidity=50.69, cloud=0.0, wind=13.67, temperature=16.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:38:13', seeing=0.75, atlas_timestamp='2025-11-12T20:38:07.152', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:37:00')
2025-11-12T22:38:34.287 [DEBUG] [Thread-23979] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:38:34.361 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:38:34.373 [DEBUG] [Thread-23982] [transport.py] [_log()] starting thread (client mode): 0x19dda710
2025-11-12T22:38:34.373 [DEBUG] [Thread-23982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:38:34.387 [DEBUG] [Thread-23982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:38:34.387 [INFO] [Thread-23982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] client lang: <none>
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] server lang: <none>
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] kex follows: False
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] Compression: none
2025-11-12T22:38:34.395 [DEBUG] [Thread-23982] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:38:34.450 [DEBUG] [Thread-23982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:38:34.450 [DEBUG] [Thread-23982] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:38:34.450 [DEBUG] [Thread-23982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:38:34.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:38:34.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:38:34.508 [DEBUG] [Thread-23982] [transport.py] [_log()] userauth is OK
2025-11-12T22:38:34.508 [DEBUG] [Thread-23982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:38:34.508 [DEBUG] [Thread-23982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:38:34.508 [DEBUG] [Thread-23982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:38:34.508 [DEBUG] [Thread-23982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:38:34.525 [INFO] [Thread-23982] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:38:34.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:38:34.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:38:35.356 [DEBUG] [Thread-23982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:38:35.357 [DEBUG] [Thread-23982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:38:35.404 [DEBUG] [Thread-23982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:38:35.404 [DEBUG] [Thread-23982] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:38:35.412 [DEBUG] [Thread-23982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:38:35.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:38:35.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-11-12T22:38:35.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-11-12T22:38:35.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:38:35.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:38:35.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:38:35.442 [DEBUG] [Thread-23982] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:38:44.509 [DEBUG] [Thread-23984 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:38:59.562 [DEBUG] [Thread-23985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:38:59.865 [DEBUG] [Thread-23986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:39:03.547 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:39:03.548 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:39:05.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:39:05.450 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:39:05.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-11-12T22:39:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 38, 45), 10.19, 50.65, 0.0, 12.21, 16.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:39:06.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:38:45
2025-11-12T22:39:06.208 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:39:06.357 [DEBUG] [Thread-23987] [transport.py] [_log()] starting thread (client mode): 0x14923f70
2025-11-12T22:39:06.357 [DEBUG] [Thread-23987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:39:06.377 [DEBUG] [Thread-23987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:39:06.377 [INFO] [Thread-23987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] client lang: <none>
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] server lang: <none>
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] kex follows: False
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] Compression: none
2025-11-12T22:39:06.380 [DEBUG] [Thread-23987] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:39:06.397 [DEBUG] [Thread-23987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:39:06.397 [DEBUG] [Thread-23987] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:39:06.398 [DEBUG] [Thread-23987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:39:06.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:39:06.398 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:39:06.399 [DEBUG] [Thread-23987] [transport.py] [_log()] userauth is OK
2025-11-12T22:39:06.399 [DEBUG] [Thread-23987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:39:06.399 [DEBUG] [Thread-23987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:39:06.400 [DEBUG] [Thread-23987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:39:06.400 [DEBUG] [Thread-23987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:39:06.421 [INFO] [Thread-23987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:39:06.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:39:07.075 [DEBUG] [Thread-23987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:39:07.076 [DEBUG] [Thread-23987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:39:07.076 [DEBUG] [Thread-23987] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:39:07.117 [DEBUG] [Thread-23987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:39:07.117 [DEBUG] [Thread-23987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:39:07.120 [DEBUG] [Thread-23987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:39:07.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:39:07.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:39:07.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:39:07.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:39:07.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:39:07.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:39:07.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:39:07.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:39:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:39:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.860153 -999.00  +16.60  10.17     54   +7.50 1 2 1 1 1     0    0 8.26 -42.92 Z.ESw 7.7 10.2 195.4 14.9 17.3 -21.8 17.2 -21.2 17.0 -20.7 17.3 -21.2
2025-11-12T22:39:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:39:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:39:07.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.860153
2025-11-12T22:39:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:39:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:39:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:39:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:39:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:39:07.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:38:45', tmtdew=10.19, humidity=50.65, cloud=0.0, wind=12.21, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:38:45', seeing=0.75, atlas_timestamp='2025-11-12T20:38:37.219', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:37:00')
2025-11-12T22:39:07.149 [DEBUG] [Thread-23987] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:39:07.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:39:07.239 [DEBUG] [Thread-23990] [transport.py] [_log()] starting thread (client mode): 0x149827a0
2025-11-12T22:39:07.240 [DEBUG] [Thread-23990] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:39:07.255 [DEBUG] [Thread-23990] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:39:07.255 [INFO] [Thread-23990] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:39:07.263 [DEBUG] [Thread-23990] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:39:07.263 [DEBUG] [Thread-23990] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:39:07.263 [DEBUG] [Thread-23990] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:39:07.263 [DEBUG] [Thread-23990] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:39:07.263 [DEBUG] [Thread-23990] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:39:07.263 [DEBUG] [Thread-23990] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:39:07.263 [DEBUG] [Thread-23990] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] client lang: <none>
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] server lang: <none>
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] kex follows: False
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:39:07.264 [DEBUG] [Thread-23990] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:39:07.265 [DEBUG] [Thread-23990] [transport.py] [_log()] Compression: none
2025-11-12T22:39:07.265 [DEBUG] [Thread-23990] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:39:07.321 [DEBUG] [Thread-23990] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:39:07.321 [DEBUG] [Thread-23990] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:39:07.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:39:07.322 [DEBUG] [Thread-23990] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:39:07.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:39:07.376 [DEBUG] [Thread-23990] [transport.py] [_log()] userauth is OK
2025-11-12T22:39:07.377 [DEBUG] [Thread-23990] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:39:07.377 [DEBUG] [Thread-23990] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:39:07.377 [DEBUG] [Thread-23990] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:39:07.377 [DEBUG] [Thread-23990] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:39:07.402 [INFO] [Thread-23990] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:39:07.402 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:39:07.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:39:08.290 [DEBUG] [Thread-23990] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:39:08.291 [DEBUG] [Thread-23990] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:39:08.338 [DEBUG] [Thread-23990] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:39:08.339 [DEBUG] [Thread-23990] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:39:08.348 [DEBUG] [Thread-23990] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:39:08.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:39:08.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-11-12T22:39:08.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:39:08.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:39:08.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:39:08.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:39:08.384 [DEBUG] [Thread-23990] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:39:14.598 [DEBUG] [Thread-23992 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:39:29.651 [DEBUG] [Thread-23993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:39:38.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:39:38.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:39:38.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-11-12T22:39:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 39, 17), 10.18, 50.69, 0.0, 12.93, 16.45, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:39:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:39:17
2025-11-12T22:39:39.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:39:39.307 [DEBUG] [Thread-23994] [transport.py] [_log()] starting thread (client mode): 0x14944b80
2025-11-12T22:39:39.307 [DEBUG] [Thread-23994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:39:39.329 [DEBUG] [Thread-23994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:39:39.330 [INFO] [Thread-23994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:39:39.333 [DEBUG] [Thread-23994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:39:39.333 [DEBUG] [Thread-23994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:39:39.333 [DEBUG] [Thread-23994] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:39:39.333 [DEBUG] [Thread-23994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:39:39.333 [DEBUG] [Thread-23994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] client lang: <none>
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] server lang: <none>
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] kex follows: False
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] Compression: none
2025-11-12T22:39:39.334 [DEBUG] [Thread-23994] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:39:39.346 [DEBUG] [Thread-23994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:39:39.347 [DEBUG] [Thread-23994] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:39:39.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:39:39.348 [DEBUG] [Thread-23994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:39:39.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:39:39.350 [DEBUG] [Thread-23994] [transport.py] [_log()] userauth is OK
2025-11-12T22:39:39.350 [DEBUG] [Thread-23994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:39:39.351 [DEBUG] [Thread-23994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:39:39.351 [DEBUG] [Thread-23994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:39:39.351 [DEBUG] [Thread-23994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:39:39.375 [INFO] [Thread-23994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:39:39.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:39:40.006 [DEBUG] [Thread-23994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:39:40.006 [DEBUG] [Thread-23994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:39:40.007 [DEBUG] [Thread-23994] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:39:40.048 [DEBUG] [Thread-23994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:39:40.048 [DEBUG] [Thread-23994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:39:40.051 [DEBUG] [Thread-23994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:39:40.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:39:40.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:39:40.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:39:40.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:39:40.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:39:40.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:39:40.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:39:40.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:39:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:39:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.860499 -999.00  +16.60   6.43     54   +7.40 1 2 1 1 1     0    0 8.29 -45.21 Z.ESw 9.0 6.4 214.2 9.9 17.3 -21.8 17.2 -21.2 17.0 -20.6 17.2 -21.2
2025-11-12T22:39:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:39:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:39:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.860499
2025-11-12T22:39:40.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:39:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:39:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:39:40.076 [DEBUG] [Thread-23994] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:39:40.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:39:40.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:39:40.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:39:17', tmtdew=10.18, humidity=50.69, cloud=0.0, wind=12.93, temperature=16.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:39:17', seeing=0.75, atlas_timestamp='2025-11-12T20:39:07.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:37:00')
2025-11-12T22:39:40.163 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:39:40.176 [DEBUG] [Thread-23997] [transport.py] [_log()] starting thread (client mode): 0x17398e80
2025-11-12T22:39:40.176 [DEBUG] [Thread-23997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:39:40.191 [DEBUG] [Thread-23997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:39:40.191 [INFO] [Thread-23997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] client lang: <none>
2025-11-12T22:39:40.199 [DEBUG] [Thread-23997] [transport.py] [_log()] server lang: <none>
2025-11-12T22:39:40.200 [DEBUG] [Thread-23997] [transport.py] [_log()] kex follows: False
2025-11-12T22:39:40.200 [DEBUG] [Thread-23997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:39:40.200 [DEBUG] [Thread-23997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:39:40.200 [DEBUG] [Thread-23997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:39:40.200 [DEBUG] [Thread-23997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:39:40.200 [DEBUG] [Thread-23997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:39:40.200 [DEBUG] [Thread-23997] [transport.py] [_log()] Compression: none
2025-11-12T22:39:40.200 [DEBUG] [Thread-23997] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:39:40.264 [DEBUG] [Thread-23997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:39:40.264 [DEBUG] [Thread-23997] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:39:40.265 [DEBUG] [Thread-23997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:39:40.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:39:40.266 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:39:40.321 [DEBUG] [Thread-23997] [transport.py] [_log()] userauth is OK
2025-11-12T22:39:40.321 [DEBUG] [Thread-23997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:39:40.321 [DEBUG] [Thread-23997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:39:40.321 [DEBUG] [Thread-23997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:39:40.322 [DEBUG] [Thread-23997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:39:40.340 [INFO] [Thread-23997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:39:40.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:39:40.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:39:41.196 [DEBUG] [Thread-23997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:39:41.197 [DEBUG] [Thread-23997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:39:41.245 [DEBUG] [Thread-23997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:39:41.245 [DEBUG] [Thread-23997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:39:41.254 [DEBUG] [Thread-23997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:39:41.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:39:41.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-11-12T22:39:41.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-11-12T22:39:41.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:39:41.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:39:41.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:39:41.289 [DEBUG] [Thread-23997] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:39:44.685 [DEBUG] [Thread-23999 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:39:59.731 [DEBUG] [Thread-24000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:39:59.933 [DEBUG] [Thread-24001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:40:03.749 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:40:03.750 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:40:11.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:40:11.312 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:40:11.314 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:40:11.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 39, 49), 10.08, 51.35, 0.0, 13.57, 16.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:40:11.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:39:49
2025-11-12T22:40:12.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:40:12.201 [DEBUG] [Thread-24002] [transport.py] [_log()] starting thread (client mode): 0x14923f70
2025-11-12T22:40:12.201 [DEBUG] [Thread-24002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:40:12.221 [DEBUG] [Thread-24002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:40:12.221 [INFO] [Thread-24002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] client lang: <none>
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] server lang: <none>
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] kex follows: False
2025-11-12T22:40:12.224 [DEBUG] [Thread-24002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:40:12.225 [DEBUG] [Thread-24002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:40:12.225 [DEBUG] [Thread-24002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:40:12.225 [DEBUG] [Thread-24002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:40:12.225 [DEBUG] [Thread-24002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:40:12.225 [DEBUG] [Thread-24002] [transport.py] [_log()] Compression: none
2025-11-12T22:40:12.225 [DEBUG] [Thread-24002] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:40:12.243 [DEBUG] [Thread-24002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:40:12.243 [DEBUG] [Thread-24002] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:40:12.244 [DEBUG] [Thread-24002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:40:12.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:40:12.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:40:12.246 [DEBUG] [Thread-24002] [transport.py] [_log()] userauth is OK
2025-11-12T22:40:12.246 [DEBUG] [Thread-24002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:40:12.246 [DEBUG] [Thread-24002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:40:12.246 [DEBUG] [Thread-24002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:40:12.246 [DEBUG] [Thread-24002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:40:12.261 [INFO] [Thread-24002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:40:12.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:40:13.387 [DEBUG] [Thread-24002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:40:13.388 [DEBUG] [Thread-24002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:40:13.388 [DEBUG] [Thread-24002] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:40:13.429 [DEBUG] [Thread-24002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:40:13.429 [DEBUG] [Thread-24002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:40:13.432 [DEBUG] [Thread-24002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:40:13.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:40:13.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:40:13.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:40:13.448 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:40:13.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:40:13.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:40:13.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:40:13.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:40:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:40:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.860846 -999.00  +16.50  12.21     55   +7.50 1 2 1 1 1     0    0 8.35 -44.15 Z.ESW 12.5 12.2 206.9 15.2 17.3 -21.7 17.2 -21.3 17.0 -20.6 17.2 -21.1
2025-11-12T22:40:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:40:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:40:13.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.860846
2025-11-12T22:40:13.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:40:13.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:40:13.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:40:13.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:40:13.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:40:13.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:39:49', tmtdew=10.08, humidity=51.35, cloud=0.0, wind=13.57, temperature=16.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:39:50', seeing=0.88, atlas_timestamp='2025-11-12T20:39:37.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:37:00')
2025-11-12T22:40:13.459 [DEBUG] [Thread-24002] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:40:13.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:40:13.556 [DEBUG] [Thread-24005] [transport.py] [_log()] starting thread (client mode): 0x149801f0
2025-11-12T22:40:13.556 [DEBUG] [Thread-24005] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:40:13.570 [DEBUG] [Thread-24005] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:40:13.570 [INFO] [Thread-24005] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] client lang: <none>
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] server lang: <none>
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] kex follows: False
2025-11-12T22:40:13.578 [DEBUG] [Thread-24005] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:40:13.579 [DEBUG] [Thread-24005] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:40:13.579 [DEBUG] [Thread-24005] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:40:13.579 [DEBUG] [Thread-24005] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:40:13.579 [DEBUG] [Thread-24005] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:40:13.579 [DEBUG] [Thread-24005] [transport.py] [_log()] Compression: none
2025-11-12T22:40:13.579 [DEBUG] [Thread-24005] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:40:13.637 [DEBUG] [Thread-24005] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:40:13.637 [DEBUG] [Thread-24005] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:40:13.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:40:13.638 [DEBUG] [Thread-24005] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:40:13.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:40:13.692 [DEBUG] [Thread-24005] [transport.py] [_log()] userauth is OK
2025-11-12T22:40:13.693 [DEBUG] [Thread-24005] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:40:13.693 [DEBUG] [Thread-24005] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:40:13.693 [DEBUG] [Thread-24005] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:40:13.693 [DEBUG] [Thread-24005] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:40:13.711 [INFO] [Thread-24005] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:40:13.711 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:40:13.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:40:14.594 [DEBUG] [Thread-24005] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:40:14.594 [DEBUG] [Thread-24005] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:40:14.643 [DEBUG] [Thread-24005] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:40:14.643 [DEBUG] [Thread-24005] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:40:14.652 [DEBUG] [Thread-24005] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:40:14.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:40:14.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-11-12T22:40: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-11-12T22:40:14.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:40:14.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:40:14.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:40:14.689 [DEBUG] [Thread-24005] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:40:14.767 [DEBUG] [Thread-24007 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:40:29.815 [DEBUG] [Thread-24008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:40:44.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:40:44.712 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:40:44.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-11-12T22:40:44.844 [DEBUG] [Thread-24009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:40:45.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 40, 21), 10.11, 51.23, 0.0, 12.12, 16.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:40:45.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:40:21
2025-11-12T22:40:45.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:40:45.626 [DEBUG] [Thread-24010] [transport.py] [_log()] starting thread (client mode): 0x14982080
2025-11-12T22:40:45.627 [DEBUG] [Thread-24010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:40:45.646 [DEBUG] [Thread-24010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:40:45.647 [INFO] [Thread-24010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] client lang: <none>
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] server lang: <none>
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] kex follows: False
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] Compression: none
2025-11-12T22:40:45.648 [DEBUG] [Thread-24010] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:40:45.663 [DEBUG] [Thread-24010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:40:45.664 [DEBUG] [Thread-24010] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:40:45.664 [DEBUG] [Thread-24010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:40:45.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:40:45.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:40:45.666 [DEBUG] [Thread-24010] [transport.py] [_log()] userauth is OK
2025-11-12T22:40:45.667 [DEBUG] [Thread-24010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:40:45.667 [DEBUG] [Thread-24010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:40:45.667 [DEBUG] [Thread-24010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:40:45.667 [DEBUG] [Thread-24010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:40:45.685 [INFO] [Thread-24010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:40:45.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:40:46.516 [DEBUG] [Thread-24010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:40:46.517 [DEBUG] [Thread-24010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:40:46.517 [DEBUG] [Thread-24010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:40:46.557 [DEBUG] [Thread-24010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:40:46.558 [DEBUG] [Thread-24010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:40:46.561 [DEBUG] [Thread-24010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:40:46.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:40:46.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:40:46.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:40:46.577 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:40:46.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:40:46.585 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:40:46.585 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:40:46.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:40:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:40:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.861193 -999.00  +16.50  14.43     55   +7.50 1 2 1 1 1     0    0 8.30 -45.98 Z.ESW 13.7 14.4 216.4 19.2 17.3 -21.7 17.2 -21.1 16.9 -20.6 17.2 -21.0
2025-11-12T22:40:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:40:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:40:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.861193
2025-11-12T22:40:46.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:40:46.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:40:46.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:40:46.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:40:46.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:40:46.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:40:21', tmtdew=10.11, humidity=51.23, cloud=0.0, wind=12.12, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:40:22', seeing=0.94, atlas_timestamp='2025-11-12T20:40:07.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.4787499999999998, 0.3522500000000015, 0.3702500000000004, 0.3595000000000006, 0.5579999999999998, 0.6302500000000011, 0.7749999999999995, 0.574250000000001, 0.4399999999999995, 0.28749999999999964, 0.22625000000000028, 0.4109999999999996, 0.6999999999999993, 0.9922499999999994, 1.1259999999999994, 0.5969999999999995, 0.4272500000000008, 0.3285, 0.2654999999999994, 0.4372499999999988, 0.9014999999999986, 1.2937499999999984, 1.6362500000000004, 1.0547500000000003, 0.5734999999999992, 0.27250000000000085, 0.5837500000000002, 0.6605000000000016, 0.7599999999999998, 1.5840000000000014, nan, 1.2860000000000005, 0.5607499999999987], zp_timestamp='2025-11-12T20:37:00')
2025-11-12T22:40:46.588 [DEBUG] [Thread-24010] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:40:46.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:40:46.684 [DEBUG] [Thread-24013] [transport.py] [_log()] starting thread (client mode): 0x17345f30
2025-11-12T22:40:46.684 [DEBUG] [Thread-24013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:40:46.699 [DEBUG] [Thread-24013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:40:46.699 [INFO] [Thread-24013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:40:46.707 [DEBUG] [Thread-24013] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:40:46.707 [DEBUG] [Thread-24013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:40:46.707 [DEBUG] [Thread-24013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:40:46.707 [DEBUG] [Thread-24013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:40:46.707 [DEBUG] [Thread-24013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:40:46.707 [DEBUG] [Thread-24013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:40:46.708 [DEBUG] [Thread-24013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:40:46.708 [DEBUG] [Thread-24013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:40:46.708 [DEBUG] [Thread-24013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:40:46.708 [DEBUG] [Thread-24013] [transport.py] [_log()] client lang: <none>
2025-11-12T22:40:46.708 [DEBUG] [Thread-24013] [transport.py] [_log()] server lang: <none>
2025-11-12T22:40:46.708 [DEBUG] [Thread-24013] [transport.py] [_log()] kex follows: False
2025-11-12T22:40:46.708 [DEBUG] [Thread-24013] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:40:46.708 [DEBUG] [Thread-24013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:40:46.709 [DEBUG] [Thread-24013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:40:46.709 [DEBUG] [Thread-24013] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:40:46.709 [DEBUG] [Thread-24013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:40:46.709 [DEBUG] [Thread-24013] [transport.py] [_log()] Compression: none
2025-11-12T22:40:46.709 [DEBUG] [Thread-24013] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:40:46.769 [DEBUG] [Thread-24013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:40:46.769 [DEBUG] [Thread-24013] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:40:46.770 [DEBUG] [Thread-24013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:40:46.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:40:46.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:40:46.825 [DEBUG] [Thread-24013] [transport.py] [_log()] userauth is OK
2025-11-12T22:40:46.825 [DEBUG] [Thread-24013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:40:46.825 [DEBUG] [Thread-24013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:40:46.825 [DEBUG] [Thread-24013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:40:46.825 [DEBUG] [Thread-24013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:40:46.844 [INFO] [Thread-24013] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:40:46.844 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:40:46.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:40:47.730 [DEBUG] [Thread-24013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:40:47.730 [DEBUG] [Thread-24013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:40:47.778 [DEBUG] [Thread-24013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:40:47.778 [DEBUG] [Thread-24013] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:40:47.787 [DEBUG] [Thread-24013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:40:47.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:40:47.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-11-12T22:40:47.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-11-12T22:40:47.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:40:47.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:40:47.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:40:47.824 [DEBUG] [Thread-24013] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:40:59.880 [DEBUG] [Thread-24015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:40:59.997 [DEBUG] [Thread-24016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:41:03.955 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:41:03.956 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:41:14.932 [DEBUG] [Thread-24017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:41:17.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:41:17.819 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:41:17.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-11-12T22:41:18.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 40, 53), 10.1, 51.28, 0.0, 14.38, 16.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:41:18.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:40:53
2025-11-12T22:41:18.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:41:18.715 [DEBUG] [Thread-24018] [transport.py] [_log()] starting thread (client mode): 0x17345780
2025-11-12T22:41:18.715 [DEBUG] [Thread-24018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:41:18.736 [DEBUG] [Thread-24018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:41:18.736 [INFO] [Thread-24018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] client lang: <none>
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] server lang: <none>
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] kex follows: False
2025-11-12T22:41:18.739 [DEBUG] [Thread-24018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:41:18.740 [DEBUG] [Thread-24018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:41:18.740 [DEBUG] [Thread-24018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:41:18.740 [DEBUG] [Thread-24018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:41:18.740 [DEBUG] [Thread-24018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:41:18.740 [DEBUG] [Thread-24018] [transport.py] [_log()] Compression: none
2025-11-12T22:41:18.740 [DEBUG] [Thread-24018] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:41:18.758 [DEBUG] [Thread-24018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:41:18.758 [DEBUG] [Thread-24018] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:41:18.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:41:18.759 [DEBUG] [Thread-24018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:41:18.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:41:18.762 [DEBUG] [Thread-24018] [transport.py] [_log()] userauth is OK
2025-11-12T22:41:18.762 [DEBUG] [Thread-24018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:41:18.762 [DEBUG] [Thread-24018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:41:18.762 [DEBUG] [Thread-24018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:41:18.762 [DEBUG] [Thread-24018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:41:18.786 [INFO] [Thread-24018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:41:18.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:41:19.420 [DEBUG] [Thread-24018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:41:19.420 [DEBUG] [Thread-24018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:41:19.421 [DEBUG] [Thread-24018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:41:19.462 [DEBUG] [Thread-24018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:41:19.462 [DEBUG] [Thread-24018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:41:19.465 [DEBUG] [Thread-24018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:41:19.478 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:41:19.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:41:19.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:41:19.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:41:19.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:41:19.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:41:19.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:41:19.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:41:19.497 [DEBUG] [Thread-24018] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:41:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:41:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.861541 -999.00  +16.50   9.60     55   +7.60 1 2 1 1 1     0    0 7.97 -48.71 Z.ESW 12.4 9.6 194.5 16.6 17.3 -21.7 17.2 -21.3 17.0 -20.5 17.2 -21.1
2025-11-12T22:41:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:41:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:41:19.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.861541
2025-11-12T22:41:19.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:41:19.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:41:19.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:41:19.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:41:19.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:41:19.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:40:53', tmtdew=10.1, humidity=51.28, cloud=0.0, wind=14.38, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:40:54', seeing=1.0, atlas_timestamp='2025-11-12T20:40:37.142', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:40:00')
2025-11-12T22:41:19.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:41:19.596 [DEBUG] [Thread-24021] [transport.py] [_log()] starting thread (client mode): 0x11f02590
2025-11-12T22:41:19.597 [DEBUG] [Thread-24021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:41:19.611 [DEBUG] [Thread-24021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:41:19.611 [INFO] [Thread-24021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:41:19.619 [DEBUG] [Thread-24021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] client lang: <none>
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] server lang: <none>
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] kex follows: False
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:41:19.620 [DEBUG] [Thread-24021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:41:19.621 [DEBUG] [Thread-24021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:41:19.621 [DEBUG] [Thread-24021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:41:19.621 [DEBUG] [Thread-24021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:41:19.621 [DEBUG] [Thread-24021] [transport.py] [_log()] Compression: none
2025-11-12T22:41:19.621 [DEBUG] [Thread-24021] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:41:19.675 [DEBUG] [Thread-24021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:41:19.676 [DEBUG] [Thread-24021] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:41:19.676 [DEBUG] [Thread-24021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:41:19.676 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:41:19.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:41:19.732 [DEBUG] [Thread-24021] [transport.py] [_log()] userauth is OK
2025-11-12T22:41:19.732 [DEBUG] [Thread-24021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:41:19.732 [DEBUG] [Thread-24021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:41:19.732 [DEBUG] [Thread-24021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:41:19.733 [DEBUG] [Thread-24021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:41:19.751 [INFO] [Thread-24021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:41:19.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:41:19.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:41:20.570 [DEBUG] [Thread-24021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:41:20.570 [DEBUG] [Thread-24021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:41:20.618 [DEBUG] [Thread-24021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:41:20.618 [DEBUG] [Thread-24021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:41:20.627 [DEBUG] [Thread-24021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:41:20.637 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:41:20.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-11-12T22:41:20.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-11-12T22:41:20.655 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:41:20.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:41:20.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:41:20.664 [DEBUG] [Thread-24021] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:41:29.966 [DEBUG] [Thread-24023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:41:45.022 [DEBUG] [Thread-24024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:41:50.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:41:50.687 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:41:50.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-11-12T22:41:51.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 41, 25), 10.1, 51.27, 0.0, 14.22, 16.37, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:41:51.333 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:41:25
2025-11-12T22:41:51.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:41:51.601 [DEBUG] [Thread-24025] [transport.py] [_log()] starting thread (client mode): 0x1739bc70
2025-11-12T22:41:51.602 [DEBUG] [Thread-24025] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:41:51.620 [DEBUG] [Thread-24025] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:41:51.620 [INFO] [Thread-24025] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:41:51.623 [DEBUG] [Thread-24025] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] client lang: <none>
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] server lang: <none>
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] kex follows: False
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] Compression: none
2025-11-12T22:41:51.624 [DEBUG] [Thread-24025] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:41:51.642 [DEBUG] [Thread-24025] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:41:51.643 [DEBUG] [Thread-24025] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:41:51.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:41:51.644 [DEBUG] [Thread-24025] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:41:51.645 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:41:51.646 [DEBUG] [Thread-24025] [transport.py] [_log()] userauth is OK
2025-11-12T22:41:51.646 [DEBUG] [Thread-24025] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:41:51.646 [DEBUG] [Thread-24025] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:41:51.646 [DEBUG] [Thread-24025] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:41:51.646 [DEBUG] [Thread-24025] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:41:51.666 [INFO] [Thread-24025] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:41:51.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:41:52.316 [DEBUG] [Thread-24025] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:41:52.316 [DEBUG] [Thread-24025] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:41:52.316 [DEBUG] [Thread-24025] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:41:52.357 [DEBUG] [Thread-24025] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:41:52.357 [DEBUG] [Thread-24025] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:41:52.360 [DEBUG] [Thread-24025] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:41:52.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:41:52.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:41:52.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:41:52.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:41:52.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:41:52.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:41:52.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:41:52.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:41:52.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:41:52.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.861888 -999.00  +16.50   9.71     55   +7.60 1 2 1 1 1     0    0 8.12 -48.82 Z.ESW 13.2 9.7 193.8 17.6 17.2 -21.7 17.1 -21.0 16.9 -20.5 17.2 -21.1
2025-11-12T22:41:52.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:41:52.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:41:52.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.861888
2025-11-12T22:41:52.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:41:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:41:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:41:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:41:52.385 [DEBUG] [Thread-24025] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:41:52.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:41:52.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:41:25', tmtdew=10.1, humidity=51.27, cloud=0.0, wind=14.22, temperature=16.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:41:26', seeing=1.11, atlas_timestamp='2025-11-12T20:41:07.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:40:00')
2025-11-12T22:41:52.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:41:52.481 [DEBUG] [Thread-24028] [transport.py] [_log()] starting thread (client mode): 0x173992a0
2025-11-12T22:41:52.481 [DEBUG] [Thread-24028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:41:52.496 [DEBUG] [Thread-24028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:41:52.497 [INFO] [Thread-24028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:41:52.504 [DEBUG] [Thread-24028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:41:52.504 [DEBUG] [Thread-24028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] client lang: <none>
2025-11-12T22:41:52.505 [DEBUG] [Thread-24028] [transport.py] [_log()] server lang: <none>
2025-11-12T22:41:52.506 [DEBUG] [Thread-24028] [transport.py] [_log()] kex follows: False
2025-11-12T22:41:52.506 [DEBUG] [Thread-24028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:41:52.506 [DEBUG] [Thread-24028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:41:52.506 [DEBUG] [Thread-24028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:41:52.506 [DEBUG] [Thread-24028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:41:52.506 [DEBUG] [Thread-24028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:41:52.506 [DEBUG] [Thread-24028] [transport.py] [_log()] Compression: none
2025-11-12T22:41:52.507 [DEBUG] [Thread-24028] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:41:52.569 [DEBUG] [Thread-24028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:41:52.570 [DEBUG] [Thread-24028] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:41:52.571 [DEBUG] [Thread-24028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:41:52.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:41:52.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:41:52.625 [DEBUG] [Thread-24028] [transport.py] [_log()] userauth is OK
2025-11-12T22:41:52.625 [DEBUG] [Thread-24028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:41:52.625 [DEBUG] [Thread-24028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:41:52.625 [DEBUG] [Thread-24028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:41:52.626 [DEBUG] [Thread-24028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:41:52.648 [INFO] [Thread-24028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:41:52.649 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:41:52.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:41:53.481 [DEBUG] [Thread-24028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:41:53.481 [DEBUG] [Thread-24028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:41:53.529 [DEBUG] [Thread-24028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:41:53.529 [DEBUG] [Thread-24028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:41:53.538 [DEBUG] [Thread-24028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:41:53.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:41:53.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-11-12T22:41:53.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-11-12T22:41:53.566 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:41:53.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:41:53.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:41:53.575 [DEBUG] [Thread-24028] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:42:00.049 [DEBUG] [Thread-24030 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:42:00.050 [DEBUG] [Thread-24031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:42:04.158 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:42:04.159 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:42:15.090 [DEBUG] [Thread-24032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:42:23.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:42:23.577 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:42:23.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-11-12T22:42:24.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 41, 57), 10.1, 51.27, 0.0, 13.89, 16.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:42:24.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:41:57
2025-11-12T22:42:24.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:42:24.521 [DEBUG] [Thread-24033] [transport.py] [_log()] starting thread (client mode): 0x14981840
2025-11-12T22:42:24.521 [DEBUG] [Thread-24033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:42:24.540 [DEBUG] [Thread-24033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:42:24.541 [INFO] [Thread-24033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] client lang: <none>
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] server lang: <none>
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] kex follows: False
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] Compression: none
2025-11-12T22:42:24.544 [DEBUG] [Thread-24033] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:42:24.560 [DEBUG] [Thread-24033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:42:24.561 [DEBUG] [Thread-24033] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:42:24.561 [DEBUG] [Thread-24033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:42:24.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:42:24.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:42:24.562 [DEBUG] [Thread-24033] [transport.py] [_log()] userauth is OK
2025-11-12T22:42:24.562 [DEBUG] [Thread-24033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:42:24.562 [DEBUG] [Thread-24033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:42:24.562 [DEBUG] [Thread-24033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:42:24.562 [DEBUG] [Thread-24033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:42:24.577 [INFO] [Thread-24033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:42:24.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:42:25.174 [DEBUG] [Thread-24033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:42:25.174 [DEBUG] [Thread-24033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:42:25.174 [DEBUG] [Thread-24033] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:42:25.215 [DEBUG] [Thread-24033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:42:25.215 [DEBUG] [Thread-24033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:42:25.217 [DEBUG] [Thread-24033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:42:25.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:42:25.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:42:25.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:42:25.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:42:25.234 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:42:25.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:42:25.235 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.862582 -999.00  +16.50   9.73     55   +7.50 1 2 1 1 1     0    0 7.78 -48.65 Z.ESW 5.5 9.7 197.5 12.6 17.3 -21.7 17.1 -21.0 16.9 -20.6 17.2 -21.1
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.862582
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:42:25.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:41:57', tmtdew=10.1, humidity=51.27, cloud=0.0, wind=13.89, temperature=16.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:41:58', seeing=1.31, atlas_timestamp='2025-11-12T20:42:07.085', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:40:00')
2025-11-12T22:42:25.236 [DEBUG] [Thread-24033] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:42:25.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:42:25.323 [DEBUG] [Thread-24036] [transport.py] [_log()] starting thread (client mode): 0x14917dc0
2025-11-12T22:42:25.323 [DEBUG] [Thread-24036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:42:25.338 [DEBUG] [Thread-24036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:42:25.338 [INFO] [Thread-24036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:42:25.346 [DEBUG] [Thread-24036] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] client lang: <none>
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] server lang: <none>
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] kex follows: False
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] Compression: none
2025-11-12T22:42:25.347 [DEBUG] [Thread-24036] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:42:25.403 [DEBUG] [Thread-24036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:42:25.403 [DEBUG] [Thread-24036] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:42:25.403 [DEBUG] [Thread-24036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:42:25.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:42:25.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:42:25.460 [DEBUG] [Thread-24036] [transport.py] [_log()] userauth is OK
2025-11-12T22:42:25.460 [DEBUG] [Thread-24036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:42:25.460 [DEBUG] [Thread-24036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:42:25.460 [DEBUG] [Thread-24036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:42:25.460 [DEBUG] [Thread-24036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:42:25.474 [INFO] [Thread-24036] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:42:25.474 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:42:25.474 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:42:26.313 [DEBUG] [Thread-24036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:42:26.313 [DEBUG] [Thread-24036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:42:26.361 [DEBUG] [Thread-24036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:42:26.361 [DEBUG] [Thread-24036] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:42:26.369 [DEBUG] [Thread-24036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:42:26.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:42:26.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-11-12T22:42:26.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-11-12T22:42:26.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:42:26.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:42:26.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:42:26.404 [DEBUG] [Thread-24036] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:42:30.124 [DEBUG] [Thread-24038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:42:45.174 [DEBUG] [Thread-24039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:42:56.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:42:56.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:42:56.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-11-12T22:42:57.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 42, 29), 10.05, 51.43, 0.0, 13.62, 16.35, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:42:57.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:42:29
2025-11-12T22:42:57.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:42:57.351 [DEBUG] [Thread-24040] [transport.py] [_log()] starting thread (client mode): 0x17345510
2025-11-12T22:42:57.351 [DEBUG] [Thread-24040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:42:57.373 [DEBUG] [Thread-24040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:42:57.373 [INFO] [Thread-24040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:42:57.376 [DEBUG] [Thread-24040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] client lang: <none>
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] server lang: <none>
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] kex follows: False
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] Compression: none
2025-11-12T22:42:57.377 [DEBUG] [Thread-24040] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:42:57.394 [DEBUG] [Thread-24040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:42:57.395 [DEBUG] [Thread-24040] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:42:57.395 [DEBUG] [Thread-24040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:42:57.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:42:57.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:42:57.397 [DEBUG] [Thread-24040] [transport.py] [_log()] userauth is OK
2025-11-12T22:42:57.397 [DEBUG] [Thread-24040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:42:57.398 [DEBUG] [Thread-24040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:42:57.398 [DEBUG] [Thread-24040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:42:57.398 [DEBUG] [Thread-24040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:42:57.433 [INFO] [Thread-24040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:42:57.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:42:58.088 [DEBUG] [Thread-24040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:42:58.089 [DEBUG] [Thread-24040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:42:58.089 [DEBUG] [Thread-24040] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:42:58.130 [DEBUG] [Thread-24040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:42:58.130 [DEBUG] [Thread-24040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:42:58.133 [DEBUG] [Thread-24040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:42:58.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:42:58.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:42:58.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:42:58.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:42:58.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:42:58.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:42:58.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:42:58.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:42:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:42:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.862930 -999.00  +16.50  10.04     55   +7.60 1 2 1 1 1     0    0 8.13 -46.47 Z.ESW 12.8 10.0 207.8 14.4 17.2 -21.6 17.1 -20.9 16.9 -20.6 17.2 -21.0
2025-11-12T22:42:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:42:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:42:58.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.862930
2025-11-12T22:42:58.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:42:58.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:42:58.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:42:58.160 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:42:58.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:42:58.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:42:29', tmtdew=10.05, humidity=51.43, cloud=0.0, wind=13.62, temperature=16.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:42:30', seeing=1.31, atlas_timestamp='2025-11-12T20:42:37.152', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:40:00')
2025-11-12T22:42:58.161 [DEBUG] [Thread-24040] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:42:58.245 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:42:58.261 [DEBUG] [Thread-24043] [transport.py] [_log()] starting thread (client mode): 0x17344b50
2025-11-12T22:42:58.261 [DEBUG] [Thread-24043] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:42:58.283 [DEBUG] [Thread-24043] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:42:58.283 [INFO] [Thread-24043] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] client lang: <none>
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] server lang: <none>
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] kex follows: False
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] Compression: none
2025-11-12T22:42:58.294 [DEBUG] [Thread-24043] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:42:58.355 [DEBUG] [Thread-24043] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:42:58.356 [DEBUG] [Thread-24043] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:42:58.356 [DEBUG] [Thread-24043] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:42:58.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:42:58.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:42:58.419 [DEBUG] [Thread-24043] [transport.py] [_log()] userauth is OK
2025-11-12T22:42:58.419 [DEBUG] [Thread-24043] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:42:58.419 [DEBUG] [Thread-24043] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:42:58.419 [DEBUG] [Thread-24043] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:42:58.419 [DEBUG] [Thread-24043] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:42:58.442 [INFO] [Thread-24043] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:42:58.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:42:58.443 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:42:59.272 [DEBUG] [Thread-24043] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:42:59.273 [DEBUG] [Thread-24043] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:42:59.324 [DEBUG] [Thread-24043] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:42:59.324 [DEBUG] [Thread-24043] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:42:59.333 [DEBUG] [Thread-24043] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:42:59.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:42:59.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-11-12T22:42:59.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-11-12T22:42:59.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:42:59.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:42:59.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:42:59.377 [DEBUG] [Thread-24043] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:43:00.106 [DEBUG] [Thread-24045 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:43:00.210 [DEBUG] [Thread-24046 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:43:04.361 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:43:04.362 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:43:15.258 [DEBUG] [Thread-24047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:43:29.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:43:29.372 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:43:29.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-11-12T22:43:29.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 43, 1), 10.03, 51.48, 0.0, 14.66, 16.32, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:43:29.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:43:01
2025-11-12T22:43:30.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:43:30.266 [DEBUG] [Thread-24048] [transport.py] [_log()] starting thread (client mode): 0x17345750
2025-11-12T22:43:30.266 [DEBUG] [Thread-24048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:43:30.286 [DEBUG] [Thread-24048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:43:30.286 [INFO] [Thread-24048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:43:30.289 [DEBUG] [Thread-24048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] client lang: <none>
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] server lang: <none>
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] kex follows: False
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] Compression: none
2025-11-12T22:43:30.290 [DEBUG] [Thread-24048] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:43:30.297 [DEBUG] [Thread-24050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:43:30.306 [DEBUG] [Thread-24048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:43:30.307 [DEBUG] [Thread-24048] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:43:30.307 [DEBUG] [Thread-24048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:43:30.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:43:30.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:43:30.309 [DEBUG] [Thread-24048] [transport.py] [_log()] userauth is OK
2025-11-12T22:43:30.309 [DEBUG] [Thread-24048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:43:30.309 [DEBUG] [Thread-24048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:43:30.309 [DEBUG] [Thread-24048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:43:30.309 [DEBUG] [Thread-24048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:43:30.325 [INFO] [Thread-24048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:43:30.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:43:30.949 [DEBUG] [Thread-24048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:43:30.949 [DEBUG] [Thread-24048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:43:30.950 [DEBUG] [Thread-24048] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:43:30.990 [DEBUG] [Thread-24048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:43:30.990 [DEBUG] [Thread-24048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:43:30.993 [DEBUG] [Thread-24048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:43:31.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:43:31.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:43:31.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:43:31.009 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:43:31.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:43:31.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:43:31.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:43:31.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:43:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:43:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.863277 -999.00  +16.50   7.98     55   +7.60 1 2 1 1 1     0    0 8.01 -47.57 Z.ESW 10.2 8.0 209.4 14.8 17.2 -21.7 17.1 -21.0 16.9 -20.5 17.2 -21.0
2025-11-12T22:43:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:43:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:43:31.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.863277
2025-11-12T22:43:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:43:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:43:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:43:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:43:31.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:43:31.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:43:01', tmtdew=10.03, humidity=51.48, cloud=0.0, wind=14.66, temperature=16.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:43:02', seeing=1.0, atlas_timestamp='2025-11-12T20:43:07.133', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:40:00')
2025-11-12T22:43:31.021 [DEBUG] [Thread-24048] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:43:31.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:43:31.117 [DEBUG] [Thread-24052] [transport.py] [_log()] starting thread (client mode): 0x14916110
2025-11-12T22:43:31.117 [DEBUG] [Thread-24052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:43:31.131 [DEBUG] [Thread-24052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:43:31.132 [INFO] [Thread-24052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:43:31.139 [DEBUG] [Thread-24052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] client lang: <none>
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] server lang: <none>
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] kex follows: False
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] Compression: none
2025-11-12T22:43:31.140 [DEBUG] [Thread-24052] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:43:31.196 [DEBUG] [Thread-24052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:43:31.197 [DEBUG] [Thread-24052] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:43:31.197 [DEBUG] [Thread-24052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:43:31.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:43:31.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:43:31.252 [DEBUG] [Thread-24052] [transport.py] [_log()] userauth is OK
2025-11-12T22:43:31.252 [DEBUG] [Thread-24052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:43:31.252 [DEBUG] [Thread-24052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:43:31.252 [DEBUG] [Thread-24052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:43:31.252 [DEBUG] [Thread-24052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:43:31.271 [INFO] [Thread-24052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:43:31.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:43:31.272 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:43:32.155 [DEBUG] [Thread-24052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:43:32.155 [DEBUG] [Thread-24052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:43:32.203 [DEBUG] [Thread-24052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:43:32.203 [DEBUG] [Thread-24052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:43:32.212 [DEBUG] [Thread-24052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:43:32.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:43:32.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-11-12T22:43:32.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-11-12T22:43:32.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:43:32.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:43:32.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:43:32.249 [DEBUG] [Thread-24052] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:43:45.326 [DEBUG] [Thread-24054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:43:59.626 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:00.165 [DEBUG] [Thread-24055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:00.388 [DEBUG] [Thread-24056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:02.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:44:02.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:44:02.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-11-12T22:44:02.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 43, 33), 10.0, 51.6, 0.0, 12.86, 16.27, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:44:02.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:43:33
2025-11-12T22:44:03.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:44:03.162 [DEBUG] [Thread-24057] [transport.py] [_log()] starting thread (client mode): 0x17347a00
2025-11-12T22:44:03.162 [DEBUG] [Thread-24057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:44:03.183 [DEBUG] [Thread-24057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:44:03.183 [INFO] [Thread-24057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:44:03.186 [DEBUG] [Thread-24057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] client lang: <none>
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] server lang: <none>
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] kex follows: False
2025-11-12T22:44:03.187 [DEBUG] [Thread-24057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:44:03.188 [DEBUG] [Thread-24057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:44:03.188 [DEBUG] [Thread-24057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:44:03.188 [DEBUG] [Thread-24057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:44:03.188 [DEBUG] [Thread-24057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:44:03.188 [DEBUG] [Thread-24057] [transport.py] [_log()] Compression: none
2025-11-12T22:44:03.188 [DEBUG] [Thread-24057] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:44:03.201 [DEBUG] [Thread-24057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:44:03.202 [DEBUG] [Thread-24057] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:44:03.203 [DEBUG] [Thread-24057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:44:03.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:44:03.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:44:03.205 [DEBUG] [Thread-24057] [transport.py] [_log()] userauth is OK
2025-11-12T22:44:03.205 [DEBUG] [Thread-24057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:44:03.205 [DEBUG] [Thread-24057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:44:03.205 [DEBUG] [Thread-24057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:44:03.205 [DEBUG] [Thread-24057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:44:03.242 [INFO] [Thread-24057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:44:03.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:44:03.888 [DEBUG] [Thread-24057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:44:03.888 [DEBUG] [Thread-24057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:44:03.889 [DEBUG] [Thread-24057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:44:03.929 [DEBUG] [Thread-24057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:44:03.930 [DEBUG] [Thread-24057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:44:03.933 [DEBUG] [Thread-24057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:44:03.939 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:44:03.940 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:44:03.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:44:03.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:44:03.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:44:03.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:44:03.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:44:03.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:44:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:44:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.863624 -999.00  +16.50   5.88     55   +7.50 1 2 1 1 1     0    0 7.74 -51.87 Z.ESW 4.0 5.9 197.4 13.1 17.2 -21.7 17.1 -21.0 17.0 -20.5 17.2 -20.8
2025-11-12T22:44:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:44:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:44:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.863624
2025-11-12T22:44:03.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:44:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:44:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:44:03.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:44:03.953 [DEBUG] [Thread-24057] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:44:03.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:44:03.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:43:33', tmtdew=10.0, humidity=51.6, cloud=0.0, wind=12.86, temperature=16.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:43:34', seeing=1.18, atlas_timestamp='2025-11-12T20:43:37.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:40:00')
2025-11-12T22:44:04.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:44:04.049 [DEBUG] [Thread-24060] [transport.py] [_log()] starting thread (client mode): 0x173479a0
2025-11-12T22:44:04.049 [DEBUG] [Thread-24060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:44:04.064 [DEBUG] [Thread-24060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:44:04.064 [INFO] [Thread-24060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:44:04.071 [DEBUG] [Thread-24060] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:44:04.071 [DEBUG] [Thread-24060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:44:04.071 [DEBUG] [Thread-24060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] client lang: <none>
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] server lang: <none>
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] kex follows: False
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] Compression: none
2025-11-12T22:44:04.072 [DEBUG] [Thread-24060] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:44:04.128 [DEBUG] [Thread-24060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:44:04.129 [DEBUG] [Thread-24060] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:44:04.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:44:04.130 [DEBUG] [Thread-24060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:44:04.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:44:04.185 [DEBUG] [Thread-24060] [transport.py] [_log()] userauth is OK
2025-11-12T22:44:04.185 [DEBUG] [Thread-24060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:44:04.185 [DEBUG] [Thread-24060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:44:04.185 [DEBUG] [Thread-24060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:44:04.186 [DEBUG] [Thread-24060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:44:04.204 [INFO] [Thread-24060] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:44:04.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:44:04.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:44:04.568 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:04.569 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:04.883 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:05.086 [DEBUG] [Thread-24060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:44:05.086 [DEBUG] [Thread-24060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:44:05.135 [DEBUG] [Thread-24060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:44:05.135 [DEBUG] [Thread-24060] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:44:05.145 [DEBUG] [Thread-24060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:44:05.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:44: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')
2025-11-12T22:44:05.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-11-12T22:44:05.175 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:44:05.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:44:05.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:44:05.184 [DEBUG] [Thread-24060] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:44:07.927 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:14.294 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:15.426 [DEBUG] [Thread-24062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:30.472 [DEBUG] [Thread-24063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:44:35.206 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:44:35.207 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:44:35.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-11-12T22:44:35.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 44, 6), 10.0, 51.58, 0.0, 11.77, 16.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:44:35.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:44:06
2025-11-12T22:44:35.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:44:36.113 [DEBUG] [Thread-24064] [transport.py] [_log()] starting thread (client mode): 0x17399720
2025-11-12T22:44:36.113 [DEBUG] [Thread-24064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:44:36.132 [DEBUG] [Thread-24064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:44:36.132 [INFO] [Thread-24064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:44:36.133 [DEBUG] [Thread-24064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] client lang: <none>
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] server lang: <none>
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] kex follows: False
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] Compression: none
2025-11-12T22:44:36.134 [DEBUG] [Thread-24064] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:44:36.147 [DEBUG] [Thread-24064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:44:36.147 [DEBUG] [Thread-24064] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:44:36.148 [DEBUG] [Thread-24064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:44:36.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:44:36.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:44:36.150 [DEBUG] [Thread-24064] [transport.py] [_log()] userauth is OK
2025-11-12T22:44:36.150 [DEBUG] [Thread-24064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:44:36.150 [DEBUG] [Thread-24064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:44:36.150 [DEBUG] [Thread-24064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:44:36.150 [DEBUG] [Thread-24064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:44:36.175 [INFO] [Thread-24064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:44:36.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:44:36.811 [DEBUG] [Thread-24064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:44:36.812 [DEBUG] [Thread-24064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:44:36.812 [DEBUG] [Thread-24064] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:44:36.852 [DEBUG] [Thread-24064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:44:36.852 [DEBUG] [Thread-24064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:44:36.856 [DEBUG] [Thread-24064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:44:36.861 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:44:36.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:44:36.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:44:36.865 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:44:36.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:44:36.872 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:44:36.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:44:36.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:44:36.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:44:36.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.863971 -999.00  +16.50   6.45     55   +7.50 1 2 1 1 1     0    0 7.76 -53.67 Z.ESW 6.8 6.5 205.8 13.1 17.2 -21.7 17.1 -20.9 16.9 -20.5 17.2 -21.1
2025-11-12T22:44:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:44:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:44:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.863971
2025-11-12T22:44:36.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:44:36.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:44:36.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:44:36.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:44:36.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:44:36.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:44:06', tmtdew=10.0, humidity=51.58, cloud=0.0, wind=11.77, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:44:06', seeing=0.86, atlas_timestamp='2025-11-12T20:44:07.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:43:00')
2025-11-12T22:44:36.874 [DEBUG] [Thread-24064] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:44:36.957 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:44:36.969 [DEBUG] [Thread-24067] [transport.py] [_log()] starting thread (client mode): 0x1739afb0
2025-11-12T22:44:36.969 [DEBUG] [Thread-24067] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:44:36.986 [DEBUG] [Thread-24067] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:44:36.986 [INFO] [Thread-24067] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:44:36.993 [DEBUG] [Thread-24067] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:44:36.993 [DEBUG] [Thread-24067] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:44:36.993 [DEBUG] [Thread-24067] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:44:36.993 [DEBUG] [Thread-24067] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] client lang: <none>
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] server lang: <none>
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] kex follows: False
2025-11-12T22:44:36.994 [DEBUG] [Thread-24067] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:44:36.995 [DEBUG] [Thread-24067] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:44:36.995 [DEBUG] [Thread-24067] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:44:36.995 [DEBUG] [Thread-24067] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:44:36.995 [DEBUG] [Thread-24067] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:44:36.995 [DEBUG] [Thread-24067] [transport.py] [_log()] Compression: none
2025-11-12T22:44:36.995 [DEBUG] [Thread-24067] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:44:37.053 [DEBUG] [Thread-24067] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:44:37.054 [DEBUG] [Thread-24067] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:44:37.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:44:37.055 [DEBUG] [Thread-24067] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:44:37.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:44:37.113 [DEBUG] [Thread-24067] [transport.py] [_log()] userauth is OK
2025-11-12T22:44:37.113 [DEBUG] [Thread-24067] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:44:37.113 [DEBUG] [Thread-24067] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:44:37.113 [DEBUG] [Thread-24067] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:44:37.114 [DEBUG] [Thread-24067] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:44:37.139 [INFO] [Thread-24067] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:44:37.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:44:37.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:44:38.045 [DEBUG] [Thread-24067] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:44:38.045 [DEBUG] [Thread-24067] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:44:38.093 [DEBUG] [Thread-24067] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:44:38.093 [DEBUG] [Thread-24067] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:44:38.102 [DEBUG] [Thread-24067] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:44:38.112 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:44:38.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-11-12T22:44:38.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-11-12T22:44:38.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:44:38.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:44:38.131 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:44:38.139 [DEBUG] [Thread-24067] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:44:45.508 [DEBUG] [Thread-24069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:45:00.226 [DEBUG] [Thread-24070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:45:00.565 [DEBUG] [Thread-24071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:45:04.773 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:45:04.774 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:45:08.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:45:08.162 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:45:08.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-11-12T22:45:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 44, 38), 9.98, 51.67, 0.0, 11.72, 16.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:45:08.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:44:38
2025-11-12T22:45:08.914 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:45:09.061 [DEBUG] [Thread-24072] [transport.py] [_log()] starting thread (client mode): 0x14915f90
2025-11-12T22:45:09.061 [DEBUG] [Thread-24072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:45:09.078 [DEBUG] [Thread-24072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:45:09.078 [INFO] [Thread-24072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:45:09.079 [DEBUG] [Thread-24072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:45:09.079 [DEBUG] [Thread-24072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:45:09.079 [DEBUG] [Thread-24072] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:45:09.079 [DEBUG] [Thread-24072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:45:09.079 [DEBUG] [Thread-24072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:45:09.079 [DEBUG] [Thread-24072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:45:09.079 [DEBUG] [Thread-24072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:45:09.079 [DEBUG] [Thread-24072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] client lang: <none>
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] server lang: <none>
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] kex follows: False
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] Compression: none
2025-11-12T22:45:09.080 [DEBUG] [Thread-24072] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:45:09.099 [DEBUG] [Thread-24072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:45:09.100 [DEBUG] [Thread-24072] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:45:09.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:45:09.101 [DEBUG] [Thread-24072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:45:09.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:45:09.103 [DEBUG] [Thread-24072] [transport.py] [_log()] userauth is OK
2025-11-12T22:45:09.103 [DEBUG] [Thread-24072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:45:09.103 [DEBUG] [Thread-24072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:45:09.103 [DEBUG] [Thread-24072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:45:09.103 [DEBUG] [Thread-24072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:45:09.122 [INFO] [Thread-24072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:45:09.123 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:45:09.678 [DEBUG] [Thread-24072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:45:09.679 [DEBUG] [Thread-24072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:45:09.679 [DEBUG] [Thread-24072] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:45:09.720 [DEBUG] [Thread-24072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:45:09.721 [DEBUG] [Thread-24072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:45:09.723 [DEBUG] [Thread-24072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:45:09.730 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:45:09.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:45:09.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:45:09.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:45:09.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:45:09.739 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:45:09.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:45:09.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:45:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:45:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.864318 -999.00  +16.50   9.85     55   +7.50 1 2 1 1 1     0    0 7.71 -54.11 Z.ESW 8.1 9.8 192.0 15.8 17.2 -21.5 17.1 -21.0 16.9 -20.6 17.2 -21.0
2025-11-12T22:45:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:45:09.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:45:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.864318
2025-11-12T22:45:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:45:09.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:45:09.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:45:09.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:45:09.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:45:09.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:44:38', tmtdew=9.98, humidity=51.67, cloud=0.0, wind=11.72, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:44:38', seeing=1.02, atlas_timestamp='2025-11-12T20:44:37.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:43:00')
2025-11-12T22:45:09.742 [DEBUG] [Thread-24072] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:45:09.825 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:45:09.835 [DEBUG] [Thread-24075] [transport.py] [_log()] starting thread (client mode): 0x149178e0
2025-11-12T22:45:09.835 [DEBUG] [Thread-24075] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:45:09.850 [DEBUG] [Thread-24075] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:45:09.850 [INFO] [Thread-24075] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] client lang: <none>
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] server lang: <none>
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] kex follows: False
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:45:09.858 [DEBUG] [Thread-24075] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:45:09.859 [DEBUG] [Thread-24075] [transport.py] [_log()] Compression: none
2025-11-12T22:45:09.859 [DEBUG] [Thread-24075] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:45:09.917 [DEBUG] [Thread-24075] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:45:09.917 [DEBUG] [Thread-24075] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:45:09.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:45:09.919 [DEBUG] [Thread-24075] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:45:09.919 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:45:09.982 [DEBUG] [Thread-24075] [transport.py] [_log()] userauth is OK
2025-11-12T22:45:09.983 [DEBUG] [Thread-24075] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:45:09.983 [DEBUG] [Thread-24075] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:45:09.983 [DEBUG] [Thread-24075] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:45:09.983 [DEBUG] [Thread-24075] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:45:10.003 [INFO] [Thread-24075] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:45:10.004 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:45:10.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:45:10.859 [DEBUG] [Thread-24075] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:45:10.859 [DEBUG] [Thread-24075] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:45:10.907 [DEBUG] [Thread-24075] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:45:10.907 [DEBUG] [Thread-24075] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:45:10.917 [DEBUG] [Thread-24075] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:45:10.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:45:10.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-11-12T22:45:10.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-11-12T22:45:10.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:45:10.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:45:10.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:45:10.948 [DEBUG] [Thread-24075] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:45:15.597 [DEBUG] [Thread-24077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:45:30.654 [DEBUG] [Thread-24078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:45:40.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:45:40.951 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:45:40.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-11-12T22:45:41.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 45, 10), 9.91, 51.9, 0.0, 14.56, 16.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:45:41.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:45:10
2025-11-12T22:45:41.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:45:41.847 [DEBUG] [Thread-24079] [transport.py] [_log()] starting thread (client mode): 0x1739bb50
2025-11-12T22:45:41.847 [DEBUG] [Thread-24079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:45:41.867 [DEBUG] [Thread-24079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:45:41.867 [INFO] [Thread-24079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] client lang: <none>
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] server lang: <none>
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] kex follows: False
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:45:41.870 [DEBUG] [Thread-24079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:45:41.871 [DEBUG] [Thread-24079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:45:41.871 [DEBUG] [Thread-24079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:45:41.871 [DEBUG] [Thread-24079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:45:41.871 [DEBUG] [Thread-24079] [transport.py] [_log()] Compression: none
2025-11-12T22:45:41.871 [DEBUG] [Thread-24079] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:45:41.888 [DEBUG] [Thread-24079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:45:41.889 [DEBUG] [Thread-24079] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:45:41.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:45:41.889 [DEBUG] [Thread-24079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:45:41.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:45:41.891 [DEBUG] [Thread-24079] [transport.py] [_log()] userauth is OK
2025-11-12T22:45:41.892 [DEBUG] [Thread-24079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:45:41.892 [DEBUG] [Thread-24079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:45:41.892 [DEBUG] [Thread-24079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:45:41.892 [DEBUG] [Thread-24079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:45:41.916 [INFO] [Thread-24079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:45:41.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:45:42.578 [DEBUG] [Thread-24079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:45:42.578 [DEBUG] [Thread-24079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:45:42.578 [DEBUG] [Thread-24079] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:45:42.618 [DEBUG] [Thread-24079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:45:42.618 [DEBUG] [Thread-24079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:45:42.621 [DEBUG] [Thread-24079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:45:42.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:45:42.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:45:42.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:45:42.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:45:42.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:45:42.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:45:42.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:45:42.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:45:42.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:45:42.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.864318 -999.00  +16.50   9.85     55   +7.50 1 2 1 1 1     0    0 7.71 -54.11 Z.ESW 8.1 9.8 192.0 15.8 17.2 -21.5 17.1 -21.0 16.9 -20.6 17.2 -21.0
2025-11-12T22:45:42.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:45:42.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:45:42.640 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.864318
2025-11-12T22:45:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:45:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:45:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:45:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:45:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:45:42.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:45:10', tmtdew=9.91, humidity=51.9, cloud=0.0, wind=14.56, temperature=16.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:45:10', seeing=1.02, atlas_timestamp='2025-11-12T20:44:37.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:43:00')
2025-11-12T22:45:42.642 [DEBUG] [Thread-24079] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:45:42.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:45:42.727 [DEBUG] [Thread-24082] [transport.py] [_log()] starting thread (client mode): 0x173996c0
2025-11-12T22:45:42.727 [DEBUG] [Thread-24082] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:45:42.742 [DEBUG] [Thread-24082] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:45:42.742 [INFO] [Thread-24082] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] client lang: <none>
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] server lang: <none>
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] kex follows: False
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] Compression: none
2025-11-12T22:45:42.750 [DEBUG] [Thread-24082] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:45:42.807 [DEBUG] [Thread-24082] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:45:42.807 [DEBUG] [Thread-24082] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:45:42.807 [DEBUG] [Thread-24082] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:45:42.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:45:42.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:45:42.864 [DEBUG] [Thread-24082] [transport.py] [_log()] userauth is OK
2025-11-12T22:45:42.864 [DEBUG] [Thread-24082] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:45:42.864 [DEBUG] [Thread-24082] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:45:42.864 [DEBUG] [Thread-24082] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:45:42.864 [DEBUG] [Thread-24082] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:45:42.878 [INFO] [Thread-24082] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:45:42.878 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:45:42.878 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:45:43.707 [DEBUG] [Thread-24082] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:45:43.707 [DEBUG] [Thread-24082] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:45:43.756 [DEBUG] [Thread-24082] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:45:43.756 [DEBUG] [Thread-24082] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:45:43.764 [DEBUG] [Thread-24082] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:45:43.772 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:45:43.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-11-12T22:45:43.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-11-12T22:45:43.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:45:43.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:45:43.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:45:43.797 [DEBUG] [Thread-24082] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:45:45.689 [DEBUG] [Thread-24084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:00.285 [DEBUG] [Thread-24085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:00.738 [DEBUG] [Thread-24086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:04.977 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:04.978 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:13.294 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:13.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:46:13.818 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:46:13.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:46:14.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 45, 42), 9.74, 52.13, 0.0, 13.29, 16.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:46:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:45:42
2025-11-12T22:46:14.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:46:14.732 [DEBUG] [Thread-24087] [transport.py] [_log()] starting thread (client mode): 0x17398670
2025-11-12T22:46:14.733 [DEBUG] [Thread-24087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:46:14.752 [DEBUG] [Thread-24087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:46:14.752 [INFO] [Thread-24087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] client lang: <none>
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] server lang: <none>
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] kex follows: False
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] Compression: none
2025-11-12T22:46:14.755 [DEBUG] [Thread-24087] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:46:14.770 [DEBUG] [Thread-24087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:46:14.771 [DEBUG] [Thread-24087] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:46:14.771 [DEBUG] [Thread-24087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:46:14.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:46:14.771 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:46:14.772 [DEBUG] [Thread-24087] [transport.py] [_log()] userauth is OK
2025-11-12T22:46:14.772 [DEBUG] [Thread-24087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:46:14.772 [DEBUG] [Thread-24087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:46:14.772 [DEBUG] [Thread-24087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:46:14.772 [DEBUG] [Thread-24087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:46:14.787 [INFO] [Thread-24087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:46:14.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:46:15.393 [DEBUG] [Thread-24087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:46:15.393 [DEBUG] [Thread-24087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:46:15.393 [DEBUG] [Thread-24087] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:46:15.434 [DEBUG] [Thread-24087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:46:15.434 [DEBUG] [Thread-24087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:46:15.437 [DEBUG] [Thread-24087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:46:15.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:46:15.450 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:46:15.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:46:15.452 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:46:15.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:46:15.456 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:46:15.456 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:46:15.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:46:15.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:46:15.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.865013 -999.00  +16.50   9.56     56   +7.70 1 2 1 1 1     0    0 7.76 -52.87 Z.ESW 14.1 9.6 189.0 14.1 17.2 -21.5 17.1 -21.0 16.9 -20.5 17.1 -21.0
2025-11-12T22:46:15.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:46:15.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:46:15.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.865013
2025-11-12T22:46:15.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:46:15.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:46:15.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:46:15.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:46:15.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:46:15.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:45:42', tmtdew=9.74, humidity=52.13, cloud=0.0, wind=13.29, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:45:42', seeing=1.21, atlas_timestamp='2025-11-12T20:45:37.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:43:00')
2025-11-12T22:46:15.457 [DEBUG] [Thread-24087] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:46:15.540 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:46:15.552 [DEBUG] [Thread-24090] [transport.py] [_log()] starting thread (client mode): 0x173993c0
2025-11-12T22:46:15.552 [DEBUG] [Thread-24090] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:46:15.567 [DEBUG] [Thread-24090] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:46:15.567 [INFO] [Thread-24090] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] client lang: <none>
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] server lang: <none>
2025-11-12T22:46:15.574 [DEBUG] [Thread-24090] [transport.py] [_log()] kex follows: False
2025-11-12T22:46:15.575 [DEBUG] [Thread-24090] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:46:15.575 [DEBUG] [Thread-24090] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:46:15.575 [DEBUG] [Thread-24090] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:46:15.575 [DEBUG] [Thread-24090] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:46:15.575 [DEBUG] [Thread-24090] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:46:15.575 [DEBUG] [Thread-24090] [transport.py] [_log()] Compression: none
2025-11-12T22:46:15.575 [DEBUG] [Thread-24090] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:46:15.630 [DEBUG] [Thread-24090] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:46:15.631 [DEBUG] [Thread-24090] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:46:15.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:46:15.631 [DEBUG] [Thread-24090] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:46:15.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:46:15.688 [DEBUG] [Thread-24090] [transport.py] [_log()] userauth is OK
2025-11-12T22:46:15.688 [DEBUG] [Thread-24090] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:46:15.688 [DEBUG] [Thread-24090] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:46:15.688 [DEBUG] [Thread-24090] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:46:15.688 [DEBUG] [Thread-24090] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:46:15.701 [INFO] [Thread-24090] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:46:15.701 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:46:15.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:46:15.773 [DEBUG] [Thread-24092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:16.453 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:16.524 [DEBUG] [Thread-24090] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:46:16.524 [DEBUG] [Thread-24090] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:46:16.572 [DEBUG] [Thread-24090] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:46:16.572 [DEBUG] [Thread-24090] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:46:16.580 [DEBUG] [Thread-24090] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:46:16.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:46: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')
2025-11-12T22:46:16.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:46:16.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:46:16.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:46:16.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:46:16.611 [DEBUG] [Thread-24090] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:46:21.517 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:26.931 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:30.817 [DEBUG] [Thread-24093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:45.855 [DEBUG] [Thread-24094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:46.280 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:46:46.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:46:46.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:46:46.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-11-12T22:46:47.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 46, 14), 9.75, 52.13, 0.0, 15.07, 16.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:46:47.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:46:14
2025-11-12T22:46:47.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:46:47.601 [DEBUG] [Thread-24095] [transport.py] [_log()] starting thread (client mode): 0x14945de0
2025-11-12T22:46:47.601 [DEBUG] [Thread-24095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:46:47.621 [DEBUG] [Thread-24095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:46:47.621 [INFO] [Thread-24095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:46:47.624 [DEBUG] [Thread-24095] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] client lang: <none>
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] server lang: <none>
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] kex follows: False
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] Compression: none
2025-11-12T22:46:47.625 [DEBUG] [Thread-24095] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:46:47.641 [DEBUG] [Thread-24095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:46:47.641 [DEBUG] [Thread-24095] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:46:47.642 [DEBUG] [Thread-24095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:46:47.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:46:47.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:46:47.642 [DEBUG] [Thread-24095] [transport.py] [_log()] userauth is OK
2025-11-12T22:46:47.643 [DEBUG] [Thread-24095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:46:47.643 [DEBUG] [Thread-24095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:46:47.643 [DEBUG] [Thread-24095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:46:47.643 [DEBUG] [Thread-24095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:46:47.652 [INFO] [Thread-24095] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:46:47.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:46:48.302 [DEBUG] [Thread-24095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:46:48.302 [DEBUG] [Thread-24095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:46:48.302 [DEBUG] [Thread-24095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:46:48.343 [DEBUG] [Thread-24095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:46:48.343 [DEBUG] [Thread-24095] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:46:48.345 [DEBUG] [Thread-24095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:46:48.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:46:48.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:46:48.358 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:46:48.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:46:48.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:46:48.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:46:48.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.865360 -999.00  +16.40  12.74     56   +7.70 1 2 1 1 1     0    0 7.58 -53.68 Z.ESw 10.2 12.7 203.0 18.1 17.2 -21.5 17.1 -20.9 16.9 -20.4 17.1 -20.9
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.865360
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:46:48.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:46:14', tmtdew=9.75, humidity=52.13, cloud=0.0, wind=15.07, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:46:46', seeing=0.99, atlas_timestamp='2025-11-12T20:46:07.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.4522499999999994, 0.40225000000000044, 0.37925000000000075, 0.45650000000000013, 0.47799999999999976, 0.7172500000000008, 0.8019999999999996, 0.8317500000000013, 0.6914999999999996, 0.26699999999999946, 0.29224999999999923, 0.46499999999999986, 0.6970000000000001, 0.8252499999999996, 1.1119999999999992, 0.8469999999999995, 0.42024999999999935, 0.26449999999999996, 0.2879999999999985, 0.6137499999999987, 0.8704999999999989, 1.230249999999999, 1.489250000000001, 1.1767500000000002, 0.5424999999999995, 0.20350000000000001, 0.5137499999999999, 0.6345000000000001, 0.5750000000000002, 1.4960000000000004, nan, 1.2960000000000012, 0.7152499999999993], zp_timestamp='2025-11-12T20:43:00')
2025-11-12T22:46:48.364 [DEBUG] [Thread-24095] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:46:48.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:46:48.449 [DEBUG] [Thread-24098] [transport.py] [_log()] starting thread (client mode): 0x14946590
2025-11-12T22:46:48.449 [DEBUG] [Thread-24098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:46:48.463 [DEBUG] [Thread-24098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:46:48.463 [INFO] [Thread-24098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] client lang: <none>
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] server lang: <none>
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] kex follows: False
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] Compression: none
2025-11-12T22:46:48.471 [DEBUG] [Thread-24098] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:46:48.527 [DEBUG] [Thread-24098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:46:48.527 [DEBUG] [Thread-24098] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:46:48.527 [DEBUG] [Thread-24098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:46:48.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:46:48.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:46:48.584 [DEBUG] [Thread-24098] [transport.py] [_log()] userauth is OK
2025-11-12T22:46:48.584 [DEBUG] [Thread-24098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:46:48.584 [DEBUG] [Thread-24098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:46:48.584 [DEBUG] [Thread-24098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:46:48.584 [DEBUG] [Thread-24098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:46:48.600 [INFO] [Thread-24098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:46:48.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:46:48.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:46:49.452 [DEBUG] [Thread-24098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:46:49.453 [DEBUG] [Thread-24098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:46:49.500 [DEBUG] [Thread-24098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:46:49.500 [DEBUG] [Thread-24098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:46:49.508 [DEBUG] [Thread-24098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:46:49.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:46:49.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-11-12T22:46:49.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:46:49.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:46:49.533 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:46:49.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:46:49.541 [DEBUG] [Thread-24098] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:46:50.671 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:00.349 [DEBUG] [Thread-24100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:00.884 [DEBUG] [Thread-24101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:05.181 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:05.182 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:10.039 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:14.398 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:15.937 [DEBUG] [Thread-24102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:19.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:47:19.546 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:47:19.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-11-12T22:47:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 46, 46), 9.78, 52.5, 0.0, 12.78, 16.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:47:20.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:46:46
2025-11-12T22:47:20.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:47:20.518 [DEBUG] [Thread-24103] [transport.py] [_log()] starting thread (client mode): 0x14904130
2025-11-12T22:47:20.518 [DEBUG] [Thread-24103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:47:20.539 [DEBUG] [Thread-24103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:47:20.539 [INFO] [Thread-24103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] client lang: <none>
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] server lang: <none>
2025-11-12T22:47:20.542 [DEBUG] [Thread-24103] [transport.py] [_log()] kex follows: False
2025-11-12T22:47:20.543 [DEBUG] [Thread-24103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:47:20.543 [DEBUG] [Thread-24103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:47:20.543 [DEBUG] [Thread-24103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:47:20.543 [DEBUG] [Thread-24103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:47:20.543 [DEBUG] [Thread-24103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:47:20.543 [DEBUG] [Thread-24103] [transport.py] [_log()] Compression: none
2025-11-12T22:47:20.543 [DEBUG] [Thread-24103] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:47:20.558 [DEBUG] [Thread-24103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:47:20.558 [DEBUG] [Thread-24103] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:47:20.558 [DEBUG] [Thread-24103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:47:20.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:47:20.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:47:20.559 [DEBUG] [Thread-24103] [transport.py] [_log()] userauth is OK
2025-11-12T22:47:20.559 [DEBUG] [Thread-24103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:47:20.559 [DEBUG] [Thread-24103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:47:20.559 [DEBUG] [Thread-24103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:47:20.559 [DEBUG] [Thread-24103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:47:20.574 [INFO] [Thread-24103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:47:20.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:47:21.224 [DEBUG] [Thread-24103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:47:21.224 [DEBUG] [Thread-24103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:47:21.224 [DEBUG] [Thread-24103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:47:21.265 [DEBUG] [Thread-24103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:47:21.265 [DEBUG] [Thread-24103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:47:21.268 [DEBUG] [Thread-24103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:47:21.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:47:21.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:47:21.282 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:47:21.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:47:21.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:47:21.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:47:21.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:47:21.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:47:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:47:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.865707 -999.00  +16.50   6.96     56   +7.70 1 2 1 1 1     0    0 7.67 -54.12 Z.ESw 9.3 7.0 193.4 14.4 17.1 -21.5 17.0 -20.9 16.9 -20.4 17.1 -21.0
2025-11-12T22:47:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:47:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:47:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.865707
2025-11-12T22:47:21.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:47:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:47:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:47:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:47:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:47:21.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:46:46', tmtdew=9.78, humidity=52.5, cloud=0.0, wind=12.78, temperature=16.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:47:18', seeing=0.99, atlas_timestamp='2025-11-12T20:46:37.085', atlas_cloud=2, atlas_rain=1, zp_data=[0.5387499999999994, 0.48024999999999984, 0.4352499999999999, 0.552999999999999, 0.48799999999999955, 0.6762500000000022, 0.8789999999999996, 0.8522500000000006, 0.6694999999999993, 0.3865000000000016, 0.3862500000000004, 0.5329999999999995, 0.7014999999999993, 0.8342499999999999, 1.0004999999999997, 1.092999999999999, 0.6622500000000002, 0.301499999999999, 0.40499999999999936, 0.6557499999999994, 0.8519999999999985, 1.3927499999999986, 1.402750000000001, 1.7227500000000004, 0.7519999999999989, 0.2629999999999999, 0.3962500000000002, 0.5425000000000004, 0.6974999999999998, 1.6940000000000008, 2.4540000000000006, 1.8810000000000002, 0.7597499999999995], zp_timestamp='2025-11-12T20:46:00')
2025-11-12T22:47:21.295 [DEBUG] [Thread-24103] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:47:21.354 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:21.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:47:21.389 [DEBUG] [Thread-24106] [transport.py] [_log()] starting thread (client mode): 0x14907ee0
2025-11-12T22:47:21.389 [DEBUG] [Thread-24106] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:47:21.404 [DEBUG] [Thread-24106] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:47:21.405 [INFO] [Thread-24106] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:47:21.412 [DEBUG] [Thread-24106] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:47:21.412 [DEBUG] [Thread-24106] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:47:21.412 [DEBUG] [Thread-24106] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] client lang: <none>
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] server lang: <none>
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] kex follows: False
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] Compression: none
2025-11-12T22:47:21.413 [DEBUG] [Thread-24106] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:47:21.473 [DEBUG] [Thread-24106] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:47:21.474 [DEBUG] [Thread-24106] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:47:21.474 [DEBUG] [Thread-24106] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:47:21.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:47:21.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:47:21.529 [DEBUG] [Thread-24106] [transport.py] [_log()] userauth is OK
2025-11-12T22:47:21.529 [DEBUG] [Thread-24106] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:47:21.529 [DEBUG] [Thread-24106] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:47:21.529 [DEBUG] [Thread-24106] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:47:21.529 [DEBUG] [Thread-24106] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:47:21.548 [INFO] [Thread-24106] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:47:21.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:47:21.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:47:22.369 [DEBUG] [Thread-24106] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:47:22.369 [DEBUG] [Thread-24106] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:47:22.417 [DEBUG] [Thread-24106] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:47:22.417 [DEBUG] [Thread-24106] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:47:22.426 [DEBUG] [Thread-24106] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:47:22.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:47:22.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-11-12T22:47:22.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-11-12T22:47:22.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:47:22.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:47:22.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:47:22.463 [DEBUG] [Thread-24106] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:47:25.716 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:30.976 [DEBUG] [Thread-24108 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:46.018 [DEBUG] [Thread-24109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:47:52.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:47:52.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:47:52.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-11-12T22:47:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 47, 18), 9.79, 52.5, 0.0, 14.29, 16.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:47:53.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:47:18
2025-11-12T22:47:53.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:47:53.372 [DEBUG] [Thread-24110] [transport.py] [_log()] starting thread (client mode): 0x17345f60
2025-11-12T22:47:53.372 [DEBUG] [Thread-24110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:47:53.392 [DEBUG] [Thread-24110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:47:53.392 [INFO] [Thread-24110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:47:53.395 [DEBUG] [Thread-24110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:47:53.395 [DEBUG] [Thread-24110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:47:53.395 [DEBUG] [Thread-24110] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:47:53.395 [DEBUG] [Thread-24110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:47:53.395 [DEBUG] [Thread-24110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:47:53.395 [DEBUG] [Thread-24110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:47:53.395 [DEBUG] [Thread-24110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:47:53.395 [DEBUG] [Thread-24110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] client lang: <none>
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] server lang: <none>
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] kex follows: False
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] Compression: none
2025-11-12T22:47:53.396 [DEBUG] [Thread-24110] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:47:53.405 [DEBUG] [Thread-24110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:47:53.405 [DEBUG] [Thread-24110] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:47:53.406 [DEBUG] [Thread-24110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:47:53.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:47:53.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:47:53.408 [DEBUG] [Thread-24110] [transport.py] [_log()] userauth is OK
2025-11-12T22:47:53.408 [DEBUG] [Thread-24110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:47:53.408 [DEBUG] [Thread-24110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:47:53.408 [DEBUG] [Thread-24110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:47:53.408 [DEBUG] [Thread-24110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:47:53.432 [INFO] [Thread-24110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:47:53.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:47:54.081 [DEBUG] [Thread-24110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:47:54.082 [DEBUG] [Thread-24110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:47:54.082 [DEBUG] [Thread-24110] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:47:54.122 [DEBUG] [Thread-24110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:47:54.123 [DEBUG] [Thread-24110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:47:54.126 [DEBUG] [Thread-24110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:47:54.138 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:47:54.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:47:54.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:47:54.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:47:54.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:47:54.151 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:47:54.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:47:54.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:47:54.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:47:54.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.866054 -999.00  +16.50   7.89     56   +7.70 1 2 1 1 1     0    0 7.59 -57.20 Z.ESw 9.5 7.9 201.5 13.2 17.2 -21.5 17.1 -20.9 16.8 -20.3 17.1 -20.8
2025-11-12T22:47:54.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:47:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:47:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.866054
2025-11-12T22:47:54.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:47:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:47:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:47:54.154 [DEBUG] [Thread-24110] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:47:54.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:47:54.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:47:54.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:47:18', tmtdew=9.79, humidity=52.5, cloud=0.0, wind=14.29, temperature=16.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:47:50', seeing=0.99, atlas_timestamp='2025-11-12T20:47:07.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.5387499999999994, 0.48024999999999984, 0.4352499999999999, 0.552999999999999, 0.48799999999999955, 0.6762500000000022, 0.8789999999999996, 0.8522500000000006, 0.6694999999999993, 0.3865000000000016, 0.3862500000000004, 0.5329999999999995, 0.7014999999999993, 0.8342499999999999, 1.0004999999999997, 1.092999999999999, 0.6622500000000002, 0.301499999999999, 0.40499999999999936, 0.6557499999999994, 0.8519999999999985, 1.3927499999999986, 1.402750000000001, 1.7227500000000004, 0.7519999999999989, 0.2629999999999999, 0.3962500000000002, 0.5425000000000004, 0.6974999999999998, 1.6940000000000008, 2.4540000000000006, 1.8810000000000002, 0.7597499999999995], zp_timestamp='2025-11-12T20:46:00')
2025-11-12T22:47: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-11-12T22:47:54.250 [DEBUG] [Thread-24113] [transport.py] [_log()] starting thread (client mode): 0x1739b250
2025-11-12T22:47:54.250 [DEBUG] [Thread-24113] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:47:54.265 [DEBUG] [Thread-24113] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:47:54.265 [INFO] [Thread-24113] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:47:54.273 [DEBUG] [Thread-24113] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:47:54.273 [DEBUG] [Thread-24113] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:47:54.273 [DEBUG] [Thread-24113] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:47:54.273 [DEBUG] [Thread-24113] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:47:54.273 [DEBUG] [Thread-24113] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:47:54.274 [DEBUG] [Thread-24113] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:47:54.274 [DEBUG] [Thread-24113] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:47:54.274 [DEBUG] [Thread-24113] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:47:54.274 [DEBUG] [Thread-24113] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:47:54.274 [DEBUG] [Thread-24113] [transport.py] [_log()] client lang: <none>
2025-11-12T22:47:54.274 [DEBUG] [Thread-24113] [transport.py] [_log()] server lang: <none>
2025-11-12T22:47:54.274 [DEBUG] [Thread-24113] [transport.py] [_log()] kex follows: False
2025-11-12T22:47:54.274 [DEBUG] [Thread-24113] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:47:54.275 [DEBUG] [Thread-24113] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:47:54.275 [DEBUG] [Thread-24113] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:47:54.275 [DEBUG] [Thread-24113] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:47:54.275 [DEBUG] [Thread-24113] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:47:54.275 [DEBUG] [Thread-24113] [transport.py] [_log()] Compression: none
2025-11-12T22:47:54.275 [DEBUG] [Thread-24113] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:47:54.333 [DEBUG] [Thread-24113] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:47:54.334 [DEBUG] [Thread-24113] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:47:54.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:47:54.335 [DEBUG] [Thread-24113] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:47:54.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:47:54.388 [DEBUG] [Thread-24113] [transport.py] [_log()] userauth is OK
2025-11-12T22:47:54.389 [DEBUG] [Thread-24113] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:47:54.389 [DEBUG] [Thread-24113] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:47:54.389 [DEBUG] [Thread-24113] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:47:54.389 [DEBUG] [Thread-24113] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:47:54.408 [INFO] [Thread-24113] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:47:54.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:47:54.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:47:55.240 [DEBUG] [Thread-24113] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:47:55.241 [DEBUG] [Thread-24113] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:47:55.289 [DEBUG] [Thread-24113] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:47:55.289 [DEBUG] [Thread-24113] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:47:55.298 [DEBUG] [Thread-24113] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:47:55.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:47: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')
2025-11-12T22:47:55.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-11-12T22:47:55.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:47:55.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:47:55.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:47:55.334 [DEBUG] [Thread-24113] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:48:00.406 [DEBUG] [Thread-24115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:01.054 [DEBUG] [Thread-24116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:05.384 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:05.386 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:16.103 [DEBUG] [Thread-24117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:24.943 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:25.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:48:25.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:48:25.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-11-12T22:48:25.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 48, 22), 9.77, 52.03, 0.0, 11.56, 16.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:48:25.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:48:22
2025-11-12T22:48:26.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:48:26.256 [DEBUG] [Thread-24118] [transport.py] [_log()] starting thread (client mode): 0x14946ef0
2025-11-12T22:48:26.256 [DEBUG] [Thread-24118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:48:26.277 [DEBUG] [Thread-24118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:48:26.277 [INFO] [Thread-24118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] client lang: <none>
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] server lang: <none>
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] kex follows: False
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:48:26.278 [DEBUG] [Thread-24118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:48:26.279 [DEBUG] [Thread-24118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:48:26.279 [DEBUG] [Thread-24118] [transport.py] [_log()] Compression: none
2025-11-12T22:48:26.279 [DEBUG] [Thread-24118] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:48:26.295 [DEBUG] [Thread-24118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:48:26.296 [DEBUG] [Thread-24118] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:48:26.297 [DEBUG] [Thread-24118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:48:26.297 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:48:26.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:48:26.299 [DEBUG] [Thread-24118] [transport.py] [_log()] userauth is OK
2025-11-12T22:48:26.299 [DEBUG] [Thread-24118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:48:26.299 [DEBUG] [Thread-24118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:48:26.299 [DEBUG] [Thread-24118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:48:26.300 [DEBUG] [Thread-24118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:48:26.322 [INFO] [Thread-24118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:48:26.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:48:26.932 [DEBUG] [Thread-24118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:48:26.932 [DEBUG] [Thread-24118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:48:26.932 [DEBUG] [Thread-24118] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:48:26.973 [DEBUG] [Thread-24118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:48:26.973 [DEBUG] [Thread-24118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:48:26.976 [DEBUG] [Thread-24118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:48:26.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:48:26.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:48:26.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:48:26.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:48:26.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:48:26.999 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:48:26.999 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:48:26.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:48:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:48:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.866402 -999.00  +16.40  10.10     56   +7.70 1 2 1 1 1     0    0 7.48 -55.54 Z.ESw 8.1 10.1 219.2 14.7 17.1 -21.4 17.1 -20.8 16.9 -20.2 17.1 -20.8
2025-11-12T22:48:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:48:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:48:27.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.866402
2025-11-12T22:48:27.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:48:27.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:48:27.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:48:27.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:48:27.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:48:27.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:48:22', tmtdew=9.77, humidity=52.03, cloud=0.0, wind=11.56, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:48:22', seeing=0.99, atlas_timestamp='2025-11-12T20:47:37.133', atlas_cloud=2, atlas_rain=1, zp_data=[0.5387499999999994, 0.48024999999999984, 0.4352499999999999, 0.552999999999999, 0.48799999999999955, 0.6762500000000022, 0.8789999999999996, 0.8522500000000006, 0.6694999999999993, 0.3865000000000016, 0.3862500000000004, 0.5329999999999995, 0.7014999999999993, 0.8342499999999999, 1.0004999999999997, 1.092999999999999, 0.6622500000000002, 0.301499999999999, 0.40499999999999936, 0.6557499999999994, 0.8519999999999985, 1.3927499999999986, 1.402750000000001, 1.7227500000000004, 0.7519999999999989, 0.2629999999999999, 0.3962500000000002, 0.5425000000000004, 0.6974999999999998, 1.6940000000000008, 2.4540000000000006, 1.8810000000000002, 0.7597499999999995], zp_timestamp='2025-11-12T20:46:00')
2025-11-12T22:48:27.002 [DEBUG] [Thread-24118] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:48:27.090 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:48:27.102 [DEBUG] [Thread-24121] [transport.py] [_log()] starting thread (client mode): 0x11f03e50
2025-11-12T22:48:27.102 [DEBUG] [Thread-24121] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:48:27.117 [DEBUG] [Thread-24121] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:48:27.117 [INFO] [Thread-24121] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:48:27.124 [DEBUG] [Thread-24121] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:48:27.125 [DEBUG] [Thread-24121] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:48:27.125 [DEBUG] [Thread-24121] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:48:27.125 [DEBUG] [Thread-24121] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:48:27.125 [DEBUG] [Thread-24121] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:48:27.125 [DEBUG] [Thread-24121] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:48:27.125 [DEBUG] [Thread-24121] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:48:27.125 [DEBUG] [Thread-24121] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:48:27.126 [DEBUG] [Thread-24121] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:48:27.126 [DEBUG] [Thread-24121] [transport.py] [_log()] client lang: <none>
2025-11-12T22:48:27.126 [DEBUG] [Thread-24121] [transport.py] [_log()] server lang: <none>
2025-11-12T22:48:27.126 [DEBUG] [Thread-24121] [transport.py] [_log()] kex follows: False
2025-11-12T22:48:27.126 [DEBUG] [Thread-24121] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:48:27.126 [DEBUG] [Thread-24121] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:48:27.126 [DEBUG] [Thread-24121] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:48:27.126 [DEBUG] [Thread-24121] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:48:27.127 [DEBUG] [Thread-24121] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:48:27.127 [DEBUG] [Thread-24121] [transport.py] [_log()] Compression: none
2025-11-12T22:48:27.127 [DEBUG] [Thread-24121] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:48:27.186 [DEBUG] [Thread-24121] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:48:27.187 [DEBUG] [Thread-24121] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:48:27.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:48:27.189 [DEBUG] [Thread-24121] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:48:27.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:48:27.245 [DEBUG] [Thread-24121] [transport.py] [_log()] userauth is OK
2025-11-12T22:48:27.245 [DEBUG] [Thread-24121] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:48:27.245 [DEBUG] [Thread-24121] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:48:27.246 [DEBUG] [Thread-24121] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:48:27.246 [DEBUG] [Thread-24121] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:48:27.266 [INFO] [Thread-24121] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:48:27.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:48:27.267 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:48:27.983 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:28.091 [DEBUG] [Thread-24121] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:48:28.091 [DEBUG] [Thread-24121] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:48:28.139 [DEBUG] [Thread-24121] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:48:28.139 [DEBUG] [Thread-24121] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:48:28.148 [DEBUG] [Thread-24121] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:48:28.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:48: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')
2025-11-12T22:48:28.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-11-12T22:48:28.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:48:28.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:48:28.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:48:28.185 [DEBUG] [Thread-24121] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:48:31.140 [DEBUG] [Thread-24123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:46.196 [DEBUG] [Thread-24124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:48:58.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:48:58.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:48:58.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-11-12T22:48:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 48, 54), 9.73, 52.7, 0.0, 13.46, 16.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:48:58.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:48:54
2025-11-12T22:48:58.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:48:59.108 [DEBUG] [Thread-24125] [transport.py] [_log()] starting thread (client mode): 0x14944f40
2025-11-12T22:48:59.108 [DEBUG] [Thread-24125] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:48:59.131 [DEBUG] [Thread-24125] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:48:59.131 [INFO] [Thread-24125] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] client lang: <none>
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] server lang: <none>
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] kex follows: False
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:48:59.134 [DEBUG] [Thread-24125] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:48:59.135 [DEBUG] [Thread-24125] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:48:59.135 [DEBUG] [Thread-24125] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:48:59.135 [DEBUG] [Thread-24125] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:48:59.135 [DEBUG] [Thread-24125] [transport.py] [_log()] Compression: none
2025-11-12T22:48:59.135 [DEBUG] [Thread-24125] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:48:59.152 [DEBUG] [Thread-24125] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:48:59.153 [DEBUG] [Thread-24125] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:48:59.153 [DEBUG] [Thread-24125] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:48:59.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:48:59.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:48:59.155 [DEBUG] [Thread-24125] [transport.py] [_log()] userauth is OK
2025-11-12T22:48:59.156 [DEBUG] [Thread-24125] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:48:59.156 [DEBUG] [Thread-24125] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:48:59.156 [DEBUG] [Thread-24125] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:48:59.156 [DEBUG] [Thread-24125] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:48:59.179 [INFO] [Thread-24125] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:48:59.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:48:59.936 [DEBUG] [Thread-24125] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:48:59.936 [DEBUG] [Thread-24125] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:48:59.937 [DEBUG] [Thread-24125] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:48:59.977 [DEBUG] [Thread-24125] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:48:59.977 [DEBUG] [Thread-24125] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:48:59.980 [DEBUG] [Thread-24125] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:48:59.992 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:48:59.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:48:59.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:48:59.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:49:00.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:49:00.006 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:49:00.006 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:49:00.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:49:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:49:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.866749 -999.00  +16.40   8.70     56   +7.70 1 2 1 1 1     0    0 7.43 -60.19 Z.ESw 8.8 8.7 198.4 14.0 17.1 -21.3 17.0 -20.7 16.8 -20.4 17.1 -20.9
2025-11-12T22:49:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:49:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:49:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.866749
2025-11-12T22:49:00.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:49:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:49:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:49:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:49:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:49:00.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:48:54', tmtdew=9.73, humidity=52.7, cloud=0.0, wind=13.46, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:48:55', seeing=1.09, atlas_timestamp='2025-11-12T20:48:07.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.5387499999999994, 0.48024999999999984, 0.4352499999999999, 0.552999999999999, 0.48799999999999955, 0.6762500000000022, 0.8789999999999996, 0.8522500000000006, 0.6694999999999993, 0.3865000000000016, 0.3862500000000004, 0.5329999999999995, 0.7014999999999993, 0.8342499999999999, 1.0004999999999997, 1.092999999999999, 0.6622500000000002, 0.301499999999999, 0.40499999999999936, 0.6557499999999994, 0.8519999999999985, 1.3927499999999986, 1.402750000000001, 1.7227500000000004, 0.7519999999999989, 0.2629999999999999, 0.3962500000000002, 0.5425000000000004, 0.6974999999999998, 1.6940000000000008, 2.4540000000000006, 1.8810000000000002, 0.7597499999999995], zp_timestamp='2025-11-12T20:46:00')
2025-11-12T22:49:00.008 [DEBUG] [Thread-24125] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:49:00.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:49:00.106 [DEBUG] [Thread-24128] [transport.py] [_log()] starting thread (client mode): 0x17347070
2025-11-12T22:49:00.106 [DEBUG] [Thread-24128] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:49:00.121 [DEBUG] [Thread-24128] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:49:00.121 [INFO] [Thread-24128] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] client lang: <none>
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] server lang: <none>
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] kex follows: False
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:49:00.129 [DEBUG] [Thread-24128] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:49:00.130 [DEBUG] [Thread-24128] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:49:00.130 [DEBUG] [Thread-24128] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:49:00.130 [DEBUG] [Thread-24128] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:49:00.130 [DEBUG] [Thread-24128] [transport.py] [_log()] Compression: none
2025-11-12T22:49:00.130 [DEBUG] [Thread-24128] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:49:00.188 [DEBUG] [Thread-24128] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:49:00.188 [DEBUG] [Thread-24128] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:49:00.189 [DEBUG] [Thread-24128] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:49:00.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:49:00.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:49:00.249 [DEBUG] [Thread-24128] [transport.py] [_log()] userauth is OK
2025-11-12T22:49:00.249 [DEBUG] [Thread-24128] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:49:00.250 [DEBUG] [Thread-24128] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:49:00.250 [DEBUG] [Thread-24128] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:49:00.250 [DEBUG] [Thread-24128] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:49:00.269 [INFO] [Thread-24128] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:49:00.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:49:00.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:49:00.461 [DEBUG] [Thread-24130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:49:01.119 [DEBUG] [Thread-24128] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:49:01.119 [DEBUG] [Thread-24128] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:49:01.166 [DEBUG] [Thread-24128] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:49:01.166 [DEBUG] [Thread-24128] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:49:01.175 [DEBUG] [Thread-24128] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:49:01.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:49:01.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-11-12T22:49:01.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-11-12T22:49:01.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:49:01.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:49:01.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:49:01.209 [DEBUG] [Thread-24128] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:49:01.229 [DEBUG] [Thread-24131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:49:05.588 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:49:05.589 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:49:16.275 [DEBUG] [Thread-24132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:49:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:49:31.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:49:31.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-11-12T22:49:31.311 [DEBUG] [Thread-24133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:49:31.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 49, 27), 9.7, 52.8, 0.0, 12.78, 16.22, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:49:31.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:49:27
2025-11-12T22:49:32.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:49:32.177 [DEBUG] [Thread-24134] [transport.py] [_log()] starting thread (client mode): 0x14915c00
2025-11-12T22:49:32.177 [DEBUG] [Thread-24134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:49:32.196 [DEBUG] [Thread-24134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:49:32.196 [INFO] [Thread-24134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] client lang: <none>
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] server lang: <none>
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] kex follows: False
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:49:32.199 [DEBUG] [Thread-24134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:49:32.200 [DEBUG] [Thread-24134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:49:32.200 [DEBUG] [Thread-24134] [transport.py] [_log()] Compression: none
2025-11-12T22:49:32.200 [DEBUG] [Thread-24134] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:49:32.217 [DEBUG] [Thread-24134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:49:32.217 [DEBUG] [Thread-24134] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:49:32.217 [DEBUG] [Thread-24134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:49:32.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:49:32.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:49:32.218 [DEBUG] [Thread-24134] [transport.py] [_log()] userauth is OK
2025-11-12T22:49:32.218 [DEBUG] [Thread-24134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:49:32.218 [DEBUG] [Thread-24134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:49:32.219 [DEBUG] [Thread-24134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:49:32.219 [DEBUG] [Thread-24134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:49:32.231 [INFO] [Thread-24134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:49:32.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:49:32.847 [DEBUG] [Thread-24134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:49:32.847 [DEBUG] [Thread-24134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:49:32.847 [DEBUG] [Thread-24134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:49:32.888 [DEBUG] [Thread-24134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:49:32.888 [DEBUG] [Thread-24134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:49:32.890 [DEBUG] [Thread-24134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:49:32.902 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:49:32.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:49:32.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:49:32.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:49:32.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:49:32.908 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:49:32.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:49:32.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:49:32.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:49:32.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.867443 -999.00  +16.40   9.60     56   +7.70 1 2 1 1 1     0    0 7.58 -58.39 Z.ESw 7.9 9.6 209.2 13.3 17.1 -21.4 17.0 -20.8 16.8 -20.4 17.1 -20.8
2025-11-12T22:49:32.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:49:32.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:49:32.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.867443
2025-11-12T22:49:32.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:49:32.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:49:32.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:49:32.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:49:32.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:49:32.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:49:27', tmtdew=9.7, humidity=52.8, cloud=0.0, wind=12.78, temperature=16.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:49:27', seeing=1.09, atlas_timestamp='2025-11-12T20:49:07.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.5387499999999994, 0.48024999999999984, 0.4352499999999999, 0.552999999999999, 0.48799999999999955, 0.6762500000000022, 0.8789999999999996, 0.8522500000000006, 0.6694999999999993, 0.3865000000000016, 0.3862500000000004, 0.5329999999999995, 0.7014999999999993, 0.8342499999999999, 1.0004999999999997, 1.092999999999999, 0.6622500000000002, 0.301499999999999, 0.40499999999999936, 0.6557499999999994, 0.8519999999999985, 1.3927499999999986, 1.402750000000001, 1.7227500000000004, 0.7519999999999989, 0.2629999999999999, 0.3962500000000002, 0.5425000000000004, 0.6974999999999998, 1.6940000000000008, 2.4540000000000006, 1.8810000000000002, 0.7597499999999995], zp_timestamp='2025-11-12T20:46:00')
2025-11-12T22:49:32.909 [DEBUG] [Thread-24134] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:49:32.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:49:32.993 [DEBUG] [Thread-24137] [transport.py] [_log()] starting thread (client mode): 0x11f03280
2025-11-12T22:49:32.994 [DEBUG] [Thread-24137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:49:33.010 [DEBUG] [Thread-24137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:49:33.011 [INFO] [Thread-24137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:49:33.018 [DEBUG] [Thread-24137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:49:33.018 [DEBUG] [Thread-24137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:49:33.018 [DEBUG] [Thread-24137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:49:33.018 [DEBUG] [Thread-24137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:49:33.018 [DEBUG] [Thread-24137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:49:33.018 [DEBUG] [Thread-24137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:49:33.018 [DEBUG] [Thread-24137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:49:33.018 [DEBUG] [Thread-24137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] client lang: <none>
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] server lang: <none>
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] kex follows: False
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] Compression: none
2025-11-12T22:49:33.019 [DEBUG] [Thread-24137] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:49:33.081 [DEBUG] [Thread-24137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:49:33.081 [DEBUG] [Thread-24137] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:49:33.082 [DEBUG] [Thread-24137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:49:33.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:49:33.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:49:33.137 [DEBUG] [Thread-24137] [transport.py] [_log()] userauth is OK
2025-11-12T22:49:33.137 [DEBUG] [Thread-24137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:49:33.137 [DEBUG] [Thread-24137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:49:33.137 [DEBUG] [Thread-24137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:49:33.137 [DEBUG] [Thread-24137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:49:33.157 [INFO] [Thread-24137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:49:33.157 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:49:33.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:49:33.976 [DEBUG] [Thread-24137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:49:33.977 [DEBUG] [Thread-24137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:49:34.025 [DEBUG] [Thread-24137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:49:34.026 [DEBUG] [Thread-24137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:49:34.039 [DEBUG] [Thread-24137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:49:34.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:49: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-11-12T22:49: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-11-12T22:49:34.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:49:34.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:49:34.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:49:34.075 [DEBUG] [Thread-24137] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:49:46.344 [DEBUG] [Thread-24139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:50:00.515 [DEBUG] [Thread-24140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:50:01.401 [DEBUG] [Thread-24141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:50:04.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:50:04.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:50:04.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-11-12T22:50:04.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 49, 59), 9.73, 52.68, 0.0, 14.82, 16.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:50:04.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:49:59
2025-11-12T22:50:04.857 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:50:05.003 [DEBUG] [Thread-24142] [transport.py] [_log()] starting thread (client mode): 0x14980c10
2025-11-12T22:50:05.003 [DEBUG] [Thread-24142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:50:05.023 [DEBUG] [Thread-24142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:50:05.023 [INFO] [Thread-24142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] client lang: <none>
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] server lang: <none>
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] kex follows: False
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:50:05.026 [DEBUG] [Thread-24142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:50:05.027 [DEBUG] [Thread-24142] [transport.py] [_log()] Compression: none
2025-11-12T22:50:05.027 [DEBUG] [Thread-24142] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:50:05.043 [DEBUG] [Thread-24142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:50:05.044 [DEBUG] [Thread-24142] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:50:05.044 [DEBUG] [Thread-24142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:50:05.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:50:05.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:50:05.046 [DEBUG] [Thread-24142] [transport.py] [_log()] userauth is OK
2025-11-12T22:50:05.046 [DEBUG] [Thread-24142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:50:05.046 [DEBUG] [Thread-24142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:50:05.046 [DEBUG] [Thread-24142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:50:05.046 [DEBUG] [Thread-24142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:50:05.060 [INFO] [Thread-24142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:50:05.061 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:50:05.791 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:50:05.792 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:50:07.657 [DEBUG] [Thread-24142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:50:07.657 [DEBUG] [Thread-24142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:50:07.658 [DEBUG] [Thread-24142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:50:07.698 [DEBUG] [Thread-24142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:50:07.698 [DEBUG] [Thread-24142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:50:07.701 [DEBUG] [Thread-24142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:50:07.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:50:07.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:50:07.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:50:07.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:50:07.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:50:07.720 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:50:07.720 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:50:07.720 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:50:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:50:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.867791 -999.00  +16.40   7.49     56   +7.60 1 2 1 1 1     0    0 7.44 -60.52 ZnESw 10.0 7.5 195.8 13.4 17.2 -21.4 17.1 -20.8 16.8 -20.3 17.1 -20.8
2025-11-12T22:50:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:50:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:50:07.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.867791
2025-11-12T22:50:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:50:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:50:07.721 [DEBUG] [Thread-24142] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:50:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:50:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:50:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:50:07.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:49:59', tmtdew=9.73, humidity=52.68, cloud=0.0, wind=14.82, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:49:59', seeing=1.09, atlas_timestamp='2025-11-12T20:49:37.142', atlas_cloud=2, atlas_rain=1, zp_data=[0.5387499999999994, 0.48024999999999984, 0.4352499999999999, 0.552999999999999, 0.48799999999999955, 0.6762500000000022, 0.8789999999999996, 0.8522500000000006, 0.6694999999999993, 0.3865000000000016, 0.3862500000000004, 0.5329999999999995, 0.7014999999999993, 0.8342499999999999, 1.0004999999999997, 1.092999999999999, 0.6622500000000002, 0.301499999999999, 0.40499999999999936, 0.6557499999999994, 0.8519999999999985, 1.3927499999999986, 1.402750000000001, 1.7227500000000004, 0.7519999999999989, 0.2629999999999999, 0.3962500000000002, 0.5425000000000004, 0.6974999999999998, 1.6940000000000008, 2.4540000000000006, 1.8810000000000002, 0.7597499999999995], zp_timestamp='2025-11-12T20:46:00')
2025-11-12T22:50:07.795 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:50:07.806 [DEBUG] [Thread-24145] [transport.py] [_log()] starting thread (client mode): 0x1739b760
2025-11-12T22:50:07.806 [DEBUG] [Thread-24145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:50:07.821 [DEBUG] [Thread-24145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:50:07.821 [INFO] [Thread-24145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:50:07.828 [DEBUG] [Thread-24145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:50:07.828 [DEBUG] [Thread-24145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] client lang: <none>
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] server lang: <none>
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] kex follows: False
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] Compression: none
2025-11-12T22:50:07.829 [DEBUG] [Thread-24145] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:50:07.887 [DEBUG] [Thread-24145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:50:07.888 [DEBUG] [Thread-24145] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:50:07.888 [DEBUG] [Thread-24145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:50:07.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:50:07.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:50:07.944 [DEBUG] [Thread-24145] [transport.py] [_log()] userauth is OK
2025-11-12T22:50:07.944 [DEBUG] [Thread-24145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:50:07.944 [DEBUG] [Thread-24145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:50:07.944 [DEBUG] [Thread-24145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:50:07.944 [DEBUG] [Thread-24145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:50:07.958 [INFO] [Thread-24145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:50:07.958 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:50:07.958 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:50:08.786 [DEBUG] [Thread-24145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:50:08.786 [DEBUG] [Thread-24145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:50:08.834 [DEBUG] [Thread-24145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:50:08.834 [DEBUG] [Thread-24145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:50:08.842 [DEBUG] [Thread-24145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:50:08.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:50:08.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-11-12T22:50:08.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-11-12T22:50:08.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:50:08.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:50:08.866 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:50:08.874 [DEBUG] [Thread-24145] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:50:16.431 [DEBUG] [Thread-24147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:50:31.485 [DEBUG] [Thread-24148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:50:38.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:50:38.871 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:50:38.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-11-12T22:50:39.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 50, 31), 9.72, 52.73, 0.0, 14.54, 16.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:50:39.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:50:31
2025-11-12T22:50:39.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:50:39.752 [DEBUG] [Thread-24149] [transport.py] [_log()] starting thread (client mode): 0x17347820
2025-11-12T22:50:39.752 [DEBUG] [Thread-24149] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:50:39.773 [DEBUG] [Thread-24149] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:50:39.773 [INFO] [Thread-24149] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:50:39.776 [DEBUG] [Thread-24149] [transport.py] [_log()] client lang: <none>
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] server lang: <none>
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] kex follows: False
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] Compression: none
2025-11-12T22:50:39.777 [DEBUG] [Thread-24149] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:50:39.800 [DEBUG] [Thread-24149] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:50:39.801 [DEBUG] [Thread-24149] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:50:39.802 [DEBUG] [Thread-24149] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:50:39.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:50:39.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:50:39.804 [DEBUG] [Thread-24149] [transport.py] [_log()] userauth is OK
2025-11-12T22:50:39.804 [DEBUG] [Thread-24149] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:50:39.804 [DEBUG] [Thread-24149] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:50:39.804 [DEBUG] [Thread-24149] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:50:39.804 [DEBUG] [Thread-24149] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:50:39.829 [INFO] [Thread-24149] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:50:39.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:50:40.428 [DEBUG] [Thread-24149] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:50:40.428 [DEBUG] [Thread-24149] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:50:40.429 [DEBUG] [Thread-24149] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:50:40.469 [DEBUG] [Thread-24149] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:50:40.469 [DEBUG] [Thread-24149] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:50:40.472 [DEBUG] [Thread-24149] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:50:40.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:50:40.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:50:40.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:50:40.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:50:40.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:50:40.498 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:50:40.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:50:40.498 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:50:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:50:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.868137 -999.00  +16.40   6.15     56   +7.60 1 2 1 1 1     0    0 7.29 -59.81 ZnESw 5.3 6.2 188.6 11.3 17.1 -21.4 17.0 -20.8 16.8 -20.4 17.1 -20.9
2025-11-12T22:50:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:50:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:50:40.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.868137
2025-11-12T22:50:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:50:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:50:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:50:40.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:50:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:50:40.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:50:31', tmtdew=9.72, humidity=52.73, cloud=0.0, wind=14.54, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:50:31', seeing=1.09, atlas_timestamp='2025-11-12T20:50:07.037', atlas_cloud=2, atlas_rain=1, zp_data=[0.49924999999999997, 0.4407500000000013, 0.4592500000000008, 0.40549999999999997, 0.5134999999999996, 0.6682500000000005, 0.5890000000000004, 0.8112500000000002, 0.6984999999999992, 0.4930000000000003, 0.37324999999999875, 0.6214999999999993, 0.8959999999999999, 0.9872499999999995, 0.7529999999999992, 1.0889999999999995, 0.7952500000000002, 0.3625000000000007, 0.45699999999999896, 0.5002499999999985, 0.7595000000000001, 1.263749999999999, 1.1422500000000007, 1.8187499999999996, 0.9634999999999998, 0.19599999999999973, 0.3837500000000009, 0.49350000000000005, 0.7469999999999999, 1.176000000000001, 1.894000000000001, 1.8080000000000007, 0.8697499999999989], zp_timestamp='2025-11-12T20:49:00')
2025-11-12T22:50:40.501 [DEBUG] [Thread-24149] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:50:40.584 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:50:46.517 [DEBUG] [Thread-24152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:00.584 [DEBUG] [Thread-24153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:01.564 [DEBUG] [Thread-24154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:05.995 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:05.996 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:16.599 [DEBUG] [Thread-24155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:31.630 [DEBUG] [Thread-24156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:46.667 [DEBUG] [Thread-24157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:51.723 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:56.503 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:51:59.543 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:00.640 [DEBUG] [Thread-24158 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:01.702 [DEBUG] [Thread-24159 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:05.909 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:06.198 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:06.199 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:16.733 [DEBUG] [Thread-24160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:31.771 [DEBUG] [Thread-24161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:46.804 [DEBUG] [Thread-24162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:52:54.587 [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-11-12T22:53:00.698 [DEBUG] [Thread-24163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:53:01.842 [DEBUG] [Thread-24164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:53:06.403 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:53:06.404 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:53:16.882 [DEBUG] [Thread-24165 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:53:24.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:53:24.590 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:53:24.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-11-12T22:53:25.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 53, 11), 9.61, 52.75, 0.0, 11.63, 16.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:53:25.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:53:11
2025-11-12T22:53:25.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:53:25.520 [DEBUG] [Thread-24166] [transport.py] [_log()] starting thread (client mode): 0x17347c10
2025-11-12T22:53:25.520 [DEBUG] [Thread-24166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:53:25.540 [DEBUG] [Thread-24166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:53:25.540 [INFO] [Thread-24166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:53:25.543 [DEBUG] [Thread-24166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:53:25.543 [DEBUG] [Thread-24166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:53:25.543 [DEBUG] [Thread-24166] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:53:25.543 [DEBUG] [Thread-24166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:53:25.543 [DEBUG] [Thread-24166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] client lang: <none>
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] server lang: <none>
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] kex follows: False
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] Compression: none
2025-11-12T22:53:25.544 [DEBUG] [Thread-24166] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:53:25.563 [DEBUG] [Thread-24166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:53:25.563 [DEBUG] [Thread-24166] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:53:25.564 [DEBUG] [Thread-24166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:53:25.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:53:25.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:53:25.565 [DEBUG] [Thread-24166] [transport.py] [_log()] userauth is OK
2025-11-12T22:53:25.566 [DEBUG] [Thread-24166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:53:25.566 [DEBUG] [Thread-24166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:53:25.566 [DEBUG] [Thread-24166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:53:25.566 [DEBUG] [Thread-24166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:53:25.589 [INFO] [Thread-24166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:53:25.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:53:26.235 [DEBUG] [Thread-24166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:53:26.235 [DEBUG] [Thread-24166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:53:26.236 [DEBUG] [Thread-24166] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:53:26.275 [DEBUG] [Thread-24166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:53:26.275 [DEBUG] [Thread-24166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:53:26.278 [DEBUG] [Thread-24166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:53:26.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:53:26.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:53:26.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:53:26.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:53:26.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:53:26.300 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:53:26.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:53:26.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:53:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:53:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.870221 -999.00  +16.30   8.14     57   +7.80 1 2 1 1 1     0    0 7.12 -62.18 Z.ESW 9.8 8.1 212.6 12.8 17.1 -21.2 17.0 -20.8 16.8 -20.2 17.1 -20.7
2025-11-12T22:53:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:53:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:53:26.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.870221
2025-11-12T22:53:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:53:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:53:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:53:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:53:26.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:53:26.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:53:11', tmtdew=9.61, humidity=52.75, cloud=0.0, wind=11.63, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:53:11', seeing=1.07, atlas_timestamp='2025-11-12T20:53:07.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.49924999999999997, 0.4407500000000013, 0.4592500000000008, 0.40549999999999997, 0.5134999999999996, 0.6682500000000005, 0.5890000000000004, 0.8112500000000002, 0.6984999999999992, 0.4930000000000003, 0.37324999999999875, 0.6214999999999993, 0.8959999999999999, 0.9872499999999995, 0.7529999999999992, 1.0889999999999995, 0.7952500000000002, 0.3625000000000007, 0.45699999999999896, 0.5002499999999985, 0.7595000000000001, 1.263749999999999, 1.1422500000000007, 1.8187499999999996, 0.9634999999999998, 0.19599999999999973, 0.3837500000000009, 0.49350000000000005, 0.7469999999999999, 1.176000000000001, 1.894000000000001, 1.8080000000000007, 0.8697499999999989], zp_timestamp='2025-11-12T20:52:00')
2025-11-12T22:53:26.303 [DEBUG] [Thread-24166] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:53:26.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:53:26.396 [DEBUG] [Thread-24169] [transport.py] [_log()] starting thread (client mode): 0x173468c0
2025-11-12T22:53:26.396 [DEBUG] [Thread-24169] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:53:26.411 [DEBUG] [Thread-24169] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:53:26.411 [INFO] [Thread-24169] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:53:26.418 [DEBUG] [Thread-24169] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:53:26.418 [DEBUG] [Thread-24169] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] client lang: <none>
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] server lang: <none>
2025-11-12T22:53:26.419 [DEBUG] [Thread-24169] [transport.py] [_log()] kex follows: False
2025-11-12T22:53:26.420 [DEBUG] [Thread-24169] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:53:26.420 [DEBUG] [Thread-24169] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:53:26.420 [DEBUG] [Thread-24169] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:53:26.420 [DEBUG] [Thread-24169] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:53:26.420 [DEBUG] [Thread-24169] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:53:26.420 [DEBUG] [Thread-24169] [transport.py] [_log()] Compression: none
2025-11-12T22:53:26.420 [DEBUG] [Thread-24169] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:53:26.476 [DEBUG] [Thread-24169] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:53:26.477 [DEBUG] [Thread-24169] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:53:26.478 [DEBUG] [Thread-24169] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:53:26.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:53:26.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:53:26.532 [DEBUG] [Thread-24169] [transport.py] [_log()] userauth is OK
2025-11-12T22:53:26.532 [DEBUG] [Thread-24169] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:53:26.532 [DEBUG] [Thread-24169] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:53:26.532 [DEBUG] [Thread-24169] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:53:26.533 [DEBUG] [Thread-24169] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:53:26.554 [INFO] [Thread-24169] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:53:26.554 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:53:26.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:53:27.381 [DEBUG] [Thread-24169] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:53:27.382 [DEBUG] [Thread-24169] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:53:27.429 [DEBUG] [Thread-24169] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:53:27.429 [DEBUG] [Thread-24169] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:53:27.438 [DEBUG] [Thread-24169] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:53:27.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:53:27.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-11-12T22:53: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-11-12T22:53:27.463 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:53:27.463 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:53:27.464 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:53:27.471 [DEBUG] [Thread-24169] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:53:31.915 [DEBUG] [Thread-24171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:53:46.967 [DEBUG] [Thread-24172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:53:57.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:53:57.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:53:57.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-11-12T22:53:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 53, 43), 9.55, 53.28, 0.0, 14.63, 16.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:53:58.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:53:43
2025-11-12T22:53:58.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:53:58.463 [DEBUG] [Thread-24173] [transport.py] [_log()] starting thread (client mode): 0x149230d0
2025-11-12T22:53:58.463 [DEBUG] [Thread-24173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:53:58.484 [DEBUG] [Thread-24173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:53:58.484 [INFO] [Thread-24173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] client lang: <none>
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] server lang: <none>
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] kex follows: False
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] Compression: none
2025-11-12T22:53:58.487 [DEBUG] [Thread-24173] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:53:58.506 [DEBUG] [Thread-24173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:53:58.507 [DEBUG] [Thread-24173] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:53:58.507 [DEBUG] [Thread-24173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:53:58.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:53:58.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:53:58.548 [DEBUG] [Thread-24173] [transport.py] [_log()] userauth is OK
2025-11-12T22:53:58.549 [DEBUG] [Thread-24173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:53:58.549 [DEBUG] [Thread-24173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:53:58.549 [DEBUG] [Thread-24173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:53:58.549 [DEBUG] [Thread-24173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:53:58.577 [INFO] [Thread-24173] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:53:58.577 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:53:59.176 [DEBUG] [Thread-24173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:53:59.176 [DEBUG] [Thread-24173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:53:59.176 [DEBUG] [Thread-24173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:53:59.217 [DEBUG] [Thread-24173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:53:59.217 [DEBUG] [Thread-24173] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:53:59.220 [DEBUG] [Thread-24173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:53:59.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:53:59.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:53:59.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:53:59.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:53:59.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:53:59.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:53:59.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.870568 -999.00  +16.30   5.84     56   +7.80 1 2 1 1 1     0    0 7.16 -59.44 Z.ESW 9.3 5.8 206.6 12.0 17.1 -21.2 17.0 -20.6 16.8 -20.3 17.0 -20.8
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.870568
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:53:59.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:53:59.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:53:43', tmtdew=9.55, humidity=53.28, cloud=0.0, wind=14.63, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:53:43', seeing=1.07, atlas_timestamp='2025-11-12T20:53:37.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.49924999999999997, 0.4407500000000013, 0.4592500000000008, 0.40549999999999997, 0.5134999999999996, 0.6682500000000005, 0.5890000000000004, 0.8112500000000002, 0.6984999999999992, 0.4930000000000003, 0.37324999999999875, 0.6214999999999993, 0.8959999999999999, 0.9872499999999995, 0.7529999999999992, 1.0889999999999995, 0.7952500000000002, 0.3625000000000007, 0.45699999999999896, 0.5002499999999985, 0.7595000000000001, 1.263749999999999, 1.1422500000000007, 1.8187499999999996, 0.9634999999999998, 0.19599999999999973, 0.3837500000000009, 0.49350000000000005, 0.7469999999999999, 1.176000000000001, 1.894000000000001, 1.8080000000000007, 0.8697499999999989], zp_timestamp='2025-11-12T20:52:00')
2025-11-12T22:53:59.237 [DEBUG] [Thread-24173] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:53:59.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:53:59.322 [DEBUG] [Thread-24176] [transport.py] [_log()] starting thread (client mode): 0x19dd9c60
2025-11-12T22:53:59.322 [DEBUG] [Thread-24176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:53:59.337 [DEBUG] [Thread-24176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:53:59.337 [INFO] [Thread-24176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:53:59.344 [DEBUG] [Thread-24176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] client lang: <none>
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] server lang: <none>
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] kex follows: False
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] Compression: none
2025-11-12T22:53:59.345 [DEBUG] [Thread-24176] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:53:59.403 [DEBUG] [Thread-24176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:53:59.403 [DEBUG] [Thread-24176] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:53:59.403 [DEBUG] [Thread-24176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:53:59.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:53:59.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:53:59.460 [DEBUG] [Thread-24176] [transport.py] [_log()] userauth is OK
2025-11-12T22:53:59.460 [DEBUG] [Thread-24176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:53:59.460 [DEBUG] [Thread-24176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:53:59.460 [DEBUG] [Thread-24176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:53:59.460 [DEBUG] [Thread-24176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:53:59.474 [INFO] [Thread-24176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:53: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-11-12T22:53:59.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:54:00.301 [DEBUG] [Thread-24176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:54:00.301 [DEBUG] [Thread-24176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:54:00.349 [DEBUG] [Thread-24176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:54:00.349 [DEBUG] [Thread-24176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:54:00.357 [DEBUG] [Thread-24176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:54:00.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:54:00.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-11-12T22:54:00.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:54:00.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:54:00.381 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:54:00.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:54:00.388 [DEBUG] [Thread-24176] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:54:00.750 [DEBUG] [Thread-24178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:02.001 [DEBUG] [Thread-24179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:02.122 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:05.266 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:06.606 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:06.607 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:10.319 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:15.694 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:17.040 [DEBUG] [Thread-24180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:54:30.411 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:54:30.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-11-12T22:54:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 54, 15), 9.53, 53.38, 0.0, 15.44, 16.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:54:31.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:54:15
2025-11-12T22:54:31.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:54:31.335 [DEBUG] [Thread-24181] [transport.py] [_log()] starting thread (client mode): 0x11f03700
2025-11-12T22:54:31.335 [DEBUG] [Thread-24181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:54:31.356 [DEBUG] [Thread-24181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:54:31.356 [INFO] [Thread-24181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] client lang: <none>
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] server lang: <none>
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] kex follows: False
2025-11-12T22:54:31.359 [DEBUG] [Thread-24181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:54:31.360 [DEBUG] [Thread-24181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:54:31.360 [DEBUG] [Thread-24181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:54:31.360 [DEBUG] [Thread-24181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:54:31.360 [DEBUG] [Thread-24181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:54:31.360 [DEBUG] [Thread-24181] [transport.py] [_log()] Compression: none
2025-11-12T22:54:31.360 [DEBUG] [Thread-24181] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:54:31.377 [DEBUG] [Thread-24181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:54:31.377 [DEBUG] [Thread-24181] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:54:31.378 [DEBUG] [Thread-24181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:54:31.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:54:31.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:54:31.380 [DEBUG] [Thread-24181] [transport.py] [_log()] userauth is OK
2025-11-12T22:54:31.380 [DEBUG] [Thread-24181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:54:31.380 [DEBUG] [Thread-24181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:54:31.380 [DEBUG] [Thread-24181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:54:31.380 [DEBUG] [Thread-24181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:54:31.405 [INFO] [Thread-24181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:54:31.406 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:54:32.075 [DEBUG] [Thread-24181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:54:32.075 [DEBUG] [Thread-24183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:32.076 [DEBUG] [Thread-24181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:54:32.077 [DEBUG] [Thread-24181] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:54:32.116 [DEBUG] [Thread-24181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:54:32.116 [DEBUG] [Thread-24181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:54:32.119 [DEBUG] [Thread-24181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:54:32.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:54:32.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:54:32.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:54:32.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:54:32.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:54:32.141 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:54:32.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:54:32.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:54:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:54:32.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.870916 -999.00  +16.30   5.76     56   +7.70 1 2 1 1 1     0    0 7.37 -54.92 ZnESW 7.4 5.8 192.0 13.6 17.1 -21.3 17.0 -20.6 16.7 -20.1 17.0 -20.8
2025-11-12T22:54:32.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:54:32.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:54:32.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.870916
2025-11-12T22:54:32.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:54:32.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:54:32.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:54:32.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:54:32.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:54:32.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:54:15', tmtdew=9.53, humidity=53.38, cloud=0.0, wind=15.44, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:54:15', seeing=0.95, atlas_timestamp='2025-11-12T20:54:07.142', atlas_cloud=2, atlas_rain=1, zp_data=[0.49924999999999997, 0.4407500000000013, 0.4592500000000008, 0.40549999999999997, 0.5134999999999996, 0.6682500000000005, 0.5890000000000004, 0.8112500000000002, 0.6984999999999992, 0.4930000000000003, 0.37324999999999875, 0.6214999999999993, 0.8959999999999999, 0.9872499999999995, 0.7529999999999992, 1.0889999999999995, 0.7952500000000002, 0.3625000000000007, 0.45699999999999896, 0.5002499999999985, 0.7595000000000001, 1.263749999999999, 1.1422500000000007, 1.8187499999999996, 0.9634999999999998, 0.19599999999999973, 0.3837500000000009, 0.49350000000000005, 0.7469999999999999, 1.176000000000001, 1.894000000000001, 1.8080000000000007, 0.8697499999999989], zp_timestamp='2025-11-12T20:52:00')
2025-11-12T22:54:32.143 [DEBUG] [Thread-24181] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:54:32.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:54:32.239 [DEBUG] [Thread-24185] [transport.py] [_log()] starting thread (client mode): 0x149209a0
2025-11-12T22:54:32.239 [DEBUG] [Thread-24185] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:54:32.254 [DEBUG] [Thread-24185] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:54:32.254 [INFO] [Thread-24185] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:54:32.261 [DEBUG] [Thread-24185] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:54:32.261 [DEBUG] [Thread-24185] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] client lang: <none>
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] server lang: <none>
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] kex follows: False
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] Compression: none
2025-11-12T22:54:32.262 [DEBUG] [Thread-24185] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:54:32.320 [DEBUG] [Thread-24185] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:54:32.321 [DEBUG] [Thread-24185] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:54:32.321 [DEBUG] [Thread-24185] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:54:32.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:54:32.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:54:32.376 [DEBUG] [Thread-24185] [transport.py] [_log()] userauth is OK
2025-11-12T22:54:32.377 [DEBUG] [Thread-24185] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:54:32.377 [DEBUG] [Thread-24185] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:54:32.377 [DEBUG] [Thread-24185] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:54:32.377 [DEBUG] [Thread-24185] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:54:32.396 [INFO] [Thread-24185] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:54:32.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:54:32.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:54:33.200 [DEBUG] [Thread-24185] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:54:33.200 [DEBUG] [Thread-24185] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:54:33.248 [DEBUG] [Thread-24185] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:54:33.249 [DEBUG] [Thread-24185] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:54:33.258 [DEBUG] [Thread-24185] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:54:33.267 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:54:33.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-11-12T22:54:33.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-11-12T22:54:33.286 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:54:33.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:54:33.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:54:33.295 [DEBUG] [Thread-24185] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:54:35.078 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:39.490 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:47.111 [DEBUG] [Thread-24187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:54:58.837 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:00.817 [DEBUG] [Thread-24188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:02.161 [DEBUG] [Thread-24189 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:03.275 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:03.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:55:03.317 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:55:03.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-11-12T22:55:03.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 54, 47), 9.54, 53.01, 0.0, 12.49, 16.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:55:03.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:54:47
2025-11-12T22:55:04.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:55:04.229 [DEBUG] [Thread-24190] [transport.py] [_log()] starting thread (client mode): 0x1737f550
2025-11-12T22:55:04.229 [DEBUG] [Thread-24190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:55:04.247 [DEBUG] [Thread-24190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:55:04.247 [INFO] [Thread-24190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] client lang: <none>
2025-11-12T22:55:04.251 [DEBUG] [Thread-24190] [transport.py] [_log()] server lang: <none>
2025-11-12T22:55:04.252 [DEBUG] [Thread-24190] [transport.py] [_log()] kex follows: False
2025-11-12T22:55:04.252 [DEBUG] [Thread-24190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:55:04.252 [DEBUG] [Thread-24190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:55:04.252 [DEBUG] [Thread-24190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:55:04.252 [DEBUG] [Thread-24190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:55:04.252 [DEBUG] [Thread-24190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:55:04.252 [DEBUG] [Thread-24190] [transport.py] [_log()] Compression: none
2025-11-12T22:55:04.252 [DEBUG] [Thread-24190] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:55:04.268 [DEBUG] [Thread-24190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:55:04.269 [DEBUG] [Thread-24190] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:55:04.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:55:04.271 [DEBUG] [Thread-24190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:55:04.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:55:04.273 [DEBUG] [Thread-24190] [transport.py] [_log()] userauth is OK
2025-11-12T22:55:04.274 [DEBUG] [Thread-24190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:55:04.274 [DEBUG] [Thread-24190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:55:04.274 [DEBUG] [Thread-24190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:55:04.274 [DEBUG] [Thread-24190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:55:04.290 [INFO] [Thread-24190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:55:04.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:55:04.962 [DEBUG] [Thread-24190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:55:04.962 [DEBUG] [Thread-24190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:55:04.962 [DEBUG] [Thread-24190] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:55:05.003 [DEBUG] [Thread-24190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:55:05.003 [DEBUG] [Thread-24190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:55:05.006 [DEBUG] [Thread-24190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:55:05.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:55:05.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:55:05.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:55:05.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:55:05.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:55:05.030 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:55:05.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:55:05.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:55:05.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:55:05.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.871263 -999.00  +16.30   8.17     56   +7.70 1 2 1 1 1     0    0 7.21 -58.23 ZnESW 7.8 8.2 215.1 11.0 17.1 -21.2 17.0 -20.6 16.7 -20.3 17.0 -20.8
2025-11-12T22:55:05.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:55:05.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:55:05.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.871263
2025-11-12T22:55:05.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:55:05.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:55:05.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:55:05.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:55:05.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:55:05.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:54:47', tmtdew=9.54, humidity=53.01, cloud=0.0, wind=12.49, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:54:47', seeing=1.13, atlas_timestamp='2025-11-12T20:54:37.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.49924999999999997, 0.4407500000000013, 0.4592500000000008, 0.40549999999999997, 0.5134999999999996, 0.6682500000000005, 0.5890000000000004, 0.8112500000000002, 0.6984999999999992, 0.4930000000000003, 0.37324999999999875, 0.6214999999999993, 0.8959999999999999, 0.9872499999999995, 0.7529999999999992, 1.0889999999999995, 0.7952500000000002, 0.3625000000000007, 0.45699999999999896, 0.5002499999999985, 0.7595000000000001, 1.263749999999999, 1.1422500000000007, 1.8187499999999996, 0.9634999999999998, 0.19599999999999973, 0.3837500000000009, 0.49350000000000005, 0.7469999999999999, 1.176000000000001, 1.894000000000001, 1.8080000000000007, 0.8697499999999989], zp_timestamp='2025-11-12T20:52:00')
2025-11-12T22:55:05.033 [DEBUG] [Thread-24190] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:55:05.117 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:55:05.128 [DEBUG] [Thread-24193] [transport.py] [_log()] starting thread (client mode): 0x149206a0
2025-11-12T22:55:05.128 [DEBUG] [Thread-24193] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:55:05.142 [DEBUG] [Thread-24193] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:55:05.143 [INFO] [Thread-24193] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] client lang: <none>
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] server lang: <none>
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] kex follows: False
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:55:05.150 [DEBUG] [Thread-24193] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:55:05.151 [DEBUG] [Thread-24193] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:55:05.151 [DEBUG] [Thread-24193] [transport.py] [_log()] Compression: none
2025-11-12T22:55:05.151 [DEBUG] [Thread-24193] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:55:05.208 [DEBUG] [Thread-24193] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:55:05.209 [DEBUG] [Thread-24193] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:55:05.210 [DEBUG] [Thread-24193] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:55:05.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:55:05.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:55:05.266 [DEBUG] [Thread-24193] [transport.py] [_log()] userauth is OK
2025-11-12T22:55:05.266 [DEBUG] [Thread-24193] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:55:05.266 [DEBUG] [Thread-24193] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:55:05.266 [DEBUG] [Thread-24193] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:55:05.266 [DEBUG] [Thread-24193] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:55:05.285 [INFO] [Thread-24193] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:55:05.286 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:55:05.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:55:06.099 [DEBUG] [Thread-24193] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:55:06.099 [DEBUG] [Thread-24193] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:55:06.148 [DEBUG] [Thread-24193] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:55:06.148 [DEBUG] [Thread-24193] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:55:06.157 [DEBUG] [Thread-24193] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:55:06.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:55: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')
2025-11-12T22:55: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-11-12T22:55:06.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:55:06.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:55:06.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:55:06.194 [DEBUG] [Thread-24193] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:55:06.808 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:06.809 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:09.349 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:13.765 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:17.195 [DEBUG] [Thread-24195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:32.238 [DEBUG] [Thread-24196 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:55:36.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:55:36.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:55:36.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-11-12T22:55:36.877 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 55, 19), 9.56, 52.93, 0.0, 13.02, 16.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:55:36.878 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:55:19
2025-11-12T22:55:36.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:55:37.142 [DEBUG] [Thread-24197] [transport.py] [_log()] starting thread (client mode): 0x149815a0
2025-11-12T22:55:37.143 [DEBUG] [Thread-24197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:55:37.153 [DEBUG] [Thread-24197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:55:37.153 [INFO] [Thread-24197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] client lang: <none>
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] server lang: <none>
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] kex follows: False
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:55:37.155 [DEBUG] [Thread-24197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:55:37.156 [DEBUG] [Thread-24197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:55:37.156 [DEBUG] [Thread-24197] [transport.py] [_log()] Compression: none
2025-11-12T22:55:37.156 [DEBUG] [Thread-24197] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:55:37.173 [DEBUG] [Thread-24197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:55:37.173 [DEBUG] [Thread-24197] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:55:37.174 [DEBUG] [Thread-24197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:55:37.174 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:55:37.175 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:55:37.176 [DEBUG] [Thread-24197] [transport.py] [_log()] userauth is OK
2025-11-12T22:55:37.176 [DEBUG] [Thread-24197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:55:37.176 [DEBUG] [Thread-24197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:55:37.176 [DEBUG] [Thread-24197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:55:37.176 [DEBUG] [Thread-24197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:55:37.194 [INFO] [Thread-24197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:55:37.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:55:37.838 [DEBUG] [Thread-24197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:55:37.838 [DEBUG] [Thread-24197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:55:37.838 [DEBUG] [Thread-24197] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:55:37.878 [DEBUG] [Thread-24197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:55:37.879 [DEBUG] [Thread-24197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:55:37.882 [DEBUG] [Thread-24197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:55:37.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:55:37.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:55:37.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:55:37.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:55:37.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:55:37.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:55:37.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:55:37.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:55:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:55:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.871610 -999.00  +16.30  10.89     57   +7.70 1 2 1 1 1     0    0 7.05 -57.67 ZnESW 10.6 10.9 207.3 14.0 17.1 -21.2 16.9 -20.6 16.7 -20.2 17.0 -20.8
2025-11-12T22:55:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:55:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:55:37.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.871610
2025-11-12T22:55:37.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:55:37.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:55:37.906 [DEBUG] [Thread-24197] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:55:37.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:55:37.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:55:37.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:55:37.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:55:19', tmtdew=9.56, humidity=52.93, cloud=0.0, wind=13.02, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:55:19', seeing=1.13, atlas_timestamp='2025-11-12T20:55:07.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.49924999999999997, 0.4407500000000013, 0.4592500000000008, 0.40549999999999997, 0.5134999999999996, 0.6682500000000005, 0.5890000000000004, 0.8112500000000002, 0.6984999999999992, 0.4930000000000003, 0.37324999999999875, 0.6214999999999993, 0.8959999999999999, 0.9872499999999995, 0.7529999999999992, 1.0889999999999995, 0.7952500000000002, 0.3625000000000007, 0.45699999999999896, 0.5002499999999985, 0.7595000000000001, 1.263749999999999, 1.1422500000000007, 1.8187499999999996, 0.9634999999999998, 0.19599999999999973, 0.3837500000000009, 0.49350000000000005, 0.7469999999999999, 1.176000000000001, 1.894000000000001, 1.8080000000000007, 0.8697499999999989], zp_timestamp='2025-11-12T20:52:00')
2025-11-12T22:55:37.996 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:55:38.009 [DEBUG] [Thread-24200] [transport.py] [_log()] starting thread (client mode): 0x11f00a30
2025-11-12T22:55:38.009 [DEBUG] [Thread-24200] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:55:38.022 [DEBUG] [Thread-24200] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:55:38.022 [INFO] [Thread-24200] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:55:38.030 [DEBUG] [Thread-24200] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:55:38.030 [DEBUG] [Thread-24200] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] client lang: <none>
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] server lang: <none>
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] kex follows: False
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:55:38.031 [DEBUG] [Thread-24200] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:55:38.032 [DEBUG] [Thread-24200] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:55:38.032 [DEBUG] [Thread-24200] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:55:38.032 [DEBUG] [Thread-24200] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:55:38.032 [DEBUG] [Thread-24200] [transport.py] [_log()] Compression: none
2025-11-12T22:55:38.032 [DEBUG] [Thread-24200] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:55:38.093 [DEBUG] [Thread-24200] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:55:38.093 [DEBUG] [Thread-24200] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:55:38.094 [DEBUG] [Thread-24200] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:55:38.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:55:38.095 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:55:38.153 [DEBUG] [Thread-24200] [transport.py] [_log()] userauth is OK
2025-11-12T22:55:38.153 [DEBUG] [Thread-24200] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:55:38.153 [DEBUG] [Thread-24200] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:55:38.154 [DEBUG] [Thread-24200] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:55:38.154 [DEBUG] [Thread-24200] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:55:38.173 [INFO] [Thread-24200] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:55:38.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:55:38.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:55:38.985 [DEBUG] [Thread-24200] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:55:38.985 [DEBUG] [Thread-24200] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:55:39.032 [DEBUG] [Thread-24200] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:55:39.033 [DEBUG] [Thread-24200] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:55:39.042 [DEBUG] [Thread-24200] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:55:39.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:55:39.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-11-12T22:55:39.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-11-12T22:55:39.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:55:39.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:55:39.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:55:39.078 [DEBUG] [Thread-24200] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:55:47.276 [DEBUG] [Thread-24202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:00.887 [DEBUG] [Thread-24203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:02.326 [DEBUG] [Thread-24204 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:07.011 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:07.012 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:09.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:56:09.100 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:56: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-11-12T22:56:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 55, 51), 9.5, 52.98, 0.0, 15.42, 16.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:56:09.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:55:51
2025-11-12T22:56:09.858 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:56:10.005 [DEBUG] [Thread-24205] [transport.py] [_log()] starting thread (client mode): 0x17344490
2025-11-12T22:56:10.005 [DEBUG] [Thread-24205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:56:10.025 [DEBUG] [Thread-24205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:56:10.025 [INFO] [Thread-24205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:56:10.027 [DEBUG] [Thread-24205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:56:10.027 [DEBUG] [Thread-24205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:56:10.027 [DEBUG] [Thread-24205] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:56:10.027 [DEBUG] [Thread-24205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:56:10.027 [DEBUG] [Thread-24205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:56:10.027 [DEBUG] [Thread-24205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] client lang: <none>
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] server lang: <none>
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] kex follows: False
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] Compression: none
2025-11-12T22:56:10.028 [DEBUG] [Thread-24205] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:56:10.042 [DEBUG] [Thread-24205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:56:10.043 [DEBUG] [Thread-24205] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:56:10.043 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:56:10.044 [DEBUG] [Thread-24205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:56:10.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:56:10.046 [DEBUG] [Thread-24205] [transport.py] [_log()] userauth is OK
2025-11-12T22:56:10.046 [DEBUG] [Thread-24205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:56:10.046 [DEBUG] [Thread-24205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:56:10.046 [DEBUG] [Thread-24205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:56:10.046 [DEBUG] [Thread-24205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:56:10.082 [INFO] [Thread-24205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:56:10.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:56:10.637 [DEBUG] [Thread-24205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:56:10.637 [DEBUG] [Thread-24205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:56:10.638 [DEBUG] [Thread-24205] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:56:10.679 [DEBUG] [Thread-24205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:56:10.679 [DEBUG] [Thread-24205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:56:10.682 [DEBUG] [Thread-24205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:56:10.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:56:10.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:56:10.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:56:10.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:56:10.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:56:10.705 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:56:10.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:56:10.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:56:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:56:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.872304 -999.00  +16.30  14.81     57   +7.90 1 2 1 1 1     0    0 7.14 -55.18 ZnESW 9.1 14.8 220.2 16.9 17.0 -21.2 16.9 -20.6 16.7 -20.1 17.0 -20.8
2025-11-12T22:56:10.706 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:56:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:56:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.872304
2025-11-12T22:56:10.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:56:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:56:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:56:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:56:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:56:10.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:55:51', tmtdew=9.5, humidity=52.98, cloud=0.0, wind=15.42, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:55:51', seeing=1.1, atlas_timestamp='2025-11-12T20:56:07.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.49924999999999997, 0.4407500000000013, 0.4592500000000008, 0.40549999999999997, 0.5134999999999996, 0.6682500000000005, 0.5890000000000004, 0.8112500000000002, 0.6984999999999992, 0.4930000000000003, 0.37324999999999875, 0.6214999999999993, 0.8959999999999999, 0.9872499999999995, 0.7529999999999992, 1.0889999999999995, 0.7952500000000002, 0.3625000000000007, 0.45699999999999896, 0.5002499999999985, 0.7595000000000001, 1.263749999999999, 1.1422500000000007, 1.8187499999999996, 0.9634999999999998, 0.19599999999999973, 0.3837500000000009, 0.49350000000000005, 0.7469999999999999, 1.176000000000001, 1.894000000000001, 1.8080000000000007, 0.8697499999999989], zp_timestamp='2025-11-12T20:52:00')
2025-11-12T22:56:10.708 [DEBUG] [Thread-24205] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:56:10.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:56:10.806 [DEBUG] [Thread-24208] [transport.py] [_log()] starting thread (client mode): 0x11f03340
2025-11-12T22:56:10.806 [DEBUG] [Thread-24208] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:56:10.819 [DEBUG] [Thread-24208] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:56:10.820 [INFO] [Thread-24208] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:56:10.826 [DEBUG] [Thread-24208] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] client lang: <none>
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] server lang: <none>
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] kex follows: False
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] Compression: none
2025-11-12T22:56:10.827 [DEBUG] [Thread-24208] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:56:10.888 [DEBUG] [Thread-24208] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:56:10.888 [DEBUG] [Thread-24208] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:56:10.889 [DEBUG] [Thread-24208] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:56:10.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:56:10.890 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:56:10.944 [DEBUG] [Thread-24208] [transport.py] [_log()] userauth is OK
2025-11-12T22:56:10.945 [DEBUG] [Thread-24208] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:56:10.945 [DEBUG] [Thread-24208] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:56:10.945 [DEBUG] [Thread-24208] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:56:10.945 [DEBUG] [Thread-24208] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:56:10.963 [INFO] [Thread-24208] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:56: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-11-12T22:56:10.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:56:11.814 [DEBUG] [Thread-24208] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:56:11.814 [DEBUG] [Thread-24208] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:56:11.862 [DEBUG] [Thread-24208] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:56:11.862 [DEBUG] [Thread-24208] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:56:11.871 [DEBUG] [Thread-24208] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:56:11.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:56:11.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T22:56:11.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-11-12T22:56:11.898 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:56:11.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:56:11.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:56:11.907 [DEBUG] [Thread-24208] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:56:17.364 [DEBUG] [Thread-24210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:20.082 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:24.141 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:32.414 [DEBUG] [Thread-24211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:56:41.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:56:41.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:56:41.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-11-12T22:56:42.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 56, 23), 9.45, 53.16, 0.0, 15.92, 16.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:56:42.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:56:23
2025-11-12T22:56:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:56:42.834 [DEBUG] [Thread-24212] [transport.py] [_log()] starting thread (client mode): 0x11f01330
2025-11-12T22:56:42.834 [DEBUG] [Thread-24212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:56:42.854 [DEBUG] [Thread-24212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:56:42.854 [INFO] [Thread-24212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:56:42.857 [DEBUG] [Thread-24212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:56:42.857 [DEBUG] [Thread-24212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:56:42.857 [DEBUG] [Thread-24212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] client lang: <none>
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] server lang: <none>
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] kex follows: False
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] Compression: none
2025-11-12T22:56:42.858 [DEBUG] [Thread-24212] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:56:42.875 [DEBUG] [Thread-24212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:56:42.876 [DEBUG] [Thread-24212] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:56:42.876 [DEBUG] [Thread-24212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:56:42.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:56:42.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:56:42.879 [DEBUG] [Thread-24212] [transport.py] [_log()] userauth is OK
2025-11-12T22:56:42.879 [DEBUG] [Thread-24212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:56:42.879 [DEBUG] [Thread-24212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:56:42.879 [DEBUG] [Thread-24212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:56:42.879 [DEBUG] [Thread-24212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:56:42.904 [INFO] [Thread-24212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:56:42.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:56:43.501 [DEBUG] [Thread-24212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:56:43.501 [DEBUG] [Thread-24212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:56:43.502 [DEBUG] [Thread-24212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:56:43.541 [DEBUG] [Thread-24212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:56:43.542 [DEBUG] [Thread-24212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:56:43.544 [DEBUG] [Thread-24212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:56:43.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:56:43.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:56:43.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:56:43.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:56:43.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:56:43.568 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:56:43.568 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:56:43.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:56:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:56:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.872304 -999.00  +16.30  14.81     57   +7.90 1 2 1 1 1     0    0 7.14 -55.18 ZnESW 9.1 14.8 220.2 16.9 17.0 -21.2 16.9 -20.6 16.7 -20.1 17.0 -20.8
2025-11-12T22:56:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:56:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:56:43.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.872304
2025-11-12T22:56:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:56:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:56:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:56:43.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:56:43.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:56:43.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:56:23', tmtdew=9.45, humidity=53.16, cloud=0.0, wind=15.92, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:56:23', seeing=1.07, atlas_timestamp='2025-11-12T20:56:07.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:55:00')
2025-11-12T22:56:43.571 [DEBUG] [Thread-24212] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:56:43.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:56:43.664 [DEBUG] [Thread-24215] [transport.py] [_log()] starting thread (client mode): 0x149147c0
2025-11-12T22:56:43.665 [DEBUG] [Thread-24215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:56:43.679 [DEBUG] [Thread-24215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:56:43.679 [INFO] [Thread-24215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:56:43.687 [DEBUG] [Thread-24215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:56:43.687 [DEBUG] [Thread-24215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:56:43.687 [DEBUG] [Thread-24215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:56:43.687 [DEBUG] [Thread-24215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:56:43.688 [DEBUG] [Thread-24215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:56:43.688 [DEBUG] [Thread-24215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:56:43.688 [DEBUG] [Thread-24215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:56:43.688 [DEBUG] [Thread-24215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:56:43.688 [DEBUG] [Thread-24215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:56:43.688 [DEBUG] [Thread-24215] [transport.py] [_log()] client lang: <none>
2025-11-12T22:56:43.688 [DEBUG] [Thread-24215] [transport.py] [_log()] server lang: <none>
2025-11-12T22:56:43.688 [DEBUG] [Thread-24215] [transport.py] [_log()] kex follows: False
2025-11-12T22:56:43.689 [DEBUG] [Thread-24215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:56:43.689 [DEBUG] [Thread-24215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:56:43.689 [DEBUG] [Thread-24215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:56:43.689 [DEBUG] [Thread-24215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:56:43.689 [DEBUG] [Thread-24215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:56:43.689 [DEBUG] [Thread-24215] [transport.py] [_log()] Compression: none
2025-11-12T22:56:43.689 [DEBUG] [Thread-24215] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:56:43.745 [DEBUG] [Thread-24215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:56:43.745 [DEBUG] [Thread-24215] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:56:43.746 [DEBUG] [Thread-24215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:56:43.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:56:43.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:56:43.800 [DEBUG] [Thread-24215] [transport.py] [_log()] userauth is OK
2025-11-12T22:56:43.801 [DEBUG] [Thread-24215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:56:43.801 [DEBUG] [Thread-24215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:56:43.801 [DEBUG] [Thread-24215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:56:43.801 [DEBUG] [Thread-24215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:56:43.821 [INFO] [Thread-24215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:56:43.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:56:43.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:56:44.643 [DEBUG] [Thread-24215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:56:44.643 [DEBUG] [Thread-24215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:56:44.695 [DEBUG] [Thread-24215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:56:44.695 [DEBUG] [Thread-24215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:56:44.704 [DEBUG] [Thread-24215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:56:44.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:56:44.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-11-12T22:56:44.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-11-12T22:56:44.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:56:44.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:56:44.734 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:56:44.742 [DEBUG] [Thread-24215] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:56:47.442 [DEBUG] [Thread-24217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:57:00.953 [DEBUG] [Thread-24218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:57:02.499 [DEBUG] [Thread-24219 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:57:07.216 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:57:07.218 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:57:14.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:57:14.754 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:57:14.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-11-12T22:57:15.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 56, 55), 9.44, 53.71, 0.0, 16.16, 16.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:57:15.430 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:56:55
2025-11-12T22:57:15.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:57:15.711 [DEBUG] [Thread-24220] [transport.py] [_log()] starting thread (client mode): 0x19dd9210
2025-11-12T22:57:15.711 [DEBUG] [Thread-24220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:57:15.731 [DEBUG] [Thread-24220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:57:15.731 [INFO] [Thread-24220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] client lang: <none>
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] server lang: <none>
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] kex follows: False
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] Compression: none
2025-11-12T22:57:15.734 [DEBUG] [Thread-24220] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:57:15.748 [DEBUG] [Thread-24220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:57:15.749 [DEBUG] [Thread-24220] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:57:15.749 [DEBUG] [Thread-24220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:57:15.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:57:15.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:57:15.750 [DEBUG] [Thread-24220] [transport.py] [_log()] userauth is OK
2025-11-12T22:57:15.750 [DEBUG] [Thread-24220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:57:15.750 [DEBUG] [Thread-24220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:57:15.750 [DEBUG] [Thread-24220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:57:15.750 [DEBUG] [Thread-24220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:57:15.764 [INFO] [Thread-24220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:57:15.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:57:16.413 [DEBUG] [Thread-24220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:57:16.413 [DEBUG] [Thread-24220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:57:16.413 [DEBUG] [Thread-24220] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:57:16.454 [DEBUG] [Thread-24220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:57:16.454 [DEBUG] [Thread-24220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:57:16.457 [DEBUG] [Thread-24220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:57:16.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:57:16.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:57:16.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:57:16.472 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:57:16.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:57:16.476 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:57:16.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.872652 -999.00  +16.30   8.75     57   +7.80 1 2 1 1 1     0    0 7.38 -55.39 ZnESw 6.7 8.8 212.3 15.1 17.0 -21.3 16.9 -20.7 16.7 -20.2 17.0 -20.7
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.872652
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:57:16.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:56:55', tmtdew=9.44, humidity=53.71, cloud=0.0, wind=16.16, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:56:55', seeing=1.07, atlas_timestamp='2025-11-12T20:56:37.133', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:55:00')
2025-11-12T22:57:16.477 [DEBUG] [Thread-24220] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:57:16.556 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:57:16.568 [DEBUG] [Thread-24223] [transport.py] [_log()] starting thread (client mode): 0x19dd9ba0
2025-11-12T22:57:16.568 [DEBUG] [Thread-24223] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:57:16.583 [DEBUG] [Thread-24223] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:57:16.583 [INFO] [Thread-24223] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] client lang: <none>
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] server lang: <none>
2025-11-12T22:57:16.590 [DEBUG] [Thread-24223] [transport.py] [_log()] kex follows: False
2025-11-12T22:57:16.591 [DEBUG] [Thread-24223] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:57:16.591 [DEBUG] [Thread-24223] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:57:16.591 [DEBUG] [Thread-24223] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:57:16.591 [DEBUG] [Thread-24223] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:57:16.591 [DEBUG] [Thread-24223] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:57:16.591 [DEBUG] [Thread-24223] [transport.py] [_log()] Compression: none
2025-11-12T22:57:16.591 [DEBUG] [Thread-24223] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:57:16.650 [DEBUG] [Thread-24223] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:57:16.651 [DEBUG] [Thread-24223] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:57:16.651 [DEBUG] [Thread-24223] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:57:16.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:57:16.651 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:57:16.709 [DEBUG] [Thread-24223] [transport.py] [_log()] userauth is OK
2025-11-12T22:57:16.709 [DEBUG] [Thread-24223] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:57:16.709 [DEBUG] [Thread-24223] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:57:16.709 [DEBUG] [Thread-24223] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:57:16.709 [DEBUG] [Thread-24223] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:57:16.725 [INFO] [Thread-24223] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:57:16.725 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:57:16.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:57:17.534 [DEBUG] [Thread-24225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:57:17.557 [DEBUG] [Thread-24223] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:57:17.558 [DEBUG] [Thread-24223] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:57:17.605 [DEBUG] [Thread-24223] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:57:17.606 [DEBUG] [Thread-24223] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:57:17.615 [DEBUG] [Thread-24223] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:57:17.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:57:17.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-11-12T22:57:17.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:57:17.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:57:17.643 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:57:17.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:57:17.651 [DEBUG] [Thread-24223] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:57:32.597 [DEBUG] [Thread-24226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:57:47.637 [DEBUG] [Thread-24227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:57:47.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:57:47.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:57:47.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T22:57:48.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 57, 27), 9.48, 53.58, 0.0, 15.4, 16.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:57:48.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:57:27
2025-11-12T22:57:48.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:57:48.589 [DEBUG] [Thread-24228] [transport.py] [_log()] starting thread (client mode): 0x19dd91b0
2025-11-12T22:57:48.589 [DEBUG] [Thread-24228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:57:48.610 [DEBUG] [Thread-24228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:57:48.610 [INFO] [Thread-24228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:57:48.613 [DEBUG] [Thread-24228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:57:48.613 [DEBUG] [Thread-24228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] client lang: <none>
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] server lang: <none>
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] kex follows: False
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:57:48.614 [DEBUG] [Thread-24228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:57:48.615 [DEBUG] [Thread-24228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:57:48.615 [DEBUG] [Thread-24228] [transport.py] [_log()] Compression: none
2025-11-12T22:57:48.615 [DEBUG] [Thread-24228] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:57:48.636 [DEBUG] [Thread-24228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:57:48.637 [DEBUG] [Thread-24228] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:57:48.637 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:57:48.638 [DEBUG] [Thread-24228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:57:48.639 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:57:48.640 [DEBUG] [Thread-24228] [transport.py] [_log()] userauth is OK
2025-11-12T22:57:48.640 [DEBUG] [Thread-24228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:57:48.640 [DEBUG] [Thread-24228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:57:48.641 [DEBUG] [Thread-24228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:57:48.641 [DEBUG] [Thread-24228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:57:48.677 [INFO] [Thread-24228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:57:48.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:57:49.312 [DEBUG] [Thread-24228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:57:49.312 [DEBUG] [Thread-24228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:57:49.312 [DEBUG] [Thread-24228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:57:49.353 [DEBUG] [Thread-24228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:57:49.353 [DEBUG] [Thread-24228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:57:49.356 [DEBUG] [Thread-24228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:57:49.368 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:57:49.369 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:57:49.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:57:49.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:57:49.379 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:57:49.381 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:57:49.381 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:57:49.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:57:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:57:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.872999 -999.00  +16.30   9.81     57   +7.90 1 2 1 1 1     0    0 7.15 -52.74 ZnESW 9.9 9.8 201.0 13.8 17.0 -21.2 16.9 -20.5 16.7 -20.2 17.0 -20.8
2025-11-12T22:57:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:57:49.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:57:49.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.872999
2025-11-12T22:57:49.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:57:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:57:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:57:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:57:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:57:49.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:57:27', tmtdew=9.48, humidity=53.58, cloud=0.0, wind=15.4, temperature=16.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:57:27', seeing=1.12, atlas_timestamp='2025-11-12T20:57:07.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:55:00')
2025-11-12T22:57:49.384 [DEBUG] [Thread-24228] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:57:49.467 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:57:49.480 [DEBUG] [Thread-24231] [transport.py] [_log()] starting thread (client mode): 0x14922da0
2025-11-12T22:57:49.480 [DEBUG] [Thread-24231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:57:49.495 [DEBUG] [Thread-24231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:57:49.496 [INFO] [Thread-24231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:57:49.503 [DEBUG] [Thread-24231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] client lang: <none>
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] server lang: <none>
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] kex follows: False
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:57:49.504 [DEBUG] [Thread-24231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:57:49.505 [DEBUG] [Thread-24231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:57:49.505 [DEBUG] [Thread-24231] [transport.py] [_log()] Compression: none
2025-11-12T22:57:49.505 [DEBUG] [Thread-24231] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:57:49.564 [DEBUG] [Thread-24231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:57:49.565 [DEBUG] [Thread-24231] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:57:49.565 [DEBUG] [Thread-24231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:57:49.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:57:49.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:57:49.620 [DEBUG] [Thread-24231] [transport.py] [_log()] userauth is OK
2025-11-12T22:57:49.620 [DEBUG] [Thread-24231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:57:49.620 [DEBUG] [Thread-24231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:57:49.620 [DEBUG] [Thread-24231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:57:49.620 [DEBUG] [Thread-24231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:57:49.639 [INFO] [Thread-24231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:57:49.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:57:49.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:57:50.498 [DEBUG] [Thread-24231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:57:50.498 [DEBUG] [Thread-24231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:57:50.546 [DEBUG] [Thread-24231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:57:50.546 [DEBUG] [Thread-24231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:57:50.553 [DEBUG] [Thread-24231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:57:50.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:57:50.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')
2025-11-12T22:57:50.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-11-12T22:57:50.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:57:50.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:57:50.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:57:50.584 [DEBUG] [Thread-24231] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:58:01.006 [DEBUG] [Thread-24233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:58:02.672 [DEBUG] [Thread-24234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:58:07.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:58:07.421 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:58:17.723 [DEBUG] [Thread-24235 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:58:20.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:58:20.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:58:20.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-11-12T22:58:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 57, 59), 9.51, 53.46, 0.0, 14.22, 16.19, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:58:21.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:57:59
2025-11-12T22:58:21.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:58:21.528 [DEBUG] [Thread-24236] [transport.py] [_log()] starting thread (client mode): 0x19dda050
2025-11-12T22:58:21.528 [DEBUG] [Thread-24236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:58:21.548 [DEBUG] [Thread-24236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:58:21.548 [INFO] [Thread-24236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:58:21.551 [DEBUG] [Thread-24236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] client lang: <none>
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] server lang: <none>
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] kex follows: False
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:58:21.552 [DEBUG] [Thread-24236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:58:21.553 [DEBUG] [Thread-24236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:58:21.553 [DEBUG] [Thread-24236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:58:21.553 [DEBUG] [Thread-24236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:58:21.553 [DEBUG] [Thread-24236] [transport.py] [_log()] Compression: none
2025-11-12T22:58:21.553 [DEBUG] [Thread-24236] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:58:21.572 [DEBUG] [Thread-24236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:58:21.573 [DEBUG] [Thread-24236] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:58:21.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:58:21.574 [DEBUG] [Thread-24236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:58:21.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:58:21.576 [DEBUG] [Thread-24236] [transport.py] [_log()] userauth is OK
2025-11-12T22:58:21.576 [DEBUG] [Thread-24236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:58:21.576 [DEBUG] [Thread-24236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:58:21.576 [DEBUG] [Thread-24236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:58:21.576 [DEBUG] [Thread-24236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:58:21.607 [INFO] [Thread-24236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:58:21.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:58:22.233 [DEBUG] [Thread-24236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:58:22.234 [DEBUG] [Thread-24236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:58:22.234 [DEBUG] [Thread-24236] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:58:22.275 [DEBUG] [Thread-24236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:58:22.275 [DEBUG] [Thread-24236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:58:22.279 [DEBUG] [Thread-24236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:58:22.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:58:22.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:58:22.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:58:22.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:58:22.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:58:22.306 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:58:22.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:58:22.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:58:22.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:58:22.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.873346 -999.00  +16.30  10.38     57   +7.90 1 2 1 1 1     0    0 7.40 -50.75 ZnESW 7.6 10.4 186.3 15.7 17.0 -21.2 16.9 -20.5 16.7 -20.2 16.9 -20.8
2025-11-12T22:58:22.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:58:22.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:58:22.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.873346
2025-11-12T22:58:22.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:58:22.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:58:22.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:58:22.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:58:22.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:58:22.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:57:59', tmtdew=9.51, humidity=53.46, cloud=0.0, wind=14.22, temperature=16.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:57:59', seeing=1.12, atlas_timestamp='2025-11-12T20:57:37.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:55:00')
2025-11-12T22:58:22.309 [DEBUG] [Thread-24236] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:58:22.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:58:22.404 [DEBUG] [Thread-24239] [transport.py] [_log()] starting thread (client mode): 0x14914cd0
2025-11-12T22:58:22.404 [DEBUG] [Thread-24239] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:58:22.419 [DEBUG] [Thread-24239] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:58:22.419 [INFO] [Thread-24239] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:58:22.427 [DEBUG] [Thread-24239] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:58:22.427 [DEBUG] [Thread-24239] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:58:22.427 [DEBUG] [Thread-24239] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:58:22.427 [DEBUG] [Thread-24239] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:58:22.427 [DEBUG] [Thread-24239] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:58:22.427 [DEBUG] [Thread-24239] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:58:22.427 [DEBUG] [Thread-24239] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:58:22.428 [DEBUG] [Thread-24239] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:58:22.428 [DEBUG] [Thread-24239] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:58:22.428 [DEBUG] [Thread-24239] [transport.py] [_log()] client lang: <none>
2025-11-12T22:58:22.428 [DEBUG] [Thread-24239] [transport.py] [_log()] server lang: <none>
2025-11-12T22:58:22.428 [DEBUG] [Thread-24239] [transport.py] [_log()] kex follows: False
2025-11-12T22:58:22.428 [DEBUG] [Thread-24239] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:58:22.428 [DEBUG] [Thread-24239] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:58:22.428 [DEBUG] [Thread-24239] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:58:22.429 [DEBUG] [Thread-24239] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:58:22.429 [DEBUG] [Thread-24239] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:58:22.429 [DEBUG] [Thread-24239] [transport.py] [_log()] Compression: none
2025-11-12T22:58:22.429 [DEBUG] [Thread-24239] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:58:22.485 [DEBUG] [Thread-24239] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:58:22.486 [DEBUG] [Thread-24239] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:58:22.486 [DEBUG] [Thread-24239] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:58:22.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:58:22.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:58:22.544 [DEBUG] [Thread-24239] [transport.py] [_log()] userauth is OK
2025-11-12T22:58:22.545 [DEBUG] [Thread-24239] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:58:22.545 [DEBUG] [Thread-24239] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:58:22.545 [DEBUG] [Thread-24239] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:58:22.545 [DEBUG] [Thread-24239] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:58:22.565 [INFO] [Thread-24239] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:58:22.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:58:22.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:58:23.358 [DEBUG] [Thread-24239] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:58:23.359 [DEBUG] [Thread-24239] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:58:23.407 [DEBUG] [Thread-24239] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:58:23.407 [DEBUG] [Thread-24239] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:58:23.416 [DEBUG] [Thread-24239] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:58:23.425 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:58:23.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-11-12T22:58:23.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-11-12T22:58:23.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:58:23.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:58:23.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:58:23.453 [DEBUG] [Thread-24239] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:58:32.755 [DEBUG] [Thread-24241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:58:47.806 [DEBUG] [Thread-24242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:58:53.476 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:58:53.476 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:58:53.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-11-12T22:58:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 58, 31), 9.49, 53.51, 0.0, 15.44, 16.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:58:54.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:58:31
2025-11-12T22:58:54.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:58:54.388 [DEBUG] [Thread-24243] [transport.py] [_log()] starting thread (client mode): 0x14915c00
2025-11-12T22:58:54.388 [DEBUG] [Thread-24243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:58:54.408 [DEBUG] [Thread-24243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:58:54.409 [INFO] [Thread-24243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:58:54.412 [DEBUG] [Thread-24243] [transport.py] [_log()] client lang: <none>
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] server lang: <none>
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] kex follows: False
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] Compression: none
2025-11-12T22:58:54.413 [DEBUG] [Thread-24243] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:58:54.431 [DEBUG] [Thread-24243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:58:54.432 [DEBUG] [Thread-24243] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:58:54.432 [DEBUG] [Thread-24243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:58:54.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:58:54.433 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:58:54.435 [DEBUG] [Thread-24243] [transport.py] [_log()] userauth is OK
2025-11-12T22:58:54.435 [DEBUG] [Thread-24243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:58:54.435 [DEBUG] [Thread-24243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:58:54.435 [DEBUG] [Thread-24243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:58:54.435 [DEBUG] [Thread-24243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:58:54.467 [INFO] [Thread-24243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:58:54.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:58:55.099 [DEBUG] [Thread-24243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:58:55.099 [DEBUG] [Thread-24243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:58:55.099 [DEBUG] [Thread-24243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:58:55.140 [DEBUG] [Thread-24243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:58:55.140 [DEBUG] [Thread-24243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:58:55.143 [DEBUG] [Thread-24243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:58:55.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:58:55.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:58:55.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:58:55.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:58:55.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:58:55.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:58:55.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:58:55.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:58:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:58:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.873693 -999.00  +16.30   7.82     57   +7.90 1 2 1 1 1     0    0 7.25 -53.86 ZnESW 10.5 7.8 236.3 11.1 17.0 -21.2 16.9 -20.5 16.7 -20.2 16.9 -20.8
2025-11-12T22:58:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:58:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:58:55.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.873693
2025-11-12T22:58:55.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:58:55.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:58:55.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:58:55.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:58:55.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:58:55.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:58:31', tmtdew=9.49, humidity=53.51, cloud=0.0, wind=15.44, temperature=16.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:58:31', seeing=1.36, atlas_timestamp='2025-11-12T20:58:07.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:55:00')
2025-11-12T22:58:55.172 [DEBUG] [Thread-24243] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:58:55.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:58:55.268 [DEBUG] [Thread-24246] [transport.py] [_log()] starting thread (client mode): 0x19dd8c40
2025-11-12T22:58:55.268 [DEBUG] [Thread-24246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:58:55.283 [DEBUG] [Thread-24246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:58:55.283 [INFO] [Thread-24246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:58:55.291 [DEBUG] [Thread-24246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:58:55.291 [DEBUG] [Thread-24246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:58:55.291 [DEBUG] [Thread-24246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:58:55.291 [DEBUG] [Thread-24246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] client lang: <none>
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] server lang: <none>
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] kex follows: False
2025-11-12T22:58:55.292 [DEBUG] [Thread-24246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:58:55.293 [DEBUG] [Thread-24246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:58:55.293 [DEBUG] [Thread-24246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:58:55.293 [DEBUG] [Thread-24246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:58:55.293 [DEBUG] [Thread-24246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:58:55.293 [DEBUG] [Thread-24246] [transport.py] [_log()] Compression: none
2025-11-12T22:58:55.293 [DEBUG] [Thread-24246] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:58:55.348 [DEBUG] [Thread-24246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:58:55.349 [DEBUG] [Thread-24246] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:58:55.350 [DEBUG] [Thread-24246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:58:55.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:58:55.350 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:58:55.404 [DEBUG] [Thread-24246] [transport.py] [_log()] userauth is OK
2025-11-12T22:58:55.404 [DEBUG] [Thread-24246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:58:55.404 [DEBUG] [Thread-24246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:58:55.404 [DEBUG] [Thread-24246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:58:55.404 [DEBUG] [Thread-24246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:58:55.424 [INFO] [Thread-24246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:58:55.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:58:55.424 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:58:56.246 [DEBUG] [Thread-24246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:58:56.246 [DEBUG] [Thread-24246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:58:56.294 [DEBUG] [Thread-24246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:58:56.294 [DEBUG] [Thread-24246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:58:56.303 [DEBUG] [Thread-24246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:58:56.312 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:58:56.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')
2025-11-12T22:58:56.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T22:58:56.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:58:56.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:58:56.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:58:56.337 [DEBUG] [Thread-24246] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:59:01.066 [DEBUG] [Thread-24248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:59:02.844 [DEBUG] [Thread-24249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:59:07.625 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:59:07.625 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:59:17.892 [DEBUG] [Thread-24250 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:59:26.335 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:59:26.336 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:59:26.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-11-12T22:59:26.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 59, 3), 9.47, 53.58, 0.0, 15.44, 16.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:59:26.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:59:03
2025-11-12T22:59:27.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T22:59:27.254 [DEBUG] [Thread-24251] [transport.py] [_log()] starting thread (client mode): 0x14982050
2025-11-12T22:59:27.254 [DEBUG] [Thread-24251] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:59:27.275 [DEBUG] [Thread-24251] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T22:59:27.276 [INFO] [Thread-24251] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T22:59:27.278 [DEBUG] [Thread-24251] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] client lang: <none>
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] server lang: <none>
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] kex follows: False
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] Compression: none
2025-11-12T22:59:27.279 [DEBUG] [Thread-24251] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:59:27.299 [DEBUG] [Thread-24251] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:59:27.299 [DEBUG] [Thread-24251] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:59:27.300 [DEBUG] [Thread-24251] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T22:59:27.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T22:59:27.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:59:27.302 [DEBUG] [Thread-24251] [transport.py] [_log()] userauth is OK
2025-11-12T22:59:27.302 [DEBUG] [Thread-24251] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:59:27.302 [DEBUG] [Thread-24251] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:59:27.303 [DEBUG] [Thread-24251] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T22:59:27.303 [DEBUG] [Thread-24251] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:59:27.327 [INFO] [Thread-24251] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:59:27.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:59:27.938 [DEBUG] [Thread-24251] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:59:27.938 [DEBUG] [Thread-24251] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:59:27.939 [DEBUG] [Thread-24251] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T22:59:27.978 [DEBUG] [Thread-24251] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:59:27.979 [DEBUG] [Thread-24251] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:59:27.982 [DEBUG] [Thread-24251] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:59:27.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:59:27.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T22:59:27.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T22:59:27.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T22:59:28.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:59:28.005 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T22:59:28.005 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:59:28.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:59:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T22:59:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.874040 -999.00  +16.30  13.16     57   +7.90 1 2 1 1 1     0    0 7.31 -51.28 ZnESW 11.4 13.2 209.5 14.9 17.0 -21.3 16.9 -20.6 16.7 -20.1 17.0 -20.8
2025-11-12T22:59:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T22:59:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T22:59:28.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.874040
2025-11-12T22:59:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T22:59:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T22:59:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T22:59:28.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T22:59:28.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T22:59:28.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:59:03', tmtdew=9.47, humidity=53.58, cloud=0.0, wind=15.44, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:59:03', seeing=1.19, atlas_timestamp='2025-11-12T20:58:37.056', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:58:00')
2025-11-12T22:59:28.008 [DEBUG] [Thread-24251] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:59:28.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T22:59:28.104 [DEBUG] [Thread-24254] [transport.py] [_log()] starting thread (client mode): 0x14917c40
2025-11-12T22:59:28.104 [DEBUG] [Thread-24254] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T22:59:28.119 [DEBUG] [Thread-24254] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T22:59:28.119 [INFO] [Thread-24254] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T22:59:28.127 [DEBUG] [Thread-24254] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T22:59:28.127 [DEBUG] [Thread-24254] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] client lang: <none>
2025-11-12T22:59:28.128 [DEBUG] [Thread-24254] [transport.py] [_log()] server lang: <none>
2025-11-12T22:59:28.129 [DEBUG] [Thread-24254] [transport.py] [_log()] kex follows: False
2025-11-12T22:59:28.129 [DEBUG] [Thread-24254] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T22:59:28.129 [DEBUG] [Thread-24254] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T22:59:28.129 [DEBUG] [Thread-24254] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T22:59:28.129 [DEBUG] [Thread-24254] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T22:59:28.129 [DEBUG] [Thread-24254] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T22:59:28.129 [DEBUG] [Thread-24254] [transport.py] [_log()] Compression: none
2025-11-12T22:59:28.130 [DEBUG] [Thread-24254] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T22:59:28.184 [DEBUG] [Thread-24254] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T22:59:28.185 [DEBUG] [Thread-24254] [transport.py] [_log()] Switch to new keys ...
2025-11-12T22:59:28.186 [DEBUG] [Thread-24254] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T22:59:28.186 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T22:59:28.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T22:59:28.240 [DEBUG] [Thread-24254] [transport.py] [_log()] userauth is OK
2025-11-12T22:59:28.240 [DEBUG] [Thread-24254] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T22:59:28.241 [DEBUG] [Thread-24254] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T22:59:28.241 [DEBUG] [Thread-24254] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T22:59:28.241 [DEBUG] [Thread-24254] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T22:59:28.260 [INFO] [Thread-24254] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T22:59:28.261 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T22:59:28.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T22:59:29.089 [DEBUG] [Thread-24254] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T22:59:29.089 [DEBUG] [Thread-24254] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T22:59:29.137 [DEBUG] [Thread-24254] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T22:59:29.137 [DEBUG] [Thread-24254] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T22:59:29.146 [DEBUG] [Thread-24254] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T22:59:29.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T22:59:29.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-11-12T22:59:29.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-11-12T22:59:29.172 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T22:59:29.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T22:59:29.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T22:59:29.180 [DEBUG] [Thread-24254] [transport.py] [_log()] EOF in transport thread
2025-11-12T22:59:32.929 [DEBUG] [Thread-24256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:59:47.971 [DEBUG] [Thread-24257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T22:59:59.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T22:59:59.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T22:59: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-11-12T22:59:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 22, 59, 35), 9.36, 53.64, 0.0, 15.46, 16.17, 0, 0, 0, 2, 0, 0),)
2025-11-12T22:59:59.838 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 22:59:35
2025-11-12T22:59:59.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:00:00.104 [DEBUG] [Thread-24258] [transport.py] [_log()] starting thread (client mode): 0x14983100
2025-11-12T23:00:00.104 [DEBUG] [Thread-24258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:00:00.124 [DEBUG] [Thread-24258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:00:00.124 [INFO] [Thread-24258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:00:00.127 [DEBUG] [Thread-24258] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] client lang: <none>
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] server lang: <none>
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] kex follows: False
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] Compression: none
2025-11-12T23:00:00.128 [DEBUG] [Thread-24258] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:00:00.145 [DEBUG] [Thread-24258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:00:00.146 [DEBUG] [Thread-24258] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:00:00.146 [DEBUG] [Thread-24258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:00:00.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:00:00.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:00:00.148 [DEBUG] [Thread-24258] [transport.py] [_log()] userauth is OK
2025-11-12T23:00:00.148 [DEBUG] [Thread-24258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:00:00.149 [DEBUG] [Thread-24258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:00:00.149 [DEBUG] [Thread-24258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:00:00.149 [DEBUG] [Thread-24258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:00:00.182 [INFO] [Thread-24258] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:00:00.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:00:00.851 [DEBUG] [Thread-24258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:00:00.851 [DEBUG] [Thread-24258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:00:00.851 [DEBUG] [Thread-24258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:00:00.892 [DEBUG] [Thread-24258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:00:00.892 [DEBUG] [Thread-24258] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:00:00.895 [DEBUG] [Thread-24258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:00:00.908 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:00:00.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:00:00.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:00:00.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:00:00.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:00:00.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:00:00.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:00:00.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:00:00.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:00:00.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.874735 -999.00  +16.20   9.29     57   +7.90 1 1 1 1 1     0    0 7.57 -47.41 ZNESW 7.8 9.3 206.6 14.5 17.0 -21.2 16.8 -20.5 16.6 -20.2 16.9 -20.5
2025-11-12T23:00:00.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:00:00.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:00:00.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.874735
2025-11-12T23:00:00.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:00:00.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:00:00.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:00:00.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:00:00.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:00:00.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T22:59:35', tmtdew=9.36, humidity=53.64, cloud=0.0, wind=15.46, temperature=16.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T22:59:35', seeing=1.07, atlas_timestamp='2025-11-12T20:59:37.104', atlas_cloud=1, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:58:00')
2025-11-12T23:00:00.921 [DEBUG] [Thread-24258] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:00:01.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:00:01.018 [DEBUG] [Thread-24261] [transport.py] [_log()] starting thread (client mode): 0x14980dc0
2025-11-12T23:00:01.018 [DEBUG] [Thread-24261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:00:01.033 [DEBUG] [Thread-24261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:00:01.033 [INFO] [Thread-24261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:00:01.041 [DEBUG] [Thread-24261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:00:01.041 [DEBUG] [Thread-24261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:00:01.041 [DEBUG] [Thread-24261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:00:01.041 [DEBUG] [Thread-24261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] client lang: <none>
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] server lang: <none>
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] kex follows: False
2025-11-12T23:00:01.042 [DEBUG] [Thread-24261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:00:01.043 [DEBUG] [Thread-24261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:00:01.043 [DEBUG] [Thread-24261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:00:01.043 [DEBUG] [Thread-24261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:00:01.043 [DEBUG] [Thread-24261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:00:01.043 [DEBUG] [Thread-24261] [transport.py] [_log()] Compression: none
2025-11-12T23:00:01.043 [DEBUG] [Thread-24261] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:00:01.098 [DEBUG] [Thread-24261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:00:01.098 [DEBUG] [Thread-24261] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:00:01.098 [DEBUG] [Thread-24261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:00:01.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:00:01.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:00:01.118 [DEBUG] [Thread-24263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:00:01.155 [DEBUG] [Thread-24261] [transport.py] [_log()] userauth is OK
2025-11-12T23:00:01.155 [DEBUG] [Thread-24261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:00:01.155 [DEBUG] [Thread-24261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:00:01.155 [DEBUG] [Thread-24261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:00:01.155 [DEBUG] [Thread-24261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:00:01.169 [INFO] [Thread-24261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:00:01.169 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:00:01.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:00:02.071 [DEBUG] [Thread-24261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:00:02.071 [DEBUG] [Thread-24261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:00:02.119 [DEBUG] [Thread-24261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:00:02.119 [DEBUG] [Thread-24261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:00:02.127 [DEBUG] [Thread-24261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:00:02.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:00: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')
2025-11-12T23:00:02.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:00:02.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:00:02.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:00:02.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:00:02.161 [DEBUG] [Thread-24261] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:00:03.003 [DEBUG] [Thread-24264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:00:07.827 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:00:07.828 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:00:18.064 [DEBUG] [Thread-24265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:00:32.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:00:32.183 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:00: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-11-12T23:00:32.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 0, 7), 9.33, 53.74, 0.0, 14.01, 16.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:00:32.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:00:07
2025-11-12T23:00:32.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:00:33.081 [DEBUG] [Thread-24266] [transport.py] [_log()] starting thread (client mode): 0x149806d0
2025-11-12T23:00:33.081 [DEBUG] [Thread-24266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:00:33.094 [DEBUG] [Thread-24267 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:00:33.100 [DEBUG] [Thread-24266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:00:33.100 [INFO] [Thread-24266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:00:33.103 [DEBUG] [Thread-24266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:00:33.103 [DEBUG] [Thread-24266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:00:33.103 [DEBUG] [Thread-24266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:00:33.103 [DEBUG] [Thread-24266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:00:33.103 [DEBUG] [Thread-24266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:00:33.103 [DEBUG] [Thread-24266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] client lang: <none>
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] server lang: <none>
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] kex follows: False
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] Compression: none
2025-11-12T23:00:33.104 [DEBUG] [Thread-24266] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:00:33.119 [DEBUG] [Thread-24266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:00:33.119 [DEBUG] [Thread-24266] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:00:33.120 [DEBUG] [Thread-24266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:00:33.120 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:00:33.121 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:00:33.122 [DEBUG] [Thread-24266] [transport.py] [_log()] userauth is OK
2025-11-12T23:00:33.122 [DEBUG] [Thread-24266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:00:33.122 [DEBUG] [Thread-24266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:00:33.122 [DEBUG] [Thread-24266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:00:33.122 [DEBUG] [Thread-24266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:00:33.140 [INFO] [Thread-24266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:00:33.141 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:00:33.926 [DEBUG] [Thread-24266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:00:33.926 [DEBUG] [Thread-24266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:00:33.926 [DEBUG] [Thread-24266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:00:33.966 [DEBUG] [Thread-24266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:00:33.966 [DEBUG] [Thread-24266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:00:33.969 [DEBUG] [Thread-24266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:00:33.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:00:33.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:00:33.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:00:33.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:00:33.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:00:33.987 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:00:33.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:00:33.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:00:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:00:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.875082 -999.00  +16.20   8.97     57   +7.90 1 1 1 1 1     0    0 7.26 -47.20 ZNESW 11.9 9.0 196.8 15.4 17.0 -21.2 16.9 -20.6 16.6 -20.1 16.9 -20.8
2025-11-12T23:00:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:00:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:00:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.875082
2025-11-12T23:00:33.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:00:33.988 [DEBUG] [Thread-24266] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:00:33.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:00:33.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:00:33.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:00:33.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:00:33.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:00:07', tmtdew=9.33, humidity=53.74, cloud=0.0, wind=14.01, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:00:07', seeing=1.15, atlas_timestamp='2025-11-12T21:00:07.085', atlas_cloud=1, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:58:00')
2025-11-12T23:00:34.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:00:34.086 [DEBUG] [Thread-24270] [transport.py] [_log()] starting thread (client mode): 0x19dda3e0
2025-11-12T23:00:34.086 [DEBUG] [Thread-24270] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:00:34.101 [DEBUG] [Thread-24270] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:00:34.101 [INFO] [Thread-24270] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:00:34.108 [DEBUG] [Thread-24270] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] client lang: <none>
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] server lang: <none>
2025-11-12T23:00:34.109 [DEBUG] [Thread-24270] [transport.py] [_log()] kex follows: False
2025-11-12T23:00:34.110 [DEBUG] [Thread-24270] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:00:34.110 [DEBUG] [Thread-24270] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:00:34.110 [DEBUG] [Thread-24270] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:00:34.110 [DEBUG] [Thread-24270] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:00:34.110 [DEBUG] [Thread-24270] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:00:34.110 [DEBUG] [Thread-24270] [transport.py] [_log()] Compression: none
2025-11-12T23:00:34.110 [DEBUG] [Thread-24270] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:00:34.168 [DEBUG] [Thread-24270] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:00:34.168 [DEBUG] [Thread-24270] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:00:34.169 [DEBUG] [Thread-24270] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:00:34.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:00:34.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:00:34.224 [DEBUG] [Thread-24270] [transport.py] [_log()] userauth is OK
2025-11-12T23:00:34.225 [DEBUG] [Thread-24270] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:00:34.225 [DEBUG] [Thread-24270] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:00:34.225 [DEBUG] [Thread-24270] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:00:34.225 [DEBUG] [Thread-24270] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:00:34.243 [INFO] [Thread-24270] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:00:34.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:00:34.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:00:35.073 [DEBUG] [Thread-24270] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:00:35.074 [DEBUG] [Thread-24270] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:00:35.121 [DEBUG] [Thread-24270] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:00:35.122 [DEBUG] [Thread-24270] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:00:35.131 [DEBUG] [Thread-24270] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:00:35.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:00:35.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-11-12T23:00: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-11-12T23:00:35.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:00:35.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:00:35.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:00:35.167 [DEBUG] [Thread-24270] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:00:48.127 [DEBUG] [Thread-24272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:01.174 [DEBUG] [Thread-24273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:03.180 [DEBUG] [Thread-24274 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:05.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:01:05.190 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:01:05.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-11-12T23:01:05.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 0, 39), 9.35, 53.66, 0.0, 14.47, 16.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:01:05.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:00:39
2025-11-12T23:01:06.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:01:06.159 [DEBUG] [Thread-24275] [transport.py] [_log()] starting thread (client mode): 0x14981270
2025-11-12T23:01:06.159 [DEBUG] [Thread-24275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:01:06.179 [DEBUG] [Thread-24275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:01:06.179 [INFO] [Thread-24275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] client lang: <none>
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] server lang: <none>
2025-11-12T23:01:06.182 [DEBUG] [Thread-24275] [transport.py] [_log()] kex follows: False
2025-11-12T23:01:06.183 [DEBUG] [Thread-24275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:01:06.183 [DEBUG] [Thread-24275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:01:06.183 [DEBUG] [Thread-24275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:01:06.183 [DEBUG] [Thread-24275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:01:06.183 [DEBUG] [Thread-24275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:01:06.183 [DEBUG] [Thread-24275] [transport.py] [_log()] Compression: none
2025-11-12T23:01:06.183 [DEBUG] [Thread-24275] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:01:06.198 [DEBUG] [Thread-24275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:01:06.198 [DEBUG] [Thread-24275] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:01:06.198 [DEBUG] [Thread-24275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:01:06.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:01:06.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:01:06.199 [DEBUG] [Thread-24275] [transport.py] [_log()] userauth is OK
2025-11-12T23:01:06.199 [DEBUG] [Thread-24275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:01:06.199 [DEBUG] [Thread-24275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:01:06.199 [DEBUG] [Thread-24275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:01:06.199 [DEBUG] [Thread-24275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:01:06.208 [INFO] [Thread-24275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:01:06.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:01:06.789 [DEBUG] [Thread-24275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:01:06.789 [DEBUG] [Thread-24275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:01:06.789 [DEBUG] [Thread-24275] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:01:06.830 [DEBUG] [Thread-24275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:01:06.830 [DEBUG] [Thread-24275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:01:06.832 [DEBUG] [Thread-24275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:01:06.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:01:06.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:01:06.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:01:06.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:01:06.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:01:06.849 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:01:06.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:01:06.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:01:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:01:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.875429 -999.00  +16.20  14.03     57   +7.90 1 2 1 1 1     0    0 7.44 -51.43 ZnESW 7.2 14.0 221.9 19.8 17.0 -21.2 16.8 -20.7 16.6 -20.1 16.9 -20.6
2025-11-12T23:01:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:01:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:01:06.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.875429
2025-11-12T23:01:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:01:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:01:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:01:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:01:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:01:06.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:00:39', tmtdew=9.35, humidity=53.66, cloud=0.0, wind=14.47, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:00:39', seeing=1.15, atlas_timestamp='2025-11-12T21:00:37.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:58:00')
2025-11-12T23:01:06.850 [DEBUG] [Thread-24275] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:01:06.925 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:01:06.935 [DEBUG] [Thread-24278] [transport.py] [_log()] starting thread (client mode): 0x149474c0
2025-11-12T23:01:06.935 [DEBUG] [Thread-24278] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:01:06.951 [DEBUG] [Thread-24278] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:01:06.951 [INFO] [Thread-24278] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:01:06.958 [DEBUG] [Thread-24278] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:01:06.958 [DEBUG] [Thread-24278] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:01:06.958 [DEBUG] [Thread-24278] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:01:06.958 [DEBUG] [Thread-24278] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:01:06.958 [DEBUG] [Thread-24278] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:01:06.958 [DEBUG] [Thread-24278] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:01:06.958 [DEBUG] [Thread-24278] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] client lang: <none>
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] server lang: <none>
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] kex follows: False
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] Compression: none
2025-11-12T23:01:06.959 [DEBUG] [Thread-24278] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:01:07.018 [DEBUG] [Thread-24278] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:01:07.018 [DEBUG] [Thread-24278] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:01:07.019 [DEBUG] [Thread-24278] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:01:07.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:01:07.019 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:01:07.075 [DEBUG] [Thread-24278] [transport.py] [_log()] userauth is OK
2025-11-12T23:01:07.075 [DEBUG] [Thread-24278] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:01:07.075 [DEBUG] [Thread-24278] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:01:07.075 [DEBUG] [Thread-24278] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:01:07.075 [DEBUG] [Thread-24278] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:01:07.091 [INFO] [Thread-24278] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:01:07.091 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:01:07.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:01:07.933 [DEBUG] [Thread-24278] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:01:07.933 [DEBUG] [Thread-24278] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:01:07.981 [DEBUG] [Thread-24278] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:01:07.981 [DEBUG] [Thread-24278] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:01:07.989 [DEBUG] [Thread-24278] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:01:07.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:01:07.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-11-12T23:01:08.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-11-12T23:01:08.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:01:08.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:01:08.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:01:08.021 [DEBUG] [Thread-24278] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:01:08.032 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:08.032 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:18.217 [DEBUG] [Thread-24280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:33.271 [DEBUG] [Thread-24281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:38.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:01:38.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:01:38.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-11-12T23:01:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 1, 11), 9.34, 53.71, 0.0, 15.37, 16.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:01:38.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:01:11
2025-11-12T23:01:38.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:01:38.944 [DEBUG] [Thread-24282] [transport.py] [_log()] starting thread (client mode): 0x149459f0
2025-11-12T23:01:38.944 [DEBUG] [Thread-24282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:01:38.963 [DEBUG] [Thread-24282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:01:38.963 [INFO] [Thread-24282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:01:38.966 [DEBUG] [Thread-24282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] client lang: <none>
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] server lang: <none>
2025-11-12T23:01:38.967 [DEBUG] [Thread-24282] [transport.py] [_log()] kex follows: False
2025-11-12T23:01:38.968 [DEBUG] [Thread-24282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:01:38.968 [DEBUG] [Thread-24282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:01:38.968 [DEBUG] [Thread-24282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:01:38.968 [DEBUG] [Thread-24282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:01:38.968 [DEBUG] [Thread-24282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:01:38.968 [DEBUG] [Thread-24282] [transport.py] [_log()] Compression: none
2025-11-12T23:01:38.968 [DEBUG] [Thread-24282] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:01:38.983 [DEBUG] [Thread-24282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:01:38.984 [DEBUG] [Thread-24282] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:01:38.984 [DEBUG] [Thread-24282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:01:38.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:01:38.985 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:01:38.986 [DEBUG] [Thread-24282] [transport.py] [_log()] userauth is OK
2025-11-12T23:01:38.986 [DEBUG] [Thread-24282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:01:38.986 [DEBUG] [Thread-24282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:01:38.986 [DEBUG] [Thread-24282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:01:38.986 [DEBUG] [Thread-24282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:01:39.001 [INFO] [Thread-24282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:01:39.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:01:39.637 [DEBUG] [Thread-24282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:01:39.638 [DEBUG] [Thread-24282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:01:39.638 [DEBUG] [Thread-24282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:01:39.678 [DEBUG] [Thread-24282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:01:39.679 [DEBUG] [Thread-24282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:01:39.682 [DEBUG] [Thread-24282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:01:39.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:01:39.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:01:39.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:01:39.698 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:01:39.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:01:39.706 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:01:39.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:01:39.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:01:39.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:01:39.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.875776 -999.00  +16.20  11.82     57   +7.90 1 2 1 1 1     0    0 7.03 -51.93 ZnESW 8.7 11.8 223.9 15.9 17.0 -21.2 16.8 -20.7 16.6 -20.3 16.9 -20.9
2025-11-12T23:01:39.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:01:39.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:01:39.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.875776
2025-11-12T23:01:39.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:01:39.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:01:39.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:01:39.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:01:39.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:01:39.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:01:11', tmtdew=9.34, humidity=53.71, cloud=0.0, wind=15.37, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:01:11', seeing=1.03, atlas_timestamp='2025-11-12T21:01:07.046', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:58:00')
2025-11-12T23:01:39.709 [DEBUG] [Thread-24282] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:01:39.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:01:39.805 [DEBUG] [Thread-24285] [transport.py] [_log()] starting thread (client mode): 0x149470a0
2025-11-12T23:01:39.805 [DEBUG] [Thread-24285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:01:39.820 [DEBUG] [Thread-24285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:01:39.820 [INFO] [Thread-24285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:01:39.828 [DEBUG] [Thread-24285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:01:39.828 [DEBUG] [Thread-24285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:01:39.828 [DEBUG] [Thread-24285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] client lang: <none>
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] server lang: <none>
2025-11-12T23:01:39.829 [DEBUG] [Thread-24285] [transport.py] [_log()] kex follows: False
2025-11-12T23:01:39.830 [DEBUG] [Thread-24285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:01:39.830 [DEBUG] [Thread-24285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:01:39.830 [DEBUG] [Thread-24285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:01:39.830 [DEBUG] [Thread-24285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:01:39.830 [DEBUG] [Thread-24285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:01:39.830 [DEBUG] [Thread-24285] [transport.py] [_log()] Compression: none
2025-11-12T23:01:39.830 [DEBUG] [Thread-24285] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:01:39.888 [DEBUG] [Thread-24285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:01:39.889 [DEBUG] [Thread-24285] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:01:39.890 [DEBUG] [Thread-24285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:01:39.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:01:39.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:01:39.944 [DEBUG] [Thread-24285] [transport.py] [_log()] userauth is OK
2025-11-12T23:01:39.945 [DEBUG] [Thread-24285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:01:39.945 [DEBUG] [Thread-24285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:01:39.945 [DEBUG] [Thread-24285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:01:39.945 [DEBUG] [Thread-24285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:01:39.968 [INFO] [Thread-24285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:01:39.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:01:39.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:01:40.805 [DEBUG] [Thread-24285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:01:40.805 [DEBUG] [Thread-24285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:01:40.852 [DEBUG] [Thread-24285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:01:40.853 [DEBUG] [Thread-24285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:01:40.862 [DEBUG] [Thread-24285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:01:40.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:01:40.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-11-12T23:01:40.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-11-12T23:01:40.888 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:01:40.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:01:40.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:01:40.897 [DEBUG] [Thread-24285] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:01:48.066 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:48.310 [DEBUG] [Thread-24287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:55.907 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:01:59.967 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:02:01.231 [DEBUG] [Thread-24288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:02:03.369 [DEBUG] [Thread-24289 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:02:08.234 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:02:08.236 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:02:10.918 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:02:10.919 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:02:10.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-11-12T23:02:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 1, 43), 9.3, 53.66, 0.0, 15.35, 16.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:02:11.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:01:43
2025-11-12T23:02:11.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:02:11.839 [DEBUG] [Thread-24290] [transport.py] [_log()] starting thread (client mode): 0x149201c0
2025-11-12T23:02:11.840 [DEBUG] [Thread-24290] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:02:11.860 [DEBUG] [Thread-24290] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:02:11.860 [INFO] [Thread-24290] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:02:11.863 [DEBUG] [Thread-24290] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:02:11.863 [DEBUG] [Thread-24290] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:02:11.863 [DEBUG] [Thread-24290] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:02:11.863 [DEBUG] [Thread-24290] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:02:11.863 [DEBUG] [Thread-24290] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] client lang: <none>
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] server lang: <none>
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] kex follows: False
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:02:11.864 [DEBUG] [Thread-24290] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:02:11.865 [DEBUG] [Thread-24290] [transport.py] [_log()] Compression: none
2025-11-12T23:02:11.865 [DEBUG] [Thread-24290] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:02:11.886 [DEBUG] [Thread-24290] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:02:11.886 [DEBUG] [Thread-24290] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:02:11.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:02:11.888 [DEBUG] [Thread-24290] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:02:11.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:02:11.929 [DEBUG] [Thread-24290] [transport.py] [_log()] userauth is OK
2025-11-12T23:02:11.930 [DEBUG] [Thread-24290] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:02:11.930 [DEBUG] [Thread-24290] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:02:11.930 [DEBUG] [Thread-24290] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:02:11.930 [DEBUG] [Thread-24290] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:02:11.962 [INFO] [Thread-24290] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:02:11.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:02:12.610 [DEBUG] [Thread-24290] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:02:12.610 [DEBUG] [Thread-24290] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:02:12.611 [DEBUG] [Thread-24290] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:02:12.652 [DEBUG] [Thread-24290] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:02:12.652 [DEBUG] [Thread-24290] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:02:12.655 [DEBUG] [Thread-24290] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:02:12.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:02:12.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:02:12.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:02:12.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:02:12.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:02:12.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:02:12.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:02:12.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:02:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:02:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.876124 -999.00  +16.20   8.26     58   +7.90 1 2 1 1 1     0    0 7.05 -52.98 ZnESW 8.6 8.3 202.8 17.2 16.9 -21.3 16.8 -20.7 16.6 -20.3 16.9 -20.8
2025-11-12T23:02:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:02:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:02:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.876124
2025-11-12T23:02:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:02:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:02:12.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:02:12.681 [DEBUG] [Thread-24290] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:02:12.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:02:12.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:02:12.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:01:43', tmtdew=9.3, humidity=53.66, cloud=0.0, wind=15.35, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:01:43', seeing=1.1, atlas_timestamp='2025-11-12T21:01:37.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.42074999999999996, 0.3472500000000007, 0.44425000000000026, 0.644499999999999, 0.7634999999999996, 0.9347500000000011, 0.5639999999999992, 0.47275000000000134, 0.6084999999999994, 0.5600000000000005, 0.42324999999999946, 0.5809999999999995, 0.7290000000000001, 1.0147499999999994, 0.7609999999999992, 0.8829999999999991, 1.0412499999999998, 0.5514999999999999, 0.4275000000000002, 0.40224999999999866, 0.809499999999999, 1.0557499999999989, 1.277750000000001, 1.49775, 1.2139999999999995, 0.2494999999999994, 0.40525000000000055, 0.4275000000000002, 0.7080000000000002, 1.192000000000001, 2.2315000000000005, 1.990000000000001, 1.0367499999999996], zp_timestamp='2025-11-12T20:58:00')
2025-11-12T23:02:12.762 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:02:12.774 [DEBUG] [Thread-24293] [transport.py] [_log()] starting thread (client mode): 0x149470a0
2025-11-12T23:02:12.774 [DEBUG] [Thread-24293] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:02:12.789 [DEBUG] [Thread-24293] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:02:12.789 [INFO] [Thread-24293] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] client lang: <none>
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] server lang: <none>
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] kex follows: False
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:02:12.797 [DEBUG] [Thread-24293] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:02:12.798 [DEBUG] [Thread-24293] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:02:12.798 [DEBUG] [Thread-24293] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:02:12.798 [DEBUG] [Thread-24293] [transport.py] [_log()] Compression: none
2025-11-12T23:02:12.798 [DEBUG] [Thread-24293] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:02:12.856 [DEBUG] [Thread-24293] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:02:12.857 [DEBUG] [Thread-24293] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:02:12.858 [DEBUG] [Thread-24293] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:02:12.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:02:12.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:02:12.912 [DEBUG] [Thread-24293] [transport.py] [_log()] userauth is OK
2025-11-12T23:02:12.912 [DEBUG] [Thread-24293] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:02:12.913 [DEBUG] [Thread-24293] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:02:12.913 [DEBUG] [Thread-24293] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:02:12.913 [DEBUG] [Thread-24293] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:02:12.931 [INFO] [Thread-24293] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:02:12.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:02:12.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:02:13.757 [DEBUG] [Thread-24293] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:02:13.757 [DEBUG] [Thread-24293] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:02:13.806 [DEBUG] [Thread-24293] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:02:13.806 [DEBUG] [Thread-24293] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:02:13.815 [DEBUG] [Thread-24293] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:02:13.824 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:02:13.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-11-12T23:02:13.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-11-12T23:02:13.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:02:13.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:02:13.844 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:02:13.852 [DEBUG] [Thread-24293] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:02:18.410 [DEBUG] [Thread-24295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:02:33.468 [DEBUG] [Thread-24296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:02:43.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:02:43.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:02:43.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-11-12T23:02:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 2, 15), 9.28, 53.73, 0.0, 13.99, 16.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:02:44.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:02:15
2025-11-12T23:02:44.636 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:02:44.782 [DEBUG] [Thread-24297] [transport.py] [_log()] starting thread (client mode): 0x14982e90
2025-11-12T23:02:44.782 [DEBUG] [Thread-24297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:02:44.805 [DEBUG] [Thread-24297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:02:44.805 [INFO] [Thread-24297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:02:44.808 [DEBUG] [Thread-24297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] client lang: <none>
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] server lang: <none>
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] kex follows: False
2025-11-12T23:02:44.809 [DEBUG] [Thread-24297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:02:44.810 [DEBUG] [Thread-24297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:02:44.810 [DEBUG] [Thread-24297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:02:44.810 [DEBUG] [Thread-24297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:02:44.810 [DEBUG] [Thread-24297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:02:44.810 [DEBUG] [Thread-24297] [transport.py] [_log()] Compression: none
2025-11-12T23:02:44.810 [DEBUG] [Thread-24297] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:02:44.829 [DEBUG] [Thread-24297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:02:44.830 [DEBUG] [Thread-24297] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:02:44.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:02:44.830 [DEBUG] [Thread-24297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:02:44.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:02:44.833 [DEBUG] [Thread-24297] [transport.py] [_log()] userauth is OK
2025-11-12T23:02:44.833 [DEBUG] [Thread-24297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:02:44.833 [DEBUG] [Thread-24297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:02:44.833 [DEBUG] [Thread-24297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:02:44.833 [DEBUG] [Thread-24297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:02:44.857 [INFO] [Thread-24297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:02:44.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:02:45.487 [DEBUG] [Thread-24297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:02:45.487 [DEBUG] [Thread-24297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:02:45.487 [DEBUG] [Thread-24297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:02:45.528 [DEBUG] [Thread-24297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:02:45.528 [DEBUG] [Thread-24297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:02:45.531 [DEBUG] [Thread-24297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:02:45.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:02:45.538 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:02:45.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:02:45.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:02:45.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:02:45.549 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:02:45.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:02:45.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:02:45.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:02:45.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.876471 -999.00  +16.20  10.52     58   +8.00 1 2 1 1 1     0    0 7.32 -50.47 ZnESW 10.2 10.5 210.3 17.1 16.9 -21.2 16.8 -20.6 16.6 -20.3 16.9 -20.7
2025-11-12T23:02:45.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:02:45.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:02:45.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.876471
2025-11-12T23:02:45.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:02:45.551 [DEBUG] [Thread-24297] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:02:45.552 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:02:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:02:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:02:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:02:45.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:02:15', tmtdew=9.28, humidity=53.73, cloud=0.0, wind=13.99, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:02:15', seeing=1.1, atlas_timestamp='2025-11-12T21:02:07.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.6442499999999995, 0.41525000000000034, 0.6367500000000001, 0.6514999999999995, 0.5694999999999997, 0.7812500000000009, 0.5659999999999998, 0.5402500000000003, 0.44399999999999906, 0.43400000000000105, 0.5547499999999985, 0.5235000000000003, 0.8039999999999994, 0.8602499999999997, 0.8164999999999996, 0.7624999999999993, 0.8072499999999998, 0.5735000000000001, 0.48099999999999987, 0.4522499999999994, 0.7979999999999992, 0.6867499999999991, 1.1332500000000012, 1.15775, 1.488999999999999, 0.3094999999999999, 0.3837500000000009, 0.5045000000000002, 0.774, 1.254500000000001, 2.029000000000001, 1.9700000000000006, 1.0707499999999994], zp_timestamp='2025-11-12T21:01:00')
2025-11-12T23:02:45.635 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:02:45.648 [DEBUG] [Thread-24300] [transport.py] [_log()] starting thread (client mode): 0x19ddbaf0
2025-11-12T23:02:45.649 [DEBUG] [Thread-24300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:02:45.663 [DEBUG] [Thread-24300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:02:45.663 [INFO] [Thread-24300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] client lang: <none>
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] server lang: <none>
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] kex follows: False
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:02:45.671 [DEBUG] [Thread-24300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:02:45.672 [DEBUG] [Thread-24300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:02:45.672 [DEBUG] [Thread-24300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:02:45.672 [DEBUG] [Thread-24300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:02:45.672 [DEBUG] [Thread-24300] [transport.py] [_log()] Compression: none
2025-11-12T23:02:45.672 [DEBUG] [Thread-24300] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:02:45.728 [DEBUG] [Thread-24300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:02:45.729 [DEBUG] [Thread-24300] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:02:45.730 [DEBUG] [Thread-24300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:02:45.730 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:02:45.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:02:45.784 [DEBUG] [Thread-24300] [transport.py] [_log()] userauth is OK
2025-11-12T23:02:45.784 [DEBUG] [Thread-24300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:02:45.785 [DEBUG] [Thread-24300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:02:45.785 [DEBUG] [Thread-24300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:02:45.785 [DEBUG] [Thread-24300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:02:45.809 [INFO] [Thread-24300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:02:45.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:02:45.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:02:46.676 [DEBUG] [Thread-24300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:02:46.677 [DEBUG] [Thread-24300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:02:46.724 [DEBUG] [Thread-24300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:02:46.724 [DEBUG] [Thread-24300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:02:46.733 [DEBUG] [Thread-24300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:02:46.742 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:02:46.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-11-12T23:02:46.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-11-12T23:02:46.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:02:46.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:02:46.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:02:46.767 [DEBUG] [Thread-24300] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:02:48.501 [DEBUG] [Thread-24302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:03:01.292 [DEBUG] [Thread-24303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:03:03.545 [DEBUG] [Thread-24304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:03:08.440 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:03:08.440 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:03:16.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:03:16.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:03:16.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-11-12T23:03:17.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 2, 47), 9.24, 54.38, 0.0, 15.46, 16.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:03:17.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:02:47
2025-11-12T23:03:17.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:03:17.689 [DEBUG] [Thread-24305] [transport.py] [_log()] starting thread (client mode): 0x11f037c0
2025-11-12T23:03:17.689 [DEBUG] [Thread-24305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:03:17.709 [DEBUG] [Thread-24305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:03:17.710 [INFO] [Thread-24305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:03:17.713 [DEBUG] [Thread-24305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:03:17.713 [DEBUG] [Thread-24305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] client lang: <none>
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] server lang: <none>
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] kex follows: False
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] Compression: none
2025-11-12T23:03:17.714 [DEBUG] [Thread-24305] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:03:17.731 [DEBUG] [Thread-24305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:03:17.732 [DEBUG] [Thread-24305] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:03:17.732 [DEBUG] [Thread-24305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:03:17.732 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:03:17.733 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:03:17.734 [DEBUG] [Thread-24305] [transport.py] [_log()] userauth is OK
2025-11-12T23:03:17.735 [DEBUG] [Thread-24305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:03:17.735 [DEBUG] [Thread-24305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:03:17.735 [DEBUG] [Thread-24305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:03:17.735 [DEBUG] [Thread-24305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:03:17.771 [INFO] [Thread-24305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:03:17.772 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:03:18.419 [DEBUG] [Thread-24305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:03:18.419 [DEBUG] [Thread-24305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:03:18.420 [DEBUG] [Thread-24305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:03:18.461 [DEBUG] [Thread-24305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:03:18.461 [DEBUG] [Thread-24305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:03:18.464 [DEBUG] [Thread-24305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:03:18.476 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:03:18.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:03:18.479 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:03:18.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:03:18.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:03:18.490 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:03:18.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:03:18.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:03:18.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:03:18.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.877165 -999.00  +16.20   9.54     58   +8.00 1 2 1 1 1     0    0 7.11 -51.36 ZnESW 14.1 9.5 199.7 21.6 16.9 -21.3 16.8 -20.6 16.6 -20.3 16.9 -20.8
2025-11-12T23:03:18.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:03:18.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:03:18.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.877165
2025-11-12T23:03:18.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:03:18.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:03:18.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:03:18.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:03:18.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:03:18.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:02:47', tmtdew=9.24, humidity=54.38, cloud=0.0, wind=15.46, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:02:47', seeing=1.14, atlas_timestamp='2025-11-12T21:03:07.056', atlas_cloud=2, atlas_rain=1, zp_data=[0.6442499999999995, 0.41525000000000034, 0.6367500000000001, 0.6514999999999995, 0.5694999999999997, 0.7812500000000009, 0.5659999999999998, 0.5402500000000003, 0.44399999999999906, 0.43400000000000105, 0.5547499999999985, 0.5235000000000003, 0.8039999999999994, 0.8602499999999997, 0.8164999999999996, 0.7624999999999993, 0.8072499999999998, 0.5735000000000001, 0.48099999999999987, 0.4522499999999994, 0.7979999999999992, 0.6867499999999991, 1.1332500000000012, 1.15775, 1.488999999999999, 0.3094999999999999, 0.3837500000000009, 0.5045000000000002, 0.774, 1.254500000000001, 2.029000000000001, 1.9700000000000006, 1.0707499999999994], zp_timestamp='2025-11-12T21:01:00')
2025-11-12T23:03:18.493 [DEBUG] [Thread-24305] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:03:18.573 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:03:18.581 [DEBUG] [Thread-24308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:03:18.586 [DEBUG] [Thread-24309] [transport.py] [_log()] starting thread (client mode): 0x19dd9a20
2025-11-12T23:03:18.586 [DEBUG] [Thread-24309] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:03:18.601 [DEBUG] [Thread-24309] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:03:18.602 [INFO] [Thread-24309] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:03:18.609 [DEBUG] [Thread-24309] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:03:18.609 [DEBUG] [Thread-24309] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:03:18.609 [DEBUG] [Thread-24309] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] client lang: <none>
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] server lang: <none>
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] kex follows: False
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:03:18.610 [DEBUG] [Thread-24309] [transport.py] [_log()] Compression: none
2025-11-12T23:03:18.611 [DEBUG] [Thread-24309] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:03:18.668 [DEBUG] [Thread-24309] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:03:18.668 [DEBUG] [Thread-24309] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:03:18.669 [DEBUG] [Thread-24309] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:03:18.669 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:03:18.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:03:18.724 [DEBUG] [Thread-24309] [transport.py] [_log()] userauth is OK
2025-11-12T23:03:18.724 [DEBUG] [Thread-24309] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:03:18.724 [DEBUG] [Thread-24309] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:03:18.725 [DEBUG] [Thread-24309] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:03:18.725 [DEBUG] [Thread-24309] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:03:18.743 [INFO] [Thread-24309] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:03:18.744 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:03:18.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:03:19.577 [DEBUG] [Thread-24309] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:03:19.577 [DEBUG] [Thread-24309] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:03:19.625 [DEBUG] [Thread-24309] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:03:19.625 [DEBUG] [Thread-24309] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:03:19.634 [DEBUG] [Thread-24309] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:03:19.643 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:03:19.643 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:03:19.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-11-12T23:03:19.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:03:19.660 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:03:19.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:03:19.669 [DEBUG] [Thread-24309] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:03:33.625 [DEBUG] [Thread-24311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:03:48.658 [DEBUG] [Thread-24312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:03:49.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:03:49.692 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:03:49.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-11-12T23:03:50.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 3, 19), 9.24, 54.36, 0.0, 16.6, 16.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:03:50.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:03:19
2025-11-12T23:03:50.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:03:50.592 [DEBUG] [Thread-24313] [transport.py] [_log()] starting thread (client mode): 0x11f03400
2025-11-12T23:03:50.592 [DEBUG] [Thread-24313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:03:50.611 [DEBUG] [Thread-24313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:03:50.612 [INFO] [Thread-24313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:03:50.615 [DEBUG] [Thread-24313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] client lang: <none>
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] server lang: <none>
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] kex follows: False
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] Compression: none
2025-11-12T23:03:50.616 [DEBUG] [Thread-24313] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:03:50.633 [DEBUG] [Thread-24313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:03:50.634 [DEBUG] [Thread-24313] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:03:50.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:03:50.635 [DEBUG] [Thread-24313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:03:50.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:03:50.636 [DEBUG] [Thread-24313] [transport.py] [_log()] userauth is OK
2025-11-12T23:03:50.636 [DEBUG] [Thread-24313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:03:50.636 [DEBUG] [Thread-24313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:03:50.636 [DEBUG] [Thread-24313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:03:50.636 [DEBUG] [Thread-24313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:03:50.658 [INFO] [Thread-24313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:03:50.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:03:51.260 [DEBUG] [Thread-24313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:03:51.261 [DEBUG] [Thread-24313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:03:51.261 [DEBUG] [Thread-24313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:03:51.301 [DEBUG] [Thread-24313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:03:51.302 [DEBUG] [Thread-24313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:03:51.304 [DEBUG] [Thread-24313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:03:51.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:03:51.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:03:51.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:03:51.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:03:51.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:03:51.328 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:03:51.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:03:51.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:03:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:03:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.877513 -999.00  +16.20   9.80     58   +8.00 1 2 1 1 1     0    0 7.25 -49.56 ZnESW 7.9 9.8 205.0 17.7 16.9 -21.3 16.8 -20.6 16.6 -20.2 16.9 -20.9
2025-11-12T23:03:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:03:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:03:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.877513
2025-11-12T23:03:51.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:03:51.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:03:51.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:03:51.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:03:51.330 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:03:51.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:03:19', tmtdew=9.24, humidity=54.36, cloud=0.0, wind=16.6, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:03:19', seeing=1.14, atlas_timestamp='2025-11-12T21:03:37.123', atlas_cloud=2, atlas_rain=1, zp_data=[0.6442499999999995, 0.41525000000000034, 0.6367500000000001, 0.6514999999999995, 0.5694999999999997, 0.7812500000000009, 0.5659999999999998, 0.5402500000000003, 0.44399999999999906, 0.43400000000000105, 0.5547499999999985, 0.5235000000000003, 0.8039999999999994, 0.8602499999999997, 0.8164999999999996, 0.7624999999999993, 0.8072499999999998, 0.5735000000000001, 0.48099999999999987, 0.4522499999999994, 0.7979999999999992, 0.6867499999999991, 1.1332500000000012, 1.15775, 1.488999999999999, 0.3094999999999999, 0.3837500000000009, 0.5045000000000002, 0.774, 1.254500000000001, 2.029000000000001, 1.9700000000000006, 1.0707499999999994], zp_timestamp='2025-11-12T21:01:00')
2025-11-12T23:03:51.331 [DEBUG] [Thread-24313] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:03:51.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:03:51.423 [DEBUG] [Thread-24316] [transport.py] [_log()] starting thread (client mode): 0x14981c00
2025-11-12T23:03:51.424 [DEBUG] [Thread-24316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:03:51.439 [DEBUG] [Thread-24316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:03:51.440 [INFO] [Thread-24316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:03:51.447 [DEBUG] [Thread-24316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:03:51.447 [DEBUG] [Thread-24316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:03:51.447 [DEBUG] [Thread-24316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:03:51.447 [DEBUG] [Thread-24316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:03:51.447 [DEBUG] [Thread-24316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:03:51.447 [DEBUG] [Thread-24316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] client lang: <none>
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] server lang: <none>
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] kex follows: False
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] Compression: none
2025-11-12T23:03:51.448 [DEBUG] [Thread-24316] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:03:51.518 [DEBUG] [Thread-24316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:03:51.518 [DEBUG] [Thread-24316] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:03:51.519 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:03:51.519 [DEBUG] [Thread-24316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:03:51.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:03:51.576 [DEBUG] [Thread-24316] [transport.py] [_log()] userauth is OK
2025-11-12T23:03:51.576 [DEBUG] [Thread-24316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:03:51.576 [DEBUG] [Thread-24316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:03:51.577 [DEBUG] [Thread-24316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:03:51.577 [DEBUG] [Thread-24316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:03:51.596 [INFO] [Thread-24316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:03:51.597 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:03:51.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:03:52.424 [DEBUG] [Thread-24316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:03:52.424 [DEBUG] [Thread-24316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:03:52.472 [DEBUG] [Thread-24316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:03:52.472 [DEBUG] [Thread-24316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:03:52.480 [DEBUG] [Thread-24316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:03:52.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:03:52.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:03:52.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:03:52.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:03:52.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:03:52.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:03:52.512 [DEBUG] [Thread-24316] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:04:01.352 [DEBUG] [Thread-24318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:04:03.694 [DEBUG] [Thread-24319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:04:08.642 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:04:08.643 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:04:18.739 [DEBUG] [Thread-24320 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:04:22.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:04:22.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:04:22.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-11-12T23:04:23.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 3, 51), 9.21, 53.98, 0.0, 16.11, 16.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:04:23.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:03:51
2025-11-12T23:04:23.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:04:23.419 [DEBUG] [Thread-24321] [transport.py] [_log()] starting thread (client mode): 0x14907ac0
2025-11-12T23:04:23.420 [DEBUG] [Thread-24321] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:04:23.434 [DEBUG] [Thread-24321] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:04:23.434 [INFO] [Thread-24321] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] client lang: <none>
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] server lang: <none>
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] kex follows: False
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] Compression: none
2025-11-12T23:04:23.436 [DEBUG] [Thread-24321] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:04:23.450 [DEBUG] [Thread-24321] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:04:23.450 [DEBUG] [Thread-24321] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:04:23.450 [DEBUG] [Thread-24321] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:04:23.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:04:23.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:04:23.452 [DEBUG] [Thread-24321] [transport.py] [_log()] userauth is OK
2025-11-12T23:04:23.452 [DEBUG] [Thread-24321] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:04:23.452 [DEBUG] [Thread-24321] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:04:23.452 [DEBUG] [Thread-24321] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:04:23.452 [DEBUG] [Thread-24321] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:04:23.465 [INFO] [Thread-24321] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:04:23.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:04:24.130 [DEBUG] [Thread-24321] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:04:24.130 [DEBUG] [Thread-24321] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:04:24.130 [DEBUG] [Thread-24321] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:04:24.171 [DEBUG] [Thread-24321] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:04:24.171 [DEBUG] [Thread-24321] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:04:24.173 [DEBUG] [Thread-24321] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:04:24.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:04:24.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:04:24.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:04:24.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:04:24.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:04:24.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:04:24.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:04:24.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:04:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:04:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.877860 -999.00  +16.20   6.50     58   +8.00 1 2 1 1 1     0    0 7.07 -48.50 ZnESW 5.2 6.5 201.6 14.2 16.9 -21.3 16.8 -20.6 16.6 -20.1 16.9 -20.8
2025-11-12T23:04:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:04:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:04:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.877860
2025-11-12T23:04:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:04:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:04:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:04:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:04:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:04:24.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:03:51', tmtdew=9.21, humidity=53.98, cloud=0.0, wind=16.11, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:03:51', seeing=0.9, atlas_timestamp='2025-11-12T21:04:07.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.6442499999999995, 0.41525000000000034, 0.6367500000000001, 0.6514999999999995, 0.5694999999999997, 0.7812500000000009, 0.5659999999999998, 0.5402500000000003, 0.44399999999999906, 0.43400000000000105, 0.5547499999999985, 0.5235000000000003, 0.8039999999999994, 0.8602499999999997, 0.8164999999999996, 0.7624999999999993, 0.8072499999999998, 0.5735000000000001, 0.48099999999999987, 0.4522499999999994, 0.7979999999999992, 0.6867499999999991, 1.1332500000000012, 1.15775, 1.488999999999999, 0.3094999999999999, 0.3837500000000009, 0.5045000000000002, 0.774, 1.254500000000001, 2.029000000000001, 1.9700000000000006, 1.0707499999999994], zp_timestamp='2025-11-12T21:01:00')
2025-11-12T23:04:24.193 [DEBUG] [Thread-24321] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:04:24.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:04:24.280 [DEBUG] [Thread-24324] [transport.py] [_log()] starting thread (client mode): 0x14980040
2025-11-12T23:04:24.280 [DEBUG] [Thread-24324] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:04:24.295 [DEBUG] [Thread-24324] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:04:24.295 [INFO] [Thread-24324] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] client lang: <none>
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] server lang: <none>
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] kex follows: False
2025-11-12T23:04:24.302 [DEBUG] [Thread-24324] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:04:24.303 [DEBUG] [Thread-24324] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:04:24.303 [DEBUG] [Thread-24324] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:04:24.303 [DEBUG] [Thread-24324] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:04:24.303 [DEBUG] [Thread-24324] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:04:24.303 [DEBUG] [Thread-24324] [transport.py] [_log()] Compression: none
2025-11-12T23:04:24.303 [DEBUG] [Thread-24324] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:04:24.359 [DEBUG] [Thread-24324] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:04:24.359 [DEBUG] [Thread-24324] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:04:24.359 [DEBUG] [Thread-24324] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:04:24.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:04:24.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:04:24.415 [DEBUG] [Thread-24324] [transport.py] [_log()] userauth is OK
2025-11-12T23:04:24.415 [DEBUG] [Thread-24324] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:04:24.415 [DEBUG] [Thread-24324] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:04:24.415 [DEBUG] [Thread-24324] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:04:24.415 [DEBUG] [Thread-24324] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:04:24.429 [INFO] [Thread-24324] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:04:24.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:04:24.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:04:25.249 [DEBUG] [Thread-24324] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:04:25.249 [DEBUG] [Thread-24324] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:04:25.297 [DEBUG] [Thread-24324] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:04:25.297 [DEBUG] [Thread-24324] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:04:25.305 [DEBUG] [Thread-24324] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:04:25.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:04:25.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-11-12T23:04:25.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-11-12T23:04:25.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:04:25.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:04:25.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:04:25.337 [DEBUG] [Thread-24324] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:04:33.768 [DEBUG] [Thread-24326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:04:48.824 [DEBUG] [Thread-24327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:04:55.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:04:55.360 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:04: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-11-12T23:04:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 4, 23), 9.22, 53.96, 0.0, 16.07, 16.06, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:04:56.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:04:23
2025-11-12T23:04:56.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:04:56.336 [DEBUG] [Thread-24328] [transport.py] [_log()] starting thread (client mode): 0x1739a0b0
2025-11-12T23:04:56.337 [DEBUG] [Thread-24328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:04:56.349 [DEBUG] [Thread-24328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:04:56.349 [INFO] [Thread-24328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:04:56.351 [DEBUG] [Thread-24328] [transport.py] [_log()] client lang: <none>
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] server lang: <none>
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] kex follows: False
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] Compression: none
2025-11-12T23:04:56.352 [DEBUG] [Thread-24328] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:04:56.365 [DEBUG] [Thread-24328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:04:56.365 [DEBUG] [Thread-24328] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:04:56.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:04:56.366 [DEBUG] [Thread-24328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:04:56.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:04:56.366 [DEBUG] [Thread-24328] [transport.py] [_log()] userauth is OK
2025-11-12T23:04:56.366 [DEBUG] [Thread-24328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:04:56.366 [DEBUG] [Thread-24328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:04:56.366 [DEBUG] [Thread-24328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:04:56.366 [DEBUG] [Thread-24328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:04:56.378 [INFO] [Thread-24328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:04:56.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:04:56.973 [DEBUG] [Thread-24328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:04:56.973 [DEBUG] [Thread-24328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:04:56.974 [DEBUG] [Thread-24328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:04:57.014 [DEBUG] [Thread-24328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:04:57.014 [DEBUG] [Thread-24328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:04:57.015 [DEBUG] [Thread-24328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:04:57.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:04:57.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:04:57.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:04:57.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:04:57.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:04:57.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:04:57.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:04:57.026 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.878207 -999.00  +16.20   4.82     58   +7.90 1 2 1 1 1     0    0 7.19 -48.78 ZnESW 8.2 4.8 227.4 9.9 16.9 -21.4 16.8 -20.7 16.6 -20.3 16.9 -20.8
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.878207
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:04:57.027 [DEBUG] [Thread-24328] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:04:57.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:04:23', tmtdew=9.22, humidity=53.96, cloud=0.0, wind=16.07, temperature=16.06, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:04:23', seeing=0.89, atlas_timestamp='2025-11-12T21:04:37.085', atlas_cloud=2, atlas_rain=1, zp_data=[0.6442499999999995, 0.41525000000000034, 0.6367500000000001, 0.6514999999999995, 0.5694999999999997, 0.7812500000000009, 0.5659999999999998, 0.5402500000000003, 0.44399999999999906, 0.43400000000000105, 0.5547499999999985, 0.5235000000000003, 0.8039999999999994, 0.8602499999999997, 0.8164999999999996, 0.7624999999999993, 0.8072499999999998, 0.5735000000000001, 0.48099999999999987, 0.4522499999999994, 0.7979999999999992, 0.6867499999999991, 1.1332500000000012, 1.15775, 1.488999999999999, 0.3094999999999999, 0.3837500000000009, 0.5045000000000002, 0.774, 1.254500000000001, 2.029000000000001, 1.9700000000000006, 1.0707499999999994], zp_timestamp='2025-11-12T21:01:00')
2025-11-12T23:04:57.103 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:04:57.115 [DEBUG] [Thread-24331] [transport.py] [_log()] starting thread (client mode): 0x17346bc0
2025-11-12T23:04:57.115 [DEBUG] [Thread-24331] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:04:57.130 [DEBUG] [Thread-24331] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:04:57.130 [INFO] [Thread-24331] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] client lang: <none>
2025-11-12T23:04:57.137 [DEBUG] [Thread-24331] [transport.py] [_log()] server lang: <none>
2025-11-12T23:04:57.138 [DEBUG] [Thread-24331] [transport.py] [_log()] kex follows: False
2025-11-12T23:04:57.138 [DEBUG] [Thread-24331] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:04:57.138 [DEBUG] [Thread-24331] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:04:57.138 [DEBUG] [Thread-24331] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:04:57.138 [DEBUG] [Thread-24331] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:04:57.138 [DEBUG] [Thread-24331] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:04:57.138 [DEBUG] [Thread-24331] [transport.py] [_log()] Compression: none
2025-11-12T23:04:57.138 [DEBUG] [Thread-24331] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:04:57.194 [DEBUG] [Thread-24331] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:04:57.194 [DEBUG] [Thread-24331] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:04:57.194 [DEBUG] [Thread-24331] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:04:57.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:04:57.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:04:57.252 [DEBUG] [Thread-24331] [transport.py] [_log()] userauth is OK
2025-11-12T23:04:57.252 [DEBUG] [Thread-24331] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:04:57.252 [DEBUG] [Thread-24331] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:04:57.252 [DEBUG] [Thread-24331] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:04:57.252 [DEBUG] [Thread-24331] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:04:57.266 [INFO] [Thread-24331] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:04:57.266 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:04:57.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:04:58.106 [DEBUG] [Thread-24331] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:04:58.106 [DEBUG] [Thread-24331] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:04:58.154 [DEBUG] [Thread-24331] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:04:58.154 [DEBUG] [Thread-24331] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:04:58.162 [DEBUG] [Thread-24331] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:04:58.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:04:58.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-11-12T23:04:58.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-11-12T23:04:58.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:04:58.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:04:58.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:04:58.193 [DEBUG] [Thread-24331] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:05:01.422 [DEBUG] [Thread-24333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:03.858 [DEBUG] [Thread-24334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:08.846 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:08.847 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:18.913 [DEBUG] [Thread-24335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:22.751 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:28.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:05:28.215 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:05:28.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-11-12T23:05:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 4, 55), 9.2, 54.53, 0.0, 15.81, 16.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:05:28.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:04:55
2025-11-12T23:05:29.028 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:05:29.179 [DEBUG] [Thread-24336] [transport.py] [_log()] starting thread (client mode): 0x149444f0
2025-11-12T23:05:29.180 [DEBUG] [Thread-24336] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:05:29.200 [DEBUG] [Thread-24336] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:05:29.200 [INFO] [Thread-24336] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] client lang: <none>
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] server lang: <none>
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] kex follows: False
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] Compression: none
2025-11-12T23:05:29.203 [DEBUG] [Thread-24336] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:05:29.214 [DEBUG] [Thread-24336] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:05:29.214 [DEBUG] [Thread-24336] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:05:29.215 [DEBUG] [Thread-24336] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:05:29.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:05:29.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:05:29.256 [DEBUG] [Thread-24336] [transport.py] [_log()] userauth is OK
2025-11-12T23:05:29.256 [DEBUG] [Thread-24336] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:05:29.256 [DEBUG] [Thread-24336] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:05:29.256 [DEBUG] [Thread-24336] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:05:29.256 [DEBUG] [Thread-24336] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:05:29.285 [INFO] [Thread-24336] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:05:29.286 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:05:29.909 [DEBUG] [Thread-24336] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:05:29.909 [DEBUG] [Thread-24336] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:05:29.910 [DEBUG] [Thread-24336] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:05:29.950 [DEBUG] [Thread-24336] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:05:29.950 [DEBUG] [Thread-24336] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:05:29.954 [DEBUG] [Thread-24336] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:05:29.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:05:29.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:05:29.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:05:29.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:05:29.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:05:29.983 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:05:29.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:05:29.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:05:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:05:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.878554 -999.00  +16.20   9.73     58   +7.90 1 2 1 1 1     0    0 7.25 -44.25 ZnESW 10.5 9.7 194.2 11.8 16.9 -21.4 16.8 -20.5 16.6 -20.4 16.8 -20.9
2025-11-12T23:05:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:05:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:05:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.878554
2025-11-12T23:05:29.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:05:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:05:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:05:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:05:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:05:29.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:04:55', tmtdew=9.2, humidity=54.53, cloud=0.0, wind=15.81, temperature=16.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:05:27', seeing=0.95, atlas_timestamp='2025-11-12T21:05:07.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:03:00')
2025-11-12T23:05:29.988 [DEBUG] [Thread-24336] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:05:30.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:05:30.080 [DEBUG] [Thread-24339] [transport.py] [_log()] starting thread (client mode): 0x149478b0
2025-11-12T23:05:30.080 [DEBUG] [Thread-24339] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:05:30.099 [DEBUG] [Thread-24339] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:05:30.099 [INFO] [Thread-24339] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:05:30.108 [DEBUG] [Thread-24339] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:05:30.109 [DEBUG] [Thread-24339] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:05:30.109 [DEBUG] [Thread-24339] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:05:30.109 [DEBUG] [Thread-24339] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:05:30.109 [DEBUG] [Thread-24339] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:05:30.109 [DEBUG] [Thread-24339] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:05:30.109 [DEBUG] [Thread-24339] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:05:30.109 [DEBUG] [Thread-24339] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:05:30.109 [DEBUG] [Thread-24339] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:05:30.110 [DEBUG] [Thread-24339] [transport.py] [_log()] client lang: <none>
2025-11-12T23:05:30.110 [DEBUG] [Thread-24339] [transport.py] [_log()] server lang: <none>
2025-11-12T23:05:30.110 [DEBUG] [Thread-24339] [transport.py] [_log()] kex follows: False
2025-11-12T23:05:30.110 [DEBUG] [Thread-24339] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:05:30.110 [DEBUG] [Thread-24339] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:05:30.110 [DEBUG] [Thread-24339] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:05:30.110 [DEBUG] [Thread-24339] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:05:30.110 [DEBUG] [Thread-24339] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:05:30.111 [DEBUG] [Thread-24339] [transport.py] [_log()] Compression: none
2025-11-12T23:05:30.111 [DEBUG] [Thread-24339] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:05:30.170 [DEBUG] [Thread-24339] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:05:30.170 [DEBUG] [Thread-24339] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:05:30.171 [DEBUG] [Thread-24339] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:05:30.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:05:30.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:05:30.227 [DEBUG] [Thread-24339] [transport.py] [_log()] userauth is OK
2025-11-12T23:05:30.227 [DEBUG] [Thread-24339] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:05:30.228 [DEBUG] [Thread-24339] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:05:30.228 [DEBUG] [Thread-24339] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:05:30.228 [DEBUG] [Thread-24339] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:05:30.247 [INFO] [Thread-24339] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:05:30.248 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:05:30.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:05:30.503 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:31.081 [DEBUG] [Thread-24339] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:05:31.081 [DEBUG] [Thread-24339] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:05:31.129 [DEBUG] [Thread-24339] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:05:31.130 [DEBUG] [Thread-24339] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:05:31.139 [DEBUG] [Thread-24339] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:05:31.148 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:05:31.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-11-12T23:05:31.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-11-12T23:05:31.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:05:31.167 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:05:31.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:05:31.177 [DEBUG] [Thread-24339] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:05:33.946 [DEBUG] [Thread-24341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:34.597 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:05:48.990 [DEBUG] [Thread-24342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:06:01.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:06:01.198 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:06:01.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:06:01.475 [DEBUG] [Thread-24343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:06:01.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 5, 27), 9.22, 54.46, 0.0, 14.38, 16.12, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:06:01.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:05:27
2025-11-12T23:06:01.990 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:06:02.139 [DEBUG] [Thread-24344] [transport.py] [_log()] starting thread (client mode): 0x1739aa40
2025-11-12T23:06:02.139 [DEBUG] [Thread-24344] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:06:02.159 [DEBUG] [Thread-24344] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:06:02.159 [INFO] [Thread-24344] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:06:02.162 [DEBUG] [Thread-24344] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] client lang: <none>
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] server lang: <none>
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] kex follows: False
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] Compression: none
2025-11-12T23:06:02.163 [DEBUG] [Thread-24344] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:06:02.181 [DEBUG] [Thread-24344] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:06:02.181 [DEBUG] [Thread-24344] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:06:02.182 [DEBUG] [Thread-24344] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:06:02.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:06:02.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:06:02.184 [DEBUG] [Thread-24344] [transport.py] [_log()] userauth is OK
2025-11-12T23:06:02.184 [DEBUG] [Thread-24344] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:06:02.184 [DEBUG] [Thread-24344] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:06:02.185 [DEBUG] [Thread-24344] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:06:02.185 [DEBUG] [Thread-24344] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:06:02.209 [INFO] [Thread-24344] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:06:02.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:06:02.861 [DEBUG] [Thread-24344] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:06:02.861 [DEBUG] [Thread-24344] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:06:02.861 [DEBUG] [Thread-24344] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:06:02.902 [DEBUG] [Thread-24344] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:06:02.902 [DEBUG] [Thread-24344] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:06:02.906 [DEBUG] [Thread-24344] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:06:02.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:06:02.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:06:02.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:06:02.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:06:02.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:06:02.932 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:06:02.932 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:06:02.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:06:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:06:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.878554 -999.00  +16.20   9.73     58   +7.90 1 2 1 1 1     0    0 7.25 -44.25 ZnESW 10.5 9.7 194.2 11.8 16.9 -21.4 16.8 -20.5 16.6 -20.4 16.8 -20.9
2025-11-12T23:06:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:06:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:06:02.933 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.878554
2025-11-12T23:06:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:06:02.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:06:02.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:06:02.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:06:02.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:06:02.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:05:27', tmtdew=9.22, humidity=54.46, cloud=0.0, wind=14.38, temperature=16.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:05:59', seeing=0.85, atlas_timestamp='2025-11-12T21:05:07.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:03:00')
2025-11-12T23:06:02.935 [DEBUG] [Thread-24344] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:06:03.019 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:06:03.030 [DEBUG] [Thread-24347] [transport.py] [_log()] starting thread (client mode): 0x1739b310
2025-11-12T23:06:03.030 [DEBUG] [Thread-24347] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:06:03.045 [DEBUG] [Thread-24347] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:06:03.045 [INFO] [Thread-24347] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:06:03.053 [DEBUG] [Thread-24347] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] client lang: <none>
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] server lang: <none>
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] kex follows: False
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:06:03.054 [DEBUG] [Thread-24347] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:06:03.055 [DEBUG] [Thread-24347] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:06:03.055 [DEBUG] [Thread-24347] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:06:03.055 [DEBUG] [Thread-24347] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:06:03.055 [DEBUG] [Thread-24347] [transport.py] [_log()] Compression: none
2025-11-12T23:06:03.055 [DEBUG] [Thread-24347] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:06:03.112 [DEBUG] [Thread-24347] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:06:03.113 [DEBUG] [Thread-24347] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:06:03.114 [DEBUG] [Thread-24347] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:06:03.114 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:06:03.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:06:03.172 [DEBUG] [Thread-24347] [transport.py] [_log()] userauth is OK
2025-11-12T23:06:03.172 [DEBUG] [Thread-24347] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:06:03.173 [DEBUG] [Thread-24347] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:06:03.173 [DEBUG] [Thread-24347] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:06:03.173 [DEBUG] [Thread-24347] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:06:03.192 [INFO] [Thread-24347] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:06:03.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:06:03.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:06:04.026 [DEBUG] [Thread-24347] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:06:04.027 [DEBUG] [Thread-24347] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:06:04.028 [DEBUG] [Thread-24349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:06:04.074 [DEBUG] [Thread-24347] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:06:04.075 [DEBUG] [Thread-24347] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:06:04.084 [DEBUG] [Thread-24347] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:06:04.092 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:06:04.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-11-12T23:06:04.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:06:04.110 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:06:04.110 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:06:04.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:06:04.119 [DEBUG] [Thread-24347] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:06:09.049 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:06:09.050 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:06:19.084 [DEBUG] [Thread-24350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:06:34.119 [DEBUG] [Thread-24351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:06:34.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:06:34.142 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:06:34.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:06:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 6, 31), 9.21, 54.48, 0.0, 13.53, 16.09, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:06:34.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:06:31
2025-11-12T23:06:34.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:06:35.050 [DEBUG] [Thread-24352] [transport.py] [_log()] starting thread (client mode): 0x19ddbe20
2025-11-12T23:06:35.050 [DEBUG] [Thread-24352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:06:35.071 [DEBUG] [Thread-24352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:06:35.071 [INFO] [Thread-24352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:06:35.074 [DEBUG] [Thread-24352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] client lang: <none>
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] server lang: <none>
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] kex follows: False
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] Compression: none
2025-11-12T23:06:35.075 [DEBUG] [Thread-24352] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:06:35.092 [DEBUG] [Thread-24352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:06:35.093 [DEBUG] [Thread-24352] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:06:35.093 [DEBUG] [Thread-24352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:06:35.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:06:35.094 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:06:35.096 [DEBUG] [Thread-24352] [transport.py] [_log()] userauth is OK
2025-11-12T23:06:35.096 [DEBUG] [Thread-24352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:06:35.096 [DEBUG] [Thread-24352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:06:35.096 [DEBUG] [Thread-24352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:06:35.096 [DEBUG] [Thread-24352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:06:35.121 [INFO] [Thread-24352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:06:35.122 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:06:35.772 [DEBUG] [Thread-24352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:06:35.772 [DEBUG] [Thread-24352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:06:35.773 [DEBUG] [Thread-24352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:06:35.813 [DEBUG] [Thread-24352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:06:35.813 [DEBUG] [Thread-24352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:06:35.816 [DEBUG] [Thread-24352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:06:35.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:06:35.830 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:06:35.832 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:06:35.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:06:35.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:06:35.842 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:06:35.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:06:35.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:06:35.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:06:35.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.878901 -999.00  +16.20   6.72     58   +7.90 1 2 1 1 1     0    0 7.38 -41.26 ZnESW 8.0 6.7 188.0 13.6 16.9 -21.4 16.7 -20.6 16.6 -20.4 16.8 -20.9
2025-11-12T23:06:35.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:06:35.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:06:35.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.878901
2025-11-12T23:06:35.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:06:35.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:06:35.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:06:35.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:06:35.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:06:35.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:06:31', tmtdew=9.21, humidity=54.48, cloud=0.0, wind=13.53, temperature=16.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:06:31', seeing=0.96, atlas_timestamp='2025-11-12T21:05:37.046', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:03:00')
2025-11-12T23:06:35.844 [DEBUG] [Thread-24352] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:06:35.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:06:35.934 [DEBUG] [Thread-24355] [transport.py] [_log()] starting thread (client mode): 0x149814b0
2025-11-12T23:06:35.934 [DEBUG] [Thread-24355] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:06:35.949 [DEBUG] [Thread-24355] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:06:35.949 [INFO] [Thread-24355] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] client lang: <none>
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] server lang: <none>
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] kex follows: False
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:06:35.957 [DEBUG] [Thread-24355] [transport.py] [_log()] Compression: none
2025-11-12T23:06:35.958 [DEBUG] [Thread-24355] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:06:36.016 [DEBUG] [Thread-24355] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:06:36.016 [DEBUG] [Thread-24355] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:06:36.017 [DEBUG] [Thread-24355] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:06:36.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:06:36.018 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:06:36.072 [DEBUG] [Thread-24355] [transport.py] [_log()] userauth is OK
2025-11-12T23:06:36.072 [DEBUG] [Thread-24355] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:06:36.072 [DEBUG] [Thread-24355] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:06:36.073 [DEBUG] [Thread-24355] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:06:36.073 [DEBUG] [Thread-24355] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:06:36.092 [INFO] [Thread-24355] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:06:36.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:06:36.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:06:36.890 [DEBUG] [Thread-24355] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:06:36.891 [DEBUG] [Thread-24355] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:06:36.939 [DEBUG] [Thread-24355] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:06:36.939 [DEBUG] [Thread-24355] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:06:36.948 [DEBUG] [Thread-24355] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:06:36.957 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:06:36.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:06:36.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-11-12T23:06:36.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:06:36.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:06:36.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:06:36.984 [DEBUG] [Thread-24355] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:06:49.156 [DEBUG] [Thread-24357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:06:57.189 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:01.551 [DEBUG] [Thread-24358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:04.201 [DEBUG] [Thread-24359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:04.980 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:07.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:07:07.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:07:07.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-11-12T23:07:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 7, 3), 9.24, 54.39, 0.0, 12.09, 16.14, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:07:07.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:07:03
2025-11-12T23:07:07.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:07:07.905 [DEBUG] [Thread-24360] [transport.py] [_log()] starting thread (client mode): 0x173463e0
2025-11-12T23:07:07.905 [DEBUG] [Thread-24360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:07:07.925 [DEBUG] [Thread-24360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:07:07.926 [INFO] [Thread-24360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:07:07.928 [DEBUG] [Thread-24360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:07:07.928 [DEBUG] [Thread-24360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] client lang: <none>
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] server lang: <none>
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] kex follows: False
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] Compression: none
2025-11-12T23:07:07.929 [DEBUG] [Thread-24360] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:07:07.946 [DEBUG] [Thread-24360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:07:07.947 [DEBUG] [Thread-24360] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:07:07.948 [DEBUG] [Thread-24360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:07:07.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:07:07.948 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:07:07.950 [DEBUG] [Thread-24360] [transport.py] [_log()] userauth is OK
2025-11-12T23:07:07.950 [DEBUG] [Thread-24360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:07:07.950 [DEBUG] [Thread-24360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:07:07.950 [DEBUG] [Thread-24360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:07:07.950 [DEBUG] [Thread-24360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:07:07.968 [INFO] [Thread-24360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:07:07.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:07:08.608 [DEBUG] [Thread-24360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:07:08.609 [DEBUG] [Thread-24360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:07:08.609 [DEBUG] [Thread-24360] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:07:08.649 [DEBUG] [Thread-24360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:07:08.650 [DEBUG] [Thread-24360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:07:08.652 [DEBUG] [Thread-24360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:07:08.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:07:08.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:07:08.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:07:08.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:07:08.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:07:08.673 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:07:08.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:07:08.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:07:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:07:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.879249 -999.00  +16.20   5.90     57   +7.90 1 2 1 1 1     0    0 7.30 -44.57 ZnESW 4.9 5.9 208.2 9.2 16.9 -21.3 16.7 -21.0 16.6 -20.4 16.8 -20.9
2025-11-12T23:07:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:07:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:07:08.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.879249
2025-11-12T23:07:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:07:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:07:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:07:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:07:08.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:07:08.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:07:03', tmtdew=9.24, humidity=54.39, cloud=0.0, wind=12.09, temperature=16.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:07:03', seeing=0.96, atlas_timestamp='2025-11-12T21:06:07.114', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:03:00')
2025-11-12T23:07:08.677 [DEBUG] [Thread-24360] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:07:08.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:07:08.769 [DEBUG] [Thread-24363] [transport.py] [_log()] starting thread (client mode): 0x11f01570
2025-11-12T23:07:08.769 [DEBUG] [Thread-24363] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:07:08.784 [DEBUG] [Thread-24363] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:07:08.784 [INFO] [Thread-24363] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:07:08.791 [DEBUG] [Thread-24363] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] client lang: <none>
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] server lang: <none>
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] kex follows: False
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] Compression: none
2025-11-12T23:07:08.792 [DEBUG] [Thread-24363] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:07:08.852 [DEBUG] [Thread-24363] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:07:08.853 [DEBUG] [Thread-24363] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:07:08.853 [DEBUG] [Thread-24363] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:07:08.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:07:08.854 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:07:08.907 [DEBUG] [Thread-24363] [transport.py] [_log()] userauth is OK
2025-11-12T23:07:08.907 [DEBUG] [Thread-24363] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:07:08.907 [DEBUG] [Thread-24363] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:07:08.907 [DEBUG] [Thread-24363] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:07:08.908 [DEBUG] [Thread-24363] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:07:08.922 [INFO] [Thread-24363] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:07:08.922 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:07:08.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:07:09.037 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:09.253 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:09.254 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:09.719 [DEBUG] [Thread-24363] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:07:09.719 [DEBUG] [Thread-24363] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:07:09.767 [DEBUG] [Thread-24363] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:07:09.767 [DEBUG] [Thread-24363] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:07:09.776 [DEBUG] [Thread-24363] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:07:09.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:07:09.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-11-12T23:07:09.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:07:09.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:07:09.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:07:09.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:07:09.810 [DEBUG] [Thread-24363] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:07:19.236 [DEBUG] [Thread-24365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:34.293 [DEBUG] [Thread-24366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:07:39.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:07:39.808 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:07:39.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-11-12T23:07:40.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 7, 35), 9.24, 54.39, 0.0, 13.16, 16.04, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:07:40.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:07:35
2025-11-12T23:07:40.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:07:40.727 [DEBUG] [Thread-24367] [transport.py] [_log()] starting thread (client mode): 0x14946470
2025-11-12T23:07:40.728 [DEBUG] [Thread-24367] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:07:40.747 [DEBUG] [Thread-24367] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:07:40.747 [INFO] [Thread-24367] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:07:40.758 [DEBUG] [Thread-24367] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:07:40.758 [DEBUG] [Thread-24367] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:07:40.758 [DEBUG] [Thread-24367] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:07:40.758 [DEBUG] [Thread-24367] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:07:40.758 [DEBUG] [Thread-24367] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:07:40.758 [DEBUG] [Thread-24367] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:07:40.758 [DEBUG] [Thread-24367] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:07:40.758 [DEBUG] [Thread-24367] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:07:40.759 [DEBUG] [Thread-24367] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:07:40.759 [DEBUG] [Thread-24367] [transport.py] [_log()] client lang: <none>
2025-11-12T23:07:40.759 [DEBUG] [Thread-24367] [transport.py] [_log()] server lang: <none>
2025-11-12T23:07:40.759 [DEBUG] [Thread-24367] [transport.py] [_log()] kex follows: False
2025-11-12T23:07:40.759 [DEBUG] [Thread-24367] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:07:40.759 [DEBUG] [Thread-24367] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:07:40.759 [DEBUG] [Thread-24367] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:07:40.759 [DEBUG] [Thread-24367] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:07:40.760 [DEBUG] [Thread-24367] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:07:40.760 [DEBUG] [Thread-24367] [transport.py] [_log()] Compression: none
2025-11-12T23:07:40.760 [DEBUG] [Thread-24367] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:07:40.778 [DEBUG] [Thread-24367] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:07:40.779 [DEBUG] [Thread-24367] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:07:40.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:07:40.780 [DEBUG] [Thread-24367] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:07:40.781 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:07:40.782 [DEBUG] [Thread-24367] [transport.py] [_log()] userauth is OK
2025-11-12T23:07:40.782 [DEBUG] [Thread-24367] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:07:40.783 [DEBUG] [Thread-24367] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:07:40.783 [DEBUG] [Thread-24367] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:07:40.783 [DEBUG] [Thread-24367] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:07:40.807 [INFO] [Thread-24367] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:07:40.810 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:07:41.482 [DEBUG] [Thread-24367] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:07:41.483 [DEBUG] [Thread-24367] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:07:41.483 [DEBUG] [Thread-24367] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:07:41.524 [DEBUG] [Thread-24367] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:07:41.524 [DEBUG] [Thread-24367] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:07:41.528 [DEBUG] [Thread-24367] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:07:41.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:07:41.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:07:41.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:07:41.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:07:41.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:07:41.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:07:41.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:07:41.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:07:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:07:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.879943 -999.00  +16.10   6.43     57   +7.80 1 2 1 1 1     0    0 7.26 -41.96 ZnESW 7.4 6.4 188.8 10.0 16.9 -21.3 16.7 -20.9 16.5 -20.3 16.8 -20.9
2025-11-12T23:07:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:07:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:07:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.879943
2025-11-12T23:07:41.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:07:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:07:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:07:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:07:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:07:41.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:07:35', tmtdew=9.24, humidity=54.39, cloud=0.0, wind=13.16, temperature=16.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:07:35', seeing=1.06, atlas_timestamp='2025-11-12T21:07:07.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:03:00')
2025-11-12T23:07:41.555 [DEBUG] [Thread-24367] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:07:41.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:07:41.651 [DEBUG] [Thread-24370] [transport.py] [_log()] starting thread (client mode): 0x1737e1a0
2025-11-12T23:07:41.652 [DEBUG] [Thread-24370] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:07:41.666 [DEBUG] [Thread-24370] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:07:41.666 [INFO] [Thread-24370] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] client lang: <none>
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] server lang: <none>
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] kex follows: False
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:07:41.674 [DEBUG] [Thread-24370] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:07:41.675 [DEBUG] [Thread-24370] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:07:41.675 [DEBUG] [Thread-24370] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:07:41.675 [DEBUG] [Thread-24370] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:07:41.675 [DEBUG] [Thread-24370] [transport.py] [_log()] Compression: none
2025-11-12T23:07:41.675 [DEBUG] [Thread-24370] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:07:41.732 [DEBUG] [Thread-24370] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:07:41.733 [DEBUG] [Thread-24370] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:07:41.733 [DEBUG] [Thread-24370] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:07:41.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:07:41.734 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:07:41.788 [DEBUG] [Thread-24370] [transport.py] [_log()] userauth is OK
2025-11-12T23:07:41.788 [DEBUG] [Thread-24370] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:07:41.788 [DEBUG] [Thread-24370] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:07:41.789 [DEBUG] [Thread-24370] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:07:41.789 [DEBUG] [Thread-24370] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:07:41.808 [INFO] [Thread-24370] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:07:41.809 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:07:41.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:07:42.643 [DEBUG] [Thread-24370] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:07:42.643 [DEBUG] [Thread-24370] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:07:42.691 [DEBUG] [Thread-24370] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:07:42.692 [DEBUG] [Thread-24370] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:07:42.701 [DEBUG] [Thread-24370] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:07:42.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:07:42.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-11-12T23:07:42.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-11-12T23:07:42.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:07:42.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:07:42.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:07:42.736 [DEBUG] [Thread-24370] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:07:49.327 [DEBUG] [Thread-24372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:08:01.610 [DEBUG] [Thread-24373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:08:04.379 [DEBUG] [Thread-24374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:08:09.455 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:08:09.456 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:08:12.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:08:12.757 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:08:12.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-11-12T23:08:13.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 8, 7), 9.26, 54.28, 0.0, 13.99, 15.94, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:08:13.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:08:07
2025-11-12T23:08:13.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:08:13.653 [DEBUG] [Thread-24375] [transport.py] [_log()] starting thread (client mode): 0x1737d3c0
2025-11-12T23:08:13.654 [DEBUG] [Thread-24375] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:08:13.674 [DEBUG] [Thread-24375] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:08:13.674 [INFO] [Thread-24375] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:08:13.677 [DEBUG] [Thread-24375] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:08:13.677 [DEBUG] [Thread-24375] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:08:13.677 [DEBUG] [Thread-24375] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:08:13.677 [DEBUG] [Thread-24375] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] client lang: <none>
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] server lang: <none>
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] kex follows: False
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:08:13.678 [DEBUG] [Thread-24375] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:08:13.679 [DEBUG] [Thread-24375] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:08:13.679 [DEBUG] [Thread-24375] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:08:13.679 [DEBUG] [Thread-24375] [transport.py] [_log()] Compression: none
2025-11-12T23:08:13.679 [DEBUG] [Thread-24375] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:08:13.695 [DEBUG] [Thread-24375] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:08:13.695 [DEBUG] [Thread-24375] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:08:13.696 [DEBUG] [Thread-24375] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:08:13.696 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:08:13.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:08:13.698 [DEBUG] [Thread-24375] [transport.py] [_log()] userauth is OK
2025-11-12T23:08:13.698 [DEBUG] [Thread-24375] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:08:13.698 [DEBUG] [Thread-24375] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:08:13.698 [DEBUG] [Thread-24375] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:08:13.698 [DEBUG] [Thread-24375] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:08:13.733 [INFO] [Thread-24375] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:08:13.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:08:14.377 [DEBUG] [Thread-24375] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:08:14.378 [DEBUG] [Thread-24375] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:08:14.378 [DEBUG] [Thread-24375] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:08:14.418 [DEBUG] [Thread-24375] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:08:14.418 [DEBUG] [Thread-24375] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:08:14.421 [DEBUG] [Thread-24375] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:08:14.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:08:14.435 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:08:14.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:08:14.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:08:14.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:08:14.444 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:08:14.444 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:08:14.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:08:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:08:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.880290 -999.00  +16.10   8.02     57   +7.80 1 2 1 1 1     0    0 7.42 -38.57 ZnESW 9.0 8.0 195.9 10.2 16.9 -21.3 16.7 -20.7 16.5 -20.4 16.8 -20.9
2025-11-12T23:08:14.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:08:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:08:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.880290
2025-11-12T23:08:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:08:14.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:08:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:08:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:08:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:08:14.446 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:08:07', tmtdew=9.26, humidity=54.28, cloud=0.0, wind=13.99, temperature=15.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:08:08', seeing=1.06, atlas_timestamp='2025-11-12T21:07:37.056', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:03:00')
2025-11-12T23:08:14.446 [DEBUG] [Thread-24375] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:08:14.530 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:08:14.543 [DEBUG] [Thread-24378] [transport.py] [_log()] starting thread (client mode): 0x1737fe50
2025-11-12T23:08:14.543 [DEBUG] [Thread-24378] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:08:14.558 [DEBUG] [Thread-24378] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:08:14.558 [INFO] [Thread-24378] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:08:14.565 [DEBUG] [Thread-24378] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:08:14.565 [DEBUG] [Thread-24378] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] client lang: <none>
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] server lang: <none>
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] kex follows: False
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:08:14.566 [DEBUG] [Thread-24378] [transport.py] [_log()] Compression: none
2025-11-12T23:08:14.567 [DEBUG] [Thread-24378] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:08:14.623 [DEBUG] [Thread-24378] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:08:14.623 [DEBUG] [Thread-24378] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:08:14.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:08:14.624 [DEBUG] [Thread-24378] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:08:14.625 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:08:14.679 [DEBUG] [Thread-24378] [transport.py] [_log()] userauth is OK
2025-11-12T23:08:14.679 [DEBUG] [Thread-24378] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:08:14.680 [DEBUG] [Thread-24378] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:08:14.680 [DEBUG] [Thread-24378] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:08:14.680 [DEBUG] [Thread-24378] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:08:14.698 [INFO] [Thread-24378] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:08:14.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:08:14.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:08:15.542 [DEBUG] [Thread-24378] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:08:15.542 [DEBUG] [Thread-24378] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:08:15.590 [DEBUG] [Thread-24378] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:08:15.590 [DEBUG] [Thread-24378] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:08:15.599 [DEBUG] [Thread-24378] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:08:15.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:08:15.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:08:15.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-11-12T23:08:15.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:08:15.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:08:15.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:08:15.632 [DEBUG] [Thread-24378] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:08:19.412 [DEBUG] [Thread-24380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:08:31.629 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:08:34.463 [DEBUG] [Thread-24381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:08:45.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:08:45.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:08:45.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-11-12T23:08:46.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 8, 39), 9.24, 53.86, 0.0, 12.78, 15.91, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:08:46.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:08:39
2025-11-12T23:08:46.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:08:46.558 [DEBUG] [Thread-24382] [transport.py] [_log()] starting thread (client mode): 0x173445e0
2025-11-12T23:08:46.558 [DEBUG] [Thread-24382] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:08:46.578 [DEBUG] [Thread-24382] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:08:46.578 [INFO] [Thread-24382] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:08:46.581 [DEBUG] [Thread-24382] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:08:46.581 [DEBUG] [Thread-24382] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:08:46.581 [DEBUG] [Thread-24382] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:08:46.581 [DEBUG] [Thread-24382] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] client lang: <none>
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] server lang: <none>
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] kex follows: False
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] Compression: none
2025-11-12T23:08:46.582 [DEBUG] [Thread-24382] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:08:46.598 [DEBUG] [Thread-24382] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:08:46.599 [DEBUG] [Thread-24382] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:08:46.599 [DEBUG] [Thread-24382] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:08:46.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:08:46.599 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:08:46.600 [DEBUG] [Thread-24382] [transport.py] [_log()] userauth is OK
2025-11-12T23:08:46.600 [DEBUG] [Thread-24382] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:08:46.600 [DEBUG] [Thread-24382] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:08:46.600 [DEBUG] [Thread-24382] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:08:46.600 [DEBUG] [Thread-24382] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:08:46.609 [INFO] [Thread-24382] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:08:46.609 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:08:47.264 [DEBUG] [Thread-24382] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:08:47.264 [DEBUG] [Thread-24382] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:08:47.264 [DEBUG] [Thread-24382] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:08:47.305 [DEBUG] [Thread-24382] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:08:47.305 [DEBUG] [Thread-24382] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:08:47.307 [DEBUG] [Thread-24382] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:08:47.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:08:47.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:08:47.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:08:47.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:08:47.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:08:47.326 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:08:47.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:08:47.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:08:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:08:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.880637 -999.00  +16.10   8.94     57   +7.80 1 2 1 1 1     0    0 7.57 -36.31 ZnESW 11.5 8.9 198.4 10.3 16.8 -21.4 16.7 -20.8 16.5 -20.4 16.8 -20.9
2025-11-12T23:08:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:08:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:08:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.880637
2025-11-12T23:08:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:08:47.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:08:47.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:08:47.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:08:47.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:08:47.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:08:39', tmtdew=9.24, humidity=53.86, cloud=0.0, wind=12.78, temperature=15.91, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:08:40', seeing=1.1, atlas_timestamp='2025-11-12T21:08:07.037', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:07:00')
2025-11-12T23:08:47.327 [DEBUG] [Thread-24382] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:08:47.400 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:08:47.413 [DEBUG] [Thread-24385] [transport.py] [_log()] starting thread (client mode): 0x17345510
2025-11-12T23:08:47.413 [DEBUG] [Thread-24385] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:08:47.427 [DEBUG] [Thread-24385] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:08:47.427 [INFO] [Thread-24385] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:08:47.434 [DEBUG] [Thread-24385] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:08:47.434 [DEBUG] [Thread-24385] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:08:47.434 [DEBUG] [Thread-24385] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] client lang: <none>
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] server lang: <none>
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] kex follows: False
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] Compression: none
2025-11-12T23:08:47.435 [DEBUG] [Thread-24385] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:08:47.490 [DEBUG] [Thread-24385] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:08:47.490 [DEBUG] [Thread-24385] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:08:47.490 [DEBUG] [Thread-24385] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:08:47.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:08:47.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:08:47.547 [DEBUG] [Thread-24385] [transport.py] [_log()] userauth is OK
2025-11-12T23:08:47.547 [DEBUG] [Thread-24385] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:08:47.547 [DEBUG] [Thread-24385] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:08:47.547 [DEBUG] [Thread-24385] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:08:47.547 [DEBUG] [Thread-24385] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:08:47.565 [INFO] [Thread-24385] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:08:47.565 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:08:47.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:08:48.411 [DEBUG] [Thread-24385] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:08:48.411 [DEBUG] [Thread-24385] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:08:48.459 [DEBUG] [Thread-24385] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:08:48.459 [DEBUG] [Thread-24385] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:08:48.467 [DEBUG] [Thread-24385] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:08:48.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:08:48.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-11-12T23:08:48.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-11-12T23:08:48.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:08:48.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:08:48.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:08:48.498 [DEBUG] [Thread-24385] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:08:49.494 [DEBUG] [Thread-24387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:01.674 [DEBUG] [Thread-24388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:04.534 [DEBUG] [Thread-24389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:09.658 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:09.659 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:18.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:09:18.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:09:18.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-11-12T23:09:19.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 9, 11), 9.23, 53.89, 0.0, 11.68, 15.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:09:19.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:09:11
2025-11-12T23:09:19.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:09:19.421 [DEBUG] [Thread-24390] [transport.py] [_log()] starting thread (client mode): 0x1737ed40
2025-11-12T23:09:19.422 [DEBUG] [Thread-24390] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:09:19.442 [DEBUG] [Thread-24390] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:09:19.442 [INFO] [Thread-24390] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:09:19.444 [DEBUG] [Thread-24390] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:09:19.444 [DEBUG] [Thread-24390] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:09:19.444 [DEBUG] [Thread-24390] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] client lang: <none>
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] server lang: <none>
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] kex follows: False
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] Compression: none
2025-11-12T23:09:19.445 [DEBUG] [Thread-24390] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:09:19.462 [DEBUG] [Thread-24390] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:09:19.462 [DEBUG] [Thread-24390] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:09:19.463 [DEBUG] [Thread-24390] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:09:19.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:09:19.464 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:09:19.465 [DEBUG] [Thread-24390] [transport.py] [_log()] userauth is OK
2025-11-12T23:09:19.465 [DEBUG] [Thread-24390] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:09:19.465 [DEBUG] [Thread-24390] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:09:19.465 [DEBUG] [Thread-24390] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:09:19.465 [DEBUG] [Thread-24390] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:09:19.500 [INFO] [Thread-24390] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:09:19.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:09:19.569 [DEBUG] [Thread-24392 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:20.115 [DEBUG] [Thread-24390] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:09:20.116 [DEBUG] [Thread-24390] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:09:20.116 [DEBUG] [Thread-24390] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:09:20.157 [DEBUG] [Thread-24390] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:09:20.157 [DEBUG] [Thread-24390] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:09:20.160 [DEBUG] [Thread-24390] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:09:20.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:09:20.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:09:20.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:09:20.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:09:20.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:09:20.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:09:20.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:09:20.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:09:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:09:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.880985 -999.00  +16.10   7.33     58   +7.80 1 2 1 1 1     0    0 7.55 -35.07 ZnESW 10.5 7.3 190.0 13.3 16.9 -21.4 16.7 -21.0 16.5 -20.4 16.8 -20.9
2025-11-12T23:09:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:09:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:09:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.880985
2025-11-12T23:09:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:09:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:09:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:09:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:09:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:09:20.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:09:11', tmtdew=9.23, humidity=53.89, cloud=0.0, wind=11.68, temperature=15.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:09:12', seeing=1.1, atlas_timestamp='2025-11-12T21:08:37.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:07:00')
2025-11-12T23:09:20.186 [DEBUG] [Thread-24390] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:09:20.272 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:09:20.285 [DEBUG] [Thread-24394] [transport.py] [_log()] starting thread (client mode): 0x1737ffd0
2025-11-12T23:09:20.285 [DEBUG] [Thread-24394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:09:20.298 [DEBUG] [Thread-24394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:09:20.298 [INFO] [Thread-24394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] client lang: <none>
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] server lang: <none>
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] kex follows: False
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:09:20.306 [DEBUG] [Thread-24394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:09:20.307 [DEBUG] [Thread-24394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:09:20.307 [DEBUG] [Thread-24394] [transport.py] [_log()] Compression: none
2025-11-12T23:09:20.307 [DEBUG] [Thread-24394] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:09:20.364 [DEBUG] [Thread-24394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:09:20.365 [DEBUG] [Thread-24394] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:09:20.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:09:20.366 [DEBUG] [Thread-24394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:09:20.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:09:20.420 [DEBUG] [Thread-24394] [transport.py] [_log()] userauth is OK
2025-11-12T23:09:20.420 [DEBUG] [Thread-24394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:09:20.421 [DEBUG] [Thread-24394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:09:20.421 [DEBUG] [Thread-24394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:09:20.421 [DEBUG] [Thread-24394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:09:20.442 [INFO] [Thread-24394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:09:20.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:09:20.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:09:21.307 [DEBUG] [Thread-24394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:09:21.307 [DEBUG] [Thread-24394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:09:21.355 [DEBUG] [Thread-24394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:09:21.356 [DEBUG] [Thread-24394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:09:21.365 [DEBUG] [Thread-24394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:09:21.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:09:21.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-11-12T23:09:21.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-11-12T23:09:21.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:09:21.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:09:21.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:09:21.408 [DEBUG] [Thread-24394] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:09:31.125 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:34.284 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:34.602 [DEBUG] [Thread-24396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:39.375 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:45.939 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:49.662 [DEBUG] [Thread-24397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:09:51.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:09:51.427 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:09:51.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-11-12T23:09:52.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 9, 43), 9.19, 54.04, 0.0, 13.16, 15.84, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:09:52.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:09:43
2025-11-12T23:09:52.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:09:52.332 [DEBUG] [Thread-24398] [transport.py] [_log()] starting thread (client mode): 0x1737f0a0
2025-11-12T23:09:52.332 [DEBUG] [Thread-24398] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:09:52.352 [DEBUG] [Thread-24398] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:09:52.352 [INFO] [Thread-24398] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] client lang: <none>
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] server lang: <none>
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] kex follows: False
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] Compression: none
2025-11-12T23:09:52.356 [DEBUG] [Thread-24398] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:09:52.373 [DEBUG] [Thread-24398] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:09:52.374 [DEBUG] [Thread-24398] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:09:52.374 [DEBUG] [Thread-24398] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:09:52.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:09:52.375 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:09:52.376 [DEBUG] [Thread-24398] [transport.py] [_log()] userauth is OK
2025-11-12T23:09:52.376 [DEBUG] [Thread-24398] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:09:52.377 [DEBUG] [Thread-24398] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:09:52.377 [DEBUG] [Thread-24398] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:09:52.377 [DEBUG] [Thread-24398] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:09:52.397 [INFO] [Thread-24398] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:09:52.398 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:09:52.981 [DEBUG] [Thread-24398] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:09:52.981 [DEBUG] [Thread-24398] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:09:52.981 [DEBUG] [Thread-24398] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:09:53.022 [DEBUG] [Thread-24398] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:09:53.022 [DEBUG] [Thread-24398] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:09:53.026 [DEBUG] [Thread-24398] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:09:53.038 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:09:53.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:09:53.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:09:53.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:09:53.047 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:09:53.049 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:09:53.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:09:53.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:09:53.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:09:53.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.881332 -999.00  +16.00   8.93     58   +7.80 1 2 1 1 1     0    0 7.37 -37.14 ZnESW 9.8 8.9 196.8 12.1 16.8 -21.3 16.7 -20.7 16.5 -20.5 16.8 -21.0
2025-11-12T23:09:53.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:09:53.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:09:53.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.881332
2025-11-12T23:09:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:09:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:09:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:09:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:09:53.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:09:53.052 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:09:43', tmtdew=9.19, humidity=54.04, cloud=0.0, wind=13.16, temperature=15.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:09:44', seeing=1.11, atlas_timestamp='2025-11-12T21:09:07.085', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:07:00')
2025-11-12T23:09:53.052 [DEBUG] [Thread-24398] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:09:53.135 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:09:53.148 [DEBUG] [Thread-24401] [transport.py] [_log()] starting thread (client mode): 0x1737c160
2025-11-12T23:09:53.148 [DEBUG] [Thread-24401] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:09:53.162 [DEBUG] [Thread-24401] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:09:53.162 [INFO] [Thread-24401] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:09:53.170 [DEBUG] [Thread-24401] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:09:53.170 [DEBUG] [Thread-24401] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:09:53.170 [DEBUG] [Thread-24401] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:09:53.170 [DEBUG] [Thread-24401] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:09:53.170 [DEBUG] [Thread-24401] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:09:53.170 [DEBUG] [Thread-24401] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:09:53.171 [DEBUG] [Thread-24401] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:09:53.171 [DEBUG] [Thread-24401] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:09:53.171 [DEBUG] [Thread-24401] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:09:53.171 [DEBUG] [Thread-24401] [transport.py] [_log()] client lang: <none>
2025-11-12T23:09:53.171 [DEBUG] [Thread-24401] [transport.py] [_log()] server lang: <none>
2025-11-12T23:09:53.171 [DEBUG] [Thread-24401] [transport.py] [_log()] kex follows: False
2025-11-12T23:09:53.171 [DEBUG] [Thread-24401] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:09:53.171 [DEBUG] [Thread-24401] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:09:53.172 [DEBUG] [Thread-24401] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:09:53.172 [DEBUG] [Thread-24401] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:09:53.172 [DEBUG] [Thread-24401] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:09:53.172 [DEBUG] [Thread-24401] [transport.py] [_log()] Compression: none
2025-11-12T23:09:53.172 [DEBUG] [Thread-24401] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:09:53.228 [DEBUG] [Thread-24401] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:09:53.229 [DEBUG] [Thread-24401] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:09:53.229 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:09:53.230 [DEBUG] [Thread-24401] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:09:53.231 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:09:53.284 [DEBUG] [Thread-24401] [transport.py] [_log()] userauth is OK
2025-11-12T23:09:53.284 [DEBUG] [Thread-24401] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:09:53.285 [DEBUG] [Thread-24401] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:09:53.285 [DEBUG] [Thread-24401] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:09:53.285 [DEBUG] [Thread-24401] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:09:53.303 [INFO] [Thread-24401] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:09:53.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:09:53.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:09:54.112 [DEBUG] [Thread-24401] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:09:54.112 [DEBUG] [Thread-24401] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:09:54.161 [DEBUG] [Thread-24401] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:09:54.161 [DEBUG] [Thread-24401] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:09:54.170 [DEBUG] [Thread-24401] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:09:54.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:09:54.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')
2025-11-12T23:09:54.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:09:54.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:09:54.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:09:54.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:09:54.207 [DEBUG] [Thread-24401] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:10:01.742 [DEBUG] [Thread-24403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:04.698 [DEBUG] [Thread-24404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:05.138 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:09.511 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:09.861 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:09.862 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:19.734 [DEBUG] [Thread-24405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:24.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:10:24.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:10:24.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-11-12T23:10:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 10, 15), 9.16, 54.13, 0.0, 12.3, 15.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:10:24.871 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:10:15
2025-11-12T23:10:24.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:10:25.146 [DEBUG] [Thread-24406] [transport.py] [_log()] starting thread (client mode): 0x1737e170
2025-11-12T23:10:25.147 [DEBUG] [Thread-24406] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:10:25.166 [DEBUG] [Thread-24406] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:10:25.166 [INFO] [Thread-24406] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:10:25.169 [DEBUG] [Thread-24406] [transport.py] [_log()] client lang: <none>
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] server lang: <none>
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] kex follows: False
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] Compression: none
2025-11-12T23:10:25.170 [DEBUG] [Thread-24406] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:10:25.186 [DEBUG] [Thread-24406] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:10:25.186 [DEBUG] [Thread-24406] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:10:25.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:10:25.187 [DEBUG] [Thread-24406] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:10:25.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:10:25.189 [DEBUG] [Thread-24406] [transport.py] [_log()] userauth is OK
2025-11-12T23:10:25.190 [DEBUG] [Thread-24406] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:10:25.190 [DEBUG] [Thread-24406] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:10:25.190 [DEBUG] [Thread-24406] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:10:25.190 [DEBUG] [Thread-24406] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:10:25.214 [INFO] [Thread-24406] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:10:25.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:10:25.814 [DEBUG] [Thread-24406] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:10:25.814 [DEBUG] [Thread-24406] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:10:25.815 [DEBUG] [Thread-24406] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:10:25.855 [DEBUG] [Thread-24406] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:10:25.855 [DEBUG] [Thread-24406] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:10:25.858 [DEBUG] [Thread-24406] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:10:25.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:10:25.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:10:25.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:10:25.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:10:25.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:10:25.880 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:10:25.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:10:25.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:10:25.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:10:25.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.881679 -999.00  +16.00  11.78     58   +7.80 1 2 1 1 1     0    0 7.28 -38.00 ZnESW 10.9 11.8 190.6 12.3 16.8 -21.5 16.6 -21.2 16.5 -20.4 16.8 -21.0
2025-11-12T23:10:25.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:10:25.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:10:25.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.881679
2025-11-12T23:10:25.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:10:25.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:10:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:10:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:10:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:10:25.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:10:15', tmtdew=9.16, humidity=54.13, cloud=0.0, wind=12.3, temperature=15.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:10:16', seeing=1.03, atlas_timestamp='2025-11-12T21:09:37.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:07:00')
2025-11-12T23:10:25.882 [DEBUG] [Thread-24406] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:10:25.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:10:25.979 [DEBUG] [Thread-24409] [transport.py] [_log()] starting thread (client mode): 0x149050c0
2025-11-12T23:10:25.979 [DEBUG] [Thread-24409] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:10:25.998 [DEBUG] [Thread-24409] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:10:25.998 [INFO] [Thread-24409] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:10:26.005 [DEBUG] [Thread-24409] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:10:26.005 [DEBUG] [Thread-24409] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] client lang: <none>
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] server lang: <none>
2025-11-12T23:10:26.006 [DEBUG] [Thread-24409] [transport.py] [_log()] kex follows: False
2025-11-12T23:10:26.007 [DEBUG] [Thread-24409] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:10:26.007 [DEBUG] [Thread-24409] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:10:26.007 [DEBUG] [Thread-24409] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:10:26.007 [DEBUG] [Thread-24409] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:10:26.007 [DEBUG] [Thread-24409] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:10:26.007 [DEBUG] [Thread-24409] [transport.py] [_log()] Compression: none
2025-11-12T23:10:26.007 [DEBUG] [Thread-24409] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:10:26.067 [DEBUG] [Thread-24409] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:10:26.067 [DEBUG] [Thread-24409] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:10:26.068 [DEBUG] [Thread-24409] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:10:26.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:10:26.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:10:26.123 [DEBUG] [Thread-24409] [transport.py] [_log()] userauth is OK
2025-11-12T23:10:26.123 [DEBUG] [Thread-24409] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:10:26.124 [DEBUG] [Thread-24409] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:10:26.124 [DEBUG] [Thread-24409] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:10:26.124 [DEBUG] [Thread-24409] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:10:26.142 [INFO] [Thread-24409] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:10:26.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:10:26.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:10:26.937 [DEBUG] [Thread-24409] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:10:26.937 [DEBUG] [Thread-24409] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:10:26.984 [DEBUG] [Thread-24409] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:10:26.984 [DEBUG] [Thread-24409] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:10:26.993 [DEBUG] [Thread-24409] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:10:27.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:10:27.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:10:27.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-11-12T23:10:27.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:10:27.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:10:27.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:10:27.028 [DEBUG] [Thread-24409] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:10:28.899 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:33.277 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:34.768 [DEBUG] [Thread-24411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:40.225 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:44.604 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:49.817 [DEBUG] [Thread-24412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:10:57.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:10:57.026 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:10:57.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:10:57.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 10, 47), 9.01, 54.79, 0.0, 13.57, 15.69, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:10:57.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:10:47
2025-11-12T23:10:57.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:10:57.937 [DEBUG] [Thread-24413] [transport.py] [_log()] starting thread (client mode): 0x1737e440
2025-11-12T23:10:57.937 [DEBUG] [Thread-24413] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:10:57.958 [DEBUG] [Thread-24413] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:10:57.958 [INFO] [Thread-24413] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:10:57.961 [DEBUG] [Thread-24413] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:10:57.961 [DEBUG] [Thread-24413] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:10:57.961 [DEBUG] [Thread-24413] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] client lang: <none>
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] server lang: <none>
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] kex follows: False
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] Compression: none
2025-11-12T23:10:57.962 [DEBUG] [Thread-24413] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:10:57.980 [DEBUG] [Thread-24413] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:10:57.980 [DEBUG] [Thread-24413] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:10:57.981 [DEBUG] [Thread-24413] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:10:57.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:10:57.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:10:57.983 [DEBUG] [Thread-24413] [transport.py] [_log()] userauth is OK
2025-11-12T23:10:57.983 [DEBUG] [Thread-24413] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:10:57.983 [DEBUG] [Thread-24413] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:10:57.983 [DEBUG] [Thread-24413] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:10:57.983 [DEBUG] [Thread-24413] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:10:58.004 [INFO] [Thread-24413] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:10:58.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:10:58.603 [DEBUG] [Thread-24413] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:10:58.604 [DEBUG] [Thread-24413] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:10:58.604 [DEBUG] [Thread-24413] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:10:58.645 [DEBUG] [Thread-24413] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:10:58.645 [DEBUG] [Thread-24413] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:10:58.648 [DEBUG] [Thread-24413] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:10:58.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:10:58.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:10:58.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:10:58.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:10:58.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:10:58.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:10:58.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:10:58.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:10:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:10:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.882373 -999.00  +15.90   5.41     59   +7.90 1 2 1 1 1     0    0 7.35 -35.02 Z.ESW 13.4 5.4 175.7 13.4 16.8 -21.4 16.6 -20.9 16.4 -20.5 16.7 -21.0
2025-11-12T23:10:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:10:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:10:58.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.882373
2025-11-12T23:10:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:10:58.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:10:58.672 [DEBUG] [Thread-24413] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:10:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:10:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:10:58.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:10:58.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:10:47', tmtdew=9.01, humidity=54.79, cloud=0.0, wind=13.57, temperature=15.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:10:48', seeing=1.03, atlas_timestamp='2025-11-12T21:10:37.027', atlas_cloud=2, atlas_rain=1, zp_data=[0.6282499999999995, 0.5762500000000008, 0.6112500000000001, 0.567499999999999, 0.6475, 0.7062500000000007, 0.6059999999999999, 0.5372500000000002, 0.4944999999999986, 0.39199999999999946, 0.6172499999999994, 0.6114999999999995, 0.7039999999999997, 0.6032499999999992, 0.8489999999999993, 0.6659999999999995, 0.6452499999999999, 0.5785, 0.5589999999999993, 0.4192499999999981, 0.8484999999999987, 0.7592499999999989, 1.1482500000000009, 1.09375, 1.2649999999999988, 0.36850000000000005, 0.3647500000000008, 0.5085000000000006, 0.7730000000000006, 1.2310000000000016, 1.791500000000001, 1.7445000000000004, 1.210749999999999], zp_timestamp='2025-11-12T21:07:00')
2025-11-12T23:10:58.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:10:58.775 [DEBUG] [Thread-24416] [transport.py] [_log()] starting thread (client mode): 0x173996c0
2025-11-12T23:10:58.776 [DEBUG] [Thread-24416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:10:58.789 [DEBUG] [Thread-24416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:10:58.789 [INFO] [Thread-24416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:10:58.797 [DEBUG] [Thread-24416] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:10:58.797 [DEBUG] [Thread-24416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:10:58.797 [DEBUG] [Thread-24416] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:10:58.797 [DEBUG] [Thread-24416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:10:58.797 [DEBUG] [Thread-24416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] client lang: <none>
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] server lang: <none>
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] kex follows: False
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] Compression: none
2025-11-12T23:10:58.798 [DEBUG] [Thread-24416] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:10:58.860 [DEBUG] [Thread-24416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:10:58.861 [DEBUG] [Thread-24416] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:10:58.861 [DEBUG] [Thread-24416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:10:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:10:58.862 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:10:58.916 [DEBUG] [Thread-24416] [transport.py] [_log()] userauth is OK
2025-11-12T23:10:58.916 [DEBUG] [Thread-24416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:10:58.916 [DEBUG] [Thread-24416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:10:58.916 [DEBUG] [Thread-24416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:10:58.916 [DEBUG] [Thread-24416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:10:58.934 [INFO] [Thread-24416] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:10:58.934 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:10:58.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:10:59.767 [DEBUG] [Thread-24416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:10:59.767 [DEBUG] [Thread-24416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:10:59.816 [DEBUG] [Thread-24416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:10:59.816 [DEBUG] [Thread-24416] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:10:59.825 [DEBUG] [Thread-24416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:10:59.834 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:10:59.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-11-12T23:10: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') -> 00000000
2025-11-12T23:10:59.855 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:10:59.855 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:10:59.855 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:10:59.865 [DEBUG] [Thread-24416] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:11:01.797 [DEBUG] [Thread-24418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:11:04.850 [DEBUG] [Thread-24419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:11:10.065 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:11:10.066 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:11:19.904 [DEBUG] [Thread-24420 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:11:29.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:11:29.872 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:11:29.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-11-12T23:11:30.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 11, 19), 8.91, 55.17, 0.0, 14.13, 15.71, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:11:30.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:11:19
2025-11-12T23:11:30.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:11:30.757 [DEBUG] [Thread-24421] [transport.py] [_log()] starting thread (client mode): 0x1737eb90
2025-11-12T23:11:30.757 [DEBUG] [Thread-24421] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:11:30.778 [DEBUG] [Thread-24421] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:11:30.778 [INFO] [Thread-24421] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] client lang: <none>
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] server lang: <none>
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] kex follows: False
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] Compression: none
2025-11-12T23:11:30.781 [DEBUG] [Thread-24421] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:11:30.799 [DEBUG] [Thread-24421] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:11:30.799 [DEBUG] [Thread-24421] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:11:30.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:11:30.800 [DEBUG] [Thread-24421] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:11:30.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:11:30.803 [DEBUG] [Thread-24421] [transport.py] [_log()] userauth is OK
2025-11-12T23:11:30.803 [DEBUG] [Thread-24421] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:11:30.803 [DEBUG] [Thread-24421] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:11:30.803 [DEBUG] [Thread-24421] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:11:30.803 [DEBUG] [Thread-24421] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:11:30.821 [INFO] [Thread-24421] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:11:30.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:11:31.448 [DEBUG] [Thread-24421] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:11:31.449 [DEBUG] [Thread-24421] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:11:31.449 [DEBUG] [Thread-24421] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:11:31.490 [DEBUG] [Thread-24421] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:11:31.490 [DEBUG] [Thread-24421] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:11:31.493 [DEBUG] [Thread-24421] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:11:31.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:11:31.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:11:31.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:11:31.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:11:31.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:11:31.520 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:11:31.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:11:31.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:11:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:11:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.882721 -999.00  +15.90  14.13     59   +8.00 1 2 1 1 1     0    0 7.37 -35.94 ZneSW 11.6 14.1 198.0 17.8 16.8 -21.4 16.6 -20.8 16.4 -20.4 16.7 -21.0
2025-11-12T23:11:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:11:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:11:31.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.882721
2025-11-12T23:11:31.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:11:31.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:11:31.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:11:31.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:11:31.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:11:31.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:11:19', tmtdew=8.91, humidity=55.17, cloud=0.0, wind=14.13, temperature=15.71, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:11:20', seeing=0.97, atlas_timestamp='2025-11-12T21:11:07.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:10:00')
2025-11-12T23:11:31.523 [DEBUG] [Thread-24421] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:11:31.607 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:11:31.621 [DEBUG] [Thread-24424] [transport.py] [_log()] starting thread (client mode): 0x17347d00
2025-11-12T23:11:31.621 [DEBUG] [Thread-24424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:11:31.637 [DEBUG] [Thread-24424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:11:31.637 [INFO] [Thread-24424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:11:31.644 [DEBUG] [Thread-24424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] client lang: <none>
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] server lang: <none>
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] kex follows: False
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:11:31.645 [DEBUG] [Thread-24424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:11:31.646 [DEBUG] [Thread-24424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:11:31.646 [DEBUG] [Thread-24424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:11:31.646 [DEBUG] [Thread-24424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:11:31.646 [DEBUG] [Thread-24424] [transport.py] [_log()] Compression: none
2025-11-12T23:11:31.646 [DEBUG] [Thread-24424] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:11:31.704 [DEBUG] [Thread-24424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:11:31.705 [DEBUG] [Thread-24424] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:11:31.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:11:31.706 [DEBUG] [Thread-24424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:11:31.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:11:31.764 [DEBUG] [Thread-24424] [transport.py] [_log()] userauth is OK
2025-11-12T23:11:31.764 [DEBUG] [Thread-24424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:11:31.764 [DEBUG] [Thread-24424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:11:31.764 [DEBUG] [Thread-24424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:11:31.764 [DEBUG] [Thread-24424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:11:31.788 [INFO] [Thread-24424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:11:31.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:11:31.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:11:32.598 [DEBUG] [Thread-24424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:11:32.598 [DEBUG] [Thread-24424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:11:32.646 [DEBUG] [Thread-24424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:11:32.646 [DEBUG] [Thread-24424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:11:32.656 [DEBUG] [Thread-24424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:11:32.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:11:32.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-11-12T23:11:32.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-11-12T23:11:32.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:11:32.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:11:32.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:11:32.692 [DEBUG] [Thread-24424] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:11:34.939 [DEBUG] [Thread-24426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:11:50.003 [DEBUG] [Thread-24427 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:11:52.261 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:11:56.357 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:12:01.849 [DEBUG] [Thread-24428 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:12:02.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:12:02.714 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:12:02.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-11-12T23:12:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 11, 51), 8.78, 55.99, 0.0, 14.63, 15.64, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:12:03.371 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:11:51
2025-11-12T23:12:03.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:12:03.651 [DEBUG] [Thread-24429] [transport.py] [_log()] starting thread (client mode): 0x1737fb20
2025-11-12T23:12:03.651 [DEBUG] [Thread-24429] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:12:03.671 [DEBUG] [Thread-24429] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:12:03.671 [INFO] [Thread-24429] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] client lang: <none>
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] server lang: <none>
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] kex follows: False
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] Compression: none
2025-11-12T23:12:03.674 [DEBUG] [Thread-24429] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:12:03.681 [DEBUG] [Thread-24429] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:12:03.681 [DEBUG] [Thread-24429] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:12:03.681 [DEBUG] [Thread-24429] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:12:03.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:12:03.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:12:03.682 [DEBUG] [Thread-24429] [transport.py] [_log()] userauth is OK
2025-11-12T23:12:03.682 [DEBUG] [Thread-24429] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:12:03.682 [DEBUG] [Thread-24429] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:12:03.682 [DEBUG] [Thread-24429] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:12:03.682 [DEBUG] [Thread-24429] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:12:03.698 [INFO] [Thread-24429] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:12:03.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:12:04.345 [DEBUG] [Thread-24429] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:12:04.345 [DEBUG] [Thread-24429] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:12:04.345 [DEBUG] [Thread-24429] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:12:04.386 [DEBUG] [Thread-24429] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:12:04.386 [DEBUG] [Thread-24429] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:12:04.390 [DEBUG] [Thread-24429] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:12:04.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:12:04.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:12:04.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:12:04.405 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:12:04.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:12:04.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:12:04.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:12:04.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:12:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:12:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.883067 -999.00  +15.90  15.90     60   +8.20 1 2 1 1 1     0    0 7.33 -35.80 ZneSW 13.6 15.9 199.0 20.3 16.7 -21.4 16.6 -21.0 16.4 -20.4 16.7 -21.0
2025-11-12T23:12:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:12:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:12:04.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.883067
2025-11-12T23:12:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:12:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:12:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:12:04.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:12:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:12:04.416 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:11:51', tmtdew=8.78, humidity=55.99, cloud=0.0, wind=14.63, temperature=15.64, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:11:52', seeing=0.9, atlas_timestamp='2025-11-12T21:11:36.989', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:10:00')
2025-11-12T23:12:04.416 [DEBUG] [Thread-24429] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:12:04.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:12:04.510 [DEBUG] [Thread-24432] [transport.py] [_log()] starting thread (client mode): 0x14904b50
2025-11-12T23:12:04.510 [DEBUG] [Thread-24432] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:12:04.524 [DEBUG] [Thread-24432] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:12:04.525 [INFO] [Thread-24432] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:12:04.532 [DEBUG] [Thread-24432] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:12:04.532 [DEBUG] [Thread-24432] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:12:04.532 [DEBUG] [Thread-24432] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:12:04.532 [DEBUG] [Thread-24432] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:12:04.532 [DEBUG] [Thread-24432] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:12:04.532 [DEBUG] [Thread-24432] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:12:04.532 [DEBUG] [Thread-24432] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] client lang: <none>
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] server lang: <none>
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] kex follows: False
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] Compression: none
2025-11-12T23:12:04.533 [DEBUG] [Thread-24432] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:12:04.592 [DEBUG] [Thread-24432] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:12:04.592 [DEBUG] [Thread-24432] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:12:04.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:12:04.593 [DEBUG] [Thread-24432] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:12:04.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:12:04.651 [DEBUG] [Thread-24432] [transport.py] [_log()] userauth is OK
2025-11-12T23:12:04.651 [DEBUG] [Thread-24432] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:12:04.651 [DEBUG] [Thread-24432] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:12:04.651 [DEBUG] [Thread-24432] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:12:04.652 [DEBUG] [Thread-24432] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:12:04.671 [INFO] [Thread-24432] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:12:04.672 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:12:04.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:12:05.036 [DEBUG] [Thread-24434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:12:05.512 [DEBUG] [Thread-24432] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:12:05.512 [DEBUG] [Thread-24432] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:12:05.561 [DEBUG] [Thread-24432] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:12:05.561 [DEBUG] [Thread-24432] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:12:05.570 [DEBUG] [Thread-24432] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:12:05.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:12:05.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-11-12T23:12:05.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:12:05.596 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:12:05.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:12:05.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:12:05.605 [DEBUG] [Thread-24432] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:12:10.269 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:12:10.271 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:12:20.087 [DEBUG] [Thread-24435 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:12:35.121 [DEBUG] [Thread-24436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:12:35.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:12:35.627 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:12:35.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-11-12T23:12:36.277 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 12, 24), 8.72, 56.22, 0.0, 13.89, 15.63, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:12:36.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:12:24
2025-11-12T23:12:36.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:12:36.546 [DEBUG] [Thread-24437] [transport.py] [_log()] starting thread (client mode): 0x14907520
2025-11-12T23:12:36.547 [DEBUG] [Thread-24437] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:12:36.571 [DEBUG] [Thread-24437] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:12:36.571 [INFO] [Thread-24437] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] client lang: <none>
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] server lang: <none>
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] kex follows: False
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:12:36.575 [DEBUG] [Thread-24437] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:12:36.576 [DEBUG] [Thread-24437] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:12:36.576 [DEBUG] [Thread-24437] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:12:36.576 [DEBUG] [Thread-24437] [transport.py] [_log()] Compression: none
2025-11-12T23:12:36.576 [DEBUG] [Thread-24437] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:12:36.593 [DEBUG] [Thread-24437] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:12:36.594 [DEBUG] [Thread-24437] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:12:36.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:12:36.595 [DEBUG] [Thread-24437] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:12:36.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:12:36.597 [DEBUG] [Thread-24437] [transport.py] [_log()] userauth is OK
2025-11-12T23:12:36.597 [DEBUG] [Thread-24437] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:12:36.597 [DEBUG] [Thread-24437] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:12:36.597 [DEBUG] [Thread-24437] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:12:36.597 [DEBUG] [Thread-24437] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:12:36.622 [INFO] [Thread-24437] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:12:36.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:12:37.282 [DEBUG] [Thread-24437] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:12:37.283 [DEBUG] [Thread-24437] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:12:37.283 [DEBUG] [Thread-24437] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:12:37.324 [DEBUG] [Thread-24437] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:12:37.324 [DEBUG] [Thread-24437] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:12:37.326 [DEBUG] [Thread-24437] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:12:37.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:12:37.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:12:37.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:12:37.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:12:37.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:12:37.342 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:12:37.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.883415 -999.00  +15.80  16.89     60   +8.30 1 2 1 1 1     0    0 7.30 -37.48 ZnESW 9.5 16.9 211.6 19.4 16.7 -21.4 16.6 -20.6 16.4 -20.5 16.6 -20.9
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.883415
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:12:37.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:12:24', tmtdew=8.72, humidity=56.22, cloud=0.0, wind=13.89, temperature=15.63, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:12:24', seeing=0.9, atlas_timestamp='2025-11-12T21:12:07.056', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:10:00')
2025-11-12T23:12:37.344 [DEBUG] [Thread-24437] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:12:37.419 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:12:37.433 [DEBUG] [Thread-24440] [transport.py] [_log()] starting thread (client mode): 0x1737df30
2025-11-12T23:12:37.433 [DEBUG] [Thread-24440] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:12:37.448 [DEBUG] [Thread-24440] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:12:37.448 [INFO] [Thread-24440] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] client lang: <none>
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] server lang: <none>
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] kex follows: False
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:12:37.455 [DEBUG] [Thread-24440] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:12:37.456 [DEBUG] [Thread-24440] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:12:37.456 [DEBUG] [Thread-24440] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:12:37.456 [DEBUG] [Thread-24440] [transport.py] [_log()] Compression: none
2025-11-12T23:12:37.456 [DEBUG] [Thread-24440] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:12:37.514 [DEBUG] [Thread-24440] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:12:37.514 [DEBUG] [Thread-24440] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:12:37.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:12:37.515 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:12:37.515 [DEBUG] [Thread-24440] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:12:37.575 [DEBUG] [Thread-24440] [transport.py] [_log()] userauth is OK
2025-11-12T23:12:37.575 [DEBUG] [Thread-24440] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:12:37.575 [DEBUG] [Thread-24440] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:12:37.575 [DEBUG] [Thread-24440] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:12:37.575 [DEBUG] [Thread-24440] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:12:37.593 [INFO] [Thread-24440] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:12:37.593 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:12:37.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:12:38.431 [DEBUG] [Thread-24440] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:12:38.431 [DEBUG] [Thread-24440] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:12:38.479 [DEBUG] [Thread-24440] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:12:38.479 [DEBUG] [Thread-24440] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:12:38.488 [DEBUG] [Thread-24440] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:12:38.496 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:12:38.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-11-12T23:12:38.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-11-12T23:12:38.512 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:12:38.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:12:38.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:12:38.520 [DEBUG] [Thread-24440] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:12:50.153 [DEBUG] [Thread-24442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:01.906 [DEBUG] [Thread-24443 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:05.204 [DEBUG] [Thread-24444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:08.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:13:08.530 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:13:08.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-11-12T23:13:09.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 12, 55), 8.54, 56.84, 0.0, 15.63, 15.66, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:13:09.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:12:55
2025-11-12T23:13:09.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:13:09.446 [DEBUG] [Thread-24445] [transport.py] [_log()] starting thread (client mode): 0x1737d3f0
2025-11-12T23:13:09.447 [DEBUG] [Thread-24445] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:13:09.468 [DEBUG] [Thread-24445] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:13:09.468 [INFO] [Thread-24445] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] client lang: <none>
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] server lang: <none>
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] kex follows: False
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:13:09.471 [DEBUG] [Thread-24445] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:13:09.472 [DEBUG] [Thread-24445] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:13:09.472 [DEBUG] [Thread-24445] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:13:09.472 [DEBUG] [Thread-24445] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:13:09.472 [DEBUG] [Thread-24445] [transport.py] [_log()] Compression: none
2025-11-12T23:13:09.472 [DEBUG] [Thread-24445] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:13:09.488 [DEBUG] [Thread-24445] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:13:09.489 [DEBUG] [Thread-24445] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:13:09.489 [DEBUG] [Thread-24445] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:13:09.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:13:09.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:13:09.492 [DEBUG] [Thread-24445] [transport.py] [_log()] userauth is OK
2025-11-12T23:13:09.492 [DEBUG] [Thread-24445] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:13:09.492 [DEBUG] [Thread-24445] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:13:09.492 [DEBUG] [Thread-24445] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:13:09.493 [DEBUG] [Thread-24445] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:13:09.511 [INFO] [Thread-24445] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:13:09.512 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:13:10.113 [DEBUG] [Thread-24445] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:13:10.113 [DEBUG] [Thread-24445] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:13:10.114 [DEBUG] [Thread-24445] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:13:10.154 [DEBUG] [Thread-24445] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:13:10.154 [DEBUG] [Thread-24445] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:13:10.158 [DEBUG] [Thread-24445] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:13:10.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:13:10.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:13:10.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:13:10.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:13:10.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:13:10.182 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:13:10.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:13:10.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:13:10.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:13:10.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.883762 -999.00  +15.80  13.20     60   +8.30 1 2 1 1 1     0    0 7.22 -37.98 ZnESW 7.6 13.2 189.8 15.6 16.7 -21.3 16.5 -21.0 16.4 -20.5 16.7 -21.1
2025-11-12T23:13:10.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:13:10.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:13:10.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.883762
2025-11-12T23:13:10.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:13:10.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:13:10.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:13:10.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:13:10.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:13:10.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:12:55', tmtdew=8.54, humidity=56.84, cloud=0.0, wind=15.63, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:12:56', seeing=0.75, atlas_timestamp='2025-11-12T21:12:37.037', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:10:00')
2025-11-12T23:13:10.186 [DEBUG] [Thread-24445] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:13:10.259 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:13:10.271 [DEBUG] [Thread-24448] [transport.py] [_log()] starting thread (client mode): 0x17346a40
2025-11-12T23:13:10.271 [DEBUG] [Thread-24448] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:13:10.286 [DEBUG] [Thread-24448] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:13:10.286 [INFO] [Thread-24448] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:13:10.293 [DEBUG] [Thread-24448] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] client lang: <none>
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] server lang: <none>
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] kex follows: False
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] Compression: none
2025-11-12T23:13:10.294 [DEBUG] [Thread-24448] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:13:10.352 [DEBUG] [Thread-24448] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:13:10.353 [DEBUG] [Thread-24448] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:13:10.353 [DEBUG] [Thread-24448] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:13:10.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:13:10.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:13:10.408 [DEBUG] [Thread-24448] [transport.py] [_log()] userauth is OK
2025-11-12T23:13:10.409 [DEBUG] [Thread-24448] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:13:10.409 [DEBUG] [Thread-24448] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:13:10.409 [DEBUG] [Thread-24448] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:13:10.409 [DEBUG] [Thread-24448] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:13:10.428 [INFO] [Thread-24448] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:13:10.428 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:13:10.429 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:13:10.475 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:10.476 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:11.252 [DEBUG] [Thread-24448] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:13:11.253 [DEBUG] [Thread-24448] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:13:11.300 [DEBUG] [Thread-24448] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:13:11.301 [DEBUG] [Thread-24448] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:13:11.310 [DEBUG] [Thread-24448] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:13:11.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:13:11.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-11-12T23:13:11.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-11-12T23:13:11.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:13:11.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:13:11.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:13:11.349 [DEBUG] [Thread-24448] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:13:20.239 [DEBUG] [Thread-24450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:20.690 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:26.998 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:31.240 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:35.278 [DEBUG] [Thread-24451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:13:41.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:13:41.343 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:13:41.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:13:41.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 13, 28), 8.56, 56.74, 0.0, 13.52, 15.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:13:41.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:13:28
2025-11-12T23:13:42.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:13:42.252 [DEBUG] [Thread-24452] [transport.py] [_log()] starting thread (client mode): 0x17347d00
2025-11-12T23:13:42.252 [DEBUG] [Thread-24452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:13:42.269 [DEBUG] [Thread-24452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:13:42.270 [INFO] [Thread-24452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:13:42.271 [DEBUG] [Thread-24452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] client lang: <none>
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] server lang: <none>
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] kex follows: False
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] Compression: none
2025-11-12T23:13:42.272 [DEBUG] [Thread-24452] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:13:42.281 [DEBUG] [Thread-24452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:13:42.281 [DEBUG] [Thread-24452] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:13:42.281 [DEBUG] [Thread-24452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:13:42.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:13:42.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:13:42.283 [DEBUG] [Thread-24452] [transport.py] [_log()] userauth is OK
2025-11-12T23:13:42.283 [DEBUG] [Thread-24452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:13:42.283 [DEBUG] [Thread-24452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:13:42.283 [DEBUG] [Thread-24452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:13:42.283 [DEBUG] [Thread-24452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:13:42.299 [INFO] [Thread-24452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:13:42.300 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:13:42.986 [DEBUG] [Thread-24452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:13:42.986 [DEBUG] [Thread-24452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:13:42.987 [DEBUG] [Thread-24452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:13:43.027 [DEBUG] [Thread-24452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:13:43.027 [DEBUG] [Thread-24452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:13:43.031 [DEBUG] [Thread-24452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:13:43.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:13:43.043 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:13:43.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:13:43.046 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:13:43.052 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:13:43.054 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:13:43.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:13:43.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:13:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:13:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.884110 -999.00  +15.80  11.97     60   +8.20 1 2 1 1 1     0    0 7.29 -39.35 ZnESW 11.0 12.0 205.9 13.8 16.7 -21.4 16.5 -20.9 16.3 -20.4 16.7 -21.0
2025-11-12T23:13:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:13:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:13:43.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.884110
2025-11-12T23:13:43.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:13:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:13:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:13:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:13:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:13:43.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:13:28', tmtdew=8.56, humidity=56.74, cloud=0.0, wind=13.52, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:13:28', seeing=0.85, atlas_timestamp='2025-11-12T21:13:07.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:10:00')
2025-11-12T23:13:43.057 [DEBUG] [Thread-24452] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:13:43.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:13:43.153 [DEBUG] [Thread-24455] [transport.py] [_log()] starting thread (client mode): 0x11f02080
2025-11-12T23:13:43.154 [DEBUG] [Thread-24455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:13:43.168 [DEBUG] [Thread-24455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:13:43.168 [INFO] [Thread-24455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:13:43.175 [DEBUG] [Thread-24455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:13:43.175 [DEBUG] [Thread-24455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:13:43.175 [DEBUG] [Thread-24455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] client lang: <none>
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] server lang: <none>
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] kex follows: False
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] Compression: none
2025-11-12T23:13:43.176 [DEBUG] [Thread-24455] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:13:43.232 [DEBUG] [Thread-24455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:13:43.232 [DEBUG] [Thread-24455] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:13:43.233 [DEBUG] [Thread-24455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:13:43.233 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:13:43.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:13:43.288 [DEBUG] [Thread-24455] [transport.py] [_log()] userauth is OK
2025-11-12T23:13:43.288 [DEBUG] [Thread-24455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:13:43.288 [DEBUG] [Thread-24455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:13:43.289 [DEBUG] [Thread-24455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:13:43.289 [DEBUG] [Thread-24455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:13:43.306 [INFO] [Thread-24455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:13:43.307 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:13:43.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:13:44.103 [DEBUG] [Thread-24455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:13:44.103 [DEBUG] [Thread-24455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:13:44.150 [DEBUG] [Thread-24455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:13:44.150 [DEBUG] [Thread-24455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:13:44.159 [DEBUG] [Thread-24455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:13:44.168 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:13:44.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-11-12T23:13:44.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-11-12T23:13:44.185 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:13:44.185 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:13:44.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:13:44.194 [DEBUG] [Thread-24455] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:13:50.316 [DEBUG] [Thread-24457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:14:01.958 [DEBUG] [Thread-24458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:14:05.361 [DEBUG] [Thread-24459 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:14:10.677 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:14:10.678 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:14:14.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:14:14.216 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:14:14.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-11-12T23:14:14.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 13, 28), 8.56, 56.74, 0.0, 13.52, 15.61, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:14:14.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:13:28
2025-11-12T23:14:14.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:14:15.115 [DEBUG] [Thread-24460] [transport.py] [_log()] starting thread (client mode): 0x14946080
2025-11-12T23:14:15.115 [DEBUG] [Thread-24460] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:14:15.135 [DEBUG] [Thread-24460] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:14:15.135 [INFO] [Thread-24460] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] client lang: <none>
2025-11-12T23:14:15.136 [DEBUG] [Thread-24460] [transport.py] [_log()] server lang: <none>
2025-11-12T23:14:15.137 [DEBUG] [Thread-24460] [transport.py] [_log()] kex follows: False
2025-11-12T23:14:15.137 [DEBUG] [Thread-24460] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:14:15.137 [DEBUG] [Thread-24460] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:14:15.137 [DEBUG] [Thread-24460] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:14:15.137 [DEBUG] [Thread-24460] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:14:15.137 [DEBUG] [Thread-24460] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:14:15.137 [DEBUG] [Thread-24460] [transport.py] [_log()] Compression: none
2025-11-12T23:14:15.137 [DEBUG] [Thread-24460] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:14:15.148 [DEBUG] [Thread-24460] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:14:15.149 [DEBUG] [Thread-24460] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:14:15.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:14:15.150 [DEBUG] [Thread-24460] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:14:15.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:14:15.152 [DEBUG] [Thread-24460] [transport.py] [_log()] userauth is OK
2025-11-12T23:14:15.153 [DEBUG] [Thread-24460] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:14:15.153 [DEBUG] [Thread-24460] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:14:15.153 [DEBUG] [Thread-24460] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:14:15.153 [DEBUG] [Thread-24460] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:14:15.179 [INFO] [Thread-24460] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:14:15.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:14:15.747 [DEBUG] [Thread-24460] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:14:15.747 [DEBUG] [Thread-24460] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:14:15.748 [DEBUG] [Thread-24460] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:14:15.789 [DEBUG] [Thread-24460] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:14:15.789 [DEBUG] [Thread-24460] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:14:15.792 [DEBUG] [Thread-24460] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:14:15.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:14:15.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:14:15.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:14:15.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:14:15.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:14:15.816 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:14:15.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:14:15.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:14:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:14:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.884804 -999.00  +15.70  11.96     61   +8.20 1 2 1 1 1     0    0 7.22 -42.06 ZnESW 12.7 12.0 188.6 13.9 16.7 -21.3 16.5 -21.0 16.3 -20.4 16.6 -21.0
2025-11-12T23:14:15.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:14:15.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:14:15.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.884804
2025-11-12T23:14:15.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:14:15.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:14:15.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:14:15.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:14:15.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:14:15.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:13:28', tmtdew=8.56, humidity=56.74, cloud=0.0, wind=13.52, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:14:00', seeing=0.85, atlas_timestamp='2025-11-12T21:14:07.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:10:00')
2025-11-12T23:14:15.819 [DEBUG] [Thread-24460] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:14:15.903 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:14:15.917 [DEBUG] [Thread-24463] [transport.py] [_log()] starting thread (client mode): 0x173985e0
2025-11-12T23:14:15.917 [DEBUG] [Thread-24463] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:14:15.931 [DEBUG] [Thread-24463] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:14:15.932 [INFO] [Thread-24463] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:14:15.939 [DEBUG] [Thread-24463] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:14:15.940 [DEBUG] [Thread-24463] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:14:15.940 [DEBUG] [Thread-24463] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:14:15.940 [DEBUG] [Thread-24463] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:14:15.940 [DEBUG] [Thread-24463] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:14:15.940 [DEBUG] [Thread-24463] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:14:15.940 [DEBUG] [Thread-24463] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:14:15.940 [DEBUG] [Thread-24463] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:14:15.940 [DEBUG] [Thread-24463] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:14:15.941 [DEBUG] [Thread-24463] [transport.py] [_log()] client lang: <none>
2025-11-12T23:14:15.941 [DEBUG] [Thread-24463] [transport.py] [_log()] server lang: <none>
2025-11-12T23:14:15.941 [DEBUG] [Thread-24463] [transport.py] [_log()] kex follows: False
2025-11-12T23:14:15.941 [DEBUG] [Thread-24463] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:14:15.941 [DEBUG] [Thread-24463] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:14:15.941 [DEBUG] [Thread-24463] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:14:15.941 [DEBUG] [Thread-24463] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:14:15.941 [DEBUG] [Thread-24463] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:14:15.942 [DEBUG] [Thread-24463] [transport.py] [_log()] Compression: none
2025-11-12T23:14:15.942 [DEBUG] [Thread-24463] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:14:16.000 [DEBUG] [Thread-24463] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:14:16.001 [DEBUG] [Thread-24463] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:14:16.002 [DEBUG] [Thread-24463] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:14:16.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:14:16.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:14:16.056 [DEBUG] [Thread-24463] [transport.py] [_log()] userauth is OK
2025-11-12T23:14:16.056 [DEBUG] [Thread-24463] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:14:16.056 [DEBUG] [Thread-24463] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:14:16.056 [DEBUG] [Thread-24463] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:14:16.057 [DEBUG] [Thread-24463] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:14:16.075 [INFO] [Thread-24463] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:14:16.075 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:14:16.076 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:14:16.908 [DEBUG] [Thread-24463] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:14:16.909 [DEBUG] [Thread-24463] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:14:16.956 [DEBUG] [Thread-24463] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:14:16.957 [DEBUG] [Thread-24463] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:14:16.966 [DEBUG] [Thread-24463] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:14:16.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:14:16.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-11-12T23:14:16.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:14:16.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:14:16.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:14:16.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:14:17.003 [DEBUG] [Thread-24463] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:14:20.400 [DEBUG] [Thread-24465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:14:35.446 [DEBUG] [Thread-24466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:14:47.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:14:47.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:14:47.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-11-12T23:14:47.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 14, 31), 8.34, 57.49, 0.0, 16.73, 15.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:14:47.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:14:31
2025-11-12T23:14:47.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:14:47.920 [DEBUG] [Thread-24467] [transport.py] [_log()] starting thread (client mode): 0x1737c160
2025-11-12T23:14:47.920 [DEBUG] [Thread-24467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:14:47.938 [DEBUG] [Thread-24467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:14:47.939 [INFO] [Thread-24467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:14:47.939 [DEBUG] [Thread-24467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] client lang: <none>
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] server lang: <none>
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] kex follows: False
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] Compression: none
2025-11-12T23:14:47.940 [DEBUG] [Thread-24467] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:14:47.950 [DEBUG] [Thread-24467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:14:47.950 [DEBUG] [Thread-24467] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:14:47.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:14:47.952 [DEBUG] [Thread-24467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:14:47.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:14:47.953 [DEBUG] [Thread-24467] [transport.py] [_log()] userauth is OK
2025-11-12T23:14:47.954 [DEBUG] [Thread-24467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:14:47.954 [DEBUG] [Thread-24467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:14:47.954 [DEBUG] [Thread-24467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:14:47.954 [DEBUG] [Thread-24467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:14:47.981 [INFO] [Thread-24467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:14:47.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:14:48.580 [DEBUG] [Thread-24467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:14:48.580 [DEBUG] [Thread-24467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:14:48.581 [DEBUG] [Thread-24467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:14:48.620 [DEBUG] [Thread-24467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:14:48.621 [DEBUG] [Thread-24467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:14:48.624 [DEBUG] [Thread-24467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:14:48.631 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:14:48.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:14:48.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:14:48.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:14:48.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:14:48.641 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:14:48.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:14:48.642 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:14:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:14:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.885151 -999.00  +15.70   8.91     61   +8.30 1 2 1 1 1     0    0 6.99 -44.14 ZnESW 10.4 8.9 193.2 16.6 16.6 -21.5 16.4 -21.1 16.3 -20.4 16.6 -20.9
2025-11-12T23:14:48.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:14:48.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:14:48.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.885151
2025-11-12T23:14:48.643 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:14:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:14:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:14:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:14:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:14:48.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:14:31', tmtdew=8.34, humidity=57.49, cloud=0.0, wind=16.73, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:14:32', seeing=0.94, atlas_timestamp='2025-11-12T21:14:37.046', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:13:00')
2025-11-12T23:14:48.644 [DEBUG] [Thread-24467] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:14:48.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:14:48.742 [DEBUG] [Thread-24470] [transport.py] [_log()] starting thread (client mode): 0x14906e60
2025-11-12T23:14:48.743 [DEBUG] [Thread-24470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:14:48.757 [DEBUG] [Thread-24470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:14:48.757 [INFO] [Thread-24470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:14:48.764 [DEBUG] [Thread-24470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:14:48.764 [DEBUG] [Thread-24470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:14:48.764 [DEBUG] [Thread-24470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:14:48.764 [DEBUG] [Thread-24470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] client lang: <none>
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] server lang: <none>
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] kex follows: False
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] Compression: none
2025-11-12T23:14:48.765 [DEBUG] [Thread-24470] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:14:48.829 [DEBUG] [Thread-24470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:14:48.829 [DEBUG] [Thread-24470] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:14:48.830 [DEBUG] [Thread-24470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:14:48.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:14:48.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:14:48.891 [DEBUG] [Thread-24470] [transport.py] [_log()] userauth is OK
2025-11-12T23:14:48.891 [DEBUG] [Thread-24470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:14:48.891 [DEBUG] [Thread-24470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:14:48.891 [DEBUG] [Thread-24470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:14:48.891 [DEBUG] [Thread-24470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:14:48.909 [INFO] [Thread-24470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:14:48.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:14:48.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:14:49.700 [DEBUG] [Thread-24470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:14:49.701 [DEBUG] [Thread-24470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:14:49.748 [DEBUG] [Thread-24470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:14:49.749 [DEBUG] [Thread-24470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:14:49.758 [DEBUG] [Thread-24470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:14:49.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:14:49.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-11-12T23:14:49.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-11-12T23:14:49.785 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:14:49.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:14:49.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:14:49.793 [DEBUG] [Thread-24470] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:14:50.474 [DEBUG] [Thread-24472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:14:53.751 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:01.569 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:02.010 [DEBUG] [Thread-24473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:05.524 [DEBUG] [Thread-24474 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:05.650 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:10.882 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:10.883 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:19.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:15:19.817 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:15:19.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:15:20.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 15, 4), 8.33, 57.55, 0.0, 16.6, 15.54, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:15:20.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:15:04
2025-11-12T23:15:20.551 [DEBUG] [Thread-24475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:20.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:15:20.720 [DEBUG] [Thread-24476] [transport.py] [_log()] starting thread (client mode): 0x149041f0
2025-11-12T23:15:20.720 [DEBUG] [Thread-24476] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:15:20.746 [DEBUG] [Thread-24476] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:15:20.746 [INFO] [Thread-24476] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] client lang: <none>
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] server lang: <none>
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] kex follows: False
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:15:20.750 [DEBUG] [Thread-24476] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:15:20.751 [DEBUG] [Thread-24476] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:15:20.751 [DEBUG] [Thread-24476] [transport.py] [_log()] Compression: none
2025-11-12T23:15:20.751 [DEBUG] [Thread-24476] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:15:20.771 [DEBUG] [Thread-24476] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:15:20.771 [DEBUG] [Thread-24476] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:15:20.772 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:15:20.772 [DEBUG] [Thread-24476] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:15:20.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:15:20.775 [DEBUG] [Thread-24476] [transport.py] [_log()] userauth is OK
2025-11-12T23:15:20.775 [DEBUG] [Thread-24476] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:15:20.775 [DEBUG] [Thread-24476] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:15:20.775 [DEBUG] [Thread-24476] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:15:20.775 [DEBUG] [Thread-24476] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:15:20.798 [INFO] [Thread-24476] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:15:20.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:15:21.448 [DEBUG] [Thread-24476] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:15:21.448 [DEBUG] [Thread-24476] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:15:21.449 [DEBUG] [Thread-24476] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:15:21.488 [DEBUG] [Thread-24476] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:15:21.489 [DEBUG] [Thread-24476] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:15:21.492 [DEBUG] [Thread-24476] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:15:21.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:15:21.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:15:21.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:15:21.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:15:21.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:15:21.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:15:21.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:15:21.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:15:21.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:15:21.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.885151 -999.00  +15.70   8.91     61   +8.30 1 2 1 1 1     0    0 6.99 -44.14 ZnESW 10.4 8.9 193.2 16.6 16.6 -21.5 16.4 -21.1 16.3 -20.4 16.6 -20.9
2025-11-12T23:15:21.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:15:21.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:15:21.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.885151
2025-11-12T23:15:21.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:15:21.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:15:21.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:15:21.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:15:21.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:15:21.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:15:04', tmtdew=8.33, humidity=57.55, cloud=0.0, wind=16.6, temperature=15.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:15:04', seeing=0.94, atlas_timestamp='2025-11-12T21:14:37.046', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:13:00')
2025-11-12T23:15:21.518 [DEBUG] [Thread-24476] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:15:21.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:15:21.618 [DEBUG] [Thread-24479] [transport.py] [_log()] starting thread (client mode): 0x11f03d00
2025-11-12T23:15:21.618 [DEBUG] [Thread-24479] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:15:21.636 [DEBUG] [Thread-24479] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:15:21.636 [INFO] [Thread-24479] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:15:21.644 [DEBUG] [Thread-24479] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:15:21.644 [DEBUG] [Thread-24479] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:15:21.644 [DEBUG] [Thread-24479] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:15:21.644 [DEBUG] [Thread-24479] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:15:21.644 [DEBUG] [Thread-24479] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:15:21.644 [DEBUG] [Thread-24479] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] client lang: <none>
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] server lang: <none>
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] kex follows: False
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] Compression: none
2025-11-12T23:15:21.645 [DEBUG] [Thread-24479] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:15:21.706 [DEBUG] [Thread-24479] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:15:21.707 [DEBUG] [Thread-24479] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:15:21.707 [DEBUG] [Thread-24479] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:15:21.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:15:21.708 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:15:21.764 [DEBUG] [Thread-24479] [transport.py] [_log()] userauth is OK
2025-11-12T23:15:21.765 [DEBUG] [Thread-24479] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:15:21.765 [DEBUG] [Thread-24479] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:15:21.765 [DEBUG] [Thread-24479] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:15:21.765 [DEBUG] [Thread-24479] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:15:21.783 [INFO] [Thread-24479] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:15:21.783 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:15:21.784 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:15:22.594 [DEBUG] [Thread-24479] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:15:22.594 [DEBUG] [Thread-24479] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:15:22.642 [DEBUG] [Thread-24479] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:15:22.642 [DEBUG] [Thread-24479] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:15:22.651 [DEBUG] [Thread-24479] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:15:22.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:15:22.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-11-12T23:15:22.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-11-12T23:15:22.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:15:22.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:15:22.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:15:22.688 [DEBUG] [Thread-24479] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:15:35.585 [DEBUG] [Thread-24481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:50.641 [DEBUG] [Thread-24482 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:15:52.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:15:52.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:15:52.711 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:15:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 15, 36), 8.33, 57.55, 0.0, 14.52, 15.49, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:15:53.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:15:36
2025-11-12T23:15:53.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:15:53.660 [DEBUG] [Thread-24483] [transport.py] [_log()] starting thread (client mode): 0x11f00c40
2025-11-12T23:15:53.660 [DEBUG] [Thread-24483] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:15:53.674 [DEBUG] [Thread-24483] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:15:53.674 [INFO] [Thread-24483] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:15:53.676 [DEBUG] [Thread-24483] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:15:53.676 [DEBUG] [Thread-24483] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:15:53.676 [DEBUG] [Thread-24483] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] client lang: <none>
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] server lang: <none>
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] kex follows: False
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] Compression: none
2025-11-12T23:15:53.677 [DEBUG] [Thread-24483] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:15:53.688 [DEBUG] [Thread-24483] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:15:53.688 [DEBUG] [Thread-24483] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:15:53.688 [DEBUG] [Thread-24483] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:15:53.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:15:53.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:15:53.689 [DEBUG] [Thread-24483] [transport.py] [_log()] userauth is OK
2025-11-12T23:15:53.689 [DEBUG] [Thread-24483] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:15:53.689 [DEBUG] [Thread-24483] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:15:53.689 [DEBUG] [Thread-24483] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:15:53.689 [DEBUG] [Thread-24483] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:15:53.698 [INFO] [Thread-24483] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:15:53.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:15:54.318 [DEBUG] [Thread-24483] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:15:54.318 [DEBUG] [Thread-24483] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:15:54.318 [DEBUG] [Thread-24483] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:15:54.359 [DEBUG] [Thread-24483] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:15:54.359 [DEBUG] [Thread-24483] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:15:54.361 [DEBUG] [Thread-24483] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:15:54.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:15:54.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:15:54.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:15:54.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:15:54.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:15:54.377 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:15:54.377 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:15:54.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.885498 -999.00  +15.70  10.09     61   +8.30 1 2 1 1 1     0    0 6.97 -47.81 ZnESW 14.5 10.1 201.6 13.2 16.6 -21.4 16.4 -21.0 16.3 -20.5 16.6 -20.9
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.885498
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:15:54.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:15:36', tmtdew=8.33, humidity=57.55, cloud=0.0, wind=14.52, temperature=15.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:15:36', seeing=0.9, atlas_timestamp='2025-11-12T21:15:07.027', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:13:00')
2025-11-12T23:15:54.379 [DEBUG] [Thread-24483] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:15:54.454 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:15:54.466 [DEBUG] [Thread-24486] [transport.py] [_log()] starting thread (client mode): 0x14906980
2025-11-12T23:15:54.466 [DEBUG] [Thread-24486] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:15:54.481 [DEBUG] [Thread-24486] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:15:54.481 [INFO] [Thread-24486] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] client lang: <none>
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] server lang: <none>
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] kex follows: False
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] Compression: none
2025-11-12T23:15:54.489 [DEBUG] [Thread-24486] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:15:54.546 [DEBUG] [Thread-24486] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:15:54.546 [DEBUG] [Thread-24486] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:15:54.547 [DEBUG] [Thread-24486] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:15:54.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:15:54.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:15:54.603 [DEBUG] [Thread-24486] [transport.py] [_log()] userauth is OK
2025-11-12T23:15:54.603 [DEBUG] [Thread-24486] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:15:54.603 [DEBUG] [Thread-24486] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:15:54.603 [DEBUG] [Thread-24486] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:15:54.603 [DEBUG] [Thread-24486] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:15:54.621 [INFO] [Thread-24486] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:15:54.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:15:54.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:15:55.447 [DEBUG] [Thread-24486] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:15:55.448 [DEBUG] [Thread-24486] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:15:55.496 [DEBUG] [Thread-24486] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:15:55.496 [DEBUG] [Thread-24486] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:15:55.504 [DEBUG] [Thread-24486] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:15:55.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:15:55.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-11-12T23:15:55.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-11-12T23:15:55.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:15:55.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:15:55.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:15:55.538 [DEBUG] [Thread-24486] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:16:02.071 [DEBUG] [Thread-24488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:05.673 [DEBUG] [Thread-24489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:11.086 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:11.087 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:20.726 [DEBUG] [Thread-24490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:25.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:16:25.561 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:16:25.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-11-12T23:16:26.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 16, 8), 8.31, 57.62, 0.0, 15.35, 15.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:16:26.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:16:08
2025-11-12T23:16:26.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:16:26.486 [DEBUG] [Thread-24491] [transport.py] [_log()] starting thread (client mode): 0x19ddba30
2025-11-12T23:16:26.486 [DEBUG] [Thread-24491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:16:26.506 [DEBUG] [Thread-24491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:16:26.506 [INFO] [Thread-24491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:16:26.509 [DEBUG] [Thread-24491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] client lang: <none>
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] server lang: <none>
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] kex follows: False
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] Compression: none
2025-11-12T23:16:26.510 [DEBUG] [Thread-24491] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:16:26.530 [DEBUG] [Thread-24491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:16:26.530 [DEBUG] [Thread-24491] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:16:26.531 [DEBUG] [Thread-24491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:16:26.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:16:26.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:16:26.533 [DEBUG] [Thread-24491] [transport.py] [_log()] userauth is OK
2025-11-12T23:16:26.534 [DEBUG] [Thread-24491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:16:26.534 [DEBUG] [Thread-24491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:16:26.534 [DEBUG] [Thread-24491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:16:26.534 [DEBUG] [Thread-24491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:16:26.556 [INFO] [Thread-24491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:16:26.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:16:27.173 [DEBUG] [Thread-24491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:16:27.173 [DEBUG] [Thread-24491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:16:27.173 [DEBUG] [Thread-24491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:16:27.214 [DEBUG] [Thread-24491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:16:27.214 [DEBUG] [Thread-24491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:16:27.217 [DEBUG] [Thread-24491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:16:27.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:16:27.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:16:27.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:16:27.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:16:27.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:16:27.245 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:16:27.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:16:27.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:16:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:16:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.885846 -999.00  +15.70  13.06     61   +8.30 1 2 1 1 1     0    0 6.68 -52.58 ZnESW 9.5 13.1 195.8 16.7 16.6 -21.4 16.4 -20.6 16.2 -20.4 16.6 -20.8
2025-11-12T23:16:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:16:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:16:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.885846
2025-11-12T23:16:27.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:16:27.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:16:27.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:16:27.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:16:27.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:16:27.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:16:08', tmtdew=8.31, humidity=57.62, cloud=0.0, wind=15.35, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:16:08', seeing=0.82, atlas_timestamp='2025-11-12T21:15:37.094', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:13:00')
2025-11-12T23:16:27.248 [DEBUG] [Thread-24491] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:16:27.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:16:27.344 [DEBUG] [Thread-24494] [transport.py] [_log()] starting thread (client mode): 0x1737cd90
2025-11-12T23:16:27.345 [DEBUG] [Thread-24494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:16:27.359 [DEBUG] [Thread-24494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:16:27.359 [INFO] [Thread-24494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] client lang: <none>
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] server lang: <none>
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] kex follows: False
2025-11-12T23:16:27.367 [DEBUG] [Thread-24494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:16:27.368 [DEBUG] [Thread-24494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:16:27.368 [DEBUG] [Thread-24494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:16:27.368 [DEBUG] [Thread-24494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:16:27.368 [DEBUG] [Thread-24494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:16:27.368 [DEBUG] [Thread-24494] [transport.py] [_log()] Compression: none
2025-11-12T23:16:27.368 [DEBUG] [Thread-24494] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:16:27.424 [DEBUG] [Thread-24494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:16:27.424 [DEBUG] [Thread-24494] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:16:27.425 [DEBUG] [Thread-24494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:16:27.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:16:27.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:16:27.480 [DEBUG] [Thread-24494] [transport.py] [_log()] userauth is OK
2025-11-12T23:16:27.480 [DEBUG] [Thread-24494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:16:27.481 [DEBUG] [Thread-24494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:16:27.481 [DEBUG] [Thread-24494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:16:27.481 [DEBUG] [Thread-24494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:16:27.503 [INFO] [Thread-24494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:16:27.504 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:16:27.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:16:28.367 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:28.375 [DEBUG] [Thread-24494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:16:28.376 [DEBUG] [Thread-24494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:16:28.423 [DEBUG] [Thread-24494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:16:28.424 [DEBUG] [Thread-24494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:16:28.433 [DEBUG] [Thread-24494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:16:28.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:16:28.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-11-12T23:16:28.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:16:28.461 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:16:28.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:16:28.461 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:16:28.469 [DEBUG] [Thread-24494] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:16:35.764 [DEBUG] [Thread-24496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:35.973 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:40.028 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:50.819 [DEBUG] [Thread-24497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:16:58.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:16:58.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:16:58.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-11-12T23:16:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 16, 40), 8.23, 57.72, 0.0, 12.7, 15.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:16:59.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:16:40
2025-11-12T23:16:59.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:16:59.399 [DEBUG] [Thread-24498] [transport.py] [_log()] starting thread (client mode): 0x14921120
2025-11-12T23:16:59.399 [DEBUG] [Thread-24498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:16:59.411 [DEBUG] [Thread-24498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:16:59.411 [INFO] [Thread-24498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:16:59.413 [DEBUG] [Thread-24498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] client lang: <none>
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] server lang: <none>
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] kex follows: False
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] Compression: none
2025-11-12T23:16:59.414 [DEBUG] [Thread-24498] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:16:59.429 [DEBUG] [Thread-24498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:16:59.429 [DEBUG] [Thread-24498] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:16:59.430 [DEBUG] [Thread-24498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:16:59.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:16:59.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:16:59.432 [DEBUG] [Thread-24498] [transport.py] [_log()] userauth is OK
2025-11-12T23:16:59.432 [DEBUG] [Thread-24498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:16:59.432 [DEBUG] [Thread-24498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:16:59.432 [DEBUG] [Thread-24498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:16:59.432 [DEBUG] [Thread-24498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:16:59.466 [INFO] [Thread-24498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:16:59.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:17:00.074 [DEBUG] [Thread-24498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:17:00.074 [DEBUG] [Thread-24498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:17:00.075 [DEBUG] [Thread-24498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:17:00.116 [DEBUG] [Thread-24498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:17:00.116 [DEBUG] [Thread-24498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:17:00.119 [DEBUG] [Thread-24498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:17:00.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:17:00.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:17:00.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:17:00.137 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:17:00.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:17:00.146 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:17:00.146 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:17:00.146 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:17:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:17:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.886193 -999.00  +15.70   8.89     61   +8.30 1 2 1 1 1     0    0 6.51 -55.00 ZnESW 10.6 8.9 189.3 11.4 16.6 -21.3 16.4 -21.1 16.3 -20.5 16.6 -20.9
2025-11-12T23:17:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:17:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:17:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.886193
2025-11-12T23:17:00.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:17:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:17:00.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:17:00.148 [DEBUG] [Thread-24498] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:17:00.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:17:00.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:17:00.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:16:40', tmtdew=8.23, humidity=57.72, cloud=0.0, wind=12.7, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:16:40', seeing=0.85, atlas_timestamp='2025-11-12T21:16:07.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.5427499999999998, 0.4592500000000008, 0.69625, 0.48300000000000054, 0.4145000000000003, 0.4852500000000006, 0.6039999999999992, 0.7322500000000005, 0.6280000000000001, 0.5620000000000012, 0.6412499999999994, 0.5529999999999999, 0.6329999999999991, 0.5782499999999988, 0.6919999999999993, 0.8949999999999996, 0.6272500000000001, 0.6064999999999996, 0.5640000000000001, 0.5242499999999986, 0.7369999999999983, 0.9447499999999991, 1.2592500000000006, 1.180250000000001, 0.8364999999999991, 0.4195000000000002, 0.32174999999999976, 0.4634999999999998, 0.7620000000000005, 1.0230000000000024, 1.5950000000000006, 1.5360000000000014, 1.5427499999999998], zp_timestamp='2025-11-12T21:13:00')
2025-11-12T23:17:00.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:17:00.243 [DEBUG] [Thread-24501] [transport.py] [_log()] starting thread (client mode): 0x14921750
2025-11-12T23:17:00.243 [DEBUG] [Thread-24501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:17:00.258 [DEBUG] [Thread-24501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:17:00.258 [INFO] [Thread-24501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:17:00.265 [DEBUG] [Thread-24501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:17:00.266 [DEBUG] [Thread-24501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:17:00.266 [DEBUG] [Thread-24501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:17:00.266 [DEBUG] [Thread-24501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:17:00.266 [DEBUG] [Thread-24501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:17:00.266 [DEBUG] [Thread-24501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:17:00.266 [DEBUG] [Thread-24501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:17:00.266 [DEBUG] [Thread-24501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:17:00.266 [DEBUG] [Thread-24501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:17:00.267 [DEBUG] [Thread-24501] [transport.py] [_log()] client lang: <none>
2025-11-12T23:17:00.267 [DEBUG] [Thread-24501] [transport.py] [_log()] server lang: <none>
2025-11-12T23:17:00.267 [DEBUG] [Thread-24501] [transport.py] [_log()] kex follows: False
2025-11-12T23:17:00.267 [DEBUG] [Thread-24501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:17:00.267 [DEBUG] [Thread-24501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:17:00.267 [DEBUG] [Thread-24501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:17:00.267 [DEBUG] [Thread-24501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:17:00.268 [DEBUG] [Thread-24501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:17:00.268 [DEBUG] [Thread-24501] [transport.py] [_log()] Compression: none
2025-11-12T23:17:00.268 [DEBUG] [Thread-24501] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:17:00.325 [DEBUG] [Thread-24501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:17:00.325 [DEBUG] [Thread-24501] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:17:00.326 [DEBUG] [Thread-24501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:17:00.326 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:17:00.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:17:00.383 [DEBUG] [Thread-24501] [transport.py] [_log()] userauth is OK
2025-11-12T23:17:00.384 [DEBUG] [Thread-24501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:17:00.384 [DEBUG] [Thread-24501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:17:00.384 [DEBUG] [Thread-24501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:17:00.384 [DEBUG] [Thread-24501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:17:00.402 [INFO] [Thread-24501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:17:00.403 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:17:00.403 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:17:01.213 [DEBUG] [Thread-24501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:17:01.213 [DEBUG] [Thread-24501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:17:01.260 [DEBUG] [Thread-24501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:17:01.261 [DEBUG] [Thread-24501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:17:01.270 [DEBUG] [Thread-24501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:17:01.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:17:01.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-11-12T23:17:01.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-11-12T23:17:01.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:17:01.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:17:01.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:17:01.307 [DEBUG] [Thread-24501] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:17:02.136 [DEBUG] [Thread-24503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:17:05.853 [DEBUG] [Thread-24504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:17:11.289 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:17:11.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:17:20.904 [DEBUG] [Thread-24505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:17:31.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:17:31.307 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:17:31.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-11-12T23:17:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 17, 12), 8.19, 57.9, 0.0, 14.17, 15.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:17:31.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:17:12
2025-11-12T23:17:32.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:17:32.229 [DEBUG] [Thread-24506] [transport.py] [_log()] starting thread (client mode): 0x19ddb6a0
2025-11-12T23:17:32.229 [DEBUG] [Thread-24506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:17:32.246 [DEBUG] [Thread-24506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:17:32.246 [INFO] [Thread-24506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] client lang: <none>
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] server lang: <none>
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] kex follows: False
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:17:32.249 [DEBUG] [Thread-24506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:17:32.250 [DEBUG] [Thread-24506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:17:32.250 [DEBUG] [Thread-24506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:17:32.250 [DEBUG] [Thread-24506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:17:32.250 [DEBUG] [Thread-24506] [transport.py] [_log()] Compression: none
2025-11-12T23:17:32.250 [DEBUG] [Thread-24506] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:17:32.264 [DEBUG] [Thread-24506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:17:32.264 [DEBUG] [Thread-24506] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:17:32.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:17:32.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:17:32.266 [DEBUG] [Thread-24506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:17:32.266 [DEBUG] [Thread-24506] [transport.py] [_log()] userauth is OK
2025-11-12T23:17:32.266 [DEBUG] [Thread-24506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:17:32.266 [DEBUG] [Thread-24506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:17:32.266 [DEBUG] [Thread-24506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:17:32.266 [DEBUG] [Thread-24506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:17:32.280 [INFO] [Thread-24506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:17:32.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:17:32.943 [DEBUG] [Thread-24506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:17:32.943 [DEBUG] [Thread-24506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:17:32.944 [DEBUG] [Thread-24506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:17:32.985 [DEBUG] [Thread-24506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:17:32.985 [DEBUG] [Thread-24506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:17:32.988 [DEBUG] [Thread-24506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:17:33.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:17:33.001 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:17:33.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:17:33.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:17:33.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:17:33.013 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:17:33.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:17:33.013 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:17:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:17:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.886540 -999.00  +15.70   8.58     61   +8.20 1 2 1 1 1     0    0 6.27 -62.21 ZnESW 16.1 8.6 225.8 11.7 16.6 -21.4 16.4 -20.9 16.2 -20.5 16.6 -20.9
2025-11-12T23:17:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:17:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:17:33.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.886540
2025-11-12T23:17:33.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:17:33.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:17:33.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:17:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:17:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:17:33.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:17:12', tmtdew=8.19, humidity=57.9, cloud=0.0, wind=14.17, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:17:12', seeing=0.85, atlas_timestamp='2025-11-12T21:16:37.056', atlas_cloud=2, atlas_rain=1, zp_data=[0.4247499999999995, 0.5302500000000006, 0.6407500000000006, 0.44649999999999856, 0.46950000000000003, 0.5272500000000004, 0.5284999999999993, 0.6492500000000003, 0.6344999999999992, 0.5860000000000003, 0.5402500000000003, 0.5969999999999995, 0.5999999999999996, 0.6587499999999995, 0.7759999999999989, 0.9219999999999997, 0.7962499999999997, 0.6245000000000003, 0.5559999999999992, 0.6312499999999996, 0.724499999999999, 1.199749999999998, 1.074250000000001, 1.14975, 0.7379999999999995, 0.5339999999999998, 0.3507499999999997, 0.43900000000000006, 0.5765000000000002, 1.0770000000000008, 1.5040000000000013, 1.6480000000000006, 1.723749999999999], zp_timestamp='2025-11-12T21:16:00')
2025-11-12T23:17:33.016 [DEBUG] [Thread-24506] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:17:33.099 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:17:33.110 [DEBUG] [Thread-24509] [transport.py] [_log()] starting thread (client mode): 0x19ddb4c0
2025-11-12T23:17:33.110 [DEBUG] [Thread-24509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:17:33.125 [DEBUG] [Thread-24509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:17:33.125 [INFO] [Thread-24509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:17:33.132 [DEBUG] [Thread-24509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:17:33.132 [DEBUG] [Thread-24509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:17:33.132 [DEBUG] [Thread-24509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:17:33.132 [DEBUG] [Thread-24509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:17:33.132 [DEBUG] [Thread-24509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:17:33.132 [DEBUG] [Thread-24509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] client lang: <none>
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] server lang: <none>
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] kex follows: False
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] Compression: none
2025-11-12T23:17:33.133 [DEBUG] [Thread-24509] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:17:33.192 [DEBUG] [Thread-24509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:17:33.192 [DEBUG] [Thread-24509] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:17:33.193 [DEBUG] [Thread-24509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:17:33.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:17:33.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:17:33.251 [DEBUG] [Thread-24509] [transport.py] [_log()] userauth is OK
2025-11-12T23:17:33.252 [DEBUG] [Thread-24509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:17:33.252 [DEBUG] [Thread-24509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:17:33.252 [DEBUG] [Thread-24509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:17:33.252 [DEBUG] [Thread-24509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:17:33.274 [INFO] [Thread-24509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:17:33.275 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:17:33.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:17:34.075 [DEBUG] [Thread-24509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:17:34.075 [DEBUG] [Thread-24509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:17:34.124 [DEBUG] [Thread-24509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:17:34.124 [DEBUG] [Thread-24509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:17:34.133 [DEBUG] [Thread-24509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:17:34.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:17:34.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-11-12T23:17:34.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-11-12T23:17:34.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:17:34.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:17:34.162 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:17:34.170 [DEBUG] [Thread-24509] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:17:35.943 [DEBUG] [Thread-24511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:17:51.002 [DEBUG] [Thread-24512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:18:02.193 [DEBUG] [Thread-24513 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:18:02.815 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:18:04.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:18:04.193 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:18:04.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-11-12T23:18:04.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 17, 44), 8.22, 57.97, 0.0, 14.72, 15.44, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:18:04.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:17:44
2025-11-12T23:18:04.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:18:05.104 [DEBUG] [Thread-24514] [transport.py] [_log()] starting thread (client mode): 0x1739b430
2025-11-12T23:18:05.104 [DEBUG] [Thread-24514] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:18:05.124 [DEBUG] [Thread-24514] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:18:05.124 [INFO] [Thread-24514] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:18:05.127 [DEBUG] [Thread-24514] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] client lang: <none>
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] server lang: <none>
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] kex follows: False
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] Compression: none
2025-11-12T23:18:05.128 [DEBUG] [Thread-24514] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:18:05.146 [DEBUG] [Thread-24514] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:18:05.146 [DEBUG] [Thread-24514] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:18:05.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:18:05.148 [DEBUG] [Thread-24514] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:18:05.148 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:18:05.150 [DEBUG] [Thread-24514] [transport.py] [_log()] userauth is OK
2025-11-12T23:18:05.150 [DEBUG] [Thread-24514] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:18:05.150 [DEBUG] [Thread-24514] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:18:05.150 [DEBUG] [Thread-24514] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:18:05.151 [DEBUG] [Thread-24514] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:18:05.171 [INFO] [Thread-24514] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:18:05.172 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:18:05.891 [DEBUG] [Thread-24514] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:18:05.891 [DEBUG] [Thread-24514] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:18:05.892 [DEBUG] [Thread-24514] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:18:05.933 [DEBUG] [Thread-24514] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:18:05.933 [DEBUG] [Thread-24514] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:18:05.937 [DEBUG] [Thread-24514] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:18:05.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:18:05.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:18:05.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:18:05.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:18:05.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:18:05.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:18:05.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:18:05.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:18:05.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:18:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.887235 -999.00  +15.60   9.15     61   +8.30 1 2 1 1 1     0    0 6.05 -71.14 ZnESW 9.9 9.2 203.0 12.0 16.5 -21.5 16.4 -20.9 16.2 -20.5 16.5 -20.9
2025-11-12T23:18:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:18:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:18:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.887235
2025-11-12T23:18:05.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:18:05.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:18:05.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:18:05.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:18:05.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:18:05.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:17:44', tmtdew=8.22, humidity=57.97, cloud=0.0, wind=14.72, temperature=15.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:17:44', seeing=0.85, atlas_timestamp='2025-11-12T21:17:37.104', atlas_cloud=2, atlas_rain=1, zp_data=[0.4247499999999995, 0.5302500000000006, 0.6407500000000006, 0.44649999999999856, 0.46950000000000003, 0.5272500000000004, 0.5284999999999993, 0.6492500000000003, 0.6344999999999992, 0.5860000000000003, 0.5402500000000003, 0.5969999999999995, 0.5999999999999996, 0.6587499999999995, 0.7759999999999989, 0.9219999999999997, 0.7962499999999997, 0.6245000000000003, 0.5559999999999992, 0.6312499999999996, 0.724499999999999, 1.199749999999998, 1.074250000000001, 1.14975, 0.7379999999999995, 0.5339999999999998, 0.3507499999999997, 0.43900000000000006, 0.5765000000000002, 1.0770000000000008, 1.5040000000000013, 1.6480000000000006, 1.723749999999999], zp_timestamp='2025-11-12T21:16:00')
2025-11-12T23:18:05.964 [DEBUG] [Thread-24514] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:18:06.034 [DEBUG] [Thread-24517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:18:06.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:18:06.058 [DEBUG] [Thread-24518] [transport.py] [_log()] starting thread (client mode): 0x14923220
2025-11-12T23:18:06.059 [DEBUG] [Thread-24518] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:18:06.074 [DEBUG] [Thread-24518] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:18:06.074 [INFO] [Thread-24518] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:18:06.081 [DEBUG] [Thread-24518] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] client lang: <none>
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] server lang: <none>
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] kex follows: False
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:18:06.082 [DEBUG] [Thread-24518] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:18:06.083 [DEBUG] [Thread-24518] [transport.py] [_log()] Compression: none
2025-11-12T23:18:06.083 [DEBUG] [Thread-24518] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:18:06.141 [DEBUG] [Thread-24518] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:18:06.142 [DEBUG] [Thread-24518] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:18:06.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:18:06.143 [DEBUG] [Thread-24518] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:18:06.144 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:18:06.200 [DEBUG] [Thread-24518] [transport.py] [_log()] userauth is OK
2025-11-12T23:18:06.200 [DEBUG] [Thread-24518] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:18:06.200 [DEBUG] [Thread-24518] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:18:06.201 [DEBUG] [Thread-24518] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:18:06.201 [DEBUG] [Thread-24518] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:18:06.219 [INFO] [Thread-24518] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:18:06.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:18:06.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:18:07.062 [DEBUG] [Thread-24518] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:18:07.071 [DEBUG] [Thread-24518] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:18:07.111 [DEBUG] [Thread-24518] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:18:07.111 [DEBUG] [Thread-24518] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:18:07.120 [DEBUG] [Thread-24518] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:18:07.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:18:07.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-11-12T23:18:07.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:18:07.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:18:07.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:18:07.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:18:07.156 [DEBUG] [Thread-24518] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:18:11.491 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:18:11.492 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:18:21.073 [DEBUG] [Thread-24520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:18:36.106 [DEBUG] [Thread-24521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:18:37.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:18:37.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:18:37.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-11-12T23:18:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 18, 16), 8.19, 58.08, 0.0, 15.05, 15.48, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:18:37.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:18:16
2025-11-12T23:18:37.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:18:38.072 [DEBUG] [Thread-24522] [transport.py] [_log()] starting thread (client mode): 0x14920b20
2025-11-12T23:18:38.073 [DEBUG] [Thread-24522] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:18:38.092 [DEBUG] [Thread-24522] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:18:38.093 [INFO] [Thread-24522] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:18:38.095 [DEBUG] [Thread-24522] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] client lang: <none>
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] server lang: <none>
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] kex follows: False
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] Compression: none
2025-11-12T23:18:38.096 [DEBUG] [Thread-24522] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:18:38.116 [DEBUG] [Thread-24522] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:18:38.116 [DEBUG] [Thread-24522] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:18:38.117 [DEBUG] [Thread-24522] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:18:38.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:18:38.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:18:38.119 [DEBUG] [Thread-24522] [transport.py] [_log()] userauth is OK
2025-11-12T23:18:38.119 [DEBUG] [Thread-24522] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:18:38.119 [DEBUG] [Thread-24522] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:18:38.119 [DEBUG] [Thread-24522] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:18:38.119 [DEBUG] [Thread-24522] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:18:38.143 [INFO] [Thread-24522] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:18:38.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:18:38.780 [DEBUG] [Thread-24522] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:18:38.780 [DEBUG] [Thread-24522] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:18:38.780 [DEBUG] [Thread-24522] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:18:38.820 [DEBUG] [Thread-24522] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:18:38.821 [DEBUG] [Thread-24522] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:18:38.824 [DEBUG] [Thread-24522] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:18:38.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:18:38.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:18:38.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:18:38.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:18:38.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:18:38.850 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:18:38.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:18:38.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.887582 -999.00  +15.60   8.97     62   +8.40 1 2 1 1 1     0    0 5.97 -71.59 ZnESW 6.3 9.0 204.6 13.3 16.5 -21.4 16.4 -20.8 16.2 -20.3 16.4 -21.0
2025-11-12T23:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:18:38.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.887582
2025-11-12T23:18:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:18:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:18:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:18:38.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:18:38.853 [DEBUG] [Thread-24522] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:18:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:18:38.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:18:16', tmtdew=8.19, humidity=58.08, cloud=0.0, wind=15.05, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:18:16', seeing=0.85, atlas_timestamp='2025-11-12T21:18:07.085', atlas_cloud=2, atlas_rain=1, zp_data=[0.4247499999999995, 0.5302500000000006, 0.6407500000000006, 0.44649999999999856, 0.46950000000000003, 0.5272500000000004, 0.5284999999999993, 0.6492500000000003, 0.6344999999999992, 0.5860000000000003, 0.5402500000000003, 0.5969999999999995, 0.5999999999999996, 0.6587499999999995, 0.7759999999999989, 0.9219999999999997, 0.7962499999999997, 0.6245000000000003, 0.5559999999999992, 0.6312499999999996, 0.724499999999999, 1.199749999999998, 1.074250000000001, 1.14975, 0.7379999999999995, 0.5339999999999998, 0.3507499999999997, 0.43900000000000006, 0.5765000000000002, 1.0770000000000008, 1.5040000000000013, 1.6480000000000006, 1.723749999999999], zp_timestamp='2025-11-12T21:16:00')
2025-11-12T23:18:38.936 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:18:38.950 [DEBUG] [Thread-24525] [transport.py] [_log()] starting thread (client mode): 0x149802b0
2025-11-12T23:18:38.950 [DEBUG] [Thread-24525] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:18:38.965 [DEBUG] [Thread-24525] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:18:38.965 [INFO] [Thread-24525] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] client lang: <none>
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] server lang: <none>
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] kex follows: False
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:18:38.973 [DEBUG] [Thread-24525] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:18:38.974 [DEBUG] [Thread-24525] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:18:38.974 [DEBUG] [Thread-24525] [transport.py] [_log()] Compression: none
2025-11-12T23:18:38.974 [DEBUG] [Thread-24525] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:18:39.032 [DEBUG] [Thread-24525] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:18:39.032 [DEBUG] [Thread-24525] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:18:39.033 [DEBUG] [Thread-24525] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:18:39.033 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:18:39.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:18:39.088 [DEBUG] [Thread-24525] [transport.py] [_log()] userauth is OK
2025-11-12T23:18:39.088 [DEBUG] [Thread-24525] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:18:39.088 [DEBUG] [Thread-24525] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:18:39.089 [DEBUG] [Thread-24525] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:18:39.089 [DEBUG] [Thread-24525] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:18:39.108 [INFO] [Thread-24525] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:18:39.108 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:18:39.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:18:39.945 [DEBUG] [Thread-24525] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:18:39.945 [DEBUG] [Thread-24525] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:18:39.994 [DEBUG] [Thread-24525] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:18:39.994 [DEBUG] [Thread-24525] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:18:40.003 [DEBUG] [Thread-24525] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:18:40.013 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:18: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')
2025-11-12T23:18:40.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-11-12T23:18:40.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:18:40.032 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:18:40.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:18:40.040 [DEBUG] [Thread-24525] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:18:51.145 [DEBUG] [Thread-24527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:19:02.249 [DEBUG] [Thread-24528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:19:06.190 [DEBUG] [Thread-24529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:19:10.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:19:10.063 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:19:10.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-11-12T23:19:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 18, 48), 8.01, 58.68, 0.0, 14.89, 15.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:19:10.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:18:48
2025-11-12T23:19:10.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:19:10.958 [DEBUG] [Thread-24530] [transport.py] [_log()] starting thread (client mode): 0x14980190
2025-11-12T23:19:10.958 [DEBUG] [Thread-24530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:19:10.978 [DEBUG] [Thread-24530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:19:10.978 [INFO] [Thread-24530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:19:10.982 [DEBUG] [Thread-24530] [transport.py] [_log()] client lang: <none>
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] server lang: <none>
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] kex follows: False
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] Compression: none
2025-11-12T23:19:10.983 [DEBUG] [Thread-24530] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:19:11.001 [DEBUG] [Thread-24530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:19:11.002 [DEBUG] [Thread-24530] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:19:11.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:19:11.003 [DEBUG] [Thread-24530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:19:11.004 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:19:11.005 [DEBUG] [Thread-24530] [transport.py] [_log()] userauth is OK
2025-11-12T23:19:11.006 [DEBUG] [Thread-24530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:19:11.006 [DEBUG] [Thread-24530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:19:11.006 [DEBUG] [Thread-24530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:19:11.006 [DEBUG] [Thread-24530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:19:11.031 [INFO] [Thread-24530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:19:11.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:19:11.696 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:19:11.697 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:19:11.821 [DEBUG] [Thread-24530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:19:11.821 [DEBUG] [Thread-24530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:19:11.822 [DEBUG] [Thread-24530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:19:11.862 [DEBUG] [Thread-24530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:19:11.863 [DEBUG] [Thread-24530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:19:11.867 [DEBUG] [Thread-24530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:19:11.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:19:11.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:19:11.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:19:11.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:19:11.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:19:11.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:19:11.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:19:11.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:19:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:19:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.887929 -999.00  +15.60  12.54     62   +8.50 1 2 1 1 1     0    0 5.68 -83.35 ZnESW 10.8 12.5 194.2 13.5 16.5 -21.4 16.4 -21.1 16.2 -20.3 16.4 -20.9
2025-11-12T23:19:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:19:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:19:11.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.887929
2025-11-12T23:19:11.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:19:11.894 [DEBUG] [Thread-24530] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:19:11.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:19:11.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:19:11.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:19:11.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:19:11.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:18:48', tmtdew=8.01, humidity=58.68, cloud=0.0, wind=14.89, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:18:48', seeing=0.84, atlas_timestamp='2025-11-12T21:18:37.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.4247499999999995, 0.5302500000000006, 0.6407500000000006, 0.44649999999999856, 0.46950000000000003, 0.5272500000000004, 0.5284999999999993, 0.6492500000000003, 0.6344999999999992, 0.5860000000000003, 0.5402500000000003, 0.5969999999999995, 0.5999999999999996, 0.6587499999999995, 0.7759999999999989, 0.9219999999999997, 0.7962499999999997, 0.6245000000000003, 0.5559999999999992, 0.6312499999999996, 0.724499999999999, 1.199749999999998, 1.074250000000001, 1.14975, 0.7379999999999995, 0.5339999999999998, 0.3507499999999997, 0.43900000000000006, 0.5765000000000002, 1.0770000000000008, 1.5040000000000013, 1.6480000000000006, 1.723749999999999], zp_timestamp='2025-11-12T21:16:00')
2025-11-12T23:19:11.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:19:11.990 [DEBUG] [Thread-24533] [transport.py] [_log()] starting thread (client mode): 0x14981960
2025-11-12T23:19:11.990 [DEBUG] [Thread-24533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:19:12.004 [DEBUG] [Thread-24533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:19:12.005 [INFO] [Thread-24533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:19:12.012 [DEBUG] [Thread-24533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] client lang: <none>
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] server lang: <none>
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] kex follows: False
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] Compression: none
2025-11-12T23:19:12.013 [DEBUG] [Thread-24533] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:19:12.072 [DEBUG] [Thread-24533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:19:12.073 [DEBUG] [Thread-24533] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:19:12.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:19:12.074 [DEBUG] [Thread-24533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:19:12.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:19:12.128 [DEBUG] [Thread-24533] [transport.py] [_log()] userauth is OK
2025-11-12T23:19:12.128 [DEBUG] [Thread-24533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:19:12.128 [DEBUG] [Thread-24533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:19:12.128 [DEBUG] [Thread-24533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:19:12.129 [DEBUG] [Thread-24533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:19:12.148 [INFO] [Thread-24533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:19:12.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:19:12.148 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:19:12.970 [DEBUG] [Thread-24533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:19:12.970 [DEBUG] [Thread-24533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:19:13.018 [DEBUG] [Thread-24533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:19:13.018 [DEBUG] [Thread-24533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:19:13.027 [DEBUG] [Thread-24533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:19:13.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:19:13.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-11-12T23:19:13.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-11-12T23:19:13.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:19:13.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:19:13.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:19:13.064 [DEBUG] [Thread-24533] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:19:21.219 [DEBUG] [Thread-24535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:19:36.261 [DEBUG] [Thread-24536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:19:43.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:19:43.084 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:19:43.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-11-12T23:19:43.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 19, 20), 8.02, 58.66, 0.0, 14.54, 15.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:19:43.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:19:20
2025-11-12T23:19:43.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:19:44.044 [DEBUG] [Thread-24537] [transport.py] [_log()] starting thread (client mode): 0x14983490
2025-11-12T23:19:44.044 [DEBUG] [Thread-24537] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:19:44.065 [DEBUG] [Thread-24537] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:19:44.065 [INFO] [Thread-24537] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:19:44.068 [DEBUG] [Thread-24537] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:19:44.068 [DEBUG] [Thread-24537] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:19:44.068 [DEBUG] [Thread-24537] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:19:44.068 [DEBUG] [Thread-24537] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:19:44.068 [DEBUG] [Thread-24537] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] client lang: <none>
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] server lang: <none>
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] kex follows: False
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] Compression: none
2025-11-12T23:19:44.069 [DEBUG] [Thread-24537] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:19:44.084 [DEBUG] [Thread-24537] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:19:44.084 [DEBUG] [Thread-24537] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:19:44.084 [DEBUG] [Thread-24537] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:19:44.084 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:19:44.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:19:44.085 [DEBUG] [Thread-24537] [transport.py] [_log()] userauth is OK
2025-11-12T23:19:44.085 [DEBUG] [Thread-24537] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:19:44.085 [DEBUG] [Thread-24537] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:19:44.085 [DEBUG] [Thread-24537] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:19:44.085 [DEBUG] [Thread-24537] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:19:44.099 [INFO] [Thread-24537] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:19:44.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:19:44.735 [DEBUG] [Thread-24537] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:19:44.736 [DEBUG] [Thread-24537] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:19:44.736 [DEBUG] [Thread-24537] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:19:44.777 [DEBUG] [Thread-24537] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:19:44.777 [DEBUG] [Thread-24537] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:19:44.779 [DEBUG] [Thread-24537] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:19:44.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:19:44.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:19:44.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:19:44.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:19:44.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:19:44.799 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:19:44.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:19:44.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.888276 -999.00  +15.60   4.47     62   +8.50 1 2 1 1 1     0    0 5.33 -95.17 ZnESW 10.4 4.5 194.6 11.9 16.5 -21.4 16.4 -20.8 16.1 -20.4 16.4 -21.0
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.888276
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:19:44.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:19:20', tmtdew=8.02, humidity=58.66, cloud=0.0, wind=14.54, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:19:20', seeing=0.89, atlas_timestamp='2025-11-12T21:19:07.046', atlas_cloud=2, atlas_rain=1, zp_data=[0.4247499999999995, 0.5302500000000006, 0.6407500000000006, 0.44649999999999856, 0.46950000000000003, 0.5272500000000004, 0.5284999999999993, 0.6492500000000003, 0.6344999999999992, 0.5860000000000003, 0.5402500000000003, 0.5969999999999995, 0.5999999999999996, 0.6587499999999995, 0.7759999999999989, 0.9219999999999997, 0.7962499999999997, 0.6245000000000003, 0.5559999999999992, 0.6312499999999996, 0.724499999999999, 1.199749999999998, 1.074250000000001, 1.14975, 0.7379999999999995, 0.5339999999999998, 0.3507499999999997, 0.43900000000000006, 0.5765000000000002, 1.0770000000000008, 1.5040000000000013, 1.6480000000000006, 1.723749999999999], zp_timestamp='2025-11-12T21:16:00')
2025-11-12T23:19:44.801 [DEBUG] [Thread-24537] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:19:44.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:19:44.884 [DEBUG] [Thread-24540] [transport.py] [_log()] starting thread (client mode): 0x14920d30
2025-11-12T23:19:44.884 [DEBUG] [Thread-24540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:19:44.899 [DEBUG] [Thread-24540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:19:44.899 [INFO] [Thread-24540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] client lang: <none>
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] server lang: <none>
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] kex follows: False
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] Compression: none
2025-11-12T23:19:44.907 [DEBUG] [Thread-24540] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:19:44.962 [DEBUG] [Thread-24540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:19:44.962 [DEBUG] [Thread-24540] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:19:44.962 [DEBUG] [Thread-24540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:19:44.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:19:44.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:19:45.019 [DEBUG] [Thread-24540] [transport.py] [_log()] userauth is OK
2025-11-12T23:19:45.019 [DEBUG] [Thread-24540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:19:45.019 [DEBUG] [Thread-24540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:19:45.019 [DEBUG] [Thread-24540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:19:45.019 [DEBUG] [Thread-24540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:19:45.037 [INFO] [Thread-24540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:19:45.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:19:45.038 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:19:45.831 [DEBUG] [Thread-24540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:19:45.831 [DEBUG] [Thread-24540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:19:45.879 [DEBUG] [Thread-24540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:19:45.879 [DEBUG] [Thread-24540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:19:45.887 [DEBUG] [Thread-24540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:19:45.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:19:45.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-11-12T23:19:45.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:19:45.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:19:45.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:19:45.912 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:19:45.920 [DEBUG] [Thread-24540] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:19:51.295 [DEBUG] [Thread-24542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:20:02.336 [DEBUG] [Thread-24543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:20:06.341 [DEBUG] [Thread-24544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:20:11.906 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:20:11.907 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:20:15.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:20:15.921 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:20:15.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:20:16.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 19, 52), 7.93, 58.8, 0.0, 12.97, 15.38, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:20:16.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:19:52
2025-11-12T23:20:16.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:20:16.844 [DEBUG] [Thread-24545] [transport.py] [_log()] starting thread (client mode): 0x14982d70
2025-11-12T23:20:16.844 [DEBUG] [Thread-24545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:20:16.864 [DEBUG] [Thread-24545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:20:16.864 [INFO] [Thread-24545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:20:16.867 [DEBUG] [Thread-24545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:20:16.867 [DEBUG] [Thread-24545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:20:16.867 [DEBUG] [Thread-24545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:20:16.867 [DEBUG] [Thread-24545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:20:16.867 [DEBUG] [Thread-24545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:20:16.867 [DEBUG] [Thread-24545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:20:16.867 [DEBUG] [Thread-24545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] client lang: <none>
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] server lang: <none>
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] kex follows: False
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] Compression: none
2025-11-12T23:20:16.868 [DEBUG] [Thread-24545] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:20:16.886 [DEBUG] [Thread-24545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:20:16.887 [DEBUG] [Thread-24545] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:20:16.887 [DEBUG] [Thread-24545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:20:16.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:20:16.888 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:20:16.889 [DEBUG] [Thread-24545] [transport.py] [_log()] userauth is OK
2025-11-12T23:20:16.889 [DEBUG] [Thread-24545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:20:16.889 [DEBUG] [Thread-24545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:20:16.889 [DEBUG] [Thread-24545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:20:16.889 [DEBUG] [Thread-24545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:20:16.911 [INFO] [Thread-24545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:20:16.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:20:17.927 [DEBUG] [Thread-24545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:20:17.927 [DEBUG] [Thread-24545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:20:17.928 [DEBUG] [Thread-24545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:20:17.969 [DEBUG] [Thread-24545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:20:17.969 [DEBUG] [Thread-24545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:20:17.973 [DEBUG] [Thread-24545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:20:17.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:20:17.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:20:17.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:20:17.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:20:17.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:20:17.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:20:17.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:20:17.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:20:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:20:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.888623 -999.00  +15.60   8.32     62   +8.50 1 2 1 1 1     0    0 5.04 -96.08 ZnESW 9.9 8.3 184.8 14.3 16.4 -21.3 16.4 -20.7 16.2 -20.3 16.4 -21.0
2025-11-12T23:20:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:20:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:20:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.888623
2025-11-12T23:20:17.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:20:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:20:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:20:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:20:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:20:18.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:19:52', tmtdew=7.93, humidity=58.8, cloud=0.0, wind=12.97, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:19:52', seeing=0.92, atlas_timestamp='2025-11-12T21:19:37.027', atlas_cloud=2, atlas_rain=1, zp_data=[0.4247499999999995, 0.5302500000000006, 0.6407500000000006, 0.44649999999999856, 0.46950000000000003, 0.5272500000000004, 0.5284999999999993, 0.6492500000000003, 0.6344999999999992, 0.5860000000000003, 0.5402500000000003, 0.5969999999999995, 0.5999999999999996, 0.6587499999999995, 0.7759999999999989, 0.9219999999999997, 0.7962499999999997, 0.6245000000000003, 0.5559999999999992, 0.6312499999999996, 0.724499999999999, 1.199749999999998, 1.074250000000001, 1.14975, 0.7379999999999995, 0.5339999999999998, 0.3507499999999997, 0.43900000000000006, 0.5765000000000002, 1.0770000000000008, 1.5040000000000013, 1.6480000000000006, 1.723749999999999], zp_timestamp='2025-11-12T21:16:00')
2025-11-12T23:20:18.001 [DEBUG] [Thread-24545] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:20:18.084 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:20:18.096 [DEBUG] [Thread-24548] [transport.py] [_log()] starting thread (client mode): 0x14983280
2025-11-12T23:20:18.096 [DEBUG] [Thread-24548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:20:18.111 [DEBUG] [Thread-24548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:20:18.111 [INFO] [Thread-24548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] client lang: <none>
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] server lang: <none>
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] kex follows: False
2025-11-12T23:20:18.119 [DEBUG] [Thread-24548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:20:18.120 [DEBUG] [Thread-24548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:20:18.120 [DEBUG] [Thread-24548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:20:18.120 [DEBUG] [Thread-24548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:20:18.120 [DEBUG] [Thread-24548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:20:18.120 [DEBUG] [Thread-24548] [transport.py] [_log()] Compression: none
2025-11-12T23:20:18.120 [DEBUG] [Thread-24548] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:20:18.175 [DEBUG] [Thread-24548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:20:18.176 [DEBUG] [Thread-24548] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:20:18.176 [DEBUG] [Thread-24548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:20:18.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:20:18.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:20:18.232 [DEBUG] [Thread-24548] [transport.py] [_log()] userauth is OK
2025-11-12T23:20:18.232 [DEBUG] [Thread-24548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:20:18.232 [DEBUG] [Thread-24548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:20:18.232 [DEBUG] [Thread-24548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:20:18.232 [DEBUG] [Thread-24548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:20:18.249 [INFO] [Thread-24548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:20:18.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:20:18.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:20:19.061 [DEBUG] [Thread-24548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:20:19.062 [DEBUG] [Thread-24548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:20:19.110 [DEBUG] [Thread-24548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:20:19.110 [DEBUG] [Thread-24548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:20:19.119 [DEBUG] [Thread-24548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:20:19.128 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:20:19.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-11-12T23:20:19.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-11-12T23:20:19.147 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:20:19.147 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:20:19.148 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:20:19.156 [DEBUG] [Thread-24548] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:20:21.378 [DEBUG] [Thread-24550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:20:36.431 [DEBUG] [Thread-24551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:20:49.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:20:49.156 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:20:49.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-11-12T23:20:49.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 20, 24), 7.92, 58.85, 0.0, 12.67, 15.39, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:20:49.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:20:24
2025-11-12T23:20:49.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:20:50.061 [DEBUG] [Thread-24552] [transport.py] [_log()] starting thread (client mode): 0x14982d70
2025-11-12T23:20:50.061 [DEBUG] [Thread-24552] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:20:50.083 [DEBUG] [Thread-24552] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:20:50.083 [INFO] [Thread-24552] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:20:50.086 [DEBUG] [Thread-24552] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:20:50.086 [DEBUG] [Thread-24552] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:20:50.086 [DEBUG] [Thread-24552] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:20:50.086 [DEBUG] [Thread-24552] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:20:50.086 [DEBUG] [Thread-24552] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:20:50.086 [DEBUG] [Thread-24552] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:20:50.086 [DEBUG] [Thread-24552] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:20:50.086 [DEBUG] [Thread-24552] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] client lang: <none>
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] server lang: <none>
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] kex follows: False
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] Compression: none
2025-11-12T23:20:50.087 [DEBUG] [Thread-24552] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:20:50.104 [DEBUG] [Thread-24552] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:20:50.105 [DEBUG] [Thread-24552] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:20:50.105 [DEBUG] [Thread-24552] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:20:50.105 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:20:50.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:20:50.107 [DEBUG] [Thread-24552] [transport.py] [_log()] userauth is OK
2025-11-12T23:20:50.107 [DEBUG] [Thread-24552] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:20:50.107 [DEBUG] [Thread-24552] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:20:50.107 [DEBUG] [Thread-24552] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:20:50.108 [DEBUG] [Thread-24552] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:20:50.132 [INFO] [Thread-24552] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:20:50.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:20:50.788 [DEBUG] [Thread-24552] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:20:50.788 [DEBUG] [Thread-24552] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:20:50.789 [DEBUG] [Thread-24552] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:20:50.830 [DEBUG] [Thread-24552] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:20:50.830 [DEBUG] [Thread-24552] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:20:50.833 [DEBUG] [Thread-24552] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:20:50.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:20:50.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:20:50.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:20:50.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:20:50.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:20:50.858 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:20:50.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:20:50.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:20:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:20:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.889318 -999.00  +15.60   9.89     62   +8.50 1 2 1 1 1     0    0 4.88 -102.94 ZnESW 10.5 9.9 192.0 14.6 16.4 -21.4 16.3 -21.0 16.1 -20.1 16.4 -20.9
2025-11-12T23:20:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:20:50.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:20:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.889318
2025-11-12T23:20:50.860 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:20:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:20:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:20:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:20:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:20:50.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:20:24', tmtdew=7.92, humidity=58.85, cloud=0.0, wind=12.67, temperature=15.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:20:24', seeing=0.92, atlas_timestamp='2025-11-12T21:20:37.075', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:19:00')
2025-11-12T23:20:50.861 [DEBUG] [Thread-24552] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:20:50.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:20:50.963 [DEBUG] [Thread-24555] [transport.py] [_log()] starting thread (client mode): 0x14980130
2025-11-12T23:20:50.963 [DEBUG] [Thread-24555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:20:50.978 [DEBUG] [Thread-24555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:20:50.979 [INFO] [Thread-24555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:20:50.986 [DEBUG] [Thread-24555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] client lang: <none>
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] server lang: <none>
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] kex follows: False
2025-11-12T23:20:50.987 [DEBUG] [Thread-24555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:20:50.988 [DEBUG] [Thread-24555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:20:50.988 [DEBUG] [Thread-24555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:20:50.988 [DEBUG] [Thread-24555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:20:50.988 [DEBUG] [Thread-24555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:20:50.988 [DEBUG] [Thread-24555] [transport.py] [_log()] Compression: none
2025-11-12T23:20:50.988 [DEBUG] [Thread-24555] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:20:51.049 [DEBUG] [Thread-24555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:20:51.050 [DEBUG] [Thread-24555] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:20:51.051 [DEBUG] [Thread-24555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:20:51.051 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:20:51.052 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:20:51.110 [DEBUG] [Thread-24555] [transport.py] [_log()] userauth is OK
2025-11-12T23:20:51.110 [DEBUG] [Thread-24555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:20:51.110 [DEBUG] [Thread-24555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:20:51.110 [DEBUG] [Thread-24555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:20:51.111 [DEBUG] [Thread-24555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:20:51.130 [INFO] [Thread-24555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:20:51.130 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:20:51.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:20:51.467 [DEBUG] [Thread-24557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:20:51.940 [DEBUG] [Thread-24555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:20:51.940 [DEBUG] [Thread-24555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:20:51.988 [DEBUG] [Thread-24555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:20:51.988 [DEBUG] [Thread-24555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:20:51.998 [DEBUG] [Thread-24555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:20:52.008 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:20:52.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-11-12T23:20:52.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-11-12T23:20:52.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:20:52.028 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:20:52.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:20:52.036 [DEBUG] [Thread-24555] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:21:02.388 [DEBUG] [Thread-24558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:06.514 [DEBUG] [Thread-24559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:12.109 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:12.110 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:21.556 [DEBUG] [Thread-24560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:22.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:21:22.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:21:22.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-11-12T23:21:22.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 20, 56), 7.97, 58.86, 0.0, 12.02, 15.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:21:22.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:20:56
2025-11-12T23:21:22.819 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:21:22.964 [DEBUG] [Thread-24561] [transport.py] [_log()] starting thread (client mode): 0x14981990
2025-11-12T23:21:22.964 [DEBUG] [Thread-24561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:21:22.985 [DEBUG] [Thread-24561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:21:22.985 [INFO] [Thread-24561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:21:22.988 [DEBUG] [Thread-24561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:21:22.988 [DEBUG] [Thread-24561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:21:22.988 [DEBUG] [Thread-24561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] client lang: <none>
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] server lang: <none>
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] kex follows: False
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:21:22.989 [DEBUG] [Thread-24561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:21:22.990 [DEBUG] [Thread-24561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:21:22.990 [DEBUG] [Thread-24561] [transport.py] [_log()] Compression: none
2025-11-12T23:21:22.990 [DEBUG] [Thread-24561] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:21:23.008 [DEBUG] [Thread-24561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:21:23.009 [DEBUG] [Thread-24561] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:21:23.009 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:21:23.010 [DEBUG] [Thread-24561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:21:23.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:21:23.012 [DEBUG] [Thread-24561] [transport.py] [_log()] userauth is OK
2025-11-12T23:21:23.012 [DEBUG] [Thread-24561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:21:23.012 [DEBUG] [Thread-24561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:21:23.012 [DEBUG] [Thread-24561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:21:23.012 [DEBUG] [Thread-24561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:21:23.036 [INFO] [Thread-24561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:21:23.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:21:23.669 [DEBUG] [Thread-24561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:21:23.669 [DEBUG] [Thread-24561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:21:23.669 [DEBUG] [Thread-24561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:21:23.710 [DEBUG] [Thread-24561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:21:23.710 [DEBUG] [Thread-24561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:21:23.712 [DEBUG] [Thread-24561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:21:23.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:21:23.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:21:23.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:21:23.727 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:21:23.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:21:23.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:21:23.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:21:23.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:21:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:21:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.889665 -999.00  +15.60   7.95     62   +8.50 1 2 1 1 1     0    0 5.10 -96.43 ZnESW 8.8 8.0 190.8 11.8 16.4 -21.4 16.3 -20.7 16.1 -20.4 16.3 -21.0
2025-11-12T23:21:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:21:23.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:21:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.889665
2025-11-12T23:21:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:21:23.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:21:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:21:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:21:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:21:23.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:20:56', tmtdew=7.97, humidity=58.86, cloud=0.0, wind=12.02, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:20:56', seeing=0.78, atlas_timestamp='2025-11-12T21:21:07.056', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:19:00')
2025-11-12T23:21:23.736 [DEBUG] [Thread-24561] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:21:23.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:21:23.833 [DEBUG] [Thread-24564] [transport.py] [_log()] starting thread (client mode): 0x14946ec0
2025-11-12T23:21:23.834 [DEBUG] [Thread-24564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:21:23.848 [DEBUG] [Thread-24564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:21:23.848 [INFO] [Thread-24564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] client lang: <none>
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] server lang: <none>
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] kex follows: False
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:21:23.856 [DEBUG] [Thread-24564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:21:23.857 [DEBUG] [Thread-24564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:21:23.857 [DEBUG] [Thread-24564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:21:23.857 [DEBUG] [Thread-24564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:21:23.857 [DEBUG] [Thread-24564] [transport.py] [_log()] Compression: none
2025-11-12T23:21:23.857 [DEBUG] [Thread-24564] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:21:23.916 [DEBUG] [Thread-24564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:21:23.916 [DEBUG] [Thread-24564] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:21:23.917 [DEBUG] [Thread-24564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:21:23.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:21:23.918 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:21:23.972 [DEBUG] [Thread-24564] [transport.py] [_log()] userauth is OK
2025-11-12T23:21:23.972 [DEBUG] [Thread-24564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:21:23.972 [DEBUG] [Thread-24564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:21:23.973 [DEBUG] [Thread-24564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:21:23.973 [DEBUG] [Thread-24564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:21:23.991 [INFO] [Thread-24564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:21:23.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:21:23.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:21:24.829 [DEBUG] [Thread-24564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:21:24.829 [DEBUG] [Thread-24564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:21:24.876 [DEBUG] [Thread-24564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:21:24.877 [DEBUG] [Thread-24564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:21:24.886 [DEBUG] [Thread-24564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:21:24.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:21:24.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-11-12T23:21:24.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:21:24.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:21:24.915 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:21:24.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:21:24.923 [DEBUG] [Thread-24564] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:21:36.593 [DEBUG] [Thread-24566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:42.207 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:45.367 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:50.436 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:51.646 [DEBUG] [Thread-24567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:54.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:21:54.918 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:21:54.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-11-12T23:21:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 21, 28), 7.94, 58.98, 0.0, 12.63, 15.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:21:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:21:28
2025-11-12T23:21:55.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:21:55.825 [DEBUG] [Thread-24568] [transport.py] [_log()] starting thread (client mode): 0x14981840
2025-11-12T23:21:55.825 [DEBUG] [Thread-24568] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:21:55.846 [DEBUG] [Thread-24568] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:21:55.846 [INFO] [Thread-24568] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] client lang: <none>
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] server lang: <none>
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] kex follows: False
2025-11-12T23:21:55.849 [DEBUG] [Thread-24568] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:21:55.850 [DEBUG] [Thread-24568] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:21:55.850 [DEBUG] [Thread-24568] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:21:55.850 [DEBUG] [Thread-24568] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:21:55.850 [DEBUG] [Thread-24568] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:21:55.850 [DEBUG] [Thread-24568] [transport.py] [_log()] Compression: none
2025-11-12T23:21:55.850 [DEBUG] [Thread-24568] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:21:55.867 [DEBUG] [Thread-24568] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:21:55.868 [DEBUG] [Thread-24568] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:21:55.868 [DEBUG] [Thread-24568] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:21:55.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:21:55.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:21:55.870 [DEBUG] [Thread-24568] [transport.py] [_log()] userauth is OK
2025-11-12T23:21:55.871 [DEBUG] [Thread-24568] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:21:55.871 [DEBUG] [Thread-24568] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:21:55.871 [DEBUG] [Thread-24568] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:21:55.871 [DEBUG] [Thread-24568] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:21:55.895 [INFO] [Thread-24568] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:21:55.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:21:56.545 [DEBUG] [Thread-24568] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:21:56.546 [DEBUG] [Thread-24568] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:21:56.546 [DEBUG] [Thread-24568] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:21:56.586 [DEBUG] [Thread-24568] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:21:56.587 [DEBUG] [Thread-24568] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:21:56.589 [DEBUG] [Thread-24568] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:21:56.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:21:56.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:21:56.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:21:56.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:21:56.609 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:21:56.611 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:21:56.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:21:56.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:21:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:21:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.890012 -999.00  +15.60   7.72     62   +8.50 1 2 1 1 1     0    0 5.06 -89.63 ZnESW 7.0 7.7 197.8 12.6 16.4 -21.4 16.3 -20.7 16.1 -20.2 16.4 -21.0
2025-11-12T23:21:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:21:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:21:56.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.890012
2025-11-12T23:21:56.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:21:56.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:21:56.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:21:56.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:21:56.613 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:21:56.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:21:28', tmtdew=7.94, humidity=58.98, cloud=0.0, wind=12.63, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:21:28', seeing=0.78, atlas_timestamp='2025-11-12T21:21:37.037', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:19:00')
2025-11-12T23:21:56.614 [DEBUG] [Thread-24568] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:21:56.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:21:56.712 [DEBUG] [Thread-24571] [transport.py] [_log()] starting thread (client mode): 0x14980fa0
2025-11-12T23:21:56.712 [DEBUG] [Thread-24571] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:21:56.727 [DEBUG] [Thread-24571] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:21:56.727 [INFO] [Thread-24571] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:21:56.734 [DEBUG] [Thread-24571] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] client lang: <none>
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] server lang: <none>
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] kex follows: False
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:21:56.735 [DEBUG] [Thread-24571] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:21:56.736 [DEBUG] [Thread-24571] [transport.py] [_log()] Compression: none
2025-11-12T23:21:56.736 [DEBUG] [Thread-24571] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:21:56.791 [DEBUG] [Thread-24571] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:21:56.791 [DEBUG] [Thread-24571] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:21:56.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:21:56.792 [DEBUG] [Thread-24571] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:21:56.792 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:21:56.835 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:21:56.847 [DEBUG] [Thread-24571] [transport.py] [_log()] userauth is OK
2025-11-12T23:21:56.848 [DEBUG] [Thread-24571] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:21:56.848 [DEBUG] [Thread-24571] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:21:56.848 [DEBUG] [Thread-24571] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:21:56.848 [DEBUG] [Thread-24571] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:21:56.861 [INFO] [Thread-24571] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:21:56.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:21:56.861 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:21:57.714 [DEBUG] [Thread-24571] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:21:57.714 [DEBUG] [Thread-24571] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:21:57.761 [DEBUG] [Thread-24571] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:21:57.762 [DEBUG] [Thread-24571] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:21:57.771 [DEBUG] [Thread-24571] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:21:57.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:21:57.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-11-12T23:21:57.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-11-12T23:21:57.798 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:21:57.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:21:57.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:21:57.807 [DEBUG] [Thread-24571] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:22:02.440 [DEBUG] [Thread-24573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:06.683 [DEBUG] [Thread-24574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:12.324 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:12.325 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:15.191 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:19.554 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:21.734 [DEBUG] [Thread-24575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:27.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:22:27.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:22:27.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-11-12T23:22:28.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 21, 28), 7.94, 58.98, 0.0, 12.63, 15.34, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:22:28.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:21:28
2025-11-12T23:22:28.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:22:28.738 [DEBUG] [Thread-24576] [transport.py] [_log()] starting thread (client mode): 0x14982530
2025-11-12T23:22:28.739 [DEBUG] [Thread-24576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:22:28.758 [DEBUG] [Thread-24576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:22:28.758 [INFO] [Thread-24576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] client lang: <none>
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] server lang: <none>
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] kex follows: False
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] Compression: none
2025-11-12T23:22:28.761 [DEBUG] [Thread-24576] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:22:28.769 [DEBUG] [Thread-24576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:22:28.769 [DEBUG] [Thread-24576] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:22:28.770 [DEBUG] [Thread-24576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:22:28.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:22:28.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:22:28.771 [DEBUG] [Thread-24576] [transport.py] [_log()] userauth is OK
2025-11-12T23:22:28.771 [DEBUG] [Thread-24576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:22:28.771 [DEBUG] [Thread-24576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:22:28.772 [DEBUG] [Thread-24576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:22:28.772 [DEBUG] [Thread-24576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:22:28.794 [INFO] [Thread-24576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:22:28.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:22:29.370 [DEBUG] [Thread-24576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:22:29.371 [DEBUG] [Thread-24576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:22:29.371 [DEBUG] [Thread-24576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:22:29.412 [DEBUG] [Thread-24576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:22:29.412 [DEBUG] [Thread-24576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:22:29.415 [DEBUG] [Thread-24576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:22:29.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:22:29.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:22:29.429 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:22:29.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:22:29.437 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:22:29.439 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:22:29.439 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:22:29.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:22:29.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:22:29.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.890359 -999.00  +15.60   9.37     63   +8.60 1 2 1 1 1     0    0 5.14 -87.29 ZnESW 6.6 9.4 196.4 10.4 16.4 -21.3 16.3 -20.7 16.1 -20.4 16.4 -20.9
2025-11-12T23:22:29.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:22:29.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:22:29.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.890359
2025-11-12T23:22:29.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:22:29.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:22:29.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:22:29.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:22:29.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:22:29.441 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:21:28', tmtdew=7.94, humidity=58.98, cloud=0.0, wind=12.63, temperature=15.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:22:00', seeing=0.92, atlas_timestamp='2025-11-12T21:22:07.018', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:19:00')
2025-11-12T23:22:29.442 [DEBUG] [Thread-24576] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:22:29.525 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:22:29.539 [DEBUG] [Thread-24579] [transport.py] [_log()] starting thread (client mode): 0x19dd9210
2025-11-12T23:22:29.539 [DEBUG] [Thread-24579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:22:29.554 [DEBUG] [Thread-24579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:22:29.554 [INFO] [Thread-24579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] client lang: <none>
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] server lang: <none>
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] kex follows: False
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:22:29.562 [DEBUG] [Thread-24579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:22:29.563 [DEBUG] [Thread-24579] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:22:29.563 [DEBUG] [Thread-24579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:22:29.563 [DEBUG] [Thread-24579] [transport.py] [_log()] Compression: none
2025-11-12T23:22:29.563 [DEBUG] [Thread-24579] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:22:29.624 [DEBUG] [Thread-24579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:22:29.624 [DEBUG] [Thread-24579] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:22:29.624 [DEBUG] [Thread-24579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:22:29.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:22:29.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:22:29.681 [DEBUG] [Thread-24579] [transport.py] [_log()] userauth is OK
2025-11-12T23:22:29.681 [DEBUG] [Thread-24579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:22:29.681 [DEBUG] [Thread-24579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:22:29.681 [DEBUG] [Thread-24579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:22:29.681 [DEBUG] [Thread-24579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:22:29.695 [INFO] [Thread-24579] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:22:29.695 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:22:29.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:22:30.506 [DEBUG] [Thread-24579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:22:30.506 [DEBUG] [Thread-24579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:22:30.553 [DEBUG] [Thread-24579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:22:30.554 [DEBUG] [Thread-24579] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:22:30.563 [DEBUG] [Thread-24579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:22:30.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:22:30.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-11-12T23:22:30.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-11-12T23:22:30.589 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:22:30.589 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:22:30.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:22:30.598 [DEBUG] [Thread-24579] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:22:36.770 [DEBUG] [Thread-24581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:38.986 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:43.355 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:49.501 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:51.834 [DEBUG] [Thread-24582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:22:53.884 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:00.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:23:00.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:23:00.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-11-12T23:23:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 22, 32), 7.92, 59.05, 0.0, 10.43, 15.36, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:23:01.251 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:22:32
2025-11-12T23:23:01.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:23:01.519 [DEBUG] [Thread-24583] [transport.py] [_log()] starting thread (client mode): 0x14981120
2025-11-12T23:23:01.519 [DEBUG] [Thread-24583] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:23:01.534 [DEBUG] [Thread-24583] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:23:01.534 [INFO] [Thread-24583] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] client lang: <none>
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] server lang: <none>
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] kex follows: False
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:23:01.537 [DEBUG] [Thread-24583] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:23:01.538 [DEBUG] [Thread-24583] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:23:01.538 [DEBUG] [Thread-24583] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:23:01.538 [DEBUG] [Thread-24583] [transport.py] [_log()] Compression: none
2025-11-12T23:23:01.538 [DEBUG] [Thread-24583] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:23:01.554 [DEBUG] [Thread-24583] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:23:01.555 [DEBUG] [Thread-24583] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:23:01.555 [DEBUG] [Thread-24583] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:23:01.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:23:01.556 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:23:01.557 [DEBUG] [Thread-24583] [transport.py] [_log()] userauth is OK
2025-11-12T23:23:01.557 [DEBUG] [Thread-24583] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:23:01.557 [DEBUG] [Thread-24583] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:23:01.558 [DEBUG] [Thread-24583] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:23:01.558 [DEBUG] [Thread-24583] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:23:01.576 [INFO] [Thread-24583] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:23:01.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:23:02.149 [DEBUG] [Thread-24583] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:23:02.150 [DEBUG] [Thread-24583] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:23:02.150 [DEBUG] [Thread-24583] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:23:02.191 [DEBUG] [Thread-24583] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:23:02.191 [DEBUG] [Thread-24583] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:23:02.194 [DEBUG] [Thread-24583] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:23:02.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:23:02.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:23:02.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:23:02.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:23:02.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:23:02.219 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:23:02.219 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:23:02.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:23:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:23:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.890707 -999.00  +15.60   6.36     62   +8.50 1 2 1 1 1     0    0 5.23 -89.64 ZnESW 7.6 6.4 191.8 11.0 16.4 -21.3 16.3 -20.6 16.1 -20.2 16.4 -20.8
2025-11-12T23:23:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:23:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:23:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.890707
2025-11-12T23:23:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:23:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:23:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:23:02.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:23:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:23:02.222 [DEBUG] [Thread-24583] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:23:02.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:22:32', tmtdew=7.92, humidity=59.05, cloud=0.0, wind=10.43, temperature=15.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:22:32', seeing=0.92, atlas_timestamp='2025-11-12T21:22:37.085', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:19:00')
2025-11-12T23:23:02.305 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:23:02.320 [DEBUG] [Thread-24586] [transport.py] [_log()] starting thread (client mode): 0x14944d90
2025-11-12T23:23:02.321 [DEBUG] [Thread-24586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:23:02.336 [DEBUG] [Thread-24586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:23:02.336 [INFO] [Thread-24586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:23:02.347 [DEBUG] [Thread-24586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:23:02.347 [DEBUG] [Thread-24586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] client lang: <none>
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] server lang: <none>
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] kex follows: False
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:23:02.348 [DEBUG] [Thread-24586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:23:02.349 [DEBUG] [Thread-24586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:23:02.349 [DEBUG] [Thread-24586] [transport.py] [_log()] Compression: none
2025-11-12T23:23:02.349 [DEBUG] [Thread-24586] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:23:02.414 [DEBUG] [Thread-24586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:23:02.415 [DEBUG] [Thread-24586] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:23:02.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:23:02.416 [DEBUG] [Thread-24586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:23:02.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:23:02.482 [DEBUG] [Thread-24586] [transport.py] [_log()] userauth is OK
2025-11-12T23:23:02.482 [DEBUG] [Thread-24586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:23:02.483 [DEBUG] [Thread-24586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:23:02.483 [DEBUG] [Thread-24586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:23:02.483 [DEBUG] [Thread-24586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:23:02.496 [DEBUG] [Thread-24588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:02.499 [INFO] [Thread-24586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:23:02.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:23:02.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:23:03.104 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:03.347 [DEBUG] [Thread-24586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:23:03.347 [DEBUG] [Thread-24586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:23:03.396 [DEBUG] [Thread-24586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:23:03.396 [DEBUG] [Thread-24586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:23:03.408 [DEBUG] [Thread-24586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:23:03.417 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:23:03.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-11-12T23:23:03.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-11-12T23:23:03.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:23:03.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:23:03.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:23:03.450 [DEBUG] [Thread-24586] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:23:06.866 [DEBUG] [Thread-24589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:07.156 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:12.529 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:12.530 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:21.913 [DEBUG] [Thread-24590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:33.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:23:33.470 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:23:33.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 23, 4), 7.89, 59.15, 0.0, 9.25, 15.33, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:23:34.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:23:04
2025-11-12T23:23:34.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:23:34.445 [DEBUG] [Thread-24591] [transport.py] [_log()] starting thread (client mode): 0x149454e0
2025-11-12T23:23:34.445 [DEBUG] [Thread-24591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:23:34.465 [DEBUG] [Thread-24591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:23:34.465 [INFO] [Thread-24591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] client lang: <none>
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] server lang: <none>
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] kex follows: False
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:23:34.468 [DEBUG] [Thread-24591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:23:34.469 [DEBUG] [Thread-24591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:23:34.469 [DEBUG] [Thread-24591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:23:34.469 [DEBUG] [Thread-24591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:23:34.469 [DEBUG] [Thread-24591] [transport.py] [_log()] Compression: none
2025-11-12T23:23:34.469 [DEBUG] [Thread-24591] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:23:34.483 [DEBUG] [Thread-24591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:23:34.483 [DEBUG] [Thread-24591] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:23:34.483 [DEBUG] [Thread-24591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:23:34.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:23:34.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:23:34.484 [DEBUG] [Thread-24591] [transport.py] [_log()] userauth is OK
2025-11-12T23:23:34.484 [DEBUG] [Thread-24591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:23:34.484 [DEBUG] [Thread-24591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:23:34.484 [DEBUG] [Thread-24591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:23:34.484 [DEBUG] [Thread-24591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:23:34.495 [INFO] [Thread-24591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:23:34.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:23:35.083 [DEBUG] [Thread-24591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:23:35.084 [DEBUG] [Thread-24591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:23:35.084 [DEBUG] [Thread-24591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:23:35.125 [DEBUG] [Thread-24591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:23:35.125 [DEBUG] [Thread-24591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:23:35.128 [DEBUG] [Thread-24591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:23:35.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:23:35.140 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:23:35.141 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:23:35.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:23:35.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:23:35.152 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:23:35.152 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.891054 -999.00  +15.50   8.50     63   +8.50 1 2 1 1 1     0    0 5.07 -91.08 ZneSW 7.9 8.5 197.6 11.9 16.4 -21.4 16.2 -20.5 16.1 -20.2 16.4 -20.8
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.891054
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:23:35.152 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:23:04', tmtdew=7.89, humidity=59.15, cloud=0.0, wind=9.25, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:23:04', seeing=1.02, atlas_timestamp='2025-11-12T21:23:07.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:22:00')
2025-11-12T23:23:35.156 [DEBUG] [Thread-24591] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:23:35.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:23:35.240 [DEBUG] [Thread-24594] [transport.py] [_log()] starting thread (client mode): 0x14980dc0
2025-11-12T23:23:35.241 [DEBUG] [Thread-24594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:23:35.257 [DEBUG] [Thread-24594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:23:35.257 [INFO] [Thread-24594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:23:35.264 [DEBUG] [Thread-24594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] client lang: <none>
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] server lang: <none>
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] kex follows: False
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] Compression: none
2025-11-12T23:23:35.265 [DEBUG] [Thread-24594] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:23:35.323 [DEBUG] [Thread-24594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:23:35.323 [DEBUG] [Thread-24594] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:23:35.323 [DEBUG] [Thread-24594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:23:35.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:23:35.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:23:35.379 [DEBUG] [Thread-24594] [transport.py] [_log()] userauth is OK
2025-11-12T23:23:35.379 [DEBUG] [Thread-24594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:23:35.379 [DEBUG] [Thread-24594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:23:35.379 [DEBUG] [Thread-24594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:23:35.379 [DEBUG] [Thread-24594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:23:35.394 [INFO] [Thread-24594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:23:35.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:23:35.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:23:36.241 [DEBUG] [Thread-24594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:23:36.241 [DEBUG] [Thread-24594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:23:36.289 [DEBUG] [Thread-24594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:23:36.289 [DEBUG] [Thread-24594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:23:36.297 [DEBUG] [Thread-24594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:23:36.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:23:36.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-11-12T23:23:36.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-11-12T23:23:36.321 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:23:36.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:23:36.321 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:23:36.329 [DEBUG] [Thread-24594] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:23:36.943 [DEBUG] [Thread-24596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:41.831 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:50.427 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:51.995 [DEBUG] [Thread-24597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:23:54.492 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:02.552 [DEBUG] [Thread-24598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:06.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:24:06.352 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:24:06.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-11-12T23:24:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 23, 36), 7.81, 59.58, 0.0, 11.81, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:24:06.994 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:23:36
2025-11-12T23:24:07.032 [DEBUG] [Thread-24599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:07.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:24:07.262 [DEBUG] [Thread-24600] [transport.py] [_log()] starting thread (client mode): 0x14947c10
2025-11-12T23:24:07.262 [DEBUG] [Thread-24600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:24:07.282 [DEBUG] [Thread-24600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:24:07.282 [INFO] [Thread-24600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] client lang: <none>
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] server lang: <none>
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] kex follows: False
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:24:07.285 [DEBUG] [Thread-24600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:24:07.286 [DEBUG] [Thread-24600] [transport.py] [_log()] Compression: none
2025-11-12T23:24:07.286 [DEBUG] [Thread-24600] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:24:07.301 [DEBUG] [Thread-24600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:24:07.302 [DEBUG] [Thread-24600] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:24:07.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:24:07.303 [DEBUG] [Thread-24600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:24:07.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:24:07.305 [DEBUG] [Thread-24600] [transport.py] [_log()] userauth is OK
2025-11-12T23:24:07.305 [DEBUG] [Thread-24600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:24:07.305 [DEBUG] [Thread-24600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:24:07.305 [DEBUG] [Thread-24600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:24:07.305 [DEBUG] [Thread-24600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:24:07.323 [INFO] [Thread-24600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:24:07.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:24:07.947 [DEBUG] [Thread-24600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:24:07.947 [DEBUG] [Thread-24600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:24:07.948 [DEBUG] [Thread-24600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:24:07.989 [DEBUG] [Thread-24600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:24:07.989 [DEBUG] [Thread-24600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:24:07.992 [DEBUG] [Thread-24600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:24:08.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:24:08.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:24:08.007 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:24:08.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:24:08.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:24:08.018 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:24:08.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:24:08.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:24:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:24:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.891054 -999.00  +15.50   8.50     63   +8.50 1 2 1 1 1     0    0 5.07 -91.08 ZneSW 7.9 8.5 197.6 11.9 16.4 -21.4 16.2 -20.5 16.1 -20.2 16.4 -20.8
2025-11-12T23:24:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:24:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:24:08.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.891054
2025-11-12T23:24:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:24:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:24:08.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:24:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:24:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:24:08.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:23:36', tmtdew=7.81, humidity=59.58, cloud=0.0, wind=11.81, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:23:36', seeing=1.17, atlas_timestamp='2025-11-12T21:23:07.066', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:22:00')
2025-11-12T23:24:08.021 [DEBUG] [Thread-24600] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:24:08.104 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:24:08.114 [DEBUG] [Thread-24603] [transport.py] [_log()] starting thread (client mode): 0x14947310
2025-11-12T23:24:08.115 [DEBUG] [Thread-24603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:24:08.129 [DEBUG] [Thread-24603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:24:08.130 [INFO] [Thread-24603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:24:08.137 [DEBUG] [Thread-24603] [transport.py] [_log()] client lang: <none>
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] server lang: <none>
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] kex follows: False
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] Compression: none
2025-11-12T23:24:08.138 [DEBUG] [Thread-24603] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:24:08.200 [DEBUG] [Thread-24603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:24:08.200 [DEBUG] [Thread-24603] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:24:08.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:24:08.201 [DEBUG] [Thread-24603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:24:08.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:24:08.257 [DEBUG] [Thread-24603] [transport.py] [_log()] userauth is OK
2025-11-12T23:24:08.257 [DEBUG] [Thread-24603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:24:08.257 [DEBUG] [Thread-24603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:24:08.257 [DEBUG] [Thread-24603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:24:08.258 [DEBUG] [Thread-24603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:24:08.278 [INFO] [Thread-24603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:24:08.278 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:24:08.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:24:09.078 [DEBUG] [Thread-24603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:24:09.078 [DEBUG] [Thread-24603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:24:09.126 [DEBUG] [Thread-24603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:24:09.126 [DEBUG] [Thread-24603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:24:09.134 [DEBUG] [Thread-24603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:24:09.142 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:24:09.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:24:09.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-11-12T23:24:09.157 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:24:09.157 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:24:09.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:24:09.165 [DEBUG] [Thread-24603] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:24:12.732 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:12.732 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:22.062 [DEBUG] [Thread-24605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:27.296 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:34.342 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:37.114 [DEBUG] [Thread-24606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:38.585 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:24:39.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:24:39.188 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:24:39.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:24:39.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 24, 8), 7.78, 59.71, 0.0, 11.61, 15.29, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:24:39.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:24:08
2025-11-12T23:24:39.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:24:40.098 [DEBUG] [Thread-24607] [transport.py] [_log()] starting thread (client mode): 0x14982860
2025-11-12T23:24:40.098 [DEBUG] [Thread-24607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:24:40.118 [DEBUG] [Thread-24607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:24:40.118 [INFO] [Thread-24607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] client lang: <none>
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] server lang: <none>
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] kex follows: False
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:24:40.121 [DEBUG] [Thread-24607] [transport.py] [_log()] Compression: none
2025-11-12T23:24:40.122 [DEBUG] [Thread-24607] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:24:40.137 [DEBUG] [Thread-24607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:24:40.138 [DEBUG] [Thread-24607] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:24:40.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:24:40.139 [DEBUG] [Thread-24607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:24:40.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:24:40.141 [DEBUG] [Thread-24607] [transport.py] [_log()] userauth is OK
2025-11-12T23:24:40.141 [DEBUG] [Thread-24607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:24:40.141 [DEBUG] [Thread-24607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:24:40.141 [DEBUG] [Thread-24607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:24:40.141 [DEBUG] [Thread-24607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:24:40.177 [INFO] [Thread-24607] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:24:40.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:24:40.805 [DEBUG] [Thread-24607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:24:40.805 [DEBUG] [Thread-24607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:24:40.805 [DEBUG] [Thread-24607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:24:40.846 [DEBUG] [Thread-24607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:24:40.846 [DEBUG] [Thread-24607] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:24:40.848 [DEBUG] [Thread-24607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:24:40.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:24:40.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:24:40.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:24:40.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:24:40.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:24:40.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:24:40.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:24:40.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.891748 -999.00  +15.50  10.14     63   +8.50 1 2 1 1 1     0    0 5.31 -82.89 ZnESW 7.4 10.1 195.2 11.2 16.4 -21.2 16.3 -20.4 16.0 -20.1 16.3 -20.8
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.891748
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:24:40.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:24:08', tmtdew=7.78, humidity=59.71, cloud=0.0, wind=11.61, temperature=15.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:24:08', seeing=1.17, atlas_timestamp='2025-11-12T21:24:07.027', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:22:00')
2025-11-12T23:24:40.866 [DEBUG] [Thread-24607] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:24:40.940 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:24:40.951 [DEBUG] [Thread-24610] [transport.py] [_log()] starting thread (client mode): 0x11f01a20
2025-11-12T23:24:40.951 [DEBUG] [Thread-24610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:24:40.966 [DEBUG] [Thread-24610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:24:40.966 [INFO] [Thread-24610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:24:40.973 [DEBUG] [Thread-24610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] client lang: <none>
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] server lang: <none>
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] kex follows: False
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] Compression: none
2025-11-12T23:24:40.974 [DEBUG] [Thread-24610] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:24:41.030 [DEBUG] [Thread-24610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:24:41.030 [DEBUG] [Thread-24610] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:24:41.031 [DEBUG] [Thread-24610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:24:41.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:24:41.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:24:41.087 [DEBUG] [Thread-24610] [transport.py] [_log()] userauth is OK
2025-11-12T23:24:41.087 [DEBUG] [Thread-24610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:24:41.087 [DEBUG] [Thread-24610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:24:41.087 [DEBUG] [Thread-24610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:24:41.087 [DEBUG] [Thread-24610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:24:41.105 [INFO] [Thread-24610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:24:41.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:24:41.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:24:41.936 [DEBUG] [Thread-24610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:24:41.936 [DEBUG] [Thread-24610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:24:41.984 [DEBUG] [Thread-24610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:24:41.984 [DEBUG] [Thread-24610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:24:41.992 [DEBUG] [Thread-24610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:24:42.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:24:42.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:24:42.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-11-12T23:24:42.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:24:42.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:24:42.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:24:42.024 [DEBUG] [Thread-24610] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:24:52.145 [DEBUG] [Thread-24612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:02.608 [DEBUG] [Thread-24613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:07.187 [DEBUG] [Thread-24614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:11.024 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:12.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:25:12.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:25:12.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:25:12.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 24, 40), 7.85, 59.61, 0.0, 10.53, 15.31, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:25:12.688 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:24:40
2025-11-12T23:25:12.818 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:25:12.935 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:12.936 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:12.976 [DEBUG] [Thread-24615] [transport.py] [_log()] starting thread (client mode): 0x19dda140
2025-11-12T23:25:12.977 [DEBUG] [Thread-24615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:25:12.997 [DEBUG] [Thread-24615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:25:12.998 [INFO] [Thread-24615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:25:13.000 [DEBUG] [Thread-24615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] client lang: <none>
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] server lang: <none>
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] kex follows: False
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] Compression: none
2025-11-12T23:25:13.001 [DEBUG] [Thread-24615] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:25:13.017 [DEBUG] [Thread-24615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:25:13.017 [DEBUG] [Thread-24615] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:25:13.017 [DEBUG] [Thread-24615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:25:13.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:25:13.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:25:13.018 [DEBUG] [Thread-24615] [transport.py] [_log()] userauth is OK
2025-11-12T23:25:13.018 [DEBUG] [Thread-24615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:25:13.018 [DEBUG] [Thread-24615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:25:13.018 [DEBUG] [Thread-24615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:25:13.018 [DEBUG] [Thread-24615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:25:13.027 [INFO] [Thread-24615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:25:13.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:25:13.586 [DEBUG] [Thread-24615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:25:13.586 [DEBUG] [Thread-24615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:25:13.586 [DEBUG] [Thread-24615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:25:13.627 [DEBUG] [Thread-24615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:25:13.627 [DEBUG] [Thread-24615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:25:13.629 [DEBUG] [Thread-24615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:25:13.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:25:13.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:25:13.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:25:13.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:25:13.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:25:13.646 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:25:13.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.892095 -999.00  +15.50   7.52     63   +8.50 1 2 1 1 1     0    0 5.27 -83.38 ZnESW 7.7 7.5 198.4 10.0 16.4 -21.2 16.2 -20.3 16.1 -20.2 16.3 -20.8
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.892095
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:25:13.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:24:40', tmtdew=7.85, humidity=59.61, cloud=0.0, wind=10.53, temperature=15.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:24:40', seeing=1.06, atlas_timestamp='2025-11-12T21:24:37.008', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:22:00')
2025-11-12T23:25:13.647 [DEBUG] [Thread-24615] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:25:13.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:25:13.734 [DEBUG] [Thread-24618] [transport.py] [_log()] starting thread (client mode): 0x19dd9d50
2025-11-12T23:25:13.734 [DEBUG] [Thread-24618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:25:13.749 [DEBUG] [Thread-24618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:25:13.749 [INFO] [Thread-24618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:25:13.756 [DEBUG] [Thread-24618] [transport.py] [_log()] client lang: <none>
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] server lang: <none>
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] kex follows: False
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] Compression: none
2025-11-12T23:25:13.757 [DEBUG] [Thread-24618] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:25:13.814 [DEBUG] [Thread-24618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:25:13.814 [DEBUG] [Thread-24618] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:25:13.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:25:13.815 [DEBUG] [Thread-24618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:25:13.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:25:13.871 [DEBUG] [Thread-24618] [transport.py] [_log()] userauth is OK
2025-11-12T23:25:13.871 [DEBUG] [Thread-24618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:25:13.871 [DEBUG] [Thread-24618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:25:13.871 [DEBUG] [Thread-24618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:25:13.871 [DEBUG] [Thread-24618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:25:13.889 [INFO] [Thread-24618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:25:13.889 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:25:13.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:25:14.731 [DEBUG] [Thread-24618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:25:14.731 [DEBUG] [Thread-24618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:25:14.778 [DEBUG] [Thread-24618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:25:14.779 [DEBUG] [Thread-24618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:25:14.788 [DEBUG] [Thread-24618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:25:14.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:25:14.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-11-12T23:25:14.805 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:25:14.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:25:14.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:25:14.814 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:25:14.822 [DEBUG] [Thread-24618] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:25:18.901 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:22.223 [DEBUG] [Thread-24620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:23.115 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:37.277 [DEBUG] [Thread-24621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:44.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:25:44.843 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:25:44.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-11-12T23:25:45.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 25, 12), 7.82, 59.75, 0.0, 9.63, 15.28, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:25:45.548 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:25:12
2025-11-12T23:25:45.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:25:45.829 [DEBUG] [Thread-24622] [transport.py] [_log()] starting thread (client mode): 0x11f00ac0
2025-11-12T23:25:45.830 [DEBUG] [Thread-24622] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:25:45.850 [DEBUG] [Thread-24622] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:25:45.850 [INFO] [Thread-24622] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] client lang: <none>
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] server lang: <none>
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] kex follows: False
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] Compression: none
2025-11-12T23:25:45.853 [DEBUG] [Thread-24622] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:25:45.871 [DEBUG] [Thread-24622] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:25:45.871 [DEBUG] [Thread-24622] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:25:45.871 [DEBUG] [Thread-24622] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:25:45.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:25:45.871 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:25:45.872 [DEBUG] [Thread-24622] [transport.py] [_log()] userauth is OK
2025-11-12T23:25:45.872 [DEBUG] [Thread-24622] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:25:45.872 [DEBUG] [Thread-24622] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:25:45.872 [DEBUG] [Thread-24622] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:25:45.872 [DEBUG] [Thread-24622] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:25:45.889 [INFO] [Thread-24622] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:25:45.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:25:46.546 [DEBUG] [Thread-24622] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:25:46.546 [DEBUG] [Thread-24622] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:25:46.547 [DEBUG] [Thread-24622] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:25:46.587 [DEBUG] [Thread-24622] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:25:46.587 [DEBUG] [Thread-24622] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:25:46.589 [DEBUG] [Thread-24622] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:25:46.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:25:46.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:25:46.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:25:46.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:25:46.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:25:46.605 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:25:46.605 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:25:46.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:25:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:25:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.892442 -999.00  +15.50   8.98     63   +8.50 1 2 1 1 1     0    0 5.21 -80.52 ZnESW 10.6 9.0 198.4 10.2 16.4 -21.2 16.2 -20.6 16.1 -20.1 16.3 -20.8
2025-11-12T23:25:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:25:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:25:46.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.892442
2025-11-12T23:25:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:25:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:25:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:25:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:25:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:25:46.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:25:12', tmtdew=7.82, humidity=59.75, cloud=0.0, wind=9.63, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:25:44', seeing=1.28, atlas_timestamp='2025-11-12T21:25:06.989', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:22:00')
2025-11-12T23:25:46.606 [DEBUG] [Thread-24622] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:25:46.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:25:46.692 [DEBUG] [Thread-24625] [transport.py] [_log()] starting thread (client mode): 0x14945f60
2025-11-12T23:25:46.692 [DEBUG] [Thread-24625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:25:46.707 [DEBUG] [Thread-24625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:25:46.707 [INFO] [Thread-24625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:25:46.715 [DEBUG] [Thread-24625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:25:46.715 [DEBUG] [Thread-24625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:25:46.715 [DEBUG] [Thread-24625] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:25:46.715 [DEBUG] [Thread-24625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:25:46.715 [DEBUG] [Thread-24625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:25:46.715 [DEBUG] [Thread-24625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:25:46.715 [DEBUG] [Thread-24625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] client lang: <none>
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] server lang: <none>
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] kex follows: False
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:25:46.716 [DEBUG] [Thread-24625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:25:46.717 [DEBUG] [Thread-24625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:25:46.717 [DEBUG] [Thread-24625] [transport.py] [_log()] Compression: none
2025-11-12T23:25:46.717 [DEBUG] [Thread-24625] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:25:46.772 [DEBUG] [Thread-24625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:25:46.773 [DEBUG] [Thread-24625] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:25:46.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:25:46.774 [DEBUG] [Thread-24625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:25:46.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:25:46.828 [DEBUG] [Thread-24625] [transport.py] [_log()] userauth is OK
2025-11-12T23:25:46.828 [DEBUG] [Thread-24625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:25:46.828 [DEBUG] [Thread-24625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:25:46.828 [DEBUG] [Thread-24625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:25:46.828 [DEBUG] [Thread-24625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:25:46.847 [INFO] [Thread-24625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:25:46.847 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:25:46.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:25:47.705 [DEBUG] [Thread-24625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:25:47.705 [DEBUG] [Thread-24625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:25:47.752 [DEBUG] [Thread-24625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:25:47.753 [DEBUG] [Thread-24625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:25:47.762 [DEBUG] [Thread-24625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:25:47.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:25:47.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-11-12T23:25:47.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:25:47.791 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:25:47.791 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:25:47.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:25:47.799 [DEBUG] [Thread-24625] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:25:52.311 [DEBUG] [Thread-24627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:25:55.927 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:02.677 [DEBUG] [Thread-24628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:03.587 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:07.365 [DEBUG] [Thread-24629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:07.714 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:13.139 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:13.140 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:17.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:26:17.822 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:26:17.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-11-12T23:26:18.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 25, 44), 7.82, 59.73, 0.0, 11.38, 15.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:26:18.514 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:25:44
2025-11-12T23:26:18.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:26:18.794 [DEBUG] [Thread-24630] [transport.py] [_log()] starting thread (client mode): 0x19dd9cf0
2025-11-12T23:26:18.794 [DEBUG] [Thread-24630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:26:18.814 [DEBUG] [Thread-24630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:26:18.814 [INFO] [Thread-24630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:26:18.817 [DEBUG] [Thread-24630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] client lang: <none>
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] server lang: <none>
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] kex follows: False
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] Compression: none
2025-11-12T23:26:18.818 [DEBUG] [Thread-24630] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:26:18.835 [DEBUG] [Thread-24630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:26:18.835 [DEBUG] [Thread-24630] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:26:18.836 [DEBUG] [Thread-24630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:26:18.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:26:18.837 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:26:18.838 [DEBUG] [Thread-24630] [transport.py] [_log()] userauth is OK
2025-11-12T23:26:18.838 [DEBUG] [Thread-24630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:26:18.838 [DEBUG] [Thread-24630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:26:18.838 [DEBUG] [Thread-24630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:26:18.838 [DEBUG] [Thread-24630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:26:18.853 [INFO] [Thread-24630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:26:18.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:26:19.659 [DEBUG] [Thread-24630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:26:19.660 [DEBUG] [Thread-24630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:26:19.660 [DEBUG] [Thread-24630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:26:19.700 [DEBUG] [Thread-24630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:26:19.701 [DEBUG] [Thread-24630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:26:19.706 [DEBUG] [Thread-24630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:26:19.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:26:19.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:26:19.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:26:19.720 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:26:19.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:26:19.728 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:26:19.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:26:19.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:26:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:26:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.892790 -999.00  +15.50   6.24     63   +8.50 1 2 1 1 1     0    0 5.19 -79.75 ZnESW 9.5 6.2 203.8 11.4 16.4 -21.2 16.2 -20.5 16.0 -20.3 16.3 -20.8
2025-11-12T23:26:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:26:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:26:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.892790
2025-11-12T23:26:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:26:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:26:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:26:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:26:19.730 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:26:19.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:25:44', tmtdew=7.82, humidity=59.73, cloud=0.0, wind=11.38, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:26:16', seeing=1.28, atlas_timestamp='2025-11-12T21:25:37.056', atlas_cloud=2, atlas_rain=1, zp_data=[0.37124999999999986, 0.36575000000000024, 0.5022500000000001, 0.41449999999999854, 0.4089999999999989, 0.6327500000000006, 0.613999999999999, 0.6457500000000005, 0.4974999999999987, 0.6885000000000003, 0.5532500000000002, 0.5099999999999998, 0.5869999999999997, 0.923750000000001, 0.8364999999999991, 0.8079999999999989, 0.7687499999999998, 0.6055000000000001, 0.6389999999999993, 0.675749999999999, 0.519499999999999, 1.2147499999999987, 1.1152500000000005, 1.1467500000000008, 0.8049999999999988, 0.5370000000000008, 0.35824999999999996, 0.4450000000000003, 0.6420000000000003, 0.9560000000000013, 1.3690000000000007, 1.4225000000000012, 1.0437499999999993], zp_timestamp='2025-11-12T21:22:00')
2025-11-12T23:26:19.731 [DEBUG] [Thread-24630] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:26:19.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:26:19.816 [DEBUG] [Thread-24633] [transport.py] [_log()] starting thread (client mode): 0x19dda890
2025-11-12T23:26:19.816 [DEBUG] [Thread-24633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:26:19.832 [DEBUG] [Thread-24633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:26:19.832 [INFO] [Thread-24633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] client lang: <none>
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] server lang: <none>
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] kex follows: False
2025-11-12T23:26:19.840 [DEBUG] [Thread-24633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:26:19.841 [DEBUG] [Thread-24633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:26:19.841 [DEBUG] [Thread-24633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:26:19.841 [DEBUG] [Thread-24633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:26:19.841 [DEBUG] [Thread-24633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:26:19.841 [DEBUG] [Thread-24633] [transport.py] [_log()] Compression: none
2025-11-12T23:26:19.841 [DEBUG] [Thread-24633] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:26:19.903 [DEBUG] [Thread-24633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:26:19.904 [DEBUG] [Thread-24633] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:26:19.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:26:19.905 [DEBUG] [Thread-24633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:26:19.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:26:19.960 [DEBUG] [Thread-24633] [transport.py] [_log()] userauth is OK
2025-11-12T23:26:19.960 [DEBUG] [Thread-24633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:26:19.960 [DEBUG] [Thread-24633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:26:19.960 [DEBUG] [Thread-24633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:26:19.960 [DEBUG] [Thread-24633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:26:19.978 [INFO] [Thread-24633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:26:19.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:26:19.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:26:20.804 [DEBUG] [Thread-24633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:26:20.804 [DEBUG] [Thread-24633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:26:20.853 [DEBUG] [Thread-24633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:26:20.853 [DEBUG] [Thread-24633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:26:20.862 [DEBUG] [Thread-24633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:26:20.871 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:26:20.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-11-12T23:26:20.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-11-12T23:26:20.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:26:20.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:26:20.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:26:20.899 [DEBUG] [Thread-24633] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:26:22.397 [DEBUG] [Thread-24635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:37.458 [DEBUG] [Thread-24636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:40.606 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:50.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:26:50.920 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:26:50.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-11-12T23:26:51.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 26, 48), 7.77, 59.73, 0.0, 12.35, 15.24, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:26:51.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:26:48
2025-11-12T23:26:51.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:26:51.848 [DEBUG] [Thread-24637] [transport.py] [_log()] starting thread (client mode): 0x11f01de0
2025-11-12T23:26:51.848 [DEBUG] [Thread-24637] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:26:51.868 [DEBUG] [Thread-24637] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:26:51.868 [INFO] [Thread-24637] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] client lang: <none>
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] server lang: <none>
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] kex follows: False
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] Compression: none
2025-11-12T23:26:51.871 [DEBUG] [Thread-24637] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:26:51.887 [DEBUG] [Thread-24637] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:26:51.887 [DEBUG] [Thread-24637] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:26:51.887 [DEBUG] [Thread-24637] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:26:51.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:26:51.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:26:51.888 [DEBUG] [Thread-24637] [transport.py] [_log()] userauth is OK
2025-11-12T23:26:51.888 [DEBUG] [Thread-24637] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:26:51.888 [DEBUG] [Thread-24637] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:26:51.888 [DEBUG] [Thread-24637] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:26:51.888 [DEBUG] [Thread-24637] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:26:51.918 [INFO] [Thread-24637] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:26:51.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:26:52.493 [DEBUG] [Thread-24639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:26:52.591 [DEBUG] [Thread-24637] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:26:52.591 [DEBUG] [Thread-24637] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:26:52.592 [DEBUG] [Thread-24637] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:26:52.632 [DEBUG] [Thread-24637] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:26:52.632 [DEBUG] [Thread-24637] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:26:52.635 [DEBUG] [Thread-24637] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:26:52.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:26:52.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:26:52.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:26:52.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:26:52.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:26:52.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:26:52.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:26:52.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:26:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:26:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.893137 -999.00  +15.50   6.72     63   +8.50 1 2 1 1 1     0    0 5.16 -84.13 ZnESW 5.3 6.7 204.3 11.8 16.4 -21.3 16.2 -20.9 16.0 -20.2 16.3 -20.9
2025-11-12T23:26:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:26:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:26:52.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.893137
2025-11-12T23:26:52.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:26:52.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:26:52.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:26:52.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:26:52.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:26:52.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:26:48', tmtdew=7.77, humidity=59.73, cloud=0.0, wind=12.35, temperature=15.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:26:48', seeing=1.05, atlas_timestamp='2025-11-12T21:26:07.037', atlas_cloud=2, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:25:00')
2025-11-12T23:26:52.661 [DEBUG] [Thread-24637] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:26:52.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:26:52.767 [DEBUG] [Thread-24641] [transport.py] [_log()] starting thread (client mode): 0x14922d70
2025-11-12T23:26:52.767 [DEBUG] [Thread-24641] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:26:52.782 [DEBUG] [Thread-24641] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:26:52.782 [INFO] [Thread-24641] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:26:52.790 [DEBUG] [Thread-24641] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:26:52.790 [DEBUG] [Thread-24641] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:26:52.790 [DEBUG] [Thread-24641] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:26:52.790 [DEBUG] [Thread-24641] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:26:52.790 [DEBUG] [Thread-24641] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] client lang: <none>
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] server lang: <none>
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] kex follows: False
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:26:52.791 [DEBUG] [Thread-24641] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:26:52.792 [DEBUG] [Thread-24641] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:26:52.792 [DEBUG] [Thread-24641] [transport.py] [_log()] Compression: none
2025-11-12T23:26:52.792 [DEBUG] [Thread-24641] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:26:52.847 [DEBUG] [Thread-24641] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:26:52.848 [DEBUG] [Thread-24641] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:26:52.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:26:52.849 [DEBUG] [Thread-24641] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:26:52.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:26:52.903 [DEBUG] [Thread-24641] [transport.py] [_log()] userauth is OK
2025-11-12T23:26:52.904 [DEBUG] [Thread-24641] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:26:52.904 [DEBUG] [Thread-24641] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:26:52.904 [DEBUG] [Thread-24641] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:26:52.904 [DEBUG] [Thread-24641] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:26:52.923 [INFO] [Thread-24641] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:26:52.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:26:52.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:26:53.749 [DEBUG] [Thread-24641] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:26:53.749 [DEBUG] [Thread-24641] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:26:53.797 [DEBUG] [Thread-24641] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:26:53.797 [DEBUG] [Thread-24641] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:26:53.806 [DEBUG] [Thread-24641] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:26:53.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:26:53.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-11-12T23:26:53.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-11-12T23:26:53.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:26:53.832 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:26:53.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:26:53.840 [DEBUG] [Thread-24641] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:27:02.733 [DEBUG] [Thread-24643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:27:07.535 [DEBUG] [Thread-24644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:27:13.343 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:27:13.344 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:27:22.586 [DEBUG] [Thread-24645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:27:23.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:27:23.863 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:27:23.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-11-12T23:27:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 27, 20), 7.75, 59.81, 0.0, 11.86, 15.26, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:27:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:27:20
2025-11-12T23:27:24.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:27:24.806 [DEBUG] [Thread-24646] [transport.py] [_log()] starting thread (client mode): 0x19dd9210
2025-11-12T23:27:24.807 [DEBUG] [Thread-24646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:27:24.827 [DEBUG] [Thread-24646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:27:24.827 [INFO] [Thread-24646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] client lang: <none>
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] server lang: <none>
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] kex follows: False
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] Compression: none
2025-11-12T23:27:24.830 [DEBUG] [Thread-24646] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:27:24.846 [DEBUG] [Thread-24646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:27:24.846 [DEBUG] [Thread-24646] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:27:24.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:27:24.846 [DEBUG] [Thread-24646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:27:24.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:27:24.847 [DEBUG] [Thread-24646] [transport.py] [_log()] userauth is OK
2025-11-12T23:27:24.847 [DEBUG] [Thread-24646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:27:24.847 [DEBUG] [Thread-24646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:27:24.847 [DEBUG] [Thread-24646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:27:24.847 [DEBUG] [Thread-24646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:27:24.862 [INFO] [Thread-24646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:27:24.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:27:25.602 [DEBUG] [Thread-24646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:27:25.602 [DEBUG] [Thread-24646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:27:25.602 [DEBUG] [Thread-24646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:27:25.643 [DEBUG] [Thread-24646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:27:25.643 [DEBUG] [Thread-24646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:27:25.645 [DEBUG] [Thread-24646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:27:25.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:27:25.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:27:25.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:27:25.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:27:25.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:27:25.662 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:27:25.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.893484 -999.00  +15.50   9.58     63   +8.60 1 1 1 1 1     0    0 5.18 -79.49 ZNESW 9.0 9.6 197.4 11.4 16.4 -21.2 16.2 -20.8 16.0 -20.2 16.3 -20.8
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.893484
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:27:25.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:27:20', tmtdew=7.75, humidity=59.81, cloud=0.0, wind=11.86, temperature=15.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:27:20', seeing=1.09, atlas_timestamp='2025-11-12T21:26:37.018', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:25:00')
2025-11-12T23:27:25.663 [DEBUG] [Thread-24646] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:27:25.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:27:25.748 [DEBUG] [Thread-24649] [transport.py] [_log()] starting thread (client mode): 0x149805b0
2025-11-12T23:27:25.749 [DEBUG] [Thread-24649] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:27:25.763 [DEBUG] [Thread-24649] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:27:25.763 [INFO] [Thread-24649] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] client lang: <none>
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] server lang: <none>
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] kex follows: False
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] Compression: none
2025-11-12T23:27:25.771 [DEBUG] [Thread-24649] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:27:25.829 [DEBUG] [Thread-24649] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:27:25.829 [DEBUG] [Thread-24649] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:27:25.829 [DEBUG] [Thread-24649] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:27:25.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:27:25.830 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:27:25.886 [DEBUG] [Thread-24649] [transport.py] [_log()] userauth is OK
2025-11-12T23:27:25.886 [DEBUG] [Thread-24649] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:27:25.886 [DEBUG] [Thread-24649] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:27:25.886 [DEBUG] [Thread-24649] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:27:25.886 [DEBUG] [Thread-24649] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:27:25.900 [INFO] [Thread-24649] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:27:25.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:27:25.900 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:27:26.766 [DEBUG] [Thread-24649] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:27:26.766 [DEBUG] [Thread-24649] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:27:26.814 [DEBUG] [Thread-24649] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:27:26.814 [DEBUG] [Thread-24649] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:27:26.822 [DEBUG] [Thread-24649] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:27:26.829 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:27:26.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-11-12T23:27:26.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-11-12T23:27:26.845 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:27:26.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:27:26.845 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:27:26.852 [DEBUG] [Thread-24649] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:27:37.616 [DEBUG] [Thread-24651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:27:52.672 [DEBUG] [Thread-24652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:27:56.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:27:56.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:27:56.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-11-12T23:27:57.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 27, 52), 7.76, 59.78, 0.0, 11.4, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:27:57.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:27:52
2025-11-12T23:27:57.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:27:57.832 [DEBUG] [Thread-24653] [transport.py] [_log()] starting thread (client mode): 0x1737f460
2025-11-12T23:27:57.832 [DEBUG] [Thread-24653] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:27:57.852 [DEBUG] [Thread-24653] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:27:57.853 [INFO] [Thread-24653] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:27:57.855 [DEBUG] [Thread-24653] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] client lang: <none>
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] server lang: <none>
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] kex follows: False
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] Compression: none
2025-11-12T23:27:57.856 [DEBUG] [Thread-24653] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:27:57.876 [DEBUG] [Thread-24653] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:27:57.877 [DEBUG] [Thread-24653] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:27:57.877 [DEBUG] [Thread-24653] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:27:57.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:27:57.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:27:57.879 [DEBUG] [Thread-24653] [transport.py] [_log()] userauth is OK
2025-11-12T23:27:57.879 [DEBUG] [Thread-24653] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:27:57.879 [DEBUG] [Thread-24653] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:27:57.879 [DEBUG] [Thread-24653] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:27:57.880 [DEBUG] [Thread-24653] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:27:57.916 [INFO] [Thread-24653] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:27:57.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:27:58.557 [DEBUG] [Thread-24653] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:27:58.558 [DEBUG] [Thread-24653] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:27:58.558 [DEBUG] [Thread-24653] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:27:58.599 [DEBUG] [Thread-24653] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:27:58.599 [DEBUG] [Thread-24653] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:27:58.602 [DEBUG] [Thread-24653] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:27:58.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:27:58.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:27:58.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:27:58.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:27:58.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:27:58.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:27:58.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:27:58.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:27:58.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:27:58.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.893832 -999.00  +15.50   6.49     63   +8.50 1 1 1 1 1     0    0 5.07 -85.74 ZNESW 6.4 6.5 214.0 11.1 16.4 -21.4 16.2 -20.5 15.9 -20.1 16.3 -20.8
2025-11-12T23:27:58.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:27:58.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:27:58.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.893832
2025-11-12T23:27:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:27:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:27:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:27:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:27:58.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:27:58.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:27:52', tmtdew=7.76, humidity=59.78, cloud=0.0, wind=11.4, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:27:52', seeing=1.2, atlas_timestamp='2025-11-12T21:27:07.085', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:25:00')
2025-11-12T23:27:58.629 [DEBUG] [Thread-24653] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:27:58.712 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:27:58.723 [DEBUG] [Thread-24656] [transport.py] [_log()] starting thread (client mode): 0x19dd9390
2025-11-12T23:27:58.724 [DEBUG] [Thread-24656] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:27:58.742 [DEBUG] [Thread-24656] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:27:58.743 [INFO] [Thread-24656] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:27:58.750 [DEBUG] [Thread-24656] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:27:58.750 [DEBUG] [Thread-24656] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] client lang: <none>
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] server lang: <none>
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] kex follows: False
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] Compression: none
2025-11-12T23:27:58.751 [DEBUG] [Thread-24656] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:27:58.807 [DEBUG] [Thread-24656] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:27:58.807 [DEBUG] [Thread-24656] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:27:58.808 [DEBUG] [Thread-24656] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:27:58.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:27:58.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:27:58.867 [DEBUG] [Thread-24656] [transport.py] [_log()] userauth is OK
2025-11-12T23:27:58.867 [DEBUG] [Thread-24656] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:27:58.868 [DEBUG] [Thread-24656] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:27:58.868 [DEBUG] [Thread-24656] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:27:58.868 [DEBUG] [Thread-24656] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:27:58.887 [INFO] [Thread-24656] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:27:58.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:27:58.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:27:59.732 [DEBUG] [Thread-24656] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:27:59.732 [DEBUG] [Thread-24656] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:27:59.780 [DEBUG] [Thread-24656] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:27:59.780 [DEBUG] [Thread-24656] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:27:59.789 [DEBUG] [Thread-24656] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:27:59.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:27:59.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:27:59.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:27:59.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:27:59.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:27:59.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:27:59.829 [DEBUG] [Thread-24656] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:28:02.799 [DEBUG] [Thread-24658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:28:07.706 [DEBUG] [Thread-24659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:28:13.547 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:28:13.548 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:28:22.748 [DEBUG] [Thread-24660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:28:29.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:28:29.826 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:28:29.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-11-12T23:28:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 28, 24), 7.74, 59.84, 0.0, 11.98, 15.25, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:28:30.480 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:28:24
2025-11-12T23:28:30.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:28:30.749 [DEBUG] [Thread-24661] [transport.py] [_log()] starting thread (client mode): 0x14981180
2025-11-12T23:28:30.749 [DEBUG] [Thread-24661] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:28:30.770 [DEBUG] [Thread-24661] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:28:30.770 [INFO] [Thread-24661] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:28:30.773 [DEBUG] [Thread-24661] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] client lang: <none>
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] server lang: <none>
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] kex follows: False
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] Compression: none
2025-11-12T23:28:30.774 [DEBUG] [Thread-24661] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:28:30.792 [DEBUG] [Thread-24661] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:28:30.793 [DEBUG] [Thread-24661] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:28:30.793 [DEBUG] [Thread-24661] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:28:30.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:28:30.794 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:28:30.795 [DEBUG] [Thread-24661] [transport.py] [_log()] userauth is OK
2025-11-12T23:28:30.795 [DEBUG] [Thread-24661] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:28:30.795 [DEBUG] [Thread-24661] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:28:30.796 [DEBUG] [Thread-24661] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:28:30.796 [DEBUG] [Thread-24661] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:28:30.829 [INFO] [Thread-24661] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:28:30.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:28:31.605 [DEBUG] [Thread-24661] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:28:31.605 [DEBUG] [Thread-24661] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:28:31.606 [DEBUG] [Thread-24661] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:28:31.647 [DEBUG] [Thread-24661] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:28:31.647 [DEBUG] [Thread-24661] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:28:31.650 [DEBUG] [Thread-24661] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:28:31.662 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:28:31.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:28:31.664 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:28:31.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:28:31.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:28:31.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:28:31.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:28:31.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:28:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:28:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.894526 -999.00  +15.50   8.55     63   +8.60 1 1 1 1 1     0    0 4.99 -87.52 ZNESW 11.1 8.6 197.8 11.2 16.3 -21.3 16.1 -20.8 16.0 -20.1 16.3 -20.9
2025-11-12T23:28:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:28:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:28:31.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.894526
2025-11-12T23:28:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:28:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:28:31.676 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:28:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:28:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:28:31.677 [DEBUG] [Thread-24661] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:28:31.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:28:24', tmtdew=7.74, humidity=59.84, cloud=0.0, wind=11.98, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:28:24', seeing=1.2, atlas_timestamp='2025-11-12T21:28:07.046', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:25:00')
2025-11-12T23:28:31.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:28:31.777 [DEBUG] [Thread-24664] [transport.py] [_log()] starting thread (client mode): 0x1737f2e0
2025-11-12T23:28:31.778 [DEBUG] [Thread-24664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:28:31.798 [DEBUG] [Thread-24664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:28:31.798 [INFO] [Thread-24664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:28:31.805 [DEBUG] [Thread-24664] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:28:31.805 [DEBUG] [Thread-24664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] client lang: <none>
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] server lang: <none>
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] kex follows: False
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:28:31.806 [DEBUG] [Thread-24664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:28:31.807 [DEBUG] [Thread-24664] [transport.py] [_log()] Compression: none
2025-11-12T23:28:31.807 [DEBUG] [Thread-24664] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:28:31.863 [DEBUG] [Thread-24664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:28:31.864 [DEBUG] [Thread-24664] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:28:31.864 [DEBUG] [Thread-24664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:28:31.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:28:31.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:28:31.919 [DEBUG] [Thread-24664] [transport.py] [_log()] userauth is OK
2025-11-12T23:28:31.919 [DEBUG] [Thread-24664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:28:31.919 [DEBUG] [Thread-24664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:28:31.919 [DEBUG] [Thread-24664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:28:31.920 [DEBUG] [Thread-24664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:28:31.939 [INFO] [Thread-24664] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:28:31.939 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:28:31.940 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:28:32.782 [DEBUG] [Thread-24664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:28:32.782 [DEBUG] [Thread-24664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:28:32.830 [DEBUG] [Thread-24664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:28:32.830 [DEBUG] [Thread-24664] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:28:32.839 [DEBUG] [Thread-24664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:28:32.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:28:32.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-11-12T23:28:32.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-11-12T23:28:32.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:28:32.868 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:28:32.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:28:32.876 [DEBUG] [Thread-24664] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:28:37.783 [DEBUG] [Thread-24666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:28:52.835 [DEBUG] [Thread-24667 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:29:02.871 [DEBUG] [Thread-24668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:29:02.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:29:02.899 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:29:02.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:29:03.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 28, 56), 7.79, 59.84, 0.0, 11.15, 15.21, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:29:03.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:28:56
2025-11-12T23:29:03.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:29:03.813 [DEBUG] [Thread-24669] [transport.py] [_log()] starting thread (client mode): 0x1737d960
2025-11-12T23:29:03.813 [DEBUG] [Thread-24669] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:29:03.832 [DEBUG] [Thread-24669] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:29:03.832 [INFO] [Thread-24669] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:29:03.835 [DEBUG] [Thread-24669] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] client lang: <none>
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] server lang: <none>
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] kex follows: False
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:29:03.836 [DEBUG] [Thread-24669] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:29:03.837 [DEBUG] [Thread-24669] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:29:03.837 [DEBUG] [Thread-24669] [transport.py] [_log()] Compression: none
2025-11-12T23:29:03.837 [DEBUG] [Thread-24669] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:29:03.857 [DEBUG] [Thread-24669] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:29:03.857 [DEBUG] [Thread-24669] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:29:03.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:29:03.858 [DEBUG] [Thread-24669] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:29:03.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:29:03.859 [DEBUG] [Thread-24669] [transport.py] [_log()] userauth is OK
2025-11-12T23:29:03.860 [DEBUG] [Thread-24669] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:29:03.860 [DEBUG] [Thread-24669] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:29:03.860 [DEBUG] [Thread-24669] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:29:03.860 [DEBUG] [Thread-24669] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:29:03.875 [INFO] [Thread-24669] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:29:03.876 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:29:04.522 [DEBUG] [Thread-24669] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:29:04.523 [DEBUG] [Thread-24669] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:29:04.523 [DEBUG] [Thread-24669] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:29:04.564 [DEBUG] [Thread-24669] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:29:04.564 [DEBUG] [Thread-24669] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:29:04.567 [DEBUG] [Thread-24669] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:29:04.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:29:04.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:29:04.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:29:04.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:29:04.590 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:29:04.592 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:29:04.592 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:29:04.592 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:29:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:29:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.894873 -999.00  +15.40   9.45     63   +8.60 1 1 1 1 1     0    0 5.14 -83.53 ZNESW 9.8 9.4 195.2 12.2 16.3 -21.3 16.2 -20.7 16.0 -20.1 16.3 -20.9
2025-11-12T23:29:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:29:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:29:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.894873
2025-11-12T23:29:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:29:04.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:29:04.595 [DEBUG] [Thread-24669] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:29:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:29:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:29:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:29:04.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:28:56', tmtdew=7.79, humidity=59.84, cloud=0.0, wind=11.15, temperature=15.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:28:56', seeing=1.26, atlas_timestamp='2025-11-12T21:28:37.027', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:25:00')
2025-11-12T23:29:04.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:29:04.686 [DEBUG] [Thread-24672] [transport.py] [_log()] starting thread (client mode): 0x149827a0
2025-11-12T23:29:04.686 [DEBUG] [Thread-24672] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:29:04.702 [DEBUG] [Thread-24672] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:29:04.702 [INFO] [Thread-24672] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:29:04.711 [DEBUG] [Thread-24672] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:29:04.711 [DEBUG] [Thread-24672] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:29:04.711 [DEBUG] [Thread-24672] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:29:04.711 [DEBUG] [Thread-24672] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:29:04.711 [DEBUG] [Thread-24672] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] client lang: <none>
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] server lang: <none>
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] kex follows: False
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:29:04.712 [DEBUG] [Thread-24672] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:29:04.713 [DEBUG] [Thread-24672] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:29:04.713 [DEBUG] [Thread-24672] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:29:04.713 [DEBUG] [Thread-24672] [transport.py] [_log()] Compression: none
2025-11-12T23:29:04.713 [DEBUG] [Thread-24672] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:29:04.768 [DEBUG] [Thread-24672] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:29:04.768 [DEBUG] [Thread-24672] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:29:04.769 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:29:04.769 [DEBUG] [Thread-24672] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:29:04.770 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:29:04.827 [DEBUG] [Thread-24672] [transport.py] [_log()] userauth is OK
2025-11-12T23:29:04.827 [DEBUG] [Thread-24672] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:29:04.828 [DEBUG] [Thread-24672] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:29:04.828 [DEBUG] [Thread-24672] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:29:04.828 [DEBUG] [Thread-24672] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:29:04.848 [INFO] [Thread-24672] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:29:04.857 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:29:04.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:29:05.679 [DEBUG] [Thread-24672] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:29:05.679 [DEBUG] [Thread-24672] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:29:05.727 [DEBUG] [Thread-24672] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:29:05.727 [DEBUG] [Thread-24672] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:29:05.736 [DEBUG] [Thread-24672] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:29:05.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:29:05.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-11-12T23:29:05.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-11-12T23:29:05.764 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:29:05.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:29:05.765 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:29:05.773 [DEBUG] [Thread-24672] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:29:07.873 [DEBUG] [Thread-24674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:29:13.752 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:29:13.753 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:29:22.925 [DEBUG] [Thread-24675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:29:35.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:29:35.795 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:29:35.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-11-12T23:29:36.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 29, 28), 7.79, 59.86, 0.0, 12.48, 15.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:29:36.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:29:28
2025-11-12T23:29:36.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:29:36.705 [DEBUG] [Thread-24676] [transport.py] [_log()] starting thread (client mode): 0x1737fee0
2025-11-12T23:29:36.705 [DEBUG] [Thread-24676] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:29:36.726 [DEBUG] [Thread-24676] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:29:36.726 [INFO] [Thread-24676] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:29:36.730 [DEBUG] [Thread-24676] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:29:36.730 [DEBUG] [Thread-24676] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:29:36.730 [DEBUG] [Thread-24676] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:29:36.730 [DEBUG] [Thread-24676] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] client lang: <none>
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] server lang: <none>
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] kex follows: False
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] Compression: none
2025-11-12T23:29:36.731 [DEBUG] [Thread-24676] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:29:36.749 [DEBUG] [Thread-24676] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:29:36.749 [DEBUG] [Thread-24676] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:29:36.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:29:36.750 [DEBUG] [Thread-24676] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:29:36.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:29:36.752 [DEBUG] [Thread-24676] [transport.py] [_log()] userauth is OK
2025-11-12T23:29:36.752 [DEBUG] [Thread-24676] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:29:36.752 [DEBUG] [Thread-24676] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:29:36.752 [DEBUG] [Thread-24676] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:29:36.752 [DEBUG] [Thread-24676] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:29:36.768 [INFO] [Thread-24676] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:29:36.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:29:37.390 [DEBUG] [Thread-24676] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:29:37.390 [DEBUG] [Thread-24676] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:29:37.391 [DEBUG] [Thread-24676] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:29:37.432 [DEBUG] [Thread-24676] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:29:37.432 [DEBUG] [Thread-24676] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:29:37.435 [DEBUG] [Thread-24676] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:29:37.447 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:29:37.447 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:29:37.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:29:37.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:29:37.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:29:37.458 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:29:37.458 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:29:37.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:29:37.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:29:37.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.895220 -999.00  +15.40   6.31     63   +8.50 1 1 1 1 1     0    0 4.85 -90.55 ZNESW 5.9 6.3 203.6 11.6 16.3 -21.4 16.2 -20.9 16.0 -20.3 16.2 -21.1
2025-11-12T23:29:37.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:29:37.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:29:37.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.895220
2025-11-12T23:29:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:29:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:29:37.460 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:29:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:29:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:29:37.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:29:28', tmtdew=7.79, humidity=59.86, cloud=0.0, wind=12.48, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:29:28', seeing=1.26, atlas_timestamp='2025-11-12T21:29:07.008', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:29:00')
2025-11-12T23:29:37.461 [DEBUG] [Thread-24676] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:29:37.541 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:29:37.554 [DEBUG] [Thread-24679] [transport.py] [_log()] starting thread (client mode): 0x173985e0
2025-11-12T23:29:37.554 [DEBUG] [Thread-24679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:29:37.569 [DEBUG] [Thread-24679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:29:37.569 [INFO] [Thread-24679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:29:37.577 [DEBUG] [Thread-24679] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:29:37.577 [DEBUG] [Thread-24679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:29:37.577 [DEBUG] [Thread-24679] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:29:37.577 [DEBUG] [Thread-24679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] client lang: <none>
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] server lang: <none>
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] kex follows: False
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:29:37.578 [DEBUG] [Thread-24679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:29:37.579 [DEBUG] [Thread-24679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:29:37.579 [DEBUG] [Thread-24679] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:29:37.579 [DEBUG] [Thread-24679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:29:37.579 [DEBUG] [Thread-24679] [transport.py] [_log()] Compression: none
2025-11-12T23:29:37.579 [DEBUG] [Thread-24679] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:29:37.639 [DEBUG] [Thread-24679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:29:37.639 [DEBUG] [Thread-24679] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:29:37.640 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:29:37.640 [DEBUG] [Thread-24679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:29:37.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:29:37.695 [DEBUG] [Thread-24679] [transport.py] [_log()] userauth is OK
2025-11-12T23:29:37.695 [DEBUG] [Thread-24679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:29:37.695 [DEBUG] [Thread-24679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:29:37.695 [DEBUG] [Thread-24679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:29:37.695 [DEBUG] [Thread-24679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:29:37.714 [INFO] [Thread-24679] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:29:37.714 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:29:37.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:29:37.955 [DEBUG] [Thread-24681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:29:38.521 [DEBUG] [Thread-24679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:29:38.521 [DEBUG] [Thread-24679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:29:38.569 [DEBUG] [Thread-24679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:29:38.569 [DEBUG] [Thread-24679] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:29:38.578 [DEBUG] [Thread-24679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:29:38.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:29:38.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:29:38.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:29:38.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:29:38.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:29:38.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:29:38.613 [DEBUG] [Thread-24679] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:29:53.017 [DEBUG] [Thread-24682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:30:02.924 [DEBUG] [Thread-24683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:30:08.050 [DEBUG] [Thread-24684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:30:08.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:30:08.636 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:30:08.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:30:09.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 29, 28), 7.79, 59.86, 0.0, 12.48, 15.2, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:30:09.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:29:28
2025-11-12T23:30:09.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:30:09.536 [DEBUG] [Thread-24685] [transport.py] [_log()] starting thread (client mode): 0x17346620
2025-11-12T23:30:09.536 [DEBUG] [Thread-24685] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:30:09.556 [DEBUG] [Thread-24685] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:30:09.556 [INFO] [Thread-24685] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:30:09.559 [DEBUG] [Thread-24685] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] client lang: <none>
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] server lang: <none>
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] kex follows: False
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] Compression: none
2025-11-12T23:30:09.560 [DEBUG] [Thread-24685] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:30:09.578 [DEBUG] [Thread-24685] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:30:09.579 [DEBUG] [Thread-24685] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:30:09.580 [DEBUG] [Thread-24685] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:30:09.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:30:09.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:30:09.581 [DEBUG] [Thread-24685] [transport.py] [_log()] userauth is OK
2025-11-12T23:30:09.582 [DEBUG] [Thread-24685] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:30:09.582 [DEBUG] [Thread-24685] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:30:09.582 [DEBUG] [Thread-24685] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:30:09.582 [DEBUG] [Thread-24685] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:30:09.607 [INFO] [Thread-24685] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:30:09.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:30:10.897 [DEBUG] [Thread-24685] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:30:10.898 [DEBUG] [Thread-24685] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:30:10.898 [DEBUG] [Thread-24685] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:30:10.938 [DEBUG] [Thread-24685] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:30:10.939 [DEBUG] [Thread-24685] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:30:10.942 [DEBUG] [Thread-24685] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:30:10.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:30:10.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:30:10.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:30:10.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:30:10.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:30:10.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:30:10.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:30:10.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:30:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:30:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.895568 -999.00  +15.40   6.78     63   +8.50 1 1 1 1 1     0    0 4.78 -94.43 ZNESW 8.9 6.8 201.0 10.0 16.3 -21.4 16.1 -20.6 15.9 -20.2 16.2 -20.9
2025-11-12T23:30:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:30:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:30:10.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.895568
2025-11-12T23:30:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:30:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:30:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:30:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:30:10.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:30:10.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:29:28', tmtdew=7.79, humidity=59.86, cloud=0.0, wind=12.48, temperature=15.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:30:00', seeing=1.06, atlas_timestamp='2025-11-12T21:29:37.075', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:29:00')
2025-11-12T23:30:10.970 [DEBUG] [Thread-24685] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:30:11.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:30:11.058 [DEBUG] [Thread-24688] [transport.py] [_log()] starting thread (client mode): 0x17344b50
2025-11-12T23:30:11.059 [DEBUG] [Thread-24688] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:30:11.073 [DEBUG] [Thread-24688] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:30:11.073 [INFO] [Thread-24688] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] client lang: <none>
2025-11-12T23:30:11.081 [DEBUG] [Thread-24688] [transport.py] [_log()] server lang: <none>
2025-11-12T23:30:11.082 [DEBUG] [Thread-24688] [transport.py] [_log()] kex follows: False
2025-11-12T23:30:11.082 [DEBUG] [Thread-24688] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:30:11.082 [DEBUG] [Thread-24688] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:30:11.082 [DEBUG] [Thread-24688] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:30:11.082 [DEBUG] [Thread-24688] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:30:11.082 [DEBUG] [Thread-24688] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:30:11.082 [DEBUG] [Thread-24688] [transport.py] [_log()] Compression: none
2025-11-12T23:30:11.082 [DEBUG] [Thread-24688] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:30:11.138 [DEBUG] [Thread-24688] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:30:11.138 [DEBUG] [Thread-24688] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:30:11.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:30:11.139 [DEBUG] [Thread-24688] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:30:11.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:30:11.195 [DEBUG] [Thread-24688] [transport.py] [_log()] userauth is OK
2025-11-12T23:30:11.195 [DEBUG] [Thread-24688] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:30:11.195 [DEBUG] [Thread-24688] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:30:11.195 [DEBUG] [Thread-24688] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:30:11.195 [DEBUG] [Thread-24688] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:30:11.214 [INFO] [Thread-24688] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:30:11.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:30:11.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:30:12.039 [DEBUG] [Thread-24688] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:30:12.040 [DEBUG] [Thread-24688] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:30:12.088 [DEBUG] [Thread-24688] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:30:12.088 [DEBUG] [Thread-24688] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:30:12.097 [DEBUG] [Thread-24688] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:30:12.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:30:12.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-11-12T23:30:12.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-11-12T23:30:12.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:30:12.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:30:12.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:30:12.132 [DEBUG] [Thread-24688] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:30:13.956 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:30:13.957 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:30:23.087 [DEBUG] [Thread-24690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:30:38.140 [DEBUG] [Thread-24691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:30:42.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:30:42.154 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:30:42.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-11-12T23:30:42.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 30, 32), 7.7, 60.03, 0.0, 12.16, 15.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:30:42.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:30:32
2025-11-12T23:30:42.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:30:43.095 [DEBUG] [Thread-24692] [transport.py] [_log()] starting thread (client mode): 0x17345de0
2025-11-12T23:30:43.095 [DEBUG] [Thread-24692] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:30:43.115 [DEBUG] [Thread-24692] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:30:43.116 [INFO] [Thread-24692] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] client lang: <none>
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] server lang: <none>
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] kex follows: False
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] Compression: none
2025-11-12T23:30:43.119 [DEBUG] [Thread-24692] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:30:43.136 [DEBUG] [Thread-24692] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:30:43.136 [DEBUG] [Thread-24692] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:30:43.136 [DEBUG] [Thread-24692] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:30:43.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:30:43.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:30:43.180 [DEBUG] [Thread-24692] [transport.py] [_log()] userauth is OK
2025-11-12T23:30:43.181 [DEBUG] [Thread-24692] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:30:43.181 [DEBUG] [Thread-24692] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:30:43.181 [DEBUG] [Thread-24692] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:30:43.181 [DEBUG] [Thread-24692] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:30:43.210 [INFO] [Thread-24692] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:30:43.211 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:30:43.864 [DEBUG] [Thread-24692] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:30:43.864 [DEBUG] [Thread-24692] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:30:43.864 [DEBUG] [Thread-24692] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:30:43.905 [DEBUG] [Thread-24692] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:30:43.905 [DEBUG] [Thread-24692] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:30:43.907 [DEBUG] [Thread-24692] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:30:43.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:30:43.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:30:43.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:30:43.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:30:43.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:30:43.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:30:43.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.895914 -999.00  +15.40   9.24     63   +8.50 1 1 1 1 1     0    0 4.79 -89.10 ZNESW 7.3 9.2 197.6 10.8 16.3 -21.3 16.1 -20.6 15.9 -20.3 16.2 -20.9
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.895914
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:30:43.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:30:32', tmtdew=7.7, humidity=60.03, cloud=0.0, wind=12.16, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:30:33', seeing=1.19, atlas_timestamp='2025-11-12T21:30:06.970', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:29:00')
2025-11-12T23:30:43.925 [DEBUG] [Thread-24692] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:30:44.002 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:30:44.018 [DEBUG] [Thread-24695] [transport.py] [_log()] starting thread (client mode): 0x1737df30
2025-11-12T23:30:44.018 [DEBUG] [Thread-24695] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:30:44.035 [DEBUG] [Thread-24695] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:30:44.035 [INFO] [Thread-24695] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] client lang: <none>
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] server lang: <none>
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] kex follows: False
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:30:44.042 [DEBUG] [Thread-24695] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:30:44.043 [DEBUG] [Thread-24695] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:30:44.043 [DEBUG] [Thread-24695] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:30:44.043 [DEBUG] [Thread-24695] [transport.py] [_log()] Compression: none
2025-11-12T23:30:44.043 [DEBUG] [Thread-24695] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:30:44.100 [DEBUG] [Thread-24695] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:30:44.101 [DEBUG] [Thread-24695] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:30:44.101 [DEBUG] [Thread-24695] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:30:44.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:30:44.101 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:30:44.158 [DEBUG] [Thread-24695] [transport.py] [_log()] userauth is OK
2025-11-12T23:30:44.159 [DEBUG] [Thread-24695] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:30:44.159 [DEBUG] [Thread-24695] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:30:44.159 [DEBUG] [Thread-24695] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:30:44.159 [DEBUG] [Thread-24695] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:30:44.183 [INFO] [Thread-24695] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:30:44.183 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:30:44.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:30:45.013 [DEBUG] [Thread-24695] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:30:45.014 [DEBUG] [Thread-24695] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:30:45.062 [DEBUG] [Thread-24695] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:30:45.062 [DEBUG] [Thread-24695] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:30:45.071 [DEBUG] [Thread-24695] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:30:45.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:30:45.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-11-12T23:30:45.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-11-12T23:30:45.107 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:30:45.108 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:30:45.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:30:45.116 [DEBUG] [Thread-24695] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:30:53.175 [DEBUG] [Thread-24697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:31:02.993 [DEBUG] [Thread-24698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:31:08.228 [DEBUG] [Thread-24699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:31:14.159 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:31:14.161 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:31:15.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:31:15.124 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:31:15.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-11-12T23:31:15.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 31, 5), 7.72, 59.91, 0.0, 12.28, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:31:15.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:31:05
2025-11-12T23:31:15.917 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:31:16.062 [DEBUG] [Thread-24700] [transport.py] [_log()] starting thread (client mode): 0x1737eb60
2025-11-12T23:31:16.062 [DEBUG] [Thread-24700] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:31:16.082 [DEBUG] [Thread-24700] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:31:16.082 [INFO] [Thread-24700] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:31:16.085 [DEBUG] [Thread-24700] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:31:16.085 [DEBUG] [Thread-24700] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:31:16.085 [DEBUG] [Thread-24700] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:31:16.085 [DEBUG] [Thread-24700] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:31:16.085 [DEBUG] [Thread-24700] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] client lang: <none>
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] server lang: <none>
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] kex follows: False
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] Compression: none
2025-11-12T23:31:16.086 [DEBUG] [Thread-24700] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:31:16.105 [DEBUG] [Thread-24700] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:31:16.105 [DEBUG] [Thread-24700] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:31:16.106 [DEBUG] [Thread-24700] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:31:16.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:31:16.106 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:31:16.108 [DEBUG] [Thread-24700] [transport.py] [_log()] userauth is OK
2025-11-12T23:31:16.108 [DEBUG] [Thread-24700] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:31:16.108 [DEBUG] [Thread-24700] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:31:16.108 [DEBUG] [Thread-24700] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:31:16.108 [DEBUG] [Thread-24700] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:31:16.131 [INFO] [Thread-24700] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:31:16.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:31:16.766 [DEBUG] [Thread-24700] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:31:16.766 [DEBUG] [Thread-24700] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:31:16.766 [DEBUG] [Thread-24700] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:31:16.807 [DEBUG] [Thread-24700] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:31:16.807 [DEBUG] [Thread-24700] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:31:16.811 [DEBUG] [Thread-24700] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:31:16.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:31:16.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:31:16.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:31:16.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:31:16.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:31:16.833 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:31:16.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:31:16.833 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:31:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:31:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.896262 -999.00  +15.40   6.85     63   +8.50 1 1 1 1 1     0    0 4.78 -88.72 ZNESW 7.0 6.8 202.0 10.2 16.3 -21.4 16.1 -20.9 15.9 -20.2 16.2 -20.9
2025-11-12T23:31:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:31:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:31:16.834 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.896262
2025-11-12T23:31:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:31:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:31:16.835 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:31:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:31:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:31:16.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:31:05', tmtdew=7.72, humidity=59.91, cloud=0.0, wind=12.28, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:31:05', seeing=1.19, atlas_timestamp='2025-11-12T21:30:37.037', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:29:00')
2025-11-12T23:31:16.836 [DEBUG] [Thread-24700] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:31:16.924 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:31:16.937 [DEBUG] [Thread-24703] [transport.py] [_log()] starting thread (client mode): 0x1737c100
2025-11-12T23:31:16.937 [DEBUG] [Thread-24703] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:31:16.952 [DEBUG] [Thread-24703] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:31:16.952 [INFO] [Thread-24703] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:31:16.959 [DEBUG] [Thread-24703] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:31:16.959 [DEBUG] [Thread-24703] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:31:16.959 [DEBUG] [Thread-24703] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:31:16.959 [DEBUG] [Thread-24703] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] client lang: <none>
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] server lang: <none>
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] kex follows: False
2025-11-12T23:31:16.960 [DEBUG] [Thread-24703] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:31:16.961 [DEBUG] [Thread-24703] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:31:16.961 [DEBUG] [Thread-24703] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:31:16.961 [DEBUG] [Thread-24703] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:31:16.961 [DEBUG] [Thread-24703] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:31:16.961 [DEBUG] [Thread-24703] [transport.py] [_log()] Compression: none
2025-11-12T23:31:16.961 [DEBUG] [Thread-24703] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:31:17.017 [DEBUG] [Thread-24703] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:31:17.017 [DEBUG] [Thread-24703] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:31:17.017 [DEBUG] [Thread-24703] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:31:17.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:31:17.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:31:17.073 [DEBUG] [Thread-24703] [transport.py] [_log()] userauth is OK
2025-11-12T23:31:17.073 [DEBUG] [Thread-24703] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:31:17.073 [DEBUG] [Thread-24703] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:31:17.073 [DEBUG] [Thread-24703] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:31:17.073 [DEBUG] [Thread-24703] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:31:17.088 [INFO] [Thread-24703] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:31:17.089 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:31:17.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:31:17.886 [DEBUG] [Thread-24703] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:31:17.887 [DEBUG] [Thread-24703] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:31:17.935 [DEBUG] [Thread-24703] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:31:17.935 [DEBUG] [Thread-24703] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:31:17.943 [DEBUG] [Thread-24703] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:31:17.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:31:17.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-11-12T23:31:17.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-11-12T23:31:17.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:31:17.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:31:17.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:31:17.974 [DEBUG] [Thread-24703] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:31:23.264 [DEBUG] [Thread-24705 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:31:38.316 [DEBUG] [Thread-24706 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:31:47.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:31:47.973 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:31:47.975 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:31:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 31, 37), 7.73, 59.89, 0.0, 11.72, 15.18, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:31:48.618 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:31:37
2025-11-12T23:31:48.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:31:48.884 [DEBUG] [Thread-24707] [transport.py] [_log()] starting thread (client mode): 0x173992d0
2025-11-12T23:31:48.884 [DEBUG] [Thread-24707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:31:48.904 [DEBUG] [Thread-24707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:31:48.904 [INFO] [Thread-24707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:31:48.907 [DEBUG] [Thread-24707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:31:48.907 [DEBUG] [Thread-24707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:31:48.907 [DEBUG] [Thread-24707] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:31:48.907 [DEBUG] [Thread-24707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:31:48.907 [DEBUG] [Thread-24707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:31:48.907 [DEBUG] [Thread-24707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:31:48.907 [DEBUG] [Thread-24707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] client lang: <none>
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] server lang: <none>
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] kex follows: False
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] Compression: none
2025-11-12T23:31:48.908 [DEBUG] [Thread-24707] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:31:48.926 [DEBUG] [Thread-24707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:31:48.927 [DEBUG] [Thread-24707] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:31:48.927 [DEBUG] [Thread-24707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:31:48.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:31:48.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:31:48.929 [DEBUG] [Thread-24707] [transport.py] [_log()] userauth is OK
2025-11-12T23:31:48.929 [DEBUG] [Thread-24707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:31:48.929 [DEBUG] [Thread-24707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:31:48.930 [DEBUG] [Thread-24707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:31:48.930 [DEBUG] [Thread-24707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:31:48.968 [INFO] [Thread-24707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:31:48.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:31:49.613 [DEBUG] [Thread-24707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:31:49.614 [DEBUG] [Thread-24707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:31:49.614 [DEBUG] [Thread-24707] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:31:49.655 [DEBUG] [Thread-24707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:31:49.655 [DEBUG] [Thread-24707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:31:49.658 [DEBUG] [Thread-24707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:31:49.669 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:31:49.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:31:49.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:31:49.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:31:49.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:31:49.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:31:49.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:31:49.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:31:49.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:31:49.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.896956 -999.00  +15.40   7.39     63   +8.50 1 1 1 1 1     0    0 4.48 -97.70 ZNESW 4.9 7.4 203.4 12.3 16.3 -21.5 16.1 -20.6 15.9 -20.4 16.2 -21.0
2025-11-12T23:31:49.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:31:49.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:31:49.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.896956
2025-11-12T23:31:49.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:31:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:31:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:31:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:31:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:31:49.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:31:37', tmtdew=7.73, humidity=59.89, cloud=0.0, wind=11.72, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:31:37', seeing=1.06, atlas_timestamp='2025-11-12T21:31:36.998', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:29:00')
2025-11-12T23:31:49.686 [DEBUG] [Thread-24707] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:31:49.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:31:49.781 [DEBUG] [Thread-24710] [transport.py] [_log()] starting thread (client mode): 0x17345f30
2025-11-12T23:31:49.781 [DEBUG] [Thread-24710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:31:49.796 [DEBUG] [Thread-24710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:31:49.796 [INFO] [Thread-24710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:31:49.803 [DEBUG] [Thread-24710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:31:49.804 [DEBUG] [Thread-24710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:31:49.804 [DEBUG] [Thread-24710] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:31:49.804 [DEBUG] [Thread-24710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:31:49.804 [DEBUG] [Thread-24710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:31:49.804 [DEBUG] [Thread-24710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:31:49.804 [DEBUG] [Thread-24710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:31:49.804 [DEBUG] [Thread-24710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:31:49.804 [DEBUG] [Thread-24710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:31:49.805 [DEBUG] [Thread-24710] [transport.py] [_log()] client lang: <none>
2025-11-12T23:31:49.805 [DEBUG] [Thread-24710] [transport.py] [_log()] server lang: <none>
2025-11-12T23:31:49.805 [DEBUG] [Thread-24710] [transport.py] [_log()] kex follows: False
2025-11-12T23:31:49.805 [DEBUG] [Thread-24710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:31:49.805 [DEBUG] [Thread-24710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:31:49.805 [DEBUG] [Thread-24710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:31:49.805 [DEBUG] [Thread-24710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:31:49.805 [DEBUG] [Thread-24710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:31:49.806 [DEBUG] [Thread-24710] [transport.py] [_log()] Compression: none
2025-11-12T23:31:49.806 [DEBUG] [Thread-24710] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:31:49.866 [DEBUG] [Thread-24710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:31:49.867 [DEBUG] [Thread-24710] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:31:49.868 [DEBUG] [Thread-24710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:31:49.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:31:49.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:31:49.922 [DEBUG] [Thread-24710] [transport.py] [_log()] userauth is OK
2025-11-12T23:31:49.922 [DEBUG] [Thread-24710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:31:49.923 [DEBUG] [Thread-24710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:31:49.923 [DEBUG] [Thread-24710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:31:49.923 [DEBUG] [Thread-24710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:31:49.941 [INFO] [Thread-24710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:31: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-11-12T23:31:49.943 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:31:50.765 [DEBUG] [Thread-24710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:31:50.765 [DEBUG] [Thread-24710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:31:50.813 [DEBUG] [Thread-24710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:31:50.813 [DEBUG] [Thread-24710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:31:50.822 [DEBUG] [Thread-24710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:31:50.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:31: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-11-12T23:31:50.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-11-12T23:31:50.850 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:31:50.850 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:31:50.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:31:50.859 [DEBUG] [Thread-24710] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:31:53.347 [DEBUG] [Thread-24712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:32:03.049 [DEBUG] [Thread-24713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:32:08.397 [DEBUG] [Thread-24714 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:32:14.362 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:32:14.363 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:32:20.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:32:20.859 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:32:20.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-11-12T23:32:21.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 32, 9), 7.71, 59.96, 0.0, 11.81, 15.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:32:21.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:32:09
2025-11-12T23:32:21.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:32:21.771 [DEBUG] [Thread-24715] [transport.py] [_log()] starting thread (client mode): 0x1737f640
2025-11-12T23:32:21.771 [DEBUG] [Thread-24715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:32:21.792 [DEBUG] [Thread-24715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:32:21.792 [INFO] [Thread-24715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] client lang: <none>
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] server lang: <none>
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] kex follows: False
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] Compression: none
2025-11-12T23:32:21.794 [DEBUG] [Thread-24715] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:32:21.804 [DEBUG] [Thread-24715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:32:21.804 [DEBUG] [Thread-24715] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:32:21.804 [DEBUG] [Thread-24715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:32:21.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:32:21.805 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:32:21.806 [DEBUG] [Thread-24715] [transport.py] [_log()] userauth is OK
2025-11-12T23:32:21.806 [DEBUG] [Thread-24715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:32:21.806 [DEBUG] [Thread-24715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:32:21.806 [DEBUG] [Thread-24715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:32:21.806 [DEBUG] [Thread-24715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:32:21.842 [INFO] [Thread-24715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:32:21.843 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:32:22.485 [DEBUG] [Thread-24715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:32:22.485 [DEBUG] [Thread-24715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:32:22.486 [DEBUG] [Thread-24715] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:32:22.527 [DEBUG] [Thread-24715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:32:22.527 [DEBUG] [Thread-24715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:32:22.530 [DEBUG] [Thread-24715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:32:22.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:32:22.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:32:22.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:32:22.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:32:22.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:32:22.553 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:32:22.553 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:32:22.553 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:32:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:32:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.897304 -999.00  +15.30   5.31     63   +8.50 1 1 1 1 1     0    0 4.39 -98.19 ZNESW 7.4 5.3 204.2 10.3 16.2 -21.4 16.1 -20.8 15.9 -20.5 16.2 -21.3
2025-11-12T23:32:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:32:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:32:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.897304
2025-11-12T23:32:22.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:32:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:32:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:32:22.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:32:22.555 [DEBUG] [Thread-24715] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:32:22.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:32:22.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:32:09', tmtdew=7.71, humidity=59.96, cloud=0.0, wind=11.81, temperature=15.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:32:09', seeing=1.06, atlas_timestamp='2025-11-12T21:32:07.066', atlas_cloud=1, atlas_rain=1, zp_data=[0.46875, 0.27974999999999994, 0.4007500000000004, 0.3979999999999997, 0.4574999999999996, 0.8497500000000002, 0.7139999999999995, 0.6652500000000003, 0.5964999999999989, 0.525500000000001, 0.5282499999999999, 0.5765000000000002, 0.5999999999999996, 0.9962499999999999, 0.8629999999999995, 0.8599999999999994, 0.7542499999999999, 0.7335000000000003, 0.6479999999999997, 0.5282499999999981, 0.5769999999999991, 0.7797499999999982, 0.9582500000000005, 1.08575, 0.8119999999999994, 0.5855000000000006, 0.38724999999999987, 0.4425000000000008, 0.6875, 0.6240000000000006, 1.2890000000000006, 1.3975000000000009, 0.8907499999999988], zp_timestamp='2025-11-12T21:29:00')
2025-11-12T23:32:22.636 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:32:22.649 [DEBUG] [Thread-24718] [transport.py] [_log()] starting thread (client mode): 0x14907d90
2025-11-12T23:32:22.649 [DEBUG] [Thread-24718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:32:22.664 [DEBUG] [Thread-24718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:32:22.664 [INFO] [Thread-24718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:32:22.671 [DEBUG] [Thread-24718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:32:22.671 [DEBUG] [Thread-24718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] client lang: <none>
2025-11-12T23:32:22.672 [DEBUG] [Thread-24718] [transport.py] [_log()] server lang: <none>
2025-11-12T23:32:22.673 [DEBUG] [Thread-24718] [transport.py] [_log()] kex follows: False
2025-11-12T23:32:22.673 [DEBUG] [Thread-24718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:32:22.673 [DEBUG] [Thread-24718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:32:22.673 [DEBUG] [Thread-24718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:32:22.673 [DEBUG] [Thread-24718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:32:22.673 [DEBUG] [Thread-24718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:32:22.673 [DEBUG] [Thread-24718] [transport.py] [_log()] Compression: none
2025-11-12T23:32:22.674 [DEBUG] [Thread-24718] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:32:22.735 [DEBUG] [Thread-24718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:32:22.736 [DEBUG] [Thread-24718] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:32:22.737 [DEBUG] [Thread-24718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:32:22.737 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:32:22.738 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:32:22.795 [DEBUG] [Thread-24718] [transport.py] [_log()] userauth is OK
2025-11-12T23:32:22.795 [DEBUG] [Thread-24718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:32:22.795 [DEBUG] [Thread-24718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:32:22.795 [DEBUG] [Thread-24718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:32:22.795 [DEBUG] [Thread-24718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:32:22.814 [INFO] [Thread-24718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:32:22.815 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:32:22.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:32:23.432 [DEBUG] [Thread-24720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:32:23.620 [DEBUG] [Thread-24718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:32:23.620 [DEBUG] [Thread-24718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:32:23.667 [DEBUG] [Thread-24718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:32:23.667 [DEBUG] [Thread-24718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:32:23.676 [DEBUG] [Thread-24718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:32:23.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:32:23.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-11-12T23:32: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') -> 00000000
2025-11-12T23:32:23.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:32:23.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:32:23.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:32:23.710 [DEBUG] [Thread-24718] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:32:38.478 [DEBUG] [Thread-24721 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:32:53.513 [DEBUG] [Thread-24722 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:32:53.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:32:53.733 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:32:53.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-11-12T23:32:54.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 32, 41), 7.65, 60.03, 0.0, 12.48, 15.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:32:54.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:32:41
2025-11-12T23:32:54.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:32:54.647 [DEBUG] [Thread-24723] [transport.py] [_log()] starting thread (client mode): 0x1737d450
2025-11-12T23:32:54.647 [DEBUG] [Thread-24723] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:32:54.664 [DEBUG] [Thread-24723] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:32:54.665 [INFO] [Thread-24723] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] client lang: <none>
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] server lang: <none>
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] kex follows: False
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] Compression: none
2025-11-12T23:32:54.668 [DEBUG] [Thread-24723] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:32:54.684 [DEBUG] [Thread-24723] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:32:54.685 [DEBUG] [Thread-24723] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:32:54.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:32:54.685 [DEBUG] [Thread-24723] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:32:54.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:32:54.686 [DEBUG] [Thread-24723] [transport.py] [_log()] userauth is OK
2025-11-12T23:32:54.686 [DEBUG] [Thread-24723] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:32:54.686 [DEBUG] [Thread-24723] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:32:54.686 [DEBUG] [Thread-24723] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:32:54.687 [DEBUG] [Thread-24723] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:32:54.705 [INFO] [Thread-24723] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:32:54.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:32:55.298 [DEBUG] [Thread-24723] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:32:55.298 [DEBUG] [Thread-24723] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:32:55.298 [DEBUG] [Thread-24723] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:32:55.339 [DEBUG] [Thread-24723] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:32:55.339 [DEBUG] [Thread-24723] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:32:55.342 [DEBUG] [Thread-24723] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:32:55.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:32:55.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:32:55.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:32:55.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:32:55.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:32:55.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:32:55.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:32:55.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:32:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:32:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.897651 -999.00  +15.30   8.70     63   +8.50 1 1 1 1 1     0    0 4.39 -100.66 ZNESW 4.5 8.7 200.0 10.3 16.2 -21.4 16.1 -20.7 15.9 -20.4 16.2 -21.2
2025-11-12T23:32:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:32:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:32:55.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.897651
2025-11-12T23:32:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:32:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:32:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:32:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:32:55.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:32:55.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:32:41', tmtdew=7.65, humidity=60.03, cloud=0.0, wind=12.48, temperature=15.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:32:41', seeing=1.06, atlas_timestamp='2025-11-12T21:32:37.046', atlas_cloud=1, atlas_rain=1, zp_data=[0.7627499999999996, 0.49075000000000024, 0.5222499999999997, 0.5074999999999985, 0.7285000000000004, 0.8327500000000008, 0.8579999999999997, 0.885250000000001, 0.6634999999999991, 0.47000000000000064, 0.48524999999999885, 0.4689999999999994, 0.6514999999999995, 0.6747499999999995, 0.8209999999999997, 0.746999999999999, 0.8482500000000002, 0.6615000000000002, 0.732499999999999, 0.489749999999999, 0.5999999999999988, 0.5777499999999991, 0.784250000000001, 0.89975, 0.9379999999999988, 0.6550000000000002, 0.5372500000000002, 0.5075000000000003, 0.5970000000000004, 0.495000000000001, 1.0780000000000012, 1.0260000000000007, 0.9677499999999988], zp_timestamp='2025-11-12T21:31:00')
2025-11-12T23:32:55.366 [DEBUG] [Thread-24723] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:32:55.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:32:55.457 [DEBUG] [Thread-24726] [transport.py] [_log()] starting thread (client mode): 0x1737e410
2025-11-12T23:32:55.457 [DEBUG] [Thread-24726] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:32:55.472 [DEBUG] [Thread-24726] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:32:55.472 [INFO] [Thread-24726] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:32:55.479 [DEBUG] [Thread-24726] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] client lang: <none>
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] server lang: <none>
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] kex follows: False
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:32:55.480 [DEBUG] [Thread-24726] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:32:55.481 [DEBUG] [Thread-24726] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:32:55.481 [DEBUG] [Thread-24726] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:32:55.481 [DEBUG] [Thread-24726] [transport.py] [_log()] Compression: none
2025-11-12T23:32:55.481 [DEBUG] [Thread-24726] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:32:55.538 [DEBUG] [Thread-24726] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:32:55.539 [DEBUG] [Thread-24726] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:32:55.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:32:55.540 [DEBUG] [Thread-24726] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:32:55.540 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:32:55.594 [DEBUG] [Thread-24726] [transport.py] [_log()] userauth is OK
2025-11-12T23:32:55.594 [DEBUG] [Thread-24726] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:32:55.604 [DEBUG] [Thread-24726] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:32:55.604 [DEBUG] [Thread-24726] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:32:55.604 [DEBUG] [Thread-24726] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:32:55.624 [INFO] [Thread-24726] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:32:55.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:32:55.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:32:56.424 [DEBUG] [Thread-24726] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:32:56.424 [DEBUG] [Thread-24726] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:32:56.471 [DEBUG] [Thread-24726] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:32:56.471 [DEBUG] [Thread-24726] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:32:56.480 [DEBUG] [Thread-24726] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:32:56.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:32:56.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-11-12T23:32:56.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-11-12T23:32:56.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:32:56.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:32:56.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:32:56.514 [DEBUG] [Thread-24726] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:33:03.107 [DEBUG] [Thread-24728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:33:08.551 [DEBUG] [Thread-24729 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:33:14.566 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:33:14.567 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:33:23.611 [DEBUG] [Thread-24730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:33:26.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:33:26.537 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:33:26.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-11-12T23:33:27.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 33, 13), 7.64, 60.04, 0.0, 11.68, 15.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:33:27.174 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:33:13
2025-11-12T23:33:27.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:33:27.442 [DEBUG] [Thread-24731] [transport.py] [_log()] starting thread (client mode): 0x1737ecb0
2025-11-12T23:33:27.442 [DEBUG] [Thread-24731] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:33:27.457 [DEBUG] [Thread-24731] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:33:27.457 [INFO] [Thread-24731] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] client lang: <none>
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] server lang: <none>
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] kex follows: False
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:33:27.458 [DEBUG] [Thread-24731] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:33:27.459 [DEBUG] [Thread-24731] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:33:27.459 [DEBUG] [Thread-24731] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:33:27.459 [DEBUG] [Thread-24731] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:33:27.459 [DEBUG] [Thread-24731] [transport.py] [_log()] Compression: none
2025-11-12T23:33:27.459 [DEBUG] [Thread-24731] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:33:27.467 [DEBUG] [Thread-24731] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:33:27.467 [DEBUG] [Thread-24731] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:33:27.467 [DEBUG] [Thread-24731] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:33:27.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:33:27.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:33:27.469 [DEBUG] [Thread-24731] [transport.py] [_log()] userauth is OK
2025-11-12T23:33:27.469 [DEBUG] [Thread-24731] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:33:27.469 [DEBUG] [Thread-24731] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:33:27.469 [DEBUG] [Thread-24731] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:33:27.469 [DEBUG] [Thread-24731] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:33:27.489 [INFO] [Thread-24731] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:33:27.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:33:28.058 [DEBUG] [Thread-24731] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:33:28.059 [DEBUG] [Thread-24731] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:33:28.060 [DEBUG] [Thread-24731] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:33:28.100 [DEBUG] [Thread-24731] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:33:28.100 [DEBUG] [Thread-24731] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:33:28.103 [DEBUG] [Thread-24731] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:33:28.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:33:28.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:33:28.111 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:33:28.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:33:28.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:33:28.121 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:33:28.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:33:28.121 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:33:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:33:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.897998 -999.00  +15.30   6.06     63   +8.50 1 1 1 1 1     0    0 4.28 -98.38 ZNESW 5.5 6.1 212.0 8.2 16.2 -21.5 16.1 -20.7 15.9 -20.6 16.1 -21.1
2025-11-12T23:33:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:33:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:33:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.897998
2025-11-12T23:33:28.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:33:28.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:33:28.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:33:28.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:33:28.123 [DEBUG] [Thread-24731] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:33:28.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:33:28.124 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:33:13', tmtdew=7.64, humidity=60.04, cloud=0.0, wind=11.68, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:33:13', seeing=0.91, atlas_timestamp='2025-11-12T21:33:07.027', atlas_cloud=1, atlas_rain=1, zp_data=[0.7627499999999996, 0.49075000000000024, 0.5222499999999997, 0.5074999999999985, 0.7285000000000004, 0.8327500000000008, 0.8579999999999997, 0.885250000000001, 0.6634999999999991, 0.47000000000000064, 0.48524999999999885, 0.4689999999999994, 0.6514999999999995, 0.6747499999999995, 0.8209999999999997, 0.746999999999999, 0.8482500000000002, 0.6615000000000002, 0.732499999999999, 0.489749999999999, 0.5999999999999988, 0.5777499999999991, 0.784250000000001, 0.89975, 0.9379999999999988, 0.6550000000000002, 0.5372500000000002, 0.5075000000000003, 0.5970000000000004, 0.495000000000001, 1.0780000000000012, 1.0260000000000007, 0.9677499999999988], zp_timestamp='2025-11-12T21:31:00')
2025-11-12T23:33:28.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:33:28.219 [DEBUG] [Thread-24734] [transport.py] [_log()] starting thread (client mode): 0x17344c40
2025-11-12T23:33:28.220 [DEBUG] [Thread-24734] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:33:28.235 [DEBUG] [Thread-24734] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:33:28.236 [INFO] [Thread-24734] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:33:28.243 [DEBUG] [Thread-24734] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:33:28.243 [DEBUG] [Thread-24734] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:33:28.243 [DEBUG] [Thread-24734] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:33:28.243 [DEBUG] [Thread-24734] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:33:28.243 [DEBUG] [Thread-24734] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:33:28.243 [DEBUG] [Thread-24734] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:33:28.243 [DEBUG] [Thread-24734] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:33:28.243 [DEBUG] [Thread-24734] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] client lang: <none>
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] server lang: <none>
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] kex follows: False
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] Compression: none
2025-11-12T23:33:28.244 [DEBUG] [Thread-24734] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:33:28.301 [DEBUG] [Thread-24734] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:33:28.302 [DEBUG] [Thread-24734] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:33:28.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:33:28.303 [DEBUG] [Thread-24734] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:33:28.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:33:28.358 [DEBUG] [Thread-24734] [transport.py] [_log()] userauth is OK
2025-11-12T23:33:28.358 [DEBUG] [Thread-24734] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:33:28.358 [DEBUG] [Thread-24734] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:33:28.359 [DEBUG] [Thread-24734] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:33:28.359 [DEBUG] [Thread-24734] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:33:28.378 [INFO] [Thread-24734] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:33:28.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:33:28.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:33:29.187 [DEBUG] [Thread-24734] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:33:29.187 [DEBUG] [Thread-24734] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:33:29.235 [DEBUG] [Thread-24734] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:33:29.235 [DEBUG] [Thread-24734] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:33:29.244 [DEBUG] [Thread-24734] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:33:29.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:33:29.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-11-12T23:33:29.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:33:29.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:33:29.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:33:29.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:33:29.277 [DEBUG] [Thread-24734] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:33:38.651 [DEBUG] [Thread-24736 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:33:53.700 [DEBUG] [Thread-24737 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:33:59.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:33:59.300 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:33:59.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-11-12T23:33:59.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 33, 45), 7.64, 60.06, 0.0, 9.92, 15.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:33:59.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:33:45
2025-11-12T23:34:00.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:34:00.219 [DEBUG] [Thread-24738] [transport.py] [_log()] starting thread (client mode): 0x1737fc10
2025-11-12T23:34:00.219 [DEBUG] [Thread-24738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:34:00.241 [DEBUG] [Thread-24738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:34:00.241 [INFO] [Thread-24738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:34:00.244 [DEBUG] [Thread-24738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:34:00.244 [DEBUG] [Thread-24738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] client lang: <none>
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] server lang: <none>
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] kex follows: False
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:34:00.245 [DEBUG] [Thread-24738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:34:00.246 [DEBUG] [Thread-24738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:34:00.246 [DEBUG] [Thread-24738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:34:00.246 [DEBUG] [Thread-24738] [transport.py] [_log()] Compression: none
2025-11-12T23:34:00.246 [DEBUG] [Thread-24738] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:34:00.264 [DEBUG] [Thread-24738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:34:00.265 [DEBUG] [Thread-24738] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:34:00.265 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:34:00.266 [DEBUG] [Thread-24738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:34:00.267 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:34:00.268 [DEBUG] [Thread-24738] [transport.py] [_log()] userauth is OK
2025-11-12T23:34:00.268 [DEBUG] [Thread-24738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:34:00.269 [DEBUG] [Thread-24738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:34:00.269 [DEBUG] [Thread-24738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:34:00.269 [DEBUG] [Thread-24738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:34:00.305 [INFO] [Thread-24738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:34:00.306 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:34:00.965 [DEBUG] [Thread-24738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:34:00.965 [DEBUG] [Thread-24738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:34:00.966 [DEBUG] [Thread-24738] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:34:01.007 [DEBUG] [Thread-24738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:34:01.007 [DEBUG] [Thread-24738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:34:01.010 [DEBUG] [Thread-24738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:34:01.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:34:01.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:34:01.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:34:01.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:34:01.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:34:01.034 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:34:01.034 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:34:01.034 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:34:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:34:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.897998 -999.00  +15.30   6.06     63   +8.50 1 1 1 1 1     0    0 4.28 -98.38 ZNESW 5.5 6.1 212.0 8.2 16.2 -21.5 16.1 -20.7 15.9 -20.6 16.1 -21.1
2025-11-12T23:34:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:34:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:34:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.897998
2025-11-12T23:34:01.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:34:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:34:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:34:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:34:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:34:01.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:33:45', tmtdew=7.64, humidity=60.06, cloud=0.0, wind=9.92, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:33:45', seeing=0.91, atlas_timestamp='2025-11-12T21:33:07.027', atlas_cloud=1, atlas_rain=1, zp_data=[0.7627499999999996, 0.49075000000000024, 0.5222499999999997, 0.5074999999999985, 0.7285000000000004, 0.8327500000000008, 0.8579999999999997, 0.885250000000001, 0.6634999999999991, 0.47000000000000064, 0.48524999999999885, 0.4689999999999994, 0.6514999999999995, 0.6747499999999995, 0.8209999999999997, 0.746999999999999, 0.8482500000000002, 0.6615000000000002, 0.732499999999999, 0.489749999999999, 0.5999999999999988, 0.5777499999999991, 0.784250000000001, 0.89975, 0.9379999999999988, 0.6550000000000002, 0.5372500000000002, 0.5075000000000003, 0.5970000000000004, 0.495000000000001, 1.0780000000000012, 1.0260000000000007, 0.9677499999999988], zp_timestamp='2025-11-12T21:31:00')
2025-11-12T23:34:01.037 [DEBUG] [Thread-24738] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:34:01.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:34:01.132 [DEBUG] [Thread-24741] [transport.py] [_log()] starting thread (client mode): 0x14907190
2025-11-12T23:34:01.132 [DEBUG] [Thread-24741] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:34:01.149 [DEBUG] [Thread-24741] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:34:01.149 [INFO] [Thread-24741] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] client lang: <none>
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] server lang: <none>
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] kex follows: False
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:34:01.157 [DEBUG] [Thread-24741] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:34:01.158 [DEBUG] [Thread-24741] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:34:01.158 [DEBUG] [Thread-24741] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:34:01.158 [DEBUG] [Thread-24741] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:34:01.158 [DEBUG] [Thread-24741] [transport.py] [_log()] Compression: none
2025-11-12T23:34:01.158 [DEBUG] [Thread-24741] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:34:01.214 [DEBUG] [Thread-24741] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:34:01.214 [DEBUG] [Thread-24741] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:34:01.215 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:34:01.216 [DEBUG] [Thread-24741] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:34:01.216 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:34:01.270 [DEBUG] [Thread-24741] [transport.py] [_log()] userauth is OK
2025-11-12T23:34:01.270 [DEBUG] [Thread-24741] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:34:01.270 [DEBUG] [Thread-24741] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:34:01.270 [DEBUG] [Thread-24741] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:34:01.270 [DEBUG] [Thread-24741] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:34:01.288 [INFO] [Thread-24741] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:34:01.289 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:34:01.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:34:02.141 [DEBUG] [Thread-24741] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:34:02.141 [DEBUG] [Thread-24741] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:34:02.189 [DEBUG] [Thread-24741] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:34:02.189 [DEBUG] [Thread-24741] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:34:02.198 [DEBUG] [Thread-24741] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:34:02.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:34:02.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')
2025-11-12T23:34:02.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:34:02.225 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:34:02.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:34:02.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:34:02.234 [DEBUG] [Thread-24741] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:34:03.165 [DEBUG] [Thread-24743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:08.732 [DEBUG] [Thread-24744 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:14.770 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:14.771 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:23.783 [DEBUG] [Thread-24745 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:32.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:34:32.257 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:34:32.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-11-12T23:34:32.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 34, 17), 7.63, 60.06, 0.0, 9.3, 15.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:34:32.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:34:17
2025-11-12T23:34:33.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:34:33.231 [DEBUG] [Thread-24746] [transport.py] [_log()] starting thread (client mode): 0x1737eef0
2025-11-12T23:34:33.231 [DEBUG] [Thread-24746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:34:33.254 [DEBUG] [Thread-24746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:34:33.254 [INFO] [Thread-24746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] client lang: <none>
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] server lang: <none>
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] kex follows: False
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] Compression: none
2025-11-12T23:34:33.258 [DEBUG] [Thread-24746] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:34:33.271 [DEBUG] [Thread-24746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:34:33.272 [DEBUG] [Thread-24746] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:34:33.272 [DEBUG] [Thread-24746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:34:33.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:34:33.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:34:33.273 [DEBUG] [Thread-24746] [transport.py] [_log()] userauth is OK
2025-11-12T23:34:33.273 [DEBUG] [Thread-24746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:34:33.273 [DEBUG] [Thread-24746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:34:33.273 [DEBUG] [Thread-24746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:34:33.273 [DEBUG] [Thread-24746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:34:33.282 [INFO] [Thread-24746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:34:33.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:34:33.922 [DEBUG] [Thread-24746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:34:33.922 [DEBUG] [Thread-24746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:34:33.922 [DEBUG] [Thread-24746] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:34:33.963 [DEBUG] [Thread-24746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:34:33.963 [DEBUG] [Thread-24746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:34:33.966 [DEBUG] [Thread-24746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:34:33.979 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:34:33.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:34:33.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:34:33.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:34:33.985 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:34:33.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:34:33.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.898345 -999.00  +15.30   6.31     63   +8.50 1 1 1 1 1     0    0 4.47 -97.41 ZNESW 7.7 6.3 193.4 9.9 16.2 -21.6 16.1 -20.6 15.8 -20.5 16.1 -21.0
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.898345
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:34:33.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:34:17', tmtdew=7.63, humidity=60.06, cloud=0.0, wind=9.3, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:34:18', seeing=1.02, atlas_timestamp='2025-11-12T21:33:37.008', atlas_cloud=1, atlas_rain=1, zp_data=[0.7627499999999996, 0.49075000000000024, 0.5222499999999997, 0.5074999999999985, 0.7285000000000004, 0.8327500000000008, 0.8579999999999997, 0.885250000000001, 0.6634999999999991, 0.47000000000000064, 0.48524999999999885, 0.4689999999999994, 0.6514999999999995, 0.6747499999999995, 0.8209999999999997, 0.746999999999999, 0.8482500000000002, 0.6615000000000002, 0.732499999999999, 0.489749999999999, 0.5999999999999988, 0.5777499999999991, 0.784250000000001, 0.89975, 0.9379999999999988, 0.6550000000000002, 0.5372500000000002, 0.5075000000000003, 0.5970000000000004, 0.495000000000001, 1.0780000000000012, 1.0260000000000007, 0.9677499999999988], zp_timestamp='2025-11-12T21:31:00')
2025-11-12T23:34:33.988 [DEBUG] [Thread-24746] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:34:34.062 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:34:34.075 [DEBUG] [Thread-24749] [transport.py] [_log()] starting thread (client mode): 0x1737fd00
2025-11-12T23:34:34.075 [DEBUG] [Thread-24749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:34:34.091 [DEBUG] [Thread-24749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:34:34.091 [INFO] [Thread-24749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:34:34.098 [DEBUG] [Thread-24749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] client lang: <none>
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] server lang: <none>
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] kex follows: False
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] Compression: none
2025-11-12T23:34:34.099 [DEBUG] [Thread-24749] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:34:34.156 [DEBUG] [Thread-24749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:34:34.156 [DEBUG] [Thread-24749] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:34:34.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:34:34.156 [DEBUG] [Thread-24749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:34:34.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:34:34.213 [DEBUG] [Thread-24749] [transport.py] [_log()] userauth is OK
2025-11-12T23:34:34.213 [DEBUG] [Thread-24749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:34:34.213 [DEBUG] [Thread-24749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:34:34.213 [DEBUG] [Thread-24749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:34:34.213 [DEBUG] [Thread-24749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:34:34.227 [INFO] [Thread-24749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:34:34.227 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:34:34.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:34:35.035 [DEBUG] [Thread-24749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:34:35.035 [DEBUG] [Thread-24749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:34:35.083 [DEBUG] [Thread-24749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:34:35.083 [DEBUG] [Thread-24749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:34:35.092 [DEBUG] [Thread-24749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:34:35.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:34:35.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-11-12T23:34:35.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-11-12T23:34:35.119 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:34:35.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:34:35.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:34:35.127 [DEBUG] [Thread-24749] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:34:38.818 [DEBUG] [Thread-24751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:40.569 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:43.766 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:48.844 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:53.871 [DEBUG] [Thread-24752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:34:55.221 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:03.238 [DEBUG] [Thread-24753 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:05.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:35:05.150 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:35:05.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-11-12T23:35:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 34, 49), 7.57, 60.64, 0.0, 11.93, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:35:05.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:34:49
2025-11-12T23:35:05.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:35:06.093 [DEBUG] [Thread-24754] [transport.py] [_log()] starting thread (client mode): 0x14905210
2025-11-12T23:35:06.094 [DEBUG] [Thread-24754] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:35:06.114 [DEBUG] [Thread-24754] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:35:06.114 [INFO] [Thread-24754] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] client lang: <none>
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] server lang: <none>
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] kex follows: False
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:35:06.118 [DEBUG] [Thread-24754] [transport.py] [_log()] Compression: none
2025-11-12T23:35:06.119 [DEBUG] [Thread-24754] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:35:06.135 [DEBUG] [Thread-24754] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:35:06.136 [DEBUG] [Thread-24754] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:35:06.136 [DEBUG] [Thread-24754] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:35:06.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:35:06.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:35:06.138 [DEBUG] [Thread-24754] [transport.py] [_log()] userauth is OK
2025-11-12T23:35:06.138 [DEBUG] [Thread-24754] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:35:06.138 [DEBUG] [Thread-24754] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:35:06.138 [DEBUG] [Thread-24754] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:35:06.138 [DEBUG] [Thread-24754] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:35:06.174 [INFO] [Thread-24754] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:35:06.175 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:35:07.218 [DEBUG] [Thread-24754] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:35:07.219 [DEBUG] [Thread-24754] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:35:07.219 [DEBUG] [Thread-24754] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:35:07.260 [DEBUG] [Thread-24754] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:35:07.260 [DEBUG] [Thread-24754] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:35:07.263 [DEBUG] [Thread-24754] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:35:07.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:35:07.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:35:07.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:35:07.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:35:07.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:35:07.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:35:07.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:35:07.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:35:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:35:07.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.898693 -999.00  +15.30  10.56     64   +8.60 1 1 1 1 1     0    0 4.49 -89.47 ZNESW 11.3 10.6 199.4 13.1 16.2 -21.6 16.0 -20.7 15.9 -20.6 16.1 -21.2
2025-11-12T23:35:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:35:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:35:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.898693
2025-11-12T23:35:07.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:35:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:35:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:35:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:35:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:35:07.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:34:49', tmtdew=7.57, humidity=60.64, cloud=0.0, wind=11.93, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:34:50', seeing=1.0, atlas_timestamp='2025-11-12T21:34:07.075', atlas_cloud=1, atlas_rain=1, zp_data=[0.7627499999999996, 0.49075000000000024, 0.5222499999999997, 0.5074999999999985, 0.7285000000000004, 0.8327500000000008, 0.8579999999999997, 0.885250000000001, 0.6634999999999991, 0.47000000000000064, 0.48524999999999885, 0.4689999999999994, 0.6514999999999995, 0.6747499999999995, 0.8209999999999997, 0.746999999999999, 0.8482500000000002, 0.6615000000000002, 0.732499999999999, 0.489749999999999, 0.5999999999999988, 0.5777499999999991, 0.784250000000001, 0.89975, 0.9379999999999988, 0.6550000000000002, 0.5372500000000002, 0.5075000000000003, 0.5970000000000004, 0.495000000000001, 1.0780000000000012, 1.0260000000000007, 0.9677499999999988], zp_timestamp='2025-11-12T21:31:00')
2025-11-12T23:35:07.294 [DEBUG] [Thread-24754] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:35:07.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:35:07.389 [DEBUG] [Thread-24757] [transport.py] [_log()] starting thread (client mode): 0x14945660
2025-11-12T23:35:07.389 [DEBUG] [Thread-24757] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:35:07.403 [DEBUG] [Thread-24757] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:35:07.404 [INFO] [Thread-24757] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:35:07.411 [DEBUG] [Thread-24757] [transport.py] [_log()] client lang: <none>
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] server lang: <none>
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] kex follows: False
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] Compression: none
2025-11-12T23:35:07.412 [DEBUG] [Thread-24757] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:35:07.470 [DEBUG] [Thread-24757] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:35:07.470 [DEBUG] [Thread-24757] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:35:07.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:35:07.471 [DEBUG] [Thread-24757] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:35:07.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:35:07.525 [DEBUG] [Thread-24757] [transport.py] [_log()] userauth is OK
2025-11-12T23:35:07.525 [DEBUG] [Thread-24757] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:35:07.525 [DEBUG] [Thread-24757] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:35:07.525 [DEBUG] [Thread-24757] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:35:07.525 [DEBUG] [Thread-24757] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:35:07.543 [INFO] [Thread-24757] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:35:07.543 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:35:07.543 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:35:08.335 [DEBUG] [Thread-24757] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:35:08.335 [DEBUG] [Thread-24757] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:35:08.384 [DEBUG] [Thread-24757] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:35:08.384 [DEBUG] [Thread-24757] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:35:08.393 [DEBUG] [Thread-24757] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:35:08.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:35:08.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-11-12T23:35:08.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-11-12T23:35:08.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:35:08.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:35:08.421 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:35:08.429 [DEBUG] [Thread-24757] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:35:08.907 [DEBUG] [Thread-24759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:13.608 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:14.986 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:14.987 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:17.996 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:23.945 [DEBUG] [Thread-24760 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:37.367 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:38.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:35:38.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:35:38.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-11-12T23:35:38.975 [DEBUG] [Thread-24761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 35, 21), 7.54, 60.74, 0.0, 12.03, 15.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:35:39.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:35:21
2025-11-12T23:35:39.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:35:39.374 [DEBUG] [Thread-24762] [transport.py] [_log()] starting thread (client mode): 0x14907250
2025-11-12T23:35:39.375 [DEBUG] [Thread-24762] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:35:39.394 [DEBUG] [Thread-24762] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:35:39.395 [INFO] [Thread-24762] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:35:39.397 [DEBUG] [Thread-24762] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] client lang: <none>
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] server lang: <none>
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] kex follows: False
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] Compression: none
2025-11-12T23:35:39.398 [DEBUG] [Thread-24762] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:35:39.406 [DEBUG] [Thread-24762] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:35:39.407 [DEBUG] [Thread-24762] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:35:39.407 [DEBUG] [Thread-24762] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:35:39.407 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:35:39.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:35:39.409 [DEBUG] [Thread-24762] [transport.py] [_log()] userauth is OK
2025-11-12T23:35:39.409 [DEBUG] [Thread-24762] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:35:39.409 [DEBUG] [Thread-24762] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:35:39.409 [DEBUG] [Thread-24762] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:35:39.409 [DEBUG] [Thread-24762] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:35:39.426 [INFO] [Thread-24762] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:35:39.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:35:40.058 [DEBUG] [Thread-24762] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:35:40.059 [DEBUG] [Thread-24762] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:35:40.059 [DEBUG] [Thread-24762] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:35:40.100 [DEBUG] [Thread-24762] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:35:40.100 [DEBUG] [Thread-24762] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:35:40.104 [DEBUG] [Thread-24762] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:35:40.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:35:40.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:35:40.119 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:35:40.121 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:35:40.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:35:40.129 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:35:40.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:35:40.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:35:40.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:35:40.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.899387 -999.00  +15.30   8.09     64   +8.50 1 1 1 1 1     0    0 4.44 -89.60 ZNESW 7.6 8.1 202.0 11.4 16.2 -21.5 16.0 -20.8 15.8 -20.7 16.1 -21.4
2025-11-12T23:35:40.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:35:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:35:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.899387
2025-11-12T23:35:40.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:35:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:35:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:35:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:35:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:35:40.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:35:21', tmtdew=7.54, humidity=60.74, cloud=0.0, wind=12.03, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:35:22', seeing=1.0, atlas_timestamp='2025-11-12T21:35:07.037', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:34:00')
2025-11-12T23:35:40.133 [DEBUG] [Thread-24762] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:35:40.214 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:35:40.225 [DEBUG] [Thread-24765] [transport.py] [_log()] starting thread (client mode): 0x11f01810
2025-11-12T23:35:40.226 [DEBUG] [Thread-24765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:35:40.240 [DEBUG] [Thread-24765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:35:40.241 [INFO] [Thread-24765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:35:40.248 [DEBUG] [Thread-24765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:35:40.248 [DEBUG] [Thread-24765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:35:40.248 [DEBUG] [Thread-24765] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:35:40.248 [DEBUG] [Thread-24765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] client lang: <none>
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] server lang: <none>
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] kex follows: False
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:35:40.249 [DEBUG] [Thread-24765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:35:40.250 [DEBUG] [Thread-24765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:35:40.250 [DEBUG] [Thread-24765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:35:40.250 [DEBUG] [Thread-24765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:35:40.250 [DEBUG] [Thread-24765] [transport.py] [_log()] Compression: none
2025-11-12T23:35:40.250 [DEBUG] [Thread-24765] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:35:40.305 [DEBUG] [Thread-24765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:35:40.306 [DEBUG] [Thread-24765] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:35:40.307 [DEBUG] [Thread-24765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:35:40.307 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:35:40.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:35:40.361 [DEBUG] [Thread-24765] [transport.py] [_log()] userauth is OK
2025-11-12T23:35:40.361 [DEBUG] [Thread-24765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:35:40.361 [DEBUG] [Thread-24765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:35:40.361 [DEBUG] [Thread-24765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:35:40.362 [DEBUG] [Thread-24765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:35:40.383 [INFO] [Thread-24765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:35:40.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:35:40.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:35:41.213 [DEBUG] [Thread-24765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:35:41.213 [DEBUG] [Thread-24765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:35:41.261 [DEBUG] [Thread-24765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:35:41.261 [DEBUG] [Thread-24765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:35:41.270 [DEBUG] [Thread-24765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:35:41.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:35:41.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-11-12T23:35:41.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-11-12T23:35:41.298 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:35:41.298 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:35:41.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:35:41.307 [DEBUG] [Thread-24765] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:35:41.763 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:47.879 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:52.254 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:35:54.007 [DEBUG] [Thread-24767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:03.312 [DEBUG] [Thread-24768 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:09.060 [DEBUG] [Thread-24769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:11.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:36:11.329 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:36:11.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-11-12T23:36:11.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 35, 53), 7.52, 60.81, 0.0, 12.18, 15.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:36:11.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:35:53
2025-11-12T23:36:12.108 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:36:12.256 [DEBUG] [Thread-24770] [transport.py] [_log()] starting thread (client mode): 0x17399bd0
2025-11-12T23:36:12.256 [DEBUG] [Thread-24770] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:36:12.275 [DEBUG] [Thread-24770] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:36:12.275 [INFO] [Thread-24770] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] client lang: <none>
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] server lang: <none>
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] kex follows: False
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] Compression: none
2025-11-12T23:36:12.277 [DEBUG] [Thread-24770] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:36:12.296 [DEBUG] [Thread-24770] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:36:12.297 [DEBUG] [Thread-24770] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:36:12.297 [DEBUG] [Thread-24770] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:36:12.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:36:12.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:36:12.299 [DEBUG] [Thread-24770] [transport.py] [_log()] userauth is OK
2025-11-12T23:36:12.300 [DEBUG] [Thread-24770] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:36:12.300 [DEBUG] [Thread-24770] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:36:12.300 [DEBUG] [Thread-24770] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:36:12.300 [DEBUG] [Thread-24770] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:36:12.319 [INFO] [Thread-24770] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:36:12.320 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:36:12.956 [DEBUG] [Thread-24770] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:36:12.956 [DEBUG] [Thread-24770] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:36:12.956 [DEBUG] [Thread-24770] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:36:12.997 [DEBUG] [Thread-24770] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:36:12.997 [DEBUG] [Thread-24770] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:36:12.999 [DEBUG] [Thread-24770] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:36:13.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:36:13.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:36:13.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:36:13.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:36:13.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:36:13.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:36:13.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:36:13.022 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:36:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:36:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.899734 -999.00  +15.30   5.70     64   +8.50 1 1 1 1 1     0    0 4.42 -89.76 ZNESW 7.1 5.7 209.7 10.9 16.2 -21.7 16.0 -20.8 15.8 -20.7 16.1 -21.4
2025-11-12T23:36:13.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:36:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:36:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.899734
2025-11-12T23:36:13.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:36:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:36:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:36:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:36:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:36:13.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:35:53', tmtdew=7.52, humidity=60.81, cloud=0.0, wind=12.18, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:35:54', seeing=1.13, atlas_timestamp='2025-11-12T21:35:37.018', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:34:00')
2025-11-12T23:36:13.024 [DEBUG] [Thread-24770] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:36:13.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:36:13.120 [DEBUG] [Thread-24773] [transport.py] [_log()] starting thread (client mode): 0x1737c610
2025-11-12T23:36:13.120 [DEBUG] [Thread-24773] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:36:13.134 [DEBUG] [Thread-24773] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:36:13.135 [INFO] [Thread-24773] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:36:13.142 [DEBUG] [Thread-24773] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:36:13.143 [DEBUG] [Thread-24773] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:36:13.143 [DEBUG] [Thread-24773] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:36:13.143 [DEBUG] [Thread-24773] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:36:13.143 [DEBUG] [Thread-24773] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:36:13.143 [DEBUG] [Thread-24773] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:36:13.143 [DEBUG] [Thread-24773] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:36:13.143 [DEBUG] [Thread-24773] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:36:13.143 [DEBUG] [Thread-24773] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:36:13.144 [DEBUG] [Thread-24773] [transport.py] [_log()] client lang: <none>
2025-11-12T23:36:13.144 [DEBUG] [Thread-24773] [transport.py] [_log()] server lang: <none>
2025-11-12T23:36:13.144 [DEBUG] [Thread-24773] [transport.py] [_log()] kex follows: False
2025-11-12T23:36:13.144 [DEBUG] [Thread-24773] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:36:13.144 [DEBUG] [Thread-24773] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:36:13.144 [DEBUG] [Thread-24773] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:36:13.144 [DEBUG] [Thread-24773] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:36:13.144 [DEBUG] [Thread-24773] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:36:13.145 [DEBUG] [Thread-24773] [transport.py] [_log()] Compression: none
2025-11-12T23:36:13.145 [DEBUG] [Thread-24773] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:36:13.202 [DEBUG] [Thread-24773] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:36:13.203 [DEBUG] [Thread-24773] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:36:13.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:36:13.205 [DEBUG] [Thread-24773] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:36:13.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:36:13.261 [DEBUG] [Thread-24773] [transport.py] [_log()] userauth is OK
2025-11-12T23:36:13.261 [DEBUG] [Thread-24773] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:36:13.262 [DEBUG] [Thread-24773] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:36:13.262 [DEBUG] [Thread-24773] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:36:13.262 [DEBUG] [Thread-24773] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:36:13.290 [INFO] [Thread-24773] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:36:13.290 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:36:13.290 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:36:14.132 [DEBUG] [Thread-24773] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:36:14.132 [DEBUG] [Thread-24773] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:36:14.179 [DEBUG] [Thread-24773] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:36:14.180 [DEBUG] [Thread-24773] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:36:14.189 [DEBUG] [Thread-24773] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:36:14.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:36:14.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-11-12T23:36:14.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-11-12T23:36:14.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:36:14.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:36:14.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:36:14.226 [DEBUG] [Thread-24773] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:36:15.190 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:15.191 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:24.098 [DEBUG] [Thread-24775 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:39.159 [DEBUG] [Thread-24776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:44.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:36:44.248 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:36: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-11-12T23:36:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 36, 25), 7.53, 60.78, 0.0, 12.07, 15.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:36:44.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:36:25
2025-11-12T23:36:45.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:36:45.148 [DEBUG] [Thread-24777] [transport.py] [_log()] starting thread (client mode): 0x1739b5b0
2025-11-12T23:36:45.149 [DEBUG] [Thread-24777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:36:45.164 [DEBUG] [Thread-24777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:36:45.164 [INFO] [Thread-24777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] client lang: <none>
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] server lang: <none>
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] kex follows: False
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:36:45.167 [DEBUG] [Thread-24777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:36:45.168 [DEBUG] [Thread-24777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:36:45.168 [DEBUG] [Thread-24777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:36:45.168 [DEBUG] [Thread-24777] [transport.py] [_log()] Compression: none
2025-11-12T23:36:45.168 [DEBUG] [Thread-24777] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:36:45.186 [DEBUG] [Thread-24777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:36:45.186 [DEBUG] [Thread-24777] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:36:45.187 [DEBUG] [Thread-24777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:36:45.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:36:45.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:36:45.189 [DEBUG] [Thread-24777] [transport.py] [_log()] userauth is OK
2025-11-12T23:36:45.189 [DEBUG] [Thread-24777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:36:45.189 [DEBUG] [Thread-24777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:36:45.189 [DEBUG] [Thread-24777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:36:45.189 [DEBUG] [Thread-24777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:36:45.206 [INFO] [Thread-24777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:36:45.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:36:45.934 [DEBUG] [Thread-24777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:36:45.935 [DEBUG] [Thread-24777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:36:45.935 [DEBUG] [Thread-24777] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:36:45.976 [DEBUG] [Thread-24777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:36:45.976 [DEBUG] [Thread-24777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:36:45.979 [DEBUG] [Thread-24777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:36:45.991 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:36:45.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:36:45.993 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:36:45.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:36:45.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:36:46.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:36:46.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:36:46.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:36:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:36:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.900081 -999.00  +15.30   6.97     64   +8.50 1 1 1 1 1     0    0 4.55 -82.94 ZNESW 5.5 7.0 196.6 9.5 16.1 -21.7 16.0 -20.8 15.8 -20.6 16.1 -21.4
2025-11-12T23:36:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:36:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:36:46.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.900081
2025-11-12T23:36:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:36:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:36:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:36:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:36:46.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:36:46.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:36:25', tmtdew=7.53, humidity=60.78, cloud=0.0, wind=12.07, temperature=15.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:36:26', seeing=1.05, atlas_timestamp='2025-11-12T21:36:06.998', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:34:00')
2025-11-12T23:36:46.003 [DEBUG] [Thread-24777] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:36:46.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:36:46.097 [DEBUG] [Thread-24780] [transport.py] [_log()] starting thread (client mode): 0x14946cb0
2025-11-12T23:36:46.097 [DEBUG] [Thread-24780] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:36:46.111 [DEBUG] [Thread-24780] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:36:46.112 [INFO] [Thread-24780] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:36:46.119 [DEBUG] [Thread-24780] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:36:46.119 [DEBUG] [Thread-24780] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:36:46.119 [DEBUG] [Thread-24780] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] client lang: <none>
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] server lang: <none>
2025-11-12T23:36:46.120 [DEBUG] [Thread-24780] [transport.py] [_log()] kex follows: False
2025-11-12T23:36:46.121 [DEBUG] [Thread-24780] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:36:46.121 [DEBUG] [Thread-24780] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:36:46.121 [DEBUG] [Thread-24780] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:36:46.121 [DEBUG] [Thread-24780] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:36:46.121 [DEBUG] [Thread-24780] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:36:46.121 [DEBUG] [Thread-24780] [transport.py] [_log()] Compression: none
2025-11-12T23:36:46.121 [DEBUG] [Thread-24780] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:36:46.178 [DEBUG] [Thread-24780] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:36:46.178 [DEBUG] [Thread-24780] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:36:46.179 [DEBUG] [Thread-24780] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:36:46.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:36:46.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:36:46.233 [DEBUG] [Thread-24780] [transport.py] [_log()] userauth is OK
2025-11-12T23:36:46.234 [DEBUG] [Thread-24780] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:36:46.234 [DEBUG] [Thread-24780] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:36:46.234 [DEBUG] [Thread-24780] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:36:46.234 [DEBUG] [Thread-24780] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:36:46.253 [INFO] [Thread-24780] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:36:46.253 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:36:46.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:36:47.124 [DEBUG] [Thread-24780] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:36:47.125 [DEBUG] [Thread-24780] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:36:47.171 [DEBUG] [Thread-24780] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:36:47.172 [DEBUG] [Thread-24780] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:36:47.181 [DEBUG] [Thread-24780] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:36:47.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:36:47.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:36:47.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-11-12T23:36:47.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:36:47.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:36:47.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:36:47.217 [DEBUG] [Thread-24780] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:36:54.198 [DEBUG] [Thread-24782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:55.376 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:36:58.468 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:37:03.368 [DEBUG] [Thread-24783 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:37:09.254 [DEBUG] [Thread-24784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:37:15.395 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:37:15.396 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:37:17.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:37:17.240 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:37: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-11-12T23:37:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 36, 57), 7.53, 60.78, 0.0, 10.62, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:37:17.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:36:57
2025-11-12T23:37:18.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:37:18.150 [DEBUG] [Thread-24785] [transport.py] [_log()] starting thread (client mode): 0x173463b0
2025-11-12T23:37:18.150 [DEBUG] [Thread-24785] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:37:18.170 [DEBUG] [Thread-24785] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:37:18.171 [INFO] [Thread-24785] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] client lang: <none>
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] server lang: <none>
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] kex follows: False
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] Compression: none
2025-11-12T23:37:18.174 [DEBUG] [Thread-24785] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:37:18.192 [DEBUG] [Thread-24785] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:37:18.192 [DEBUG] [Thread-24785] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:37:18.193 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:37:18.193 [DEBUG] [Thread-24785] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:37:18.194 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:37:18.195 [DEBUG] [Thread-24785] [transport.py] [_log()] userauth is OK
2025-11-12T23:37:18.196 [DEBUG] [Thread-24785] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:37:18.196 [DEBUG] [Thread-24785] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:37:18.196 [DEBUG] [Thread-24785] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:37:18.196 [DEBUG] [Thread-24785] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:37:18.233 [INFO] [Thread-24785] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:37:18.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:37:18.873 [DEBUG] [Thread-24785] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:37:18.873 [DEBUG] [Thread-24785] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:37:18.873 [DEBUG] [Thread-24785] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:37:18.915 [DEBUG] [Thread-24785] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:37:18.915 [DEBUG] [Thread-24785] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:37:18.918 [DEBUG] [Thread-24785] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:37:18.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:37:18.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:37:18.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:37:18.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:37:18.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:37:18.940 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:37:18.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:37:18.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:37:18.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:37:18.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.900429 -999.00  +15.30   7.56     64   +8.50 1 1 1 1 1     0    0 4.69 -81.09 ZNESW 8.6 7.6 195.6 9.6 16.2 -21.7 16.0 -21.1 15.8 -20.8 16.1 -21.4
2025-11-12T23:37:18.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:37:18.941 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:37:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.900429
2025-11-12T23:37:18.942 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:37:18.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:37:18.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:37:18.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:37:18.943 [DEBUG] [Thread-24785] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:37:18.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:37:18.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:36:57', tmtdew=7.53, humidity=60.78, cloud=0.0, wind=10.62, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:36:58', seeing=1.05, atlas_timestamp='2025-11-12T21:36:37.066', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:34:00')
2025-11-12T23:37: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-11-12T23:37:19.037 [DEBUG] [Thread-24788] [transport.py] [_log()] starting thread (client mode): 0x14981630
2025-11-12T23:37:19.037 [DEBUG] [Thread-24788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:37:19.051 [DEBUG] [Thread-24788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:37:19.052 [INFO] [Thread-24788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:37:19.059 [DEBUG] [Thread-24788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] client lang: <none>
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] server lang: <none>
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] kex follows: False
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] Compression: none
2025-11-12T23:37:19.060 [DEBUG] [Thread-24788] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:37:19.116 [DEBUG] [Thread-24788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:37:19.116 [DEBUG] [Thread-24788] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:37:19.117 [DEBUG] [Thread-24788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:37:19.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:37:19.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:37:19.173 [DEBUG] [Thread-24788] [transport.py] [_log()] userauth is OK
2025-11-12T23:37:19.173 [DEBUG] [Thread-24788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:37:19.173 [DEBUG] [Thread-24788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:37:19.173 [DEBUG] [Thread-24788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:37:19.173 [DEBUG] [Thread-24788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:37:19.187 [INFO] [Thread-24788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:37:19.187 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:37:19.187 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:37:20.067 [DEBUG] [Thread-24788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:37:20.068 [DEBUG] [Thread-24788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:37:20.115 [DEBUG] [Thread-24788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:37:20.115 [DEBUG] [Thread-24788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:37:20.124 [DEBUG] [Thread-24788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:37:20.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:37:20.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-11-12T23:37:20.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-11-12T23:37:20.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:37:20.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:37:20.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:37:20.159 [DEBUG] [Thread-24788] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:37:24.286 [DEBUG] [Thread-24790 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:37:39.337 [DEBUG] [Thread-24791 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:37:50.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:37:50.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:37:50.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-11-12T23:37:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 37, 29), 7.51, 60.89, 0.0, 10.53, 15.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:37:50.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:37:29
2025-11-12T23:37:50.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:37:51.080 [DEBUG] [Thread-24792] [transport.py] [_log()] starting thread (client mode): 0x1737d540
2025-11-12T23:37:51.080 [DEBUG] [Thread-24792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:37:51.100 [DEBUG] [Thread-24792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:37:51.100 [INFO] [Thread-24792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] client lang: <none>
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] server lang: <none>
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] kex follows: False
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:37:51.101 [DEBUG] [Thread-24792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:37:51.102 [DEBUG] [Thread-24792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:37:51.102 [DEBUG] [Thread-24792] [transport.py] [_log()] Compression: none
2025-11-12T23:37:51.102 [DEBUG] [Thread-24792] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:37:51.110 [DEBUG] [Thread-24792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:37:51.111 [DEBUG] [Thread-24792] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:37:51.112 [DEBUG] [Thread-24792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:37:51.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:37:51.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:37:51.114 [DEBUG] [Thread-24792] [transport.py] [_log()] userauth is OK
2025-11-12T23:37:51.114 [DEBUG] [Thread-24792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:37:51.114 [DEBUG] [Thread-24792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:37:51.114 [DEBUG] [Thread-24792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:37:51.114 [DEBUG] [Thread-24792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:37:51.141 [INFO] [Thread-24792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:37:51.143 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:37:51.896 [DEBUG] [Thread-24792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:37:51.896 [DEBUG] [Thread-24792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:37:51.897 [DEBUG] [Thread-24792] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:37:51.938 [DEBUG] [Thread-24792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:37:51.938 [DEBUG] [Thread-24792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:37:51.941 [DEBUG] [Thread-24792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:37:51.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:37:51.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:37:51.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:37:51.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:37:51.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:37:51.964 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:37:51.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:37:51.965 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:37:51.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:37:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.900776 -999.00  +15.30   7.36     64   +8.50 1 1 1 1 1     0    0 4.86 -73.44 ZNESW 7.2 7.4 209.4 10.6 16.1 -21.7 16.0 -21.4 15.8 -20.8 16.1 -21.5
2025-11-12T23:37:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:37:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:37:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.900776
2025-11-12T23:37:51.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:37:51.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:37:51.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:37:51.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:37:51.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:37:51.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:37:29', tmtdew=7.51, humidity=60.89, cloud=0.0, wind=10.53, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:37:30', seeing=1.17, atlas_timestamp='2025-11-12T21:37:07.046', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:34:00')
2025-11-12T23:37:51.968 [DEBUG] [Thread-24792] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:37:52.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:37:52.063 [DEBUG] [Thread-24795] [transport.py] [_log()] starting thread (client mode): 0x149222c0
2025-11-12T23:37:52.063 [DEBUG] [Thread-24795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:37:52.078 [DEBUG] [Thread-24795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:37:52.078 [INFO] [Thread-24795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:37:52.085 [DEBUG] [Thread-24795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:37:52.085 [DEBUG] [Thread-24795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:37:52.085 [DEBUG] [Thread-24795] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] client lang: <none>
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] server lang: <none>
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] kex follows: False
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] Compression: none
2025-11-12T23:37:52.086 [DEBUG] [Thread-24795] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:37:52.145 [DEBUG] [Thread-24795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:37:52.145 [DEBUG] [Thread-24795] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:37:52.146 [DEBUG] [Thread-24795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:37:52.146 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:37:52.147 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:37:52.201 [DEBUG] [Thread-24795] [transport.py] [_log()] userauth is OK
2025-11-12T23:37:52.201 [DEBUG] [Thread-24795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:37:52.201 [DEBUG] [Thread-24795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:37:52.201 [DEBUG] [Thread-24795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:37:52.201 [DEBUG] [Thread-24795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:37:52.220 [INFO] [Thread-24795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:37:52.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:37:52.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:37:53.030 [DEBUG] [Thread-24795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:37:53.031 [DEBUG] [Thread-24795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:37:53.079 [DEBUG] [Thread-24795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:37:53.079 [DEBUG] [Thread-24795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:37:53.088 [DEBUG] [Thread-24795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:37:53.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:37:53.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:37:53.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:37:53.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:37:53.116 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:37:53.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:37:53.124 [DEBUG] [Thread-24795] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:37:54.371 [DEBUG] [Thread-24797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:38:03.420 [DEBUG] [Thread-24798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:38:09.423 [DEBUG] [Thread-24799 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:38:15.598 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:38:15.599 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:38:23.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:38:23.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:38:23.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-11-12T23:38:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 38, 1), 7.48, 60.99, 0.0, 10.18, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:38:23.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:38:01
2025-11-12T23:38:23.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:38:24.126 [DEBUG] [Thread-24800] [transport.py] [_log()] starting thread (client mode): 0x14921660
2025-11-12T23:38:24.126 [DEBUG] [Thread-24800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:38:24.146 [DEBUG] [Thread-24800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:38:24.146 [INFO] [Thread-24800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] client lang: <none>
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] server lang: <none>
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] kex follows: False
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] Compression: none
2025-11-12T23:38:24.150 [DEBUG] [Thread-24800] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:38:24.166 [DEBUG] [Thread-24800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:38:24.167 [DEBUG] [Thread-24800] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:38:24.167 [DEBUG] [Thread-24800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:38:24.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:38:24.167 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:38:24.168 [DEBUG] [Thread-24800] [transport.py] [_log()] userauth is OK
2025-11-12T23:38:24.168 [DEBUG] [Thread-24800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:38:24.168 [DEBUG] [Thread-24800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:38:24.168 [DEBUG] [Thread-24800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:38:24.168 [DEBUG] [Thread-24800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:38:24.186 [INFO] [Thread-24800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:38:24.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:38:24.458 [DEBUG] [Thread-24802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:38:24.822 [DEBUG] [Thread-24800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:38:24.822 [DEBUG] [Thread-24800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:38:24.822 [DEBUG] [Thread-24800] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:38:24.863 [DEBUG] [Thread-24800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:38:24.863 [DEBUG] [Thread-24800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:38:24.865 [DEBUG] [Thread-24800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:38:24.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:38:24.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:38:24.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:38:24.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:38:24.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:38:24.882 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:38:24.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:38:24.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:38:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:38:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.901134 -999.00  +15.20   6.33     64   +8.50 1 1 1 1 1     0    0 5.20 -66.52 ZNESW 7.2 6.3 196.6 9.2 16.1 -21.9 15.9 -21.0 15.8 -20.8 16.1 -21.5
2025-11-12T23:38:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:38:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:38:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.901134
2025-11-12T23:38:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:38:24.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:38:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:38:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:38:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:38:24.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:38:01', tmtdew=7.48, humidity=60.99, cloud=0.0, wind=10.18, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:38:02', seeing=1.17, atlas_timestamp='2025-11-12T21:37:37.978', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:34:00')
2025-11-12T23:38:24.883 [DEBUG] [Thread-24800] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:38:24.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:38:24.967 [DEBUG] [Thread-24804] [transport.py] [_log()] starting thread (client mode): 0x14980bb0
2025-11-12T23:38:24.967 [DEBUG] [Thread-24804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:38:24.981 [DEBUG] [Thread-24804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:38:24.981 [INFO] [Thread-24804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:38:24.989 [DEBUG] [Thread-24804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] client lang: <none>
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] server lang: <none>
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] kex follows: False
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] Compression: none
2025-11-12T23:38:24.990 [DEBUG] [Thread-24804] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:38:25.047 [DEBUG] [Thread-24804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:38:25.048 [DEBUG] [Thread-24804] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:38:25.048 [DEBUG] [Thread-24804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:38:25.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:38:25.048 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:38:25.104 [DEBUG] [Thread-24804] [transport.py] [_log()] userauth is OK
2025-11-12T23:38:25.104 [DEBUG] [Thread-24804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:38:25.104 [DEBUG] [Thread-24804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:38:25.104 [DEBUG] [Thread-24804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:38:25.104 [DEBUG] [Thread-24804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:38:25.118 [INFO] [Thread-24804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:38:25.118 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:38:25.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:38:25.940 [DEBUG] [Thread-24804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:38:25.940 [DEBUG] [Thread-24804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:38:25.988 [DEBUG] [Thread-24804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:38:25.988 [DEBUG] [Thread-24804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:38:25.996 [DEBUG] [Thread-24804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:38:26.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:38:26.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-11-12T23:38:26.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-11-12T23:38:26.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:38:26.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:38:26.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:38:26.028 [DEBUG] [Thread-24804] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:38:39.489 [DEBUG] [Thread-24806 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:38:54.543 [DEBUG] [Thread-24807 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:38:56.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:38:56.031 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:38:56.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-11-12T23:38:56.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 38, 33), 7.5, 60.94, 0.0, 9.67, 15.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:38:56.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:38:33
2025-11-12T23:38:56.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:38:56.964 [DEBUG] [Thread-24808] [transport.py] [_log()] starting thread (client mode): 0x149817b0
2025-11-12T23:38:56.964 [DEBUG] [Thread-24808] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:38:56.985 [DEBUG] [Thread-24808] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:38:56.985 [INFO] [Thread-24808] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] client lang: <none>
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] server lang: <none>
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] kex follows: False
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] Compression: none
2025-11-12T23:38:56.986 [DEBUG] [Thread-24808] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:38:57.000 [DEBUG] [Thread-24808] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:38:57.000 [DEBUG] [Thread-24808] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:38:57.001 [DEBUG] [Thread-24808] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:38:57.001 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:38:57.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:38:57.003 [DEBUG] [Thread-24808] [transport.py] [_log()] userauth is OK
2025-11-12T23:38:57.003 [DEBUG] [Thread-24808] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:38:57.003 [DEBUG] [Thread-24808] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:38:57.003 [DEBUG] [Thread-24808] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:38:57.003 [DEBUG] [Thread-24808] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:38:57.021 [INFO] [Thread-24808] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:38:57.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:38:57.814 [DEBUG] [Thread-24808] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:38:57.814 [DEBUG] [Thread-24808] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:38:57.815 [DEBUG] [Thread-24808] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:38:57.856 [DEBUG] [Thread-24808] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:38:57.856 [DEBUG] [Thread-24808] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:38:57.859 [DEBUG] [Thread-24808] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:38:57.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:38:57.869 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:38:57.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:38:57.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:38:57.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:38:57.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:38:57.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:38:57.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:38:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:38:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.901817 -999.00  +15.20   4.91     64   +8.50 1 1 1 1 1     0    0 5.20 -62.04 ZNESW 7.9 4.9 211.8 8.8 16.1 -21.7 16.0 -21.0 15.8 -20.8 16.1 -21.6
2025-11-12T23:38:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:38:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:38:57.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.901817
2025-11-12T23:38:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:38:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:38:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:38:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:38:57.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:38:57.884 [DEBUG] [Thread-24808] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:38:57.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:38:33', tmtdew=7.5, humidity=60.94, cloud=0.0, wind=9.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-11-12T23:38:34', seeing=1.16, atlas_timestamp='2025-11-12T21:38:36.989', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:37:00')
2025-11-12T23:38:57.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:38:57.979 [DEBUG] [Thread-24811] [transport.py] [_log()] starting thread (client mode): 0x19dda230
2025-11-12T23:38:57.979 [DEBUG] [Thread-24811] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:38:57.993 [DEBUG] [Thread-24811] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:38:57.993 [INFO] [Thread-24811] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] client lang: <none>
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] server lang: <none>
2025-11-12T23:38:58.001 [DEBUG] [Thread-24811] [transport.py] [_log()] kex follows: False
2025-11-12T23:38:58.002 [DEBUG] [Thread-24811] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:38:58.002 [DEBUG] [Thread-24811] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:38:58.002 [DEBUG] [Thread-24811] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:38:58.002 [DEBUG] [Thread-24811] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:38:58.002 [DEBUG] [Thread-24811] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:38:58.002 [DEBUG] [Thread-24811] [transport.py] [_log()] Compression: none
2025-11-12T23:38:58.002 [DEBUG] [Thread-24811] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:38:58.061 [DEBUG] [Thread-24811] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:38:58.061 [DEBUG] [Thread-24811] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:38:58.062 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:38:58.063 [DEBUG] [Thread-24811] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:38:58.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:38:58.117 [DEBUG] [Thread-24811] [transport.py] [_log()] userauth is OK
2025-11-12T23:38:58.118 [DEBUG] [Thread-24811] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:38:58.118 [DEBUG] [Thread-24811] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:38:58.118 [DEBUG] [Thread-24811] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:38:58.118 [DEBUG] [Thread-24811] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:38:58.138 [INFO] [Thread-24811] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:38:58.138 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:38:58.138 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:38:58.987 [DEBUG] [Thread-24811] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:38:58.987 [DEBUG] [Thread-24811] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:38:59.035 [DEBUG] [Thread-24811] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:38:59.035 [DEBUG] [Thread-24811] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:38:59.043 [DEBUG] [Thread-24811] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:38:59.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:38: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-11-12T23:38:59.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-11-12T23:38:59.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:38:59.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:38:59.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:38:59.080 [DEBUG] [Thread-24811] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:39:03.475 [DEBUG] [Thread-24813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:39:09.583 [DEBUG] [Thread-24814 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:39:15.808 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:39:15.810 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:39:24.637 [DEBUG] [Thread-24815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:39:29.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:39:29.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:39:29.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:39:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 39, 5), 7.51, 60.89, 0.0, 9.62, 15.15, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:39:29.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:39:05
2025-11-12T23:39:29.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:39:29.991 [DEBUG] [Thread-24816] [transport.py] [_log()] starting thread (client mode): 0x149479d0
2025-11-12T23:39:29.991 [DEBUG] [Thread-24816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:39:30.012 [DEBUG] [Thread-24816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:39:30.012 [INFO] [Thread-24816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:39:30.015 [DEBUG] [Thread-24816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:39:30.015 [DEBUG] [Thread-24816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:39:30.015 [DEBUG] [Thread-24816] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:39:30.015 [DEBUG] [Thread-24816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] client lang: <none>
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] server lang: <none>
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] kex follows: False
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] Compression: none
2025-11-12T23:39:30.016 [DEBUG] [Thread-24816] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:39:30.033 [DEBUG] [Thread-24816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:39:30.033 [DEBUG] [Thread-24816] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:39:30.034 [DEBUG] [Thread-24816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:39:30.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:39:30.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:39:30.035 [DEBUG] [Thread-24816] [transport.py] [_log()] userauth is OK
2025-11-12T23:39:30.036 [DEBUG] [Thread-24816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:39:30.036 [DEBUG] [Thread-24816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:39:30.036 [DEBUG] [Thread-24816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:39:30.036 [DEBUG] [Thread-24816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:39:30.060 [INFO] [Thread-24816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:39:30.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:39:30.655 [DEBUG] [Thread-24816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:39:30.655 [DEBUG] [Thread-24816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:39:30.656 [DEBUG] [Thread-24816] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:39:30.696 [DEBUG] [Thread-24816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:39:30.697 [DEBUG] [Thread-24816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:39:30.700 [DEBUG] [Thread-24816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:39:30.712 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:39:30.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:39:30.715 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:39:30.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:39:30.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:39:30.725 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:39:30.726 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:39:30.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:39:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:39:30.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.902165 -999.00  +15.20   4.46     64   +8.50 1 1 1 1 1     0    0 5.28 -58.89 ZNESW 6.4 4.5 201.7 9.2 16.1 -21.9 15.9 -21.2 15.8 -20.9 16.0 -21.6
2025-11-12T23:39:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:39:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:39:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.902165
2025-11-12T23:39:30.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:39:30.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:39:30.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:39:30.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:39:30.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:39:30.728 [DEBUG] [Thread-24816] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:39:30.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:39:05', tmtdew=7.51, humidity=60.89, cloud=0.0, wind=9.62, temperature=15.15, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:39:06', seeing=1.03, atlas_timestamp='2025-11-12T21:39:07.056', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:37:00')
2025-11-12T23:39:30.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:39:30.835 [DEBUG] [Thread-24819] [transport.py] [_log()] starting thread (client mode): 0x19ddbcd0
2025-11-12T23:39:30.835 [DEBUG] [Thread-24819] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:39:30.851 [DEBUG] [Thread-24819] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:39:30.851 [INFO] [Thread-24819] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:39:30.859 [DEBUG] [Thread-24819] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:39:30.859 [DEBUG] [Thread-24819] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:39:30.859 [DEBUG] [Thread-24819] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] client lang: <none>
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] server lang: <none>
2025-11-12T23:39:30.860 [DEBUG] [Thread-24819] [transport.py] [_log()] kex follows: False
2025-11-12T23:39:30.861 [DEBUG] [Thread-24819] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:39:30.861 [DEBUG] [Thread-24819] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:39:30.861 [DEBUG] [Thread-24819] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:39:30.861 [DEBUG] [Thread-24819] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:39:30.861 [DEBUG] [Thread-24819] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:39:30.861 [DEBUG] [Thread-24819] [transport.py] [_log()] Compression: none
2025-11-12T23:39:30.861 [DEBUG] [Thread-24819] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:39:30.918 [DEBUG] [Thread-24819] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:39:30.919 [DEBUG] [Thread-24819] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:39:30.920 [DEBUG] [Thread-24819] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:39:30.920 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:39:30.921 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:39:30.981 [DEBUG] [Thread-24819] [transport.py] [_log()] userauth is OK
2025-11-12T23:39:30.981 [DEBUG] [Thread-24819] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:39:30.981 [DEBUG] [Thread-24819] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:39:30.981 [DEBUG] [Thread-24819] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:39:30.982 [DEBUG] [Thread-24819] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:39:31.003 [INFO] [Thread-24819] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:39:31.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:39:31.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:39:31.891 [DEBUG] [Thread-24819] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:39:31.891 [DEBUG] [Thread-24819] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:39:31.939 [DEBUG] [Thread-24819] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:39:31.940 [DEBUG] [Thread-24819] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:39:31.949 [DEBUG] [Thread-24819] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:39:31.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:39:31.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-11-12T23:39:31.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-11-12T23:39:31.978 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:39:31.979 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:39:31.979 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:39:31.990 [DEBUG] [Thread-24819] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:39:39.674 [DEBUG] [Thread-24821 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:39:54.717 [DEBUG] [Thread-24822 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:40:02.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:40:02.002 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:40:02.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-11-12T23:40:02.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 39, 37), 7.47, 60.81, 0.0, 9.93, 15.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:40:02.630 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:39:37
2025-11-12T23:40:02.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:40:02.899 [DEBUG] [Thread-24823] [transport.py] [_log()] starting thread (client mode): 0x14946a70
2025-11-12T23:40:02.899 [DEBUG] [Thread-24823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:40:02.919 [DEBUG] [Thread-24823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:40:02.919 [INFO] [Thread-24823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:40:02.923 [DEBUG] [Thread-24823] [transport.py] [_log()] client lang: <none>
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] server lang: <none>
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] kex follows: False
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] Compression: none
2025-11-12T23:40:02.924 [DEBUG] [Thread-24823] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:40:02.939 [DEBUG] [Thread-24823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:40:02.939 [DEBUG] [Thread-24823] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:40:02.940 [DEBUG] [Thread-24823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:40:02.940 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:40:02.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:40:02.981 [DEBUG] [Thread-24823] [transport.py] [_log()] userauth is OK
2025-11-12T23:40:02.982 [DEBUG] [Thread-24823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:40:02.982 [DEBUG] [Thread-24823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:40:02.982 [DEBUG] [Thread-24823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:40:02.982 [DEBUG] [Thread-24823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:40:03.013 [INFO] [Thread-24823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:40:03.014 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:40:03.534 [DEBUG] [Thread-24825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:40:04.212 [DEBUG] [Thread-24823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:40:04.212 [DEBUG] [Thread-24823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:40:04.213 [DEBUG] [Thread-24823] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:40:04.253 [DEBUG] [Thread-24823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:40:04.253 [DEBUG] [Thread-24823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:40:04.256 [DEBUG] [Thread-24823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:40:04.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:40:04.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:40:04.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:40:04.272 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:40:04.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:40:04.286 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:40:04.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:40:04.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:40:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:40:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.902512 -999.00  +15.20   7.42     64   +8.60 1 1 1 1 1     0    0 5.35 -57.98 ZNESW 7.2 7.4 199.0 9.6 16.1 -21.9 16.0 -21.0 15.8 -20.9 16.0 -21.8
2025-11-12T23:40:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:40:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:40:04.287 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.902512
2025-11-12T23:40:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:40:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:40:04.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:40:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:40:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:40:04.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:39:37', tmtdew=7.47, humidity=60.81, cloud=0.0, wind=9.93, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:39:38', seeing=1.05, atlas_timestamp='2025-11-12T21:39:37.037', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:37:00')
2025-11-12T23:40:04.289 [DEBUG] [Thread-24823] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:40:04.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:40:04.384 [DEBUG] [Thread-24827] [transport.py] [_log()] starting thread (client mode): 0x17345930
2025-11-12T23:40:04.384 [DEBUG] [Thread-24827] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:40:04.401 [DEBUG] [Thread-24827] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:40:04.401 [INFO] [Thread-24827] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:40:04.408 [DEBUG] [Thread-24827] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:40:04.409 [DEBUG] [Thread-24827] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:40:04.409 [DEBUG] [Thread-24827] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:40:04.409 [DEBUG] [Thread-24827] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:40:04.409 [DEBUG] [Thread-24827] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:40:04.409 [DEBUG] [Thread-24827] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:40:04.409 [DEBUG] [Thread-24827] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:40:04.409 [DEBUG] [Thread-24827] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:40:04.409 [DEBUG] [Thread-24827] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:40:04.410 [DEBUG] [Thread-24827] [transport.py] [_log()] client lang: <none>
2025-11-12T23:40:04.410 [DEBUG] [Thread-24827] [transport.py] [_log()] server lang: <none>
2025-11-12T23:40:04.410 [DEBUG] [Thread-24827] [transport.py] [_log()] kex follows: False
2025-11-12T23:40:04.410 [DEBUG] [Thread-24827] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:40:04.410 [DEBUG] [Thread-24827] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:40:04.410 [DEBUG] [Thread-24827] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:40:04.410 [DEBUG] [Thread-24827] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:40:04.411 [DEBUG] [Thread-24827] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:40:04.411 [DEBUG] [Thread-24827] [transport.py] [_log()] Compression: none
2025-11-12T23:40:04.411 [DEBUG] [Thread-24827] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:40:04.472 [DEBUG] [Thread-24827] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:40:04.473 [DEBUG] [Thread-24827] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:40:04.473 [DEBUG] [Thread-24827] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:40:04.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:40:04.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:40:04.528 [DEBUG] [Thread-24827] [transport.py] [_log()] userauth is OK
2025-11-12T23:40:04.528 [DEBUG] [Thread-24827] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:40:04.528 [DEBUG] [Thread-24827] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:40:04.529 [DEBUG] [Thread-24827] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:40:04.529 [DEBUG] [Thread-24827] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:40:04.549 [INFO] [Thread-24827] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:40:04.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:40:04.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:40:05.430 [DEBUG] [Thread-24827] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:40:05.431 [DEBUG] [Thread-24827] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:40:05.478 [DEBUG] [Thread-24827] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:40:05.478 [DEBUG] [Thread-24827] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:40:05.487 [DEBUG] [Thread-24827] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:40:05.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:40:05.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:40:05.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:40:05.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:40:05.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:40:05.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:40:05.519 [DEBUG] [Thread-24827] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:40:09.747 [DEBUG] [Thread-24829 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:40:16.011 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:40:16.012 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:40:24.791 [DEBUG] [Thread-24830 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:40:35.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:40:35.542 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:40:35.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-11-12T23:40:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 40, 9), 7.45, 60.93, 0.0, 9.79, 15.16, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:40:36.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:40:09
2025-11-12T23:40:36.313 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:40:36.458 [DEBUG] [Thread-24831] [transport.py] [_log()] starting thread (client mode): 0x19ddb820
2025-11-12T23:40:36.459 [DEBUG] [Thread-24831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:40:36.479 [DEBUG] [Thread-24831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:40:36.479 [INFO] [Thread-24831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:40:36.480 [DEBUG] [Thread-24831] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:40:36.480 [DEBUG] [Thread-24831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] client lang: <none>
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] server lang: <none>
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] kex follows: False
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] Compression: none
2025-11-12T23:40:36.481 [DEBUG] [Thread-24831] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:40:36.495 [DEBUG] [Thread-24831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:40:36.495 [DEBUG] [Thread-24831] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:40:36.496 [DEBUG] [Thread-24831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:40:36.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:40:36.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:40:36.498 [DEBUG] [Thread-24831] [transport.py] [_log()] userauth is OK
2025-11-12T23:40:36.498 [DEBUG] [Thread-24831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:40:36.498 [DEBUG] [Thread-24831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:40:36.498 [DEBUG] [Thread-24831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:40:36.498 [DEBUG] [Thread-24831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:40:36.517 [INFO] [Thread-24831] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:40:36.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:40:37.116 [DEBUG] [Thread-24831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:40:37.116 [DEBUG] [Thread-24831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:40:37.116 [DEBUG] [Thread-24831] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:40:37.156 [DEBUG] [Thread-24831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:40:37.157 [DEBUG] [Thread-24831] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:40:37.160 [DEBUG] [Thread-24831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:40:37.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:40:37.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:40:37.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:40:37.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:40:37.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:40:37.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:40:37.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:40:37.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:40:37.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:40:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.902870 -999.00  +15.20   7.92     64   +8.60 1 1 1 1 1     0    0 5.35 -51.56 ZNESW 7.5 7.9 204.8 10.3 16.1 -22.0 15.9 -21.0 15.8 -21.0 16.0 -21.6
2025-11-12T23:40:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:40:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:40:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.902870
2025-11-12T23:40:37.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:40:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:40:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:40:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:40:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:40:37.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:40:09', tmtdew=7.45, humidity=60.93, cloud=0.0, wind=9.79, temperature=15.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:40:10', seeing=1.05, atlas_timestamp='2025-11-12T21:40:07.968', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:37:00')
2025-11-12T23:40:37.186 [DEBUG] [Thread-24831] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:40:37.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:40:37.285 [DEBUG] [Thread-24834] [transport.py] [_log()] starting thread (client mode): 0x1739bd90
2025-11-12T23:40:37.285 [DEBUG] [Thread-24834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:40:37.299 [DEBUG] [Thread-24834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:40:37.300 [INFO] [Thread-24834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:40:37.307 [DEBUG] [Thread-24834] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:40:37.307 [DEBUG] [Thread-24834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:40:37.307 [DEBUG] [Thread-24834] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:40:37.307 [DEBUG] [Thread-24834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:40:37.307 [DEBUG] [Thread-24834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:40:37.307 [DEBUG] [Thread-24834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:40:37.307 [DEBUG] [Thread-24834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] client lang: <none>
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] server lang: <none>
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] kex follows: False
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] Compression: none
2025-11-12T23:40:37.308 [DEBUG] [Thread-24834] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:40:37.369 [DEBUG] [Thread-24834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:40:37.369 [DEBUG] [Thread-24834] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:40:37.370 [DEBUG] [Thread-24834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:40:37.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:40:37.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:40:37.425 [DEBUG] [Thread-24834] [transport.py] [_log()] userauth is OK
2025-11-12T23:40:37.425 [DEBUG] [Thread-24834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:40:37.425 [DEBUG] [Thread-24834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:40:37.425 [DEBUG] [Thread-24834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:40:37.426 [DEBUG] [Thread-24834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:40:37.444 [INFO] [Thread-24834] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:40:37.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:40:37.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:40:38.270 [DEBUG] [Thread-24834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:40:38.271 [DEBUG] [Thread-24834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:40:38.319 [DEBUG] [Thread-24834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:40:38.319 [DEBUG] [Thread-24834] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:40:38.328 [DEBUG] [Thread-24834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:40:38.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:40:38.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-11-12T23:40:38.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-11-12T23:40:38.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:40:38.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:40:38.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:40:38.364 [DEBUG] [Thread-24834] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:40:39.831 [DEBUG] [Thread-24836 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:40:54.884 [DEBUG] [Thread-24837 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:41:03.597 [DEBUG] [Thread-24838 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:41:08.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:41:08.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:41:08.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-11-12T23:41:09.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 40, 41), 7.46, 60.89, 0.0, 9.51, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:41:09.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:40:41
2025-11-12T23:41:09.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:41:09.291 [DEBUG] [Thread-24839] [transport.py] [_log()] starting thread (client mode): 0x19ddb850
2025-11-12T23:41:09.291 [DEBUG] [Thread-24839] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:41:09.311 [DEBUG] [Thread-24839] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:41:09.311 [INFO] [Thread-24839] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:41:09.315 [DEBUG] [Thread-24839] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] client lang: <none>
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] server lang: <none>
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] kex follows: False
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] Compression: none
2025-11-12T23:41:09.316 [DEBUG] [Thread-24839] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:41:09.335 [DEBUG] [Thread-24839] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:41:09.336 [DEBUG] [Thread-24839] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:41:09.337 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:41:09.337 [DEBUG] [Thread-24839] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:41:09.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:41:09.340 [DEBUG] [Thread-24839] [transport.py] [_log()] userauth is OK
2025-11-12T23:41:09.340 [DEBUG] [Thread-24839] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:41:09.340 [DEBUG] [Thread-24839] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:41:09.340 [DEBUG] [Thread-24839] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:41:09.340 [DEBUG] [Thread-24839] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:41:09.357 [INFO] [Thread-24839] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:41:09.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:41:09.921 [DEBUG] [Thread-24841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:41:09.957 [DEBUG] [Thread-24839] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:41:09.957 [DEBUG] [Thread-24839] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:41:09.958 [DEBUG] [Thread-24839] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:41:09.999 [DEBUG] [Thread-24839] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:41:09.999 [DEBUG] [Thread-24839] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:41:10.002 [DEBUG] [Thread-24839] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:41:10.014 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:41:10.015 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:41:10.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:41:10.018 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:41:10.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:41:10.025 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:41:10.025 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:41:10.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:41:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:41:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.903206 -999.00  +15.20   5.09     64   +8.50 1 1 1 1 1     0    0 5.59 -46.88 ZNESW 6.2 5.1 207.5 8.9 16.1 -22.0 15.9 -21.1 15.8 -20.9 16.0 -21.8
2025-11-12T23:41:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:41:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:41:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.903206
2025-11-12T23:41:10.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:41:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:41:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:41:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:41:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:41:10.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:40:41', tmtdew=7.46, humidity=60.89, cloud=0.0, wind=9.51, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:40:42', seeing=0.9, atlas_timestamp='2025-11-12T21:40:36.998', atlas_cloud=1, atlas_rain=1, zp_data=[0.7462499999999999, 0.6102500000000006, 0.6267500000000004, 0.6574999999999989, 0.5484999999999998, 0.5397500000000006, 0.7939999999999996, 0.7542500000000008, 0.8074999999999992, 0.6074999999999999, 0.46924999999999883, 0.5309999999999997, 0.5184999999999995, 0.5527499999999996, 0.5849999999999991, 0.6499999999999995, 0.7847499999999998, 0.5830000000000002, 0.6359999999999992, 0.4652499999999993, 0.6579999999999986, 0.4207499999999982, 0.8182500000000008, 0.8617499999999998, 0.8844999999999992, 0.7360000000000015, 0.5572499999999998, 0.5335000000000001, 0.5679999999999996, 0.6320000000000006, 1.0340000000000007, 1.1870000000000012, 1.0177499999999995], zp_timestamp='2025-11-12T21:37:00')
2025-11-12T23:41:10.027 [DEBUG] [Thread-24839] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:41:10.110 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:41:10.123 [DEBUG] [Thread-24843] [transport.py] [_log()] starting thread (client mode): 0x19dda530
2025-11-12T23:41:10.123 [DEBUG] [Thread-24843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:41:10.138 [DEBUG] [Thread-24843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:41:10.139 [INFO] [Thread-24843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:41:10.146 [DEBUG] [Thread-24843] [transport.py] [_log()] client lang: <none>
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] server lang: <none>
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] kex follows: False
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] Compression: none
2025-11-12T23:41:10.147 [DEBUG] [Thread-24843] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:41:10.205 [DEBUG] [Thread-24843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:41:10.205 [DEBUG] [Thread-24843] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:41:10.206 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:41:10.206 [DEBUG] [Thread-24843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:41:10.207 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:41:10.261 [DEBUG] [Thread-24843] [transport.py] [_log()] userauth is OK
2025-11-12T23:41:10.261 [DEBUG] [Thread-24843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:41:10.261 [DEBUG] [Thread-24843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:41:10.261 [DEBUG] [Thread-24843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:41:10.262 [DEBUG] [Thread-24843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:41:10.280 [INFO] [Thread-24843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:41:10.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:41:10.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:41:11.116 [DEBUG] [Thread-24843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:41:11.116 [DEBUG] [Thread-24843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:41:11.164 [DEBUG] [Thread-24843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:41:11.165 [DEBUG] [Thread-24843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:41:11.174 [DEBUG] [Thread-24843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:41:11.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:41:11.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-11-12T23:41: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') -> 00000000
2025-11-12T23:41:11.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:41:11.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:41:11.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:41:11.210 [DEBUG] [Thread-24843] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:41:16.216 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:41:16.217 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:41:24.961 [DEBUG] [Thread-24845 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:41:40.012 [DEBUG] [Thread-24846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:41:41.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:41:41.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:41:41.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-11-12T23:41:41.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 41, 13), 7.44, 60.94, 0.0, 9.53, 15.11, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:41:41.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:41:13
2025-11-12T23:41:41.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:41:42.141 [DEBUG] [Thread-24847] [transport.py] [_log()] starting thread (client mode): 0x19dd9660
2025-11-12T23:41:42.141 [DEBUG] [Thread-24847] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:41:42.161 [DEBUG] [Thread-24847] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:41:42.161 [INFO] [Thread-24847] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:41:42.164 [DEBUG] [Thread-24847] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:41:42.164 [DEBUG] [Thread-24847] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:41:42.164 [DEBUG] [Thread-24847] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:41:42.164 [DEBUG] [Thread-24847] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:41:42.164 [DEBUG] [Thread-24847] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:41:42.164 [DEBUG] [Thread-24847] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] client lang: <none>
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] server lang: <none>
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] kex follows: False
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] Compression: none
2025-11-12T23:41:42.165 [DEBUG] [Thread-24847] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:41:42.181 [DEBUG] [Thread-24847] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:41:42.182 [DEBUG] [Thread-24847] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:41:42.182 [DEBUG] [Thread-24847] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:41:42.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:41:42.183 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:41:42.184 [DEBUG] [Thread-24847] [transport.py] [_log()] userauth is OK
2025-11-12T23:41:42.184 [DEBUG] [Thread-24847] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:41:42.184 [DEBUG] [Thread-24847] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:41:42.184 [DEBUG] [Thread-24847] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:41:42.184 [DEBUG] [Thread-24847] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:41:42.214 [INFO] [Thread-24847] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:41:42.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:41:42.866 [DEBUG] [Thread-24847] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:41:42.867 [DEBUG] [Thread-24847] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:41:42.876 [DEBUG] [Thread-24847] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:41:42.908 [DEBUG] [Thread-24847] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:41:42.908 [DEBUG] [Thread-24847] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:41:42.911 [DEBUG] [Thread-24847] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:41:42.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:41:42.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:41:42.925 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:41:42.927 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:41:42.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:41:42.934 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:41:42.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:41:42.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:41:42.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:41:42.935 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.903553 -999.00  +15.20   6.39     64   +8.60 1 1 1 1 1     0    0 5.60 -43.82 ZNESW 7.5 6.4 188.2 9.2 16.1 -22.0 15.9 -21.4 15.7 -21.0 16.0 -21.6
2025-11-12T23:41:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:41:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:41:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.903553
2025-11-12T23:41:42.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:41:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:41:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:41:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:41:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:41:42.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:41:13', tmtdew=7.44, humidity=60.94, cloud=0.0, wind=9.53, temperature=15.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:41:14', seeing=0.9, atlas_timestamp='2025-11-12T21:41:06.979', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:40:00')
2025-11-12T23:41:42.937 [DEBUG] [Thread-24847] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:41:43.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:41:43.036 [DEBUG] [Thread-24850] [transport.py] [_log()] starting thread (client mode): 0x14922230
2025-11-12T23:41:43.036 [DEBUG] [Thread-24850] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:41:43.057 [DEBUG] [Thread-24850] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:41:43.057 [INFO] [Thread-24850] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:41:43.064 [DEBUG] [Thread-24850] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] client lang: <none>
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] server lang: <none>
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] kex follows: False
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:41:43.065 [DEBUG] [Thread-24850] [transport.py] [_log()] Compression: none
2025-11-12T23:41:43.066 [DEBUG] [Thread-24850] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:41:43.125 [DEBUG] [Thread-24850] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:41:43.126 [DEBUG] [Thread-24850] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:41:43.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:41:43.127 [DEBUG] [Thread-24850] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:41:43.128 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:41:43.191 [DEBUG] [Thread-24850] [transport.py] [_log()] userauth is OK
2025-11-12T23:41:43.192 [DEBUG] [Thread-24850] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:41:43.192 [DEBUG] [Thread-24850] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:41:43.192 [DEBUG] [Thread-24850] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:41:43.192 [DEBUG] [Thread-24850] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:41:43.214 [INFO] [Thread-24850] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:41:43.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:41:43.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:41:44.079 [DEBUG] [Thread-24850] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:41:44.079 [DEBUG] [Thread-24850] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:41:44.130 [DEBUG] [Thread-24850] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:41:44.130 [DEBUG] [Thread-24850] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:41:44.141 [DEBUG] [Thread-24850] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:41:44.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:41:44.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-11-12T23:41: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') -> 00000000
2025-11-12T23:41:44.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:41:44.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:41:44.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:41:44.187 [DEBUG] [Thread-24850] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:41:55.045 [DEBUG] [Thread-24852 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:42:03.655 [DEBUG] [Thread-24853 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:42:10.110 [DEBUG] [Thread-24854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:42:14.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:42:14.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:42:14.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-11-12T23:42:14.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 41, 45), 7.42, 61.01, 0.0, 9.21, 15.01, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:42:14.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:41:45
2025-11-12T23:42:15.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:42:15.164 [DEBUG] [Thread-24855] [transport.py] [_log()] starting thread (client mode): 0x149230d0
2025-11-12T23:42:15.164 [DEBUG] [Thread-24855] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:42:15.184 [DEBUG] [Thread-24855] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:42:15.184 [INFO] [Thread-24855] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] client lang: <none>
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] server lang: <none>
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] kex follows: False
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:42:15.187 [DEBUG] [Thread-24855] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:42:15.188 [DEBUG] [Thread-24855] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:42:15.188 [DEBUG] [Thread-24855] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:42:15.188 [DEBUG] [Thread-24855] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:42:15.188 [DEBUG] [Thread-24855] [transport.py] [_log()] Compression: none
2025-11-12T23:42:15.188 [DEBUG] [Thread-24855] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:42:15.202 [DEBUG] [Thread-24855] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:42:15.202 [DEBUG] [Thread-24855] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:42:15.202 [DEBUG] [Thread-24855] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:42:15.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:42:15.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:42:15.203 [DEBUG] [Thread-24855] [transport.py] [_log()] userauth is OK
2025-11-12T23:42:15.203 [DEBUG] [Thread-24855] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:42:15.203 [DEBUG] [Thread-24855] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:42:15.203 [DEBUG] [Thread-24855] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:42:15.203 [DEBUG] [Thread-24855] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:42:15.212 [INFO] [Thread-24855] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:42:15.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:42:15.837 [DEBUG] [Thread-24855] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:42:15.838 [DEBUG] [Thread-24855] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:42:15.838 [DEBUG] [Thread-24855] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:42:15.879 [DEBUG] [Thread-24855] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:42:15.879 [DEBUG] [Thread-24855] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:42:15.881 [DEBUG] [Thread-24855] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:42:15.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:42:15.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:42:15.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:42:15.894 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:42:15.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:42:15.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:42:15.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:42:15.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:42:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:42:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.904248 -999.00  +15.20   7.45     64   +8.60 1 1 1 1 1     0    0 5.75 -42.78 ZNESW 5.9 7.5 191.8 9.2 16.0 -21.9 15.9 -21.3 15.7 -20.9 16.0 -21.8
2025-11-12T23:42:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:42:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:42:15.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.904248
2025-11-12T23:42:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:42:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:42:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:42:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:42:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:42:15.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:41:45', tmtdew=7.42, humidity=61.01, cloud=0.0, wind=9.21, temperature=15.01, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:41:46', seeing=1.1, atlas_timestamp='2025-11-12T21:42:07.027', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:40:00')
2025-11-12T23:42:15.901 [DEBUG] [Thread-24855] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:42:15.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:42:15.986 [DEBUG] [Thread-24858] [transport.py] [_log()] starting thread (client mode): 0x173985e0
2025-11-12T23:42:15.986 [DEBUG] [Thread-24858] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:42:16.000 [DEBUG] [Thread-24858] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:42:16.001 [INFO] [Thread-24858] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] client lang: <none>
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] server lang: <none>
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] kex follows: False
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:42:16.008 [DEBUG] [Thread-24858] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:42:16.009 [DEBUG] [Thread-24858] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:42:16.009 [DEBUG] [Thread-24858] [transport.py] [_log()] Compression: none
2025-11-12T23:42:16.009 [DEBUG] [Thread-24858] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:42:16.063 [DEBUG] [Thread-24858] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:42:16.063 [DEBUG] [Thread-24858] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:42:16.063 [DEBUG] [Thread-24858] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:42:16.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:42:16.063 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:42:16.122 [DEBUG] [Thread-24858] [transport.py] [_log()] userauth is OK
2025-11-12T23:42:16.122 [DEBUG] [Thread-24858] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:42:16.122 [DEBUG] [Thread-24858] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:42:16.122 [DEBUG] [Thread-24858] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:42:16.122 [DEBUG] [Thread-24858] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:42:16.138 [INFO] [Thread-24858] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:42:16.139 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:42:16.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:42:16.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:42:16.420 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:42:16.961 [DEBUG] [Thread-24858] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:42:16.961 [DEBUG] [Thread-24858] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:42:17.009 [DEBUG] [Thread-24858] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:42:17.009 [DEBUG] [Thread-24858] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:42:17.017 [DEBUG] [Thread-24858] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:42:17.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:42:17.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-11-12T23:42:17.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-11-12T23:42:17.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:42:17.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:42:17.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:42:17.047 [DEBUG] [Thread-24858] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:42:25.143 [DEBUG] [Thread-24860 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:42:40.199 [DEBUG] [Thread-24861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:42:47.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:42:47.064 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:42: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-11-12T23:42:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 42, 17), 7.43, 60.99, 0.0, 9.42, 15.0, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:42:47.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:42:17
2025-11-12T23:42:47.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:42:47.973 [DEBUG] [Thread-24862] [transport.py] [_log()] starting thread (client mode): 0x1739bd90
2025-11-12T23:42:47.974 [DEBUG] [Thread-24862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:42:47.993 [DEBUG] [Thread-24862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:42:47.993 [INFO] [Thread-24862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] client lang: <none>
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] server lang: <none>
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] kex follows: False
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:42:47.995 [DEBUG] [Thread-24862] [transport.py] [_log()] Compression: none
2025-11-12T23:42:47.996 [DEBUG] [Thread-24862] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:42:48.009 [DEBUG] [Thread-24862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:42:48.010 [DEBUG] [Thread-24862] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:42:48.010 [DEBUG] [Thread-24862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:42:48.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:42:48.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:42:48.012 [DEBUG] [Thread-24862] [transport.py] [_log()] userauth is OK
2025-11-12T23:42:48.012 [DEBUG] [Thread-24862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:42:48.013 [DEBUG] [Thread-24862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:42:48.013 [DEBUG] [Thread-24862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:42:48.013 [DEBUG] [Thread-24862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:42:48.038 [INFO] [Thread-24862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:42:48.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:42:48.612 [DEBUG] [Thread-24862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:42:48.612 [DEBUG] [Thread-24862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:42:48.612 [DEBUG] [Thread-24862] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:42:48.652 [DEBUG] [Thread-24862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:42:48.652 [DEBUG] [Thread-24862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:42:48.656 [DEBUG] [Thread-24862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:42:48.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:42:48.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:42:48.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:42:48.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:42:48.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:42:48.678 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:42:48.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:42:48.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:42:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:42:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.904595 -999.00  +15.20   8.47     65   +8.70 1 1 1 1 1     0    0 5.66 -39.40 ZNESW 6.7 8.5 193.0 9.7 16.0 -21.9 15.9 -21.0 15.7 -20.9 15.9 -21.6
2025-11-12T23:42:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:42:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:42:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.904595
2025-11-12T23:42:48.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:42:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:42:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:42:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:42:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:42:48.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:42:17', tmtdew=7.43, humidity=60.99, cloud=0.0, wind=9.42, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:42:19', seeing=0.97, atlas_timestamp='2025-11-12T21:42:37.008', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:40:00')
2025-11-12T23:42:48.681 [DEBUG] [Thread-24862] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:42:48.767 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:42:48.779 [DEBUG] [Thread-24865] [transport.py] [_log()] starting thread (client mode): 0x19ddafb0
2025-11-12T23:42:48.780 [DEBUG] [Thread-24865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:42:48.794 [DEBUG] [Thread-24865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:42:48.794 [INFO] [Thread-24865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] client lang: <none>
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] server lang: <none>
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] kex follows: False
2025-11-12T23:42:48.802 [DEBUG] [Thread-24865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:42:48.803 [DEBUG] [Thread-24865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:42:48.803 [DEBUG] [Thread-24865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:42:48.803 [DEBUG] [Thread-24865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:42:48.803 [DEBUG] [Thread-24865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:42:48.803 [DEBUG] [Thread-24865] [transport.py] [_log()] Compression: none
2025-11-12T23:42:48.803 [DEBUG] [Thread-24865] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:42:48.860 [DEBUG] [Thread-24865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:42:48.861 [DEBUG] [Thread-24865] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:42:48.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:42:48.862 [DEBUG] [Thread-24865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:42:48.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:42:48.918 [DEBUG] [Thread-24865] [transport.py] [_log()] userauth is OK
2025-11-12T23:42:48.919 [DEBUG] [Thread-24865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:42:48.919 [DEBUG] [Thread-24865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:42:48.919 [DEBUG] [Thread-24865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:42:48.919 [DEBUG] [Thread-24865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:42:48.944 [INFO] [Thread-24865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:42:48.945 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:42:48.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:42:49.787 [DEBUG] [Thread-24865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:42:49.787 [DEBUG] [Thread-24865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:42:49.836 [DEBUG] [Thread-24865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:42:49.836 [DEBUG] [Thread-24865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:42:49.845 [DEBUG] [Thread-24865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:42:49.854 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:42:49.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-11-12T23:42:49.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-11-12T23:42:49.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:42:49.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:42:49.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:42:49.882 [DEBUG] [Thread-24865] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:42:55.231 [DEBUG] [Thread-24867 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:43:03.711 [DEBUG] [Thread-24868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:43:10.276 [DEBUG] [Thread-24869 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:43:16.623 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:43:16.624 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:43:19.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:43:19.905 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:43:19.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-11-12T23:43:20.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 42, 50), 7.4, 61.58, 0.0, 8.54, 14.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:43:20.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:42:50
2025-11-12T23:43:20.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:43:20.803 [DEBUG] [Thread-24870] [transport.py] [_log()] starting thread (client mode): 0x19ddb4f0
2025-11-12T23:43:20.803 [DEBUG] [Thread-24870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:43:20.824 [DEBUG] [Thread-24870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:43:20.824 [INFO] [Thread-24870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:43:20.825 [DEBUG] [Thread-24870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:43:20.825 [DEBUG] [Thread-24870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:43:20.825 [DEBUG] [Thread-24870] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:43:20.825 [DEBUG] [Thread-24870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:43:20.825 [DEBUG] [Thread-24870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:43:20.825 [DEBUG] [Thread-24870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:43:20.825 [DEBUG] [Thread-24870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] client lang: <none>
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] server lang: <none>
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] kex follows: False
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] Compression: none
2025-11-12T23:43:20.826 [DEBUG] [Thread-24870] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:43:20.835 [DEBUG] [Thread-24870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:43:20.835 [DEBUG] [Thread-24870] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:43:20.836 [DEBUG] [Thread-24870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:43:20.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:43:20.836 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:43:20.837 [DEBUG] [Thread-24870] [transport.py] [_log()] userauth is OK
2025-11-12T23:43:20.837 [DEBUG] [Thread-24870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:43:20.837 [DEBUG] [Thread-24870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:43:20.838 [DEBUG] [Thread-24870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:43:20.838 [DEBUG] [Thread-24870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:43:20.861 [INFO] [Thread-24870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:43:20.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:43:21.441 [DEBUG] [Thread-24870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:43:21.441 [DEBUG] [Thread-24870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:43:21.442 [DEBUG] [Thread-24870] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:43:21.482 [DEBUG] [Thread-24870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:43:21.483 [DEBUG] [Thread-24870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:43:21.485 [DEBUG] [Thread-24870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:43:21.491 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:43:21.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:43:21.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:43:21.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:43:21.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:43:21.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:43:21.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:43:21.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:43:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:43:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.904942 -999.00  +15.20   6.53     64   +8.60 1 1 1 1 1     0    0 5.72 -37.93 ZNESW 6.1 6.5 185.0 8.0 16.1 -22.0 15.9 -21.2 15.7 -21.1 16.0 -21.9
2025-11-12T23:43:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:43:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:43:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.904942
2025-11-12T23:43:21.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:43:21.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:43:21.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:43:21.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:43:21.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:43:21.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:42:50', tmtdew=7.4, humidity=61.58, cloud=0.0, wind=8.54, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:42:51', seeing=0.97, atlas_timestamp='2025-11-12T21:43:06.989', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:40:00')
2025-11-12T23:43:21.504 [DEBUG] [Thread-24870] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:43:21.586 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:43:21.600 [DEBUG] [Thread-24873] [transport.py] [_log()] starting thread (client mode): 0x149467a0
2025-11-12T23:43:21.600 [DEBUG] [Thread-24873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:43:21.614 [DEBUG] [Thread-24873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:43:21.614 [INFO] [Thread-24873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:43:21.622 [DEBUG] [Thread-24873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] client lang: <none>
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] server lang: <none>
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] kex follows: False
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] Compression: none
2025-11-12T23:43:21.623 [DEBUG] [Thread-24873] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:43:21.680 [DEBUG] [Thread-24873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:43:21.680 [DEBUG] [Thread-24873] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:43:21.681 [DEBUG] [Thread-24873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:43:21.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:43:21.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:43:21.740 [DEBUG] [Thread-24873] [transport.py] [_log()] userauth is OK
2025-11-12T23:43:21.740 [DEBUG] [Thread-24873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:43:21.740 [DEBUG] [Thread-24873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:43:21.740 [DEBUG] [Thread-24873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:43:21.740 [DEBUG] [Thread-24873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:43:21.760 [INFO] [Thread-24873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:43:21.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:43:21.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:43:22.593 [DEBUG] [Thread-24873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:43:22.593 [DEBUG] [Thread-24873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:43:22.641 [DEBUG] [Thread-24873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:43:22.641 [DEBUG] [Thread-24873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:43:22.650 [DEBUG] [Thread-24873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:43:22.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:43:22.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-11-12T23:43:22.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:43:22.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:43:22.678 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:43:22.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:43:22.686 [DEBUG] [Thread-24873] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:43:25.310 [DEBUG] [Thread-24875 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:43:40.347 [DEBUG] [Thread-24876 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:43:52.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:43:52.709 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:43:52.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-11-12T23:43:53.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 43, 22), 7.37, 61.72, 0.0, 8.74, 14.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:43:53.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:43:22
2025-11-12T23:43:53.468 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:43:53.612 [DEBUG] [Thread-24877] [transport.py] [_log()] starting thread (client mode): 0x149823e0
2025-11-12T23:43:53.612 [DEBUG] [Thread-24877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:43:53.632 [DEBUG] [Thread-24877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:43:53.633 [INFO] [Thread-24877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] client lang: <none>
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] server lang: <none>
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] kex follows: False
2025-11-12T23:43:53.634 [DEBUG] [Thread-24877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:43:53.635 [DEBUG] [Thread-24877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:43:53.635 [DEBUG] [Thread-24877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:43:53.635 [DEBUG] [Thread-24877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:43:53.635 [DEBUG] [Thread-24877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:43:53.635 [DEBUG] [Thread-24877] [transport.py] [_log()] Compression: none
2025-11-12T23:43:53.635 [DEBUG] [Thread-24877] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:43:53.654 [DEBUG] [Thread-24877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:43:53.655 [DEBUG] [Thread-24877] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:43:53.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:43:53.656 [DEBUG] [Thread-24877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:43:53.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:43:53.657 [DEBUG] [Thread-24877] [transport.py] [_log()] userauth is OK
2025-11-12T23:43:53.657 [DEBUG] [Thread-24877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:43:53.658 [DEBUG] [Thread-24877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:43:53.658 [DEBUG] [Thread-24877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:43:53.658 [DEBUG] [Thread-24877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:43:53.682 [INFO] [Thread-24877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:43:53.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:43:54.410 [DEBUG] [Thread-24877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:43:54.410 [DEBUG] [Thread-24877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:43:54.410 [DEBUG] [Thread-24877] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:43:54.451 [DEBUG] [Thread-24877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:43:54.451 [DEBUG] [Thread-24877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:43:54.454 [DEBUG] [Thread-24877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:43:54.467 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:43:54.468 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:43:54.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:43:54.471 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:43:54.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:43:54.480 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:43:54.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:43:54.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:43:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:43:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.904942 -999.00  +15.20   6.53     64   +8.60 1 1 1 1 1     0    0 5.72 -37.93 ZNESW 6.1 6.5 185.0 8.0 16.1 -22.0 15.9 -21.2 15.7 -21.1 16.0 -21.9
2025-11-12T23:43:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:43:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:43:54.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.904942
2025-11-12T23:43:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:43:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:43:54.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:43:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:43:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:43:54.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:43:22', tmtdew=7.37, humidity=61.72, cloud=0.0, wind=8.74, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:43:23', seeing=1.06, atlas_timestamp='2025-11-12T21:43:06.989', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:40:00')
2025-11-12T23:43:54.485 [DEBUG] [Thread-24877] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:43:54.566 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:43:54.579 [DEBUG] [Thread-24880] [transport.py] [_log()] starting thread (client mode): 0x14980370
2025-11-12T23:43:54.579 [DEBUG] [Thread-24880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:43:54.594 [DEBUG] [Thread-24880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:43:54.594 [INFO] [Thread-24880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:43:54.601 [DEBUG] [Thread-24880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] client lang: <none>
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] server lang: <none>
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] kex follows: False
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] Compression: none
2025-11-12T23:43:54.602 [DEBUG] [Thread-24880] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:43:54.660 [DEBUG] [Thread-24880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:43:54.661 [DEBUG] [Thread-24880] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:43:54.661 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:43:54.662 [DEBUG] [Thread-24880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:43:54.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:43:54.716 [DEBUG] [Thread-24880] [transport.py] [_log()] userauth is OK
2025-11-12T23:43:54.717 [DEBUG] [Thread-24880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:43:54.717 [DEBUG] [Thread-24880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:43:54.717 [DEBUG] [Thread-24880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:43:54.717 [DEBUG] [Thread-24880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:43:54.736 [INFO] [Thread-24880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:43:54.736 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:43:54.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:43:55.385 [DEBUG] [Thread-24882 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:43:55.568 [DEBUG] [Thread-24880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:43:55.568 [DEBUG] [Thread-24880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:43:55.616 [DEBUG] [Thread-24880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:43:55.616 [DEBUG] [Thread-24880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:43:55.624 [DEBUG] [Thread-24880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:43:55.632 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:43:55.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-11-12T23:43:55.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-11-12T23:43:55.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:43:55.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:43:55.648 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:43:55.656 [DEBUG] [Thread-24880] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:44:03.779 [DEBUG] [Thread-24883 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:44:10.428 [DEBUG] [Thread-24884 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:44:16.836 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:44:16.837 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:44:25.459 [DEBUG] [Thread-24885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:44:25.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:44:25.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:44:25.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-11-12T23:44:26.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 43, 54), 7.33, 61.67, 0.0, 8.56, 14.96, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:44:26.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:43:54
2025-11-12T23:44:26.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:44:26.583 [DEBUG] [Thread-24886] [transport.py] [_log()] starting thread (client mode): 0x14914bb0
2025-11-12T23:44:26.584 [DEBUG] [Thread-24886] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:44:26.604 [DEBUG] [Thread-24886] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:44:26.604 [INFO] [Thread-24886] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:44:26.607 [DEBUG] [Thread-24886] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:44:26.607 [DEBUG] [Thread-24886] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:44:26.607 [DEBUG] [Thread-24886] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:44:26.607 [DEBUG] [Thread-24886] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:44:26.607 [DEBUG] [Thread-24886] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:44:26.607 [DEBUG] [Thread-24886] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] client lang: <none>
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] server lang: <none>
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] kex follows: False
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] Compression: none
2025-11-12T23:44:26.608 [DEBUG] [Thread-24886] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:44:26.627 [DEBUG] [Thread-24886] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:44:26.628 [DEBUG] [Thread-24886] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:44:26.628 [DEBUG] [Thread-24886] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:44:26.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:44:26.629 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:44:26.669 [DEBUG] [Thread-24886] [transport.py] [_log()] userauth is OK
2025-11-12T23:44:26.669 [DEBUG] [Thread-24886] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:44:26.670 [DEBUG] [Thread-24886] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:44:26.670 [DEBUG] [Thread-24886] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:44:26.670 [DEBUG] [Thread-24886] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:44:26.690 [INFO] [Thread-24886] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:44:26.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:44:27.323 [DEBUG] [Thread-24886] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:44:27.323 [DEBUG] [Thread-24886] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:44:27.324 [DEBUG] [Thread-24886] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:44:27.365 [DEBUG] [Thread-24886] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:44:27.365 [DEBUG] [Thread-24886] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:44:27.368 [DEBUG] [Thread-24886] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:44:27.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:44:27.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:44:27.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:44:27.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:44:27.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:44:27.386 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:44:27.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:44:27.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:44:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:44:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.905289 -999.00  +15.20   6.19     65   +8.60 1 1 1 1 1     0    0 5.82 -35.83 ZNESW 5.9 6.2 193.4 7.2 16.0 -21.9 15.9 -21.2 15.7 -21.0 15.9 -21.8
2025-11-12T23:44:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:44:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:44:27.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.905289
2025-11-12T23:44:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:44:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:44:27.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:44:27.388 [DEBUG] [Thread-24886] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:44:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:44:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:44:27.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:43:54', tmtdew=7.33, humidity=61.67, cloud=0.0, wind=8.56, temperature=14.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:43:55', seeing=1.13, atlas_timestamp='2025-11-12T21:43:36.970', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:40:00')
2025-11-12T23:44:27.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:44:27.485 [DEBUG] [Thread-24889] [transport.py] [_log()] starting thread (client mode): 0x19dd9a50
2025-11-12T23:44:27.485 [DEBUG] [Thread-24889] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:44:27.500 [DEBUG] [Thread-24889] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:44:27.500 [INFO] [Thread-24889] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] client lang: <none>
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] server lang: <none>
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] kex follows: False
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:44:27.507 [DEBUG] [Thread-24889] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:44:27.508 [DEBUG] [Thread-24889] [transport.py] [_log()] Compression: none
2025-11-12T23:44:27.508 [DEBUG] [Thread-24889] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:44:27.563 [DEBUG] [Thread-24889] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:44:27.563 [DEBUG] [Thread-24889] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:44:27.563 [DEBUG] [Thread-24889] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:44:27.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:44:27.563 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:44:27.621 [DEBUG] [Thread-24889] [transport.py] [_log()] userauth is OK
2025-11-12T23:44:27.621 [DEBUG] [Thread-24889] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:44:27.621 [DEBUG] [Thread-24889] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:44:27.621 [DEBUG] [Thread-24889] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:44:27.621 [DEBUG] [Thread-24889] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:44:27.634 [INFO] [Thread-24889] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:44:27.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:44:27.635 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:44:28.434 [DEBUG] [Thread-24889] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:44:28.434 [DEBUG] [Thread-24889] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:44:28.484 [DEBUG] [Thread-24889] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:44:28.484 [DEBUG] [Thread-24889] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:44:28.492 [DEBUG] [Thread-24889] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:44:28.503 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:44:28.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-11-12T23:44:28.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-11-12T23:44:28.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:44:28.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:44:28.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:44:28.528 [DEBUG] [Thread-24889] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:44:40.497 [DEBUG] [Thread-24891 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:44:55.547 [DEBUG] [Thread-24892 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:44:58.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:44:58.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:44:58.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-11-12T23:44:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 44, 26), 7.31, 61.77, 0.0, 8.21, 14.93, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:44:59.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:44:26
2025-11-12T23:44:59.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:44:59.458 [DEBUG] [Thread-24893] [transport.py] [_log()] starting thread (client mode): 0x14981120
2025-11-12T23:44:59.458 [DEBUG] [Thread-24893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:44:59.478 [DEBUG] [Thread-24893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:44:59.478 [INFO] [Thread-24893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] client lang: <none>
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] server lang: <none>
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] kex follows: False
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] Compression: none
2025-11-12T23:44:59.481 [DEBUG] [Thread-24893] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:44:59.499 [DEBUG] [Thread-24893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:44:59.499 [DEBUG] [Thread-24893] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:44:59.499 [DEBUG] [Thread-24893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:44:59.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:44:59.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:44:59.500 [DEBUG] [Thread-24893] [transport.py] [_log()] userauth is OK
2025-11-12T23:44:59.500 [DEBUG] [Thread-24893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:44:59.500 [DEBUG] [Thread-24893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:44:59.500 [DEBUG] [Thread-24893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:44:59.500 [DEBUG] [Thread-24893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:44:59.509 [INFO] [Thread-24893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:44:59.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:45:00.220 [DEBUG] [Thread-24893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:45:00.220 [DEBUG] [Thread-24893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:45:00.220 [DEBUG] [Thread-24893] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:45:00.261 [DEBUG] [Thread-24893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:45:00.261 [DEBUG] [Thread-24893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:45:00.263 [DEBUG] [Thread-24893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:45:00.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:45:00.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:45:00.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:45:00.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:45:00.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:45:00.278 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:45:00.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:45:00.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:45:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:45:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.905637 -999.00  +15.20   5.34     64   +8.60 1 1 1 1 1     0    0 5.79 -36.60 ZNESW 6.1 5.3 194.2 6.8 16.0 -22.1 15.8 -21.5 15.7 -21.1 16.0 -21.9
2025-11-12T23:45:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:45:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:45:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.905637
2025-11-12T23:45:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:45:00.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:45:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:45:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:45:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:45:00.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:44:26', tmtdew=7.31, humidity=61.77, cloud=0.0, wind=8.21, temperature=14.93, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:44:27', seeing=1.13, atlas_timestamp='2025-11-12T21:44:07.037', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:42:00')
2025-11-12T23:45:00.279 [DEBUG] [Thread-24893] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:45:00.353 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:45:00.364 [DEBUG] [Thread-24896] [transport.py] [_log()] starting thread (client mode): 0x14983c40
2025-11-12T23:45:00.365 [DEBUG] [Thread-24896] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:45:00.379 [DEBUG] [Thread-24896] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:45:00.379 [INFO] [Thread-24896] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] client lang: <none>
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] server lang: <none>
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] kex follows: False
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] Compression: none
2025-11-12T23:45:00.387 [DEBUG] [Thread-24896] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:45:00.443 [DEBUG] [Thread-24896] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:45:00.443 [DEBUG] [Thread-24896] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:45:00.443 [DEBUG] [Thread-24896] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:45:00.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:45:00.444 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:45:00.500 [DEBUG] [Thread-24896] [transport.py] [_log()] userauth is OK
2025-11-12T23:45:00.500 [DEBUG] [Thread-24896] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:45:00.500 [DEBUG] [Thread-24896] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:45:00.500 [DEBUG] [Thread-24896] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:45:00.500 [DEBUG] [Thread-24896] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:45:00.516 [INFO] [Thread-24896] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:45:00.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:45:00.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:45:01.320 [DEBUG] [Thread-24896] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:45:01.321 [DEBUG] [Thread-24896] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:45:01.368 [DEBUG] [Thread-24896] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:45:01.369 [DEBUG] [Thread-24896] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:45:01.377 [DEBUG] [Thread-24896] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:45:01.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:45:01.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-11-12T23:45: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-11-12T23:45:01.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:45:01.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:45:01.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:45:01.409 [DEBUG] [Thread-24896] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:45:03.839 [DEBUG] [Thread-24898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:45:10.584 [DEBUG] [Thread-24899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:45:17.040 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:45:17.041 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:45:25.637 [DEBUG] [Thread-24900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:45:31.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:45:31.403 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:45:31.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-11-12T23:45:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 44, 58), 7.31, 61.76, 0.0, 8.45, 14.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:45:32.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:44:58
2025-11-12T23:45:32.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:45:32.400 [DEBUG] [Thread-24901] [transport.py] [_log()] starting thread (client mode): 0x1739afe0
2025-11-12T23:45:32.401 [DEBUG] [Thread-24901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:45:32.421 [DEBUG] [Thread-24901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:45:32.421 [INFO] [Thread-24901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] client lang: <none>
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] server lang: <none>
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] kex follows: False
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] Compression: none
2025-11-12T23:45:32.424 [DEBUG] [Thread-24901] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:45:32.439 [DEBUG] [Thread-24901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:45:32.439 [DEBUG] [Thread-24901] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:45:32.440 [DEBUG] [Thread-24901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:45:32.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:45:32.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:45:32.441 [DEBUG] [Thread-24901] [transport.py] [_log()] userauth is OK
2025-11-12T23:45:32.441 [DEBUG] [Thread-24901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:45:32.441 [DEBUG] [Thread-24901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:45:32.441 [DEBUG] [Thread-24901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:45:32.441 [DEBUG] [Thread-24901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:45:32.454 [INFO] [Thread-24901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:45:32.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:45:33.051 [DEBUG] [Thread-24901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:45:33.051 [DEBUG] [Thread-24901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:45:33.051 [DEBUG] [Thread-24901] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:45:33.092 [DEBUG] [Thread-24901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:45:33.092 [DEBUG] [Thread-24901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:45:33.095 [DEBUG] [Thread-24901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:45:33.105 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:45:33.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:45:33.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:45:33.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:45:33.110 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:45:33.111 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:45:33.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:45:33.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:45:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:45:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.905984 -999.00  +15.20   6.62     65   +8.70 1 1 1 1 1     0    0 5.81 -35.85 ZNESW 5.6 6.6 186.4 8.5 16.0 -22.1 15.8 -21.2 15.7 -21.2 15.9 -21.9
2025-11-12T23:45:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:45:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:45:33.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.905984
2025-11-12T23:45:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:45:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:45:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:45:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:45:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:45:33.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:44:58', tmtdew=7.31, humidity=61.76, cloud=0.0, wind=8.45, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:45:31', seeing=1.13, atlas_timestamp='2025-11-12T21:44:37.018', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:42:00')
2025-11-12T23:45:33.113 [DEBUG] [Thread-24901] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:45:33.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:45:33.216 [DEBUG] [Thread-24904] [transport.py] [_log()] starting thread (client mode): 0x14945fc0
2025-11-12T23:45:33.216 [DEBUG] [Thread-24904] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:45:33.231 [DEBUG] [Thread-24904] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:45:33.231 [INFO] [Thread-24904] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:45:33.238 [DEBUG] [Thread-24904] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] client lang: <none>
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] server lang: <none>
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] kex follows: False
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] Compression: none
2025-11-12T23:45:33.239 [DEBUG] [Thread-24904] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:45:33.294 [DEBUG] [Thread-24904] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:45:33.294 [DEBUG] [Thread-24904] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:45:33.295 [DEBUG] [Thread-24904] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:45:33.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:45:33.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:45:33.352 [DEBUG] [Thread-24904] [transport.py] [_log()] userauth is OK
2025-11-12T23:45:33.352 [DEBUG] [Thread-24904] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:45:33.352 [DEBUG] [Thread-24904] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:45:33.353 [DEBUG] [Thread-24904] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:45:33.353 [DEBUG] [Thread-24904] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:45:33.375 [INFO] [Thread-24904] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:45:33.375 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:45:33.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:45:34.239 [DEBUG] [Thread-24904] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:45:34.240 [DEBUG] [Thread-24904] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:45:34.288 [DEBUG] [Thread-24904] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:45:34.288 [DEBUG] [Thread-24904] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:45:34.297 [DEBUG] [Thread-24904] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:45:34.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:45:34.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-11-12T23:45:34.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-11-12T23:45:34.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:45:34.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:45:34.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:45:34.334 [DEBUG] [Thread-24904] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:45:40.675 [DEBUG] [Thread-24906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:45:55.739 [DEBUG] [Thread-24907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:46:03.891 [DEBUG] [Thread-24908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:46:04.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:46:04.355 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:46:04.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-11-12T23:46:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 45, 30), 7.27, 61.91, 0.0, 8.79, 14.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:46:05.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:45:30
2025-11-12T23:46:05.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:46:05.319 [DEBUG] [Thread-24909] [transport.py] [_log()] starting thread (client mode): 0x14981120
2025-11-12T23:46:05.319 [DEBUG] [Thread-24909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:46:05.340 [DEBUG] [Thread-24909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:46:05.340 [INFO] [Thread-24909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:46:05.343 [DEBUG] [Thread-24909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] client lang: <none>
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] server lang: <none>
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] kex follows: False
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:46:05.344 [DEBUG] [Thread-24909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:46:05.345 [DEBUG] [Thread-24909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:46:05.345 [DEBUG] [Thread-24909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:46:05.345 [DEBUG] [Thread-24909] [transport.py] [_log()] Compression: none
2025-11-12T23:46:05.345 [DEBUG] [Thread-24909] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:46:05.362 [DEBUG] [Thread-24909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:46:05.363 [DEBUG] [Thread-24909] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:46:05.364 [DEBUG] [Thread-24909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:46:05.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:46:05.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:46:05.365 [DEBUG] [Thread-24909] [transport.py] [_log()] userauth is OK
2025-11-12T23:46:05.366 [DEBUG] [Thread-24909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:46:05.366 [DEBUG] [Thread-24909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:46:05.366 [DEBUG] [Thread-24909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:46:05.366 [DEBUG] [Thread-24909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:46:05.390 [INFO] [Thread-24909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:46:05.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:46:06.175 [DEBUG] [Thread-24909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:46:06.176 [DEBUG] [Thread-24909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:46:06.176 [DEBUG] [Thread-24909] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:46:06.216 [DEBUG] [Thread-24909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:46:06.216 [DEBUG] [Thread-24909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:46:06.219 [DEBUG] [Thread-24909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:46:06.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:46:06.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:46:06.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:46:06.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:46:06.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:46:06.236 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:46:06.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:46:06.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:46:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:46:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.906678 -999.00  +15.20   7.73     65   +8.70 1 2 1 1 1     0    0 5.87 -35.82 ZnESW 6.7 7.7 178.0 9.3 16.0 -22.1 15.9 -21.6 15.7 -21.2 15.9 -21.9
2025-11-12T23:46:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:46:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:46:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.906678
2025-11-12T23:46:06.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:46:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:46:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:46:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:46:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:46:06.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:45:30', tmtdew=7.27, humidity=61.91, cloud=0.0, wind=8.79, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:46:03', seeing=1.13, atlas_timestamp='2025-11-12T21:45:36.979', atlas_cloud=2, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:42:00')
2025-11-12T23:46:06.237 [DEBUG] [Thread-24909] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:46:06.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:46:06.322 [DEBUG] [Thread-24912] [transport.py] [_log()] starting thread (client mode): 0x1739a3b0
2025-11-12T23:46:06.323 [DEBUG] [Thread-24912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:46:06.337 [DEBUG] [Thread-24912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:46:06.337 [INFO] [Thread-24912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] client lang: <none>
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] server lang: <none>
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] kex follows: False
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] Compression: none
2025-11-12T23:46:06.345 [DEBUG] [Thread-24912] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:46:06.402 [DEBUG] [Thread-24912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:46:06.403 [DEBUG] [Thread-24912] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:46:06.403 [DEBUG] [Thread-24912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:46:06.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:46:06.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:46:06.459 [DEBUG] [Thread-24912] [transport.py] [_log()] userauth is OK
2025-11-12T23:46:06.460 [DEBUG] [Thread-24912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:46:06.460 [DEBUG] [Thread-24912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:46:06.460 [DEBUG] [Thread-24912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:46:06.460 [DEBUG] [Thread-24912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:46:06.476 [INFO] [Thread-24912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:46:06.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:46:06.476 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:46:07.282 [DEBUG] [Thread-24912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:46:07.283 [DEBUG] [Thread-24912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:46:07.330 [DEBUG] [Thread-24912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:46:07.330 [DEBUG] [Thread-24912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:46:07.338 [DEBUG] [Thread-24912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:46:07.346 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:46:07.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-11-12T23:46:07.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-11-12T23:46:07.362 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:46:07.362 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:46:07.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:46:07.370 [DEBUG] [Thread-24912] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:46:10.773 [DEBUG] [Thread-24914 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:46:17.244 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:46:17.245 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:46:25.817 [DEBUG] [Thread-24915 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:46:37.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:46:37.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:46:37.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-11-12T23:46:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 46, 34), 7.18, 62.07, 0.0, 9.94, 14.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:46:38.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:46:34
2025-11-12T23:46:38.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:46:38.287 [DEBUG] [Thread-24916] [transport.py] [_log()] starting thread (client mode): 0x11f02590
2025-11-12T23:46:38.287 [DEBUG] [Thread-24916] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:46:38.306 [DEBUG] [Thread-24916] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:46:38.306 [INFO] [Thread-24916] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:46:38.309 [DEBUG] [Thread-24916] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] client lang: <none>
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] server lang: <none>
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] kex follows: False
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:46:38.310 [DEBUG] [Thread-24916] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:46:38.311 [DEBUG] [Thread-24916] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:46:38.311 [DEBUG] [Thread-24916] [transport.py] [_log()] Compression: none
2025-11-12T23:46:38.311 [DEBUG] [Thread-24916] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:46:38.330 [DEBUG] [Thread-24916] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:46:38.330 [DEBUG] [Thread-24916] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:46:38.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:46:38.332 [DEBUG] [Thread-24916] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:46:38.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:46:38.334 [DEBUG] [Thread-24916] [transport.py] [_log()] userauth is OK
2025-11-12T23:46:38.334 [DEBUG] [Thread-24916] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:46:38.335 [DEBUG] [Thread-24916] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:46:38.335 [DEBUG] [Thread-24916] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:46:38.335 [DEBUG] [Thread-24916] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:46:38.356 [INFO] [Thread-24916] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:46:38.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:46:39.020 [DEBUG] [Thread-24916] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:46:39.020 [DEBUG] [Thread-24916] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:46:39.020 [DEBUG] [Thread-24916] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:46:39.061 [DEBUG] [Thread-24916] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:46:39.061 [DEBUG] [Thread-24916] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:46:39.064 [DEBUG] [Thread-24916] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:46:39.076 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:46:39.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:46:39.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:46:39.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:46:39.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:46:39.089 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:46:39.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:46:39.089 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:46:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:46:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.907026 -999.00  +15.10   6.18     65   +8.60 1 2 1 1 1     0    0 5.86 -33.84 ZnESW 7.4 6.2 189.6 9.0 16.0 -22.3 15.9 -21.9 15.7 -21.2 15.9 -21.8
2025-11-12T23:46:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:46:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:46:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.907026
2025-11-12T23:46:39.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:46:39.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:46:39.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:46:39.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:46:39.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:46:39.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:46:34', tmtdew=7.18, humidity=62.07, cloud=0.0, wind=9.94, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:46:35', seeing=1.13, atlas_timestamp='2025-11-12T21:46:07.046', atlas_cloud=2, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:42:00')
2025-11-12T23:46:39.092 [DEBUG] [Thread-24916] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:46:39.175 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:46:39.187 [DEBUG] [Thread-24919] [transport.py] [_log()] starting thread (client mode): 0x19ddbbe0
2025-11-12T23:46:39.187 [DEBUG] [Thread-24919] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:46:39.202 [DEBUG] [Thread-24919] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:46:39.203 [INFO] [Thread-24919] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:46:39.210 [DEBUG] [Thread-24919] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:46:39.210 [DEBUG] [Thread-24919] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:46:39.210 [DEBUG] [Thread-24919] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] client lang: <none>
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] server lang: <none>
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] kex follows: False
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] Compression: none
2025-11-12T23:46:39.211 [DEBUG] [Thread-24919] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:46:39.268 [DEBUG] [Thread-24919] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:46:39.269 [DEBUG] [Thread-24919] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:46:39.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:46:39.270 [DEBUG] [Thread-24919] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:46:39.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:46:39.324 [DEBUG] [Thread-24919] [transport.py] [_log()] userauth is OK
2025-11-12T23:46:39.324 [DEBUG] [Thread-24919] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:46:39.325 [DEBUG] [Thread-24919] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:46:39.325 [DEBUG] [Thread-24919] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:46:39.325 [DEBUG] [Thread-24919] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:46:39.343 [INFO] [Thread-24919] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:46:39.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:46:39.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:46:40.165 [DEBUG] [Thread-24919] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:46:40.165 [DEBUG] [Thread-24919] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:46:40.213 [DEBUG] [Thread-24919] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:46:40.213 [DEBUG] [Thread-24919] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:46:40.222 [DEBUG] [Thread-24919] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:46:40.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:46:40.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-11-12T23:46:40.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-11-12T23:46:40.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:46:40.250 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:46:40.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:46:40.259 [DEBUG] [Thread-24919] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:46:40.850 [DEBUG] [Thread-24921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:46:55.907 [DEBUG] [Thread-24922 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:47:03.948 [DEBUG] [Thread-24923 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:47:10.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:47:10.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:47:10.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-11-12T23:47:10.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 47, 6), 7.19, 62.04, 0.0, 10.29, 14.88, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:47:10.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:47:06
2025-11-12T23:47:10.944 [DEBUG] [Thread-24924 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:47:11.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:47:11.210 [DEBUG] [Thread-24925] [transport.py] [_log()] starting thread (client mode): 0x11f00790
2025-11-12T23:47:11.210 [DEBUG] [Thread-24925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:47:11.225 [DEBUG] [Thread-24925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:47:11.225 [INFO] [Thread-24925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] client lang: <none>
2025-11-12T23:47:11.228 [DEBUG] [Thread-24925] [transport.py] [_log()] server lang: <none>
2025-11-12T23:47:11.229 [DEBUG] [Thread-24925] [transport.py] [_log()] kex follows: False
2025-11-12T23:47:11.229 [DEBUG] [Thread-24925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:47:11.229 [DEBUG] [Thread-24925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:47:11.229 [DEBUG] [Thread-24925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:47:11.229 [DEBUG] [Thread-24925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:47:11.229 [DEBUG] [Thread-24925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:47:11.229 [DEBUG] [Thread-24925] [transport.py] [_log()] Compression: none
2025-11-12T23:47:11.229 [DEBUG] [Thread-24925] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:47:11.247 [DEBUG] [Thread-24925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:47:11.248 [DEBUG] [Thread-24925] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:47:11.248 [DEBUG] [Thread-24925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:47:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:47:11.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:47:11.250 [DEBUG] [Thread-24925] [transport.py] [_log()] userauth is OK
2025-11-12T23:47:11.251 [DEBUG] [Thread-24925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:47:11.251 [DEBUG] [Thread-24925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:47:11.251 [DEBUG] [Thread-24925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:47:11.251 [DEBUG] [Thread-24925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:47:11.270 [INFO] [Thread-24925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:47:11.271 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:47:12.047 [DEBUG] [Thread-24925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:47:12.047 [DEBUG] [Thread-24925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:47:12.048 [DEBUG] [Thread-24925] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:47:12.088 [DEBUG] [Thread-24925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:47:12.089 [DEBUG] [Thread-24925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:47:12.092 [DEBUG] [Thread-24925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:47:12.103 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:47:12.103 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:47:12.105 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:47:12.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:47:12.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:47:12.114 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:47:12.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:47:12.114 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:47:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:47:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.907373 -999.00  +15.10   8.70     65   +8.70 1 1 1 1 1     0    0 5.76 -32.53 ZNESW 6.8 8.7 191.0 11.2 15.9 -22.2 15.8 -21.4 15.7 -21.1 15.9 -21.9
2025-11-12T23:47:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:47:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:47:12.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.907373
2025-11-12T23:47:12.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:47:12.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:47:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:47:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:47:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:47:12.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:47:06', tmtdew=7.19, humidity=62.04, cloud=0.0, wind=10.29, temperature=14.88, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:47:07', seeing=1.13, atlas_timestamp='2025-11-12T21:46:37.027', atlas_cloud=1, atlas_rain=1, zp_data=[0.4287499999999991, 0.6772500000000008, 0.6522500000000004, 0.3625000000000007, 0.34750000000000014, 0.3857500000000016, 0.46950000000000003, 0.4852500000000006, 0.6854999999999993, 0.6840000000000002, 0.61625, 0.36849999999999916, 0.41199999999999903, 0.4717500000000001, 0.6489999999999991, 0.3780000000000001, 0.6252499999999994, 0.6894999999999998, 0.6079999999999997, 0.48724999999999863, 0.4349999999999987, 0.28474999999999895, 0.792250000000001, 0.5767500000000005, 0.7559999999999993, 0.7200000000000015, 0.49875000000000025, 0.5095000000000001, 0.5090000000000003, 0.9210000000000012, 0.7540000000000013, 1.099000000000001, 1.0482499999999995], zp_timestamp='2025-11-12T21:42:00')
2025-11-12T23:47:12.117 [DEBUG] [Thread-24925] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:47:12.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:47:12.217 [DEBUG] [Thread-24928] [transport.py] [_log()] starting thread (client mode): 0x149477c0
2025-11-12T23:47:12.218 [DEBUG] [Thread-24928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:47:12.233 [DEBUG] [Thread-24928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:47:12.233 [INFO] [Thread-24928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:47:12.240 [DEBUG] [Thread-24928] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] client lang: <none>
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] server lang: <none>
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] kex follows: False
2025-11-12T23:47:12.241 [DEBUG] [Thread-24928] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:47:12.242 [DEBUG] [Thread-24928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:47:12.242 [DEBUG] [Thread-24928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:47:12.242 [DEBUG] [Thread-24928] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:47:12.242 [DEBUG] [Thread-24928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:47:12.242 [DEBUG] [Thread-24928] [transport.py] [_log()] Compression: none
2025-11-12T23:47:12.242 [DEBUG] [Thread-24928] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:47:12.300 [DEBUG] [Thread-24928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:47:12.301 [DEBUG] [Thread-24928] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:47:12.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:47:12.302 [DEBUG] [Thread-24928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:47:12.303 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:47:12.356 [DEBUG] [Thread-24928] [transport.py] [_log()] userauth is OK
2025-11-12T23:47:12.357 [DEBUG] [Thread-24928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:47:12.357 [DEBUG] [Thread-24928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:47:12.357 [DEBUG] [Thread-24928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:47:12.357 [DEBUG] [Thread-24928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:47:12.376 [INFO] [Thread-24928] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:47:12.377 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:47:12.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:47:13.194 [DEBUG] [Thread-24928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:47:13.195 [DEBUG] [Thread-24928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:47:13.243 [DEBUG] [Thread-24928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:47:13.243 [DEBUG] [Thread-24928] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:47:13.252 [DEBUG] [Thread-24928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:47:13.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:47:13.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-11-12T23:47:13.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-11-12T23:47:13.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:47:13.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:47:13.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:47:13.288 [DEBUG] [Thread-24928] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:47:17.448 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:47:17.449 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:47:25.976 [DEBUG] [Thread-24930 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:47:41.022 [DEBUG] [Thread-24931 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:47:43.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:47:43.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:47:43.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-11-12T23:47:43.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 47, 38), 7.2, 61.97, 0.0, 8.79, 14.81, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:47:43.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:47:38
2025-11-12T23:47:44.047 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:47:44.192 [DEBUG] [Thread-24932] [transport.py] [_log()] starting thread (client mode): 0x11f02800
2025-11-12T23:47:44.192 [DEBUG] [Thread-24932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:47:44.213 [DEBUG] [Thread-24932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:47:44.214 [INFO] [Thread-24932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:47:44.216 [DEBUG] [Thread-24932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:47:44.216 [DEBUG] [Thread-24932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:47:44.216 [DEBUG] [Thread-24932] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:47:44.216 [DEBUG] [Thread-24932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:47:44.216 [DEBUG] [Thread-24932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:47:44.216 [DEBUG] [Thread-24932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:47:44.216 [DEBUG] [Thread-24932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] client lang: <none>
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] server lang: <none>
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] kex follows: False
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] Compression: none
2025-11-12T23:47:44.217 [DEBUG] [Thread-24932] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:47:44.233 [DEBUG] [Thread-24932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:47:44.234 [DEBUG] [Thread-24932] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:47:44.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:47:44.234 [DEBUG] [Thread-24932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:47:44.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:47:44.237 [DEBUG] [Thread-24932] [transport.py] [_log()] userauth is OK
2025-11-12T23:47:44.237 [DEBUG] [Thread-24932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:47:44.237 [DEBUG] [Thread-24932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:47:44.237 [DEBUG] [Thread-24932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:47:44.237 [DEBUG] [Thread-24932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:47:44.273 [INFO] [Thread-24932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:47:44.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:47:44.913 [DEBUG] [Thread-24932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:47:44.914 [DEBUG] [Thread-24932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:47:44.914 [DEBUG] [Thread-24932] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:47:44.955 [DEBUG] [Thread-24932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:47:44.955 [DEBUG] [Thread-24932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:47:44.959 [DEBUG] [Thread-24932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:47:44.971 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:47:44.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:47:44.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:47:44.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:47:44.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:47:44.982 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:47:44.983 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:47:44.983 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:47:44.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:47:44.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.907720 -999.00  +15.10   6.67     65   +8.70 1 1 1 1 1     0    0 5.81 -38.03 ZNESW 7.0 6.7 188.6 9.2 15.9 -22.3 15.8 -21.8 15.6 -21.3 15.9 -22.0
2025-11-12T23:47:44.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:47:44.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:47:44.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.907720
2025-11-12T23:47:44.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:47:44.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:47:44.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:47:44.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:47:44.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:47:44.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:47:38', tmtdew=7.2, humidity=61.97, cloud=0.0, wind=8.79, temperature=14.81, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:47:39', seeing=1.13, atlas_timestamp='2025-11-12T21:47:07.008', atlas_cloud=1, atlas_rain=1, zp_data=[0.2677499999999995, 0.4177500000000016, 0.3212500000000009, 0.22949999999999982, 0.3855000000000004, 0.3912500000000012, 0.596000000000001, 0.45725000000000016, 0.38700000000000045, 0.6950000000000003, 0.4997499999999988, 0.37100000000000044, 0.266, 0.31824999999999903, 0.6189999999999998, 0.5219999999999985, 0.40974999999999895, 0.7444999999999995, 0.5949999999999989, 0.4757499999999988, 0.2989999999999995, 0.2672499999999989, 0.534250000000001, 0.7442500000000001, 0.520999999999999, 0.6025, 0.5127500000000005, 0.4485000000000001, 0.5579999999999998, 1.0615000000000006, 0.6630000000000011, 0.7480000000000011, 0.8482499999999993], zp_timestamp='2025-11-12T21:47:00')
2025-11-12T23:47:44.985 [DEBUG] [Thread-24932] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:47:45.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:47:45.081 [DEBUG] [Thread-24935] [transport.py] [_log()] starting thread (client mode): 0x11f00190
2025-11-12T23:47:45.081 [DEBUG] [Thread-24935] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:47:45.096 [DEBUG] [Thread-24935] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:47:45.096 [INFO] [Thread-24935] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:47:45.103 [DEBUG] [Thread-24935] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:47:45.104 [DEBUG] [Thread-24935] [transport.py] [_log()] client lang: <none>
2025-11-12T23:47:45.105 [DEBUG] [Thread-24935] [transport.py] [_log()] server lang: <none>
2025-11-12T23:47:45.105 [DEBUG] [Thread-24935] [transport.py] [_log()] kex follows: False
2025-11-12T23:47:45.105 [DEBUG] [Thread-24935] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:47:45.105 [DEBUG] [Thread-24935] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:47:45.105 [DEBUG] [Thread-24935] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:47:45.105 [DEBUG] [Thread-24935] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:47:45.105 [DEBUG] [Thread-24935] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:47:45.106 [DEBUG] [Thread-24935] [transport.py] [_log()] Compression: none
2025-11-12T23:47:45.106 [DEBUG] [Thread-24935] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:47:45.167 [DEBUG] [Thread-24935] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:47:45.168 [DEBUG] [Thread-24935] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:47:45.168 [DEBUG] [Thread-24935] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:47:45.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:47:45.169 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:47:45.224 [DEBUG] [Thread-24935] [transport.py] [_log()] userauth is OK
2025-11-12T23:47:45.224 [DEBUG] [Thread-24935] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:47:45.225 [DEBUG] [Thread-24935] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:47:45.225 [DEBUG] [Thread-24935] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:47:45.225 [DEBUG] [Thread-24935] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:47:45.242 [INFO] [Thread-24935] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:47:45.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:47:45.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:47:46.085 [DEBUG] [Thread-24935] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:47:46.085 [DEBUG] [Thread-24935] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:47:46.133 [DEBUG] [Thread-24935] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:47:46.133 [DEBUG] [Thread-24935] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:47:46.142 [DEBUG] [Thread-24935] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:47:46.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:47:46.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:47:46.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-11-12T23:47:46.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:47:46.171 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:47:46.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:47:46.187 [DEBUG] [Thread-24935] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:47:56.058 [DEBUG] [Thread-24937 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:48:04.001 [DEBUG] [Thread-24938 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:48:11.111 [DEBUG] [Thread-24939 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:48:16.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:48:16.187 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:48:16.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-11-12T23:48:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 48, 10), 7.19, 62.06, 0.0, 8.84, 14.86, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:48:16.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:48:10
2025-11-12T23:48:16.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:48:17.094 [DEBUG] [Thread-24940] [transport.py] [_log()] starting thread (client mode): 0x173992d0
2025-11-12T23:48:17.094 [DEBUG] [Thread-24940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:48:17.110 [DEBUG] [Thread-24940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:48:17.110 [INFO] [Thread-24940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:48:17.113 [DEBUG] [Thread-24940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:48:17.113 [DEBUG] [Thread-24940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:48:17.113 [DEBUG] [Thread-24940] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:48:17.113 [DEBUG] [Thread-24940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:48:17.113 [DEBUG] [Thread-24940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] client lang: <none>
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] server lang: <none>
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] kex follows: False
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] Compression: none
2025-11-12T23:48:17.114 [DEBUG] [Thread-24940] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:48:17.132 [DEBUG] [Thread-24940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:48:17.133 [DEBUG] [Thread-24940] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:48:17.133 [DEBUG] [Thread-24940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:48:17.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:48:17.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:48:17.135 [DEBUG] [Thread-24940] [transport.py] [_log()] userauth is OK
2025-11-12T23:48:17.136 [DEBUG] [Thread-24940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:48:17.136 [DEBUG] [Thread-24940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:48:17.136 [DEBUG] [Thread-24940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:48:17.136 [DEBUG] [Thread-24940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:48:17.155 [INFO] [Thread-24940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:48:17.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:48:17.651 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:48:17.652 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:48:17.963 [DEBUG] [Thread-24940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:48:17.964 [DEBUG] [Thread-24940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:48:17.964 [DEBUG] [Thread-24940] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:48:18.005 [DEBUG] [Thread-24940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:48:18.005 [DEBUG] [Thread-24940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:48:18.008 [DEBUG] [Thread-24940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:48:18.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:48:18.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:48:18.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:48:18.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:48:18.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:48:18.032 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:48:18.033 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:48:18.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:48:18.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:48:18.033 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.908068 -999.00  +15.10   5.53     65   +8.70 1 1 1 1 1     0    0 5.67 -36.45 ZNESW 5.8 5.5 181.2 7.7 15.9 -22.3 15.8 -21.7 15.7 -21.3 15.9 -22.0
2025-11-12T23:48:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:48:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:48:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.908068
2025-11-12T23:48:18.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:48:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:48:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:48:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:48:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:48:18.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:48:10', tmtdew=7.19, humidity=62.06, cloud=0.0, wind=8.84, temperature=14.86, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:48:11', seeing=0.94, atlas_timestamp='2025-11-12T21:47:37.075', atlas_cloud=1, atlas_rain=1, zp_data=[0.2677499999999995, 0.4177500000000016, 0.3212500000000009, 0.22949999999999982, 0.3855000000000004, 0.3912500000000012, 0.596000000000001, 0.45725000000000016, 0.38700000000000045, 0.6950000000000003, 0.4997499999999988, 0.37100000000000044, 0.266, 0.31824999999999903, 0.6189999999999998, 0.5219999999999985, 0.40974999999999895, 0.7444999999999995, 0.5949999999999989, 0.4757499999999988, 0.2989999999999995, 0.2672499999999989, 0.534250000000001, 0.7442500000000001, 0.520999999999999, 0.6025, 0.5127500000000005, 0.4485000000000001, 0.5579999999999998, 1.0615000000000006, 0.6630000000000011, 0.7480000000000011, 0.8482499999999993], zp_timestamp='2025-11-12T21:47:00')
2025-11-12T23:48:18.035 [DEBUG] [Thread-24940] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:48:18.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:48:26.152 [DEBUG] [Thread-24943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:48:41.204 [DEBUG] [Thread-24944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:48:56.234 [DEBUG] [Thread-24945 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:49:04.069 [DEBUG] [Thread-24946 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:49:11.275 [DEBUG] [Thread-24947 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:49:17.854 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:49:17.856 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:49:26.307 [DEBUG] [Thread-24948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:49:41.346 [DEBUG] [Thread-24949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:49:56.381 [DEBUG] [Thread-24950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:50:04.130 [DEBUG] [Thread-24951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:50:11.419 [DEBUG] [Thread-24952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:50:18.060 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:50:18.061 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:50:26.455 [DEBUG] [Thread-24953 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:50:31.611 [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-11-12T23:50:41.485 [DEBUG] [Thread-24954 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:50:56.517 [DEBUG] [Thread-24955 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:51:01.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:51:01.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:51:01.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:51:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 50, 51), 7.07, 62.32, 0.0, 8.38, 14.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:51:02.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:50:51
2025-11-12T23:51:02.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:51:02.565 [DEBUG] [Thread-24956] [transport.py] [_log()] starting thread (client mode): 0x11f023b0
2025-11-12T23:51:02.565 [DEBUG] [Thread-24956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:51:02.584 [DEBUG] [Thread-24956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:51:02.584 [INFO] [Thread-24956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] client lang: <none>
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] server lang: <none>
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] kex follows: False
2025-11-12T23:51:02.587 [DEBUG] [Thread-24956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:51:02.588 [DEBUG] [Thread-24956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:51:02.588 [DEBUG] [Thread-24956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:51:02.588 [DEBUG] [Thread-24956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:51:02.588 [DEBUG] [Thread-24956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:51:02.588 [DEBUG] [Thread-24956] [transport.py] [_log()] Compression: none
2025-11-12T23:51:02.588 [DEBUG] [Thread-24956] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:51:02.604 [DEBUG] [Thread-24956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:51:02.604 [DEBUG] [Thread-24956] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:51:02.605 [DEBUG] [Thread-24956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:51:02.605 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:51:02.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:51:02.607 [DEBUG] [Thread-24956] [transport.py] [_log()] userauth is OK
2025-11-12T23:51:02.607 [DEBUG] [Thread-24956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:51:02.607 [DEBUG] [Thread-24956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:51:02.607 [DEBUG] [Thread-24956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:51:02.607 [DEBUG] [Thread-24956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:51:02.631 [INFO] [Thread-24956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:51:02.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:51:03.271 [DEBUG] [Thread-24956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:51:03.272 [DEBUG] [Thread-24956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:51:03.272 [DEBUG] [Thread-24956] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:51:03.313 [DEBUG] [Thread-24956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:51:03.313 [DEBUG] [Thread-24956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:51:03.316 [DEBUG] [Thread-24956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:51:03.328 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:51:03.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:51:03.330 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:51:03.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:51:03.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:51:03.340 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:51:03.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:51:03.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:51:03.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:51:03.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.910162 -999.00  +15.10   5.73     65   +8.70 1 1 1 1 1     0    0 5.74 -32.26 ZNESW 5.9 5.7 184.6 8.7 15.9 -22.5 15.7 -21.6 15.6 -21.3 15.8 -22.2
2025-11-12T23:51:03.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:51:03.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:51:03.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.910162
2025-11-12T23:51:03.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:51:03.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:51:03.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:51:03.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:51:03.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:51:03.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:50:51', tmtdew=7.07, humidity=62.32, cloud=0.0, wind=8.38, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:50:52', seeing=1.05, atlas_timestamp='2025-11-12T21:50:37.997', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:49:00')
2025-11-12T23:51:03.343 [DEBUG] [Thread-24956] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:51:03.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:51:03.439 [DEBUG] [Thread-24959] [transport.py] [_log()] starting thread (client mode): 0x149147c0
2025-11-12T23:51:03.440 [DEBUG] [Thread-24959] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:51:03.454 [DEBUG] [Thread-24959] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:51:03.454 [INFO] [Thread-24959] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] client lang: <none>
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] server lang: <none>
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] kex follows: False
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:51:03.462 [DEBUG] [Thread-24959] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:51:03.463 [DEBUG] [Thread-24959] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:51:03.463 [DEBUG] [Thread-24959] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:51:03.463 [DEBUG] [Thread-24959] [transport.py] [_log()] Compression: none
2025-11-12T23:51:03.463 [DEBUG] [Thread-24959] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:51:03.520 [DEBUG] [Thread-24959] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:51:03.521 [DEBUG] [Thread-24959] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:51:03.521 [DEBUG] [Thread-24959] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:51:03.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:51:03.522 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:51:03.576 [DEBUG] [Thread-24959] [transport.py] [_log()] userauth is OK
2025-11-12T23:51:03.576 [DEBUG] [Thread-24959] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:51:03.576 [DEBUG] [Thread-24959] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:51:03.576 [DEBUG] [Thread-24959] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:51:03.576 [DEBUG] [Thread-24959] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:51:03.601 [INFO] [Thread-24959] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:51:03.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:51:03.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:51:04.188 [DEBUG] [Thread-24961 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:51:04.481 [DEBUG] [Thread-24959] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:51:04.481 [DEBUG] [Thread-24959] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:51:04.529 [DEBUG] [Thread-24959] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:51:04.529 [DEBUG] [Thread-24959] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:51:04.538 [DEBUG] [Thread-24959] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:51:04.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:51:04.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-11-12T23:51:04.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-11-12T23:51:04.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:51:04.566 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:51:04.566 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:51:04.574 [DEBUG] [Thread-24959] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:51:11.553 [DEBUG] [Thread-24962 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:51:18.267 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:51:18.268 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:51:26.603 [DEBUG] [Thread-24963 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:51:34.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:51:34.585 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:51:34.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-11-12T23:51:35.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 51, 23), 7.05, 62.39, 0.0, 9.03, 14.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:51:35.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:51:23
2025-11-12T23:51:35.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:51:35.501 [DEBUG] [Thread-24964] [transport.py] [_log()] starting thread (client mode): 0x14921120
2025-11-12T23:51:35.501 [DEBUG] [Thread-24964] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:51:35.514 [DEBUG] [Thread-24964] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:51:35.514 [INFO] [Thread-24964] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] client lang: <none>
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] server lang: <none>
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] kex follows: False
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] Compression: none
2025-11-12T23:51:35.517 [DEBUG] [Thread-24964] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:51:35.531 [DEBUG] [Thread-24964] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:51:35.532 [DEBUG] [Thread-24964] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:51:35.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:51:35.533 [DEBUG] [Thread-24964] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:51:35.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:51:35.534 [DEBUG] [Thread-24964] [transport.py] [_log()] userauth is OK
2025-11-12T23:51:35.534 [DEBUG] [Thread-24964] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:51:35.534 [DEBUG] [Thread-24964] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:51:35.534 [DEBUG] [Thread-24964] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:51:35.534 [DEBUG] [Thread-24964] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:51:35.553 [INFO] [Thread-24964] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:51:35.554 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:51:36.206 [DEBUG] [Thread-24964] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:51:36.206 [DEBUG] [Thread-24964] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:51:36.206 [DEBUG] [Thread-24964] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:51:36.246 [DEBUG] [Thread-24964] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:51:36.247 [DEBUG] [Thread-24964] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:51:36.249 [DEBUG] [Thread-24964] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:51:36.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:51:36.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:51:36.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:51:36.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:51:36.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:51:36.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:51:36.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:51:36.269 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:51:36.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:51:36.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.910509 -999.00  +15.10   6.31     65   +8.60 1 1 1 1 1     0    0 5.63 -31.99 ZNESW 6.0 6.3 178.8 7.3 15.9 -22.5 15.8 -21.7 15.5 -21.3 15.8 -22.2
2025-11-12T23:51:36.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:51:36.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:51:36.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.910509
2025-11-12T23:51:36.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:51:36.271 [DEBUG] [Thread-24964] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:51:36.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:51:36.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:51:36.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:51:36.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:51:36.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:51:23', tmtdew=7.05, humidity=62.39, cloud=0.0, wind=9.03, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:51:24', seeing=1.04, atlas_timestamp='2025-11-12T21:51:07.978', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:49:00')
2025-11-12T23:51: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-11-12T23:51:36.366 [DEBUG] [Thread-24967] [transport.py] [_log()] starting thread (client mode): 0x11f02680
2025-11-12T23:51:36.366 [DEBUG] [Thread-24967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:51:36.381 [DEBUG] [Thread-24967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:51:36.382 [INFO] [Thread-24967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:51:36.389 [DEBUG] [Thread-24967] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:51:36.389 [DEBUG] [Thread-24967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:51:36.389 [DEBUG] [Thread-24967] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:51:36.389 [DEBUG] [Thread-24967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:51:36.389 [DEBUG] [Thread-24967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] client lang: <none>
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] server lang: <none>
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] kex follows: False
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] Compression: none
2025-11-12T23:51:36.390 [DEBUG] [Thread-24967] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:51:36.448 [DEBUG] [Thread-24967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:51:36.449 [DEBUG] [Thread-24967] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:51:36.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:51:36.450 [DEBUG] [Thread-24967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:51:36.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:51:36.504 [DEBUG] [Thread-24967] [transport.py] [_log()] userauth is OK
2025-11-12T23:51:36.504 [DEBUG] [Thread-24967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:51:36.505 [DEBUG] [Thread-24967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:51:36.505 [DEBUG] [Thread-24967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:51:36.505 [DEBUG] [Thread-24967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:51:36.524 [INFO] [Thread-24967] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:51:36.524 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:51:36.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:51:37.405 [DEBUG] [Thread-24967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:51:37.405 [DEBUG] [Thread-24967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:51:37.453 [DEBUG] [Thread-24967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:51:37.453 [DEBUG] [Thread-24967] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:51:37.462 [DEBUG] [Thread-24967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:51:37.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:51: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-11-12T23:51:37.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-11-12T23:51:37.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:51:37.491 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:51:37.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:51:37.499 [DEBUG] [Thread-24967] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:51:41.640 [DEBUG] [Thread-24969 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:51:56.690 [DEBUG] [Thread-24970 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:52:04.249 [DEBUG] [Thread-24971 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:52:07.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:52:07.522 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:52:07.524 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:52:08.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 51, 55), 7.05, 62.42, 0.0, 10.85, 14.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:52:08.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:51:55
2025-11-12T23:52:08.286 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:52:08.430 [DEBUG] [Thread-24972] [transport.py] [_log()] starting thread (client mode): 0x11f00cd0
2025-11-12T23:52:08.431 [DEBUG] [Thread-24972] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:52:08.452 [DEBUG] [Thread-24972] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:52:08.452 [INFO] [Thread-24972] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:52:08.453 [DEBUG] [Thread-24972] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:52:08.453 [DEBUG] [Thread-24972] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:52:08.453 [DEBUG] [Thread-24972] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:52:08.453 [DEBUG] [Thread-24972] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:52:08.453 [DEBUG] [Thread-24972] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:52:08.453 [DEBUG] [Thread-24972] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:52:08.453 [DEBUG] [Thread-24972] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] client lang: <none>
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] server lang: <none>
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] kex follows: False
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] Compression: none
2025-11-12T23:52:08.454 [DEBUG] [Thread-24972] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:52:08.469 [DEBUG] [Thread-24972] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:52:08.469 [DEBUG] [Thread-24972] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:52:08.470 [DEBUG] [Thread-24972] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:52:08.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:52:08.471 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:52:08.471 [DEBUG] [Thread-24972] [transport.py] [_log()] userauth is OK
2025-11-12T23:52:08.472 [DEBUG] [Thread-24972] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:52:08.472 [DEBUG] [Thread-24972] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:52:08.472 [DEBUG] [Thread-24972] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:52:08.472 [DEBUG] [Thread-24972] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:52:08.489 [INFO] [Thread-24972] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:52:08.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:52:09.112 [DEBUG] [Thread-24972] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:52:09.112 [DEBUG] [Thread-24972] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:52:09.113 [DEBUG] [Thread-24972] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:52:09.153 [DEBUG] [Thread-24972] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:52:09.153 [DEBUG] [Thread-24972] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:52:09.157 [DEBUG] [Thread-24972] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:52:09.171 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:52:09.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:52:09.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:52:09.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:52:09.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:52:09.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:52:09.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:52:09.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:52:09.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:52:09.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.910856 -999.00  +15.10   6.79     65   +8.70 1 1 1 1 1     0    0 5.74 -29.52 ZNESW 6.6 6.8 194.0 9.2 15.9 -22.4 15.7 -21.9 15.5 -21.3 15.8 -22.1
2025-11-12T23:52:09.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:52:09.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:52:09.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.910856
2025-11-12T23:52:09.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:52:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:52:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:52:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:52:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:52:09.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:51:55', tmtdew=7.05, humidity=62.42, cloud=0.0, wind=10.85, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:51:56', seeing=1.04, atlas_timestamp='2025-11-12T21:51:37.958', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:49:00')
2025-11-12T23:52:09.185 [DEBUG] [Thread-24972] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:52:09.269 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:52:09.281 [DEBUG] [Thread-24975] [transport.py] [_log()] starting thread (client mode): 0x19dd9c60
2025-11-12T23:52:09.281 [DEBUG] [Thread-24975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:52:09.295 [DEBUG] [Thread-24975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:52:09.296 [INFO] [Thread-24975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:52:09.303 [DEBUG] [Thread-24975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:52:09.303 [DEBUG] [Thread-24975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:52:09.303 [DEBUG] [Thread-24975] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:52:09.303 [DEBUG] [Thread-24975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] client lang: <none>
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] server lang: <none>
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] kex follows: False
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] Compression: none
2025-11-12T23:52:09.304 [DEBUG] [Thread-24975] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:52:09.364 [DEBUG] [Thread-24975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:52:09.364 [DEBUG] [Thread-24975] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:52:09.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:52:09.366 [DEBUG] [Thread-24975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:52:09.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:52:09.420 [DEBUG] [Thread-24975] [transport.py] [_log()] userauth is OK
2025-11-12T23:52:09.421 [DEBUG] [Thread-24975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:52:09.421 [DEBUG] [Thread-24975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:52:09.421 [DEBUG] [Thread-24975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:52:09.421 [DEBUG] [Thread-24975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:52:09.440 [INFO] [Thread-24975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:52:09.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:52:09.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:52:10.290 [DEBUG] [Thread-24975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:52:10.290 [DEBUG] [Thread-24975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:52:10.339 [DEBUG] [Thread-24975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:52:10.339 [DEBUG] [Thread-24975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:52:10.348 [DEBUG] [Thread-24975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:52:10.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:52:10.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-11-12T23:52: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') -> 00000000
2025-11-12T23:52:10.375 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:52:10.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:52:10.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:52:10.384 [DEBUG] [Thread-24975] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:52:11.724 [DEBUG] [Thread-24977 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:52:18.471 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:52:18.472 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:52:26.783 [DEBUG] [Thread-24978 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:52:40.390 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:52:40.390 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:52:40.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-11-12T23:52:41.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 52, 27), 7.04, 62.44, 0.0, 10.66, 14.75, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:52:41.026 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:52:27
2025-11-12T23:52:41.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:52:41.290 [DEBUG] [Thread-24979] [transport.py] [_log()] starting thread (client mode): 0x17345c60
2025-11-12T23:52:41.290 [DEBUG] [Thread-24979] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:52:41.301 [DEBUG] [Thread-24979] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:52:41.301 [INFO] [Thread-24979] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] client lang: <none>
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] server lang: <none>
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] kex follows: False
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:52:41.302 [DEBUG] [Thread-24979] [transport.py] [_log()] Compression: none
2025-11-12T23:52:41.303 [DEBUG] [Thread-24979] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:52:41.310 [DEBUG] [Thread-24979] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:52:41.310 [DEBUG] [Thread-24979] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:52:41.310 [DEBUG] [Thread-24979] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:52:41.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:52:41.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:52:41.311 [DEBUG] [Thread-24979] [transport.py] [_log()] userauth is OK
2025-11-12T23:52:41.311 [DEBUG] [Thread-24979] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:52:41.311 [DEBUG] [Thread-24979] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:52:41.311 [DEBUG] [Thread-24979] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:52:41.311 [DEBUG] [Thread-24979] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:52:41.323 [INFO] [Thread-24979] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:52:41.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:52:41.815 [DEBUG] [Thread-24981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:52:41.921 [DEBUG] [Thread-24979] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:52:41.921 [DEBUG] [Thread-24979] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:52:41.921 [DEBUG] [Thread-24979] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:52:41.962 [DEBUG] [Thread-24979] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:52:41.962 [DEBUG] [Thread-24979] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:52:41.965 [DEBUG] [Thread-24979] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:52:41.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:52:41.973 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:52:41.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:52:41.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:52:41.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:52:41.986 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:52:41.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:52:41.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:52:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:52:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.911551 -999.00  +15.10   8.35     65   +8.80 1 1 1 1 1     0    0 5.82 -29.27 ZNESW 8.1 8.3 191.8 9.2 15.9 -22.4 15.7 -21.5 15.5 -21.2 15.8 -22.1
2025-11-12T23:52:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:52:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:52:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.911551
2025-11-12T23:52:41.988 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:52:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:52:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:52:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:52:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:52:41.989 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:52:27', tmtdew=7.04, humidity=62.44, cloud=0.0, wind=10.66, temperature=14.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:52:28', seeing=1.08, atlas_timestamp='2025-11-12T21:52:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:49:00')
2025-11-12T23:52:41.990 [DEBUG] [Thread-24979] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:52:42.073 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:52:42.086 [DEBUG] [Thread-24983] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-12T23:52:42.086 [DEBUG] [Thread-24983] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:52:42.101 [DEBUG] [Thread-24983] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:52:42.101 [INFO] [Thread-24983] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:52:42.109 [DEBUG] [Thread-24983] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:52:42.109 [DEBUG] [Thread-24983] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:52:42.109 [DEBUG] [Thread-24983] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:52:42.109 [DEBUG] [Thread-24983] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:52:42.109 [DEBUG] [Thread-24983] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:52:42.109 [DEBUG] [Thread-24983] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:52:42.109 [DEBUG] [Thread-24983] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:52:42.110 [DEBUG] [Thread-24983] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:52:42.110 [DEBUG] [Thread-24983] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:52:42.110 [DEBUG] [Thread-24983] [transport.py] [_log()] client lang: <none>
2025-11-12T23:52:42.110 [DEBUG] [Thread-24983] [transport.py] [_log()] server lang: <none>
2025-11-12T23:52:42.110 [DEBUG] [Thread-24983] [transport.py] [_log()] kex follows: False
2025-11-12T23:52:42.110 [DEBUG] [Thread-24983] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:52:42.110 [DEBUG] [Thread-24983] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:52:42.110 [DEBUG] [Thread-24983] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:52:42.111 [DEBUG] [Thread-24983] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:52:42.111 [DEBUG] [Thread-24983] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:52:42.111 [DEBUG] [Thread-24983] [transport.py] [_log()] Compression: none
2025-11-12T23:52:42.111 [DEBUG] [Thread-24983] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:52:42.168 [DEBUG] [Thread-24983] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:52:42.169 [DEBUG] [Thread-24983] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:52:42.169 [DEBUG] [Thread-24983] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:52:42.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:52:42.178 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:52:42.228 [DEBUG] [Thread-24983] [transport.py] [_log()] userauth is OK
2025-11-12T23:52:42.228 [DEBUG] [Thread-24983] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:52:42.228 [DEBUG] [Thread-24983] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:52:42.228 [DEBUG] [Thread-24983] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:52:42.228 [DEBUG] [Thread-24983] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:52:42.247 [INFO] [Thread-24983] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:52:42.247 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:52:42.248 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:52:43.112 [DEBUG] [Thread-24983] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:52:43.113 [DEBUG] [Thread-24983] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:52:43.161 [DEBUG] [Thread-24983] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:52:43.161 [DEBUG] [Thread-24983] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:52:43.170 [DEBUG] [Thread-24983] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:52:43.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:52:43.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')
2025-11-12T23:52:43.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:52:43.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:52:43.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:52:43.199 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:52:43.207 [DEBUG] [Thread-24983] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:52:56.846 [DEBUG] [Thread-24985 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:53:04.305 [DEBUG] [Thread-24986 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:53:11.895 [DEBUG] [Thread-24987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:53:13.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:53:13.219 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:53:13.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-11-12T23:53:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 52, 59), 7.0, 62.89, 0.0, 9.63, 14.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:53:13.908 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:52:59
2025-11-12T23:53:14.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:53:14.185 [DEBUG] [Thread-24988] [transport.py] [_log()] starting thread (client mode): 0x1737c3d0
2025-11-12T23:53:14.185 [DEBUG] [Thread-24988] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:53:14.206 [DEBUG] [Thread-24988] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:53:14.206 [INFO] [Thread-24988] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] client lang: <none>
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] server lang: <none>
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] kex follows: False
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] Compression: none
2025-11-12T23:53:14.209 [DEBUG] [Thread-24988] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:53:14.225 [DEBUG] [Thread-24988] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:53:14.225 [DEBUG] [Thread-24988] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:53:14.226 [DEBUG] [Thread-24988] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:53:14.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:53:14.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:53:14.226 [DEBUG] [Thread-24988] [transport.py] [_log()] userauth is OK
2025-11-12T23:53:14.227 [DEBUG] [Thread-24988] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:53:14.227 [DEBUG] [Thread-24988] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:53:14.227 [DEBUG] [Thread-24988] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:53:14.227 [DEBUG] [Thread-24988] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:53:14.236 [INFO] [Thread-24988] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:53:14.237 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:53:14.840 [DEBUG] [Thread-24988] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:53:14.840 [DEBUG] [Thread-24988] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:53:14.840 [DEBUG] [Thread-24988] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:53:14.881 [DEBUG] [Thread-24988] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:53:14.882 [DEBUG] [Thread-24988] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:53:14.884 [DEBUG] [Thread-24988] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:53:14.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:53:14.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:53:14.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:53:14.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:53:14.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:53:14.901 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:53:14.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.911551 -999.00  +15.10   8.35     65   +8.80 1 1 1 1 1     0    0 5.82 -29.27 ZNESW 8.1 8.3 191.8 9.2 15.9 -22.4 15.7 -21.5 15.5 -21.2 15.8 -22.1
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.911551
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:53:14.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:52:59', tmtdew=7.0, humidity=62.89, cloud=0.0, wind=9.63, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:53:00', seeing=1.07, atlas_timestamp='2025-11-12T21:52:38.006', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:49:00')
2025-11-12T23:53:14.902 [DEBUG] [Thread-24988] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:53:14.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:53:14.987 [DEBUG] [Thread-24991] [transport.py] [_log()] starting thread (client mode): 0x149075e0
2025-11-12T23:53:14.987 [DEBUG] [Thread-24991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:53:15.001 [DEBUG] [Thread-24991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:53:15.001 [INFO] [Thread-24991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] client lang: <none>
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] server lang: <none>
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] kex follows: False
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] Compression: none
2025-11-12T23:53:15.009 [DEBUG] [Thread-24991] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:53:15.066 [DEBUG] [Thread-24991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:53:15.066 [DEBUG] [Thread-24991] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:53:15.066 [DEBUG] [Thread-24991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:53:15.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:53:15.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:53:15.123 [DEBUG] [Thread-24991] [transport.py] [_log()] userauth is OK
2025-11-12T23:53:15.123 [DEBUG] [Thread-24991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:53:15.123 [DEBUG] [Thread-24991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:53:15.123 [DEBUG] [Thread-24991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:53:15.123 [DEBUG] [Thread-24991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:53:15.137 [INFO] [Thread-24991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:53:15.137 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:53:15.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:53:15.959 [DEBUG] [Thread-24991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:53:15.959 [DEBUG] [Thread-24991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:53:16.007 [DEBUG] [Thread-24991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:53:16.007 [DEBUG] [Thread-24991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:53:16.015 [DEBUG] [Thread-24991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:53:16.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:53:16.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-11-12T23:53:16.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-11-12T23:53:16.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:53:16.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:53:16.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:53:16.048 [DEBUG] [Thread-24991] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:53:18.675 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:53:18.676 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:53:26.934 [DEBUG] [Thread-24993 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:53:41.995 [DEBUG] [Thread-24994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:53:46.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:53:46.043 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:53:46.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-11-12T23:53:46.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 53, 31), 6.98, 62.99, 0.0, 9.14, 14.72, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:53:46.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:53:31
2025-11-12T23:53:46.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:53:46.956 [DEBUG] [Thread-24995] [transport.py] [_log()] starting thread (client mode): 0x17344340
2025-11-12T23:53:46.956 [DEBUG] [Thread-24995] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:53:46.979 [DEBUG] [Thread-24995] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:53:46.979 [INFO] [Thread-24995] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] client lang: <none>
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] server lang: <none>
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] kex follows: False
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:53:46.982 [DEBUG] [Thread-24995] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:53:46.983 [DEBUG] [Thread-24995] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:53:46.983 [DEBUG] [Thread-24995] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:53:46.983 [DEBUG] [Thread-24995] [transport.py] [_log()] Compression: none
2025-11-12T23:53:46.983 [DEBUG] [Thread-24995] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:53:47.000 [DEBUG] [Thread-24995] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:53:47.001 [DEBUG] [Thread-24995] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:53:47.002 [DEBUG] [Thread-24995] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:53:47.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:53:47.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:53:47.004 [DEBUG] [Thread-24995] [transport.py] [_log()] userauth is OK
2025-11-12T23:53:47.004 [DEBUG] [Thread-24995] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:53:47.004 [DEBUG] [Thread-24995] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:53:47.004 [DEBUG] [Thread-24995] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:53:47.005 [DEBUG] [Thread-24995] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:53:47.028 [INFO] [Thread-24995] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:53:47.029 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:53:47.690 [DEBUG] [Thread-24995] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:53:47.690 [DEBUG] [Thread-24995] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:53:47.690 [DEBUG] [Thread-24995] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:53:47.731 [DEBUG] [Thread-24995] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:53:47.731 [DEBUG] [Thread-24995] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:53:47.734 [DEBUG] [Thread-24995] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:53:47.748 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:53:47.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:53:47.750 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:53:47.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:53:47.757 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:53:47.759 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:53:47.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:53:47.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:53:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:53:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.911898 -999.00  +15.10   8.52     66   +8.80 1 1 1 1 1     0    0 5.84 -29.82 ZNESW 8.2 8.5 195.2 9.4 15.8 -22.3 15.7 -21.4 15.5 -21.1 15.8 -21.9
2025-11-12T23:53:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:53:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:53:47.760 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.911898
2025-11-12T23:53:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:53:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:53:47.761 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:53:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:53:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:53:47.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:53:31', tmtdew=6.98, humidity=62.99, cloud=0.0, wind=9.14, temperature=14.72, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:53:32', seeing=1.01, atlas_timestamp='2025-11-12T21:53:07.987', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:52:00')
2025-11-12T23:53:47.762 [DEBUG] [Thread-24995] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:53:47.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:53:47.859 [DEBUG] [Thread-24998] [transport.py] [_log()] starting thread (client mode): 0x19dda320
2025-11-12T23:53:47.859 [DEBUG] [Thread-24998] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:53:47.874 [DEBUG] [Thread-24998] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:53:47.874 [INFO] [Thread-24998] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] client lang: <none>
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] server lang: <none>
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] kex follows: False
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:53:47.882 [DEBUG] [Thread-24998] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:53:47.883 [DEBUG] [Thread-24998] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:53:47.883 [DEBUG] [Thread-24998] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:53:47.883 [DEBUG] [Thread-24998] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:53:47.883 [DEBUG] [Thread-24998] [transport.py] [_log()] Compression: none
2025-11-12T23:53:47.883 [DEBUG] [Thread-24998] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:53:47.940 [DEBUG] [Thread-24998] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:53:47.941 [DEBUG] [Thread-24998] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:53:47.941 [DEBUG] [Thread-24998] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:53:47.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:53:47.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:53:48.003 [DEBUG] [Thread-24998] [transport.py] [_log()] userauth is OK
2025-11-12T23:53:48.003 [DEBUG] [Thread-24998] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:53:48.004 [DEBUG] [Thread-24998] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:53:48.004 [DEBUG] [Thread-24998] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:53:48.004 [DEBUG] [Thread-24998] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:53:48.023 [INFO] [Thread-24998] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:53:48.024 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:53:48.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:53:48.903 [DEBUG] [Thread-24998] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:53:48.903 [DEBUG] [Thread-24998] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:53:48.950 [DEBUG] [Thread-24998] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:53:48.951 [DEBUG] [Thread-24998] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:53:48.960 [DEBUG] [Thread-24998] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:53:48.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:53:48.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:53:48.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-11-12T23:53:48.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:53:48.988 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:53:48.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:53:48.996 [DEBUG] [Thread-24998] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:53:57.029 [DEBUG] [Thread-25000 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:54:04.371 [DEBUG] [Thread-25001 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:54:12.081 [DEBUG] [Thread-25002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:54:18.879 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:54:18.880 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:54:19.017 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:54:19.017 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:54:19.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-11-12T23:54:19.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 54, 3), 6.98, 62.99, 0.0, 9.48, 14.7, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:54:19.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:54:03
2025-11-12T23:54:19.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:54:19.947 [DEBUG] [Thread-25003] [transport.py] [_log()] starting thread (client mode): 0x173451e0
2025-11-12T23:54:19.947 [DEBUG] [Thread-25003] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:54:19.967 [DEBUG] [Thread-25003] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:54:19.967 [INFO] [Thread-25003] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] client lang: <none>
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] server lang: <none>
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] kex follows: False
2025-11-12T23:54:19.968 [DEBUG] [Thread-25003] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:54:19.969 [DEBUG] [Thread-25003] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:54:19.969 [DEBUG] [Thread-25003] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:54:19.969 [DEBUG] [Thread-25003] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:54:19.969 [DEBUG] [Thread-25003] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:54:19.969 [DEBUG] [Thread-25003] [transport.py] [_log()] Compression: none
2025-11-12T23:54:19.969 [DEBUG] [Thread-25003] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:54:19.977 [DEBUG] [Thread-25003] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:54:19.977 [DEBUG] [Thread-25003] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:54:19.977 [DEBUG] [Thread-25003] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:54:19.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:54:19.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:54:19.979 [DEBUG] [Thread-25003] [transport.py] [_log()] userauth is OK
2025-11-12T23:54:19.979 [DEBUG] [Thread-25003] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:54:19.980 [DEBUG] [Thread-25003] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:54:19.980 [DEBUG] [Thread-25003] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:54:19.980 [DEBUG] [Thread-25003] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:54:20.016 [INFO] [Thread-25003] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:54:20.017 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:54:20.741 [DEBUG] [Thread-25003] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:54:20.742 [DEBUG] [Thread-25003] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:54:20.742 [DEBUG] [Thread-25003] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:54:20.783 [DEBUG] [Thread-25003] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:54:20.783 [DEBUG] [Thread-25003] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:54:20.786 [DEBUG] [Thread-25003] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:54:20.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:54:20.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:54:20.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:54:20.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:54:20.812 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:54:20.814 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:54:20.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:54:20.815 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:54:20.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:54:20.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.912234 -999.00  +15.10   8.59     66   +8.80 1 1 1 1 1     0    0 5.69 -30.81 ZNESW 6.3 8.6 195.2 9.4 15.9 -22.3 15.7 -21.5 15.5 -21.2 15.8 -21.9
2025-11-12T23:54:20.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:54:20.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:54:20.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.912234
2025-11-12T23:54:20.816 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:54:20.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:54:20.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:54:20.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:54:20.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:54:20.817 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:54:03', tmtdew=6.98, humidity=62.99, cloud=0.0, wind=9.48, temperature=14.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:54:04', seeing=1.01, atlas_timestamp='2025-11-12T21:53:37.018', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:52:00')
2025-11-12T23:54:20.817 [DEBUG] [Thread-25003] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:54:20.901 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:54:20.913 [DEBUG] [Thread-25006] [transport.py] [_log()] starting thread (client mode): 0x1493c760
2025-11-12T23:54:20.914 [DEBUG] [Thread-25006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:54:20.928 [DEBUG] [Thread-25006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:54:20.928 [INFO] [Thread-25006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:54:20.935 [DEBUG] [Thread-25006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:54:20.935 [DEBUG] [Thread-25006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] client lang: <none>
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] server lang: <none>
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] kex follows: False
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] Compression: none
2025-11-12T23:54:20.936 [DEBUG] [Thread-25006] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:54:20.995 [DEBUG] [Thread-25006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:54:20.996 [DEBUG] [Thread-25006] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:54:20.996 [DEBUG] [Thread-25006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:54:20.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:54:20.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:54:21.051 [DEBUG] [Thread-25006] [transport.py] [_log()] userauth is OK
2025-11-12T23:54:21.052 [DEBUG] [Thread-25006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:54:21.052 [DEBUG] [Thread-25006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:54:21.052 [DEBUG] [Thread-25006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:54:21.052 [DEBUG] [Thread-25006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:54:21.071 [INFO] [Thread-25006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:54:21.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:54:21.072 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:54:21.874 [DEBUG] [Thread-25006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:54:21.874 [DEBUG] [Thread-25006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:54:21.922 [DEBUG] [Thread-25006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:54:21.922 [DEBUG] [Thread-25006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:54:21.931 [DEBUG] [Thread-25006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:54:21.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:54:21.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-11-12T23:54:21.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-11-12T23:54:21.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:54:21.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:54:21.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:54:21.975 [DEBUG] [Thread-25006] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:54:27.117 [DEBUG] [Thread-25008 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:54:42.169 [DEBUG] [Thread-25009 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:54:51.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:54:51.993 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:54:51.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-11-12T23:54:52.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 54, 35), 7.02, 63.02, 0.0, 11.49, 14.68, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:54:52.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:54:35
2025-11-12T23:54:52.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:54:52.909 [DEBUG] [Thread-25010] [transport.py] [_log()] starting thread (client mode): 0x149049d0
2025-11-12T23:54:52.909 [DEBUG] [Thread-25010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:54:52.930 [DEBUG] [Thread-25010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:54:52.930 [INFO] [Thread-25010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:54:52.933 [DEBUG] [Thread-25010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] client lang: <none>
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] server lang: <none>
2025-11-12T23:54:52.934 [DEBUG] [Thread-25010] [transport.py] [_log()] kex follows: False
2025-11-12T23:54:52.935 [DEBUG] [Thread-25010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:54:52.935 [DEBUG] [Thread-25010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:54:52.935 [DEBUG] [Thread-25010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:54:52.935 [DEBUG] [Thread-25010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:54:52.935 [DEBUG] [Thread-25010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:54:52.935 [DEBUG] [Thread-25010] [transport.py] [_log()] Compression: none
2025-11-12T23:54:52.935 [DEBUG] [Thread-25010] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:54:52.953 [DEBUG] [Thread-25010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:54:52.954 [DEBUG] [Thread-25010] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:54:52.955 [DEBUG] [Thread-25010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:54:52.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:54:52.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:54:52.957 [DEBUG] [Thread-25010] [transport.py] [_log()] userauth is OK
2025-11-12T23:54:52.957 [DEBUG] [Thread-25010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:54:52.957 [DEBUG] [Thread-25010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:54:52.958 [DEBUG] [Thread-25010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:54:52.958 [DEBUG] [Thread-25010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:54:52.975 [INFO] [Thread-25010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:54:52.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:54:53.629 [DEBUG] [Thread-25010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:54:53.629 [DEBUG] [Thread-25010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:54:53.630 [DEBUG] [Thread-25010] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:54:53.670 [DEBUG] [Thread-25010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:54:53.670 [DEBUG] [Thread-25010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:54:53.674 [DEBUG] [Thread-25010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:54:53.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:54:53.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:54:53.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:54:53.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:54:53.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:54:53.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:54:53.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:54:53.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:54:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:54:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.912593 -999.00  +15.10   6.93     66   +8.80 1 1 1 1 1     0    0 5.71 -31.10 ZNESW 6.3 6.9 191.0 8.8 15.8 -22.3 15.7 -21.5 15.5 -21.1 15.8 -21.9
2025-11-12T23:54:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:54:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:54:53.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.912593
2025-11-12T23:54:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:54:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:54:53.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:54:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:54:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:54:53.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:54:35', tmtdew=7.02, humidity=63.02, cloud=0.0, wind=11.49, temperature=14.68, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:54:36', seeing=1.22, atlas_timestamp='2025-11-12T21:54:08.035', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:52:00')
2025-11-12T23:54:53.701 [DEBUG] [Thread-25010] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:54:53.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:54:53.804 [DEBUG] [Thread-25013] [transport.py] [_log()] starting thread (client mode): 0x1737cdf0
2025-11-12T23:54:53.805 [DEBUG] [Thread-25013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:54:53.819 [DEBUG] [Thread-25013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:54:53.820 [INFO] [Thread-25013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:54:53.827 [DEBUG] [Thread-25013] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:54:53.827 [DEBUG] [Thread-25013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:54:53.827 [DEBUG] [Thread-25013] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:54:53.827 [DEBUG] [Thread-25013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:54:53.827 [DEBUG] [Thread-25013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] client lang: <none>
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] server lang: <none>
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] kex follows: False
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] Compression: none
2025-11-12T23:54:53.828 [DEBUG] [Thread-25013] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:54:53.887 [DEBUG] [Thread-25013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:54:53.888 [DEBUG] [Thread-25013] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:54:53.888 [DEBUG] [Thread-25013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:54:53.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:54:53.889 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:54:53.944 [DEBUG] [Thread-25013] [transport.py] [_log()] userauth is OK
2025-11-12T23:54:53.944 [DEBUG] [Thread-25013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:54:53.944 [DEBUG] [Thread-25013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:54:53.944 [DEBUG] [Thread-25013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:54:53.944 [DEBUG] [Thread-25013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:54:53.963 [INFO] [Thread-25013] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:54:53.963 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:54:53.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:54:54.807 [DEBUG] [Thread-25013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:54:54.807 [DEBUG] [Thread-25013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:54:54.856 [DEBUG] [Thread-25013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:54:54.856 [DEBUG] [Thread-25013] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:54:54.865 [DEBUG] [Thread-25013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:54:54.874 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:54:54.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-11-12T23:54:54.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-11-12T23:54:54.891 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:54:54.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:54:54.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:54:54.900 [DEBUG] [Thread-25013] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:54:57.206 [DEBUG] [Thread-25015 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:55:04.429 [DEBUG] [Thread-25016 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:55:12.250 [DEBUG] [Thread-25017 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:55:19.083 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:55:19.084 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:55:24.922 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:55:24.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:55:24.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-11-12T23:55:25.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 55, 7), 7.02, 63.02, 0.0, 11.4, 14.67, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:55:25.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:55:07
2025-11-12T23:55:25.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:55:25.823 [DEBUG] [Thread-25018] [transport.py] [_log()] starting thread (client mode): 0x1737e440
2025-11-12T23:55:25.823 [DEBUG] [Thread-25018] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:55:25.843 [DEBUG] [Thread-25018] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:55:25.843 [INFO] [Thread-25018] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] client lang: <none>
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] server lang: <none>
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] kex follows: False
2025-11-12T23:55:25.845 [DEBUG] [Thread-25018] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:55:25.846 [DEBUG] [Thread-25018] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:55:25.846 [DEBUG] [Thread-25018] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:55:25.846 [DEBUG] [Thread-25018] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:55:25.846 [DEBUG] [Thread-25018] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:55:25.846 [DEBUG] [Thread-25018] [transport.py] [_log()] Compression: none
2025-11-12T23:55:25.846 [DEBUG] [Thread-25018] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:55:25.865 [DEBUG] [Thread-25018] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:55:25.865 [DEBUG] [Thread-25018] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:55:25.866 [DEBUG] [Thread-25018] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:55:25.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:55:25.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:55:25.868 [DEBUG] [Thread-25018] [transport.py] [_log()] userauth is OK
2025-11-12T23:55:25.868 [DEBUG] [Thread-25018] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:55:25.868 [DEBUG] [Thread-25018] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:55:25.868 [DEBUG] [Thread-25018] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:55:25.868 [DEBUG] [Thread-25018] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:55:25.892 [INFO] [Thread-25018] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:55:25.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:55:26.611 [DEBUG] [Thread-25018] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:55:26.611 [DEBUG] [Thread-25018] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:55:26.612 [DEBUG] [Thread-25018] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:55:26.652 [DEBUG] [Thread-25018] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:55:26.653 [DEBUG] [Thread-25018] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:55:26.655 [DEBUG] [Thread-25018] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:55:26.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:55:26.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:55:26.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:55:26.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:55:26.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:55:26.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:55:26.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:55:26.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:55:26.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:55:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.912940 -999.00  +15.00   6.83     66   +8.70 1 1 1 1 1     0    0 5.76 -29.52 ZNESW 9.2 6.8 189.2 9.2 15.8 -22.4 15.7 -21.4 15.5 -21.2 15.8 -22.1
2025-11-12T23:55:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:55:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:55:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.912940
2025-11-12T23:55:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:55:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:55:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:55:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:55:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:55:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:55:07', tmtdew=7.02, humidity=63.02, cloud=0.0, wind=11.4, temperature=14.67, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:55:08', seeing=1.24, atlas_timestamp='2025-11-12T21:54:38.016', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:52:00')
2025-11-12T23:55:26.682 [DEBUG] [Thread-25018] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:55:26.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:55:26.778 [DEBUG] [Thread-25021] [transport.py] [_log()] starting thread (client mode): 0x1737c3d0
2025-11-12T23:55:26.778 [DEBUG] [Thread-25021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:55:26.793 [DEBUG] [Thread-25021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:55:26.793 [INFO] [Thread-25021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:55:26.800 [DEBUG] [Thread-25021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:55:26.801 [DEBUG] [Thread-25021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:55:26.801 [DEBUG] [Thread-25021] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:55:26.801 [DEBUG] [Thread-25021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:55:26.801 [DEBUG] [Thread-25021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:55:26.801 [DEBUG] [Thread-25021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:55:26.801 [DEBUG] [Thread-25021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:55:26.802 [DEBUG] [Thread-25021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:55:26.802 [DEBUG] [Thread-25021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:55:26.802 [DEBUG] [Thread-25021] [transport.py] [_log()] client lang: <none>
2025-11-12T23:55:26.802 [DEBUG] [Thread-25021] [transport.py] [_log()] server lang: <none>
2025-11-12T23:55:26.802 [DEBUG] [Thread-25021] [transport.py] [_log()] kex follows: False
2025-11-12T23:55:26.802 [DEBUG] [Thread-25021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:55:26.802 [DEBUG] [Thread-25021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:55:26.802 [DEBUG] [Thread-25021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:55:26.803 [DEBUG] [Thread-25021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:55:26.803 [DEBUG] [Thread-25021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:55:26.803 [DEBUG] [Thread-25021] [transport.py] [_log()] Compression: none
2025-11-12T23:55:26.803 [DEBUG] [Thread-25021] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:55:26.862 [DEBUG] [Thread-25021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:55:26.863 [DEBUG] [Thread-25021] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:55:26.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:55:26.864 [DEBUG] [Thread-25021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:55:26.865 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:55:26.920 [DEBUG] [Thread-25021] [transport.py] [_log()] userauth is OK
2025-11-12T23:55:26.920 [DEBUG] [Thread-25021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:55:26.920 [DEBUG] [Thread-25021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:55:26.920 [DEBUG] [Thread-25021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:55:26.920 [DEBUG] [Thread-25021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:55:26.943 [INFO] [Thread-25021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:55:26.943 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:55:26.944 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:55:27.282 [DEBUG] [Thread-25023 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:55:27.779 [DEBUG] [Thread-25021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:55:27.780 [DEBUG] [Thread-25021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:55:27.828 [DEBUG] [Thread-25021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:55:27.828 [DEBUG] [Thread-25021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:55:27.837 [DEBUG] [Thread-25021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:55:27.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:55:27.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-11-12T23:55:27.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:55:27.866 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:55:27.866 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:55:27.867 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:55:27.875 [DEBUG] [Thread-25021] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:55:42.348 [DEBUG] [Thread-25024 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:55:57.382 [DEBUG] [Thread-25025 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:55:57.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:55:57.897 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:55:57.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-11-12T23:55:58.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 55, 39), 6.96, 62.59, 0.0, 11.45, 14.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:55:58.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:55:39
2025-11-12T23:55:58.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:55:58.805 [DEBUG] [Thread-25026] [transport.py] [_log()] starting thread (client mode): 0x1737e170
2025-11-12T23:55:58.805 [DEBUG] [Thread-25026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:55:58.825 [DEBUG] [Thread-25026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:55:58.825 [INFO] [Thread-25026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:55:58.828 [DEBUG] [Thread-25026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] client lang: <none>
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] server lang: <none>
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] kex follows: False
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:55:58.829 [DEBUG] [Thread-25026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:55:58.830 [DEBUG] [Thread-25026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:55:58.830 [DEBUG] [Thread-25026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:55:58.830 [DEBUG] [Thread-25026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:55:58.830 [DEBUG] [Thread-25026] [transport.py] [_log()] Compression: none
2025-11-12T23:55:58.830 [DEBUG] [Thread-25026] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:55:58.847 [DEBUG] [Thread-25026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:55:58.848 [DEBUG] [Thread-25026] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:55:58.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:55:58.850 [DEBUG] [Thread-25026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:55:58.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:55:58.852 [DEBUG] [Thread-25026] [transport.py] [_log()] userauth is OK
2025-11-12T23:55:58.852 [DEBUG] [Thread-25026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:55:58.852 [DEBUG] [Thread-25026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:55:58.853 [DEBUG] [Thread-25026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:55:58.853 [DEBUG] [Thread-25026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:55:58.876 [INFO] [Thread-25026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:55:58.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:55:59.533 [DEBUG] [Thread-25026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:55:59.533 [DEBUG] [Thread-25026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:55:59.533 [DEBUG] [Thread-25026] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:55:59.573 [DEBUG] [Thread-25026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:55:59.574 [DEBUG] [Thread-25026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:55:59.577 [DEBUG] [Thread-25026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:55:59.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:55:59.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:55:59.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:55:59.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:55:59.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:55:59.602 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:55:59.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:55:59.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:55:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:55:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.913287 -999.00  +15.00   6.41     66   +8.70 1 1 1 1 1     0    0 5.76 -30.95 ZNESW 7.7 6.4 195.1 9.7 15.8 -22.4 15.6 -21.4 15.4 -21.2 15.7 -22.2
2025-11-12T23:55:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:55:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:55:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.913287
2025-11-12T23:55:59.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:55:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:55:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:55:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:55:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:55:59.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:55:39', tmtdew=6.96, humidity=62.59, cloud=0.0, wind=11.45, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:55:40', seeing=1.09, atlas_timestamp='2025-11-12T21:55:07.997', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:52:00')
2025-11-12T23:55:59.605 [DEBUG] [Thread-25026] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:55:59.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:55:59.714 [DEBUG] [Thread-25029] [transport.py] [_log()] starting thread (client mode): 0x17347b20
2025-11-12T23:55:59.714 [DEBUG] [Thread-25029] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:55:59.728 [DEBUG] [Thread-25029] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:55:59.729 [INFO] [Thread-25029] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:55:59.736 [DEBUG] [Thread-25029] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] client lang: <none>
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] server lang: <none>
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] kex follows: False
2025-11-12T23:55:59.737 [DEBUG] [Thread-25029] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:55:59.738 [DEBUG] [Thread-25029] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:55:59.738 [DEBUG] [Thread-25029] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:55:59.738 [DEBUG] [Thread-25029] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:55:59.738 [DEBUG] [Thread-25029] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:55:59.738 [DEBUG] [Thread-25029] [transport.py] [_log()] Compression: none
2025-11-12T23:55:59.738 [DEBUG] [Thread-25029] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:55:59.796 [DEBUG] [Thread-25029] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:55:59.796 [DEBUG] [Thread-25029] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:55:59.797 [DEBUG] [Thread-25029] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:55:59.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:55:59.798 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:55:59.852 [DEBUG] [Thread-25029] [transport.py] [_log()] userauth is OK
2025-11-12T23:55:59.852 [DEBUG] [Thread-25029] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:55:59.852 [DEBUG] [Thread-25029] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:55:59.852 [DEBUG] [Thread-25029] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:55:59.852 [DEBUG] [Thread-25029] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:55:59.871 [INFO] [Thread-25029] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:55:59.872 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:55:59.872 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:56:00.713 [DEBUG] [Thread-25029] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:56:00.713 [DEBUG] [Thread-25029] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:56:00.761 [DEBUG] [Thread-25029] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:56:00.761 [DEBUG] [Thread-25029] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:56:00.771 [DEBUG] [Thread-25029] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:56:00.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:56:00.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-11-12T23:56:00.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-11-12T23:56:00.797 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:56:00.797 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:56:00.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:56:00.806 [DEBUG] [Thread-25029] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:56:04.492 [DEBUG] [Thread-25031 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:56:12.419 [DEBUG] [Thread-25032 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:56:19.289 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:56:19.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:56:27.460 [DEBUG] [Thread-25033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:56:30.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:56:30.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:56:30.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-11-12T23:56:31.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 56, 11), 6.95, 62.62, 0.0, 12.0, 14.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:56:31.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:56:11
2025-11-12T23:56:31.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:56:31.728 [DEBUG] [Thread-25034] [transport.py] [_log()] starting thread (client mode): 0x14904910
2025-11-12T23:56:31.728 [DEBUG] [Thread-25034] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:56:31.750 [DEBUG] [Thread-25034] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:56:31.750 [INFO] [Thread-25034] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:56:31.753 [DEBUG] [Thread-25034] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] client lang: <none>
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] server lang: <none>
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] kex follows: False
2025-11-12T23:56:31.754 [DEBUG] [Thread-25034] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:56:31.755 [DEBUG] [Thread-25034] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:56:31.755 [DEBUG] [Thread-25034] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:56:31.755 [DEBUG] [Thread-25034] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:56:31.755 [DEBUG] [Thread-25034] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:56:31.755 [DEBUG] [Thread-25034] [transport.py] [_log()] Compression: none
2025-11-12T23:56:31.755 [DEBUG] [Thread-25034] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:56:31.764 [DEBUG] [Thread-25034] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:56:31.765 [DEBUG] [Thread-25034] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:56:31.765 [DEBUG] [Thread-25034] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:56:31.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:56:31.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:56:31.767 [DEBUG] [Thread-25034] [transport.py] [_log()] userauth is OK
2025-11-12T23:56:31.767 [DEBUG] [Thread-25034] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:56:31.767 [DEBUG] [Thread-25034] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:56:31.767 [DEBUG] [Thread-25034] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:56:31.767 [DEBUG] [Thread-25034] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:56:31.781 [INFO] [Thread-25034] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:56:31.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:56:32.547 [DEBUG] [Thread-25034] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:56:32.548 [DEBUG] [Thread-25034] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:56:32.548 [DEBUG] [Thread-25034] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:56:32.588 [DEBUG] [Thread-25034] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:56:32.589 [DEBUG] [Thread-25034] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:56:32.592 [DEBUG] [Thread-25034] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:56:32.602 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:56:32.603 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:56:32.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:56:32.606 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:56:32.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:56:32.613 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:56:32.613 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:56:32.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:56:32.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:56:32.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.913981 -999.00  +14.90   7.06     66   +8.70 1 1 1 1 1     0    0 5.60 -34.26 ZNESW 8.7 7.1 208.4 9.7 15.7 -22.5 15.7 -21.7 15.4 -21.2 15.7 -22.0
2025-11-12T23:56:32.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:56:32.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:56:32.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.913981
2025-11-12T23:56:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:56:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:56:32.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:56:32.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:56:32.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:56:32.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:56:11', tmtdew=6.95, humidity=62.62, cloud=0.0, wind=12.0, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:56:12', seeing=1.09, atlas_timestamp='2025-11-12T21:56:07.958', atlas_cloud=1, atlas_rain=1, zp_data=[0.4507499999999993, 0.31675000000000075, 0.35325000000000095, 0.3620000000000001, 0.2654999999999994, 0.4217500000000012, 0.6254999999999997, 0.593250000000002, 0.4394999999999989, 0.48400000000000176, 0.348749999999999, 0.3119999999999994, 0.25900000000000034, 0.33975000000000044, 0.45500000000000007, 0.6559999999999997, 0.34224999999999994, 0.7279999999999998, 0.599499999999999, 0.46674999999999933, 0.4029999999999987, 0.4557499999999983, 0.49625000000000075, 0.7907500000000001, 0.4139999999999997, 0.7629999999999999, 0.5117500000000001, 0.40549999999999997, 0.944, 1.4330000000000016, 0.6410000000000009, 0.6370000000000005, 0.9787499999999989], zp_timestamp='2025-11-12T21:52:00')
2025-11-12T23:56:32.616 [DEBUG] [Thread-25034] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:56:32.700 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:56:32.714 [DEBUG] [Thread-25037] [transport.py] [_log()] starting thread (client mode): 0x1493f970
2025-11-12T23:56:32.714 [DEBUG] [Thread-25037] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:56:32.728 [DEBUG] [Thread-25037] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:56:32.728 [INFO] [Thread-25037] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:56:32.736 [DEBUG] [Thread-25037] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:56:32.736 [DEBUG] [Thread-25037] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] client lang: <none>
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] server lang: <none>
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] kex follows: False
2025-11-12T23:56:32.737 [DEBUG] [Thread-25037] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:56:32.738 [DEBUG] [Thread-25037] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:56:32.738 [DEBUG] [Thread-25037] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:56:32.738 [DEBUG] [Thread-25037] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:56:32.738 [DEBUG] [Thread-25037] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:56:32.738 [DEBUG] [Thread-25037] [transport.py] [_log()] Compression: none
2025-11-12T23:56:32.738 [DEBUG] [Thread-25037] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:56:32.795 [DEBUG] [Thread-25037] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:56:32.796 [DEBUG] [Thread-25037] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:56:32.796 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:56:32.797 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:56:32.798 [DEBUG] [Thread-25037] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:56:32.852 [DEBUG] [Thread-25037] [transport.py] [_log()] userauth is OK
2025-11-12T23:56:32.852 [DEBUG] [Thread-25037] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:56:32.852 [DEBUG] [Thread-25037] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:56:32.852 [DEBUG] [Thread-25037] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:56:32.852 [DEBUG] [Thread-25037] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:56:32.870 [INFO] [Thread-25037] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:56:32.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:56:32.871 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:56:33.704 [DEBUG] [Thread-25037] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:56:33.704 [DEBUG] [Thread-25037] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:56:33.753 [DEBUG] [Thread-25037] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:56:33.753 [DEBUG] [Thread-25037] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:56:33.762 [DEBUG] [Thread-25037] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:56:33.771 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:56:33.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-11-12T23:56:33.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-12T23:56:33.790 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:56:33.790 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:56:33.791 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:56:33.799 [DEBUG] [Thread-25037] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:56:42.492 [DEBUG] [Thread-25039 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:56:57.545 [DEBUG] [Thread-25040 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:56:59.455 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:03.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:57:03.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:57:03.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-11-12T23:57:04.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 56, 43), 6.88, 63.19, 0.0, 10.71, 14.62, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:57:04.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:56:43
2025-11-12T23:57:04.548 [DEBUG] [Thread-25041 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:04.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:57:04.596 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:04.725 [DEBUG] [Thread-25042] [transport.py] [_log()] starting thread (client mode): 0x14904490
2025-11-12T23:57:04.725 [DEBUG] [Thread-25042] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:57:04.745 [DEBUG] [Thread-25042] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:57:04.745 [INFO] [Thread-25042] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] client lang: <none>
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] server lang: <none>
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] kex follows: False
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] Compression: none
2025-11-12T23:57:04.748 [DEBUG] [Thread-25042] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:57:04.766 [DEBUG] [Thread-25042] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:57:04.766 [DEBUG] [Thread-25042] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:57:04.766 [DEBUG] [Thread-25042] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:57:04.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:57:04.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:57:04.766 [DEBUG] [Thread-25042] [transport.py] [_log()] userauth is OK
2025-11-12T23:57:04.766 [DEBUG] [Thread-25042] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:57:04.766 [DEBUG] [Thread-25042] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:57:04.766 [DEBUG] [Thread-25042] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:57:04.766 [DEBUG] [Thread-25042] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:57:04.776 [INFO] [Thread-25042] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:57:04.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:57:05.434 [DEBUG] [Thread-25042] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:57:05.434 [DEBUG] [Thread-25042] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:57:05.434 [DEBUG] [Thread-25042] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:57:05.475 [DEBUG] [Thread-25042] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:57:05.475 [DEBUG] [Thread-25042] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:57:05.477 [DEBUG] [Thread-25042] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:57:05.499 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:57:05.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:57:05.500 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:57:05.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:57:05.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:57:05.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:57:05.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.914329 -999.00  +14.90   6.39     66   +8.70 1 1 1 1 1     0    0 5.59 -34.87 ZNESW 4.0 6.4 221.3 9.3 15.7 -22.3 15.6 -21.3 15.4 -21.1 15.7 -21.9
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.914329
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:57:05.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:56:43', tmtdew=6.88, humidity=63.19, cloud=0.0, wind=10.71, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:56:44', seeing=1.09, atlas_timestamp='2025-11-12T21:56:38.026', atlas_cloud=1, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:55:00')
2025-11-12T23:57:05.506 [DEBUG] [Thread-25042] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:57:05.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:57:05.591 [DEBUG] [Thread-25045] [transport.py] [_log()] starting thread (client mode): 0x1493c400
2025-11-12T23:57:05.592 [DEBUG] [Thread-25045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:57:05.606 [DEBUG] [Thread-25045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:57:05.606 [INFO] [Thread-25045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] client lang: <none>
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] server lang: <none>
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] kex follows: False
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:57:05.613 [DEBUG] [Thread-25045] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:57:05.614 [DEBUG] [Thread-25045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:57:05.614 [DEBUG] [Thread-25045] [transport.py] [_log()] Compression: none
2025-11-12T23:57:05.614 [DEBUG] [Thread-25045] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:57:05.670 [DEBUG] [Thread-25045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:57:05.670 [DEBUG] [Thread-25045] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:57:05.670 [DEBUG] [Thread-25045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:57:05.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:57:05.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:57:05.727 [DEBUG] [Thread-25045] [transport.py] [_log()] userauth is OK
2025-11-12T23:57:05.727 [DEBUG] [Thread-25045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:57:05.727 [DEBUG] [Thread-25045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:57:05.727 [DEBUG] [Thread-25045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:57:05.727 [DEBUG] [Thread-25045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:57:05.740 [INFO] [Thread-25045] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:57:05.740 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:57:05.740 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:57:06.595 [DEBUG] [Thread-25045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:57:06.595 [DEBUG] [Thread-25045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:57:06.643 [DEBUG] [Thread-25045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:57:06.643 [DEBUG] [Thread-25045] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:57:06.651 [DEBUG] [Thread-25045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:57:06.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:57:06.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-11-12T23:57:06.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-11-12T23:57:06.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:57:06.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:57:06.674 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:57:06.682 [DEBUG] [Thread-25045] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:57:07.640 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:12.579 [DEBUG] [Thread-25047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:13.005 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:19.493 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:19.494 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:27.634 [DEBUG] [Thread-25048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:36.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:57:36.701 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:57:36.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-11-12T23:57:37.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 57, 15), 6.87, 63.27, 0.0, 11.91, 14.65, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:57:37.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:57:15
2025-11-12T23:57:37.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:57:37.598 [DEBUG] [Thread-25049] [transport.py] [_log()] starting thread (client mode): 0x1737d210
2025-11-12T23:57:37.598 [DEBUG] [Thread-25049] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:57:37.618 [DEBUG] [Thread-25049] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:57:37.618 [INFO] [Thread-25049] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:57:37.621 [DEBUG] [Thread-25049] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] client lang: <none>
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] server lang: <none>
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] kex follows: False
2025-11-12T23:57:37.622 [DEBUG] [Thread-25049] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:57:37.623 [DEBUG] [Thread-25049] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:57:37.623 [DEBUG] [Thread-25049] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:57:37.623 [DEBUG] [Thread-25049] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:57:37.623 [DEBUG] [Thread-25049] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:57:37.623 [DEBUG] [Thread-25049] [transport.py] [_log()] Compression: none
2025-11-12T23:57:37.623 [DEBUG] [Thread-25049] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:57:37.641 [DEBUG] [Thread-25049] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:57:37.642 [DEBUG] [Thread-25049] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:57:37.643 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:57:37.643 [DEBUG] [Thread-25049] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:57:37.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:57:37.645 [DEBUG] [Thread-25049] [transport.py] [_log()] userauth is OK
2025-11-12T23:57:37.645 [DEBUG] [Thread-25049] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:57:37.645 [DEBUG] [Thread-25049] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:57:37.645 [DEBUG] [Thread-25049] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:57:37.645 [DEBUG] [Thread-25049] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:57:37.668 [INFO] [Thread-25049] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:57:37.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:57:38.478 [DEBUG] [Thread-25049] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:57:38.478 [DEBUG] [Thread-25049] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:57:38.479 [DEBUG] [Thread-25049] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:57:38.518 [DEBUG] [Thread-25049] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:57:38.519 [DEBUG] [Thread-25049] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:57:38.522 [DEBUG] [Thread-25049] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:57:38.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:57:38.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:57:38.530 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:57:38.532 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:57:38.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:57:38.539 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:57:38.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:57:38.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:57:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:57:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.914676 -999.00  +14.90   6.05     66   +8.70 1 1 1 1 1     0    0 5.45 -36.68 ZNESW 6.5 6.0 203.5 10.8 15.8 -22.3 15.7 -21.3 15.4 -21.1 15.7 -21.9
2025-11-12T23:57:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:57:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:57:38.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.914676
2025-11-12T23:57:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:57:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:57:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:57:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:57:38.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:57:38.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:57:15', tmtdew=6.87, humidity=63.27, cloud=0.0, wind=11.91, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:57:16', seeing=1.23, atlas_timestamp='2025-11-12T21:57:08.006', atlas_cloud=1, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:55:00')
2025-11-12T23:57:38.542 [DEBUG] [Thread-25049] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:57:38.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:57:38.639 [DEBUG] [Thread-25052] [transport.py] [_log()] starting thread (client mode): 0x17346950
2025-11-12T23:57:38.639 [DEBUG] [Thread-25052] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:57:38.654 [DEBUG] [Thread-25052] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:57:38.654 [INFO] [Thread-25052] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:57:38.662 [DEBUG] [Thread-25052] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:57:38.662 [DEBUG] [Thread-25052] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:57:38.662 [DEBUG] [Thread-25052] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:57:38.662 [DEBUG] [Thread-25052] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:57:38.662 [DEBUG] [Thread-25052] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:57:38.662 [DEBUG] [Thread-25052] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:57:38.663 [DEBUG] [Thread-25052] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:57:38.663 [DEBUG] [Thread-25052] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:57:38.663 [DEBUG] [Thread-25052] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:57:38.663 [DEBUG] [Thread-25052] [transport.py] [_log()] client lang: <none>
2025-11-12T23:57:38.663 [DEBUG] [Thread-25052] [transport.py] [_log()] server lang: <none>
2025-11-12T23:57:38.663 [DEBUG] [Thread-25052] [transport.py] [_log()] kex follows: False
2025-11-12T23:57:38.663 [DEBUG] [Thread-25052] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:57:38.663 [DEBUG] [Thread-25052] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:57:38.664 [DEBUG] [Thread-25052] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:57:38.664 [DEBUG] [Thread-25052] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:57:38.664 [DEBUG] [Thread-25052] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:57:38.664 [DEBUG] [Thread-25052] [transport.py] [_log()] Compression: none
2025-11-12T23:57:38.664 [DEBUG] [Thread-25052] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:57:38.720 [DEBUG] [Thread-25052] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:57:38.721 [DEBUG] [Thread-25052] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:57:38.721 [DEBUG] [Thread-25052] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:57:38.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:57:38.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:57:38.779 [DEBUG] [Thread-25052] [transport.py] [_log()] userauth is OK
2025-11-12T23:57:38.780 [DEBUG] [Thread-25052] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:57:38.780 [DEBUG] [Thread-25052] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:57:38.780 [DEBUG] [Thread-25052] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:57:38.780 [DEBUG] [Thread-25052] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:57:38.798 [INFO] [Thread-25052] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:57:38.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:57:38.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:57:39.619 [DEBUG] [Thread-25052] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:57:39.620 [DEBUG] [Thread-25052] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:57:39.667 [DEBUG] [Thread-25052] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:57:39.668 [DEBUG] [Thread-25052] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:57:39.677 [DEBUG] [Thread-25052] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:57:39.686 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:57: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')
2025-11-12T23:57:39.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-11-12T23:57:39.705 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:57:39.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:57:39.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:57:39.713 [DEBUG] [Thread-25052] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:57:42.674 [DEBUG] [Thread-25054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:57:57.724 [DEBUG] [Thread-25055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:58:04.620 [DEBUG] [Thread-25056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:58:09.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:58:09.736 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:58:09.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-11-12T23:58:10.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 57, 47), 6.91, 63.32, 0.0, 12.48, 14.73, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:58:10.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:57:47
2025-11-12T23:58:10.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:58:10.631 [DEBUG] [Thread-25057] [transport.py] [_log()] starting thread (client mode): 0x173468f0
2025-11-12T23:58:10.631 [DEBUG] [Thread-25057] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:58:10.652 [DEBUG] [Thread-25057] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:58:10.652 [INFO] [Thread-25057] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] client lang: <none>
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] server lang: <none>
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] kex follows: False
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] Compression: none
2025-11-12T23:58:10.655 [DEBUG] [Thread-25057] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:58:10.675 [DEBUG] [Thread-25057] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:58:10.676 [DEBUG] [Thread-25057] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:58:10.676 [DEBUG] [Thread-25057] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:58:10.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:58:10.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:58:10.721 [DEBUG] [Thread-25057] [transport.py] [_log()] userauth is OK
2025-11-12T23:58:10.721 [DEBUG] [Thread-25057] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:58:10.721 [DEBUG] [Thread-25057] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:58:10.722 [DEBUG] [Thread-25057] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:58:10.722 [DEBUG] [Thread-25057] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:58:10.754 [INFO] [Thread-25057] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:58:10.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:58:11.393 [DEBUG] [Thread-25057] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:58:11.393 [DEBUG] [Thread-25057] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:58:11.393 [DEBUG] [Thread-25057] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:58:11.434 [DEBUG] [Thread-25057] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:58:11.434 [DEBUG] [Thread-25057] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:58:11.437 [DEBUG] [Thread-25057] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:58:11.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:58:11.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:58:11.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:58:11.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:58:11.458 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:58:11.460 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:58:11.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:58:11.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:58:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:58:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.915023 -999.00  +14.90   7.17     66   +8.70 1 1 1 1 1     0    0 5.35 -39.87 ZNESW 7.5 7.2 227.9 8.9 15.7 -22.3 15.6 -21.3 15.4 -21.1 15.7 -21.9
2025-11-12T23:58:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:58:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:58:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.915023
2025-11-12T23:58:11.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:58:11.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:58:11.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:58:11.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:58:11.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-12T23:58:11.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:57:47', tmtdew=6.91, humidity=63.32, cloud=0.0, wind=12.48, temperature=14.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:57:48', seeing=1.18, atlas_timestamp='2025-11-12T21:57:37.987', atlas_cloud=1, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:55:00')
2025-11-12T23:58:11.463 [DEBUG] [Thread-25057] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:58:11.546 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:58:11.558 [DEBUG] [Thread-25060] [transport.py] [_log()] starting thread (client mode): 0x1737dc90
2025-11-12T23:58:11.559 [DEBUG] [Thread-25060] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:58:11.574 [DEBUG] [Thread-25060] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:58:11.574 [INFO] [Thread-25060] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] client lang: <none>
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] server lang: <none>
2025-11-12T23:58:11.582 [DEBUG] [Thread-25060] [transport.py] [_log()] kex follows: False
2025-11-12T23:58:11.583 [DEBUG] [Thread-25060] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:58:11.583 [DEBUG] [Thread-25060] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:58:11.583 [DEBUG] [Thread-25060] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:58:11.583 [DEBUG] [Thread-25060] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:58:11.583 [DEBUG] [Thread-25060] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:58:11.583 [DEBUG] [Thread-25060] [transport.py] [_log()] Compression: none
2025-11-12T23:58:11.583 [DEBUG] [Thread-25060] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:58:11.639 [DEBUG] [Thread-25060] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:58:11.640 [DEBUG] [Thread-25060] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:58:11.640 [DEBUG] [Thread-25060] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:58:11.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:58:11.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:58:11.696 [DEBUG] [Thread-25060] [transport.py] [_log()] userauth is OK
2025-11-12T23:58:11.696 [DEBUG] [Thread-25060] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:58:11.696 [DEBUG] [Thread-25060] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:58:11.696 [DEBUG] [Thread-25060] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:58:11.696 [DEBUG] [Thread-25060] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:58:11.715 [INFO] [Thread-25060] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:58:11.716 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:58:11.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:58:12.534 [DEBUG] [Thread-25060] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:58:12.534 [DEBUG] [Thread-25060] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:58:12.583 [DEBUG] [Thread-25060] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:58:12.583 [DEBUG] [Thread-25060] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:58:12.592 [DEBUG] [Thread-25060] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:58:12.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:58:12.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:58:12.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-11-12T23:58:12.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:58:12.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:58:12.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:58:12.628 [DEBUG] [Thread-25060] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:58:12.765 [DEBUG] [Thread-25062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:58:19.698 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:58:19.699 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:58:27.809 [DEBUG] [Thread-25063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:58:42.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:58:42.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:58:42.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-12T23:58:42.841 [DEBUG] [Thread-25064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:58:43.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 58, 19), 6.89, 63.4, 0.0, 12.55, 14.78, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:58:43.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:58:19
2025-11-12T23:58:43.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:58:43.562 [DEBUG] [Thread-25065] [transport.py] [_log()] starting thread (client mode): 0x1493ded0
2025-11-12T23:58:43.562 [DEBUG] [Thread-25065] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:58:43.582 [DEBUG] [Thread-25065] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:58:43.582 [INFO] [Thread-25065] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:58:43.585 [DEBUG] [Thread-25065] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] client lang: <none>
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] server lang: <none>
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] kex follows: False
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:58:43.586 [DEBUG] [Thread-25065] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:58:43.587 [DEBUG] [Thread-25065] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:58:43.587 [DEBUG] [Thread-25065] [transport.py] [_log()] Compression: none
2025-11-12T23:58:43.587 [DEBUG] [Thread-25065] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:58:43.606 [DEBUG] [Thread-25065] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:58:43.607 [DEBUG] [Thread-25065] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:58:43.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:58:43.608 [DEBUG] [Thread-25065] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:58:43.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:58:43.611 [DEBUG] [Thread-25065] [transport.py] [_log()] userauth is OK
2025-11-12T23:58:43.611 [DEBUG] [Thread-25065] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:58:43.611 [DEBUG] [Thread-25065] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:58:43.611 [DEBUG] [Thread-25065] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:58:43.611 [DEBUG] [Thread-25065] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:58:43.626 [INFO] [Thread-25065] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:58:43.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:58:44.246 [DEBUG] [Thread-25065] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:58:44.247 [DEBUG] [Thread-25065] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:58:44.247 [DEBUG] [Thread-25065] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:58:44.288 [DEBUG] [Thread-25065] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:58:44.288 [DEBUG] [Thread-25065] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:58:44.291 [DEBUG] [Thread-25065] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:58:44.306 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:58:44.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:58:44.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:58:44.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:58:44.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:58:44.318 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:58:44.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:58:44.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:58:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:58:44.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.915370 -999.00  +14.90   6.26     66   +8.80 1 2 1 1 1     0    0 5.50 -36.71 ZNESw 8.7 6.3 217.2 10.5 15.7 -22.3 15.6 -21.4 15.4 -21.1 15.7 -21.8
2025-11-12T23:58:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:58:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:58:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.915370
2025-11-12T23:58:44.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:58:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:58:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:58:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:58:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:58:44.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:58:19', tmtdew=6.89, humidity=63.4, cloud=0.0, wind=12.55, temperature=14.78, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:58:21', seeing=1.18, atlas_timestamp='2025-11-12T21:58:07.968', atlas_cloud=2, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:55:00')
2025-11-12T23:58:44.321 [DEBUG] [Thread-25065] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:58:44.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:58:44.417 [DEBUG] [Thread-25068] [transport.py] [_log()] starting thread (client mode): 0x1493f610
2025-11-12T23:58:44.417 [DEBUG] [Thread-25068] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:58:44.432 [DEBUG] [Thread-25068] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:58:44.432 [INFO] [Thread-25068] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:58:44.440 [DEBUG] [Thread-25068] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:58:44.440 [DEBUG] [Thread-25068] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] client lang: <none>
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] server lang: <none>
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] kex follows: False
2025-11-12T23:58:44.441 [DEBUG] [Thread-25068] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:58:44.442 [DEBUG] [Thread-25068] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:58:44.442 [DEBUG] [Thread-25068] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:58:44.442 [DEBUG] [Thread-25068] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:58:44.442 [DEBUG] [Thread-25068] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:58:44.442 [DEBUG] [Thread-25068] [transport.py] [_log()] Compression: none
2025-11-12T23:58:44.442 [DEBUG] [Thread-25068] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:58:44.499 [DEBUG] [Thread-25068] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:58:44.500 [DEBUG] [Thread-25068] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:58:44.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:58:44.501 [DEBUG] [Thread-25068] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:58:44.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:58:44.556 [DEBUG] [Thread-25068] [transport.py] [_log()] userauth is OK
2025-11-12T23:58:44.556 [DEBUG] [Thread-25068] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:58:44.556 [DEBUG] [Thread-25068] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:58:44.556 [DEBUG] [Thread-25068] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:58:44.556 [DEBUG] [Thread-25068] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:58:44.578 [INFO] [Thread-25068] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:58:44.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:58:44.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:58:45.407 [DEBUG] [Thread-25068] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:58:45.408 [DEBUG] [Thread-25068] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:58:45.455 [DEBUG] [Thread-25068] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:58:45.456 [DEBUG] [Thread-25068] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:58:45.464 [DEBUG] [Thread-25068] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:58:45.473 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:58:45.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-11-12T23:58:45.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-11-12T23:58:45.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:58:45.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:58:45.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:58:45.500 [DEBUG] [Thread-25068] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:58:57.872 [DEBUG] [Thread-25070 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:04.673 [DEBUG] [Thread-25071 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:12.922 [DEBUG] [Thread-25072 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:13.008 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:15.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:59:15.523 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:59:15.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-11-12T23:59:16.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 58, 52), 6.92, 63.3, 0.0, 12.18, 14.85, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:59:16.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:58:52
2025-11-12T23:59:16.204 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:16.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:59:16.449 [DEBUG] [Thread-25073] [transport.py] [_log()] starting thread (client mode): 0x11f001c0
2025-11-12T23:59:16.449 [DEBUG] [Thread-25073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:59:16.469 [DEBUG] [Thread-25073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:59:16.469 [INFO] [Thread-25073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:59:16.473 [DEBUG] [Thread-25073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] client lang: <none>
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] server lang: <none>
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] kex follows: False
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] Compression: none
2025-11-12T23:59:16.474 [DEBUG] [Thread-25073] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:59:16.491 [DEBUG] [Thread-25073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:59:16.492 [DEBUG] [Thread-25073] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:59:16.492 [DEBUG] [Thread-25073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:59:16.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:59:16.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:59:16.494 [DEBUG] [Thread-25073] [transport.py] [_log()] userauth is OK
2025-11-12T23:59:16.494 [DEBUG] [Thread-25073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:59:16.494 [DEBUG] [Thread-25073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:59:16.494 [DEBUG] [Thread-25073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:59:16.494 [DEBUG] [Thread-25073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:59:16.529 [INFO] [Thread-25073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:59:16.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:59:17.163 [DEBUG] [Thread-25073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:59:17.163 [DEBUG] [Thread-25073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:59:17.163 [DEBUG] [Thread-25073] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:59:17.204 [DEBUG] [Thread-25073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:59:17.205 [DEBUG] [Thread-25073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:59:17.208 [DEBUG] [Thread-25073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:59:17.218 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:59:17.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:59:17.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:59:17.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:59:17.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:59:17.228 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:59:17.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:59:17.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:59:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:59:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.915717 -999.00  +15.00   8.32     66   +8.80 1 2 1 1 1     0    0 5.32 -38.29 ZNESw 8.8 8.3 226.5 11.6 15.7 -22.2 15.6 -21.3 15.4 -21.0 15.7 -22.0
2025-11-12T23:59:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:59:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:59:17.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.915717
2025-11-12T23:59:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:59:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:59:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:59:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:59:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:59:17.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:58:52', tmtdew=6.92, humidity=63.3, cloud=0.0, wind=12.18, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:58:53', seeing=1.32, atlas_timestamp='2025-11-12T21:58:37.949', atlas_cloud=2, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:55:00')
2025-11-12T23:59:17.231 [DEBUG] [Thread-25073] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:59:17.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:59:17.326 [DEBUG] [Thread-25076] [transport.py] [_log()] starting thread (client mode): 0x11f03850
2025-11-12T23:59:17.326 [DEBUG] [Thread-25076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:59:17.345 [DEBUG] [Thread-25076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:59:17.345 [INFO] [Thread-25076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:59:17.355 [DEBUG] [Thread-25076] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:59:17.355 [DEBUG] [Thread-25076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:59:17.355 [DEBUG] [Thread-25076] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:59:17.355 [DEBUG] [Thread-25076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:59:17.355 [DEBUG] [Thread-25076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] client lang: <none>
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] server lang: <none>
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] kex follows: False
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:59:17.356 [DEBUG] [Thread-25076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:59:17.357 [DEBUG] [Thread-25076] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:59:17.357 [DEBUG] [Thread-25076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:59:17.357 [DEBUG] [Thread-25076] [transport.py] [_log()] Compression: none
2025-11-12T23:59:17.357 [DEBUG] [Thread-25076] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:59:17.414 [DEBUG] [Thread-25076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:59:17.415 [DEBUG] [Thread-25076] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:59:17.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:59:17.415 [DEBUG] [Thread-25076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:59:17.416 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:59:17.474 [DEBUG] [Thread-25076] [transport.py] [_log()] userauth is OK
2025-11-12T23:59:17.474 [DEBUG] [Thread-25076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:59:17.474 [DEBUG] [Thread-25076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:59:17.474 [DEBUG] [Thread-25076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:59:17.474 [DEBUG] [Thread-25076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:59:17.493 [INFO] [Thread-25076] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:59:17.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:59:17.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:59:18.323 [DEBUG] [Thread-25076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:59:18.323 [DEBUG] [Thread-25076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:59:18.371 [DEBUG] [Thread-25076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:59:18.371 [DEBUG] [Thread-25076] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:59:18.380 [DEBUG] [Thread-25076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:59:18.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:59:18.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-11-12T23:59:18.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-11-12T23:59:18.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:59:18.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:59:18.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:59:18.415 [DEBUG] [Thread-25076] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:59:19.902 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:19.903 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:21.228 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:26.604 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:27.955 [DEBUG] [Thread-25078 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:35.972 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:40.343 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:43.000 [DEBUG] [Thread-25079 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:48.437 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-12T23:59:48.437 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-12T23:59:48.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-11-12T23:59:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 59, 24), 6.94, 63.2, 0.0, 10.83, 14.83, 0, 0, 0, 2, 0, 0),)
2025-11-12T23:59:49.095 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:59:24
2025-11-12T23:59:49.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-12T23:59:49.362 [DEBUG] [Thread-25080] [transport.py] [_log()] starting thread (client mode): 0x14946680
2025-11-12T23:59:49.362 [DEBUG] [Thread-25080] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:59:49.381 [DEBUG] [Thread-25080] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-12T23:59:49.381 [INFO] [Thread-25080] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] client lang: <none>
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] server lang: <none>
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] kex follows: False
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:59:49.385 [DEBUG] [Thread-25080] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:59:49.386 [DEBUG] [Thread-25080] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:59:49.386 [DEBUG] [Thread-25080] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:59:49.386 [DEBUG] [Thread-25080] [transport.py] [_log()] Compression: none
2025-11-12T23:59:49.386 [DEBUG] [Thread-25080] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:59:49.400 [DEBUG] [Thread-25080] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:59:49.400 [DEBUG] [Thread-25080] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:59:49.401 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-12T23:59:49.401 [DEBUG] [Thread-25080] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-12T23:59:49.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:59:49.402 [DEBUG] [Thread-25080] [transport.py] [_log()] userauth is OK
2025-11-12T23:59:49.402 [DEBUG] [Thread-25080] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:59:49.403 [DEBUG] [Thread-25080] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:59:49.403 [DEBUG] [Thread-25080] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-12T23:59:49.403 [DEBUG] [Thread-25080] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:59:49.416 [INFO] [Thread-25080] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:59:49.417 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:59:50.069 [DEBUG] [Thread-25080] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:59:50.069 [DEBUG] [Thread-25080] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:59:50.070 [DEBUG] [Thread-25080] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-12T23:59:50.111 [DEBUG] [Thread-25080] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:59:50.111 [DEBUG] [Thread-25080] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:59:50.114 [DEBUG] [Thread-25080] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:59:50.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:59:50.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-12T23:59:50.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-12T23:59:50.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-12T23:59:50.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:59:50.136 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-12T23:59:50.136 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:59:50.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:59:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-12T23:59:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.916412 -999.00  +15.00   3.42     66   +8.80 1 2 1 1 1     0    0 4.80 -48.62 ZNESw 8.2 3.4 237.6 11.1 15.7 -22.3 15.6 -21.3 15.4 -20.9 15.7 -21.8
2025-11-12T23:59:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-12T23:59:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-12T23:59:50.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.916412
2025-11-12T23:59:50.138 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-12T23:59:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-12T23:59:50.139 [DEBUG] [Thread-25080] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:59:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-12T23:59:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-12T23:59:50.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-12T23:59:50.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:59:24', tmtdew=6.94, humidity=63.2, cloud=0.0, wind=10.83, temperature=14.83, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:59:25', seeing=1.4, atlas_timestamp='2025-11-12T21:59:37.997', atlas_cloud=2, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:58:00')
2025-11-12T23:59:50.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-12T23:59:50.232 [DEBUG] [Thread-25083] [transport.py] [_log()] starting thread (client mode): 0x149441c0
2025-11-12T23:59:50.233 [DEBUG] [Thread-25083] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-12T23:59:50.248 [DEBUG] [Thread-25083] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-12T23:59:50.248 [INFO] [Thread-25083] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-12T23:59:50.256 [DEBUG] [Thread-25083] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-12T23:59:50.256 [DEBUG] [Thread-25083] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-12T23:59:50.256 [DEBUG] [Thread-25083] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] client lang: <none>
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] server lang: <none>
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] kex follows: False
2025-11-12T23:59:50.257 [DEBUG] [Thread-25083] [transport.py] [_log()] === Key exchange agreements ===
2025-11-12T23:59:50.258 [DEBUG] [Thread-25083] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-12T23:59:50.258 [DEBUG] [Thread-25083] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-12T23:59:50.258 [DEBUG] [Thread-25083] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-12T23:59:50.258 [DEBUG] [Thread-25083] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-12T23:59:50.258 [DEBUG] [Thread-25083] [transport.py] [_log()] Compression: none
2025-11-12T23:59:50.258 [DEBUG] [Thread-25083] [transport.py] [_log()] === End of kex handshake ===
2025-11-12T23:59:50.315 [DEBUG] [Thread-25083] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-12T23:59:50.316 [DEBUG] [Thread-25083] [transport.py] [_log()] Switch to new keys ...
2025-11-12T23:59:50.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-12T23:59:50.317 [DEBUG] [Thread-25083] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-12T23:59:50.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-12T23:59:50.371 [DEBUG] [Thread-25083] [transport.py] [_log()] userauth is OK
2025-11-12T23:59:50.372 [DEBUG] [Thread-25083] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-12T23:59:50.372 [DEBUG] [Thread-25083] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-12T23:59:50.372 [DEBUG] [Thread-25083] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-12T23:59:50.372 [DEBUG] [Thread-25083] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-12T23:59:50.390 [INFO] [Thread-25083] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-12T23:59:50.391 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-12T23:59:50.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-12T23:59:51.252 [DEBUG] [Thread-25083] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-12T23:59:51.252 [DEBUG] [Thread-25083] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-12T23:59:51.299 [DEBUG] [Thread-25083] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-12T23:59:51.300 [DEBUG] [Thread-25083] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-12T23:59:51.309 [DEBUG] [Thread-25083] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-12T23:59:51.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-12T23:59:51.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-12T23:59:51.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-11-12T23:59:51.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-12T23:59:51.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-12T23:59:51.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-12T23:59:51.345 [DEBUG] [Thread-25083] [transport.py] [_log()] EOF in transport thread
2025-11-12T23:59:58.030 [DEBUG] [Thread-25085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-12T23:59:59.734 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:04.145 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:04.734 [DEBUG] [Thread-25086 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:10.249 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:13.070 [DEBUG] [Thread-25087 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:14.636 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:20.106 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:20.106 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:21.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:00:21.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:00:21.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:00:21.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 12, 23, 59, 56), 6.89, 63.19, 0.0, 11.17, 14.82, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:00:21.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-12 23:59:56
2025-11-13T00:00:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:00:22.278 [DEBUG] [Thread-25088] [transport.py] [_log()] starting thread (client mode): 0x11f034f0
2025-11-13T00:00:22.278 [DEBUG] [Thread-25088] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:00:22.298 [DEBUG] [Thread-25088] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:00:22.298 [INFO] [Thread-25088] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:00:22.301 [DEBUG] [Thread-25088] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:00:22.301 [DEBUG] [Thread-25088] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] client lang: <none>
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] server lang: <none>
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] kex follows: False
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] Compression: none
2025-11-13T00:00:22.302 [DEBUG] [Thread-25088] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:00:22.316 [DEBUG] [Thread-25088] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:00:22.316 [DEBUG] [Thread-25088] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:00:22.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:00:22.317 [DEBUG] [Thread-25088] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:00:22.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:00:22.318 [DEBUG] [Thread-25088] [transport.py] [_log()] userauth is OK
2025-11-13T00:00:22.318 [DEBUG] [Thread-25088] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:00:22.318 [DEBUG] [Thread-25088] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:00:22.318 [DEBUG] [Thread-25088] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:00:22.318 [DEBUG] [Thread-25088] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:00:22.336 [INFO] [Thread-25088] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:00:22.336 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:00:22.974 [DEBUG] [Thread-25088] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:00:22.974 [DEBUG] [Thread-25088] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:00:22.974 [DEBUG] [Thread-25088] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:00:23.015 [DEBUG] [Thread-25088] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:00:23.015 [DEBUG] [Thread-25088] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:00:23.017 [DEBUG] [Thread-25088] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:00:23.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:00:23.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:00:23.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:00:23.032 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:00:23.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:00:23.035 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:00:23.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:00:23.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:00:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:00:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.916759 -999.00  +15.00   5.75     66   +8.80 1 2 1 1 1     0    0 5.04 -50.13 ZNESw 7.7 5.8 200.6 11.0 15.7 -22.2 15.6 -21.3 15.4 -20.9 15.7 -21.7
2025-11-13T00:00:23.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:00:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:00:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.916759
2025-11-13T00:00:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:00:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:00:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:00:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:00:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:00:23.036 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-12T23:59:56', tmtdew=6.89, humidity=63.19, cloud=0.0, wind=11.17, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-12T23:59:57', seeing=1.4, atlas_timestamp='2025-11-12T22:00:07.978', atlas_cloud=2, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:58:00')
2025-11-13T00:00:23.036 [DEBUG] [Thread-25088] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:00:23.111 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:00:23.123 [DEBUG] [Thread-25091] [transport.py] [_log()] starting thread (client mode): 0x11f00c70
2025-11-13T00:00:23.123 [DEBUG] [Thread-25091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:00:23.138 [DEBUG] [Thread-25091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:00:23.138 [INFO] [Thread-25091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:00:23.145 [DEBUG] [Thread-25091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] client lang: <none>
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] server lang: <none>
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] kex follows: False
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] Compression: none
2025-11-13T00:00:23.146 [DEBUG] [Thread-25091] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:00:23.202 [DEBUG] [Thread-25091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:00:23.202 [DEBUG] [Thread-25091] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:00:23.202 [DEBUG] [Thread-25091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:00:23.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:00:23.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:00:23.260 [DEBUG] [Thread-25091] [transport.py] [_log()] userauth is OK
2025-11-13T00:00:23.260 [DEBUG] [Thread-25091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:00:23.260 [DEBUG] [Thread-25091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:00:23.260 [DEBUG] [Thread-25091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:00:23.260 [DEBUG] [Thread-25091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:00:23.280 [INFO] [Thread-25091] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:00:23.280 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:00:23.282 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:00:24.131 [DEBUG] [Thread-25091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:00:24.132 [DEBUG] [Thread-25091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:00:24.180 [DEBUG] [Thread-25091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:00:24.180 [DEBUG] [Thread-25091] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:00:24.189 [DEBUG] [Thread-25091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:00:24.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:00: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-11-13T00:00:24.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-11-13T00:00:24.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:00:24.217 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:00:24.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:00:24.226 [DEBUG] [Thread-25091] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:00:28.104 [DEBUG] [Thread-25093 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:43.157 [DEBUG] [Thread-25094 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:00:54.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:00:54.221 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:00:54.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-11-13T00:00:54.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 0, 28), 6.95, 62.92, 0.0, 12.62, 14.8, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:00:54.872 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:00:28
2025-11-13T00:00:54.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:00:55.138 [DEBUG] [Thread-25095] [transport.py] [_log()] starting thread (client mode): 0x1737dab0
2025-11-13T00:00:55.138 [DEBUG] [Thread-25095] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:00:55.158 [DEBUG] [Thread-25095] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:00:55.158 [INFO] [Thread-25095] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] client lang: <none>
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] server lang: <none>
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] kex follows: False
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:00:55.161 [DEBUG] [Thread-25095] [transport.py] [_log()] Compression: none
2025-11-13T00:00:55.162 [DEBUG] [Thread-25095] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:00:55.179 [DEBUG] [Thread-25095] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:00:55.179 [DEBUG] [Thread-25095] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:00:55.180 [DEBUG] [Thread-25095] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:00:55.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:00:55.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:00:55.182 [DEBUG] [Thread-25095] [transport.py] [_log()] userauth is OK
2025-11-13T00:00:55.182 [DEBUG] [Thread-25095] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:00:55.182 [DEBUG] [Thread-25095] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:00:55.182 [DEBUG] [Thread-25095] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:00:55.182 [DEBUG] [Thread-25095] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:00:55.206 [INFO] [Thread-25095] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:00:55.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:00:55.812 [DEBUG] [Thread-25095] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:00:55.812 [DEBUG] [Thread-25095] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:00:55.813 [DEBUG] [Thread-25095] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:00:55.854 [DEBUG] [Thread-25095] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:00:55.854 [DEBUG] [Thread-25095] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:00:55.857 [DEBUG] [Thread-25095] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:00:55.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:00:55.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:00:55.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:00:55.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:00:55.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:00:55.881 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:00:55.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:00:55.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:00:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:00:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.917106 -999.00  +15.00   6.13     66   +8.80 1 2 1 1 1     0    0 5.15 -46.35 ZNESw 10.7 6.1 233.8 11.9 15.7 -22.3 15.6 -21.3 15.4 -21.1 15.6 -21.7
2025-11-13T00:00:55.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:00:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:00:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.917106
2025-11-13T00:00:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:00:55.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:00:55.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:00:55.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:00:55.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:00:55.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:00:28', tmtdew=6.95, humidity=62.92, cloud=0.0, wind=12.62, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:00:29', seeing=1.58, atlas_timestamp='2025-11-12T22:00:37.958', atlas_cloud=2, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:58:00')
2025-11-13T00:00:55.884 [DEBUG] [Thread-25095] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:00:55.978 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:00:55.990 [DEBUG] [Thread-25098] [transport.py] [_log()] starting thread (client mode): 0x1737dc30
2025-11-13T00:00:55.990 [DEBUG] [Thread-25098] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:00:56.004 [DEBUG] [Thread-25098] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:00:56.004 [INFO] [Thread-25098] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] client lang: <none>
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] server lang: <none>
2025-11-13T00:00:56.012 [DEBUG] [Thread-25098] [transport.py] [_log()] kex follows: False
2025-11-13T00:00:56.013 [DEBUG] [Thread-25098] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:00:56.013 [DEBUG] [Thread-25098] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:00:56.013 [DEBUG] [Thread-25098] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:00:56.013 [DEBUG] [Thread-25098] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:00:56.013 [DEBUG] [Thread-25098] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:00:56.013 [DEBUG] [Thread-25098] [transport.py] [_log()] Compression: none
2025-11-13T00:00:56.013 [DEBUG] [Thread-25098] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:00:56.070 [DEBUG] [Thread-25098] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:00:56.070 [DEBUG] [Thread-25098] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:00:56.070 [DEBUG] [Thread-25098] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:00:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:00:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:00:56.127 [DEBUG] [Thread-25098] [transport.py] [_log()] userauth is OK
2025-11-13T00:00:56.127 [DEBUG] [Thread-25098] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:00:56.127 [DEBUG] [Thread-25098] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:00:56.127 [DEBUG] [Thread-25098] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:00:56.127 [DEBUG] [Thread-25098] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:00:56.144 [INFO] [Thread-25098] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:00:56.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:00:56.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:00:56.965 [DEBUG] [Thread-25098] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:00:56.965 [DEBUG] [Thread-25098] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:00:57.013 [DEBUG] [Thread-25098] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:00:57.013 [DEBUG] [Thread-25098] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:00:57.021 [DEBUG] [Thread-25098] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:00:57.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:00:57.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-11-13T00:00:57.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-11-13T00:00:57.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:00:57.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:00:57.045 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:00:57.053 [DEBUG] [Thread-25098] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:00:58.191 [DEBUG] [Thread-25100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:04.799 [DEBUG] [Thread-25101 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:13.235 [DEBUG] [Thread-25102 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:20.309 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:20.309 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:22.827 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:26.880 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:27.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:01:27.076 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:01:27.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-11-13T00:01:27.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 1), 7.08, 62.82, 0.0, 12.74, 14.85, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:01:27.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:01:00
2025-11-13T00:01:27.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:01:27.988 [DEBUG] [Thread-25103] [transport.py] [_log()] starting thread (client mode): 0x1737c2b0
2025-11-13T00:01:27.989 [DEBUG] [Thread-25103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:01:28.002 [DEBUG] [Thread-25103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:01:28.002 [INFO] [Thread-25103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] client lang: <none>
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] server lang: <none>
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] kex follows: False
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] Compression: none
2025-11-13T00:01:28.003 [DEBUG] [Thread-25103] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:01:28.013 [DEBUG] [Thread-25103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:01:28.014 [DEBUG] [Thread-25103] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:01:28.014 [DEBUG] [Thread-25103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:01:28.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:01:28.014 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:01:28.015 [DEBUG] [Thread-25103] [transport.py] [_log()] userauth is OK
2025-11-13T00:01:28.015 [DEBUG] [Thread-25103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:01:28.015 [DEBUG] [Thread-25103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:01:28.016 [DEBUG] [Thread-25103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:01:28.016 [DEBUG] [Thread-25103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:01:28.030 [INFO] [Thread-25103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:01:28.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:01:28.269 [DEBUG] [Thread-25105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:28.601 [DEBUG] [Thread-25103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:01:28.601 [DEBUG] [Thread-25103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:01:28.602 [DEBUG] [Thread-25103] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:01:28.642 [DEBUG] [Thread-25103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:01:28.643 [DEBUG] [Thread-25103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:01:28.645 [DEBUG] [Thread-25103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:01:28.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:01:28.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:01:28.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:01:28.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:01:28.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:01:28.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:01:28.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:01:28.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:01:28.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:01:28.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.917454 -999.00  +15.10   3.88     66   +8.80 1 2 1 1 1     0    0 5.12 -46.10 ZNESw 5.4 3.9 276.1 11.8 15.8 -22.3 15.6 -21.3 15.3 -20.9 15.6 -21.6
2025-11-13T00:01:28.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:01:28.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:01:28.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.917454
2025-11-13T00:01:28.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:01:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:01:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:01:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:01:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:01:28.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:01:00', tmtdew=7.08, humidity=62.82, cloud=0.0, wind=12.74, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:01:01', seeing=1.22, atlas_timestamp='2025-11-12T22:01:08.026', atlas_cloud=2, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:58:00')
2025-11-13T00:01:28.672 [DEBUG] [Thread-25103] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:01:28.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:01:28.769 [DEBUG] [Thread-25107] [transport.py] [_log()] starting thread (client mode): 0x1493eaa0
2025-11-13T00:01:28.769 [DEBUG] [Thread-25107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:01:28.784 [DEBUG] [Thread-25107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:01:28.784 [INFO] [Thread-25107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:01:28.791 [DEBUG] [Thread-25107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:01:28.791 [DEBUG] [Thread-25107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:01:28.791 [DEBUG] [Thread-25107] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:01:28.791 [DEBUG] [Thread-25107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] client lang: <none>
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] server lang: <none>
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] kex follows: False
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] Compression: none
2025-11-13T00:01:28.792 [DEBUG] [Thread-25107] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:01:28.856 [DEBUG] [Thread-25107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:01:28.856 [DEBUG] [Thread-25107] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:01:28.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:01:28.857 [DEBUG] [Thread-25107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:01:28.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:01:28.912 [DEBUG] [Thread-25107] [transport.py] [_log()] userauth is OK
2025-11-13T00:01:28.912 [DEBUG] [Thread-25107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:01:28.912 [DEBUG] [Thread-25107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:01:28.912 [DEBUG] [Thread-25107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:01:28.912 [DEBUG] [Thread-25107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:01:28.931 [INFO] [Thread-25107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:01:28.932 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:01:28.932 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:01:29.780 [DEBUG] [Thread-25107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:01:29.780 [DEBUG] [Thread-25107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:01:29.829 [DEBUG] [Thread-25107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:01:29.829 [DEBUG] [Thread-25107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:01:29.838 [DEBUG] [Thread-25107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:01:29.846 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:01:29.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:01:29.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-11-13T00:01:29.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:01:29.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:01:29.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:01:29.873 [DEBUG] [Thread-25107] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:01:43.301 [DEBUG] [Thread-25109 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:58.355 [DEBUG] [Thread-25110 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:01:59.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:01:59.895 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:01:59.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-11-13T00:02:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 1, 32), 7.08, 62.79, 0.0, 13.23, 14.85, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:02:00.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:01:32
2025-11-13T00:02:00.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:02:00.800 [DEBUG] [Thread-25111] [transport.py] [_log()] starting thread (client mode): 0x17347d00
2025-11-13T00:02:00.801 [DEBUG] [Thread-25111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:02:00.821 [DEBUG] [Thread-25111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:02:00.822 [INFO] [Thread-25111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] client lang: <none>
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] server lang: <none>
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] kex follows: False
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] Compression: none
2025-11-13T00:02:00.825 [DEBUG] [Thread-25111] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:02:00.842 [DEBUG] [Thread-25111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:02:00.842 [DEBUG] [Thread-25111] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:02:00.843 [DEBUG] [Thread-25111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:02:00.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:02:00.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:02:00.845 [DEBUG] [Thread-25111] [transport.py] [_log()] userauth is OK
2025-11-13T00:02:00.845 [DEBUG] [Thread-25111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:02:00.845 [DEBUG] [Thread-25111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:02:00.845 [DEBUG] [Thread-25111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:02:00.845 [DEBUG] [Thread-25111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:02:00.862 [INFO] [Thread-25111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:02:00.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:02:01.445 [DEBUG] [Thread-25111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:02:01.446 [DEBUG] [Thread-25111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:02:01.446 [DEBUG] [Thread-25111] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:02:01.487 [DEBUG] [Thread-25111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:02:01.487 [DEBUG] [Thread-25111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:02:01.490 [DEBUG] [Thread-25111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:02:01.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:02:01.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:02:01.504 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:02:01.506 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:02:01.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:02:01.514 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:02:01.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:02:01.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:02:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:02:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.917801 -999.00  +15.10   7.56     64   +8.50 1 2 1 1 1     0    0 5.04 -46.19 ZNESw 5.1 7.6 212.4 9.9 15.7 -22.0 15.6 -21.2 15.4 -20.7 15.6 -21.7
2025-11-13T00:02:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:02:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:02:01.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.917801
2025-11-13T00:02:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:02:01.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:02:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:02:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:02:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:02:01.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:01:32', tmtdew=7.08, humidity=62.79, cloud=0.0, wind=13.23, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:01:33', seeing=1.22, atlas_timestamp='2025-11-12T22:01:38.006', atlas_cloud=2, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:58:00')
2025-11-13T00:02:01.517 [DEBUG] [Thread-25111] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:02:01.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:02:01.611 [DEBUG] [Thread-25114] [transport.py] [_log()] starting thread (client mode): 0x19dd93f0
2025-11-13T00:02:01.612 [DEBUG] [Thread-25114] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:02:01.626 [DEBUG] [Thread-25114] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:02:01.626 [INFO] [Thread-25114] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:02:01.634 [DEBUG] [Thread-25114] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:02:01.634 [DEBUG] [Thread-25114] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:02:01.634 [DEBUG] [Thread-25114] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:02:01.634 [DEBUG] [Thread-25114] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:02:01.634 [DEBUG] [Thread-25114] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] client lang: <none>
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] server lang: <none>
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] kex follows: False
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] Compression: none
2025-11-13T00:02:01.635 [DEBUG] [Thread-25114] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:02:01.692 [DEBUG] [Thread-25114] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:02:01.692 [DEBUG] [Thread-25114] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:02:01.693 [DEBUG] [Thread-25114] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:02:01.693 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:02:01.694 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:02:01.748 [DEBUG] [Thread-25114] [transport.py] [_log()] userauth is OK
2025-11-13T00:02:01.748 [DEBUG] [Thread-25114] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:02:01.748 [DEBUG] [Thread-25114] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:02:01.748 [DEBUG] [Thread-25114] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:02:01.748 [DEBUG] [Thread-25114] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:02:01.770 [INFO] [Thread-25114] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:02:01.770 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:02:01.771 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:02:02.651 [DEBUG] [Thread-25114] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:02:02.651 [DEBUG] [Thread-25114] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:02:02.700 [DEBUG] [Thread-25114] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:02:02.700 [DEBUG] [Thread-25114] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:02:02.709 [DEBUG] [Thread-25114] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:02:02.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:02:02.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:02:02.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') -> 00000000
2025-11-13T00:02:02.737 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:02:02.737 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:02:02.738 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:02:02.746 [DEBUG] [Thread-25114] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:02:04.856 [DEBUG] [Thread-25116 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:02:13.388 [DEBUG] [Thread-25117 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:02:20.512 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:02:20.514 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:02:28.426 [DEBUG] [Thread-25118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:02:32.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:02:32.763 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:02:32.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-11-13T00:02:33.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 2, 4), 7.09, 62.76, 0.0, 13.57, 14.82, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:02:33.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:02:04
2025-11-13T00:02:33.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:02:33.681 [DEBUG] [Thread-25119] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-13T00:02:33.682 [DEBUG] [Thread-25119] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:02:33.703 [DEBUG] [Thread-25119] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:02:33.703 [INFO] [Thread-25119] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:02:33.706 [DEBUG] [Thread-25119] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] client lang: <none>
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] server lang: <none>
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] kex follows: False
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:02:33.707 [DEBUG] [Thread-25119] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:02:33.708 [DEBUG] [Thread-25119] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:02:33.708 [DEBUG] [Thread-25119] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:02:33.708 [DEBUG] [Thread-25119] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:02:33.708 [DEBUG] [Thread-25119] [transport.py] [_log()] Compression: none
2025-11-13T00:02:33.708 [DEBUG] [Thread-25119] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:02:33.727 [DEBUG] [Thread-25119] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:02:33.728 [DEBUG] [Thread-25119] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:02:33.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:02:33.728 [DEBUG] [Thread-25119] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:02:33.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:02:33.731 [DEBUG] [Thread-25119] [transport.py] [_log()] userauth is OK
2025-11-13T00:02:33.731 [DEBUG] [Thread-25119] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:02:33.731 [DEBUG] [Thread-25119] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:02:33.731 [DEBUG] [Thread-25119] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:02:33.731 [DEBUG] [Thread-25119] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:02:33.749 [INFO] [Thread-25119] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:02:33.750 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:02:34.339 [DEBUG] [Thread-25119] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:02:34.339 [DEBUG] [Thread-25119] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:02:34.339 [DEBUG] [Thread-25119] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:02:34.380 [DEBUG] [Thread-25119] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:02:34.380 [DEBUG] [Thread-25119] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:02:34.384 [DEBUG] [Thread-25119] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:02:34.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:02:34.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:02:34.398 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:02:34.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:02:34.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:02:34.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:02:34.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:02:34.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:02:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:02:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.917801 -999.00  +15.10   7.56     64   +8.50 1 2 1 1 1     0    0 5.04 -46.19 ZNESw 5.1 7.6 212.4 9.9 15.7 -22.0 15.6 -21.2 15.4 -20.7 15.6 -21.7
2025-11-13T00:02:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:02:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:02:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.917801
2025-11-13T00:02:34.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:02:34.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:02:34.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:02:34.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:02:34.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:02:34.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:02:04', tmtdew=7.09, humidity=62.76, cloud=0.0, wind=13.57, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:02:05', seeing=1.22, atlas_timestamp='2025-11-12T22:01:38.006', atlas_cloud=2, atlas_rain=1, zp_data=[0.35224999999999973, 0.4787499999999998, 0.35524999999999984, 0.176499999999999, 0.2594999999999992, 0.20225000000000115, 0.3309999999999995, 0.3732500000000005, 0.4444999999999997, 0.464500000000001, 0.4032499999999999, 0.12899999999999956, 0.2940000000000005, 0.2842500000000001, 0.23499999999999943, 0.4770000000000003, 0.6622500000000002, 0.3885000000000005, 0.41249999999999964, 0.3692499999999974, 0.6429999999999989, 0.6792499999999988, 0.3887500000000017, 0.5342500000000001, 0.45199999999999996, 0.7374999999999998, 0.49575000000000014, 0.31950000000000056, 1.3595000000000006, 1.2165000000000017, 0.588000000000001, 0.41300000000000114, 0.8677499999999991], zp_timestamp='2025-11-12T21:58:00')
2025-11-13T00:02:34.412 [DEBUG] [Thread-25119] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:02:34.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:02:34.509 [DEBUG] [Thread-25122] [transport.py] [_log()] starting thread (client mode): 0x14922a40
2025-11-13T00:02:34.510 [DEBUG] [Thread-25122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:02:34.524 [DEBUG] [Thread-25122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:02:34.525 [INFO] [Thread-25122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:02:34.532 [DEBUG] [Thread-25122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:02:34.532 [DEBUG] [Thread-25122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:02:34.532 [DEBUG] [Thread-25122] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:02:34.532 [DEBUG] [Thread-25122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:02:34.532 [DEBUG] [Thread-25122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] client lang: <none>
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] server lang: <none>
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] kex follows: False
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] Compression: none
2025-11-13T00:02:34.533 [DEBUG] [Thread-25122] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:02:34.592 [DEBUG] [Thread-25122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:02:34.592 [DEBUG] [Thread-25122] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:02:34.593 [DEBUG] [Thread-25122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:02:34.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:02:34.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:02:34.649 [DEBUG] [Thread-25122] [transport.py] [_log()] userauth is OK
2025-11-13T00:02:34.649 [DEBUG] [Thread-25122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:02:34.649 [DEBUG] [Thread-25122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:02:34.650 [DEBUG] [Thread-25122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:02:34.650 [DEBUG] [Thread-25122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:02:34.670 [INFO] [Thread-25122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:02:34.670 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:02:34.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:02:35.497 [DEBUG] [Thread-25122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:02:35.498 [DEBUG] [Thread-25122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:02:35.546 [DEBUG] [Thread-25122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:02:35.546 [DEBUG] [Thread-25122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:02:35.555 [DEBUG] [Thread-25122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:02:35.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:02:35.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:02:35.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-11-13T00:02:35.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:02:35.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:02:35.583 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:02:35.591 [DEBUG] [Thread-25122] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:02:43.461 [DEBUG] [Thread-25124 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:02:58.510 [DEBUG] [Thread-25125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:03:04.913 [DEBUG] [Thread-25126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:03:05.612 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:03:05.612 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:03:05.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-11-13T00:03:06.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 2, 36), 7.73, 60.09, 0.0, 14.82, 15.07, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:03:06.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:02:36
2025-11-13T00:03:06.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:03:06.535 [DEBUG] [Thread-25127] [transport.py] [_log()] starting thread (client mode): 0x14945630
2025-11-13T00:03:06.535 [DEBUG] [Thread-25127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:03:06.558 [DEBUG] [Thread-25127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:03:06.558 [INFO] [Thread-25127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:03:06.561 [DEBUG] [Thread-25127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] client lang: <none>
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] server lang: <none>
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] kex follows: False
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] Compression: none
2025-11-13T00:03:06.562 [DEBUG] [Thread-25127] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:03:06.580 [DEBUG] [Thread-25127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:03:06.580 [DEBUG] [Thread-25127] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:03:06.581 [DEBUG] [Thread-25127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:03:06.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:03:06.581 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:03:06.583 [DEBUG] [Thread-25127] [transport.py] [_log()] userauth is OK
2025-11-13T00:03:06.583 [DEBUG] [Thread-25127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:03:06.583 [DEBUG] [Thread-25127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:03:06.583 [DEBUG] [Thread-25127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:03:06.583 [DEBUG] [Thread-25127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:03:06.599 [INFO] [Thread-25127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:03:06.599 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:03:07.252 [DEBUG] [Thread-25127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:03:07.252 [DEBUG] [Thread-25127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:03:07.252 [DEBUG] [Thread-25127] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:03:07.293 [DEBUG] [Thread-25127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:03:07.293 [DEBUG] [Thread-25127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:03:07.296 [DEBUG] [Thread-25127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:03:07.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:03:07.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:03:07.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:03:07.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:03:07.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:03:07.317 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:03:07.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:03:07.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:03:07.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:03:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.918148 -999.00  +15.10   4.11     63   +8.30 1 2 1 1 1     0    0 5.22 -41.53 ZNESw 5.9 4.1 214.6 9.1 15.8 -22.1 15.6 -21.3 15.4 -20.8 15.7 -21.6
2025-11-13T00:03:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:03:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:03:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.918148
2025-11-13T00:03:07.319 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:03:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:03:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:03:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:03:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:03:07.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:02:36', tmtdew=7.73, humidity=60.09, cloud=0.0, wind=14.82, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:02:37', seeing=1.33, atlas_timestamp='2025-11-12T22:02:07.987', atlas_cloud=2, atlas_rain=1, zp_data=[0.20624999999999893, 0.3542500000000004, 0.29825000000000124, 0.2184999999999988, 0.24399999999999977, 0.20425000000000004, 0.20800000000000018, 0.17225000000000001, 0.3534999999999986, 0.6110000000000007, 0.30375000000000085, 0.20950000000000024, 0.40000000000000036, 0.479750000000001, 0.1720000000000006, 0.3569999999999993, 0.49324999999999974, 0.42549999999999955, 0.4079999999999995, 0.2912499999999998, 1.0459999999999985, 0.989749999999999, 0.44425000000000114, 0.49075000000000024, 0.613999999999999, 0.5390000000000006, 0.45924999999999994, 0.37100000000000044, 1.314, 1.1300000000000008, 0.6185000000000009, 0.3435000000000006, 0.6767499999999993], zp_timestamp='2025-11-12T22:01:00')
2025-11-13T00:03:07.320 [DEBUG] [Thread-25127] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:03:07.405 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:03:07.415 [DEBUG] [Thread-25130] [transport.py] [_log()] starting thread (client mode): 0x1737e890
2025-11-13T00:03:07.415 [DEBUG] [Thread-25130] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:03:07.430 [DEBUG] [Thread-25130] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:03:07.431 [INFO] [Thread-25130] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:03:07.440 [DEBUG] [Thread-25130] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:03:07.440 [DEBUG] [Thread-25130] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:03:07.440 [DEBUG] [Thread-25130] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] client lang: <none>
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] server lang: <none>
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] kex follows: False
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:03:07.441 [DEBUG] [Thread-25130] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:03:07.442 [DEBUG] [Thread-25130] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:03:07.442 [DEBUG] [Thread-25130] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:03:07.442 [DEBUG] [Thread-25130] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:03:07.442 [DEBUG] [Thread-25130] [transport.py] [_log()] Compression: none
2025-11-13T00:03:07.442 [DEBUG] [Thread-25130] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:03:07.497 [DEBUG] [Thread-25130] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:03:07.498 [DEBUG] [Thread-25130] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:03:07.498 [DEBUG] [Thread-25130] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:03:07.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:03:07.499 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:03:07.556 [DEBUG] [Thread-25130] [transport.py] [_log()] userauth is OK
2025-11-13T00:03:07.556 [DEBUG] [Thread-25130] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:03:07.556 [DEBUG] [Thread-25130] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:03:07.556 [DEBUG] [Thread-25130] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:03:07.557 [DEBUG] [Thread-25130] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:03:07.575 [INFO] [Thread-25130] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:03:07.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:03:07.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:03:08.463 [DEBUG] [Thread-25130] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:03:08.463 [DEBUG] [Thread-25130] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:03:08.512 [DEBUG] [Thread-25130] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:03:08.512 [DEBUG] [Thread-25130] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:03:08.521 [DEBUG] [Thread-25130] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:03:08.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:03:08.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:03:08.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-11-13T00:03:08.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:03:08.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:03:08.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:03:08.558 [DEBUG] [Thread-25130] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:03:13.544 [DEBUG] [Thread-25132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:03:20.723 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:03:20.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:03:28.596 [DEBUG] [Thread-25133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:03:38.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:03:38.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:03:38.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-11-13T00:03:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 3, 8), 7.81, 59.74, 0.0, 14.82, 15.08, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:03:39.203 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:03:08
2025-11-13T00:03:39.320 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:03:39.470 [DEBUG] [Thread-25134] [transport.py] [_log()] starting thread (client mode): 0x19dda770
2025-11-13T00:03:39.470 [DEBUG] [Thread-25134] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:03:39.489 [DEBUG] [Thread-25134] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:03:39.489 [INFO] [Thread-25134] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:03:39.492 [DEBUG] [Thread-25134] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] client lang: <none>
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] server lang: <none>
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] kex follows: False
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] Compression: none
2025-11-13T00:03:39.493 [DEBUG] [Thread-25134] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:03:39.509 [DEBUG] [Thread-25134] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:03:39.510 [DEBUG] [Thread-25134] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:03:39.510 [DEBUG] [Thread-25134] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:03:39.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:03:39.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:03:39.512 [DEBUG] [Thread-25134] [transport.py] [_log()] userauth is OK
2025-11-13T00:03:39.512 [DEBUG] [Thread-25134] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:03:39.512 [DEBUG] [Thread-25134] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:03:39.513 [DEBUG] [Thread-25134] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:03:39.513 [DEBUG] [Thread-25134] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:03:39.530 [INFO] [Thread-25134] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:03:39.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:03:40.174 [DEBUG] [Thread-25134] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:03:40.174 [DEBUG] [Thread-25134] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:03:40.175 [DEBUG] [Thread-25134] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:03:40.214 [DEBUG] [Thread-25134] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:03:40.215 [DEBUG] [Thread-25134] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:03:40.218 [DEBUG] [Thread-25134] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:03:40.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:03:40.230 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:03:40.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:03:40.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:03:40.238 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:03:40.240 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:03:40.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:03:40.240 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:03:40.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:03:40.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.918842 -999.00  +15.20   5.35     61   +7.80 1 2 1 1 1     0    0 5.61 -31.74 ZNES. 11.3 5.3 237.9 8.5 15.8 -22.1 15.7 -21.1 15.4 -20.8 15.7 -21.4
2025-11-13T00:03:40.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:03:40.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:03:40.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.918842
2025-11-13T00:03:40.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:03:40.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:03:40.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:03:40.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:03:40.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:03:40.243 [DEBUG] [Thread-25134] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:03:40.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:03:08', tmtdew=7.81, humidity=59.74, cloud=0.0, wind=14.82, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:03:09', seeing=1.13, atlas_timestamp='2025-11-12T22:03:07.949', atlas_cloud=2, atlas_rain=1, zp_data=[0.20624999999999893, 0.3542500000000004, 0.29825000000000124, 0.2184999999999988, 0.24399999999999977, 0.20425000000000004, 0.20800000000000018, 0.17225000000000001, 0.3534999999999986, 0.6110000000000007, 0.30375000000000085, 0.20950000000000024, 0.40000000000000036, 0.479750000000001, 0.1720000000000006, 0.3569999999999993, 0.49324999999999974, 0.42549999999999955, 0.4079999999999995, 0.2912499999999998, 1.0459999999999985, 0.989749999999999, 0.44425000000000114, 0.49075000000000024, 0.613999999999999, 0.5390000000000006, 0.45924999999999994, 0.37100000000000044, 1.314, 1.1300000000000008, 0.6185000000000009, 0.3435000000000006, 0.6767499999999993], zp_timestamp='2025-11-12T22:01:00')
2025-11-13T00:03:40.326 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:03:40.339 [DEBUG] [Thread-25137] [transport.py] [_log()] starting thread (client mode): 0x1493f4c0
2025-11-13T00:03:40.339 [DEBUG] [Thread-25137] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:03:40.357 [DEBUG] [Thread-25137] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:03:40.358 [INFO] [Thread-25137] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:03:40.365 [DEBUG] [Thread-25137] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:03:40.366 [DEBUG] [Thread-25137] [transport.py] [_log()] client lang: <none>
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] server lang: <none>
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] kex follows: False
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] Compression: none
2025-11-13T00:03:40.367 [DEBUG] [Thread-25137] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:03:40.424 [DEBUG] [Thread-25137] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:03:40.425 [DEBUG] [Thread-25137] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:03:40.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:03:40.426 [DEBUG] [Thread-25137] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:03:40.427 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:03:40.480 [DEBUG] [Thread-25137] [transport.py] [_log()] userauth is OK
2025-11-13T00:03:40.480 [DEBUG] [Thread-25137] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:03:40.480 [DEBUG] [Thread-25137] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:03:40.480 [DEBUG] [Thread-25137] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:03:40.480 [DEBUG] [Thread-25137] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:03:40.500 [INFO] [Thread-25137] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:03:40.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:03:40.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:03:41.405 [DEBUG] [Thread-25137] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:03:41.405 [DEBUG] [Thread-25137] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:03:41.452 [DEBUG] [Thread-25137] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:03:41.452 [DEBUG] [Thread-25137] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:03:41.461 [DEBUG] [Thread-25137] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:03:41.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:03:41.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-11-13T00:03:41.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-11-13T00:03:41.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:03:41.485 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:03:41.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:03:41.493 [DEBUG] [Thread-25137] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:03:43.627 [DEBUG] [Thread-25139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:03:58.678 [DEBUG] [Thread-25140 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:04:04.974 [DEBUG] [Thread-25141 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:04:11.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:04:11.493 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:04:11.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-11-13T00:04:12.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 3, 40), 8.25, 58.0, 0.0, 13.48, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:04:12.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:03:40
2025-11-13T00:04:12.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:04:12.463 [DEBUG] [Thread-25142] [transport.py] [_log()] starting thread (client mode): 0x14945630
2025-11-13T00:04:12.463 [DEBUG] [Thread-25142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:04:12.482 [DEBUG] [Thread-25142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:04:12.482 [INFO] [Thread-25142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:04:12.484 [DEBUG] [Thread-25142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:04:12.484 [DEBUG] [Thread-25142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:04:12.484 [DEBUG] [Thread-25142] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:04:12.484 [DEBUG] [Thread-25142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:04:12.484 [DEBUG] [Thread-25142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:04:12.484 [DEBUG] [Thread-25142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:04:12.484 [DEBUG] [Thread-25142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:04:12.484 [DEBUG] [Thread-25142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] client lang: <none>
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] server lang: <none>
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] kex follows: False
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] Compression: none
2025-11-13T00:04:12.485 [DEBUG] [Thread-25142] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:04:12.496 [DEBUG] [Thread-25142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:04:12.497 [DEBUG] [Thread-25142] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:04:12.497 [DEBUG] [Thread-25142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:04:12.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:04:12.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:04:12.497 [DEBUG] [Thread-25142] [transport.py] [_log()] userauth is OK
2025-11-13T00:04:12.497 [DEBUG] [Thread-25142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:04:12.497 [DEBUG] [Thread-25142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:04:12.497 [DEBUG] [Thread-25142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:04:12.497 [DEBUG] [Thread-25142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:04:12.506 [INFO] [Thread-25142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:04:12.507 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:04:13.171 [DEBUG] [Thread-25142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:04:13.171 [DEBUG] [Thread-25142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:04:13.171 [DEBUG] [Thread-25142] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:04:13.212 [DEBUG] [Thread-25142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:04:13.212 [DEBUG] [Thread-25142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:04:13.214 [DEBUG] [Thread-25142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:04:13.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:04:13.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:04:13.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:04:13.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:04:13.225 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:04:13.226 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:04:13.226 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:04:13.226 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:04:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:04:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.919190 -999.00  +15.30   6.34     60   +7.80 1 2 1 1 1     0    0 5.78 -21.97 ZNES. 7.2 6.3 240.4 12.7 15.8 -22.1 15.7 -21.2 15.4 -20.8 15.7 -21.4
2025-11-13T00:04:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:04:13.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:04:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.919190
2025-11-13T00:04:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:04:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:04:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:04:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:04:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:04:13.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:03:40', tmtdew=8.25, humidity=58.0, cloud=0.0, wind=13.48, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:03:41', seeing=1.13, atlas_timestamp='2025-11-12T22:03:38.016', atlas_cloud=2, atlas_rain=1, zp_data=[0.20624999999999893, 0.3542500000000004, 0.29825000000000124, 0.2184999999999988, 0.24399999999999977, 0.20425000000000004, 0.20800000000000018, 0.17225000000000001, 0.3534999999999986, 0.6110000000000007, 0.30375000000000085, 0.20950000000000024, 0.40000000000000036, 0.479750000000001, 0.1720000000000006, 0.3569999999999993, 0.49324999999999974, 0.42549999999999955, 0.4079999999999995, 0.2912499999999998, 1.0459999999999985, 0.989749999999999, 0.44425000000000114, 0.49075000000000024, 0.613999999999999, 0.5390000000000006, 0.45924999999999994, 0.37100000000000044, 1.314, 1.1300000000000008, 0.6185000000000009, 0.3435000000000006, 0.6767499999999993], zp_timestamp='2025-11-12T22:01:00')
2025-11-13T00:04:13.227 [DEBUG] [Thread-25142] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:04:13.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:04:13.314 [DEBUG] [Thread-25145] [transport.py] [_log()] starting thread (client mode): 0x14982500
2025-11-13T00:04:13.314 [DEBUG] [Thread-25145] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:04:13.329 [DEBUG] [Thread-25145] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:04:13.329 [INFO] [Thread-25145] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] client lang: <none>
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] server lang: <none>
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] kex follows: False
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] Compression: none
2025-11-13T00:04:13.337 [DEBUG] [Thread-25145] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:04:13.394 [DEBUG] [Thread-25145] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:04:13.394 [DEBUG] [Thread-25145] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:04:13.394 [DEBUG] [Thread-25145] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:04:13.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:04:13.394 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:04:13.451 [DEBUG] [Thread-25145] [transport.py] [_log()] userauth is OK
2025-11-13T00:04:13.451 [DEBUG] [Thread-25145] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:04:13.451 [DEBUG] [Thread-25145] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:04:13.451 [DEBUG] [Thread-25145] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:04:13.451 [DEBUG] [Thread-25145] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:04:13.469 [INFO] [Thread-25145] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:04:13.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:04:13.469 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:04:13.709 [DEBUG] [Thread-25147 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:04:14.306 [DEBUG] [Thread-25145] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:04:14.306 [DEBUG] [Thread-25145] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:04:14.354 [DEBUG] [Thread-25145] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:04:14.354 [DEBUG] [Thread-25145] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:04:14.363 [DEBUG] [Thread-25145] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:04:14.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:04:14.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-11-13T00:04:14.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-11-13T00:04:14.387 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:04:14.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:04:14.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:04:14.395 [DEBUG] [Thread-25145] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:04:20.926 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:04:20.927 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:04:28.749 [DEBUG] [Thread-25148 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:04:43.786 [DEBUG] [Thread-25149 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:04:44.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:04:44.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:04:44.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:04:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 4, 12), 8.35, 57.58, 0.0, 12.88, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:04:45.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:04:12
2025-11-13T00:04:45.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:04:45.308 [DEBUG] [Thread-25150] [transport.py] [_log()] starting thread (client mode): 0x19dd9690
2025-11-13T00:04:45.308 [DEBUG] [Thread-25150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:04:45.328 [DEBUG] [Thread-25150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:04:45.328 [INFO] [Thread-25150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:04:45.331 [DEBUG] [Thread-25150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:04:45.331 [DEBUG] [Thread-25150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:04:45.331 [DEBUG] [Thread-25150] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:04:45.331 [DEBUG] [Thread-25150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] client lang: <none>
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] server lang: <none>
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] kex follows: False
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] Compression: none
2025-11-13T00:04:45.332 [DEBUG] [Thread-25150] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:04:45.350 [DEBUG] [Thread-25150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:04:45.350 [DEBUG] [Thread-25150] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:04:45.351 [DEBUG] [Thread-25150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:04:45.351 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:04:45.352 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:04:45.353 [DEBUG] [Thread-25150] [transport.py] [_log()] userauth is OK
2025-11-13T00:04:45.354 [DEBUG] [Thread-25150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:04:45.354 [DEBUG] [Thread-25150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:04:45.354 [DEBUG] [Thread-25150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:04:45.354 [DEBUG] [Thread-25150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:04:45.374 [INFO] [Thread-25150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:04:45.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:04:46.032 [DEBUG] [Thread-25150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:04:46.032 [DEBUG] [Thread-25150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:04:46.032 [DEBUG] [Thread-25150] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:04:46.073 [DEBUG] [Thread-25150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:04:46.073 [DEBUG] [Thread-25150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:04:46.075 [DEBUG] [Thread-25150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:04:46.087 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:04:46.087 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:04:46.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:04:46.089 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:04:46.092 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:04:46.093 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:04:46.093 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:04:46.093 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:04:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:04:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.919537 -999.00  +15.40  11.66     60   +7.70 1 2 1 1 1     0    0 5.96 -14.51 ZNES. 6.2 11.7 249.2 14.4 15.8 -22.2 15.7 -21.2 15.4 -20.8 15.8 -21.4
2025-11-13T00:04:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:04:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:04:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.919537
2025-11-13T00:04:46.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:04:46.102 [DEBUG] [Thread-25150] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:04:46.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:04:46.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:04:46.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:04:46.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:04:46.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:04:12', tmtdew=8.35, humidity=57.58, cloud=0.0, wind=12.88, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:04:13', seeing=0.96, atlas_timestamp='2025-11-12T22:04:07.997', atlas_cloud=2, atlas_rain=1, zp_data=[0.20624999999999893, 0.3542500000000004, 0.29825000000000124, 0.2184999999999988, 0.24399999999999977, 0.20425000000000004, 0.20800000000000018, 0.17225000000000001, 0.3534999999999986, 0.6110000000000007, 0.30375000000000085, 0.20950000000000024, 0.40000000000000036, 0.479750000000001, 0.1720000000000006, 0.3569999999999993, 0.49324999999999974, 0.42549999999999955, 0.4079999999999995, 0.2912499999999998, 1.0459999999999985, 0.989749999999999, 0.44425000000000114, 0.49075000000000024, 0.613999999999999, 0.5390000000000006, 0.45924999999999994, 0.37100000000000044, 1.314, 1.1300000000000008, 0.6185000000000009, 0.3435000000000006, 0.6767499999999993], zp_timestamp='2025-11-12T22:01:00')
2025-11-13T00: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-11-13T00:04:46.189 [DEBUG] [Thread-25153] [transport.py] [_log()] starting thread (client mode): 0x19dd9d80
2025-11-13T00:04:46.189 [DEBUG] [Thread-25153] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:04:46.205 [DEBUG] [Thread-25153] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:04:46.205 [INFO] [Thread-25153] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] client lang: <none>
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] server lang: <none>
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] kex follows: False
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:04:46.212 [DEBUG] [Thread-25153] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:04:46.213 [DEBUG] [Thread-25153] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:04:46.213 [DEBUG] [Thread-25153] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:04:46.213 [DEBUG] [Thread-25153] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:04:46.213 [DEBUG] [Thread-25153] [transport.py] [_log()] Compression: none
2025-11-13T00:04:46.213 [DEBUG] [Thread-25153] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:04:46.270 [DEBUG] [Thread-25153] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:04:46.270 [DEBUG] [Thread-25153] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:04:46.270 [DEBUG] [Thread-25153] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:04:46.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:04:46.271 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:04:46.328 [DEBUG] [Thread-25153] [transport.py] [_log()] userauth is OK
2025-11-13T00:04:46.328 [DEBUG] [Thread-25153] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:04:46.328 [DEBUG] [Thread-25153] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:04:46.328 [DEBUG] [Thread-25153] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:04:46.328 [DEBUG] [Thread-25153] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:04:46.342 [INFO] [Thread-25153] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00: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-11-13T00:04:46.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:04:47.172 [DEBUG] [Thread-25153] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:04:47.172 [DEBUG] [Thread-25153] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:04:47.220 [DEBUG] [Thread-25153] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:04:47.220 [DEBUG] [Thread-25153] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:04:47.228 [DEBUG] [Thread-25153] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:04:47.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:04:47.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-11-13T00:04:47.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-11-13T00:04:47.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:04:47.252 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:04:47.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:04:47.259 [DEBUG] [Thread-25153] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:04:58.822 [DEBUG] [Thread-25155 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:05:05.061 [DEBUG] [Thread-25156 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:05:13.880 [DEBUG] [Thread-25157 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:05:17.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:05:17.282 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:05:17.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-11-13T00:05:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 4, 44), 8.75, 56.12, 0.0, 16.48, 15.45, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:05:17.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:04:44
2025-11-13T00:05:18.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:05:18.253 [DEBUG] [Thread-25158] [transport.py] [_log()] starting thread (client mode): 0x19dd8fa0
2025-11-13T00:05:18.253 [DEBUG] [Thread-25158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:05:18.274 [DEBUG] [Thread-25158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:05:18.274 [INFO] [Thread-25158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] client lang: <none>
2025-11-13T00:05:18.277 [DEBUG] [Thread-25158] [transport.py] [_log()] server lang: <none>
2025-11-13T00:05:18.278 [DEBUG] [Thread-25158] [transport.py] [_log()] kex follows: False
2025-11-13T00:05:18.278 [DEBUG] [Thread-25158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:05:18.278 [DEBUG] [Thread-25158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:05:18.278 [DEBUG] [Thread-25158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:05:18.278 [DEBUG] [Thread-25158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:05:18.278 [DEBUG] [Thread-25158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:05:18.278 [DEBUG] [Thread-25158] [transport.py] [_log()] Compression: none
2025-11-13T00:05:18.278 [DEBUG] [Thread-25158] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:05:18.292 [DEBUG] [Thread-25158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:05:18.292 [DEBUG] [Thread-25158] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:05:18.293 [DEBUG] [Thread-25158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:05:18.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:05:18.293 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:05:18.294 [DEBUG] [Thread-25158] [transport.py] [_log()] userauth is OK
2025-11-13T00:05:18.294 [DEBUG] [Thread-25158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:05:18.294 [DEBUG] [Thread-25158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:05:18.294 [DEBUG] [Thread-25158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:05:18.294 [DEBUG] [Thread-25158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:05:18.310 [INFO] [Thread-25158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:05:18.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:05:19.434 [DEBUG] [Thread-25158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:05:19.434 [DEBUG] [Thread-25158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:05:19.434 [DEBUG] [Thread-25158] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:05:19.476 [DEBUG] [Thread-25158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:05:19.476 [DEBUG] [Thread-25158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:05:19.480 [DEBUG] [Thread-25158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:05:19.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:05:19.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:05:19.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:05:19.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:05:19.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:05:19.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:05:19.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:05:19.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:05:19.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:05:19.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.919884 -999.00  +15.50   8.50     59   +7.70 1 2 1 1 1     0    0 6.35 -4.14 ZNESw 8.6 8.5 228.4 13.3 15.8 -22.1 15.7 -21.3 15.5 -20.9 15.8 -21.6
2025-11-13T00:05:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:05:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:05:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.919884
2025-11-13T00:05:19.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:05:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:05:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:05:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:05:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:05:19.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:04:44', tmtdew=8.75, humidity=56.12, cloud=0.0, wind=16.48, temperature=15.45, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:04:45', seeing=1.02, atlas_timestamp='2025-11-12T22:04:37.978', atlas_cloud=2, atlas_rain=1, zp_data=[0.20624999999999893, 0.3542500000000004, 0.29825000000000124, 0.2184999999999988, 0.24399999999999977, 0.20425000000000004, 0.20800000000000018, 0.17225000000000001, 0.3534999999999986, 0.6110000000000007, 0.30375000000000085, 0.20950000000000024, 0.40000000000000036, 0.479750000000001, 0.1720000000000006, 0.3569999999999993, 0.49324999999999974, 0.42549999999999955, 0.4079999999999995, 0.2912499999999998, 1.0459999999999985, 0.989749999999999, 0.44425000000000114, 0.49075000000000024, 0.613999999999999, 0.5390000000000006, 0.45924999999999994, 0.37100000000000044, 1.314, 1.1300000000000008, 0.6185000000000009, 0.3435000000000006, 0.6767499999999993], zp_timestamp='2025-11-12T22:01:00')
2025-11-13T00:05:19.506 [DEBUG] [Thread-25158] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:05:19.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:05:19.604 [DEBUG] [Thread-25161] [transport.py] [_log()] starting thread (client mode): 0x14981630
2025-11-13T00:05:19.604 [DEBUG] [Thread-25161] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:05:19.619 [DEBUG] [Thread-25161] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:05:19.619 [INFO] [Thread-25161] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] client lang: <none>
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] server lang: <none>
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] kex follows: False
2025-11-13T00:05:19.627 [DEBUG] [Thread-25161] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:05:19.628 [DEBUG] [Thread-25161] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:05:19.628 [DEBUG] [Thread-25161] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:05:19.628 [DEBUG] [Thread-25161] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:05:19.628 [DEBUG] [Thread-25161] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:05:19.628 [DEBUG] [Thread-25161] [transport.py] [_log()] Compression: none
2025-11-13T00:05:19.628 [DEBUG] [Thread-25161] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:05:19.683 [DEBUG] [Thread-25161] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:05:19.684 [DEBUG] [Thread-25161] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:05:19.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:05:19.685 [DEBUG] [Thread-25161] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:05:19.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:05:19.739 [DEBUG] [Thread-25161] [transport.py] [_log()] userauth is OK
2025-11-13T00:05:19.739 [DEBUG] [Thread-25161] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:05:19.739 [DEBUG] [Thread-25161] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:05:19.739 [DEBUG] [Thread-25161] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:05:19.739 [DEBUG] [Thread-25161] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:05:19.759 [INFO] [Thread-25161] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:05:19.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:05:19.759 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:05:20.575 [DEBUG] [Thread-25161] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:05:20.575 [DEBUG] [Thread-25161] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:05:20.622 [DEBUG] [Thread-25161] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:05:20.623 [DEBUG] [Thread-25161] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:05:20.632 [DEBUG] [Thread-25161] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:05:20.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:05:20.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-11-13T00:05:20.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-11-13T00:05:20.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:05:20.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:05:20.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:05:20.667 [DEBUG] [Thread-25161] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:05:21.132 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:05:21.133 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:05:28.914 [DEBUG] [Thread-25163 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:05:43.953 [DEBUG] [Thread-25164 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:05:50.669 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:05:50.670 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:05:50.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:05:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 5, 16), 8.86, 55.71, 0.0, 16.13, 15.53, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:05:51.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:05:16
2025-11-13T00:05:51.483 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:05:51.630 [DEBUG] [Thread-25165] [transport.py] [_log()] starting thread (client mode): 0x173985e0
2025-11-13T00:05:51.630 [DEBUG] [Thread-25165] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:05:51.650 [DEBUG] [Thread-25165] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:05:51.650 [INFO] [Thread-25165] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] client lang: <none>
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] server lang: <none>
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] kex follows: False
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] Compression: none
2025-11-13T00:05:51.653 [DEBUG] [Thread-25165] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:05:51.662 [DEBUG] [Thread-25165] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:05:51.662 [DEBUG] [Thread-25165] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:05:51.663 [DEBUG] [Thread-25165] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:05:51.663 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:05:51.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:05:51.665 [DEBUG] [Thread-25165] [transport.py] [_log()] userauth is OK
2025-11-13T00:05:51.665 [DEBUG] [Thread-25165] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:05:51.665 [DEBUG] [Thread-25165] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:05:51.665 [DEBUG] [Thread-25165] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:05:51.665 [DEBUG] [Thread-25165] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:05:51.683 [INFO] [Thread-25165] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:05:51.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:05:52.322 [DEBUG] [Thread-25165] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:05:52.322 [DEBUG] [Thread-25165] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:05:52.322 [DEBUG] [Thread-25165] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:05:52.363 [DEBUG] [Thread-25165] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:05:52.363 [DEBUG] [Thread-25165] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:05:52.366 [DEBUG] [Thread-25165] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:05:52.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:05:52.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:05:52.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:05:52.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:05:52.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:05:52.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:05:52.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:05:52.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:05:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:05:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.920231 -999.00  +15.50   9.96     60   +7.80 1 2 1 1 1     0    0 6.92 5.92 ZNESw 10.9 10.0 254.2 13.4 15.9 -22.2 15.8 -21.3 15.5 -20.7 15.8 -21.6
2025-11-13T00:05:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:05:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:05:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.920231
2025-11-13T00:05:52.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:05:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:05:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:05:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:05:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:05:52.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:05:16', tmtdew=8.86, humidity=55.71, cloud=0.0, wind=16.13, temperature=15.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:05:49', seeing=0.95, atlas_timestamp='2025-11-12T22:05:07.958', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:05:00')
2025-11-13T00:05:52.396 [DEBUG] [Thread-25165] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:05:52.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:05:52.491 [DEBUG] [Thread-25168] [transport.py] [_log()] starting thread (client mode): 0x14922170
2025-11-13T00:05:52.491 [DEBUG] [Thread-25168] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:05:52.506 [DEBUG] [Thread-25168] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:05:52.507 [INFO] [Thread-25168] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:05:52.514 [DEBUG] [Thread-25168] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:05:52.515 [DEBUG] [Thread-25168] [transport.py] [_log()] client lang: <none>
2025-11-13T00:05:52.516 [DEBUG] [Thread-25168] [transport.py] [_log()] server lang: <none>
2025-11-13T00:05:52.516 [DEBUG] [Thread-25168] [transport.py] [_log()] kex follows: False
2025-11-13T00:05:52.516 [DEBUG] [Thread-25168] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:05:52.516 [DEBUG] [Thread-25168] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:05:52.516 [DEBUG] [Thread-25168] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:05:52.516 [DEBUG] [Thread-25168] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:05:52.516 [DEBUG] [Thread-25168] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:05:52.517 [DEBUG] [Thread-25168] [transport.py] [_log()] Compression: none
2025-11-13T00:05:52.517 [DEBUG] [Thread-25168] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:05:52.573 [DEBUG] [Thread-25168] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:05:52.574 [DEBUG] [Thread-25168] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:05:52.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:05:52.575 [DEBUG] [Thread-25168] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:05:52.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:05:52.629 [DEBUG] [Thread-25168] [transport.py] [_log()] userauth is OK
2025-11-13T00:05:52.630 [DEBUG] [Thread-25168] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:05:52.630 [DEBUG] [Thread-25168] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:05:52.630 [DEBUG] [Thread-25168] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:05:52.630 [DEBUG] [Thread-25168] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:05:52.650 [INFO] [Thread-25168] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:05:52.650 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:05:52.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:05:53.502 [DEBUG] [Thread-25168] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:05:53.502 [DEBUG] [Thread-25168] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:05:53.549 [DEBUG] [Thread-25168] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:05:53.549 [DEBUG] [Thread-25168] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:05:53.559 [DEBUG] [Thread-25168] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:05:53.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:05:53.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:05:53.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:05:53.588 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:05:53.588 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:05:53.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:05:53.596 [DEBUG] [Thread-25168] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:05:58.989 [DEBUG] [Thread-25170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:05.124 [DEBUG] [Thread-25171 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:14.040 [DEBUG] [Thread-25172 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:21.336 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:21.337 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:23.619 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:06:23.619 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:06:23.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-11-13T00:06:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 6, 21), 9.09, 54.86, 0.0, 15.81, 15.73, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:06:24.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:06:21
2025-11-13T00:06:24.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:06:24.542 [DEBUG] [Thread-25173] [transport.py] [_log()] starting thread (client mode): 0x14920a90
2025-11-13T00:06:24.542 [DEBUG] [Thread-25173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:06:24.564 [DEBUG] [Thread-25173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:06:24.564 [INFO] [Thread-25173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:06:24.567 [DEBUG] [Thread-25173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] client lang: <none>
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] server lang: <none>
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] kex follows: False
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] Compression: none
2025-11-13T00:06:24.568 [DEBUG] [Thread-25173] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:06:24.587 [DEBUG] [Thread-25173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:06:24.588 [DEBUG] [Thread-25173] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:06:24.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:06:24.589 [DEBUG] [Thread-25173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:06:24.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:06:24.591 [DEBUG] [Thread-25173] [transport.py] [_log()] userauth is OK
2025-11-13T00:06:24.592 [DEBUG] [Thread-25173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:06:24.592 [DEBUG] [Thread-25173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:06:24.592 [DEBUG] [Thread-25173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:06:24.592 [DEBUG] [Thread-25173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:06:24.612 [INFO] [Thread-25173] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:06:24.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:06:25.284 [DEBUG] [Thread-25173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:06:25.285 [DEBUG] [Thread-25173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:06:25.285 [DEBUG] [Thread-25173] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:06:25.326 [DEBUG] [Thread-25173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:06:25.326 [DEBUG] [Thread-25173] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:06:25.329 [DEBUG] [Thread-25173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:06:25.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:06:25.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:06:25.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:06:25.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:06:25.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:06:25.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:06:25.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:06:25.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:06:25.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:06:25.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.920579 -999.00  +15.60   9.22     60   +7.80 1 2 1 1 1     0    0 7.14 16.81 ZNES. 9.2 9.2 245.4 14.8 15.9 -22.4 15.8 -21.3 15.5 -20.9 15.8 -21.7
2025-11-13T00:06:25.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:06:25.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:06:25.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.920579
2025-11-13T00:06:25.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:06:25.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:06:25.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:06:25.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:06:25.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:06:25.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:06:21', tmtdew=9.09, humidity=54.86, cloud=0.0, wind=15.81, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:06:21', seeing=0.97, atlas_timestamp='2025-11-12T22:05:38.026', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:05:00')
2025-11-13T00:06:25.360 [DEBUG] [Thread-25173] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:06:25.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:06:25.456 [DEBUG] [Thread-25176] [transport.py] [_log()] starting thread (client mode): 0x14980a60
2025-11-13T00:06:25.456 [DEBUG] [Thread-25176] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:06:25.471 [DEBUG] [Thread-25176] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:06:25.471 [INFO] [Thread-25176] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:06:25.478 [DEBUG] [Thread-25176] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:06:25.478 [DEBUG] [Thread-25176] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] client lang: <none>
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] server lang: <none>
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] kex follows: False
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] Compression: none
2025-11-13T00:06:25.479 [DEBUG] [Thread-25176] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:06:25.536 [DEBUG] [Thread-25176] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:06:25.536 [DEBUG] [Thread-25176] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:06:25.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:06:25.538 [DEBUG] [Thread-25176] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:06:25.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:06:25.592 [DEBUG] [Thread-25176] [transport.py] [_log()] userauth is OK
2025-11-13T00:06:25.592 [DEBUG] [Thread-25176] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:06:25.592 [DEBUG] [Thread-25176] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:06:25.592 [DEBUG] [Thread-25176] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:06:25.592 [DEBUG] [Thread-25176] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:06:25.612 [INFO] [Thread-25176] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:06:25.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:06:25.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:06:26.438 [DEBUG] [Thread-25176] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:06:26.438 [DEBUG] [Thread-25176] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:06:26.486 [DEBUG] [Thread-25176] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:06:26.486 [DEBUG] [Thread-25176] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:06:26.495 [DEBUG] [Thread-25176] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:06:26.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:06:26.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-11-13T00:06:26.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-11-13T00:06:26.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:06:26.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:06:26.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:06:26.532 [DEBUG] [Thread-25176] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:06:29.078 [DEBUG] [Thread-25178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:44.136 [DEBUG] [Thread-25179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:50.901 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:56.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:06:56.554 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:06:56.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-11-13T00:06:57.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 6, 52), 9.13, 54.75, 0.0, 13.48, 15.76, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:06:57.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:06:52
2025-11-13T00:06:57.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:06:57.475 [DEBUG] [Thread-25180] [transport.py] [_log()] starting thread (client mode): 0x14981660
2025-11-13T00:06:57.475 [DEBUG] [Thread-25180] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:06:57.497 [DEBUG] [Thread-25180] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:06:57.497 [INFO] [Thread-25180] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] client lang: <none>
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] server lang: <none>
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] kex follows: False
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] Compression: none
2025-11-13T00:06:57.501 [DEBUG] [Thread-25180] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:06:57.518 [DEBUG] [Thread-25180] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:06:57.519 [DEBUG] [Thread-25180] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:06:57.520 [DEBUG] [Thread-25180] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:06:57.520 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:06:57.521 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:06:57.522 [DEBUG] [Thread-25180] [transport.py] [_log()] userauth is OK
2025-11-13T00:06:57.522 [DEBUG] [Thread-25180] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:06:57.522 [DEBUG] [Thread-25180] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:06:57.523 [DEBUG] [Thread-25180] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:06:57.523 [DEBUG] [Thread-25180] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:06:57.547 [INFO] [Thread-25180] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:06:57.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:06:58.191 [DEBUG] [Thread-25180] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:06:58.192 [DEBUG] [Thread-25180] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:06:58.192 [DEBUG] [Thread-25180] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:06:58.233 [DEBUG] [Thread-25180] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:06:58.233 [DEBUG] [Thread-25180] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:06:58.236 [DEBUG] [Thread-25180] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:06:58.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:06:58.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:06:58.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:06:58.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:06:58.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:06:58.261 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:06:58.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:06:58.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:06:58.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:06:58.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.921273 -999.00  +15.60  10.99     60   +7.90 1 2 1 1 1     0    0 7.67 29.93 ZNES. 9.7 11.0 240.7 14.3 15.9 -22.3 15.8 -21.3 15.5 -20.9 15.8 -21.7
2025-11-13T00:06:58.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:06:58.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:06:58.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.921273
2025-11-13T00:06:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:06:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:06:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:06:58.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:06:58.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:06:58.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:06:52', tmtdew=9.13, humidity=54.75, cloud=0.0, wind=13.48, temperature=15.76, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:06:53', seeing=0.95, atlas_timestamp='2025-11-12T22:06:37.987', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:05:00')
2025-11-13T00:06:58.264 [DEBUG] [Thread-25180] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:06:58.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:06:58.359 [DEBUG] [Thread-25183] [transport.py] [_log()] starting thread (client mode): 0x14945630
2025-11-13T00:06:58.359 [DEBUG] [Thread-25183] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:06:58.374 [DEBUG] [Thread-25183] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:06:58.374 [INFO] [Thread-25183] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] client lang: <none>
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] server lang: <none>
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] kex follows: False
2025-11-13T00:06:58.382 [DEBUG] [Thread-25183] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:06:58.383 [DEBUG] [Thread-25183] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:06:58.383 [DEBUG] [Thread-25183] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:06:58.383 [DEBUG] [Thread-25183] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:06:58.383 [DEBUG] [Thread-25183] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:06:58.383 [DEBUG] [Thread-25183] [transport.py] [_log()] Compression: none
2025-11-13T00:06:58.383 [DEBUG] [Thread-25183] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:06:58.440 [DEBUG] [Thread-25183] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:06:58.441 [DEBUG] [Thread-25183] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:06:58.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:06:58.442 [DEBUG] [Thread-25183] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:06:58.443 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:06:58.496 [DEBUG] [Thread-25183] [transport.py] [_log()] userauth is OK
2025-11-13T00:06:58.496 [DEBUG] [Thread-25183] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:06:58.497 [DEBUG] [Thread-25183] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:06:58.497 [DEBUG] [Thread-25183] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:06:58.497 [DEBUG] [Thread-25183] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:06:58.515 [INFO] [Thread-25183] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:06:58.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:06:58.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:06:58.710 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:59.165 [DEBUG] [Thread-25185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:06:59.350 [DEBUG] [Thread-25183] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:06:59.350 [DEBUG] [Thread-25183] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:06:59.398 [DEBUG] [Thread-25183] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:06:59.398 [DEBUG] [Thread-25183] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:06:59.407 [DEBUG] [Thread-25183] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:06:59.416 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:06:59.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-11-13T00:06:59.425 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:06:59.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:06:59.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:06:59.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:06:59.444 [DEBUG] [Thread-25183] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:07:02.807 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:07:05.192 [DEBUG] [Thread-25186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:07:14.217 [DEBUG] [Thread-25187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:07:21.541 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:07:21.542 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:07:29.251 [DEBUG] [Thread-25188 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:07:29.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:07:29.466 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:07:29.469 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:07:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 7, 24), 9.19, 54.5, 0.0, 13.87, 15.75, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:07:30.103 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:07:24
2025-11-13T00:07:30.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:07:30.364 [DEBUG] [Thread-25189] [transport.py] [_log()] starting thread (client mode): 0x19dda9b0
2025-11-13T00:07:30.364 [DEBUG] [Thread-25189] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:07:30.384 [DEBUG] [Thread-25189] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:07:30.385 [INFO] [Thread-25189] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:07:30.387 [DEBUG] [Thread-25189] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] client lang: <none>
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] server lang: <none>
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] kex follows: False
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] Compression: none
2025-11-13T00:07:30.388 [DEBUG] [Thread-25189] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:07:30.405 [DEBUG] [Thread-25189] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:07:30.406 [DEBUG] [Thread-25189] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:07:30.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:07:30.407 [DEBUG] [Thread-25189] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:07:30.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:07:30.409 [DEBUG] [Thread-25189] [transport.py] [_log()] userauth is OK
2025-11-13T00:07:30.410 [DEBUG] [Thread-25189] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:07:30.410 [DEBUG] [Thread-25189] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:07:30.410 [DEBUG] [Thread-25189] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:07:30.410 [DEBUG] [Thread-25189] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:07:30.434 [INFO] [Thread-25189] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:07:30.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:07:31.067 [DEBUG] [Thread-25189] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:07:31.067 [DEBUG] [Thread-25189] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:07:31.068 [DEBUG] [Thread-25189] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:07:31.108 [DEBUG] [Thread-25189] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:07:31.108 [DEBUG] [Thread-25189] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:07:31.111 [DEBUG] [Thread-25189] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:07:31.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:07:31.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:07:31.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:07:31.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:07:31.133 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:07:31.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:07:31.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:07:31.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:07:31.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:07:31.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.921620 -999.00  +15.60   6.96     60   +7.90 1 2 1 1 1     0    0 7.74 36.82 ZNES. 11.1 7.0 215.3 11.4 15.9 -22.3 15.8 -21.2 15.6 -20.8 15.8 -21.6
2025-11-13T00:07:31.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:07:31.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:07:31.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.921620
2025-11-13T00:07:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:07:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:07:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:07:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:07:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:07:31.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:07:24', tmtdew=9.19, humidity=54.5, cloud=0.0, wind=13.87, temperature=15.75, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:07:25', seeing=1.01, atlas_timestamp='2025-11-12T22:07:07.968', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:05:00')
2025-11-13T00:07:31.137 [DEBUG] [Thread-25189] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:07:31.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:07:31.233 [DEBUG] [Thread-25192] [transport.py] [_log()] starting thread (client mode): 0x19dda080
2025-11-13T00:07:31.233 [DEBUG] [Thread-25192] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:07:31.248 [DEBUG] [Thread-25192] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:07:31.248 [INFO] [Thread-25192] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:07:31.256 [DEBUG] [Thread-25192] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:07:31.256 [DEBUG] [Thread-25192] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] client lang: <none>
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] server lang: <none>
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] kex follows: False
2025-11-13T00:07:31.257 [DEBUG] [Thread-25192] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:07:31.258 [DEBUG] [Thread-25192] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:07:31.258 [DEBUG] [Thread-25192] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:07:31.258 [DEBUG] [Thread-25192] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:07:31.258 [DEBUG] [Thread-25192] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:07:31.258 [DEBUG] [Thread-25192] [transport.py] [_log()] Compression: none
2025-11-13T00:07:31.258 [DEBUG] [Thread-25192] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:07:31.316 [DEBUG] [Thread-25192] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:07:31.317 [DEBUG] [Thread-25192] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:07:31.318 [DEBUG] [Thread-25192] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:07:31.318 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:07:31.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:07:31.376 [DEBUG] [Thread-25192] [transport.py] [_log()] userauth is OK
2025-11-13T00:07:31.376 [DEBUG] [Thread-25192] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:07:31.376 [DEBUG] [Thread-25192] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:07:31.376 [DEBUG] [Thread-25192] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:07:31.376 [DEBUG] [Thread-25192] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:07:31.395 [INFO] [Thread-25192] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:07:31.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:07:31.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:07:32.254 [DEBUG] [Thread-25192] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:07:32.254 [DEBUG] [Thread-25192] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:07:32.302 [DEBUG] [Thread-25192] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:07:32.302 [DEBUG] [Thread-25192] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:07:32.311 [DEBUG] [Thread-25192] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:07:32.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:07:32.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:07:32.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-11-13T00:07:32.339 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:07:32.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:07:32.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:07:32.348 [DEBUG] [Thread-25192] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:07:44.288 [DEBUG] [Thread-25194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:07:59.336 [DEBUG] [Thread-25195 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:08:02.369 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:08:02.369 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:08:02.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:08:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 7, 57), 9.12, 54.56, 0.0, 13.89, 15.7, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:08:03.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:07:57
2025-11-13T00:08:03.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:08:03.321 [DEBUG] [Thread-25196] [transport.py] [_log()] starting thread (client mode): 0x1739ab60
2025-11-13T00:08:03.321 [DEBUG] [Thread-25196] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:08:03.341 [DEBUG] [Thread-25196] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:08:03.341 [INFO] [Thread-25196] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] client lang: <none>
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] server lang: <none>
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] kex follows: False
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] Compression: none
2025-11-13T00:08:03.343 [DEBUG] [Thread-25196] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:08:03.360 [DEBUG] [Thread-25196] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:08:03.360 [DEBUG] [Thread-25196] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:08:03.360 [DEBUG] [Thread-25196] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:08:03.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:08:03.360 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:08:03.361 [DEBUG] [Thread-25196] [transport.py] [_log()] userauth is OK
2025-11-13T00:08:03.361 [DEBUG] [Thread-25196] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:08:03.361 [DEBUG] [Thread-25196] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:08:03.361 [DEBUG] [Thread-25196] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:08:03.361 [DEBUG] [Thread-25196] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:08:03.370 [INFO] [Thread-25196] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:08:03.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:08:04.008 [DEBUG] [Thread-25196] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:08:04.008 [DEBUG] [Thread-25196] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:08:04.008 [DEBUG] [Thread-25196] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:08:04.049 [DEBUG] [Thread-25196] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:08:04.049 [DEBUG] [Thread-25196] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:08:04.051 [DEBUG] [Thread-25196] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:08:04.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:08:04.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:08:04.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:08:04.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:08:04.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:08:04.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:08:04.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.921967 -999.00  +15.60   8.60     60   +7.90 1 2 1 1 1     0    0 7.74 39.16 ZNESw 12.4 8.6 243.6 14.4 15.9 -22.2 15.8 -21.2 15.5 -20.7 15.8 -21.7
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.921967
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:08:04.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:07:57', tmtdew=9.12, humidity=54.56, cloud=0.0, wind=13.89, temperature=15.7, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:07:57', seeing=1.01, atlas_timestamp='2025-11-12T22:07:37.949', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:05:00')
2025-11-13T00:08:04.070 [DEBUG] [Thread-25196] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:08:04.144 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:08:04.155 [DEBUG] [Thread-25199] [transport.py] [_log()] starting thread (client mode): 0x1493fbe0
2025-11-13T00:08:04.155 [DEBUG] [Thread-25199] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:08:04.169 [DEBUG] [Thread-25199] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:08:04.169 [INFO] [Thread-25199] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:08:04.176 [DEBUG] [Thread-25199] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] client lang: <none>
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] server lang: <none>
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] kex follows: False
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] Compression: none
2025-11-13T00:08:04.177 [DEBUG] [Thread-25199] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:08:04.234 [DEBUG] [Thread-25199] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:08:04.234 [DEBUG] [Thread-25199] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:08:04.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:08:04.235 [DEBUG] [Thread-25199] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:08:04.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:08:04.296 [DEBUG] [Thread-25199] [transport.py] [_log()] userauth is OK
2025-11-13T00:08:04.296 [DEBUG] [Thread-25199] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:08:04.296 [DEBUG] [Thread-25199] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:08:04.296 [DEBUG] [Thread-25199] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:08:04.296 [DEBUG] [Thread-25199] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:08:04.311 [INFO] [Thread-25199] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:08:04.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:08:04.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:08:05.125 [DEBUG] [Thread-25199] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:08:05.125 [DEBUG] [Thread-25199] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:08:05.173 [DEBUG] [Thread-25199] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:08:05.173 [DEBUG] [Thread-25199] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:08:05.181 [DEBUG] [Thread-25199] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:08:05.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:08:05.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-11-13T00:08:05.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-11-13T00:08:05.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:08:05.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:08:05.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:08:05.212 [DEBUG] [Thread-25199] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:08:05.248 [DEBUG] [Thread-25201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:08:14.366 [DEBUG] [Thread-25202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:08:21.743 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:08:21.744 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:08:29.419 [DEBUG] [Thread-25203 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:08:35.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:08:35.229 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:08:35.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:08:35.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 8, 29), 9.17, 54.41, 0.0, 13.52, 15.73, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:08:35.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:08:29
2025-11-13T00:08:35.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:08:36.134 [DEBUG] [Thread-25204] [transport.py] [_log()] starting thread (client mode): 0x14906d10
2025-11-13T00:08:36.134 [DEBUG] [Thread-25204] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:08:36.155 [DEBUG] [Thread-25204] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:08:36.155 [INFO] [Thread-25204] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:08:36.158 [DEBUG] [Thread-25204] [transport.py] [_log()] client lang: <none>
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] server lang: <none>
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] kex follows: False
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] Compression: none
2025-11-13T00:08:36.159 [DEBUG] [Thread-25204] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:08:36.178 [DEBUG] [Thread-25204] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:08:36.179 [DEBUG] [Thread-25204] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:08:36.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:08:36.180 [DEBUG] [Thread-25204] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:08:36.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:08:36.183 [DEBUG] [Thread-25204] [transport.py] [_log()] userauth is OK
2025-11-13T00:08:36.183 [DEBUG] [Thread-25204] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:08:36.183 [DEBUG] [Thread-25204] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:08:36.183 [DEBUG] [Thread-25204] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:08:36.183 [DEBUG] [Thread-25204] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:08:36.200 [INFO] [Thread-25204] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:08:36.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:08:36.850 [DEBUG] [Thread-25204] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:08:36.850 [DEBUG] [Thread-25204] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:08:36.850 [DEBUG] [Thread-25204] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:08:36.891 [DEBUG] [Thread-25204] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:08:36.891 [DEBUG] [Thread-25204] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:08:36.894 [DEBUG] [Thread-25204] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:08:36.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:08:36.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:08:36.909 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:08:36.911 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:08:36.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:08:36.919 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:08:36.919 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:08:36.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:08:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:08:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.922315 -999.00  +15.60   9.26     60   +7.90 1 2 1 1 1     0    0 8.18 44.86 ZNESw 9.6 9.3 259.4 15.5 15.9 -22.2 15.8 -21.3 15.5 -20.7 15.8 -21.7
2025-11-13T00:08:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:08:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:08:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.922315
2025-11-13T00:08:36.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:08:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:08:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:08:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:08:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:08:36.921 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:08:29', tmtdew=9.17, humidity=54.41, cloud=0.0, wind=13.52, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:08:29', seeing=0.95, atlas_timestamp='2025-11-12T22:08:08.016', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:05:00')
2025-11-13T00:08:36.922 [DEBUG] [Thread-25204] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:08:37.000 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:08:37.013 [DEBUG] [Thread-25207] [transport.py] [_log()] starting thread (client mode): 0x19ddbc40
2025-11-13T00:08:37.014 [DEBUG] [Thread-25207] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:08:37.028 [DEBUG] [Thread-25207] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:08:37.028 [INFO] [Thread-25207] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:08:37.035 [DEBUG] [Thread-25207] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] client lang: <none>
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] server lang: <none>
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] kex follows: False
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] Compression: none
2025-11-13T00:08:37.036 [DEBUG] [Thread-25207] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:08:37.096 [DEBUG] [Thread-25207] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:08:37.096 [DEBUG] [Thread-25207] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:08:37.097 [DEBUG] [Thread-25207] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:08:37.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:08:37.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:08:37.152 [DEBUG] [Thread-25207] [transport.py] [_log()] userauth is OK
2025-11-13T00:08:37.153 [DEBUG] [Thread-25207] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:08:37.153 [DEBUG] [Thread-25207] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:08:37.153 [DEBUG] [Thread-25207] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:08:37.153 [DEBUG] [Thread-25207] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:08:37.173 [INFO] [Thread-25207] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:08:37.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:08:37.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:08:38.008 [DEBUG] [Thread-25207] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:08:38.008 [DEBUG] [Thread-25207] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:08:38.056 [DEBUG] [Thread-25207] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:08:38.056 [DEBUG] [Thread-25207] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:08:38.064 [DEBUG] [Thread-25207] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:08:38.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:08:38.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-11-13T00:08:38.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-11-13T00:08:38.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:08:38.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:08:38.088 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:08:38.096 [DEBUG] [Thread-25207] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:08:44.451 [DEBUG] [Thread-25209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:08:59.503 [DEBUG] [Thread-25210 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:09:05.311 [DEBUG] [Thread-25211 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:09:08.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:09:08.119 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:09:08.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-11-13T00:09:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 9, 1), 9.13, 54.36, 0.0, 12.93, 15.73, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:09:08.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:09:01
2025-11-13T00:09:08.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:09:09.020 [DEBUG] [Thread-25212] [transport.py] [_log()] starting thread (client mode): 0x14945570
2025-11-13T00:09:09.020 [DEBUG] [Thread-25212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:09:09.040 [DEBUG] [Thread-25212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:09:09.040 [INFO] [Thread-25212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:09:09.044 [DEBUG] [Thread-25212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] client lang: <none>
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] server lang: <none>
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] kex follows: False
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] Compression: none
2025-11-13T00:09:09.045 [DEBUG] [Thread-25212] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:09:09.063 [DEBUG] [Thread-25212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:09:09.064 [DEBUG] [Thread-25212] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:09:09.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:09:09.065 [DEBUG] [Thread-25212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:09:09.066 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:09:09.068 [DEBUG] [Thread-25212] [transport.py] [_log()] userauth is OK
2025-11-13T00:09:09.068 [DEBUG] [Thread-25212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:09:09.068 [DEBUG] [Thread-25212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:09:09.068 [DEBUG] [Thread-25212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:09:09.068 [DEBUG] [Thread-25212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:09:09.091 [INFO] [Thread-25212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:09:09.092 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:09:09.738 [DEBUG] [Thread-25212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:09:09.738 [DEBUG] [Thread-25212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:09:09.738 [DEBUG] [Thread-25212] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:09:09.779 [DEBUG] [Thread-25212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:09:09.779 [DEBUG] [Thread-25212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:09:09.782 [DEBUG] [Thread-25212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:09:09.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:09:09.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:09:09.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:09:09.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:09:09.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:09:09.806 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:09:09.806 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:09:09.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:09:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:09:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.922662 -999.00  +15.60   9.30     60   +8.00 1 2 1 1 1     0    0 8.28 48.26 ZNESw 11.6 9.3 257.4 13.6 15.9 -22.2 15.8 -21.2 15.5 -20.7 15.8 -21.6
2025-11-13T00:09:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:09:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:09:09.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.922662
2025-11-13T00:09:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:09:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:09:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:09:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:09:09.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:09:09.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:09:01', tmtdew=9.13, humidity=54.36, cloud=0.0, wind=12.93, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:09:01', seeing=0.95, atlas_timestamp='2025-11-12T22:08:37.997', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:07:00')
2025-11-13T00:09:09.809 [DEBUG] [Thread-25212] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:09:09.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:09:09.914 [DEBUG] [Thread-25215] [transport.py] [_log()] starting thread (client mode): 0x149479d0
2025-11-13T00:09:09.915 [DEBUG] [Thread-25215] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:09:09.929 [DEBUG] [Thread-25215] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:09:09.929 [INFO] [Thread-25215] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] client lang: <none>
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] server lang: <none>
2025-11-13T00:09:09.937 [DEBUG] [Thread-25215] [transport.py] [_log()] kex follows: False
2025-11-13T00:09:09.938 [DEBUG] [Thread-25215] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:09:09.938 [DEBUG] [Thread-25215] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:09:09.938 [DEBUG] [Thread-25215] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:09:09.938 [DEBUG] [Thread-25215] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:09:09.938 [DEBUG] [Thread-25215] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:09:09.938 [DEBUG] [Thread-25215] [transport.py] [_log()] Compression: none
2025-11-13T00:09:09.938 [DEBUG] [Thread-25215] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:09:09.996 [DEBUG] [Thread-25215] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:09:09.997 [DEBUG] [Thread-25215] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:09:09.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:09:09.997 [DEBUG] [Thread-25215] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:09:09.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:09:10.052 [DEBUG] [Thread-25215] [transport.py] [_log()] userauth is OK
2025-11-13T00:09:10.052 [DEBUG] [Thread-25215] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:09:10.053 [DEBUG] [Thread-25215] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:09:10.053 [DEBUG] [Thread-25215] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:09:10.053 [DEBUG] [Thread-25215] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:09:10.072 [INFO] [Thread-25215] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:09:10.072 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:09:10.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:09:10.906 [DEBUG] [Thread-25215] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:09:10.906 [DEBUG] [Thread-25215] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:09:10.955 [DEBUG] [Thread-25215] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:09:10.955 [DEBUG] [Thread-25215] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:09:10.967 [DEBUG] [Thread-25215] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:09:10.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:09:10.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:09:10.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-11-13T00:09:11.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:09:11.005 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:09:11.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:09:11.017 [DEBUG] [Thread-25215] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:09:14.540 [DEBUG] [Thread-25217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:09:21.947 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:09:21.947 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:09:29.598 [DEBUG] [Thread-25218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:09:41.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:09:41.032 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:09:41.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-11-13T00:09:41.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 9, 33), 9.27, 54.06, 0.0, 15.35, 15.96, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:09:41.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:09:33
2025-11-13T00:09:41.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:09:41.948 [DEBUG] [Thread-25219] [transport.py] [_log()] starting thread (client mode): 0x14980190
2025-11-13T00:09:41.948 [DEBUG] [Thread-25219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:09:41.968 [DEBUG] [Thread-25219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:09:41.968 [INFO] [Thread-25219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:09:41.971 [DEBUG] [Thread-25219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:09:41.971 [DEBUG] [Thread-25219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:09:41.971 [DEBUG] [Thread-25219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:09:41.971 [DEBUG] [Thread-25219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:09:41.971 [DEBUG] [Thread-25219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] client lang: <none>
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] server lang: <none>
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] kex follows: False
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:09:41.972 [DEBUG] [Thread-25219] [transport.py] [_log()] Compression: none
2025-11-13T00:09:41.973 [DEBUG] [Thread-25219] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:09:41.991 [DEBUG] [Thread-25219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:09:41.992 [DEBUG] [Thread-25219] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:09:41.992 [DEBUG] [Thread-25219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:09:41.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:09:41.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:09:41.994 [DEBUG] [Thread-25219] [transport.py] [_log()] userauth is OK
2025-11-13T00:09:41.995 [DEBUG] [Thread-25219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:09:41.995 [DEBUG] [Thread-25219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:09:41.995 [DEBUG] [Thread-25219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:09:41.995 [DEBUG] [Thread-25219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:09:42.015 [INFO] [Thread-25219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:09:42.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:09:42.622 [DEBUG] [Thread-25219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:09:42.622 [DEBUG] [Thread-25219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:09:42.623 [DEBUG] [Thread-25219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:09:42.663 [DEBUG] [Thread-25219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:09:42.664 [DEBUG] [Thread-25219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:09:42.666 [DEBUG] [Thread-25219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:09:42.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:09:42.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:09:42.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:09:42.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:09:42.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:09:42.692 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:09:42.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:09:42.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:09:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:09:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.923009 -999.00  +15.60  11.86     60   +8.00 1 2 1 1 1     0    0 8.38 50.59 ZNESw 12.1 11.9 258.2 14.2 15.9 -22.2 15.8 -21.2 15.6 -20.7 15.9 -21.6
2025-11-13T00:09:42.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:09:42.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:09:42.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.923009
2025-11-13T00:09:42.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:09:42.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:09:42.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:09:42.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:09:42.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:09:42.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:09:33', tmtdew=9.27, humidity=54.06, cloud=0.0, wind=15.35, temperature=15.96, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:09:33', seeing=0.86, atlas_timestamp='2025-11-12T22:09:07.978', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:07:00')
2025-11-13T00:09:42.695 [DEBUG] [Thread-25219] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:09:42.780 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:09:42.792 [DEBUG] [Thread-25222] [transport.py] [_log()] starting thread (client mode): 0x14944d90
2025-11-13T00:09:42.793 [DEBUG] [Thread-25222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:09:42.807 [DEBUG] [Thread-25222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:09:42.807 [INFO] [Thread-25222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] client lang: <none>
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] server lang: <none>
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] kex follows: False
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:09:42.815 [DEBUG] [Thread-25222] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:09:42.816 [DEBUG] [Thread-25222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:09:42.816 [DEBUG] [Thread-25222] [transport.py] [_log()] Compression: none
2025-11-13T00:09:42.816 [DEBUG] [Thread-25222] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:09:42.871 [DEBUG] [Thread-25222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:09:42.872 [DEBUG] [Thread-25222] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:09:42.873 [DEBUG] [Thread-25222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:09:42.873 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:09:42.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:09:42.928 [DEBUG] [Thread-25222] [transport.py] [_log()] userauth is OK
2025-11-13T00:09:42.928 [DEBUG] [Thread-25222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:09:42.929 [DEBUG] [Thread-25222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:09:42.929 [DEBUG] [Thread-25222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:09:42.929 [DEBUG] [Thread-25222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:09:42.947 [INFO] [Thread-25222] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:09:42.948 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:09:42.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:09:43.774 [DEBUG] [Thread-25222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:09:43.774 [DEBUG] [Thread-25222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:09:43.821 [DEBUG] [Thread-25222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:09:43.822 [DEBUG] [Thread-25222] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:09:43.831 [DEBUG] [Thread-25222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:09:43.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:09:43.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-11-13T00:09:43.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-11-13T00:09:43.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:09:43.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:09:43.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:09:43.868 [DEBUG] [Thread-25222] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:09:44.633 [DEBUG] [Thread-25224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:09:59.681 [DEBUG] [Thread-25225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:05.363 [DEBUG] [Thread-25226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:13.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:10:13.890 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:10:13.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-11-13T00:10:14.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 10, 5), 8.98, 55.23, 0.0, 12.46, 15.73, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:10:14.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:10:05
2025-11-13T00:10:14.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:10:14.708 [DEBUG] [Thread-25227 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:14.811 [DEBUG] [Thread-25228] [transport.py] [_log()] starting thread (client mode): 0x14981120
2025-11-13T00:10:14.811 [DEBUG] [Thread-25228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:10:14.833 [DEBUG] [Thread-25228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:10:14.834 [INFO] [Thread-25228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] client lang: <none>
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] server lang: <none>
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] kex follows: False
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] Compression: none
2025-11-13T00:10:14.837 [DEBUG] [Thread-25228] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:10:14.856 [DEBUG] [Thread-25228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:10:14.857 [DEBUG] [Thread-25228] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:10:14.857 [DEBUG] [Thread-25228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:10:14.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:10:14.858 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:10:14.860 [DEBUG] [Thread-25228] [transport.py] [_log()] userauth is OK
2025-11-13T00:10:14.860 [DEBUG] [Thread-25228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:10:14.860 [DEBUG] [Thread-25228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:10:14.860 [DEBUG] [Thread-25228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:10:14.860 [DEBUG] [Thread-25228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:10:14.885 [INFO] [Thread-25228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:10:14.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:10:16.830 [DEBUG] [Thread-25228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:10:16.830 [DEBUG] [Thread-25228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:10:16.830 [DEBUG] [Thread-25228] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:10:16.871 [DEBUG] [Thread-25228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:10:16.871 [DEBUG] [Thread-25228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:10:16.874 [DEBUG] [Thread-25228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:10:16.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:10:16.886 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:10:16.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:10:16.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:10:16.897 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:10:16.899 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:10:16.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:10:16.899 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:10:16.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:10:16.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.923703 -999.00  +15.60  11.35     60   +8.00 1 2 1 1 1     0    0 8.35 54.49 ZNESw 9.9 11.3 260.8 14.5 16.0 -22.2 15.9 -21.3 15.6 -20.8 15.9 -21.8
2025-11-13T00:10:16.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:10:16.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:10:16.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.923703
2025-11-13T00:10:16.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:10:16.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:10:16.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:10:16.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:10:16.902 [DEBUG] [Thread-25228] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:10:16.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:10:16.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:10:05', tmtdew=8.98, humidity=55.23, cloud=0.0, wind=12.46, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:10:05', seeing=0.88, atlas_timestamp='2025-11-12T22:10:07.939', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:07:00')
2025-11-13T00:10:16.985 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:10:16.998 [DEBUG] [Thread-25231] [transport.py] [_log()] starting thread (client mode): 0x14981ff0
2025-11-13T00:10:16.998 [DEBUG] [Thread-25231] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:10:17.013 [DEBUG] [Thread-25231] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:10:17.013 [INFO] [Thread-25231] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:10:17.021 [DEBUG] [Thread-25231] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:10:17.021 [DEBUG] [Thread-25231] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:10:17.021 [DEBUG] [Thread-25231] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] client lang: <none>
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] server lang: <none>
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] kex follows: False
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:10:17.022 [DEBUG] [Thread-25231] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:10:17.023 [DEBUG] [Thread-25231] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:10:17.023 [DEBUG] [Thread-25231] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:10:17.023 [DEBUG] [Thread-25231] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:10:17.023 [DEBUG] [Thread-25231] [transport.py] [_log()] Compression: none
2025-11-13T00:10:17.023 [DEBUG] [Thread-25231] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:10:17.081 [DEBUG] [Thread-25231] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:10:17.081 [DEBUG] [Thread-25231] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:10:17.082 [DEBUG] [Thread-25231] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:10:17.082 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:10:17.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:10:17.140 [DEBUG] [Thread-25231] [transport.py] [_log()] userauth is OK
2025-11-13T00:10:17.141 [DEBUG] [Thread-25231] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:10:17.141 [DEBUG] [Thread-25231] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:10:17.141 [DEBUG] [Thread-25231] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:10:17.141 [DEBUG] [Thread-25231] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:10:17.159 [INFO] [Thread-25231] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:10:17.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:10:17.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:10:18.044 [DEBUG] [Thread-25231] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:10:18.045 [DEBUG] [Thread-25231] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:10:18.093 [DEBUG] [Thread-25231] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:10:18.093 [DEBUG] [Thread-25231] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:10:18.104 [DEBUG] [Thread-25231] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:10:18.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:10:18.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:10:18.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:10:18.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:10:18.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:10:18.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:10:18.143 [DEBUG] [Thread-25231] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:10:22.150 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:22.151 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:25.587 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:29.741 [DEBUG] [Thread-25233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:34.437 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:38.505 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:44.791 [DEBUG] [Thread-25234 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:10:48.165 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:10:48.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:10:48.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-11-13T00:10:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 10, 37), 8.92, 55.28, 0.0, 13.38, 15.66, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:10:48.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:10:37
2025-11-13T00:10:48.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:10:49.080 [DEBUG] [Thread-25235] [transport.py] [_log()] starting thread (client mode): 0x11f02bf0
2025-11-13T00:10:49.081 [DEBUG] [Thread-25235] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:10:49.100 [DEBUG] [Thread-25235] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:10:49.100 [INFO] [Thread-25235] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:10:49.103 [DEBUG] [Thread-25235] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:10:49.103 [DEBUG] [Thread-25235] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] client lang: <none>
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] server lang: <none>
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] kex follows: False
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] Compression: none
2025-11-13T00:10:49.104 [DEBUG] [Thread-25235] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:10:49.121 [DEBUG] [Thread-25235] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:10:49.122 [DEBUG] [Thread-25235] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:10:49.122 [DEBUG] [Thread-25235] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:10:49.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:10:49.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:10:49.124 [DEBUG] [Thread-25235] [transport.py] [_log()] userauth is OK
2025-11-13T00:10:49.124 [DEBUG] [Thread-25235] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:10:49.124 [DEBUG] [Thread-25235] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:10:49.124 [DEBUG] [Thread-25235] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:10:49.124 [DEBUG] [Thread-25235] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:10:49.149 [INFO] [Thread-25235] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:10:49.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:10:49.792 [DEBUG] [Thread-25235] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:10:49.792 [DEBUG] [Thread-25235] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:10:49.792 [DEBUG] [Thread-25235] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:10:49.833 [DEBUG] [Thread-25235] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:10:49.833 [DEBUG] [Thread-25235] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:10:49.837 [DEBUG] [Thread-25235] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:10:49.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:10:49.848 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:10:49.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:10:49.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:10:49.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:10:49.860 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:10:49.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:10:49.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:10:49.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:10:49.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.923703 -999.00  +15.60  11.35     60   +8.00 1 2 1 1 1     0    0 8.35 54.49 ZNESw 9.9 11.3 260.8 14.5 16.0 -22.2 15.9 -21.3 15.6 -20.8 15.9 -21.8
2025-11-13T00:10:49.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:10:49.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:10:49.861 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.923703
2025-11-13T00:10:49.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:10:49.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:10:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:10:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:10:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:10:49.863 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:10:37', tmtdew=8.92, humidity=55.28, cloud=0.0, wind=13.38, temperature=15.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:10:37', seeing=0.88, atlas_timestamp='2025-11-12T22:10:07.939', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:07:00')
2025-11-13T00:10:49.863 [DEBUG] [Thread-25235] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:10:49.947 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:10:49.958 [DEBUG] [Thread-25238] [transport.py] [_log()] starting thread (client mode): 0x19dda530
2025-11-13T00:10:49.959 [DEBUG] [Thread-25238] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:10:49.973 [DEBUG] [Thread-25238] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:10:49.974 [INFO] [Thread-25238] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:10:49.981 [DEBUG] [Thread-25238] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] client lang: <none>
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] server lang: <none>
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] kex follows: False
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] Compression: none
2025-11-13T00:10:49.982 [DEBUG] [Thread-25238] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:10:50.040 [DEBUG] [Thread-25238] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:10:50.041 [DEBUG] [Thread-25238] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:10:50.041 [DEBUG] [Thread-25238] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:10:50.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:10:50.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:10:50.096 [DEBUG] [Thread-25238] [transport.py] [_log()] userauth is OK
2025-11-13T00:10:50.096 [DEBUG] [Thread-25238] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:10:50.097 [DEBUG] [Thread-25238] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:10:50.097 [DEBUG] [Thread-25238] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:10:50.097 [DEBUG] [Thread-25238] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:10:50.118 [INFO] [Thread-25238] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:10:50.119 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:10:50.119 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:10:50.955 [DEBUG] [Thread-25238] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:10:50.955 [DEBUG] [Thread-25238] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:10:51.003 [DEBUG] [Thread-25238] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:10:51.004 [DEBUG] [Thread-25238] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:10:51.013 [DEBUG] [Thread-25238] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:10:51.022 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:10:51.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-11-13T00:10:51.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-11-13T00:10:51.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:10:51.041 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:10:51.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:10:51.050 [DEBUG] [Thread-25238] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:10:59.829 [DEBUG] [Thread-25240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:11:05.420 [DEBUG] [Thread-25241 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:11:14.878 [DEBUG] [Thread-25242 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:11:21.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:11:21.072 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:11:21.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-11-13T00:11:21.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 11, 9), 8.86, 55.49, 0.0, 12.63, 15.61, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:11:21.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:11:09
2025-11-13T00:11:21.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:11:21.988 [DEBUG] [Thread-25243] [transport.py] [_log()] starting thread (client mode): 0x11f00d90
2025-11-13T00:11:21.988 [DEBUG] [Thread-25243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:11:22.008 [DEBUG] [Thread-25243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:11:22.008 [INFO] [Thread-25243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] client lang: <none>
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] server lang: <none>
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] kex follows: False
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] Compression: none
2025-11-13T00:11:22.010 [DEBUG] [Thread-25243] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:11:22.031 [DEBUG] [Thread-25243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:11:22.031 [DEBUG] [Thread-25243] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:11:22.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:11:22.033 [DEBUG] [Thread-25243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:11:22.034 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:11:22.035 [DEBUG] [Thread-25243] [transport.py] [_log()] userauth is OK
2025-11-13T00:11:22.035 [DEBUG] [Thread-25243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:11:22.035 [DEBUG] [Thread-25243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:11:22.035 [DEBUG] [Thread-25243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:11:22.035 [DEBUG] [Thread-25243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:11:22.073 [INFO] [Thread-25243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:11:22.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:11:22.358 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:11:22.359 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:11:22.885 [DEBUG] [Thread-25243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:11:22.885 [DEBUG] [Thread-25243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:11:22.885 [DEBUG] [Thread-25243] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:11:22.926 [DEBUG] [Thread-25243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:11:22.926 [DEBUG] [Thread-25243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:11:22.929 [DEBUG] [Thread-25243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:11:22.938 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:11:22.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:11:22.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:11:22.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:11:22.948 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:11:22.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:11:22.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:11:22.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:11:22.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:11:22.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.924051 -999.00  +15.60  10.38     60   +8.10 1 2 1 1 1     0    0 8.51 56.46 ZNESw 13.8 10.4 255.4 15.3 15.9 -22.2 15.9 -21.3 15.6 -20.8 15.9 -21.6
2025-11-13T00:11:22.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:11:22.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:11:22.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.924051
2025-11-13T00:11:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:11:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:11:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:11:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:11:22.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:11:22.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:11:09', tmtdew=8.86, humidity=55.49, cloud=0.0, wind=12.63, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:11:09', seeing=0.93, atlas_timestamp='2025-11-12T22:10:38.006', atlas_cloud=2, atlas_rain=1, zp_data=[0.2087500000000002, 0.2527500000000007, 0.24975000000000058, 0.25150000000000006, 0.4664999999999999, 0.40625, 0.20500000000000007, 0.11925000000000097, 0.1894999999999989, 0.43400000000000105, 0.2712500000000002, 0.3274999999999988, 0.7749999999999995, 0.5582499999999992, 0.31700000000000017, 0.26699999999999946, 0.29625000000000057, 0.6594999999999995, 0.4039999999999999, 0.5342499999999992, 0.9719999999999986, 0.7017499999999988, 0.5177500000000022, 0.35325000000000095, 0.5085000000000006, 0.38349999999999973, 0.40974999999999984, 0.6204999999999998, 1.0899999999999999, 0.9750000000000014, 0.6380000000000008, 0.2815000000000012, 0.6077499999999993], zp_timestamp='2025-11-12T22:07:00')
2025-11-13T00:11:22.953 [DEBUG] [Thread-25243] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:11:23.034 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:11:23.047 [DEBUG] [Thread-25246] [transport.py] [_log()] starting thread (client mode): 0x19ddbd30
2025-11-13T00:11:23.048 [DEBUG] [Thread-25246] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:11:23.062 [DEBUG] [Thread-25246] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:11:23.063 [INFO] [Thread-25246] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:11:23.070 [DEBUG] [Thread-25246] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:11:23.070 [DEBUG] [Thread-25246] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:11:23.070 [DEBUG] [Thread-25246] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:11:23.070 [DEBUG] [Thread-25246] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:11:23.070 [DEBUG] [Thread-25246] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:11:23.070 [DEBUG] [Thread-25246] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:11:23.070 [DEBUG] [Thread-25246] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] client lang: <none>
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] server lang: <none>
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] kex follows: False
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] Compression: none
2025-11-13T00:11:23.071 [DEBUG] [Thread-25246] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:11:23.128 [DEBUG] [Thread-25246] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:11:23.129 [DEBUG] [Thread-25246] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:11:23.130 [DEBUG] [Thread-25246] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:11:23.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:11:23.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:11:23.184 [DEBUG] [Thread-25246] [transport.py] [_log()] userauth is OK
2025-11-13T00:11:23.185 [DEBUG] [Thread-25246] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:11:23.185 [DEBUG] [Thread-25246] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:11:23.185 [DEBUG] [Thread-25246] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:11:23.185 [DEBUG] [Thread-25246] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:11:23.203 [INFO] [Thread-25246] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:11:23.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:11:23.204 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:11:24.101 [DEBUG] [Thread-25246] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:11:24.101 [DEBUG] [Thread-25246] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:11:24.149 [DEBUG] [Thread-25246] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:11:24.149 [DEBUG] [Thread-25246] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:11:24.158 [DEBUG] [Thread-25246] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:11:24.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:11:24.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-11-13T00:11:24.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-11-13T00:11:24.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:11:24.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:11:24.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:11:24.196 [DEBUG] [Thread-25246] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:11:29.904 [DEBUG] [Thread-25248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:11:44.958 [DEBUG] [Thread-25249 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:11:54.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:11:54.218 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:11:54.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-11-13T00:11:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 11, 41), 8.76, 56.16, 0.0, 12.72, 15.58, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:11:54.851 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:11:41
2025-11-13T00:11:54.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:11:55.130 [DEBUG] [Thread-25250] [transport.py] [_log()] starting thread (client mode): 0x14946cb0
2025-11-13T00:11:55.130 [DEBUG] [Thread-25250] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:11:55.152 [DEBUG] [Thread-25250] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:11:55.152 [INFO] [Thread-25250] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:11:55.153 [DEBUG] [Thread-25250] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] client lang: <none>
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] server lang: <none>
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] kex follows: False
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] Compression: none
2025-11-13T00:11:55.154 [DEBUG] [Thread-25250] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:11:55.172 [DEBUG] [Thread-25250] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:11:55.172 [DEBUG] [Thread-25250] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:11:55.172 [DEBUG] [Thread-25250] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:11:55.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:11:55.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:11:55.173 [DEBUG] [Thread-25250] [transport.py] [_log()] userauth is OK
2025-11-13T00:11:55.173 [DEBUG] [Thread-25250] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:11:55.173 [DEBUG] [Thread-25250] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:11:55.173 [DEBUG] [Thread-25250] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:11:55.173 [DEBUG] [Thread-25250] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:11:55.182 [INFO] [Thread-25250] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:11:55.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:11:55.801 [DEBUG] [Thread-25250] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:11:55.801 [DEBUG] [Thread-25250] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:11:55.801 [DEBUG] [Thread-25250] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:11:55.842 [DEBUG] [Thread-25250] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:11:55.842 [DEBUG] [Thread-25250] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:11:55.844 [DEBUG] [Thread-25250] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:11:55.856 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:11:55.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:11:55.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:11:55.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:11:55.861 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:11:55.862 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:11:55.862 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.924398 -999.00  +15.60   9.81     61   +8.10 1 2 1 1 1     0    0 8.47 56.76 ZNESw 10.8 9.8 259.4 15.5 16.0 -22.3 15.8 -21.3 15.6 -20.8 15.9 -21.6
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.924398
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:11:55.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:11:41', tmtdew=8.76, humidity=56.16, cloud=0.0, wind=12.72, temperature=15.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:11:41', seeing=0.91, atlas_timestamp='2025-11-12T22:11:07.987', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:11:00')
2025-11-13T00:11:55.863 [DEBUG] [Thread-25250] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:11:55.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:11:55.949 [DEBUG] [Thread-25253] [transport.py] [_log()] starting thread (client mode): 0x14980c70
2025-11-13T00:11:55.949 [DEBUG] [Thread-25253] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:11:55.964 [DEBUG] [Thread-25253] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:11:55.964 [INFO] [Thread-25253] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] client lang: <none>
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] server lang: <none>
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] kex follows: False
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] Compression: none
2025-11-13T00:11:55.972 [DEBUG] [Thread-25253] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:11:56.030 [DEBUG] [Thread-25253] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:11:56.030 [DEBUG] [Thread-25253] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:11:56.030 [DEBUG] [Thread-25253] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:11:56.030 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:11:56.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:11:56.087 [DEBUG] [Thread-25253] [transport.py] [_log()] userauth is OK
2025-11-13T00:11:56.088 [DEBUG] [Thread-25253] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:11:56.088 [DEBUG] [Thread-25253] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:11:56.088 [DEBUG] [Thread-25253] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:11:56.088 [DEBUG] [Thread-25253] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:11:56.102 [INFO] [Thread-25253] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00: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-11-13T00:11:56.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:11:56.932 [DEBUG] [Thread-25253] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:11:56.932 [DEBUG] [Thread-25253] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:11:56.980 [DEBUG] [Thread-25253] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:11:56.980 [DEBUG] [Thread-25253] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:11:56.988 [DEBUG] [Thread-25253] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:11:56.996 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:11:56.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:11:57.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-11-13T00:11:57.011 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:11:57.011 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:11:57.011 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:11:57.019 [DEBUG] [Thread-25253] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:11:59.992 [DEBUG] [Thread-25255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:12:05.478 [DEBUG] [Thread-25256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:12:15.049 [DEBUG] [Thread-25257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:12:22.559 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:12:22.560 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:12:27.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:12:27.039 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:12:27.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:12:27.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 12, 13), 8.74, 56.26, 0.0, 12.58, 15.61, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:12:27.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:12:13
2025-11-13T00:12:27.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:12:27.959 [DEBUG] [Thread-25258] [transport.py] [_log()] starting thread (client mode): 0x14946290
2025-11-13T00:12:27.959 [DEBUG] [Thread-25258] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:12:27.978 [DEBUG] [Thread-25258] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:12:27.979 [INFO] [Thread-25258] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:12:27.982 [DEBUG] [Thread-25258] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:12:27.982 [DEBUG] [Thread-25258] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:12:27.982 [DEBUG] [Thread-25258] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:12:27.982 [DEBUG] [Thread-25258] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:12:27.982 [DEBUG] [Thread-25258] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] client lang: <none>
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] server lang: <none>
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] kex follows: False
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] Compression: none
2025-11-13T00:12:27.983 [DEBUG] [Thread-25258] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:12:28.004 [DEBUG] [Thread-25258] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:12:28.005 [DEBUG] [Thread-25258] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:12:28.005 [DEBUG] [Thread-25258] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:12:28.005 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:12:28.006 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:12:28.007 [DEBUG] [Thread-25258] [transport.py] [_log()] userauth is OK
2025-11-13T00:12:28.007 [DEBUG] [Thread-25258] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:12:28.007 [DEBUG] [Thread-25258] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:12:28.007 [DEBUG] [Thread-25258] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:12:28.007 [DEBUG] [Thread-25258] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:12:28.034 [INFO] [Thread-25258] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:12:28.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:12:28.778 [DEBUG] [Thread-25258] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:12:28.778 [DEBUG] [Thread-25258] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:12:28.778 [DEBUG] [Thread-25258] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:12:28.818 [DEBUG] [Thread-25258] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:12:28.818 [DEBUG] [Thread-25258] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:12:28.821 [DEBUG] [Thread-25258] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:12:28.832 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:12:28.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:12:28.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:12:28.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:12:28.841 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:12:28.843 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:12:28.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:12:28.844 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:12:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:12:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.924745 -999.00  +15.50  10.30     61   +8.10 1 2 1 1 1     0    0 8.61 61.16 ZNESw 8.5 10.3 250.2 12.5 15.9 -22.4 15.8 -21.1 15.7 -20.9 15.8 -21.6
2025-11-13T00:12:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:12:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:12:28.844 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.924745
2025-11-13T00:12:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:12:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:12:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:12:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:12:28.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:12:28.846 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:12:13', tmtdew=8.74, humidity=56.26, cloud=0.0, wind=12.58, temperature=15.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:12:14', seeing=0.91, atlas_timestamp='2025-11-12T22:11:37.968', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:11:00')
2025-11-13T00:12:28.846 [DEBUG] [Thread-25258] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:12:28.930 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:12:28.944 [DEBUG] [Thread-25261] [transport.py] [_log()] starting thread (client mode): 0x17347d00
2025-11-13T00:12:28.944 [DEBUG] [Thread-25261] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:12:28.959 [DEBUG] [Thread-25261] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:12:28.959 [INFO] [Thread-25261] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:12:28.966 [DEBUG] [Thread-25261] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:12:28.966 [DEBUG] [Thread-25261] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:12:28.966 [DEBUG] [Thread-25261] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:12:28.966 [DEBUG] [Thread-25261] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:12:28.966 [DEBUG] [Thread-25261] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] client lang: <none>
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] server lang: <none>
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] kex follows: False
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] Compression: none
2025-11-13T00:12:28.967 [DEBUG] [Thread-25261] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:12:29.023 [DEBUG] [Thread-25261] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:12:29.024 [DEBUG] [Thread-25261] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:12:29.024 [DEBUG] [Thread-25261] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:12:29.024 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:12:29.025 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:12:29.080 [DEBUG] [Thread-25261] [transport.py] [_log()] userauth is OK
2025-11-13T00:12:29.080 [DEBUG] [Thread-25261] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:12:29.080 [DEBUG] [Thread-25261] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:12:29.080 [DEBUG] [Thread-25261] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:12:29.080 [DEBUG] [Thread-25261] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:12:29.101 [INFO] [Thread-25261] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:12:29.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:12:29.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:12:29.971 [DEBUG] [Thread-25261] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:12:29.971 [DEBUG] [Thread-25261] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:12:30.018 [DEBUG] [Thread-25261] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:12:30.018 [DEBUG] [Thread-25261] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:12:30.026 [DEBUG] [Thread-25261] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:12:30.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:12:30.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-11-13T00:12:30.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-11-13T00:12:30.052 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:12:30.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:12:30.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:12:30.061 [DEBUG] [Thread-25261] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:12:30.081 [DEBUG] [Thread-25263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:12:45.132 [DEBUG] [Thread-25264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:13:00.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:13:00.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:13:00.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-11-13T00:13:00.168 [DEBUG] [Thread-25265 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:13:00.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 12, 45), 8.57, 56.51, 0.0, 13.2, 15.53, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:13:00.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:12:45
2025-11-13T00:13:00.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:13:00.972 [DEBUG] [Thread-25266] [transport.py] [_log()] starting thread (client mode): 0x17344310
2025-11-13T00:13:00.972 [DEBUG] [Thread-25266] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:13:00.992 [DEBUG] [Thread-25266] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:13:00.992 [INFO] [Thread-25266] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:13:00.995 [DEBUG] [Thread-25266] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:13:00.995 [DEBUG] [Thread-25266] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:13:00.995 [DEBUG] [Thread-25266] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:13:00.995 [DEBUG] [Thread-25266] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] client lang: <none>
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] server lang: <none>
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] kex follows: False
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] Compression: none
2025-11-13T00:13:00.996 [DEBUG] [Thread-25266] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:13:01.014 [DEBUG] [Thread-25266] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:13:01.015 [DEBUG] [Thread-25266] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:13:01.016 [DEBUG] [Thread-25266] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:13:01.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:13:01.017 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:13:01.019 [DEBUG] [Thread-25266] [transport.py] [_log()] userauth is OK
2025-11-13T00:13:01.019 [DEBUG] [Thread-25266] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:13:01.019 [DEBUG] [Thread-25266] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:13:01.019 [DEBUG] [Thread-25266] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:13:01.019 [DEBUG] [Thread-25266] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:13:01.054 [INFO] [Thread-25266] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:13:01.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:13:01.707 [DEBUG] [Thread-25266] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:13:01.707 [DEBUG] [Thread-25266] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:13:01.707 [DEBUG] [Thread-25266] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:13:01.748 [DEBUG] [Thread-25266] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:13:01.748 [DEBUG] [Thread-25266] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:13:01.750 [DEBUG] [Thread-25266] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:13:01.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:13:01.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:13:01.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:13:01.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:13:01.766 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:13:01.767 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:13:01.767 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.925440 -999.00  +15.50   7.73     62   +8.20 1 2 1 1 1     0    0 8.70 60.35 ZNESw 8.0 7.7 259.6 10.8 16.0 -22.4 15.9 -21.3 15.6 -20.9 15.9 -21.9
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.925440
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:13:01.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:12:45', tmtdew=8.57, humidity=56.51, cloud=0.0, wind=13.2, temperature=15.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:12:45', seeing=0.88, atlas_timestamp='2025-11-12T22:12:38.016', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:11:00')
2025-11-13T00:13:01.768 [DEBUG] [Thread-25266] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:13:01.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:13:01.857 [DEBUG] [Thread-25269] [transport.py] [_log()] starting thread (client mode): 0x19dd8ee0
2025-11-13T00:13:01.858 [DEBUG] [Thread-25269] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:13:01.874 [DEBUG] [Thread-25269] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:13:01.874 [INFO] [Thread-25269] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:13:01.882 [DEBUG] [Thread-25269] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] client lang: <none>
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] server lang: <none>
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] kex follows: False
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:13:01.883 [DEBUG] [Thread-25269] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:13:01.884 [DEBUG] [Thread-25269] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:13:01.884 [DEBUG] [Thread-25269] [transport.py] [_log()] Compression: none
2025-11-13T00:13:01.884 [DEBUG] [Thread-25269] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:13:01.940 [DEBUG] [Thread-25269] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:13:01.941 [DEBUG] [Thread-25269] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:13:01.941 [DEBUG] [Thread-25269] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:13:01.941 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:13:01.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:13:01.996 [DEBUG] [Thread-25269] [transport.py] [_log()] userauth is OK
2025-11-13T00:13:01.996 [DEBUG] [Thread-25269] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:13:01.997 [DEBUG] [Thread-25269] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:13:01.997 [DEBUG] [Thread-25269] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:13:01.997 [DEBUG] [Thread-25269] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:13:02.017 [INFO] [Thread-25269] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:13:02.017 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:13:02.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:13:02.876 [DEBUG] [Thread-25269] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:13:02.876 [DEBUG] [Thread-25269] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:13:02.924 [DEBUG] [Thread-25269] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:13:02.924 [DEBUG] [Thread-25269] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:13:02.933 [DEBUG] [Thread-25269] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:13:02.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:13:02.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-11-13T00:13:02.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-11-13T00:13:02.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:13:02.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:13:02.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:13:02.970 [DEBUG] [Thread-25269] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:13:05.535 [DEBUG] [Thread-25271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:13:15.197 [DEBUG] [Thread-25272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:13:22.764 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:13:22.765 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:13:30.237 [DEBUG] [Thread-25273 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:13:32.987 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:13:32.987 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:13:32.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-11-13T00:13:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 13, 17), 8.53, 56.64, 0.0, 12.4, 15.53, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:13:33.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:13:17
2025-11-13T00:13:33.747 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:13:33.891 [DEBUG] [Thread-25274] [transport.py] [_log()] starting thread (client mode): 0x14983ac0
2025-11-13T00:13:33.892 [DEBUG] [Thread-25274] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:13:33.913 [DEBUG] [Thread-25274] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:13:33.913 [INFO] [Thread-25274] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:13:33.916 [DEBUG] [Thread-25274] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] client lang: <none>
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] server lang: <none>
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] kex follows: False
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] Compression: none
2025-11-13T00:13:33.917 [DEBUG] [Thread-25274] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:13:33.931 [DEBUG] [Thread-25274] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:13:33.932 [DEBUG] [Thread-25274] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:13:33.933 [DEBUG] [Thread-25274] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:13:33.933 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:13:33.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:13:33.935 [DEBUG] [Thread-25274] [transport.py] [_log()] userauth is OK
2025-11-13T00:13:33.935 [DEBUG] [Thread-25274] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:13:33.936 [DEBUG] [Thread-25274] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:13:33.936 [DEBUG] [Thread-25274] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:13:33.936 [DEBUG] [Thread-25274] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:13:33.959 [INFO] [Thread-25274] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:13:33.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:13:34.773 [DEBUG] [Thread-25274] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:13:34.774 [DEBUG] [Thread-25274] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:13:34.774 [DEBUG] [Thread-25274] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:13:34.815 [DEBUG] [Thread-25274] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:13:34.815 [DEBUG] [Thread-25274] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:13:34.818 [DEBUG] [Thread-25274] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:13:34.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:13:34.831 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:13:34.833 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:13:34.834 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:13:34.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:13:34.840 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:13:34.841 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:13:34.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:13:34.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:13:34.841 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.925776 -999.00  +15.50   5.05     62   +8.20 1 2 1 1 1     0    0 8.60 60.13 ZNESw 7.8 5.0 256.3 10.2 16.0 -22.4 15.8 -21.4 15.6 -20.8 15.8 -21.7
2025-11-13T00:13:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:13:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:13:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.925776
2025-11-13T00:13:34.842 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:13:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:13:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:13:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:13:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:13:34.843 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:13:17', tmtdew=8.53, humidity=56.64, cloud=0.0, wind=12.4, temperature=15.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:13:18', seeing=0.99, atlas_timestamp='2025-11-12T22:13:07.046', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:11:00')
2025-11-13T00:13:34.843 [DEBUG] [Thread-25274] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:13:34.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:13:34.941 [DEBUG] [Thread-25277] [transport.py] [_log()] starting thread (client mode): 0x14981360
2025-11-13T00:13:34.941 [DEBUG] [Thread-25277] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:13:34.956 [DEBUG] [Thread-25277] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:13:34.956 [INFO] [Thread-25277] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:13:34.964 [DEBUG] [Thread-25277] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:13:34.964 [DEBUG] [Thread-25277] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:13:34.964 [DEBUG] [Thread-25277] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:13:34.964 [DEBUG] [Thread-25277] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:13:34.964 [DEBUG] [Thread-25277] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:13:34.964 [DEBUG] [Thread-25277] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] client lang: <none>
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] server lang: <none>
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] kex follows: False
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:13:34.965 [DEBUG] [Thread-25277] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:13:34.966 [DEBUG] [Thread-25277] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:13:34.966 [DEBUG] [Thread-25277] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:13:34.966 [DEBUG] [Thread-25277] [transport.py] [_log()] Compression: none
2025-11-13T00:13:34.966 [DEBUG] [Thread-25277] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:13:35.025 [DEBUG] [Thread-25277] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:13:35.026 [DEBUG] [Thread-25277] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:13:35.027 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:13:35.028 [DEBUG] [Thread-25277] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:13:35.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:13:35.085 [DEBUG] [Thread-25277] [transport.py] [_log()] userauth is OK
2025-11-13T00:13:35.085 [DEBUG] [Thread-25277] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:13:35.085 [DEBUG] [Thread-25277] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:13:35.085 [DEBUG] [Thread-25277] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:13:35.085 [DEBUG] [Thread-25277] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:13:35.104 [INFO] [Thread-25277] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:13:35.105 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:13:35.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:13:35.918 [DEBUG] [Thread-25277] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:13:35.919 [DEBUG] [Thread-25277] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:13:35.966 [DEBUG] [Thread-25277] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:13:35.967 [DEBUG] [Thread-25277] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:13:35.976 [DEBUG] [Thread-25277] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:13:35.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:13:35.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-11-13T00:13:35.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-11-13T00:13:36.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:13:36.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:13:36.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:13:36.013 [DEBUG] [Thread-25277] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:13:45.276 [DEBUG] [Thread-25279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:00.327 [DEBUG] [Thread-25280 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:01.277 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:05.591 [DEBUG] [Thread-25281 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:06.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:14:06.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:14:06.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-11-13T00:14:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 13, 49), 8.41, 57.24, 0.0, 12.63, 15.5, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:14:06.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:13:49
2025-11-13T00:14:06.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:14:06.950 [DEBUG] [Thread-25282] [transport.py] [_log()] starting thread (client mode): 0x1493c040
2025-11-13T00:14:06.950 [DEBUG] [Thread-25282] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:14:06.969 [DEBUG] [Thread-25282] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:14:06.970 [INFO] [Thread-25282] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:14:06.973 [DEBUG] [Thread-25282] [transport.py] [_log()] client lang: <none>
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] server lang: <none>
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] kex follows: False
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] Compression: none
2025-11-13T00:14:06.974 [DEBUG] [Thread-25282] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:14:06.993 [DEBUG] [Thread-25282] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:14:06.993 [DEBUG] [Thread-25282] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:14:06.994 [DEBUG] [Thread-25282] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:14:06.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:14:06.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:14:06.996 [DEBUG] [Thread-25282] [transport.py] [_log()] userauth is OK
2025-11-13T00:14:06.996 [DEBUG] [Thread-25282] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:14:06.996 [DEBUG] [Thread-25282] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:14:06.997 [DEBUG] [Thread-25282] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:14:06.997 [DEBUG] [Thread-25282] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:14:07.024 [INFO] [Thread-25282] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:14:07.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:14:07.634 [DEBUG] [Thread-25282] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:14:07.634 [DEBUG] [Thread-25282] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:14:07.634 [DEBUG] [Thread-25282] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:14:07.674 [DEBUG] [Thread-25282] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:14:07.674 [DEBUG] [Thread-25282] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:14:07.677 [DEBUG] [Thread-25282] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:14:07.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:14:07.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:14:07.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:14:07.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:14:07.696 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:14:07.698 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:14:07.698 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:14:07.698 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:14:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:14:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.926134 -999.00  +15.40   9.04     62   +8.30 1 2 1 1 1     0    0 8.70 60.09 ZNESw 9.7 9.0 251.6 10.3 15.9 -22.4 15.9 -21.3 15.6 -20.9 15.9 -21.7
2025-11-13T00:14:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:14:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:14:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.926134
2025-11-13T00:14:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:14:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:14:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:14:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:14:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:14:07.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:13:49', tmtdew=8.41, humidity=57.24, cloud=0.0, wind=12.63, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:13:49', seeing=0.99, atlas_timestamp='2025-11-12T22:13:37.978', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:11:00')
2025-11-13T00:14:07.700 [DEBUG] [Thread-25282] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:14:07.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:14:07.799 [DEBUG] [Thread-25285] [transport.py] [_log()] starting thread (client mode): 0x19dda530
2025-11-13T00:14:07.799 [DEBUG] [Thread-25285] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:14:07.814 [DEBUG] [Thread-25285] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:14:07.814 [INFO] [Thread-25285] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] client lang: <none>
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] server lang: <none>
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] kex follows: False
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:14:07.822 [DEBUG] [Thread-25285] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:14:07.823 [DEBUG] [Thread-25285] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:14:07.823 [DEBUG] [Thread-25285] [transport.py] [_log()] Compression: none
2025-11-13T00:14:07.823 [DEBUG] [Thread-25285] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:14:07.879 [DEBUG] [Thread-25285] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:14:07.879 [DEBUG] [Thread-25285] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:14:07.880 [DEBUG] [Thread-25285] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:14:07.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:14:07.880 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:14:07.936 [DEBUG] [Thread-25285] [transport.py] [_log()] userauth is OK
2025-11-13T00:14:07.936 [DEBUG] [Thread-25285] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:14:07.936 [DEBUG] [Thread-25285] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:14:07.936 [DEBUG] [Thread-25285] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:14:07.936 [DEBUG] [Thread-25285] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:14:07.955 [INFO] [Thread-25285] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:14:07.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:14:07.957 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:14:08.775 [DEBUG] [Thread-25285] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:14:08.775 [DEBUG] [Thread-25285] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:14:08.824 [DEBUG] [Thread-25285] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:14:08.825 [DEBUG] [Thread-25285] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:14:08.834 [DEBUG] [Thread-25285] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:14:08.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:14:08.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:14:08.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-11-13T00:14:08.860 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:14:08.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:14:08.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:14:08.868 [DEBUG] [Thread-25285] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:14:10.092 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:14.188 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:15.360 [DEBUG] [Thread-25287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:22.967 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:22.968 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:30.409 [DEBUG] [Thread-25288 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:14:38.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:14:38.885 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:14:38.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-11-13T00:14:39.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 14, 21), 8.37, 57.39, 0.0, 11.98, 15.43, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:14:39.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:14:21
2025-11-13T00:14:39.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:14:39.815 [DEBUG] [Thread-25289] [transport.py] [_log()] starting thread (client mode): 0x17346e90
2025-11-13T00:14:39.815 [DEBUG] [Thread-25289] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:14:39.836 [DEBUG] [Thread-25289] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:14:39.836 [INFO] [Thread-25289] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:14:39.840 [DEBUG] [Thread-25289] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:14:39.840 [DEBUG] [Thread-25289] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:14:39.840 [DEBUG] [Thread-25289] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] client lang: <none>
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] server lang: <none>
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] kex follows: False
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] Compression: none
2025-11-13T00:14:39.841 [DEBUG] [Thread-25289] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:14:39.858 [DEBUG] [Thread-25289] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:14:39.859 [DEBUG] [Thread-25289] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:14:39.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:14:39.860 [DEBUG] [Thread-25289] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:14:39.861 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:14:39.862 [DEBUG] [Thread-25289] [transport.py] [_log()] userauth is OK
2025-11-13T00:14:39.862 [DEBUG] [Thread-25289] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:14:39.863 [DEBUG] [Thread-25289] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:14:39.863 [DEBUG] [Thread-25289] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:14:39.863 [DEBUG] [Thread-25289] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:14:39.886 [INFO] [Thread-25289] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:14:39.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:14:40.491 [DEBUG] [Thread-25289] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:14:40.491 [DEBUG] [Thread-25289] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:14:40.491 [DEBUG] [Thread-25289] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:14:40.531 [DEBUG] [Thread-25289] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:14:40.532 [DEBUG] [Thread-25289] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:14:40.534 [DEBUG] [Thread-25289] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:14:40.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:14:40.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:14:40.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:14:40.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:14:40.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:14:40.558 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:14:40.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:14:40.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:14:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:14:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.926470 -999.00  +15.40   8.25     62   +8.30 1 2 1 1 1     0    0 8.76 61.90 ZNESw 7.7 8.2 257.4 11.5 16.0 -22.4 15.8 -21.3 15.6 -20.9 15.8 -21.7
2025-11-13T00:14:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:14:40.559 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:14:40.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.926470
2025-11-13T00:14:40.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:14:40.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:14:40.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:14:40.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:14:40.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:14:40.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:14:21', tmtdew=8.37, humidity=57.39, cloud=0.0, wind=11.98, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:14:22', seeing=1.11, atlas_timestamp='2025-11-12T22:14:07.008', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:11:00')
2025-11-13T00:14:40.561 [DEBUG] [Thread-25289] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:14:40.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:14:40.660 [DEBUG] [Thread-25292] [transport.py] [_log()] starting thread (client mode): 0x1493c040
2025-11-13T00:14:40.660 [DEBUG] [Thread-25292] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:14:40.676 [DEBUG] [Thread-25292] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:14:40.676 [INFO] [Thread-25292] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:14:40.683 [DEBUG] [Thread-25292] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:14:40.684 [DEBUG] [Thread-25292] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:14:40.684 [DEBUG] [Thread-25292] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:14:40.684 [DEBUG] [Thread-25292] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:14:40.684 [DEBUG] [Thread-25292] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:14:40.684 [DEBUG] [Thread-25292] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:14:40.684 [DEBUG] [Thread-25292] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:14:40.684 [DEBUG] [Thread-25292] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:14:40.685 [DEBUG] [Thread-25292] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:14:40.685 [DEBUG] [Thread-25292] [transport.py] [_log()] client lang: <none>
2025-11-13T00:14:40.685 [DEBUG] [Thread-25292] [transport.py] [_log()] server lang: <none>
2025-11-13T00:14:40.685 [DEBUG] [Thread-25292] [transport.py] [_log()] kex follows: False
2025-11-13T00:14:40.685 [DEBUG] [Thread-25292] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:14:40.685 [DEBUG] [Thread-25292] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:14:40.685 [DEBUG] [Thread-25292] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:14:40.686 [DEBUG] [Thread-25292] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:14:40.686 [DEBUG] [Thread-25292] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:14:40.686 [DEBUG] [Thread-25292] [transport.py] [_log()] Compression: none
2025-11-13T00:14:40.686 [DEBUG] [Thread-25292] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:14:40.744 [DEBUG] [Thread-25292] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:14:40.745 [DEBUG] [Thread-25292] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:14:40.746 [DEBUG] [Thread-25292] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:14:40.746 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:14:40.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:14:40.800 [DEBUG] [Thread-25292] [transport.py] [_log()] userauth is OK
2025-11-13T00:14:40.800 [DEBUG] [Thread-25292] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:14:40.800 [DEBUG] [Thread-25292] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:14:40.801 [DEBUG] [Thread-25292] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:14:40.801 [DEBUG] [Thread-25292] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:14:40.820 [INFO] [Thread-25292] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:14:40.821 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:14:40.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:14:41.661 [DEBUG] [Thread-25292] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:14:41.661 [DEBUG] [Thread-25292] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:14:41.709 [DEBUG] [Thread-25292] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:14:41.709 [DEBUG] [Thread-25292] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:14:41.719 [DEBUG] [Thread-25292] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:14:41.728 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:14:41.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-11-13T00:14:41.737 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:14:41.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:14:41.747 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:14:41.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:14:41.756 [DEBUG] [Thread-25292] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:14:45.439 [DEBUG] [Thread-25294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:15:00.493 [DEBUG] [Thread-25295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:15:05.642 [DEBUG] [Thread-25296 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:15:11.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:15:11.777 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:15:11.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-11-13T00:15:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 14, 53), 8.36, 57.41, 0.0, 12.55, 15.46, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:15:12.445 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:14:53
2025-11-13T00:15:12.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:15:12.719 [DEBUG] [Thread-25297] [transport.py] [_log()] starting thread (client mode): 0x1737cdf0
2025-11-13T00:15:12.719 [DEBUG] [Thread-25297] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:15:12.741 [DEBUG] [Thread-25297] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:15:12.741 [INFO] [Thread-25297] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:15:12.745 [DEBUG] [Thread-25297] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:15:12.745 [DEBUG] [Thread-25297] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:15:12.745 [DEBUG] [Thread-25297] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] client lang: <none>
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] server lang: <none>
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] kex follows: False
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] Compression: none
2025-11-13T00:15:12.746 [DEBUG] [Thread-25297] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:15:12.764 [DEBUG] [Thread-25297] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:15:12.764 [DEBUG] [Thread-25297] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:15:12.765 [DEBUG] [Thread-25297] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:15:12.765 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:15:12.766 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:15:12.767 [DEBUG] [Thread-25297] [transport.py] [_log()] userauth is OK
2025-11-13T00:15:12.767 [DEBUG] [Thread-25297] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:15:12.767 [DEBUG] [Thread-25297] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:15:12.767 [DEBUG] [Thread-25297] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:15:12.767 [DEBUG] [Thread-25297] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:15:12.804 [INFO] [Thread-25297] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:15:12.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:15:13.630 [DEBUG] [Thread-25297] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:15:13.631 [DEBUG] [Thread-25297] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:15:13.631 [DEBUG] [Thread-25297] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:15:13.672 [DEBUG] [Thread-25297] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:15:13.672 [DEBUG] [Thread-25297] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:15:13.675 [DEBUG] [Thread-25297] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:15:13.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:15:13.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:15:13.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:15:13.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:15:13.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:15:13.699 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:15:13.699 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:15:13.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:15:13.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:15:13.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.926828 -999.00  +15.40   6.60     62   +8.30 1 2 1 1 1     0    0 8.66 60.33 ZNESw 8.8 6.6 264.3 11.3 16.0 -22.4 15.8 -21.3 15.6 -20.9 15.8 -21.9
2025-11-13T00:15:13.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:15:13.700 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:15:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.926828
2025-11-13T00:15:13.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:15:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:15:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:15:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:15:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:15:13.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:14:53', tmtdew=8.36, humidity=57.41, cloud=0.0, wind=12.55, temperature=15.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:14:54', seeing=1.09, atlas_timestamp='2025-11-12T22:14:37.939', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:13:00')
2025-11-13T00:15:13.702 [DEBUG] [Thread-25297] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:15:13.787 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:15:13.801 [DEBUG] [Thread-25300] [transport.py] [_log()] starting thread (client mode): 0x19ddb4f0
2025-11-13T00:15:13.801 [DEBUG] [Thread-25300] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:15:13.816 [DEBUG] [Thread-25300] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:15:13.816 [INFO] [Thread-25300] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:15:13.824 [DEBUG] [Thread-25300] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:15:13.824 [DEBUG] [Thread-25300] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:15:13.824 [DEBUG] [Thread-25300] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:15:13.824 [DEBUG] [Thread-25300] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:15:13.824 [DEBUG] [Thread-25300] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] client lang: <none>
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] server lang: <none>
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] kex follows: False
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:15:13.825 [DEBUG] [Thread-25300] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:15:13.826 [DEBUG] [Thread-25300] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:15:13.826 [DEBUG] [Thread-25300] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:15:13.826 [DEBUG] [Thread-25300] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:15:13.826 [DEBUG] [Thread-25300] [transport.py] [_log()] Compression: none
2025-11-13T00:15:13.826 [DEBUG] [Thread-25300] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:15:13.885 [DEBUG] [Thread-25300] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:15:13.885 [DEBUG] [Thread-25300] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:15:13.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:15:13.886 [DEBUG] [Thread-25300] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:15:13.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:15:13.940 [DEBUG] [Thread-25300] [transport.py] [_log()] userauth is OK
2025-11-13T00:15:13.940 [DEBUG] [Thread-25300] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:15:13.940 [DEBUG] [Thread-25300] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:15:13.941 [DEBUG] [Thread-25300] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:15:13.941 [DEBUG] [Thread-25300] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:15:13.960 [INFO] [Thread-25300] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:15:13.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:15:13.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:15:14.813 [DEBUG] [Thread-25300] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:15:14.813 [DEBUG] [Thread-25300] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:15:14.860 [DEBUG] [Thread-25300] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:15:14.861 [DEBUG] [Thread-25300] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:15:14.870 [DEBUG] [Thread-25300] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:15:14.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:15:14.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-11-13T00:15:14.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-11-13T00:15:14.896 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:15:14.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:15:14.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:15:14.904 [DEBUG] [Thread-25300] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:15:15.527 [DEBUG] [Thread-25302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:15:23.170 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:15:23.172 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:15:30.578 [DEBUG] [Thread-25303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:15:44.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:15:44.927 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:15:44.929 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:15:45.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 15, 25), 8.32, 57.57, 0.0, 12.72, 15.43, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:15:45.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:15:25
2025-11-13T00:15:45.614 [DEBUG] [Thread-25304 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:15:45.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:15:45.876 [DEBUG] [Thread-25305] [transport.py] [_log()] starting thread (client mode): 0x19dd9d80
2025-11-13T00:15:45.876 [DEBUG] [Thread-25305] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:15:45.891 [DEBUG] [Thread-25305] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:15:45.891 [INFO] [Thread-25305] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] client lang: <none>
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] server lang: <none>
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] kex follows: False
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] Compression: none
2025-11-13T00:15:45.892 [DEBUG] [Thread-25305] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:15:45.908 [DEBUG] [Thread-25305] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:15:45.908 [DEBUG] [Thread-25305] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:15:45.908 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:15:45.909 [DEBUG] [Thread-25305] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:15:45.909 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:15:45.909 [DEBUG] [Thread-25305] [transport.py] [_log()] userauth is OK
2025-11-13T00:15:45.909 [DEBUG] [Thread-25305] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:15:45.909 [DEBUG] [Thread-25305] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:15:45.909 [DEBUG] [Thread-25305] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:15:45.909 [DEBUG] [Thread-25305] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:15:45.918 [INFO] [Thread-25305] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:15:45.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:15:46.523 [DEBUG] [Thread-25305] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:15:46.523 [DEBUG] [Thread-25305] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:15:46.523 [DEBUG] [Thread-25305] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:15:46.564 [DEBUG] [Thread-25305] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:15:46.564 [DEBUG] [Thread-25305] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:15:46.566 [DEBUG] [Thread-25305] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:15:46.578 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:15:46.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:15:46.579 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:15:46.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:15:46.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:15:46.583 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:15:46.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.927175 -999.00  +15.40   9.20     62   +8.30 1 2 1 1 1     0    0 8.73 60.08 ZNESw 8.2 9.2 253.4 10.7 16.0 -22.5 15.8 -21.4 15.6 -20.9 15.9 -21.9
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.927175
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:15:46.583 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:15:46.591 [DEBUG] [Thread-25305] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:15:46.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:15:25', tmtdew=8.32, humidity=57.57, cloud=0.0, wind=12.72, temperature=15.43, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:15:26', seeing=1.06, atlas_timestamp='2025-11-12T22:15:07.920', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:13:00')
2025-11-13T00:15:46.666 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:15:46.680 [DEBUG] [Thread-25308] [transport.py] [_log()] starting thread (client mode): 0x1737e170
2025-11-13T00:15:46.680 [DEBUG] [Thread-25308] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:15:46.694 [DEBUG] [Thread-25308] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:15:46.694 [INFO] [Thread-25308] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] client lang: <none>
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] server lang: <none>
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] kex follows: False
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:15:46.701 [DEBUG] [Thread-25308] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:15:46.702 [DEBUG] [Thread-25308] [transport.py] [_log()] Compression: none
2025-11-13T00:15:46.702 [DEBUG] [Thread-25308] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:15:46.758 [DEBUG] [Thread-25308] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:15:46.758 [DEBUG] [Thread-25308] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:15:46.758 [DEBUG] [Thread-25308] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:15:46.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:15:46.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:15:46.815 [DEBUG] [Thread-25308] [transport.py] [_log()] userauth is OK
2025-11-13T00:15:46.816 [DEBUG] [Thread-25308] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:15:46.816 [DEBUG] [Thread-25308] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:15:46.816 [DEBUG] [Thread-25308] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:15:46.816 [DEBUG] [Thread-25308] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:15:46.830 [INFO] [Thread-25308] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:15:46.839 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:15:46.839 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:15:47.696 [DEBUG] [Thread-25308] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:15:47.696 [DEBUG] [Thread-25308] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:15:47.744 [DEBUG] [Thread-25308] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:15:47.744 [DEBUG] [Thread-25308] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:15:47.752 [DEBUG] [Thread-25308] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:15:47.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:15:47.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')
2025-11-13T00:15:47.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:15:47.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:15:47.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:15:47.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:15:47.784 [DEBUG] [Thread-25308] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:16:00.644 [DEBUG] [Thread-25310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:16:05.711 [DEBUG] [Thread-25311 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:16:15.694 [DEBUG] [Thread-25312 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:16:17.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:16:17.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:16:17.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-11-13T00:16:18.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 15, 57), 8.22, 57.56, 0.0, 10.6, 15.38, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:16:18.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:15:57
2025-11-13T00:16:18.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:16:18.717 [DEBUG] [Thread-25313] [transport.py] [_log()] starting thread (client mode): 0x14947520
2025-11-13T00:16:18.717 [DEBUG] [Thread-25313] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:16:18.737 [DEBUG] [Thread-25313] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:16:18.737 [INFO] [Thread-25313] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:16:18.740 [DEBUG] [Thread-25313] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:16:18.740 [DEBUG] [Thread-25313] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] client lang: <none>
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] server lang: <none>
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] kex follows: False
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:16:18.741 [DEBUG] [Thread-25313] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:16:18.742 [DEBUG] [Thread-25313] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:16:18.742 [DEBUG] [Thread-25313] [transport.py] [_log()] Compression: none
2025-11-13T00:16:18.742 [DEBUG] [Thread-25313] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:16:18.758 [DEBUG] [Thread-25313] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:16:18.759 [DEBUG] [Thread-25313] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:16:18.759 [DEBUG] [Thread-25313] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:16:18.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:16:18.760 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:16:18.761 [DEBUG] [Thread-25313] [transport.py] [_log()] userauth is OK
2025-11-13T00:16:18.761 [DEBUG] [Thread-25313] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:16:18.761 [DEBUG] [Thread-25313] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:16:18.761 [DEBUG] [Thread-25313] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:16:18.761 [DEBUG] [Thread-25313] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:16:18.786 [INFO] [Thread-25313] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:16:18.786 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:16:19.433 [DEBUG] [Thread-25313] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:16:19.433 [DEBUG] [Thread-25313] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:16:19.433 [DEBUG] [Thread-25313] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:16:19.474 [DEBUG] [Thread-25313] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:16:19.474 [DEBUG] [Thread-25313] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:16:19.477 [DEBUG] [Thread-25313] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:16:19.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:16:19.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:16:19.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:16:19.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:16:19.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:16:19.500 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:16:19.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:16:19.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:16:19.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:16:19.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.927859 -999.00  +15.40   6.01     62   +8.30 1 2 1 1 1     0    0 8.79 62.02 ZNESw 6.3 6.0 255.0 11.2 16.0 -22.6 15.8 -21.4 15.6 -21.0 15.8 -21.7
2025-11-13T00:16:19.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:16:19.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:16:19.501 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.927859
2025-11-13T00:16:19.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:16:19.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:16:19.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:16:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:16:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:16:19.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:15:57', tmtdew=8.22, humidity=57.56, cloud=0.0, wind=10.6, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:15:57', seeing=1.06, atlas_timestamp='2025-11-12T22:16:07.018', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:13:00')
2025-11-13T00:16:19.503 [DEBUG] [Thread-25313] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:16:19.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:16:19.600 [DEBUG] [Thread-25316] [transport.py] [_log()] starting thread (client mode): 0x1737d6f0
2025-11-13T00:16:19.600 [DEBUG] [Thread-25316] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:16:19.617 [DEBUG] [Thread-25316] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:16:19.618 [INFO] [Thread-25316] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:16:19.625 [DEBUG] [Thread-25316] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] client lang: <none>
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] server lang: <none>
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] kex follows: False
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:16:19.626 [DEBUG] [Thread-25316] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:16:19.627 [DEBUG] [Thread-25316] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:16:19.627 [DEBUG] [Thread-25316] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:16:19.627 [DEBUG] [Thread-25316] [transport.py] [_log()] Compression: none
2025-11-13T00:16:19.627 [DEBUG] [Thread-25316] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:16:19.685 [DEBUG] [Thread-25316] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:16:19.685 [DEBUG] [Thread-25316] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:16:19.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:16:19.686 [DEBUG] [Thread-25316] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:16:19.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:16:19.741 [DEBUG] [Thread-25316] [transport.py] [_log()] userauth is OK
2025-11-13T00:16:19.741 [DEBUG] [Thread-25316] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:16:19.742 [DEBUG] [Thread-25316] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:16:19.742 [DEBUG] [Thread-25316] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:16:19.742 [DEBUG] [Thread-25316] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:16:19.760 [INFO] [Thread-25316] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:16:19.760 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:16:19.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:16:20.608 [DEBUG] [Thread-25316] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:16:20.608 [DEBUG] [Thread-25316] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:16:20.656 [DEBUG] [Thread-25316] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:16:20.656 [DEBUG] [Thread-25316] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:16:20.665 [DEBUG] [Thread-25316] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:16:20.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:16:20.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:16:20.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:16:20.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:16:20.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:16:20.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:16:20.701 [DEBUG] [Thread-25316] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:16:23.397 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:16:23.398 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:16:30.724 [DEBUG] [Thread-25318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:16:45.770 [DEBUG] [Thread-25319 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:16:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:16:50.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:16: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-11-13T00:16:51.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 16, 29), 8.2, 57.66, 0.0, 10.29, 15.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:16:51.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:16:29
2025-11-13T00:16:51.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:16:51.631 [DEBUG] [Thread-25320] [transport.py] [_log()] starting thread (client mode): 0x1737d3f0
2025-11-13T00:16:51.631 [DEBUG] [Thread-25320] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:16:51.646 [DEBUG] [Thread-25320] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:16:51.646 [INFO] [Thread-25320] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:16:51.647 [DEBUG] [Thread-25320] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] client lang: <none>
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] server lang: <none>
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] kex follows: False
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] Compression: none
2025-11-13T00:16:51.648 [DEBUG] [Thread-25320] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:16:51.657 [DEBUG] [Thread-25320] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:16:51.657 [DEBUG] [Thread-25320] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:16:51.657 [DEBUG] [Thread-25320] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:16:51.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:16:51.658 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:16:51.659 [DEBUG] [Thread-25320] [transport.py] [_log()] userauth is OK
2025-11-13T00:16:51.659 [DEBUG] [Thread-25320] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:16:51.659 [DEBUG] [Thread-25320] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:16:51.659 [DEBUG] [Thread-25320] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:16:51.659 [DEBUG] [Thread-25320] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:16:51.680 [INFO] [Thread-25320] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:16:51.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:16:52.250 [DEBUG] [Thread-25320] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:16:52.250 [DEBUG] [Thread-25320] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:16:52.250 [DEBUG] [Thread-25320] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:16:52.290 [DEBUG] [Thread-25320] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:16:52.291 [DEBUG] [Thread-25320] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:16:52.294 [DEBUG] [Thread-25320] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:16:52.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:16:52.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:16:52.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:16:52.311 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:16:52.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:16:52.323 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:16:52.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:16:52.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:16:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:16:52.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.928217 -999.00  +15.40   5.37     62   +8.30 1 2 1 1 1     0    0 8.76 60.65 ZNESw 3.7 5.4 239.8 8.2 15.9 -22.4 15.8 -21.4 15.6 -21.0 15.8 -21.9
2025-11-13T00:16:52.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:16:52.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:16:52.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.928217
2025-11-13T00:16:52.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:16:52.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:16:52.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:16:52.325 [DEBUG] [Thread-25320] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:16:52.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:16:52.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:16:52.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:16:29', tmtdew=8.2, humidity=57.66, cloud=0.0, wind=10.29, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:16:29', seeing=0.94, atlas_timestamp='2025-11-12T22:16:37.949', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:13:00')
2025-11-13T00:16:52.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:16:52.419 [DEBUG] [Thread-25323] [transport.py] [_log()] starting thread (client mode): 0x17346c20
2025-11-13T00:16:52.419 [DEBUG] [Thread-25323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:16:52.434 [DEBUG] [Thread-25323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:16:52.434 [INFO] [Thread-25323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] client lang: <none>
2025-11-13T00:16:52.442 [DEBUG] [Thread-25323] [transport.py] [_log()] server lang: <none>
2025-11-13T00:16:52.443 [DEBUG] [Thread-25323] [transport.py] [_log()] kex follows: False
2025-11-13T00:16:52.443 [DEBUG] [Thread-25323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:16:52.443 [DEBUG] [Thread-25323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:16:52.443 [DEBUG] [Thread-25323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:16:52.443 [DEBUG] [Thread-25323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:16:52.443 [DEBUG] [Thread-25323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:16:52.443 [DEBUG] [Thread-25323] [transport.py] [_log()] Compression: none
2025-11-13T00:16:52.443 [DEBUG] [Thread-25323] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:16:52.499 [DEBUG] [Thread-25323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:16:52.500 [DEBUG] [Thread-25323] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:16:52.501 [DEBUG] [Thread-25323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:16:52.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:16:52.502 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:16:52.557 [DEBUG] [Thread-25323] [transport.py] [_log()] userauth is OK
2025-11-13T00:16:52.557 [DEBUG] [Thread-25323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:16:52.558 [DEBUG] [Thread-25323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:16:52.558 [DEBUG] [Thread-25323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:16:52.558 [DEBUG] [Thread-25323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:16:52.576 [INFO] [Thread-25323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:16:52.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:16:52.578 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:16:53.422 [DEBUG] [Thread-25323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:16:53.422 [DEBUG] [Thread-25323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:16:53.470 [DEBUG] [Thread-25323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:16:53.470 [DEBUG] [Thread-25323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:16:53.481 [DEBUG] [Thread-25323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:16:53.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:16:53.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-11-13T00:16:53.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-11-13T00:16:53.509 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:16:53.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:16:53.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:16:53.518 [DEBUG] [Thread-25323] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:17:00.805 [DEBUG] [Thread-25325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:17:05.767 [DEBUG] [Thread-25326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:17:15.854 [DEBUG] [Thread-25327 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:17:23.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:17:23.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:17:23.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-11-13T00:17:23.600 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:17:23.601 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:17:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 17, 1), 8.2, 57.66, 0.0, 9.79, 15.4, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:17:24.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:17:01
2025-11-13T00:17:24.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:17:24.460 [DEBUG] [Thread-25328] [transport.py] [_log()] starting thread (client mode): 0x17347d00
2025-11-13T00:17:24.460 [DEBUG] [Thread-25328] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:17:24.479 [DEBUG] [Thread-25328] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:17:24.480 [INFO] [Thread-25328] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:17:24.480 [DEBUG] [Thread-25328] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] client lang: <none>
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] server lang: <none>
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] kex follows: False
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] Compression: none
2025-11-13T00:17:24.481 [DEBUG] [Thread-25328] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:17:24.495 [DEBUG] [Thread-25328] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:17:24.496 [DEBUG] [Thread-25328] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:17:24.496 [DEBUG] [Thread-25328] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:17:24.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:17:24.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:17:24.498 [DEBUG] [Thread-25328] [transport.py] [_log()] userauth is OK
2025-11-13T00:17:24.498 [DEBUG] [Thread-25328] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:17:24.498 [DEBUG] [Thread-25328] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:17:24.498 [DEBUG] [Thread-25328] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:17:24.498 [DEBUG] [Thread-25328] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:17:24.523 [INFO] [Thread-25328] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:17:24.524 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:17:25.126 [DEBUG] [Thread-25328] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:17:25.127 [DEBUG] [Thread-25328] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:17:25.127 [DEBUG] [Thread-25328] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:17:25.168 [DEBUG] [Thread-25328] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:17:25.168 [DEBUG] [Thread-25328] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:17:25.171 [DEBUG] [Thread-25328] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:17:25.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:17:25.183 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:17:25.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:17:25.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:17:25.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:17:25.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:17:25.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:17:25.194 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:17:25.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:17:25.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.928564 -999.00  +15.30   3.07     62   +8.30 1 2 1 1 1     0    0 8.77 59.02 ZNESw 7.8 3.1 244.3 8.1 15.9 -22.5 15.8 -21.5 15.6 -20.9 15.8 -21.8
2025-11-13T00:17:25.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:17:25.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:17:25.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.928564
2025-11-13T00:17:25.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:17:25.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:17:25.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:17:25.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:17:25.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:17:25.196 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:17:01', tmtdew=8.2, humidity=57.66, cloud=0.0, wind=9.79, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:17:01', seeing=1.03, atlas_timestamp='2025-11-12T22:17:07.930', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.1772500000000008, 0.2057500000000001, 0.37599999999999945, 0.6304999999999996, 0.48375000000000057, 0.32399999999999984, 0.17425000000000068, 0.13349999999999973, 0.2995000000000001, 0.31625000000000014, 0.5020000000000007, 0.758, 0.5002499999999994, 0.3655000000000008, 0.3330000000000002, 0.18725000000000058, 0.5620000000000003, 0.3680000000000003, 0.8957499999999996, 0.8559999999999981, 0.6972499999999986, 0.3962500000000002, 0.2712500000000002, 0.42549999999999777, 0.4075000000000015, 0.3967500000000008, 0.8845000000000001, 1.061, 0.7445000000000013, 0.5000000000000009, 0.42300000000000093, 0.4377499999999994], zp_timestamp='2025-11-12T22:13:00')
2025-11-13T00:17:25.196 [DEBUG] [Thread-25328] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:17:25.279 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:17:30.892 [DEBUG] [Thread-25331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:17:36.929 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:17:45.946 [DEBUG] [Thread-25332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:18:00.981 [DEBUG] [Thread-25333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:18:05.837 [DEBUG] [Thread-25334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:18:16.019 [DEBUG] [Thread-25335 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:18:23.803 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:18:23.804 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:18:31.050 [DEBUG] [Thread-25336 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:18:46.088 [DEBUG] [Thread-25337 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:19:01.123 [DEBUG] [Thread-25338 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:19:05.894 [DEBUG] [Thread-25339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:19:16.154 [DEBUG] [Thread-25340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:19:24.007 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:19:24.009 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:19:31.192 [DEBUG] [Thread-25341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:19:40.603 [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-11-13T00:19:46.226 [DEBUG] [Thread-25342 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:20:01.263 [DEBUG] [Thread-25343 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:20:05.955 [DEBUG] [Thread-25344 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:20:10.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:20:10.628 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:20:10.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:20:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 19, 41), 8.25, 58.16, 0.0, 12.69, 15.4, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:20:11.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:19:41
2025-11-13T00:20:11.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:20:11.561 [DEBUG] [Thread-25345] [transport.py] [_log()] starting thread (client mode): 0x17344550
2025-11-13T00:20:11.561 [DEBUG] [Thread-25345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:20:11.581 [DEBUG] [Thread-25345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:20:11.581 [INFO] [Thread-25345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:20:11.584 [DEBUG] [Thread-25345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] client lang: <none>
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] server lang: <none>
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] kex follows: False
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] Compression: none
2025-11-13T00:20:11.585 [DEBUG] [Thread-25345] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:20:11.605 [DEBUG] [Thread-25345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:20:11.606 [DEBUG] [Thread-25345] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:20:11.606 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:20:11.607 [DEBUG] [Thread-25345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:20:11.607 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:20:11.608 [DEBUG] [Thread-25345] [transport.py] [_log()] userauth is OK
2025-11-13T00:20:11.608 [DEBUG] [Thread-25345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:20:11.608 [DEBUG] [Thread-25345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:20:11.608 [DEBUG] [Thread-25345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:20:11.608 [DEBUG] [Thread-25345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:20:11.626 [INFO] [Thread-25345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:20:11.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:20:13.377 [DEBUG] [Thread-25345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:20:13.377 [DEBUG] [Thread-25345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:20:13.378 [DEBUG] [Thread-25345] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:20:13.419 [DEBUG] [Thread-25345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:20:13.419 [DEBUG] [Thread-25345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:20:13.425 [DEBUG] [Thread-25345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:20:13.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:20:13.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:20:13.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:20:13.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:20:13.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:20:13.450 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:20:13.451 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:20:13.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:20:13.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:20:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.930301 -999.00  +15.30   5.39     62   +8.20 1 2 1 1 1     0    0 8.81 56.32 ZNEsW 4.3 5.4 203.4 9.2 15.9 -22.4 15.8 -21.2 15.5 -20.8 15.8 -21.9
2025-11-13T00:20:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:20:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:20:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.930301
2025-11-13T00:20:13.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:20:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:20:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:20:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:20:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:20:13.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:19:41', tmtdew=8.25, humidity=58.16, cloud=0.0, wind=12.69, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:19:41', seeing=1.04, atlas_timestamp='2025-11-12T22:19:38.006', atlas_cloud=2, atlas_rain=1, zp_data=[0.28575000000000017, 0.21525000000000105, 0.3772500000000001, 0.45449999999999946, 0.5090000000000003, 0.45525000000000126, 0.30799999999999983, 0.20725000000000016, 0.26649999999999885, 0.23799999999999955, 0.37024999999999864, 0.6604999999999999, 0.5990000000000011, 0.5112499999999995, 0.22100000000000009, 0.33999999999999986, 0.2162500000000005, 0.39450000000000074, 0.36499999999999844, 0.9952499999999986, 0.6564999999999985, 0.6077499999999985, 0.2952500000000011, 0.29075000000000095, 0.3149999999999995, 0.5805000000000016, 0.37875000000000014, 0.806, 0.9740000000000002, 0.3750000000000009, 0.471000000000001, 0.41000000000000103, 0.4427499999999993], zp_timestamp='2025-11-12T22:16:00')
2025-11-13T00:20:13.454 [DEBUG] [Thread-25345] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:20:13.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:20:13.551 [DEBUG] [Thread-25348] [transport.py] [_log()] starting thread (client mode): 0x1737d210
2025-11-13T00:20:13.551 [DEBUG] [Thread-25348] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:20:13.566 [DEBUG] [Thread-25348] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:20:13.566 [INFO] [Thread-25348] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:20:13.574 [DEBUG] [Thread-25348] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:20:13.574 [DEBUG] [Thread-25348] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:20:13.574 [DEBUG] [Thread-25348] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] client lang: <none>
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] server lang: <none>
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] kex follows: False
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:20:13.575 [DEBUG] [Thread-25348] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:20:13.576 [DEBUG] [Thread-25348] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:20:13.576 [DEBUG] [Thread-25348] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:20:13.576 [DEBUG] [Thread-25348] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:20:13.576 [DEBUG] [Thread-25348] [transport.py] [_log()] Compression: none
2025-11-13T00:20:13.576 [DEBUG] [Thread-25348] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:20:13.632 [DEBUG] [Thread-25348] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:20:13.633 [DEBUG] [Thread-25348] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:20:13.633 [DEBUG] [Thread-25348] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:20:13.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:20:13.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:20:13.688 [DEBUG] [Thread-25348] [transport.py] [_log()] userauth is OK
2025-11-13T00:20:13.689 [DEBUG] [Thread-25348] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:20:13.689 [DEBUG] [Thread-25348] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:20:13.689 [DEBUG] [Thread-25348] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:20:13.689 [DEBUG] [Thread-25348] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:20:13.707 [INFO] [Thread-25348] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:20:13.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:20:13.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:20:14.574 [DEBUG] [Thread-25348] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:20:14.574 [DEBUG] [Thread-25348] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:20:14.622 [DEBUG] [Thread-25348] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:20:14.622 [DEBUG] [Thread-25348] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:20:14.630 [DEBUG] [Thread-25348] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:20:14.639 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:20:14.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-11-13T00:20:14.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-11-13T00:20:14.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:20:14.659 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:20:14.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:20:14.667 [DEBUG] [Thread-25348] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:20:16.295 [DEBUG] [Thread-25350 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:20:24.212 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:20:24.213 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:20:31.353 [DEBUG] [Thread-25351 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:20:44.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:20:44.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:20:44.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-11-13T00:20:45.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 20, 13), 8.22, 58.25, 0.0, 12.58, 15.28, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:20:45.311 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:20:13
2025-11-13T00:20:45.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:20:45.579 [DEBUG] [Thread-25352] [transport.py] [_log()] starting thread (client mode): 0x17344040
2025-11-13T00:20:45.579 [DEBUG] [Thread-25352] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:20:45.598 [DEBUG] [Thread-25352] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:20:45.599 [INFO] [Thread-25352] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] client lang: <none>
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] server lang: <none>
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] kex follows: False
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] Compression: none
2025-11-13T00:20:45.602 [DEBUG] [Thread-25352] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:20:45.619 [DEBUG] [Thread-25352] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:20:45.619 [DEBUG] [Thread-25352] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:20:45.620 [DEBUG] [Thread-25352] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:20:45.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:20:45.621 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:20:45.622 [DEBUG] [Thread-25352] [transport.py] [_log()] userauth is OK
2025-11-13T00:20:45.622 [DEBUG] [Thread-25352] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:20:45.622 [DEBUG] [Thread-25352] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:20:45.622 [DEBUG] [Thread-25352] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:20:45.623 [DEBUG] [Thread-25352] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:20:45.647 [INFO] [Thread-25352] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:20:45.648 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:20:46.246 [DEBUG] [Thread-25352] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:20:46.246 [DEBUG] [Thread-25352] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:20:46.246 [DEBUG] [Thread-25352] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:20:46.288 [DEBUG] [Thread-25352] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:20:46.288 [DEBUG] [Thread-25352] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:20:46.290 [DEBUG] [Thread-25352] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:20:46.301 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:20:46.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:20:46.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:20:46.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:20:46.306 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:20:46.307 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:20:46.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.930648 -999.00  +15.30   4.21     62   +8.20 1 2 1 1 1     0    0 8.68 54.74 ZNEsw 6.8 4.2 236.2 10.7 15.9 -22.4 15.8 -21.3 15.5 -20.8 15.8 -21.8
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.930648
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:20:46.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:20:13', tmtdew=8.22, humidity=58.25, cloud=0.0, wind=12.58, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:20:13', seeing=1.01, atlas_timestamp='2025-11-12T22:20:07.987', atlas_cloud=2, atlas_rain=1, zp_data=[0.23874999999999957, 0.19175000000000075, 0.35625000000000107, 0.37549999999999883, 0.5015000000000001, 0.3982500000000009, 0.3019999999999996, 0.10075000000000145, 0.18849999999999945, 0.2759999999999998, 0.48075000000000045, 0.5229999999999997, 0.5489999999999995, 0.42825000000000024, 0.1899999999999995, 0.16199999999999903, 0.24124999999999908, 0.3204999999999991, 0.4949999999999992, 0.7822499999999986, 0.5749999999999984, 0.37274999999999814, 0.2737499999999997, 0.1557499999999994, 0.27199999999999847, 0.47550000000000026, 0.4317500000000001, 0.7540000000000004, 0.806, 0.1850000000000005, 0.3255000000000008, 0.3280000000000012, 0.31574999999999953], zp_timestamp='2025-11-12T22:19:00')
2025-11-13T00:20:46.308 [DEBUG] [Thread-25352] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:20:46.382 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:20:46.386 [DEBUG] [Thread-25355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:20:46.394 [DEBUG] [Thread-25356] [transport.py] [_log()] starting thread (client mode): 0x149057b0
2025-11-13T00:20:46.394 [DEBUG] [Thread-25356] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:20:46.408 [DEBUG] [Thread-25356] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:20:46.408 [INFO] [Thread-25356] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] client lang: <none>
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] server lang: <none>
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] kex follows: False
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] Compression: none
2025-11-13T00:20:46.416 [DEBUG] [Thread-25356] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:20:46.475 [DEBUG] [Thread-25356] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:20:46.475 [DEBUG] [Thread-25356] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:20:46.475 [DEBUG] [Thread-25356] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:20:46.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:20:46.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:20:46.531 [DEBUG] [Thread-25356] [transport.py] [_log()] userauth is OK
2025-11-13T00:20:46.532 [DEBUG] [Thread-25356] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:20:46.532 [DEBUG] [Thread-25356] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:20:46.532 [DEBUG] [Thread-25356] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:20:46.532 [DEBUG] [Thread-25356] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:20:46.549 [INFO] [Thread-25356] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:20:46.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:20:46.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:20:47.421 [DEBUG] [Thread-25356] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:20:47.421 [DEBUG] [Thread-25356] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:20:47.469 [DEBUG] [Thread-25356] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:20:47.469 [DEBUG] [Thread-25356] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:20:47.477 [DEBUG] [Thread-25356] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:20:47.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:20:47.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:20:47.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-11-13T00:20:47.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:20:47.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:20:47.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:20:47.510 [DEBUG] [Thread-25356] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:21:01.426 [DEBUG] [Thread-25358 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:21:06.011 [DEBUG] [Thread-25359 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:21:16.465 [DEBUG] [Thread-25360 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:21:17.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:21:17.533 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:21:17.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-11-13T00:21:18.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 20, 45), 8.15, 58.3, 0.0, 12.21, 15.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:21:18.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:20:45
2025-11-13T00:21:18.347 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:21:18.502 [DEBUG] [Thread-25361] [transport.py] [_log()] starting thread (client mode): 0x1737fdc0
2025-11-13T00:21:18.502 [DEBUG] [Thread-25361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:21:18.522 [DEBUG] [Thread-25361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:21:18.522 [INFO] [Thread-25361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] client lang: <none>
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] server lang: <none>
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] kex follows: False
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] Compression: none
2025-11-13T00:21:18.525 [DEBUG] [Thread-25361] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:21:18.540 [DEBUG] [Thread-25361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:21:18.540 [DEBUG] [Thread-25361] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:21:18.540 [DEBUG] [Thread-25361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:21:18.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:21:18.541 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:21:18.541 [DEBUG] [Thread-25361] [transport.py] [_log()] userauth is OK
2025-11-13T00:21:18.541 [DEBUG] [Thread-25361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:21:18.541 [DEBUG] [Thread-25361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:21:18.541 [DEBUG] [Thread-25361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:21:18.541 [DEBUG] [Thread-25361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:21:18.568 [INFO] [Thread-25361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:21:18.568 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:21:19.328 [DEBUG] [Thread-25361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:21:19.328 [DEBUG] [Thread-25361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:21:19.328 [DEBUG] [Thread-25361] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:21:19.369 [DEBUG] [Thread-25361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:21:19.369 [DEBUG] [Thread-25361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:21:19.371 [DEBUG] [Thread-25361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:21:19.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:21:19.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:21:19.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:21:19.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:21:19.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:21:19.388 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:21:19.388 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.930995 -999.00  +15.30   7.28     62   +8.20 1 2 1 1 1     0    0 8.70 55.02 ZNEsw 7.3 7.3 222.2 11.9 15.9 -22.4 15.8 -21.3 15.5 -20.8 15.8 -21.7
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.930995
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:21:19.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:20:45', tmtdew=8.15, humidity=58.3, cloud=0.0, wind=12.21, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:20:45', seeing=1.01, atlas_timestamp='2025-11-12T22:20:37.968', atlas_cloud=2, atlas_rain=1, zp_data=[0.23874999999999957, 0.19175000000000075, 0.35625000000000107, 0.37549999999999883, 0.5015000000000001, 0.3982500000000009, 0.3019999999999996, 0.10075000000000145, 0.18849999999999945, 0.2759999999999998, 0.48075000000000045, 0.5229999999999997, 0.5489999999999995, 0.42825000000000024, 0.1899999999999995, 0.16199999999999903, 0.24124999999999908, 0.3204999999999991, 0.4949999999999992, 0.7822499999999986, 0.5749999999999984, 0.37274999999999814, 0.2737499999999997, 0.1557499999999994, 0.27199999999999847, 0.47550000000000026, 0.4317500000000001, 0.7540000000000004, 0.806, 0.1850000000000005, 0.3255000000000008, 0.3280000000000012, 0.31574999999999953], zp_timestamp='2025-11-12T22:19:00')
2025-11-13T00:21:19.389 [DEBUG] [Thread-25361] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:21:19.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:21:19.472 [DEBUG] [Thread-25364] [transport.py] [_log()] starting thread (client mode): 0x1737e650
2025-11-13T00:21:19.472 [DEBUG] [Thread-25364] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:21:19.487 [DEBUG] [Thread-25364] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:21:19.487 [INFO] [Thread-25364] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:21:19.494 [DEBUG] [Thread-25364] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:21:19.494 [DEBUG] [Thread-25364] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:21:19.494 [DEBUG] [Thread-25364] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:21:19.494 [DEBUG] [Thread-25364] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] client lang: <none>
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] server lang: <none>
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] kex follows: False
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] Compression: none
2025-11-13T00:21:19.495 [DEBUG] [Thread-25364] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:21:19.550 [DEBUG] [Thread-25364] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:21:19.551 [DEBUG] [Thread-25364] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:21:19.551 [DEBUG] [Thread-25364] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:21:19.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:21:19.551 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:21:19.608 [DEBUG] [Thread-25364] [transport.py] [_log()] userauth is OK
2025-11-13T00:21:19.608 [DEBUG] [Thread-25364] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:21:19.608 [DEBUG] [Thread-25364] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:21:19.608 [DEBUG] [Thread-25364] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:21:19.608 [DEBUG] [Thread-25364] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:21:19.622 [INFO] [Thread-25364] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:21:19.623 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:21:19.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:21:20.448 [DEBUG] [Thread-25364] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:21:20.448 [DEBUG] [Thread-25364] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:21:20.495 [DEBUG] [Thread-25364] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:21:20.496 [DEBUG] [Thread-25364] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:21:20.505 [DEBUG] [Thread-25364] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:21:20.514 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:21:20.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-11-13T00:21:20.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-11-13T00:21:20.532 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:21:20.532 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:21:20.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:21:20.540 [DEBUG] [Thread-25364] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:21:24.416 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:21:24.417 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:21:31.499 [DEBUG] [Thread-25366 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:21:46.538 [DEBUG] [Thread-25367 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:21:50.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:21:50.563 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:21:50.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-11-13T00:21:51.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 21, 17), 8.18, 58.19, 0.0, 13.06, 15.25, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:21:51.264 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:21:17
2025-11-13T00:21:51.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:21:51.547 [DEBUG] [Thread-25368] [transport.py] [_log()] starting thread (client mode): 0x1737df30
2025-11-13T00:21:51.547 [DEBUG] [Thread-25368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:21:51.566 [DEBUG] [Thread-25368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:21:51.566 [INFO] [Thread-25368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] client lang: <none>
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] server lang: <none>
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] kex follows: False
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:21:51.569 [DEBUG] [Thread-25368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:21:51.570 [DEBUG] [Thread-25368] [transport.py] [_log()] Compression: none
2025-11-13T00:21:51.570 [DEBUG] [Thread-25368] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:21:51.585 [DEBUG] [Thread-25368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:21:51.585 [DEBUG] [Thread-25368] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:21:51.585 [DEBUG] [Thread-25368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:21:51.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:21:51.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:21:51.586 [DEBUG] [Thread-25368] [transport.py] [_log()] userauth is OK
2025-11-13T00:21:51.586 [DEBUG] [Thread-25368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:21:51.586 [DEBUG] [Thread-25368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:21:51.586 [DEBUG] [Thread-25368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:21:51.586 [DEBUG] [Thread-25368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:21:51.595 [INFO] [Thread-25368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:21:51.596 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:21:52.226 [DEBUG] [Thread-25368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:21:52.226 [DEBUG] [Thread-25368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:21:52.226 [DEBUG] [Thread-25368] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:21:52.266 [DEBUG] [Thread-25368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:21:52.267 [DEBUG] [Thread-25368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:21:52.270 [DEBUG] [Thread-25368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:21:52.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:21:52.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:21:52.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:21:52.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:21:52.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:21:52.293 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:21:52.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:21:52.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:21:52.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:21:52.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.931342 -999.00  +15.30   5.02     63   +8.30 1 2 1 1 1     0    0 8.64 51.00 ZNEsW 5.2 5.0 217.0 10.1 15.9 -22.3 15.8 -21.6 15.5 -20.8 15.8 -21.8
2025-11-13T00:21:52.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:21:52.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:21:52.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.931342
2025-11-13T00:21:52.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:21:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:21:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:21:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:21:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:21:52.295 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:21:17', tmtdew=8.18, humidity=58.19, cloud=0.0, wind=13.06, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:21:49', seeing=0.98, atlas_timestamp='2025-11-12T22:21:07.949', atlas_cloud=2, atlas_rain=1, zp_data=[0.23874999999999957, 0.19175000000000075, 0.35625000000000107, 0.37549999999999883, 0.5015000000000001, 0.3982500000000009, 0.3019999999999996, 0.10075000000000145, 0.18849999999999945, 0.2759999999999998, 0.48075000000000045, 0.5229999999999997, 0.5489999999999995, 0.42825000000000024, 0.1899999999999995, 0.16199999999999903, 0.24124999999999908, 0.3204999999999991, 0.4949999999999992, 0.7822499999999986, 0.5749999999999984, 0.37274999999999814, 0.2737499999999997, 0.1557499999999994, 0.27199999999999847, 0.47550000000000026, 0.4317500000000001, 0.7540000000000004, 0.806, 0.1850000000000005, 0.3255000000000008, 0.3280000000000012, 0.31574999999999953], zp_timestamp='2025-11-12T22:19:00')
2025-11-13T00:21:52.296 [DEBUG] [Thread-25368] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:21:52.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:21:52.391 [DEBUG] [Thread-25371] [transport.py] [_log()] starting thread (client mode): 0x14983ac0
2025-11-13T00:21:52.392 [DEBUG] [Thread-25371] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:21:52.406 [DEBUG] [Thread-25371] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:21:52.407 [INFO] [Thread-25371] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:21:52.414 [DEBUG] [Thread-25371] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] client lang: <none>
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] server lang: <none>
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] kex follows: False
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:21:52.415 [DEBUG] [Thread-25371] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:21:52.416 [DEBUG] [Thread-25371] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:21:52.416 [DEBUG] [Thread-25371] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:21:52.416 [DEBUG] [Thread-25371] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:21:52.416 [DEBUG] [Thread-25371] [transport.py] [_log()] Compression: none
2025-11-13T00:21:52.416 [DEBUG] [Thread-25371] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:21:52.473 [DEBUG] [Thread-25371] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:21:52.473 [DEBUG] [Thread-25371] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:21:52.474 [DEBUG] [Thread-25371] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:21:52.474 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:21:52.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:21:52.533 [DEBUG] [Thread-25371] [transport.py] [_log()] userauth is OK
2025-11-13T00:21:52.533 [DEBUG] [Thread-25371] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:21:52.533 [DEBUG] [Thread-25371] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:21:52.533 [DEBUG] [Thread-25371] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:21:52.533 [DEBUG] [Thread-25371] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:21:52.557 [INFO] [Thread-25371] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:21:52.558 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:21:52.558 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:21:53.402 [DEBUG] [Thread-25371] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:21:53.403 [DEBUG] [Thread-25371] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:21:53.451 [DEBUG] [Thread-25371] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:21:53.451 [DEBUG] [Thread-25371] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:21:53.460 [DEBUG] [Thread-25371] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:21:53.469 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:21:53.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-11-13T00:21:53.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-11-13T00:21:53.488 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:21:53.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:21:53.489 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:21:53.497 [DEBUG] [Thread-25371] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:22:01.573 [DEBUG] [Thread-25373 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:06.079 [DEBUG] [Thread-25374 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:09.744 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:12.866 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:16.625 [DEBUG] [Thread-25375 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:17.895 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:23.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:22:23.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:22:23.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-11-13T00:22:24.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 21, 49), 8.18, 58.21, 0.0, 13.41, 15.3, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:22:24.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:21:49
2025-11-13T00:22:24.271 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:24.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:22:24.453 [DEBUG] [Thread-25376] [transport.py] [_log()] starting thread (client mode): 0x149809a0
2025-11-13T00:22:24.453 [DEBUG] [Thread-25376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:22:24.472 [DEBUG] [Thread-25376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:22:24.473 [INFO] [Thread-25376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:22:24.475 [DEBUG] [Thread-25376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] client lang: <none>
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] server lang: <none>
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] kex follows: False
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] Compression: none
2025-11-13T00:22:24.476 [DEBUG] [Thread-25376] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:22:24.494 [DEBUG] [Thread-25376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:22:24.494 [DEBUG] [Thread-25376] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:22:24.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:22:24.495 [DEBUG] [Thread-25376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:22:24.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:22:24.498 [DEBUG] [Thread-25376] [transport.py] [_log()] userauth is OK
2025-11-13T00:22:24.498 [DEBUG] [Thread-25376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:22:24.498 [DEBUG] [Thread-25376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:22:24.498 [DEBUG] [Thread-25376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:22:24.498 [DEBUG] [Thread-25376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:22:24.524 [INFO] [Thread-25376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:22:24.525 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:22:24.633 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:24.634 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:25.283 [DEBUG] [Thread-25376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:22:25.284 [DEBUG] [Thread-25376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:22:25.284 [DEBUG] [Thread-25376] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:22:25.324 [DEBUG] [Thread-25376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:22:25.325 [DEBUG] [Thread-25376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:22:25.328 [DEBUG] [Thread-25376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:22:25.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:22:25.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:22:25.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:22:25.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:22:25.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:22:25.352 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:22:25.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:22:25.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:22:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:22:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.931689 -999.00  +15.30   5.39     63   +8.30 1 2 1 1 1     0    0 8.38 47.39 ZNEsW 8.8 5.4 241.0 11.3 15.9 -22.4 15.8 -21.2 15.5 -20.9 15.8 -21.8
2025-11-13T00:22:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:22:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:22:25.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.931689
2025-11-13T00:22:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:22:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:22:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:22:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:22:25.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:22:25.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:21:49', tmtdew=8.18, humidity=58.21, cloud=0.0, wind=13.41, temperature=15.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:22:21', seeing=0.98, atlas_timestamp='2025-11-12T22:21:37.930', atlas_cloud=2, atlas_rain=1, zp_data=[0.23874999999999957, 0.19175000000000075, 0.35625000000000107, 0.37549999999999883, 0.5015000000000001, 0.3982500000000009, 0.3019999999999996, 0.10075000000000145, 0.18849999999999945, 0.2759999999999998, 0.48075000000000045, 0.5229999999999997, 0.5489999999999995, 0.42825000000000024, 0.1899999999999995, 0.16199999999999903, 0.24124999999999908, 0.3204999999999991, 0.4949999999999992, 0.7822499999999986, 0.5749999999999984, 0.37274999999999814, 0.2737499999999997, 0.1557499999999994, 0.27199999999999847, 0.47550000000000026, 0.4317500000000001, 0.7540000000000004, 0.806, 0.1850000000000005, 0.3255000000000008, 0.3280000000000012, 0.31574999999999953], zp_timestamp='2025-11-12T22:19:00')
2025-11-13T00:22:25.355 [DEBUG] [Thread-25376] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:22:25.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:22:25.451 [DEBUG] [Thread-25379] [transport.py] [_log()] starting thread (client mode): 0x1737d6c0
2025-11-13T00:22:25.452 [DEBUG] [Thread-25379] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:22:25.470 [DEBUG] [Thread-25379] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:22:25.470 [INFO] [Thread-25379] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] client lang: <none>
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] server lang: <none>
2025-11-13T00:22:25.480 [DEBUG] [Thread-25379] [transport.py] [_log()] kex follows: False
2025-11-13T00:22:25.481 [DEBUG] [Thread-25379] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:22:25.481 [DEBUG] [Thread-25379] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:22:25.481 [DEBUG] [Thread-25379] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:22:25.481 [DEBUG] [Thread-25379] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:22:25.481 [DEBUG] [Thread-25379] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:22:25.481 [DEBUG] [Thread-25379] [transport.py] [_log()] Compression: none
2025-11-13T00:22:25.481 [DEBUG] [Thread-25379] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:22:25.536 [DEBUG] [Thread-25379] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:22:25.536 [DEBUG] [Thread-25379] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:22:25.537 [DEBUG] [Thread-25379] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:22:25.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:22:25.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:22:25.596 [DEBUG] [Thread-25379] [transport.py] [_log()] userauth is OK
2025-11-13T00:22:25.597 [DEBUG] [Thread-25379] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:22:25.597 [DEBUG] [Thread-25379] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:22:25.598 [DEBUG] [Thread-25379] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:22:25.598 [DEBUG] [Thread-25379] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:22:25.620 [INFO] [Thread-25379] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:22:25.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:22:25.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:22:26.426 [DEBUG] [Thread-25379] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:22:26.427 [DEBUG] [Thread-25379] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:22:26.475 [DEBUG] [Thread-25379] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:22:26.475 [DEBUG] [Thread-25379] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:22:26.484 [DEBUG] [Thread-25379] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:22:26.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:22:26.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-11-13T00:22:26.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:22:26.513 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:22:26.514 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:22:26.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:22:26.523 [DEBUG] [Thread-25379] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:22:31.657 [DEBUG] [Thread-25381 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:42.667 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:46.716 [DEBUG] [Thread-25382 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:47.055 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:22:56.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:22:56.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:22:56.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-11-13T00:22:57.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 22, 53), 8.19, 58.16, 0.0, 13.04, 15.3, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:22:57.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:22:53
2025-11-13T00:22:57.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:22:57.490 [DEBUG] [Thread-25383] [transport.py] [_log()] starting thread (client mode): 0x11f00880
2025-11-13T00:22:57.490 [DEBUG] [Thread-25383] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:22:57.510 [DEBUG] [Thread-25383] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:22:57.510 [INFO] [Thread-25383] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] client lang: <none>
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] server lang: <none>
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] kex follows: False
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] Compression: none
2025-11-13T00:22:57.512 [DEBUG] [Thread-25383] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:22:57.528 [DEBUG] [Thread-25383] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:22:57.528 [DEBUG] [Thread-25383] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:22:57.528 [DEBUG] [Thread-25383] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:22:57.528 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:22:57.529 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:22:57.529 [DEBUG] [Thread-25383] [transport.py] [_log()] userauth is OK
2025-11-13T00:22:57.529 [DEBUG] [Thread-25383] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:22:57.529 [DEBUG] [Thread-25383] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:22:57.529 [DEBUG] [Thread-25383] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:22:57.529 [DEBUG] [Thread-25383] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:22:57.538 [INFO] [Thread-25383] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:22:57.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:22:58.166 [DEBUG] [Thread-25383] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:22:58.166 [DEBUG] [Thread-25383] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:22:58.167 [DEBUG] [Thread-25383] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:22:58.207 [DEBUG] [Thread-25383] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:22:58.208 [DEBUG] [Thread-25383] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:22:58.211 [DEBUG] [Thread-25383] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:22:58.223 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:22:58.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:22:58.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:22:58.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:22:58.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:22:58.235 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:22:58.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:22:58.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:22:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:22:58.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.932037 -999.00  +15.30   4.29     62   +8.30 1 2 1 1 1     0    0 8.48 45.63 ZNEsW 6.2 4.3 235.5 11.2 15.9 -22.3 15.7 -21.2 15.5 -20.8 15.8 -21.8
2025-11-13T00:22:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:22:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:22:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.932037
2025-11-13T00:22:58.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:22:58.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:22:58.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:22:58.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:22:58.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:22:58.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:22:53', tmtdew=8.19, humidity=58.16, cloud=0.0, wind=13.04, temperature=15.3, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:22:53', seeing=0.93, atlas_timestamp='2025-11-12T22:22:07.997', atlas_cloud=2, atlas_rain=1, zp_data=[0.23874999999999957, 0.19175000000000075, 0.35625000000000107, 0.37549999999999883, 0.5015000000000001, 0.3982500000000009, 0.3019999999999996, 0.10075000000000145, 0.18849999999999945, 0.2759999999999998, 0.48075000000000045, 0.5229999999999997, 0.5489999999999995, 0.42825000000000024, 0.1899999999999995, 0.16199999999999903, 0.24124999999999908, 0.3204999999999991, 0.4949999999999992, 0.7822499999999986, 0.5749999999999984, 0.37274999999999814, 0.2737499999999997, 0.1557499999999994, 0.27199999999999847, 0.47550000000000026, 0.4317500000000001, 0.7540000000000004, 0.806, 0.1850000000000005, 0.3255000000000008, 0.3280000000000012, 0.31574999999999953], zp_timestamp='2025-11-12T22:19:00')
2025-11-13T00:22:58.239 [DEBUG] [Thread-25383] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:22:58.323 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:22:58.334 [DEBUG] [Thread-25386] [transport.py] [_log()] starting thread (client mode): 0x14980f70
2025-11-13T00:22:58.334 [DEBUG] [Thread-25386] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:22:58.349 [DEBUG] [Thread-25386] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:22:58.349 [INFO] [Thread-25386] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:22:58.356 [DEBUG] [Thread-25386] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:22:58.356 [DEBUG] [Thread-25386] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] client lang: <none>
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] server lang: <none>
2025-11-13T00:22:58.357 [DEBUG] [Thread-25386] [transport.py] [_log()] kex follows: False
2025-11-13T00:22:58.358 [DEBUG] [Thread-25386] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:22:58.358 [DEBUG] [Thread-25386] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:22:58.358 [DEBUG] [Thread-25386] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:22:58.358 [DEBUG] [Thread-25386] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:22:58.358 [DEBUG] [Thread-25386] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:22:58.358 [DEBUG] [Thread-25386] [transport.py] [_log()] Compression: none
2025-11-13T00:22:58.358 [DEBUG] [Thread-25386] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:22:58.416 [DEBUG] [Thread-25386] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:22:58.416 [DEBUG] [Thread-25386] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:22:58.417 [DEBUG] [Thread-25386] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:22:58.417 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:22:58.418 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:22:58.472 [DEBUG] [Thread-25386] [transport.py] [_log()] userauth is OK
2025-11-13T00:22:58.473 [DEBUG] [Thread-25386] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:22:58.473 [DEBUG] [Thread-25386] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:22:58.473 [DEBUG] [Thread-25386] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:22:58.473 [DEBUG] [Thread-25386] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:22:58.492 [INFO] [Thread-25386] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:22:58.492 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:22:58.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:22:59.296 [DEBUG] [Thread-25386] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:22:59.296 [DEBUG] [Thread-25386] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:22:59.343 [DEBUG] [Thread-25386] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:22:59.344 [DEBUG] [Thread-25386] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:22:59.353 [DEBUG] [Thread-25386] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:22:59.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:22:59.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:22:59.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:22:59.379 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:22:59.379 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:22:59.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:22:59.387 [DEBUG] [Thread-25386] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:23:01.747 [DEBUG] [Thread-25388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:06.137 [DEBUG] [Thread-25389 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:06.425 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:10.811 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:16.798 [DEBUG] [Thread-25390 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:17.512 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:21.866 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:24.837 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:24.838 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:29.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:23:29.410 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:23:29.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:23:30.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 23, 25), 8.21, 58.11, 0.0, 12.6, 15.32, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:23:30.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:23:25
2025-11-13T00:23:30.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:23:30.347 [DEBUG] [Thread-25391] [transport.py] [_log()] starting thread (client mode): 0x11f00160
2025-11-13T00:23:30.347 [DEBUG] [Thread-25391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:23:30.362 [DEBUG] [Thread-25391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:23:30.362 [INFO] [Thread-25391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:23:30.365 [DEBUG] [Thread-25391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] client lang: <none>
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] server lang: <none>
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] kex follows: False
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:23:30.366 [DEBUG] [Thread-25391] [transport.py] [_log()] Compression: none
2025-11-13T00:23:30.367 [DEBUG] [Thread-25391] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:23:30.384 [DEBUG] [Thread-25391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:23:30.385 [DEBUG] [Thread-25391] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:23:30.385 [DEBUG] [Thread-25391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:23:30.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:23:30.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:23:30.387 [DEBUG] [Thread-25391] [transport.py] [_log()] userauth is OK
2025-11-13T00:23:30.387 [DEBUG] [Thread-25391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:23:30.388 [DEBUG] [Thread-25391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:23:30.388 [DEBUG] [Thread-25391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:23:30.388 [DEBUG] [Thread-25391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:23:30.412 [INFO] [Thread-25391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:23:30.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:23:31.227 [DEBUG] [Thread-25391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:23:31.227 [DEBUG] [Thread-25391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:23:31.227 [DEBUG] [Thread-25391] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:23:31.268 [DEBUG] [Thread-25391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:23:31.268 [DEBUG] [Thread-25391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:23:31.270 [DEBUG] [Thread-25391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:23:31.284 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:23:31.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:23:31.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:23:31.287 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:23:31.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:23:31.291 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:23:31.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.932731 -999.00  +15.30   6.03     63   +8.30 1 2 1 1 1     0    0 8.31 38.45 ZNEsW 6.7 6.0 211.8 10.5 15.8 -22.3 15.7 -21.1 15.5 -20.8 15.8 -21.8
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.932731
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:23:31.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:23:25', tmtdew=8.21, humidity=58.11, cloud=0.0, wind=12.6, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:23:25', seeing=1.03, atlas_timestamp='2025-11-12T22:23:07.958', atlas_cloud=2, atlas_rain=1, zp_data=[0.23874999999999957, 0.19175000000000075, 0.35625000000000107, 0.37549999999999883, 0.5015000000000001, 0.3982500000000009, 0.3019999999999996, 0.10075000000000145, 0.18849999999999945, 0.2759999999999998, 0.48075000000000045, 0.5229999999999997, 0.5489999999999995, 0.42825000000000024, 0.1899999999999995, 0.16199999999999903, 0.24124999999999908, 0.3204999999999991, 0.4949999999999992, 0.7822499999999986, 0.5749999999999984, 0.37274999999999814, 0.2737499999999997, 0.1557499999999994, 0.27199999999999847, 0.47550000000000026, 0.4317500000000001, 0.7540000000000004, 0.806, 0.1850000000000005, 0.3255000000000008, 0.3280000000000012, 0.31574999999999953], zp_timestamp='2025-11-12T22:19:00')
2025-11-13T00:23:31.292 [DEBUG] [Thread-25391] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:23:31.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:23:31.382 [DEBUG] [Thread-25394] [transport.py] [_log()] starting thread (client mode): 0x1493ee00
2025-11-13T00:23:31.382 [DEBUG] [Thread-25394] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:23:31.397 [DEBUG] [Thread-25394] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:23:31.397 [INFO] [Thread-25394] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:23:31.404 [DEBUG] [Thread-25394] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:23:31.404 [DEBUG] [Thread-25394] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:23:31.404 [DEBUG] [Thread-25394] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:23:31.404 [DEBUG] [Thread-25394] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] client lang: <none>
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] server lang: <none>
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] kex follows: False
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] Compression: none
2025-11-13T00:23:31.405 [DEBUG] [Thread-25394] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:23:31.463 [DEBUG] [Thread-25394] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:23:31.463 [DEBUG] [Thread-25394] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:23:31.463 [DEBUG] [Thread-25394] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:23:31.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:23:31.463 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:23:31.520 [DEBUG] [Thread-25394] [transport.py] [_log()] userauth is OK
2025-11-13T00:23:31.520 [DEBUG] [Thread-25394] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:23:31.520 [DEBUG] [Thread-25394] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:23:31.520 [DEBUG] [Thread-25394] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:23:31.520 [DEBUG] [Thread-25394] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:23:31.537 [INFO] [Thread-25394] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:23:31.537 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:23:31.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:23:31.831 [DEBUG] [Thread-25396 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:23:32.369 [DEBUG] [Thread-25394] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:23:32.369 [DEBUG] [Thread-25394] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:23:32.417 [DEBUG] [Thread-25394] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:23:32.417 [DEBUG] [Thread-25394] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:23:32.425 [DEBUG] [Thread-25394] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:23:32.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:23:32.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')
2025-11-13T00:23:32.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-11-13T00:23:32.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:23:32.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:23:32.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:23:32.457 [DEBUG] [Thread-25394] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:23:46.871 [DEBUG] [Thread-25397 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:01.906 [DEBUG] [Thread-25398 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:02.479 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:24:02.479 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:24:02.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-11-13T00:24:03.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 23, 57), 8.2, 58.16, 0.0, 13.78, 15.33, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:24:03.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:23:57
2025-11-13T00:24:03.248 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:24:03.393 [DEBUG] [Thread-25399] [transport.py] [_log()] starting thread (client mode): 0x1493f610
2025-11-13T00:24:03.394 [DEBUG] [Thread-25399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:24:03.413 [DEBUG] [Thread-25399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:24:03.414 [INFO] [Thread-25399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] client lang: <none>
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] server lang: <none>
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] kex follows: False
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] Compression: none
2025-11-13T00:24:03.417 [DEBUG] [Thread-25399] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:24:03.439 [DEBUG] [Thread-25399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:24:03.440 [DEBUG] [Thread-25399] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:24:03.440 [DEBUG] [Thread-25399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:24:03.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:24:03.441 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:24:03.442 [DEBUG] [Thread-25399] [transport.py] [_log()] userauth is OK
2025-11-13T00:24:03.443 [DEBUG] [Thread-25399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:24:03.443 [DEBUG] [Thread-25399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:24:03.443 [DEBUG] [Thread-25399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:24:03.443 [DEBUG] [Thread-25399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:24:03.467 [INFO] [Thread-25399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:24:03.467 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:24:04.123 [DEBUG] [Thread-25399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:24:04.123 [DEBUG] [Thread-25399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:24:04.123 [DEBUG] [Thread-25399] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:24:04.164 [DEBUG] [Thread-25399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:24:04.164 [DEBUG] [Thread-25399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:24:04.167 [DEBUG] [Thread-25399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:24:04.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:24:04.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:24:04.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:24:04.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:24:04.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:24:04.193 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:24:04.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:24:04.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:24:04.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:24:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.933078 -999.00  +15.30   7.41     63   +8.30 1 2 1 1 1     0    0 8.15 35.04 ZNEsW 6.5 7.4 250.6 9.9 15.8 -22.3 15.7 -21.0 15.5 -20.7 15.8 -21.7
2025-11-13T00:24:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:24:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:24:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.933078
2025-11-13T00:24:04.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:24:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:24:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:24:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:24:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:24:04.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:23:57', tmtdew=8.2, humidity=58.16, cloud=0.0, wind=13.78, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:23:58', seeing=1.03, atlas_timestamp='2025-11-12T22:23:37.939', atlas_cloud=2, atlas_rain=1, zp_data=[0.23874999999999957, 0.19175000000000075, 0.35625000000000107, 0.37549999999999883, 0.5015000000000001, 0.3982500000000009, 0.3019999999999996, 0.10075000000000145, 0.18849999999999945, 0.2759999999999998, 0.48075000000000045, 0.5229999999999997, 0.5489999999999995, 0.42825000000000024, 0.1899999999999995, 0.16199999999999903, 0.24124999999999908, 0.3204999999999991, 0.4949999999999992, 0.7822499999999986, 0.5749999999999984, 0.37274999999999814, 0.2737499999999997, 0.1557499999999994, 0.27199999999999847, 0.47550000000000026, 0.4317500000000001, 0.7540000000000004, 0.806, 0.1850000000000005, 0.3255000000000008, 0.3280000000000012, 0.31574999999999953], zp_timestamp='2025-11-12T22:22:00')
2025-11-13T00:24:04.196 [DEBUG] [Thread-25399] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:24:04.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:24:06.201 [DEBUG] [Thread-25402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:16.943 [DEBUG] [Thread-25403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:25.040 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:25.042 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:30.179 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:31.994 [DEBUG] [Thread-25404 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:34.270 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:24:47.028 [DEBUG] [Thread-25405 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:25:02.058 [DEBUG] [Thread-25406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:25:06.258 [DEBUG] [Thread-25407 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:25:17.093 [DEBUG] [Thread-25408 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:25:25.247 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:25:25.248 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:25:32.130 [DEBUG] [Thread-25409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:25:47.164 [DEBUG] [Thread-25410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:25:58.753 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:02.206 [DEBUG] [Thread-25411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:05.580 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:06.310 [DEBUG] [Thread-25412 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:09.675 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:17.243 [DEBUG] [Thread-25413 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:17.915 [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-11-13T00:26:25.450 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:25.452 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:32.285 [DEBUG] [Thread-25414 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:47.318 [DEBUG] [Thread-25415 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:26:47.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:26:47.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:26:47.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-11-13T00:26:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 26, 37), 8.27, 57.69, 0.0, 13.43, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:26:48.648 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:26:37
2025-11-13T00:26:48.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:26:48.930 [DEBUG] [Thread-25416] [transport.py] [_log()] starting thread (client mode): 0x11f02800
2025-11-13T00:26:48.930 [DEBUG] [Thread-25416] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:26:48.950 [DEBUG] [Thread-25416] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:26:48.950 [INFO] [Thread-25416] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] client lang: <none>
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] server lang: <none>
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] kex follows: False
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] Compression: none
2025-11-13T00:26:48.954 [DEBUG] [Thread-25416] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:26:48.970 [DEBUG] [Thread-25416] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:26:48.971 [DEBUG] [Thread-25416] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:26:48.971 [DEBUG] [Thread-25416] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:26:48.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:26:48.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:26:48.972 [DEBUG] [Thread-25416] [transport.py] [_log()] userauth is OK
2025-11-13T00:26:48.972 [DEBUG] [Thread-25416] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:26:48.972 [DEBUG] [Thread-25416] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:26:48.972 [DEBUG] [Thread-25416] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:26:48.972 [DEBUG] [Thread-25416] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:26:48.987 [INFO] [Thread-25416] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:26:48.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:26:49.599 [DEBUG] [Thread-25416] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:26:49.599 [DEBUG] [Thread-25416] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:26:49.599 [DEBUG] [Thread-25416] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:26:49.640 [DEBUG] [Thread-25416] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:26:49.640 [DEBUG] [Thread-25416] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:26:49.642 [DEBUG] [Thread-25416] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:26:49.653 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:26:49.653 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:26:49.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:26:49.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:26:49.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:26:49.658 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:26:49.658 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:26:49.658 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:26:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:26:49.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.935162 -999.00  +15.30  12.38     62   +8.30 1 2 1 1 1     0    0 7.55 16.97 ZNEsW 9.8 12.4 262.0 14.9 15.8 -22.3 15.7 -21.2 15.5 -20.9 15.8 -21.9
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.935162
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:26:49.659 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:26:37', tmtdew=8.27, humidity=57.69, cloud=0.0, wind=13.43, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:26:38', seeing=0.97, atlas_timestamp='2025-11-12T22:26:37.997', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:25:00')
2025-11-13T00:26:49.660 [DEBUG] [Thread-25416] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:26:49.734 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:26:49.745 [DEBUG] [Thread-25419] [transport.py] [_log()] starting thread (client mode): 0x1737ca00
2025-11-13T00:26:49.745 [DEBUG] [Thread-25419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:26:49.760 [DEBUG] [Thread-25419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:26:49.760 [INFO] [Thread-25419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] client lang: <none>
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] server lang: <none>
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] kex follows: False
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] Compression: none
2025-11-13T00:26:49.767 [DEBUG] [Thread-25419] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:26:49.823 [DEBUG] [Thread-25419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:26:49.823 [DEBUG] [Thread-25419] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:26:49.823 [DEBUG] [Thread-25419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:26:49.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:26:49.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:26:49.880 [DEBUG] [Thread-25419] [transport.py] [_log()] userauth is OK
2025-11-13T00:26:49.880 [DEBUG] [Thread-25419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:26:49.880 [DEBUG] [Thread-25419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:26:49.880 [DEBUG] [Thread-25419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:26:49.880 [DEBUG] [Thread-25419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:26:49.898 [INFO] [Thread-25419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:26:49.898 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:26:49.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:26:50.756 [DEBUG] [Thread-25419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:26:50.757 [DEBUG] [Thread-25419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:26:50.805 [DEBUG] [Thread-25419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:26:50.805 [DEBUG] [Thread-25419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:26:50.815 [DEBUG] [Thread-25419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:26:50.823 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:26:50.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-11-13T00:26:50.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-11-13T00:26:50.842 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:26:50.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:26:50.843 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:26:50.850 [DEBUG] [Thread-25419] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:27:02.348 [DEBUG] [Thread-25421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:06.370 [DEBUG] [Thread-25422 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:17.401 [DEBUG] [Thread-25423 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:20.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:27:20.873 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:27:20.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-11-13T00:27:21.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 27, 9), 8.22, 57.89, 0.0, 13.75, 15.32, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:27:21.547 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:27:09
2025-11-13T00:27:21.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:27:21.815 [DEBUG] [Thread-25424] [transport.py] [_log()] starting thread (client mode): 0x11f03760
2025-11-13T00:27:21.815 [DEBUG] [Thread-25424] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:27:21.835 [DEBUG] [Thread-25424] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:27:21.836 [INFO] [Thread-25424] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] client lang: <none>
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] server lang: <none>
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] kex follows: False
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] Compression: none
2025-11-13T00:27:21.839 [DEBUG] [Thread-25424] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:27:21.858 [DEBUG] [Thread-25424] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:27:21.858 [DEBUG] [Thread-25424] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:27:21.859 [DEBUG] [Thread-25424] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:27:21.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:27:21.859 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:27:21.861 [DEBUG] [Thread-25424] [transport.py] [_log()] userauth is OK
2025-11-13T00:27:21.861 [DEBUG] [Thread-25424] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:27:21.861 [DEBUG] [Thread-25424] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:27:21.861 [DEBUG] [Thread-25424] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:27:21.861 [DEBUG] [Thread-25424] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:27:21.882 [INFO] [Thread-25424] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:27:21.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:27:22.522 [DEBUG] [Thread-25424] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:27:22.522 [DEBUG] [Thread-25424] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:27:22.522 [DEBUG] [Thread-25424] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:27:22.563 [DEBUG] [Thread-25424] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:27:22.563 [DEBUG] [Thread-25424] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:27:22.566 [DEBUG] [Thread-25424] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:27:22.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:27:22.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:27:22.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:27:22.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:27:22.588 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:27:22.590 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:27:22.590 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:27:22.590 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:27:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:27:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.935509 -999.00  +15.30  12.51     62   +8.20 1 2 1 1 1     0    0 7.54 13.00 ZNEsW 12.7 12.5 249.0 14.5 15.8 -22.3 15.7 -21.2 15.5 -20.9 15.7 -21.8
2025-11-13T00:27:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:27:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:27:22.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.935509
2025-11-13T00:27:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:27:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:27:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:27:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:27:22.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:27:22.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:27:09', tmtdew=8.22, humidity=57.89, cloud=0.0, wind=13.75, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:27:10', seeing=0.93, atlas_timestamp='2025-11-12T22:27:07.978', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:25:00')
2025-11-13T00:27:22.593 [DEBUG] [Thread-25424] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:27:22.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:27:22.688 [DEBUG] [Thread-25427] [transport.py] [_log()] starting thread (client mode): 0x1493c1f0
2025-11-13T00:27:22.688 [DEBUG] [Thread-25427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:27:22.703 [DEBUG] [Thread-25427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:27:22.703 [INFO] [Thread-25427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:27:22.710 [DEBUG] [Thread-25427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] client lang: <none>
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] server lang: <none>
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] kex follows: False
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] Compression: none
2025-11-13T00:27:22.711 [DEBUG] [Thread-25427] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:27:22.772 [DEBUG] [Thread-25427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:27:22.772 [DEBUG] [Thread-25427] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:27:22.773 [DEBUG] [Thread-25427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:27:22.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:27:22.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:27:22.832 [DEBUG] [Thread-25427] [transport.py] [_log()] userauth is OK
2025-11-13T00:27:22.833 [DEBUG] [Thread-25427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:27:22.833 [DEBUG] [Thread-25427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:27:22.833 [DEBUG] [Thread-25427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:27:22.833 [DEBUG] [Thread-25427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:27:22.851 [INFO] [Thread-25427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:27:22.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:27:22.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:27:23.681 [DEBUG] [Thread-25427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:27:23.681 [DEBUG] [Thread-25427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:27:23.729 [DEBUG] [Thread-25427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:27:23.729 [DEBUG] [Thread-25427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:27:23.738 [DEBUG] [Thread-25427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:27:23.745 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:27:23.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:27:23.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-11-13T00:27:23.761 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:27:23.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:27:23.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:27:23.769 [DEBUG] [Thread-25427] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:27:25.662 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:25.663 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:32.204 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:32.433 [DEBUG] [Thread-25429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:40.995 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:45.053 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:47.485 [DEBUG] [Thread-25430 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:27:53.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:27:53.785 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:27:53.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-11-13T00:27:54.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 27, 41), 8.29, 57.47, 0.0, 12.85, 15.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:27:54.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:27:41
2025-11-13T00:27:54.558 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:27:54.704 [DEBUG] [Thread-25431] [transport.py] [_log()] starting thread (client mode): 0x11f03c70
2025-11-13T00:27:54.704 [DEBUG] [Thread-25431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:27:54.724 [DEBUG] [Thread-25431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:27:54.724 [INFO] [Thread-25431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:27:54.727 [DEBUG] [Thread-25431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] client lang: <none>
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] server lang: <none>
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] kex follows: False
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] Compression: none
2025-11-13T00:27:54.728 [DEBUG] [Thread-25431] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:27:54.746 [DEBUG] [Thread-25431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:27:54.747 [DEBUG] [Thread-25431] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:27:54.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:27:54.748 [DEBUG] [Thread-25431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:27:54.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:27:54.750 [DEBUG] [Thread-25431] [transport.py] [_log()] userauth is OK
2025-11-13T00:27:54.750 [DEBUG] [Thread-25431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:27:54.750 [DEBUG] [Thread-25431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:27:54.750 [DEBUG] [Thread-25431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:27:54.750 [DEBUG] [Thread-25431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:27:54.773 [INFO] [Thread-25431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:27:54.773 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:27:55.419 [DEBUG] [Thread-25431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:27:55.420 [DEBUG] [Thread-25431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:27:55.420 [DEBUG] [Thread-25431] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:27:55.460 [DEBUG] [Thread-25431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:27:55.461 [DEBUG] [Thread-25431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:27:55.464 [DEBUG] [Thread-25431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:27:55.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:27:55.477 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:27:55.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:27:55.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:27:55.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:27:55.486 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:27:55.486 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:27:55.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:27:55.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:27:55.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.935856 -999.00  +15.30  11.85     62   +8.20 1 2 1 1 1     0    0 7.38 9.45 ZNEsW 11.9 11.8 262.0 14.5 15.8 -22.4 15.7 -21.2 15.4 -20.9 15.8 -21.9
2025-11-13T00:27:55.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:27:55.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:27:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.935856
2025-11-13T00:27:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:27:55.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:27:55.488 [DEBUG] [Thread-25431] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:27:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:27:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:27:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:27:55.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:27:41', tmtdew=8.29, humidity=57.47, cloud=0.0, wind=12.85, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:27:42', seeing=1.01, atlas_timestamp='2025-11-12T22:27:37.958', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:25:00')
2025-11-13T00:27:55.571 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:27:55.584 [DEBUG] [Thread-25434] [transport.py] [_log()] starting thread (client mode): 0x1493c760
2025-11-13T00:27:55.584 [DEBUG] [Thread-25434] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:27:55.604 [DEBUG] [Thread-25434] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:27:55.604 [INFO] [Thread-25434] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:27:55.611 [DEBUG] [Thread-25434] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:27:55.611 [DEBUG] [Thread-25434] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] client lang: <none>
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] server lang: <none>
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] kex follows: False
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:27:55.612 [DEBUG] [Thread-25434] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:27:55.613 [DEBUG] [Thread-25434] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:27:55.613 [DEBUG] [Thread-25434] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:27:55.613 [DEBUG] [Thread-25434] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:27:55.613 [DEBUG] [Thread-25434] [transport.py] [_log()] Compression: none
2025-11-13T00:27:55.613 [DEBUG] [Thread-25434] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:27:55.672 [DEBUG] [Thread-25434] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:27:55.673 [DEBUG] [Thread-25434] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:27:55.674 [DEBUG] [Thread-25434] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:27:55.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:27:55.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:27:55.731 [DEBUG] [Thread-25434] [transport.py] [_log()] userauth is OK
2025-11-13T00:27:55.731 [DEBUG] [Thread-25434] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:27:55.731 [DEBUG] [Thread-25434] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:27:55.731 [DEBUG] [Thread-25434] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:27:55.731 [DEBUG] [Thread-25434] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:27:55.751 [INFO] [Thread-25434] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:27:55.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:27:55.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:27:56.622 [DEBUG] [Thread-25434] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:27:56.622 [DEBUG] [Thread-25434] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:27:56.669 [DEBUG] [Thread-25434] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:27:56.669 [DEBUG] [Thread-25434] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:27:56.678 [DEBUG] [Thread-25434] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:27:56.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:27:56.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-11-13T00:27:56.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-11-13T00:27:56.704 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:27:56.704 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:27:56.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:27:56.713 [DEBUG] [Thread-25434] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:28:02.520 [DEBUG] [Thread-25436 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:28:06.423 [DEBUG] [Thread-25437 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:28:17.569 [DEBUG] [Thread-25438 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:28:25.864 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:28:25.866 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:28:26.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:28:26.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:28:26.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-11-13T00:28:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 28, 13), 8.3, 57.46, 0.0, 13.62, 15.38, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:28:27.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:28:13
2025-11-13T00:28:27.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:28:27.634 [DEBUG] [Thread-25439] [transport.py] [_log()] starting thread (client mode): 0x11f00df0
2025-11-13T00:28:27.634 [DEBUG] [Thread-25439] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:28:27.654 [DEBUG] [Thread-25439] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:28:27.654 [INFO] [Thread-25439] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] client lang: <none>
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] server lang: <none>
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] kex follows: False
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] Compression: none
2025-11-13T00:28:27.655 [DEBUG] [Thread-25439] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:28:27.663 [DEBUG] [Thread-25439] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:28:27.664 [DEBUG] [Thread-25439] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:28:27.664 [DEBUG] [Thread-25439] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:28:27.664 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:28:27.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:28:27.665 [DEBUG] [Thread-25439] [transport.py] [_log()] userauth is OK
2025-11-13T00:28:27.666 [DEBUG] [Thread-25439] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:28:27.666 [DEBUG] [Thread-25439] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:28:27.666 [DEBUG] [Thread-25439] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:28:27.666 [DEBUG] [Thread-25439] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:28:27.685 [INFO] [Thread-25439] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:28:27.686 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:28:28.290 [DEBUG] [Thread-25439] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:28:28.290 [DEBUG] [Thread-25439] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:28:28.290 [DEBUG] [Thread-25439] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:28:28.331 [DEBUG] [Thread-25439] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:28:28.331 [DEBUG] [Thread-25439] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:28:28.334 [DEBUG] [Thread-25439] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:28:28.343 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:28:28.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:28:28.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:28:28.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:28:28.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:28:28.354 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:28:28.354 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:28:28.354 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:28:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:28:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.936203 -999.00  +15.40  13.28     62   +8.10 1 2 1 1 1     0    0 7.41 6.26 ZNEsW 12.8 13.3 257.6 15.3 15.8 -22.3 15.8 -21.2 15.4 -20.9 15.8 -21.9
2025-11-13T00:28:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:28:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:28:28.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.936203
2025-11-13T00:28:28.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:28:28.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:28:28.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:28:28.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:28:28.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:28:28.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:28:13', tmtdew=8.3, humidity=57.46, cloud=0.0, wind=13.62, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:28:13', seeing=1.01, atlas_timestamp='2025-11-12T22:28:07.939', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:25:00')
2025-11-13T00:28:28.357 [DEBUG] [Thread-25439] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:28:28.442 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:28:28.460 [DEBUG] [Thread-25442] [transport.py] [_log()] starting thread (client mode): 0x1737c310
2025-11-13T00:28:28.460 [DEBUG] [Thread-25442] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:28:28.475 [DEBUG] [Thread-25442] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:28:28.475 [INFO] [Thread-25442] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:28:28.482 [DEBUG] [Thread-25442] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:28:28.483 [DEBUG] [Thread-25442] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:28:28.483 [DEBUG] [Thread-25442] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:28:28.483 [DEBUG] [Thread-25442] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:28:28.483 [DEBUG] [Thread-25442] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:28:28.483 [DEBUG] [Thread-25442] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:28:28.483 [DEBUG] [Thread-25442] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:28:28.483 [DEBUG] [Thread-25442] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:28:28.483 [DEBUG] [Thread-25442] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:28:28.484 [DEBUG] [Thread-25442] [transport.py] [_log()] client lang: <none>
2025-11-13T00:28:28.484 [DEBUG] [Thread-25442] [transport.py] [_log()] server lang: <none>
2025-11-13T00:28:28.484 [DEBUG] [Thread-25442] [transport.py] [_log()] kex follows: False
2025-11-13T00:28:28.484 [DEBUG] [Thread-25442] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:28:28.484 [DEBUG] [Thread-25442] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:28:28.484 [DEBUG] [Thread-25442] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:28:28.484 [DEBUG] [Thread-25442] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:28:28.484 [DEBUG] [Thread-25442] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:28:28.485 [DEBUG] [Thread-25442] [transport.py] [_log()] Compression: none
2025-11-13T00:28:28.485 [DEBUG] [Thread-25442] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:28:28.541 [DEBUG] [Thread-25442] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:28:28.542 [DEBUG] [Thread-25442] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:28:28.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:28:28.544 [DEBUG] [Thread-25442] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:28:28.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:28:28.600 [DEBUG] [Thread-25442] [transport.py] [_log()] userauth is OK
2025-11-13T00:28:28.600 [DEBUG] [Thread-25442] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:28:28.600 [DEBUG] [Thread-25442] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:28:28.600 [DEBUG] [Thread-25442] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:28:28.600 [DEBUG] [Thread-25442] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:28:28.618 [INFO] [Thread-25442] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:28:28.618 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:28:28.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:28:29.481 [DEBUG] [Thread-25442] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:28:29.481 [DEBUG] [Thread-25442] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:28:29.530 [DEBUG] [Thread-25442] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:28:29.530 [DEBUG] [Thread-25442] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:28:29.539 [DEBUG] [Thread-25442] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:28:29.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:28:29.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')
2025-11-13T00:28:29.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-11-13T00:28:29.567 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:28:29.567 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:28:29.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:28:29.576 [DEBUG] [Thread-25442] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:28:32.608 [DEBUG] [Thread-25444 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:28:47.651 [DEBUG] [Thread-25445 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:28:59.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:28:59.598 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:28:59.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-11-13T00:29:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 28, 45), 8.32, 57.39, 0.0, 14.84, 15.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:29:00.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:28:45
2025-11-13T00:29:00.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:29:00.537 [DEBUG] [Thread-25446] [transport.py] [_log()] starting thread (client mode): 0x1737c820
2025-11-13T00:29:00.537 [DEBUG] [Thread-25446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:29:00.558 [DEBUG] [Thread-25446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:29:00.558 [INFO] [Thread-25446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] client lang: <none>
2025-11-13T00:29:00.561 [DEBUG] [Thread-25446] [transport.py] [_log()] server lang: <none>
2025-11-13T00:29:00.562 [DEBUG] [Thread-25446] [transport.py] [_log()] kex follows: False
2025-11-13T00:29:00.562 [DEBUG] [Thread-25446] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:29:00.562 [DEBUG] [Thread-25446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:29:00.562 [DEBUG] [Thread-25446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:29:00.562 [DEBUG] [Thread-25446] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:29:00.562 [DEBUG] [Thread-25446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:29:00.562 [DEBUG] [Thread-25446] [transport.py] [_log()] Compression: none
2025-11-13T00:29:00.562 [DEBUG] [Thread-25446] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:29:00.578 [DEBUG] [Thread-25446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:29:00.578 [DEBUG] [Thread-25446] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:29:00.579 [DEBUG] [Thread-25446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:29:00.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:29:00.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:29:00.580 [DEBUG] [Thread-25446] [transport.py] [_log()] userauth is OK
2025-11-13T00:29:00.580 [DEBUG] [Thread-25446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:29:00.580 [DEBUG] [Thread-25446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:29:00.581 [DEBUG] [Thread-25446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:29:00.581 [DEBUG] [Thread-25446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:29:00.605 [INFO] [Thread-25446] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:29:00.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:29:01.168 [DEBUG] [Thread-25446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:29:01.168 [DEBUG] [Thread-25446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:29:01.169 [DEBUG] [Thread-25446] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:29:01.209 [DEBUG] [Thread-25446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:29:01.209 [DEBUG] [Thread-25446] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:29:01.212 [DEBUG] [Thread-25446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:29:01.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:29:01.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:29:01.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:29:01.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:29:01.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:29:01.233 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:29:01.233 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:29:01.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:29:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:29:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.936550 -999.00  +15.40  10.80     62   +8.30 1 2 1 1 1     0    0 7.35 1.54 ZNEsW 10.5 10.8 258.8 14.5 15.8 -22.3 15.8 -21.2 15.5 -20.9 15.8 -22.0
2025-11-13T00:29:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:29:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:29:01.234 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.936550
2025-11-13T00:29:01.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:29:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:29:01.236 [DEBUG] [Thread-25446] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:29:01.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:29:01.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:29:01.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:29:01.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:28:45', tmtdew=8.32, humidity=57.39, cloud=0.0, wind=14.84, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:28:45', seeing=1.05, atlas_timestamp='2025-11-12T22:28:37.920', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:25:00')
2025-11-13T00:29:01.332 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:29:01.343 [DEBUG] [Thread-25449] [transport.py] [_log()] starting thread (client mode): 0x1493ee00
2025-11-13T00:29:01.344 [DEBUG] [Thread-25449] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:29:01.359 [DEBUG] [Thread-25449] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:29:01.359 [INFO] [Thread-25449] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] client lang: <none>
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] server lang: <none>
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] kex follows: False
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:29:01.367 [DEBUG] [Thread-25449] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:29:01.368 [DEBUG] [Thread-25449] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:29:01.368 [DEBUG] [Thread-25449] [transport.py] [_log()] Compression: none
2025-11-13T00:29:01.368 [DEBUG] [Thread-25449] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:29:01.423 [DEBUG] [Thread-25449] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:29:01.424 [DEBUG] [Thread-25449] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:29:01.424 [DEBUG] [Thread-25449] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:29:01.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:29:01.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:29:01.479 [DEBUG] [Thread-25449] [transport.py] [_log()] userauth is OK
2025-11-13T00:29:01.480 [DEBUG] [Thread-25449] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:29:01.480 [DEBUG] [Thread-25449] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:29:01.480 [DEBUG] [Thread-25449] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:29:01.480 [DEBUG] [Thread-25449] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:29:01.499 [INFO] [Thread-25449] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:29:01.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:29:01.500 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:29:02.358 [DEBUG] [Thread-25449] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:29:02.358 [DEBUG] [Thread-25449] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:29:02.407 [DEBUG] [Thread-25449] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:29:02.407 [DEBUG] [Thread-25449] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:29:02.416 [DEBUG] [Thread-25449] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:29:02.424 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:29:02.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-11-13T00:29:02.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-11-13T00:29:02.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:29:02.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:29:02.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:29:02.450 [DEBUG] [Thread-25449] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:29:02.680 [DEBUG] [Thread-25451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:06.476 [DEBUG] [Thread-25452 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:07.636 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:16.420 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:17.742 [DEBUG] [Thread-25453 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:20.480 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:26.069 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:26.071 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:32.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:29:32.456 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:29:32.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-11-13T00:29:32.773 [DEBUG] [Thread-25454 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:29:33.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 29, 17), 8.31, 57.41, 0.0, 16.07, 15.38, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:29:33.100 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:29:17
2025-11-13T00:29:33.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:29:33.367 [DEBUG] [Thread-25455] [transport.py] [_log()] starting thread (client mode): 0x11f00220
2025-11-13T00:29:33.368 [DEBUG] [Thread-25455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:29:33.387 [DEBUG] [Thread-25455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:29:33.387 [INFO] [Thread-25455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:29:33.390 [DEBUG] [Thread-25455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:29:33.390 [DEBUG] [Thread-25455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:29:33.390 [DEBUG] [Thread-25455] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:29:33.390 [DEBUG] [Thread-25455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:29:33.390 [DEBUG] [Thread-25455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:29:33.390 [DEBUG] [Thread-25455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:29:33.390 [DEBUG] [Thread-25455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] client lang: <none>
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] server lang: <none>
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] kex follows: False
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] Compression: none
2025-11-13T00:29:33.391 [DEBUG] [Thread-25455] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:29:33.407 [DEBUG] [Thread-25455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:29:33.408 [DEBUG] [Thread-25455] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:29:33.409 [DEBUG] [Thread-25455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:29:33.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:29:33.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:29:33.411 [DEBUG] [Thread-25455] [transport.py] [_log()] userauth is OK
2025-11-13T00:29:33.411 [DEBUG] [Thread-25455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:29:33.411 [DEBUG] [Thread-25455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:29:33.411 [DEBUG] [Thread-25455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:29:33.412 [DEBUG] [Thread-25455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:29:33.430 [INFO] [Thread-25455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:29:33.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:29:34.001 [DEBUG] [Thread-25455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:29:34.002 [DEBUG] [Thread-25455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:29:34.003 [DEBUG] [Thread-25455] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:29:34.043 [DEBUG] [Thread-25455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:29:34.043 [DEBUG] [Thread-25455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:29:34.046 [DEBUG] [Thread-25455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:29:34.058 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:29:34.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:29:34.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:29:34.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:29:34.068 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:29:34.069 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:29:34.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:29:34.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:29:34.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:29:34.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.936550 -999.00  +15.40  10.80     62   +8.30 1 2 1 1 1     0    0 7.35 1.54 ZNEsW 10.5 10.8 258.8 14.5 15.8 -22.3 15.8 -21.2 15.5 -20.9 15.8 -22.0
2025-11-13T00:29:34.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:29:34.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:29:34.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.936550
2025-11-13T00:29:34.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:29:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:29:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:29:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:29:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:29:34.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:29:17', tmtdew=8.31, humidity=57.41, cloud=0.0, wind=16.07, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:29:17', seeing=1.1, atlas_timestamp='2025-11-12T22:28:37.920', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:25:00')
2025-11-13T00:29:34.073 [DEBUG] [Thread-25455] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:29: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-11-13T00:29:34.171 [DEBUG] [Thread-25458] [transport.py] [_log()] starting thread (client mode): 0x1737c820
2025-11-13T00:29:34.171 [DEBUG] [Thread-25458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:29:34.187 [DEBUG] [Thread-25458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:29:34.188 [INFO] [Thread-25458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:29:34.195 [DEBUG] [Thread-25458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:29:34.195 [DEBUG] [Thread-25458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] client lang: <none>
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] server lang: <none>
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] kex follows: False
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:29:34.196 [DEBUG] [Thread-25458] [transport.py] [_log()] Compression: none
2025-11-13T00:29:34.197 [DEBUG] [Thread-25458] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:29:34.255 [DEBUG] [Thread-25458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:29:34.256 [DEBUG] [Thread-25458] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:29:34.256 [DEBUG] [Thread-25458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:29:34.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:29:34.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:29:34.313 [DEBUG] [Thread-25458] [transport.py] [_log()] userauth is OK
2025-11-13T00:29:34.314 [DEBUG] [Thread-25458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:29:34.314 [DEBUG] [Thread-25458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:29:34.314 [DEBUG] [Thread-25458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:29:34.314 [DEBUG] [Thread-25458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:29:34.334 [INFO] [Thread-25458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:29:34.334 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:29:34.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:29:35.167 [DEBUG] [Thread-25458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:29:35.168 [DEBUG] [Thread-25458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:29:35.216 [DEBUG] [Thread-25458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:29:35.216 [DEBUG] [Thread-25458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:29:35.225 [DEBUG] [Thread-25458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:29:35.234 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:29:35.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-11-13T00:29:35.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-11-13T00:29:35.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:29:35.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:29:35.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:29:35.260 [DEBUG] [Thread-25458] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:29:47.807 [DEBUG] [Thread-25460 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:30:02.854 [DEBUG] [Thread-25461 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:30:05.282 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:30:05.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:30:05.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-11-13T00:30:05.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 29, 49), 8.2, 57.94, 0.0, 14.5, 15.4, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:30:05.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:29:49
2025-11-13T00:30:06.056 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:30:06.202 [DEBUG] [Thread-25462] [transport.py] [_log()] starting thread (client mode): 0x19dd8730
2025-11-13T00:30:06.202 [DEBUG] [Thread-25462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:30:06.222 [DEBUG] [Thread-25462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:30:06.223 [INFO] [Thread-25462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:30:06.225 [DEBUG] [Thread-25462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:30:06.225 [DEBUG] [Thread-25462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] client lang: <none>
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] server lang: <none>
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] kex follows: False
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] Compression: none
2025-11-13T00:30:06.226 [DEBUG] [Thread-25462] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:30:06.234 [DEBUG] [Thread-25462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:30:06.235 [DEBUG] [Thread-25462] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:30:06.235 [DEBUG] [Thread-25462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:30:06.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:30:06.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:30:06.237 [DEBUG] [Thread-25462] [transport.py] [_log()] userauth is OK
2025-11-13T00:30:06.237 [DEBUG] [Thread-25462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:30:06.237 [DEBUG] [Thread-25462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:30:06.237 [DEBUG] [Thread-25462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:30:06.237 [DEBUG] [Thread-25462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:30:06.260 [INFO] [Thread-25462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:30:06.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:30:06.545 [DEBUG] [Thread-25464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:30:07.102 [DEBUG] [Thread-25462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:30:07.102 [DEBUG] [Thread-25462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:30:07.103 [DEBUG] [Thread-25462] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:30:07.143 [DEBUG] [Thread-25462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:30:07.144 [DEBUG] [Thread-25462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:30:07.146 [DEBUG] [Thread-25462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:30:07.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:30:07.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:30:07.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:30:07.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:30:07.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:30:07.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:30:07.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:30:07.170 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:30:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:30:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.936898 -999.00  +15.30  11.62     63   +8.40 1 2 1 1 1     0    0 7.04 -4.49 ZNEsW 11.0 11.6 255.4 13.9 15.8 -22.3 15.7 -21.3 15.5 -21.0 15.8 -22.1
2025-11-13T00:30:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:30:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:30:07.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.936898
2025-11-13T00:30:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:30:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:30:07.171 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:30:07.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:30:07.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:30:07.172 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:29:49', tmtdew=8.2, humidity=57.94, cloud=0.0, wind=14.5, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:29:49', seeing=1.1, atlas_timestamp='2025-11-12T22:29:07.987', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:28:00')
2025-11-13T00:30:07.172 [DEBUG] [Thread-25462] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:30:07.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:30:07.267 [DEBUG] [Thread-25466] [transport.py] [_log()] starting thread (client mode): 0x14906d10
2025-11-13T00:30:07.267 [DEBUG] [Thread-25466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:30:07.281 [DEBUG] [Thread-25466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:30:07.281 [INFO] [Thread-25466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:30:07.289 [DEBUG] [Thread-25466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:30:07.289 [DEBUG] [Thread-25466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:30:07.289 [DEBUG] [Thread-25466] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:30:07.289 [DEBUG] [Thread-25466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] client lang: <none>
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] server lang: <none>
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] kex follows: False
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] Compression: none
2025-11-13T00:30:07.290 [DEBUG] [Thread-25466] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:30:07.347 [DEBUG] [Thread-25466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:30:07.347 [DEBUG] [Thread-25466] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:30:07.348 [DEBUG] [Thread-25466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:30:07.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:30:07.349 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:30:07.408 [DEBUG] [Thread-25466] [transport.py] [_log()] userauth is OK
2025-11-13T00:30:07.408 [DEBUG] [Thread-25466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:30:07.408 [DEBUG] [Thread-25466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:30:07.408 [DEBUG] [Thread-25466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:30:07.408 [DEBUG] [Thread-25466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:30:07.427 [INFO] [Thread-25466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:30:07.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:30:07.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:30:08.280 [DEBUG] [Thread-25466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:30:08.281 [DEBUG] [Thread-25466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:30:08.330 [DEBUG] [Thread-25466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:30:08.330 [DEBUG] [Thread-25466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:30:08.339 [DEBUG] [Thread-25466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:30:08.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:30:08.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-11-13T00:30:08.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-11-13T00:30:08.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:30:08.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:30:08.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:30:08.375 [DEBUG] [Thread-25466] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:30:17.885 [DEBUG] [Thread-25468 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:30:26.275 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:30:26.277 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:30:32.939 [DEBUG] [Thread-25469 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:30:38.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:30:38.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:30: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-11-13T00:30:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 30, 21), 8.21, 57.91, 0.0, 14.22, 15.4, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:30:39.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:30:21
2025-11-13T00:30:39.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:30:39.334 [DEBUG] [Thread-25470] [transport.py] [_log()] starting thread (client mode): 0x17347c10
2025-11-13T00:30:39.334 [DEBUG] [Thread-25470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:30:39.352 [DEBUG] [Thread-25470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:30:39.352 [INFO] [Thread-25470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:30:39.355 [DEBUG] [Thread-25470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:30:39.355 [DEBUG] [Thread-25470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:30:39.355 [DEBUG] [Thread-25470] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:30:39.355 [DEBUG] [Thread-25470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:30:39.355 [DEBUG] [Thread-25470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] client lang: <none>
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] server lang: <none>
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] kex follows: False
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] Compression: none
2025-11-13T00:30:39.356 [DEBUG] [Thread-25470] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:30:39.370 [DEBUG] [Thread-25470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:30:39.370 [DEBUG] [Thread-25470] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:30:39.370 [DEBUG] [Thread-25470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:30:39.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:30:39.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:30:39.371 [DEBUG] [Thread-25470] [transport.py] [_log()] userauth is OK
2025-11-13T00:30:39.371 [DEBUG] [Thread-25470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:30:39.371 [DEBUG] [Thread-25470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:30:39.371 [DEBUG] [Thread-25470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:30:39.371 [DEBUG] [Thread-25470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:30:39.387 [INFO] [Thread-25470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:30:39.387 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:30:40.009 [DEBUG] [Thread-25470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:30:40.009 [DEBUG] [Thread-25470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:30:40.009 [DEBUG] [Thread-25470] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:30:40.050 [DEBUG] [Thread-25470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:30:40.050 [DEBUG] [Thread-25470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:30:40.053 [DEBUG] [Thread-25470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:30:40.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:30:40.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:30:40.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:30:40.066 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:30:40.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:30:40.070 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:30:40.070 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:30:40.070 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:30:40.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:30:40.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.937592 -999.00  +15.30   8.34     63   +8.50 1 2 1 1 1     0    0 6.70 -19.80 ZNEsW 11.7 8.3 262.4 11.8 15.8 -22.6 15.7 -21.4 15.4 -21.1 15.7 -22.2
2025-11-13T00:30:40.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:30:40.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:30:40.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.937592
2025-11-13T00:30:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:30:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:30:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:30:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:30:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:30:40.071 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:30:21', tmtdew=8.21, humidity=57.91, cloud=0.0, wind=14.22, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:30:21', seeing=1.04, atlas_timestamp='2025-11-12T22:30:07.949', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:28:00')
2025-11-13T00:30:40.071 [DEBUG] [Thread-25470] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:30:40.151 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:30:40.165 [DEBUG] [Thread-25473] [transport.py] [_log()] starting thread (client mode): 0x11f02f50
2025-11-13T00:30:40.165 [DEBUG] [Thread-25473] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:30:40.180 [DEBUG] [Thread-25473] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:30:40.180 [INFO] [Thread-25473] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] client lang: <none>
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] server lang: <none>
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] kex follows: False
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] Compression: none
2025-11-13T00:30:40.188 [DEBUG] [Thread-25473] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:30:40.247 [DEBUG] [Thread-25473] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:30:40.247 [DEBUG] [Thread-25473] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:30:40.247 [DEBUG] [Thread-25473] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:30:40.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:30:40.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:30:40.303 [DEBUG] [Thread-25473] [transport.py] [_log()] userauth is OK
2025-11-13T00:30:40.303 [DEBUG] [Thread-25473] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:30:40.303 [DEBUG] [Thread-25473] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:30:40.303 [DEBUG] [Thread-25473] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:30:40.304 [DEBUG] [Thread-25473] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:30:40.321 [INFO] [Thread-25473] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:30:40.321 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:30:40.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:30:41.121 [DEBUG] [Thread-25473] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:30:41.121 [DEBUG] [Thread-25473] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:30:41.169 [DEBUG] [Thread-25473] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:30:41.169 [DEBUG] [Thread-25473] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:30:41.178 [DEBUG] [Thread-25473] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:30:41.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:30:41.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-11-13T00:30:41.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-11-13T00:30:41.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:30:41.202 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:30:41.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:30:41.210 [DEBUG] [Thread-25473] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:30:42.959 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:30:47.972 [DEBUG] [Thread-25475 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:31:03.025 [DEBUG] [Thread-25476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:31:06.602 [DEBUG] [Thread-25477 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:31:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:31:11.233 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:31:11.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-11-13T00:31:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 30, 53), 8.16, 58.21, 0.0, 13.64, 15.33, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:31:11.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:30:53
2025-11-13T00:31:12.015 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:31:12.163 [DEBUG] [Thread-25478] [transport.py] [_log()] starting thread (client mode): 0x19dd9000
2025-11-13T00:31:12.163 [DEBUG] [Thread-25478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:31:12.179 [DEBUG] [Thread-25478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:31:12.179 [INFO] [Thread-25478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:31:12.182 [DEBUG] [Thread-25478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:31:12.182 [DEBUG] [Thread-25478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:31:12.182 [DEBUG] [Thread-25478] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:31:12.182 [DEBUG] [Thread-25478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] client lang: <none>
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] server lang: <none>
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] kex follows: False
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] Compression: none
2025-11-13T00:31:12.183 [DEBUG] [Thread-25478] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:31:12.200 [DEBUG] [Thread-25478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:31:12.200 [DEBUG] [Thread-25478] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:31:12.201 [DEBUG] [Thread-25478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:31:12.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:31:12.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:31:12.202 [DEBUG] [Thread-25478] [transport.py] [_log()] userauth is OK
2025-11-13T00:31:12.203 [DEBUG] [Thread-25478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:31:12.203 [DEBUG] [Thread-25478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:31:12.203 [DEBUG] [Thread-25478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:31:12.203 [DEBUG] [Thread-25478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:31:12.223 [INFO] [Thread-25478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:31:12.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:31:12.901 [DEBUG] [Thread-25478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:31:12.901 [DEBUG] [Thread-25478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:31:12.901 [DEBUG] [Thread-25478] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:31:12.942 [DEBUG] [Thread-25478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:31:12.942 [DEBUG] [Thread-25478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:31:12.945 [DEBUG] [Thread-25478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:31:12.958 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:31:12.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:31:12.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:31:12.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:31:12.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:31:12.969 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:31:12.969 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:31:12.969 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:31:12.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:31:12.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.937939 -999.00  +15.20   8.96     64   +8.50 1 2 1 1 1     0    0 6.33 -27.76 ZNEsW 9.6 9.0 263.0 13.0 15.8 -22.6 15.7 -21.4 15.4 -21.2 15.7 -22.4
2025-11-13T00:31:12.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:31:12.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:31:12.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.937939
2025-11-13T00:31:12.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:31:12.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:31:12.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:31:12.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:31:12.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:31:12.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:30:53', tmtdew=8.16, humidity=58.21, cloud=0.0, wind=13.64, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:30:54', seeing=1.14, atlas_timestamp='2025-11-12T22:30:37.930', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:28:00')
2025-11-13T00:31:12.972 [DEBUG] [Thread-25478] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:31:13.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:31:13.067 [DEBUG] [Thread-25481] [transport.py] [_log()] starting thread (client mode): 0x149208b0
2025-11-13T00:31:13.067 [DEBUG] [Thread-25481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:31:13.082 [DEBUG] [Thread-25481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:31:13.082 [INFO] [Thread-25481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:31:13.089 [DEBUG] [Thread-25481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:31:13.089 [DEBUG] [Thread-25481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:31:13.089 [DEBUG] [Thread-25481] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] client lang: <none>
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] server lang: <none>
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] kex follows: False
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:31:13.090 [DEBUG] [Thread-25481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:31:13.091 [DEBUG] [Thread-25481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:31:13.091 [DEBUG] [Thread-25481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:31:13.091 [DEBUG] [Thread-25481] [transport.py] [_log()] Compression: none
2025-11-13T00:31:13.091 [DEBUG] [Thread-25481] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:31:13.149 [DEBUG] [Thread-25481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:31:13.149 [DEBUG] [Thread-25481] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:31:13.150 [DEBUG] [Thread-25481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:31:13.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:31:13.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:31:13.204 [DEBUG] [Thread-25481] [transport.py] [_log()] userauth is OK
2025-11-13T00:31:13.205 [DEBUG] [Thread-25481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:31:13.205 [DEBUG] [Thread-25481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:31:13.205 [DEBUG] [Thread-25481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:31:13.205 [DEBUG] [Thread-25481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:31:13.225 [INFO] [Thread-25481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:31:13.226 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:31:13.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:31:14.074 [DEBUG] [Thread-25481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:31:14.074 [DEBUG] [Thread-25481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:31:14.122 [DEBUG] [Thread-25481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:31:14.122 [DEBUG] [Thread-25481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:31:14.131 [DEBUG] [Thread-25481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:31:14.140 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:31:14.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-11-13T00:31:14.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-11-13T00:31:14.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:31:14.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:31:14.160 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:31:14.168 [DEBUG] [Thread-25481] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:31:18.058 [DEBUG] [Thread-25483 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:31:26.479 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:31:26.479 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:31:33.096 [DEBUG] [Thread-25484 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:31:44.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:31:44.176 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:31:44.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-11-13T00:31:44.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 31, 25), 8.11, 58.42, 0.0, 14.12, 15.38, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:31:44.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:31:25
2025-11-13T00:31:44.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:31:45.096 [DEBUG] [Thread-25485] [transport.py] [_log()] starting thread (client mode): 0x149222c0
2025-11-13T00:31:45.097 [DEBUG] [Thread-25485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:31:45.116 [DEBUG] [Thread-25485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:31:45.116 [INFO] [Thread-25485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] client lang: <none>
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] server lang: <none>
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] kex follows: False
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] Compression: none
2025-11-13T00:31:45.120 [DEBUG] [Thread-25485] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:31:45.138 [DEBUG] [Thread-25485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:31:45.138 [DEBUG] [Thread-25485] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:31:45.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:31:45.139 [DEBUG] [Thread-25485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:31:45.140 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:31:45.141 [DEBUG] [Thread-25485] [transport.py] [_log()] userauth is OK
2025-11-13T00:31:45.142 [DEBUG] [Thread-25485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:31:45.142 [DEBUG] [Thread-25485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:31:45.142 [DEBUG] [Thread-25485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:31:45.142 [DEBUG] [Thread-25485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:31:45.167 [INFO] [Thread-25485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:31:45.168 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:31:45.822 [DEBUG] [Thread-25485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:31:45.822 [DEBUG] [Thread-25485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:31:45.822 [DEBUG] [Thread-25485] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:31:45.863 [DEBUG] [Thread-25485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:31:45.863 [DEBUG] [Thread-25485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:31:45.867 [DEBUG] [Thread-25485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:31:45.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:31:45.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:31:45.880 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:31:45.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:31:45.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:31:45.889 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:31:45.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:31:45.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:31:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:31:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.938287 -999.00  +15.20  11.04     64   +8.50 1 2 1 1 1     0    0 6.11 -34.23 ZNEsW 10.1 11.0 264.8 12.6 15.8 -22.6 15.7 -21.5 15.4 -21.2 15.7 -22.3
2025-11-13T00:31:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:31:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:31:45.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.938287
2025-11-13T00:31:45.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:31:45.891 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:31:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:31:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:31:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:31:45.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:31:25', tmtdew=8.11, humidity=58.42, cloud=0.0, wind=14.12, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:31:25', seeing=1.13, atlas_timestamp='2025-11-12T22:31:07.997', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:28:00')
2025-11-13T00:31:45.892 [DEBUG] [Thread-25485] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:31:45.976 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:31:45.987 [DEBUG] [Thread-25488] [transport.py] [_log()] starting thread (client mode): 0x14922380
2025-11-13T00:31:45.987 [DEBUG] [Thread-25488] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:31:46.002 [DEBUG] [Thread-25488] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:31:46.002 [INFO] [Thread-25488] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:31:46.009 [DEBUG] [Thread-25488] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:31:46.009 [DEBUG] [Thread-25488] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:31:46.009 [DEBUG] [Thread-25488] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:31:46.009 [DEBUG] [Thread-25488] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:31:46.009 [DEBUG] [Thread-25488] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:31:46.009 [DEBUG] [Thread-25488] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] client lang: <none>
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] server lang: <none>
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] kex follows: False
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] Compression: none
2025-11-13T00:31:46.010 [DEBUG] [Thread-25488] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:31:46.068 [DEBUG] [Thread-25488] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:31:46.069 [DEBUG] [Thread-25488] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:31:46.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:31:46.070 [DEBUG] [Thread-25488] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:31:46.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:31:46.124 [DEBUG] [Thread-25488] [transport.py] [_log()] userauth is OK
2025-11-13T00:31:46.124 [DEBUG] [Thread-25488] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:31:46.125 [DEBUG] [Thread-25488] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:31:46.125 [DEBUG] [Thread-25488] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:31:46.125 [DEBUG] [Thread-25488] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:31:46.143 [INFO] [Thread-25488] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:31:46.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:31:46.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:31:47.005 [DEBUG] [Thread-25488] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:31:47.006 [DEBUG] [Thread-25488] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:31:47.054 [DEBUG] [Thread-25488] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:31:47.054 [DEBUG] [Thread-25488] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:31:47.063 [DEBUG] [Thread-25488] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:31:47.071 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:31:47.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-11-13T00:31:47.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-11-13T00:31:47.089 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:31:47.090 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:31:47.090 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:31:47.098 [DEBUG] [Thread-25488] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:31:48.132 [DEBUG] [Thread-25490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:03.194 [DEBUG] [Thread-25491 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:06.666 [DEBUG] [Thread-25492 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:17.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:32:17.092 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:32:17.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-11-13T00:32:17.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 31, 57), 8.03, 58.54, 0.0, 13.76, 15.4, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:32:17.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:31:57
2025-11-13T00:32:17.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:32:18.014 [DEBUG] [Thread-25493] [transport.py] [_log()] starting thread (client mode): 0x14923220
2025-11-13T00:32:18.014 [DEBUG] [Thread-25493] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:32:18.035 [DEBUG] [Thread-25493] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:32:18.035 [INFO] [Thread-25493] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] client lang: <none>
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] server lang: <none>
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] kex follows: False
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] Compression: none
2025-11-13T00:32:18.038 [DEBUG] [Thread-25493] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:32:18.056 [DEBUG] [Thread-25493] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:32:18.057 [DEBUG] [Thread-25493] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:32:18.057 [DEBUG] [Thread-25493] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:32:18.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:32:18.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:32:18.060 [DEBUG] [Thread-25493] [transport.py] [_log()] userauth is OK
2025-11-13T00:32:18.060 [DEBUG] [Thread-25493] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:32:18.060 [DEBUG] [Thread-25493] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:32:18.060 [DEBUG] [Thread-25493] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:32:18.061 [DEBUG] [Thread-25493] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:32:18.094 [INFO] [Thread-25493] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:32:18.105 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:32:18.233 [DEBUG] [Thread-25495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:18.726 [DEBUG] [Thread-25493] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:32:18.726 [DEBUG] [Thread-25493] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:32:18.727 [DEBUG] [Thread-25493] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:32:18.767 [DEBUG] [Thread-25493] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:32:18.767 [DEBUG] [Thread-25493] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:32:18.770 [DEBUG] [Thread-25493] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:32:18.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:32:18.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:32:18.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:32:18.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:32:18.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:32:18.795 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:32:18.795 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:32:18.795 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:32:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:32:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.938634 -999.00  +15.10  10.39     64   +8.50 1 2 1 1 1     0    0 5.77 -44.20 ZNEsW 8.8 10.4 268.8 12.1 15.8 -22.6 15.7 -21.5 15.4 -21.2 15.6 -22.2
2025-11-13T00:32:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:32:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:32:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.938634
2025-11-13T00:32:18.796 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:32:18.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:32:18.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:32:18.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:32:18.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:32:18.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:31:57', tmtdew=8.03, humidity=58.54, cloud=0.0, wind=13.76, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:31:57', seeing=1.13, atlas_timestamp='2025-11-12T22:31:37.978', atlas_cloud=2, atlas_rain=1, zp_data=[0.3332499999999996, 0.2372500000000013, 0.45475000000000065, 0.5264999999999995, 0.5274999999999999, 0.2862500000000008, 0.2759999999999998, 0.23525000000000063, 0.23000000000000043, 0.2789999999999999, 0.457749999999999, 0.40000000000000036, 0.5279999999999996, 0.2867499999999996, 0.21449999999999925, 0.12199999999999989, 0.16174999999999962, 0.37650000000000006, 0.6119999999999992, 0.7932499999999987, 0.4709999999999983, 0.23224999999999874, 0.18725000000000058, 0.08874999999999922, 0.17300000000000004, 0.4815000000000005, 0.5147499999999994, 0.6074999999999999, 0.5880000000000001, 0.10200000000000031, 0.3290000000000006, 0.2320000000000011, 0.3822499999999991], zp_timestamp='2025-11-12T22:28:00')
2025-11-13T00:32:18.798 [DEBUG] [Thread-25493] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:32:18.881 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:32:18.894 [DEBUG] [Thread-25497] [transport.py] [_log()] starting thread (client mode): 0x149891e0
2025-11-13T00:32:18.894 [DEBUG] [Thread-25497] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:32:18.908 [DEBUG] [Thread-25497] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:32:18.909 [INFO] [Thread-25497] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:32:18.916 [DEBUG] [Thread-25497] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:32:18.916 [DEBUG] [Thread-25497] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:32:18.916 [DEBUG] [Thread-25497] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:32:18.916 [DEBUG] [Thread-25497] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:32:18.916 [DEBUG] [Thread-25497] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:32:18.916 [DEBUG] [Thread-25497] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] client lang: <none>
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] server lang: <none>
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] kex follows: False
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] Compression: none
2025-11-13T00:32:18.917 [DEBUG] [Thread-25497] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:32:18.976 [DEBUG] [Thread-25497] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:32:18.976 [DEBUG] [Thread-25497] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:32:18.977 [DEBUG] [Thread-25497] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:32:18.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:32:18.978 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:32:19.034 [DEBUG] [Thread-25497] [transport.py] [_log()] userauth is OK
2025-11-13T00:32:19.034 [DEBUG] [Thread-25497] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:32:19.034 [DEBUG] [Thread-25497] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:32:19.034 [DEBUG] [Thread-25497] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:32:19.034 [DEBUG] [Thread-25497] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:32:19.053 [INFO] [Thread-25497] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:32:19.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:32:19.054 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:32:19.898 [DEBUG] [Thread-25497] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:32:19.899 [DEBUG] [Thread-25497] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:32:19.946 [DEBUG] [Thread-25497] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:32:19.946 [DEBUG] [Thread-25497] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:32:19.954 [DEBUG] [Thread-25497] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:32:19.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:32:19.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-11-13T00:32:19.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-11-13T00:32:19.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:32:19.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:32:19.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:32:19.985 [DEBUG] [Thread-25497] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:32:22.613 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:25.810 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:26.682 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:26.683 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:30.879 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:33.270 [DEBUG] [Thread-25499 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:37.255 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:48.320 [DEBUG] [Thread-25500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:32:49.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:32:49.980 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:32:49.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-11-13T00:32:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 32, 29), 7.94, 58.89, 0.0, 14.91, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:32:50.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:32:29
2025-11-13T00:32:50.749 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:32:50.894 [DEBUG] [Thread-25501] [transport.py] [_log()] starting thread (client mode): 0x1498a9e0
2025-11-13T00:32:50.894 [DEBUG] [Thread-25501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:32:50.907 [DEBUG] [Thread-25501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:32:50.908 [INFO] [Thread-25501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] client lang: <none>
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] server lang: <none>
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] kex follows: False
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:32:50.910 [DEBUG] [Thread-25501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:32:50.911 [DEBUG] [Thread-25501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:32:50.911 [DEBUG] [Thread-25501] [transport.py] [_log()] Compression: none
2025-11-13T00:32:50.911 [DEBUG] [Thread-25501] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:32:50.926 [DEBUG] [Thread-25501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:32:50.927 [DEBUG] [Thread-25501] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:32:50.927 [DEBUG] [Thread-25501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:32:50.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:32:50.928 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:32:50.929 [DEBUG] [Thread-25501] [transport.py] [_log()] userauth is OK
2025-11-13T00:32:50.929 [DEBUG] [Thread-25501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:32:50.929 [DEBUG] [Thread-25501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:32:50.929 [DEBUG] [Thread-25501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:32:50.929 [DEBUG] [Thread-25501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:32:50.947 [INFO] [Thread-25501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:32:50.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:32:51.523 [DEBUG] [Thread-25501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:32:51.523 [DEBUG] [Thread-25501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:32:51.524 [DEBUG] [Thread-25501] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:32:51.564 [DEBUG] [Thread-25501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:32:51.564 [DEBUG] [Thread-25501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:32:51.567 [DEBUG] [Thread-25501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:32:51.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:32:51.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:32:51.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:32:51.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:32:51.589 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:32:51.591 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:32:51.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:32:51.591 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:32:51.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:32:51.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.938981 -999.00  +15.10   9.12     65   +8.60 1 2 1 1 1     0    0 5.57 -52.62 ZNEsW 8.2 9.1 257.6 11.2 15.8 -22.7 15.7 -21.6 15.4 -21.3 15.7 -22.3
2025-11-13T00:32:51.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:32:51.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:32:51.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.938981
2025-11-13T00:32:51.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:32:51.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:32:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:32:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:32:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:32:51.594 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:32:29', tmtdew=7.94, humidity=58.89, cloud=0.0, wind=14.91, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:32:30', seeing=1.14, atlas_timestamp='2025-11-12T22:32:07.958', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.33174999999999955, 0.489749999999999, 0.4814999999999987, 0.39750000000000085, 0.2292500000000004, 0.17349999999999888, 0.1642500000000009, 0.25549999999999784, 0.26900000000000013, 0.49125000000000085, 0.37899999999999956, 0.4109999999999996, 0.18024999999999913, 0.0649999999999995, 0.1869999999999994, 0.15374999999999872, 0.3565000000000005, 0.6389999999999993, 0.739749999999999, 0.3404999999999987, 0.1582499999999989, 0.07275000000000098, 0.1437500000000007, 0.10299999999999976, 0.43599999999999994, 0.6717500000000003, 0.5285000000000002, 0.45650000000000013, 0.1460000000000008, 0.2555000000000014, 0.1590000000000007, 0.41274999999999906], zp_timestamp='2025-11-12T22:31:00')
2025-11-13T00:32:51.594 [DEBUG] [Thread-25501] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:32:51.677 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:32:51.692 [DEBUG] [Thread-25504] [transport.py] [_log()] starting thread (client mode): 0x1498a350
2025-11-13T00:32:51.692 [DEBUG] [Thread-25504] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:32:51.712 [DEBUG] [Thread-25504] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:32:51.713 [INFO] [Thread-25504] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:32:51.722 [DEBUG] [Thread-25504] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] client lang: <none>
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] server lang: <none>
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] kex follows: False
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:32:51.723 [DEBUG] [Thread-25504] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:32:51.724 [DEBUG] [Thread-25504] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:32:51.724 [DEBUG] [Thread-25504] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:32:51.724 [DEBUG] [Thread-25504] [transport.py] [_log()] Compression: none
2025-11-13T00:32:51.724 [DEBUG] [Thread-25504] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:32:51.788 [DEBUG] [Thread-25504] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:32:51.789 [DEBUG] [Thread-25504] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:32:51.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:32:51.790 [DEBUG] [Thread-25504] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:32:51.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:32:51.851 [DEBUG] [Thread-25504] [transport.py] [_log()] userauth is OK
2025-11-13T00:32:51.852 [DEBUG] [Thread-25504] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:32:51.852 [DEBUG] [Thread-25504] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:32:51.852 [DEBUG] [Thread-25504] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:32:51.852 [DEBUG] [Thread-25504] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:32:51.873 [INFO] [Thread-25504] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:32:51.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:32:51.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:32:52.713 [DEBUG] [Thread-25504] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:32:52.713 [DEBUG] [Thread-25504] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:32:52.761 [DEBUG] [Thread-25504] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:32:52.762 [DEBUG] [Thread-25504] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:32:52.771 [DEBUG] [Thread-25504] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:32:52.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:32: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-11-13T00:32:52.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-11-13T00:32:52.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:32:52.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:32:52.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:32:52.808 [DEBUG] [Thread-25504] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:32:55.639 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:00.032 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:03.353 [DEBUG] [Thread-25506 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:06.722 [DEBUG] [Thread-25507 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:09.377 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:13.812 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:18.401 [DEBUG] [Thread-25508 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:20.467 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:22.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:33:22.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:33:22.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-11-13T00:33:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 33, 1), 7.94, 58.87, 0.0, 14.08, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:33:23.488 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:33:01
2025-11-13T00:33:23.611 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:33:23.757 [DEBUG] [Thread-25509] [transport.py] [_log()] starting thread (client mode): 0x14921720
2025-11-13T00:33:23.757 [DEBUG] [Thread-25509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:33:23.777 [DEBUG] [Thread-25509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:33:23.778 [INFO] [Thread-25509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] client lang: <none>
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] server lang: <none>
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] kex follows: False
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:33:23.781 [DEBUG] [Thread-25509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:33:23.782 [DEBUG] [Thread-25509] [transport.py] [_log()] Compression: none
2025-11-13T00:33:23.782 [DEBUG] [Thread-25509] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:33:23.799 [DEBUG] [Thread-25509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:33:23.800 [DEBUG] [Thread-25509] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:33:23.800 [DEBUG] [Thread-25509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:33:23.800 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:33:23.801 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:33:23.802 [DEBUG] [Thread-25509] [transport.py] [_log()] userauth is OK
2025-11-13T00:33:23.802 [DEBUG] [Thread-25509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:33:23.802 [DEBUG] [Thread-25509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:33:23.803 [DEBUG] [Thread-25509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:33:23.803 [DEBUG] [Thread-25509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:33:23.830 [INFO] [Thread-25509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:33:23.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:33:24.459 [DEBUG] [Thread-25509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:33:24.459 [DEBUG] [Thread-25509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:33:24.460 [DEBUG] [Thread-25509] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:33:24.500 [DEBUG] [Thread-25509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:33:24.501 [DEBUG] [Thread-25509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:33:24.503 [DEBUG] [Thread-25509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:33:24.516 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:33:24.516 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:33:24.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:33:24.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:33:24.527 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:33:24.529 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:33:24.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:33:24.529 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:33:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:33:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.939328 -999.00  +15.10   8.80     65   +8.60 1 2 1 1 1     0    0 5.26 -59.41 ZNEsW 6.5 8.8 272.2 10.3 15.8 -22.8 15.7 -21.5 15.4 -21.2 15.7 -22.2
2025-11-13T00:33:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:33:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:33:24.530 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.939328
2025-11-13T00:33:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:33:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:33:24.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:33:24.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:33:24.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:33:24.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:33:01', tmtdew=7.94, humidity=58.87, cloud=0.0, wind=14.08, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:33:01', seeing=1.14, atlas_timestamp='2025-11-12T22:32:37.939', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.33174999999999955, 0.489749999999999, 0.4814999999999987, 0.39750000000000085, 0.2292500000000004, 0.17349999999999888, 0.1642500000000009, 0.25549999999999784, 0.26900000000000013, 0.49125000000000085, 0.37899999999999956, 0.4109999999999996, 0.18024999999999913, 0.0649999999999995, 0.1869999999999994, 0.15374999999999872, 0.3565000000000005, 0.6389999999999993, 0.739749999999999, 0.3404999999999987, 0.1582499999999989, 0.07275000000000098, 0.1437500000000007, 0.10299999999999976, 0.43599999999999994, 0.6717500000000003, 0.5285000000000002, 0.45650000000000013, 0.1460000000000008, 0.2555000000000014, 0.1590000000000007, 0.41274999999999906], zp_timestamp='2025-11-12T22:31:00')
2025-11-13T00:33:24.532 [DEBUG] [Thread-25509] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:33:24.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:33:24.629 [DEBUG] [Thread-25512] [transport.py] [_log()] starting thread (client mode): 0x149224d0
2025-11-13T00:33:24.630 [DEBUG] [Thread-25512] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:33:24.644 [DEBUG] [Thread-25512] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:33:24.645 [INFO] [Thread-25512] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:33:24.652 [DEBUG] [Thread-25512] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:33:24.652 [DEBUG] [Thread-25512] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:33:24.652 [DEBUG] [Thread-25512] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:33:24.652 [DEBUG] [Thread-25512] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] client lang: <none>
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] server lang: <none>
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] kex follows: False
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] Compression: none
2025-11-13T00:33:24.653 [DEBUG] [Thread-25512] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:33:24.716 [DEBUG] [Thread-25512] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:33:24.717 [DEBUG] [Thread-25512] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:33:24.718 [DEBUG] [Thread-25512] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:33:24.718 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:33:24.719 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:33:24.772 [DEBUG] [Thread-25512] [transport.py] [_log()] userauth is OK
2025-11-13T00:33:24.772 [DEBUG] [Thread-25512] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:33:24.772 [DEBUG] [Thread-25512] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:33:24.772 [DEBUG] [Thread-25512] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:33:24.773 [DEBUG] [Thread-25512] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:33:24.791 [INFO] [Thread-25512] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:33:24.792 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:33:24.792 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:33:24.840 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:25.636 [DEBUG] [Thread-25512] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:33:25.637 [DEBUG] [Thread-25512] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:33:25.685 [DEBUG] [Thread-25512] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:33:25.685 [DEBUG] [Thread-25512] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:33:25.694 [DEBUG] [Thread-25512] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:33:25.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:33:25.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:33:25.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-11-13T00:33:25.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:33:25.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:33:25.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:33:25.731 [DEBUG] [Thread-25512] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:33:26.885 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:26.887 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:33.438 [DEBUG] [Thread-25514 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:48.497 [DEBUG] [Thread-25515 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:33:55.752 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:33:55.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:33:55.754 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:33:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 33, 33), 8.38, 57.38, 0.0, 19.23, 15.73, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:33:56.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:33:33
2025-11-13T00:33:56.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:33:56.666 [DEBUG] [Thread-25516] [transport.py] [_log()] starting thread (client mode): 0x14989180
2025-11-13T00:33:56.667 [DEBUG] [Thread-25516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:33:56.687 [DEBUG] [Thread-25516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:33:56.687 [INFO] [Thread-25516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:33:56.690 [DEBUG] [Thread-25516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:33:56.690 [DEBUG] [Thread-25516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:33:56.690 [DEBUG] [Thread-25516] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:33:56.690 [DEBUG] [Thread-25516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:33:56.690 [DEBUG] [Thread-25516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:33:56.690 [DEBUG] [Thread-25516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:33:56.690 [DEBUG] [Thread-25516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] client lang: <none>
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] server lang: <none>
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] kex follows: False
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] Compression: none
2025-11-13T00:33:56.691 [DEBUG] [Thread-25516] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:33:56.706 [DEBUG] [Thread-25516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:33:56.706 [DEBUG] [Thread-25516] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:33:56.706 [DEBUG] [Thread-25516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:33:56.706 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:33:56.707 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:33:56.707 [DEBUG] [Thread-25516] [transport.py] [_log()] userauth is OK
2025-11-13T00:33:56.707 [DEBUG] [Thread-25516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:33:56.707 [DEBUG] [Thread-25516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:33:56.707 [DEBUG] [Thread-25516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:33:56.707 [DEBUG] [Thread-25516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:33:56.722 [INFO] [Thread-25516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:33:56.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:33:57.434 [DEBUG] [Thread-25516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:33:57.434 [DEBUG] [Thread-25516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:33:57.434 [DEBUG] [Thread-25516] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:33:57.475 [DEBUG] [Thread-25516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:33:57.475 [DEBUG] [Thread-25516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:33:57.480 [DEBUG] [Thread-25516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:33:57.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:33:57.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:33:57.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:33:57.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:33:57.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:33:57.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:33:57.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:33:57.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:33:57.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:33:57.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.940023 -999.00  +15.10   9.76     65   +8.70 1 2 1 1 1     0    0 5.04 -67.70 ZNEsW 9.7 9.8 255.0 11.2 15.8 -22.7 15.7 -21.5 15.3 -21.3 15.6 -22.3
2025-11-13T00:33:57.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:33:57.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:33:57.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.940023
2025-11-13T00:33:57.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:33:57.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:33:57.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:33:57.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:33:57.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:33:57.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:33:33', tmtdew=8.38, humidity=57.38, cloud=0.0, wind=19.23, temperature=15.73, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:33:34', seeing=1.22, atlas_timestamp='2025-11-12T22:33:37.987', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.33174999999999955, 0.489749999999999, 0.4814999999999987, 0.39750000000000085, 0.2292500000000004, 0.17349999999999888, 0.1642500000000009, 0.25549999999999784, 0.26900000000000013, 0.49125000000000085, 0.37899999999999956, 0.4109999999999996, 0.18024999999999913, 0.0649999999999995, 0.1869999999999994, 0.15374999999999872, 0.3565000000000005, 0.6389999999999993, 0.739749999999999, 0.3404999999999987, 0.1582499999999989, 0.07275000000000098, 0.1437500000000007, 0.10299999999999976, 0.43599999999999994, 0.6717500000000003, 0.5285000000000002, 0.45650000000000013, 0.1460000000000008, 0.2555000000000014, 0.1590000000000007, 0.41274999999999906], zp_timestamp='2025-11-12T22:31:00')
2025-11-13T00:33:57.497 [DEBUG] [Thread-25516] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:33:57.580 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:33:57.594 [DEBUG] [Thread-25519] [transport.py] [_log()] starting thread (client mode): 0x1498ace0
2025-11-13T00:33:57.594 [DEBUG] [Thread-25519] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:33:57.609 [DEBUG] [Thread-25519] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:33:57.610 [INFO] [Thread-25519] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:33:57.617 [DEBUG] [Thread-25519] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:33:57.617 [DEBUG] [Thread-25519] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:33:57.617 [DEBUG] [Thread-25519] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:33:57.617 [DEBUG] [Thread-25519] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] client lang: <none>
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] server lang: <none>
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] kex follows: False
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] Compression: none
2025-11-13T00:33:57.618 [DEBUG] [Thread-25519] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:33:57.676 [DEBUG] [Thread-25519] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:33:57.676 [DEBUG] [Thread-25519] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:33:57.677 [DEBUG] [Thread-25519] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:33:57.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:33:57.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:33:57.732 [DEBUG] [Thread-25519] [transport.py] [_log()] userauth is OK
2025-11-13T00:33:57.733 [DEBUG] [Thread-25519] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:33:57.733 [DEBUG] [Thread-25519] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:33:57.733 [DEBUG] [Thread-25519] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:33:57.733 [DEBUG] [Thread-25519] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:33:57.753 [INFO] [Thread-25519] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:33:57.753 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:33:57.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:33:58.582 [DEBUG] [Thread-25519] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:33:58.582 [DEBUG] [Thread-25519] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:33:58.629 [DEBUG] [Thread-25519] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:33:58.630 [DEBUG] [Thread-25519] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:33:58.639 [DEBUG] [Thread-25519] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:33:58.648 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:33:58.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-11-13T00:33:58.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-11-13T00:33:58.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:33:58.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:33:58.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:33:58.676 [DEBUG] [Thread-25519] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:34:03.528 [DEBUG] [Thread-25521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:34:06.776 [DEBUG] [Thread-25522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:34:18.584 [DEBUG] [Thread-25523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:34:27.097 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:34:27.098 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:34:28.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:34:28.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:34:28.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-11-13T00:34:29.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 34, 5), 7.93, 59.02, 0.0, 14.54, 15.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:34:29.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:34:05
2025-11-13T00:34:29.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:34:29.664 [DEBUG] [Thread-25524] [transport.py] [_log()] starting thread (client mode): 0x14989c00
2025-11-13T00:34:29.664 [DEBUG] [Thread-25524] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:34:29.685 [DEBUG] [Thread-25524] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:34:29.685 [INFO] [Thread-25524] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:34:29.688 [DEBUG] [Thread-25524] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:34:29.688 [DEBUG] [Thread-25524] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:34:29.688 [DEBUG] [Thread-25524] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:34:29.688 [DEBUG] [Thread-25524] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:34:29.688 [DEBUG] [Thread-25524] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:34:29.688 [DEBUG] [Thread-25524] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:34:29.688 [DEBUG] [Thread-25524] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] client lang: <none>
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] server lang: <none>
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] kex follows: False
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] Compression: none
2025-11-13T00:34:29.689 [DEBUG] [Thread-25524] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:34:29.696 [DEBUG] [Thread-25524] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:34:29.697 [DEBUG] [Thread-25524] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:34:29.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:34:29.697 [DEBUG] [Thread-25524] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:34:29.697 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:34:29.698 [DEBUG] [Thread-25524] [transport.py] [_log()] userauth is OK
2025-11-13T00:34:29.698 [DEBUG] [Thread-25524] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:34:29.698 [DEBUG] [Thread-25524] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:34:29.698 [DEBUG] [Thread-25524] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:34:29.698 [DEBUG] [Thread-25524] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:34:29.728 [INFO] [Thread-25524] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:34:29.728 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:34:30.351 [DEBUG] [Thread-25524] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:34:30.351 [DEBUG] [Thread-25524] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:34:30.351 [DEBUG] [Thread-25524] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:34:30.392 [DEBUG] [Thread-25524] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:34:30.392 [DEBUG] [Thread-25524] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:34:30.395 [DEBUG] [Thread-25524] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:34:30.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:34:30.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:34:30.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:34:30.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:34:30.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:34:30.410 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:34:30.410 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:34:30.410 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:34:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:34:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.940370 -999.00  +15.10   8.96     65   +8.60 1 2 1 1 1     0    0 4.82 -71.36 ZNEsW 10.4 9.0 262.2 11.1 15.8 -22.7 15.7 -21.6 15.3 -21.2 15.6 -22.4
2025-11-13T00:34:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:34:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:34:30.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.940370
2025-11-13T00:34:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:34:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:34:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:34:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:34:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:34:30.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:34:05', tmtdew=7.93, humidity=59.02, cloud=0.0, wind=14.54, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:34:05', seeing=1.18, atlas_timestamp='2025-11-12T22:34:07.968', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.33174999999999955, 0.489749999999999, 0.4814999999999987, 0.39750000000000085, 0.2292500000000004, 0.17349999999999888, 0.1642500000000009, 0.25549999999999784, 0.26900000000000013, 0.49125000000000085, 0.37899999999999956, 0.4109999999999996, 0.18024999999999913, 0.0649999999999995, 0.1869999999999994, 0.15374999999999872, 0.3565000000000005, 0.6389999999999993, 0.739749999999999, 0.3404999999999987, 0.1582499999999989, 0.07275000000000098, 0.1437500000000007, 0.10299999999999976, 0.43599999999999994, 0.6717500000000003, 0.5285000000000002, 0.45650000000000013, 0.1460000000000008, 0.2555000000000014, 0.1590000000000007, 0.41274999999999906], zp_timestamp='2025-11-12T22:31:00')
2025-11-13T00:34:30.411 [DEBUG] [Thread-25524] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:34:30.486 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:34:30.497 [DEBUG] [Thread-25527] [transport.py] [_log()] starting thread (client mode): 0x14989ba0
2025-11-13T00:34:30.498 [DEBUG] [Thread-25527] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:34:30.515 [DEBUG] [Thread-25527] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:34:30.515 [INFO] [Thread-25527] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] client lang: <none>
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] server lang: <none>
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] kex follows: False
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] Compression: none
2025-11-13T00:34:30.525 [DEBUG] [Thread-25527] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:34:30.584 [DEBUG] [Thread-25527] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:34:30.584 [DEBUG] [Thread-25527] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:34:30.584 [DEBUG] [Thread-25527] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:34:30.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:34:30.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:34:30.640 [DEBUG] [Thread-25527] [transport.py] [_log()] userauth is OK
2025-11-13T00:34:30.640 [DEBUG] [Thread-25527] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:34:30.640 [DEBUG] [Thread-25527] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:34:30.640 [DEBUG] [Thread-25527] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:34:30.640 [DEBUG] [Thread-25527] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:34:30.656 [INFO] [Thread-25527] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:34:30.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:34:30.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:34:31.465 [DEBUG] [Thread-25527] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:34:31.465 [DEBUG] [Thread-25527] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:34:31.516 [DEBUG] [Thread-25527] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:34:31.516 [DEBUG] [Thread-25527] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:34:31.527 [DEBUG] [Thread-25527] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:34:31.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:34:31.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-11-13T00:34:31.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:34:31.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:34:31.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:34:31.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:34:31.569 [DEBUG] [Thread-25527] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:34:31.781 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:34:33.616 [DEBUG] [Thread-25529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:34:35.881 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:34:48.668 [DEBUG] [Thread-25530 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:35:01.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:35:01.576 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:35:01.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:35:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 34, 37), 7.97, 58.89, 0.0, 15.09, 15.23, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:35:02.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:34:37
2025-11-13T00:35:02.343 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:35:02.490 [DEBUG] [Thread-25531] [transport.py] [_log()] starting thread (client mode): 0x1498afb0
2025-11-13T00:35:02.490 [DEBUG] [Thread-25531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:35:02.509 [DEBUG] [Thread-25531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:35:02.509 [INFO] [Thread-25531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:35:02.512 [DEBUG] [Thread-25531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] client lang: <none>
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] server lang: <none>
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] kex follows: False
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:35:02.513 [DEBUG] [Thread-25531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:35:02.514 [DEBUG] [Thread-25531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:35:02.514 [DEBUG] [Thread-25531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:35:02.514 [DEBUG] [Thread-25531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:35:02.514 [DEBUG] [Thread-25531] [transport.py] [_log()] Compression: none
2025-11-13T00:35:02.514 [DEBUG] [Thread-25531] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:35:02.524 [DEBUG] [Thread-25531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:35:02.524 [DEBUG] [Thread-25531] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:35:02.525 [DEBUG] [Thread-25531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:35:02.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:35:02.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:35:02.527 [DEBUG] [Thread-25531] [transport.py] [_log()] userauth is OK
2025-11-13T00:35:02.527 [DEBUG] [Thread-25531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:35:02.527 [DEBUG] [Thread-25531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:35:02.527 [DEBUG] [Thread-25531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:35:02.527 [DEBUG] [Thread-25531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:35:02.548 [INFO] [Thread-25531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:35:02.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:35:03.262 [DEBUG] [Thread-25531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:35:03.262 [DEBUG] [Thread-25531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:35:03.262 [DEBUG] [Thread-25531] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:35:03.303 [DEBUG] [Thread-25531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:35:03.303 [DEBUG] [Thread-25531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:35:03.307 [DEBUG] [Thread-25531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:35:03.318 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:35:03.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:35:03.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:35:03.322 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:35:03.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:35:03.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:35:03.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:35:03.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:35:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:35:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.940717 -999.00  +15.10   8.53     65   +8.60 1 2 1 1 1     0    0 4.92 -63.45 ZNEsW 6.5 8.5 268.4 12.6 15.7 -22.7 15.7 -21.6 15.3 -21.3 15.6 -22.4
2025-11-13T00:35:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:35:03.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:35:03.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.940717
2025-11-13T00:35:03.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:35:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:35:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:35:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:35:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:35:03.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:34:37', tmtdew=7.97, humidity=58.89, cloud=0.0, wind=15.09, temperature=15.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:34:37', seeing=1.06, atlas_timestamp='2025-11-12T22:34:37.949', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.33174999999999955, 0.489749999999999, 0.4814999999999987, 0.39750000000000085, 0.2292500000000004, 0.17349999999999888, 0.1642500000000009, 0.25549999999999784, 0.26900000000000013, 0.49125000000000085, 0.37899999999999956, 0.4109999999999996, 0.18024999999999913, 0.0649999999999995, 0.1869999999999994, 0.15374999999999872, 0.3565000000000005, 0.6389999999999993, 0.739749999999999, 0.3404999999999987, 0.1582499999999989, 0.07275000000000098, 0.1437500000000007, 0.10299999999999976, 0.43599999999999994, 0.6717500000000003, 0.5285000000000002, 0.45650000000000013, 0.1460000000000008, 0.2555000000000014, 0.1590000000000007, 0.41274999999999906], zp_timestamp='2025-11-12T22:31:00')
2025-11-13T00:35:03.361 [DEBUG] [Thread-25531] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:35:03.446 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:35:03.459 [DEBUG] [Thread-25534] [transport.py] [_log()] starting thread (client mode): 0x149473a0
2025-11-13T00:35:03.460 [DEBUG] [Thread-25534] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:35:03.478 [DEBUG] [Thread-25534] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:35:03.478 [INFO] [Thread-25534] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:35:03.486 [DEBUG] [Thread-25534] [transport.py] [_log()] client lang: <none>
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] server lang: <none>
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] kex follows: False
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] Compression: none
2025-11-13T00:35:03.487 [DEBUG] [Thread-25534] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:35:03.545 [DEBUG] [Thread-25534] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:35:03.545 [DEBUG] [Thread-25534] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:35:03.546 [DEBUG] [Thread-25534] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:35:03.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:35:03.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:35:03.601 [DEBUG] [Thread-25534] [transport.py] [_log()] userauth is OK
2025-11-13T00:35:03.601 [DEBUG] [Thread-25534] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:35:03.601 [DEBUG] [Thread-25534] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:35:03.601 [DEBUG] [Thread-25534] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:35:03.602 [DEBUG] [Thread-25534] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:35:03.620 [INFO] [Thread-25534] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:35:03.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:35:03.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:35:03.705 [DEBUG] [Thread-25536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:35:04.466 [DEBUG] [Thread-25534] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:35:04.467 [DEBUG] [Thread-25534] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:35:04.514 [DEBUG] [Thread-25534] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:35:04.514 [DEBUG] [Thread-25534] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:35:04.523 [DEBUG] [Thread-25534] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:35:04.531 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:35:04.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:35:04.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:35:04.549 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:35:04.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:35:04.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:35:04.557 [DEBUG] [Thread-25534] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:35:06.834 [DEBUG] [Thread-25537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:35:18.762 [DEBUG] [Thread-25538 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:35:27.301 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:35:27.302 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:35:33.794 [DEBUG] [Thread-25539 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:35:34.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:35:34.580 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:35:34.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-11-13T00:35:35.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 35, 9), 7.99, 58.79, 0.0, 14.22, 15.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:35:35.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:35:09
2025-11-13T00:35:35.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:35:35.498 [DEBUG] [Thread-25540] [transport.py] [_log()] starting thread (client mode): 0x19ddabc0
2025-11-13T00:35:35.498 [DEBUG] [Thread-25540] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:35:35.519 [DEBUG] [Thread-25540] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:35:35.519 [INFO] [Thread-25540] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:35:35.522 [DEBUG] [Thread-25540] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:35:35.522 [DEBUG] [Thread-25540] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:35:35.522 [DEBUG] [Thread-25540] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:35:35.522 [DEBUG] [Thread-25540] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:35:35.522 [DEBUG] [Thread-25540] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:35:35.522 [DEBUG] [Thread-25540] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:35:35.522 [DEBUG] [Thread-25540] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:35:35.522 [DEBUG] [Thread-25540] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] client lang: <none>
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] server lang: <none>
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] kex follows: False
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] Compression: none
2025-11-13T00:35:35.523 [DEBUG] [Thread-25540] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:35:35.543 [DEBUG] [Thread-25540] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:35:35.543 [DEBUG] [Thread-25540] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:35:35.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:35:35.545 [DEBUG] [Thread-25540] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:35:35.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:35:35.546 [DEBUG] [Thread-25540] [transport.py] [_log()] userauth is OK
2025-11-13T00:35:35.547 [DEBUG] [Thread-25540] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:35:35.547 [DEBUG] [Thread-25540] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:35:35.547 [DEBUG] [Thread-25540] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:35:35.547 [DEBUG] [Thread-25540] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:35:35.583 [INFO] [Thread-25540] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:35:35.583 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:35:36.222 [DEBUG] [Thread-25540] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:35:36.223 [DEBUG] [Thread-25540] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:35:36.223 [DEBUG] [Thread-25540] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:35:36.264 [DEBUG] [Thread-25540] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:35:36.264 [DEBUG] [Thread-25540] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:35:36.267 [DEBUG] [Thread-25540] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:35:36.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:35:36.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:35:36.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:35:36.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:35:36.289 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:35:36.290 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:35:36.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:35:36.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:35:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:35:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.941064 -999.00  +15.10  10.80     65   +8.60 1 2 1 1 1     0    0 5.19 -61.56 ZNEsW 10.1 10.8 262.0 11.9 15.7 -22.8 15.6 -21.6 15.3 -21.3 15.6 -22.4
2025-11-13T00:35:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:35:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:35:36.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.941064
2025-11-13T00:35:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:35:36.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:35:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:35:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:35:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:35:36.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:35:09', tmtdew=7.99, humidity=58.79, cloud=0.0, wind=14.22, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:35:09', seeing=1.06, atlas_timestamp='2025-11-12T22:35:07.930', atlas_cloud=2, atlas_rain=1, zp_data=[0.21674999999999933, 0.33174999999999955, 0.489749999999999, 0.4814999999999987, 0.39750000000000085, 0.2292500000000004, 0.17349999999999888, 0.1642500000000009, 0.25549999999999784, 0.26900000000000013, 0.49125000000000085, 0.37899999999999956, 0.4109999999999996, 0.18024999999999913, 0.0649999999999995, 0.1869999999999994, 0.15374999999999872, 0.3565000000000005, 0.6389999999999993, 0.739749999999999, 0.3404999999999987, 0.1582499999999989, 0.07275000000000098, 0.1437500000000007, 0.10299999999999976, 0.43599999999999994, 0.6717500000000003, 0.5285000000000002, 0.45650000000000013, 0.1460000000000008, 0.2555000000000014, 0.1590000000000007, 0.41274999999999906], zp_timestamp='2025-11-12T22:31:00')
2025-11-13T00:35:36.293 [DEBUG] [Thread-25540] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:35:36.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:35:36.390 [DEBUG] [Thread-25543] [transport.py] [_log()] starting thread (client mode): 0x14920820
2025-11-13T00:35:36.390 [DEBUG] [Thread-25543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:35:36.405 [DEBUG] [Thread-25543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:35:36.406 [INFO] [Thread-25543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:35:36.413 [DEBUG] [Thread-25543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:35:36.413 [DEBUG] [Thread-25543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:35:36.413 [DEBUG] [Thread-25543] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:35:36.413 [DEBUG] [Thread-25543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] client lang: <none>
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] server lang: <none>
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] kex follows: False
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] Compression: none
2025-11-13T00:35:36.414 [DEBUG] [Thread-25543] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:35:36.473 [DEBUG] [Thread-25543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:35:36.474 [DEBUG] [Thread-25543] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:35:36.474 [DEBUG] [Thread-25543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:35:36.475 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:35:36.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:35:36.529 [DEBUG] [Thread-25543] [transport.py] [_log()] userauth is OK
2025-11-13T00:35:36.529 [DEBUG] [Thread-25543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:35:36.529 [DEBUG] [Thread-25543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:35:36.529 [DEBUG] [Thread-25543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:35:36.529 [DEBUG] [Thread-25543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:35:36.548 [INFO] [Thread-25543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:35:36.549 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:35:36.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:35:37.380 [DEBUG] [Thread-25543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:35:37.380 [DEBUG] [Thread-25543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:35:37.428 [DEBUG] [Thread-25543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:35:37.428 [DEBUG] [Thread-25543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:35:37.437 [DEBUG] [Thread-25543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:35:37.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:35:37.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-11-13T00:35:37.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-11-13T00:35:37.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:35:37.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:35:37.466 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:35:37.474 [DEBUG] [Thread-25543] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:35:48.824 [DEBUG] [Thread-25545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:00.376 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:03.865 [DEBUG] [Thread-25546 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:06.897 [DEBUG] [Thread-25547 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:07.207 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:07.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:36:07.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:36:07.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-11-13T00:36:08.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 35, 41), 8.01, 58.73, 0.0, 13.87, 15.25, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:36:08.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:35:41
2025-11-13T00:36:08.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:36:08.408 [DEBUG] [Thread-25548] [transport.py] [_log()] starting thread (client mode): 0x19ddaa70
2025-11-13T00:36:08.408 [DEBUG] [Thread-25548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:36:08.427 [DEBUG] [Thread-25548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:36:08.427 [INFO] [Thread-25548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:36:08.430 [DEBUG] [Thread-25548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:36:08.430 [DEBUG] [Thread-25548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:36:08.430 [DEBUG] [Thread-25548] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:36:08.430 [DEBUG] [Thread-25548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:36:08.430 [DEBUG] [Thread-25548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] client lang: <none>
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] server lang: <none>
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] kex follows: False
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] Compression: none
2025-11-13T00:36:08.431 [DEBUG] [Thread-25548] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:36:08.439 [DEBUG] [Thread-25548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:36:08.439 [DEBUG] [Thread-25548] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:36:08.439 [DEBUG] [Thread-25548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:36:08.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:36:08.440 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:36:08.441 [DEBUG] [Thread-25548] [transport.py] [_log()] userauth is OK
2025-11-13T00:36:08.441 [DEBUG] [Thread-25548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:36:08.441 [DEBUG] [Thread-25548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:36:08.441 [DEBUG] [Thread-25548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:36:08.441 [DEBUG] [Thread-25548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:36:08.456 [INFO] [Thread-25548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:36:08.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:36:09.086 [DEBUG] [Thread-25548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:36:09.086 [DEBUG] [Thread-25548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:36:09.087 [DEBUG] [Thread-25548] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:36:09.127 [DEBUG] [Thread-25548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:36:09.127 [DEBUG] [Thread-25548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:36:09.130 [DEBUG] [Thread-25548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:36:09.141 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:36:09.142 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:36:09.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:36:09.146 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:36:09.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:36:09.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:36:09.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:36:09.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:36:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:36:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.941412 -999.00  +15.10   8.70     65   +8.60 1 2 1 1 1     0    0 5.31 -60.27 ZNEsW 10.2 8.7 269.4 12.3 15.8 -22.8 15.7 -21.7 15.3 -21.4 15.6 -22.4
2025-11-13T00:36:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:36:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:36:09.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.941412
2025-11-13T00:36:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:36:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:36:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:36:09.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:36:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:36:09.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:35:41', tmtdew=8.01, humidity=58.73, cloud=0.0, wind=13.87, temperature=15.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:35:42', seeing=1.07, atlas_timestamp='2025-11-12T22:35:37.997', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:34:00')
2025-11-13T00:36:09.157 [DEBUG] [Thread-25548] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:36:09.241 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:36:09.253 [DEBUG] [Thread-25551] [transport.py] [_log()] starting thread (client mode): 0x1493ff70
2025-11-13T00:36:09.253 [DEBUG] [Thread-25551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:36:09.267 [DEBUG] [Thread-25551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:36:09.267 [INFO] [Thread-25551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:36:09.275 [DEBUG] [Thread-25551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:36:09.275 [DEBUG] [Thread-25551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:36:09.275 [DEBUG] [Thread-25551] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:36:09.275 [DEBUG] [Thread-25551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:36:09.275 [DEBUG] [Thread-25551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:36:09.275 [DEBUG] [Thread-25551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] client lang: <none>
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] server lang: <none>
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] kex follows: False
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:36:09.276 [DEBUG] [Thread-25551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:36:09.277 [DEBUG] [Thread-25551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:36:09.277 [DEBUG] [Thread-25551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:36:09.277 [DEBUG] [Thread-25551] [transport.py] [_log()] Compression: none
2025-11-13T00:36:09.277 [DEBUG] [Thread-25551] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:36:09.332 [DEBUG] [Thread-25551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:36:09.333 [DEBUG] [Thread-25551] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:36:09.333 [DEBUG] [Thread-25551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:36:09.333 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:36:09.334 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:36:09.389 [DEBUG] [Thread-25551] [transport.py] [_log()] userauth is OK
2025-11-13T00:36:09.389 [DEBUG] [Thread-25551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:36:09.389 [DEBUG] [Thread-25551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:36:09.389 [DEBUG] [Thread-25551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:36:09.389 [DEBUG] [Thread-25551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:36:09.408 [INFO] [Thread-25551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:36:09.409 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:36:09.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:36:10.250 [DEBUG] [Thread-25551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:36:10.251 [DEBUG] [Thread-25551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:36:10.298 [DEBUG] [Thread-25551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:36:10.299 [DEBUG] [Thread-25551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:36:10.308 [DEBUG] [Thread-25551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:36:10.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:36:10.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:36:10.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-11-13T00:36:10.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:36:10.337 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:36:10.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:36:10.346 [DEBUG] [Thread-25551] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:36:11.291 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:18.900 [DEBUG] [Thread-25553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:27.505 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:27.505 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:33.961 [DEBUG] [Thread-25554 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:36:40.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:36:40.368 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:36:40.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-11-13T00:36:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 36, 13), 8.02, 58.71, 0.0, 14.52, 15.28, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:36:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:36:13
2025-11-13T00:36:41.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:36:41.281 [DEBUG] [Thread-25555] [transport.py] [_log()] starting thread (client mode): 0x1493f520
2025-11-13T00:36:41.281 [DEBUG] [Thread-25555] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:36:41.303 [DEBUG] [Thread-25555] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:36:41.304 [INFO] [Thread-25555] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:36:41.307 [DEBUG] [Thread-25555] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:36:41.307 [DEBUG] [Thread-25555] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:36:41.307 [DEBUG] [Thread-25555] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:36:41.307 [DEBUG] [Thread-25555] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:36:41.307 [DEBUG] [Thread-25555] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:36:41.307 [DEBUG] [Thread-25555] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] client lang: <none>
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] server lang: <none>
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] kex follows: False
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:36:41.308 [DEBUG] [Thread-25555] [transport.py] [_log()] Compression: none
2025-11-13T00:36:41.309 [DEBUG] [Thread-25555] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:36:41.329 [DEBUG] [Thread-25555] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:36:41.330 [DEBUG] [Thread-25555] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:36:41.331 [DEBUG] [Thread-25555] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:36:41.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:36:41.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:36:41.333 [DEBUG] [Thread-25555] [transport.py] [_log()] userauth is OK
2025-11-13T00:36:41.333 [DEBUG] [Thread-25555] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:36:41.333 [DEBUG] [Thread-25555] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:36:41.333 [DEBUG] [Thread-25555] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:36:41.333 [DEBUG] [Thread-25555] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:36:41.347 [INFO] [Thread-25555] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:36:41.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:36:41.969 [DEBUG] [Thread-25555] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:36:41.970 [DEBUG] [Thread-25555] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:36:41.970 [DEBUG] [Thread-25555] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:36:42.011 [DEBUG] [Thread-25555] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:36:42.011 [DEBUG] [Thread-25555] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:36:42.015 [DEBUG] [Thread-25555] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:36:42.026 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:36:42.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:36:42.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:36:42.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:36:42.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:36:42.037 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:36:42.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:36:42.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:36:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:36:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.941758 -999.00  +15.10   7.34     64   +8.50 1 2 1 1 1     0    0 5.24 -61.72 ZNEsW 8.2 7.3 269.0 11.9 15.7 -22.7 15.6 -21.7 15.3 -21.4 15.6 -22.5
2025-11-13T00:36:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:36:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:36:42.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.941758
2025-11-13T00:36:42.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:36:42.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:36:42.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:36:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:36:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:36:42.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:36:13', tmtdew=8.02, humidity=58.71, cloud=0.0, wind=14.52, temperature=15.28, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:36:14', seeing=1.07, atlas_timestamp='2025-11-12T22:36:07.891', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:34:00')
2025-11-13T00:36:42.040 [DEBUG] [Thread-25555] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:36:42.123 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:36:42.135 [DEBUG] [Thread-25558] [transport.py] [_log()] starting thread (client mode): 0x149899c0
2025-11-13T00:36:42.136 [DEBUG] [Thread-25558] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:36:42.150 [DEBUG] [Thread-25558] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:36:42.150 [INFO] [Thread-25558] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:36:42.158 [DEBUG] [Thread-25558] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:36:42.158 [DEBUG] [Thread-25558] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:36:42.158 [DEBUG] [Thread-25558] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] client lang: <none>
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] server lang: <none>
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] kex follows: False
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:36:42.159 [DEBUG] [Thread-25558] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:36:42.160 [DEBUG] [Thread-25558] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:36:42.160 [DEBUG] [Thread-25558] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:36:42.160 [DEBUG] [Thread-25558] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:36:42.160 [DEBUG] [Thread-25558] [transport.py] [_log()] Compression: none
2025-11-13T00:36:42.160 [DEBUG] [Thread-25558] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:36:42.217 [DEBUG] [Thread-25558] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:36:42.218 [DEBUG] [Thread-25558] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:36:42.219 [DEBUG] [Thread-25558] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:36:42.219 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:36:42.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:36:42.278 [DEBUG] [Thread-25558] [transport.py] [_log()] userauth is OK
2025-11-13T00:36:42.279 [DEBUG] [Thread-25558] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:36:42.279 [DEBUG] [Thread-25558] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:36:42.279 [DEBUG] [Thread-25558] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:36:42.279 [DEBUG] [Thread-25558] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:36:42.304 [INFO] [Thread-25558] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:36:42.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:36:42.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:36:43.187 [DEBUG] [Thread-25558] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:36:43.188 [DEBUG] [Thread-25558] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:36:43.236 [DEBUG] [Thread-25558] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:36:43.237 [DEBUG] [Thread-25558] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:36:43.247 [DEBUG] [Thread-25558] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:36:43.256 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:36:43.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-11-13T00:36:43.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-11-13T00:36:43.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:36:43.275 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:36:43.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:36:43.283 [DEBUG] [Thread-25558] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:36:48.996 [DEBUG] [Thread-25560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:04.046 [DEBUG] [Thread-25561 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:06.948 [DEBUG] [Thread-25562 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:13.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:37:13.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:37:13.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-11-13T00:37:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 36, 45), 8.19, 57.94, 0.0, 13.82, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:37:13.940 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:36:45
2025-11-13T00:37:14.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:37:14.211 [DEBUG] [Thread-25563] [transport.py] [_log()] starting thread (client mode): 0x14923eb0
2025-11-13T00:37:14.212 [DEBUG] [Thread-25563] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:37:14.232 [DEBUG] [Thread-25563] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:37:14.232 [INFO] [Thread-25563] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] client lang: <none>
2025-11-13T00:37:14.235 [DEBUG] [Thread-25563] [transport.py] [_log()] server lang: <none>
2025-11-13T00:37:14.236 [DEBUG] [Thread-25563] [transport.py] [_log()] kex follows: False
2025-11-13T00:37:14.236 [DEBUG] [Thread-25563] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:37:14.236 [DEBUG] [Thread-25563] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:37:14.236 [DEBUG] [Thread-25563] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:37:14.236 [DEBUG] [Thread-25563] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:37:14.236 [DEBUG] [Thread-25563] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:37:14.236 [DEBUG] [Thread-25563] [transport.py] [_log()] Compression: none
2025-11-13T00:37:14.236 [DEBUG] [Thread-25563] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:37:14.253 [DEBUG] [Thread-25563] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:37:14.254 [DEBUG] [Thread-25563] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:37:14.255 [DEBUG] [Thread-25563] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:37:14.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:37:14.255 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:37:14.256 [DEBUG] [Thread-25563] [transport.py] [_log()] userauth is OK
2025-11-13T00:37:14.257 [DEBUG] [Thread-25563] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:37:14.257 [DEBUG] [Thread-25563] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:37:14.257 [DEBUG] [Thread-25563] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:37:14.257 [DEBUG] [Thread-25563] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:37:14.275 [INFO] [Thread-25563] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:37:14.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:37:14.909 [DEBUG] [Thread-25563] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:37:14.909 [DEBUG] [Thread-25563] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:37:14.910 [DEBUG] [Thread-25563] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:37:14.951 [DEBUG] [Thread-25563] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:37:14.951 [DEBUG] [Thread-25563] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:37:14.954 [DEBUG] [Thread-25563] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:37:14.965 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:37:14.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:37:14.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:37:14.969 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:37:14.974 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:37:14.976 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:37:14.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:37:14.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:37:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:37:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.942453 -999.00  +15.10   8.83     64   +8.50 1 2 1 1 1     0    0 5.56 -51.78 ZNEsW 7.5 8.8 260.2 11.3 15.7 -22.8 15.6 -21.9 15.3 -21.3 15.6 -22.6
2025-11-13T00:37:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:37:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:37:14.977 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.942453
2025-11-13T00:37:14.978 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:37:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:37:14.979 [DEBUG] [Thread-25563] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:37:14.979 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:37:14.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:37:14.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:37:14.980 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:36:45', tmtdew=8.19, humidity=57.94, cloud=0.0, wind=13.82, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:36:46', seeing=1.17, atlas_timestamp='2025-11-12T22:37:07.939', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:34:00')
2025-11-13T00:37:15.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:37:15.068 [DEBUG] [Thread-25566] [transport.py] [_log()] starting thread (client mode): 0x19dd92a0
2025-11-13T00:37:15.068 [DEBUG] [Thread-25566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:37:15.082 [DEBUG] [Thread-25566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:37:15.082 [INFO] [Thread-25566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:37:15.089 [DEBUG] [Thread-25566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:37:15.090 [DEBUG] [Thread-25566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:37:15.090 [DEBUG] [Thread-25566] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:37:15.090 [DEBUG] [Thread-25566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:37:15.090 [DEBUG] [Thread-25566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:37:15.090 [DEBUG] [Thread-25566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:37:15.090 [DEBUG] [Thread-25566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:37:15.090 [DEBUG] [Thread-25566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:37:15.090 [DEBUG] [Thread-25566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:37:15.091 [DEBUG] [Thread-25566] [transport.py] [_log()] client lang: <none>
2025-11-13T00:37:15.091 [DEBUG] [Thread-25566] [transport.py] [_log()] server lang: <none>
2025-11-13T00:37:15.091 [DEBUG] [Thread-25566] [transport.py] [_log()] kex follows: False
2025-11-13T00:37:15.091 [DEBUG] [Thread-25566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:37:15.091 [DEBUG] [Thread-25566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:37:15.091 [DEBUG] [Thread-25566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:37:15.091 [DEBUG] [Thread-25566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:37:15.092 [DEBUG] [Thread-25566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:37:15.092 [DEBUG] [Thread-25566] [transport.py] [_log()] Compression: none
2025-11-13T00:37:15.092 [DEBUG] [Thread-25566] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:37:15.149 [DEBUG] [Thread-25566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:37:15.150 [DEBUG] [Thread-25566] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:37:15.150 [DEBUG] [Thread-25566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:37:15.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:37:15.151 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:37:15.205 [DEBUG] [Thread-25566] [transport.py] [_log()] userauth is OK
2025-11-13T00:37:15.206 [DEBUG] [Thread-25566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:37:15.206 [DEBUG] [Thread-25566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:37:15.206 [DEBUG] [Thread-25566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:37:15.206 [DEBUG] [Thread-25566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:37:15.223 [INFO] [Thread-25566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:37:15.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:37:15.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:37:16.048 [DEBUG] [Thread-25566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:37:16.049 [DEBUG] [Thread-25566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:37:16.096 [DEBUG] [Thread-25566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:37:16.097 [DEBUG] [Thread-25566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:37:16.106 [DEBUG] [Thread-25566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:37:16.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:37:16.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-11-13T00:37:16.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-11-13T00:37:16.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:37:16.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:37:16.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:37:16.142 [DEBUG] [Thread-25566] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:37:19.074 [DEBUG] [Thread-25568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:27.709 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:27.710 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:33.837 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:34.121 [DEBUG] [Thread-25569 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:42.638 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:46.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:37:46.165 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:37:46.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-11-13T00:37:46.699 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:37:46.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 37, 17), 8.19, 57.94, 0.0, 14.42, 15.38, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:37:46.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:37:17
2025-11-13T00:37:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:37:47.121 [DEBUG] [Thread-25570] [transport.py] [_log()] starting thread (client mode): 0x1493e950
2025-11-13T00:37:47.121 [DEBUG] [Thread-25570] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:37:47.142 [DEBUG] [Thread-25570] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:37:47.142 [INFO] [Thread-25570] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] client lang: <none>
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] server lang: <none>
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] kex follows: False
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] Compression: none
2025-11-13T00:37:47.145 [DEBUG] [Thread-25570] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:37:47.165 [DEBUG] [Thread-25570] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:37:47.165 [DEBUG] [Thread-25570] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:37:47.166 [DEBUG] [Thread-25570] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:37:47.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:37:47.166 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:37:47.166 [DEBUG] [Thread-25570] [transport.py] [_log()] userauth is OK
2025-11-13T00:37:47.166 [DEBUG] [Thread-25570] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:37:47.166 [DEBUG] [Thread-25570] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:37:47.166 [DEBUG] [Thread-25570] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:37:47.166 [DEBUG] [Thread-25570] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:37:47.193 [INFO] [Thread-25570] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:37:47.193 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:37:47.754 [DEBUG] [Thread-25570] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:37:47.754 [DEBUG] [Thread-25570] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:37:47.755 [DEBUG] [Thread-25570] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:37:47.795 [DEBUG] [Thread-25570] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:37:47.795 [DEBUG] [Thread-25570] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:37:47.802 [DEBUG] [Thread-25570] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:37:47.815 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:37:47.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:37:47.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:37:47.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:37:47.824 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:37:47.826 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:37:47.826 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:37:47.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:37:47.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:37:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.942800 -999.00  +15.10   9.24     64   +8.40 1 2 1 1 1     0    0 5.42 -50.79 ZNEsW 9.9 9.2 260.2 12.2 15.7 -23.0 15.6 -21.8 15.3 -21.4 15.6 -22.5
2025-11-13T00:37:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:37:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:37:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.942800
2025-11-13T00:37:47.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:37:47.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:37:47.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:37:47.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:37:47.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:37:47.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:37:17', tmtdew=8.19, humidity=57.94, cloud=0.0, wind=14.42, temperature=15.38, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:37:18', seeing=1.17, atlas_timestamp='2025-11-12T22:37:37.920', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:34:00')
2025-11-13T00:37:47.828 [DEBUG] [Thread-25570] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:37:47.912 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:37:47.925 [DEBUG] [Thread-25573] [transport.py] [_log()] starting thread (client mode): 0x1737f100
2025-11-13T00:37:47.925 [DEBUG] [Thread-25573] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:37:47.940 [DEBUG] [Thread-25573] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:37:47.940 [INFO] [Thread-25573] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:37:47.947 [DEBUG] [Thread-25573] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:37:47.947 [DEBUG] [Thread-25573] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] client lang: <none>
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] server lang: <none>
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] kex follows: False
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] Compression: none
2025-11-13T00:37:47.948 [DEBUG] [Thread-25573] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:37:48.006 [DEBUG] [Thread-25573] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:37:48.006 [DEBUG] [Thread-25573] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:37:48.007 [DEBUG] [Thread-25573] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:37:48.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:37:48.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:37:48.062 [DEBUG] [Thread-25573] [transport.py] [_log()] userauth is OK
2025-11-13T00:37:48.062 [DEBUG] [Thread-25573] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:37:48.062 [DEBUG] [Thread-25573] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:37:48.062 [DEBUG] [Thread-25573] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:37:48.062 [DEBUG] [Thread-25573] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:37:48.081 [INFO] [Thread-25573] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:37:48.081 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:37:48.082 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:37:48.926 [DEBUG] [Thread-25573] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:37:48.927 [DEBUG] [Thread-25573] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:37:48.978 [DEBUG] [Thread-25573] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:37:48.978 [DEBUG] [Thread-25573] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:37:48.991 [DEBUG] [Thread-25573] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:37:49.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:37:49.006 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:37:49.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-11-13T00:37:49.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:37:49.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:37:49.025 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:37:49.033 [DEBUG] [Thread-25573] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:37:49.154 [DEBUG] [Thread-25575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:38:04.206 [DEBUG] [Thread-25576 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:38:07.006 [DEBUG] [Thread-25577 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:38:19.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:38:19.055 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:38:19.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-11-13T00:38:19.241 [DEBUG] [Thread-25578 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:38:19.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 37, 49), 8.24, 57.94, 0.0, 14.12, 15.4, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:38:19.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:37:49
2025-11-13T00:38:19.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:38:19.955 [DEBUG] [Thread-25579] [transport.py] [_log()] starting thread (client mode): 0x1737dfc0
2025-11-13T00:38:19.955 [DEBUG] [Thread-25579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:38:19.970 [DEBUG] [Thread-25579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:38:19.971 [INFO] [Thread-25579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] client lang: <none>
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] server lang: <none>
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] kex follows: False
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:38:19.974 [DEBUG] [Thread-25579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:38:19.975 [DEBUG] [Thread-25579] [transport.py] [_log()] Compression: none
2025-11-13T00:38:19.975 [DEBUG] [Thread-25579] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:38:19.983 [DEBUG] [Thread-25579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:38:19.983 [DEBUG] [Thread-25579] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:38:19.984 [DEBUG] [Thread-25579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:38:19.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:38:19.984 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:38:19.985 [DEBUG] [Thread-25579] [transport.py] [_log()] userauth is OK
2025-11-13T00:38:19.985 [DEBUG] [Thread-25579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:38:19.985 [DEBUG] [Thread-25579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:38:19.985 [DEBUG] [Thread-25579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:38:19.985 [DEBUG] [Thread-25579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:38:19.998 [INFO] [Thread-25579] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:38:19.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:38:20.604 [DEBUG] [Thread-25579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:38:20.604 [DEBUG] [Thread-25579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:38:20.604 [DEBUG] [Thread-25579] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:38:20.645 [DEBUG] [Thread-25579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:38:20.645 [DEBUG] [Thread-25579] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:38:20.647 [DEBUG] [Thread-25579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:38:20.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:38:20.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:38:20.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:38:20.660 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:38:20.662 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:38:20.663 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:38:20.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.943148 -999.00  +15.10   9.84     64   +8.40 1 2 1 1 1     0    0 5.57 -52.48 ZNEsW 8.9 9.8 265.4 13.1 15.7 -22.9 15.6 -21.9 15.3 -21.6 15.6 -22.6
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.943148
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:38:20.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:37:49', tmtdew=8.24, humidity=57.94, cloud=0.0, wind=14.12, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:37:50', seeing=1.0, atlas_timestamp='2025-11-12T22:38:07.987', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:34:00')
2025-11-13T00:38:20.663 [DEBUG] [Thread-25579] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:38:20.738 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:38:20.749 [DEBUG] [Thread-25582] [transport.py] [_log()] starting thread (client mode): 0x1493cb20
2025-11-13T00:38:20.750 [DEBUG] [Thread-25582] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:38:20.764 [DEBUG] [Thread-25582] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:38:20.764 [INFO] [Thread-25582] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] client lang: <none>
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] server lang: <none>
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] kex follows: False
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] Compression: none
2025-11-13T00:38:20.772 [DEBUG] [Thread-25582] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:38:20.828 [DEBUG] [Thread-25582] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:38:20.828 [DEBUG] [Thread-25582] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:38:20.828 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:38:20.829 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:38:20.829 [DEBUG] [Thread-25582] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:38:20.885 [DEBUG] [Thread-25582] [transport.py] [_log()] userauth is OK
2025-11-13T00:38:20.885 [DEBUG] [Thread-25582] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:38:20.885 [DEBUG] [Thread-25582] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:38:20.885 [DEBUG] [Thread-25582] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:38:20.885 [DEBUG] [Thread-25582] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:38:20.902 [INFO] [Thread-25582] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:38:20.902 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:38:20.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:38:21.737 [DEBUG] [Thread-25582] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:38:21.737 [DEBUG] [Thread-25582] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:38:21.785 [DEBUG] [Thread-25582] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:38:21.785 [DEBUG] [Thread-25582] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:38:21.793 [DEBUG] [Thread-25582] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:38:21.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:38:21.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-11-13T00:38:21.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-11-13T00:38:21.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:38:21.816 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:38:21.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:38:21.824 [DEBUG] [Thread-25582] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:38:27.912 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:38:27.913 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:38:34.270 [DEBUG] [Thread-25584 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:38:49.324 [DEBUG] [Thread-25585 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:38:51.839 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:38:51.839 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:38: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-11-13T00:38:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 38, 21), 8.22, 57.99, 0.0, 14.68, 15.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:38:52.481 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:38:21
2025-11-13T00:38:52.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:38:52.750 [DEBUG] [Thread-25586] [transport.py] [_log()] starting thread (client mode): 0x14980880
2025-11-13T00:38:52.750 [DEBUG] [Thread-25586] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:38:52.770 [DEBUG] [Thread-25586] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:38:52.770 [INFO] [Thread-25586] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:38:52.773 [DEBUG] [Thread-25586] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:38:52.773 [DEBUG] [Thread-25586] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:38:52.773 [DEBUG] [Thread-25586] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:38:52.773 [DEBUG] [Thread-25586] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:38:52.773 [DEBUG] [Thread-25586] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] client lang: <none>
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] server lang: <none>
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] kex follows: False
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] Compression: none
2025-11-13T00:38:52.774 [DEBUG] [Thread-25586] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:38:52.792 [DEBUG] [Thread-25586] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:38:52.792 [DEBUG] [Thread-25586] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:38:52.793 [DEBUG] [Thread-25586] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:38:52.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:38:52.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:38:52.795 [DEBUG] [Thread-25586] [transport.py] [_log()] userauth is OK
2025-11-13T00:38:52.795 [DEBUG] [Thread-25586] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:38:52.795 [DEBUG] [Thread-25586] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:38:52.795 [DEBUG] [Thread-25586] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:38:52.795 [DEBUG] [Thread-25586] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:38:52.819 [INFO] [Thread-25586] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:38:52.819 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:38:53.423 [DEBUG] [Thread-25586] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:38:53.423 [DEBUG] [Thread-25586] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:38:53.423 [DEBUG] [Thread-25586] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:38:53.464 [DEBUG] [Thread-25586] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:38:53.464 [DEBUG] [Thread-25586] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:38:53.467 [DEBUG] [Thread-25586] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:38:53.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:38:53.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:38:53.482 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:38:53.484 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:38:53.490 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:38:53.492 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:38:53.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:38:53.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:38:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:38:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.943148 -999.00  +15.10   9.84     64   +8.40 1 2 1 1 1     0    0 5.57 -52.48 ZNEsW 8.9 9.8 265.4 13.1 15.7 -22.9 15.6 -21.9 15.3 -21.6 15.6 -22.6
2025-11-13T00:38:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:38:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:38:53.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.943148
2025-11-13T00:38:53.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:38:53.494 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:38:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:38:53.495 [DEBUG] [Thread-25586] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:38:53.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:38:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:38:53.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:38:21', tmtdew=8.22, humidity=57.99, cloud=0.0, wind=14.68, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:38:23', seeing=1.0, atlas_timestamp='2025-11-12T22:38:07.987', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:37:00')
2025-11-13T00:38:53.579 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:38:53.591 [DEBUG] [Thread-25589] [transport.py] [_log()] starting thread (client mode): 0x14981d20
2025-11-13T00:38:53.591 [DEBUG] [Thread-25589] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:38:53.606 [DEBUG] [Thread-25589] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:38:53.606 [INFO] [Thread-25589] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] client lang: <none>
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] server lang: <none>
2025-11-13T00:38:53.614 [DEBUG] [Thread-25589] [transport.py] [_log()] kex follows: False
2025-11-13T00:38:53.615 [DEBUG] [Thread-25589] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:38:53.615 [DEBUG] [Thread-25589] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:38:53.615 [DEBUG] [Thread-25589] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:38:53.615 [DEBUG] [Thread-25589] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:38:53.615 [DEBUG] [Thread-25589] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:38:53.615 [DEBUG] [Thread-25589] [transport.py] [_log()] Compression: none
2025-11-13T00:38:53.615 [DEBUG] [Thread-25589] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:38:53.675 [DEBUG] [Thread-25589] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:38:53.676 [DEBUG] [Thread-25589] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:38:53.677 [DEBUG] [Thread-25589] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:38:53.677 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:38:53.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:38:53.734 [DEBUG] [Thread-25589] [transport.py] [_log()] userauth is OK
2025-11-13T00:38:53.734 [DEBUG] [Thread-25589] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:38:53.734 [DEBUG] [Thread-25589] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:38:53.734 [DEBUG] [Thread-25589] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:38:53.735 [DEBUG] [Thread-25589] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:38:53.754 [INFO] [Thread-25589] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:38:53.754 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:38:53.755 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:38:54.597 [DEBUG] [Thread-25589] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:38:54.597 [DEBUG] [Thread-25589] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:38:54.646 [DEBUG] [Thread-25589] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:38:54.646 [DEBUG] [Thread-25589] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:38:54.655 [DEBUG] [Thread-25589] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:38:54.663 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:38:54.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-11-13T00:38:54.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-11-13T00:38:54.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:38:54.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:38:54.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:38:54.689 [DEBUG] [Thread-25589] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:39:04.355 [DEBUG] [Thread-25591 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:07.066 [DEBUG] [Thread-25592 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:09.184 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:18.046 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:19.401 [DEBUG] [Thread-25593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:22.128 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:24.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:39:24.707 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:39:24.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-11-13T00:39:25.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 38, 54), 8.24, 57.93, 0.0, 13.85, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:39:25.342 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:38:54
2025-11-13T00:39:25.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:39:25.609 [DEBUG] [Thread-25594] [transport.py] [_log()] starting thread (client mode): 0x1493caf0
2025-11-13T00:39:25.610 [DEBUG] [Thread-25594] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:39:25.630 [DEBUG] [Thread-25594] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:39:25.630 [INFO] [Thread-25594] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:39:25.633 [DEBUG] [Thread-25594] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:39:25.633 [DEBUG] [Thread-25594] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:39:25.633 [DEBUG] [Thread-25594] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:39:25.633 [DEBUG] [Thread-25594] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] client lang: <none>
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] server lang: <none>
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] kex follows: False
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] Compression: none
2025-11-13T00:39:25.634 [DEBUG] [Thread-25594] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:39:25.642 [DEBUG] [Thread-25594] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:39:25.643 [DEBUG] [Thread-25594] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:39:25.643 [DEBUG] [Thread-25594] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:39:25.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:39:25.644 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:39:25.645 [DEBUG] [Thread-25594] [transport.py] [_log()] userauth is OK
2025-11-13T00:39:25.645 [DEBUG] [Thread-25594] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:39:25.646 [DEBUG] [Thread-25594] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:39:25.646 [DEBUG] [Thread-25594] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:39:25.646 [DEBUG] [Thread-25594] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:39:25.670 [INFO] [Thread-25594] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:39:25.671 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:39:26.325 [DEBUG] [Thread-25594] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:39:26.325 [DEBUG] [Thread-25594] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:39:26.325 [DEBUG] [Thread-25594] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:39:26.366 [DEBUG] [Thread-25594] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:39:26.366 [DEBUG] [Thread-25594] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:39:26.369 [DEBUG] [Thread-25594] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:39:26.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:39:26.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:39:26.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:39:26.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:39:26.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:39:26.394 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:39:26.394 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:39:26.395 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:39:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:39:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.943495 -999.00  +15.10   6.86     64   +8.40 1 2 1 1 1     0    0 5.47 -50.95 ZNEsW 8.8 6.9 267.6 11.9 15.7 -23.0 15.6 -21.7 15.3 -21.6 15.6 -22.4
2025-11-13T00:39:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:39:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:39:26.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.943495
2025-11-13T00:39:26.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:39:26.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:39:26.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:39:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:39:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:39:26.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:38:54', tmtdew=8.24, humidity=57.93, cloud=0.0, wind=13.85, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:38:55', seeing=1.0, atlas_timestamp='2025-11-12T22:38:37.968', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:37:00')
2025-11-13T00:39:26.397 [DEBUG] [Thread-25594] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:39:26.481 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:39:26.493 [DEBUG] [Thread-25597] [transport.py] [_log()] starting thread (client mode): 0x1737c0d0
2025-11-13T00:39:26.493 [DEBUG] [Thread-25597] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:39:26.508 [DEBUG] [Thread-25597] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:39:26.509 [INFO] [Thread-25597] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:39:26.516 [DEBUG] [Thread-25597] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:39:26.516 [DEBUG] [Thread-25597] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:39:26.516 [DEBUG] [Thread-25597] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:39:26.516 [DEBUG] [Thread-25597] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:39:26.516 [DEBUG] [Thread-25597] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:39:26.516 [DEBUG] [Thread-25597] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:39:26.516 [DEBUG] [Thread-25597] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:39:26.516 [DEBUG] [Thread-25597] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] client lang: <none>
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] server lang: <none>
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] kex follows: False
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] Compression: none
2025-11-13T00:39:26.517 [DEBUG] [Thread-25597] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:39:26.575 [DEBUG] [Thread-25597] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:39:26.575 [DEBUG] [Thread-25597] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:39:26.576 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:39:26.576 [DEBUG] [Thread-25597] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:39:26.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:39:26.638 [DEBUG] [Thread-25597] [transport.py] [_log()] userauth is OK
2025-11-13T00:39:26.638 [DEBUG] [Thread-25597] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:39:26.638 [DEBUG] [Thread-25597] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:39:26.639 [DEBUG] [Thread-25597] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:39:26.639 [DEBUG] [Thread-25597] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:39:26.661 [INFO] [Thread-25597] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:39:26.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:39:26.663 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:39:27.500 [DEBUG] [Thread-25597] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:39:27.500 [DEBUG] [Thread-25597] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:39:27.548 [DEBUG] [Thread-25597] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:39:27.548 [DEBUG] [Thread-25597] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:39:27.556 [DEBUG] [Thread-25597] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:39:27.564 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:39:27.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-11-13T00:39:27.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-11-13T00:39:27.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:39:27.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:39:27.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:39:27.588 [DEBUG] [Thread-25597] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:39:28.142 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:28.143 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:34.436 [DEBUG] [Thread-25599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:49.481 [DEBUG] [Thread-25600 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:39:57.584 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:39:57.584 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:39:57.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-11-13T00:39:58.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 39, 26), 8.25, 57.88, 0.0, 14.79, 15.33, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:39:58.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:39:26
2025-11-13T00:39:58.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:39:58.494 [DEBUG] [Thread-25601] [transport.py] [_log()] starting thread (client mode): 0x14921c60
2025-11-13T00:39:58.494 [DEBUG] [Thread-25601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:39:58.509 [DEBUG] [Thread-25601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:39:58.509 [INFO] [Thread-25601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] client lang: <none>
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] server lang: <none>
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] kex follows: False
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] Compression: none
2025-11-13T00:39:58.511 [DEBUG] [Thread-25601] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:39:58.526 [DEBUG] [Thread-25601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:39:58.526 [DEBUG] [Thread-25601] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:39:58.526 [DEBUG] [Thread-25601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:39:58.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:39:58.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:39:58.527 [DEBUG] [Thread-25601] [transport.py] [_log()] userauth is OK
2025-11-13T00:39:58.527 [DEBUG] [Thread-25601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:39:58.527 [DEBUG] [Thread-25601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:39:58.528 [DEBUG] [Thread-25601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:39:58.528 [DEBUG] [Thread-25601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:39:58.540 [INFO] [Thread-25601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:39:58.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:39:59.150 [DEBUG] [Thread-25601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:39:59.150 [DEBUG] [Thread-25601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:39:59.151 [DEBUG] [Thread-25601] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:39:59.191 [DEBUG] [Thread-25601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:39:59.191 [DEBUG] [Thread-25601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:39:59.193 [DEBUG] [Thread-25601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:39:59.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:39:59.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:39:59.205 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:39:59.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:39:59.209 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:39:59.209 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:39:59.209 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:39:59.209 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:39:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:39:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.943842 -999.00  +15.10   8.10     64   +8.40 1 2 1 1 1     0    0 5.31 -49.76 ZNEsW 8.9 8.1 260.0 12.6 15.7 -23.0 15.6 -21.8 15.3 -21.4 15.6 -22.5
2025-11-13T00:39:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:39:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:39:59.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.943842
2025-11-13T00:39:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:39:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:39:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:39:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:39:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:39:59.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:39:26', tmtdew=8.25, humidity=57.88, cloud=0.0, wind=14.79, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:39:27', seeing=1.1, atlas_timestamp='2025-11-12T22:39:07.949', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:37:00')
2025-11-13T00:39:59.210 [DEBUG] [Thread-25601] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:39:59.285 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:39:59.295 [DEBUG] [Thread-25604] [transport.py] [_log()] starting thread (client mode): 0x1737c550
2025-11-13T00:39:59.295 [DEBUG] [Thread-25604] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:39:59.309 [DEBUG] [Thread-25604] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:39:59.309 [INFO] [Thread-25604] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] client lang: <none>
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] server lang: <none>
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] kex follows: False
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] Compression: none
2025-11-13T00:39:59.317 [DEBUG] [Thread-25604] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:39:59.373 [DEBUG] [Thread-25604] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:39:59.373 [DEBUG] [Thread-25604] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:39:59.373 [DEBUG] [Thread-25604] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:39:59.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:39:59.374 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:39:59.430 [DEBUG] [Thread-25604] [transport.py] [_log()] userauth is OK
2025-11-13T00:39:59.430 [DEBUG] [Thread-25604] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:39:59.430 [DEBUG] [Thread-25604] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:39:59.430 [DEBUG] [Thread-25604] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:39:59.430 [DEBUG] [Thread-25604] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:39:59.444 [INFO] [Thread-25604] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:39:59.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:39:59.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:40:00.258 [DEBUG] [Thread-25604] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:40:00.258 [DEBUG] [Thread-25604] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:40:00.308 [DEBUG] [Thread-25604] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:40:00.308 [DEBUG] [Thread-25604] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:40:00.317 [DEBUG] [Thread-25604] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:40:00.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:40:00.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-11-13T00:40:00.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-11-13T00:40:00.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:40:00.341 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:40:00.341 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:40:00.349 [DEBUG] [Thread-25604] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:40:04.516 [DEBUG] [Thread-25606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:40:07.126 [DEBUG] [Thread-25607 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:40:19.567 [DEBUG] [Thread-25608 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:40:28.348 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:40:28.349 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:40:30.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:40:30.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:40:30.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-11-13T00:40:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 39, 58), 8.28, 57.79, 0.0, 14.47, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:40:30.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:39:58
2025-11-13T00:40:31.102 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:40:31.254 [DEBUG] [Thread-25609] [transport.py] [_log()] starting thread (client mode): 0x1493e410
2025-11-13T00:40:31.254 [DEBUG] [Thread-25609] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:40:31.276 [DEBUG] [Thread-25609] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:40:31.276 [INFO] [Thread-25609] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:40:31.279 [DEBUG] [Thread-25609] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] client lang: <none>
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] server lang: <none>
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] kex follows: False
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] Compression: none
2025-11-13T00:40:31.280 [DEBUG] [Thread-25609] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:40:31.294 [DEBUG] [Thread-25609] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:40:31.294 [DEBUG] [Thread-25609] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:40:31.295 [DEBUG] [Thread-25609] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:40:31.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:40:31.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:40:31.295 [DEBUG] [Thread-25609] [transport.py] [_log()] userauth is OK
2025-11-13T00:40:31.295 [DEBUG] [Thread-25609] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:40:31.295 [DEBUG] [Thread-25609] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:40:31.295 [DEBUG] [Thread-25609] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:40:31.295 [DEBUG] [Thread-25609] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:40:31.304 [INFO] [Thread-25609] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:40:31.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:40:31.947 [DEBUG] [Thread-25609] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:40:31.947 [DEBUG] [Thread-25609] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:40:31.948 [DEBUG] [Thread-25609] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:40:31.988 [DEBUG] [Thread-25609] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:40:31.988 [DEBUG] [Thread-25609] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:40:31.990 [DEBUG] [Thread-25609] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:40:32.003 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:40:32.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:40:32.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:40:32.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:40:32.008 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:40:32.009 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:40:32.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:40:32.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:40:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:40:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.944189 -999.00  +15.10  10.86     63   +8.30 1 2 1 1 1     0    0 5.58 -43.34 ZNEsW 9.4 10.9 262.6 11.7 15.7 -22.9 15.6 -21.9 15.3 -21.5 15.6 -22.6
2025-11-13T00:40:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:40:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:40:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.944189
2025-11-13T00:40:32.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:40:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:40:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:40:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:40:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:40:32.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:39:58', tmtdew=8.28, humidity=57.79, cloud=0.0, wind=14.47, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:39:59', seeing=1.2, atlas_timestamp='2025-11-12T22:39:37.930', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:37:00')
2025-11-13T00:40:32.010 [DEBUG] [Thread-25609] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:40:32.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:40:32.097 [DEBUG] [Thread-25612] [transport.py] [_log()] starting thread (client mode): 0x1493e770
2025-11-13T00:40:32.097 [DEBUG] [Thread-25612] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:40:32.112 [DEBUG] [Thread-25612] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:40:32.112 [INFO] [Thread-25612] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:40:32.119 [DEBUG] [Thread-25612] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:40:32.119 [DEBUG] [Thread-25612] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:40:32.119 [DEBUG] [Thread-25612] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:40:32.119 [DEBUG] [Thread-25612] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:40:32.119 [DEBUG] [Thread-25612] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:40:32.119 [DEBUG] [Thread-25612] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:40:32.119 [DEBUG] [Thread-25612] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] client lang: <none>
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] server lang: <none>
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] kex follows: False
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] Compression: none
2025-11-13T00:40:32.120 [DEBUG] [Thread-25612] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:40:32.176 [DEBUG] [Thread-25612] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:40:32.176 [DEBUG] [Thread-25612] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:40:32.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:40:32.176 [DEBUG] [Thread-25612] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:40:32.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:40:32.233 [DEBUG] [Thread-25612] [transport.py] [_log()] userauth is OK
2025-11-13T00:40:32.233 [DEBUG] [Thread-25612] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:40:32.233 [DEBUG] [Thread-25612] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:40:32.234 [DEBUG] [Thread-25612] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:40:32.234 [DEBUG] [Thread-25612] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:40:32.251 [INFO] [Thread-25612] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:40:32.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:40:32.251 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:40:33.060 [DEBUG] [Thread-25612] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:40:33.060 [DEBUG] [Thread-25612] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:40:33.108 [DEBUG] [Thread-25612] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:40:33.109 [DEBUG] [Thread-25612] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:40:33.118 [DEBUG] [Thread-25612] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:40:33.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:40:33.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-11-13T00:40:33.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-11-13T00:40:33.145 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:40:33.145 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:40:33.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:40:33.153 [DEBUG] [Thread-25612] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:40:34.596 [DEBUG] [Thread-25614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:40:44.812 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:40:49.651 [DEBUG] [Thread-25615 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:41:03.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:41:03.175 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:41:03.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-11-13T00:41:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 40, 30), 8.33, 57.58, 0.0, 13.94, 15.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:41:03.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:40:30
2025-11-13T00:41:04.004 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:41:04.157 [DEBUG] [Thread-25616] [transport.py] [_log()] starting thread (client mode): 0x1493c250
2025-11-13T00:41:04.157 [DEBUG] [Thread-25616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:41:04.173 [DEBUG] [Thread-25616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:41:04.173 [INFO] [Thread-25616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] client lang: <none>
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] server lang: <none>
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] kex follows: False
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] Compression: none
2025-11-13T00:41:04.176 [DEBUG] [Thread-25616] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:41:04.191 [DEBUG] [Thread-25616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:41:04.191 [DEBUG] [Thread-25616] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:41:04.191 [DEBUG] [Thread-25616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:41:04.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:41:04.191 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:41:04.192 [DEBUG] [Thread-25616] [transport.py] [_log()] userauth is OK
2025-11-13T00:41:04.192 [DEBUG] [Thread-25616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:41:04.192 [DEBUG] [Thread-25616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:41:04.192 [DEBUG] [Thread-25616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:41:04.192 [DEBUG] [Thread-25616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:41:04.201 [INFO] [Thread-25616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:41:04.201 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:41:04.687 [DEBUG] [Thread-25618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:41:05.005 [DEBUG] [Thread-25616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:41:05.006 [DEBUG] [Thread-25616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:41:05.006 [DEBUG] [Thread-25616] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:41:05.047 [DEBUG] [Thread-25616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:41:05.047 [DEBUG] [Thread-25616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:41:05.049 [DEBUG] [Thread-25616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:41:05.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:41:05.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:41:05.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:41:05.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:41:05.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:41:05.066 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:41:05.066 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:41:05.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:41:05.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:41:05.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.944884 -999.00  +15.10   9.03     62   +8.10 1 2 1 1 1     0    0 5.85 -37.15 ZNEsW 10.3 9.0 267.6 10.6 15.7 -23.0 15.6 -22.0 15.3 -21.6 15.6 -22.5
2025-11-13T00:41:05.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:41:05.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:41:05.066 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.944884
2025-11-13T00:41:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:41:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:41:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:41:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:41:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:41:05.067 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:40:30', tmtdew=8.33, humidity=57.58, cloud=0.0, wind=13.94, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:41:03', seeing=0.96, atlas_timestamp='2025-11-12T22:40:37.978', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:37:00')
2025-11-13T00:41:05.067 [DEBUG] [Thread-25616] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:41:05.141 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:41:05.153 [DEBUG] [Thread-25620] [transport.py] [_log()] starting thread (client mode): 0x19dda4d0
2025-11-13T00:41:05.153 [DEBUG] [Thread-25620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:41:05.171 [DEBUG] [Thread-25620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:41:05.172 [INFO] [Thread-25620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:41:05.179 [DEBUG] [Thread-25620] [transport.py] [_log()] client lang: <none>
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] server lang: <none>
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] kex follows: False
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] Compression: none
2025-11-13T00:41:05.180 [DEBUG] [Thread-25620] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:41:05.240 [DEBUG] [Thread-25620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:41:05.241 [DEBUG] [Thread-25620] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:41:05.241 [DEBUG] [Thread-25620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:41:05.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:41:05.242 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:41:05.298 [DEBUG] [Thread-25620] [transport.py] [_log()] userauth is OK
2025-11-13T00:41:05.298 [DEBUG] [Thread-25620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:41:05.299 [DEBUG] [Thread-25620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:41:05.299 [DEBUG] [Thread-25620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:41:05.299 [DEBUG] [Thread-25620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:41:05.318 [INFO] [Thread-25620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:41:05.318 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:41:05.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:41:06.174 [DEBUG] [Thread-25620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:41:06.174 [DEBUG] [Thread-25620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:41:06.222 [DEBUG] [Thread-25620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:41:06.222 [DEBUG] [Thread-25620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:41:06.231 [DEBUG] [Thread-25620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:41:06.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:41:06.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-11-13T00:41:06.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-11-13T00:41:06.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:41:06.260 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:41:06.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:41:06.269 [DEBUG] [Thread-25620] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:41:07.184 [DEBUG] [Thread-25622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:41:19.723 [DEBUG] [Thread-25623 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:41:28.551 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:41:28.552 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:41:34.774 [DEBUG] [Thread-25624 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:41:36.290 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:41:36.291 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:41:36.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-11-13T00:41:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 41, 2), 8.34, 57.55, 0.0, 14.4, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:41:36.985 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:41:02
2025-11-13T00:41:37.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:41:37.275 [DEBUG] [Thread-25625] [transport.py] [_log()] starting thread (client mode): 0x11f03b50
2025-11-13T00:41:37.275 [DEBUG] [Thread-25625] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:41:37.295 [DEBUG] [Thread-25625] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:41:37.295 [INFO] [Thread-25625] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:41:37.298 [DEBUG] [Thread-25625] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:41:37.298 [DEBUG] [Thread-25625] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:41:37.298 [DEBUG] [Thread-25625] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:41:37.298 [DEBUG] [Thread-25625] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:41:37.298 [DEBUG] [Thread-25625] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:41:37.298 [DEBUG] [Thread-25625] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:41:37.298 [DEBUG] [Thread-25625] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:41:37.298 [DEBUG] [Thread-25625] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] client lang: <none>
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] server lang: <none>
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] kex follows: False
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] Compression: none
2025-11-13T00:41:37.299 [DEBUG] [Thread-25625] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:41:37.313 [DEBUG] [Thread-25625] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:41:37.313 [DEBUG] [Thread-25625] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:41:37.313 [DEBUG] [Thread-25625] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:41:37.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:41:37.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:41:37.314 [DEBUG] [Thread-25625] [transport.py] [_log()] userauth is OK
2025-11-13T00:41:37.314 [DEBUG] [Thread-25625] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:41:37.314 [DEBUG] [Thread-25625] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:41:37.314 [DEBUG] [Thread-25625] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:41:37.314 [DEBUG] [Thread-25625] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:41:37.324 [INFO] [Thread-25625] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:41:37.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:41:37.914 [DEBUG] [Thread-25625] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:41:37.914 [DEBUG] [Thread-25625] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:41:37.915 [DEBUG] [Thread-25625] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:41:37.955 [DEBUG] [Thread-25625] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:41:37.955 [DEBUG] [Thread-25625] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:41:37.957 [DEBUG] [Thread-25625] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:41:37.970 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:41:37.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:41:37.971 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:41:37.972 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:41:37.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:41:37.975 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:41:37.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:41:37.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.945231 -999.00  +15.20   6.61     62   +8.10 1 2 1 1 1     0    0 5.88 -34.14 ZNEsW 9.1 6.6 261.8 13.4 15.7 -23.0 15.6 -22.0 15.3 -21.7 15.6 -22.6
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.945231
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:41:37.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:41:02', tmtdew=8.34, humidity=57.55, cloud=0.0, wind=14.4, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:41:35', seeing=1.11, atlas_timestamp='2025-11-12T22:41:07.958', atlas_cloud=2, atlas_rain=1, zp_data=[0.06724999999999959, 0.09525000000000006, 0.2872500000000002, 0.3290000000000006, 0.20149999999999935, 0.10725000000000051, -0.0039999999999995595, 0.035250000000001336, 0.08699999999999974, 0.2629999999999999, 0.43125000000000036, 0.23099999999999987, 0.2729999999999997, 0.0722499999999986, 0.027999999999998693, 0.027999999999998693, 0.12725000000000009, 0.33949999999999925, 0.6039999999999992, 0.5152499999999991, 0.15349999999999753, 0.09525000000000006, 0.02275000000000027, 0.04075000000000095, 0.12649999999999828, 0.33750000000000036, 0.7157499999999999, 0.4344999999999999, 0.25, 0.10800000000000054, 0.23900000000000077, 0.15050000000000097, 0.15374999999999872], zp_timestamp='2025-11-12T22:37:00')
2025-11-13T00:41:37.977 [DEBUG] [Thread-25625] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:41: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-11-13T00:41:38.062 [DEBUG] [Thread-25628] [transport.py] [_log()] starting thread (client mode): 0x19dd9c90
2025-11-13T00:41:38.062 [DEBUG] [Thread-25628] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:41:38.077 [DEBUG] [Thread-25628] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:41:38.077 [INFO] [Thread-25628] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] client lang: <none>
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] server lang: <none>
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] kex follows: False
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] Compression: none
2025-11-13T00:41:38.085 [DEBUG] [Thread-25628] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:41:38.141 [DEBUG] [Thread-25628] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:41:38.141 [DEBUG] [Thread-25628] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:41:38.141 [DEBUG] [Thread-25628] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:41:38.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:41:38.141 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:41:38.198 [DEBUG] [Thread-25628] [transport.py] [_log()] userauth is OK
2025-11-13T00:41:38.198 [DEBUG] [Thread-25628] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:41:38.198 [DEBUG] [Thread-25628] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:41:38.198 [DEBUG] [Thread-25628] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:41:38.198 [DEBUG] [Thread-25628] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:41:38.211 [INFO] [Thread-25628] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:41:38.211 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:41:38.212 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:41:39.016 [DEBUG] [Thread-25628] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:41:39.016 [DEBUG] [Thread-25628] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:41:39.064 [DEBUG] [Thread-25628] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:41:39.064 [DEBUG] [Thread-25628] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:41:39.072 [DEBUG] [Thread-25628] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:41:39.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:41:39.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-11-13T00:41:39.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-11-13T00:41:39.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:41:39.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:41:39.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:41:39.103 [DEBUG] [Thread-25628] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:41:49.802 [DEBUG] [Thread-25630 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:04.857 [DEBUG] [Thread-25631 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:07.237 [DEBUG] [Thread-25632 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:09.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:42:09.125 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:42:09.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-11-13T00:42:09.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 41, 34), 8.66, 56.46, 0.0, 16.06, 15.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:42:09.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:41:34
2025-11-13T00:42:09.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:42:10.036 [DEBUG] [Thread-25633] [transport.py] [_log()] starting thread (client mode): 0x19ddad10
2025-11-13T00:42:10.036 [DEBUG] [Thread-25633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:42:10.056 [DEBUG] [Thread-25633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:42:10.056 [INFO] [Thread-25633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:42:10.060 [DEBUG] [Thread-25633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:42:10.060 [DEBUG] [Thread-25633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:42:10.060 [DEBUG] [Thread-25633] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:42:10.060 [DEBUG] [Thread-25633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:42:10.060 [DEBUG] [Thread-25633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:42:10.060 [DEBUG] [Thread-25633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:42:10.060 [DEBUG] [Thread-25633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:42:10.060 [DEBUG] [Thread-25633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] client lang: <none>
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] server lang: <none>
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] kex follows: False
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:42:10.061 [DEBUG] [Thread-25633] [transport.py] [_log()] Compression: none
2025-11-13T00:42:10.062 [DEBUG] [Thread-25633] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:42:10.072 [DEBUG] [Thread-25633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:42:10.073 [DEBUG] [Thread-25633] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:42:10.074 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:42:10.074 [DEBUG] [Thread-25633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:42:10.075 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:42:10.077 [DEBUG] [Thread-25633] [transport.py] [_log()] userauth is OK
2025-11-13T00:42:10.077 [DEBUG] [Thread-25633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:42:10.077 [DEBUG] [Thread-25633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:42:10.077 [DEBUG] [Thread-25633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:42:10.077 [DEBUG] [Thread-25633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:42:10.102 [INFO] [Thread-25633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:42:10.103 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:42:10.904 [DEBUG] [Thread-25633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:42:10.904 [DEBUG] [Thread-25633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:42:10.905 [DEBUG] [Thread-25633] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:42:10.946 [DEBUG] [Thread-25633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:42:10.946 [DEBUG] [Thread-25633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:42:10.949 [DEBUG] [Thread-25633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:42:10.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:42:10.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:42:10.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:42:10.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:42:10.970 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:42:10.972 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:42:10.972 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:42:10.972 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:42:10.972 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:42:10.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.945578 -999.00  +15.20   9.24     62   +8.00 1 2 1 1 1     0    0 5.83 -29.50 ZNEsW 10.8 9.2 263.2 11.4 15.7 -23.1 15.6 -22.0 15.3 -21.7 15.6 -22.5
2025-11-13T00:42:10.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:42:10.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:42:10.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.945578
2025-11-13T00:42:10.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:42:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:42:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:42:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:42:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:42:10.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:41:34', tmtdew=8.66, humidity=56.46, cloud=0.0, wind=16.06, temperature=15.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:42:07', seeing=1.11, atlas_timestamp='2025-11-12T22:41:37.939', atlas_cloud=2, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:39:00')
2025-11-13T00:42:10.974 [DEBUG] [Thread-25633] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:42:11.059 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:42:11.071 [DEBUG] [Thread-25636] [transport.py] [_log()] starting thread (client mode): 0x14989510
2025-11-13T00:42:11.071 [DEBUG] [Thread-25636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:42:11.087 [DEBUG] [Thread-25636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:42:11.088 [INFO] [Thread-25636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:42:11.095 [DEBUG] [Thread-25636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:42:11.095 [DEBUG] [Thread-25636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:42:11.095 [DEBUG] [Thread-25636] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:42:11.095 [DEBUG] [Thread-25636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] client lang: <none>
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] server lang: <none>
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] kex follows: False
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] Compression: none
2025-11-13T00:42:11.096 [DEBUG] [Thread-25636] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:42:11.155 [DEBUG] [Thread-25636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:42:11.156 [DEBUG] [Thread-25636] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:42:11.156 [DEBUG] [Thread-25636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:42:11.156 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:42:11.157 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:42:11.210 [DEBUG] [Thread-25636] [transport.py] [_log()] userauth is OK
2025-11-13T00:42:11.211 [DEBUG] [Thread-25636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:42:11.211 [DEBUG] [Thread-25636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:42:11.211 [DEBUG] [Thread-25636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:42:11.212 [DEBUG] [Thread-25636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:42:11.231 [INFO] [Thread-25636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:42:11.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:42:11.233 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:42:12.127 [DEBUG] [Thread-25636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:42:12.128 [DEBUG] [Thread-25636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:42:12.176 [DEBUG] [Thread-25636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:42:12.176 [DEBUG] [Thread-25636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:42:12.185 [DEBUG] [Thread-25636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:42:12.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:42:12.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-11-13T00:42:12.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-11-13T00:42:12.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:42:12.218 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:42:12.218 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:42:12.226 [DEBUG] [Thread-25636] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:42:19.889 [DEBUG] [Thread-25638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:28.754 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:28.756 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:34.956 [DEBUG] [Thread-25639 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:42.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:42:42.249 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:42:42.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-11-13T00:42:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 42, 38), 8.76, 55.98, 0.0, 15.81, 15.53, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:42:42.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:42:38
2025-11-13T00:42:43.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:42:43.158 [DEBUG] [Thread-25640] [transport.py] [_log()] starting thread (client mode): 0x19dd9c90
2025-11-13T00:42:43.158 [DEBUG] [Thread-25640] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:42:43.179 [DEBUG] [Thread-25640] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:42:43.179 [INFO] [Thread-25640] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:42:43.182 [DEBUG] [Thread-25640] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] client lang: <none>
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] server lang: <none>
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] kex follows: False
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] Compression: none
2025-11-13T00:42:43.183 [DEBUG] [Thread-25640] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:42:43.201 [DEBUG] [Thread-25640] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:42:43.201 [DEBUG] [Thread-25640] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:42:43.202 [DEBUG] [Thread-25640] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:42:43.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:42:43.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:42:43.204 [DEBUG] [Thread-25640] [transport.py] [_log()] userauth is OK
2025-11-13T00:42:43.204 [DEBUG] [Thread-25640] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:42:43.204 [DEBUG] [Thread-25640] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:42:43.204 [DEBUG] [Thread-25640] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:42:43.205 [DEBUG] [Thread-25640] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:42:43.220 [INFO] [Thread-25640] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:42:43.221 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:42:43.856 [DEBUG] [Thread-25640] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:42:43.857 [DEBUG] [Thread-25640] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:42:43.857 [DEBUG] [Thread-25640] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:42:43.897 [DEBUG] [Thread-25640] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:42:43.898 [DEBUG] [Thread-25640] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:42:43.901 [DEBUG] [Thread-25640] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:42:43.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:42:43.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:42:43.917 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:42:43.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:42:43.923 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:42:43.925 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:42:43.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:42:43.926 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:42:43.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:42:43.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.945925 -999.00  +15.20   8.01     61   +7.90 1 2 1 1 1     0    0 6.08 -27.44 ZNEsW 10.6 8.0 263.8 13.3 15.7 -23.0 15.6 -21.9 15.3 -21.7 15.6 -22.5
2025-11-13T00:42:43.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:42:43.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:42:43.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.945925
2025-11-13T00:42:43.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:42:43.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:42:43.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:42:43.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:42:43.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:42:43.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:42:38', tmtdew=8.76, humidity=55.98, cloud=0.0, wind=15.81, temperature=15.53, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:42:39', seeing=1.01, atlas_timestamp='2025-11-12T22:42:07.920', atlas_cloud=2, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:39:00')
2025-11-13T00:42:43.928 [DEBUG] [Thread-25640] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:42:44.012 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:42:44.023 [DEBUG] [Thread-25643] [transport.py] [_log()] starting thread (client mode): 0x1737f010
2025-11-13T00:42:44.024 [DEBUG] [Thread-25643] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:42:44.038 [DEBUG] [Thread-25643] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:42:44.038 [INFO] [Thread-25643] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] client lang: <none>
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] server lang: <none>
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] kex follows: False
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:42:44.046 [DEBUG] [Thread-25643] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:42:44.047 [DEBUG] [Thread-25643] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:42:44.047 [DEBUG] [Thread-25643] [transport.py] [_log()] Compression: none
2025-11-13T00:42:44.047 [DEBUG] [Thread-25643] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:42:44.106 [DEBUG] [Thread-25643] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:42:44.106 [DEBUG] [Thread-25643] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:42:44.107 [DEBUG] [Thread-25643] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:42:44.107 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:42:44.108 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:42:44.163 [DEBUG] [Thread-25643] [transport.py] [_log()] userauth is OK
2025-11-13T00:42:44.163 [DEBUG] [Thread-25643] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:42:44.163 [DEBUG] [Thread-25643] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:42:44.163 [DEBUG] [Thread-25643] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:42:44.163 [DEBUG] [Thread-25643] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:42:44.182 [INFO] [Thread-25643] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:42:44.182 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:42:44.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:42:44.995 [DEBUG] [Thread-25643] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:42:45.005 [DEBUG] [Thread-25643] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:42:45.044 [DEBUG] [Thread-25643] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:42:45.044 [DEBUG] [Thread-25643] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:42:45.053 [DEBUG] [Thread-25643] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:42:45.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:42:45.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-11-13T00:42:45.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-11-13T00:42:45.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:42:45.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:42:45.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:42:45.088 [DEBUG] [Thread-25643] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:42:48.341 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:49.992 [DEBUG] [Thread-25645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:51.462 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:42:56.512 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:02.927 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:05.042 [DEBUG] [Thread-25646 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:07.294 [DEBUG] [Thread-25647 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:15.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:43:15.111 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:43:15.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-11-13T00:43:15.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 43, 10), 8.75, 56.03, 0.0, 16.04, 15.52, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:43:15.759 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:43:10
2025-11-13T00:43:15.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:43:16.030 [DEBUG] [Thread-25648] [transport.py] [_log()] starting thread (client mode): 0x19ddb850
2025-11-13T00:43:16.030 [DEBUG] [Thread-25648] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:43:16.050 [DEBUG] [Thread-25648] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:43:16.050 [INFO] [Thread-25648] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:43:16.053 [DEBUG] [Thread-25648] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:43:16.053 [DEBUG] [Thread-25648] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] client lang: <none>
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] server lang: <none>
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] kex follows: False
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] Compression: none
2025-11-13T00:43:16.054 [DEBUG] [Thread-25648] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:43:16.068 [DEBUG] [Thread-25648] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:43:16.068 [DEBUG] [Thread-25648] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:43:16.069 [DEBUG] [Thread-25648] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:43:16.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:43:16.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:43:16.071 [DEBUG] [Thread-25648] [transport.py] [_log()] userauth is OK
2025-11-13T00:43:16.071 [DEBUG] [Thread-25648] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:43:16.071 [DEBUG] [Thread-25648] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:43:16.071 [DEBUG] [Thread-25648] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:43:16.071 [DEBUG] [Thread-25648] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:43:16.089 [INFO] [Thread-25648] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:43:16.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:43:16.721 [DEBUG] [Thread-25648] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:43:16.721 [DEBUG] [Thread-25648] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:43:16.722 [DEBUG] [Thread-25648] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:43:16.761 [DEBUG] [Thread-25648] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:43:16.762 [DEBUG] [Thread-25648] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:43:16.765 [DEBUG] [Thread-25648] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:43:16.776 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:43:16.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:43:16.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:43:16.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:43:16.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:43:16.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:43:16.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:43:16.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:43:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:43:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.946272 -999.00  +15.30  10.06     61   +7.90 1 2 1 1 1     0    0 6.07 -23.88 ZNEsW 9.5 10.1 265.0 12.6 15.7 -23.0 15.6 -21.9 15.3 -21.7 15.6 -22.5
2025-11-13T00:43:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:43:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:43:16.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.946272
2025-11-13T00:43:16.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:43:16.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:43:16.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:43:16.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:43:16.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:43:16.790 [DEBUG] [Thread-25648] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:43:16.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:43:10', tmtdew=8.75, humidity=56.03, cloud=0.0, wind=16.04, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:43:11', seeing=1.23, atlas_timestamp='2025-11-12T22:42:37.901', atlas_cloud=2, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:39:00')
2025-11-13T00:43:16.874 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:43:16.886 [DEBUG] [Thread-25651] [transport.py] [_log()] starting thread (client mode): 0x17344220
2025-11-13T00:43:16.886 [DEBUG] [Thread-25651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:43:16.900 [DEBUG] [Thread-25651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:43:16.901 [INFO] [Thread-25651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:43:16.908 [DEBUG] [Thread-25651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:43:16.908 [DEBUG] [Thread-25651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:43:16.908 [DEBUG] [Thread-25651] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:43:16.908 [DEBUG] [Thread-25651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:43:16.908 [DEBUG] [Thread-25651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] client lang: <none>
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] server lang: <none>
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] kex follows: False
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] Compression: none
2025-11-13T00:43:16.909 [DEBUG] [Thread-25651] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:43:16.967 [DEBUG] [Thread-25651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:43:16.967 [DEBUG] [Thread-25651] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:43:16.968 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:43:16.969 [DEBUG] [Thread-25651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:43:16.969 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:43:17.023 [DEBUG] [Thread-25651] [transport.py] [_log()] userauth is OK
2025-11-13T00:43:17.023 [DEBUG] [Thread-25651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:43:17.023 [DEBUG] [Thread-25651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:43:17.023 [DEBUG] [Thread-25651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:43:17.023 [DEBUG] [Thread-25651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:43:17.042 [INFO] [Thread-25651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:43:17.043 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:43:17.043 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:43:17.911 [DEBUG] [Thread-25651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:43:17.912 [DEBUG] [Thread-25651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:43:17.961 [DEBUG] [Thread-25651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:43:17.961 [DEBUG] [Thread-25651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:43:17.970 [DEBUG] [Thread-25651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:43:17.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:43:17.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-11-13T00:43:17.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:43:17.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:43:17.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:43:17.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:43:18.007 [DEBUG] [Thread-25651] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:43:20.074 [DEBUG] [Thread-25653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:22.264 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:26.642 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:28.961 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:28.962 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:35.128 [DEBUG] [Thread-25654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:46.024 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:48.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:43:48.030 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:43: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-11-13T00:43:48.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 43, 42), 8.86, 55.46, 0.0, 16.59, 15.48, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:43:48.670 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:43:42
2025-11-13T00:43:48.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:43:48.942 [DEBUG] [Thread-25655] [transport.py] [_log()] starting thread (client mode): 0x173476a0
2025-11-13T00:43:48.942 [DEBUG] [Thread-25655] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:43:48.963 [DEBUG] [Thread-25655] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:43:48.963 [INFO] [Thread-25655] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] client lang: <none>
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] server lang: <none>
2025-11-13T00:43:48.967 [DEBUG] [Thread-25655] [transport.py] [_log()] kex follows: False
2025-11-13T00:43:48.968 [DEBUG] [Thread-25655] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:43:48.968 [DEBUG] [Thread-25655] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:43:48.968 [DEBUG] [Thread-25655] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:43:48.968 [DEBUG] [Thread-25655] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:43:48.968 [DEBUG] [Thread-25655] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:43:48.968 [DEBUG] [Thread-25655] [transport.py] [_log()] Compression: none
2025-11-13T00:43:48.968 [DEBUG] [Thread-25655] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:43:48.987 [DEBUG] [Thread-25655] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:43:48.988 [DEBUG] [Thread-25655] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:43:48.989 [DEBUG] [Thread-25655] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:43:48.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:43:48.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:43:48.991 [DEBUG] [Thread-25655] [transport.py] [_log()] userauth is OK
2025-11-13T00:43:48.991 [DEBUG] [Thread-25655] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:43:48.991 [DEBUG] [Thread-25655] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:43:48.991 [DEBUG] [Thread-25655] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:43:48.991 [DEBUG] [Thread-25655] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:43:49.006 [INFO] [Thread-25655] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:43:49.006 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:43:49.598 [DEBUG] [Thread-25655] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:43:49.599 [DEBUG] [Thread-25655] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:43:49.599 [DEBUG] [Thread-25655] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:43:49.639 [DEBUG] [Thread-25655] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:43:49.640 [DEBUG] [Thread-25655] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:43:49.643 [DEBUG] [Thread-25655] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:43:49.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:43:49.655 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:43:49.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:43:49.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:43:49.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:43:49.664 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:43:49.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:43:49.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:43:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:43:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.946620 -999.00  +15.30   9.38     61   +7.90 1 2 1 1 1     0    0 6.19 -18.34 ZNEsW 12.7 9.4 256.2 14.2 15.7 -23.1 15.6 -21.9 15.3 -21.6 15.6 -22.5
2025-11-13T00:43:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:43:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:43:49.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.946620
2025-11-13T00:43:49.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:43:49.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:43:49.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:43:49.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:43:49.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:43:49.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:43:42', tmtdew=8.86, humidity=55.46, cloud=0.0, wind=16.59, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:43:43', seeing=1.23, atlas_timestamp='2025-11-12T22:43:07.968', atlas_cloud=2, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:39:00')
2025-11-13T00:43:49.667 [DEBUG] [Thread-25655] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:43:49.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:43:49.763 [DEBUG] [Thread-25658] [transport.py] [_log()] starting thread (client mode): 0x1493eda0
2025-11-13T00:43:49.764 [DEBUG] [Thread-25658] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:43:49.779 [DEBUG] [Thread-25658] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:43:49.779 [INFO] [Thread-25658] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:43:49.787 [DEBUG] [Thread-25658] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:43:49.787 [DEBUG] [Thread-25658] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:43:49.787 [DEBUG] [Thread-25658] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:43:49.787 [DEBUG] [Thread-25658] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:43:49.787 [DEBUG] [Thread-25658] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:43:49.787 [DEBUG] [Thread-25658] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:43:49.787 [DEBUG] [Thread-25658] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] client lang: <none>
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] server lang: <none>
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] kex follows: False
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] Compression: none
2025-11-13T00:43:49.788 [DEBUG] [Thread-25658] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:43:49.847 [DEBUG] [Thread-25658] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:43:49.847 [DEBUG] [Thread-25658] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:43:49.848 [DEBUG] [Thread-25658] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:43:49.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:43:49.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:43:49.907 [DEBUG] [Thread-25658] [transport.py] [_log()] userauth is OK
2025-11-13T00:43:49.907 [DEBUG] [Thread-25658] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:43:49.907 [DEBUG] [Thread-25658] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:43:49.907 [DEBUG] [Thread-25658] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:43:49.907 [DEBUG] [Thread-25658] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:43:49.932 [INFO] [Thread-25658] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:43:49.933 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:43:49.933 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:43:50.158 [DEBUG] [Thread-25660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:50.409 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:43:50.811 [DEBUG] [Thread-25658] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:43:50.811 [DEBUG] [Thread-25658] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:43:50.858 [DEBUG] [Thread-25658] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:43:50.858 [DEBUG] [Thread-25658] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:43:50.868 [DEBUG] [Thread-25658] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:43:50.877 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:43:50.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-11-13T00:43:50.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-11-13T00:43:50.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:43:50.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:43:50.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:43:50.903 [DEBUG] [Thread-25658] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:43:56.538 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:00.937 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:05.204 [DEBUG] [Thread-25661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:07.363 [DEBUG] [Thread-25662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:20.235 [DEBUG] [Thread-25663 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:20.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:44:20.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:44:20.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-11-13T00:44:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 44, 14), 8.89, 55.35, 0.0, 16.82, 15.52, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:44:21.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:44:14
2025-11-13T00:44:21.693 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:44:21.838 [DEBUG] [Thread-25664] [transport.py] [_log()] starting thread (client mode): 0x17345d80
2025-11-13T00:44:21.839 [DEBUG] [Thread-25664] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:44:21.859 [DEBUG] [Thread-25664] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:44:21.859 [INFO] [Thread-25664] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] client lang: <none>
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] server lang: <none>
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] kex follows: False
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:44:21.862 [DEBUG] [Thread-25664] [transport.py] [_log()] Compression: none
2025-11-13T00:44:21.863 [DEBUG] [Thread-25664] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:44:21.882 [DEBUG] [Thread-25664] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:44:21.883 [DEBUG] [Thread-25664] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:44:21.883 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:44:21.884 [DEBUG] [Thread-25664] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:44:21.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:44:21.886 [DEBUG] [Thread-25664] [transport.py] [_log()] userauth is OK
2025-11-13T00:44:21.886 [DEBUG] [Thread-25664] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:44:21.886 [DEBUG] [Thread-25664] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:44:21.886 [DEBUG] [Thread-25664] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:44:21.886 [DEBUG] [Thread-25664] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:44:21.911 [INFO] [Thread-25664] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:44:21.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:44:22.537 [DEBUG] [Thread-25664] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:44:22.538 [DEBUG] [Thread-25664] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:44:22.538 [DEBUG] [Thread-25664] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:44:22.578 [DEBUG] [Thread-25664] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:44:22.579 [DEBUG] [Thread-25664] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:44:22.581 [DEBUG] [Thread-25664] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:44:22.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:44:22.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:44:22.596 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:44:22.598 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:44:22.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:44:22.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:44:22.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:44:22.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:44:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:44:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.947314 -999.00  +15.30   9.43     60   +7.70 1 2 1 1 1     0    0 6.47 -12.04 ZNEsW 8.9 9.4 254.0 12.0 15.7 -23.0 15.6 -22.1 15.3 -21.6 15.6 -22.7
2025-11-13T00:44:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:44:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:44:22.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.947314
2025-11-13T00:44:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:44:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:44:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:44:22.608 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:44:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:44:22.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:44:14', tmtdew=8.89, humidity=55.35, cloud=0.0, wind=16.82, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:44:15', seeing=1.08, atlas_timestamp='2025-11-12T22:44:07.930', atlas_cloud=2, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:39:00')
2025-11-13T00:44:22.609 [DEBUG] [Thread-25664] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:44:22.692 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:44:22.705 [DEBUG] [Thread-25667] [transport.py] [_log()] starting thread (client mode): 0x17347b80
2025-11-13T00:44:22.705 [DEBUG] [Thread-25667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:44:22.723 [DEBUG] [Thread-25667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:44:22.724 [INFO] [Thread-25667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:44:22.731 [DEBUG] [Thread-25667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] client lang: <none>
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] server lang: <none>
2025-11-13T00:44:22.732 [DEBUG] [Thread-25667] [transport.py] [_log()] kex follows: False
2025-11-13T00:44:22.733 [DEBUG] [Thread-25667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:44:22.733 [DEBUG] [Thread-25667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:44:22.733 [DEBUG] [Thread-25667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:44:22.733 [DEBUG] [Thread-25667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:44:22.733 [DEBUG] [Thread-25667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:44:22.733 [DEBUG] [Thread-25667] [transport.py] [_log()] Compression: none
2025-11-13T00:44:22.733 [DEBUG] [Thread-25667] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:44:22.790 [DEBUG] [Thread-25667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:44:22.791 [DEBUG] [Thread-25667] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:44:22.791 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:44:22.792 [DEBUG] [Thread-25667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:44:22.793 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:44:22.847 [DEBUG] [Thread-25667] [transport.py] [_log()] userauth is OK
2025-11-13T00:44:22.847 [DEBUG] [Thread-25667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:44:22.847 [DEBUG] [Thread-25667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:44:22.848 [DEBUG] [Thread-25667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:44:22.848 [DEBUG] [Thread-25667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:44:22.866 [INFO] [Thread-25667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:44:22.867 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:44:22.867 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:44:23.711 [DEBUG] [Thread-25667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:44:23.711 [DEBUG] [Thread-25667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:44:23.759 [DEBUG] [Thread-25667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:44:23.759 [DEBUG] [Thread-25667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:44:23.768 [DEBUG] [Thread-25667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:44:23.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:44:23.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-11-13T00:44:23.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:44:23.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:44:23.796 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:44:23.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:44:23.804 [DEBUG] [Thread-25667] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:44:29.163 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:29.164 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:35.275 [DEBUG] [Thread-25669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:50.325 [DEBUG] [Thread-25670 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:44:53.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:44:53.827 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:44:53.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-11-13T00:44:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 44, 46), 9.07, 54.58, 0.0, 13.94, 15.6, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:44:54.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:44:46
2025-11-13T00:44:54.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:44:54.738 [DEBUG] [Thread-25671] [transport.py] [_log()] starting thread (client mode): 0x17346200
2025-11-13T00:44:54.738 [DEBUG] [Thread-25671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:44:54.758 [DEBUG] [Thread-25671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:44:54.758 [INFO] [Thread-25671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:44:54.761 [DEBUG] [Thread-25671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:44:54.761 [DEBUG] [Thread-25671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:44:54.761 [DEBUG] [Thread-25671] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:44:54.761 [DEBUG] [Thread-25671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:44:54.761 [DEBUG] [Thread-25671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:44:54.761 [DEBUG] [Thread-25671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] client lang: <none>
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] server lang: <none>
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] kex follows: False
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] Compression: none
2025-11-13T00:44:54.762 [DEBUG] [Thread-25671] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:44:54.782 [DEBUG] [Thread-25671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:44:54.783 [DEBUG] [Thread-25671] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:44:54.783 [DEBUG] [Thread-25671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:44:54.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:44:54.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:44:54.785 [DEBUG] [Thread-25671] [transport.py] [_log()] userauth is OK
2025-11-13T00:44:54.785 [DEBUG] [Thread-25671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:44:54.785 [DEBUG] [Thread-25671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:44:54.785 [DEBUG] [Thread-25671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:44:54.785 [DEBUG] [Thread-25671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:44:54.811 [INFO] [Thread-25671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:44:54.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:44:55.426 [DEBUG] [Thread-25671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:44:55.426 [DEBUG] [Thread-25671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:44:55.426 [DEBUG] [Thread-25671] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:44:55.467 [DEBUG] [Thread-25671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:44:55.467 [DEBUG] [Thread-25671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:44:55.470 [DEBUG] [Thread-25671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:44:55.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:44:55.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:44:55.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:44:55.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:44:55.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:44:55.495 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:44:55.495 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:44:55.496 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:44:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:44:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.947661 -999.00  +15.30  12.23     60   +7.60 1 2 1 1 1     0    0 6.79 -5.87 ZNEsW 11.8 12.2 261.0 15.1 15.7 -23.1 15.6 -22.0 15.3 -21.7 15.6 -22.6
2025-11-13T00:44:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:44:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:44:55.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.947661
2025-11-13T00:44:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:44:55.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:44:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:44:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:44:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 2
2025-11-13T00:44:55.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:44:46', tmtdew=9.07, humidity=54.58, cloud=0.0, wind=13.94, temperature=15.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:44:47', seeing=1.12, atlas_timestamp='2025-11-12T22:44:37.910', atlas_cloud=2, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:43:00')
2025-11-13T00:44:55.498 [DEBUG] [Thread-25671] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:44:55.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:44:55.591 [DEBUG] [Thread-25674] [transport.py] [_log()] starting thread (client mode): 0x173447c0
2025-11-13T00:44:55.591 [DEBUG] [Thread-25674] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:44:55.606 [DEBUG] [Thread-25674] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:44:55.606 [INFO] [Thread-25674] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] client lang: <none>
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] server lang: <none>
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] kex follows: False
2025-11-13T00:44:55.614 [DEBUG] [Thread-25674] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:44:55.615 [DEBUG] [Thread-25674] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:44:55.615 [DEBUG] [Thread-25674] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:44:55.615 [DEBUG] [Thread-25674] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:44:55.615 [DEBUG] [Thread-25674] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:44:55.615 [DEBUG] [Thread-25674] [transport.py] [_log()] Compression: none
2025-11-13T00:44:55.615 [DEBUG] [Thread-25674] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:44:55.671 [DEBUG] [Thread-25674] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:44:55.671 [DEBUG] [Thread-25674] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:44:55.672 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:44:55.672 [DEBUG] [Thread-25674] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:44:55.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:44:55.727 [DEBUG] [Thread-25674] [transport.py] [_log()] userauth is OK
2025-11-13T00:44:55.727 [DEBUG] [Thread-25674] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:44:55.727 [DEBUG] [Thread-25674] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:44:55.727 [DEBUG] [Thread-25674] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:44:55.727 [DEBUG] [Thread-25674] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:44:55.746 [INFO] [Thread-25674] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:44:55.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:44:55.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:44:56.560 [DEBUG] [Thread-25674] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:44:56.560 [DEBUG] [Thread-25674] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:44:56.607 [DEBUG] [Thread-25674] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:44:56.607 [DEBUG] [Thread-25674] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:44:56.616 [DEBUG] [Thread-25674] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:44:56.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:44:56.627 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:44:56.641 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:44:56.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:44:56.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:44:56.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:44:56.664 [DEBUG] [Thread-25674] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:45:05.356 [DEBUG] [Thread-25676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:07.430 [DEBUG] [Thread-25677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:08.420 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:12.482 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:20.407 [DEBUG] [Thread-25678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:26.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:45:26.682 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:45:26.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-11-13T00:45:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 45, 18), 9.05, 54.65, 0.0, 13.67, 15.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:45:27.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:45:18
2025-11-13T00:45:27.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:45:27.655 [DEBUG] [Thread-25679] [transport.py] [_log()] starting thread (client mode): 0x17347400
2025-11-13T00:45:27.655 [DEBUG] [Thread-25679] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:45:27.675 [DEBUG] [Thread-25679] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:45:27.675 [INFO] [Thread-25679] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:45:27.678 [DEBUG] [Thread-25679] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] client lang: <none>
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] server lang: <none>
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] kex follows: False
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] Compression: none
2025-11-13T00:45:27.679 [DEBUG] [Thread-25679] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:45:27.695 [DEBUG] [Thread-25679] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:45:27.695 [DEBUG] [Thread-25679] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:45:27.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:45:27.695 [DEBUG] [Thread-25679] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:45:27.695 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:45:27.696 [DEBUG] [Thread-25679] [transport.py] [_log()] userauth is OK
2025-11-13T00:45:27.696 [DEBUG] [Thread-25679] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:45:27.696 [DEBUG] [Thread-25679] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:45:27.696 [DEBUG] [Thread-25679] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:45:27.696 [DEBUG] [Thread-25679] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:45:27.705 [INFO] [Thread-25679] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:45:27.705 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:45:28.346 [DEBUG] [Thread-25679] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:45:28.346 [DEBUG] [Thread-25679] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:45:28.347 [DEBUG] [Thread-25679] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:45:28.387 [DEBUG] [Thread-25679] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:45:28.387 [DEBUG] [Thread-25679] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:45:28.389 [DEBUG] [Thread-25679] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:45:28.400 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:45:28.401 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:45:28.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:45:28.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:45:28.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:45:28.407 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:45:28.407 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.948008 -999.00  +15.40   9.21     60   +7.70 1 1 1 1 1     0    0 6.98 -0.13 ZNESW 9.0 9.2 266.8 13.1 15.7 -23.1 15.6 -22.0 15.3 -21.5 15.6 -22.7
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.948008
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:45:28.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:45:18', tmtdew=9.05, humidity=54.65, cloud=0.0, wind=13.67, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:45:19', seeing=1.12, atlas_timestamp='2025-11-12T22:45:07.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:43:00')
2025-11-13T00:45:28.408 [DEBUG] [Thread-25679] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:45:28.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:45:28.494 [DEBUG] [Thread-25682] [transport.py] [_log()] starting thread (client mode): 0x173465f0
2025-11-13T00:45:28.495 [DEBUG] [Thread-25682] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:45:28.509 [DEBUG] [Thread-25682] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:45:28.509 [INFO] [Thread-25682] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] client lang: <none>
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] server lang: <none>
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] kex follows: False
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] Compression: none
2025-11-13T00:45:28.517 [DEBUG] [Thread-25682] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:45:28.573 [DEBUG] [Thread-25682] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:45:28.573 [DEBUG] [Thread-25682] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:45:28.574 [DEBUG] [Thread-25682] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:45:28.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:45:28.574 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:45:28.630 [DEBUG] [Thread-25682] [transport.py] [_log()] userauth is OK
2025-11-13T00:45:28.630 [DEBUG] [Thread-25682] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:45:28.630 [DEBUG] [Thread-25682] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:45:28.630 [DEBUG] [Thread-25682] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:45:28.630 [DEBUG] [Thread-25682] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:45:28.644 [INFO] [Thread-25682] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:45:28.644 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:45:28.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:45:29.367 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:29.368 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:29.493 [DEBUG] [Thread-25682] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:45:29.493 [DEBUG] [Thread-25682] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:45:29.541 [DEBUG] [Thread-25682] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:45:29.541 [DEBUG] [Thread-25682] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:45:29.549 [DEBUG] [Thread-25682] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:45:29.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:45:29.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:45:29.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-11-13T00:45:29.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:45:29.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:45:29.573 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:45:29.581 [DEBUG] [Thread-25682] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:45:35.437 [DEBUG] [Thread-25684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:50.492 [DEBUG] [Thread-25685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:45:59.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:45:59.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:45:59.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:46:00.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 45, 50), 9.1, 54.65, 0.0, 14.26, 15.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:46:00.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:45:50
2025-11-13T00:46:00.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:46:00.542 [DEBUG] [Thread-25686] [transport.py] [_log()] starting thread (client mode): 0x14904910
2025-11-13T00:46:00.542 [DEBUG] [Thread-25686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:46:00.560 [DEBUG] [Thread-25686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:46:00.560 [INFO] [Thread-25686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:46:00.564 [DEBUG] [Thread-25686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] client lang: <none>
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] server lang: <none>
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] kex follows: False
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:46:00.565 [DEBUG] [Thread-25686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:46:00.566 [DEBUG] [Thread-25686] [transport.py] [_log()] Compression: none
2025-11-13T00:46:00.566 [DEBUG] [Thread-25686] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:46:00.575 [DEBUG] [Thread-25686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:46:00.576 [DEBUG] [Thread-25686] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:46:00.577 [DEBUG] [Thread-25686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:46:00.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:46:00.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:46:00.579 [DEBUG] [Thread-25686] [transport.py] [_log()] userauth is OK
2025-11-13T00:46:00.579 [DEBUG] [Thread-25686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:46:00.579 [DEBUG] [Thread-25686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:46:00.579 [DEBUG] [Thread-25686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:46:00.580 [DEBUG] [Thread-25686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:46:00.605 [INFO] [Thread-25686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:46:00.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:46:01.177 [DEBUG] [Thread-25686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:46:01.177 [DEBUG] [Thread-25686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:46:01.177 [DEBUG] [Thread-25686] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:46:01.218 [DEBUG] [Thread-25686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:46:01.218 [DEBUG] [Thread-25686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:46:01.220 [DEBUG] [Thread-25686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:46:01.232 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:46:01.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:46:01.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:46:01.235 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:46:01.240 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:46:01.242 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:46:01.242 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:46:01.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:46:01.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:46:01.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.948356 -999.00  +15.40   9.10     60   +7.70 1 1 1 1 1     0    0 7.01 5.01 ZNESW 13.7 9.1 268.0 15.4 15.7 -23.1 15.6 -22.0 15.3 -21.7 15.6 -22.7
2025-11-13T00:46:01.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:46:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:46:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.948356
2025-11-13T00:46:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:46:01.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:46:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:46:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:46:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:46:01.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:45:50', tmtdew=9.1, humidity=54.65, cloud=0.0, wind=14.26, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:45:51', seeing=1.02, atlas_timestamp='2025-11-12T22:45:37.958', atlas_cloud=1, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:43:00')
2025-11-13T00:46:01.244 [DEBUG] [Thread-25686] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:46:01.338 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:46:01.349 [DEBUG] [Thread-25689] [transport.py] [_log()] starting thread (client mode): 0x17346bf0
2025-11-13T00:46:01.349 [DEBUG] [Thread-25689] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:46:01.365 [DEBUG] [Thread-25689] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:46:01.365 [INFO] [Thread-25689] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:46:01.372 [DEBUG] [Thread-25689] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:46:01.372 [DEBUG] [Thread-25689] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:46:01.372 [DEBUG] [Thread-25689] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] client lang: <none>
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] server lang: <none>
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] kex follows: False
2025-11-13T00:46:01.373 [DEBUG] [Thread-25689] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:46:01.374 [DEBUG] [Thread-25689] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:46:01.374 [DEBUG] [Thread-25689] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:46:01.374 [DEBUG] [Thread-25689] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:46:01.374 [DEBUG] [Thread-25689] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:46:01.374 [DEBUG] [Thread-25689] [transport.py] [_log()] Compression: none
2025-11-13T00:46:01.374 [DEBUG] [Thread-25689] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:46:01.430 [DEBUG] [Thread-25689] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:46:01.431 [DEBUG] [Thread-25689] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:46:01.431 [DEBUG] [Thread-25689] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:46:01.431 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:46:01.432 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:46:01.486 [DEBUG] [Thread-25689] [transport.py] [_log()] userauth is OK
2025-11-13T00:46:01.486 [DEBUG] [Thread-25689] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:46:01.487 [DEBUG] [Thread-25689] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:46:01.487 [DEBUG] [Thread-25689] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:46:01.487 [DEBUG] [Thread-25689] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:46:01.506 [INFO] [Thread-25689] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:46:01.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:46:01.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:46:02.372 [DEBUG] [Thread-25689] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:46:02.373 [DEBUG] [Thread-25689] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:46:02.421 [DEBUG] [Thread-25689] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:46:02.421 [DEBUG] [Thread-25689] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:46:02.430 [DEBUG] [Thread-25689] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:46:02.438 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:46:02.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-11-13T00:46:02.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-11-13T00:46:02.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:46:02.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:46:02.456 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:46:02.463 [DEBUG] [Thread-25689] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:46:05.527 [DEBUG] [Thread-25691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:46:07.482 [DEBUG] [Thread-25692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:46:20.569 [DEBUG] [Thread-25693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:46:29.569 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:46:29.570 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:46:32.486 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:46:32.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:46:32.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-11-13T00:46:33.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 46, 22), 9.17, 54.37, 0.0, 15.0, 15.5, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:46:33.147 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:46:22
2025-11-13T00:46:33.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:46:33.413 [DEBUG] [Thread-25694] [transport.py] [_log()] starting thread (client mode): 0x17347490
2025-11-13T00:46:33.413 [DEBUG] [Thread-25694] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:46:33.433 [DEBUG] [Thread-25694] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:46:33.433 [INFO] [Thread-25694] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] client lang: <none>
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] server lang: <none>
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] kex follows: False
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] Compression: none
2025-11-13T00:46:33.436 [DEBUG] [Thread-25694] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:46:33.446 [DEBUG] [Thread-25694] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:46:33.446 [DEBUG] [Thread-25694] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:46:33.447 [DEBUG] [Thread-25694] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:46:33.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:46:33.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:46:33.448 [DEBUG] [Thread-25694] [transport.py] [_log()] userauth is OK
2025-11-13T00:46:33.449 [DEBUG] [Thread-25694] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:46:33.449 [DEBUG] [Thread-25694] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:46:33.449 [DEBUG] [Thread-25694] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:46:33.449 [DEBUG] [Thread-25694] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:46:33.472 [INFO] [Thread-25694] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:46:33.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:46:34.017 [DEBUG] [Thread-25694] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:46:34.017 [DEBUG] [Thread-25694] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:46:34.017 [DEBUG] [Thread-25694] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:46:34.058 [DEBUG] [Thread-25694] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:46:34.058 [DEBUG] [Thread-25694] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:46:34.062 [DEBUG] [Thread-25694] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:46:34.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:46:34.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:46:34.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:46:34.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:46:34.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:46:34.085 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:46:34.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:46:34.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:46:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:46:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.948703 -999.00  +15.40  11.12     60   +7.60 1 1 1 1 1     0    0 7.24 11.13 ZNESW 8.3 11.1 260.4 15.4 15.7 -23.3 15.6 -22.2 15.3 -21.8 15.6 -22.7
2025-11-13T00:46:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:46:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:46:34.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.948703
2025-11-13T00:46:34.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:46:34.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:46:34.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:46:34.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:46:34.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:46:34.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:46:22', tmtdew=9.17, humidity=54.37, cloud=0.0, wind=15.0, temperature=15.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:46:23', seeing=1.02, atlas_timestamp='2025-11-12T22:46:07.939', atlas_cloud=1, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:43:00')
2025-11-13T00:46:34.088 [DEBUG] [Thread-25694] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:46:34.171 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:46:34.185 [DEBUG] [Thread-25697] [transport.py] [_log()] starting thread (client mode): 0x173467a0
2025-11-13T00:46:34.185 [DEBUG] [Thread-25697] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:46:34.200 [DEBUG] [Thread-25697] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:46:34.200 [INFO] [Thread-25697] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:46:34.208 [DEBUG] [Thread-25697] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] client lang: <none>
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] server lang: <none>
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] kex follows: False
2025-11-13T00:46:34.209 [DEBUG] [Thread-25697] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:46:34.210 [DEBUG] [Thread-25697] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:46:34.210 [DEBUG] [Thread-25697] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:46:34.210 [DEBUG] [Thread-25697] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:46:34.210 [DEBUG] [Thread-25697] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:46:34.210 [DEBUG] [Thread-25697] [transport.py] [_log()] Compression: none
2025-11-13T00:46:34.210 [DEBUG] [Thread-25697] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:46:34.267 [DEBUG] [Thread-25697] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:46:34.268 [DEBUG] [Thread-25697] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:46:34.268 [DEBUG] [Thread-25697] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:46:34.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:46:34.269 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:46:34.323 [DEBUG] [Thread-25697] [transport.py] [_log()] userauth is OK
2025-11-13T00:46:34.323 [DEBUG] [Thread-25697] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:46:34.324 [DEBUG] [Thread-25697] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:46:34.324 [DEBUG] [Thread-25697] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:46:34.324 [DEBUG] [Thread-25697] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:46:34.342 [INFO] [Thread-25697] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:46:34.342 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:46:34.343 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:46:35.170 [DEBUG] [Thread-25697] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:46:35.170 [DEBUG] [Thread-25697] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:46:35.218 [DEBUG] [Thread-25697] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:46:35.218 [DEBUG] [Thread-25697] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:46:35.228 [DEBUG] [Thread-25697] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:46:35.236 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:46:35.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-11-13T00:46:35.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-11-13T00:46:35.254 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:46:35.254 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:46:35.255 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:46:35.263 [DEBUG] [Thread-25697] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:46:35.604 [DEBUG] [Thread-25699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:46:50.662 [DEBUG] [Thread-25700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:47:05.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:47:05.275 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:47:05.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-11-13T00:47:05.697 [DEBUG] [Thread-25701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:47:05.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 46, 54), 9.12, 54.38, 0.0, 16.9, 15.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:47:05.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:46:54
2025-11-13T00:47:06.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:47:06.196 [DEBUG] [Thread-25702] [transport.py] [_log()] starting thread (client mode): 0x14980070
2025-11-13T00:47:06.196 [DEBUG] [Thread-25702] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:47:06.216 [DEBUG] [Thread-25702] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:47:06.216 [INFO] [Thread-25702] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] client lang: <none>
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] server lang: <none>
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] kex follows: False
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] Compression: none
2025-11-13T00:47:06.220 [DEBUG] [Thread-25702] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:47:06.237 [DEBUG] [Thread-25702] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:47:06.238 [DEBUG] [Thread-25702] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:47:06.238 [DEBUG] [Thread-25702] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:47:06.238 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:47:06.239 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:47:06.240 [DEBUG] [Thread-25702] [transport.py] [_log()] userauth is OK
2025-11-13T00:47:06.240 [DEBUG] [Thread-25702] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:47:06.240 [DEBUG] [Thread-25702] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:47:06.240 [DEBUG] [Thread-25702] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:47:06.240 [DEBUG] [Thread-25702] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:47:06.264 [INFO] [Thread-25702] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:47:06.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:47:07.020 [DEBUG] [Thread-25702] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:47:07.020 [DEBUG] [Thread-25702] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:47:07.020 [DEBUG] [Thread-25702] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:47:07.060 [DEBUG] [Thread-25702] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:47:07.061 [DEBUG] [Thread-25702] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:47:07.064 [DEBUG] [Thread-25702] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:47:07.078 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:47:07.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:47:07.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:47:07.081 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:47:07.086 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:47:07.088 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:47:07.088 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:47:07.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:47:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:47:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.949050 -999.00  +15.40  10.01     60   +7.60 1 1 1 1 1     0    0 7.60 15.07 ZNESW 11.1 10.0 272.2 12.6 15.7 -23.2 15.6 -22.1 15.4 -21.8 15.6 -22.6
2025-11-13T00:47:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:47:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:47:07.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.949050
2025-11-13T00:47:07.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:47:07.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:47:07.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:47:07.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:47:07.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:47:07.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:46:54', tmtdew=9.12, humidity=54.38, cloud=0.0, wind=16.9, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:46:55', seeing=1.02, atlas_timestamp='2025-11-12T22:46:37.920', atlas_cloud=1, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:43:00')
2025-11-13T00:47:07.091 [DEBUG] [Thread-25702] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:47: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-11-13T00:47:07.186 [DEBUG] [Thread-25705] [transport.py] [_log()] starting thread (client mode): 0x149814b0
2025-11-13T00:47:07.186 [DEBUG] [Thread-25705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:47:07.204 [DEBUG] [Thread-25705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:47:07.204 [INFO] [Thread-25705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:47:07.214 [DEBUG] [Thread-25705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:47:07.214 [DEBUG] [Thread-25705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:47:07.214 [DEBUG] [Thread-25705] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:47:07.214 [DEBUG] [Thread-25705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:47:07.214 [DEBUG] [Thread-25705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:47:07.214 [DEBUG] [Thread-25705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:47:07.214 [DEBUG] [Thread-25705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:47:07.214 [DEBUG] [Thread-25705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] client lang: <none>
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] server lang: <none>
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] kex follows: False
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] Compression: none
2025-11-13T00:47:07.215 [DEBUG] [Thread-25705] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:47:07.272 [DEBUG] [Thread-25705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:47:07.273 [DEBUG] [Thread-25705] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:47:07.274 [DEBUG] [Thread-25705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:47:07.274 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:47:07.275 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:47:07.331 [DEBUG] [Thread-25705] [transport.py] [_log()] userauth is OK
2025-11-13T00:47:07.331 [DEBUG] [Thread-25705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:47:07.331 [DEBUG] [Thread-25705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:47:07.332 [DEBUG] [Thread-25705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:47:07.332 [DEBUG] [Thread-25705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:47:07.351 [INFO] [Thread-25705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:47: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-11-13T00:47:07.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:47:07.550 [DEBUG] [Thread-25707 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:47:08.172 [DEBUG] [Thread-25705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:47:08.172 [DEBUG] [Thread-25705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:47:08.221 [DEBUG] [Thread-25705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:47:08.221 [DEBUG] [Thread-25705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:47:08.230 [DEBUG] [Thread-25705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:47:08.239 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:47:08.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-11-13T00:47:08.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-11-13T00:47:08.258 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:47:08.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:47:08.259 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:47:08.267 [DEBUG] [Thread-25705] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:47:20.732 [DEBUG] [Thread-25708 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:47:29.772 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:47:29.773 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:47:35.782 [DEBUG] [Thread-25709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:47:38.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:47:38.281 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:47:38.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-11-13T00:47:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 47, 26), 9.21, 54.07, 0.0, 18.23, 15.62, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:47:38.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:47:26
2025-11-13T00:47:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:47:39.207 [DEBUG] [Thread-25710] [transport.py] [_log()] starting thread (client mode): 0x11f02980
2025-11-13T00:47:39.207 [DEBUG] [Thread-25710] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:47:39.228 [DEBUG] [Thread-25710] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:47:39.228 [INFO] [Thread-25710] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] client lang: <none>
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] server lang: <none>
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] kex follows: False
2025-11-13T00:47:39.231 [DEBUG] [Thread-25710] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:47:39.232 [DEBUG] [Thread-25710] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:47:39.232 [DEBUG] [Thread-25710] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:47:39.232 [DEBUG] [Thread-25710] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:47:39.232 [DEBUG] [Thread-25710] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:47:39.232 [DEBUG] [Thread-25710] [transport.py] [_log()] Compression: none
2025-11-13T00:47:39.232 [DEBUG] [Thread-25710] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:47:39.249 [DEBUG] [Thread-25710] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:47:39.250 [DEBUG] [Thread-25710] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:47:39.251 [DEBUG] [Thread-25710] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:47:39.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:47:39.251 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:47:39.253 [DEBUG] [Thread-25710] [transport.py] [_log()] userauth is OK
2025-11-13T00:47:39.253 [DEBUG] [Thread-25710] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:47:39.253 [DEBUG] [Thread-25710] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:47:39.253 [DEBUG] [Thread-25710] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:47:39.253 [DEBUG] [Thread-25710] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:47:39.279 [INFO] [Thread-25710] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:47:39.280 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:47:39.930 [DEBUG] [Thread-25710] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:47:39.931 [DEBUG] [Thread-25710] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:47:39.931 [DEBUG] [Thread-25710] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:47:39.972 [DEBUG] [Thread-25710] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:47:39.972 [DEBUG] [Thread-25710] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:47:39.975 [DEBUG] [Thread-25710] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:47:39.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:47:39.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:47:39.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:47:39.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:47:39.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:47:40.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:47:40.001 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:47:40.001 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:47:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:47:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.949050 -999.00  +15.40  10.01     60   +7.60 1 1 1 1 1     0    0 7.60 15.07 ZNESW 11.1 10.0 272.2 12.6 15.7 -23.2 15.6 -22.1 15.4 -21.8 15.6 -22.6
2025-11-13T00:47:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:47:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:47:40.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.949050
2025-11-13T00:47:40.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:47:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:47:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:47:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:47:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:47:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:47:26', tmtdew=9.21, humidity=54.07, cloud=0.0, wind=18.23, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:47:27', seeing=1.02, atlas_timestamp='2025-11-12T22:46:37.920', atlas_cloud=1, atlas_rain=1, zp_data=[0.05775000000000041, 0.09175000000000111, 0.14825000000000088, 0.2134999999999998, 0.1955000000000009, 0.11875000000000036, 0.02149999999999963, 0.025249999999999773, 0.06049999999999933, 0.1330000000000009, 0.3017499999999984, 0.15799999999999947, 0.23799999999999955, 0.06874999999999964, 0.010999999999999233, 0.0470000000000006, 0.047250000000000014, 0.3055000000000003, 0.4969999999999999, 0.33474999999999966, 0.12599999999999945, 0.08774999999999977, 0.045750000000001734, -0.003750000000000142, 0.1120000000000001, 0.29600000000000115, 0.7537500000000001, 0.5255000000000001, 0.23000000000000043, 0.10300000000000153, 0.22900000000000098, 0.13650000000000162, 0.19324999999999903], zp_timestamp='2025-11-12T22:43:00')
2025-11-13T00:47:40.003 [DEBUG] [Thread-25710] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:47:40.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:47:40.098 [DEBUG] [Thread-25713] [transport.py] [_log()] starting thread (client mode): 0x11f02f80
2025-11-13T00:47:40.098 [DEBUG] [Thread-25713] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:47:40.113 [DEBUG] [Thread-25713] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:47:40.113 [INFO] [Thread-25713] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:47:40.121 [DEBUG] [Thread-25713] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:47:40.121 [DEBUG] [Thread-25713] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:47:40.121 [DEBUG] [Thread-25713] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:47:40.121 [DEBUG] [Thread-25713] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:47:40.121 [DEBUG] [Thread-25713] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:47:40.121 [DEBUG] [Thread-25713] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:47:40.122 [DEBUG] [Thread-25713] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:47:40.122 [DEBUG] [Thread-25713] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:47:40.122 [DEBUG] [Thread-25713] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:47:40.122 [DEBUG] [Thread-25713] [transport.py] [_log()] client lang: <none>
2025-11-13T00:47:40.122 [DEBUG] [Thread-25713] [transport.py] [_log()] server lang: <none>
2025-11-13T00:47:40.122 [DEBUG] [Thread-25713] [transport.py] [_log()] kex follows: False
2025-11-13T00:47:40.122 [DEBUG] [Thread-25713] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:47:40.122 [DEBUG] [Thread-25713] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:47:40.123 [DEBUG] [Thread-25713] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:47:40.123 [DEBUG] [Thread-25713] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:47:40.123 [DEBUG] [Thread-25713] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:47:40.123 [DEBUG] [Thread-25713] [transport.py] [_log()] Compression: none
2025-11-13T00:47:40.123 [DEBUG] [Thread-25713] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:47:40.178 [DEBUG] [Thread-25713] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:47:40.179 [DEBUG] [Thread-25713] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:47:40.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:47:40.180 [DEBUG] [Thread-25713] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:47:40.181 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:47:40.235 [DEBUG] [Thread-25713] [transport.py] [_log()] userauth is OK
2025-11-13T00:47:40.235 [DEBUG] [Thread-25713] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:47:40.236 [DEBUG] [Thread-25713] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:47:40.236 [DEBUG] [Thread-25713] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:47:40.236 [DEBUG] [Thread-25713] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:47:40.255 [INFO] [Thread-25713] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:47:40.255 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:47:40.256 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:47:41.058 [DEBUG] [Thread-25713] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:47:41.059 [DEBUG] [Thread-25713] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:47:41.106 [DEBUG] [Thread-25713] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:47:41.107 [DEBUG] [Thread-25713] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:47:41.116 [DEBUG] [Thread-25713] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:47:41.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:47:41.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-11-13T00:47:41.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-11-13T00:47:41.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:47:41.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:47:41.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:47:41.153 [DEBUG] [Thread-25713] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:47:50.820 [DEBUG] [Thread-25715 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:05.864 [DEBUG] [Thread-25716 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:07.616 [DEBUG] [Thread-25717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:11.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:48:11.155 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:48:11.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-11-13T00:48:11.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 47, 59), 9.39, 53.72, 0.0, 16.39, 15.55, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:48:11.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:47:59
2025-11-13T00:48:11.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:48:12.073 [DEBUG] [Thread-25718] [transport.py] [_log()] starting thread (client mode): 0x173462f0
2025-11-13T00:48:12.073 [DEBUG] [Thread-25718] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:48:12.088 [DEBUG] [Thread-25718] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:48:12.088 [INFO] [Thread-25718] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] client lang: <none>
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] server lang: <none>
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] kex follows: False
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:48:12.092 [DEBUG] [Thread-25718] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:48:12.093 [DEBUG] [Thread-25718] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:48:12.093 [DEBUG] [Thread-25718] [transport.py] [_log()] Compression: none
2025-11-13T00:48:12.093 [DEBUG] [Thread-25718] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:48:12.110 [DEBUG] [Thread-25718] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:48:12.111 [DEBUG] [Thread-25718] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:48:12.112 [DEBUG] [Thread-25718] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:48:12.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:48:12.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:48:12.113 [DEBUG] [Thread-25718] [transport.py] [_log()] userauth is OK
2025-11-13T00:48:12.114 [DEBUG] [Thread-25718] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:48:12.114 [DEBUG] [Thread-25718] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:48:12.114 [DEBUG] [Thread-25718] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:48:12.114 [DEBUG] [Thread-25718] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:48:12.128 [INFO] [Thread-25718] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:48:12.128 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:48:12.887 [DEBUG] [Thread-25718] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:48:12.887 [DEBUG] [Thread-25718] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:48:12.888 [DEBUG] [Thread-25718] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:48:12.928 [DEBUG] [Thread-25718] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:48:12.928 [DEBUG] [Thread-25718] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:48:12.931 [DEBUG] [Thread-25718] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:48:12.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:48:12.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:48:12.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:48:12.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:48:12.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:48:12.951 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:48:12.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:48:12.951 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:48:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:48:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.949745 -999.00  +15.30   7.68     60   +7.80 1 1 1 1 1     0    0 7.90 26.75 ZNESW 8.3 7.7 268.6 11.0 15.7 -23.3 15.6 -22.3 15.3 -22.0 15.6 -22.7
2025-11-13T00:48:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:48:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:48:12.952 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.949745
2025-11-13T00:48:12.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:48:12.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:48:12.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:48:12.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:48:12.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:48:12.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:47:59', tmtdew=9.39, humidity=53.72, cloud=0.0, wind=16.39, temperature=15.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:47:59', seeing=1.13, atlas_timestamp='2025-11-12T22:47:37.968', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.02925000000000111, 0.0702499999999997, 0.19849999999999923, 0.05600000000000094, 0.0417500000000004, 0.05999999999999872, -0.013249999999999318, 0.038999999999997925, 0.051000000000000156, 0.17575000000000074, 0.13100000000000023, 0.08999999999999986, 0.0442499999999999, -0.009000000000000341, -0.005000000000000782, 0.01425000000000054, 0.17149999999999999, 0.32099999999999973, 0.11924999999999919, 0.06599999999999895, 0.05874999999999808, 0.02525000000000155, 0.027749999999999275, 0.011999999999998678, 0.38150000000000084, 0.7392500000000002, 0.4264999999999999, 0.0730000000000004, 0.11600000000000144, 0.21499999999999986, 0.0940000000000012, 0.06374999999999886], zp_timestamp='2025-11-12T22:47:00')
2025-11-13T00:48:12.954 [DEBUG] [Thread-25718] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:48:13.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:48:13.048 [DEBUG] [Thread-25721] [transport.py] [_log()] starting thread (client mode): 0x17346e00
2025-11-13T00:48:13.048 [DEBUG] [Thread-25721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:48:13.066 [DEBUG] [Thread-25721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:48:13.067 [INFO] [Thread-25721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:48:13.074 [DEBUG] [Thread-25721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:48:13.074 [DEBUG] [Thread-25721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:48:13.074 [DEBUG] [Thread-25721] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] client lang: <none>
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] server lang: <none>
2025-11-13T00:48:13.075 [DEBUG] [Thread-25721] [transport.py] [_log()] kex follows: False
2025-11-13T00:48:13.076 [DEBUG] [Thread-25721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:48:13.076 [DEBUG] [Thread-25721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:48:13.076 [DEBUG] [Thread-25721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:48:13.076 [DEBUG] [Thread-25721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:48:13.076 [DEBUG] [Thread-25721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:48:13.076 [DEBUG] [Thread-25721] [transport.py] [_log()] Compression: none
2025-11-13T00:48:13.076 [DEBUG] [Thread-25721] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:48:13.135 [DEBUG] [Thread-25721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:48:13.136 [DEBUG] [Thread-25721] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:48:13.136 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:48:13.137 [DEBUG] [Thread-25721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:48:13.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:48:13.192 [DEBUG] [Thread-25721] [transport.py] [_log()] userauth is OK
2025-11-13T00:48:13.192 [DEBUG] [Thread-25721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:48:13.192 [DEBUG] [Thread-25721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:48:13.192 [DEBUG] [Thread-25721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:48:13.192 [DEBUG] [Thread-25721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:48:13.212 [INFO] [Thread-25721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:48:13.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:48:13.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:48:14.094 [DEBUG] [Thread-25721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:48:14.094 [DEBUG] [Thread-25721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:48:14.142 [DEBUG] [Thread-25721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:48:14.142 [DEBUG] [Thread-25721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:48:14.151 [DEBUG] [Thread-25721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:48:14.160 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:48:14.161 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:48:14.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:48:14.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:48:14.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:48:14.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:48:14.188 [DEBUG] [Thread-25721] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:48:20.898 [DEBUG] [Thread-25723 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:29.974 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:29.976 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:35.951 [DEBUG] [Thread-25724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:36.216 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:44.210 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:48:44.210 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:48:44.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-11-13T00:48:44.493 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 48, 31), 9.29, 54.1, 0.0, 15.7, 15.62, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:48:44.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:48:31
2025-11-13T00:48:44.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:48:45.125 [DEBUG] [Thread-25725] [transport.py] [_log()] starting thread (client mode): 0x11f002b0
2025-11-13T00:48:45.125 [DEBUG] [Thread-25725] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:48:45.144 [DEBUG] [Thread-25725] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:48:45.144 [INFO] [Thread-25725] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:48:45.147 [DEBUG] [Thread-25725] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] client lang: <none>
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] server lang: <none>
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] kex follows: False
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] Compression: none
2025-11-13T00:48:45.148 [DEBUG] [Thread-25725] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:48:45.161 [DEBUG] [Thread-25725] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:48:45.161 [DEBUG] [Thread-25725] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:48:45.161 [DEBUG] [Thread-25725] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:48:45.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:48:45.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:48:45.162 [DEBUG] [Thread-25725] [transport.py] [_log()] userauth is OK
2025-11-13T00:48:45.162 [DEBUG] [Thread-25725] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:48:45.162 [DEBUG] [Thread-25725] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:48:45.162 [DEBUG] [Thread-25725] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:48:45.162 [DEBUG] [Thread-25725] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:48:45.189 [INFO] [Thread-25725] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:48:45.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:48:45.813 [DEBUG] [Thread-25725] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:48:45.813 [DEBUG] [Thread-25725] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:48:45.813 [DEBUG] [Thread-25725] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:48:45.854 [DEBUG] [Thread-25725] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:48:45.854 [DEBUG] [Thread-25725] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:48:45.857 [DEBUG] [Thread-25725] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:48:45.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:48:45.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:48:45.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:48:45.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:48:45.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:48:45.883 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:48:45.884 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:48:45.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:48:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:48:45.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.950092 -999.00  +15.30  12.52     60   +7.80 1 1 1 1 1     0    0 7.82 29.48 ZNESW 13.2 12.5 270.8 14.4 15.7 -23.3 15.6 -22.2 15.3 -21.9 15.6 -22.7
2025-11-13T00:48:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:48:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:48:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.950092
2025-11-13T00:48:45.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:48:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:48:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:48:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:48:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:48:45.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:48:31', tmtdew=9.29, humidity=54.1, cloud=0.0, wind=15.7, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:48:31', seeing=0.97, atlas_timestamp='2025-11-12T22:48:07.949', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.02925000000000111, 0.0702499999999997, 0.19849999999999923, 0.05600000000000094, 0.0417500000000004, 0.05999999999999872, -0.013249999999999318, 0.038999999999997925, 0.051000000000000156, 0.17575000000000074, 0.13100000000000023, 0.08999999999999986, 0.0442499999999999, -0.009000000000000341, -0.005000000000000782, 0.01425000000000054, 0.17149999999999999, 0.32099999999999973, 0.11924999999999919, 0.06599999999999895, 0.05874999999999808, 0.02525000000000155, 0.027749999999999275, 0.011999999999998678, 0.38150000000000084, 0.7392500000000002, 0.4264999999999999, 0.0730000000000004, 0.11600000000000144, 0.21499999999999986, 0.0940000000000012, 0.06374999999999886], zp_timestamp='2025-11-12T22:47:00')
2025-11-13T00:48:45.886 [DEBUG] [Thread-25725] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:48:45.972 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:48:45.984 [DEBUG] [Thread-25728] [transport.py] [_log()] starting thread (client mode): 0x14946ef0
2025-11-13T00:48:45.984 [DEBUG] [Thread-25728] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:48:45.999 [DEBUG] [Thread-25728] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:48:46.000 [INFO] [Thread-25728] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:48:46.007 [DEBUG] [Thread-25728] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:48:46.007 [DEBUG] [Thread-25728] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:48:46.007 [DEBUG] [Thread-25728] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:48:46.007 [DEBUG] [Thread-25728] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:48:46.007 [DEBUG] [Thread-25728] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] client lang: <none>
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] server lang: <none>
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] kex follows: False
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] Compression: none
2025-11-13T00:48:46.008 [DEBUG] [Thread-25728] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:48:46.070 [DEBUG] [Thread-25728] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:48:46.071 [DEBUG] [Thread-25728] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:48:46.071 [DEBUG] [Thread-25728] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:48:46.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:48:46.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:48:46.128 [DEBUG] [Thread-25728] [transport.py] [_log()] userauth is OK
2025-11-13T00:48:46.128 [DEBUG] [Thread-25728] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:48:46.129 [DEBUG] [Thread-25728] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:48:46.129 [DEBUG] [Thread-25728] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:48:46.129 [DEBUG] [Thread-25728] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:48:46.148 [INFO] [Thread-25728] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:48:46.148 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:48:46.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:48:47.001 [DEBUG] [Thread-25728] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:48:47.001 [DEBUG] [Thread-25728] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:48:47.049 [DEBUG] [Thread-25728] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:48:47.049 [DEBUG] [Thread-25728] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:48:47.058 [DEBUG] [Thread-25728] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:48:47.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:48:47.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-11-13T00:48:47.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:48:47.084 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:48:47.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:48:47.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:48:47.093 [DEBUG] [Thread-25728] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:48:48.593 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:48:50.990 [DEBUG] [Thread-25730 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:49:06.040 [DEBUG] [Thread-25731 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:49:07.673 [DEBUG] [Thread-25732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:49:17.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:49:17.090 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:49:17.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:49:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 49, 3), 9.12, 54.68, 0.0, 16.36, 15.58, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:49:17.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:49:03
2025-11-13T00:49:17.867 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:49:18.015 [DEBUG] [Thread-25733] [transport.py] [_log()] starting thread (client mode): 0x17347970
2025-11-13T00:49:18.015 [DEBUG] [Thread-25733] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:49:18.036 [DEBUG] [Thread-25733] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:49:18.036 [INFO] [Thread-25733] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:49:18.039 [DEBUG] [Thread-25733] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:49:18.039 [DEBUG] [Thread-25733] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:49:18.039 [DEBUG] [Thread-25733] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:49:18.039 [DEBUG] [Thread-25733] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:49:18.039 [DEBUG] [Thread-25733] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] client lang: <none>
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] server lang: <none>
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] kex follows: False
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] Compression: none
2025-11-13T00:49:18.040 [DEBUG] [Thread-25733] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:49:18.059 [DEBUG] [Thread-25733] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:49:18.059 [DEBUG] [Thread-25733] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:49:18.060 [DEBUG] [Thread-25733] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:49:18.060 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:49:18.061 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:49:18.062 [DEBUG] [Thread-25733] [transport.py] [_log()] userauth is OK
2025-11-13T00:49:18.062 [DEBUG] [Thread-25733] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:49:18.062 [DEBUG] [Thread-25733] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:49:18.062 [DEBUG] [Thread-25733] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:49:18.062 [DEBUG] [Thread-25733] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:49:18.077 [INFO] [Thread-25733] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:49:18.078 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:49:18.862 [DEBUG] [Thread-25733] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:49:18.862 [DEBUG] [Thread-25733] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:49:18.862 [DEBUG] [Thread-25733] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:49:18.903 [DEBUG] [Thread-25733] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:49:18.903 [DEBUG] [Thread-25733] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:49:18.906 [DEBUG] [Thread-25733] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:49:18.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:49:18.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:49:18.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:49:18.914 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:49:18.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:49:18.918 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:49:18.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:49:18.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.950439 -999.00  +15.30  12.11     60   +7.70 1 1 1 1 1     0    0 7.90 31.65 ZNESW 13.4 12.1 265.8 14.7 15.7 -23.2 15.6 -22.3 15.3 -21.9 15.6 -22.7
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.950439
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:49:18.919 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:49:03', tmtdew=9.12, humidity=54.68, cloud=0.0, wind=16.36, temperature=15.58, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:49:03', seeing=1.12, atlas_timestamp='2025-11-12T22:48:37.930', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.02925000000000111, 0.0702499999999997, 0.19849999999999923, 0.05600000000000094, 0.0417500000000004, 0.05999999999999872, -0.013249999999999318, 0.038999999999997925, 0.051000000000000156, 0.17575000000000074, 0.13100000000000023, 0.08999999999999986, 0.0442499999999999, -0.009000000000000341, -0.005000000000000782, 0.01425000000000054, 0.17149999999999999, 0.32099999999999973, 0.11924999999999919, 0.06599999999999895, 0.05874999999999808, 0.02525000000000155, 0.027749999999999275, 0.011999999999998678, 0.38150000000000084, 0.7392500000000002, 0.4264999999999999, 0.0730000000000004, 0.11600000000000144, 0.21499999999999986, 0.0940000000000012, 0.06374999999999886], zp_timestamp='2025-11-12T22:47:00')
2025-11-13T00:49:18.920 [DEBUG] [Thread-25733] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:49:18.993 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:49:19.006 [DEBUG] [Thread-25736] [transport.py] [_log()] starting thread (client mode): 0x1493f460
2025-11-13T00:49:19.006 [DEBUG] [Thread-25736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:49:19.021 [DEBUG] [Thread-25736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:49:19.021 [INFO] [Thread-25736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:49:19.028 [DEBUG] [Thread-25736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:49:19.028 [DEBUG] [Thread-25736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:49:19.028 [DEBUG] [Thread-25736] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:49:19.028 [DEBUG] [Thread-25736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:49:19.028 [DEBUG] [Thread-25736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:49:19.028 [DEBUG] [Thread-25736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:49:19.028 [DEBUG] [Thread-25736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] client lang: <none>
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] server lang: <none>
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] kex follows: False
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] Compression: none
2025-11-13T00:49:19.029 [DEBUG] [Thread-25736] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:49:19.085 [DEBUG] [Thread-25736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:49:19.085 [DEBUG] [Thread-25736] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:49:19.085 [DEBUG] [Thread-25736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:49:19.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:49:19.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:49:19.146 [DEBUG] [Thread-25736] [transport.py] [_log()] userauth is OK
2025-11-13T00:49:19.146 [DEBUG] [Thread-25736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:49:19.146 [DEBUG] [Thread-25736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:49:19.146 [DEBUG] [Thread-25736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:49:19.146 [DEBUG] [Thread-25736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:49:19.160 [INFO] [Thread-25736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:49:19.160 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:49:19.160 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:49:19.986 [DEBUG] [Thread-25736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:49:19.986 [DEBUG] [Thread-25736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:49:20.034 [DEBUG] [Thread-25736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:49:20.034 [DEBUG] [Thread-25736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:49:20.042 [DEBUG] [Thread-25736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:49:20.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:49:20.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:49:20.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-11-13T00:49:20.065 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:49:20.065 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:49:20.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:49:20.073 [DEBUG] [Thread-25736] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:49:21.071 [DEBUG] [Thread-25738 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:49:30.179 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:49:30.180 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:49:36.111 [DEBUG] [Thread-25739 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:49:50.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:49:50.095 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:49:50.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-11-13T00:49:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 49, 35), 9.25, 53.8, 0.0, 16.99, 15.62, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:49:50.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:49:35
2025-11-13T00:49:50.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:49:50.995 [DEBUG] [Thread-25740] [transport.py] [_log()] starting thread (client mode): 0x14980ee0
2025-11-13T00:49:50.995 [DEBUG] [Thread-25740] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:49:51.014 [DEBUG] [Thread-25740] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:49:51.015 [INFO] [Thread-25740] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:49:51.017 [DEBUG] [Thread-25740] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:49:51.017 [DEBUG] [Thread-25740] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:49:51.017 [DEBUG] [Thread-25740] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] client lang: <none>
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] server lang: <none>
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] kex follows: False
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] Compression: none
2025-11-13T00:49:51.018 [DEBUG] [Thread-25740] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:49:51.034 [DEBUG] [Thread-25740] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:49:51.035 [DEBUG] [Thread-25740] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:49:51.035 [DEBUG] [Thread-25740] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:49:51.035 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:49:51.036 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:49:51.037 [DEBUG] [Thread-25740] [transport.py] [_log()] userauth is OK
2025-11-13T00:49:51.037 [DEBUG] [Thread-25740] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:49:51.037 [DEBUG] [Thread-25740] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:49:51.038 [DEBUG] [Thread-25740] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:49:51.038 [DEBUG] [Thread-25740] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:49:51.064 [INFO] [Thread-25740] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:49:51.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:49:51.144 [DEBUG] [Thread-25742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:49:51.688 [DEBUG] [Thread-25740] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:49:51.688 [DEBUG] [Thread-25740] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:49:51.688 [DEBUG] [Thread-25740] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:49:51.728 [DEBUG] [Thread-25740] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:49:51.729 [DEBUG] [Thread-25740] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:49:51.732 [DEBUG] [Thread-25740] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:49:51.744 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:49:51.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:49:51.746 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:49:51.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:49:51.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:49:51.756 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:49:51.756 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:49:51.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:49:51.756 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:49:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.950786 -999.00  +15.30  12.70     60   +7.60 1 1 1 1 1     0    0 8.12 32.40 ZNESW 11.7 12.7 262.6 16.0 15.7 -23.4 15.6 -22.3 15.3 -21.8 15.7 -22.9
2025-11-13T00:49:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:49:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:49:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.950786
2025-11-13T00:49:51.757 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:49:51.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:49:51.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:49:51.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:49:51.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:49:51.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:49:35', tmtdew=9.25, humidity=53.8, cloud=0.0, wind=16.99, temperature=15.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:49:35', seeing=1.12, atlas_timestamp='2025-11-12T22:49:07.910', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.02925000000000111, 0.0702499999999997, 0.19849999999999923, 0.05600000000000094, 0.0417500000000004, 0.05999999999999872, -0.013249999999999318, 0.038999999999997925, 0.051000000000000156, 0.17575000000000074, 0.13100000000000023, 0.08999999999999986, 0.0442499999999999, -0.009000000000000341, -0.005000000000000782, 0.01425000000000054, 0.17149999999999999, 0.32099999999999973, 0.11924999999999919, 0.06599999999999895, 0.05874999999999808, 0.02525000000000155, 0.027749999999999275, 0.011999999999998678, 0.38150000000000084, 0.7392500000000002, 0.4264999999999999, 0.0730000000000004, 0.11600000000000144, 0.21499999999999986, 0.0940000000000012, 0.06374999999999886], zp_timestamp='2025-11-12T22:47:00')
2025-11-13T00:49:51.759 [DEBUG] [Thread-25740] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:49:51.842 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:49:51.853 [DEBUG] [Thread-25744] [transport.py] [_log()] starting thread (client mode): 0x14983640
2025-11-13T00:49:51.854 [DEBUG] [Thread-25744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:49:51.867 [DEBUG] [Thread-25744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:49:51.868 [INFO] [Thread-25744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] client lang: <none>
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] server lang: <none>
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] kex follows: False
2025-11-13T00:49:51.875 [DEBUG] [Thread-25744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:49:51.876 [DEBUG] [Thread-25744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:49:51.876 [DEBUG] [Thread-25744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:49:51.876 [DEBUG] [Thread-25744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:49:51.876 [DEBUG] [Thread-25744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:49:51.876 [DEBUG] [Thread-25744] [transport.py] [_log()] Compression: none
2025-11-13T00:49:51.876 [DEBUG] [Thread-25744] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:49:51.936 [DEBUG] [Thread-25744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:49:51.936 [DEBUG] [Thread-25744] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:49:51.937 [DEBUG] [Thread-25744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:49:51.937 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:49:51.938 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:49:51.992 [DEBUG] [Thread-25744] [transport.py] [_log()] userauth is OK
2025-11-13T00:49:51.992 [DEBUG] [Thread-25744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:49:51.992 [DEBUG] [Thread-25744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:49:51.992 [DEBUG] [Thread-25744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:49:51.992 [DEBUG] [Thread-25744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:49:52.011 [INFO] [Thread-25744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:49:52.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:49:52.012 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:49:52.818 [DEBUG] [Thread-25744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:49:52.818 [DEBUG] [Thread-25744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:49:52.868 [DEBUG] [Thread-25744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:49:52.868 [DEBUG] [Thread-25744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:49:52.879 [DEBUG] [Thread-25744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:49:52.890 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:49:52.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-11-13T00:49:52.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-11-13T00:49:52.909 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:49:52.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:49:52.910 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:49:52.918 [DEBUG] [Thread-25744] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:50:06.175 [DEBUG] [Thread-25746 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:07.725 [DEBUG] [Thread-25747 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:11.123 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:18.955 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:21.227 [DEBUG] [Thread-25748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:22.937 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:50:22.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:50:22.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-11-13T00:50:23.058 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 50, 7), 9.31, 53.55, 0.0, 16.89, 15.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:50:23.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:50:07
2025-11-13T00:50:23.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:50:23.852 [DEBUG] [Thread-25749] [transport.py] [_log()] starting thread (client mode): 0x11f01f60
2025-11-13T00:50:23.853 [DEBUG] [Thread-25749] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:50:23.874 [DEBUG] [Thread-25749] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:50:23.874 [INFO] [Thread-25749] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] client lang: <none>
2025-11-13T00:50:23.877 [DEBUG] [Thread-25749] [transport.py] [_log()] server lang: <none>
2025-11-13T00:50:23.878 [DEBUG] [Thread-25749] [transport.py] [_log()] kex follows: False
2025-11-13T00:50:23.878 [DEBUG] [Thread-25749] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:50:23.878 [DEBUG] [Thread-25749] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:50:23.878 [DEBUG] [Thread-25749] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:50:23.878 [DEBUG] [Thread-25749] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:50:23.878 [DEBUG] [Thread-25749] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:50:23.878 [DEBUG] [Thread-25749] [transport.py] [_log()] Compression: none
2025-11-13T00:50:23.878 [DEBUG] [Thread-25749] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:50:23.900 [DEBUG] [Thread-25749] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:50:23.901 [DEBUG] [Thread-25749] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:50:23.902 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:50:23.902 [DEBUG] [Thread-25749] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:50:23.903 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:50:23.904 [DEBUG] [Thread-25749] [transport.py] [_log()] userauth is OK
2025-11-13T00:50:23.904 [DEBUG] [Thread-25749] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:50:23.904 [DEBUG] [Thread-25749] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:50:23.904 [DEBUG] [Thread-25749] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:50:23.904 [DEBUG] [Thread-25749] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:50:23.941 [INFO] [Thread-25749] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:50:23.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:50:24.587 [DEBUG] [Thread-25749] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:50:24.587 [DEBUG] [Thread-25749] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:50:24.587 [DEBUG] [Thread-25749] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:50:24.627 [DEBUG] [Thread-25749] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:50:24.627 [DEBUG] [Thread-25749] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:50:24.630 [DEBUG] [Thread-25749] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:50:24.642 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:50:24.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:50:24.644 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:50:24.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:50:24.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:50:24.651 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:50:24.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:50:24.651 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:50:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:50:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.951133 -999.00  +15.30  13.77     60   +7.60 1 1 1 1 1     0    0 8.14 34.19 ZNESW 12.0 13.8 266.2 14.9 15.7 -23.4 15.6 -22.4 15.3 -22.0 15.6 -22.7
2025-11-13T00:50:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:50:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:50:24.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.951133
2025-11-13T00:50:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:50:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:50:24.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:50:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:50:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:50:24.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:50:07', tmtdew=9.31, humidity=53.55, cloud=0.0, wind=16.89, temperature=15.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:50:07', seeing=1.08, atlas_timestamp='2025-11-12T22:49:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.02925000000000111, 0.0702499999999997, 0.19849999999999923, 0.05600000000000094, 0.0417500000000004, 0.05999999999999872, -0.013249999999999318, 0.038999999999997925, 0.051000000000000156, 0.17575000000000074, 0.13100000000000023, 0.08999999999999986, 0.0442499999999999, -0.009000000000000341, -0.005000000000000782, 0.01425000000000054, 0.17149999999999999, 0.32099999999999973, 0.11924999999999919, 0.06599999999999895, 0.05874999999999808, 0.02525000000000155, 0.027749999999999275, 0.011999999999998678, 0.38150000000000084, 0.7392500000000002, 0.4264999999999999, 0.0730000000000004, 0.11600000000000144, 0.21499999999999986, 0.0940000000000012, 0.06374999999999886], zp_timestamp='2025-11-12T22:47:00')
2025-11-13T00:50:24.653 [DEBUG] [Thread-25749] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:50:24.737 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:50:24.749 [DEBUG] [Thread-25752] [transport.py] [_log()] starting thread (client mode): 0x1737fc70
2025-11-13T00:50:24.749 [DEBUG] [Thread-25752] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:50:24.764 [DEBUG] [Thread-25752] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:50:24.764 [INFO] [Thread-25752] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:50:24.772 [DEBUG] [Thread-25752] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:50:24.772 [DEBUG] [Thread-25752] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:50:24.772 [DEBUG] [Thread-25752] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] client lang: <none>
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] server lang: <none>
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] kex follows: False
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:50:24.773 [DEBUG] [Thread-25752] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:50:24.774 [DEBUG] [Thread-25752] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:50:24.774 [DEBUG] [Thread-25752] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:50:24.774 [DEBUG] [Thread-25752] [transport.py] [_log()] Compression: none
2025-11-13T00:50:24.774 [DEBUG] [Thread-25752] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:50:24.832 [DEBUG] [Thread-25752] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:50:24.832 [DEBUG] [Thread-25752] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:50:24.833 [DEBUG] [Thread-25752] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:50:24.833 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:50:24.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:50:24.887 [DEBUG] [Thread-25752] [transport.py] [_log()] userauth is OK
2025-11-13T00:50:24.888 [DEBUG] [Thread-25752] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:50:24.888 [DEBUG] [Thread-25752] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:50:24.888 [DEBUG] [Thread-25752] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:50:24.888 [DEBUG] [Thread-25752] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:50:24.907 [INFO] [Thread-25752] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:50:24.908 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:50:24.908 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:50:25.753 [DEBUG] [Thread-25752] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:50:25.753 [DEBUG] [Thread-25752] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:50:25.801 [DEBUG] [Thread-25752] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:50:25.801 [DEBUG] [Thread-25752] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:50:25.810 [DEBUG] [Thread-25752] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:50:25.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:50:25.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:50:25.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:50:25.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:50:25.838 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:50:25.839 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:50:25.847 [DEBUG] [Thread-25752] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:50:30.383 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:30.384 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:36.259 [DEBUG] [Thread-25754 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:51.303 [DEBUG] [Thread-25755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:50:55.864 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:50:55.864 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:50:55.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-11-13T00:50:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 50, 39), 9.4, 53.77, 0.0, 16.6, 15.6, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:50:56.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:50:39
2025-11-13T00:50:56.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:50:56.772 [DEBUG] [Thread-25756] [transport.py] [_log()] starting thread (client mode): 0x149470a0
2025-11-13T00:50:56.772 [DEBUG] [Thread-25756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:50:56.793 [DEBUG] [Thread-25756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:50:56.793 [INFO] [Thread-25756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:50:56.796 [DEBUG] [Thread-25756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] client lang: <none>
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] server lang: <none>
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] kex follows: False
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] Compression: none
2025-11-13T00:50:56.797 [DEBUG] [Thread-25756] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:50:56.815 [DEBUG] [Thread-25756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:50:56.816 [DEBUG] [Thread-25756] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:50:56.817 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:50:56.817 [DEBUG] [Thread-25756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:50:56.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:50:56.819 [DEBUG] [Thread-25756] [transport.py] [_log()] userauth is OK
2025-11-13T00:50:56.820 [DEBUG] [Thread-25756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:50:56.820 [DEBUG] [Thread-25756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:50:56.820 [DEBUG] [Thread-25756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:50:56.820 [DEBUG] [Thread-25756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:50:56.844 [INFO] [Thread-25756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:50:56.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:50:57.472 [DEBUG] [Thread-25756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:50:57.473 [DEBUG] [Thread-25756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:50:57.473 [DEBUG] [Thread-25756] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:50:57.514 [DEBUG] [Thread-25756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:50:57.514 [DEBUG] [Thread-25756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:50:57.517 [DEBUG] [Thread-25756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:50:57.529 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:50:57.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:50:57.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:50:57.533 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:50:57.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:50:57.541 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:50:57.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:50:57.541 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:50:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:50:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.951480 -999.00  +15.30   9.68     60   +7.60 1 1 1 1 1     0    0 8.37 39.02 ZNESW 11.2 9.7 270.2 15.1 15.7 -23.3 15.6 -22.3 15.4 -22.0 15.6 -22.7
2025-11-13T00:50:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:50:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:50:57.542 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.951480
2025-11-13T00:50:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:50:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:50:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:50:57.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:50:57.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:50:57.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:50:39', tmtdew=9.4, humidity=53.77, cloud=0.0, wind=16.6, temperature=15.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:50:39', seeing=1.07, atlas_timestamp='2025-11-12T22:50:07.872', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:49:00')
2025-11-13T00:50:57.544 [DEBUG] [Thread-25756] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:50:57.628 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:50:57.642 [DEBUG] [Thread-25759] [transport.py] [_log()] starting thread (client mode): 0x1737cee0
2025-11-13T00:50:57.642 [DEBUG] [Thread-25759] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:50:57.656 [DEBUG] [Thread-25759] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:50:57.657 [INFO] [Thread-25759] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:50:57.664 [DEBUG] [Thread-25759] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:50:57.664 [DEBUG] [Thread-25759] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:50:57.664 [DEBUG] [Thread-25759] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:50:57.664 [DEBUG] [Thread-25759] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] client lang: <none>
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] server lang: <none>
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] kex follows: False
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] Compression: none
2025-11-13T00:50:57.665 [DEBUG] [Thread-25759] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:50:57.723 [DEBUG] [Thread-25759] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:50:57.724 [DEBUG] [Thread-25759] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:50:57.724 [DEBUG] [Thread-25759] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:50:57.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:50:57.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:50:57.779 [DEBUG] [Thread-25759] [transport.py] [_log()] userauth is OK
2025-11-13T00:50:57.780 [DEBUG] [Thread-25759] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:50:57.780 [DEBUG] [Thread-25759] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:50:57.780 [DEBUG] [Thread-25759] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:50:57.780 [DEBUG] [Thread-25759] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:50:57.805 [INFO] [Thread-25759] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:50:57.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:50:57.806 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:50:58.689 [DEBUG] [Thread-25759] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:50:58.689 [DEBUG] [Thread-25759] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:50:58.744 [DEBUG] [Thread-25759] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:50:58.744 [DEBUG] [Thread-25759] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:50:58.753 [DEBUG] [Thread-25759] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:50:58.768 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:50:58.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-11-13T00:50:58.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-11-13T00:50:58.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:50:58.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:50:58.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:50:58.796 [DEBUG] [Thread-25759] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:51:06.342 [DEBUG] [Thread-25761 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:51:07.782 [DEBUG] [Thread-25762 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:51:21.391 [DEBUG] [Thread-25763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:51:28.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:51:28.794 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:51:28.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-11-13T00:51:29.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 51, 11), 9.36, 53.92, 0.0, 17.34, 15.6, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:51:29.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:51:11
2025-11-13T00:51:29.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:51:29.700 [DEBUG] [Thread-25764] [transport.py] [_log()] starting thread (client mode): 0x11f01600
2025-11-13T00:51:29.700 [DEBUG] [Thread-25764] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:51:29.721 [DEBUG] [Thread-25764] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:51:29.721 [INFO] [Thread-25764] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] client lang: <none>
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] server lang: <none>
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] kex follows: False
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] Compression: none
2025-11-13T00:51:29.724 [DEBUG] [Thread-25764] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:51:29.740 [DEBUG] [Thread-25764] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:51:29.740 [DEBUG] [Thread-25764] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:51:29.740 [DEBUG] [Thread-25764] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:51:29.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:51:29.740 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:51:29.741 [DEBUG] [Thread-25764] [transport.py] [_log()] userauth is OK
2025-11-13T00:51:29.741 [DEBUG] [Thread-25764] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:51:29.741 [DEBUG] [Thread-25764] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:51:29.741 [DEBUG] [Thread-25764] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:51:29.741 [DEBUG] [Thread-25764] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:51:29.767 [INFO] [Thread-25764] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:51:29.768 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:51:30.434 [DEBUG] [Thread-25764] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:51:30.434 [DEBUG] [Thread-25764] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:51:30.434 [DEBUG] [Thread-25764] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:51:30.475 [DEBUG] [Thread-25764] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:51:30.475 [DEBUG] [Thread-25764] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:51:30.478 [DEBUG] [Thread-25764] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:51:30.492 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:51:30.493 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:51:30.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:51:30.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:51:30.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:51:30.504 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:51:30.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:51:30.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:51:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:51:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.952175 -999.00  +15.30  11.31     59   +7.40 1 1 1 1 1     0    0 8.46 44.41 ZNESW 14.5 11.3 284.4 14.6 15.7 -23.3 15.6 -22.4 15.3 -21.9 15.6 -22.9
2025-11-13T00:51:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:51:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:51:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.952175
2025-11-13T00:51:30.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:51:30.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:51:30.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:51:30.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:51:30.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:51:30.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:51:11', tmtdew=9.36, humidity=53.92, cloud=0.0, wind=17.34, temperature=15.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:51:11', seeing=1.07, atlas_timestamp='2025-11-12T22:51:07.920', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:49:00')
2025-11-13T00:51:30.507 [DEBUG] [Thread-25764] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:51:30.590 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:51:30.605 [DEBUG] [Thread-25767] [transport.py] [_log()] starting thread (client mode): 0x17346e00
2025-11-13T00:51:30.605 [DEBUG] [Thread-25767] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:51:30.611 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:51:30.612 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:51:30.620 [DEBUG] [Thread-25767] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:51:30.620 [INFO] [Thread-25767] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] client lang: <none>
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] server lang: <none>
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] kex follows: False
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:51:30.628 [DEBUG] [Thread-25767] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:51:30.629 [DEBUG] [Thread-25767] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:51:30.629 [DEBUG] [Thread-25767] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:51:30.629 [DEBUG] [Thread-25767] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:51:30.629 [DEBUG] [Thread-25767] [transport.py] [_log()] Compression: none
2025-11-13T00:51:30.629 [DEBUG] [Thread-25767] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:51:30.688 [DEBUG] [Thread-25767] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:51:30.688 [DEBUG] [Thread-25767] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:51:30.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:51:30.698 [DEBUG] [Thread-25767] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:51:30.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:51:30.744 [DEBUG] [Thread-25767] [transport.py] [_log()] userauth is OK
2025-11-13T00:51:30.744 [DEBUG] [Thread-25767] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:51:30.744 [DEBUG] [Thread-25767] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:51:30.744 [DEBUG] [Thread-25767] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:51:30.744 [DEBUG] [Thread-25767] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:51:30.763 [INFO] [Thread-25767] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:51:30.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:51:30.764 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:51:31.585 [DEBUG] [Thread-25767] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:51:31.585 [DEBUG] [Thread-25767] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:51:31.634 [DEBUG] [Thread-25767] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:51:31.634 [DEBUG] [Thread-25767] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:51:31.643 [DEBUG] [Thread-25767] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:51:31.652 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:51:31.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-11-13T00:51:31.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-11-13T00:51:31.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:51:31.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:51:31.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:51:31.683 [DEBUG] [Thread-25767] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:51:36.426 [DEBUG] [Thread-25769 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:51:45.582 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:51:51.480 [DEBUG] [Thread-25770 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:01.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:52:01.704 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:52:01.707 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:52:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 51, 43), 6.19, 69.31, 0.0, 16.59, 10.22, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:52:02.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:51:43
2025-11-13T00:52:02.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:52:02.607 [DEBUG] [Thread-25771] [transport.py] [_log()] starting thread (client mode): 0x173458d0
2025-11-13T00:52:02.607 [DEBUG] [Thread-25771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:52:02.626 [DEBUG] [Thread-25771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:52:02.626 [INFO] [Thread-25771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:52:02.629 [DEBUG] [Thread-25771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:52:02.629 [DEBUG] [Thread-25771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:52:02.629 [DEBUG] [Thread-25771] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:52:02.629 [DEBUG] [Thread-25771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:52:02.629 [DEBUG] [Thread-25771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] client lang: <none>
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] server lang: <none>
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] kex follows: False
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] Compression: none
2025-11-13T00:52:02.630 [DEBUG] [Thread-25771] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:52:02.641 [DEBUG] [Thread-25771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:52:02.641 [DEBUG] [Thread-25771] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:52:02.641 [DEBUG] [Thread-25771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:52:02.641 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:52:02.642 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:52:02.643 [DEBUG] [Thread-25771] [transport.py] [_log()] userauth is OK
2025-11-13T00:52:02.643 [DEBUG] [Thread-25771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:52:02.643 [DEBUG] [Thread-25771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:52:02.643 [DEBUG] [Thread-25771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:52:02.643 [DEBUG] [Thread-25771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:52:02.665 [INFO] [Thread-25771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:52:02.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:52:03.286 [DEBUG] [Thread-25771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:52:03.286 [DEBUG] [Thread-25771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:52:03.286 [DEBUG] [Thread-25771] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:52:03.327 [DEBUG] [Thread-25771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:52:03.327 [DEBUG] [Thread-25771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:52:03.330 [DEBUG] [Thread-25771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:52:03.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:52:03.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:52:03.346 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:52:03.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:52:03.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:52:03.357 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:52:03.357 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:52:03.357 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:52:03.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:52:03.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.952522 -999.00  +15.30  12.89     59   +7.50 1 1 1 1 1     0    0 8.40 42.89 ZNESW 10.8 12.9 275.2 18.3 15.7 -23.3 15.6 -22.4 15.3 -21.7 15.6 -22.8
2025-11-13T00:52:03.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:52:03.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:52:03.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.952522
2025-11-13T00:52:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:52:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:52:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:52:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:52:03.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:52:03.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:51:43', tmtdew=6.19, humidity=69.31, cloud=0.0, wind=16.59, temperature=10.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:51:43', seeing=0.99, atlas_timestamp='2025-11-12T22:51:37.901', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:49:00')
2025-11-13T00:52:03.360 [DEBUG] [Thread-25771] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:52:03.443 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:52:03.456 [DEBUG] [Thread-25774] [transport.py] [_log()] starting thread (client mode): 0x14989ba0
2025-11-13T00:52:03.456 [DEBUG] [Thread-25774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:52:03.475 [DEBUG] [Thread-25774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:52:03.476 [INFO] [Thread-25774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:52:03.484 [DEBUG] [Thread-25774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:52:03.484 [DEBUG] [Thread-25774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] client lang: <none>
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] server lang: <none>
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] kex follows: False
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] Compression: none
2025-11-13T00:52:03.485 [DEBUG] [Thread-25774] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:52:03.548 [DEBUG] [Thread-25774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:52:03.549 [DEBUG] [Thread-25774] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:52:03.549 [DEBUG] [Thread-25774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:52:03.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:52:03.550 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:52:03.610 [DEBUG] [Thread-25774] [transport.py] [_log()] userauth is OK
2025-11-13T00:52:03.611 [DEBUG] [Thread-25774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:52:03.611 [DEBUG] [Thread-25774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:52:03.611 [DEBUG] [Thread-25774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:52:03.611 [DEBUG] [Thread-25774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:52:03.630 [INFO] [Thread-25774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:52:03.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:52:03.631 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:52:04.487 [DEBUG] [Thread-25774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:52:04.488 [DEBUG] [Thread-25774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:52:04.536 [DEBUG] [Thread-25774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:52:04.536 [DEBUG] [Thread-25774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:52:04.545 [DEBUG] [Thread-25774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:52:04.554 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:52:04.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-11-13T00:52:04.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-11-13T00:52:04.573 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:52:04.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:52:04.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:52:04.582 [DEBUG] [Thread-25774] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:52:06.513 [DEBUG] [Thread-25776 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:07.840 [DEBUG] [Thread-25777 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:13.194 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:17.298 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:21.565 [DEBUG] [Thread-25778 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:30.826 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:30.828 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:34.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:52:34.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:52:34.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-11-13T00:52:35.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 52, 15), 6.23, 69.18, 0.0, 17.63, 10.19, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:52:35.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:52:15
2025-11-13T00:52:35.417 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:52:35.572 [DEBUG] [Thread-25779] [transport.py] [_log()] starting thread (client mode): 0x14988880
2025-11-13T00:52:35.572 [DEBUG] [Thread-25779] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:52:35.593 [DEBUG] [Thread-25779] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:52:35.593 [INFO] [Thread-25779] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] client lang: <none>
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] server lang: <none>
2025-11-13T00:52:35.596 [DEBUG] [Thread-25779] [transport.py] [_log()] kex follows: False
2025-11-13T00:52:35.597 [DEBUG] [Thread-25779] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:52:35.597 [DEBUG] [Thread-25779] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:52:35.597 [DEBUG] [Thread-25779] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:52:35.597 [DEBUG] [Thread-25779] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:52:35.597 [DEBUG] [Thread-25779] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:52:35.597 [DEBUG] [Thread-25779] [transport.py] [_log()] Compression: none
2025-11-13T00:52:35.597 [DEBUG] [Thread-25779] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:52:35.612 [DEBUG] [Thread-25779] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:52:35.613 [DEBUG] [Thread-25779] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:52:35.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:52:35.613 [DEBUG] [Thread-25779] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:52:35.613 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:52:35.613 [DEBUG] [Thread-25779] [transport.py] [_log()] userauth is OK
2025-11-13T00:52:35.613 [DEBUG] [Thread-25779] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:52:35.613 [DEBUG] [Thread-25779] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:52:35.614 [DEBUG] [Thread-25779] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:52:35.614 [DEBUG] [Thread-25779] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:52:35.628 [INFO] [Thread-25779] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:52:35.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:52:36.265 [DEBUG] [Thread-25779] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:52:36.265 [DEBUG] [Thread-25779] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:52:36.265 [DEBUG] [Thread-25779] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:52:36.306 [DEBUG] [Thread-25779] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:52:36.306 [DEBUG] [Thread-25779] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:52:36.309 [DEBUG] [Thread-25779] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:52:36.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:52:36.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:52:36.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:52:36.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:52:36.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:52:36.329 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:52:36.329 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.952870 -999.00  +15.30  11.06     60   +7.60 1 1 1 1 1     0    0 8.39 43.37 ZNESW 13.9 11.1 268.6 13.3 15.7 -23.5 15.6 -22.4 15.3 -22.0 15.6 -22.9
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.952870
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:52:36.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:52:15', tmtdew=6.23, humidity=69.18, cloud=0.0, wind=17.63, temperature=10.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:52:15', seeing=0.99, atlas_timestamp='2025-11-12T22:52:07.968', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:49:00')
2025-11-13T00:52:36.330 [DEBUG] [Thread-25779] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:52:36.404 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:52:36.416 [DEBUG] [Thread-25782] [transport.py] [_log()] starting thread (client mode): 0x14946a10
2025-11-13T00:52:36.417 [DEBUG] [Thread-25782] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:52:36.431 [DEBUG] [Thread-25782] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:52:36.431 [INFO] [Thread-25782] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] client lang: <none>
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] server lang: <none>
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] kex follows: False
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] Compression: none
2025-11-13T00:52:36.439 [DEBUG] [Thread-25782] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:52:36.493 [DEBUG] [Thread-25782] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:52:36.494 [DEBUG] [Thread-25782] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:52:36.494 [DEBUG] [Thread-25782] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:52:36.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:52:36.494 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:52:36.551 [DEBUG] [Thread-25782] [transport.py] [_log()] userauth is OK
2025-11-13T00:52:36.551 [DEBUG] [Thread-25782] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:52:36.551 [DEBUG] [Thread-25782] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:52:36.551 [DEBUG] [Thread-25782] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:52:36.551 [DEBUG] [Thread-25782] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:52:36.564 [INFO] [Thread-25782] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:52:36.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:52:36.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:52:36.593 [DEBUG] [Thread-25784 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:52:37.393 [DEBUG] [Thread-25782] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:52:37.394 [DEBUG] [Thread-25782] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:52:37.441 [DEBUG] [Thread-25782] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:52:37.442 [DEBUG] [Thread-25782] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:52:37.451 [DEBUG] [Thread-25782] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:52:37.460 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:52:37.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')
2025-11-13T00:52:37.470 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:52:37.480 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:52:37.480 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:52:37.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:52:37.489 [DEBUG] [Thread-25782] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:52:51.634 [DEBUG] [Thread-25785 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:53:06.673 [DEBUG] [Thread-25786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:53:07.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:53:07.512 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:53:07.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-11-13T00:53:07.911 [DEBUG] [Thread-25787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:53:08.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 52, 47), 6.14, 69.35, 0.0, 17.75, 10.18, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:53:08.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:52:47
2025-11-13T00:53:08.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:53:08.436 [DEBUG] [Thread-25788] [transport.py] [_log()] starting thread (client mode): 0x1737d6f0
2025-11-13T00:53:08.436 [DEBUG] [Thread-25788] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:53:08.457 [DEBUG] [Thread-25788] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:53:08.457 [INFO] [Thread-25788] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:53:08.458 [DEBUG] [Thread-25788] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] client lang: <none>
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] server lang: <none>
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] kex follows: False
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] Compression: none
2025-11-13T00:53:08.459 [DEBUG] [Thread-25788] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:53:08.467 [DEBUG] [Thread-25788] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:53:08.468 [DEBUG] [Thread-25788] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:53:08.468 [DEBUG] [Thread-25788] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:53:08.468 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:53:08.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:53:08.470 [DEBUG] [Thread-25788] [transport.py] [_log()] userauth is OK
2025-11-13T00:53:08.470 [DEBUG] [Thread-25788] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:53:08.470 [DEBUG] [Thread-25788] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:53:08.470 [DEBUG] [Thread-25788] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:53:08.470 [DEBUG] [Thread-25788] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:53:08.488 [INFO] [Thread-25788] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:53:08.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:53:09.120 [DEBUG] [Thread-25788] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:53:09.120 [DEBUG] [Thread-25788] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:53:09.120 [DEBUG] [Thread-25788] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:53:09.160 [DEBUG] [Thread-25788] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:53:09.161 [DEBUG] [Thread-25788] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:53:09.164 [DEBUG] [Thread-25788] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:53:09.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:53:09.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:53:09.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:53:09.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:53:09.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:53:09.190 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:53:09.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:53:09.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:53:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:53:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.953217 -999.00  +15.40  15.25     58   +7.30 1 1 1 1 1     0    0 8.49 43.17 ZNESW 11.4 15.2 280.4 19.0 15.7 -23.3 15.6 -22.5 15.3 -21.9 15.6 -22.8
2025-11-13T00:53:09.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:53:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:53:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.953217
2025-11-13T00:53:09.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:53:09.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:53:09.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:53:09.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:53:09.193 [DEBUG] [Thread-25788] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:53:09.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:53:09.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:52:47', tmtdew=6.14, humidity=69.35, cloud=0.0, wind=17.75, temperature=10.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:52:47', seeing=1.16, atlas_timestamp='2025-11-12T22:52:37.949', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:49:00')
2025-11-13T00:53:09.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:53:09.295 [DEBUG] [Thread-25791] [transport.py] [_log()] starting thread (client mode): 0x1737eaa0
2025-11-13T00:53:09.295 [DEBUG] [Thread-25791] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:53:09.310 [DEBUG] [Thread-25791] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:53:09.310 [INFO] [Thread-25791] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:53:09.318 [DEBUG] [Thread-25791] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:53:09.318 [DEBUG] [Thread-25791] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:53:09.318 [DEBUG] [Thread-25791] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:53:09.318 [DEBUG] [Thread-25791] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:53:09.318 [DEBUG] [Thread-25791] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:53:09.318 [DEBUG] [Thread-25791] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:53:09.318 [DEBUG] [Thread-25791] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:53:09.319 [DEBUG] [Thread-25791] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:53:09.319 [DEBUG] [Thread-25791] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:53:09.319 [DEBUG] [Thread-25791] [transport.py] [_log()] client lang: <none>
2025-11-13T00:53:09.319 [DEBUG] [Thread-25791] [transport.py] [_log()] server lang: <none>
2025-11-13T00:53:09.319 [DEBUG] [Thread-25791] [transport.py] [_log()] kex follows: False
2025-11-13T00:53:09.319 [DEBUG] [Thread-25791] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:53:09.319 [DEBUG] [Thread-25791] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:53:09.319 [DEBUG] [Thread-25791] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:53:09.320 [DEBUG] [Thread-25791] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:53:09.320 [DEBUG] [Thread-25791] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:53:09.320 [DEBUG] [Thread-25791] [transport.py] [_log()] Compression: none
2025-11-13T00:53:09.320 [DEBUG] [Thread-25791] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:53:09.376 [DEBUG] [Thread-25791] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:53:09.376 [DEBUG] [Thread-25791] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:53:09.377 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:53:09.377 [DEBUG] [Thread-25791] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:53:09.378 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:53:09.432 [DEBUG] [Thread-25791] [transport.py] [_log()] userauth is OK
2025-11-13T00:53:09.432 [DEBUG] [Thread-25791] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:53:09.432 [DEBUG] [Thread-25791] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:53:09.432 [DEBUG] [Thread-25791] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:53:09.432 [DEBUG] [Thread-25791] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:53:09.451 [INFO] [Thread-25791] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:53:09.451 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:53:09.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:53:10.351 [DEBUG] [Thread-25791] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:53:10.351 [DEBUG] [Thread-25791] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:53:10.399 [DEBUG] [Thread-25791] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:53:10.399 [DEBUG] [Thread-25791] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:53:10.407 [DEBUG] [Thread-25791] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:53:10.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:53:10.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:53:10.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T00:53:10.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:53:10.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:53:10.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:53:10.438 [DEBUG] [Thread-25791] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:53:21.706 [DEBUG] [Thread-25793 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:53:31.031 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:53:31.032 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:53:36.768 [DEBUG] [Thread-25794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:53:39.799 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:53:40.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:53:40.461 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:53:40.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-11-13T00:53:41.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 53, 19), 6.11, 69.45, 0.0, 17.08, 10.17, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:53:41.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:53:19
2025-11-13T00:53:41.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:53:41.378 [DEBUG] [Thread-25795] [transport.py] [_log()] starting thread (client mode): 0x17345990
2025-11-13T00:53:41.378 [DEBUG] [Thread-25795] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:53:41.398 [DEBUG] [Thread-25795] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:53:41.398 [INFO] [Thread-25795] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] client lang: <none>
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] server lang: <none>
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] kex follows: False
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] Compression: none
2025-11-13T00:53:41.401 [DEBUG] [Thread-25795] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:53:41.420 [DEBUG] [Thread-25795] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:53:41.421 [DEBUG] [Thread-25795] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:53:41.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:53:41.422 [DEBUG] [Thread-25795] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:53:41.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:53:41.424 [DEBUG] [Thread-25795] [transport.py] [_log()] userauth is OK
2025-11-13T00:53:41.424 [DEBUG] [Thread-25795] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:53:41.424 [DEBUG] [Thread-25795] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:53:41.424 [DEBUG] [Thread-25795] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:53:41.424 [DEBUG] [Thread-25795] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:53:41.443 [INFO] [Thread-25795] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:53:41.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:53:42.057 [DEBUG] [Thread-25795] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:53:42.057 [DEBUG] [Thread-25795] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:53:42.057 [DEBUG] [Thread-25795] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:53:42.097 [DEBUG] [Thread-25795] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:53:42.098 [DEBUG] [Thread-25795] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:53:42.100 [DEBUG] [Thread-25795] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:53:42.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:53:42.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:53:42.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:53:42.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:53:42.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:53:42.119 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:53:42.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:53:42.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:53:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:53:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.953564 -999.00  +15.30  10.26     60   +7.70 1 1 1 1 1     0    0 8.66 48.32 ZNESW 10.8 10.3 273.6 13.9 15.7 -23.5 15.6 -22.5 15.3 -22.1 15.7 -22.9
2025-11-13T00:53:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:53:42.120 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:53:42.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.953564
2025-11-13T00:53:42.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:53:42.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:53:42.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:53:42.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:53:42.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:53:42.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:53:19', tmtdew=6.11, humidity=69.45, cloud=0.0, wind=17.08, temperature=10.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:53:19', seeing=1.26, atlas_timestamp='2025-11-12T22:53:07.930', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:49:00')
2025-11-13T00:53:42.122 [DEBUG] [Thread-25795] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:53:42.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:53:42.219 [DEBUG] [Thread-25798] [transport.py] [_log()] starting thread (client mode): 0x14989270
2025-11-13T00:53:42.219 [DEBUG] [Thread-25798] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:53:42.233 [DEBUG] [Thread-25798] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:53:42.234 [INFO] [Thread-25798] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:53:42.241 [DEBUG] [Thread-25798] [transport.py] [_log()] client lang: <none>
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] server lang: <none>
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] kex follows: False
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] Compression: none
2025-11-13T00:53:42.242 [DEBUG] [Thread-25798] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:53:42.300 [DEBUG] [Thread-25798] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:53:42.300 [DEBUG] [Thread-25798] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:53:42.301 [DEBUG] [Thread-25798] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:53:42.301 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:53:42.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:53:42.356 [DEBUG] [Thread-25798] [transport.py] [_log()] userauth is OK
2025-11-13T00:53:42.356 [DEBUG] [Thread-25798] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:53:42.356 [DEBUG] [Thread-25798] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:53:42.357 [DEBUG] [Thread-25798] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:53:42.357 [DEBUG] [Thread-25798] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:53:42.376 [INFO] [Thread-25798] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:53:42.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:53:42.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:53:43.222 [DEBUG] [Thread-25798] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:53:43.222 [DEBUG] [Thread-25798] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:53:43.270 [DEBUG] [Thread-25798] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:53:43.270 [DEBUG] [Thread-25798] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:53:43.279 [DEBUG] [Thread-25798] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:53:43.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:53:43.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-11-13T00:53:43.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-11-13T00:53:43.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:53:43.313 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:53:43.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:53:43.322 [DEBUG] [Thread-25798] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:53:51.803 [DEBUG] [Thread-25800 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:54:06.843 [DEBUG] [Thread-25801 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:54:07.969 [DEBUG] [Thread-25802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:54:13.331 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:54:13.332 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:54:13.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-11-13T00:54:13.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 53, 51), 5.99, 70.1, 0.0, 17.49, 10.13, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:54:13.976 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:53:51
2025-11-13T00:54:14.099 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:54:14.244 [DEBUG] [Thread-25803] [transport.py] [_log()] starting thread (client mode): 0x1498a3b0
2025-11-13T00:54:14.244 [DEBUG] [Thread-25803] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:54:14.264 [DEBUG] [Thread-25803] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:54:14.264 [INFO] [Thread-25803] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:54:14.267 [DEBUG] [Thread-25803] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] client lang: <none>
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] server lang: <none>
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] kex follows: False
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:54:14.268 [DEBUG] [Thread-25803] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:54:14.269 [DEBUG] [Thread-25803] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:54:14.269 [DEBUG] [Thread-25803] [transport.py] [_log()] Compression: none
2025-11-13T00:54:14.269 [DEBUG] [Thread-25803] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:54:14.286 [DEBUG] [Thread-25803] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:54:14.287 [DEBUG] [Thread-25803] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:54:14.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:54:14.288 [DEBUG] [Thread-25803] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:54:14.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:54:14.290 [DEBUG] [Thread-25803] [transport.py] [_log()] userauth is OK
2025-11-13T00:54:14.290 [DEBUG] [Thread-25803] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:54:14.290 [DEBUG] [Thread-25803] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:54:14.290 [DEBUG] [Thread-25803] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:54:14.291 [DEBUG] [Thread-25803] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:54:14.338 [INFO] [Thread-25803] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:54:14.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:54:14.967 [DEBUG] [Thread-25803] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:54:14.967 [DEBUG] [Thread-25803] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:54:14.968 [DEBUG] [Thread-25803] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:54:15.008 [DEBUG] [Thread-25803] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:54:15.008 [DEBUG] [Thread-25803] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:54:15.011 [DEBUG] [Thread-25803] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:54:15.023 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:54:15.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:54:15.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:54:15.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:54:15.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:54:15.036 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:54:15.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:54:15.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:54:15.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:54:15.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.953911 -999.00  +15.30  13.59     61   +7.80 1 1 1 1 1     0    0 8.69 47.20 ZNESW 11.8 13.6 268.0 15.7 15.7 -23.4 15.6 -22.5 15.3 -22.0 15.6 -23.0
2025-11-13T00:54:15.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:54:15.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:54:15.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.953911
2025-11-13T00:54:15.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:54:15.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:54:15.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:54:15.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:54:15.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:54:15.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:53:51', tmtdew=5.99, humidity=70.1, cloud=0.0, wind=17.49, temperature=10.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:53:51', seeing=1.26, atlas_timestamp='2025-11-12T22:53:37.910', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:53:00')
2025-11-13T00:54:15.039 [DEBUG] [Thread-25803] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:54:15.122 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:54:15.136 [DEBUG] [Thread-25806] [transport.py] [_log()] starting thread (client mode): 0x19dda890
2025-11-13T00:54:15.136 [DEBUG] [Thread-25806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:54:15.151 [DEBUG] [Thread-25806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:54:15.151 [INFO] [Thread-25806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:54:15.158 [DEBUG] [Thread-25806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:54:15.159 [DEBUG] [Thread-25806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:54:15.159 [DEBUG] [Thread-25806] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:54:15.159 [DEBUG] [Thread-25806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:54:15.159 [DEBUG] [Thread-25806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:54:15.159 [DEBUG] [Thread-25806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:54:15.159 [DEBUG] [Thread-25806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:54:15.160 [DEBUG] [Thread-25806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:54:15.160 [DEBUG] [Thread-25806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:54:15.160 [DEBUG] [Thread-25806] [transport.py] [_log()] client lang: <none>
2025-11-13T00:54:15.160 [DEBUG] [Thread-25806] [transport.py] [_log()] server lang: <none>
2025-11-13T00:54:15.160 [DEBUG] [Thread-25806] [transport.py] [_log()] kex follows: False
2025-11-13T00:54:15.160 [DEBUG] [Thread-25806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:54:15.160 [DEBUG] [Thread-25806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:54:15.160 [DEBUG] [Thread-25806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:54:15.161 [DEBUG] [Thread-25806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:54:15.161 [DEBUG] [Thread-25806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:54:15.161 [DEBUG] [Thread-25806] [transport.py] [_log()] Compression: none
2025-11-13T00:54:15.161 [DEBUG] [Thread-25806] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:54:15.216 [DEBUG] [Thread-25806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:54:15.216 [DEBUG] [Thread-25806] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:54:15.217 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:54:15.217 [DEBUG] [Thread-25806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:54:15.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:54:15.271 [DEBUG] [Thread-25806] [transport.py] [_log()] userauth is OK
2025-11-13T00:54:15.272 [DEBUG] [Thread-25806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:54:15.272 [DEBUG] [Thread-25806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:54:15.272 [DEBUG] [Thread-25806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:54:15.272 [DEBUG] [Thread-25806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:54:15.291 [INFO] [Thread-25806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:54:15.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:54:15.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:54:16.092 [DEBUG] [Thread-25806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:54:16.092 [DEBUG] [Thread-25806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:54:16.140 [DEBUG] [Thread-25806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:54:16.140 [DEBUG] [Thread-25806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:54:16.149 [DEBUG] [Thread-25806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:54:16.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:54:16.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:54:16.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-11-13T00:54:16.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:54:16.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:54:16.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:54:16.186 [DEBUG] [Thread-25806] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:54:21.881 [DEBUG] [Thread-25808 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:54:31.252 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:54:31.253 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:54:36.927 [DEBUG] [Thread-25809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:54:46.207 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:54:46.208 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:54:46.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-11-13T00:54:46.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 54, 23), 5.92, 70.35, 0.0, 17.33, 10.1, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:54:46.847 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:54:23
2025-11-13T00:54:46.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:54:47.114 [DEBUG] [Thread-25810] [transport.py] [_log()] starting thread (client mode): 0x19dd9660
2025-11-13T00:54:47.114 [DEBUG] [Thread-25810] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:54:47.134 [DEBUG] [Thread-25810] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:54:47.134 [INFO] [Thread-25810] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] client lang: <none>
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] server lang: <none>
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] kex follows: False
2025-11-13T00:54:47.138 [DEBUG] [Thread-25810] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:54:47.139 [DEBUG] [Thread-25810] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:54:47.139 [DEBUG] [Thread-25810] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:54:47.139 [DEBUG] [Thread-25810] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:54:47.139 [DEBUG] [Thread-25810] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:54:47.139 [DEBUG] [Thread-25810] [transport.py] [_log()] Compression: none
2025-11-13T00:54:47.139 [DEBUG] [Thread-25810] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:54:47.158 [DEBUG] [Thread-25810] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:54:47.159 [DEBUG] [Thread-25810] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:54:47.159 [DEBUG] [Thread-25810] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:54:47.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:54:47.160 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:54:47.161 [DEBUG] [Thread-25810] [transport.py] [_log()] userauth is OK
2025-11-13T00:54:47.161 [DEBUG] [Thread-25810] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:54:47.161 [DEBUG] [Thread-25810] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:54:47.161 [DEBUG] [Thread-25810] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:54:47.162 [DEBUG] [Thread-25810] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:54:47.198 [INFO] [Thread-25810] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:54:47.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:54:47.794 [DEBUG] [Thread-25810] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:54:47.795 [DEBUG] [Thread-25810] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:54:47.795 [DEBUG] [Thread-25810] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:54:47.836 [DEBUG] [Thread-25810] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:54:47.836 [DEBUG] [Thread-25810] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:54:47.839 [DEBUG] [Thread-25810] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:54:47.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:54:47.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:54:47.854 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:54:47.856 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:54:47.862 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:54:47.864 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:54:47.864 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:54:47.864 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:54:47.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:54:47.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.954606 -999.00  +15.20  11.14     60   +7.60 1 1 1 1 1     0    0 8.72 50.36 ZNESW 10.4 11.1 277.6 14.0 15.7 -23.4 15.6 -22.5 15.3 -22.0 15.6 -22.9
2025-11-13T00:54:47.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:54:47.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:54:47.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.954606
2025-11-13T00:54:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:54:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:54:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:54:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:54:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:54:47.866 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:54:23', tmtdew=5.92, humidity=70.35, cloud=0.0, wind=17.33, temperature=10.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:54:23', seeing=0.95, atlas_timestamp='2025-11-12T22:54:37.958', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:53:00')
2025-11-13T00:54:47.867 [DEBUG] [Thread-25810] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:54: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-11-13T00:54:47.962 [DEBUG] [Thread-25813] [transport.py] [_log()] starting thread (client mode): 0x19ddb250
2025-11-13T00:54:47.962 [DEBUG] [Thread-25813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:54:47.977 [DEBUG] [Thread-25813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:54:47.977 [INFO] [Thread-25813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] client lang: <none>
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] server lang: <none>
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] kex follows: False
2025-11-13T00:54:47.985 [DEBUG] [Thread-25813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:54:47.986 [DEBUG] [Thread-25813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:54:47.986 [DEBUG] [Thread-25813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:54:47.986 [DEBUG] [Thread-25813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:54:47.986 [DEBUG] [Thread-25813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:54:47.986 [DEBUG] [Thread-25813] [transport.py] [_log()] Compression: none
2025-11-13T00:54:47.986 [DEBUG] [Thread-25813] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:54:48.043 [DEBUG] [Thread-25813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:54:48.044 [DEBUG] [Thread-25813] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:54:48.045 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:54:48.045 [DEBUG] [Thread-25813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:54:48.046 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:54:48.101 [DEBUG] [Thread-25813] [transport.py] [_log()] userauth is OK
2025-11-13T00:54:48.101 [DEBUG] [Thread-25813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:54:48.101 [DEBUG] [Thread-25813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:54:48.101 [DEBUG] [Thread-25813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:54:48.101 [DEBUG] [Thread-25813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:54:48.124 [INFO] [Thread-25813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:54:48.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:54:48.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:54:48.967 [DEBUG] [Thread-25813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:54:48.967 [DEBUG] [Thread-25813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:54:49.018 [DEBUG] [Thread-25813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:54:49.018 [DEBUG] [Thread-25813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:54:49.027 [DEBUG] [Thread-25813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:54:49.036 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:54:49.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:54:49.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-11-13T00:54:49.056 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:54:49.056 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:54:49.057 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:54:49.065 [DEBUG] [Thread-25813] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:54:51.965 [DEBUG] [Thread-25815 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:07.015 [DEBUG] [Thread-25816 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:08.020 [DEBUG] [Thread-25817 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:19.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:55:19.062 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:55:19.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-11-13T00:55:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 54, 55), 6.01, 70.05, 0.0, 19.37, 10.09, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:55:19.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:54:55
2025-11-13T00:55:19.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:55:19.954 [DEBUG] [Thread-25818] [transport.py] [_log()] starting thread (client mode): 0x14922e90
2025-11-13T00:55:19.954 [DEBUG] [Thread-25818] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:55:19.976 [DEBUG] [Thread-25818] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:55:19.976 [INFO] [Thread-25818] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:55:19.979 [DEBUG] [Thread-25818] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] client lang: <none>
2025-11-13T00:55:19.980 [DEBUG] [Thread-25818] [transport.py] [_log()] server lang: <none>
2025-11-13T00:55:19.981 [DEBUG] [Thread-25818] [transport.py] [_log()] kex follows: False
2025-11-13T00:55:19.981 [DEBUG] [Thread-25818] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:55:19.981 [DEBUG] [Thread-25818] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:55:19.981 [DEBUG] [Thread-25818] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:55:19.981 [DEBUG] [Thread-25818] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:55:19.981 [DEBUG] [Thread-25818] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:55:19.981 [DEBUG] [Thread-25818] [transport.py] [_log()] Compression: none
2025-11-13T00:55:19.981 [DEBUG] [Thread-25818] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:55:20.000 [DEBUG] [Thread-25818] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:55:20.001 [DEBUG] [Thread-25818] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:55:20.002 [DEBUG] [Thread-25818] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:55:20.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:55:20.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:55:20.004 [DEBUG] [Thread-25818] [transport.py] [_log()] userauth is OK
2025-11-13T00:55:20.004 [DEBUG] [Thread-25818] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:55:20.004 [DEBUG] [Thread-25818] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:55:20.004 [DEBUG] [Thread-25818] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:55:20.004 [DEBUG] [Thread-25818] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:55:20.030 [INFO] [Thread-25818] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:55:20.031 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:55:20.742 [DEBUG] [Thread-25818] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:55:20.742 [DEBUG] [Thread-25818] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:55:20.743 [DEBUG] [Thread-25818] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:55:20.783 [DEBUG] [Thread-25818] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:55:20.784 [DEBUG] [Thread-25818] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:55:20.787 [DEBUG] [Thread-25818] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:55:20.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:55:20.799 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:55:20.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:55:20.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:55:20.807 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:55:20.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:55:20.809 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:55:20.809 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:55:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:55:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.954953 -999.00  +15.20  10.01     60   +7.60 1 1 1 1 1     0    0 8.76 50.95 ZNESW 10.3 10.0 269.6 13.5 15.7 -23.5 15.6 -22.5 15.3 -22.1 15.7 -23.0
2025-11-13T00:55:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:55:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:55:20.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.954953
2025-11-13T00:55:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:55:20.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:55:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:55:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:55:20.811 [DEBUG] [Thread-25818] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:55:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:55:20.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:54:55', tmtdew=6.01, humidity=70.05, cloud=0.0, wind=19.37, temperature=10.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:54:55', seeing=0.97, atlas_timestamp='2025-11-12T22:55:07.939', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:53:00')
2025-11-13T00:55:20.894 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:55:20.906 [DEBUG] [Thread-25821] [transport.py] [_log()] starting thread (client mode): 0x14920a90
2025-11-13T00:55:20.906 [DEBUG] [Thread-25821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:55:20.922 [DEBUG] [Thread-25821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:55:20.922 [INFO] [Thread-25821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:55:20.929 [DEBUG] [Thread-25821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:55:20.929 [DEBUG] [Thread-25821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:55:20.929 [DEBUG] [Thread-25821] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:55:20.929 [DEBUG] [Thread-25821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:55:20.929 [DEBUG] [Thread-25821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:55:20.929 [DEBUG] [Thread-25821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:55:20.929 [DEBUG] [Thread-25821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:55:20.929 [DEBUG] [Thread-25821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] client lang: <none>
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] server lang: <none>
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] kex follows: False
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] Compression: none
2025-11-13T00:55:20.930 [DEBUG] [Thread-25821] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:55:20.988 [DEBUG] [Thread-25821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:55:20.989 [DEBUG] [Thread-25821] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:55:20.990 [DEBUG] [Thread-25821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:55:20.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:55:20.991 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:55:21.048 [DEBUG] [Thread-25821] [transport.py] [_log()] userauth is OK
2025-11-13T00:55:21.048 [DEBUG] [Thread-25821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:55:21.048 [DEBUG] [Thread-25821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:55:21.048 [DEBUG] [Thread-25821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:55:21.048 [DEBUG] [Thread-25821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:55:21.067 [INFO] [Thread-25821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:55:21.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:55:21.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:55:21.887 [DEBUG] [Thread-25821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:55:21.887 [DEBUG] [Thread-25821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:55:21.936 [DEBUG] [Thread-25821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:55:21.936 [DEBUG] [Thread-25821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:55:21.945 [DEBUG] [Thread-25821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:55:21.956 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:55:21.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-11-13T00:55:21.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-11-13T00:55:21.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:55:21.977 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:55:21.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:55:21.986 [DEBUG] [Thread-25821] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:55:22.046 [DEBUG] [Thread-25823 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:26.093 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:29.289 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:31.456 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:31.457 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:34.310 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:37.100 [DEBUG] [Thread-25824 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:40.688 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:52.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:55:52.009 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:55: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-11-13T00:55:52.129 [DEBUG] [Thread-25825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:55:52.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 55, 27), 5.99, 70.13, 0.0, 18.9, 10.07, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:55:52.639 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:55:27
2025-11-13T00:55:52.762 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:55:52.907 [DEBUG] [Thread-25826] [transport.py] [_log()] starting thread (client mode): 0x149057b0
2025-11-13T00:55:52.907 [DEBUG] [Thread-25826] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:55:52.927 [DEBUG] [Thread-25826] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:55:52.927 [INFO] [Thread-25826] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:55:52.930 [DEBUG] [Thread-25826] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:55:52.930 [DEBUG] [Thread-25826] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:55:52.930 [DEBUG] [Thread-25826] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:55:52.930 [DEBUG] [Thread-25826] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:55:52.930 [DEBUG] [Thread-25826] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:55:52.930 [DEBUG] [Thread-25826] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] client lang: <none>
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] server lang: <none>
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] kex follows: False
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] Compression: none
2025-11-13T00:55:52.931 [DEBUG] [Thread-25826] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:55:52.941 [DEBUG] [Thread-25826] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:55:52.941 [DEBUG] [Thread-25826] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:55:52.942 [DEBUG] [Thread-25826] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:55:52.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:55:52.942 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:55:52.985 [DEBUG] [Thread-25826] [transport.py] [_log()] userauth is OK
2025-11-13T00:55:52.985 [DEBUG] [Thread-25826] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:55:52.985 [DEBUG] [Thread-25826] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:55:52.985 [DEBUG] [Thread-25826] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:55:52.986 [DEBUG] [Thread-25826] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:55:53.008 [INFO] [Thread-25826] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:55:53.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:55:53.576 [DEBUG] [Thread-25826] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:55:53.576 [DEBUG] [Thread-25826] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:55:53.577 [DEBUG] [Thread-25826] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:55:53.618 [DEBUG] [Thread-25826] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:55:53.618 [DEBUG] [Thread-25826] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:55:53.621 [DEBUG] [Thread-25826] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:55:53.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:55:53.634 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:55:53.635 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:55:53.637 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:55:53.642 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:55:53.644 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:55:53.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:55:53.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:55:53.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:55:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.955300 -999.00  +15.20   8.61     60   +7.50 1 1 1 1 1     0    0 8.65 50.57 ZNESW 11.9 8.6 274.0 15.6 15.7 -23.6 15.6 -22.6 15.3 -22.1 15.6 -22.9
2025-11-13T00:55:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:55:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:55:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.955300
2025-11-13T00:55:53.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:55:53.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:55:53.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:55:53.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:55:53.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:55:53.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:55:27', tmtdew=5.99, humidity=70.13, cloud=0.0, wind=18.9, temperature=10.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:55:27', seeing=0.97, atlas_timestamp='2025-11-12T22:55:37.920', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:53:00')
2025-11-13T00:55:53.647 [DEBUG] [Thread-25826] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:55:53.730 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:55:53.742 [DEBUG] [Thread-25829] [transport.py] [_log()] starting thread (client mode): 0x19dd8bb0
2025-11-13T00:55:53.742 [DEBUG] [Thread-25829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:55:53.756 [DEBUG] [Thread-25829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:55:53.756 [INFO] [Thread-25829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:55:53.764 [DEBUG] [Thread-25829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:55:53.764 [DEBUG] [Thread-25829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:55:53.764 [DEBUG] [Thread-25829] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:55:53.764 [DEBUG] [Thread-25829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:55:53.764 [DEBUG] [Thread-25829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:55:53.764 [DEBUG] [Thread-25829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:55:53.764 [DEBUG] [Thread-25829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:55:53.764 [DEBUG] [Thread-25829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:55:53.765 [DEBUG] [Thread-25829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:55:53.765 [DEBUG] [Thread-25829] [transport.py] [_log()] client lang: <none>
2025-11-13T00:55:53.765 [DEBUG] [Thread-25829] [transport.py] [_log()] server lang: <none>
2025-11-13T00:55:53.765 [DEBUG] [Thread-25829] [transport.py] [_log()] kex follows: False
2025-11-13T00:55:53.765 [DEBUG] [Thread-25829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:55:53.765 [DEBUG] [Thread-25829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:55:53.765 [DEBUG] [Thread-25829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:55:53.765 [DEBUG] [Thread-25829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:55:53.766 [DEBUG] [Thread-25829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:55:53.766 [DEBUG] [Thread-25829] [transport.py] [_log()] Compression: none
2025-11-13T00:55:53.766 [DEBUG] [Thread-25829] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:55:53.824 [DEBUG] [Thread-25829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:55:53.824 [DEBUG] [Thread-25829] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:55:53.825 [DEBUG] [Thread-25829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:55:53.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:55:53.826 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:55:53.880 [DEBUG] [Thread-25829] [transport.py] [_log()] userauth is OK
2025-11-13T00:55:53.880 [DEBUG] [Thread-25829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:55:53.880 [DEBUG] [Thread-25829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:55:53.880 [DEBUG] [Thread-25829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:55:53.880 [DEBUG] [Thread-25829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:55:53.899 [INFO] [Thread-25829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:55:53.900 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:55:53.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:55:54.708 [DEBUG] [Thread-25829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:55:54.708 [DEBUG] [Thread-25829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:55:54.755 [DEBUG] [Thread-25829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:55:54.756 [DEBUG] [Thread-25829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:55:54.765 [DEBUG] [Thread-25829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:55:54.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:55:54.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-11-13T00:55:54.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-11-13T00:55:54.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:55:54.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:55:54.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:55:54.802 [DEBUG] [Thread-25829] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:55:59.071 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:03.426 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:07.161 [DEBUG] [Thread-25831 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:08.072 [DEBUG] [Thread-25832 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:22.213 [DEBUG] [Thread-25833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:22.831 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:24.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:56:24.823 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:56:24.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-11-13T00:56:25.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 55, 59), 6.04, 69.76, 0.0, 17.1, 10.08, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:56:25.492 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:55:59
2025-11-13T00:56:25.620 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:56:25.772 [DEBUG] [Thread-25834] [transport.py] [_log()] starting thread (client mode): 0x19ddaf20
2025-11-13T00:56:25.772 [DEBUG] [Thread-25834] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:56:25.793 [DEBUG] [Thread-25834] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:56:25.793 [INFO] [Thread-25834] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] client lang: <none>
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] server lang: <none>
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] kex follows: False
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] Compression: none
2025-11-13T00:56:25.796 [DEBUG] [Thread-25834] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:56:25.812 [DEBUG] [Thread-25834] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:56:25.812 [DEBUG] [Thread-25834] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:56:25.812 [DEBUG] [Thread-25834] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:56:25.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:56:25.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:56:25.813 [DEBUG] [Thread-25834] [transport.py] [_log()] userauth is OK
2025-11-13T00:56:25.813 [DEBUG] [Thread-25834] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:56:25.813 [DEBUG] [Thread-25834] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:56:25.813 [DEBUG] [Thread-25834] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:56:25.813 [DEBUG] [Thread-25834] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:56:25.830 [INFO] [Thread-25834] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:56:25.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:56:26.436 [DEBUG] [Thread-25834] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:56:26.436 [DEBUG] [Thread-25834] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:56:26.436 [DEBUG] [Thread-25834] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:56:26.477 [DEBUG] [Thread-25834] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:56:26.477 [DEBUG] [Thread-25834] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:56:26.479 [DEBUG] [Thread-25834] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:56:26.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:56:26.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:56:26.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:56:26.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:56:26.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:56:26.489 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:56:26.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:56:26.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:56:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:56:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.955647 -999.00  +15.30  15.35     58   +7.20 1 1 1 1 1     0    0 8.89 57.48 ZNESW 11.2 15.3 266.4 17.9 15.7 -23.4 15.6 -22.5 15.3 -22.1 15.6 -23.0
2025-11-13T00:56:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:56:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:56:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.955647
2025-11-13T00:56:26.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:56:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:56:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:56:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:56:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:56:26.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:55:59', tmtdew=6.04, humidity=69.76, cloud=0.0, wind=17.1, temperature=10.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:55:59', seeing=0.99, atlas_timestamp='2025-11-12T22:56:07.901', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.013250000000001094, 0.016250000000001208, 0.03549999999999898, 0.0625, 0.009250000000001535, 0.01699999999999946, 0.01925000000000132, 0.0015000000000000568, 0.029500000000000526, 0.1197499999999998, 0.026999999999999247, 0.10549999999999926, 0.03424999999999834, -0.009000000000000341, -0.013500000000000512, -0.0017499999999994742, 0.09600000000000009, 0.19599999999999973, 0.057749999999998636, 0.08399999999999963, 0.05674999999999919, 0.012750000000000483, -0.004749999999999588, -0.0070000000000014495, 0.23349999999999937, 0.4477500000000001, 0.27550000000000097, 0.0470000000000006, 0.17600000000000016, 0.2810000000000006, 0.1385000000000005, 0.0467499999999994], zp_timestamp='2025-11-12T22:53:00')
2025-11-13T00:56:26.490 [DEBUG] [Thread-25834] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:56: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-11-13T00:56:26.576 [DEBUG] [Thread-25837] [transport.py] [_log()] starting thread (client mode): 0x19ddb880
2025-11-13T00:56:26.576 [DEBUG] [Thread-25837] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:56:26.591 [DEBUG] [Thread-25837] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:56:26.591 [INFO] [Thread-25837] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] client lang: <none>
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] server lang: <none>
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] kex follows: False
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] Compression: none
2025-11-13T00:56:26.599 [DEBUG] [Thread-25837] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:56:26.654 [DEBUG] [Thread-25837] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:56:26.654 [DEBUG] [Thread-25837] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:56:26.655 [DEBUG] [Thread-25837] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:56:26.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:56:26.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:56:26.711 [DEBUG] [Thread-25837] [transport.py] [_log()] userauth is OK
2025-11-13T00:56:26.711 [DEBUG] [Thread-25837] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:56:26.711 [DEBUG] [Thread-25837] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:56:26.711 [DEBUG] [Thread-25837] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:56:26.711 [DEBUG] [Thread-25837] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:56:26.726 [INFO] [Thread-25837] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:56:26.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:56:26.726 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:56:27.208 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:27.574 [DEBUG] [Thread-25837] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:56:27.574 [DEBUG] [Thread-25837] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:56:27.622 [DEBUG] [Thread-25837] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:56:27.622 [DEBUG] [Thread-25837] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:56:27.630 [DEBUG] [Thread-25837] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:56:27.638 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:56:27.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-11-13T00:56:27.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-11-13T00:56:27.654 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:56:27.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:56:27.654 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:56:27.662 [DEBUG] [Thread-25837] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:56:31.660 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:31.661 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:33.926 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:37.248 [DEBUG] [Thread-25839 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:38.298 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:52.294 [DEBUG] [Thread-25840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:56:57.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:56:57.681 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:56:57.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-11-13T00:56:58.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 56, 31), 6.09, 69.55, 0.0, 17.54, 10.1, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:56:58.312 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:56:31
2025-11-13T00:56:58.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:56:58.580 [DEBUG] [Thread-25841] [transport.py] [_log()] starting thread (client mode): 0x19dda230
2025-11-13T00:56:58.581 [DEBUG] [Thread-25841] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:56:58.601 [DEBUG] [Thread-25841] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:56:58.601 [INFO] [Thread-25841] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:56:58.604 [DEBUG] [Thread-25841] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] client lang: <none>
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] server lang: <none>
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] kex follows: False
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] Compression: none
2025-11-13T00:56:58.605 [DEBUG] [Thread-25841] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:56:58.622 [DEBUG] [Thread-25841] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:56:58.623 [DEBUG] [Thread-25841] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:56:58.623 [DEBUG] [Thread-25841] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:56:58.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:56:58.624 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:56:58.626 [DEBUG] [Thread-25841] [transport.py] [_log()] userauth is OK
2025-11-13T00:56:58.626 [DEBUG] [Thread-25841] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:56:58.626 [DEBUG] [Thread-25841] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:56:58.626 [DEBUG] [Thread-25841] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:56:58.626 [DEBUG] [Thread-25841] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:56:58.663 [INFO] [Thread-25841] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:56:58.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:56:59.323 [DEBUG] [Thread-25841] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:56:59.324 [DEBUG] [Thread-25841] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:56:59.324 [DEBUG] [Thread-25841] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:56:59.365 [DEBUG] [Thread-25841] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:56:59.365 [DEBUG] [Thread-25841] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:56:59.368 [DEBUG] [Thread-25841] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:56:59.380 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:56:59.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:56:59.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:56:59.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:56:59.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:56:59.393 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:56:59.393 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:56:59.393 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:56:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:56:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.955647 -999.00  +15.30  15.35     58   +7.20 1 1 1 1 1     0    0 8.89 57.48 ZNESW 11.2 15.3 266.4 17.9 15.7 -23.4 15.6 -22.5 15.3 -22.1 15.6 -23.0
2025-11-13T00:56:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:56:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:56:59.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.955647
2025-11-13T00:56:59.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:56:59.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:56:59.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:56:59.396 [DEBUG] [Thread-25841] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:56:59.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:56:59.396 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:56:59.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:56:31', tmtdew=6.09, humidity=69.55, cloud=0.0, wind=17.54, temperature=10.1, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:56:31', seeing=0.99, atlas_timestamp='2025-11-12T22:56:07.901', atlas_cloud=1, atlas_rain=1, zp_data=[0.02224999999999966, 0.052250000000000796, 0.0652500000000007, 0.0934999999999988, 0.07150000000000034, 0.11224999999999952, 0.054499999999999105, 0.01425000000000054, 0.05699999999999861, 0.053000000000000824, 0.15174999999999983, 0.08549999999999969, 0.1379999999999999, 0.0962499999999995, -0.0005000000000006111, 0.012999999999998124, 0.04925000000000068, 0.10350000000000037, 0.19299999999999962, 0.08124999999999893, 0.10449999999999804, 0.09324999999999761, 0.11325000000000074, 0.0547500000000003, 0.013999999999999346, 0.17350000000000065, 0.3932500000000001, 0.27449999999999974, 0.1280000000000001, 0.24150000000000205, 0.2660000000000018, 0.1620000000000008, 0.08274999999999899], zp_timestamp='2025-11-12T22:55:00')
2025-11-13T00:56:59.479 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:56:59.492 [DEBUG] [Thread-25844] [transport.py] [_log()] starting thread (client mode): 0x1498ac80
2025-11-13T00:56:59.493 [DEBUG] [Thread-25844] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:56:59.507 [DEBUG] [Thread-25844] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:56:59.507 [INFO] [Thread-25844] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:56:59.514 [DEBUG] [Thread-25844] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:56:59.515 [DEBUG] [Thread-25844] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:56:59.515 [DEBUG] [Thread-25844] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:56:59.515 [DEBUG] [Thread-25844] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:56:59.515 [DEBUG] [Thread-25844] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:56:59.515 [DEBUG] [Thread-25844] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:56:59.515 [DEBUG] [Thread-25844] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:56:59.516 [DEBUG] [Thread-25844] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:56:59.516 [DEBUG] [Thread-25844] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:56:59.516 [DEBUG] [Thread-25844] [transport.py] [_log()] client lang: <none>
2025-11-13T00:56:59.516 [DEBUG] [Thread-25844] [transport.py] [_log()] server lang: <none>
2025-11-13T00:56:59.516 [DEBUG] [Thread-25844] [transport.py] [_log()] kex follows: False
2025-11-13T00:56:59.516 [DEBUG] [Thread-25844] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:56:59.516 [DEBUG] [Thread-25844] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:56:59.517 [DEBUG] [Thread-25844] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:56:59.517 [DEBUG] [Thread-25844] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:56:59.517 [DEBUG] [Thread-25844] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:56:59.517 [DEBUG] [Thread-25844] [transport.py] [_log()] Compression: none
2025-11-13T00:56:59.517 [DEBUG] [Thread-25844] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:56:59.571 [DEBUG] [Thread-25844] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:56:59.572 [DEBUG] [Thread-25844] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:56:59.572 [DEBUG] [Thread-25844] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:56:59.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:56:59.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:56:59.628 [DEBUG] [Thread-25844] [transport.py] [_log()] userauth is OK
2025-11-13T00:56:59.628 [DEBUG] [Thread-25844] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:56:59.628 [DEBUG] [Thread-25844] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:56:59.628 [DEBUG] [Thread-25844] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:56:59.628 [DEBUG] [Thread-25844] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:56:59.652 [INFO] [Thread-25844] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:56:59.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:56:59.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:57:00.464 [DEBUG] [Thread-25844] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:57:00.464 [DEBUG] [Thread-25844] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:57:00.512 [DEBUG] [Thread-25844] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:57:00.513 [DEBUG] [Thread-25844] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:57:00.522 [DEBUG] [Thread-25844] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:57:00.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:57:00.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:57:00.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-11-13T00:57:00.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:57:00.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:57:00.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:57:00.557 [DEBUG] [Thread-25844] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:57:07.329 [DEBUG] [Thread-25846 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:57:08.129 [DEBUG] [Thread-25847 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:57:22.395 [DEBUG] [Thread-25848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:57:30.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:57:30.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:57:30.582 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:57:31.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 57, 3), 6.19, 69.2, 0.0, 17.94, 10.09, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:57:31.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:57:03
2025-11-13T00:57:31.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:57:31.483 [DEBUG] [Thread-25849] [transport.py] [_log()] starting thread (client mode): 0x149884c0
2025-11-13T00:57:31.483 [DEBUG] [Thread-25849] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:57:31.504 [DEBUG] [Thread-25849] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:57:31.504 [INFO] [Thread-25849] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] client lang: <none>
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] server lang: <none>
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] kex follows: False
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:57:31.507 [DEBUG] [Thread-25849] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:57:31.508 [DEBUG] [Thread-25849] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:57:31.508 [DEBUG] [Thread-25849] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:57:31.508 [DEBUG] [Thread-25849] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:57:31.508 [DEBUG] [Thread-25849] [transport.py] [_log()] Compression: none
2025-11-13T00:57:31.508 [DEBUG] [Thread-25849] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:57:31.525 [DEBUG] [Thread-25849] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:57:31.525 [DEBUG] [Thread-25849] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:57:31.526 [DEBUG] [Thread-25849] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:57:31.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:57:31.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:57:31.569 [DEBUG] [Thread-25849] [transport.py] [_log()] userauth is OK
2025-11-13T00:57:31.569 [DEBUG] [Thread-25849] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:57:31.569 [DEBUG] [Thread-25849] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:57:31.569 [DEBUG] [Thread-25849] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:57:31.570 [DEBUG] [Thread-25849] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:57:31.600 [INFO] [Thread-25849] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:57:31.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:57:31.864 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:57:31.865 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:57:32.564 [DEBUG] [Thread-25849] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:57:32.564 [DEBUG] [Thread-25849] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:57:32.565 [DEBUG] [Thread-25849] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:57:32.606 [DEBUG] [Thread-25849] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:57:32.606 [DEBUG] [Thread-25849] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:57:32.609 [DEBUG] [Thread-25849] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:57:32.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:57:32.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:57:32.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:57:32.625 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:57:32.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:57:32.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:57:32.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:57:32.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:57:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:57:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.955995 -999.00  +15.30  13.90     58   +7.10 1 1 1 1 1     0    0 9.18 63.90 ZNESW 13.3 13.9 268.0 17.7 15.7 -23.6 15.6 -22.4 15.3 -22.1 15.6 -22.8
2025-11-13T00:57:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:57:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:57:32.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.955995
2025-11-13T00:57:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:57:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:57:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:57:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:57:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:57:32.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:57:03', tmtdew=6.19, humidity=69.2, cloud=0.0, wind=17.94, temperature=10.09, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:57:03', seeing=0.95, atlas_timestamp='2025-11-12T22:56:37.968', atlas_cloud=1, atlas_rain=1, zp_data=[0.02224999999999966, 0.052250000000000796, 0.0652500000000007, 0.0934999999999988, 0.07150000000000034, 0.11224999999999952, 0.054499999999999105, 0.01425000000000054, 0.05699999999999861, 0.053000000000000824, 0.15174999999999983, 0.08549999999999969, 0.1379999999999999, 0.0962499999999995, -0.0005000000000006111, 0.012999999999998124, 0.04925000000000068, 0.10350000000000037, 0.19299999999999962, 0.08124999999999893, 0.10449999999999804, 0.09324999999999761, 0.11325000000000074, 0.0547500000000003, 0.013999999999999346, 0.17350000000000065, 0.3932500000000001, 0.27449999999999974, 0.1280000000000001, 0.24150000000000205, 0.2660000000000018, 0.1620000000000008, 0.08274999999999899], zp_timestamp='2025-11-12T22:55:00')
2025-11-13T00:57:32.636 [DEBUG] [Thread-25849] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:57:32.718 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:57:32.730 [DEBUG] [Thread-25852] [transport.py] [_log()] starting thread (client mode): 0x14923070
2025-11-13T00:57:32.731 [DEBUG] [Thread-25852] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:57:32.745 [DEBUG] [Thread-25852] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:57:32.745 [INFO] [Thread-25852] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] client lang: <none>
2025-11-13T00:57:32.753 [DEBUG] [Thread-25852] [transport.py] [_log()] server lang: <none>
2025-11-13T00:57:32.754 [DEBUG] [Thread-25852] [transport.py] [_log()] kex follows: False
2025-11-13T00:57:32.754 [DEBUG] [Thread-25852] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:57:32.754 [DEBUG] [Thread-25852] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:57:32.754 [DEBUG] [Thread-25852] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:57:32.754 [DEBUG] [Thread-25852] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:57:32.754 [DEBUG] [Thread-25852] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:57:32.754 [DEBUG] [Thread-25852] [transport.py] [_log()] Compression: none
2025-11-13T00:57:32.754 [DEBUG] [Thread-25852] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:57:32.812 [DEBUG] [Thread-25852] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:57:32.813 [DEBUG] [Thread-25852] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:57:32.813 [DEBUG] [Thread-25852] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:57:32.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:57:32.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:57:32.872 [DEBUG] [Thread-25852] [transport.py] [_log()] userauth is OK
2025-11-13T00:57:32.872 [DEBUG] [Thread-25852] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:57:32.872 [DEBUG] [Thread-25852] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:57:32.873 [DEBUG] [Thread-25852] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:57:32.873 [DEBUG] [Thread-25852] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:57:32.891 [INFO] [Thread-25852] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:57:32.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:57:32.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:57:33.716 [DEBUG] [Thread-25852] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:57:33.716 [DEBUG] [Thread-25852] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:57:33.764 [DEBUG] [Thread-25852] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:57:33.764 [DEBUG] [Thread-25852] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:57:33.773 [DEBUG] [Thread-25852] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:57:33.782 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:57:33.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-11-13T00:57:33.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-11-13T00:57:33.799 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:57:33.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:57:33.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:57:33.808 [DEBUG] [Thread-25852] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:57:37.430 [DEBUG] [Thread-25854 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:57:37.554 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:57:40.604 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:57:52.467 [DEBUG] [Thread-25855 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:03.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:58:03.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:58:03.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:58:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 57, 35), 6.32, 68.62, 0.0, 18.77, 10.14, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:58:04.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:57:35
2025-11-13T00:58:04.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:58:04.737 [DEBUG] [Thread-25856] [transport.py] [_log()] starting thread (client mode): 0x149221a0
2025-11-13T00:58:04.737 [DEBUG] [Thread-25856] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:58:04.760 [DEBUG] [Thread-25856] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:58:04.760 [INFO] [Thread-25856] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] client lang: <none>
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] server lang: <none>
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] kex follows: False
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:58:04.763 [DEBUG] [Thread-25856] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:58:04.764 [DEBUG] [Thread-25856] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:58:04.764 [DEBUG] [Thread-25856] [transport.py] [_log()] Compression: none
2025-11-13T00:58:04.764 [DEBUG] [Thread-25856] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:58:04.781 [DEBUG] [Thread-25856] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:58:04.781 [DEBUG] [Thread-25856] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:58:04.782 [DEBUG] [Thread-25856] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:58:04.782 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:58:04.783 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:58:04.784 [DEBUG] [Thread-25856] [transport.py] [_log()] userauth is OK
2025-11-13T00:58:04.784 [DEBUG] [Thread-25856] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:58:04.784 [DEBUG] [Thread-25856] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:58:04.784 [DEBUG] [Thread-25856] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:58:04.784 [DEBUG] [Thread-25856] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:58:04.819 [INFO] [Thread-25856] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:58:04.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:58:05.436 [DEBUG] [Thread-25856] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:58:05.437 [DEBUG] [Thread-25856] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:58:05.437 [DEBUG] [Thread-25856] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:58:05.478 [DEBUG] [Thread-25856] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:58:05.478 [DEBUG] [Thread-25856] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:58:05.481 [DEBUG] [Thread-25856] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:58:05.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:58:05.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:58:05.496 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:58:05.497 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:58:05.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:58:05.505 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:58:05.506 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:58:05.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:58:05.506 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:58:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.956342 -999.00  +15.40  15.34     57   +7.10 1 1 1 1 1     0    0 9.13 61.01 ZNESW 14.1 15.3 265.8 19.2 15.7 -23.5 15.6 -22.4 15.3 -22.1 15.6 -22.8
2025-11-13T00:58:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:58:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:58:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.956342
2025-11-13T00:58:05.507 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:58:05.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:58:05.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:58:05.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:58:05.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:58:05.508 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:57:35', tmtdew=6.32, humidity=68.62, cloud=0.0, wind=18.77, temperature=10.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:57:35', seeing=0.95, atlas_timestamp='2025-11-12T22:57:07.949', atlas_cloud=1, atlas_rain=1, zp_data=[0.02224999999999966, 0.052250000000000796, 0.0652500000000007, 0.0934999999999988, 0.07150000000000034, 0.11224999999999952, 0.054499999999999105, 0.01425000000000054, 0.05699999999999861, 0.053000000000000824, 0.15174999999999983, 0.08549999999999969, 0.1379999999999999, 0.0962499999999995, -0.0005000000000006111, 0.012999999999998124, 0.04925000000000068, 0.10350000000000037, 0.19299999999999962, 0.08124999999999893, 0.10449999999999804, 0.09324999999999761, 0.11325000000000074, 0.0547500000000003, 0.013999999999999346, 0.17350000000000065, 0.3932500000000001, 0.27449999999999974, 0.1280000000000001, 0.24150000000000205, 0.2660000000000018, 0.1620000000000008, 0.08274999999999899], zp_timestamp='2025-11-12T22:55:00')
2025-11-13T00:58:05.508 [DEBUG] [Thread-25856] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:58:05.592 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:58:05.603 [DEBUG] [Thread-25859] [transport.py] [_log()] starting thread (client mode): 0x19dd9000
2025-11-13T00:58:05.603 [DEBUG] [Thread-25859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:58:05.618 [DEBUG] [Thread-25859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:58:05.619 [INFO] [Thread-25859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] client lang: <none>
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] server lang: <none>
2025-11-13T00:58:05.626 [DEBUG] [Thread-25859] [transport.py] [_log()] kex follows: False
2025-11-13T00:58:05.627 [DEBUG] [Thread-25859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:58:05.627 [DEBUG] [Thread-25859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:58:05.627 [DEBUG] [Thread-25859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:58:05.627 [DEBUG] [Thread-25859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:58:05.627 [DEBUG] [Thread-25859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:58:05.627 [DEBUG] [Thread-25859] [transport.py] [_log()] Compression: none
2025-11-13T00:58:05.627 [DEBUG] [Thread-25859] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:58:05.684 [DEBUG] [Thread-25859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:58:05.685 [DEBUG] [Thread-25859] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:58:05.685 [DEBUG] [Thread-25859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:58:05.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:58:05.686 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:58:05.740 [DEBUG] [Thread-25859] [transport.py] [_log()] userauth is OK
2025-11-13T00:58:05.740 [DEBUG] [Thread-25859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:58:05.740 [DEBUG] [Thread-25859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:58:05.741 [DEBUG] [Thread-25859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:58:05.741 [DEBUG] [Thread-25859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:58:05.759 [INFO] [Thread-25859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:58:05.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:58:05.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:58:05.999 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:06.598 [DEBUG] [Thread-25859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:58:06.599 [DEBUG] [Thread-25859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:58:06.647 [DEBUG] [Thread-25859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:58:06.647 [DEBUG] [Thread-25859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:58:06.656 [DEBUG] [Thread-25859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:58:06.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:58:06.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-11-13T00:58:06.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-11-13T00:58:06.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:58:06.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:58:06.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:58:06.692 [DEBUG] [Thread-25859] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:58:07.504 [DEBUG] [Thread-25861 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:08.182 [DEBUG] [Thread-25862 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:11.850 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:14.899 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:21.267 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:22.556 [DEBUG] [Thread-25863 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:32.068 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:32.069 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:36.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:58:36.715 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:58:36.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T00:58:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 58, 7), 6.45, 68.17, 0.0, 17.66, 10.19, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:58:37.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:58:07
2025-11-13T00:58:37.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:58:37.587 [DEBUG] [Thread-25864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:58:37.615 [DEBUG] [Thread-25865] [transport.py] [_log()] starting thread (client mode): 0x14946980
2025-11-13T00:58:37.615 [DEBUG] [Thread-25865] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:58:37.639 [DEBUG] [Thread-25865] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:58:37.639 [INFO] [Thread-25865] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:58:37.642 [DEBUG] [Thread-25865] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] client lang: <none>
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] server lang: <none>
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] kex follows: False
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] Compression: none
2025-11-13T00:58:37.643 [DEBUG] [Thread-25865] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:58:37.664 [DEBUG] [Thread-25865] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:58:37.665 [DEBUG] [Thread-25865] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:58:37.665 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:58:37.666 [DEBUG] [Thread-25865] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:58:37.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:58:37.709 [DEBUG] [Thread-25865] [transport.py] [_log()] userauth is OK
2025-11-13T00:58:37.709 [DEBUG] [Thread-25865] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:58:37.709 [DEBUG] [Thread-25865] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:58:37.709 [DEBUG] [Thread-25865] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:58:37.710 [DEBUG] [Thread-25865] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:58:37.741 [INFO] [Thread-25865] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:58:37.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:58:38.377 [DEBUG] [Thread-25865] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:58:38.378 [DEBUG] [Thread-25865] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:58:38.378 [DEBUG] [Thread-25865] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:58:38.419 [DEBUG] [Thread-25865] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:58:38.419 [DEBUG] [Thread-25865] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:58:38.422 [DEBUG] [Thread-25865] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:58:38.436 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:58:38.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:58:38.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:58:38.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:58:38.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:58:38.447 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:58:38.448 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:58:38.448 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:58:38.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:58:38.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.957036 -999.00  +15.40  11.85     58   +7.30 1 1 1 1 1     0    0 9.60 74.46 ZNESW 10.7 11.8 261.2 14.4 15.7 -23.6 15.6 -22.7 15.3 -22.0 15.7 -22.9
2025-11-13T00:58:38.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:58:38.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:58:38.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.957036
2025-11-13T00:58:38.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:58:38.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:58:38.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:58:38.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:58:38.450 [DEBUG] [Thread-25865] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:58:38.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:58:38.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:58:07', tmtdew=6.45, humidity=68.17, cloud=0.0, wind=17.66, temperature=10.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:58:07', seeing=0.96, atlas_timestamp='2025-11-12T22:58:07.910', atlas_cloud=1, atlas_rain=1, zp_data=[0.02224999999999966, 0.052250000000000796, 0.0652500000000007, 0.0934999999999988, 0.07150000000000034, 0.11224999999999952, 0.054499999999999105, 0.01425000000000054, 0.05699999999999861, 0.053000000000000824, 0.15174999999999983, 0.08549999999999969, 0.1379999999999999, 0.0962499999999995, -0.0005000000000006111, 0.012999999999998124, 0.04925000000000068, 0.10350000000000037, 0.19299999999999962, 0.08124999999999893, 0.10449999999999804, 0.09324999999999761, 0.11325000000000074, 0.0547500000000003, 0.013999999999999346, 0.17350000000000065, 0.3932500000000001, 0.27449999999999974, 0.1280000000000001, 0.24150000000000205, 0.2660000000000018, 0.1620000000000008, 0.08274999999999899], zp_timestamp='2025-11-12T22:55:00')
2025-11-13T00:58:38.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:58:38.548 [DEBUG] [Thread-25868] [transport.py] [_log()] starting thread (client mode): 0x1498ba60
2025-11-13T00:58:38.548 [DEBUG] [Thread-25868] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:58:38.562 [DEBUG] [Thread-25868] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:58:38.562 [INFO] [Thread-25868] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:58:38.570 [DEBUG] [Thread-25868] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:58:38.571 [DEBUG] [Thread-25868] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:58:38.571 [DEBUG] [Thread-25868] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:58:38.571 [DEBUG] [Thread-25868] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:58:38.571 [DEBUG] [Thread-25868] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:58:38.571 [DEBUG] [Thread-25868] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:58:38.571 [DEBUG] [Thread-25868] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:58:38.571 [DEBUG] [Thread-25868] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:58:38.571 [DEBUG] [Thread-25868] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:58:38.572 [DEBUG] [Thread-25868] [transport.py] [_log()] client lang: <none>
2025-11-13T00:58:38.572 [DEBUG] [Thread-25868] [transport.py] [_log()] server lang: <none>
2025-11-13T00:58:38.572 [DEBUG] [Thread-25868] [transport.py] [_log()] kex follows: False
2025-11-13T00:58:38.572 [DEBUG] [Thread-25868] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:58:38.572 [DEBUG] [Thread-25868] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:58:38.572 [DEBUG] [Thread-25868] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:58:38.572 [DEBUG] [Thread-25868] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:58:38.573 [DEBUG] [Thread-25868] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:58:38.573 [DEBUG] [Thread-25868] [transport.py] [_log()] Compression: none
2025-11-13T00:58:38.573 [DEBUG] [Thread-25868] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:58:38.628 [DEBUG] [Thread-25868] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:58:38.629 [DEBUG] [Thread-25868] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:58:38.630 [DEBUG] [Thread-25868] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:58:38.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:58:38.631 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:58:38.689 [DEBUG] [Thread-25868] [transport.py] [_log()] userauth is OK
2025-11-13T00:58:38.689 [DEBUG] [Thread-25868] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:58:38.689 [DEBUG] [Thread-25868] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:58:38.689 [DEBUG] [Thread-25868] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:58:38.690 [DEBUG] [Thread-25868] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:58:38.708 [INFO] [Thread-25868] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:58:38.709 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:58:38.710 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:58:39.517 [DEBUG] [Thread-25868] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:58:39.517 [DEBUG] [Thread-25868] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:58:39.566 [DEBUG] [Thread-25868] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:58:39.566 [DEBUG] [Thread-25868] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:58:39.575 [DEBUG] [Thread-25868] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:58:39.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:58:39.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-11-13T00:58:39.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-11-13T00:58:39.603 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:58:39.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:58:39.604 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:58:39.613 [DEBUG] [Thread-25868] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:58:52.618 [DEBUG] [Thread-25870 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:07.678 [DEBUG] [Thread-25871 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:08.237 [DEBUG] [Thread-25872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:09.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:59:09.634 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:59:09.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-11-13T00:59:10.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 58, 39), 6.45, 68.18, 0.0, 17.45, 10.21, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:59:10.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:58:39
2025-11-13T00:59:10.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:59:10.535 [DEBUG] [Thread-25873] [transport.py] [_log()] starting thread (client mode): 0x1737f8b0
2025-11-13T00:59:10.536 [DEBUG] [Thread-25873] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:59:10.555 [DEBUG] [Thread-25873] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:59:10.555 [INFO] [Thread-25873] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:59:10.558 [DEBUG] [Thread-25873] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:59:10.558 [DEBUG] [Thread-25873] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:59:10.558 [DEBUG] [Thread-25873] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:59:10.558 [DEBUG] [Thread-25873] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:59:10.558 [DEBUG] [Thread-25873] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] client lang: <none>
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] server lang: <none>
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] kex follows: False
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] Compression: none
2025-11-13T00:59:10.559 [DEBUG] [Thread-25873] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:59:10.577 [DEBUG] [Thread-25873] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:59:10.577 [DEBUG] [Thread-25873] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:59:10.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:59:10.578 [DEBUG] [Thread-25873] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:59:10.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:59:10.580 [DEBUG] [Thread-25873] [transport.py] [_log()] userauth is OK
2025-11-13T00:59:10.580 [DEBUG] [Thread-25873] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:59:10.580 [DEBUG] [Thread-25873] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:59:10.580 [DEBUG] [Thread-25873] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:59:10.580 [DEBUG] [Thread-25873] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:59:10.601 [INFO] [Thread-25873] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:59:10.602 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:59:11.238 [DEBUG] [Thread-25873] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:59:11.238 [DEBUG] [Thread-25873] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:59:11.238 [DEBUG] [Thread-25873] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:59:11.278 [DEBUG] [Thread-25873] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:59:11.279 [DEBUG] [Thread-25873] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:59:11.282 [DEBUG] [Thread-25873] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:59:11.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:59:11.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:59:11.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:59:11.297 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:59:11.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:59:11.304 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:59:11.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:59:11.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:59:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:59:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.957383 -999.00  +15.40  10.53     58   +7.30 1 1 1 1 1     0    0 9.76 78.00 ZNESW 10.6 10.5 256.1 13.5 15.7 -23.6 15.6 -22.7 15.3 -22.1 15.6 -23.0
2025-11-13T00:59:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:59:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:59:11.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.957383
2025-11-13T00:59:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:59:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:59:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:59:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:59:11.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:59:11.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:58:39', tmtdew=6.45, humidity=68.18, cloud=0.0, wind=17.45, temperature=10.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:58:39', seeing=1.04, atlas_timestamp='2025-11-12T22:58:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.02224999999999966, 0.052250000000000796, 0.0652500000000007, 0.0934999999999988, 0.07150000000000034, 0.11224999999999952, 0.054499999999999105, 0.01425000000000054, 0.05699999999999861, 0.053000000000000824, 0.15174999999999983, 0.08549999999999969, 0.1379999999999999, 0.0962499999999995, -0.0005000000000006111, 0.012999999999998124, 0.04925000000000068, 0.10350000000000037, 0.19299999999999962, 0.08124999999999893, 0.10449999999999804, 0.09324999999999761, 0.11325000000000074, 0.0547500000000003, 0.013999999999999346, 0.17350000000000065, 0.3932500000000001, 0.27449999999999974, 0.1280000000000001, 0.24150000000000205, 0.2660000000000018, 0.1620000000000008, 0.08274999999999899], zp_timestamp='2025-11-12T22:55:00')
2025-11-13T00:59:11.307 [DEBUG] [Thread-25873] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:59:11.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:59:11.403 [DEBUG] [Thread-25876] [transport.py] [_log()] starting thread (client mode): 0x1737f4c0
2025-11-13T00:59:11.404 [DEBUG] [Thread-25876] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:59:11.418 [DEBUG] [Thread-25876] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:59:11.419 [INFO] [Thread-25876] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:59:11.426 [DEBUG] [Thread-25876] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:59:11.426 [DEBUG] [Thread-25876] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:59:11.426 [DEBUG] [Thread-25876] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:59:11.426 [DEBUG] [Thread-25876] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:59:11.426 [DEBUG] [Thread-25876] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:59:11.426 [DEBUG] [Thread-25876] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:59:11.427 [DEBUG] [Thread-25876] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:59:11.427 [DEBUG] [Thread-25876] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:59:11.427 [DEBUG] [Thread-25876] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:59:11.427 [DEBUG] [Thread-25876] [transport.py] [_log()] client lang: <none>
2025-11-13T00:59:11.427 [DEBUG] [Thread-25876] [transport.py] [_log()] server lang: <none>
2025-11-13T00:59:11.427 [DEBUG] [Thread-25876] [transport.py] [_log()] kex follows: False
2025-11-13T00:59:11.427 [DEBUG] [Thread-25876] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:59:11.427 [DEBUG] [Thread-25876] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:59:11.428 [DEBUG] [Thread-25876] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:59:11.428 [DEBUG] [Thread-25876] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:59:11.428 [DEBUG] [Thread-25876] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:59:11.428 [DEBUG] [Thread-25876] [transport.py] [_log()] Compression: none
2025-11-13T00:59:11.428 [DEBUG] [Thread-25876] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:59:11.484 [DEBUG] [Thread-25876] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:59:11.485 [DEBUG] [Thread-25876] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:59:11.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:59:11.486 [DEBUG] [Thread-25876] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:59:11.487 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:59:11.544 [DEBUG] [Thread-25876] [transport.py] [_log()] userauth is OK
2025-11-13T00:59:11.544 [DEBUG] [Thread-25876] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:59:11.544 [DEBUG] [Thread-25876] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:59:11.544 [DEBUG] [Thread-25876] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:59:11.544 [DEBUG] [Thread-25876] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:59:11.564 [INFO] [Thread-25876] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:59:11.564 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:59:11.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:59:12.391 [DEBUG] [Thread-25876] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:59:12.391 [DEBUG] [Thread-25876] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:59:12.443 [DEBUG] [Thread-25876] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:59:12.444 [DEBUG] [Thread-25876] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:59:12.451 [DEBUG] [Thread-25876] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:59:12.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:59:12.459 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T00:59:12.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-11-13T00:59:12.475 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:59:12.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:59:12.475 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:59:12.483 [DEBUG] [Thread-25876] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:59:22.719 [DEBUG] [Thread-25878 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:32.272 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:32.274 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:37.767 [DEBUG] [Thread-25879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:42.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T00:59:42.506 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T00:59:42.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-11-13T00:59:43.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 59, 11), 6.4, 68.36, 0.0, 15.39, 10.26, 0, 0, 0, 2, 0, 0),)
2025-11-13T00:59:43.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:59:11
2025-11-13T00:59:43.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T00:59:43.406 [DEBUG] [Thread-25880] [transport.py] [_log()] starting thread (client mode): 0x1737f220
2025-11-13T00:59:43.407 [DEBUG] [Thread-25880] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:59:43.428 [DEBUG] [Thread-25880] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T00:59:43.428 [INFO] [Thread-25880] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] client lang: <none>
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] server lang: <none>
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] kex follows: False
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] Compression: none
2025-11-13T00:59:43.431 [DEBUG] [Thread-25880] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:59:43.449 [DEBUG] [Thread-25880] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:59:43.450 [DEBUG] [Thread-25880] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:59:43.450 [DEBUG] [Thread-25880] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T00:59:43.450 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T00:59:43.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:59:43.452 [DEBUG] [Thread-25880] [transport.py] [_log()] userauth is OK
2025-11-13T00:59:43.452 [DEBUG] [Thread-25880] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:59:43.452 [DEBUG] [Thread-25880] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:59:43.452 [DEBUG] [Thread-25880] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T00:59:43.453 [DEBUG] [Thread-25880] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:59:43.488 [INFO] [Thread-25880] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:59:43.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:59:44.130 [DEBUG] [Thread-25880] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:59:44.131 [DEBUG] [Thread-25880] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:59:44.131 [DEBUG] [Thread-25880] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T00:59:44.172 [DEBUG] [Thread-25880] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:59:44.172 [DEBUG] [Thread-25880] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:59:44.174 [DEBUG] [Thread-25880] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:59:44.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:59:44.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T00:59:44.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T00:59:44.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T00:59:44.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:59:44.191 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T00:59:44.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:59:44.191 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:59:44.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T00:59:44.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.957731 -999.00  +15.40  11.76     58   +7.30 1 1 1 1 1     0    0 10.00 85.72 ZNESW 10.6 11.8 261.8 15.3 15.7 -23.7 15.6 -22.6 15.3 -22.1 15.6 -23.0
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.957731
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T00:59:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:59:11', tmtdew=6.4, humidity=68.36, cloud=0.0, wind=15.39, temperature=10.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:59:11', seeing=1.04, atlas_timestamp='2025-11-12T22:59:07.958', atlas_cloud=1, atlas_rain=1, zp_data=[0.02224999999999966, 0.052250000000000796, 0.0652500000000007, 0.0934999999999988, 0.07150000000000034, 0.11224999999999952, 0.054499999999999105, 0.01425000000000054, 0.05699999999999861, 0.053000000000000824, 0.15174999999999983, 0.08549999999999969, 0.1379999999999999, 0.0962499999999995, -0.0005000000000006111, 0.012999999999998124, 0.04925000000000068, 0.10350000000000037, 0.19299999999999962, 0.08124999999999893, 0.10449999999999804, 0.09324999999999761, 0.11325000000000074, 0.0547500000000003, 0.013999999999999346, 0.17350000000000065, 0.3932500000000001, 0.27449999999999974, 0.1280000000000001, 0.24150000000000205, 0.2660000000000018, 0.1620000000000008, 0.08274999999999899], zp_timestamp='2025-11-12T22:55:00')
2025-11-13T00:59:44.193 [DEBUG] [Thread-25880] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:59:44.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T00:59:44.279 [DEBUG] [Thread-25883] [transport.py] [_log()] starting thread (client mode): 0x14980670
2025-11-13T00:59:44.279 [DEBUG] [Thread-25883] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T00:59:44.293 [DEBUG] [Thread-25883] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T00:59:44.293 [INFO] [Thread-25883] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] client lang: <none>
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] server lang: <none>
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] kex follows: False
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] Compression: none
2025-11-13T00:59:44.301 [DEBUG] [Thread-25883] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T00:59:44.358 [DEBUG] [Thread-25883] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T00:59:44.359 [DEBUG] [Thread-25883] [transport.py] [_log()] Switch to new keys ...
2025-11-13T00:59:44.359 [DEBUG] [Thread-25883] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T00:59:44.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T00:59:44.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T00:59:44.415 [DEBUG] [Thread-25883] [transport.py] [_log()] userauth is OK
2025-11-13T00:59:44.415 [DEBUG] [Thread-25883] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T00:59:44.415 [DEBUG] [Thread-25883] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T00:59:44.415 [DEBUG] [Thread-25883] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T00:59:44.415 [DEBUG] [Thread-25883] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T00:59:44.433 [INFO] [Thread-25883] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T00:59:44.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T00:59:44.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T00:59:45.246 [DEBUG] [Thread-25883] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T00:59:45.246 [DEBUG] [Thread-25883] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T00:59:45.294 [DEBUG] [Thread-25883] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T00:59:45.294 [DEBUG] [Thread-25883] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T00:59:45.302 [DEBUG] [Thread-25883] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T00:59:45.310 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T00:59:45.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-11-13T00:59:45.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-11-13T00:59:45.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T00:59:45.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T00:59:45.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T00:59:45.334 [DEBUG] [Thread-25883] [transport.py] [_log()] EOF in transport thread
2025-11-13T00:59:52.800 [DEBUG] [Thread-25885 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:53.529 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T00:59:56.687 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:01.717 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:07.092 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:07.851 [DEBUG] [Thread-25886 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:08.292 [DEBUG] [Thread-25887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:15.356 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:00:15.356 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:00:15.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:00:16.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 0, 59, 43), 6.42, 68.51, 0.0, 16.94, 10.23, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:00:16.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 00:59:43
2025-11-13T01:00:16.197 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:00:16.348 [DEBUG] [Thread-25888] [transport.py] [_log()] starting thread (client mode): 0x1737dbd0
2025-11-13T01:00:16.348 [DEBUG] [Thread-25888] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:00:16.368 [DEBUG] [Thread-25888] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:00:16.368 [INFO] [Thread-25888] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] client lang: <none>
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] server lang: <none>
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] kex follows: False
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:00:16.370 [DEBUG] [Thread-25888] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:00:16.371 [DEBUG] [Thread-25888] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:00:16.371 [DEBUG] [Thread-25888] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:00:16.371 [DEBUG] [Thread-25888] [transport.py] [_log()] Compression: none
2025-11-13T01:00:16.371 [DEBUG] [Thread-25888] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:00:16.389 [DEBUG] [Thread-25888] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:00:16.389 [DEBUG] [Thread-25888] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:00:16.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:00:16.389 [DEBUG] [Thread-25888] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:00:16.389 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:00:16.390 [DEBUG] [Thread-25888] [transport.py] [_log()] userauth is OK
2025-11-13T01:00:16.390 [DEBUG] [Thread-25888] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:00:16.390 [DEBUG] [Thread-25888] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:00:16.390 [DEBUG] [Thread-25888] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:00:16.390 [DEBUG] [Thread-25888] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:00:16.399 [INFO] [Thread-25888] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:00:16.400 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:00:19.287 [DEBUG] [Thread-25888] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:00:19.287 [DEBUG] [Thread-25888] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:00:19.287 [DEBUG] [Thread-25888] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:00:19.328 [DEBUG] [Thread-25888] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:00:19.328 [DEBUG] [Thread-25888] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:00:19.330 [DEBUG] [Thread-25888] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:00:19.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:00:19.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:00:19.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:00:19.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:00:19.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:00:19.373 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:00:19.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.958078 -999.00  +15.40  11.64     57   +7.10 1 1 1 1 1     0    0 10.19 93.17 ZNESW 11.4 11.6 260.2 15.4 15.7 -23.6 15.5 -22.6 15.3 -22.2 15.6 -23.1
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.958078
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:00:19.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T00:59:43', tmtdew=6.42, humidity=68.51, cloud=0.0, wind=16.94, temperature=10.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T00:59:43', seeing=1.04, atlas_timestamp='2025-11-12T22:59:37.939', atlas_cloud=1, atlas_rain=1, zp_data=[0.02224999999999966, 0.052250000000000796, 0.0652500000000007, 0.0934999999999988, 0.07150000000000034, 0.11224999999999952, 0.054499999999999105, 0.01425000000000054, 0.05699999999999861, 0.053000000000000824, 0.15174999999999983, 0.08549999999999969, 0.1379999999999999, 0.0962499999999995, -0.0005000000000006111, 0.012999999999998124, 0.04925000000000068, 0.10350000000000037, 0.19299999999999962, 0.08124999999999893, 0.10449999999999804, 0.09324999999999761, 0.11325000000000074, 0.0547500000000003, 0.013999999999999346, 0.17350000000000065, 0.3932500000000001, 0.27449999999999974, 0.1280000000000001, 0.24150000000000205, 0.2660000000000018, 0.1620000000000008, 0.08274999999999899], zp_timestamp='2025-11-12T22:58:00')
2025-11-13T01:00:19.374 [DEBUG] [Thread-25888] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:00:19.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:00:19.457 [DEBUG] [Thread-25891] [transport.py] [_log()] starting thread (client mode): 0x1737eb30
2025-11-13T01:00:19.457 [DEBUG] [Thread-25891] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:00:19.476 [DEBUG] [Thread-25891] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:00:19.476 [INFO] [Thread-25891] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] client lang: <none>
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] server lang: <none>
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] kex follows: False
2025-11-13T01:00:19.483 [DEBUG] [Thread-25891] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:00:19.484 [DEBUG] [Thread-25891] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:00:19.484 [DEBUG] [Thread-25891] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:00:19.484 [DEBUG] [Thread-25891] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:00:19.484 [DEBUG] [Thread-25891] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:00:19.484 [DEBUG] [Thread-25891] [transport.py] [_log()] Compression: none
2025-11-13T01:00:19.484 [DEBUG] [Thread-25891] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:00:19.542 [DEBUG] [Thread-25891] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:00:19.542 [DEBUG] [Thread-25891] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:00:19.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:00:19.542 [DEBUG] [Thread-25891] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:00:19.542 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:00:19.599 [DEBUG] [Thread-25891] [transport.py] [_log()] userauth is OK
2025-11-13T01:00:19.599 [DEBUG] [Thread-25891] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:00:19.599 [DEBUG] [Thread-25891] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:00:19.599 [DEBUG] [Thread-25891] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:00:19.599 [DEBUG] [Thread-25891] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:00:19.617 [INFO] [Thread-25891] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:00:19.617 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:00:19.617 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:00:20.447 [DEBUG] [Thread-25891] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:00:20.448 [DEBUG] [Thread-25891] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:00:20.498 [DEBUG] [Thread-25891] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:00:20.498 [DEBUG] [Thread-25891] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:00:20.507 [DEBUG] [Thread-25891] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:00:20.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:00:20.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-11-13T01:00:20.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-11-13T01:00:20.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:00:20.537 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:00:20.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:00:20.545 [DEBUG] [Thread-25891] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:00:22.884 [DEBUG] [Thread-25893 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:26.479 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:30.870 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:32.476 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:32.477 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:37.941 [DEBUG] [Thread-25894 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:50.238 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:50.568 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:00:50.568 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:00:50.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-11-13T01:00:51.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 0, 47), 6.4, 68.49, 0.0, 19.13, 10.23, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:00:51.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:00:47
2025-11-13T01:00:51.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:00:51.493 [DEBUG] [Thread-25895] [transport.py] [_log()] starting thread (client mode): 0x1737dc90
2025-11-13T01:00:51.493 [DEBUG] [Thread-25895] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:00:51.514 [DEBUG] [Thread-25895] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:00:51.514 [INFO] [Thread-25895] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:00:51.517 [DEBUG] [Thread-25895] [transport.py] [_log()] client lang: <none>
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] server lang: <none>
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] kex follows: False
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] Compression: none
2025-11-13T01:00:51.518 [DEBUG] [Thread-25895] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:00:51.537 [DEBUG] [Thread-25895] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:00:51.537 [DEBUG] [Thread-25895] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:00:51.538 [DEBUG] [Thread-25895] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:00:51.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:00:51.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:00:51.540 [DEBUG] [Thread-25895] [transport.py] [_log()] userauth is OK
2025-11-13T01:00:51.541 [DEBUG] [Thread-25895] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:00:51.541 [DEBUG] [Thread-25895] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:00:51.541 [DEBUG] [Thread-25895] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:00:51.541 [DEBUG] [Thread-25895] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:00:51.564 [INFO] [Thread-25895] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:00:51.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:00:52.214 [DEBUG] [Thread-25895] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:00:52.215 [DEBUG] [Thread-25895] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:00:52.215 [DEBUG] [Thread-25895] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:00:52.255 [DEBUG] [Thread-25895] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:00:52.256 [DEBUG] [Thread-25895] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:00:52.259 [DEBUG] [Thread-25895] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:00:52.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:00:52.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:00:52.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:00:52.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:00:52.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:00:52.282 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:00:52.283 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:00:52.283 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:00:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:00:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.958425 -999.00  +15.40  11.86     57   +7.10 1 1 1 1 1     0    0 10.43 95.54 ZNESW 12.1 11.9 262.4 15.4 15.7 -23.7 15.6 -22.8 15.4 -22.4 15.7 -23.0
2025-11-13T01:00:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:00:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:00:52.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.958425
2025-11-13T01:00:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:00:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:00:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:00:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:00:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:00:52.285 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:00:47', tmtdew=6.4, humidity=68.49, cloud=0.0, wind=19.13, temperature=10.23, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:00:47', seeing=1.03, atlas_timestamp='2025-11-12T23:00:07.920', atlas_cloud=1, atlas_rain=1, zp_data=[0.02224999999999966, 0.052250000000000796, 0.0652500000000007, 0.0934999999999988, 0.07150000000000034, 0.11224999999999952, 0.054499999999999105, 0.01425000000000054, 0.05699999999999861, 0.053000000000000824, 0.15174999999999983, 0.08549999999999969, 0.1379999999999999, 0.0962499999999995, -0.0005000000000006111, 0.012999999999998124, 0.04925000000000068, 0.10350000000000037, 0.19299999999999962, 0.08124999999999893, 0.10449999999999804, 0.09324999999999761, 0.11325000000000074, 0.0547500000000003, 0.013999999999999346, 0.17350000000000065, 0.3932500000000001, 0.27449999999999974, 0.1280000000000001, 0.24150000000000205, 0.2660000000000018, 0.1620000000000008, 0.08274999999999899], zp_timestamp='2025-11-12T22:58:00')
2025-11-13T01:00:52.285 [DEBUG] [Thread-25895] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:00:52.376 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:00:52.975 [DEBUG] [Thread-25898 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:00:54.653 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:01.567 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:05.954 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:08.022 [DEBUG] [Thread-25899 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:08.362 [DEBUG] [Thread-25900 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:23.059 [DEBUG] [Thread-25901 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:32.681 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:32.682 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:38.093 [DEBUG] [Thread-25902 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:01:53.128 [DEBUG] [Thread-25903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:04.766 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:07.831 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:08.162 [DEBUG] [Thread-25904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:08.420 [DEBUG] [Thread-25905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:23.195 [DEBUG] [Thread-25906 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:32.884 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:32.885 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:33.233 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:38.233 [DEBUG] [Thread-25907 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:39.061 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:42.103 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:48.470 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:02:53.265 [DEBUG] [Thread-25908 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:03:05.659 [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-11-13T01:03:08.295 [DEBUG] [Thread-25909 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:03:08.493 [DEBUG] [Thread-25910 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:03:23.334 [DEBUG] [Thread-25911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:03:33.089 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:03:33.089 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:03:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:03:35.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:03:35.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-11-13T01:03:36.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 3, 27), 6.38, 68.64, 0.0, 16.78, 10.19, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:03:36.341 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:03:27
2025-11-13T01:03:36.463 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:03:36.607 [DEBUG] [Thread-25912] [transport.py] [_log()] starting thread (client mode): 0x17346830
2025-11-13T01:03:36.608 [DEBUG] [Thread-25912] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:03:36.618 [DEBUG] [Thread-25912] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:03:36.619 [INFO] [Thread-25912] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] client lang: <none>
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] server lang: <none>
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] kex follows: False
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] Compression: none
2025-11-13T01:03:36.620 [DEBUG] [Thread-25912] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:03:36.629 [DEBUG] [Thread-25912] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:03:36.630 [DEBUG] [Thread-25912] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:03:36.630 [DEBUG] [Thread-25912] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:03:36.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:03:36.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:03:36.631 [DEBUG] [Thread-25912] [transport.py] [_log()] userauth is OK
2025-11-13T01:03:36.631 [DEBUG] [Thread-25912] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:03:36.631 [DEBUG] [Thread-25912] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:03:36.631 [DEBUG] [Thread-25912] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:03:36.631 [DEBUG] [Thread-25912] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:03:36.651 [INFO] [Thread-25912] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:03:36.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:03:37.318 [DEBUG] [Thread-25912] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:03:37.319 [DEBUG] [Thread-25912] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:03:37.319 [DEBUG] [Thread-25912] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:03:37.360 [DEBUG] [Thread-25912] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:03:37.360 [DEBUG] [Thread-25912] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:03:37.363 [DEBUG] [Thread-25912] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:03:37.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:03:37.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:03:37.378 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:03:37.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:03:37.388 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:03:37.390 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:03:37.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:03:37.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:03:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:03:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.960508 -999.00  +15.40  10.89     58   +7.20 1 1 1 1 1     0    0 10.59 99.76 ZNESW 15.3 10.9 257.6 15.2 15.7 -23.7 15.6 -22.8 15.3 -22.4 15.6 -23.2
2025-11-13T01:03:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:03:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:03:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.960508
2025-11-13T01:03:37.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:03:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:03:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:03:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:03:37.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:03:37.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:03:27', tmtdew=6.38, humidity=68.64, cloud=0.0, wind=16.78, temperature=10.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:03:27', seeing=1.16, atlas_timestamp='2025-11-12T23:03:07.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.025750000000000384, 0.047250000000000014, -0.011499999999999844, 0.05400000000000027, 0.08125000000000071, 0.015499999999999403, 0.021750000000000824, 0.024499999999999744, 0.03750000000000142, 0.10324999999999918, 0.057000000000000384, 0.10899999999999999, 0.04224999999999923, -0.031500000000001194, -0.017000000000001236, 0.023749999999999716, 0.0705000000000009, 0.13699999999999868, 0.0752499999999987, 0.05449999999999733, 0.10574999999999868, 0.10975000000000179, 0.0467499999999994, 0.007999999999999119, 0.09849999999999959, 0.2717500000000008, 0.19100000000000072, 0.13400000000000034, 0.2134999999999998, 0.2680000000000007, 0.1479999999999997, 0.060249999999999915], zp_timestamp='2025-11-12T23:01:00')
2025-11-13T01:03:37.393 [DEBUG] [Thread-25912] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:03:37.491 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:03:37.504 [DEBUG] [Thread-25915] [transport.py] [_log()] starting thread (client mode): 0x1737e0b0
2025-11-13T01:03:37.504 [DEBUG] [Thread-25915] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:03:37.520 [DEBUG] [Thread-25915] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:03:37.520 [INFO] [Thread-25915] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:03:37.530 [DEBUG] [Thread-25915] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] client lang: <none>
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] server lang: <none>
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] kex follows: False
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:03:37.531 [DEBUG] [Thread-25915] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:03:37.532 [DEBUG] [Thread-25915] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:03:37.532 [DEBUG] [Thread-25915] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:03:37.532 [DEBUG] [Thread-25915] [transport.py] [_log()] Compression: none
2025-11-13T01:03:37.532 [DEBUG] [Thread-25915] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:03:37.591 [DEBUG] [Thread-25915] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:03:37.592 [DEBUG] [Thread-25915] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:03:37.592 [DEBUG] [Thread-25915] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:03:37.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:03:37.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:03:37.653 [DEBUG] [Thread-25915] [transport.py] [_log()] userauth is OK
2025-11-13T01:03:37.653 [DEBUG] [Thread-25915] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:03:37.654 [DEBUG] [Thread-25915] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:03:37.654 [DEBUG] [Thread-25915] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:03:37.654 [DEBUG] [Thread-25915] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:03:37.672 [INFO] [Thread-25915] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:03:37.673 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:03:37.673 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:03:38.366 [DEBUG] [Thread-25917 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:03:38.463 [DEBUG] [Thread-25915] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:03:38.464 [DEBUG] [Thread-25915] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:03:38.512 [DEBUG] [Thread-25915] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:03:38.513 [DEBUG] [Thread-25915] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:03:38.526 [DEBUG] [Thread-25915] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:03:38.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:03:38.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-11-13T01:03:38.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:03:38.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:03:38.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:03:38.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:03:38.570 [DEBUG] [Thread-25915] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:03:53.431 [DEBUG] [Thread-25918 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:04:08.463 [DEBUG] [Thread-25919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:04:08.560 [DEBUG] [Thread-25920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:04:08.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:04:08.591 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:04:08.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-11-13T01:04:09.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 3, 59), 6.52, 67.94, 0.0, 19.89, 10.2, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:04:09.246 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:03:59
2025-11-13T01:04:09.375 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:04:09.527 [DEBUG] [Thread-25921] [transport.py] [_log()] starting thread (client mode): 0x17346d70
2025-11-13T01:04:09.527 [DEBUG] [Thread-25921] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:04:09.546 [DEBUG] [Thread-25921] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:04:09.547 [INFO] [Thread-25921] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] client lang: <none>
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] server lang: <none>
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] kex follows: False
2025-11-13T01:04:09.550 [DEBUG] [Thread-25921] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:04:09.551 [DEBUG] [Thread-25921] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:04:09.551 [DEBUG] [Thread-25921] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:04:09.551 [DEBUG] [Thread-25921] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:04:09.551 [DEBUG] [Thread-25921] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:04:09.551 [DEBUG] [Thread-25921] [transport.py] [_log()] Compression: none
2025-11-13T01:04:09.551 [DEBUG] [Thread-25921] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:04:09.566 [DEBUG] [Thread-25921] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:04:09.566 [DEBUG] [Thread-25921] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:04:09.566 [DEBUG] [Thread-25921] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:04:09.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:04:09.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:04:09.567 [DEBUG] [Thread-25921] [transport.py] [_log()] userauth is OK
2025-11-13T01:04:09.567 [DEBUG] [Thread-25921] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:04:09.567 [DEBUG] [Thread-25921] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:04:09.567 [DEBUG] [Thread-25921] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:04:09.567 [DEBUG] [Thread-25921] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:04:09.576 [INFO] [Thread-25921] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:04:09.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:04:10.172 [DEBUG] [Thread-25921] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:04:10.172 [DEBUG] [Thread-25921] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:04:10.172 [DEBUG] [Thread-25921] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:04:10.213 [DEBUG] [Thread-25921] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:04:10.213 [DEBUG] [Thread-25921] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:04:10.215 [DEBUG] [Thread-25921] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:04:10.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:04:10.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:04:10.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:04:10.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:04:10.226 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:04:10.227 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:04:10.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:04:10.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:04:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:04:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.960856 -999.00  +15.40  14.62     58   +7.20 1 1 1 1 1     0    0 10.25 87.82 ZNESW 12.3 14.6 267.6 17.3 15.7 -23.8 15.6 -22.8 15.3 -22.5 15.6 -23.0
2025-11-13T01:04:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:04:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:04:10.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.960856
2025-11-13T01:04:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:04:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:04:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:04:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:04:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:04:10.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:03:59', tmtdew=6.52, humidity=67.94, cloud=0.0, wind=19.89, temperature=10.2, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:03:59', seeing=1.11, atlas_timestamp='2025-11-12T23:03:37.958', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.025750000000000384, 0.047250000000000014, -0.011499999999999844, 0.05400000000000027, 0.08125000000000071, 0.015499999999999403, 0.021750000000000824, 0.024499999999999744, 0.03750000000000142, 0.10324999999999918, 0.057000000000000384, 0.10899999999999999, 0.04224999999999923, -0.031500000000001194, -0.017000000000001236, 0.023749999999999716, 0.0705000000000009, 0.13699999999999868, 0.0752499999999987, 0.05449999999999733, 0.10574999999999868, 0.10975000000000179, 0.0467499999999994, 0.007999999999999119, 0.09849999999999959, 0.2717500000000008, 0.19100000000000072, 0.13400000000000034, 0.2134999999999998, 0.2680000000000007, 0.1479999999999997, 0.060249999999999915], zp_timestamp='2025-11-12T23:01:00')
2025-11-13T01:04:10.228 [DEBUG] [Thread-25921] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:04:10.303 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:04:10.314 [DEBUG] [Thread-25924] [transport.py] [_log()] starting thread (client mode): 0x14980e50
2025-11-13T01:04:10.314 [DEBUG] [Thread-25924] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:04:10.329 [DEBUG] [Thread-25924] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:04:10.329 [INFO] [Thread-25924] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] client lang: <none>
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] server lang: <none>
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] kex follows: False
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:04:10.336 [DEBUG] [Thread-25924] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:04:10.337 [DEBUG] [Thread-25924] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:04:10.337 [DEBUG] [Thread-25924] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:04:10.337 [DEBUG] [Thread-25924] [transport.py] [_log()] Compression: none
2025-11-13T01:04:10.337 [DEBUG] [Thread-25924] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:04:10.394 [DEBUG] [Thread-25924] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:04:10.395 [DEBUG] [Thread-25924] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:04:10.395 [DEBUG] [Thread-25924] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:04:10.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:04:10.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:04:10.451 [DEBUG] [Thread-25924] [transport.py] [_log()] userauth is OK
2025-11-13T01:04:10.451 [DEBUG] [Thread-25924] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:04:10.451 [DEBUG] [Thread-25924] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:04:10.451 [DEBUG] [Thread-25924] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:04:10.451 [DEBUG] [Thread-25924] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:04:10.465 [INFO] [Thread-25924] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:04:10.465 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:04:10.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:04:11.261 [DEBUG] [Thread-25924] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:04:11.261 [DEBUG] [Thread-25924] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:04:11.309 [DEBUG] [Thread-25924] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:04:11.309 [DEBUG] [Thread-25924] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:04:11.317 [DEBUG] [Thread-25924] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:04:11.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:04:11.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:04:11.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-11-13T01:04:11.340 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:04:11.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:04:11.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:04:11.348 [DEBUG] [Thread-25924] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:04:23.495 [DEBUG] [Thread-25926 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:04:33.292 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:04:33.293 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:04:38.547 [DEBUG] [Thread-25927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:04:41.354 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:04:41.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:04:41.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:04:42.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 4, 31), 6.49, 68.05, 0.0, 19.48, 10.22, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:04:42.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:04:31
2025-11-13T01:04:42.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:04:42.295 [DEBUG] [Thread-25928] [transport.py] [_log()] starting thread (client mode): 0x19dda740
2025-11-13T01:04:42.295 [DEBUG] [Thread-25928] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:04:42.310 [DEBUG] [Thread-25928] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:04:42.310 [INFO] [Thread-25928] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:04:42.313 [DEBUG] [Thread-25928] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:04:42.313 [DEBUG] [Thread-25928] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:04:42.313 [DEBUG] [Thread-25928] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:04:42.313 [DEBUG] [Thread-25928] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:04:42.313 [DEBUG] [Thread-25928] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:04:42.313 [DEBUG] [Thread-25928] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:04:42.313 [DEBUG] [Thread-25928] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:04:42.313 [DEBUG] [Thread-25928] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] client lang: <none>
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] server lang: <none>
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] kex follows: False
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] Compression: none
2025-11-13T01:04:42.314 [DEBUG] [Thread-25928] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:04:42.330 [DEBUG] [Thread-25928] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:04:42.330 [DEBUG] [Thread-25928] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:04:42.331 [DEBUG] [Thread-25928] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:04:42.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:04:42.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:04:42.332 [DEBUG] [Thread-25928] [transport.py] [_log()] userauth is OK
2025-11-13T01:04:42.332 [DEBUG] [Thread-25928] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:04:42.333 [DEBUG] [Thread-25928] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:04:42.333 [DEBUG] [Thread-25928] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:04:42.333 [DEBUG] [Thread-25928] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:04:42.351 [INFO] [Thread-25928] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:04:42.352 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:04:43.005 [DEBUG] [Thread-25928] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:04:43.005 [DEBUG] [Thread-25928] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:04:43.006 [DEBUG] [Thread-25928] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:04:43.047 [DEBUG] [Thread-25928] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:04:43.047 [DEBUG] [Thread-25928] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:04:43.050 [DEBUG] [Thread-25928] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:04:43.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:04:43.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:04:43.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:04:43.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:04:43.070 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:04:43.072 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:04:43.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:04:43.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:04:43.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:04:43.073 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.961203 -999.00  +15.40  11.43     57   +7.10 1 1 1 1 1     0    0 10.32 89.91 ZNESW 14.5 11.4 264.8 19.0 15.7 -23.8 15.6 -22.8 15.3 -22.6 15.6 -23.2
2025-11-13T01:04:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:04:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:04:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.961203
2025-11-13T01:04:43.074 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:04:43.074 [DEBUG] [Thread-25928] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:04:43.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:04:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:04:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:04:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:04:43.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:04:31', tmtdew=6.49, humidity=68.05, cloud=0.0, wind=19.48, temperature=10.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:04:31', seeing=1.04, atlas_timestamp='2025-11-12T23:04:07.939', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.025750000000000384, 0.047250000000000014, -0.011499999999999844, 0.05400000000000027, 0.08125000000000071, 0.015499999999999403, 0.021750000000000824, 0.024499999999999744, 0.03750000000000142, 0.10324999999999918, 0.057000000000000384, 0.10899999999999999, 0.04224999999999923, -0.031500000000001194, -0.017000000000001236, 0.023749999999999716, 0.0705000000000009, 0.13699999999999868, 0.0752499999999987, 0.05449999999999733, 0.10574999999999868, 0.10975000000000179, 0.0467499999999994, 0.007999999999999119, 0.09849999999999959, 0.2717500000000008, 0.19100000000000072, 0.13400000000000034, 0.2134999999999998, 0.2680000000000007, 0.1479999999999997, 0.060249999999999915], zp_timestamp='2025-11-12T23:01:00')
2025-11-13T01:04:43.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:04:43.171 [DEBUG] [Thread-25931] [transport.py] [_log()] starting thread (client mode): 0x19ddbc10
2025-11-13T01:04:43.171 [DEBUG] [Thread-25931] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:04:43.185 [DEBUG] [Thread-25931] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:04:43.185 [INFO] [Thread-25931] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:04:43.192 [DEBUG] [Thread-25931] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:04:43.192 [DEBUG] [Thread-25931] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] client lang: <none>
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] server lang: <none>
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] kex follows: False
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] Compression: none
2025-11-13T01:04:43.193 [DEBUG] [Thread-25931] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:04:43.251 [DEBUG] [Thread-25931] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:04:43.252 [DEBUG] [Thread-25931] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:04:43.252 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:04:43.253 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:04:43.253 [DEBUG] [Thread-25931] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:04:43.308 [DEBUG] [Thread-25931] [transport.py] [_log()] userauth is OK
2025-11-13T01:04:43.308 [DEBUG] [Thread-25931] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:04:43.308 [DEBUG] [Thread-25931] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:04:43.309 [DEBUG] [Thread-25931] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:04:43.309 [DEBUG] [Thread-25931] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:04:43.327 [INFO] [Thread-25931] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:04:43.328 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:04:43.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:04:44.161 [DEBUG] [Thread-25931] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:04:44.161 [DEBUG] [Thread-25931] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:04:44.209 [DEBUG] [Thread-25931] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:04:44.209 [DEBUG] [Thread-25931] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:04:44.218 [DEBUG] [Thread-25931] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:04:44.227 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:04:44.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-11-13T01:04:44.236 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:04:44.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:04:44.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:04:44.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:04:44.253 [DEBUG] [Thread-25931] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:04:53.580 [DEBUG] [Thread-25933 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:06.124 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:08.626 [DEBUG] [Thread-25934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:08.646 [DEBUG] [Thread-25935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:09.321 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:14.276 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:05:14.276 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:05:14.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-11-13T01:05:14.341 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:14.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 5, 3), 6.46, 68.16, 0.0, 18.93, 10.22, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:05:14.939 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:05:03
2025-11-13T01:05:15.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:05:15.207 [DEBUG] [Thread-25936] [transport.py] [_log()] starting thread (client mode): 0x1737fa90
2025-11-13T01:05:15.207 [DEBUG] [Thread-25936] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:05:15.221 [DEBUG] [Thread-25936] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:05:15.221 [INFO] [Thread-25936] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] client lang: <none>
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] server lang: <none>
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] kex follows: False
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:05:15.224 [DEBUG] [Thread-25936] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:05:15.225 [DEBUG] [Thread-25936] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:05:15.225 [DEBUG] [Thread-25936] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:05:15.225 [DEBUG] [Thread-25936] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:05:15.225 [DEBUG] [Thread-25936] [transport.py] [_log()] Compression: none
2025-11-13T01:05:15.225 [DEBUG] [Thread-25936] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:05:15.243 [DEBUG] [Thread-25936] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:05:15.243 [DEBUG] [Thread-25936] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:05:15.244 [DEBUG] [Thread-25936] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:05:15.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:05:15.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:05:15.246 [DEBUG] [Thread-25936] [transport.py] [_log()] userauth is OK
2025-11-13T01:05:15.246 [DEBUG] [Thread-25936] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:05:15.246 [DEBUG] [Thread-25936] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:05:15.246 [DEBUG] [Thread-25936] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:05:15.246 [DEBUG] [Thread-25936] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:05:15.261 [INFO] [Thread-25936] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:05:15.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:05:15.926 [DEBUG] [Thread-25936] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:05:15.926 [DEBUG] [Thread-25936] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:05:15.926 [DEBUG] [Thread-25936] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:05:15.967 [DEBUG] [Thread-25936] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:05:15.967 [DEBUG] [Thread-25936] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:05:15.971 [DEBUG] [Thread-25936] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:05:15.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:05:15.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:05:15.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:05:15.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:05:15.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:05:15.994 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:05:15.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:05:15.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:05:15.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:05:15.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.961897 -999.00  +15.30  11.95     59   +7.40 1 1 1 1 1     0    0 9.84 74.18 ZNESW 14.4 11.9 263.2 14.1 15.7 -24.0 15.6 -23.0 15.3 -22.6 15.6 -23.3
2025-11-13T01:05:15.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:05:15.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:05:15.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.961897
2025-11-13T01:05:15.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:05:15.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:05:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:05:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:05:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:05:15.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:05:03', tmtdew=6.46, humidity=68.16, cloud=0.0, wind=18.93, temperature=10.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:05:03', seeing=1.04, atlas_timestamp='2025-11-12T23:05:07.901', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.025750000000000384, 0.047250000000000014, -0.011499999999999844, 0.05400000000000027, 0.08125000000000071, 0.015499999999999403, 0.021750000000000824, 0.024499999999999744, 0.03750000000000142, 0.10324999999999918, 0.057000000000000384, 0.10899999999999999, 0.04224999999999923, -0.031500000000001194, -0.017000000000001236, 0.023749999999999716, 0.0705000000000009, 0.13699999999999868, 0.0752499999999987, 0.05449999999999733, 0.10574999999999868, 0.10975000000000179, 0.0467499999999994, 0.007999999999999119, 0.09849999999999959, 0.2717500000000008, 0.19100000000000072, 0.13400000000000034, 0.2134999999999998, 0.2680000000000007, 0.1479999999999997, 0.060249999999999915], zp_timestamp='2025-11-12T23:01:00')
2025-11-13T01:05:15.997 [DEBUG] [Thread-25936] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:05:16.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:05:16.084 [DEBUG] [Thread-25939] [transport.py] [_log()] starting thread (client mode): 0x1493c9d0
2025-11-13T01:05:16.084 [DEBUG] [Thread-25939] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:05:16.101 [DEBUG] [Thread-25939] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:05:16.101 [INFO] [Thread-25939] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] client lang: <none>
2025-11-13T01:05:16.109 [DEBUG] [Thread-25939] [transport.py] [_log()] server lang: <none>
2025-11-13T01:05:16.110 [DEBUG] [Thread-25939] [transport.py] [_log()] kex follows: False
2025-11-13T01:05:16.110 [DEBUG] [Thread-25939] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:05:16.110 [DEBUG] [Thread-25939] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:05:16.110 [DEBUG] [Thread-25939] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:05:16.110 [DEBUG] [Thread-25939] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:05:16.110 [DEBUG] [Thread-25939] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:05:16.110 [DEBUG] [Thread-25939] [transport.py] [_log()] Compression: none
2025-11-13T01:05:16.110 [DEBUG] [Thread-25939] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:05:16.169 [DEBUG] [Thread-25939] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:05:16.169 [DEBUG] [Thread-25939] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:05:16.170 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:05:16.171 [DEBUG] [Thread-25939] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:05:16.171 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:05:16.228 [DEBUG] [Thread-25939] [transport.py] [_log()] userauth is OK
2025-11-13T01:05:16.229 [DEBUG] [Thread-25939] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:05:16.229 [DEBUG] [Thread-25939] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:05:16.229 [DEBUG] [Thread-25939] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:05:16.229 [DEBUG] [Thread-25939] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:05:16.248 [INFO] [Thread-25939] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:05:16.249 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:05:16.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:05:17.063 [DEBUG] [Thread-25939] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:05:17.064 [DEBUG] [Thread-25939] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:05:17.112 [DEBUG] [Thread-25939] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:05:17.112 [DEBUG] [Thread-25939] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:05:17.121 [DEBUG] [Thread-25939] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:05:17.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:05:17.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-11-13T01:05:17.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:05:17.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:05:17.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:05:17.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:05:17.162 [DEBUG] [Thread-25939] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:05:19.717 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:23.659 [DEBUG] [Thread-25941 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:33.496 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:33.497 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:38.708 [DEBUG] [Thread-25942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:39.104 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:43.571 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:05:47.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:05:47.184 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:05:47.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:05:47.873 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 5, 35), 6.37, 68.68, 0.0, 19.36, 10.24, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:05:47.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:05:35
2025-11-13T01:05:48.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:05:48.145 [DEBUG] [Thread-25943] [transport.py] [_log()] starting thread (client mode): 0x14983700
2025-11-13T01:05:48.145 [DEBUG] [Thread-25943] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:05:48.164 [DEBUG] [Thread-25943] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:05:48.165 [INFO] [Thread-25943] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] client lang: <none>
2025-11-13T01:05:48.168 [DEBUG] [Thread-25943] [transport.py] [_log()] server lang: <none>
2025-11-13T01:05:48.169 [DEBUG] [Thread-25943] [transport.py] [_log()] kex follows: False
2025-11-13T01:05:48.169 [DEBUG] [Thread-25943] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:05:48.169 [DEBUG] [Thread-25943] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:05:48.169 [DEBUG] [Thread-25943] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:05:48.169 [DEBUG] [Thread-25943] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:05:48.169 [DEBUG] [Thread-25943] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:05:48.169 [DEBUG] [Thread-25943] [transport.py] [_log()] Compression: none
2025-11-13T01:05:48.169 [DEBUG] [Thread-25943] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:05:48.186 [DEBUG] [Thread-25943] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:05:48.187 [DEBUG] [Thread-25943] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:05:48.187 [DEBUG] [Thread-25943] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:05:48.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:05:48.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:05:48.189 [DEBUG] [Thread-25943] [transport.py] [_log()] userauth is OK
2025-11-13T01:05:48.190 [DEBUG] [Thread-25943] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:05:48.190 [DEBUG] [Thread-25943] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:05:48.190 [DEBUG] [Thread-25943] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:05:48.190 [DEBUG] [Thread-25943] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:05:48.215 [INFO] [Thread-25943] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:05:48.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:05:48.832 [DEBUG] [Thread-25943] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:05:48.832 [DEBUG] [Thread-25943] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:05:48.832 [DEBUG] [Thread-25943] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:05:48.872 [DEBUG] [Thread-25943] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:05:48.873 [DEBUG] [Thread-25943] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:05:48.875 [DEBUG] [Thread-25943] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:05:48.881 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:05:48.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:05:48.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:05:48.884 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:05:48.892 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:05:48.893 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:05:48.894 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:05:48.894 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:05:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:05:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.962244 -999.00  +15.30  11.17     59   +7.30 1 1 1 1 1     0    0 9.90 71.50 ZNESW 12.1 11.2 267.2 17.5 15.7 -24.0 15.6 -23.1 15.3 -22.5 15.6 -23.6
2025-11-13T01:05:48.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:05:48.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:05:48.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.962244
2025-11-13T01:05:48.895 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:05:48.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:05:48.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:05:48.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:05:48.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:05:48.896 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:05:35', tmtdew=6.37, humidity=68.68, cloud=0.0, wind=19.36, temperature=10.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:05:35', seeing=1.08, atlas_timestamp='2025-11-12T23:05:37.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.0072499999999990905, 0.025750000000000384, 0.047250000000000014, -0.011499999999999844, 0.05400000000000027, 0.08125000000000071, 0.015499999999999403, 0.021750000000000824, 0.024499999999999744, 0.03750000000000142, 0.10324999999999918, 0.057000000000000384, 0.10899999999999999, 0.04224999999999923, -0.031500000000001194, -0.017000000000001236, 0.023749999999999716, 0.0705000000000009, 0.13699999999999868, 0.0752499999999987, 0.05449999999999733, 0.10574999999999868, 0.10975000000000179, 0.0467499999999994, 0.007999999999999119, 0.09849999999999959, 0.2717500000000008, 0.19100000000000072, 0.13400000000000034, 0.2134999999999998, 0.2680000000000007, 0.1479999999999997, 0.060249999999999915], zp_timestamp='2025-11-12T23:01:00')
2025-11-13T01:05:48.896 [DEBUG] [Thread-25943] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:05:48.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:05:48.994 [DEBUG] [Thread-25946] [transport.py] [_log()] starting thread (client mode): 0x14980130
2025-11-13T01:05:48.994 [DEBUG] [Thread-25946] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:05:49.008 [DEBUG] [Thread-25946] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:05:49.009 [INFO] [Thread-25946] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] client lang: <none>
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] server lang: <none>
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] kex follows: False
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:05:49.016 [DEBUG] [Thread-25946] [transport.py] [_log()] Compression: none
2025-11-13T01:05:49.017 [DEBUG] [Thread-25946] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:05:49.075 [DEBUG] [Thread-25946] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:05:49.075 [DEBUG] [Thread-25946] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:05:49.076 [DEBUG] [Thread-25946] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:05:49.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:05:49.076 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:05:49.132 [DEBUG] [Thread-25946] [transport.py] [_log()] userauth is OK
2025-11-13T01:05:49.132 [DEBUG] [Thread-25946] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:05:49.132 [DEBUG] [Thread-25946] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:05:49.132 [DEBUG] [Thread-25946] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:05:49.132 [DEBUG] [Thread-25946] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:05:49.150 [INFO] [Thread-25946] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:05:49.150 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:05:49.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:05:49.986 [DEBUG] [Thread-25946] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:05:49.986 [DEBUG] [Thread-25946] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:05:50.035 [DEBUG] [Thread-25946] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:05:50.035 [DEBUG] [Thread-25946] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:05:50.044 [DEBUG] [Thread-25946] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:05:50.054 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:05: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-11-13T01:05:50.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:05:50.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:05:50.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:05:50.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:05:50.082 [DEBUG] [Thread-25946] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:05:53.745 [DEBUG] [Thread-25948 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:02.878 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:07.374 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:08.702 [DEBUG] [Thread-25949 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:08.800 [DEBUG] [Thread-25950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:13.993 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:18.542 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:20.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:06:20.105 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:06:20.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-11-13T01:06:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 6, 7), 6.31, 68.89, 0.0, 19.37, 10.22, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:06:20.765 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:06:07
2025-11-13T01:06:20.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:06:21.033 [DEBUG] [Thread-25951] [transport.py] [_log()] starting thread (client mode): 0x1737dab0
2025-11-13T01:06:21.033 [DEBUG] [Thread-25951] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:06:21.043 [DEBUG] [Thread-25951] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:06:21.043 [INFO] [Thread-25951] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] client lang: <none>
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] server lang: <none>
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] kex follows: False
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:06:21.046 [DEBUG] [Thread-25951] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:06:21.047 [DEBUG] [Thread-25951] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:06:21.047 [DEBUG] [Thread-25951] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:06:21.047 [DEBUG] [Thread-25951] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:06:21.047 [DEBUG] [Thread-25951] [transport.py] [_log()] Compression: none
2025-11-13T01:06:21.047 [DEBUG] [Thread-25951] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:06:21.055 [DEBUG] [Thread-25951] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:06:21.055 [DEBUG] [Thread-25951] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:06:21.055 [DEBUG] [Thread-25951] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:06:21.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:06:21.056 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:06:21.057 [DEBUG] [Thread-25951] [transport.py] [_log()] userauth is OK
2025-11-13T01:06:21.057 [DEBUG] [Thread-25951] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:06:21.057 [DEBUG] [Thread-25951] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:06:21.057 [DEBUG] [Thread-25951] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:06:21.057 [DEBUG] [Thread-25951] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:06:21.077 [INFO] [Thread-25951] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:06:21.077 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:06:21.663 [DEBUG] [Thread-25951] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:06:21.663 [DEBUG] [Thread-25951] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:06:21.663 [DEBUG] [Thread-25951] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:06:21.703 [DEBUG] [Thread-25951] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:06:21.704 [DEBUG] [Thread-25951] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:06:21.706 [DEBUG] [Thread-25951] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:06:21.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:06:21.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:06:21.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:06:21.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:06:21.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:06:21.723 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:06:21.723 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:06:21.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:06:21.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:06:21.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.962592 -999.00  +15.20  12.31     59   +7.30 1 1 1 1 1     0    0 9.60 66.50 ZNESW 11.1 12.3 260.6 14.7 15.7 -24.0 15.6 -23.0 15.3 -22.5 15.6 -23.5
2025-11-13T01:06:21.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:06:21.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:06:21.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.962592
2025-11-13T01:06:21.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:06:21.725 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:06:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:06:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:06:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:06:21.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:06:07', tmtdew=6.31, humidity=68.89, cloud=0.0, wind=19.37, temperature=10.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:06:07', seeing=1.08, atlas_timestamp='2025-11-12T23:06:07.949', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:05:00')
2025-11-13T01:06:21.726 [DEBUG] [Thread-25951] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:06:21.810 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:06:21.822 [DEBUG] [Thread-25954] [transport.py] [_log()] starting thread (client mode): 0x17345f60
2025-11-13T01:06:21.823 [DEBUG] [Thread-25954] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:06:21.837 [DEBUG] [Thread-25954] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:06:21.837 [INFO] [Thread-25954] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] client lang: <none>
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] server lang: <none>
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] kex follows: False
2025-11-13T01:06:21.845 [DEBUG] [Thread-25954] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:06:21.846 [DEBUG] [Thread-25954] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:06:21.846 [DEBUG] [Thread-25954] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:06:21.846 [DEBUG] [Thread-25954] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:06:21.846 [DEBUG] [Thread-25954] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:06:21.846 [DEBUG] [Thread-25954] [transport.py] [_log()] Compression: none
2025-11-13T01:06:21.846 [DEBUG] [Thread-25954] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:06:21.903 [DEBUG] [Thread-25954] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:06:21.903 [DEBUG] [Thread-25954] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:06:21.903 [DEBUG] [Thread-25954] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:06:21.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:06:21.904 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:06:21.960 [DEBUG] [Thread-25954] [transport.py] [_log()] userauth is OK
2025-11-13T01:06:21.960 [DEBUG] [Thread-25954] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:06:21.960 [DEBUG] [Thread-25954] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:06:21.960 [DEBUG] [Thread-25954] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:06:21.961 [DEBUG] [Thread-25954] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:06:21.979 [INFO] [Thread-25954] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:06:21.980 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:06:21.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:06:22.771 [DEBUG] [Thread-25954] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:06:22.771 [DEBUG] [Thread-25954] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:06:22.819 [DEBUG] [Thread-25954] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:06:22.819 [DEBUG] [Thread-25954] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:06:22.828 [DEBUG] [Thread-25954] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:06:22.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:06:22.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-11-13T01:06:22.847 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:06:22.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:06:22.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:06:22.857 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:06:22.865 [DEBUG] [Thread-25954] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:06:23.833 [DEBUG] [Thread-25956 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:33.703 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:33.704 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:38.898 [DEBUG] [Thread-25957 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:52.862 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:06:52.862 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:06:52.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-11-13T01:06:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 6, 39), 9.57, 52.99, 0.0, 18.54, 15.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:06:53.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:06:39
2025-11-13T01:06:53.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:06:53.770 [DEBUG] [Thread-25958] [transport.py] [_log()] starting thread (client mode): 0x17346920
2025-11-13T01:06:53.770 [DEBUG] [Thread-25958] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:06:53.791 [DEBUG] [Thread-25958] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:06:53.792 [INFO] [Thread-25958] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:06:53.795 [DEBUG] [Thread-25958] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:06:53.795 [DEBUG] [Thread-25958] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] client lang: <none>
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] server lang: <none>
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] kex follows: False
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] Compression: none
2025-11-13T01:06:53.796 [DEBUG] [Thread-25958] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:06:53.813 [DEBUG] [Thread-25958] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:06:53.814 [DEBUG] [Thread-25958] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:06:53.814 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:06:53.815 [DEBUG] [Thread-25958] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:06:53.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:06:53.817 [DEBUG] [Thread-25958] [transport.py] [_log()] userauth is OK
2025-11-13T01:06:53.817 [DEBUG] [Thread-25958] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:06:53.817 [DEBUG] [Thread-25958] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:06:53.817 [DEBUG] [Thread-25958] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:06:53.817 [DEBUG] [Thread-25958] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:06:53.841 [INFO] [Thread-25958] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:06:53.842 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:06:53.934 [DEBUG] [Thread-25960 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:06:54.462 [DEBUG] [Thread-25958] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:06:54.462 [DEBUG] [Thread-25958] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:06:54.463 [DEBUG] [Thread-25958] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:06:54.502 [DEBUG] [Thread-25958] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:06:54.503 [DEBUG] [Thread-25958] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:06:54.506 [DEBUG] [Thread-25958] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:06:54.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:06:54.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:06:54.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:06:54.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:06:54.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:06:54.530 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:06:54.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:06:54.530 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:06:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:06:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.962592 -999.00  +15.20  12.31     59   +7.30 1 1 1 1 1     0    0 9.60 66.50 ZNESW 11.1 12.3 260.6 14.7 15.7 -24.0 15.6 -23.0 15.3 -22.5 15.6 -23.5
2025-11-13T01:06:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:06:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:06:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.962592
2025-11-13T01:06:54.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:06:54.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:06:54.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:06:54.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:06:54.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:06:54.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:06:39', tmtdew=9.57, humidity=52.99, cloud=0.0, wind=18.54, temperature=15.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:06:39', seeing=1.16, atlas_timestamp='2025-11-12T23:06:07.949', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:05:00')
2025-11-13T01:06:54.533 [DEBUG] [Thread-25958] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:06:54.629 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:06:54.641 [DEBUG] [Thread-25962] [transport.py] [_log()] starting thread (client mode): 0x14982740
2025-11-13T01:06:54.641 [DEBUG] [Thread-25962] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:06:54.657 [DEBUG] [Thread-25962] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:06:54.657 [INFO] [Thread-25962] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:06:54.665 [DEBUG] [Thread-25962] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:06:54.665 [DEBUG] [Thread-25962] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:06:54.665 [DEBUG] [Thread-25962] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:06:54.666 [DEBUG] [Thread-25962] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:06:54.666 [DEBUG] [Thread-25962] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:06:54.666 [DEBUG] [Thread-25962] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:06:54.666 [DEBUG] [Thread-25962] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:06:54.666 [DEBUG] [Thread-25962] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:06:54.666 [DEBUG] [Thread-25962] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:06:54.666 [DEBUG] [Thread-25962] [transport.py] [_log()] client lang: <none>
2025-11-13T01:06:54.666 [DEBUG] [Thread-25962] [transport.py] [_log()] server lang: <none>
2025-11-13T01:06:54.667 [DEBUG] [Thread-25962] [transport.py] [_log()] kex follows: False
2025-11-13T01:06:54.667 [DEBUG] [Thread-25962] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:06:54.667 [DEBUG] [Thread-25962] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:06:54.667 [DEBUG] [Thread-25962] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:06:54.667 [DEBUG] [Thread-25962] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:06:54.667 [DEBUG] [Thread-25962] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:06:54.667 [DEBUG] [Thread-25962] [transport.py] [_log()] Compression: none
2025-11-13T01:06:54.667 [DEBUG] [Thread-25962] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:06:54.725 [DEBUG] [Thread-25962] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:06:54.726 [DEBUG] [Thread-25962] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:06:54.727 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:06:54.728 [DEBUG] [Thread-25962] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:06:54.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:06:54.784 [DEBUG] [Thread-25962] [transport.py] [_log()] userauth is OK
2025-11-13T01:06:54.785 [DEBUG] [Thread-25962] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:06:54.785 [DEBUG] [Thread-25962] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:06:54.785 [DEBUG] [Thread-25962] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:06:54.785 [DEBUG] [Thread-25962] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:06:54.804 [INFO] [Thread-25962] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:06:54.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:06:54.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:06:55.597 [DEBUG] [Thread-25962] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:06:55.597 [DEBUG] [Thread-25962] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:06:55.646 [DEBUG] [Thread-25962] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:06:55.646 [DEBUG] [Thread-25962] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:06:55.655 [DEBUG] [Thread-25962] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:06:55.664 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:06:55.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-11-13T01:06:55.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-11-13T01:06:55.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:06:55.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:06:55.684 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:06:55.692 [DEBUG] [Thread-25962] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:07:08.760 [DEBUG] [Thread-25964 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:08.973 [DEBUG] [Thread-25965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:22.023 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:24.019 [DEBUG] [Thread-25966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:25.098 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:25.690 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:07:25.691 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:07:25.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-11-13T01:07:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 7, 11), 9.61, 52.87, 0.0, 18.74, 15.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:07:26.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:07:11
2025-11-13T01:07:26.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:07:26.610 [DEBUG] [Thread-25967] [transport.py] [_log()] starting thread (client mode): 0x1493c040
2025-11-13T01:07:26.611 [DEBUG] [Thread-25967] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:07:26.630 [DEBUG] [Thread-25967] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:07:26.630 [INFO] [Thread-25967] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:07:26.633 [DEBUG] [Thread-25967] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:07:26.633 [DEBUG] [Thread-25967] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:07:26.633 [DEBUG] [Thread-25967] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:07:26.633 [DEBUG] [Thread-25967] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:07:26.633 [DEBUG] [Thread-25967] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:07:26.633 [DEBUG] [Thread-25967] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] client lang: <none>
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] server lang: <none>
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] kex follows: False
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] Compression: none
2025-11-13T01:07:26.634 [DEBUG] [Thread-25967] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:07:26.653 [DEBUG] [Thread-25967] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:07:26.654 [DEBUG] [Thread-25967] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:07:26.655 [DEBUG] [Thread-25967] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:07:26.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:07:26.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:07:26.657 [DEBUG] [Thread-25967] [transport.py] [_log()] userauth is OK
2025-11-13T01:07:26.657 [DEBUG] [Thread-25967] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:07:26.658 [DEBUG] [Thread-25967] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:07:26.658 [DEBUG] [Thread-25967] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:07:26.658 [DEBUG] [Thread-25967] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:07:26.682 [INFO] [Thread-25967] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:07:26.682 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:07:27.333 [DEBUG] [Thread-25967] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:07:27.334 [DEBUG] [Thread-25967] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:07:27.334 [DEBUG] [Thread-25967] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:07:27.375 [DEBUG] [Thread-25967] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:07:27.375 [DEBUG] [Thread-25967] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:07:27.378 [DEBUG] [Thread-25967] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:07:27.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:07:27.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:07:27.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:07:27.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:07:27.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:07:27.400 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:07:27.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:07:27.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:07:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:07:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.962939 -999.00  +15.20  14.05     57   +6.90 1 1 1 1 1     0    0 9.55 59.86 ZNESW 14.7 14.1 265.8 17.0 15.7 -23.9 15.6 -23.0 15.3 -22.6 15.6 -23.2
2025-11-13T01:07:27.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:07:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:07:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.962939
2025-11-13T01:07:27.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:07:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:07:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:07:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:07:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:07:27.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:07:11', tmtdew=9.61, humidity=52.87, cloud=0.0, wind=18.74, temperature=15.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:07:11', seeing=1.23, atlas_timestamp='2025-11-12T23:06:37.930', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:05:00')
2025-11-13T01:07:27.403 [DEBUG] [Thread-25967] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:07:27.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:07:27.500 [DEBUG] [Thread-25970] [transport.py] [_log()] starting thread (client mode): 0x11f03c40
2025-11-13T01:07:27.500 [DEBUG] [Thread-25970] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:07:27.516 [DEBUG] [Thread-25970] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:07:27.516 [INFO] [Thread-25970] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] client lang: <none>
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] server lang: <none>
2025-11-13T01:07:27.524 [DEBUG] [Thread-25970] [transport.py] [_log()] kex follows: False
2025-11-13T01:07:27.525 [DEBUG] [Thread-25970] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:07:27.525 [DEBUG] [Thread-25970] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:07:27.525 [DEBUG] [Thread-25970] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:07:27.525 [DEBUG] [Thread-25970] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:07:27.525 [DEBUG] [Thread-25970] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:07:27.525 [DEBUG] [Thread-25970] [transport.py] [_log()] Compression: none
2025-11-13T01:07:27.525 [DEBUG] [Thread-25970] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:07:27.581 [DEBUG] [Thread-25970] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:07:27.581 [DEBUG] [Thread-25970] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:07:27.582 [DEBUG] [Thread-25970] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:07:27.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:07:27.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:07:27.636 [DEBUG] [Thread-25970] [transport.py] [_log()] userauth is OK
2025-11-13T01:07:27.637 [DEBUG] [Thread-25970] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:07:27.637 [DEBUG] [Thread-25970] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:07:27.637 [DEBUG] [Thread-25970] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:07:27.637 [DEBUG] [Thread-25970] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:07:27.664 [INFO] [Thread-25970] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:07:27.665 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:07:27.665 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:07:28.486 [DEBUG] [Thread-25970] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:07:28.486 [DEBUG] [Thread-25970] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:07:28.534 [DEBUG] [Thread-25970] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:07:28.534 [DEBUG] [Thread-25970] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:07:28.543 [DEBUG] [Thread-25970] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:07:28.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:07:28.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-11-13T01:07:28.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-11-13T01:07:28.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:07:28.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:07:28.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:07:28.580 [DEBUG] [Thread-25970] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:07:33.909 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:33.910 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:39.051 [DEBUG] [Thread-25972 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:54.106 [DEBUG] [Thread-25973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:07:58.578 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:07:58.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:07:58.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-11-13T01:07:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 7, 43), 9.93, 51.6, 0.0, 19.34, 15.48, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:07:59.218 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:07:43
2025-11-13T01:07:59.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:07:59.507 [DEBUG] [Thread-25974] [transport.py] [_log()] starting thread (client mode): 0x1493c790
2025-11-13T01:07:59.507 [DEBUG] [Thread-25974] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:07:59.527 [DEBUG] [Thread-25974] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:07:59.527 [INFO] [Thread-25974] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:07:59.530 [DEBUG] [Thread-25974] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:07:59.530 [DEBUG] [Thread-25974] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:07:59.530 [DEBUG] [Thread-25974] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:07:59.530 [DEBUG] [Thread-25974] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:07:59.530 [DEBUG] [Thread-25974] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] client lang: <none>
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] server lang: <none>
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] kex follows: False
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] Compression: none
2025-11-13T01:07:59.531 [DEBUG] [Thread-25974] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:07:59.538 [DEBUG] [Thread-25974] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:07:59.538 [DEBUG] [Thread-25974] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:07:59.538 [DEBUG] [Thread-25974] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:07:59.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:07:59.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:07:59.580 [DEBUG] [Thread-25974] [transport.py] [_log()] userauth is OK
2025-11-13T01:07:59.580 [DEBUG] [Thread-25974] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:07:59.580 [DEBUG] [Thread-25974] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:07:59.580 [DEBUG] [Thread-25974] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:07:59.580 [DEBUG] [Thread-25974] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:07:59.607 [INFO] [Thread-25974] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:07:59.608 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:08:00.262 [DEBUG] [Thread-25974] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:08:00.262 [DEBUG] [Thread-25974] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:08:00.262 [DEBUG] [Thread-25974] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:08:00.303 [DEBUG] [Thread-25974] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:08:00.303 [DEBUG] [Thread-25974] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:08:00.305 [DEBUG] [Thread-25974] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:08:00.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:08:00.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:08:00.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:08:00.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:08:00.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:08:00.324 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:08:00.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.963286 -999.00  +15.30  19.57     57   +6.90 1 1 1 1 1     0    0 9.64 61.71 ZNESW 15.7 19.6 266.8 22.4 15.7 -23.9 15.6 -22.9 15.3 -22.3 15.6 -23.3
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.963286
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:08:00.324 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:07:43', tmtdew=9.93, humidity=51.6, cloud=0.0, wind=19.34, temperature=15.48, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:07:43', seeing=1.23, atlas_timestamp='2025-11-12T23:07:07.910', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:05:00')
2025-11-13T01:08:00.325 [DEBUG] [Thread-25974] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:08:00.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:08:00.413 [DEBUG] [Thread-25977] [transport.py] [_log()] starting thread (client mode): 0x11f00c70
2025-11-13T01:08:00.413 [DEBUG] [Thread-25977] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:08:00.428 [DEBUG] [Thread-25977] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:08:00.428 [INFO] [Thread-25977] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] client lang: <none>
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] server lang: <none>
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] kex follows: False
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] Compression: none
2025-11-13T01:08:00.436 [DEBUG] [Thread-25977] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:08:00.495 [DEBUG] [Thread-25977] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:08:00.495 [DEBUG] [Thread-25977] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:08:00.495 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:08:00.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:08:00.496 [DEBUG] [Thread-25977] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:08:00.552 [DEBUG] [Thread-25977] [transport.py] [_log()] userauth is OK
2025-11-13T01:08:00.552 [DEBUG] [Thread-25977] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:08:00.552 [DEBUG] [Thread-25977] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:08:00.552 [DEBUG] [Thread-25977] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:08:00.552 [DEBUG] [Thread-25977] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:08:00.569 [INFO] [Thread-25977] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:08:00.569 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:08:00.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:08:01.386 [DEBUG] [Thread-25977] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:08:01.386 [DEBUG] [Thread-25977] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:08:01.434 [DEBUG] [Thread-25977] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:08:01.434 [DEBUG] [Thread-25977] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:08:01.442 [DEBUG] [Thread-25977] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:08:01.450 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:08:01.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-11-13T01:08:01.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-11-13T01:08:01.466 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:08:01.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:08:01.467 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:08:01.474 [DEBUG] [Thread-25977] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:08:08.817 [DEBUG] [Thread-25979 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:08:09.140 [DEBUG] [Thread-25980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:08:24.192 [DEBUG] [Thread-25981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:08:31.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:08:31.497 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:08:31.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-11-13T01:08:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 8, 15), 9.9, 51.72, 0.0, 19.6, 15.52, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:08:32.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:08:15
2025-11-13T01:08:32.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:08:32.424 [DEBUG] [Thread-25982] [transport.py] [_log()] starting thread (client mode): 0x11f03d00
2025-11-13T01:08:32.424 [DEBUG] [Thread-25982] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:08:32.445 [DEBUG] [Thread-25982] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:08:32.445 [INFO] [Thread-25982] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:08:32.448 [DEBUG] [Thread-25982] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] client lang: <none>
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] server lang: <none>
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] kex follows: False
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:08:32.449 [DEBUG] [Thread-25982] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:08:32.450 [DEBUG] [Thread-25982] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:08:32.450 [DEBUG] [Thread-25982] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:08:32.450 [DEBUG] [Thread-25982] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:08:32.450 [DEBUG] [Thread-25982] [transport.py] [_log()] Compression: none
2025-11-13T01:08:32.450 [DEBUG] [Thread-25982] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:08:32.469 [DEBUG] [Thread-25982] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:08:32.470 [DEBUG] [Thread-25982] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:08:32.471 [DEBUG] [Thread-25982] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:08:32.472 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:08:32.473 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:08:32.474 [DEBUG] [Thread-25982] [transport.py] [_log()] userauth is OK
2025-11-13T01:08:32.474 [DEBUG] [Thread-25982] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:08:32.474 [DEBUG] [Thread-25982] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:08:32.474 [DEBUG] [Thread-25982] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:08:32.474 [DEBUG] [Thread-25982] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:08:32.510 [INFO] [Thread-25982] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:08:32.510 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:08:33.125 [DEBUG] [Thread-25982] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:08:33.125 [DEBUG] [Thread-25982] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:08:33.126 [DEBUG] [Thread-25982] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:08:33.167 [DEBUG] [Thread-25982] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:08:33.167 [DEBUG] [Thread-25982] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:08:33.171 [DEBUG] [Thread-25982] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:08:33.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:08:33.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:08:33.186 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:08:33.189 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:08:33.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:08:33.197 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:08:33.198 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:08:33.198 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:08:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:08:33.198 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.963633 -999.00  +15.30  18.74     56   +6.60 1 1 1 1 1     0    0 9.69 61.81 ZNESW 16.3 18.7 262.6 21.1 15.7 -23.7 15.6 -22.8 15.3 -22.5 15.6 -23.3
2025-11-13T01:08:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:08:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:08:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.963633
2025-11-13T01:08:33.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:08:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:08:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:08:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:08:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:08:33.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:08:15', tmtdew=9.9, humidity=51.72, cloud=0.0, wind=19.6, temperature=15.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:08:15', seeing=1.15, atlas_timestamp='2025-11-12T23:07:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:05:00')
2025-11-13T01:08:33.201 [DEBUG] [Thread-25982] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:08:33.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:08:33.299 [DEBUG] [Thread-25985] [transport.py] [_log()] starting thread (client mode): 0x11f027d0
2025-11-13T01:08:33.299 [DEBUG] [Thread-25985] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:08:33.315 [DEBUG] [Thread-25985] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:08:33.315 [INFO] [Thread-25985] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:08:33.323 [DEBUG] [Thread-25985] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:08:33.323 [DEBUG] [Thread-25985] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:08:33.323 [DEBUG] [Thread-25985] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:08:33.323 [DEBUG] [Thread-25985] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:08:33.323 [DEBUG] [Thread-25985] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] client lang: <none>
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] server lang: <none>
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] kex follows: False
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] Compression: none
2025-11-13T01:08:33.324 [DEBUG] [Thread-25985] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:08:33.380 [DEBUG] [Thread-25985] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:08:33.381 [DEBUG] [Thread-25985] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:08:33.381 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:08:33.382 [DEBUG] [Thread-25985] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:08:33.383 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:08:33.436 [DEBUG] [Thread-25985] [transport.py] [_log()] userauth is OK
2025-11-13T01:08:33.436 [DEBUG] [Thread-25985] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:08:33.436 [DEBUG] [Thread-25985] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:08:33.437 [DEBUG] [Thread-25985] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:08:33.437 [DEBUG] [Thread-25985] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:08:33.456 [INFO] [Thread-25985] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:08:33.456 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:08:33.457 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:08:34.112 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:08:34.113 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:08:34.285 [DEBUG] [Thread-25985] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:08:34.285 [DEBUG] [Thread-25985] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:08:34.333 [DEBUG] [Thread-25985] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:08:34.333 [DEBUG] [Thread-25985] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:08:34.343 [DEBUG] [Thread-25985] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:08:34.352 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:08:34.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-11-13T01:08:34.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-11-13T01:08:34.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:08:34.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:08:34.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:08:34.380 [DEBUG] [Thread-25985] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:08:39.227 [DEBUG] [Thread-25987 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:08:54.275 [DEBUG] [Thread-25988 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:09:04.389 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:09:04.389 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:09:04.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-11-13T01:09:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 8, 47), 9.82, 51.96, 0.0, 16.71, 15.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:09:05.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:08:47
2025-11-13T01:09:05.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:09:05.313 [DEBUG] [Thread-25989] [transport.py] [_log()] starting thread (client mode): 0x1493f4f0
2025-11-13T01:09:05.313 [DEBUG] [Thread-25989] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:09:05.332 [DEBUG] [Thread-25989] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:09:05.332 [INFO] [Thread-25989] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] client lang: <none>
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] server lang: <none>
2025-11-13T01:09:05.333 [DEBUG] [Thread-25989] [transport.py] [_log()] kex follows: False
2025-11-13T01:09:05.334 [DEBUG] [Thread-25989] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:09:05.334 [DEBUG] [Thread-25989] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:09:05.334 [DEBUG] [Thread-25989] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:09:05.334 [DEBUG] [Thread-25989] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:09:05.334 [DEBUG] [Thread-25989] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:09:05.334 [DEBUG] [Thread-25989] [transport.py] [_log()] Compression: none
2025-11-13T01:09:05.334 [DEBUG] [Thread-25989] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:09:05.346 [DEBUG] [Thread-25989] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:09:05.347 [DEBUG] [Thread-25989] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:09:05.347 [DEBUG] [Thread-25989] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:09:05.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:09:05.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:09:05.348 [DEBUG] [Thread-25989] [transport.py] [_log()] userauth is OK
2025-11-13T01:09:05.348 [DEBUG] [Thread-25989] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:09:05.348 [DEBUG] [Thread-25989] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:09:05.348 [DEBUG] [Thread-25989] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:09:05.348 [DEBUG] [Thread-25989] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:09:05.358 [INFO] [Thread-25989] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:09:05.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:09:05.976 [DEBUG] [Thread-25989] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:09:05.976 [DEBUG] [Thread-25989] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:09:05.976 [DEBUG] [Thread-25989] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:09:06.017 [DEBUG] [Thread-25989] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:09:06.017 [DEBUG] [Thread-25989] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:09:06.020 [DEBUG] [Thread-25989] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:09:06.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:09:06.027 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:09:06.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:09:06.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:09:06.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:09:06.038 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:09:06.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:09:06.039 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:09:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:09:06.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.964328 -999.00  +15.30  11.79     57   +6.90 1 1 1 1 1     0    0 9.77 61.32 ZNESW 11.5 11.8 273.4 20.3 15.7 -23.9 15.6 -22.9 15.3 -22.4 15.6 -23.2
2025-11-13T01:09:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:09:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:09:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.964328
2025-11-13T01:09:06.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:09:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:09:06.041 [DEBUG] [Thread-25989] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:09:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:09:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:09:06.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:09:06.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:08:47', tmtdew=9.82, humidity=51.96, cloud=0.0, wind=16.71, temperature=15.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:08:47', seeing=1.27, atlas_timestamp='2025-11-12T23:08:37.939', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:07:00')
2025-11-13T01:09:06.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:09:06.140 [DEBUG] [Thread-25992] [transport.py] [_log()] starting thread (client mode): 0x1493ca00
2025-11-13T01:09:06.141 [DEBUG] [Thread-25992] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:09:06.156 [DEBUG] [Thread-25992] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:09:06.156 [INFO] [Thread-25992] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] client lang: <none>
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] server lang: <none>
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] kex follows: False
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:09:06.164 [DEBUG] [Thread-25992] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:09:06.165 [DEBUG] [Thread-25992] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:09:06.165 [DEBUG] [Thread-25992] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:09:06.165 [DEBUG] [Thread-25992] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:09:06.165 [DEBUG] [Thread-25992] [transport.py] [_log()] Compression: none
2025-11-13T01:09:06.165 [DEBUG] [Thread-25992] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:09:06.224 [DEBUG] [Thread-25992] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:09:06.224 [DEBUG] [Thread-25992] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:09:06.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:09:06.226 [DEBUG] [Thread-25992] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:09:06.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:09:06.284 [DEBUG] [Thread-25992] [transport.py] [_log()] userauth is OK
2025-11-13T01:09:06.284 [DEBUG] [Thread-25992] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:09:06.284 [DEBUG] [Thread-25992] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:09:06.284 [DEBUG] [Thread-25992] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:09:06.285 [DEBUG] [Thread-25992] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:09:06.313 [INFO] [Thread-25992] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:09:06.314 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:09:06.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:09:07.146 [DEBUG] [Thread-25992] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:09:07.146 [DEBUG] [Thread-25992] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:09:07.193 [DEBUG] [Thread-25992] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:09:07.194 [DEBUG] [Thread-25992] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:09:07.203 [DEBUG] [Thread-25992] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:09:07.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:09:07.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:09:07.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-11-13T01:09:07.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:09:07.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:09:07.232 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:09:07.240 [DEBUG] [Thread-25992] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:09:08.874 [DEBUG] [Thread-25994 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:09:09.312 [DEBUG] [Thread-25995 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:09:24.362 [DEBUG] [Thread-25996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:09:34.315 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:09:34.316 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:09:37.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:09:37.262 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:09:37.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-11-13T01:09:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 9, 19), 9.85, 51.84, 0.0, 18.72, 15.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:09:37.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:09:19
2025-11-13T01:09:38.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:09:38.185 [DEBUG] [Thread-25997] [transport.py] [_log()] starting thread (client mode): 0x11f03df0
2025-11-13T01:09:38.185 [DEBUG] [Thread-25997] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:09:38.206 [DEBUG] [Thread-25997] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:09:38.206 [INFO] [Thread-25997] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] client lang: <none>
2025-11-13T01:09:38.208 [DEBUG] [Thread-25997] [transport.py] [_log()] server lang: <none>
2025-11-13T01:09:38.209 [DEBUG] [Thread-25997] [transport.py] [_log()] kex follows: False
2025-11-13T01:09:38.209 [DEBUG] [Thread-25997] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:09:38.209 [DEBUG] [Thread-25997] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:09:38.209 [DEBUG] [Thread-25997] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:09:38.209 [DEBUG] [Thread-25997] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:09:38.209 [DEBUG] [Thread-25997] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:09:38.209 [DEBUG] [Thread-25997] [transport.py] [_log()] Compression: none
2025-11-13T01:09:38.209 [DEBUG] [Thread-25997] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:09:38.224 [DEBUG] [Thread-25997] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:09:38.225 [DEBUG] [Thread-25997] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:09:38.226 [DEBUG] [Thread-25997] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:09:38.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:09:38.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:09:38.228 [DEBUG] [Thread-25997] [transport.py] [_log()] userauth is OK
2025-11-13T01:09:38.228 [DEBUG] [Thread-25997] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:09:38.228 [DEBUG] [Thread-25997] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:09:38.228 [DEBUG] [Thread-25997] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:09:38.229 [DEBUG] [Thread-25997] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:09:38.254 [INFO] [Thread-25997] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:09:38.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:09:38.895 [DEBUG] [Thread-25997] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:09:38.895 [DEBUG] [Thread-25997] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:09:38.895 [DEBUG] [Thread-25997] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:09:38.936 [DEBUG] [Thread-25997] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:09:38.936 [DEBUG] [Thread-25997] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:09:38.939 [DEBUG] [Thread-25997] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:09:38.951 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:09:38.951 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:09:38.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:09:38.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:09:38.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:09:38.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:09:38.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:09:38.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:09:38.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:09:38.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.964675 -999.00  +15.30  11.40     57   +6.90 1 1 1 1 1     0    0 9.65 60.42 ZNESW 15.1 11.4 279.2 14.3 15.7 -23.9 15.6 -22.9 15.3 -22.5 15.6 -23.2
2025-11-13T01:09:38.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:09:38.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:09:38.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.964675
2025-11-13T01:09:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:09:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:09:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:09:38.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:09:38.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:09:38.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:09:19', tmtdew=9.85, humidity=51.84, cloud=0.0, wind=18.72, temperature=15.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:09:19', seeing=1.27, atlas_timestamp='2025-11-12T23:09:07.920', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:07:00')
2025-11-13T01:09:38.965 [DEBUG] [Thread-25997] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:09:39.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:09:39.060 [DEBUG] [Thread-26000] [transport.py] [_log()] starting thread (client mode): 0x17347850
2025-11-13T01:09:39.060 [DEBUG] [Thread-26000] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:09:39.074 [DEBUG] [Thread-26000] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:09:39.075 [INFO] [Thread-26000] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:09:39.082 [DEBUG] [Thread-26000] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:09:39.082 [DEBUG] [Thread-26000] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] client lang: <none>
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] server lang: <none>
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] kex follows: False
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:09:39.083 [DEBUG] [Thread-26000] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:09:39.084 [DEBUG] [Thread-26000] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:09:39.084 [DEBUG] [Thread-26000] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:09:39.084 [DEBUG] [Thread-26000] [transport.py] [_log()] Compression: none
2025-11-13T01:09:39.084 [DEBUG] [Thread-26000] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:09:39.141 [DEBUG] [Thread-26000] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:09:39.142 [DEBUG] [Thread-26000] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:09:39.142 [DEBUG] [Thread-26000] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:09:39.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:09:39.143 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:09:39.200 [DEBUG] [Thread-26000] [transport.py] [_log()] userauth is OK
2025-11-13T01:09:39.200 [DEBUG] [Thread-26000] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:09:39.201 [DEBUG] [Thread-26000] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:09:39.201 [DEBUG] [Thread-26000] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:09:39.201 [DEBUG] [Thread-26000] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:09:39.219 [INFO] [Thread-26000] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:09:39.220 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:09:39.220 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:09:39.398 [DEBUG] [Thread-26002 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:09:40.033 [DEBUG] [Thread-26000] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:09:40.033 [DEBUG] [Thread-26000] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:09:40.080 [DEBUG] [Thread-26000] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:09:40.080 [DEBUG] [Thread-26000] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:09:40.089 [DEBUG] [Thread-26000] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:09:40.098 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:09:40.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-11-13T01:09:40.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-11-13T01:09:40.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:09:40.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:09:40.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:09:40.124 [DEBUG] [Thread-26000] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:09:54.448 [DEBUG] [Thread-26003 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:10:08.949 [DEBUG] [Thread-26004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:10:09.481 [DEBUG] [Thread-26005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:10:10.146 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:10:10.147 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:10:10.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-11-13T01:10:10.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 9, 51), 9.71, 52.15, 0.0, 19.8, 15.4, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:10:10.797 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:09:51
2025-11-13T01:10:10.920 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:10:11.067 [DEBUG] [Thread-26006] [transport.py] [_log()] starting thread (client mode): 0x1493ed70
2025-11-13T01:10:11.067 [DEBUG] [Thread-26006] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:10:11.099 [DEBUG] [Thread-26006] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:10:11.100 [INFO] [Thread-26006] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] client lang: <none>
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] server lang: <none>
2025-11-13T01:10:11.103 [DEBUG] [Thread-26006] [transport.py] [_log()] kex follows: False
2025-11-13T01:10:11.104 [DEBUG] [Thread-26006] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:10:11.104 [DEBUG] [Thread-26006] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:10:11.104 [DEBUG] [Thread-26006] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:10:11.104 [DEBUG] [Thread-26006] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:10:11.104 [DEBUG] [Thread-26006] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:10:11.104 [DEBUG] [Thread-26006] [transport.py] [_log()] Compression: none
2025-11-13T01:10:11.104 [DEBUG] [Thread-26006] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:10:11.116 [DEBUG] [Thread-26006] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:10:11.116 [DEBUG] [Thread-26006] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:10:11.117 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:10:11.117 [DEBUG] [Thread-26006] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:10:11.118 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:10:11.119 [DEBUG] [Thread-26006] [transport.py] [_log()] userauth is OK
2025-11-13T01:10:11.119 [DEBUG] [Thread-26006] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:10:11.119 [DEBUG] [Thread-26006] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:10:11.120 [DEBUG] [Thread-26006] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:10:11.120 [DEBUG] [Thread-26006] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:10:11.144 [INFO] [Thread-26006] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:10:11.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:10:13.589 [DEBUG] [Thread-26006] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:10:13.589 [DEBUG] [Thread-26006] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:10:13.590 [DEBUG] [Thread-26006] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:10:13.631 [DEBUG] [Thread-26006] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:10:13.631 [DEBUG] [Thread-26006] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:10:13.634 [DEBUG] [Thread-26006] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:10:13.646 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:10:13.647 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:10:13.649 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:10:13.651 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:10:13.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:10:13.661 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:10:13.661 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:10:13.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:10:13.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:10:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.965022 -999.00  +15.30  13.56     57   +6.90 1 1 1 1 1     0    0 9.70 58.73 ZNESW 13.6 13.6 283.6 19.2 15.7 -23.8 15.6 -22.7 15.3 -22.5 15.6 -23.2
2025-11-13T01:10:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:10:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:10:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.965022
2025-11-13T01:10:13.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:10:13.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:10:13.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:10:13.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:10:13.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:10:13.663 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:09:51', tmtdew=9.71, humidity=52.15, cloud=0.0, wind=19.8, temperature=15.4, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:09:51', seeing=1.08, atlas_timestamp='2025-11-12T23:09:37.901', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:07:00')
2025-11-13T01:10:13.664 [DEBUG] [Thread-26006] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:10:13.747 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:10:13.759 [DEBUG] [Thread-26009] [transport.py] [_log()] starting thread (client mode): 0x1493e260
2025-11-13T01:10:13.760 [DEBUG] [Thread-26009] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:10:13.775 [DEBUG] [Thread-26009] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:10:13.775 [INFO] [Thread-26009] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] client lang: <none>
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] server lang: <none>
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] kex follows: False
2025-11-13T01:10:13.783 [DEBUG] [Thread-26009] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:10:13.784 [DEBUG] [Thread-26009] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:10:13.784 [DEBUG] [Thread-26009] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:10:13.784 [DEBUG] [Thread-26009] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:10:13.784 [DEBUG] [Thread-26009] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:10:13.784 [DEBUG] [Thread-26009] [transport.py] [_log()] Compression: none
2025-11-13T01:10:13.784 [DEBUG] [Thread-26009] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:10:13.840 [DEBUG] [Thread-26009] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:10:13.840 [DEBUG] [Thread-26009] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:10:13.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:10:13.841 [DEBUG] [Thread-26009] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:10:13.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:10:13.896 [DEBUG] [Thread-26009] [transport.py] [_log()] userauth is OK
2025-11-13T01:10:13.896 [DEBUG] [Thread-26009] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:10:13.896 [DEBUG] [Thread-26009] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:10:13.896 [DEBUG] [Thread-26009] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:10:13.896 [DEBUG] [Thread-26009] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:10:13.916 [INFO] [Thread-26009] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:10:13.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:10:13.917 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:10:14.829 [DEBUG] [Thread-26009] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:10:14.829 [DEBUG] [Thread-26009] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:10:14.877 [DEBUG] [Thread-26009] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:10:14.877 [DEBUG] [Thread-26009] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:10:14.886 [DEBUG] [Thread-26009] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:10:14.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:10:14.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-11-13T01:10:14.904 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:10:14.914 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:10:14.914 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:10:14.915 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:10:14.923 [DEBUG] [Thread-26009] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:10:24.520 [DEBUG] [Thread-26011 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:10:34.518 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:10:34.518 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:10:39.562 [DEBUG] [Thread-26012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:10:44.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:10:44.945 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:10:44.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-11-13T01:10:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 10, 23), 9.8, 51.84, 0.0, 19.22, 15.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:10:45.580 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:10:23
2025-11-13T01:10:45.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:10:45.848 [DEBUG] [Thread-26013] [transport.py] [_log()] starting thread (client mode): 0x11f03190
2025-11-13T01:10:45.849 [DEBUG] [Thread-26013] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:10:45.869 [DEBUG] [Thread-26013] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:10:45.869 [INFO] [Thread-26013] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:10:45.872 [DEBUG] [Thread-26013] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] client lang: <none>
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] server lang: <none>
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] kex follows: False
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] Compression: none
2025-11-13T01:10:45.873 [DEBUG] [Thread-26013] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:10:45.892 [DEBUG] [Thread-26013] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:10:45.892 [DEBUG] [Thread-26013] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:10:45.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:10:45.893 [DEBUG] [Thread-26013] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:10:45.894 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:10:45.895 [DEBUG] [Thread-26013] [transport.py] [_log()] userauth is OK
2025-11-13T01:10:45.895 [DEBUG] [Thread-26013] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:10:45.895 [DEBUG] [Thread-26013] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:10:45.895 [DEBUG] [Thread-26013] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:10:45.895 [DEBUG] [Thread-26013] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:10:45.927 [INFO] [Thread-26013] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:10:45.928 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:10:46.579 [DEBUG] [Thread-26013] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:10:46.579 [DEBUG] [Thread-26013] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:10:46.579 [DEBUG] [Thread-26013] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:10:46.620 [DEBUG] [Thread-26013] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:10:46.620 [DEBUG] [Thread-26013] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:10:46.623 [DEBUG] [Thread-26013] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:10:46.635 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:10:46.636 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:10:46.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:10:46.640 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:10:46.646 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:10:46.648 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:10:46.649 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:10:46.649 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:10:46.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:10:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.965369 -999.00  +15.30  15.29     56   +6.60 1 1 1 1 1     0    0 9.78 58.47 ZNESW 13.6 15.3 287.4 18.7 15.6 -23.8 15.5 -22.7 15.3 -22.2 15.6 -23.2
2025-11-13T01:10:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:10:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:10:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.965369
2025-11-13T01:10:46.650 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:10:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:10:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:10:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:10:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:10:46.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:10:23', tmtdew=9.8, humidity=51.84, cloud=0.0, wind=19.22, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:10:23', seeing=1.08, atlas_timestamp='2025-11-12T23:10:07.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:07:00')
2025-11-13T01:10:46.652 [DEBUG] [Thread-26013] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:10:46.732 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:10:46.746 [DEBUG] [Thread-26016] [transport.py] [_log()] starting thread (client mode): 0x14983850
2025-11-13T01:10:46.746 [DEBUG] [Thread-26016] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:10:46.763 [DEBUG] [Thread-26016] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:10:46.763 [INFO] [Thread-26016] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:10:46.770 [DEBUG] [Thread-26016] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] client lang: <none>
2025-11-13T01:10:46.771 [DEBUG] [Thread-26016] [transport.py] [_log()] server lang: <none>
2025-11-13T01:10:46.772 [DEBUG] [Thread-26016] [transport.py] [_log()] kex follows: False
2025-11-13T01:10:46.772 [DEBUG] [Thread-26016] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:10:46.772 [DEBUG] [Thread-26016] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:10:46.772 [DEBUG] [Thread-26016] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:10:46.772 [DEBUG] [Thread-26016] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:10:46.772 [DEBUG] [Thread-26016] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:10:46.772 [DEBUG] [Thread-26016] [transport.py] [_log()] Compression: none
2025-11-13T01:10:46.772 [DEBUG] [Thread-26016] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:10:46.830 [DEBUG] [Thread-26016] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:10:46.831 [DEBUG] [Thread-26016] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:10:46.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:10:46.832 [DEBUG] [Thread-26016] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:10:46.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:10:46.889 [DEBUG] [Thread-26016] [transport.py] [_log()] userauth is OK
2025-11-13T01:10:46.889 [DEBUG] [Thread-26016] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:10:46.889 [DEBUG] [Thread-26016] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:10:46.889 [DEBUG] [Thread-26016] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:10:46.889 [DEBUG] [Thread-26016] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:10:46.910 [INFO] [Thread-26016] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:10:46.910 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:10:46.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:10:47.766 [DEBUG] [Thread-26016] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:10:47.767 [DEBUG] [Thread-26016] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:10:47.814 [DEBUG] [Thread-26016] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:10:47.815 [DEBUG] [Thread-26016] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:10:47.823 [DEBUG] [Thread-26016] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:10:47.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:10:47.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-11-13T01:10:47.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-11-13T01:10:47.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:10:47.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:10:47.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:10:47.861 [DEBUG] [Thread-26016] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:10:54.599 [DEBUG] [Thread-26018 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:11:09.005 [DEBUG] [Thread-26019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:11:09.650 [DEBUG] [Thread-26020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:11:17.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:11:17.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:11:17.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-11-13T01:11:18.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 10, 55), 10.0, 51.32, 0.0, 18.0, 15.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:11:18.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:10:55
2025-11-13T01:11:18.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:11:18.798 [DEBUG] [Thread-26021] [transport.py] [_log()] starting thread (client mode): 0x1493ff70
2025-11-13T01:11:18.798 [DEBUG] [Thread-26021] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:11:18.819 [DEBUG] [Thread-26021] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:11:18.819 [INFO] [Thread-26021] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] client lang: <none>
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] server lang: <none>
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] kex follows: False
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] Compression: none
2025-11-13T01:11:18.822 [DEBUG] [Thread-26021] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:11:18.839 [DEBUG] [Thread-26021] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:11:18.840 [DEBUG] [Thread-26021] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:11:18.841 [DEBUG] [Thread-26021] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:11:18.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:11:18.841 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:11:18.843 [DEBUG] [Thread-26021] [transport.py] [_log()] userauth is OK
2025-11-13T01:11:18.843 [DEBUG] [Thread-26021] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:11:18.843 [DEBUG] [Thread-26021] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:11:18.843 [DEBUG] [Thread-26021] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:11:18.843 [DEBUG] [Thread-26021] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:11:18.868 [INFO] [Thread-26021] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:11:18.869 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:11:19.499 [DEBUG] [Thread-26021] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:11:19.499 [DEBUG] [Thread-26021] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:11:19.499 [DEBUG] [Thread-26021] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:11:19.540 [DEBUG] [Thread-26021] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:11:19.540 [DEBUG] [Thread-26021] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:11:19.544 [DEBUG] [Thread-26021] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:11:19.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:11:19.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:11:19.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:11:19.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:11:19.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:11:19.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:11:19.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:11:19.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:11:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:11:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.965717 -999.00  +15.30  13.42     55   +6.50 1 1 1 1 1     0    0 9.78 58.92 ZNESW 13.0 13.4 265.6 23.3 15.7 -23.9 15.5 -22.9 15.2 -22.5 15.6 -23.1
2025-11-13T01:11:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:11:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:11:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.965717
2025-11-13T01:11:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:11:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:11:19.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:11:19.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:11:19.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:11:19.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:10:55', tmtdew=10.0, humidity=51.32, cloud=0.0, wind=18.0, temperature=15.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:10:55', seeing=0.98, atlas_timestamp='2025-11-12T23:10:37.949', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:07:00')
2025-11-13T01:11:19.573 [DEBUG] [Thread-26021] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:11:19.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:11:19.667 [DEBUG] [Thread-26024] [transport.py] [_log()] starting thread (client mode): 0x1493c5b0
2025-11-13T01:11:19.667 [DEBUG] [Thread-26024] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:11:19.681 [DEBUG] [Thread-26024] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:11:19.682 [INFO] [Thread-26024] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:11:19.688 [DEBUG] [Thread-26024] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] client lang: <none>
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] server lang: <none>
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] kex follows: False
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] Compression: none
2025-11-13T01:11:19.689 [DEBUG] [Thread-26024] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:11:19.748 [DEBUG] [Thread-26024] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:11:19.748 [DEBUG] [Thread-26024] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:11:19.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:11:19.749 [DEBUG] [Thread-26024] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:11:19.750 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:11:19.804 [DEBUG] [Thread-26024] [transport.py] [_log()] userauth is OK
2025-11-13T01:11:19.804 [DEBUG] [Thread-26024] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:11:19.804 [DEBUG] [Thread-26024] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:11:19.804 [DEBUG] [Thread-26024] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:11:19.805 [DEBUG] [Thread-26024] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:11:19.823 [INFO] [Thread-26024] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:11:19.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:11:19.824 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:11:20.656 [DEBUG] [Thread-26024] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:11:20.656 [DEBUG] [Thread-26024] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:11:20.703 [DEBUG] [Thread-26024] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:11:20.704 [DEBUG] [Thread-26024] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:11:20.712 [DEBUG] [Thread-26024] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:11:20.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:11:20.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-11-13T01:11:20.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:11:20.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:11:20.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:11:20.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:11:20.752 [DEBUG] [Thread-26024] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:11:24.687 [DEBUG] [Thread-26026 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:11:34.722 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:11:34.724 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:11:39.735 [DEBUG] [Thread-26027 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:11:50.753 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:11:50.753 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:11:50.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-11-13T01:11:51.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 11, 27), 10.0, 51.31, 0.0, 18.37, 15.35, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:11:51.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:11:27
2025-11-13T01:11:51.540 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:11:51.689 [DEBUG] [Thread-26028] [transport.py] [_log()] starting thread (client mode): 0x173474c0
2025-11-13T01:11:51.690 [DEBUG] [Thread-26028] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:11:51.709 [DEBUG] [Thread-26028] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:11:51.710 [INFO] [Thread-26028] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:11:51.711 [DEBUG] [Thread-26028] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:11:51.711 [DEBUG] [Thread-26028] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:11:51.711 [DEBUG] [Thread-26028] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:11:51.711 [DEBUG] [Thread-26028] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:11:51.711 [DEBUG] [Thread-26028] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:11:51.711 [DEBUG] [Thread-26028] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:11:51.711 [DEBUG] [Thread-26028] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] client lang: <none>
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] server lang: <none>
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] kex follows: False
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] Compression: none
2025-11-13T01:11:51.712 [DEBUG] [Thread-26028] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:11:51.719 [DEBUG] [Thread-26028] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:11:51.719 [DEBUG] [Thread-26028] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:11:51.720 [DEBUG] [Thread-26028] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:11:51.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:11:51.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:11:51.720 [DEBUG] [Thread-26028] [transport.py] [_log()] userauth is OK
2025-11-13T01:11:51.720 [DEBUG] [Thread-26028] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:11:51.720 [DEBUG] [Thread-26028] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:11:51.720 [DEBUG] [Thread-26028] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:11:51.720 [DEBUG] [Thread-26028] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:11:51.735 [INFO] [Thread-26028] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:11:51.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:11:52.360 [DEBUG] [Thread-26028] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:11:52.360 [DEBUG] [Thread-26028] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:11:52.360 [DEBUG] [Thread-26028] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:11:52.401 [DEBUG] [Thread-26028] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:11:52.401 [DEBUG] [Thread-26028] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:11:52.404 [DEBUG] [Thread-26028] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:11:52.415 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:11:52.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:11:52.416 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:11:52.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:11:52.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:11:52.421 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:11:52.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.966064 -999.00  +15.30  14.01     55   +6.50 1 1 1 1 1     0    0 9.69 57.80 ZNESW 10.8 14.0 269.4 16.1 15.7 -23.8 15.5 -22.8 15.3 -22.7 15.6 -23.4
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.966064
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:11:52.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:11:27', tmtdew=10.0, humidity=51.31, cloud=0.0, wind=18.37, temperature=15.35, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:11:27', seeing=1.11, atlas_timestamp='2025-11-12T23:11:07.930', atlas_cloud=1, atlas_rain=1, zp_data=[0.020749999999999602, 0.0032500000000013074, 0.03225000000000122, 0.0625, 0.06750000000000078, 0.06875000000000142, 0.023999999999999133, -0.029749999999999943, -0.013500000000000512, 0.051000000000000156, 0.08074999999999832, 0.0365000000000002, 0.11500000000000021, 0.04025000000000034, 0.04099999999999859, 0.012999999999998124, 0.010249999999999204, 0.08549999999999969, 0.14400000000000013, 0.1092499999999994, 0.0779999999999994, 0.11074999999999946, 0.19125000000000014, 0.07774999999999999, 0.014499999999999957, 0.07850000000000001, 0.18625000000000114, 0.15300000000000047, 0.15300000000000047, 0.15850000000000009, 0.17950000000000088, 0.15050000000000097, 0.1117499999999989], zp_timestamp='2025-11-12T23:07:00')
2025-11-13T01:11:52.422 [DEBUG] [Thread-26028] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:11:52.496 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:11:52.509 [DEBUG] [Thread-26031] [transport.py] [_log()] starting thread (client mode): 0x17345d80
2025-11-13T01:11:52.509 [DEBUG] [Thread-26031] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:11:52.525 [DEBUG] [Thread-26031] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:11:52.525 [INFO] [Thread-26031] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] client lang: <none>
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] server lang: <none>
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] kex follows: False
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] Compression: none
2025-11-13T01:11:52.533 [DEBUG] [Thread-26031] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:11:52.590 [DEBUG] [Thread-26031] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:11:52.590 [DEBUG] [Thread-26031] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:11:52.590 [DEBUG] [Thread-26031] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:11:52.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:11:52.591 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:11:52.647 [DEBUG] [Thread-26031] [transport.py] [_log()] userauth is OK
2025-11-13T01:11:52.647 [DEBUG] [Thread-26031] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:11:52.647 [DEBUG] [Thread-26031] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:11:52.647 [DEBUG] [Thread-26031] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:11:52.647 [DEBUG] [Thread-26031] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:11:52.662 [INFO] [Thread-26031] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:11:52.662 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:11:52.662 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:11:53.513 [DEBUG] [Thread-26031] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:11:53.513 [DEBUG] [Thread-26031] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:11:53.561 [DEBUG] [Thread-26031] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:11:53.561 [DEBUG] [Thread-26031] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:11:53.569 [DEBUG] [Thread-26031] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:11:53.577 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:11:53.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-11-13T01:11:53.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-11-13T01:11:53.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:11:53.593 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:11:53.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:11:53.601 [DEBUG] [Thread-26031] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:11:54.767 [DEBUG] [Thread-26033 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:12:09.060 [DEBUG] [Thread-26034 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:12:09.807 [DEBUG] [Thread-26035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:12:23.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:12:23.614 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:12:23.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-11-13T01:12:24.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 11, 59), 10.09, 50.84, 0.0, 20.08, 15.32, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:12:24.253 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:11:59
2025-11-13T01:12:24.376 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:12:24.521 [DEBUG] [Thread-26036] [transport.py] [_log()] starting thread (client mode): 0x1493de70
2025-11-13T01:12:24.522 [DEBUG] [Thread-26036] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:12:24.542 [DEBUG] [Thread-26036] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:12:24.543 [INFO] [Thread-26036] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:12:24.546 [DEBUG] [Thread-26036] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:12:24.546 [DEBUG] [Thread-26036] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:12:24.546 [DEBUG] [Thread-26036] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:12:24.546 [DEBUG] [Thread-26036] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:12:24.546 [DEBUG] [Thread-26036] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:12:24.546 [DEBUG] [Thread-26036] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:12:24.546 [DEBUG] [Thread-26036] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:12:24.546 [DEBUG] [Thread-26036] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] client lang: <none>
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] server lang: <none>
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] kex follows: False
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] Compression: none
2025-11-13T01:12:24.547 [DEBUG] [Thread-26036] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:12:24.566 [DEBUG] [Thread-26036] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:12:24.567 [DEBUG] [Thread-26036] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:12:24.568 [DEBUG] [Thread-26036] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:12:24.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:12:24.568 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:12:24.570 [DEBUG] [Thread-26036] [transport.py] [_log()] userauth is OK
2025-11-13T01:12:24.570 [DEBUG] [Thread-26036] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:12:24.570 [DEBUG] [Thread-26036] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:12:24.570 [DEBUG] [Thread-26036] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:12:24.571 [DEBUG] [Thread-26036] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:12:24.611 [INFO] [Thread-26036] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:12:24.612 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:12:24.845 [DEBUG] [Thread-26038 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:12:25.244 [DEBUG] [Thread-26036] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:12:25.244 [DEBUG] [Thread-26036] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:12:25.245 [DEBUG] [Thread-26036] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:12:25.286 [DEBUG] [Thread-26036] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:12:25.286 [DEBUG] [Thread-26036] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:12:25.289 [DEBUG] [Thread-26036] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:12:25.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:12:25.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:12:25.305 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:12:25.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:12:25.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:12:25.314 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:12:25.314 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:12:25.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:12:25.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:12:25.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.966758 -999.00  +15.30   9.91     55   +6.40 1 1 1 1 1     0    0 10.10 62.71 ZNESW 8.6 9.9 280.6 18.2 15.6 -23.9 15.5 -22.9 15.3 -22.5 15.6 -23.2
2025-11-13T01:12:25.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:12:25.315 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:12:25.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.966758
2025-11-13T01:12:25.316 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:12:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:12:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:12:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:12:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:12:25.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:11:59', tmtdew=10.09, humidity=50.84, cloud=0.0, wind=20.08, temperature=15.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:11:59', seeing=1.11, atlas_timestamp='2025-11-12T23:12:07.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.030750000000001165, 0.04225000000000101, 0.05749999999999922, 0.05450000000000088, 0.11125000000000185, 0.027999999999998693, 0.011750000000001037, -0.0015000000000000568, 0.041999999999999815, 0.11125000000000007, 0.03500000000000014, 0.125, 0.08225000000000016, 0.045499999999998764, -0.009000000000000341, 0.023749999999999716, 0.06649999999999956, 0.09999999999999964, 0.07574999999999932, 0.0799999999999983, 0.1247499999999988, 0.10725000000000051, 0.11875000000000036, 0.01899999999999835, 0.10449999999999982, 0.12074999999999925, 0.198500000000001, 0.1609999999999996, 0.13950000000000173, 0.1255000000000024, 0.12100000000000222, 0.08874999999999922], zp_timestamp='2025-11-12T23:11:00')
2025-11-13T01:12:25.317 [DEBUG] [Thread-26036] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:12:25.408 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:12:25.419 [DEBUG] [Thread-26040] [transport.py] [_log()] starting thread (client mode): 0x14944130
2025-11-13T01:12:25.420 [DEBUG] [Thread-26040] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:12:25.434 [DEBUG] [Thread-26040] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:12:25.434 [INFO] [Thread-26040] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:12:25.442 [DEBUG] [Thread-26040] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:12:25.442 [DEBUG] [Thread-26040] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:12:25.442 [DEBUG] [Thread-26040] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:12:25.442 [DEBUG] [Thread-26040] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] client lang: <none>
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] server lang: <none>
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] kex follows: False
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:12:25.443 [DEBUG] [Thread-26040] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:12:25.444 [DEBUG] [Thread-26040] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:12:25.444 [DEBUG] [Thread-26040] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:12:25.444 [DEBUG] [Thread-26040] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:12:25.444 [DEBUG] [Thread-26040] [transport.py] [_log()] Compression: none
2025-11-13T01:12:25.444 [DEBUG] [Thread-26040] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:12:25.504 [DEBUG] [Thread-26040] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:12:25.504 [DEBUG] [Thread-26040] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:12:25.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:12:25.505 [DEBUG] [Thread-26040] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:12:25.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:12:25.560 [DEBUG] [Thread-26040] [transport.py] [_log()] userauth is OK
2025-11-13T01:12:25.560 [DEBUG] [Thread-26040] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:12:25.560 [DEBUG] [Thread-26040] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:12:25.560 [DEBUG] [Thread-26040] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:12:25.560 [DEBUG] [Thread-26040] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:12:25.585 [INFO] [Thread-26040] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:12:25.585 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:12:25.586 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:12:26.415 [DEBUG] [Thread-26040] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:12:26.416 [DEBUG] [Thread-26040] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:12:26.463 [DEBUG] [Thread-26040] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:12:26.464 [DEBUG] [Thread-26040] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:12:26.473 [DEBUG] [Thread-26040] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:12:26.482 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:12: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')
2025-11-13T01:12:26.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-11-13T01:12:26.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:12:26.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:12:26.502 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:12:26.510 [DEBUG] [Thread-26040] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:12:34.927 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:12:34.928 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:12:39.877 [DEBUG] [Thread-26042 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:12:54.942 [DEBUG] [Thread-26043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:12:56.531 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:12:56.532 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:12:56.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:12:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 12, 31), 10.24, 50.31, 0.0, 19.57, 15.33, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:12:57.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:12:31
2025-11-13T01:12:57.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:12:57.455 [DEBUG] [Thread-26044] [transport.py] [_log()] starting thread (client mode): 0x1737d6f0
2025-11-13T01:12:57.455 [DEBUG] [Thread-26044] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:12:57.475 [DEBUG] [Thread-26044] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:12:57.475 [INFO] [Thread-26044] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:12:57.478 [DEBUG] [Thread-26044] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:12:57.478 [DEBUG] [Thread-26044] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] client lang: <none>
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] server lang: <none>
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] kex follows: False
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] Compression: none
2025-11-13T01:12:57.479 [DEBUG] [Thread-26044] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:12:57.492 [DEBUG] [Thread-26044] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:12:57.492 [DEBUG] [Thread-26044] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:12:57.492 [DEBUG] [Thread-26044] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:12:57.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:12:57.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:12:57.537 [DEBUG] [Thread-26044] [transport.py] [_log()] userauth is OK
2025-11-13T01:12:57.537 [DEBUG] [Thread-26044] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:12:57.537 [DEBUG] [Thread-26044] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:12:57.537 [DEBUG] [Thread-26044] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:12:57.537 [DEBUG] [Thread-26044] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:12:57.557 [INFO] [Thread-26044] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:12:57.557 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:12:58.165 [DEBUG] [Thread-26044] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:12:58.165 [DEBUG] [Thread-26044] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:12:58.165 [DEBUG] [Thread-26044] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:12:58.206 [DEBUG] [Thread-26044] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:12:58.207 [DEBUG] [Thread-26044] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:12:58.209 [DEBUG] [Thread-26044] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:12:58.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:12:58.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:12:58.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:12:58.224 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:12:58.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:12:58.231 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:12:58.231 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:12:58.231 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:12:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:12:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.967105 -999.00  +15.20   9.91     55   +6.40 1 1 1 1 1     0    0 9.95 61.62 ZNESW 9.3 9.9 272.6 14.1 15.6 -24.0 15.5 -22.9 15.2 -22.5 15.6 -23.2
2025-11-13T01:12:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:12:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:12:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.967105
2025-11-13T01:12:58.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:12:58.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:12:58.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:12:58.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:12:58.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:12:58.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:12:31', tmtdew=10.24, humidity=50.31, cloud=0.0, wind=19.57, temperature=15.33, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:12:31', seeing=0.98, atlas_timestamp='2025-11-12T23:12:37.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.030750000000001165, 0.04225000000000101, 0.05749999999999922, 0.05450000000000088, 0.11125000000000185, 0.027999999999998693, 0.011750000000001037, -0.0015000000000000568, 0.041999999999999815, 0.11125000000000007, 0.03500000000000014, 0.125, 0.08225000000000016, 0.045499999999998764, -0.009000000000000341, 0.023749999999999716, 0.06649999999999956, 0.09999999999999964, 0.07574999999999932, 0.0799999999999983, 0.1247499999999988, 0.10725000000000051, 0.11875000000000036, 0.01899999999999835, 0.10449999999999982, 0.12074999999999925, 0.198500000000001, 0.1609999999999996, 0.13950000000000173, 0.1255000000000024, 0.12100000000000222, 0.08874999999999922], zp_timestamp='2025-11-12T23:11:00')
2025-11-13T01:12:58.234 [DEBUG] [Thread-26044] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:12:58.317 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:13:09.112 [DEBUG] [Thread-26047 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:13:09.973 [DEBUG] [Thread-26048 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:13:25.013 [DEBUG] [Thread-26049 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:13:35.132 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:13:35.133 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:13:40.049 [DEBUG] [Thread-26050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:13:55.082 [DEBUG] [Thread-26051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:14:09.163 [DEBUG] [Thread-26052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:14:10.123 [DEBUG] [Thread-26053 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:14:25.164 [DEBUG] [Thread-26054 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:14:35.336 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:14:35.337 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:14:40.193 [DEBUG] [Thread-26055 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:14:55.226 [DEBUG] [Thread-26056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:15:09.215 [DEBUG] [Thread-26057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:15:10.256 [DEBUG] [Thread-26058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:15:10.651 [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-11-13T01:15:25.288 [DEBUG] [Thread-26059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:15:35.540 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:15:35.541 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:15:40.324 [DEBUG] [Thread-26060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:15:40.666 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:15:40.667 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:15:40.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:15:41.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 15, 11), 10.0, 51.44, 0.0, 19.0, 15.22, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:15:41.329 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:15:11
2025-11-13T01:15:41.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:15:41.599 [DEBUG] [Thread-26061] [transport.py] [_log()] starting thread (client mode): 0x1737da20
2025-11-13T01:15:41.599 [DEBUG] [Thread-26061] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:15:41.622 [DEBUG] [Thread-26061] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:15:41.622 [INFO] [Thread-26061] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] client lang: <none>
2025-11-13T01:15:41.624 [DEBUG] [Thread-26061] [transport.py] [_log()] server lang: <none>
2025-11-13T01:15:41.625 [DEBUG] [Thread-26061] [transport.py] [_log()] kex follows: False
2025-11-13T01:15:41.625 [DEBUG] [Thread-26061] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:15:41.625 [DEBUG] [Thread-26061] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:15:41.625 [DEBUG] [Thread-26061] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:15:41.625 [DEBUG] [Thread-26061] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:15:41.625 [DEBUG] [Thread-26061] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:15:41.625 [DEBUG] [Thread-26061] [transport.py] [_log()] Compression: none
2025-11-13T01:15:41.625 [DEBUG] [Thread-26061] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:15:41.637 [DEBUG] [Thread-26061] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:15:41.637 [DEBUG] [Thread-26061] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:15:41.638 [DEBUG] [Thread-26061] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:15:41.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:15:41.638 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:15:41.639 [DEBUG] [Thread-26061] [transport.py] [_log()] userauth is OK
2025-11-13T01:15:41.639 [DEBUG] [Thread-26061] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:15:41.639 [DEBUG] [Thread-26061] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:15:41.639 [DEBUG] [Thread-26061] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:15:41.639 [DEBUG] [Thread-26061] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:15:41.652 [INFO] [Thread-26061] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:15:41.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:15:42.245 [DEBUG] [Thread-26061] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:15:42.246 [DEBUG] [Thread-26061] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:15:42.246 [DEBUG] [Thread-26061] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:15:42.286 [DEBUG] [Thread-26061] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:15:42.286 [DEBUG] [Thread-26061] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:15:42.288 [DEBUG] [Thread-26061] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:15:42.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:15:42.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:15:42.296 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:15:42.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:15:42.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:15:42.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:15:42.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:15:42.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:15:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:15:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.969189 -999.00  +15.10  10.05     57   +6.70 1 1 1 1 1     0    0 10.42 73.10 ZNESW 9.4 10.1 269.0 17.7 15.6 -23.8 15.5 -23.0 15.2 -22.4 15.5 -23.2
2025-11-13T01:15:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:15:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:15:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.969189
2025-11-13T01:15:42.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:15:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:15:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:15:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:15:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:15:42.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:15:11', tmtdew=10.0, humidity=51.44, cloud=0.0, wind=19.0, temperature=15.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:15:11', seeing=1.03, atlas_timestamp='2025-11-12T23:15:37.930', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.030750000000001165, 0.04225000000000101, 0.05749999999999922, 0.05450000000000088, 0.11125000000000185, 0.027999999999998693, 0.011750000000001037, -0.0015000000000000568, 0.041999999999999815, 0.11125000000000007, 0.03500000000000014, 0.125, 0.08225000000000016, 0.045499999999998764, -0.009000000000000341, 0.023749999999999716, 0.06649999999999956, 0.09999999999999964, 0.07574999999999932, 0.0799999999999983, 0.1247499999999988, 0.10725000000000051, 0.11875000000000036, 0.01899999999999835, 0.10449999999999982, 0.12074999999999925, 0.198500000000001, 0.1609999999999996, 0.13950000000000173, 0.1255000000000024, 0.12100000000000222, 0.08874999999999922], zp_timestamp='2025-11-12T23:13:00')
2025-11-13T01:15:42.305 [DEBUG] [Thread-26061] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:15:42.383 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:15:42.397 [DEBUG] [Thread-26064] [transport.py] [_log()] starting thread (client mode): 0x173468c0
2025-11-13T01:15:42.397 [DEBUG] [Thread-26064] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:15:42.411 [DEBUG] [Thread-26064] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:15:42.411 [INFO] [Thread-26064] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] client lang: <none>
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] server lang: <none>
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] kex follows: False
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:15:42.419 [DEBUG] [Thread-26064] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:15:42.420 [DEBUG] [Thread-26064] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:15:42.420 [DEBUG] [Thread-26064] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:15:42.420 [DEBUG] [Thread-26064] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:15:42.420 [DEBUG] [Thread-26064] [transport.py] [_log()] Compression: none
2025-11-13T01:15:42.420 [DEBUG] [Thread-26064] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:15:42.475 [DEBUG] [Thread-26064] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:15:42.476 [DEBUG] [Thread-26064] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:15:42.476 [DEBUG] [Thread-26064] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:15:42.476 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:15:42.477 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:15:42.531 [DEBUG] [Thread-26064] [transport.py] [_log()] userauth is OK
2025-11-13T01:15:42.532 [DEBUG] [Thread-26064] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:15:42.532 [DEBUG] [Thread-26064] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:15:42.532 [DEBUG] [Thread-26064] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:15:42.532 [DEBUG] [Thread-26064] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:15:42.550 [INFO] [Thread-26064] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:15:42.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:15:42.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:15:43.412 [DEBUG] [Thread-26064] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:15:43.413 [DEBUG] [Thread-26064] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:15:43.460 [DEBUG] [Thread-26064] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:15:43.460 [DEBUG] [Thread-26064] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:15:43.469 [DEBUG] [Thread-26064] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:15:43.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:15:43.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-11-13T01:15:43.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-11-13T01:15:43.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:15:43.494 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:15:43.495 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:15:43.502 [DEBUG] [Thread-26064] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:15:55.354 [DEBUG] [Thread-26066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:16:09.274 [DEBUG] [Thread-26067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:16:10.414 [DEBUG] [Thread-26068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:16:13.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:16:13.525 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:16: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-11-13T01:16:14.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 15, 43), 10.12, 51.06, 0.0, 17.86, 15.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:16:14.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:15:43
2025-11-13T01:16:14.291 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:16:14.439 [DEBUG] [Thread-26069] [transport.py] [_log()] starting thread (client mode): 0x173466b0
2025-11-13T01:16:14.439 [DEBUG] [Thread-26069] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:16:14.458 [DEBUG] [Thread-26069] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:16:14.458 [INFO] [Thread-26069] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:16:14.461 [DEBUG] [Thread-26069] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:16:14.461 [DEBUG] [Thread-26069] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:16:14.461 [DEBUG] [Thread-26069] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:16:14.461 [DEBUG] [Thread-26069] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:16:14.461 [DEBUG] [Thread-26069] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:16:14.461 [DEBUG] [Thread-26069] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:16:14.461 [DEBUG] [Thread-26069] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:16:14.461 [DEBUG] [Thread-26069] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] client lang: <none>
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] server lang: <none>
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] kex follows: False
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] Compression: none
2025-11-13T01:16:14.462 [DEBUG] [Thread-26069] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:16:14.481 [DEBUG] [Thread-26069] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:16:14.481 [DEBUG] [Thread-26069] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:16:14.482 [DEBUG] [Thread-26069] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:16:14.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:16:14.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:16:14.484 [DEBUG] [Thread-26069] [transport.py] [_log()] userauth is OK
2025-11-13T01:16:14.484 [DEBUG] [Thread-26069] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:16:14.484 [DEBUG] [Thread-26069] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:16:14.484 [DEBUG] [Thread-26069] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:16:14.484 [DEBUG] [Thread-26069] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:16:14.502 [INFO] [Thread-26069] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:16:14.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:16:15.327 [DEBUG] [Thread-26069] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:16:15.327 [DEBUG] [Thread-26069] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:16:15.328 [DEBUG] [Thread-26069] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:16:15.369 [DEBUG] [Thread-26069] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:16:15.369 [DEBUG] [Thread-26069] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:16:15.372 [DEBUG] [Thread-26069] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:16:15.385 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:16:15.386 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:16:15.387 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:16:15.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:16:15.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:16:15.396 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:16:15.396 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:16:15.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:16:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:16:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.969189 -999.00  +15.10  10.05     57   +6.70 1 1 1 1 1     0    0 10.42 73.10 ZNESW 9.4 10.1 269.0 17.7 15.6 -23.8 15.5 -23.0 15.2 -22.4 15.5 -23.2
2025-11-13T01:16:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:16:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:16:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.969189
2025-11-13T01:16:15.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:16:15.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:16:15.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:16:15.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:16:15.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:16:15.398 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:15:43', tmtdew=10.12, humidity=51.06, cloud=0.0, wind=17.86, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:15:43', seeing=1.03, atlas_timestamp='2025-11-12T23:15:37.930', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.030750000000001165, 0.04225000000000101, 0.05749999999999922, 0.05450000000000088, 0.11125000000000185, 0.027999999999998693, 0.011750000000001037, -0.0015000000000000568, 0.041999999999999815, 0.11125000000000007, 0.03500000000000014, 0.125, 0.08225000000000016, 0.045499999999998764, -0.009000000000000341, 0.023749999999999716, 0.06649999999999956, 0.09999999999999964, 0.07574999999999932, 0.0799999999999983, 0.1247499999999988, 0.10725000000000051, 0.11875000000000036, 0.01899999999999835, 0.10449999999999982, 0.12074999999999925, 0.198500000000001, 0.1609999999999996, 0.13950000000000173, 0.1255000000000024, 0.12100000000000222, 0.08874999999999922], zp_timestamp='2025-11-12T23:13:00')
2025-11-13T01:16:15.399 [DEBUG] [Thread-26069] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:16:15.483 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:16:15.493 [DEBUG] [Thread-26072] [transport.py] [_log()] starting thread (client mode): 0x11f026b0
2025-11-13T01:16:15.493 [DEBUG] [Thread-26072] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:16:15.508 [DEBUG] [Thread-26072] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:16:15.508 [INFO] [Thread-26072] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:16:15.516 [DEBUG] [Thread-26072] [transport.py] [_log()] client lang: <none>
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] server lang: <none>
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] kex follows: False
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] Compression: none
2025-11-13T01:16:15.517 [DEBUG] [Thread-26072] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:16:15.576 [DEBUG] [Thread-26072] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:16:15.576 [DEBUG] [Thread-26072] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:16:15.577 [DEBUG] [Thread-26072] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:16:15.577 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:16:15.578 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:16:15.632 [DEBUG] [Thread-26072] [transport.py] [_log()] userauth is OK
2025-11-13T01:16:15.632 [DEBUG] [Thread-26072] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:16:15.632 [DEBUG] [Thread-26072] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:16:15.632 [DEBUG] [Thread-26072] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:16:15.633 [DEBUG] [Thread-26072] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:16:15.652 [INFO] [Thread-26072] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:16:15.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:16:15.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:16:16.527 [DEBUG] [Thread-26072] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:16:16.527 [DEBUG] [Thread-26072] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:16:16.575 [DEBUG] [Thread-26072] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:16:16.575 [DEBUG] [Thread-26072] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:16:16.583 [DEBUG] [Thread-26072] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:16:16.591 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:16:16.591 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:16:16.599 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:16:16.607 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:16:16.607 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:16:16.607 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:16:16.615 [DEBUG] [Thread-26072] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:16:25.449 [DEBUG] [Thread-26074 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:16:35.742 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:16:35.743 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:16:40.487 [DEBUG] [Thread-26075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:16:46.637 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:16:46.638 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:16: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-11-13T01:16:47.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 16, 15), 10.07, 51.24, 0.0, 17.17, 15.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:16:47.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:16:15
2025-11-13T01:16:47.407 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:16:47.552 [DEBUG] [Thread-26076] [transport.py] [_log()] starting thread (client mode): 0x19dd93c0
2025-11-13T01:16:47.553 [DEBUG] [Thread-26076] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:16:47.571 [DEBUG] [Thread-26076] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:16:47.571 [INFO] [Thread-26076] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:16:47.574 [DEBUG] [Thread-26076] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:16:47.574 [DEBUG] [Thread-26076] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:16:47.574 [DEBUG] [Thread-26076] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] client lang: <none>
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] server lang: <none>
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] kex follows: False
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] Compression: none
2025-11-13T01:16:47.575 [DEBUG] [Thread-26076] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:16:47.583 [DEBUG] [Thread-26076] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:16:47.583 [DEBUG] [Thread-26076] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:16:47.583 [DEBUG] [Thread-26076] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:16:47.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:16:47.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:16:47.585 [DEBUG] [Thread-26076] [transport.py] [_log()] userauth is OK
2025-11-13T01:16:47.585 [DEBUG] [Thread-26076] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:16:47.585 [DEBUG] [Thread-26076] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:16:47.585 [DEBUG] [Thread-26076] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:16:47.585 [DEBUG] [Thread-26076] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:16:47.602 [INFO] [Thread-26076] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:16:47.603 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:16:48.217 [DEBUG] [Thread-26076] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:16:48.218 [DEBUG] [Thread-26076] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:16:48.218 [DEBUG] [Thread-26076] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:16:48.259 [DEBUG] [Thread-26076] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:16:48.259 [DEBUG] [Thread-26076] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:16:48.261 [DEBUG] [Thread-26076] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:16:48.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:16:48.274 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:16:48.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:16:48.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:16:48.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:16:48.279 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:16:48.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.969536 -999.00  +15.10  12.65     56   +6.60 1 1 1 1 1     0    0 10.59 78.90 ZNESW 13.3 12.7 276.6 19.6 15.6 -23.7 15.4 -22.8 15.2 -22.4 15.5 -23.2
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.969536
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:16:48.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:16:15', tmtdew=10.07, humidity=51.24, cloud=0.0, wind=17.17, temperature=15.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:16:15', seeing=1.06, atlas_timestamp='2025-11-12T23:16:07.910', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.030750000000001165, 0.04225000000000101, 0.05749999999999922, 0.05450000000000088, 0.11125000000000185, 0.027999999999998693, 0.011750000000001037, -0.0015000000000000568, 0.041999999999999815, 0.11125000000000007, 0.03500000000000014, 0.125, 0.08225000000000016, 0.045499999999998764, -0.009000000000000341, 0.023749999999999716, 0.06649999999999956, 0.09999999999999964, 0.07574999999999932, 0.0799999999999983, 0.1247499999999988, 0.10725000000000051, 0.11875000000000036, 0.01899999999999835, 0.10449999999999982, 0.12074999999999925, 0.198500000000001, 0.1609999999999996, 0.13950000000000173, 0.1255000000000024, 0.12100000000000222, 0.08874999999999922], zp_timestamp='2025-11-12T23:13:00')
2025-11-13T01:16:48.280 [DEBUG] [Thread-26076] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:16:48.354 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:16:48.365 [DEBUG] [Thread-26079] [transport.py] [_log()] starting thread (client mode): 0x1493dbd0
2025-11-13T01:16:48.365 [DEBUG] [Thread-26079] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:16:48.379 [DEBUG] [Thread-26079] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:16:48.379 [INFO] [Thread-26079] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] client lang: <none>
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] server lang: <none>
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] kex follows: False
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] Compression: none
2025-11-13T01:16:48.387 [DEBUG] [Thread-26079] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:16:48.441 [DEBUG] [Thread-26079] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:16:48.441 [DEBUG] [Thread-26079] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:16:48.442 [DEBUG] [Thread-26079] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:16:48.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:16:48.442 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:16:48.499 [DEBUG] [Thread-26079] [transport.py] [_log()] userauth is OK
2025-11-13T01:16:48.499 [DEBUG] [Thread-26079] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:16:48.500 [DEBUG] [Thread-26079] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:16:48.500 [DEBUG] [Thread-26079] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:16:48.500 [DEBUG] [Thread-26079] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:16:48.513 [INFO] [Thread-26079] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:16:48.513 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:16:48.513 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:16:49.296 [DEBUG] [Thread-26079] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:16:49.296 [DEBUG] [Thread-26079] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:16:49.344 [DEBUG] [Thread-26079] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:16:49.344 [DEBUG] [Thread-26079] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:16:49.352 [DEBUG] [Thread-26079] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:16:49.360 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:16:49.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-11-13T01:16:49.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-11-13T01:16:49.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:16:49.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:16:49.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:16:49.384 [DEBUG] [Thread-26079] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:16:55.523 [DEBUG] [Thread-26081 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:17:09.342 [DEBUG] [Thread-26082 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:17:10.571 [DEBUG] [Thread-26083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:17:19.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:17:19.404 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:17:19.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-11-13T01:17:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 16, 47), 9.98, 51.04, 0.0, 16.32, 15.18, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:17:20.091 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:16:47
2025-11-13T01:17:20.221 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:17:20.375 [DEBUG] [Thread-26084] [transport.py] [_log()] starting thread (client mode): 0x11f026b0
2025-11-13T01:17:20.375 [DEBUG] [Thread-26084] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:17:20.395 [DEBUG] [Thread-26084] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:17:20.395 [INFO] [Thread-26084] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:17:20.398 [DEBUG] [Thread-26084] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] client lang: <none>
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] server lang: <none>
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] kex follows: False
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] Compression: none
2025-11-13T01:17:20.399 [DEBUG] [Thread-26084] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:17:20.414 [DEBUG] [Thread-26084] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:17:20.414 [DEBUG] [Thread-26084] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:17:20.415 [DEBUG] [Thread-26084] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:17:20.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:17:20.415 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:17:20.456 [DEBUG] [Thread-26084] [transport.py] [_log()] userauth is OK
2025-11-13T01:17:20.456 [DEBUG] [Thread-26084] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:17:20.456 [DEBUG] [Thread-26084] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:17:20.456 [DEBUG] [Thread-26084] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:17:20.457 [DEBUG] [Thread-26084] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:17:20.473 [INFO] [Thread-26084] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:17:20.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:17:21.123 [DEBUG] [Thread-26084] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:17:21.123 [DEBUG] [Thread-26084] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:17:21.123 [DEBUG] [Thread-26084] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:17:21.164 [DEBUG] [Thread-26084] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:17:21.164 [DEBUG] [Thread-26084] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:17:21.166 [DEBUG] [Thread-26084] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:17:21.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:17:21.181 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:17:21.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:17:21.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:17:21.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:17:21.186 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:17:21.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:17:21.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:17:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:17:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.969883 -999.00  +15.10  10.86     55   +6.30 1 1 1 1 1     0    0 10.54 78.75 ZNESW 11.7 10.9 271.0 17.1 15.6 -23.8 15.5 -22.8 15.2 -22.1 15.4 -23.1
2025-11-13T01:17:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:17:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:17:21.186 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.969883
2025-11-13T01:17:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:17:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:17:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:17:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:17:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:17:21.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:16:47', tmtdew=9.98, humidity=51.04, cloud=0.0, wind=16.32, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:16:47', seeing=1.02, atlas_timestamp='2025-11-12T23:16:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.030750000000001165, 0.04225000000000101, 0.05749999999999922, 0.05450000000000088, 0.11125000000000185, 0.027999999999998693, 0.011750000000001037, -0.0015000000000000568, 0.041999999999999815, 0.11125000000000007, 0.03500000000000014, 0.125, 0.08225000000000016, 0.045499999999998764, -0.009000000000000341, 0.023749999999999716, 0.06649999999999956, 0.09999999999999964, 0.07574999999999932, 0.0799999999999983, 0.1247499999999988, 0.10725000000000051, 0.11875000000000036, 0.01899999999999835, 0.10449999999999982, 0.12074999999999925, 0.198500000000001, 0.1609999999999996, 0.13950000000000173, 0.1255000000000024, 0.12100000000000222, 0.08874999999999922], zp_timestamp='2025-11-12T23:13:00')
2025-11-13T01:17:21.187 [DEBUG] [Thread-26084] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:17:21.271 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:17:21.283 [DEBUG] [Thread-26087] [transport.py] [_log()] starting thread (client mode): 0x11f01000
2025-11-13T01:17:21.283 [DEBUG] [Thread-26087] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:17:21.297 [DEBUG] [Thread-26087] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:17:21.297 [INFO] [Thread-26087] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] client lang: <none>
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] server lang: <none>
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] kex follows: False
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] Compression: none
2025-11-13T01:17:21.305 [DEBUG] [Thread-26087] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:17:21.362 [DEBUG] [Thread-26087] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:17:21.362 [DEBUG] [Thread-26087] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:17:21.363 [DEBUG] [Thread-26087] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:17:21.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:17:21.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:17:21.419 [DEBUG] [Thread-26087] [transport.py] [_log()] userauth is OK
2025-11-13T01:17:21.419 [DEBUG] [Thread-26087] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:17:21.419 [DEBUG] [Thread-26087] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:17:21.419 [DEBUG] [Thread-26087] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:17:21.419 [DEBUG] [Thread-26087] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:17:21.435 [INFO] [Thread-26087] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:17:21.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:17:21.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:17:22.270 [DEBUG] [Thread-26087] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:17:22.270 [DEBUG] [Thread-26087] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:17:22.319 [DEBUG] [Thread-26087] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:17:22.319 [DEBUG] [Thread-26087] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:17:22.328 [DEBUG] [Thread-26087] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:17:22.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:17:22.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-11-13T01:17:22.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-11-13T01:17:22.356 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:17:22.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:17:22.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:17:22.365 [DEBUG] [Thread-26087] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:17:25.607 [DEBUG] [Thread-26089 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:17:35.947 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:17:35.948 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:17:40.665 [DEBUG] [Thread-26090 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:17:52.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:17:52.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:17:52.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-11-13T01:17:53.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 17, 19), 9.96, 51.12, 0.0, 16.37, 15.18, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:17:53.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:17:19
2025-11-13T01:17:53.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:17:53.371 [DEBUG] [Thread-26091] [transport.py] [_log()] starting thread (client mode): 0x14981e10
2025-11-13T01:17:53.371 [DEBUG] [Thread-26091] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:17:53.384 [DEBUG] [Thread-26091] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:17:53.384 [INFO] [Thread-26091] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] client lang: <none>
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] server lang: <none>
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] kex follows: False
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] Compression: none
2025-11-13T01:17:53.387 [DEBUG] [Thread-26091] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:17:53.402 [DEBUG] [Thread-26091] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:17:53.403 [DEBUG] [Thread-26091] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:17:53.403 [DEBUG] [Thread-26091] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:17:53.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:17:53.403 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:17:53.404 [DEBUG] [Thread-26091] [transport.py] [_log()] userauth is OK
2025-11-13T01:17:53.404 [DEBUG] [Thread-26091] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:17:53.404 [DEBUG] [Thread-26091] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:17:53.404 [DEBUG] [Thread-26091] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:17:53.404 [DEBUG] [Thread-26091] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:17:53.423 [INFO] [Thread-26091] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:17:53.423 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:17:54.061 [DEBUG] [Thread-26091] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:17:54.062 [DEBUG] [Thread-26091] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:17:54.062 [DEBUG] [Thread-26091] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:17:54.103 [DEBUG] [Thread-26091] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:17:54.103 [DEBUG] [Thread-26091] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:17:54.107 [DEBUG] [Thread-26091] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:17:54.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:17:54.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:17:54.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:17:54.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:17:54.128 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:17:54.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:17:54.130 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:17:54.130 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:17:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:17:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.970230 -999.00  +15.10  11.63     57   +6.70 1 1 1 1 1     0    0 10.46 72.10 ZNESW 9.5 11.6 269.4 14.2 15.6 -23.9 15.4 -22.9 15.2 -22.4 15.5 -23.2
2025-11-13T01:17:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:17:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:17:54.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.970230
2025-11-13T01:17:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:17:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:17:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:17:54.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:17:54.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:17:54.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:17:19', tmtdew=9.96, humidity=51.12, cloud=0.0, wind=16.37, temperature=15.18, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:17:51', seeing=1.15, atlas_timestamp='2025-11-12T23:17:07.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.003750000000000142, 0.030750000000001165, 0.04225000000000101, 0.05749999999999922, 0.05450000000000088, 0.11125000000000185, 0.027999999999998693, 0.011750000000001037, -0.0015000000000000568, 0.041999999999999815, 0.11125000000000007, 0.03500000000000014, 0.125, 0.08225000000000016, 0.045499999999998764, -0.009000000000000341, 0.023749999999999716, 0.06649999999999956, 0.09999999999999964, 0.07574999999999932, 0.0799999999999983, 0.1247499999999988, 0.10725000000000051, 0.11875000000000036, 0.01899999999999835, 0.10449999999999982, 0.12074999999999925, 0.198500000000001, 0.1609999999999996, 0.13950000000000173, 0.1255000000000024, 0.12100000000000222, 0.08874999999999922], zp_timestamp='2025-11-12T23:13:00')
2025-11-13T01:17:54.133 [DEBUG] [Thread-26091] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:17:54.217 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:17:54.229 [DEBUG] [Thread-26094] [transport.py] [_log()] starting thread (client mode): 0x14946290
2025-11-13T01:17:54.229 [DEBUG] [Thread-26094] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:17:54.246 [DEBUG] [Thread-26094] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:17:54.246 [INFO] [Thread-26094] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] client lang: <none>
2025-11-13T01:17:54.254 [DEBUG] [Thread-26094] [transport.py] [_log()] server lang: <none>
2025-11-13T01:17:54.255 [DEBUG] [Thread-26094] [transport.py] [_log()] kex follows: False
2025-11-13T01:17:54.255 [DEBUG] [Thread-26094] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:17:54.255 [DEBUG] [Thread-26094] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:17:54.255 [DEBUG] [Thread-26094] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:17:54.255 [DEBUG] [Thread-26094] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:17:54.255 [DEBUG] [Thread-26094] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:17:54.255 [DEBUG] [Thread-26094] [transport.py] [_log()] Compression: none
2025-11-13T01:17:54.255 [DEBUG] [Thread-26094] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:17:54.312 [DEBUG] [Thread-26094] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:17:54.312 [DEBUG] [Thread-26094] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:17:54.313 [DEBUG] [Thread-26094] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:17:54.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:17:54.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:17:54.367 [DEBUG] [Thread-26094] [transport.py] [_log()] userauth is OK
2025-11-13T01:17:54.368 [DEBUG] [Thread-26094] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:17:54.368 [DEBUG] [Thread-26094] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:17:54.368 [DEBUG] [Thread-26094] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:17:54.368 [DEBUG] [Thread-26094] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:17:54.387 [INFO] [Thread-26094] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:17:54.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:17:54.388 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:17:55.218 [DEBUG] [Thread-26094] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:17:55.218 [DEBUG] [Thread-26094] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:17:55.266 [DEBUG] [Thread-26094] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:17:55.266 [DEBUG] [Thread-26094] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:17:55.275 [DEBUG] [Thread-26094] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:17:55.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:17:55.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-11-13T01:17:55.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-11-13T01:17:55.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:17:55.304 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:17:55.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:17:55.312 [DEBUG] [Thread-26094] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:17:55.691 [DEBUG] [Thread-26096 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:18:09.408 [DEBUG] [Thread-26097 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:18:10.746 [DEBUG] [Thread-26098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:18:25.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:18:25.334 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:18:25.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-11-13T01:18:25.776 [DEBUG] [Thread-26099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:18:26.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 17, 51), 9.6, 52.64, 0.0, 16.71, 15.12, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:18:26.019 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:17:51
2025-11-13T01:18:26.150 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:18:26.295 [DEBUG] [Thread-26100] [transport.py] [_log()] starting thread (client mode): 0x149217e0
2025-11-13T01:18:26.295 [DEBUG] [Thread-26100] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:18:26.318 [DEBUG] [Thread-26100] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:18:26.318 [INFO] [Thread-26100] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:18:26.321 [DEBUG] [Thread-26100] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] client lang: <none>
2025-11-13T01:18:26.322 [DEBUG] [Thread-26100] [transport.py] [_log()] server lang: <none>
2025-11-13T01:18:26.323 [DEBUG] [Thread-26100] [transport.py] [_log()] kex follows: False
2025-11-13T01:18:26.323 [DEBUG] [Thread-26100] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:18:26.323 [DEBUG] [Thread-26100] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:18:26.323 [DEBUG] [Thread-26100] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:18:26.323 [DEBUG] [Thread-26100] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:18:26.323 [DEBUG] [Thread-26100] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:18:26.323 [DEBUG] [Thread-26100] [transport.py] [_log()] Compression: none
2025-11-13T01:18:26.323 [DEBUG] [Thread-26100] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:18:26.344 [DEBUG] [Thread-26100] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:18:26.345 [DEBUG] [Thread-26100] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:18:26.345 [DEBUG] [Thread-26100] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:18:26.345 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:18:26.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:18:26.347 [DEBUG] [Thread-26100] [transport.py] [_log()] userauth is OK
2025-11-13T01:18:26.347 [DEBUG] [Thread-26100] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:18:26.347 [DEBUG] [Thread-26100] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:18:26.348 [DEBUG] [Thread-26100] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:18:26.348 [DEBUG] [Thread-26100] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:18:26.373 [INFO] [Thread-26100] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:18:26.374 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:18:26.997 [DEBUG] [Thread-26100] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:18:26.997 [DEBUG] [Thread-26100] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:18:26.998 [DEBUG] [Thread-26100] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:18:27.037 [DEBUG] [Thread-26100] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:18:27.038 [DEBUG] [Thread-26100] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:18:27.041 [DEBUG] [Thread-26100] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:18:27.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:18:27.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:18:27.058 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:18:27.059 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:18:27.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:18:27.067 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:18:27.067 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:18:27.067 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:18:27.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:18:27.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.970578 -999.00  +15.10  11.38     58   +6.90 1 1 1 1 1     0    0 10.36 68.75 ZNESW 9.8 11.4 271.3 13.0 15.6 -24.0 15.4 -22.8 15.2 -22.4 15.5 -23.4
2025-11-13T01:18:27.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:18:27.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:18:27.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.970578
2025-11-13T01:18:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:18:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:18:27.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:18:27.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:18:27.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:18:27.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:17:51', tmtdew=9.6, humidity=52.64, cloud=0.0, wind=16.71, temperature=15.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:18:23', seeing=1.15, atlas_timestamp='2025-11-12T23:17:37.939', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.04124999999999979, 0.05424999999999969, 0.06049999999999933, 0.07349999999999923, 0.12225000000000108, 0.0389999999999997, 0.024250000000000327, 0.03249999999999886, 0.05799999999999983, 0.1117499999999989, 0.05550000000000033, 0.14400000000000013, 0.09825000000000017, 0.05599999999999916, 0.03200000000000003, 0.04224999999999923, 0.08050000000000068, 0.13399999999999856, 0.08224999999999838, 0.09599999999999831, 0.09474999999999767, 0.06825000000000081, 0.11074999999999946, 0.04800000000000004, 0.09050000000000047, 0.12674999999999947, 0.18350000000000044, 0.17300000000000004, 0.08500000000000085, 0.10600000000000165, 0.08750000000000213, 0.12324999999999875], zp_timestamp='2025-11-12T23:16:00')
2025-11-13T01:18:27.070 [DEBUG] [Thread-26100] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:18:27.152 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:18:27.164 [DEBUG] [Thread-26103] [transport.py] [_log()] starting thread (client mode): 0x1493cb20
2025-11-13T01:18:27.165 [DEBUG] [Thread-26103] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:18:27.179 [DEBUG] [Thread-26103] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:18:27.179 [INFO] [Thread-26103] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:18:27.186 [DEBUG] [Thread-26103] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] client lang: <none>
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] server lang: <none>
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] kex follows: False
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] Compression: none
2025-11-13T01:18:27.187 [DEBUG] [Thread-26103] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:18:27.244 [DEBUG] [Thread-26103] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:18:27.244 [DEBUG] [Thread-26103] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:18:27.245 [DEBUG] [Thread-26103] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:18:27.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:18:27.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:18:27.300 [DEBUG] [Thread-26103] [transport.py] [_log()] userauth is OK
2025-11-13T01:18:27.300 [DEBUG] [Thread-26103] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:18:27.300 [DEBUG] [Thread-26103] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:18:27.301 [DEBUG] [Thread-26103] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:18:27.301 [DEBUG] [Thread-26103] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:18:27.320 [INFO] [Thread-26103] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:18:27.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:18:27.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:18:28.154 [DEBUG] [Thread-26103] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:18:28.155 [DEBUG] [Thread-26103] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:18:28.203 [DEBUG] [Thread-26103] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:18:28.203 [DEBUG] [Thread-26103] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:18:28.212 [DEBUG] [Thread-26103] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:18:28.221 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:18:28.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-11-13T01:18:28.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:18:28.240 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:18:28.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:18:28.241 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:18:28.249 [DEBUG] [Thread-26103] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:18:36.151 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:18:36.152 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:18:40.809 [DEBUG] [Thread-26105 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:18:55.872 [DEBUG] [Thread-26106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:18:58.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:18:58.271 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:18:58.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-11-13T01:18:58.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 18, 55), 9.45, 53.14, 0.0, 15.21, 15.0, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:18:58.934 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:18:55
2025-11-13T01:18:59.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:18:59.216 [DEBUG] [Thread-26107] [transport.py] [_log()] starting thread (client mode): 0x17346c20
2025-11-13T01:18:59.216 [DEBUG] [Thread-26107] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:18:59.237 [DEBUG] [Thread-26107] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:18:59.237 [INFO] [Thread-26107] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:18:59.240 [DEBUG] [Thread-26107] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:18:59.240 [DEBUG] [Thread-26107] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] client lang: <none>
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] server lang: <none>
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] kex follows: False
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] Compression: none
2025-11-13T01:18:59.241 [DEBUG] [Thread-26107] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:18:59.256 [DEBUG] [Thread-26107] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:18:59.256 [DEBUG] [Thread-26107] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:18:59.257 [DEBUG] [Thread-26107] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:18:59.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:18:59.257 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:18:59.258 [DEBUG] [Thread-26107] [transport.py] [_log()] userauth is OK
2025-11-13T01:18:59.258 [DEBUG] [Thread-26107] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:18:59.258 [DEBUG] [Thread-26107] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:18:59.258 [DEBUG] [Thread-26107] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:18:59.258 [DEBUG] [Thread-26107] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:18:59.276 [INFO] [Thread-26107] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:18:59.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:18:59.920 [DEBUG] [Thread-26107] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:18:59.920 [DEBUG] [Thread-26107] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:18:59.920 [DEBUG] [Thread-26107] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:18:59.961 [DEBUG] [Thread-26107] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:18:59.961 [DEBUG] [Thread-26107] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:18:59.963 [DEBUG] [Thread-26107] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:18:59.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:18:59.975 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:18:59.976 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:18:59.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:18:59.980 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:18:59.981 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:18:59.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.970925 -999.00  +15.10   9.99     58   +7.00 1 1 1 1 1     0    0 10.70 79.18 ZNESW 9.8 10.0 272.6 14.2 15.6 -23.9 15.4 -23.0 15.2 -22.4 15.4 -23.3
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.970925
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:18:59.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:18:55', tmtdew=9.45, humidity=53.14, cloud=0.0, wind=15.21, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:18:55', seeing=0.94, atlas_timestamp='2025-11-12T23:18:07.920', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.04124999999999979, 0.05424999999999969, 0.06049999999999933, 0.07349999999999923, 0.12225000000000108, 0.0389999999999997, 0.024250000000000327, 0.03249999999999886, 0.05799999999999983, 0.1117499999999989, 0.05550000000000033, 0.14400000000000013, 0.09825000000000017, 0.05599999999999916, 0.03200000000000003, 0.04224999999999923, 0.08050000000000068, 0.13399999999999856, 0.08224999999999838, 0.09599999999999831, 0.09474999999999767, 0.06825000000000081, 0.11074999999999946, 0.04800000000000004, 0.09050000000000047, 0.12674999999999947, 0.18350000000000044, 0.17300000000000004, 0.08500000000000085, 0.10600000000000165, 0.08750000000000213, 0.12324999999999875], zp_timestamp='2025-11-12T23:16:00')
2025-11-13T01:18:59.982 [DEBUG] [Thread-26107] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:19:00.056 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:19:00.067 [DEBUG] [Thread-26110] [transport.py] [_log()] starting thread (client mode): 0x19ddbf70
2025-11-13T01:19:00.067 [DEBUG] [Thread-26110] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:19:00.084 [DEBUG] [Thread-26110] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:19:00.084 [INFO] [Thread-26110] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:19:00.091 [DEBUG] [Thread-26110] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] client lang: <none>
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] server lang: <none>
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] kex follows: False
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] Compression: none
2025-11-13T01:19:00.092 [DEBUG] [Thread-26110] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:19:00.150 [DEBUG] [Thread-26110] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:19:00.150 [DEBUG] [Thread-26110] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:19:00.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:19:00.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:19:00.151 [DEBUG] [Thread-26110] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:19:00.207 [DEBUG] [Thread-26110] [transport.py] [_log()] userauth is OK
2025-11-13T01:19:00.207 [DEBUG] [Thread-26110] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:19:00.207 [DEBUG] [Thread-26110] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:19:00.207 [DEBUG] [Thread-26110] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:19:00.207 [DEBUG] [Thread-26110] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:19:00.225 [INFO] [Thread-26110] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:19:00.225 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:19:00.225 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:19:01.119 [DEBUG] [Thread-26110] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:19:01.119 [DEBUG] [Thread-26110] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:19:01.167 [DEBUG] [Thread-26110] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:19:01.167 [DEBUG] [Thread-26110] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:19:01.176 [DEBUG] [Thread-26110] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:19:01.184 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:19:01.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-11-13T01:19:01.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-11-13T01:19:01.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:19:01.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:19:01.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:19:01.209 [DEBUG] [Thread-26110] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:19:09.464 [DEBUG] [Thread-26112 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:19:10.908 [DEBUG] [Thread-26113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:19:25.962 [DEBUG] [Thread-26114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:19:31.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:19:31.231 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:19:31.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-11-13T01:19:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 19, 27), 9.41, 53.29, 0.0, 16.52, 15.05, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:19:31.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:19:27
2025-11-13T01:19:32.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:19:32.175 [DEBUG] [Thread-26115] [transport.py] [_log()] starting thread (client mode): 0x19dda2f0
2025-11-13T01:19:32.175 [DEBUG] [Thread-26115] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:19:32.194 [DEBUG] [Thread-26115] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:19:32.194 [INFO] [Thread-26115] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] client lang: <none>
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] server lang: <none>
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] kex follows: False
2025-11-13T01:19:32.197 [DEBUG] [Thread-26115] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:19:32.198 [DEBUG] [Thread-26115] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:19:32.198 [DEBUG] [Thread-26115] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:19:32.198 [DEBUG] [Thread-26115] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:19:32.198 [DEBUG] [Thread-26115] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:19:32.198 [DEBUG] [Thread-26115] [transport.py] [_log()] Compression: none
2025-11-13T01:19:32.198 [DEBUG] [Thread-26115] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:19:32.216 [DEBUG] [Thread-26115] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:19:32.217 [DEBUG] [Thread-26115] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:19:32.217 [DEBUG] [Thread-26115] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:19:32.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:19:32.218 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:19:32.219 [DEBUG] [Thread-26115] [transport.py] [_log()] userauth is OK
2025-11-13T01:19:32.220 [DEBUG] [Thread-26115] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:19:32.220 [DEBUG] [Thread-26115] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:19:32.220 [DEBUG] [Thread-26115] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:19:32.220 [DEBUG] [Thread-26115] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:19:32.256 [INFO] [Thread-26115] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:19:32.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:19:32.887 [DEBUG] [Thread-26115] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:19:32.887 [DEBUG] [Thread-26115] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:19:32.887 [DEBUG] [Thread-26115] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:19:32.928 [DEBUG] [Thread-26115] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:19:32.928 [DEBUG] [Thread-26115] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:19:32.931 [DEBUG] [Thread-26115] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:19:32.943 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:19:32.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:19:32.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:19:32.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:19:32.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:19:32.955 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:19:32.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:19:32.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:19:32.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:19:32.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.971619 -999.00  +15.10  13.38     58   +7.10 1 1 1 1 1     0    0 9.82 58.21 ZNESW 14.9 13.4 262.7 16.3 15.5 -23.8 15.4 -22.7 15.1 -22.3 15.4 -23.2
2025-11-13T01:19:32.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:19:32.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:19:32.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.971619
2025-11-13T01:19:32.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:19:32.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:19:32.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:19:32.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:19:32.958 [DEBUG] [Thread-26115] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:19:32.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:19:32.959 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:19:27', tmtdew=9.41, humidity=53.29, cloud=0.0, wind=16.52, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:19:27', seeing=0.92, atlas_timestamp='2025-11-12T23:19:07.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.04124999999999979, 0.05424999999999969, 0.06049999999999933, 0.07349999999999923, 0.12225000000000108, 0.0389999999999997, 0.024250000000000327, 0.03249999999999886, 0.05799999999999983, 0.1117499999999989, 0.05550000000000033, 0.14400000000000013, 0.09825000000000017, 0.05599999999999916, 0.03200000000000003, 0.04224999999999923, 0.08050000000000068, 0.13399999999999856, 0.08224999999999838, 0.09599999999999831, 0.09474999999999767, 0.06825000000000081, 0.11074999999999946, 0.04800000000000004, 0.09050000000000047, 0.12674999999999947, 0.18350000000000044, 0.17300000000000004, 0.08500000000000085, 0.10600000000000165, 0.08750000000000213, 0.12324999999999875], zp_timestamp='2025-11-12T23:16:00')
2025-11-13T01:19:33.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:19:33.054 [DEBUG] [Thread-26118] [transport.py] [_log()] starting thread (client mode): 0x14921180
2025-11-13T01:19:33.054 [DEBUG] [Thread-26118] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:19:33.069 [DEBUG] [Thread-26118] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:19:33.069 [INFO] [Thread-26118] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] client lang: <none>
2025-11-13T01:19:33.077 [DEBUG] [Thread-26118] [transport.py] [_log()] server lang: <none>
2025-11-13T01:19:33.078 [DEBUG] [Thread-26118] [transport.py] [_log()] kex follows: False
2025-11-13T01:19:33.078 [DEBUG] [Thread-26118] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:19:33.078 [DEBUG] [Thread-26118] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:19:33.078 [DEBUG] [Thread-26118] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:19:33.078 [DEBUG] [Thread-26118] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:19:33.078 [DEBUG] [Thread-26118] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:19:33.078 [DEBUG] [Thread-26118] [transport.py] [_log()] Compression: none
2025-11-13T01:19:33.078 [DEBUG] [Thread-26118] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:19:33.135 [DEBUG] [Thread-26118] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:19:33.136 [DEBUG] [Thread-26118] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:19:33.136 [DEBUG] [Thread-26118] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:19:33.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:19:33.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:19:33.191 [DEBUG] [Thread-26118] [transport.py] [_log()] userauth is OK
2025-11-13T01:19:33.191 [DEBUG] [Thread-26118] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:19:33.191 [DEBUG] [Thread-26118] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:19:33.191 [DEBUG] [Thread-26118] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:19:33.191 [DEBUG] [Thread-26118] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:19:33.209 [INFO] [Thread-26118] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:19:33.210 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:19:33.210 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:19:34.011 [DEBUG] [Thread-26118] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:19:34.011 [DEBUG] [Thread-26118] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:19:34.059 [DEBUG] [Thread-26118] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:19:34.059 [DEBUG] [Thread-26118] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:19:34.068 [DEBUG] [Thread-26118] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:19:34.077 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:19:34.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-11-13T01:19:34.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-11-13T01:19:34.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:19:34.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:19:34.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:19:34.103 [DEBUG] [Thread-26118] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:19:36.354 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:19:36.355 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:19:40.991 [DEBUG] [Thread-26120 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:19:56.040 [DEBUG] [Thread-26121 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:20:04.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:20:04.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:20:04.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-11-13T01:20:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 19, 59), 9.38, 53.42, 0.0, 15.9, 15.08, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:20:04.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:19:59
2025-11-13T01:20:04.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:20:05.048 [DEBUG] [Thread-26122] [transport.py] [_log()] starting thread (client mode): 0x149883a0
2025-11-13T01:20:05.048 [DEBUG] [Thread-26122] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:20:05.069 [DEBUG] [Thread-26122] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:20:05.070 [INFO] [Thread-26122] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:20:05.072 [DEBUG] [Thread-26122] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] client lang: <none>
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] server lang: <none>
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] kex follows: False
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] Compression: none
2025-11-13T01:20:05.073 [DEBUG] [Thread-26122] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:20:05.090 [DEBUG] [Thread-26122] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:20:05.091 [DEBUG] [Thread-26122] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:20:05.091 [DEBUG] [Thread-26122] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:20:05.091 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:20:05.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:20:05.093 [DEBUG] [Thread-26122] [transport.py] [_log()] userauth is OK
2025-11-13T01:20:05.093 [DEBUG] [Thread-26122] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:20:05.093 [DEBUG] [Thread-26122] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:20:05.094 [DEBUG] [Thread-26122] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:20:05.094 [DEBUG] [Thread-26122] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:20:05.117 [INFO] [Thread-26122] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:20:05.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:20:08.871 [DEBUG] [Thread-26122] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:20:08.871 [DEBUG] [Thread-26122] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:20:08.871 [DEBUG] [Thread-26122] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:20:08.912 [DEBUG] [Thread-26122] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:20:08.912 [DEBUG] [Thread-26122] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:20:08.916 [DEBUG] [Thread-26122] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:20:08.931 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:20:08.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:20:08.933 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:20:08.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:20:08.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:20:08.960 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:20:08.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:20:08.961 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:20:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:20:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.971966 -999.00  +15.10  11.47     58   +7.10 1 1 1 1 1     0    0 10.01 52.76 ZNESW 8.9 11.5 266.2 16.9 15.5 -23.8 15.4 -22.7 15.2 -22.3 15.4 -23.1
2025-11-13T01:20:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:20:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:20:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.971966
2025-11-13T01:20:08.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:20:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:20:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:20:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:20:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:20:08.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:19:59', tmtdew=9.38, humidity=53.42, cloud=0.0, wind=15.9, temperature=15.08, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:19:59', seeing=0.92, atlas_timestamp='2025-11-12T23:19:37.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.02474999999999916, 0.04124999999999979, 0.05424999999999969, 0.06049999999999933, 0.07349999999999923, 0.12225000000000108, 0.0389999999999997, 0.024250000000000327, 0.03249999999999886, 0.05799999999999983, 0.1117499999999989, 0.05550000000000033, 0.14400000000000013, 0.09825000000000017, 0.05599999999999916, 0.03200000000000003, 0.04224999999999923, 0.08050000000000068, 0.13399999999999856, 0.08224999999999838, 0.09599999999999831, 0.09474999999999767, 0.06825000000000081, 0.11074999999999946, 0.04800000000000004, 0.09050000000000047, 0.12674999999999947, 0.18350000000000044, 0.17300000000000004, 0.08500000000000085, 0.10600000000000165, 0.08750000000000213, 0.12324999999999875], zp_timestamp='2025-11-12T23:16:00')
2025-11-13T01:20:08.964 [DEBUG] [Thread-26122] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:20:09.048 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:20:09.529 [DEBUG] [Thread-26125 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:20:11.075 [DEBUG] [Thread-26126 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:20:26.123 [DEBUG] [Thread-26127 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:20:36.558 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:20:36.559 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:20:41.159 [DEBUG] [Thread-26128 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:20:56.197 [DEBUG] [Thread-26129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:21:09.597 [DEBUG] [Thread-26130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:21:11.231 [DEBUG] [Thread-26131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:21:26.272 [DEBUG] [Thread-26132 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:21:36.761 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:21:36.762 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:21:41.308 [DEBUG] [Thread-26133 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:21:56.347 [DEBUG] [Thread-26134 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:22:09.653 [DEBUG] [Thread-26135 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:22:11.378 [DEBUG] [Thread-26136 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:22:20.731 [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-11-13T01:22:26.412 [DEBUG] [Thread-26137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:22:36.964 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:22:36.965 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:22:41.450 [DEBUG] [Thread-26138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:22:50.746 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:22:50.746 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:22:50.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-11-13T01:22:51.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 22, 39), 9.65, 52.68, 0.0, 14.29, 15.07, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:22:51.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:22:39
2025-11-13T01:22:51.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:22:51.743 [DEBUG] [Thread-26139] [transport.py] [_log()] starting thread (client mode): 0x149221a0
2025-11-13T01:22:51.743 [DEBUG] [Thread-26139] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:22:51.763 [DEBUG] [Thread-26139] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:22:51.763 [INFO] [Thread-26139] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] client lang: <none>
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] server lang: <none>
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] kex follows: False
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] Compression: none
2025-11-13T01:22:51.767 [DEBUG] [Thread-26139] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:22:51.783 [DEBUG] [Thread-26139] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:22:51.783 [DEBUG] [Thread-26139] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:22:51.784 [DEBUG] [Thread-26139] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:22:51.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:22:51.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:22:51.785 [DEBUG] [Thread-26139] [transport.py] [_log()] userauth is OK
2025-11-13T01:22:51.785 [DEBUG] [Thread-26139] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:22:51.785 [DEBUG] [Thread-26139] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:22:51.785 [DEBUG] [Thread-26139] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:22:51.785 [DEBUG] [Thread-26139] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:22:51.802 [INFO] [Thread-26139] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:22:51.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:22:52.449 [DEBUG] [Thread-26139] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:22:52.449 [DEBUG] [Thread-26139] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:22:52.450 [DEBUG] [Thread-26139] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:22:52.490 [DEBUG] [Thread-26139] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:22:52.490 [DEBUG] [Thread-26139] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:22:52.491 [DEBUG] [Thread-26139] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:22:52.498 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:22:52.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:22:52.498 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:22:52.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:22:52.501 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:22:52.502 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:22:52.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:22:52.502 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:22:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:22:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.974050 -999.00  +15.10   9.42     57   +6.70 1 1 1 1 1     0    0 9.26 30.34 ZNESW 12.8 9.4 265.4 17.3 15.5 -23.7 15.4 -22.9 15.1 -22.2 15.3 -23.1
2025-11-13T01:22:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:22:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:22:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.974050
2025-11-13T01:22:52.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:22:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:22:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:22:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:22:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:22:52.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:22:39', tmtdew=9.65, humidity=52.68, cloud=0.0, wind=14.29, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:22:39', seeing=0.83, atlas_timestamp='2025-11-12T23:22:37.920', atlas_cloud=1, atlas_rain=1, zp_data=[0.030249999999998778, 0.03125, 0.028249999999999886, 0.045999999999999375, 0.09149999999999991, 0.1282500000000013, 0.03399999999999892, 0.01875000000000071, 0.041499999999999204, 0.054999999999999716, 0.11275000000000013, 0.06550000000000011, 0.15000000000000036, 0.07974999999999888, 0.06550000000000011, 0.07899999999999885, 0.06374999999999886, 0.061500000000000554, 0.13199999999999967, 0.09274999999999878, 0.13699999999999868, 0.05974999999999753, 0.034250000000000114, 0.0912500000000005, 0.08299999999999841, 0.1225000000000005, 0.12624999999999886, 0.18350000000000044, 0.21600000000000108, 0.08800000000000097, 0.13500000000000156, 0.03700000000000081, 0.17074999999999996], zp_timestamp='2025-11-12T23:19:00')
2025-11-13T01:22:52.503 [DEBUG] [Thread-26139] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:22:52.577 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:22:52.589 [DEBUG] [Thread-26142] [transport.py] [_log()] starting thread (client mode): 0x173441c0
2025-11-13T01:22:52.589 [DEBUG] [Thread-26142] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:22:52.605 [DEBUG] [Thread-26142] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:22:52.605 [INFO] [Thread-26142] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:22:52.613 [DEBUG] [Thread-26142] [transport.py] [_log()] client lang: <none>
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] server lang: <none>
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] kex follows: False
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] Compression: none
2025-11-13T01:22:52.614 [DEBUG] [Thread-26142] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:22:52.670 [DEBUG] [Thread-26142] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:22:52.670 [DEBUG] [Thread-26142] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:22:52.670 [DEBUG] [Thread-26142] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:22:52.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:22:52.670 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:22:52.728 [DEBUG] [Thread-26142] [transport.py] [_log()] userauth is OK
2025-11-13T01:22:52.728 [DEBUG] [Thread-26142] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:22:52.728 [DEBUG] [Thread-26142] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:22:52.728 [DEBUG] [Thread-26142] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:22:52.728 [DEBUG] [Thread-26142] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:22:52.742 [INFO] [Thread-26142] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:22:52.742 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:22:52.742 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:22:53.587 [DEBUG] [Thread-26142] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:22:53.587 [DEBUG] [Thread-26142] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:22:53.635 [DEBUG] [Thread-26142] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:22:53.635 [DEBUG] [Thread-26142] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:22:53.643 [DEBUG] [Thread-26142] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:22:53.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:22:53.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-11-13T01:22:53.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-11-13T01:22:53.667 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:22:53.667 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:22:53.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:22:53.675 [DEBUG] [Thread-26142] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:22:56.484 [DEBUG] [Thread-26144 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:23:09.711 [DEBUG] [Thread-26145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:23:11.534 [DEBUG] [Thread-26146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:23:23.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:23:23.698 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:23:23.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-11-13T01:23:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 23, 11), 9.7, 52.5, 0.0, 15.09, 15.04, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:23:24.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:23:11
2025-11-13T01:23:24.474 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:23:24.620 [DEBUG] [Thread-26147] [transport.py] [_log()] starting thread (client mode): 0x1737c490
2025-11-13T01:23:24.620 [DEBUG] [Thread-26147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:23:24.640 [DEBUG] [Thread-26147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:23:24.640 [INFO] [Thread-26147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:23:24.643 [DEBUG] [Thread-26147] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:23:24.643 [DEBUG] [Thread-26147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:23:24.643 [DEBUG] [Thread-26147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] client lang: <none>
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] server lang: <none>
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] kex follows: False
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:23:24.644 [DEBUG] [Thread-26147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:23:24.645 [DEBUG] [Thread-26147] [transport.py] [_log()] Compression: none
2025-11-13T01:23:24.645 [DEBUG] [Thread-26147] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:23:24.665 [DEBUG] [Thread-26147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:23:24.666 [DEBUG] [Thread-26147] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:23:24.667 [DEBUG] [Thread-26147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:23:24.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:23:24.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:23:24.670 [DEBUG] [Thread-26147] [transport.py] [_log()] userauth is OK
2025-11-13T01:23:24.670 [DEBUG] [Thread-26147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:23:24.670 [DEBUG] [Thread-26147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:23:24.670 [DEBUG] [Thread-26147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:23:24.670 [DEBUG] [Thread-26147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:23:24.695 [INFO] [Thread-26147] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:23:24.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:23:25.335 [DEBUG] [Thread-26147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:23:25.335 [DEBUG] [Thread-26147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:23:25.335 [DEBUG] [Thread-26147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:23:25.376 [DEBUG] [Thread-26147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:23:25.376 [DEBUG] [Thread-26147] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:23:25.379 [DEBUG] [Thread-26147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:23:25.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:23:25.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:23:25.394 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:23:25.396 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:23:25.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:23:25.402 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:23:25.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:23:25.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:23:25.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:23:25.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.974397 -999.00  +15.10  10.68     56   +6.50 1 1 1 1 1     0    0 9.12 29.68 ZNESW 10.9 10.7 269.0 15.2 15.5 -23.7 15.4 -22.9 15.1 -22.3 15.4 -23.2
2025-11-13T01:23:25.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:23:25.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:23:25.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.974397
2025-11-13T01:23:25.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:23:25.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:23:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:23:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:23:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:23:25.405 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:23:11', tmtdew=9.7, humidity=52.5, cloud=0.0, wind=15.09, temperature=15.04, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:23:11', seeing=0.92, atlas_timestamp='2025-11-12T23:23:07.901', atlas_cloud=1, atlas_rain=1, zp_data=[0.030249999999998778, 0.03125, 0.028249999999999886, 0.045999999999999375, 0.09149999999999991, 0.1282500000000013, 0.03399999999999892, 0.01875000000000071, 0.041499999999999204, 0.054999999999999716, 0.11275000000000013, 0.06550000000000011, 0.15000000000000036, 0.07974999999999888, 0.06550000000000011, 0.07899999999999885, 0.06374999999999886, 0.061500000000000554, 0.13199999999999967, 0.09274999999999878, 0.13699999999999868, 0.05974999999999753, 0.034250000000000114, 0.0912500000000005, 0.08299999999999841, 0.1225000000000005, 0.12624999999999886, 0.18350000000000044, 0.21600000000000108, 0.08800000000000097, 0.13500000000000156, 0.03700000000000081, 0.17074999999999996], zp_timestamp='2025-11-12T23:19:00')
2025-11-13T01:23:25.405 [DEBUG] [Thread-26147] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:23:25.485 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:23:25.498 [DEBUG] [Thread-26150] [transport.py] [_log()] starting thread (client mode): 0x1737f160
2025-11-13T01:23:25.498 [DEBUG] [Thread-26150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:23:25.513 [DEBUG] [Thread-26150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:23:25.513 [INFO] [Thread-26150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:23:25.520 [DEBUG] [Thread-26150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] client lang: <none>
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] server lang: <none>
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] kex follows: False
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:23:25.521 [DEBUG] [Thread-26150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:23:25.522 [DEBUG] [Thread-26150] [transport.py] [_log()] Compression: none
2025-11-13T01:23:25.522 [DEBUG] [Thread-26150] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:23:25.581 [DEBUG] [Thread-26150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:23:25.581 [DEBUG] [Thread-26150] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:23:25.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:23:25.582 [DEBUG] [Thread-26150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:23:25.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:23:25.640 [DEBUG] [Thread-26150] [transport.py] [_log()] userauth is OK
2025-11-13T01:23:25.640 [DEBUG] [Thread-26150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:23:25.640 [DEBUG] [Thread-26150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:23:25.640 [DEBUG] [Thread-26150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:23:25.641 [DEBUG] [Thread-26150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:23:25.674 [INFO] [Thread-26150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:23:25.675 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:23:25.675 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:23:26.494 [DEBUG] [Thread-26150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:23:26.494 [DEBUG] [Thread-26150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:23:26.542 [DEBUG] [Thread-26150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:23:26.543 [DEBUG] [Thread-26150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:23:26.552 [DEBUG] [Thread-26150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:23:26.561 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:23:26.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')
2025-11-13T01:23:26.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-11-13T01:23:26.572 [DEBUG] [Thread-26152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:23:26.579 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:23:26.580 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:23:26.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:23:26.588 [DEBUG] [Thread-26150] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:23:37.168 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:23:37.169 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:23:41.621 [DEBUG] [Thread-26153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:23:56.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:23:56.607 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:23:56.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:23:56.658 [DEBUG] [Thread-26154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:23:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 23, 43), 9.96, 51.07, 0.0, 18.95, 15.05, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:23:57.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:23:43
2025-11-13T01:23:57.426 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:23:57.576 [DEBUG] [Thread-26155] [transport.py] [_log()] starting thread (client mode): 0x1496a290
2025-11-13T01:23:57.577 [DEBUG] [Thread-26155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:23:57.597 [DEBUG] [Thread-26155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:23:57.597 [INFO] [Thread-26155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] client lang: <none>
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] server lang: <none>
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] kex follows: False
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:23:57.600 [DEBUG] [Thread-26155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:23:57.601 [DEBUG] [Thread-26155] [transport.py] [_log()] Compression: none
2025-11-13T01:23:57.601 [DEBUG] [Thread-26155] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:23:57.617 [DEBUG] [Thread-26155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:23:57.618 [DEBUG] [Thread-26155] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:23:57.618 [DEBUG] [Thread-26155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:23:57.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:23:57.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:23:57.620 [DEBUG] [Thread-26155] [transport.py] [_log()] userauth is OK
2025-11-13T01:23:57.621 [DEBUG] [Thread-26155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:23:57.621 [DEBUG] [Thread-26155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:23:57.621 [DEBUG] [Thread-26155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:23:57.621 [DEBUG] [Thread-26155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:23:57.645 [INFO] [Thread-26155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:23:57.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:23:58.294 [DEBUG] [Thread-26155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:23:58.294 [DEBUG] [Thread-26155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:23:58.295 [DEBUG] [Thread-26155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:23:58.336 [DEBUG] [Thread-26155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:23:58.336 [DEBUG] [Thread-26155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:23:58.339 [DEBUG] [Thread-26155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:23:58.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:23:58.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:23:58.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:23:58.357 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:23:58.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:23:58.365 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:23:58.365 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:23:58.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:23:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:23:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.974744 -999.00  +15.10  10.14     55   +6.30 1 1 1 1 1     0    0 9.11 25.61 ZNESW 13.9 10.1 276.7 17.4 15.5 -23.7 15.4 -22.8 15.1 -22.3 15.4 -23.1
2025-11-13T01:23:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:23:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:23:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.974744
2025-11-13T01:23:58.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:23:58.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:23:58.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:23:58.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:23:58.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:23:58.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:23:43', tmtdew=9.96, humidity=51.07, cloud=0.0, wind=18.95, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:23:43', seeing=0.77, atlas_timestamp='2025-11-12T23:23:37.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.030249999999998778, 0.03125, 0.028249999999999886, 0.045999999999999375, 0.09149999999999991, 0.1282500000000013, 0.03399999999999892, 0.01875000000000071, 0.041499999999999204, 0.054999999999999716, 0.11275000000000013, 0.06550000000000011, 0.15000000000000036, 0.07974999999999888, 0.06550000000000011, 0.07899999999999885, 0.06374999999999886, 0.061500000000000554, 0.13199999999999967, 0.09274999999999878, 0.13699999999999868, 0.05974999999999753, 0.034250000000000114, 0.0912500000000005, 0.08299999999999841, 0.1225000000000005, 0.12624999999999886, 0.18350000000000044, 0.21600000000000108, 0.08800000000000097, 0.13500000000000156, 0.03700000000000081, 0.17074999999999996], zp_timestamp='2025-11-12T23:19:00')
2025-11-13T01:23:58.368 [DEBUG] [Thread-26155] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:23:58.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:23:58.462 [DEBUG] [Thread-26158] [transport.py] [_log()] starting thread (client mode): 0x1496ae30
2025-11-13T01:23:58.463 [DEBUG] [Thread-26158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:23:58.477 [DEBUG] [Thread-26158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:23:58.477 [INFO] [Thread-26158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] client lang: <none>
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] server lang: <none>
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] kex follows: False
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:23:58.485 [DEBUG] [Thread-26158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:23:58.486 [DEBUG] [Thread-26158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:23:58.486 [DEBUG] [Thread-26158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:23:58.486 [DEBUG] [Thread-26158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:23:58.486 [DEBUG] [Thread-26158] [transport.py] [_log()] Compression: none
2025-11-13T01:23:58.486 [DEBUG] [Thread-26158] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:23:58.545 [DEBUG] [Thread-26158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:23:58.545 [DEBUG] [Thread-26158] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:23:58.546 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:23:58.547 [DEBUG] [Thread-26158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:23:58.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:23:58.604 [DEBUG] [Thread-26158] [transport.py] [_log()] userauth is OK
2025-11-13T01:23:58.605 [DEBUG] [Thread-26158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:23:58.605 [DEBUG] [Thread-26158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:23:58.605 [DEBUG] [Thread-26158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:23:58.605 [DEBUG] [Thread-26158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:23:58.624 [INFO] [Thread-26158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:23:58.625 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:23:58.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:23:59.445 [DEBUG] [Thread-26158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:23:59.445 [DEBUG] [Thread-26158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:23:59.493 [DEBUG] [Thread-26158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:23:59.493 [DEBUG] [Thread-26158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:23:59.502 [DEBUG] [Thread-26158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:23:59.511 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:23:59.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:23:59.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-11-13T01:23:59.530 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:23:59.531 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:23:59.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:23:59.539 [DEBUG] [Thread-26158] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:24:09.768 [DEBUG] [Thread-26160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:24:11.688 [DEBUG] [Thread-26161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:24:26.731 [DEBUG] [Thread-26162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:24:29.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:24:29.562 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01: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-11-13T01:24:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 24, 15), 10.09, 50.62, 0.0, 18.32, 15.07, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:24:30.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:24:15
2025-11-13T01:24:30.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:24:30.478 [DEBUG] [Thread-26163] [transport.py] [_log()] starting thread (client mode): 0x1498a860
2025-11-13T01:24:30.479 [DEBUG] [Thread-26163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:24:30.499 [DEBUG] [Thread-26163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:24:30.499 [INFO] [Thread-26163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] client lang: <none>
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] server lang: <none>
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] kex follows: False
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:24:30.501 [DEBUG] [Thread-26163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:24:30.502 [DEBUG] [Thread-26163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:24:30.502 [DEBUG] [Thread-26163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:24:30.502 [DEBUG] [Thread-26163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:24:30.502 [DEBUG] [Thread-26163] [transport.py] [_log()] Compression: none
2025-11-13T01:24:30.502 [DEBUG] [Thread-26163] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:24:30.509 [DEBUG] [Thread-26163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:24:30.510 [DEBUG] [Thread-26163] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:24:30.510 [DEBUG] [Thread-26163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:24:30.510 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:24:30.511 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:24:30.511 [DEBUG] [Thread-26163] [transport.py] [_log()] userauth is OK
2025-11-13T01:24:30.512 [DEBUG] [Thread-26163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:24:30.512 [DEBUG] [Thread-26163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:24:30.512 [DEBUG] [Thread-26163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:24:30.512 [DEBUG] [Thread-26163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:24:30.535 [INFO] [Thread-26163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:24:30.535 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:24:31.171 [DEBUG] [Thread-26163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:24:31.171 [DEBUG] [Thread-26163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:24:31.172 [DEBUG] [Thread-26163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:24:31.212 [DEBUG] [Thread-26163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:24:31.213 [DEBUG] [Thread-26163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:24:31.216 [DEBUG] [Thread-26163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:24:31.228 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:24:31.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:24:31.231 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:24:31.233 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:24:31.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:24:31.241 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:24:31.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:24:31.241 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:24:31.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:24:31.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.975091 -999.00  +15.10  12.61     56   +6.40 1 1 1 1 1     0    0 9.09 26.57 ZNESW 8.2 12.6 266.4 15.2 15.5 -23.7 15.3 -22.7 15.1 -22.1 15.4 -23.3
2025-11-13T01:24:31.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:24:31.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:24:31.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.975091
2025-11-13T01:24:31.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:24:31.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:24:31.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:24:31.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:24:31.243 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:24:31.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:24:15', tmtdew=10.09, humidity=50.62, cloud=0.0, wind=18.32, temperature=15.07, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:24:15', seeing=0.77, atlas_timestamp='2025-11-12T23:24:07.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.030249999999998778, 0.03125, 0.028249999999999886, 0.045999999999999375, 0.09149999999999991, 0.1282500000000013, 0.03399999999999892, 0.01875000000000071, 0.041499999999999204, 0.054999999999999716, 0.11275000000000013, 0.06550000000000011, 0.15000000000000036, 0.07974999999999888, 0.06550000000000011, 0.07899999999999885, 0.06374999999999886, 0.061500000000000554, 0.13199999999999967, 0.09274999999999878, 0.13699999999999868, 0.05974999999999753, 0.034250000000000114, 0.0912500000000005, 0.08299999999999841, 0.1225000000000005, 0.12624999999999886, 0.18350000000000044, 0.21600000000000108, 0.08800000000000097, 0.13500000000000156, 0.03700000000000081, 0.17074999999999996], zp_timestamp='2025-11-12T23:23:00')
2025-11-13T01:24:31.244 [DEBUG] [Thread-26163] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:24:31.329 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:24:31.342 [DEBUG] [Thread-26166] [transport.py] [_log()] starting thread (client mode): 0x14988580
2025-11-13T01:24:31.342 [DEBUG] [Thread-26166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:24:31.357 [DEBUG] [Thread-26166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:24:31.357 [INFO] [Thread-26166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:24:31.364 [DEBUG] [Thread-26166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] client lang: <none>
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] server lang: <none>
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] kex follows: False
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] Compression: none
2025-11-13T01:24:31.365 [DEBUG] [Thread-26166] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:24:31.424 [DEBUG] [Thread-26166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:24:31.424 [DEBUG] [Thread-26166] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:24:31.425 [DEBUG] [Thread-26166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:24:31.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:24:31.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:24:31.480 [DEBUG] [Thread-26166] [transport.py] [_log()] userauth is OK
2025-11-13T01:24:31.480 [DEBUG] [Thread-26166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:24:31.481 [DEBUG] [Thread-26166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:24:31.481 [DEBUG] [Thread-26166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:24:31.481 [DEBUG] [Thread-26166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:24:31.501 [INFO] [Thread-26166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:24:31.502 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:24:31.503 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:24:32.305 [DEBUG] [Thread-26166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:24:32.306 [DEBUG] [Thread-26166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:24:32.353 [DEBUG] [Thread-26166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:24:32.354 [DEBUG] [Thread-26166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:24:32.363 [DEBUG] [Thread-26166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:24:32.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:24:32.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-11-13T01:24:32.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-11-13T01:24:32.390 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:24:32.390 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:24:32.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:24:32.399 [DEBUG] [Thread-26166] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:24:37.371 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:24:37.372 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:24:41.767 [DEBUG] [Thread-26168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:24:56.815 [DEBUG] [Thread-26169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:25:02.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:25:02.422 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:25:02.424 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:25:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 24, 47), 10.04, 51.12, 0.0, 13.9, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:25:03.060 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:24:47
2025-11-13T01:25:03.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:25:03.329 [DEBUG] [Thread-26170] [transport.py] [_log()] starting thread (client mode): 0x1498b250
2025-11-13T01:25:03.330 [DEBUG] [Thread-26170] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:25:03.349 [DEBUG] [Thread-26170] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:25:03.349 [INFO] [Thread-26170] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:25:03.350 [DEBUG] [Thread-26170] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] client lang: <none>
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] server lang: <none>
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] kex follows: False
2025-11-13T01:25:03.351 [DEBUG] [Thread-26170] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:25:03.352 [DEBUG] [Thread-26170] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:25:03.352 [DEBUG] [Thread-26170] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:25:03.352 [DEBUG] [Thread-26170] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:25:03.352 [DEBUG] [Thread-26170] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:25:03.352 [DEBUG] [Thread-26170] [transport.py] [_log()] Compression: none
2025-11-13T01:25:03.352 [DEBUG] [Thread-26170] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:25:03.364 [DEBUG] [Thread-26170] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:25:03.364 [DEBUG] [Thread-26170] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:25:03.365 [DEBUG] [Thread-26170] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:25:03.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:25:03.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:25:03.367 [DEBUG] [Thread-26170] [transport.py] [_log()] userauth is OK
2025-11-13T01:25:03.367 [DEBUG] [Thread-26170] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:25:03.367 [DEBUG] [Thread-26170] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:25:03.367 [DEBUG] [Thread-26170] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:25:03.367 [DEBUG] [Thread-26170] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:25:03.391 [INFO] [Thread-26170] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:25:03.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:25:06.960 [DEBUG] [Thread-26170] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:25:06.960 [DEBUG] [Thread-26170] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:25:06.961 [DEBUG] [Thread-26170] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:25:07.001 [DEBUG] [Thread-26170] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:25:07.002 [DEBUG] [Thread-26170] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:25:07.004 [DEBUG] [Thread-26170] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:25:07.015 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:25:07.016 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:25:07.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:25:07.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:25:07.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:25:07.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:25:07.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:25:07.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:25:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:25:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.975439 -999.00  +15.10   7.75     56   +6.40 1 1 1 1 1     0    0 8.90 24.50 ZNESW 9.0 7.8 285.6 10.3 15.5 -23.7 15.4 -22.9 15.1 -22.3 15.4 -23.3
2025-11-13T01:25:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:25:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:25:07.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.975439
2025-11-13T01:25:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:25:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:25:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:25:07.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:25:07.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:25:07.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:24:47', tmtdew=10.04, humidity=51.12, cloud=0.0, wind=13.9, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:24:47', seeing=0.86, atlas_timestamp='2025-11-12T23:24:37.930', atlas_cloud=1, atlas_rain=1, zp_data=[0.030249999999998778, 0.03125, 0.028249999999999886, 0.045999999999999375, 0.09149999999999991, 0.1282500000000013, 0.03399999999999892, 0.01875000000000071, 0.041499999999999204, 0.054999999999999716, 0.11275000000000013, 0.06550000000000011, 0.15000000000000036, 0.07974999999999888, 0.06550000000000011, 0.07899999999999885, 0.06374999999999886, 0.061500000000000554, 0.13199999999999967, 0.09274999999999878, 0.13699999999999868, 0.05974999999999753, 0.034250000000000114, 0.0912500000000005, 0.08299999999999841, 0.1225000000000005, 0.12624999999999886, 0.18350000000000044, 0.21600000000000108, 0.08800000000000097, 0.13500000000000156, 0.03700000000000081, 0.17074999999999996], zp_timestamp='2025-11-12T23:23:00')
2025-11-13T01:25:07.130 [DEBUG] [Thread-26170] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:25:07.215 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:25:07.226 [DEBUG] [Thread-26173] [transport.py] [_log()] starting thread (client mode): 0x1498ac80
2025-11-13T01:25:07.226 [DEBUG] [Thread-26173] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:25:07.240 [DEBUG] [Thread-26173] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:25:07.241 [INFO] [Thread-26173] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:25:07.248 [DEBUG] [Thread-26173] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:25:07.248 [DEBUG] [Thread-26173] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:25:07.248 [DEBUG] [Thread-26173] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:25:07.248 [DEBUG] [Thread-26173] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:25:07.248 [DEBUG] [Thread-26173] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:25:07.248 [DEBUG] [Thread-26173] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:25:07.248 [DEBUG] [Thread-26173] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] client lang: <none>
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] server lang: <none>
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] kex follows: False
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] Compression: none
2025-11-13T01:25:07.249 [DEBUG] [Thread-26173] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:25:07.311 [DEBUG] [Thread-26173] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:25:07.311 [DEBUG] [Thread-26173] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:25:07.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:25:07.312 [DEBUG] [Thread-26173] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:25:07.313 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:25:07.368 [DEBUG] [Thread-26173] [transport.py] [_log()] userauth is OK
2025-11-13T01:25:07.368 [DEBUG] [Thread-26173] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:25:07.368 [DEBUG] [Thread-26173] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:25:07.369 [DEBUG] [Thread-26173] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:25:07.369 [DEBUG] [Thread-26173] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:25:07.388 [INFO] [Thread-26173] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:25:07.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:25:07.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:25:08.248 [DEBUG] [Thread-26173] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:25:08.248 [DEBUG] [Thread-26173] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:25:08.297 [DEBUG] [Thread-26173] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:25:08.298 [DEBUG] [Thread-26173] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:25:08.307 [DEBUG] [Thread-26173] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:25:08.316 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:25:08.316 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:25:08.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-11-13T01:25:08.335 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:25:08.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:25:08.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:25:08.343 [DEBUG] [Thread-26173] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:25:09.826 [DEBUG] [Thread-26175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:25:11.851 [DEBUG] [Thread-26176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:25:26.906 [DEBUG] [Thread-26177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:25:37.574 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:25:37.575 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:25:38.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:25:38.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:25:38.368 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:25:39.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 25, 19), 10.05, 51.09, 0.0, 14.65, 15.13, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:25:39.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:25:19
2025-11-13T01:25:39.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:25:39.277 [DEBUG] [Thread-26178] [transport.py] [_log()] starting thread (client mode): 0x14989cf0
2025-11-13T01:25:39.277 [DEBUG] [Thread-26178] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:25:39.298 [DEBUG] [Thread-26178] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:25:39.298 [INFO] [Thread-26178] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:25:39.300 [DEBUG] [Thread-26178] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] client lang: <none>
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] server lang: <none>
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] kex follows: False
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:25:39.301 [DEBUG] [Thread-26178] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:25:39.302 [DEBUG] [Thread-26178] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:25:39.302 [DEBUG] [Thread-26178] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:25:39.302 [DEBUG] [Thread-26178] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:25:39.302 [DEBUG] [Thread-26178] [transport.py] [_log()] Compression: none
2025-11-13T01:25:39.302 [DEBUG] [Thread-26178] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:25:39.320 [DEBUG] [Thread-26178] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:25:39.320 [DEBUG] [Thread-26178] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:25:39.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:25:39.321 [DEBUG] [Thread-26178] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:25:39.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:25:39.323 [DEBUG] [Thread-26178] [transport.py] [_log()] userauth is OK
2025-11-13T01:25:39.323 [DEBUG] [Thread-26178] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:25:39.323 [DEBUG] [Thread-26178] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:25:39.324 [DEBUG] [Thread-26178] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:25:39.324 [DEBUG] [Thread-26178] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:25:39.359 [INFO] [Thread-26178] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:25:39.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:25:39.965 [DEBUG] [Thread-26178] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:25:39.965 [DEBUG] [Thread-26178] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:25:39.965 [DEBUG] [Thread-26178] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:25:40.005 [DEBUG] [Thread-26178] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:25:40.005 [DEBUG] [Thread-26178] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:25:40.008 [DEBUG] [Thread-26178] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:25:40.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:25:40.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:25:40.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:25:40.024 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:25:40.028 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:25:40.029 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:25:40.030 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:25:40.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:25:40.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:25:40.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.975439 -999.00  +15.10   7.75     56   +6.40 1 1 1 1 1     0    0 8.90 24.50 ZNESW 9.0 7.8 285.6 10.3 15.5 -23.7 15.4 -22.9 15.1 -22.3 15.4 -23.3
2025-11-13T01:25:40.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:25:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:25:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.975439
2025-11-13T01:25:40.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:25:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:25:40.032 [DEBUG] [Thread-26178] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:25:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:25:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:25:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:25:40.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:25:19', tmtdew=10.05, humidity=51.09, cloud=0.0, wind=14.65, temperature=15.13, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:25:19', seeing=0.9, atlas_timestamp='2025-11-12T23:24:37.930', atlas_cloud=1, atlas_rain=1, zp_data=[0.030249999999998778, 0.03125, 0.028249999999999886, 0.045999999999999375, 0.09149999999999991, 0.1282500000000013, 0.03399999999999892, 0.01875000000000071, 0.041499999999999204, 0.054999999999999716, 0.11275000000000013, 0.06550000000000011, 0.15000000000000036, 0.07974999999999888, 0.06550000000000011, 0.07899999999999885, 0.06374999999999886, 0.061500000000000554, 0.13199999999999967, 0.09274999999999878, 0.13699999999999868, 0.05974999999999753, 0.034250000000000114, 0.0912500000000005, 0.08299999999999841, 0.1225000000000005, 0.12624999999999886, 0.18350000000000044, 0.21600000000000108, 0.08800000000000097, 0.13500000000000156, 0.03700000000000081, 0.17074999999999996], zp_timestamp='2025-11-12T23:23:00')
2025-11-13T01:25:40.113 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:25:40.125 [DEBUG] [Thread-26181] [transport.py] [_log()] starting thread (client mode): 0x14968d90
2025-11-13T01:25:40.126 [DEBUG] [Thread-26181] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:25:40.140 [DEBUG] [Thread-26181] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:25:40.140 [INFO] [Thread-26181] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:25:40.147 [DEBUG] [Thread-26181] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:25:40.148 [DEBUG] [Thread-26181] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:25:40.148 [DEBUG] [Thread-26181] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:25:40.148 [DEBUG] [Thread-26181] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:25:40.148 [DEBUG] [Thread-26181] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:25:40.148 [DEBUG] [Thread-26181] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:25:40.148 [DEBUG] [Thread-26181] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:25:40.148 [DEBUG] [Thread-26181] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:25:40.149 [DEBUG] [Thread-26181] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:25:40.149 [DEBUG] [Thread-26181] [transport.py] [_log()] client lang: <none>
2025-11-13T01:25:40.149 [DEBUG] [Thread-26181] [transport.py] [_log()] server lang: <none>
2025-11-13T01:25:40.149 [DEBUG] [Thread-26181] [transport.py] [_log()] kex follows: False
2025-11-13T01:25:40.149 [DEBUG] [Thread-26181] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:25:40.149 [DEBUG] [Thread-26181] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:25:40.149 [DEBUG] [Thread-26181] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:25:40.149 [DEBUG] [Thread-26181] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:25:40.150 [DEBUG] [Thread-26181] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:25:40.150 [DEBUG] [Thread-26181] [transport.py] [_log()] Compression: none
2025-11-13T01:25:40.150 [DEBUG] [Thread-26181] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:25:40.207 [DEBUG] [Thread-26181] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:25:40.208 [DEBUG] [Thread-26181] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:25:40.209 [DEBUG] [Thread-26181] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:25:40.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:25:40.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:25:40.268 [DEBUG] [Thread-26181] [transport.py] [_log()] userauth is OK
2025-11-13T01:25:40.268 [DEBUG] [Thread-26181] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:25:40.268 [DEBUG] [Thread-26181] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:25:40.268 [DEBUG] [Thread-26181] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:25:40.269 [DEBUG] [Thread-26181] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:25:40.288 [INFO] [Thread-26181] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:25:40.288 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:25:40.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:25:41.103 [DEBUG] [Thread-26181] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:25:41.103 [DEBUG] [Thread-26181] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:25:41.152 [DEBUG] [Thread-26181] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:25:41.152 [DEBUG] [Thread-26181] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:25:41.161 [DEBUG] [Thread-26181] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:25:41.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:25:41.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-11-13T01:25:41.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-11-13T01:25:41.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:25:41.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:25:41.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:25:41.198 [DEBUG] [Thread-26181] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:25:41.939 [DEBUG] [Thread-26183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:25:56.998 [DEBUG] [Thread-26184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:26:09.883 [DEBUG] [Thread-26185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:26:11.220 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:26:11.220 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:26:11.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-11-13T01:26:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 25, 51), 9.9, 51.77, 0.0, 16.66, 15.05, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:26:11.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:25:51
2025-11-13T01:26:12.006 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:26:12.029 [DEBUG] [Thread-26186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:26:12.154 [DEBUG] [Thread-26187] [transport.py] [_log()] starting thread (client mode): 0x1496afe0
2025-11-13T01:26:12.154 [DEBUG] [Thread-26187] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:26:12.172 [DEBUG] [Thread-26187] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:26:12.172 [INFO] [Thread-26187] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] client lang: <none>
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] server lang: <none>
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] kex follows: False
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] Compression: none
2025-11-13T01:26:12.175 [DEBUG] [Thread-26187] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:26:12.196 [DEBUG] [Thread-26187] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:26:12.197 [DEBUG] [Thread-26187] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:26:12.197 [DEBUG] [Thread-26187] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:26:12.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:26:12.198 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:26:12.199 [DEBUG] [Thread-26187] [transport.py] [_log()] userauth is OK
2025-11-13T01:26:12.200 [DEBUG] [Thread-26187] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:26:12.200 [DEBUG] [Thread-26187] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:26:12.200 [DEBUG] [Thread-26187] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:26:12.200 [DEBUG] [Thread-26187] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:26:12.228 [INFO] [Thread-26187] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:26:12.228 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:26:12.895 [DEBUG] [Thread-26187] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:26:12.895 [DEBUG] [Thread-26187] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:26:12.895 [DEBUG] [Thread-26187] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:26:12.935 [DEBUG] [Thread-26187] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:26:12.936 [DEBUG] [Thread-26187] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:26:12.939 [DEBUG] [Thread-26187] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:26:12.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:26:12.953 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:26:12.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:26:12.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:26:12.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:26:12.963 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:26:12.963 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:26:12.963 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:26:12.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:26:12.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.976133 -999.00  +15.10  11.48     56   +6.60 1 1 1 1 1     0    0 8.89 17.35 ZNESW 11.4 11.5 267.4 15.7 15.4 -23.8 15.3 -22.9 15.1 -22.5 15.3 -23.2
2025-11-13T01:26:12.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:26:12.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:26:12.964 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.976133
2025-11-13T01:26:12.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:26:12.965 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:26:12.966 [DEBUG] [Thread-26187] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:26:12.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:26:12.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:26:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:26:12.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:25:51', tmtdew=9.9, humidity=51.77, cloud=0.0, wind=16.66, temperature=15.05, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:25:51', seeing=0.9, atlas_timestamp='2025-11-12T23:25:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.030249999999998778, 0.03125, 0.028249999999999886, 0.045999999999999375, 0.09149999999999991, 0.1282500000000013, 0.03399999999999892, 0.01875000000000071, 0.041499999999999204, 0.054999999999999716, 0.11275000000000013, 0.06550000000000011, 0.15000000000000036, 0.07974999999999888, 0.06550000000000011, 0.07899999999999885, 0.06374999999999886, 0.061500000000000554, 0.13199999999999967, 0.09274999999999878, 0.13699999999999868, 0.05974999999999753, 0.034250000000000114, 0.0912500000000005, 0.08299999999999841, 0.1225000000000005, 0.12624999999999886, 0.18350000000000044, 0.21600000000000108, 0.08800000000000097, 0.13500000000000156, 0.03700000000000081, 0.17074999999999996], zp_timestamp='2025-11-12T23:23:00')
2025-11-13T01:26:13.050 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:26:13.062 [DEBUG] [Thread-26190] [transport.py] [_log()] starting thread (client mode): 0x1496bee0
2025-11-13T01:26:13.063 [DEBUG] [Thread-26190] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:26:13.080 [DEBUG] [Thread-26190] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:26:13.081 [INFO] [Thread-26190] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:26:13.091 [DEBUG] [Thread-26190] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] client lang: <none>
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] server lang: <none>
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] kex follows: False
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:26:13.092 [DEBUG] [Thread-26190] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:26:13.093 [DEBUG] [Thread-26190] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:26:13.093 [DEBUG] [Thread-26190] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:26:13.093 [DEBUG] [Thread-26190] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:26:13.093 [DEBUG] [Thread-26190] [transport.py] [_log()] Compression: none
2025-11-13T01:26:13.093 [DEBUG] [Thread-26190] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:26:13.152 [DEBUG] [Thread-26190] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:26:13.152 [DEBUG] [Thread-26190] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:26:13.153 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:26:13.153 [DEBUG] [Thread-26190] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:26:13.154 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:26:13.208 [DEBUG] [Thread-26190] [transport.py] [_log()] userauth is OK
2025-11-13T01:26:13.208 [DEBUG] [Thread-26190] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:26:13.208 [DEBUG] [Thread-26190] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:26:13.208 [DEBUG] [Thread-26190] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:26:13.208 [DEBUG] [Thread-26190] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:26:13.229 [INFO] [Thread-26190] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:26:13.229 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:26:13.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:26:14.105 [DEBUG] [Thread-26190] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:26:14.105 [DEBUG] [Thread-26190] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:26:14.154 [DEBUG] [Thread-26190] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:26:14.154 [DEBUG] [Thread-26190] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:26:14.163 [DEBUG] [Thread-26190] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:26:14.173 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:26:14.173 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:26:14.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-11-13T01:26:14.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:26:14.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:26:14.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:26:14.201 [DEBUG] [Thread-26190] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:26:27.059 [DEBUG] [Thread-26192 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:26:37.776 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:26:37.777 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:26:42.110 [DEBUG] [Thread-26193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:26:44.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:26:44.223 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:26:44.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-11-13T01:26:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 26, 23), 9.82, 52.02, 0.0, 16.07, 15.0, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:26:44.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:26:23
2025-11-13T01:26:45.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:26:45.194 [DEBUG] [Thread-26194] [transport.py] [_log()] starting thread (client mode): 0x1498a260
2025-11-13T01:26:45.194 [DEBUG] [Thread-26194] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:26:45.214 [DEBUG] [Thread-26194] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:26:45.214 [INFO] [Thread-26194] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] client lang: <none>
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] server lang: <none>
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] kex follows: False
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] Compression: none
2025-11-13T01:26:45.217 [DEBUG] [Thread-26194] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:26:45.234 [DEBUG] [Thread-26194] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:26:45.235 [DEBUG] [Thread-26194] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:26:45.235 [DEBUG] [Thread-26194] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:26:45.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:26:45.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:26:45.236 [DEBUG] [Thread-26194] [transport.py] [_log()] userauth is OK
2025-11-13T01:26:45.236 [DEBUG] [Thread-26194] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:26:45.236 [DEBUG] [Thread-26194] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:26:45.236 [DEBUG] [Thread-26194] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:26:45.236 [DEBUG] [Thread-26194] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:26:45.254 [INFO] [Thread-26194] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:26:45.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:26:45.900 [DEBUG] [Thread-26194] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:26:45.900 [DEBUG] [Thread-26194] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:26:45.900 [DEBUG] [Thread-26194] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:26:45.941 [DEBUG] [Thread-26194] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:26:45.941 [DEBUG] [Thread-26194] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:26:45.944 [DEBUG] [Thread-26194] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:26:45.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:26:45.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:26:45.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:26:45.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:26:45.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:26:45.962 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:26:45.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:26:45.962 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:26:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:26:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.976480 -999.00  +15.10   9.48     57   +6.70 1 1 1 1 1     0    0 8.86 16.18 ZNESW 8.4 9.5 273.5 13.2 15.4 -23.9 15.3 -22.8 15.1 -22.4 15.3 -23.3
2025-11-13T01:26:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:26:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:26:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.976480
2025-11-13T01:26:45.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:26:45.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:26:45.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:26:45.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:26:45.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:26:45.963 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:26:23', tmtdew=9.82, humidity=52.02, cloud=0.0, wind=16.07, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:26:23', seeing=0.9, atlas_timestamp='2025-11-12T23:26:07.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.030249999999998778, 0.03125, 0.028249999999999886, 0.045999999999999375, 0.09149999999999991, 0.1282500000000013, 0.03399999999999892, 0.01875000000000071, 0.041499999999999204, 0.054999999999999716, 0.11275000000000013, 0.06550000000000011, 0.15000000000000036, 0.07974999999999888, 0.06550000000000011, 0.07899999999999885, 0.06374999999999886, 0.061500000000000554, 0.13199999999999967, 0.09274999999999878, 0.13699999999999868, 0.05974999999999753, 0.034250000000000114, 0.0912500000000005, 0.08299999999999841, 0.1225000000000005, 0.12624999999999886, 0.18350000000000044, 0.21600000000000108, 0.08800000000000097, 0.13500000000000156, 0.03700000000000081, 0.17074999999999996], zp_timestamp='2025-11-12T23:23:00')
2025-11-13T01:26:45.963 [DEBUG] [Thread-26194] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:26:46.037 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:26:46.049 [DEBUG] [Thread-26197] [transport.py] [_log()] starting thread (client mode): 0x1498a290
2025-11-13T01:26:46.049 [DEBUG] [Thread-26197] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:26:46.064 [DEBUG] [Thread-26197] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:26:46.064 [INFO] [Thread-26197] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] client lang: <none>
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] server lang: <none>
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] kex follows: False
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] Compression: none
2025-11-13T01:26:46.072 [DEBUG] [Thread-26197] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:26:46.130 [DEBUG] [Thread-26197] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:26:46.130 [DEBUG] [Thread-26197] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:26:46.130 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:26:46.131 [DEBUG] [Thread-26197] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:26:46.131 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:26:46.188 [DEBUG] [Thread-26197] [transport.py] [_log()] userauth is OK
2025-11-13T01:26:46.188 [DEBUG] [Thread-26197] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:26:46.188 [DEBUG] [Thread-26197] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:26:46.188 [DEBUG] [Thread-26197] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:26:46.188 [DEBUG] [Thread-26197] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:26:46.203 [INFO] [Thread-26197] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:26:46.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:26:46.203 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:26:47.058 [DEBUG] [Thread-26197] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:26:47.058 [DEBUG] [Thread-26197] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:26:47.106 [DEBUG] [Thread-26197] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:26:47.106 [DEBUG] [Thread-26197] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:26:47.114 [DEBUG] [Thread-26197] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:26:47.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:26:47.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-11-13T01:26:47.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:26:47.137 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:26:47.137 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:26:47.138 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:26:47.145 [DEBUG] [Thread-26197] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:26:57.137 [DEBUG] [Thread-26199 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:27:09.941 [DEBUG] [Thread-26200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:27:12.178 [DEBUG] [Thread-26201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:27:17.161 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:27:17.161 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:27:17.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-11-13T01:27:17.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 26, 55), 9.63, 52.69, 0.0, 16.85, 15.0, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:27:17.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:26:55
2025-11-13T01:27:17.943 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:27:18.091 [DEBUG] [Thread-26202] [transport.py] [_log()] starting thread (client mode): 0x1498ac80
2025-11-13T01:27:18.092 [DEBUG] [Thread-26202] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:27:18.112 [DEBUG] [Thread-26202] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:27:18.112 [INFO] [Thread-26202] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] client lang: <none>
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] server lang: <none>
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] kex follows: False
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] Compression: none
2025-11-13T01:27:18.115 [DEBUG] [Thread-26202] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:27:18.133 [DEBUG] [Thread-26202] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:27:18.133 [DEBUG] [Thread-26202] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:27:18.134 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:27:18.134 [DEBUG] [Thread-26202] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:27:18.135 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:27:18.177 [DEBUG] [Thread-26202] [transport.py] [_log()] userauth is OK
2025-11-13T01:27:18.177 [DEBUG] [Thread-26202] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:27:18.177 [DEBUG] [Thread-26202] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:27:18.177 [DEBUG] [Thread-26202] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:27:18.178 [DEBUG] [Thread-26202] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:27:18.205 [INFO] [Thread-26202] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:27:18.206 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:27:18.835 [DEBUG] [Thread-26202] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:27:18.835 [DEBUG] [Thread-26202] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:27:18.835 [DEBUG] [Thread-26202] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:27:18.876 [DEBUG] [Thread-26202] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:27:18.876 [DEBUG] [Thread-26202] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:27:18.880 [DEBUG] [Thread-26202] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:27:18.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:27:18.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:27:18.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:27:18.896 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:27:18.902 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:27:18.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:27:18.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:27:18.904 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:27:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:27:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.976828 -999.00  +15.10   7.24     57   +6.80 1 1 1 1 1     0    0 8.88 14.73 ZNESW 7.1 7.2 279.0 11.7 15.4 -23.9 15.3 -22.9 15.1 -22.5 15.3 -23.3
2025-11-13T01:27:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:27:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:27:18.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.976828
2025-11-13T01:27:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:27:18.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:27:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:27:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:27:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:27:18.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:26:55', tmtdew=9.63, humidity=52.69, cloud=0.0, wind=16.85, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:26:55', seeing=1.05, atlas_timestamp='2025-11-12T23:26:37.939', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.011250000000000426, 0.08025000000000126, 0.04749999999999943, 0.04800000000000004, 0.0912500000000005, 0.011999999999998678, -0.011749999999999261, -0.0065000000000008384, 0.042500000000000426, 0.07324999999999982, 0.06600000000000072, 0.11899999999999977, 0.03775000000000084, -0.01950000000000074, 0.018000000000000682, 0.02725000000000044, 0.067499999999999, 0.129999999999999, 0.10124999999999851, 0.07599999999999874, 0.035749999999998394, -0.019249999999999545, -0.010749999999999815, 0.053999999999998494, 0.0495000000000001, 0.06574999999999953, 0.19250000000000078, 0.14000000000000057, 0.0470000000000006, 0.05450000000000088, 0.006000000000000227, 0.12424999999999997], zp_timestamp='2025-11-12T23:26:00')
2025-11-13T01:27:18.906 [DEBUG] [Thread-26202] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:27:18.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:27:19.001 [DEBUG] [Thread-26205] [transport.py] [_log()] starting thread (client mode): 0x1496a290
2025-11-13T01:27:19.002 [DEBUG] [Thread-26205] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:27:19.016 [DEBUG] [Thread-26205] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:27:19.016 [INFO] [Thread-26205] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:27:19.023 [DEBUG] [Thread-26205] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:27:19.023 [DEBUG] [Thread-26205] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] client lang: <none>
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] server lang: <none>
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] kex follows: False
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] Compression: none
2025-11-13T01:27:19.024 [DEBUG] [Thread-26205] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:27:19.084 [DEBUG] [Thread-26205] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:27:19.085 [DEBUG] [Thread-26205] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:27:19.085 [DEBUG] [Thread-26205] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:27:19.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:27:19.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:27:19.139 [DEBUG] [Thread-26205] [transport.py] [_log()] userauth is OK
2025-11-13T01:27:19.140 [DEBUG] [Thread-26205] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:27:19.140 [DEBUG] [Thread-26205] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:27:19.140 [DEBUG] [Thread-26205] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:27:19.140 [DEBUG] [Thread-26205] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:27:19.159 [INFO] [Thread-26205] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:27:19.159 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:27:19.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:27:19.949 [DEBUG] [Thread-26205] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:27:19.949 [DEBUG] [Thread-26205] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:27:19.998 [DEBUG] [Thread-26205] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:27:19.998 [DEBUG] [Thread-26205] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:27:20.007 [DEBUG] [Thread-26205] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:27:20.017 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:27:20.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-11-13T01:27:20.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-11-13T01:27:20.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:27:20.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:27:20.036 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:27:20.044 [DEBUG] [Thread-26205] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:27:27.212 [DEBUG] [Thread-26207 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:27:37.980 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:27:37.981 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:27:42.267 [DEBUG] [Thread-26208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:27:50.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:27:50.050 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:27:50.053 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:27:50.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 27, 27), 9.49, 53.18, 0.0, 16.46, 15.0, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:27:50.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:27:27
2025-11-13T01:27:50.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:27:50.976 [DEBUG] [Thread-26209] [transport.py] [_log()] starting thread (client mode): 0x1496ac50
2025-11-13T01:27:50.977 [DEBUG] [Thread-26209] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:27:50.997 [DEBUG] [Thread-26209] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:27:50.997 [INFO] [Thread-26209] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:27:51.000 [DEBUG] [Thread-26209] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] client lang: <none>
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] server lang: <none>
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] kex follows: False
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] Compression: none
2025-11-13T01:27:51.001 [DEBUG] [Thread-26209] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:27:51.018 [DEBUG] [Thread-26209] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:27:51.019 [DEBUG] [Thread-26209] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:27:51.019 [DEBUG] [Thread-26209] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:27:51.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:27:51.020 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:27:51.022 [DEBUG] [Thread-26209] [transport.py] [_log()] userauth is OK
2025-11-13T01:27:51.022 [DEBUG] [Thread-26209] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:27:51.022 [DEBUG] [Thread-26209] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:27:51.022 [DEBUG] [Thread-26209] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:27:51.022 [DEBUG] [Thread-26209] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:27:51.059 [INFO] [Thread-26209] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:27:51.060 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:27:51.693 [DEBUG] [Thread-26209] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:27:51.693 [DEBUG] [Thread-26209] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:27:51.694 [DEBUG] [Thread-26209] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:27:51.735 [DEBUG] [Thread-26209] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:27:51.735 [DEBUG] [Thread-26209] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:27:51.738 [DEBUG] [Thread-26209] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:27:51.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:27:51.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:27:51.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:27:51.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:27:51.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:27:51.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:27:51.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:27:51.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:27:51.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:27:51.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.977175 -999.00  +15.10   7.65     58   +6.90 1 1 1 1 1     0    0 8.83 12.59 ZNESW 6.1 7.7 270.1 10.1 15.4 -23.9 15.3 -22.9 15.0 -22.5 15.3 -23.4
2025-11-13T01:27:51.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:27:51.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:27:51.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.977175
2025-11-13T01:27:51.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:27:51.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:27:51.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:27:51.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:27:51.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:27:51.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:27:27', tmtdew=9.49, humidity=53.18, cloud=0.0, wind=16.46, temperature=15.0, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:27:27', seeing=0.9, atlas_timestamp='2025-11-12T23:27:07.920', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.011250000000000426, 0.08025000000000126, 0.04749999999999943, 0.04800000000000004, 0.0912500000000005, 0.011999999999998678, -0.011749999999999261, -0.0065000000000008384, 0.042500000000000426, 0.07324999999999982, 0.06600000000000072, 0.11899999999999977, 0.03775000000000084, -0.01950000000000074, 0.018000000000000682, 0.02725000000000044, 0.067499999999999, 0.129999999999999, 0.10124999999999851, 0.07599999999999874, 0.035749999999998394, -0.019249999999999545, -0.010749999999999815, 0.053999999999998494, 0.0495000000000001, 0.06574999999999953, 0.19250000000000078, 0.14000000000000057, 0.0470000000000006, 0.05450000000000088, 0.006000000000000227, 0.12424999999999997], zp_timestamp='2025-11-12T23:26:00')
2025-11-13T01:27:51.768 [DEBUG] [Thread-26209] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:27:51.861 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:27:51.874 [DEBUG] [Thread-26212] [transport.py] [_log()] starting thread (client mode): 0x1496b280
2025-11-13T01:27:51.875 [DEBUG] [Thread-26212] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:27:51.891 [DEBUG] [Thread-26212] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:27:51.891 [INFO] [Thread-26212] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:27:51.899 [DEBUG] [Thread-26212] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:27:51.899 [DEBUG] [Thread-26212] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:27:51.899 [DEBUG] [Thread-26212] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] client lang: <none>
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] server lang: <none>
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] kex follows: False
2025-11-13T01:27:51.900 [DEBUG] [Thread-26212] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:27:51.901 [DEBUG] [Thread-26212] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:27:51.901 [DEBUG] [Thread-26212] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:27:51.901 [DEBUG] [Thread-26212] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:27:51.901 [DEBUG] [Thread-26212] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:27:51.901 [DEBUG] [Thread-26212] [transport.py] [_log()] Compression: none
2025-11-13T01:27:51.901 [DEBUG] [Thread-26212] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:27:51.960 [DEBUG] [Thread-26212] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:27:51.960 [DEBUG] [Thread-26212] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:27:51.961 [DEBUG] [Thread-26212] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:27:51.961 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:27:51.962 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:27:52.016 [DEBUG] [Thread-26212] [transport.py] [_log()] userauth is OK
2025-11-13T01:27:52.016 [DEBUG] [Thread-26212] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:27:52.016 [DEBUG] [Thread-26212] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:27:52.016 [DEBUG] [Thread-26212] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:27:52.017 [DEBUG] [Thread-26212] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:27:52.036 [INFO] [Thread-26212] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:27:52.036 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:27:52.036 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:27:52.867 [DEBUG] [Thread-26212] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:27:52.867 [DEBUG] [Thread-26212] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:27:52.915 [DEBUG] [Thread-26212] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:27:52.916 [DEBUG] [Thread-26212] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:27:52.925 [DEBUG] [Thread-26212] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:27:52.934 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:27:52.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-11-13T01:27:52.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-11-13T01:27:52.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:27:52.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:27:52.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:27:52.962 [DEBUG] [Thread-26212] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:27:57.304 [DEBUG] [Thread-26214 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:28:10.009 [DEBUG] [Thread-26215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:28:12.365 [DEBUG] [Thread-26216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:28:22.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:28:22.956 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:28:22.958 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:28:23.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 27, 59), 9.3, 53.85, 0.0, 16.59, 14.97, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:28:23.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:27:59
2025-11-13T01:28:23.709 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:28:23.857 [DEBUG] [Thread-26217] [transport.py] [_log()] starting thread (client mode): 0x1496bbe0
2025-11-13T01:28:23.857 [DEBUG] [Thread-26217] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:28:23.877 [DEBUG] [Thread-26217] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:28:23.877 [INFO] [Thread-26217] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] client lang: <none>
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] server lang: <none>
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] kex follows: False
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] Compression: none
2025-11-13T01:28:23.879 [DEBUG] [Thread-26217] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:28:23.897 [DEBUG] [Thread-26217] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:28:23.897 [DEBUG] [Thread-26217] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:28:23.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:28:23.898 [DEBUG] [Thread-26217] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:28:23.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:28:23.899 [DEBUG] [Thread-26217] [transport.py] [_log()] userauth is OK
2025-11-13T01:28:23.900 [DEBUG] [Thread-26217] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:28:23.900 [DEBUG] [Thread-26217] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:28:23.900 [DEBUG] [Thread-26217] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:28:23.900 [DEBUG] [Thread-26217] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:28:23.917 [INFO] [Thread-26217] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:28:23.918 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:28:24.538 [DEBUG] [Thread-26217] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:28:24.538 [DEBUG] [Thread-26217] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:28:24.538 [DEBUG] [Thread-26217] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:28:24.579 [DEBUG] [Thread-26217] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:28:24.579 [DEBUG] [Thread-26217] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:28:24.582 [DEBUG] [Thread-26217] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:28:24.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:28:24.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:28:24.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:28:24.597 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:28:24.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:28:24.604 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:28:24.604 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:28:24.604 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:28:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:28:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.977522 -999.00  +15.10   7.02     58   +7.00 1 1 1 1 1     0    0 8.74 10.53 ZNESW 9.9 7.0 273.4 11.5 15.4 -23.9 15.3 -22.9 15.0 -22.5 15.3 -23.3
2025-11-13T01:28:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:28:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:28:24.605 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.977522
2025-11-13T01:28:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:28:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:28:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:28:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:28:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:28:24.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:27:59', tmtdew=9.3, humidity=53.85, cloud=0.0, wind=16.59, temperature=14.97, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:27:59', seeing=0.9, atlas_timestamp='2025-11-12T23:27:37.901', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.011250000000000426, 0.08025000000000126, 0.04749999999999943, 0.04800000000000004, 0.0912500000000005, 0.011999999999998678, -0.011749999999999261, -0.0065000000000008384, 0.042500000000000426, 0.07324999999999982, 0.06600000000000072, 0.11899999999999977, 0.03775000000000084, -0.01950000000000074, 0.018000000000000682, 0.02725000000000044, 0.067499999999999, 0.129999999999999, 0.10124999999999851, 0.07599999999999874, 0.035749999999998394, -0.019249999999999545, -0.010749999999999815, 0.053999999999998494, 0.0495000000000001, 0.06574999999999953, 0.19250000000000078, 0.14000000000000057, 0.0470000000000006, 0.05450000000000088, 0.006000000000000227, 0.12424999999999997], zp_timestamp='2025-11-12T23:26:00')
2025-11-13T01:28:24.607 [DEBUG] [Thread-26217] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:28:24.691 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:28:24.703 [DEBUG] [Thread-26220] [transport.py] [_log()] starting thread (client mode): 0x14947370
2025-11-13T01:28:24.703 [DEBUG] [Thread-26220] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:28:24.717 [DEBUG] [Thread-26220] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:28:24.718 [INFO] [Thread-26220] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] client lang: <none>
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] server lang: <none>
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] kex follows: False
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:28:24.725 [DEBUG] [Thread-26220] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:28:24.726 [DEBUG] [Thread-26220] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:28:24.726 [DEBUG] [Thread-26220] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:28:24.726 [DEBUG] [Thread-26220] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:28:24.726 [DEBUG] [Thread-26220] [transport.py] [_log()] Compression: none
2025-11-13T01:28:24.726 [DEBUG] [Thread-26220] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:28:24.783 [DEBUG] [Thread-26220] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:28:24.783 [DEBUG] [Thread-26220] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:28:24.784 [DEBUG] [Thread-26220] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:28:24.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:28:24.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:28:24.839 [DEBUG] [Thread-26220] [transport.py] [_log()] userauth is OK
2025-11-13T01:28:24.839 [DEBUG] [Thread-26220] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:28:24.839 [DEBUG] [Thread-26220] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:28:24.839 [DEBUG] [Thread-26220] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:28:24.840 [DEBUG] [Thread-26220] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:28:24.858 [INFO] [Thread-26220] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:28:24.859 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:28:24.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:28:25.712 [DEBUG] [Thread-26220] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:28:25.713 [DEBUG] [Thread-26220] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:28:25.760 [DEBUG] [Thread-26220] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:28:25.760 [DEBUG] [Thread-26220] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:28:25.769 [DEBUG] [Thread-26220] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:28:25.777 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:28:25.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-11-13T01:28:25.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-11-13T01:28:25.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:28:25.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:28:25.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:28:25.802 [DEBUG] [Thread-26220] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:28:27.403 [DEBUG] [Thread-26222 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:28:38.184 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:28:38.185 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:28:42.446 [DEBUG] [Thread-26223 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:28:55.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:28:55.825 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:28: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-11-13T01:28:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 28, 31), 9.27, 53.93, 0.0, 16.57, 14.92, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:28:56.472 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:28:31
2025-11-13T01:28:56.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:28:56.741 [DEBUG] [Thread-26224] [transport.py] [_log()] starting thread (client mode): 0x1496a770
2025-11-13T01:28:56.741 [DEBUG] [Thread-26224] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:28:56.762 [DEBUG] [Thread-26224] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:28:56.762 [INFO] [Thread-26224] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:28:56.765 [DEBUG] [Thread-26224] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:28:56.765 [DEBUG] [Thread-26224] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] client lang: <none>
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] server lang: <none>
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] kex follows: False
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] Compression: none
2025-11-13T01:28:56.766 [DEBUG] [Thread-26224] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:28:56.783 [DEBUG] [Thread-26224] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:28:56.784 [DEBUG] [Thread-26224] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:28:56.784 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:28:56.785 [DEBUG] [Thread-26224] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:28:56.785 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:28:56.787 [DEBUG] [Thread-26224] [transport.py] [_log()] userauth is OK
2025-11-13T01:28:56.787 [DEBUG] [Thread-26224] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:28:56.787 [DEBUG] [Thread-26224] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:28:56.787 [DEBUG] [Thread-26224] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:28:56.787 [DEBUG] [Thread-26224] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:28:56.812 [INFO] [Thread-26224] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:28:56.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:28:57.428 [DEBUG] [Thread-26224] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:28:57.428 [DEBUG] [Thread-26224] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:28:57.429 [DEBUG] [Thread-26224] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:28:57.469 [DEBUG] [Thread-26224] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:28:57.470 [DEBUG] [Thread-26224] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:28:57.473 [DEBUG] [Thread-26224] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:28:57.483 [DEBUG] [Thread-26226 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:28:57.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:28:57.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:28:57.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:28:57.488 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:28:57.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:28:57.496 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:28:57.497 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:28:57.497 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:28:57.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:28:57.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.977869 -999.00  +15.00   7.77     58   +6.90 1 1 1 1 1     0    0 8.74 8.36 ZNESW 9.5 7.8 288.8 12.2 15.4 -24.0 15.3 -22.9 15.0 -22.4 15.3 -23.3
2025-11-13T01:28:57.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:28:57.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:28:57.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.977869
2025-11-13T01:28:57.498 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:28:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:28:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:28:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:28:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:28:57.499 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:28:31', tmtdew=9.27, humidity=53.93, cloud=0.0, wind=16.57, temperature=14.92, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:28:31', seeing=1.07, atlas_timestamp='2025-11-12T23:28:07.882', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.011250000000000426, 0.08025000000000126, 0.04749999999999943, 0.04800000000000004, 0.0912500000000005, 0.011999999999998678, -0.011749999999999261, -0.0065000000000008384, 0.042500000000000426, 0.07324999999999982, 0.06600000000000072, 0.11899999999999977, 0.03775000000000084, -0.01950000000000074, 0.018000000000000682, 0.02725000000000044, 0.067499999999999, 0.129999999999999, 0.10124999999999851, 0.07599999999999874, 0.035749999999998394, -0.019249999999999545, -0.010749999999999815, 0.053999999999998494, 0.0495000000000001, 0.06574999999999953, 0.19250000000000078, 0.14000000000000057, 0.0470000000000006, 0.05450000000000088, 0.006000000000000227, 0.12424999999999997], zp_timestamp='2025-11-12T23:26:00')
2025-11-13T01:28:57.499 [DEBUG] [Thread-26224] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:28:57.582 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:28:57.595 [DEBUG] [Thread-26228] [transport.py] [_log()] starting thread (client mode): 0x19dda410
2025-11-13T01:28:57.595 [DEBUG] [Thread-26228] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:28:57.611 [DEBUG] [Thread-26228] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:28:57.611 [INFO] [Thread-26228] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:28:57.618 [DEBUG] [Thread-26228] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:28:57.618 [DEBUG] [Thread-26228] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] client lang: <none>
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] server lang: <none>
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] kex follows: False
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] Compression: none
2025-11-13T01:28:57.619 [DEBUG] [Thread-26228] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:28:57.676 [DEBUG] [Thread-26228] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:28:57.677 [DEBUG] [Thread-26228] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:28:57.677 [DEBUG] [Thread-26228] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:28:57.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:28:57.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:28:57.732 [DEBUG] [Thread-26228] [transport.py] [_log()] userauth is OK
2025-11-13T01:28:57.732 [DEBUG] [Thread-26228] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:28:57.732 [DEBUG] [Thread-26228] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:28:57.732 [DEBUG] [Thread-26228] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:28:57.733 [DEBUG] [Thread-26228] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:28:57.757 [INFO] [Thread-26228] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:28:57.758 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:28:57.758 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:28:58.593 [DEBUG] [Thread-26228] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:28:58.593 [DEBUG] [Thread-26228] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:28:58.642 [DEBUG] [Thread-26228] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:28:58.642 [DEBUG] [Thread-26228] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:28:58.651 [DEBUG] [Thread-26228] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:28:58.660 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:28:58.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-11-13T01:28:58.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-11-13T01:28:58.679 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:28:58.679 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:28:58.680 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:28:58.688 [DEBUG] [Thread-26228] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:29:10.066 [DEBUG] [Thread-26230 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:29:12.518 [DEBUG] [Thread-26231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:29:27.568 [DEBUG] [Thread-26232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:29:28.710 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:29:28.710 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:29:28.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-11-13T01:29:29.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 29, 3), 9.26, 53.98, 0.0, 16.2, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:29:29.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:29:03
2025-11-13T01:29:29.470 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:29:29.615 [DEBUG] [Thread-26233] [transport.py] [_log()] starting thread (client mode): 0x1493e4a0
2025-11-13T01:29:29.615 [DEBUG] [Thread-26233] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:29:29.636 [DEBUG] [Thread-26233] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:29:29.636 [INFO] [Thread-26233] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] client lang: <none>
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] server lang: <none>
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] kex follows: False
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] Compression: none
2025-11-13T01:29:29.637 [DEBUG] [Thread-26233] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:29:29.654 [DEBUG] [Thread-26233] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:29:29.654 [DEBUG] [Thread-26233] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:29:29.655 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:29:29.655 [DEBUG] [Thread-26233] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:29:29.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:29:29.657 [DEBUG] [Thread-26233] [transport.py] [_log()] userauth is OK
2025-11-13T01:29:29.658 [DEBUG] [Thread-26233] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:29:29.658 [DEBUG] [Thread-26233] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:29:29.658 [DEBUG] [Thread-26233] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:29:29.658 [DEBUG] [Thread-26233] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:29:29.683 [INFO] [Thread-26233] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:29:29.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:29:30.313 [DEBUG] [Thread-26233] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:29:30.313 [DEBUG] [Thread-26233] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:29:30.314 [DEBUG] [Thread-26233] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:29:30.354 [DEBUG] [Thread-26233] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:29:30.354 [DEBUG] [Thread-26233] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:29:30.357 [DEBUG] [Thread-26233] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:29:30.371 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:29:30.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:29:30.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:29:30.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:29:30.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:29:30.384 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:29:30.384 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:29:30.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:29:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:29:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.978564 -999.00  +14.90  11.29     58   +6.90 1 1 1 1 1     0    0 8.55 4.47 ZNESW 14.4 11.3 263.4 17.8 15.4 -23.9 15.3 -22.9 15.0 -22.5 15.3 -23.3
2025-11-13T01:29:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:29:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:29:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.978564
2025-11-13T01:29:30.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:29:30.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:29:30.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:29:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:29:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:29:30.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:29:03', tmtdew=9.26, humidity=53.98, cloud=0.0, wind=16.2, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:29:03', seeing=0.95, atlas_timestamp='2025-11-12T23:29:07.930', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.011250000000000426, 0.08025000000000126, 0.04749999999999943, 0.04800000000000004, 0.0912500000000005, 0.011999999999998678, -0.011749999999999261, -0.0065000000000008384, 0.042500000000000426, 0.07324999999999982, 0.06600000000000072, 0.11899999999999977, 0.03775000000000084, -0.01950000000000074, 0.018000000000000682, 0.02725000000000044, 0.067499999999999, 0.129999999999999, 0.10124999999999851, 0.07599999999999874, 0.035749999999998394, -0.019249999999999545, -0.010749999999999815, 0.053999999999998494, 0.0495000000000001, 0.06574999999999953, 0.19250000000000078, 0.14000000000000057, 0.0470000000000006, 0.05450000000000088, 0.006000000000000227, 0.12424999999999997], zp_timestamp='2025-11-12T23:26:00')
2025-11-13T01:29:30.387 [DEBUG] [Thread-26233] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:29:30.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:29:30.483 [DEBUG] [Thread-26236] [transport.py] [_log()] starting thread (client mode): 0x1493fbe0
2025-11-13T01:29:30.483 [DEBUG] [Thread-26236] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:29:30.499 [DEBUG] [Thread-26236] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:29:30.499 [INFO] [Thread-26236] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:29:30.507 [DEBUG] [Thread-26236] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:29:30.507 [DEBUG] [Thread-26236] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:29:30.507 [DEBUG] [Thread-26236] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:29:30.507 [DEBUG] [Thread-26236] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] client lang: <none>
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] server lang: <none>
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] kex follows: False
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:29:30.508 [DEBUG] [Thread-26236] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:29:30.509 [DEBUG] [Thread-26236] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:29:30.509 [DEBUG] [Thread-26236] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:29:30.509 [DEBUG] [Thread-26236] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:29:30.509 [DEBUG] [Thread-26236] [transport.py] [_log()] Compression: none
2025-11-13T01:29:30.509 [DEBUG] [Thread-26236] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:29:30.571 [DEBUG] [Thread-26236] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:29:30.571 [DEBUG] [Thread-26236] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:29:30.572 [DEBUG] [Thread-26236] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:29:30.572 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:29:30.573 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:29:30.628 [DEBUG] [Thread-26236] [transport.py] [_log()] userauth is OK
2025-11-13T01:29:30.629 [DEBUG] [Thread-26236] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:29:30.629 [DEBUG] [Thread-26236] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:29:30.629 [DEBUG] [Thread-26236] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:29:30.629 [DEBUG] [Thread-26236] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:29:30.651 [INFO] [Thread-26236] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:29:30.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:29:30.652 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:29:31.477 [DEBUG] [Thread-26236] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:29:31.477 [DEBUG] [Thread-26236] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:29:31.525 [DEBUG] [Thread-26236] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:29:31.525 [DEBUG] [Thread-26236] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:29:31.534 [DEBUG] [Thread-26236] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:29:31.543 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:29:31.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-11-13T01:29:31.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-11-13T01:29:31.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:29:31.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:29:31.563 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:29:31.571 [DEBUG] [Thread-26236] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:29:38.387 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:29:38.388 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:29:42.606 [DEBUG] [Thread-26238 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:29:57.654 [DEBUG] [Thread-26239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:30:01.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:30:01.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:30:01.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-11-13T01:30:02.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 29, 35), 9.3, 53.5, 0.0, 16.62, 14.8, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:30:02.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:29:35
2025-11-13T01:30:02.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:30:02.575 [DEBUG] [Thread-26240] [transport.py] [_log()] starting thread (client mode): 0x19ddbca0
2025-11-13T01:30:02.575 [DEBUG] [Thread-26240] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:30:02.595 [DEBUG] [Thread-26240] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:30:02.596 [INFO] [Thread-26240] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:30:02.598 [DEBUG] [Thread-26240] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] client lang: <none>
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] server lang: <none>
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] kex follows: False
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:30:02.599 [DEBUG] [Thread-26240] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:30:02.600 [DEBUG] [Thread-26240] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:30:02.600 [DEBUG] [Thread-26240] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:30:02.600 [DEBUG] [Thread-26240] [transport.py] [_log()] Compression: none
2025-11-13T01:30:02.600 [DEBUG] [Thread-26240] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:30:02.614 [DEBUG] [Thread-26240] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:30:02.615 [DEBUG] [Thread-26240] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:30:02.615 [DEBUG] [Thread-26240] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:30:02.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:30:02.616 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:30:02.617 [DEBUG] [Thread-26240] [transport.py] [_log()] userauth is OK
2025-11-13T01:30:02.617 [DEBUG] [Thread-26240] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:30:02.617 [DEBUG] [Thread-26240] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:30:02.617 [DEBUG] [Thread-26240] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:30:02.618 [DEBUG] [Thread-26240] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:30:02.637 [INFO] [Thread-26240] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:30:02.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:30:06.124 [DEBUG] [Thread-26240] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:30:06.124 [DEBUG] [Thread-26240] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:30:06.125 [DEBUG] [Thread-26240] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:30:06.165 [DEBUG] [Thread-26240] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:30:06.165 [DEBUG] [Thread-26240] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:30:06.167 [DEBUG] [Thread-26240] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:30:06.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:30:06.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:30:06.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:30:06.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:30:06.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:30:06.189 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:30:06.189 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:30:06.189 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:30:06.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:30:06.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.978911 -999.00  +14.90  10.55     58   +6.90 1 1 1 1 1     0    0 8.59 2.09 ZNESW 6.8 10.6 276.2 16.6 15.4 -23.9 15.3 -22.9 15.0 -22.6 15.3 -23.3
2025-11-13T01:30:06.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:30:06.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:30:06.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.978911
2025-11-13T01:30:06.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:30:06.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:30:06.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:30:06.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:30:06.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:30:06.191 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:29:35', tmtdew=9.3, humidity=53.5, cloud=0.0, wind=16.62, temperature=14.8, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:29:35', seeing=1.05, atlas_timestamp='2025-11-12T23:29:37.910', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.011250000000000426, 0.08025000000000126, 0.04749999999999943, 0.04800000000000004, 0.0912500000000005, 0.011999999999998678, -0.011749999999999261, -0.0065000000000008384, 0.042500000000000426, 0.07324999999999982, 0.06600000000000072, 0.11899999999999977, 0.03775000000000084, -0.01950000000000074, 0.018000000000000682, 0.02725000000000044, 0.067499999999999, 0.129999999999999, 0.10124999999999851, 0.07599999999999874, 0.035749999999998394, -0.019249999999999545, -0.010749999999999815, 0.053999999999998494, 0.0495000000000001, 0.06574999999999953, 0.19250000000000078, 0.14000000000000057, 0.0470000000000006, 0.05450000000000088, 0.006000000000000227, 0.12424999999999997], zp_timestamp='2025-11-12T23:29:00')
2025-11-13T01:30:06.191 [DEBUG] [Thread-26240] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:30:06.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:30:06.286 [DEBUG] [Thread-26243] [transport.py] [_log()] starting thread (client mode): 0x1496ab90
2025-11-13T01:30:06.286 [DEBUG] [Thread-26243] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:30:06.300 [DEBUG] [Thread-26243] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:30:06.300 [INFO] [Thread-26243] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] client lang: <none>
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] server lang: <none>
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] kex follows: False
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] Compression: none
2025-11-13T01:30:06.308 [DEBUG] [Thread-26243] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:30:06.368 [DEBUG] [Thread-26243] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:30:06.368 [DEBUG] [Thread-26243] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:30:06.369 [DEBUG] [Thread-26243] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:30:06.369 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:30:06.370 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:30:06.423 [DEBUG] [Thread-26243] [transport.py] [_log()] userauth is OK
2025-11-13T01:30:06.424 [DEBUG] [Thread-26243] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:30:06.424 [DEBUG] [Thread-26243] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:30:06.424 [DEBUG] [Thread-26243] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:30:06.424 [DEBUG] [Thread-26243] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:30:06.444 [INFO] [Thread-26243] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:30:06.444 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:30:06.444 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:30:07.284 [DEBUG] [Thread-26243] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:30:07.285 [DEBUG] [Thread-26243] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:30:07.338 [DEBUG] [Thread-26243] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:30:07.339 [DEBUG] [Thread-26243] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:30:07.353 [DEBUG] [Thread-26243] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:30:07.364 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:30: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')
2025-11-13T01:30:07.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-11-13T01:30:07.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:30:07.384 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:30:07.384 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:30:07.392 [DEBUG] [Thread-26243] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:30:10.133 [DEBUG] [Thread-26245 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:30:12.683 [DEBUG] [Thread-26246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:30:27.738 [DEBUG] [Thread-26247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:30:37.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:30:37.414 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:30:37.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-11-13T01:30:38.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 30, 7), 9.26, 53.65, 0.0, 15.4, 14.82, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:30:38.057 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:30:07
2025-11-13T01:30:38.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:30:38.338 [DEBUG] [Thread-26248] [transport.py] [_log()] starting thread (client mode): 0x149477c0
2025-11-13T01:30:38.338 [DEBUG] [Thread-26248] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:30:38.359 [DEBUG] [Thread-26248] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:30:38.359 [INFO] [Thread-26248] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] client lang: <none>
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] server lang: <none>
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] kex follows: False
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] Compression: none
2025-11-13T01:30:38.363 [DEBUG] [Thread-26248] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:30:38.378 [DEBUG] [Thread-26248] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:30:38.379 [DEBUG] [Thread-26248] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:30:38.379 [DEBUG] [Thread-26248] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:30:38.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:30:38.379 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:30:38.380 [DEBUG] [Thread-26248] [transport.py] [_log()] userauth is OK
2025-11-13T01:30:38.380 [DEBUG] [Thread-26248] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:30:38.380 [DEBUG] [Thread-26248] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:30:38.380 [DEBUG] [Thread-26248] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:30:38.380 [DEBUG] [Thread-26248] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:30:38.389 [INFO] [Thread-26248] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:30:38.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:30:38.590 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:30:38.591 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:30:38.980 [DEBUG] [Thread-26248] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:30:38.980 [DEBUG] [Thread-26248] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:30:38.980 [DEBUG] [Thread-26248] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:30:39.021 [DEBUG] [Thread-26248] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:30:39.021 [DEBUG] [Thread-26248] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:30:39.023 [DEBUG] [Thread-26248] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:30:39.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:30:39.037 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:30:39.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:30:39.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:30:39.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:30:39.042 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:30:39.042 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:30:39.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:30:39.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:30:39.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.979258 -999.00  +14.90   9.29     58   +6.80 1 1 1 1 1     0    0 8.29 0.24 ZNESW 11.7 9.3 283.7 11.5 15.3 -23.9 15.2 -22.9 15.0 -22.5 15.3 -23.2
2025-11-13T01:30:39.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:30:39.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:30:39.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.979258
2025-11-13T01:30:39.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:30:39.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:30:07', tmtdew=9.26, humidity=53.65, cloud=0.0, wind=15.4, temperature=14.82, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:30:07', seeing=1.05, atlas_timestamp='2025-11-12T23:30:07.891', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0012500000000006395, 0.011250000000000426, 0.08025000000000126, 0.04749999999999943, 0.04800000000000004, 0.0912500000000005, 0.011999999999998678, -0.011749999999999261, -0.0065000000000008384, 0.042500000000000426, 0.07324999999999982, 0.06600000000000072, 0.11899999999999977, 0.03775000000000084, -0.01950000000000074, 0.018000000000000682, 0.02725000000000044, 0.067499999999999, 0.129999999999999, 0.10124999999999851, 0.07599999999999874, 0.035749999999998394, -0.019249999999999545, -0.010749999999999815, 0.053999999999998494, 0.0495000000000001, 0.06574999999999953, 0.19250000000000078, 0.14000000000000057, 0.0470000000000006, 0.05450000000000088, 0.006000000000000227, 0.12424999999999997], zp_timestamp='2025-11-12T23:29:00')
2025-11-13T01:30:39.043 [DEBUG] [Thread-26248] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:30:39.131 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:30:42.768 [DEBUG] [Thread-26251 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:30:57.823 [DEBUG] [Thread-26252 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:31:10.190 [DEBUG] [Thread-26253 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:31:12.859 [DEBUG] [Thread-26254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:31:27.889 [DEBUG] [Thread-26255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:31:38.793 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:31:38.794 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:31:42.926 [DEBUG] [Thread-26256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:31:57.962 [DEBUG] [Thread-26257 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:32:10.247 [DEBUG] [Thread-26258 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:32:12.999 [DEBUG] [Thread-26259 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:32:28.035 [DEBUG] [Thread-26260 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:32:38.997 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:32:38.998 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:32:43.069 [DEBUG] [Thread-26261 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:32:51.515 [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-11-13T01:32:58.104 [DEBUG] [Thread-26262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:33:10.300 [DEBUG] [Thread-26263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:33:13.136 [DEBUG] [Thread-26264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:33:21.544 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:33:21.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:33:21.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-11-13T01:33:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 32, 47), 9.57, 52.59, 0.0, 15.23, 14.84, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:33:22.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:32:47
2025-11-13T01:33:22.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:33:22.485 [DEBUG] [Thread-26265] [transport.py] [_log()] starting thread (client mode): 0x14946bf0
2025-11-13T01:33:22.485 [DEBUG] [Thread-26265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:33:22.504 [DEBUG] [Thread-26265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:33:22.504 [INFO] [Thread-26265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:33:22.507 [DEBUG] [Thread-26265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:33:22.507 [DEBUG] [Thread-26265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:33:22.507 [DEBUG] [Thread-26265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:33:22.507 [DEBUG] [Thread-26265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:33:22.507 [DEBUG] [Thread-26265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] client lang: <none>
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] server lang: <none>
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] kex follows: False
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] Compression: none
2025-11-13T01:33:22.508 [DEBUG] [Thread-26265] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:33:22.526 [DEBUG] [Thread-26265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:33:22.526 [DEBUG] [Thread-26265] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:33:22.526 [DEBUG] [Thread-26265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:33:22.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:33:22.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:33:22.528 [DEBUG] [Thread-26265] [transport.py] [_log()] userauth is OK
2025-11-13T01:33:22.528 [DEBUG] [Thread-26265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:33:22.528 [DEBUG] [Thread-26265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:33:22.528 [DEBUG] [Thread-26265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:33:22.528 [DEBUG] [Thread-26265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:33:22.541 [INFO] [Thread-26265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:33:22.542 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:33:23.190 [DEBUG] [Thread-26265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:33:23.190 [DEBUG] [Thread-26265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:33:23.191 [DEBUG] [Thread-26265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:33:23.232 [DEBUG] [Thread-26265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:33:23.232 [DEBUG] [Thread-26265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:33:23.235 [DEBUG] [Thread-26265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:33:23.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:33:23.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:33:23.249 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:33:23.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:33:23.257 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:33:23.259 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:33:23.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:33:23.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:33:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:33:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.981341 -999.00  +14.90   8.42     57   +6.60 1 1 1 1 1     0    0 8.11 -8.86 ZNESW 15.8 8.4 277.7 15.8 15.3 -23.9 15.2 -23.0 14.9 -22.5 15.2 -23.3
2025-11-13T01:33:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:33:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:33:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.981341
2025-11-13T01:33:23.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:33:23.261 [DEBUG] [Thread-26265] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:33:23.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:33:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:33:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:33:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:33:23.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:32:47', tmtdew=9.57, humidity=52.59, cloud=0.0, wind=15.23, temperature=14.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:33:19', seeing=0.78, atlas_timestamp='2025-11-12T23:33:07.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.019750000000000156, 0.007250000000000867, 0.07225000000000037, 0.05150000000000077, 0.04299999999999926, 0.1022500000000015, 0.030499999999998195, -0.014249999999998764, 0.033500000000000085, 0.04499999999999993, 0.1147500000000008, 0.07099999999999973, 0.129999999999999, 0.10074999999999967, 0.016500000000000625, -0.03300000000000125, 0.03524999999999956, 0.05250000000000021, 0.14250000000000007, 0.07424999999999926, 0.08199999999999896, 0.05874999999999986, -0.007749999999997925, -0.010749999999999815, 0.06099999999999994, 0.09399999999999942, 0.07975000000000065, 0.14300000000000068, 0.19149999999999956, 0.08300000000000018, 0.10000000000000142, -0.0259999999999998, 0.11874999999999858], zp_timestamp='2025-11-12T23:31:00')
2025-11-13T01:33:23.345 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:33:23.357 [DEBUG] [Thread-26268] [transport.py] [_log()] starting thread (client mode): 0x1496b1c0
2025-11-13T01:33:23.357 [DEBUG] [Thread-26268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:33:23.372 [DEBUG] [Thread-26268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:33:23.372 [INFO] [Thread-26268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:33:23.379 [DEBUG] [Thread-26268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] client lang: <none>
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] server lang: <none>
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] kex follows: False
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:33:23.380 [DEBUG] [Thread-26268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:33:23.381 [DEBUG] [Thread-26268] [transport.py] [_log()] Compression: none
2025-11-13T01:33:23.381 [DEBUG] [Thread-26268] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:33:23.443 [DEBUG] [Thread-26268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:33:23.444 [DEBUG] [Thread-26268] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:33:23.445 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:33:23.445 [DEBUG] [Thread-26268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:33:23.446 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:33:23.500 [DEBUG] [Thread-26268] [transport.py] [_log()] userauth is OK
2025-11-13T01:33:23.500 [DEBUG] [Thread-26268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:33:23.500 [DEBUG] [Thread-26268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:33:23.501 [DEBUG] [Thread-26268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:33:23.501 [DEBUG] [Thread-26268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:33:23.520 [INFO] [Thread-26268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:33:23.520 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:33:23.520 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:33:24.336 [DEBUG] [Thread-26268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:33:24.336 [DEBUG] [Thread-26268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:33:24.384 [DEBUG] [Thread-26268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:33:24.384 [DEBUG] [Thread-26268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:33:24.393 [DEBUG] [Thread-26268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:33:24.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:33:24.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-11-13T01:33:24.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-11-13T01:33:24.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:33:24.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:33:24.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:33:24.430 [DEBUG] [Thread-26268] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:33:28.169 [DEBUG] [Thread-26270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:33:39.201 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:33:39.202 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:33:43.226 [DEBUG] [Thread-26271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:33:54.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:33:54.453 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:33:54.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-11-13T01:33:55.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 33, 51), 9.59, 52.52, 0.0, 17.49, 14.85, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:33:55.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:33:51
2025-11-13T01:33:55.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:33:55.382 [DEBUG] [Thread-26272] [transport.py] [_log()] starting thread (client mode): 0x1496a7a0
2025-11-13T01:33:55.382 [DEBUG] [Thread-26272] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:33:55.402 [DEBUG] [Thread-26272] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:33:55.402 [INFO] [Thread-26272] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:33:55.405 [DEBUG] [Thread-26272] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] client lang: <none>
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] server lang: <none>
2025-11-13T01:33:55.406 [DEBUG] [Thread-26272] [transport.py] [_log()] kex follows: False
2025-11-13T01:33:55.407 [DEBUG] [Thread-26272] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:33:55.407 [DEBUG] [Thread-26272] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:33:55.407 [DEBUG] [Thread-26272] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:33:55.407 [DEBUG] [Thread-26272] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:33:55.407 [DEBUG] [Thread-26272] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:33:55.407 [DEBUG] [Thread-26272] [transport.py] [_log()] Compression: none
2025-11-13T01:33:55.407 [DEBUG] [Thread-26272] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:33:55.424 [DEBUG] [Thread-26272] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:33:55.424 [DEBUG] [Thread-26272] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:33:55.425 [DEBUG] [Thread-26272] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:33:55.425 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:33:55.426 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:33:55.426 [DEBUG] [Thread-26272] [transport.py] [_log()] userauth is OK
2025-11-13T01:33:55.427 [DEBUG] [Thread-26272] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:33:55.427 [DEBUG] [Thread-26272] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:33:55.427 [DEBUG] [Thread-26272] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:33:55.427 [DEBUG] [Thread-26272] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:33:55.451 [INFO] [Thread-26272] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:33:55.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:33:56.068 [DEBUG] [Thread-26272] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:33:56.068 [DEBUG] [Thread-26272] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:33:56.069 [DEBUG] [Thread-26272] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:33:56.109 [DEBUG] [Thread-26272] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:33:56.110 [DEBUG] [Thread-26272] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:33:56.113 [DEBUG] [Thread-26272] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:33:56.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:33:56.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:33:56.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:33:56.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:33:56.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:33:56.130 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:33:56.131 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.981689 -999.00  +14.90  10.85     57   +6.60 1 1 1 1 1     0    0 8.04 -10.92 ZNESW 10.5 10.8 268.0 18.4 15.3 -23.9 15.2 -22.9 14.9 -22.5 15.2 -23.2
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.981689
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:33:56.131 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:33:51', tmtdew=9.59, humidity=52.52, cloud=0.0, wind=17.49, temperature=14.85, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:33:51', seeing=0.78, atlas_timestamp='2025-11-12T23:33:37.930', atlas_cloud=1, atlas_rain=1, zp_data=[0.019750000000000156, 0.007250000000000867, 0.07225000000000037, 0.05150000000000077, 0.04299999999999926, 0.1022500000000015, 0.030499999999998195, -0.014249999999998764, 0.033500000000000085, 0.04499999999999993, 0.1147500000000008, 0.07099999999999973, 0.129999999999999, 0.10074999999999967, 0.016500000000000625, -0.03300000000000125, 0.03524999999999956, 0.05250000000000021, 0.14250000000000007, 0.07424999999999926, 0.08199999999999896, 0.05874999999999986, -0.007749999999997925, -0.010749999999999815, 0.06099999999999994, 0.09399999999999942, 0.07975000000000065, 0.14300000000000068, 0.19149999999999956, 0.08300000000000018, 0.10000000000000142, -0.0259999999999998, 0.11874999999999858], zp_timestamp='2025-11-12T23:31:00')
2025-11-13T01:33:56.132 [DEBUG] [Thread-26272] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:33:56.203 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:33:56.215 [DEBUG] [Thread-26275] [transport.py] [_log()] starting thread (client mode): 0x1496a800
2025-11-13T01:33:56.215 [DEBUG] [Thread-26275] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:33:56.229 [DEBUG] [Thread-26275] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:33:56.229 [INFO] [Thread-26275] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] client lang: <none>
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] server lang: <none>
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] kex follows: False
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] Compression: none
2025-11-13T01:33:56.237 [DEBUG] [Thread-26275] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:33:56.302 [DEBUG] [Thread-26275] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:33:56.302 [DEBUG] [Thread-26275] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:33:56.302 [DEBUG] [Thread-26275] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:33:56.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:33:56.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:33:56.359 [DEBUG] [Thread-26275] [transport.py] [_log()] userauth is OK
2025-11-13T01:33:56.360 [DEBUG] [Thread-26275] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:33:56.360 [DEBUG] [Thread-26275] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:33:56.360 [DEBUG] [Thread-26275] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:33:56.360 [DEBUG] [Thread-26275] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:33:56.379 [INFO] [Thread-26275] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:33:56.379 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:33:56.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:33:57.204 [DEBUG] [Thread-26275] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:33:57.204 [DEBUG] [Thread-26275] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:33:57.253 [DEBUG] [Thread-26275] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:33:57.253 [DEBUG] [Thread-26275] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:33:57.262 [DEBUG] [Thread-26275] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:33:57.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:33:57.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-11-13T01:33:57.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-11-13T01:33:57.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:33:57.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:33:57.291 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:33:57.299 [DEBUG] [Thread-26275] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:33:58.258 [DEBUG] [Thread-26277 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:34:10.364 [DEBUG] [Thread-26278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:34:13.319 [DEBUG] [Thread-26279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:34:27.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:34:27.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:34:27.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-11-13T01:34:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 34, 23), 9.6, 52.47, 0.0, 17.59, 14.89, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:34:28.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:34:23
2025-11-13T01:34:28.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:34:28.287 [DEBUG] [Thread-26280] [transport.py] [_log()] starting thread (client mode): 0x14981630
2025-11-13T01:34:28.288 [DEBUG] [Thread-26280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:34:28.308 [DEBUG] [Thread-26280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:34:28.308 [INFO] [Thread-26280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:34:28.309 [DEBUG] [Thread-26280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:34:28.309 [DEBUG] [Thread-26280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:34:28.309 [DEBUG] [Thread-26280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:34:28.309 [DEBUG] [Thread-26280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:34:28.309 [DEBUG] [Thread-26280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:34:28.309 [DEBUG] [Thread-26280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:34:28.309 [DEBUG] [Thread-26280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:34:28.309 [DEBUG] [Thread-26280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] client lang: <none>
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] server lang: <none>
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] kex follows: False
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] Compression: none
2025-11-13T01:34:28.310 [DEBUG] [Thread-26280] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:34:28.319 [DEBUG] [Thread-26280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:34:28.319 [DEBUG] [Thread-26280] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:34:28.319 [DEBUG] [Thread-26280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:34:28.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:34:28.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:34:28.319 [DEBUG] [Thread-26280] [transport.py] [_log()] userauth is OK
2025-11-13T01:34:28.319 [DEBUG] [Thread-26280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:34:28.319 [DEBUG] [Thread-26280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:34:28.320 [DEBUG] [Thread-26280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:34:28.320 [DEBUG] [Thread-26280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:34:28.328 [INFO] [Thread-26280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:34:28.328 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:34:28.351 [DEBUG] [Thread-26282 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:34:29.007 [DEBUG] [Thread-26280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:34:29.007 [DEBUG] [Thread-26280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:34:29.007 [DEBUG] [Thread-26280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:34:29.048 [DEBUG] [Thread-26280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:34:29.048 [DEBUG] [Thread-26280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:34:29.050 [DEBUG] [Thread-26280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:34:29.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:34:29.062 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:34:29.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:34:29.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:34:29.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:34:29.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:34:29.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.982036 -999.00  +14.90  10.84     58   +6.70 1 1 1 1 1     0    0 7.89 -12.34 ZNESW 11.3 10.8 271.6 15.3 15.3 -24.0 15.2 -22.9 14.9 -22.4 15.2 -23.5
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.982036
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:34:29.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:34:23', tmtdew=9.6, humidity=52.47, cloud=0.0, wind=17.59, temperature=14.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:34:23', seeing=0.89, atlas_timestamp='2025-11-12T23:34:07.910', atlas_cloud=1, atlas_rain=1, zp_data=[0.019750000000000156, 0.007250000000000867, 0.07225000000000037, 0.05150000000000077, 0.04299999999999926, 0.1022500000000015, 0.030499999999998195, -0.014249999999998764, 0.033500000000000085, 0.04499999999999993, 0.1147500000000008, 0.07099999999999973, 0.129999999999999, 0.10074999999999967, 0.016500000000000625, -0.03300000000000125, 0.03524999999999956, 0.05250000000000021, 0.14250000000000007, 0.07424999999999926, 0.08199999999999896, 0.05874999999999986, -0.007749999999997925, -0.010749999999999815, 0.06099999999999994, 0.09399999999999942, 0.07975000000000065, 0.14300000000000068, 0.19149999999999956, 0.08300000000000018, 0.10000000000000142, -0.0259999999999998, 0.11874999999999858], zp_timestamp='2025-11-12T23:31:00')
2025-11-13T01:34:29.069 [DEBUG] [Thread-26280] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:34:29.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:34:29.158 [DEBUG] [Thread-26284] [transport.py] [_log()] starting thread (client mode): 0x1737ca00
2025-11-13T01:34:29.158 [DEBUG] [Thread-26284] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:34:29.179 [DEBUG] [Thread-26284] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:34:29.179 [INFO] [Thread-26284] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:34:29.192 [DEBUG] [Thread-26284] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:34:29.192 [DEBUG] [Thread-26284] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:34:29.192 [DEBUG] [Thread-26284] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:34:29.192 [DEBUG] [Thread-26284] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] client lang: <none>
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] server lang: <none>
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] kex follows: False
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] Compression: none
2025-11-13T01:34:29.193 [DEBUG] [Thread-26284] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:34:29.243 [DEBUG] [Thread-26284] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:34:29.243 [DEBUG] [Thread-26284] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:34:29.243 [DEBUG] [Thread-26284] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:34:29.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:34:29.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:34:29.299 [DEBUG] [Thread-26284] [transport.py] [_log()] userauth is OK
2025-11-13T01:34:29.299 [DEBUG] [Thread-26284] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:34:29.300 [DEBUG] [Thread-26284] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:34:29.300 [DEBUG] [Thread-26284] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:34:29.300 [DEBUG] [Thread-26284] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:34:29.313 [INFO] [Thread-26284] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:34:29.313 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:34:29.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:34:30.180 [DEBUG] [Thread-26284] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:34:30.180 [DEBUG] [Thread-26284] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:34:30.228 [DEBUG] [Thread-26284] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:34:30.228 [DEBUG] [Thread-26284] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:34:30.238 [DEBUG] [Thread-26284] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:34:30.245 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:34:30.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-11-13T01:34:30.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-11-13T01:34:30.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:34:30.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:34:30.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:34:30.269 [DEBUG] [Thread-26284] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:34:39.405 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:34:39.406 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:34:43.382 [DEBUG] [Thread-26286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:34:58.428 [DEBUG] [Thread-26287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:35:00.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:35:00.285 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:35:00.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-11-13T01:35:00.948 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 34, 55), 9.63, 52.37, 0.0, 16.82, 14.94, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:35:00.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:34:55
2025-11-13T01:35:01.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:35:01.217 [DEBUG] [Thread-26288] [transport.py] [_log()] starting thread (client mode): 0x1737d4e0
2025-11-13T01:35:01.217 [DEBUG] [Thread-26288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:35:01.228 [DEBUG] [Thread-26288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:35:01.228 [INFO] [Thread-26288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] client lang: <none>
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] server lang: <none>
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] kex follows: False
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] Compression: none
2025-11-13T01:35:01.229 [DEBUG] [Thread-26288] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:35:01.236 [DEBUG] [Thread-26288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:35:01.236 [DEBUG] [Thread-26288] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:35:01.236 [DEBUG] [Thread-26288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:35:01.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:35:01.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:35:01.237 [DEBUG] [Thread-26288] [transport.py] [_log()] userauth is OK
2025-11-13T01:35:01.237 [DEBUG] [Thread-26288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:35:01.237 [DEBUG] [Thread-26288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:35:01.237 [DEBUG] [Thread-26288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:35:01.237 [DEBUG] [Thread-26288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:35:01.248 [INFO] [Thread-26288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:35:01.249 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:35:01.864 [DEBUG] [Thread-26288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:35:01.865 [DEBUG] [Thread-26288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:35:01.865 [DEBUG] [Thread-26288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:35:01.905 [DEBUG] [Thread-26288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:35:01.905 [DEBUG] [Thread-26288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:35:01.908 [DEBUG] [Thread-26288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:35:01.918 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:35:01.918 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:35:01.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:35:01.919 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:35:01.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:35:01.923 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:35:01.923 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:35:01.923 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:35:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:35:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.982383 -999.00  +14.90  12.10     58   +6.70 1 1 1 1 1     0    0 8.01 -13.64 ZNESW 9.6 12.1 288.0 17.5 15.2 -24.0 15.2 -23.0 14.9 -22.5 15.2 -23.2
2025-11-13T01:35:01.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:35:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:35:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.982383
2025-11-13T01:35:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:35:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:35:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:35:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:35:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:35:01.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:34:55', tmtdew=9.63, humidity=52.37, cloud=0.0, wind=16.82, temperature=14.94, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:34:55', seeing=0.89, atlas_timestamp='2025-11-12T23:34:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.019750000000000156, 0.007250000000000867, 0.07225000000000037, 0.05150000000000077, 0.04299999999999926, 0.1022500000000015, 0.030499999999998195, -0.014249999999998764, 0.033500000000000085, 0.04499999999999993, 0.1147500000000008, 0.07099999999999973, 0.129999999999999, 0.10074999999999967, 0.016500000000000625, -0.03300000000000125, 0.03524999999999956, 0.05250000000000021, 0.14250000000000007, 0.07424999999999926, 0.08199999999999896, 0.05874999999999986, -0.007749999999997925, -0.010749999999999815, 0.06099999999999994, 0.09399999999999942, 0.07975000000000065, 0.14300000000000068, 0.19149999999999956, 0.08300000000000018, 0.10000000000000142, -0.0259999999999998, 0.11874999999999858], zp_timestamp='2025-11-12T23:31:00')
2025-11-13T01:35:01.924 [DEBUG] [Thread-26288] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:35:01.999 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:35:02.010 [DEBUG] [Thread-26291] [transport.py] [_log()] starting thread (client mode): 0x19ddb520
2025-11-13T01:35:02.010 [DEBUG] [Thread-26291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:35:02.024 [DEBUG] [Thread-26291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:35:02.025 [INFO] [Thread-26291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:35:02.032 [DEBUG] [Thread-26291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:35:02.032 [DEBUG] [Thread-26291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:35:02.032 [DEBUG] [Thread-26291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] client lang: <none>
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] server lang: <none>
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] kex follows: False
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:35:02.033 [DEBUG] [Thread-26291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:35:02.034 [DEBUG] [Thread-26291] [transport.py] [_log()] Compression: none
2025-11-13T01:35:02.034 [DEBUG] [Thread-26291] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:35:02.091 [DEBUG] [Thread-26291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:35:02.092 [DEBUG] [Thread-26291] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:35:02.092 [DEBUG] [Thread-26291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:35:02.092 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:35:02.093 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:35:02.153 [DEBUG] [Thread-26291] [transport.py] [_log()] userauth is OK
2025-11-13T01:35:02.154 [DEBUG] [Thread-26291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:35:02.154 [DEBUG] [Thread-26291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:35:02.154 [DEBUG] [Thread-26291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:35:02.154 [DEBUG] [Thread-26291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:35:02.173 [INFO] [Thread-26291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:35:02.174 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:35:02.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:35:03.092 [DEBUG] [Thread-26291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:35:03.093 [DEBUG] [Thread-26291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:35:03.141 [DEBUG] [Thread-26291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:35:03.141 [DEBUG] [Thread-26291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:35:03.150 [DEBUG] [Thread-26291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:35:03.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:35:03.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-11-13T01:35:03.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-11-13T01:35:03.178 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:35:03.178 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:35:03.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:35:03.187 [DEBUG] [Thread-26291] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:35:10.417 [DEBUG] [Thread-26293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:35:13.463 [DEBUG] [Thread-26294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:35:28.517 [DEBUG] [Thread-26295 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:35:33.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:35:33.195 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:35:33.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-11-13T01:35:33.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 35, 27), 9.6, 52.47, 0.0, 16.3, 14.89, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:35:33.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:35:27
2025-11-13T01:35:33.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:35:34.115 [DEBUG] [Thread-26296] [transport.py] [_log()] starting thread (client mode): 0x14988f70
2025-11-13T01:35:34.115 [DEBUG] [Thread-26296] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:35:34.134 [DEBUG] [Thread-26296] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:35:34.134 [INFO] [Thread-26296] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] client lang: <none>
2025-11-13T01:35:34.138 [DEBUG] [Thread-26296] [transport.py] [_log()] server lang: <none>
2025-11-13T01:35:34.139 [DEBUG] [Thread-26296] [transport.py] [_log()] kex follows: False
2025-11-13T01:35:34.139 [DEBUG] [Thread-26296] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:35:34.139 [DEBUG] [Thread-26296] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:35:34.139 [DEBUG] [Thread-26296] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:35:34.139 [DEBUG] [Thread-26296] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:35:34.139 [DEBUG] [Thread-26296] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:35:34.139 [DEBUG] [Thread-26296] [transport.py] [_log()] Compression: none
2025-11-13T01:35:34.139 [DEBUG] [Thread-26296] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:35:34.159 [DEBUG] [Thread-26296] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:35:34.160 [DEBUG] [Thread-26296] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:35:34.161 [DEBUG] [Thread-26296] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:35:34.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:35:34.162 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:35:34.163 [DEBUG] [Thread-26296] [transport.py] [_log()] userauth is OK
2025-11-13T01:35:34.163 [DEBUG] [Thread-26296] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:35:34.163 [DEBUG] [Thread-26296] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:35:34.163 [DEBUG] [Thread-26296] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:35:34.163 [DEBUG] [Thread-26296] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:35:34.186 [INFO] [Thread-26296] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:35:34.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:35:34.816 [DEBUG] [Thread-26296] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:35:34.816 [DEBUG] [Thread-26296] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:35:34.816 [DEBUG] [Thread-26296] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:35:34.857 [DEBUG] [Thread-26296] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:35:34.857 [DEBUG] [Thread-26296] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:35:34.860 [DEBUG] [Thread-26296] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:35:34.872 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:35:34.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:35:34.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:35:34.876 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:35:34.882 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:35:34.885 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:35:34.885 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:35:34.885 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:35:34.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:35:34.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.982383 -999.00  +14.90  12.10     58   +6.70 1 1 1 1 1     0    0 8.01 -13.64 ZNESW 9.6 12.1 288.0 17.5 15.2 -24.0 15.2 -23.0 14.9 -22.5 15.2 -23.2
2025-11-13T01:35:34.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:35:34.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:35:34.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.982383
2025-11-13T01:35:34.886 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:35:34.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:35:34.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:35:34.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:35:34.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:35:34.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:35:27', tmtdew=9.6, humidity=52.47, cloud=0.0, wind=16.3, temperature=14.89, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:35:27', seeing=0.96, atlas_timestamp='2025-11-12T23:34:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.019750000000000156, 0.007250000000000867, 0.07225000000000037, 0.05150000000000077, 0.04299999999999926, 0.1022500000000015, 0.030499999999998195, -0.014249999999998764, 0.033500000000000085, 0.04499999999999993, 0.1147500000000008, 0.07099999999999973, 0.129999999999999, 0.10074999999999967, 0.016500000000000625, -0.03300000000000125, 0.03524999999999956, 0.05250000000000021, 0.14250000000000007, 0.07424999999999926, 0.08199999999999896, 0.05874999999999986, -0.007749999999997925, -0.010749999999999815, 0.06099999999999994, 0.09399999999999942, 0.07975000000000065, 0.14300000000000068, 0.19149999999999956, 0.08300000000000018, 0.10000000000000142, -0.0259999999999998, 0.11874999999999858], zp_timestamp='2025-11-12T23:31:00')
2025-11-13T01:35:34.888 [DEBUG] [Thread-26296] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:35:34.971 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:35:34.983 [DEBUG] [Thread-26299] [transport.py] [_log()] starting thread (client mode): 0x1737f760
2025-11-13T01:35:34.984 [DEBUG] [Thread-26299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:35:34.999 [DEBUG] [Thread-26299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:35:34.999 [INFO] [Thread-26299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:35:35.006 [DEBUG] [Thread-26299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:35:35.006 [DEBUG] [Thread-26299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:35:35.006 [DEBUG] [Thread-26299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:35:35.006 [DEBUG] [Thread-26299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] client lang: <none>
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] server lang: <none>
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] kex follows: False
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] Compression: none
2025-11-13T01:35:35.007 [DEBUG] [Thread-26299] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:35:35.064 [DEBUG] [Thread-26299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:35:35.065 [DEBUG] [Thread-26299] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:35:35.065 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:35:35.066 [DEBUG] [Thread-26299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:35:35.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:35:35.124 [DEBUG] [Thread-26299] [transport.py] [_log()] userauth is OK
2025-11-13T01:35:35.124 [DEBUG] [Thread-26299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:35:35.124 [DEBUG] [Thread-26299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:35:35.125 [DEBUG] [Thread-26299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:35:35.125 [DEBUG] [Thread-26299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:35:35.143 [INFO] [Thread-26299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:35:35.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:35:35.144 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:35:35.954 [DEBUG] [Thread-26299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:35:35.954 [DEBUG] [Thread-26299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:35:36.002 [DEBUG] [Thread-26299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:35:36.002 [DEBUG] [Thread-26299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:35:36.011 [DEBUG] [Thread-26299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:35:36.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:35:36.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-11-13T01:35:36.030 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:35:36.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:35:36.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:35:36.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:35:36.048 [DEBUG] [Thread-26299] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:35:39.610 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:35:39.611 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:35:43.550 [DEBUG] [Thread-26301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:35:58.603 [DEBUG] [Thread-26302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:36:06.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:36:06.066 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:36:06.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:36:06.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 35, 59), 9.81, 51.6, 0.0, 18.69, 14.9, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:36:06.708 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:35:59
2025-11-13T01:36:06.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:36:06.975 [DEBUG] [Thread-26303] [transport.py] [_log()] starting thread (client mode): 0x14946620
2025-11-13T01:36:06.976 [DEBUG] [Thread-26303] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:36:06.997 [DEBUG] [Thread-26303] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:36:06.997 [INFO] [Thread-26303] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:36:06.997 [DEBUG] [Thread-26303] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] client lang: <none>
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] server lang: <none>
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] kex follows: False
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] Compression: none
2025-11-13T01:36:06.998 [DEBUG] [Thread-26303] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:36:07.006 [DEBUG] [Thread-26303] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:36:07.006 [DEBUG] [Thread-26303] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:36:07.007 [DEBUG] [Thread-26303] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:36:07.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:36:07.007 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:36:07.008 [DEBUG] [Thread-26303] [transport.py] [_log()] userauth is OK
2025-11-13T01:36:07.009 [DEBUG] [Thread-26303] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:36:07.009 [DEBUG] [Thread-26303] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:36:07.009 [DEBUG] [Thread-26303] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:36:07.009 [DEBUG] [Thread-26303] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:36:07.033 [INFO] [Thread-26303] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:36:07.033 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:36:07.821 [DEBUG] [Thread-26303] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:36:07.821 [DEBUG] [Thread-26303] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:36:07.822 [DEBUG] [Thread-26303] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:36:07.862 [DEBUG] [Thread-26303] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:36:07.863 [DEBUG] [Thread-26303] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:36:07.866 [DEBUG] [Thread-26303] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:36:07.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:36:07.879 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:36:07.881 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:36:07.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:36:07.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:36:07.892 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:36:07.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:36:07.892 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:36:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:36:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.982730 -999.00  +14.90  12.56     56   +6.30 1 1 1 1 1     0    0 7.87 -15.25 ZNESW 13.7 12.6 283.6 13.2 15.2 -23.8 15.2 -22.9 14.9 -22.6 15.2 -23.3
2025-11-13T01:36:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:36:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:36:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.982730
2025-11-13T01:36:07.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:36:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:36:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:36:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:36:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:36:07.894 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:35:59', tmtdew=9.81, humidity=51.6, cloud=0.0, wind=18.69, temperature=14.9, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:35:59', seeing=0.92, atlas_timestamp='2025-11-12T23:35:07.872', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:35:00')
2025-11-13T01:36:07.895 [DEBUG] [Thread-26303] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:36:07.977 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:36:07.987 [DEBUG] [Thread-26306] [transport.py] [_log()] starting thread (client mode): 0x19dd9ae0
2025-11-13T01:36:07.987 [DEBUG] [Thread-26306] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:36:08.002 [DEBUG] [Thread-26306] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:36:08.003 [INFO] [Thread-26306] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] client lang: <none>
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] server lang: <none>
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] kex follows: False
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:36:08.010 [DEBUG] [Thread-26306] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:36:08.011 [DEBUG] [Thread-26306] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:36:08.011 [DEBUG] [Thread-26306] [transport.py] [_log()] Compression: none
2025-11-13T01:36:08.011 [DEBUG] [Thread-26306] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:36:08.070 [DEBUG] [Thread-26306] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:36:08.071 [DEBUG] [Thread-26306] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:36:08.072 [DEBUG] [Thread-26306] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:36:08.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:36:08.073 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:36:08.128 [DEBUG] [Thread-26306] [transport.py] [_log()] userauth is OK
2025-11-13T01:36:08.128 [DEBUG] [Thread-26306] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:36:08.129 [DEBUG] [Thread-26306] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:36:08.129 [DEBUG] [Thread-26306] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:36:08.129 [DEBUG] [Thread-26306] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:36:08.148 [INFO] [Thread-26306] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:36:08.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:36:08.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:36:08.962 [DEBUG] [Thread-26306] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:36:08.963 [DEBUG] [Thread-26306] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:36:09.011 [DEBUG] [Thread-26306] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:36:09.011 [DEBUG] [Thread-26306] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:36:09.020 [DEBUG] [Thread-26306] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:36:09.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:36:09.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-11-13T01:36:09.039 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:36:09.049 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:36:09.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:36:09.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:36:09.058 [DEBUG] [Thread-26306] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:36:10.486 [DEBUG] [Thread-26308 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:36:13.643 [DEBUG] [Thread-26309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:36:28.705 [DEBUG] [Thread-26310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:36:39.059 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:36:39.059 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:36:39.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-11-13T01:36:39.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 36, 31), 9.81, 51.6, 0.0, 18.3, 14.87, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:36:39.701 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:36:31
2025-11-13T01:36:39.813 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:36:39.813 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:36:39.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:36:39.969 [DEBUG] [Thread-26311] [transport.py] [_log()] starting thread (client mode): 0x14947640
2025-11-13T01:36:39.969 [DEBUG] [Thread-26311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:36:39.989 [DEBUG] [Thread-26311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:36:39.989 [INFO] [Thread-26311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:36:39.992 [DEBUG] [Thread-26311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:36:39.992 [DEBUG] [Thread-26311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] client lang: <none>
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] server lang: <none>
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] kex follows: False
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] Compression: none
2025-11-13T01:36:39.993 [DEBUG] [Thread-26311] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:36:40.010 [DEBUG] [Thread-26311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:36:40.010 [DEBUG] [Thread-26311] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:36:40.011 [DEBUG] [Thread-26311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:36:40.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:36:40.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:36:40.013 [DEBUG] [Thread-26311] [transport.py] [_log()] userauth is OK
2025-11-13T01:36:40.013 [DEBUG] [Thread-26311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:36:40.013 [DEBUG] [Thread-26311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:36:40.014 [DEBUG] [Thread-26311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:36:40.014 [DEBUG] [Thread-26311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:36:40.049 [INFO] [Thread-26311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:36:40.050 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:36:40.696 [DEBUG] [Thread-26311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:36:40.700 [DEBUG] [Thread-26311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:36:40.700 [DEBUG] [Thread-26311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:36:40.738 [DEBUG] [Thread-26311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:36:40.738 [DEBUG] [Thread-26311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:36:40.741 [DEBUG] [Thread-26311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:36:40.753 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:36:40.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:36:40.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:36:40.758 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:36:40.764 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:36:40.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:36:40.766 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:36:40.766 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:36:40.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:36:40.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.983425 -999.00  +14.90  10.53     55   +6.20 1 1 1 1 1     0    0 7.97 -15.34 ZNESW 8.6 10.5 276.2 14.6 15.3 -24.0 15.2 -23.0 14.9 -22.5 15.2 -23.4
2025-11-13T01:36:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:36:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:36:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.983425
2025-11-13T01:36:40.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:36:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:36:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:36:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:36:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:36:40.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:36:31', tmtdew=9.81, humidity=51.6, cloud=0.0, wind=18.3, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:36:31', seeing=0.91, atlas_timestamp='2025-11-12T23:36:07.920', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:35:00')
2025-11-13T01:36:40.769 [DEBUG] [Thread-26311] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:36:40.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:36:40.864 [DEBUG] [Thread-26314] [transport.py] [_log()] starting thread (client mode): 0x19dd9450
2025-11-13T01:36:40.864 [DEBUG] [Thread-26314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:36:40.879 [DEBUG] [Thread-26314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:36:40.879 [INFO] [Thread-26314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:36:40.887 [DEBUG] [Thread-26314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:36:40.887 [DEBUG] [Thread-26314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:36:40.887 [DEBUG] [Thread-26314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:36:40.887 [DEBUG] [Thread-26314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] client lang: <none>
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] server lang: <none>
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] kex follows: False
2025-11-13T01:36:40.888 [DEBUG] [Thread-26314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:36:40.889 [DEBUG] [Thread-26314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:36:40.889 [DEBUG] [Thread-26314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:36:40.889 [DEBUG] [Thread-26314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:36:40.889 [DEBUG] [Thread-26314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:36:40.889 [DEBUG] [Thread-26314] [transport.py] [_log()] Compression: none
2025-11-13T01:36:40.889 [DEBUG] [Thread-26314] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:36:40.943 [DEBUG] [Thread-26314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:36:40.944 [DEBUG] [Thread-26314] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:36:40.945 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:36:40.945 [DEBUG] [Thread-26314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:36:40.946 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:36:41.000 [DEBUG] [Thread-26314] [transport.py] [_log()] userauth is OK
2025-11-13T01:36:41.000 [DEBUG] [Thread-26314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:36:41.000 [DEBUG] [Thread-26314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:36:41.000 [DEBUG] [Thread-26314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:36:41.001 [DEBUG] [Thread-26314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:36:41.019 [INFO] [Thread-26314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:36:41.020 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:36:41.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:36:41.830 [DEBUG] [Thread-26314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:36:41.830 [DEBUG] [Thread-26314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:36:41.883 [DEBUG] [Thread-26314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:36:41.883 [DEBUG] [Thread-26314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:36:41.893 [DEBUG] [Thread-26314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:36:41.907 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:36:41.907 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:36: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-11-13T01:36:41.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:36:41.931 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:36:41.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:36:41.940 [DEBUG] [Thread-26314] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:36:43.741 [DEBUG] [Thread-26316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:36:58.800 [DEBUG] [Thread-26317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:10.545 [DEBUG] [Thread-26318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:11.957 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:37:11.957 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:37:11.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:37:12.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 37, 3), 9.86, 51.42, 0.0, 18.62, 14.87, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:37:12.610 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:37:03
2025-11-13T01:37:12.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:37:12.881 [DEBUG] [Thread-26319] [transport.py] [_log()] starting thread (client mode): 0x149804f0
2025-11-13T01:37:12.881 [DEBUG] [Thread-26319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:37:12.904 [DEBUG] [Thread-26319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:37:12.904 [INFO] [Thread-26319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:37:12.906 [DEBUG] [Thread-26319] [transport.py] [_log()] client lang: <none>
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] server lang: <none>
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] kex follows: False
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] Compression: none
2025-11-13T01:37:12.907 [DEBUG] [Thread-26319] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:37:12.929 [DEBUG] [Thread-26319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:37:12.930 [DEBUG] [Thread-26319] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:37:12.930 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:37:12.931 [DEBUG] [Thread-26319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:37:12.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:37:12.933 [DEBUG] [Thread-26319] [transport.py] [_log()] userauth is OK
2025-11-13T01:37:12.933 [DEBUG] [Thread-26319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:37:12.933 [DEBUG] [Thread-26319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:37:12.934 [DEBUG] [Thread-26319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:37:12.934 [DEBUG] [Thread-26319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:37:12.958 [INFO] [Thread-26319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:37:12.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:37:13.737 [DEBUG] [Thread-26319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:37:13.737 [DEBUG] [Thread-26319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:37:13.738 [DEBUG] [Thread-26319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:37:13.778 [DEBUG] [Thread-26319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:37:13.778 [DEBUG] [Thread-26319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:37:13.781 [DEBUG] [Thread-26319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:37:13.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:37:13.788 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:37:13.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:37:13.792 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:37:13.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:37:13.800 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:37:13.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:37:13.800 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:37:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:37:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.983772 -999.00  +14.90  10.57     56   +6.40 1 1 1 1 1     0    0 7.93 -16.71 ZNESW 13.6 10.6 281.2 13.0 15.2 -23.9 15.1 -22.9 14.9 -22.5 15.2 -23.4
2025-11-13T01:37:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:37:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:37:13.801 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.983772
2025-11-13T01:37:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:37:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:37:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:37:13.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:37:13.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:37:13.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:37:03', tmtdew=9.86, humidity=51.42, cloud=0.0, wind=18.62, temperature=14.87, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:37:03', seeing=0.91, atlas_timestamp='2025-11-12T23:36:37.901', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:35:00')
2025-11-13T01:37:13.803 [DEBUG] [Thread-26319] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:37:13.830 [DEBUG] [Thread-26322 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:13.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:37:13.900 [DEBUG] [Thread-26323] [transport.py] [_log()] starting thread (client mode): 0x14988340
2025-11-13T01:37:13.901 [DEBUG] [Thread-26323] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:37:13.915 [DEBUG] [Thread-26323] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:37:13.915 [INFO] [Thread-26323] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:37:13.923 [DEBUG] [Thread-26323] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:37:13.923 [DEBUG] [Thread-26323] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:37:13.923 [DEBUG] [Thread-26323] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:37:13.923 [DEBUG] [Thread-26323] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:37:13.923 [DEBUG] [Thread-26323] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:37:13.923 [DEBUG] [Thread-26323] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:37:13.923 [DEBUG] [Thread-26323] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:37:13.923 [DEBUG] [Thread-26323] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] client lang: <none>
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] server lang: <none>
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] kex follows: False
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] Compression: none
2025-11-13T01:37:13.924 [DEBUG] [Thread-26323] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:37:13.979 [DEBUG] [Thread-26323] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:37:13.980 [DEBUG] [Thread-26323] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:37:13.981 [DEBUG] [Thread-26323] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:37:13.981 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:37:13.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:37:14.036 [DEBUG] [Thread-26323] [transport.py] [_log()] userauth is OK
2025-11-13T01:37:14.036 [DEBUG] [Thread-26323] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:37:14.036 [DEBUG] [Thread-26323] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:37:14.037 [DEBUG] [Thread-26323] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:37:14.037 [DEBUG] [Thread-26323] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:37:14.059 [INFO] [Thread-26323] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:37:14.060 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:37:14.062 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:37:14.876 [DEBUG] [Thread-26323] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:37:14.876 [DEBUG] [Thread-26323] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:37:14.924 [DEBUG] [Thread-26323] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:37:14.925 [DEBUG] [Thread-26323] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:37:14.934 [DEBUG] [Thread-26323] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:37:14.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:37:14.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-11-13T01:37:14.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-11-13T01:37:14.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:37:14.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:37:14.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:37:14.973 [DEBUG] [Thread-26323] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:37:28.873 [DEBUG] [Thread-26325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:40.014 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:40.015 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:43.904 [DEBUG] [Thread-26326 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:44.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:37:44.995 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:37:44.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-11-13T01:37:45.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 37, 35), 9.67, 52.22, 0.0, 16.41, 14.79, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:37:45.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:37:35
2025-11-13T01:37:45.770 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:37:45.915 [DEBUG] [Thread-26327] [transport.py] [_log()] starting thread (client mode): 0x14981d20
2025-11-13T01:37:45.916 [DEBUG] [Thread-26327] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:37:45.936 [DEBUG] [Thread-26327] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:37:45.937 [INFO] [Thread-26327] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:37:45.939 [DEBUG] [Thread-26327] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] client lang: <none>
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] server lang: <none>
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] kex follows: False
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] Compression: none
2025-11-13T01:37:45.940 [DEBUG] [Thread-26327] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:37:45.957 [DEBUG] [Thread-26327] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:37:45.958 [DEBUG] [Thread-26327] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:37:45.958 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:37:45.959 [DEBUG] [Thread-26327] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:37:45.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:37:45.961 [DEBUG] [Thread-26327] [transport.py] [_log()] userauth is OK
2025-11-13T01:37:45.961 [DEBUG] [Thread-26327] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:37:45.961 [DEBUG] [Thread-26327] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:37:45.961 [DEBUG] [Thread-26327] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:37:45.962 [DEBUG] [Thread-26327] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:37:45.979 [INFO] [Thread-26327] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:37:45.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:37:46.606 [DEBUG] [Thread-26327] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:37:46.607 [DEBUG] [Thread-26327] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:37:46.607 [DEBUG] [Thread-26327] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:37:46.648 [DEBUG] [Thread-26327] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:37:46.648 [DEBUG] [Thread-26327] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:37:46.651 [DEBUG] [Thread-26327] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:37:46.665 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:37:46.666 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:37:46.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:37:46.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:37:46.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:37:46.677 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:37:46.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:37:46.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:37:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:37:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.984119 -999.00  +14.90  12.98     57   +6.50 1 1 1 1 1     0    0 7.88 -17.53 ZNESW 15.0 13.0 277.5 16.8 15.2 -23.9 15.2 -23.0 14.9 -22.6 -999.0 -999.0
2025-11-13T01:37:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:37:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:37:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.984119
2025-11-13T01:37:46.678 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:37:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:37:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:37:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:37:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:37:46.679 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:37:35', tmtdew=9.67, humidity=52.22, cloud=0.0, wind=16.41, temperature=14.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:37:35', seeing=0.91, atlas_timestamp='2025-11-12T23:37:07.882', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:35:00')
2025-11-13T01:37:46.680 [DEBUG] [Thread-26327] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:37:46.763 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:37:46.775 [DEBUG] [Thread-26330] [transport.py] [_log()] starting thread (client mode): 0x14982860
2025-11-13T01:37:46.775 [DEBUG] [Thread-26330] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:37:46.790 [DEBUG] [Thread-26330] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:37:46.790 [INFO] [Thread-26330] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:37:46.797 [DEBUG] [Thread-26330] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:37:46.797 [DEBUG] [Thread-26330] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:37:46.797 [DEBUG] [Thread-26330] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:37:46.797 [DEBUG] [Thread-26330] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] client lang: <none>
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] server lang: <none>
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] kex follows: False
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] Compression: none
2025-11-13T01:37:46.798 [DEBUG] [Thread-26330] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:37:46.865 [DEBUG] [Thread-26330] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:37:46.866 [DEBUG] [Thread-26330] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:37:46.866 [DEBUG] [Thread-26330] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:37:46.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:37:46.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:37:46.924 [DEBUG] [Thread-26330] [transport.py] [_log()] userauth is OK
2025-11-13T01:37:46.924 [DEBUG] [Thread-26330] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:37:46.924 [DEBUG] [Thread-26330] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:37:46.925 [DEBUG] [Thread-26330] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:37:46.925 [DEBUG] [Thread-26330] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:37:46.944 [INFO] [Thread-26330] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:37:46.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:37:46.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:37:47.796 [DEBUG] [Thread-26330] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:37:47.796 [DEBUG] [Thread-26330] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:37:47.845 [DEBUG] [Thread-26330] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:37:47.845 [DEBUG] [Thread-26330] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:37:47.854 [DEBUG] [Thread-26330] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:37:47.863 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:37:47.864 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:37:47.873 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:37:47.882 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:37:47.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:37:47.883 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:37:47.890 [DEBUG] [Thread-26330] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:37:48.872 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:54.194 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:57.231 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:37:58.938 [DEBUG] [Thread-26332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:38:03.598 [DEBUG] [Thread-2500 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:38:10.601 [DEBUG] [Thread-26333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:38:13.999 [DEBUG] [Thread-26334 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:38:17.906 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:38:17.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:38:17.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-11-13T01:38:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 38, 7), 9.75, 51.91, 0.0, 17.93, 14.77, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:38:18.569 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:38:07
2025-11-13T01:38:18.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:38:18.853 [DEBUG] [Thread-26335] [transport.py] [_log()] starting thread (client mode): 0x14980f40
2025-11-13T01:38:18.853 [DEBUG] [Thread-26335] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:38:18.872 [DEBUG] [Thread-26335] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:38:18.872 [INFO] [Thread-26335] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] client lang: <none>
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] server lang: <none>
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] kex follows: False
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:38:18.875 [DEBUG] [Thread-26335] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:38:18.876 [DEBUG] [Thread-26335] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:38:18.876 [DEBUG] [Thread-26335] [transport.py] [_log()] Compression: none
2025-11-13T01:38:18.876 [DEBUG] [Thread-26335] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:38:18.891 [DEBUG] [Thread-26335] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:38:18.891 [DEBUG] [Thread-26335] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:38:18.891 [DEBUG] [Thread-26335] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:38:18.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:38:18.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:38:18.892 [DEBUG] [Thread-26335] [transport.py] [_log()] userauth is OK
2025-11-13T01:38:18.892 [DEBUG] [Thread-26335] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:38:18.892 [DEBUG] [Thread-26335] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:38:18.892 [DEBUG] [Thread-26335] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:38:18.892 [DEBUG] [Thread-26335] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:38:18.902 [INFO] [Thread-26335] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:38:18.902 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:38:19.669 [DEBUG] [Thread-26335] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:38:19.670 [DEBUG] [Thread-26335] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:38:19.670 [DEBUG] [Thread-26335] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:38:19.711 [DEBUG] [Thread-26335] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:38:19.711 [DEBUG] [Thread-26335] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:38:19.713 [DEBUG] [Thread-26335] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:38:19.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:38:19.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:38:19.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:38:19.726 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:38:19.728 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:38:19.729 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:38:19.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.984466 -999.00  +15.00  15.15     56   +6.30 1 1 1 1 1     0    0 8.02 -15.98 ZNESW 11.8 15.2 262.4 19.8 15.3 -23.9 15.2 -23.0 14.9 -22.3 15.2 -23.3
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.984466
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:38:19.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:38:07', tmtdew=9.75, humidity=51.91, cloud=0.0, wind=17.93, temperature=14.77, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:38:07', seeing=1.17, atlas_timestamp='2025-11-12T23:37:37.862', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:35:00')
2025-11-13T01:38:19.730 [DEBUG] [Thread-26335] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:38:19.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:38:19.816 [DEBUG] [Thread-26338] [transport.py] [_log()] starting thread (client mode): 0x1493ec20
2025-11-13T01:38:19.816 [DEBUG] [Thread-26338] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:38:19.831 [DEBUG] [Thread-26338] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:38:19.831 [INFO] [Thread-26338] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] client lang: <none>
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] server lang: <none>
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] kex follows: False
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:38:19.838 [DEBUG] [Thread-26338] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:38:19.839 [DEBUG] [Thread-26338] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:38:19.839 [DEBUG] [Thread-26338] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:38:19.839 [DEBUG] [Thread-26338] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:38:19.839 [DEBUG] [Thread-26338] [transport.py] [_log()] Compression: none
2025-11-13T01:38:19.839 [DEBUG] [Thread-26338] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:38:19.894 [DEBUG] [Thread-26338] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:38:19.894 [DEBUG] [Thread-26338] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:38:19.894 [DEBUG] [Thread-26338] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:38:19.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:38:19.895 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:38:19.951 [DEBUG] [Thread-26338] [transport.py] [_log()] userauth is OK
2025-11-13T01:38:19.951 [DEBUG] [Thread-26338] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:38:19.951 [DEBUG] [Thread-26338] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:38:19.951 [DEBUG] [Thread-26338] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:38:19.951 [DEBUG] [Thread-26338] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:38:19.967 [INFO] [Thread-26338] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:38:19.967 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:38:19.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:38:20.769 [DEBUG] [Thread-26338] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:38:20.769 [DEBUG] [Thread-26338] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:38:20.817 [DEBUG] [Thread-26338] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:38:20.817 [DEBUG] [Thread-26338] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:38:20.825 [DEBUG] [Thread-26338] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:38:20.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:38:20.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-11-13T01:38:20.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-11-13T01:38:20.849 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:38:20.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:38:20.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:38:20.857 [DEBUG] [Thread-26338] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:38:29.031 [DEBUG] [Thread-26340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:38:40.214 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:38:40.215 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:38:44.090 [DEBUG] [Thread-26341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:38:50.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:38:50.880 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:38:50.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-11-13T01:38:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 38, 39), 9.65, 52.22, 0.0, 16.16, 14.79, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:38:51.521 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:38:39
2025-11-13T01:38:51.644 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:38:51.791 [DEBUG] [Thread-26342] [transport.py] [_log()] starting thread (client mode): 0x1737f760
2025-11-13T01:38:51.791 [DEBUG] [Thread-26342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:38:51.812 [DEBUG] [Thread-26342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:38:51.812 [INFO] [Thread-26342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:38:51.815 [DEBUG] [Thread-26342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:38:51.815 [DEBUG] [Thread-26342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:38:51.815 [DEBUG] [Thread-26342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] client lang: <none>
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] server lang: <none>
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] kex follows: False
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] Compression: none
2025-11-13T01:38:51.816 [DEBUG] [Thread-26342] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:38:51.833 [DEBUG] [Thread-26342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:38:51.834 [DEBUG] [Thread-26342] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:38:51.834 [DEBUG] [Thread-26342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:38:51.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:38:51.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:38:51.836 [DEBUG] [Thread-26342] [transport.py] [_log()] userauth is OK
2025-11-13T01:38:51.836 [DEBUG] [Thread-26342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:38:51.837 [DEBUG] [Thread-26342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:38:51.837 [DEBUG] [Thread-26342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:38:51.837 [DEBUG] [Thread-26342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:38:51.873 [INFO] [Thread-26342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:38:51.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:38:52.501 [DEBUG] [Thread-26342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:38:52.501 [DEBUG] [Thread-26342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:38:52.502 [DEBUG] [Thread-26342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:38:52.542 [DEBUG] [Thread-26342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:38:52.543 [DEBUG] [Thread-26342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:38:52.546 [DEBUG] [Thread-26342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:38:52.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:38:52.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:38:52.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:38:52.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:38:52.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:38:52.572 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:38:52.572 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:38:52.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:38:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:38:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.984813 -999.00  +15.00   9.42     57   +6.60 1 1 1 1 1     0    0 7.98 -15.42 ZNESW 9.9 9.4 276.8 13.6 15.2 -24.0 15.2 -23.0 14.9 -22.7 15.2 -23.4
2025-11-13T01:38:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:38:52.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:38:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.984813
2025-11-13T01:38:52.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:38:52.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:38:52.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:38:52.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:38:52.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:38:52.575 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:38:39', tmtdew=9.65, humidity=52.22, cloud=0.0, wind=16.16, temperature=14.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:38:39', seeing=1.16, atlas_timestamp='2025-11-12T23:38:07.843', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:35:00')
2025-11-13T01:38:52.575 [DEBUG] [Thread-26342] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:38:52.659 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:38:52.671 [DEBUG] [Thread-26345] [transport.py] [_log()] starting thread (client mode): 0x14983100
2025-11-13T01:38:52.671 [DEBUG] [Thread-26345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:38:52.685 [DEBUG] [Thread-26345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:38:52.686 [INFO] [Thread-26345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] client lang: <none>
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] server lang: <none>
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] kex follows: False
2025-11-13T01:38:52.693 [DEBUG] [Thread-26345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:38:52.694 [DEBUG] [Thread-26345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:38:52.694 [DEBUG] [Thread-26345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:38:52.694 [DEBUG] [Thread-26345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:38:52.694 [DEBUG] [Thread-26345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:38:52.694 [DEBUG] [Thread-26345] [transport.py] [_log()] Compression: none
2025-11-13T01:38:52.694 [DEBUG] [Thread-26345] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:38:52.752 [DEBUG] [Thread-26345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:38:52.752 [DEBUG] [Thread-26345] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:38:52.753 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:38:52.754 [DEBUG] [Thread-26345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:38:52.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:38:52.808 [DEBUG] [Thread-26345] [transport.py] [_log()] userauth is OK
2025-11-13T01:38:52.808 [DEBUG] [Thread-26345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:38:52.808 [DEBUG] [Thread-26345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:38:52.809 [DEBUG] [Thread-26345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:38:52.809 [DEBUG] [Thread-26345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:38:52.829 [INFO] [Thread-26345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:38:52.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:38:52.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:38:53.637 [DEBUG] [Thread-26345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:38:53.637 [DEBUG] [Thread-26345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:38:53.685 [DEBUG] [Thread-26345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:38:53.685 [DEBUG] [Thread-26345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:38:53.694 [DEBUG] [Thread-26345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:38:53.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:38:53.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-11-13T01:38:53.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-11-13T01:38:53.722 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:38:53.722 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:38:53.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:38:53.731 [DEBUG] [Thread-26345] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:38:59.127 [DEBUG] [Thread-26347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:39:10.657 [DEBUG] [Thread-26348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:39:14.170 [DEBUG] [Thread-26349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:39:23.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:39:23.739 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:39:23.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-11-13T01:39:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 39, 11), 9.5, 52.8, 0.0, 16.57, 14.84, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:39:24.382 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:39:11
2025-11-13T01:39:24.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:39:24.648 [DEBUG] [Thread-26350] [transport.py] [_log()] starting thread (client mode): 0x1493c6a0
2025-11-13T01:39:24.648 [DEBUG] [Thread-26350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:39:24.666 [DEBUG] [Thread-26350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:39:24.666 [INFO] [Thread-26350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:39:24.669 [DEBUG] [Thread-26350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:39:24.669 [DEBUG] [Thread-26350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:39:24.669 [DEBUG] [Thread-26350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:39:24.669 [DEBUG] [Thread-26350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] client lang: <none>
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] server lang: <none>
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] kex follows: False
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] Compression: none
2025-11-13T01:39:24.670 [DEBUG] [Thread-26350] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:39:24.686 [DEBUG] [Thread-26350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:39:24.686 [DEBUG] [Thread-26350] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:39:24.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:39:24.687 [DEBUG] [Thread-26350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:39:24.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:39:24.689 [DEBUG] [Thread-26350] [transport.py] [_log()] userauth is OK
2025-11-13T01:39:24.689 [DEBUG] [Thread-26350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:39:24.689 [DEBUG] [Thread-26350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:39:24.690 [DEBUG] [Thread-26350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:39:24.690 [DEBUG] [Thread-26350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:39:24.713 [INFO] [Thread-26350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:39:24.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:39:25.325 [DEBUG] [Thread-26350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:39:25.325 [DEBUG] [Thread-26350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:39:25.326 [DEBUG] [Thread-26350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:39:25.365 [DEBUG] [Thread-26350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:39:25.366 [DEBUG] [Thread-26350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:39:25.369 [DEBUG] [Thread-26350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:39:25.382 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:39:25.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:39:25.383 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:39:25.385 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:39:25.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:39:25.391 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:39:25.392 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:39:25.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:39:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:39:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.985161 -999.00  +14.90   9.94     58   +6.80 1 1 1 1 1     0    0 8.10 -16.38 ZNESW 8.2 9.9 275.6 13.2 15.2 -24.1 15.2 -23.1 14.8 -22.7 15.2 -23.7
2025-11-13T01:39:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:39:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:39:25.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.985161
2025-11-13T01:39:25.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:39:25.393 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:39:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:39:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:39:25.394 [DEBUG] [Thread-26350] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:39:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:39:25.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:39:11', tmtdew=9.5, humidity=52.8, cloud=0.0, wind=16.57, temperature=14.84, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:39:11', seeing=1.03, atlas_timestamp='2025-11-12T23:38:37.910', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:37:00')
2025-11-13T01:39:25.476 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:39:25.490 [DEBUG] [Thread-26353] [transport.py] [_log()] starting thread (client mode): 0x149459c0
2025-11-13T01:39:25.490 [DEBUG] [Thread-26353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:39:25.504 [DEBUG] [Thread-26353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:39:25.505 [INFO] [Thread-26353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:39:25.512 [DEBUG] [Thread-26353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] client lang: <none>
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] server lang: <none>
2025-11-13T01:39:25.513 [DEBUG] [Thread-26353] [transport.py] [_log()] kex follows: False
2025-11-13T01:39:25.514 [DEBUG] [Thread-26353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:39:25.514 [DEBUG] [Thread-26353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:39:25.514 [DEBUG] [Thread-26353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:39:25.514 [DEBUG] [Thread-26353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:39:25.514 [DEBUG] [Thread-26353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:39:25.514 [DEBUG] [Thread-26353] [transport.py] [_log()] Compression: none
2025-11-13T01:39:25.514 [DEBUG] [Thread-26353] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:39:25.573 [DEBUG] [Thread-26353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:39:25.574 [DEBUG] [Thread-26353] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:39:25.574 [DEBUG] [Thread-26353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:39:25.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:39:25.575 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:39:25.632 [DEBUG] [Thread-26353] [transport.py] [_log()] userauth is OK
2025-11-13T01:39:25.632 [DEBUG] [Thread-26353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:39:25.633 [DEBUG] [Thread-26353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:39:25.633 [DEBUG] [Thread-26353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:39:25.633 [DEBUG] [Thread-26353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:39:25.652 [INFO] [Thread-26353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:39:25.652 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:39:25.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:39:26.485 [DEBUG] [Thread-26353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:39:26.485 [DEBUG] [Thread-26353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:39:26.533 [DEBUG] [Thread-26353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:39:26.534 [DEBUG] [Thread-26353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:39:26.543 [DEBUG] [Thread-26353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:39:26.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:39:26.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-11-13T01:39:26.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-11-13T01:39:26.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:39:26.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:39:26.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:39:26.580 [DEBUG] [Thread-26353] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:39:29.207 [DEBUG] [Thread-26355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:39:40.416 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:39:40.417 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:39:44.256 [DEBUG] [Thread-26356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:39:56.593 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:39:56.593 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:39:56.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-11-13T01:39:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 39, 43), 9.45, 53.14, 0.0, 16.23, 14.74, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:39:57.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:39:43
2025-11-13T01:39:57.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:39:57.526 [DEBUG] [Thread-26357] [transport.py] [_log()] starting thread (client mode): 0x14980910
2025-11-13T01:39:57.526 [DEBUG] [Thread-26357] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:39:57.548 [DEBUG] [Thread-26357] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:39:57.548 [INFO] [Thread-26357] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:39:57.551 [DEBUG] [Thread-26357] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] client lang: <none>
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] server lang: <none>
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] kex follows: False
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] Compression: none
2025-11-13T01:39:57.552 [DEBUG] [Thread-26357] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:39:57.569 [DEBUG] [Thread-26357] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:39:57.570 [DEBUG] [Thread-26357] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:39:57.570 [DEBUG] [Thread-26357] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:39:57.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:39:57.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:39:57.572 [DEBUG] [Thread-26357] [transport.py] [_log()] userauth is OK
2025-11-13T01:39:57.573 [DEBUG] [Thread-26357] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:39:57.573 [DEBUG] [Thread-26357] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:39:57.573 [DEBUG] [Thread-26357] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:39:57.573 [DEBUG] [Thread-26357] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:39:57.597 [INFO] [Thread-26357] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:39:57.598 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:39:58.236 [DEBUG] [Thread-26357] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:39:58.236 [DEBUG] [Thread-26357] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:39:58.236 [DEBUG] [Thread-26357] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:39:58.277 [DEBUG] [Thread-26357] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:39:58.277 [DEBUG] [Thread-26357] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:39:58.281 [DEBUG] [Thread-26357] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:39:58.291 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:39:58.292 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:39:58.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:39:58.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:39:58.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:39:58.301 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:39:58.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:39:58.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:39:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:39:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.985856 -999.00  +14.80   8.98     58   +6.70 1 1 1 1 1     0    0 7.79 -21.06 ZNESW 11.2 9.0 282.6 12.8 15.2 -24.1 15.1 -23.0 14.8 -22.6 15.1 -23.5
2025-11-13T01:39:58.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:39:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:39:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.985856
2025-11-13T01:39:58.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:39:58.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:39:58.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:39:58.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:39:58.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:39:58.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:39:43', tmtdew=9.45, humidity=53.14, cloud=0.0, wind=16.23, temperature=14.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:39:43', seeing=1.03, atlas_timestamp='2025-11-12T23:39:37.958', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:37:00')
2025-11-13T01:39:58.304 [DEBUG] [Thread-26357] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:39:58.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:39:58.401 [DEBUG] [Thread-26360] [transport.py] [_log()] starting thread (client mode): 0x14983cd0
2025-11-13T01:39:58.401 [DEBUG] [Thread-26360] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:39:58.416 [DEBUG] [Thread-26360] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:39:58.416 [INFO] [Thread-26360] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] client lang: <none>
2025-11-13T01:39:58.424 [DEBUG] [Thread-26360] [transport.py] [_log()] server lang: <none>
2025-11-13T01:39:58.425 [DEBUG] [Thread-26360] [transport.py] [_log()] kex follows: False
2025-11-13T01:39:58.425 [DEBUG] [Thread-26360] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:39:58.425 [DEBUG] [Thread-26360] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:39:58.425 [DEBUG] [Thread-26360] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:39:58.425 [DEBUG] [Thread-26360] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:39:58.425 [DEBUG] [Thread-26360] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:39:58.425 [DEBUG] [Thread-26360] [transport.py] [_log()] Compression: none
2025-11-13T01:39:58.425 [DEBUG] [Thread-26360] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:39:58.484 [DEBUG] [Thread-26360] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:39:58.484 [DEBUG] [Thread-26360] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:39:58.485 [DEBUG] [Thread-26360] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:39:58.485 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:39:58.486 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:39:58.540 [DEBUG] [Thread-26360] [transport.py] [_log()] userauth is OK
2025-11-13T01:39:58.540 [DEBUG] [Thread-26360] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:39:58.540 [DEBUG] [Thread-26360] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:39:58.540 [DEBUG] [Thread-26360] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:39:58.540 [DEBUG] [Thread-26360] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:39:58.558 [INFO] [Thread-26360] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:39:58.559 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:39:58.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:39:59.292 [DEBUG] [Thread-26362 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:39:59.355 [DEBUG] [Thread-26360] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:39:59.355 [DEBUG] [Thread-26360] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:39:59.402 [DEBUG] [Thread-26360] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:39:59.403 [DEBUG] [Thread-26360] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:39:59.412 [DEBUG] [Thread-26360] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:39:59.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:39:59.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-11-13T01:39:59.430 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:39:59.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:39:59.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:39:59.440 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:39:59.448 [DEBUG] [Thread-26360] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:40:10.725 [DEBUG] [Thread-26363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:40:14.343 [DEBUG] [Thread-26364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:40:29.375 [DEBUG] [Thread-26365 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:40:29.471 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:40:29.471 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:40:29.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-11-13T01:40:30.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 40, 15), 9.47, 53.09, 0.0, 15.05, 14.74, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:40:30.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:40:15
2025-11-13T01:40:30.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:40:30.381 [DEBUG] [Thread-26366] [transport.py] [_log()] starting thread (client mode): 0x1737e650
2025-11-13T01:40:30.381 [DEBUG] [Thread-26366] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:40:30.402 [DEBUG] [Thread-26366] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:40:30.402 [INFO] [Thread-26366] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:40:30.405 [DEBUG] [Thread-26366] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:40:30.405 [DEBUG] [Thread-26366] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:40:30.405 [DEBUG] [Thread-26366] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:40:30.405 [DEBUG] [Thread-26366] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] client lang: <none>
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] server lang: <none>
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] kex follows: False
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:40:30.406 [DEBUG] [Thread-26366] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:40:30.407 [DEBUG] [Thread-26366] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:40:30.407 [DEBUG] [Thread-26366] [transport.py] [_log()] Compression: none
2025-11-13T01:40:30.407 [DEBUG] [Thread-26366] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:40:30.426 [DEBUG] [Thread-26366] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:40:30.427 [DEBUG] [Thread-26366] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:40:30.427 [DEBUG] [Thread-26366] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:40:30.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:40:30.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:40:30.430 [DEBUG] [Thread-26366] [transport.py] [_log()] userauth is OK
2025-11-13T01:40:30.430 [DEBUG] [Thread-26366] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:40:30.430 [DEBUG] [Thread-26366] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:40:30.430 [DEBUG] [Thread-26366] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:40:30.430 [DEBUG] [Thread-26366] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:40:30.450 [INFO] [Thread-26366] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:40:30.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:40:31.107 [DEBUG] [Thread-26366] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:40:31.107 [DEBUG] [Thread-26366] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:40:31.107 [DEBUG] [Thread-26366] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:40:31.148 [DEBUG] [Thread-26366] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:40:31.148 [DEBUG] [Thread-26366] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:40:31.152 [DEBUG] [Thread-26366] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:40:31.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:40:31.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:40:31.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:40:31.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:40:31.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:40:31.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:40:31.176 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:40:31.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:40:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:40:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.986202 -999.00  +14.80   8.45     57   +6.50 1 1 1 1 1     0    0 7.81 -20.57 ZNESW 8.4 8.4 264.8 14.3 15.2 -24.1 15.1 -23.1 17.9 -25.5 15.1 -23.4
2025-11-13T01:40:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:40:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:40:31.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.986202
2025-11-13T01:40:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:40:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:40:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:40:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:40:31.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:40:31.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:40:15', tmtdew=9.47, humidity=53.09, cloud=0.0, wind=15.05, temperature=14.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:40:15', seeing=1.11, atlas_timestamp='2025-11-12T23:40:07.853', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:37:00')
2025-11-13T01:40:31.179 [DEBUG] [Thread-26366] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:40:31.262 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:40:31.275 [DEBUG] [Thread-26369] [transport.py] [_log()] starting thread (client mode): 0x1737f760
2025-11-13T01:40:31.275 [DEBUG] [Thread-26369] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:40:31.289 [DEBUG] [Thread-26369] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:40:31.290 [INFO] [Thread-26369] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:40:31.297 [DEBUG] [Thread-26369] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:40:31.297 [DEBUG] [Thread-26369] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:40:31.297 [DEBUG] [Thread-26369] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:40:31.297 [DEBUG] [Thread-26369] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] client lang: <none>
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] server lang: <none>
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] kex follows: False
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] Compression: none
2025-11-13T01:40:31.298 [DEBUG] [Thread-26369] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:40:31.356 [DEBUG] [Thread-26369] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:40:31.356 [DEBUG] [Thread-26369] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:40:31.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:40:31.358 [DEBUG] [Thread-26369] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:40:31.359 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:40:31.412 [DEBUG] [Thread-26369] [transport.py] [_log()] userauth is OK
2025-11-13T01:40:31.412 [DEBUG] [Thread-26369] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:40:31.412 [DEBUG] [Thread-26369] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:40:31.412 [DEBUG] [Thread-26369] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:40:31.413 [DEBUG] [Thread-26369] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:40:31.431 [INFO] [Thread-26369] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:40:31.431 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:40:31.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:40:32.278 [DEBUG] [Thread-26369] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:40:32.278 [DEBUG] [Thread-26369] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:40:32.326 [DEBUG] [Thread-26369] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:40:32.326 [DEBUG] [Thread-26369] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:40:32.336 [DEBUG] [Thread-26369] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:40:32.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:40:32.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-11-13T01:40:32.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-11-13T01:40:32.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:40:32.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:40:32.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:40:32.372 [DEBUG] [Thread-26369] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:40:40.619 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:40:40.621 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:40:44.422 [DEBUG] [Thread-26371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:40:59.483 [DEBUG] [Thread-26372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:41:02.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:41:02.377 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:41:02.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:41:03.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 40, 47), 9.48, 52.88, 0.0, 16.36, 14.74, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:41:03.031 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:40:47
2025-11-13T01:41:03.154 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:41:03.299 [DEBUG] [Thread-26373] [transport.py] [_log()] starting thread (client mode): 0x1737c0a0
2025-11-13T01:41:03.299 [DEBUG] [Thread-26373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:41:03.317 [DEBUG] [Thread-26373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:41:03.317 [INFO] [Thread-26373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:41:03.320 [DEBUG] [Thread-26373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:41:03.320 [DEBUG] [Thread-26373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:41:03.320 [DEBUG] [Thread-26373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:41:03.320 [DEBUG] [Thread-26373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:41:03.320 [DEBUG] [Thread-26373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:41:03.320 [DEBUG] [Thread-26373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:41:03.320 [DEBUG] [Thread-26373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:41:03.320 [DEBUG] [Thread-26373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] client lang: <none>
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] server lang: <none>
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] kex follows: False
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] Compression: none
2025-11-13T01:41:03.321 [DEBUG] [Thread-26373] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:41:03.339 [DEBUG] [Thread-26373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:41:03.339 [DEBUG] [Thread-26373] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:41:03.340 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:41:03.341 [DEBUG] [Thread-26373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:41:03.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:41:03.343 [DEBUG] [Thread-26373] [transport.py] [_log()] userauth is OK
2025-11-13T01:41:03.343 [DEBUG] [Thread-26373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:41:03.343 [DEBUG] [Thread-26373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:41:03.343 [DEBUG] [Thread-26373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:41:03.344 [DEBUG] [Thread-26373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:41:03.370 [INFO] [Thread-26373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:41:03.371 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:41:03.974 [DEBUG] [Thread-26373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:41:03.975 [DEBUG] [Thread-26373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:41:03.975 [DEBUG] [Thread-26373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:41:04.015 [DEBUG] [Thread-26373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:41:04.015 [DEBUG] [Thread-26373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:41:04.018 [DEBUG] [Thread-26373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:41:04.029 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:41:04.029 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:41:04.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:41:04.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:41:04.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:41:04.039 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:41:04.039 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:41:04.040 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:41:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:41:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.986550 -999.00  +14.80  12.13     57   +6.60 1 1 1 1 1     0    0 7.84 -19.57 ZNESW 12.4 12.1 266.4 15.2 15.2 -24.1 15.1 -23.1 14.8 -22.5 15.1 -23.5
2025-11-13T01:41:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:41:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:41:04.040 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.986550
2025-11-13T01:41:04.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:41:04.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:41:04.041 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:41:04.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:41:04.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:41:04.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:40:47', tmtdew=9.48, humidity=52.88, cloud=0.0, wind=16.36, temperature=14.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:40:47', seeing=1.11, atlas_timestamp='2025-11-12T23:40:37.920', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:37:00')
2025-11-13T01:41:04.042 [DEBUG] [Thread-26373] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:41:04.126 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:41:04.138 [DEBUG] [Thread-26376] [transport.py] [_log()] starting thread (client mode): 0x17346860
2025-11-13T01:41:04.138 [DEBUG] [Thread-26376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:41:04.152 [DEBUG] [Thread-26376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:41:04.153 [INFO] [Thread-26376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:41:04.160 [DEBUG] [Thread-26376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:41:04.160 [DEBUG] [Thread-26376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] client lang: <none>
2025-11-13T01:41:04.161 [DEBUG] [Thread-26376] [transport.py] [_log()] server lang: <none>
2025-11-13T01:41:04.162 [DEBUG] [Thread-26376] [transport.py] [_log()] kex follows: False
2025-11-13T01:41:04.162 [DEBUG] [Thread-26376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:41:04.162 [DEBUG] [Thread-26376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:41:04.162 [DEBUG] [Thread-26376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:41:04.162 [DEBUG] [Thread-26376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:41:04.162 [DEBUG] [Thread-26376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:41:04.162 [DEBUG] [Thread-26376] [transport.py] [_log()] Compression: none
2025-11-13T01:41:04.163 [DEBUG] [Thread-26376] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:41:04.224 [DEBUG] [Thread-26376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:41:04.225 [DEBUG] [Thread-26376] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:41:04.226 [DEBUG] [Thread-26376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:41:04.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:41:04.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:41:04.280 [DEBUG] [Thread-26376] [transport.py] [_log()] userauth is OK
2025-11-13T01:41:04.280 [DEBUG] [Thread-26376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:41:04.280 [DEBUG] [Thread-26376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:41:04.280 [DEBUG] [Thread-26376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:41:04.280 [DEBUG] [Thread-26376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:41:04.300 [INFO] [Thread-26376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:41:04.300 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:41:04.301 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:41:05.126 [DEBUG] [Thread-26376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:41:05.126 [DEBUG] [Thread-26376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:41:05.173 [DEBUG] [Thread-26376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:41:05.173 [DEBUG] [Thread-26376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:41:05.182 [DEBUG] [Thread-26376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:41:05.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:41:05.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-11-13T01:41:05.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-11-13T01:41:05.208 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:41:05.208 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:41:05.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:41:05.216 [DEBUG] [Thread-26376] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:41:10.784 [DEBUG] [Thread-26378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:41:14.515 [DEBUG] [Thread-26379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:41:29.571 [DEBUG] [Thread-26380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:41:35.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:41:35.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:41:35.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-11-13T01:41:35.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 41, 19), 9.5, 52.8, 0.0, 15.56, 14.74, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:41:35.911 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:41:19
2025-11-13T01:41:36.039 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:41:36.192 [DEBUG] [Thread-26381] [transport.py] [_log()] starting thread (client mode): 0x1493f010
2025-11-13T01:41:36.192 [DEBUG] [Thread-26381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:41:36.212 [DEBUG] [Thread-26381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:41:36.213 [INFO] [Thread-26381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] client lang: <none>
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] server lang: <none>
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] kex follows: False
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] Compression: none
2025-11-13T01:41:36.216 [DEBUG] [Thread-26381] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:41:36.233 [DEBUG] [Thread-26381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:41:36.234 [DEBUG] [Thread-26381] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:41:36.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:41:36.234 [DEBUG] [Thread-26381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:41:36.234 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:41:36.235 [DEBUG] [Thread-26381] [transport.py] [_log()] userauth is OK
2025-11-13T01:41:36.235 [DEBUG] [Thread-26381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:41:36.235 [DEBUG] [Thread-26381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:41:36.235 [DEBUG] [Thread-26381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:41:36.235 [DEBUG] [Thread-26381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:41:36.244 [INFO] [Thread-26381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:41:36.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:41:36.865 [DEBUG] [Thread-26381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:41:36.865 [DEBUG] [Thread-26381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:41:36.865 [DEBUG] [Thread-26381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:41:36.906 [DEBUG] [Thread-26381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:41:36.906 [DEBUG] [Thread-26381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:41:36.908 [DEBUG] [Thread-26381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:41:36.920 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:41:36.920 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:41:36.921 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:41:36.922 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:41:36.926 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:41:36.927 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:41:36.927 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.986897 -999.00  +14.80  13.35     57   +6.50 1 1 1 1 1     0    0 7.86 -17.71 ZNESW 13.3 13.3 279.6 19.8 15.2 -24.1 15.1 -23.1 14.8 -22.5 15.1 -23.5
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.986897
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:41:36.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:41:19', tmtdew=9.5, humidity=52.8, cloud=0.0, wind=15.56, temperature=14.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:41:19', seeing=1.14, atlas_timestamp='2025-11-12T23:41:07.901', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006249999999999645, 0.021750000000000824, 0.02325000000000088, 0.019499999999998963, 0.027499999999999858, 0.06725000000000136, -0.017000000000001236, -0.053749999999999076, 0.016000000000000014, 0.045999999999999375, 0.08225000000000016, 0.034000000000000696, 0.09299999999999997, 0.038750000000000284, -0.03900000000000148, -0.015000000000000568, 0.003249999999999531, 0.0519999999999996, 0.09549999999999947, 0.05424999999999969, 0.07299999999999862, 0.05074999999999896, 0.0012500000000006395, -0.051249999999999574, 0.02999999999999936, 0.09849999999999959, 0.07574999999999932, 0.20149999999999935, 0.1374999999999993, 0.08750000000000036, 0.031500000000001194, -0.01899999999999835, 0.04374999999999929], zp_timestamp='2025-11-12T23:37:00')
2025-11-13T01:41:36.928 [DEBUG] [Thread-26381] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:41:37.003 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:41:37.016 [DEBUG] [Thread-26384] [transport.py] [_log()] starting thread (client mode): 0x1737f8b0
2025-11-13T01:41:37.016 [DEBUG] [Thread-26384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:41:37.036 [DEBUG] [Thread-26384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:41:37.036 [INFO] [Thread-26384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:41:37.043 [DEBUG] [Thread-26384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:41:37.043 [DEBUG] [Thread-26384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:41:37.043 [DEBUG] [Thread-26384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:41:37.043 [DEBUG] [Thread-26384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] client lang: <none>
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] server lang: <none>
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] kex follows: False
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] Compression: none
2025-11-13T01:41:37.044 [DEBUG] [Thread-26384] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:41:37.102 [DEBUG] [Thread-26384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:41:37.102 [DEBUG] [Thread-26384] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:41:37.102 [DEBUG] [Thread-26384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:41:37.102 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:41:37.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:41:37.159 [DEBUG] [Thread-26384] [transport.py] [_log()] userauth is OK
2025-11-13T01:41:37.159 [DEBUG] [Thread-26384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:41:37.159 [DEBUG] [Thread-26384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:41:37.159 [DEBUG] [Thread-26384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:41:37.159 [DEBUG] [Thread-26384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:41:37.173 [INFO] [Thread-26384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:41:37.173 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:41:37.173 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:41:38.010 [DEBUG] [Thread-26384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:41:38.011 [DEBUG] [Thread-26384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:41:38.058 [DEBUG] [Thread-26384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:41:38.058 [DEBUG] [Thread-26384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:41:38.067 [DEBUG] [Thread-26384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:41:38.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:41:38.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-11-13T01:41:38.083 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:41:38.091 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:41:38.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:41:38.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:41:38.099 [DEBUG] [Thread-26384] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:41:40.823 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:41:40.824 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:41:44.610 [DEBUG] [Thread-26386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:41:59.662 [DEBUG] [Thread-26387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:42:08.121 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:42:08.122 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:42:08.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-11-13T01:42:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 41, 51), 9.61, 52.72, 0.0, 16.39, 14.74, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:42:08.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:41:51
2025-11-13T01:42:08.892 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:42:09.037 [DEBUG] [Thread-26388] [transport.py] [_log()] starting thread (client mode): 0x19ddafb0
2025-11-13T01:42:09.037 [DEBUG] [Thread-26388] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:42:09.056 [DEBUG] [Thread-26388] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:42:09.057 [INFO] [Thread-26388] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:42:09.060 [DEBUG] [Thread-26388] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:42:09.060 [DEBUG] [Thread-26388] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:42:09.060 [DEBUG] [Thread-26388] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:42:09.060 [DEBUG] [Thread-26388] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:42:09.060 [DEBUG] [Thread-26388] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:42:09.060 [DEBUG] [Thread-26388] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:42:09.060 [DEBUG] [Thread-26388] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] client lang: <none>
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] server lang: <none>
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] kex follows: False
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] Compression: none
2025-11-13T01:42:09.061 [DEBUG] [Thread-26388] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:42:09.078 [DEBUG] [Thread-26388] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:42:09.079 [DEBUG] [Thread-26388] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:42:09.080 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:42:09.080 [DEBUG] [Thread-26388] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:42:09.081 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:42:09.082 [DEBUG] [Thread-26388] [transport.py] [_log()] userauth is OK
2025-11-13T01:42:09.082 [DEBUG] [Thread-26388] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:42:09.083 [DEBUG] [Thread-26388] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:42:09.083 [DEBUG] [Thread-26388] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:42:09.083 [DEBUG] [Thread-26388] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:42:09.101 [INFO] [Thread-26388] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:42:09.101 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:42:09.760 [DEBUG] [Thread-26388] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:42:09.760 [DEBUG] [Thread-26388] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:42:09.761 [DEBUG] [Thread-26388] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:42:09.801 [DEBUG] [Thread-26388] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:42:09.801 [DEBUG] [Thread-26388] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:42:09.804 [DEBUG] [Thread-26388] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:42:09.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:42:09.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:42:09.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:42:09.820 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:42:09.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:42:09.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:42:09.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:42:09.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:42:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:42:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.987244 -999.00  +14.70  10.40     57   +6.50 1 1 1 1 1     0    0 7.71 -16.30 ZNESW 10.7 10.4 274.0 17.1 15.2 -24.1 15.1 -23.1 14.8 -22.8 15.1 -23.3
2025-11-13T01:42:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:42:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:42:09.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.987244
2025-11-13T01:42:09.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:42:09.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:42:09.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:42:09.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:42:09.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:42:09.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:41:51', tmtdew=9.61, humidity=52.72, cloud=0.0, wind=16.39, temperature=14.74, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:41:51', seeing=1.05, atlas_timestamp='2025-11-12T23:41:37.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:40:00')
2025-11-13T01:42:09.831 [DEBUG] [Thread-26388] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:42:09.926 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:42:09.938 [DEBUG] [Thread-26391] [transport.py] [_log()] starting thread (client mode): 0x19dd8fd0
2025-11-13T01:42:09.938 [DEBUG] [Thread-26391] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:42:09.953 [DEBUG] [Thread-26391] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:42:09.953 [INFO] [Thread-26391] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:42:09.960 [DEBUG] [Thread-26391] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:42:09.960 [DEBUG] [Thread-26391] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:42:09.960 [DEBUG] [Thread-26391] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:42:09.960 [DEBUG] [Thread-26391] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] client lang: <none>
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] server lang: <none>
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] kex follows: False
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] Compression: none
2025-11-13T01:42:09.961 [DEBUG] [Thread-26391] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:42:10.020 [DEBUG] [Thread-26391] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:42:10.020 [DEBUG] [Thread-26391] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:42:10.021 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:42:10.022 [DEBUG] [Thread-26391] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:42:10.022 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:42:10.076 [DEBUG] [Thread-26391] [transport.py] [_log()] userauth is OK
2025-11-13T01:42:10.076 [DEBUG] [Thread-26391] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:42:10.077 [DEBUG] [Thread-26391] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:42:10.077 [DEBUG] [Thread-26391] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:42:10.077 [DEBUG] [Thread-26391] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:42:10.095 [INFO] [Thread-26391] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:42:10.095 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:42:10.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:42:10.840 [DEBUG] [Thread-26393 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:42:10.898 [DEBUG] [Thread-26391] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:42:10.898 [DEBUG] [Thread-26391] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:42:10.945 [DEBUG] [Thread-26391] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:42:10.946 [DEBUG] [Thread-26391] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:42:10.955 [DEBUG] [Thread-26391] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:42:10.964 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:42:10.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:42:10.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-11-13T01:42:10.982 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:42:10.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:42:10.983 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:42:10.990 [DEBUG] [Thread-26391] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:42:14.692 [DEBUG] [Thread-26394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:42:29.741 [DEBUG] [Thread-26395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:42:41.013 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:42:41.013 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:42:41.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-11-13T01:42:41.025 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:42:41.026 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:42:41.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 42, 23), 9.67, 52.54, 0.0, 16.15, 14.79, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:42:41.649 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:42:23
2025-11-13T01:42:41.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:42:41.917 [DEBUG] [Thread-26396] [transport.py] [_log()] starting thread (client mode): 0x14981a20
2025-11-13T01:42:41.917 [DEBUG] [Thread-26396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:42:41.937 [DEBUG] [Thread-26396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:42:41.938 [INFO] [Thread-26396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:42:41.941 [DEBUG] [Thread-26396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:42:41.941 [DEBUG] [Thread-26396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:42:41.941 [DEBUG] [Thread-26396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:42:41.941 [DEBUG] [Thread-26396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:42:41.941 [DEBUG] [Thread-26396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:42:41.941 [DEBUG] [Thread-26396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:42:41.941 [DEBUG] [Thread-26396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:42:41.941 [DEBUG] [Thread-26396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] client lang: <none>
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] server lang: <none>
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] kex follows: False
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] Compression: none
2025-11-13T01:42:41.942 [DEBUG] [Thread-26396] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:42:41.958 [DEBUG] [Thread-26396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:42:41.959 [DEBUG] [Thread-26396] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:42:41.959 [DEBUG] [Thread-26396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:42:41.959 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:42:41.960 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:42:41.961 [DEBUG] [Thread-26396] [transport.py] [_log()] userauth is OK
2025-11-13T01:42:41.961 [DEBUG] [Thread-26396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:42:41.961 [DEBUG] [Thread-26396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:42:41.961 [DEBUG] [Thread-26396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:42:41.961 [DEBUG] [Thread-26396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:42:41.994 [INFO] [Thread-26396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:42:41.994 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:42:42.615 [DEBUG] [Thread-26396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:42:42.615 [DEBUG] [Thread-26396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:42:42.616 [DEBUG] [Thread-26396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:42:42.657 [DEBUG] [Thread-26396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:42:42.657 [DEBUG] [Thread-26396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:42:42.660 [DEBUG] [Thread-26396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:42:42.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:42:42.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:42:42.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:42:42.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:42:42.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:42:42.684 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:42:42.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:42:42.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:42:42.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:42:42.685 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.987591 -999.00  +14.70  14.13     57   +6.40 1 1 1 1 1     0    0 7.96 -12.76 ZNESW 10.3 14.1 281.0 18.8 15.2 -24.0 15.1 -23.0 14.8 -22.6 15.1 -23.7
2025-11-13T01:42:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:42:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:42:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.987591
2025-11-13T01:42:42.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:42:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:42:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:42:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:42:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:42:42.687 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:42:23', tmtdew=9.67, humidity=52.54, cloud=0.0, wind=16.15, temperature=14.79, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:42:23', seeing=0.96, atlas_timestamp='2025-11-12T23:42:07.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:40:00')
2025-11-13T01:42:42.688 [DEBUG] [Thread-26396] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:42:42.769 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:42:42.783 [DEBUG] [Thread-26399] [transport.py] [_log()] starting thread (client mode): 0x14981240
2025-11-13T01:42:42.784 [DEBUG] [Thread-26399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:42:42.798 [DEBUG] [Thread-26399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:42:42.799 [INFO] [Thread-26399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:42:42.806 [DEBUG] [Thread-26399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] client lang: <none>
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] server lang: <none>
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] kex follows: False
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:42:42.807 [DEBUG] [Thread-26399] [transport.py] [_log()] Compression: none
2025-11-13T01:42:42.808 [DEBUG] [Thread-26399] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:42:42.865 [DEBUG] [Thread-26399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:42:42.866 [DEBUG] [Thread-26399] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:42:42.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:42:42.867 [DEBUG] [Thread-26399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:42:42.868 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:42:42.924 [DEBUG] [Thread-26399] [transport.py] [_log()] userauth is OK
2025-11-13T01:42:42.924 [DEBUG] [Thread-26399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:42:42.924 [DEBUG] [Thread-26399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:42:42.924 [DEBUG] [Thread-26399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:42:42.924 [DEBUG] [Thread-26399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:42:42.944 [INFO] [Thread-26399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:42:42.944 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:42:42.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:42:43.772 [DEBUG] [Thread-26399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:42:43.772 [DEBUG] [Thread-26399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:42:43.819 [DEBUG] [Thread-26399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:42:43.820 [DEBUG] [Thread-26399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:42:43.829 [DEBUG] [Thread-26399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:42:43.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:42:43.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-11-13T01:42:43.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-11-13T01:42:43.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:42:43.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:42:43.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:42:43.866 [DEBUG] [Thread-26399] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:42:44.780 [DEBUG] [Thread-26401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:42:59.826 [DEBUG] [Thread-26402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:43:10.898 [DEBUG] [Thread-26403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:43:13.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:43:13.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:43:13.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-11-13T01:43:14.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 42, 55), 9.68, 52.47, 0.0, 14.43, 14.62, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:43:14.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:42:55
2025-11-13T01:43:14.662 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:43:14.808 [DEBUG] [Thread-26404] [transport.py] [_log()] starting thread (client mode): 0x173460e0
2025-11-13T01:43:14.808 [DEBUG] [Thread-26404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:43:14.830 [DEBUG] [Thread-26404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:43:14.831 [INFO] [Thread-26404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] client lang: <none>
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] server lang: <none>
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] kex follows: False
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] Compression: none
2025-11-13T01:43:14.834 [DEBUG] [Thread-26404] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:43:14.844 [DEBUG] [Thread-26404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:43:14.844 [DEBUG] [Thread-26404] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:43:14.845 [DEBUG] [Thread-26404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:43:14.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:43:14.846 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:43:14.847 [DEBUG] [Thread-26404] [transport.py] [_log()] userauth is OK
2025-11-13T01:43:14.847 [DEBUG] [Thread-26404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:43:14.847 [DEBUG] [Thread-26404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:43:14.847 [DEBUG] [Thread-26404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:43:14.847 [DEBUG] [Thread-26404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:43:14.862 [DEBUG] [Thread-26406 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:43:14.882 [INFO] [Thread-26404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:43:14.883 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:43:15.464 [DEBUG] [Thread-26404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:43:15.464 [DEBUG] [Thread-26404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:43:15.465 [DEBUG] [Thread-26404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:43:15.505 [DEBUG] [Thread-26404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:43:15.505 [DEBUG] [Thread-26404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:43:15.508 [DEBUG] [Thread-26404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:43:15.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:43:15.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:43:15.517 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:43:15.518 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:43:15.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:43:15.525 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:43:15.525 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:43:15.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:43:15.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:43:15.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.988286 -999.00  +14.80  14.28     56   +6.10 1 1 1 1 1     0    0 8.10 -5.43 ZNESW 11.6 14.3 273.6 16.8 15.2 -23.9 15.0 -23.1 14.8 -22.5 15.1 -23.5
2025-11-13T01:43:15.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:43:15.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:43:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.988286
2025-11-13T01:43:15.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:43:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:43:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:43:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:43:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:43:15.528 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:42:55', tmtdew=9.68, humidity=52.47, cloud=0.0, wind=14.43, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:42:55', seeing=0.96, atlas_timestamp='2025-11-12T23:43:07.910', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:40:00')
2025-11-13T01:43:15.528 [DEBUG] [Thread-26404] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:43:15.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:43:15.625 [DEBUG] [Thread-26408] [transport.py] [_log()] starting thread (client mode): 0x1496b130
2025-11-13T01:43:15.625 [DEBUG] [Thread-26408] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:43:15.641 [DEBUG] [Thread-26408] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:43:15.641 [INFO] [Thread-26408] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] client lang: <none>
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] server lang: <none>
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] kex follows: False
2025-11-13T01:43:15.649 [DEBUG] [Thread-26408] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:43:15.650 [DEBUG] [Thread-26408] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:43:15.650 [DEBUG] [Thread-26408] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:43:15.650 [DEBUG] [Thread-26408] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:43:15.650 [DEBUG] [Thread-26408] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:43:15.650 [DEBUG] [Thread-26408] [transport.py] [_log()] Compression: none
2025-11-13T01:43:15.650 [DEBUG] [Thread-26408] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:43:15.711 [DEBUG] [Thread-26408] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:43:15.712 [DEBUG] [Thread-26408] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:43:15.713 [DEBUG] [Thread-26408] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:43:15.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:43:15.714 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:43:15.768 [DEBUG] [Thread-26408] [transport.py] [_log()] userauth is OK
2025-11-13T01:43:15.768 [DEBUG] [Thread-26408] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:43:15.768 [DEBUG] [Thread-26408] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:43:15.768 [DEBUG] [Thread-26408] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:43:15.768 [DEBUG] [Thread-26408] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:43:15.787 [INFO] [Thread-26408] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:43:15.788 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:43:15.788 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:43:16.673 [DEBUG] [Thread-26408] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:43:16.674 [DEBUG] [Thread-26408] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:43:16.721 [DEBUG] [Thread-26408] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:43:16.721 [DEBUG] [Thread-26408] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:43:16.730 [DEBUG] [Thread-26408] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:43:16.738 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:43:16.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-11-13T01:43:16.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-11-13T01:43:16.755 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:43:16.756 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:43:16.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:43:16.764 [DEBUG] [Thread-26408] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:43:29.899 [DEBUG] [Thread-26410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:43:41.228 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:43:41.229 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:43:44.946 [DEBUG] [Thread-26411 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:43:46.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:43:46.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:43:46.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-11-13T01:43:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 43, 27), 9.68, 52.47, 0.0, 13.6, 14.59, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:43:47.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:43:27
2025-11-13T01:43:47.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:43:47.682 [DEBUG] [Thread-26412] [transport.py] [_log()] starting thread (client mode): 0x149215d0
2025-11-13T01:43:47.682 [DEBUG] [Thread-26412] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:43:47.702 [DEBUG] [Thread-26412] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:43:47.702 [INFO] [Thread-26412] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] client lang: <none>
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] server lang: <none>
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] kex follows: False
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] Compression: none
2025-11-13T01:43:47.705 [DEBUG] [Thread-26412] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:43:47.720 [DEBUG] [Thread-26412] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:43:47.720 [DEBUG] [Thread-26412] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:43:47.721 [DEBUG] [Thread-26412] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:43:47.721 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:43:47.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:43:47.723 [DEBUG] [Thread-26412] [transport.py] [_log()] userauth is OK
2025-11-13T01:43:47.723 [DEBUG] [Thread-26412] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:43:47.724 [DEBUG] [Thread-26412] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:43:47.724 [DEBUG] [Thread-26412] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:43:47.724 [DEBUG] [Thread-26412] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:43:47.747 [INFO] [Thread-26412] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:43:47.749 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:43:48.351 [DEBUG] [Thread-26412] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:43:48.351 [DEBUG] [Thread-26412] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:43:48.352 [DEBUG] [Thread-26412] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:43:48.392 [DEBUG] [Thread-26412] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:43:48.392 [DEBUG] [Thread-26412] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:43:48.395 [DEBUG] [Thread-26412] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:43:48.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:43:48.409 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:43:48.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:43:48.412 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:43:48.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:43:48.418 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:43:48.418 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:43:48.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:43:48.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.988633 -999.00  +14.90  15.65     56   +6.30 1 1 1 1 1     0    0 8.38 -1.81 ZNESW 10.9 15.7 271.8 18.6 15.2 -24.0 15.0 -23.1 14.8 -22.5 15.1 -23.3
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.988633
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:43:48.419 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:43:27', tmtdew=9.68, humidity=52.47, cloud=0.0, wind=13.6, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:43:27', seeing=1.1, atlas_timestamp='2025-11-12T23:43:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:40:00')
2025-11-13T01:43:48.419 [DEBUG] [Thread-26412] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:43:48.500 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:43:48.512 [DEBUG] [Thread-26415] [transport.py] [_log()] starting thread (client mode): 0x14923610
2025-11-13T01:43:48.513 [DEBUG] [Thread-26415] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:43:48.527 [DEBUG] [Thread-26415] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:43:48.527 [INFO] [Thread-26415] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] client lang: <none>
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] server lang: <none>
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] kex follows: False
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:43:48.535 [DEBUG] [Thread-26415] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:43:48.536 [DEBUG] [Thread-26415] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:43:48.536 [DEBUG] [Thread-26415] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:43:48.536 [DEBUG] [Thread-26415] [transport.py] [_log()] Compression: none
2025-11-13T01:43:48.536 [DEBUG] [Thread-26415] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:43:48.599 [DEBUG] [Thread-26415] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:43:48.599 [DEBUG] [Thread-26415] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:43:48.600 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:43:48.601 [DEBUG] [Thread-26415] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:43:48.601 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:43:48.656 [DEBUG] [Thread-26415] [transport.py] [_log()] userauth is OK
2025-11-13T01:43:48.657 [DEBUG] [Thread-26415] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:43:48.657 [DEBUG] [Thread-26415] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:43:48.657 [DEBUG] [Thread-26415] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:43:48.657 [DEBUG] [Thread-26415] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:43:48.676 [INFO] [Thread-26415] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:43:48.676 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:43:48.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:43:49.532 [DEBUG] [Thread-26415] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:43:49.533 [DEBUG] [Thread-26415] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:43:49.581 [DEBUG] [Thread-26415] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:43:49.581 [DEBUG] [Thread-26415] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:43:49.590 [DEBUG] [Thread-26415] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:43:49.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:43:49.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-11-13T01:43:49.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-11-13T01:43:49.618 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:43:49.618 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:43:49.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:43:49.627 [DEBUG] [Thread-26415] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:43:59.981 [DEBUG] [Thread-26417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:44:10.950 [DEBUG] [Thread-26418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:44:15.027 [DEBUG] [Thread-26419 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:44:19.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:44:19.648 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:44:19.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-11-13T01:44:20.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 43, 59), 9.69, 52.09, 0.0, 13.83, 14.59, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:44:20.300 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:43:59
2025-11-13T01:44:20.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:44:20.570 [DEBUG] [Thread-26420] [transport.py] [_log()] starting thread (client mode): 0x14982200
2025-11-13T01:44:20.570 [DEBUG] [Thread-26420] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:44:20.590 [DEBUG] [Thread-26420] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:44:20.591 [INFO] [Thread-26420] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:44:20.594 [DEBUG] [Thread-26420] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] client lang: <none>
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] server lang: <none>
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] kex follows: False
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] Compression: none
2025-11-13T01:44:20.595 [DEBUG] [Thread-26420] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:44:20.615 [DEBUG] [Thread-26420] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:44:20.616 [DEBUG] [Thread-26420] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:44:20.617 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:44:20.617 [DEBUG] [Thread-26420] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:44:20.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:44:20.619 [DEBUG] [Thread-26420] [transport.py] [_log()] userauth is OK
2025-11-13T01:44:20.619 [DEBUG] [Thread-26420] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:44:20.620 [DEBUG] [Thread-26420] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:44:20.620 [DEBUG] [Thread-26420] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:44:20.620 [DEBUG] [Thread-26420] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:44:20.656 [INFO] [Thread-26420] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:44:20.657 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:44:21.250 [DEBUG] [Thread-26420] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:44:21.250 [DEBUG] [Thread-26420] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:44:21.250 [DEBUG] [Thread-26420] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:44:21.291 [DEBUG] [Thread-26420] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:44:21.291 [DEBUG] [Thread-26420] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:44:21.294 [DEBUG] [Thread-26420] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:44:21.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:44:21.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:44:21.310 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:44:21.312 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:44:21.318 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:44:21.320 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:44:21.320 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:44:21.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.988633 -999.00  +14.90  15.65     56   +6.30 1 1 1 1 1     0    0 8.38 -1.81 ZNESW 10.9 15.7 271.8 18.6 15.2 -24.0 15.0 -23.1 14.8 -22.5 15.1 -23.3
2025-11-13T01:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:44:21.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:44:21.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.988633
2025-11-13T01:44:21.322 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:44:21.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:44:21.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:44:21.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:44:21.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:44:21.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:43:59', tmtdew=9.69, humidity=52.09, cloud=0.0, wind=13.83, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:44:00', seeing=1.06, atlas_timestamp='2025-11-12T23:43:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:40:00')
2025-11-13T01:44:21.323 [DEBUG] [Thread-26420] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:44:21.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:44:21.419 [DEBUG] [Thread-26423] [transport.py] [_log()] starting thread (client mode): 0x1496abf0
2025-11-13T01:44:21.419 [DEBUG] [Thread-26423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:44:21.434 [DEBUG] [Thread-26423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:44:21.434 [INFO] [Thread-26423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:44:21.441 [DEBUG] [Thread-26423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] client lang: <none>
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] server lang: <none>
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] kex follows: False
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] Compression: none
2025-11-13T01:44:21.442 [DEBUG] [Thread-26423] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:44:21.500 [DEBUG] [Thread-26423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:44:21.501 [DEBUG] [Thread-26423] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:44:21.501 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:44:21.502 [DEBUG] [Thread-26423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:44:21.503 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:44:21.558 [DEBUG] [Thread-26423] [transport.py] [_log()] userauth is OK
2025-11-13T01:44:21.558 [DEBUG] [Thread-26423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:44:21.558 [DEBUG] [Thread-26423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:44:21.558 [DEBUG] [Thread-26423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:44:21.558 [DEBUG] [Thread-26423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:44:21.578 [INFO] [Thread-26423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:44:21.578 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:44:21.579 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:44:22.398 [DEBUG] [Thread-26423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:44:22.398 [DEBUG] [Thread-26423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:44:22.447 [DEBUG] [Thread-26423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:44:22.447 [DEBUG] [Thread-26423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:44:22.456 [DEBUG] [Thread-26423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:44:22.465 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:44:22.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-11-13T01:44: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') -> 00000000
2025-11-13T01:44:22.484 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:44:22.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:44:22.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:44:22.493 [DEBUG] [Thread-26423] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:44:30.066 [DEBUG] [Thread-26425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:44:41.431 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:44:41.432 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:44:45.117 [DEBUG] [Thread-26426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:44:52.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:44:52.516 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:44:52.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-11-13T01:44:53.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 44, 31), 9.65, 52.24, 0.0, 12.72, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:44:53.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:44:31
2025-11-13T01:44:53.299 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:44:53.444 [DEBUG] [Thread-26427] [transport.py] [_log()] starting thread (client mode): 0x19ddb790
2025-11-13T01:44:53.445 [DEBUG] [Thread-26427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:44:53.464 [DEBUG] [Thread-26427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:44:53.464 [INFO] [Thread-26427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:44:53.466 [DEBUG] [Thread-26427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] client lang: <none>
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] server lang: <none>
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] kex follows: False
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] Compression: none
2025-11-13T01:44:53.467 [DEBUG] [Thread-26427] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:44:53.481 [DEBUG] [Thread-26427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:44:53.482 [DEBUG] [Thread-26427] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:44:53.482 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:44:53.483 [DEBUG] [Thread-26427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:44:53.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:44:53.485 [DEBUG] [Thread-26427] [transport.py] [_log()] userauth is OK
2025-11-13T01:44:53.485 [DEBUG] [Thread-26427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:44:53.485 [DEBUG] [Thread-26427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:44:53.485 [DEBUG] [Thread-26427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:44:53.485 [DEBUG] [Thread-26427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:44:53.505 [INFO] [Thread-26427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:44:53.505 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:44:54.105 [DEBUG] [Thread-26427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:44:54.105 [DEBUG] [Thread-26427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:44:54.105 [DEBUG] [Thread-26427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:44:54.146 [DEBUG] [Thread-26427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:44:54.146 [DEBUG] [Thread-26427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:44:54.150 [DEBUG] [Thread-26427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:44:54.163 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:44:54.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:44:54.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:44:54.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:44:54.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:44:54.174 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:44:54.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:44:54.174 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:44:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:44:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.988980 -999.00  +14.80   9.83     56   +6.30 1 1 1 1 1     0    0 8.35 1.23 ZNESW 8.7 9.8 270.8 18.9 15.1 -24.1 15.1 -23.2 14.8 -22.9 15.1 -23.6
2025-11-13T01:44:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:44:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:44:54.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.988980
2025-11-13T01:44:54.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:44:54.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:44:54.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:44:54.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:44:54.176 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:44:54.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:44:31', tmtdew=9.65, humidity=52.24, cloud=0.0, wind=12.72, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:44:32', seeing=1.06, atlas_timestamp='2025-11-12T23:44:07.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:40:00')
2025-11-13T01:44:54.177 [DEBUG] [Thread-26427] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:44:54.260 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:44:54.272 [DEBUG] [Thread-26430] [transport.py] [_log()] starting thread (client mode): 0x1496aa10
2025-11-13T01:44:54.272 [DEBUG] [Thread-26430] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:44:54.287 [DEBUG] [Thread-26430] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:44:54.287 [INFO] [Thread-26430] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:44:54.294 [DEBUG] [Thread-26430] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:44:54.294 [DEBUG] [Thread-26430] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:44:54.294 [DEBUG] [Thread-26430] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:44:54.294 [DEBUG] [Thread-26430] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:44:54.294 [DEBUG] [Thread-26430] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:44:54.294 [DEBUG] [Thread-26430] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:44:54.294 [DEBUG] [Thread-26430] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:44:54.294 [DEBUG] [Thread-26430] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] client lang: <none>
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] server lang: <none>
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] kex follows: False
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] Compression: none
2025-11-13T01:44:54.295 [DEBUG] [Thread-26430] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:44:54.351 [DEBUG] [Thread-26430] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:44:54.352 [DEBUG] [Thread-26430] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:44:54.353 [DEBUG] [Thread-26430] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:44:54.353 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:44:54.354 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:44:54.408 [DEBUG] [Thread-26430] [transport.py] [_log()] userauth is OK
2025-11-13T01:44:54.408 [DEBUG] [Thread-26430] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:44:54.408 [DEBUG] [Thread-26430] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:44:54.408 [DEBUG] [Thread-26430] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:44:54.408 [DEBUG] [Thread-26430] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:44:54.427 [INFO] [Thread-26430] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:44:54.427 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:44:54.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:44:55.258 [DEBUG] [Thread-26430] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:44:55.258 [DEBUG] [Thread-26430] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:44:55.306 [DEBUG] [Thread-26430] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:44:55.306 [DEBUG] [Thread-26430] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:44:55.315 [DEBUG] [Thread-26430] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:44:55.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:44: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')
2025-11-13T01:44:55.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-11-13T01:44:55.344 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:44:55.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:44:55.344 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:44:55.352 [DEBUG] [Thread-26430] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:45:00.149 [DEBUG] [Thread-26432 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:45:11.012 [DEBUG] [Thread-26433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:45:15.202 [DEBUG] [Thread-26434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:45:25.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:45:25.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:45:25.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-11-13T01:45:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 45, 3), 9.63, 52.3, 0.0, 12.23, 14.5, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:45:26.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:45:03
2025-11-13T01:45:26.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:45:26.345 [DEBUG] [Thread-26435] [transport.py] [_log()] starting thread (client mode): 0x19ddb7c0
2025-11-13T01:45:26.345 [DEBUG] [Thread-26435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:45:26.364 [DEBUG] [Thread-26435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:45:26.364 [INFO] [Thread-26435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] client lang: <none>
2025-11-13T01:45:26.367 [DEBUG] [Thread-26435] [transport.py] [_log()] server lang: <none>
2025-11-13T01:45:26.368 [DEBUG] [Thread-26435] [transport.py] [_log()] kex follows: False
2025-11-13T01:45:26.368 [DEBUG] [Thread-26435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:45:26.368 [DEBUG] [Thread-26435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:45:26.368 [DEBUG] [Thread-26435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:45:26.368 [DEBUG] [Thread-26435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:45:26.368 [DEBUG] [Thread-26435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:45:26.368 [DEBUG] [Thread-26435] [transport.py] [_log()] Compression: none
2025-11-13T01:45:26.368 [DEBUG] [Thread-26435] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:45:26.383 [DEBUG] [Thread-26435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:45:26.384 [DEBUG] [Thread-26435] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:45:26.384 [DEBUG] [Thread-26435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:45:26.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:45:26.384 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:45:26.385 [DEBUG] [Thread-26435] [transport.py] [_log()] userauth is OK
2025-11-13T01:45:26.385 [DEBUG] [Thread-26435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:45:26.385 [DEBUG] [Thread-26435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:45:26.385 [DEBUG] [Thread-26435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:45:26.385 [DEBUG] [Thread-26435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:45:26.402 [INFO] [Thread-26435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:45:26.402 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:45:27.059 [DEBUG] [Thread-26435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:45:27.059 [DEBUG] [Thread-26435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:45:27.059 [DEBUG] [Thread-26435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:45:27.100 [DEBUG] [Thread-26435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:45:27.100 [DEBUG] [Thread-26435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:45:27.101 [DEBUG] [Thread-26435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:45:27.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:45:27.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:45:27.114 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:45:27.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:45:27.117 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:45:27.118 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:45:27.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.989327 -999.00  +14.70  10.67     57   +6.40 1 1 1 1 1     0    0 8.50 2.91 ZNESW 11.6 10.7 277.0 13.8 15.2 -24.1 15.0 -23.2 14.8 -22.7 15.0 -23.6
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.989327
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:45:27.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:45:03', tmtdew=9.63, humidity=52.3, cloud=0.0, wind=12.23, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:45:04', seeing=1.06, atlas_timestamp='2025-11-12T23:44:37.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:44:00')
2025-11-13T01:45:27.119 [DEBUG] [Thread-26435] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:45:27.193 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:45:27.204 [DEBUG] [Thread-26438] [transport.py] [_log()] starting thread (client mode): 0x1737f010
2025-11-13T01:45:27.204 [DEBUG] [Thread-26438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:45:27.220 [DEBUG] [Thread-26438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:45:27.220 [INFO] [Thread-26438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] client lang: <none>
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] server lang: <none>
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] kex follows: False
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] Compression: none
2025-11-13T01:45:27.228 [DEBUG] [Thread-26438] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:45:27.286 [DEBUG] [Thread-26438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:45:27.286 [DEBUG] [Thread-26438] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:45:27.286 [DEBUG] [Thread-26438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:45:27.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:45:27.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:45:27.343 [DEBUG] [Thread-26438] [transport.py] [_log()] userauth is OK
2025-11-13T01:45:27.343 [DEBUG] [Thread-26438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:45:27.343 [DEBUG] [Thread-26438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:45:27.343 [DEBUG] [Thread-26438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:45:27.343 [DEBUG] [Thread-26438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:45:27.359 [INFO] [Thread-26438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:45:27.359 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:45:27.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:45:28.222 [DEBUG] [Thread-26438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:45:28.222 [DEBUG] [Thread-26438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:45:28.274 [DEBUG] [Thread-26438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:45:28.274 [DEBUG] [Thread-26438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:45:28.284 [DEBUG] [Thread-26438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:45:28.295 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:45:28.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-11-13T01:45: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') -> 00000000
2025-11-13T01:45:28.317 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:45:28.317 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:45:28.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:45:28.327 [DEBUG] [Thread-26438] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:45:30.238 [DEBUG] [Thread-26440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:45:41.635 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:45:41.636 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:45:45.296 [DEBUG] [Thread-26442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:45:58.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:45:58.348 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:45:58.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-11-13T01:45:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 45, 35), 9.53, 52.8, 0.0, 14.68, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:45:59.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:45:35
2025-11-13T01:45:59.123 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:45:59.268 [DEBUG] [Thread-26443] [transport.py] [_log()] starting thread (client mode): 0x1737e380
2025-11-13T01:45:59.268 [DEBUG] [Thread-26443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:45:59.289 [DEBUG] [Thread-26443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:45:59.289 [INFO] [Thread-26443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:45:59.292 [DEBUG] [Thread-26443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] client lang: <none>
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] server lang: <none>
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] kex follows: False
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] Compression: none
2025-11-13T01:45:59.293 [DEBUG] [Thread-26443] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:45:59.310 [DEBUG] [Thread-26443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:45:59.310 [DEBUG] [Thread-26443] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:45:59.311 [DEBUG] [Thread-26443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:45:59.311 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:45:59.312 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:45:59.313 [DEBUG] [Thread-26443] [transport.py] [_log()] userauth is OK
2025-11-13T01:45:59.313 [DEBUG] [Thread-26443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:45:59.313 [DEBUG] [Thread-26443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:45:59.313 [DEBUG] [Thread-26443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:45:59.314 [DEBUG] [Thread-26443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:45:59.331 [INFO] [Thread-26443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:45:59.332 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:45:59.973 [DEBUG] [Thread-26443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:45:59.974 [DEBUG] [Thread-26443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:45:59.974 [DEBUG] [Thread-26443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:46:00.015 [DEBUG] [Thread-26443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:46:00.015 [DEBUG] [Thread-26443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:46:00.018 [DEBUG] [Thread-26443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:46:00.031 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:46:00.031 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:46:00.033 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:46:00.034 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:46:00.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:46:00.041 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:46:00.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:46:00.042 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:46:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:46:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.989674 -999.00  +14.70   6.13     57   +6.40 1 1 1 1 1     0    0 8.51 3.69 ZNESW 7.1 6.1 285.3 13.0 15.1 -24.2 15.0 -23.3 14.8 -22.9 15.1 -23.6
2025-11-13T01:46:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:46:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:46:00.042 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.989674
2025-11-13T01:46:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:46:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:46:00.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:46:00.044 [DEBUG] [Thread-26443] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:46:00.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:46:00.044 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:46:00.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:45:35', tmtdew=9.53, humidity=52.8, cloud=0.0, wind=14.68, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:45:36', seeing=1.06, atlas_timestamp='2025-11-12T23:45:07.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:44:00')
2025-11-13T01:46:00.128 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:46:00.142 [DEBUG] [Thread-26446] [transport.py] [_log()] starting thread (client mode): 0x1737c400
2025-11-13T01:46:00.142 [DEBUG] [Thread-26446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:46:00.156 [DEBUG] [Thread-26446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:46:00.157 [INFO] [Thread-26446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] client lang: <none>
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] server lang: <none>
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] kex follows: False
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] Compression: none
2025-11-13T01:46:00.164 [DEBUG] [Thread-26446] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:46:00.224 [DEBUG] [Thread-26446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:46:00.225 [DEBUG] [Thread-26446] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:46:00.225 [DEBUG] [Thread-26446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:46:00.226 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:46:00.227 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:46:00.284 [DEBUG] [Thread-26446] [transport.py] [_log()] userauth is OK
2025-11-13T01:46:00.284 [DEBUG] [Thread-26446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:46:00.284 [DEBUG] [Thread-26446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:46:00.284 [DEBUG] [Thread-26446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:46:00.284 [DEBUG] [Thread-26446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:46:00.303 [INFO] [Thread-26446] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:46:00.304 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:46:00.305 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:46:00.334 [DEBUG] [Thread-26448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:46:01.207 [DEBUG] [Thread-26446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:46:01.207 [DEBUG] [Thread-26446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:46:01.254 [DEBUG] [Thread-26446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:46:01.255 [DEBUG] [Thread-26446] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:46:01.264 [DEBUG] [Thread-26446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:46:01.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:46: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-11-13T01:46: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-11-13T01:46:01.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:46:01.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:46:01.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:46:01.300 [DEBUG] [Thread-26446] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:46:11.069 [DEBUG] [Thread-26449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:46:15.378 [DEBUG] [Thread-26450 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:46:30.415 [DEBUG] [Thread-26451 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:46:31.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:46:31.299 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:46:31.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-11-13T01:46:31.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 46, 7), 9.5, 52.9, 0.0, 15.16, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:46:31.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:46:07
2025-11-13T01:46:32.072 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:46:32.217 [DEBUG] [Thread-26452] [transport.py] [_log()] starting thread (client mode): 0x14988d30
2025-11-13T01:46:32.217 [DEBUG] [Thread-26452] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:46:32.237 [DEBUG] [Thread-26452] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:46:32.238 [INFO] [Thread-26452] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] client lang: <none>
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] server lang: <none>
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] kex follows: False
2025-11-13T01:46:32.239 [DEBUG] [Thread-26452] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:46:32.240 [DEBUG] [Thread-26452] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:46:32.240 [DEBUG] [Thread-26452] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:46:32.240 [DEBUG] [Thread-26452] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:46:32.240 [DEBUG] [Thread-26452] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:46:32.240 [DEBUG] [Thread-26452] [transport.py] [_log()] Compression: none
2025-11-13T01:46:32.240 [DEBUG] [Thread-26452] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:46:32.248 [DEBUG] [Thread-26452] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:46:32.248 [DEBUG] [Thread-26452] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:46:32.248 [DEBUG] [Thread-26452] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:46:32.248 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:46:32.249 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:46:32.249 [DEBUG] [Thread-26452] [transport.py] [_log()] userauth is OK
2025-11-13T01:46:32.250 [DEBUG] [Thread-26452] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:46:32.250 [DEBUG] [Thread-26452] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:46:32.250 [DEBUG] [Thread-26452] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:46:32.250 [DEBUG] [Thread-26452] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:46:32.263 [INFO] [Thread-26452] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:46:32.264 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:46:32.897 [DEBUG] [Thread-26452] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:46:32.897 [DEBUG] [Thread-26452] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:46:32.898 [DEBUG] [Thread-26452] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:46:32.939 [DEBUG] [Thread-26452] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:46:32.939 [DEBUG] [Thread-26452] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:46:32.942 [DEBUG] [Thread-26452] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:46:32.953 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:46:32.954 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:46:32.956 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:46:32.958 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:46:32.964 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:46:32.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:46:32.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:46:32.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:46:32.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:46:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.990022 -999.00  +14.60   6.89     57   +6.30 1 1 1 1 1     0    0 8.40 3.28 ZNESW 9.7 6.9 284.9 11.3 15.1 -24.1 15.0 -23.1 14.7 -22.7 15.0 -23.7
2025-11-13T01:46:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:46:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:46:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.990022
2025-11-13T01:46:32.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:46:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:46:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:46:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:46:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:46:32.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:46:07', tmtdew=9.5, humidity=52.9, cloud=0.0, wind=15.16, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:46:08', seeing=1.24, atlas_timestamp='2025-11-12T23:45:37.901', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:44:00')
2025-11-13T01:46:32.970 [DEBUG] [Thread-26452] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:46:33.053 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:46:33.065 [DEBUG] [Thread-26455] [transport.py] [_log()] starting thread (client mode): 0x149881f0
2025-11-13T01:46:33.065 [DEBUG] [Thread-26455] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:46:33.079 [DEBUG] [Thread-26455] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:46:33.079 [INFO] [Thread-26455] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] client lang: <none>
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] server lang: <none>
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] kex follows: False
2025-11-13T01:46:33.087 [DEBUG] [Thread-26455] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:46:33.088 [DEBUG] [Thread-26455] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:46:33.088 [DEBUG] [Thread-26455] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:46:33.088 [DEBUG] [Thread-26455] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:46:33.088 [DEBUG] [Thread-26455] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:46:33.088 [DEBUG] [Thread-26455] [transport.py] [_log()] Compression: none
2025-11-13T01:46:33.088 [DEBUG] [Thread-26455] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:46:33.147 [DEBUG] [Thread-26455] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:46:33.148 [DEBUG] [Thread-26455] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:46:33.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:46:33.149 [DEBUG] [Thread-26455] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:46:33.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:46:33.204 [DEBUG] [Thread-26455] [transport.py] [_log()] userauth is OK
2025-11-13T01:46:33.204 [DEBUG] [Thread-26455] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:46:33.204 [DEBUG] [Thread-26455] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:46:33.204 [DEBUG] [Thread-26455] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:46:33.204 [DEBUG] [Thread-26455] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:46:33.222 [INFO] [Thread-26455] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:46:33.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:46:33.223 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:46:34.005 [DEBUG] [Thread-26455] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:46:34.005 [DEBUG] [Thread-26455] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:46:34.053 [DEBUG] [Thread-26455] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:46:34.054 [DEBUG] [Thread-26455] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:46:34.063 [DEBUG] [Thread-26455] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:46:34.072 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:46:34.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-11-13T01:46:34.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-11-13T01:46:34.090 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:46:34.091 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:46:34.091 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:46:34.099 [DEBUG] [Thread-26455] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:46:41.839 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:46:41.840 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:46:45.448 [DEBUG] [Thread-26457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:46:55.206 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:46:58.402 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:00.491 [DEBUG] [Thread-26458 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:03.471 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:04.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:47:04.106 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:47:04.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-11-13T01:47:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 46, 39), 10.04, 50.94, 0.0, 14.52, 14.54, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:47:04.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:46:39
2025-11-13T01:47:04.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:47:05.015 [DEBUG] [Thread-26459] [transport.py] [_log()] starting thread (client mode): 0x1496a830
2025-11-13T01:47:05.016 [DEBUG] [Thread-26459] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:47:05.036 [DEBUG] [Thread-26459] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:47:05.036 [INFO] [Thread-26459] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:47:05.037 [DEBUG] [Thread-26459] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:47:05.037 [DEBUG] [Thread-26459] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:47:05.037 [DEBUG] [Thread-26459] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:47:05.037 [DEBUG] [Thread-26459] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:47:05.037 [DEBUG] [Thread-26459] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:47:05.037 [DEBUG] [Thread-26459] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:47:05.037 [DEBUG] [Thread-26459] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:47:05.037 [DEBUG] [Thread-26459] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] client lang: <none>
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] server lang: <none>
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] kex follows: False
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] Compression: none
2025-11-13T01:47:05.038 [DEBUG] [Thread-26459] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:47:05.057 [DEBUG] [Thread-26459] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:47:05.058 [DEBUG] [Thread-26459] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:47:05.058 [DEBUG] [Thread-26459] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:47:05.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:47:05.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:47:05.060 [DEBUG] [Thread-26459] [transport.py] [_log()] userauth is OK
2025-11-13T01:47:05.060 [DEBUG] [Thread-26459] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:47:05.060 [DEBUG] [Thread-26459] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:47:05.061 [DEBUG] [Thread-26459] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:47:05.061 [DEBUG] [Thread-26459] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:47:05.099 [INFO] [Thread-26459] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:47:05.100 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:47:05.761 [DEBUG] [Thread-26459] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:47:05.761 [DEBUG] [Thread-26459] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:47:05.762 [DEBUG] [Thread-26459] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:47:05.802 [DEBUG] [Thread-26459] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:47:05.803 [DEBUG] [Thread-26459] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:47:05.806 [DEBUG] [Thread-26459] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:47:05.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:47:05.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:47:05.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:47:05.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:47:05.825 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:47:05.827 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:47:05.827 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:47:05.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:47:05.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:47:05.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.990716 -999.00  +14.70  10.51     55   +5.70 1 1 1 1 1     0    0 8.64 7.93 ZNESW 15.3 10.5 275.8 11.6 15.1 -24.1 15.0 -23.3 14.7 -22.6 15.0 -23.5
2025-11-13T01:47:05.827 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:47:05.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:47:05.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.990716
2025-11-13T01:47:05.828 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:47:05.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:47:05.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:47:05.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:47:05.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:47:05.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:46:39', tmtdew=10.04, humidity=50.94, cloud=0.0, wind=14.52, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:46:40', seeing=1.06, atlas_timestamp='2025-11-12T23:46:37.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:44:00')
2025-11-13T01:47:05.829 [DEBUG] [Thread-26459] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:47:05.913 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:47:05.926 [DEBUG] [Thread-26462] [transport.py] [_log()] starting thread (client mode): 0x149220b0
2025-11-13T01:47:05.926 [DEBUG] [Thread-26462] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:47:05.941 [DEBUG] [Thread-26462] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:47:05.941 [INFO] [Thread-26462] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] client lang: <none>
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] server lang: <none>
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] kex follows: False
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:47:05.949 [DEBUG] [Thread-26462] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:47:05.950 [DEBUG] [Thread-26462] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:47:05.950 [DEBUG] [Thread-26462] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:47:05.950 [DEBUG] [Thread-26462] [transport.py] [_log()] Compression: none
2025-11-13T01:47:05.950 [DEBUG] [Thread-26462] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:47:06.007 [DEBUG] [Thread-26462] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:47:06.008 [DEBUG] [Thread-26462] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:47:06.008 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:47:06.009 [DEBUG] [Thread-26462] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:47:06.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:47:06.064 [DEBUG] [Thread-26462] [transport.py] [_log()] userauth is OK
2025-11-13T01:47:06.064 [DEBUG] [Thread-26462] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:47:06.064 [DEBUG] [Thread-26462] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:47:06.064 [DEBUG] [Thread-26462] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:47:06.064 [DEBUG] [Thread-26462] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:47:06.085 [INFO] [Thread-26462] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:47:06.086 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:47:06.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:47:06.896 [DEBUG] [Thread-26462] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:47:06.896 [DEBUG] [Thread-26462] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:47:06.948 [DEBUG] [Thread-26462] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:47:06.949 [DEBUG] [Thread-26462] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:47:06.961 [DEBUG] [Thread-26462] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:47:06.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:47:06.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-11-13T01:47:06.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-11-13T01:47:07.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:47:07.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:47:07.003 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:47:07.014 [DEBUG] [Thread-26462] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:47:08.846 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:11.125 [DEBUG] [Thread-26464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:15.527 [DEBUG] [Thread-26465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:28.231 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:30.578 [DEBUG] [Thread-26466 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:32.624 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:37.032 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:47:37.033 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:47:37.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-11-13T01:47:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 47, 12), 10.05, 50.94, 0.0, 15.25, 14.59, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:47:37.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:47:12
2025-11-13T01:47:37.803 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:47:37.953 [DEBUG] [Thread-26467] [transport.py] [_log()] starting thread (client mode): 0x1496b190
2025-11-13T01:47:37.953 [DEBUG] [Thread-26467] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:47:37.973 [DEBUG] [Thread-26467] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:47:37.973 [INFO] [Thread-26467] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:47:37.976 [DEBUG] [Thread-26467] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] client lang: <none>
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] server lang: <none>
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] kex follows: False
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] Compression: none
2025-11-13T01:47:37.977 [DEBUG] [Thread-26467] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:47:37.994 [DEBUG] [Thread-26467] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:47:37.994 [DEBUG] [Thread-26467] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:47:37.994 [DEBUG] [Thread-26467] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:47:37.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:47:37.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:47:37.995 [DEBUG] [Thread-26467] [transport.py] [_log()] userauth is OK
2025-11-13T01:47:37.995 [DEBUG] [Thread-26467] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:47:37.995 [DEBUG] [Thread-26467] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:47:37.995 [DEBUG] [Thread-26467] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:47:37.995 [DEBUG] [Thread-26467] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:47:38.008 [INFO] [Thread-26467] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:47:38.008 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:47:38.624 [DEBUG] [Thread-26467] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:47:38.624 [DEBUG] [Thread-26467] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:47:38.624 [DEBUG] [Thread-26467] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:47:38.665 [DEBUG] [Thread-26467] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:47:38.665 [DEBUG] [Thread-26467] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:47:38.669 [DEBUG] [Thread-26467] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:47:38.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:47:38.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:47:38.683 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:47:38.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:47:38.691 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:47:38.693 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:47:38.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:47:38.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:47:38.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:47:38.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.991063 -999.00  +14.80  14.77     54   +5.60 1 1 1 1 1     0    0 8.78 12.56 ZNESW 12.4 14.8 278.8 18.3 15.1 -24.1 15.0 -23.1 14.7 -22.6 15.0 -23.3
2025-11-13T01:47:38.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:47:38.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:47:38.694 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.991063
2025-11-13T01:47:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:47:38.695 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:47:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:47:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:47:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:47:38.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:47:12', tmtdew=10.05, humidity=50.94, cloud=0.0, wind=15.25, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:47:12', seeing=1.05, atlas_timestamp='2025-11-12T23:47:07.843', atlas_cloud=1, atlas_rain=1, zp_data=[0.032249999999999446, 0.06375000000000064, 0.05375000000000085, 0.09249999999999936, 0.05649999999999977, 0.06725000000000136, 0.05299999999999905, -0.006750000000000256, 0.021999999999998465, 0.07099999999999973, 0.1332500000000003, 0.07350000000000101, 0.13899999999999935, 0.1042500000000004, 0.03399999999999892, 0.009999999999999787, 0.040749999999999176, 0.07949999999999946, 0.13199999999999967, 0.09774999999999778, 0.12799999999999834, 0.09174999999999933, 0.04525000000000112, 0.023249999999999105, 0.03399999999999892, 0.125, 0.14475000000000016, 0.1955000000000009, 0.16350000000000087, 0.09850000000000136, 0.07850000000000179, 0.04800000000000004, 0.08174999999999955], zp_timestamp='2025-11-12T23:44:00')
2025-11-13T01:47:38.696 [DEBUG] [Thread-26467] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:47:38.779 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:47:38.792 [DEBUG] [Thread-26470] [transport.py] [_log()] starting thread (client mode): 0x1737e650
2025-11-13T01:47:38.792 [DEBUG] [Thread-26470] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:47:38.807 [DEBUG] [Thread-26470] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:47:38.807 [INFO] [Thread-26470] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:47:38.815 [DEBUG] [Thread-26470] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:47:38.815 [DEBUG] [Thread-26470] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:47:38.815 [DEBUG] [Thread-26470] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:47:38.815 [DEBUG] [Thread-26470] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:47:38.815 [DEBUG] [Thread-26470] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] client lang: <none>
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] server lang: <none>
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] kex follows: False
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:47:38.816 [DEBUG] [Thread-26470] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:47:38.817 [DEBUG] [Thread-26470] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:47:38.817 [DEBUG] [Thread-26470] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:47:38.817 [DEBUG] [Thread-26470] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:47:38.817 [DEBUG] [Thread-26470] [transport.py] [_log()] Compression: none
2025-11-13T01:47:38.817 [DEBUG] [Thread-26470] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:47:38.872 [DEBUG] [Thread-26470] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:47:38.873 [DEBUG] [Thread-26470] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:47:38.874 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:47:38.874 [DEBUG] [Thread-26470] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:47:38.875 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:47:38.932 [DEBUG] [Thread-26470] [transport.py] [_log()] userauth is OK
2025-11-13T01:47:38.932 [DEBUG] [Thread-26470] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:47:38.932 [DEBUG] [Thread-26470] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:47:38.932 [DEBUG] [Thread-26470] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:47:38.932 [DEBUG] [Thread-26470] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:47:38.952 [INFO] [Thread-26470] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:47:38.952 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:47:38.953 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:47:39.772 [DEBUG] [Thread-26470] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:47:39.772 [DEBUG] [Thread-26470] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:47:39.820 [DEBUG] [Thread-26470] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:47:39.820 [DEBUG] [Thread-26470] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:47:39.829 [DEBUG] [Thread-26470] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:47:39.838 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:47:39.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-11-13T01:47:39.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-11-13T01:47:39.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:47:39.857 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:47:39.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:47:39.866 [DEBUG] [Thread-26470] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:47:42.043 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:42.044 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:45.610 [DEBUG] [Thread-26472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:52.005 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:47:56.387 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:00.650 [DEBUG] [Thread-26473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:03.374 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:07.745 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:09.888 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:48:09.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:48:09.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-11-13T01:48:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 47, 44), 10.09, 50.77, 0.0, 13.83, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:48:10.546 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:47:44
2025-11-13T01:48:10.664 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:48:10.811 [DEBUG] [Thread-26474] [transport.py] [_log()] starting thread (client mode): 0x14944040
2025-11-13T01:48:10.812 [DEBUG] [Thread-26474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:48:10.832 [DEBUG] [Thread-26474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:48:10.832 [INFO] [Thread-26474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:48:10.835 [DEBUG] [Thread-26474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] client lang: <none>
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] server lang: <none>
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] kex follows: False
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] Compression: none
2025-11-13T01:48:10.836 [DEBUG] [Thread-26474] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:48:10.854 [DEBUG] [Thread-26474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:48:10.855 [DEBUG] [Thread-26474] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:48:10.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:48:10.856 [DEBUG] [Thread-26474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:48:10.857 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:48:10.858 [DEBUG] [Thread-26474] [transport.py] [_log()] userauth is OK
2025-11-13T01:48:10.858 [DEBUG] [Thread-26474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:48:10.858 [DEBUG] [Thread-26474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:48:10.859 [DEBUG] [Thread-26474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:48:10.859 [DEBUG] [Thread-26474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:48:10.884 [INFO] [Thread-26474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:48:10.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:48:11.187 [DEBUG] [Thread-26476 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:11.528 [DEBUG] [Thread-26474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:48:11.528 [DEBUG] [Thread-26474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:48:11.528 [DEBUG] [Thread-26474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:48:11.569 [DEBUG] [Thread-26474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:48:11.569 [DEBUG] [Thread-26474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:48:11.572 [DEBUG] [Thread-26474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:48:11.583 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:48:11.584 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:48:11.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:48:11.587 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:48:11.592 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:48:11.594 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:48:11.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:48:11.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:48:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:48:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.991410 -999.00  +14.80   8.46     53   +5.50 1 1 1 1 1     0    0 8.93 18.74 ZNESW 9.8 8.5 279.4 16.6 15.1 -24.0 14.9 -23.2 14.8 -22.9 15.0 -23.6
2025-11-13T01:48:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:48:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:48:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.991410
2025-11-13T01:48:11.595 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:48:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:48:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:48:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:48:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:48:11.596 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:47:44', tmtdew=10.09, humidity=50.77, cloud=0.0, wind=13.83, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:47:44', seeing=1.05, atlas_timestamp='2025-11-12T23:47:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.004250000000000753, 0.07225000000000037, 0.024499999999999744, 0.03250000000000064, 0.1042500000000004, -0.0010000000000012221, -0.027249999999998664, 0.0045000000000001705, 0.05450000000000088, 0.08124999999999893, 0.04299999999999926, 0.12400000000000055, 0.10324999999999918, -0.02800000000000047, -0.009000000000000341, -0.010750000000001592, 0.04099999999999859, 0.12549999999999883, 0.07124999999999915, 0.14099999999999824, 0.03724999999999845, 0.0012500000000006395, -0.025249999999999773, 0.0034999999999989484, 0.06750000000000078, 0.06975000000000087, 0.1775000000000002, 0.1750000000000007, 0.06100000000000172, 0.0840000000000014, -0.0389999999999997, 0.03474999999999895], zp_timestamp='2025-11-12T23:47:00')
2025-11-13T01:48:11.597 [DEBUG] [Thread-26474] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:48:11.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:48:11.693 [DEBUG] [Thread-26478] [transport.py] [_log()] starting thread (client mode): 0x1496a9e0
2025-11-13T01:48:11.693 [DEBUG] [Thread-26478] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:48:11.707 [DEBUG] [Thread-26478] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:48:11.707 [INFO] [Thread-26478] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] client lang: <none>
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] server lang: <none>
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] kex follows: False
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:48:11.715 [DEBUG] [Thread-26478] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:48:11.716 [DEBUG] [Thread-26478] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:48:11.716 [DEBUG] [Thread-26478] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:48:11.716 [DEBUG] [Thread-26478] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:48:11.716 [DEBUG] [Thread-26478] [transport.py] [_log()] Compression: none
2025-11-13T01:48:11.716 [DEBUG] [Thread-26478] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:48:11.775 [DEBUG] [Thread-26478] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:48:11.776 [DEBUG] [Thread-26478] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:48:11.776 [DEBUG] [Thread-26478] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:48:11.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:48:11.777 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:48:11.832 [DEBUG] [Thread-26478] [transport.py] [_log()] userauth is OK
2025-11-13T01:48:11.832 [DEBUG] [Thread-26478] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:48:11.832 [DEBUG] [Thread-26478] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:48:11.832 [DEBUG] [Thread-26478] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:48:11.832 [DEBUG] [Thread-26478] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:48:11.852 [INFO] [Thread-26478] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:48:11.852 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:48:11.854 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:48:12.668 [DEBUG] [Thread-26478] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:48:12.668 [DEBUG] [Thread-26478] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:48:12.716 [DEBUG] [Thread-26478] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:48:12.716 [DEBUG] [Thread-26478] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:48:12.726 [DEBUG] [Thread-26478] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:48:12.739 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:48:12.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-11-13T01:48:12.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:48:12.760 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:48:12.761 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:48:12.761 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:48:12.771 [DEBUG] [Thread-26478] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:48:15.681 [DEBUG] [Thread-26480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:30.746 [DEBUG] [Thread-26481 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:42.255 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:42.256 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:48:42.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:48:42.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:48:42.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-11-13T01:48:43.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 48, 16), 10.09, 50.75, 0.0, 13.13, 14.55, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:48:43.425 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:48:16
2025-11-13T01:48:43.543 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:48:43.688 [DEBUG] [Thread-26482] [transport.py] [_log()] starting thread (client mode): 0x14989420
2025-11-13T01:48:43.689 [DEBUG] [Thread-26482] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:48:43.703 [DEBUG] [Thread-26482] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:48:43.703 [INFO] [Thread-26482] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] client lang: <none>
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] server lang: <none>
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] kex follows: False
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] Compression: none
2025-11-13T01:48:43.707 [DEBUG] [Thread-26482] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:48:43.723 [DEBUG] [Thread-26482] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:48:43.723 [DEBUG] [Thread-26482] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:48:43.724 [DEBUG] [Thread-26482] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:48:43.724 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:48:43.725 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:48:43.728 [DEBUG] [Thread-26482] [transport.py] [_log()] userauth is OK
2025-11-13T01:48:43.728 [DEBUG] [Thread-26482] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:48:43.729 [DEBUG] [Thread-26482] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:48:43.729 [DEBUG] [Thread-26482] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:48:43.729 [DEBUG] [Thread-26482] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:48:43.750 [INFO] [Thread-26482] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:48:43.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:48:44.304 [DEBUG] [Thread-26482] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:48:44.304 [DEBUG] [Thread-26482] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:48:44.305 [DEBUG] [Thread-26482] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:48:44.345 [DEBUG] [Thread-26482] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:48:44.346 [DEBUG] [Thread-26482] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:48:44.349 [DEBUG] [Thread-26482] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:48:44.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:48:44.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:48:44.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:48:44.365 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:48:44.370 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:48:44.372 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:48:44.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:48:44.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:48:44.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:48:44.372 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.991758 -999.00  +14.80  11.22     53   +5.50 1 1 1 1 1     0    0 9.08 19.46 ZNESW 9.0 11.2 279.6 13.2 15.1 -24.0 15.0 -23.1 14.8 -22.5 15.0 -23.6
2025-11-13T01:48:44.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:48:44.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:48:44.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.991758
2025-11-13T01:48:44.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:48:44.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:48:44.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:48:44.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:48:44.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:48:44.374 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:48:16', tmtdew=10.09, humidity=50.75, cloud=0.0, wind=13.13, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:48:16', seeing=1.01, atlas_timestamp='2025-11-12T23:48:07.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.004250000000000753, 0.07225000000000037, 0.024499999999999744, 0.03250000000000064, 0.1042500000000004, -0.0010000000000012221, -0.027249999999998664, 0.0045000000000001705, 0.05450000000000088, 0.08124999999999893, 0.04299999999999926, 0.12400000000000055, 0.10324999999999918, -0.02800000000000047, -0.009000000000000341, -0.010750000000001592, 0.04099999999999859, 0.12549999999999883, 0.07124999999999915, 0.14099999999999824, 0.03724999999999845, 0.0012500000000006395, -0.025249999999999773, 0.0034999999999989484, 0.06750000000000078, 0.06975000000000087, 0.1775000000000002, 0.1750000000000007, 0.06100000000000172, 0.0840000000000014, -0.0389999999999997, 0.03474999999999895], zp_timestamp='2025-11-12T23:47:00')
2025-11-13T01:48:44.374 [DEBUG] [Thread-26482] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:48:44.458 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:48:44.470 [DEBUG] [Thread-26485] [transport.py] [_log()] starting thread (client mode): 0x14989780
2025-11-13T01:48:44.471 [DEBUG] [Thread-26485] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:48:44.485 [DEBUG] [Thread-26485] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:48:44.485 [INFO] [Thread-26485] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:48:44.493 [DEBUG] [Thread-26485] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] client lang: <none>
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] server lang: <none>
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] kex follows: False
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] Compression: none
2025-11-13T01:48:44.494 [DEBUG] [Thread-26485] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:48:44.552 [DEBUG] [Thread-26485] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:48:44.553 [DEBUG] [Thread-26485] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:48:44.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:48:44.554 [DEBUG] [Thread-26485] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:48:44.555 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:48:44.607 [DEBUG] [Thread-26485] [transport.py] [_log()] userauth is OK
2025-11-13T01:48:44.607 [DEBUG] [Thread-26485] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:48:44.608 [DEBUG] [Thread-26485] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:48:44.608 [DEBUG] [Thread-26485] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:48:44.608 [DEBUG] [Thread-26485] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:48:44.626 [INFO] [Thread-26485] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:48:44.627 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:48:44.627 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:48:45.461 [DEBUG] [Thread-26485] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:48:45.461 [DEBUG] [Thread-26485] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:48:45.510 [DEBUG] [Thread-26485] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:48:45.510 [DEBUG] [Thread-26485] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:48:45.519 [DEBUG] [Thread-26485] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:48:45.528 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:48:45.529 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:48:45.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-11-13T01:48:45.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:48:45.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:48:45.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:48:45.556 [DEBUG] [Thread-26485] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:48:45.780 [DEBUG] [Thread-26487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:00.830 [DEBUG] [Thread-26488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:06.740 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:09.785 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:11.242 [DEBUG] [Thread-26489 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:15.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:49:15.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:49:15.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:49:15.864 [DEBUG] [Thread-26490 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:16.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 48, 48), 10.09, 50.59, 0.0, 15.19, 14.52, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:49:16.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:48:48
2025-11-13T01:49:16.387 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:49:16.542 [DEBUG] [Thread-26491] [transport.py] [_log()] starting thread (client mode): 0x14988b80
2025-11-13T01:49:16.542 [DEBUG] [Thread-26491] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:49:16.562 [DEBUG] [Thread-26491] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:49:16.562 [INFO] [Thread-26491] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] client lang: <none>
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] server lang: <none>
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] kex follows: False
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] Compression: none
2025-11-13T01:49:16.566 [DEBUG] [Thread-26491] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:49:16.581 [DEBUG] [Thread-26491] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:49:16.582 [DEBUG] [Thread-26491] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:49:16.582 [DEBUG] [Thread-26491] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:49:16.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:49:16.582 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:49:16.583 [DEBUG] [Thread-26491] [transport.py] [_log()] userauth is OK
2025-11-13T01:49:16.583 [DEBUG] [Thread-26491] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:49:16.583 [DEBUG] [Thread-26491] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:49:16.583 [DEBUG] [Thread-26491] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:49:16.583 [DEBUG] [Thread-26491] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:49:16.599 [INFO] [Thread-26491] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:49:16.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:49:17.242 [DEBUG] [Thread-26491] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:49:17.242 [DEBUG] [Thread-26491] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:49:17.242 [DEBUG] [Thread-26491] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:49:17.283 [DEBUG] [Thread-26491] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:49:17.283 [DEBUG] [Thread-26491] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:49:17.285 [DEBUG] [Thread-26491] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:49:17.297 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:49:17.298 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:49:17.299 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:49:17.300 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:49:17.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:49:17.303 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:49:17.303 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:49:17.303 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:49:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:49:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.992105 -999.00  +14.80   8.52     54   +5.60 1 1 1 1 1     0    0 9.09 21.49 ZNESW 9.8 8.5 290.4 11.7 15.1 -24.1 15.0 -23.1 14.7 -22.7 15.0 -23.5
2025-11-13T01:49:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:49:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:49:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.992105
2025-11-13T01:49:17.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:49:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:49:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:49:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:49:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:49:17.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:48:48', tmtdew=10.09, humidity=50.59, cloud=0.0, wind=15.19, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:48:48', seeing=1.01, atlas_timestamp='2025-11-12T23:48:37.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.004250000000000753, 0.07225000000000037, 0.024499999999999744, 0.03250000000000064, 0.1042500000000004, -0.0010000000000012221, -0.027249999999998664, 0.0045000000000001705, 0.05450000000000088, 0.08124999999999893, 0.04299999999999926, 0.12400000000000055, 0.10324999999999918, -0.02800000000000047, -0.009000000000000341, -0.010750000000001592, 0.04099999999999859, 0.12549999999999883, 0.07124999999999915, 0.14099999999999824, 0.03724999999999845, 0.0012500000000006395, -0.025249999999999773, 0.0034999999999989484, 0.06750000000000078, 0.06975000000000087, 0.1775000000000002, 0.1750000000000007, 0.06100000000000172, 0.0840000000000014, -0.0389999999999997, 0.03474999999999895], zp_timestamp='2025-11-12T23:47:00')
2025-11-13T01:49:17.304 [DEBUG] [Thread-26491] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:49:17.387 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:49:17.399 [DEBUG] [Thread-26494] [transport.py] [_log()] starting thread (client mode): 0x14920a90
2025-11-13T01:49:17.400 [DEBUG] [Thread-26494] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:49:17.414 [DEBUG] [Thread-26494] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:49:17.414 [INFO] [Thread-26494] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] client lang: <none>
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] server lang: <none>
2025-11-13T01:49:17.421 [DEBUG] [Thread-26494] [transport.py] [_log()] kex follows: False
2025-11-13T01:49:17.422 [DEBUG] [Thread-26494] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:49:17.422 [DEBUG] [Thread-26494] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:49:17.422 [DEBUG] [Thread-26494] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:49:17.422 [DEBUG] [Thread-26494] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:49:17.422 [DEBUG] [Thread-26494] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:49:17.422 [DEBUG] [Thread-26494] [transport.py] [_log()] Compression: none
2025-11-13T01:49:17.422 [DEBUG] [Thread-26494] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:49:17.478 [DEBUG] [Thread-26494] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:49:17.478 [DEBUG] [Thread-26494] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:49:17.478 [DEBUG] [Thread-26494] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:49:17.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:49:17.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:49:17.535 [DEBUG] [Thread-26494] [transport.py] [_log()] userauth is OK
2025-11-13T01:49:17.535 [DEBUG] [Thread-26494] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:49:17.535 [DEBUG] [Thread-26494] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:49:17.535 [DEBUG] [Thread-26494] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:49:17.535 [DEBUG] [Thread-26494] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:49:17.548 [INFO] [Thread-26494] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:49:17.548 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:49:17.549 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:49:18.346 [DEBUG] [Thread-26494] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:49:18.346 [DEBUG] [Thread-26494] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:49:18.395 [DEBUG] [Thread-26494] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:49:18.395 [DEBUG] [Thread-26494] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:49:18.403 [DEBUG] [Thread-26494] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:49:18.411 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:49:18.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:49:18.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-11-13T01:49:18.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:49:18.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:49:18.427 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:49:18.435 [DEBUG] [Thread-26494] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:49:30.893 [DEBUG] [Thread-26496 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:42.459 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:42.460 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:45.943 [DEBUG] [Thread-26497 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:49:48.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:49:48.458 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:49:48.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-11-13T01:49:49.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 49, 20), 10.11, 50.49, 0.0, 14.65, 14.54, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:49:49.116 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:49:20
2025-11-13T01:49:49.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:49:49.378 [DEBUG] [Thread-26498] [transport.py] [_log()] starting thread (client mode): 0x173e93f0
2025-11-13T01:49:49.378 [DEBUG] [Thread-26498] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:49:49.398 [DEBUG] [Thread-26498] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:49:49.398 [INFO] [Thread-26498] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] client lang: <none>
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] server lang: <none>
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] kex follows: False
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:49:49.401 [DEBUG] [Thread-26498] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:49:49.402 [DEBUG] [Thread-26498] [transport.py] [_log()] Compression: none
2025-11-13T01:49:49.402 [DEBUG] [Thread-26498] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:49:49.420 [DEBUG] [Thread-26498] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:49:49.420 [DEBUG] [Thread-26498] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:49:49.421 [DEBUG] [Thread-26498] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:49:49.421 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:49:49.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:49:49.423 [DEBUG] [Thread-26498] [transport.py] [_log()] userauth is OK
2025-11-13T01:49:49.423 [DEBUG] [Thread-26498] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:49:49.424 [DEBUG] [Thread-26498] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:49:49.424 [DEBUG] [Thread-26498] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:49:49.424 [DEBUG] [Thread-26498] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:49:49.437 [INFO] [Thread-26498] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:49:49.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:49:50.042 [DEBUG] [Thread-26498] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:49:50.042 [DEBUG] [Thread-26498] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:49:50.043 [DEBUG] [Thread-26498] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:49:50.083 [DEBUG] [Thread-26498] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:49:50.084 [DEBUG] [Thread-26498] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:49:50.089 [DEBUG] [Thread-26498] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:49:50.100 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:49:50.101 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:49:50.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:49:50.104 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:49:50.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:49:50.113 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:49:50.113 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:49:50.113 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:49:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:49:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.992452 -999.00  +14.70   9.65     54   +5.60 1 1 1 1 1     0    0 9.27 22.93 ZNESW 12.5 9.7 274.8 12.8 15.1 -24.1 15.0 -23.2 14.7 -22.7 15.0 -23.7
2025-11-13T01:49:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:49:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:49:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.992452
2025-11-13T01:49:50.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:49:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:49:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:49:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:49:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:49:50.115 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:49:20', tmtdew=10.11, humidity=50.49, cloud=0.0, wind=14.65, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:49:20', seeing=1.05, atlas_timestamp='2025-11-12T23:49:07.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.004250000000000753, 0.07225000000000037, 0.024499999999999744, 0.03250000000000064, 0.1042500000000004, -0.0010000000000012221, -0.027249999999998664, 0.0045000000000001705, 0.05450000000000088, 0.08124999999999893, 0.04299999999999926, 0.12400000000000055, 0.10324999999999918, -0.02800000000000047, -0.009000000000000341, -0.010750000000001592, 0.04099999999999859, 0.12549999999999883, 0.07124999999999915, 0.14099999999999824, 0.03724999999999845, 0.0012500000000006395, -0.025249999999999773, 0.0034999999999989484, 0.06750000000000078, 0.06975000000000087, 0.1775000000000002, 0.1750000000000007, 0.06100000000000172, 0.0840000000000014, -0.0389999999999997, 0.03474999999999895], zp_timestamp='2025-11-12T23:47:00')
2025-11-13T01:49:50.116 [DEBUG] [Thread-26498] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:49:50.200 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:49:50.212 [DEBUG] [Thread-26501] [transport.py] [_log()] starting thread (client mode): 0x14988c40
2025-11-13T01:49:50.212 [DEBUG] [Thread-26501] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:49:50.229 [DEBUG] [Thread-26501] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:49:50.229 [INFO] [Thread-26501] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:49:50.236 [DEBUG] [Thread-26501] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] client lang: <none>
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] server lang: <none>
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] kex follows: False
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:49:50.237 [DEBUG] [Thread-26501] [transport.py] [_log()] Compression: none
2025-11-13T01:49:50.238 [DEBUG] [Thread-26501] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:49:50.300 [DEBUG] [Thread-26501] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:49:50.301 [DEBUG] [Thread-26501] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:49:50.302 [DEBUG] [Thread-26501] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:49:50.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:49:50.302 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:49:50.360 [DEBUG] [Thread-26501] [transport.py] [_log()] userauth is OK
2025-11-13T01:49:50.360 [DEBUG] [Thread-26501] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:49:50.360 [DEBUG] [Thread-26501] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:49:50.360 [DEBUG] [Thread-26501] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:49:50.360 [DEBUG] [Thread-26501] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:49:50.380 [INFO] [Thread-26501] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:49:50.380 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:49:50.380 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:49:51.197 [DEBUG] [Thread-26501] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:49:51.197 [DEBUG] [Thread-26501] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:49:51.245 [DEBUG] [Thread-26501] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:49:51.245 [DEBUG] [Thread-26501] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:49:51.254 [DEBUG] [Thread-26501] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:49:51.263 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:49:51.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:49:51.273 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:49:51.285 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:49:51.285 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:49:51.286 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:49:51.296 [DEBUG] [Thread-26501] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:50:00.975 [DEBUG] [Thread-26503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:50:11.307 [DEBUG] [Thread-26504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:50:16.026 [DEBUG] [Thread-26505 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:50:21.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:50:21.290 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:50:21.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-11-13T01:50:21.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 49, 52), 10.17, 50.27, 0.0, 16.15, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:50:21.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:49:52
2025-11-13T01:50:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:50:22.196 [DEBUG] [Thread-26506] [transport.py] [_log()] starting thread (client mode): 0x14947670
2025-11-13T01:50:22.196 [DEBUG] [Thread-26506] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:50:22.216 [DEBUG] [Thread-26506] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:50:22.216 [INFO] [Thread-26506] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:50:22.219 [DEBUG] [Thread-26506] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] client lang: <none>
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] server lang: <none>
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] kex follows: False
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:50:22.220 [DEBUG] [Thread-26506] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:50:22.221 [DEBUG] [Thread-26506] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:50:22.221 [DEBUG] [Thread-26506] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:50:22.221 [DEBUG] [Thread-26506] [transport.py] [_log()] Compression: none
2025-11-13T01:50:22.221 [DEBUG] [Thread-26506] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:50:22.238 [DEBUG] [Thread-26506] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:50:22.239 [DEBUG] [Thread-26506] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:50:22.240 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:50:22.241 [DEBUG] [Thread-26506] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:50:22.241 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:50:22.243 [DEBUG] [Thread-26506] [transport.py] [_log()] userauth is OK
2025-11-13T01:50:22.243 [DEBUG] [Thread-26506] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:50:22.243 [DEBUG] [Thread-26506] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:50:22.243 [DEBUG] [Thread-26506] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:50:22.243 [DEBUG] [Thread-26506] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:50:22.280 [INFO] [Thread-26506] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:50:22.281 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:50:22.897 [DEBUG] [Thread-26506] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:50:22.897 [DEBUG] [Thread-26506] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:50:22.898 [DEBUG] [Thread-26506] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:50:22.939 [DEBUG] [Thread-26506] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:50:22.939 [DEBUG] [Thread-26506] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:50:22.942 [DEBUG] [Thread-26506] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:50:22.955 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:50:22.955 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:50:22.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:50:22.959 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:50:22.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:50:22.968 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:50:22.968 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:50:22.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:50:22.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:50:22.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.993146 -999.00  +14.70   9.42     54   +5.70 1 1 1 1 1     0    0 9.12 21.91 ZNESW 11.1 9.4 272.1 13.0 15.1 -24.2 15.0 -23.2 14.7 -22.8 15.0 -23.5
2025-11-13T01:50:22.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:50:22.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:50:22.969 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.993146
2025-11-13T01:50:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:50:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:50:22.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:50:22.971 [DEBUG] [Thread-26506] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:50:22.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:50:22.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:50:22.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:49:52', tmtdew=10.17, humidity=50.27, cloud=0.0, wind=16.15, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:49:52', seeing=1.16, atlas_timestamp='2025-11-12T23:50:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.004250000000000753, 0.07225000000000037, 0.024499999999999744, 0.03250000000000064, 0.1042500000000004, -0.0010000000000012221, -0.027249999999998664, 0.0045000000000001705, 0.05450000000000088, 0.08124999999999893, 0.04299999999999926, 0.12400000000000055, 0.10324999999999918, -0.02800000000000047, -0.009000000000000341, -0.010750000000001592, 0.04099999999999859, 0.12549999999999883, 0.07124999999999915, 0.14099999999999824, 0.03724999999999845, 0.0012500000000006395, -0.025249999999999773, 0.0034999999999989484, 0.06750000000000078, 0.06975000000000087, 0.1775000000000002, 0.1750000000000007, 0.06100000000000172, 0.0840000000000014, -0.0389999999999997, 0.03474999999999895], zp_timestamp='2025-11-12T23:47:00')
2025-11-13T01:50:23.054 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:50:23.066 [DEBUG] [Thread-26509] [transport.py] [_log()] starting thread (client mode): 0x19dd8cd0
2025-11-13T01:50:23.067 [DEBUG] [Thread-26509] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:50:23.081 [DEBUG] [Thread-26509] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:50:23.081 [INFO] [Thread-26509] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] client lang: <none>
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] server lang: <none>
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] kex follows: False
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:50:23.089 [DEBUG] [Thread-26509] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:50:23.090 [DEBUG] [Thread-26509] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:50:23.090 [DEBUG] [Thread-26509] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:50:23.090 [DEBUG] [Thread-26509] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:50:23.090 [DEBUG] [Thread-26509] [transport.py] [_log()] Compression: none
2025-11-13T01:50:23.090 [DEBUG] [Thread-26509] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:50:23.148 [DEBUG] [Thread-26509] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:50:23.148 [DEBUG] [Thread-26509] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:50:23.149 [DEBUG] [Thread-26509] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:50:23.149 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:50:23.150 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:50:23.204 [DEBUG] [Thread-26509] [transport.py] [_log()] userauth is OK
2025-11-13T01:50:23.204 [DEBUG] [Thread-26509] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:50:23.204 [DEBUG] [Thread-26509] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:50:23.204 [DEBUG] [Thread-26509] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:50:23.204 [DEBUG] [Thread-26509] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:50:23.223 [INFO] [Thread-26509] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:50:23.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:50:23.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:50:24.041 [DEBUG] [Thread-26509] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:50:24.041 [DEBUG] [Thread-26509] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:50:24.089 [DEBUG] [Thread-26509] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:50:24.090 [DEBUG] [Thread-26509] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:50:24.099 [DEBUG] [Thread-26509] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:50:24.108 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:50:24.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-11-13T01:50:24.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-11-13T01:50:24.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:50:24.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:50:24.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:50:24.135 [DEBUG] [Thread-26509] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:50:31.063 [DEBUG] [Thread-26511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:50:42.662 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:50:42.663 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:50:46.120 [DEBUG] [Thread-26512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:50:54.157 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:50:54.158 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:50:54.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-11-13T01:50:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 50, 24), 10.18, 50.27, 0.0, 14.59, 14.5, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:50:54.793 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:50:24
2025-11-13T01:50:54.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:50:55.057 [DEBUG] [Thread-26513] [transport.py] [_log()] starting thread (client mode): 0x19ddace0
2025-11-13T01:50:55.058 [DEBUG] [Thread-26513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:50:55.077 [DEBUG] [Thread-26513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:50:55.077 [INFO] [Thread-26513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] client lang: <none>
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] server lang: <none>
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] kex follows: False
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] Compression: none
2025-11-13T01:50:55.081 [DEBUG] [Thread-26513] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:50:55.098 [DEBUG] [Thread-26513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:50:55.099 [DEBUG] [Thread-26513] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:50:55.099 [DEBUG] [Thread-26513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:50:55.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:50:55.100 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:50:55.101 [DEBUG] [Thread-26513] [transport.py] [_log()] userauth is OK
2025-11-13T01:50:55.101 [DEBUG] [Thread-26513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:50:55.101 [DEBUG] [Thread-26513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:50:55.101 [DEBUG] [Thread-26513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:50:55.101 [DEBUG] [Thread-26513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:50:55.120 [INFO] [Thread-26513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:50:55.120 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:50:55.735 [DEBUG] [Thread-26513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:50:55.735 [DEBUG] [Thread-26513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:50:55.736 [DEBUG] [Thread-26513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:50:55.777 [DEBUG] [Thread-26513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:50:55.777 [DEBUG] [Thread-26513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:50:55.781 [DEBUG] [Thread-26513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:50:55.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:50:55.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:50:55.795 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:50:55.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:50:55.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:50:55.803 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:50:55.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:50:55.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:50:55.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:50:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.993494 -999.00  +14.70  11.20     54   +5.70 1 1 1 1 1     0    0 9.22 23.36 ZNESW 10.3 11.2 275.8 14.0 15.1 -24.2 15.0 -23.2 14.7 -22.7 15.0 -23.6
2025-11-13T01:50:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:50:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:50:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.993494
2025-11-13T01:50:55.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:50:55.806 [DEBUG] [Thread-26513] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:50:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:50:55.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:50:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:50:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:50:55.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:50:24', tmtdew=10.18, humidity=50.27, cloud=0.0, wind=14.59, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:50:24', seeing=1.16, atlas_timestamp='2025-11-12T23:50:37.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.027749999999999275, 0.004250000000000753, 0.07225000000000037, 0.024499999999999744, 0.03250000000000064, 0.1042500000000004, -0.0010000000000012221, -0.027249999999998664, 0.0045000000000001705, 0.05450000000000088, 0.08124999999999893, 0.04299999999999926, 0.12400000000000055, 0.10324999999999918, -0.02800000000000047, -0.009000000000000341, -0.010750000000001592, 0.04099999999999859, 0.12549999999999883, 0.07124999999999915, 0.14099999999999824, 0.03724999999999845, 0.0012500000000006395, -0.025249999999999773, 0.0034999999999989484, 0.06750000000000078, 0.06975000000000087, 0.1775000000000002, 0.1750000000000007, 0.06100000000000172, 0.0840000000000014, -0.0389999999999997, 0.03474999999999895], zp_timestamp='2025-11-12T23:47:00')
2025-11-13T01:50:55.887 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:51:01.156 [DEBUG] [Thread-26516 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:51:11.363 [DEBUG] [Thread-26517 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:51:16.205 [DEBUG] [Thread-26518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:51:31.243 [DEBUG] [Thread-26519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:51:42.865 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:51:42.875 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:51:46.283 [DEBUG] [Thread-26520 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:01.314 [DEBUG] [Thread-26521 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:11.431 [DEBUG] [Thread-26522 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:16.351 [DEBUG] [Thread-26523 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:31.384 [DEBUG] [Thread-26524 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:33.530 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:38.297 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:41.340 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:43.079 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:43.080 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:46.418 [DEBUG] [Thread-26525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:52:47.706 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:53:01.459 [DEBUG] [Thread-26526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:53:08.027 [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-11-13T01:53:11.484 [DEBUG] [Thread-26527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:53:16.492 [DEBUG] [Thread-26528 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:53:31.530 [DEBUG] [Thread-26529 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:53:38.035 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:53:38.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:53:38.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-11-13T01:53:38.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 53, 4), 10.65, 48.81, 0.0, 12.88, 14.54, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:53:38.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:53:04
2025-11-13T01:53:38.836 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:53:38.981 [DEBUG] [Thread-26530] [transport.py] [_log()] starting thread (client mode): 0x14989420
2025-11-13T01:53:38.981 [DEBUG] [Thread-26530] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:53:39.001 [DEBUG] [Thread-26530] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:53:39.001 [INFO] [Thread-26530] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:53:39.004 [DEBUG] [Thread-26530] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] client lang: <none>
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] server lang: <none>
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] kex follows: False
2025-11-13T01:53:39.005 [DEBUG] [Thread-26530] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:53:39.006 [DEBUG] [Thread-26530] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:53:39.006 [DEBUG] [Thread-26530] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:53:39.006 [DEBUG] [Thread-26530] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:53:39.006 [DEBUG] [Thread-26530] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:53:39.006 [DEBUG] [Thread-26530] [transport.py] [_log()] Compression: none
2025-11-13T01:53:39.006 [DEBUG] [Thread-26530] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:53:39.027 [DEBUG] [Thread-26530] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:53:39.027 [DEBUG] [Thread-26530] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:53:39.028 [DEBUG] [Thread-26530] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:53:39.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:53:39.029 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:53:39.030 [DEBUG] [Thread-26530] [transport.py] [_log()] userauth is OK
2025-11-13T01:53:39.030 [DEBUG] [Thread-26530] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:53:39.030 [DEBUG] [Thread-26530] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:53:39.030 [DEBUG] [Thread-26530] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:53:39.030 [DEBUG] [Thread-26530] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:53:39.054 [INFO] [Thread-26530] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:53:39.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:53:39.645 [DEBUG] [Thread-26530] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:53:39.646 [DEBUG] [Thread-26530] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:53:39.646 [DEBUG] [Thread-26530] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:53:39.687 [DEBUG] [Thread-26530] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:53:39.687 [DEBUG] [Thread-26530] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:53:39.691 [DEBUG] [Thread-26530] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:53:39.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:53:39.702 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:53:39.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:53:39.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:53:39.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:53:39.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:53:39.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:53:39.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:53:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:53:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.995230 -999.00  +14.80  13.34     52   +5.20 1 1 1 1 1     0    0 9.73 38.00 ZNESW 12.9 13.3 274.8 16.8 15.0 -24.2 14.9 -23.3 14.7 -22.5 15.0 -23.3
2025-11-13T01:53:39.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:53:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:53:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.995230
2025-11-13T01:53:39.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:53:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:53:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:53:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:53:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:53:39.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:53:04', tmtdew=10.65, humidity=48.81, cloud=0.0, wind=12.88, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:53:36', seeing=1.04, atlas_timestamp='2025-11-12T23:53:07.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.01425000000000054, 0.05025000000000013, 0.059499999999999886, 0.03950000000000031, 0.05975000000000108, 0.011999999999998678, 0.013750000000001705, 0.02149999999999963, 0.05000000000000071, 0.10524999999999984, 0.05850000000000044, 0.12099999999999866, 0.06625000000000014, 0.026999999999999247, -0.03250000000000064, 0.024250000000000327, 0.06300000000000061, 0.12149999999999928, 0.08824999999999861, 0.1039999999999992, 0.08174999999999955, 0.0182500000000001, 0.0022500000000000853, 0.02899999999999814, 0.0804999999999989, 0.12074999999999925, 0.18849999999999945, 0.1739999999999995, 0.08900000000000041, 0.07400000000000162, -0.014999999999998792, 0.059749999999999304], zp_timestamp='2025-11-12T23:50:00')
2025-11-13T01:53:39.717 [DEBUG] [Thread-26530] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:53:39.799 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:53:39.812 [DEBUG] [Thread-26533] [transport.py] [_log()] starting thread (client mode): 0x14947610
2025-11-13T01:53:39.812 [DEBUG] [Thread-26533] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:53:39.827 [DEBUG] [Thread-26533] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:53:39.827 [INFO] [Thread-26533] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:53:39.834 [DEBUG] [Thread-26533] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:53:39.834 [DEBUG] [Thread-26533] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:53:39.834 [DEBUG] [Thread-26533] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:53:39.834 [DEBUG] [Thread-26533] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:53:39.834 [DEBUG] [Thread-26533] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:53:39.834 [DEBUG] [Thread-26533] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:53:39.834 [DEBUG] [Thread-26533] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] client lang: <none>
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] server lang: <none>
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] kex follows: False
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] Compression: none
2025-11-13T01:53:39.835 [DEBUG] [Thread-26533] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:53:39.891 [DEBUG] [Thread-26533] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:53:39.892 [DEBUG] [Thread-26533] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:53:39.892 [DEBUG] [Thread-26533] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:53:39.892 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:53:39.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:53:39.947 [DEBUG] [Thread-26533] [transport.py] [_log()] userauth is OK
2025-11-13T01:53:39.948 [DEBUG] [Thread-26533] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:53:39.948 [DEBUG] [Thread-26533] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:53:39.948 [DEBUG] [Thread-26533] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:53:39.948 [DEBUG] [Thread-26533] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:53:39.967 [INFO] [Thread-26533] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:53:39.968 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:53:39.968 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:53:40.773 [DEBUG] [Thread-26533] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:53:40.773 [DEBUG] [Thread-26533] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:53:40.822 [DEBUG] [Thread-26533] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:53:40.822 [DEBUG] [Thread-26533] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:53:40.831 [DEBUG] [Thread-26533] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:53:40.840 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:53:40.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')
2025-11-13T01:53:40.850 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:53:40.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:53:40.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:53:40.860 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:53:40.868 [DEBUG] [Thread-26533] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:53:43.284 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:53:43.285 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:53:46.566 [DEBUG] [Thread-26535 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:01.621 [DEBUG] [Thread-26536 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:10.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:54:10.865 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:54:10.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-11-13T01:54:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 54, 8), 10.69, 48.85, 0.0, 13.18, 14.6, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:54:11.529 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:54:08
2025-11-13T01:54:11.536 [DEBUG] [Thread-26537 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:11.647 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:54:11.794 [DEBUG] [Thread-26538] [transport.py] [_log()] starting thread (client mode): 0x14920760
2025-11-13T01:54:11.794 [DEBUG] [Thread-26538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:54:11.815 [DEBUG] [Thread-26538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:54:11.815 [INFO] [Thread-26538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:54:11.816 [DEBUG] [Thread-26538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] client lang: <none>
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] server lang: <none>
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] kex follows: False
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] Compression: none
2025-11-13T01:54:11.817 [DEBUG] [Thread-26538] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:54:11.830 [DEBUG] [Thread-26538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:54:11.831 [DEBUG] [Thread-26538] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:54:11.831 [DEBUG] [Thread-26538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:54:11.831 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:54:11.832 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:54:11.833 [DEBUG] [Thread-26538] [transport.py] [_log()] userauth is OK
2025-11-13T01:54:11.833 [DEBUG] [Thread-26538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:54:11.833 [DEBUG] [Thread-26538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:54:11.833 [DEBUG] [Thread-26538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:54:11.833 [DEBUG] [Thread-26538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:54:11.852 [INFO] [Thread-26538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:54:11.853 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:54:12.480 [DEBUG] [Thread-26538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:54:12.480 [DEBUG] [Thread-26538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:54:12.480 [DEBUG] [Thread-26538] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:54:12.520 [DEBUG] [Thread-26538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:54:12.521 [DEBUG] [Thread-26538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:54:12.524 [DEBUG] [Thread-26538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:54:12.535 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:54:12.535 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:54:12.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:54:12.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:54:12.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:54:12.548 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:54:12.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:54:12.548 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:54:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:54:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.995577 -999.00  +14.90  11.84     52   +5.30 1 1 1 1 1     0    0 9.93 44.33 ZNESW 12.2 11.8 273.0 16.2 15.1 -24.1 14.9 -23.2 14.7 -22.8 15.0 -23.6
2025-11-13T01:54:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:54:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:54:12.549 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.995577
2025-11-13T01:54:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:54:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:54:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:54:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:54:12.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:54:12.551 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:54:08', tmtdew=10.69, humidity=48.85, cloud=0.0, wind=13.18, temperature=14.6, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:54:08', seeing=1.0, atlas_timestamp='2025-11-12T23:53:37.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.01425000000000054, 0.05025000000000013, 0.059499999999999886, 0.03950000000000031, 0.05975000000000108, 0.011999999999998678, 0.013750000000001705, 0.02149999999999963, 0.05000000000000071, 0.10524999999999984, 0.05850000000000044, 0.12099999999999866, 0.06625000000000014, 0.026999999999999247, -0.03250000000000064, 0.024250000000000327, 0.06300000000000061, 0.12149999999999928, 0.08824999999999861, 0.1039999999999992, 0.08174999999999955, 0.0182500000000001, 0.0022500000000000853, 0.02899999999999814, 0.0804999999999989, 0.12074999999999925, 0.18849999999999945, 0.1739999999999995, 0.08900000000000041, 0.07400000000000162, -0.014999999999998792, 0.059749999999999304], zp_timestamp='2025-11-12T23:53:00')
2025-11-13T01:54:12.551 [DEBUG] [Thread-26538] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:54:12.632 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:54:12.645 [DEBUG] [Thread-26541] [transport.py] [_log()] starting thread (client mode): 0x14988970
2025-11-13T01:54:12.645 [DEBUG] [Thread-26541] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:54:12.659 [DEBUG] [Thread-26541] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:54:12.659 [INFO] [Thread-26541] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:54:12.667 [DEBUG] [Thread-26541] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:54:12.667 [DEBUG] [Thread-26541] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:54:12.667 [DEBUG] [Thread-26541] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] client lang: <none>
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] server lang: <none>
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] kex follows: False
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:54:12.668 [DEBUG] [Thread-26541] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:54:12.669 [DEBUG] [Thread-26541] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:54:12.669 [DEBUG] [Thread-26541] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:54:12.669 [DEBUG] [Thread-26541] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:54:12.669 [DEBUG] [Thread-26541] [transport.py] [_log()] Compression: none
2025-11-13T01:54:12.669 [DEBUG] [Thread-26541] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:54:12.727 [DEBUG] [Thread-26541] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:54:12.728 [DEBUG] [Thread-26541] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:54:12.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:54:12.729 [DEBUG] [Thread-26541] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:54:12.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:54:12.784 [DEBUG] [Thread-26541] [transport.py] [_log()] userauth is OK
2025-11-13T01:54:12.784 [DEBUG] [Thread-26541] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:54:12.784 [DEBUG] [Thread-26541] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:54:12.784 [DEBUG] [Thread-26541] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:54:12.784 [DEBUG] [Thread-26541] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:54:12.803 [INFO] [Thread-26541] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:54:12.804 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:54:12.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:54:13.624 [DEBUG] [Thread-26541] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:54:13.624 [DEBUG] [Thread-26541] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:54:13.671 [DEBUG] [Thread-26541] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:54:13.672 [DEBUG] [Thread-26541] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:54:13.681 [DEBUG] [Thread-26541] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:54:13.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:54: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-11-13T01:54: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-11-13T01:54:13.709 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:54:13.709 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:54:13.710 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:54:13.718 [DEBUG] [Thread-26541] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:54:16.656 [DEBUG] [Thread-26543 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:31.709 [DEBUG] [Thread-26544 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:43.289 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:43.487 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:43.488 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:43.740 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:54:43.741 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:54:43.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-11-13T01:54:44.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 54, 40), 10.63, 48.88, 0.0, 12.9, 14.54, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:54:44.391 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:54:40
2025-11-13T01:54:44.509 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:54:44.654 [DEBUG] [Thread-26545] [transport.py] [_log()] starting thread (client mode): 0x1498aef0
2025-11-13T01:54:44.654 [DEBUG] [Thread-26545] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:54:44.674 [DEBUG] [Thread-26545] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:54:44.674 [INFO] [Thread-26545] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:54:44.677 [DEBUG] [Thread-26545] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:54:44.677 [DEBUG] [Thread-26545] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:54:44.677 [DEBUG] [Thread-26545] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:54:44.677 [DEBUG] [Thread-26545] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:54:44.677 [DEBUG] [Thread-26545] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:54:44.677 [DEBUG] [Thread-26545] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] client lang: <none>
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] server lang: <none>
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] kex follows: False
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] Compression: none
2025-11-13T01:54:44.678 [DEBUG] [Thread-26545] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:54:44.697 [DEBUG] [Thread-26545] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:54:44.697 [DEBUG] [Thread-26545] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:54:44.698 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:54:44.698 [DEBUG] [Thread-26545] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:54:44.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:54:44.700 [DEBUG] [Thread-26545] [transport.py] [_log()] userauth is OK
2025-11-13T01:54:44.701 [DEBUG] [Thread-26545] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:54:44.701 [DEBUG] [Thread-26545] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:54:44.701 [DEBUG] [Thread-26545] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:54:44.701 [DEBUG] [Thread-26545] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:54:44.724 [INFO] [Thread-26545] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:54:44.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:54:45.344 [DEBUG] [Thread-26545] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:54:45.344 [DEBUG] [Thread-26545] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:54:45.344 [DEBUG] [Thread-26545] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:54:45.385 [DEBUG] [Thread-26545] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:54:45.385 [DEBUG] [Thread-26545] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:54:45.388 [DEBUG] [Thread-26545] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:54:45.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:54:45.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:54:45.400 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:54:45.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:54:45.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:54:45.409 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:54:45.409 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:54:45.409 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:54:45.409 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:54:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.995924 -999.00  +14.90  13.54     52   +5.30 1 1 1 1 1     0    0 10.07 48.47 ZNESW 12.9 13.5 275.8 15.5 15.1 -24.2 14.9 -23.4 14.7 -22.9 15.0 -23.8
2025-11-13T01:54:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:54:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:54:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.995924
2025-11-13T01:54:45.410 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:54:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:54:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:54:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:54:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:54:45.411 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:54:40', tmtdew=10.63, humidity=48.88, cloud=0.0, wind=12.9, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:54:40', seeing=1.0, atlas_timestamp='2025-11-12T23:54:07.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.01425000000000054, 0.05025000000000013, 0.059499999999999886, 0.03950000000000031, 0.05975000000000108, 0.011999999999998678, 0.013750000000001705, 0.02149999999999963, 0.05000000000000071, 0.10524999999999984, 0.05850000000000044, 0.12099999999999866, 0.06625000000000014, 0.026999999999999247, -0.03250000000000064, 0.024250000000000327, 0.06300000000000061, 0.12149999999999928, 0.08824999999999861, 0.1039999999999992, 0.08174999999999955, 0.0182500000000001, 0.0022500000000000853, 0.02899999999999814, 0.0804999999999989, 0.12074999999999925, 0.18849999999999945, 0.1739999999999995, 0.08900000000000041, 0.07400000000000162, -0.014999999999998792, 0.059749999999999304], zp_timestamp='2025-11-12T23:53:00')
2025-11-13T01:54:45.412 [DEBUG] [Thread-26545] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:54:45.493 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:54:45.504 [DEBUG] [Thread-26548] [transport.py] [_log()] starting thread (client mode): 0x1737e530
2025-11-13T01:54:45.505 [DEBUG] [Thread-26548] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:54:45.520 [DEBUG] [Thread-26548] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:54:45.520 [INFO] [Thread-26548] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:54:45.528 [DEBUG] [Thread-26548] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:54:45.528 [DEBUG] [Thread-26548] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] client lang: <none>
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] server lang: <none>
2025-11-13T01:54:45.529 [DEBUG] [Thread-26548] [transport.py] [_log()] kex follows: False
2025-11-13T01:54:45.530 [DEBUG] [Thread-26548] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:54:45.530 [DEBUG] [Thread-26548] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:54:45.530 [DEBUG] [Thread-26548] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:54:45.530 [DEBUG] [Thread-26548] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:54:45.530 [DEBUG] [Thread-26548] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:54:45.530 [DEBUG] [Thread-26548] [transport.py] [_log()] Compression: none
2025-11-13T01:54:45.530 [DEBUG] [Thread-26548] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:54:45.587 [DEBUG] [Thread-26548] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:54:45.588 [DEBUG] [Thread-26548] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:54:45.589 [DEBUG] [Thread-26548] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:54:45.589 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:54:45.590 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:54:45.644 [DEBUG] [Thread-26548] [transport.py] [_log()] userauth is OK
2025-11-13T01:54:45.644 [DEBUG] [Thread-26548] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:54:45.644 [DEBUG] [Thread-26548] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:54:45.644 [DEBUG] [Thread-26548] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:54:45.645 [DEBUG] [Thread-26548] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:54:45.663 [INFO] [Thread-26548] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:54:45.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:54:45.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:54:46.475 [DEBUG] [Thread-26548] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:54:46.475 [DEBUG] [Thread-26548] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:54:46.524 [DEBUG] [Thread-26548] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:54:46.524 [DEBUG] [Thread-26548] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:54:46.533 [DEBUG] [Thread-26548] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:54:46.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:54:46.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-11-13T01:54: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-11-13T01:54:46.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:54:46.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:54:46.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:54:46.569 [DEBUG] [Thread-26548] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:54:46.598 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:46.744 [DEBUG] [Thread-26550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:51.772 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:54:57.648 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:01.800 [DEBUG] [Thread-26551 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:11.606 [DEBUG] [Thread-26552 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:16.542 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:16.592 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:55:16.592 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:55:16.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-11-13T01:55:16.831 [DEBUG] [Thread-26553 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:17.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 55, 12), 10.68, 48.7, 0.0, 12.97, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:55:17.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:55:12
2025-11-13T01:55:17.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:55:17.510 [DEBUG] [Thread-26554] [transport.py] [_log()] starting thread (client mode): 0x19dd97b0
2025-11-13T01:55:17.511 [DEBUG] [Thread-26554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:55:17.531 [DEBUG] [Thread-26554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:55:17.531 [INFO] [Thread-26554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:55:17.534 [DEBUG] [Thread-26554] [transport.py] [_log()] client lang: <none>
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] server lang: <none>
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] kex follows: False
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] Compression: none
2025-11-13T01:55:17.535 [DEBUG] [Thread-26554] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:55:17.551 [DEBUG] [Thread-26554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:55:17.551 [DEBUG] [Thread-26554] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:55:17.552 [DEBUG] [Thread-26554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:55:17.552 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:55:17.553 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:55:17.554 [DEBUG] [Thread-26554] [transport.py] [_log()] userauth is OK
2025-11-13T01:55:17.554 [DEBUG] [Thread-26554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:55:17.555 [DEBUG] [Thread-26554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:55:17.555 [DEBUG] [Thread-26554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:55:17.555 [DEBUG] [Thread-26554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:55:17.580 [INFO] [Thread-26554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:55:17.581 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:55:18.205 [DEBUG] [Thread-26554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:55:18.205 [DEBUG] [Thread-26554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:55:18.205 [DEBUG] [Thread-26554] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:55:18.246 [DEBUG] [Thread-26554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:55:18.246 [DEBUG] [Thread-26554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:55:18.249 [DEBUG] [Thread-26554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:55:18.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:55:18.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:55:18.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:55:18.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:55:18.270 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:55:18.272 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:55:18.273 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:55:18.273 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:55:18.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:55:18.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.996272 -999.00  +14.90  12.39     52   +5.30 1 1 1 1 1     0    0 10.19 50.86 ZNESW 13.2 12.4 270.8 17.7 15.1 -24.2 15.0 -23.3 14.7 -22.6 15.0 -23.6
2025-11-13T01:55:18.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:55:18.273 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:55:18.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.996272
2025-11-13T01:55:18.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:55:18.274 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:55:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:55:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:55:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:55:18.275 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:55:12', tmtdew=10.68, humidity=48.7, cloud=0.0, wind=12.97, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:55:12', seeing=1.02, atlas_timestamp='2025-11-12T23:54:37.901', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.01425000000000054, 0.05025000000000013, 0.059499999999999886, 0.03950000000000031, 0.05975000000000108, 0.011999999999998678, 0.013750000000001705, 0.02149999999999963, 0.05000000000000071, 0.10524999999999984, 0.05850000000000044, 0.12099999999999866, 0.06625000000000014, 0.026999999999999247, -0.03250000000000064, 0.024250000000000327, 0.06300000000000061, 0.12149999999999928, 0.08824999999999861, 0.1039999999999992, 0.08174999999999955, 0.0182500000000001, 0.0022500000000000853, 0.02899999999999814, 0.0804999999999989, 0.12074999999999925, 0.18849999999999945, 0.1739999999999995, 0.08900000000000041, 0.07400000000000162, -0.014999999999998792, 0.059749999999999304], zp_timestamp='2025-11-12T23:53:00')
2025-11-13T01:55:18.275 [DEBUG] [Thread-26554] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:55:18.358 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:55:18.371 [DEBUG] [Thread-26557] [transport.py] [_log()] starting thread (client mode): 0x1498bf40
2025-11-13T01:55:18.371 [DEBUG] [Thread-26557] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:55:18.386 [DEBUG] [Thread-26557] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:55:18.387 [INFO] [Thread-26557] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:55:18.394 [DEBUG] [Thread-26557] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:55:18.394 [DEBUG] [Thread-26557] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:55:18.394 [DEBUG] [Thread-26557] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:55:18.394 [DEBUG] [Thread-26557] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] client lang: <none>
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] server lang: <none>
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] kex follows: False
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] Compression: none
2025-11-13T01:55:18.395 [DEBUG] [Thread-26557] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:55:18.451 [DEBUG] [Thread-26557] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:55:18.452 [DEBUG] [Thread-26557] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:55:18.453 [DEBUG] [Thread-26557] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:55:18.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:55:18.454 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:55:18.508 [DEBUG] [Thread-26557] [transport.py] [_log()] userauth is OK
2025-11-13T01:55:18.508 [DEBUG] [Thread-26557] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:55:18.508 [DEBUG] [Thread-26557] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:55:18.508 [DEBUG] [Thread-26557] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:55:18.509 [DEBUG] [Thread-26557] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:55:18.527 [INFO] [Thread-26557] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:55:18.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:55:18.528 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:55:19.335 [DEBUG] [Thread-26557] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:55:19.336 [DEBUG] [Thread-26557] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:55:19.384 [DEBUG] [Thread-26557] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:55:19.384 [DEBUG] [Thread-26557] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:55:19.393 [DEBUG] [Thread-26557] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:55:19.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:55:19.403 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:55:19.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:55:19.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:55:19.421 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:55:19.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:55:19.430 [DEBUG] [Thread-26557] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:55:21.216 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:31.289 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:31.865 [DEBUG] [Thread-26559 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:35.687 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:41.804 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:43.690 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:43.691 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:46.303 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:46.914 [DEBUG] [Thread-26560 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:55:49.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:55:49.435 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:55:49.438 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T01:55:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 55, 43), 10.95, 47.63, 0.0, 12.93, 14.62, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:55:50.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:55:43
2025-11-13T01:55:50.175 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:55:50.320 [DEBUG] [Thread-26561] [transport.py] [_log()] starting thread (client mode): 0x1737fc10
2025-11-13T01:55:50.320 [DEBUG] [Thread-26561] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:55:50.341 [DEBUG] [Thread-26561] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:55:50.341 [INFO] [Thread-26561] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:55:50.344 [DEBUG] [Thread-26561] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:55:50.344 [DEBUG] [Thread-26561] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] client lang: <none>
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] server lang: <none>
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] kex follows: False
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:55:50.345 [DEBUG] [Thread-26561] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:55:50.346 [DEBUG] [Thread-26561] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:55:50.346 [DEBUG] [Thread-26561] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:55:50.346 [DEBUG] [Thread-26561] [transport.py] [_log()] Compression: none
2025-11-13T01:55:50.346 [DEBUG] [Thread-26561] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:55:50.365 [DEBUG] [Thread-26561] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:55:50.366 [DEBUG] [Thread-26561] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:55:50.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:55:50.367 [DEBUG] [Thread-26561] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:55:50.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:55:50.369 [DEBUG] [Thread-26561] [transport.py] [_log()] userauth is OK
2025-11-13T01:55:50.370 [DEBUG] [Thread-26561] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:55:50.370 [DEBUG] [Thread-26561] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:55:50.370 [DEBUG] [Thread-26561] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:55:50.370 [DEBUG] [Thread-26561] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:55:50.395 [INFO] [Thread-26561] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:55:50.396 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:55:51.038 [DEBUG] [Thread-26561] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:55:51.038 [DEBUG] [Thread-26561] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:55:51.039 [DEBUG] [Thread-26561] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:55:51.080 [DEBUG] [Thread-26561] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:55:51.080 [DEBUG] [Thread-26561] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:55:51.084 [DEBUG] [Thread-26561] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:55:51.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:55:51.096 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:55:51.098 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:55:51.100 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:55:51.106 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:55:51.108 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:55:51.109 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:55:51.109 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:55:51.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:55:51.109 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.996618 -999.00  +14.90  12.62     52   +5.10 1 1 1 1 1     0    0 10.40 57.33 ZNESW 13.3 12.6 275.8 16.3 15.1 -24.2 14.9 -23.4 14.7 -22.9 15.1 -23.7
2025-11-13T01:55:51.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:55:51.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:55:51.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.996618
2025-11-13T01:55:51.110 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:55:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:55:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:55:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:55:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:55:51.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:55:43', tmtdew=10.95, humidity=47.63, cloud=0.0, wind=12.93, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:55:44', seeing=1.05, atlas_timestamp='2025-11-12T23:55:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.01425000000000054, 0.05025000000000013, 0.059499999999999886, 0.03950000000000031, 0.05975000000000108, 0.011999999999998678, 0.013750000000001705, 0.02149999999999963, 0.05000000000000071, 0.10524999999999984, 0.05850000000000044, 0.12099999999999866, 0.06625000000000014, 0.026999999999999247, -0.03250000000000064, 0.024250000000000327, 0.06300000000000061, 0.12149999999999928, 0.08824999999999861, 0.1039999999999992, 0.08174999999999955, 0.0182500000000001, 0.0022500000000000853, 0.02899999999999814, 0.0804999999999989, 0.12074999999999925, 0.18849999999999945, 0.1739999999999995, 0.08900000000000041, 0.07400000000000162, -0.014999999999998792, 0.059749999999999304], zp_timestamp='2025-11-12T23:53:00')
2025-11-13T01:55:51.112 [DEBUG] [Thread-26561] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:55:51.192 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:55:51.204 [DEBUG] [Thread-26564] [transport.py] [_log()] starting thread (client mode): 0x14947b20
2025-11-13T01:55:51.204 [DEBUG] [Thread-26564] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:55:51.219 [DEBUG] [Thread-26564] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:55:51.219 [INFO] [Thread-26564] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:55:51.227 [DEBUG] [Thread-26564] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:55:51.227 [DEBUG] [Thread-26564] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:55:51.227 [DEBUG] [Thread-26564] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:55:51.227 [DEBUG] [Thread-26564] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:55:51.227 [DEBUG] [Thread-26564] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] client lang: <none>
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] server lang: <none>
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] kex follows: False
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:55:51.228 [DEBUG] [Thread-26564] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:55:51.229 [DEBUG] [Thread-26564] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:55:51.229 [DEBUG] [Thread-26564] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:55:51.229 [DEBUG] [Thread-26564] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:55:51.229 [DEBUG] [Thread-26564] [transport.py] [_log()] Compression: none
2025-11-13T01:55:51.229 [DEBUG] [Thread-26564] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:55:51.288 [DEBUG] [Thread-26564] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:55:51.289 [DEBUG] [Thread-26564] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:55:51.289 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:55:51.290 [DEBUG] [Thread-26564] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:55:51.291 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:55:51.344 [DEBUG] [Thread-26564] [transport.py] [_log()] userauth is OK
2025-11-13T01:55:51.344 [DEBUG] [Thread-26564] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:55:51.344 [DEBUG] [Thread-26564] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:55:51.344 [DEBUG] [Thread-26564] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:55:51.344 [DEBUG] [Thread-26564] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:55:51.363 [INFO] [Thread-26564] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:55:51.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:55:51.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:55:52.206 [DEBUG] [Thread-26564] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:55:52.206 [DEBUG] [Thread-26564] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:55:52.253 [DEBUG] [Thread-26564] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:55:52.254 [DEBUG] [Thread-26564] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:55:52.263 [DEBUG] [Thread-26564] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:55:52.272 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:55:52.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-11-13T01:55:52.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:55:52.294 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:55:52.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:55:52.295 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:55:52.305 [DEBUG] [Thread-26564] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:56:01.947 [DEBUG] [Thread-26566 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:56:11.666 [DEBUG] [Thread-26567 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:56:16.995 [DEBUG] [Thread-26568 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:56:22.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:56:22.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:56: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-11-13T01:56:22.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 56, 16), 10.97, 47.58, 0.0, 13.3, 14.65, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:56:22.974 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:56:16
2025-11-13T01:56:23.096 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:56:23.245 [DEBUG] [Thread-26569] [transport.py] [_log()] starting thread (client mode): 0x19dd9540
2025-11-13T01:56:23.245 [DEBUG] [Thread-26569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:56:23.262 [DEBUG] [Thread-26569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:56:23.262 [INFO] [Thread-26569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] client lang: <none>
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] server lang: <none>
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] kex follows: False
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:56:23.265 [DEBUG] [Thread-26569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:56:23.266 [DEBUG] [Thread-26569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:56:23.266 [DEBUG] [Thread-26569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:56:23.266 [DEBUG] [Thread-26569] [transport.py] [_log()] Compression: none
2025-11-13T01:56:23.266 [DEBUG] [Thread-26569] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:56:23.281 [DEBUG] [Thread-26569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:56:23.282 [DEBUG] [Thread-26569] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:56:23.282 [DEBUG] [Thread-26569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:56:23.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:56:23.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:56:23.283 [DEBUG] [Thread-26569] [transport.py] [_log()] userauth is OK
2025-11-13T01:56:23.283 [DEBUG] [Thread-26569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:56:23.283 [DEBUG] [Thread-26569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:56:23.283 [DEBUG] [Thread-26569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:56:23.283 [DEBUG] [Thread-26569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:56:23.302 [INFO] [Thread-26569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:56:23.302 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:56:23.904 [DEBUG] [Thread-26569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:56:23.904 [DEBUG] [Thread-26569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:56:23.904 [DEBUG] [Thread-26569] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:56:23.945 [DEBUG] [Thread-26569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:56:23.945 [DEBUG] [Thread-26569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:56:23.947 [DEBUG] [Thread-26569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:56:23.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:56:23.960 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:56:23.961 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:56:23.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:56:23.965 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:56:23.966 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:56:23.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.996966 -999.00  +14.90  12.43     51   +5.10 1 1 1 1 1     0    0 10.41 57.27 ZNESW 13.3 12.4 275.8 14.8 15.0 -24.3 14.9 -23.3 14.7 -22.8 15.0 -23.7
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.996966
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:56:23.966 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:56:16', tmtdew=10.97, humidity=47.58, cloud=0.0, wind=13.3, temperature=14.65, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:56:16', seeing=1.05, atlas_timestamp='2025-11-12T23:55:37.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.01425000000000054, 0.05025000000000013, 0.059499999999999886, 0.03950000000000031, 0.05975000000000108, 0.011999999999998678, 0.013750000000001705, 0.02149999999999963, 0.05000000000000071, 0.10524999999999984, 0.05850000000000044, 0.12099999999999866, 0.06625000000000014, 0.026999999999999247, -0.03250000000000064, 0.024250000000000327, 0.06300000000000061, 0.12149999999999928, 0.08824999999999861, 0.1039999999999992, 0.08174999999999955, 0.0182500000000001, 0.0022500000000000853, 0.02899999999999814, 0.0804999999999989, 0.12074999999999925, 0.18849999999999945, 0.1739999999999995, 0.08900000000000041, 0.07400000000000162, -0.014999999999998792, 0.059749999999999304], zp_timestamp='2025-11-12T23:53:00')
2025-11-13T01:56:23.967 [DEBUG] [Thread-26569] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:56:24.041 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:56:24.054 [DEBUG] [Thread-26572] [transport.py] [_log()] starting thread (client mode): 0x173454b0
2025-11-13T01:56:24.054 [DEBUG] [Thread-26572] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:56:24.069 [DEBUG] [Thread-26572] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:56:24.069 [INFO] [Thread-26572] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] client lang: <none>
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] server lang: <none>
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] kex follows: False
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] Compression: none
2025-11-13T01:56:24.077 [DEBUG] [Thread-26572] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:56:24.138 [DEBUG] [Thread-26572] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:56:24.138 [DEBUG] [Thread-26572] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:56:24.138 [DEBUG] [Thread-26572] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:56:24.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:56:24.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:56:24.196 [DEBUG] [Thread-26572] [transport.py] [_log()] userauth is OK
2025-11-13T01:56:24.196 [DEBUG] [Thread-26572] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:56:24.196 [DEBUG] [Thread-26572] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:56:24.196 [DEBUG] [Thread-26572] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:56:24.196 [DEBUG] [Thread-26572] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:56:24.213 [INFO] [Thread-26572] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:56:24.213 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:56:24.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:56:25.021 [DEBUG] [Thread-26572] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:56:25.021 [DEBUG] [Thread-26572] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:56:25.069 [DEBUG] [Thread-26572] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:56:25.069 [DEBUG] [Thread-26572] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:56:25.077 [DEBUG] [Thread-26572] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:56:25.085 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:56:25.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-11-13T01:56:25.094 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:56:25.102 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:56:25.102 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:56:25.102 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:56:25.113 [DEBUG] [Thread-26572] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:56:32.026 [DEBUG] [Thread-26574 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:56:43.894 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:56:43.895 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:56:47.090 [DEBUG] [Thread-26575 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:56:55.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:56:55.132 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:56:55.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-11-13T01:56:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 56, 48), 11.02, 47.55, 0.0, 13.71, 14.55, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:56:55.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:56:48
2025-11-13T01:56:55.883 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:56:56.028 [DEBUG] [Thread-26576] [transport.py] [_log()] starting thread (client mode): 0x14980880
2025-11-13T01:56:56.028 [DEBUG] [Thread-26576] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:56:56.048 [DEBUG] [Thread-26576] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:56:56.049 [INFO] [Thread-26576] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:56:56.051 [DEBUG] [Thread-26576] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] client lang: <none>
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] server lang: <none>
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] kex follows: False
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] Compression: none
2025-11-13T01:56:56.052 [DEBUG] [Thread-26576] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:56:56.070 [DEBUG] [Thread-26576] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:56:56.070 [DEBUG] [Thread-26576] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:56:56.071 [DEBUG] [Thread-26576] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:56:56.071 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:56:56.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:56:56.073 [DEBUG] [Thread-26576] [transport.py] [_log()] userauth is OK
2025-11-13T01:56:56.073 [DEBUG] [Thread-26576] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:56:56.073 [DEBUG] [Thread-26576] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:56:56.073 [DEBUG] [Thread-26576] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:56:56.073 [DEBUG] [Thread-26576] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:56:56.098 [INFO] [Thread-26576] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:56:56.099 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:56:56.760 [DEBUG] [Thread-26576] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:56:56.760 [DEBUG] [Thread-26576] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:56:56.760 [DEBUG] [Thread-26576] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:56:56.800 [DEBUG] [Thread-26576] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:56:56.801 [DEBUG] [Thread-26576] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:56:56.803 [DEBUG] [Thread-26576] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:56:56.814 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:56:56.815 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:56:56.816 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:56:56.818 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:56:56.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:56:56.825 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:56:56.825 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:56:56.825 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.997660 -999.00  +15.00  12.56     51   +4.90 1 1 1 1 1     0    0 10.85 70.32 ZNESW 16.0 12.6 275.0 16.0 15.1 -24.1 15.0 -23.3 14.8 -22.3 15.1 -23.6
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.997660
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:56:56.826 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:56:48', tmtdew=11.02, humidity=47.55, cloud=0.0, wind=13.71, temperature=14.55, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:56:48', seeing=1.25, atlas_timestamp='2025-11-12T23:56:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[0.010749999999999815, 0.01425000000000054, 0.05025000000000013, 0.059499999999999886, 0.03950000000000031, 0.05975000000000108, 0.011999999999998678, 0.013750000000001705, 0.02149999999999963, 0.05000000000000071, 0.10524999999999984, 0.05850000000000044, 0.12099999999999866, 0.06625000000000014, 0.026999999999999247, -0.03250000000000064, 0.024250000000000327, 0.06300000000000061, 0.12149999999999928, 0.08824999999999861, 0.1039999999999992, 0.08174999999999955, 0.0182500000000001, 0.0022500000000000853, 0.02899999999999814, 0.0804999999999989, 0.12074999999999925, 0.18849999999999945, 0.1739999999999995, 0.08900000000000041, 0.07400000000000162, -0.014999999999998792, 0.059749999999999304], zp_timestamp='2025-11-12T23:53:00')
2025-11-13T01:56:56.827 [DEBUG] [Thread-26576] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:56:56.909 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:56:56.921 [DEBUG] [Thread-26579] [transport.py] [_log()] starting thread (client mode): 0x19dd90c0
2025-11-13T01:56:56.921 [DEBUG] [Thread-26579] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:56:56.939 [DEBUG] [Thread-26579] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:56:56.939 [INFO] [Thread-26579] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:56:56.946 [DEBUG] [Thread-26579] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:56:56.946 [DEBUG] [Thread-26579] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:56:56.946 [DEBUG] [Thread-26579] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:56:56.946 [DEBUG] [Thread-26579] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:56:56.946 [DEBUG] [Thread-26579] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:56:56.946 [DEBUG] [Thread-26579] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:56:56.946 [DEBUG] [Thread-26579] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:56:56.947 [DEBUG] [Thread-26579] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] client lang: <none>
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] server lang: <none>
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] kex follows: False
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] Compression: none
2025-11-13T01:56:56.948 [DEBUG] [Thread-26579] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:56:57.002 [DEBUG] [Thread-26579] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:56:57.002 [DEBUG] [Thread-26579] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:56:57.002 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:56:57.002 [DEBUG] [Thread-26579] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:56:57.003 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:56:57.060 [DEBUG] [Thread-26579] [transport.py] [_log()] userauth is OK
2025-11-13T01:56:57.060 [DEBUG] [Thread-26579] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:56:57.060 [DEBUG] [Thread-26579] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:56:57.060 [DEBUG] [Thread-26579] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:56:57.061 [DEBUG] [Thread-26579] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:56:57.080 [INFO] [Thread-26579] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:56: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-11-13T01:56:57.081 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:56:57.896 [DEBUG] [Thread-26579] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:56:57.896 [DEBUG] [Thread-26579] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:56:57.943 [DEBUG] [Thread-26579] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:56:57.944 [DEBUG] [Thread-26579] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:56:57.953 [DEBUG] [Thread-26579] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:56:57.962 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:56:57.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-11-13T01:56:57.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-11-13T01:56:57.981 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:56:57.981 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:56:57.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:56:57.990 [DEBUG] [Thread-26579] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:57:02.121 [DEBUG] [Thread-26581 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:57:08.421 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:57:11.723 [DEBUG] [Thread-26582 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:57:12.615 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:57:17.161 [DEBUG] [Thread-26583 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:57:28.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:57:28.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:57:28.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-11-13T01:57:28.652 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 57, 20), 11.02, 47.55, 0.0, 13.76, 14.54, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:57:28.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:57:20
2025-11-13T01:57:28.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:57:28.918 [DEBUG] [Thread-26584] [transport.py] [_log()] starting thread (client mode): 0x1737e530
2025-11-13T01:57:28.918 [DEBUG] [Thread-26584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:57:28.933 [DEBUG] [Thread-26584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:57:28.933 [INFO] [Thread-26584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] client lang: <none>
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] server lang: <none>
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] kex follows: False
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] Compression: none
2025-11-13T01:57:28.936 [DEBUG] [Thread-26584] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:57:28.954 [DEBUG] [Thread-26584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:57:28.954 [DEBUG] [Thread-26584] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:57:28.955 [DEBUG] [Thread-26584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:57:28.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:57:28.956 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:57:28.957 [DEBUG] [Thread-26584] [transport.py] [_log()] userauth is OK
2025-11-13T01:57:28.957 [DEBUG] [Thread-26584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:57:28.957 [DEBUG] [Thread-26584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:57:28.957 [DEBUG] [Thread-26584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:57:28.957 [DEBUG] [Thread-26584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:57:28.993 [INFO] [Thread-26584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:57:28.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:57:29.613 [DEBUG] [Thread-26584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:57:29.613 [DEBUG] [Thread-26584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:57:29.613 [DEBUG] [Thread-26584] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:57:29.654 [DEBUG] [Thread-26584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:57:29.654 [DEBUG] [Thread-26584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:57:29.657 [DEBUG] [Thread-26584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:57:29.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:57:29.669 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:57:29.671 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:57:29.672 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:57:29.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:57:29.680 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:57:29.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:57:29.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:57:29.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:57:29.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.998008 -999.00  +15.00  12.67     50   +4.90 1 1 1 1 1     0    0 11.26 75.82 ZNESW 12.3 12.7 277.8 16.8 15.1 -24.3 14.9 -23.2 14.8 -22.7 15.1 -23.7
2025-11-13T01:57:29.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:57:29.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:57:29.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.998008
2025-11-13T01:57:29.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:57:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:57:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:57:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:57:29.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:57:29.683 [DEBUG] [Thread-26584] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:57:29.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:57:20', tmtdew=11.02, humidity=47.55, cloud=0.0, wind=13.76, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:57:20', seeing=1.25, atlas_timestamp='2025-11-12T23:57:07.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:55:00')
2025-11-13T01:57:29.778 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:57:29.790 [DEBUG] [Thread-26587] [transport.py] [_log()] starting thread (client mode): 0x19ddbcd0
2025-11-13T01:57:29.790 [DEBUG] [Thread-26587] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:57:29.805 [DEBUG] [Thread-26587] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:57:29.805 [INFO] [Thread-26587] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:57:29.812 [DEBUG] [Thread-26587] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] client lang: <none>
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] server lang: <none>
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] kex follows: False
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] Compression: none
2025-11-13T01:57:29.813 [DEBUG] [Thread-26587] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:57:29.870 [DEBUG] [Thread-26587] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:57:29.870 [DEBUG] [Thread-26587] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:57:29.870 [DEBUG] [Thread-26587] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:57:29.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:57:29.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:57:29.941 [DEBUG] [Thread-26587] [transport.py] [_log()] userauth is OK
2025-11-13T01:57:29.941 [DEBUG] [Thread-26587] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:57:29.941 [DEBUG] [Thread-26587] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:57:29.941 [DEBUG] [Thread-26587] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:57:29.941 [DEBUG] [Thread-26587] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:57:29.969 [INFO] [Thread-26587] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:57:29.970 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:57:29.970 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:57:30.771 [DEBUG] [Thread-26587] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:57:30.771 [DEBUG] [Thread-26587] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:57:30.820 [DEBUG] [Thread-26587] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:57:30.820 [DEBUG] [Thread-26587] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:57:30.829 [DEBUG] [Thread-26587] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:57:30.839 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:57:30.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-11-13T01:57:30.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-11-13T01:57:30.858 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:57:30.858 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:57:30.858 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:57:30.866 [DEBUG] [Thread-26587] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:57:32.196 [DEBUG] [Thread-26589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:57:44.097 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:57:44.098 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:57:47.247 [DEBUG] [Thread-26590 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:58:00.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:58:00.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:58:00.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-11-13T01:58:01.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 57, 52), 11.01, 47.56, 0.0, 14.42, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:58:01.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:57:52
2025-11-13T01:58:01.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:58:01.802 [DEBUG] [Thread-26591] [transport.py] [_log()] starting thread (client mode): 0x1737e620
2025-11-13T01:58:01.802 [DEBUG] [Thread-26591] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:58:01.823 [DEBUG] [Thread-26591] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:58:01.823 [INFO] [Thread-26591] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] client lang: <none>
2025-11-13T01:58:01.826 [DEBUG] [Thread-26591] [transport.py] [_log()] server lang: <none>
2025-11-13T01:58:01.827 [DEBUG] [Thread-26591] [transport.py] [_log()] kex follows: False
2025-11-13T01:58:01.827 [DEBUG] [Thread-26591] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:58:01.827 [DEBUG] [Thread-26591] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:58:01.827 [DEBUG] [Thread-26591] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:58:01.827 [DEBUG] [Thread-26591] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:58:01.827 [DEBUG] [Thread-26591] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:58:01.827 [DEBUG] [Thread-26591] [transport.py] [_log()] Compression: none
2025-11-13T01:58:01.827 [DEBUG] [Thread-26591] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:58:01.847 [DEBUG] [Thread-26591] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:58:01.848 [DEBUG] [Thread-26591] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:58:01.848 [DEBUG] [Thread-26591] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:58:01.848 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:58:01.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:58:01.850 [DEBUG] [Thread-26591] [transport.py] [_log()] userauth is OK
2025-11-13T01:58:01.850 [DEBUG] [Thread-26591] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:58:01.851 [DEBUG] [Thread-26591] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:58:01.851 [DEBUG] [Thread-26591] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:58:01.851 [DEBUG] [Thread-26591] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:58:01.876 [INFO] [Thread-26591] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:58:01.877 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:58:02.288 [DEBUG] [Thread-26593 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:58:02.504 [DEBUG] [Thread-26591] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:58:02.505 [DEBUG] [Thread-26591] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:58:02.505 [DEBUG] [Thread-26591] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:58:02.545 [DEBUG] [Thread-26591] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:58:02.546 [DEBUG] [Thread-26591] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:58:02.549 [DEBUG] [Thread-26591] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:58:02.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:58:02.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:58:02.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:58:02.564 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:58:02.569 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:58:02.571 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:58:02.571 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:58:02.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:58:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:58:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.998355 -999.00  +15.00  12.20     51   +4.90 1 1 1 1 1     0    0 11.14 74.72 ZNESW 11.5 12.2 272.6 14.3 15.1 -24.2 15.0 -23.2 14.8 -22.6 15.1 -23.6
2025-11-13T01:58:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:58:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:58:02.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.998355
2025-11-13T01:58:02.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:58:02.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:58:02.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:58:02.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:58:02.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:58:02.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:57:52', tmtdew=11.01, humidity=47.56, cloud=0.0, wind=14.42, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:57:52', seeing=1.03, atlas_timestamp='2025-11-12T23:57:37.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:55:00')
2025-11-13T01:58:02.574 [DEBUG] [Thread-26591] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:58:02.657 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:58:02.669 [DEBUG] [Thread-26595] [transport.py] [_log()] starting thread (client mode): 0x14988dc0
2025-11-13T01:58:02.669 [DEBUG] [Thread-26595] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:58:02.683 [DEBUG] [Thread-26595] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:58:02.683 [INFO] [Thread-26595] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:58:02.690 [DEBUG] [Thread-26595] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] client lang: <none>
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] server lang: <none>
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] kex follows: False
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] Compression: none
2025-11-13T01:58:02.691 [DEBUG] [Thread-26595] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:58:02.747 [DEBUG] [Thread-26595] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:58:02.747 [DEBUG] [Thread-26595] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:58:02.748 [DEBUG] [Thread-26595] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:58:02.748 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:58:02.749 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:58:02.804 [DEBUG] [Thread-26595] [transport.py] [_log()] userauth is OK
2025-11-13T01:58:02.804 [DEBUG] [Thread-26595] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:58:02.804 [DEBUG] [Thread-26595] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:58:02.804 [DEBUG] [Thread-26595] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:58:02.804 [DEBUG] [Thread-26595] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:58:02.824 [INFO] [Thread-26595] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:58:02.824 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:58:02.826 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:58:03.665 [DEBUG] [Thread-26595] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:58:03.665 [DEBUG] [Thread-26595] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:58:03.712 [DEBUG] [Thread-26595] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:58:03.713 [DEBUG] [Thread-26595] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:58:03.722 [DEBUG] [Thread-26595] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:58:03.732 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:58:03.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-11-13T01:58:03.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-11-13T01:58:03.751 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:58:03.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:58:03.752 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:58:03.760 [DEBUG] [Thread-26595] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:58:11.782 [DEBUG] [Thread-26597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:58:17.325 [DEBUG] [Thread-26598 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:58:32.371 [DEBUG] [Thread-26599 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:58:33.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:58:33.783 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:58:33.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-11-13T01:58:34.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 58, 24), 10.94, 47.83, 0.0, 14.98, 14.5, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:58:34.408 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:58:24
2025-11-13T01:58:34.526 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:58:34.672 [DEBUG] [Thread-26600] [transport.py] [_log()] starting thread (client mode): 0x17347dc0
2025-11-13T01:58:34.672 [DEBUG] [Thread-26600] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:58:34.692 [DEBUG] [Thread-26600] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:58:34.692 [INFO] [Thread-26600] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:58:34.693 [DEBUG] [Thread-26600] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:58:34.693 [DEBUG] [Thread-26600] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] client lang: <none>
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] server lang: <none>
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] kex follows: False
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] Compression: none
2025-11-13T01:58:34.694 [DEBUG] [Thread-26600] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:58:34.711 [DEBUG] [Thread-26600] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:58:34.712 [DEBUG] [Thread-26600] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:58:34.713 [DEBUG] [Thread-26600] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:58:34.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:58:34.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:58:34.715 [DEBUG] [Thread-26600] [transport.py] [_log()] userauth is OK
2025-11-13T01:58:34.715 [DEBUG] [Thread-26600] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:58:34.715 [DEBUG] [Thread-26600] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:58:34.715 [DEBUG] [Thread-26600] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:58:34.715 [DEBUG] [Thread-26600] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:58:34.751 [INFO] [Thread-26600] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:58:34.752 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:58:35.357 [DEBUG] [Thread-26600] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:58:35.357 [DEBUG] [Thread-26600] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:58:35.357 [DEBUG] [Thread-26600] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:58:35.398 [DEBUG] [Thread-26600] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:58:35.398 [DEBUG] [Thread-26600] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:58:35.402 [DEBUG] [Thread-26600] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:58:35.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:58:35.413 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:58:35.415 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:58:35.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:58:35.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:58:35.426 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:58:35.426 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:58:35.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:58:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:58:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.998702 -999.00  +15.00   9.94     51   +4.90 1 1 1 1 1     0    0 11.22 77.19 ZNESW 11.2 9.9 292.0 15.7 15.1 -24.2 14.9 -23.2 14.8 -22.6 15.1 -23.7
2025-11-13T01:58:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:58:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:58:35.427 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.998702
2025-11-13T01:58:35.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:58:35.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:58:35.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:58:35.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:58:35.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:58:35.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:58:24', tmtdew=10.94, humidity=47.83, cloud=0.0, wind=14.98, temperature=14.5, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:58:24', seeing=1.03, atlas_timestamp='2025-11-12T23:58:07.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:55:00')
2025-11-13T01:58:35.429 [DEBUG] [Thread-26600] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:58:35.512 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:58:35.525 [DEBUG] [Thread-26603] [transport.py] [_log()] starting thread (client mode): 0x14982e30
2025-11-13T01:58:35.525 [DEBUG] [Thread-26603] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:58:35.540 [DEBUG] [Thread-26603] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:58:35.540 [INFO] [Thread-26603] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:58:35.548 [DEBUG] [Thread-26603] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:58:35.548 [DEBUG] [Thread-26603] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:58:35.548 [DEBUG] [Thread-26603] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:58:35.548 [DEBUG] [Thread-26603] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] client lang: <none>
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] server lang: <none>
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] kex follows: False
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] Compression: none
2025-11-13T01:58:35.549 [DEBUG] [Thread-26603] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:58:35.607 [DEBUG] [Thread-26603] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:58:35.608 [DEBUG] [Thread-26603] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:58:35.609 [DEBUG] [Thread-26603] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:58:35.609 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:58:35.610 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:58:35.664 [DEBUG] [Thread-26603] [transport.py] [_log()] userauth is OK
2025-11-13T01:58:35.664 [DEBUG] [Thread-26603] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:58:35.664 [DEBUG] [Thread-26603] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:58:35.664 [DEBUG] [Thread-26603] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:58:35.664 [DEBUG] [Thread-26603] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:58:35.683 [INFO] [Thread-26603] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:58:35.683 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:58:35.684 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:58:36.495 [DEBUG] [Thread-26603] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:58:36.496 [DEBUG] [Thread-26603] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:58:36.544 [DEBUG] [Thread-26603] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:58:36.544 [DEBUG] [Thread-26603] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:58:36.553 [DEBUG] [Thread-26603] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:58:36.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:58:36.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-11-13T01:58:36.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-11-13T01:58:36.581 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:58:36.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:58:36.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:58:36.590 [DEBUG] [Thread-26603] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:58:44.301 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:58:44.302 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:58:47.407 [DEBUG] [Thread-26605 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:02.465 [DEBUG] [Thread-26606 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:06.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:59:06.587 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:59: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-11-13T01:59:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 58, 56), 10.93, 47.85, 0.0, 15.1, 14.52, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:59:07.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:58:56
2025-11-13T01:59:07.337 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:59:07.481 [DEBUG] [Thread-26607] [transport.py] [_log()] starting thread (client mode): 0x17344eb0
2025-11-13T01:59:07.481 [DEBUG] [Thread-26607] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:59:07.502 [DEBUG] [Thread-26607] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:59:07.502 [INFO] [Thread-26607] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:59:07.505 [DEBUG] [Thread-26607] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] client lang: <none>
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] server lang: <none>
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] kex follows: False
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] Compression: none
2025-11-13T01:59:07.506 [DEBUG] [Thread-26607] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:59:07.523 [DEBUG] [Thread-26607] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:59:07.524 [DEBUG] [Thread-26607] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:59:07.525 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:59:07.525 [DEBUG] [Thread-26607] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:59:07.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:59:07.527 [DEBUG] [Thread-26607] [transport.py] [_log()] userauth is OK
2025-11-13T01:59:07.528 [DEBUG] [Thread-26607] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:59:07.528 [DEBUG] [Thread-26607] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:59:07.528 [DEBUG] [Thread-26607] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:59:07.528 [DEBUG] [Thread-26607] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:59:07.554 [INFO] [Thread-26607] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:59:07.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:59:08.155 [DEBUG] [Thread-26607] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:59:08.156 [DEBUG] [Thread-26607] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:59:08.156 [DEBUG] [Thread-26607] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:59:08.196 [DEBUG] [Thread-26607] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:59:08.197 [DEBUG] [Thread-26607] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:59:08.199 [DEBUG] [Thread-26607] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:59:08.212 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:59:08.213 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:59:08.215 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:59:08.216 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:59:08.222 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:59:08.224 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:59:08.224 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:59:08.224 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:59:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:59:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.999049 -999.00  +14.90  12.07     51   +5.00 1 1 1 1 1     0    0 11.24 84.02 ZNESW 11.8 12.1 278.6 14.7 15.1 -24.1 15.0 -23.2 14.8 -22.7 15.1 -23.7
2025-11-13T01:59:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:59:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:59:08.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.999049
2025-11-13T01:59:08.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:59:08.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:59:08.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:59:08.226 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:59:08.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:59:08.227 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:58:56', tmtdew=10.93, humidity=47.85, cloud=0.0, wind=15.1, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:58:56', seeing=1.05, atlas_timestamp='2025-11-12T23:58:37.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:55:00')
2025-11-13T01:59:08.227 [DEBUG] [Thread-26607] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:59:08.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:59:08.322 [DEBUG] [Thread-26610] [transport.py] [_log()] starting thread (client mode): 0x1493f010
2025-11-13T01:59:08.323 [DEBUG] [Thread-26610] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:59:08.339 [DEBUG] [Thread-26610] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:59:08.340 [INFO] [Thread-26610] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:59:08.347 [DEBUG] [Thread-26610] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] client lang: <none>
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] server lang: <none>
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] kex follows: False
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:59:08.348 [DEBUG] [Thread-26610] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:59:08.349 [DEBUG] [Thread-26610] [transport.py] [_log()] Compression: none
2025-11-13T01:59:08.349 [DEBUG] [Thread-26610] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:59:08.407 [DEBUG] [Thread-26610] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:59:08.408 [DEBUG] [Thread-26610] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:59:08.409 [DEBUG] [Thread-26610] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:59:08.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:59:08.410 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:59:08.464 [DEBUG] [Thread-26610] [transport.py] [_log()] userauth is OK
2025-11-13T01:59:08.464 [DEBUG] [Thread-26610] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:59:08.464 [DEBUG] [Thread-26610] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:59:08.464 [DEBUG] [Thread-26610] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:59:08.464 [DEBUG] [Thread-26610] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:59:08.483 [INFO] [Thread-26610] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:59:08.484 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:59:08.484 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:59:09.347 [DEBUG] [Thread-26610] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:59:09.347 [DEBUG] [Thread-26610] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:59:09.396 [DEBUG] [Thread-26610] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:59:09.396 [DEBUG] [Thread-26610] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:59:09.405 [DEBUG] [Thread-26610] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:59:09.414 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:59:09.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:59:09.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T01:59:09.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:59:09.433 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:59:09.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:59:09.442 [DEBUG] [Thread-26610] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:59:11.839 [DEBUG] [Thread-26612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:17.504 [DEBUG] [Thread-26613 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:32.564 [DEBUG] [Thread-26614 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:36.313 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:39.464 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T01:59:39.464 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T01:59:39.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-11-13T01:59:40.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 59, 28), 10.89, 47.96, 0.0, 15.99, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T01:59:40.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:59:28
2025-11-13T01:59:40.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T01:59:40.367 [DEBUG] [Thread-26615] [transport.py] [_log()] starting thread (client mode): 0x19ddac20
2025-11-13T01:59:40.367 [DEBUG] [Thread-26615] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:59:40.383 [DEBUG] [Thread-26615] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T01:59:40.383 [INFO] [Thread-26615] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] client lang: <none>
2025-11-13T01:59:40.386 [DEBUG] [Thread-26615] [transport.py] [_log()] server lang: <none>
2025-11-13T01:59:40.387 [DEBUG] [Thread-26615] [transport.py] [_log()] kex follows: False
2025-11-13T01:59:40.387 [DEBUG] [Thread-26615] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:59:40.387 [DEBUG] [Thread-26615] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:59:40.387 [DEBUG] [Thread-26615] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:59:40.387 [DEBUG] [Thread-26615] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:59:40.387 [DEBUG] [Thread-26615] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:59:40.387 [DEBUG] [Thread-26615] [transport.py] [_log()] Compression: none
2025-11-13T01:59:40.387 [DEBUG] [Thread-26615] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:59:40.402 [DEBUG] [Thread-26615] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:59:40.402 [DEBUG] [Thread-26615] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:59:40.402 [DEBUG] [Thread-26615] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T01:59:40.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T01:59:40.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:59:40.403 [DEBUG] [Thread-26615] [transport.py] [_log()] userauth is OK
2025-11-13T01:59:40.403 [DEBUG] [Thread-26615] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:59:40.403 [DEBUG] [Thread-26615] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:59:40.403 [DEBUG] [Thread-26615] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T01:59:40.403 [DEBUG] [Thread-26615] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:59:40.418 [INFO] [Thread-26615] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:59:40.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:59:41.057 [DEBUG] [Thread-26615] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:59:41.057 [DEBUG] [Thread-26615] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:59:41.057 [DEBUG] [Thread-26615] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T01:59:41.097 [DEBUG] [Thread-26615] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:59:41.098 [DEBUG] [Thread-26615] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:59:41.101 [DEBUG] [Thread-26615] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:59:41.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:59:41.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T01:59:41.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T01:59:41.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T01:59:41.130 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:59:41.132 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T01:59:41.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:59:41.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:59:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T01:59:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.999397 -999.00  +14.90  11.52     51   +5.00 1 1 1 1 1     0    0 11.41 84.57 ZNESW 11.8 11.5 278.8 14.7 15.1 -24.1 15.0 -23.2 14.8 -22.7 15.1 -23.6
2025-11-13T01:59:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T01:59:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T01:59:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.999397
2025-11-13T01:59:41.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T01:59:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T01:59:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T01:59:41.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T01:59:41.134 [DEBUG] [Thread-26615] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:59:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T01:59:41.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:59:28', tmtdew=10.89, humidity=47.96, cloud=0.0, wind=15.99, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T01:59:28', seeing=1.09, atlas_timestamp='2025-11-12T23:59:07.901', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:55:00')
2025-11-13T01:59:41.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T01:59:41.237 [DEBUG] [Thread-26618] [transport.py] [_log()] starting thread (client mode): 0x17347640
2025-11-13T01:59:41.237 [DEBUG] [Thread-26618] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T01:59:41.252 [DEBUG] [Thread-26618] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T01:59:41.252 [INFO] [Thread-26618] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T01:59:41.259 [DEBUG] [Thread-26618] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T01:59:41.259 [DEBUG] [Thread-26618] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T01:59:41.259 [DEBUG] [Thread-26618] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] client lang: <none>
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] server lang: <none>
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] kex follows: False
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] Compression: none
2025-11-13T01:59:41.260 [DEBUG] [Thread-26618] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T01:59:41.322 [DEBUG] [Thread-26618] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T01:59:41.323 [DEBUG] [Thread-26618] [transport.py] [_log()] Switch to new keys ...
2025-11-13T01:59:41.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T01:59:41.324 [DEBUG] [Thread-26618] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T01:59:41.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T01:59:41.379 [DEBUG] [Thread-26618] [transport.py] [_log()] userauth is OK
2025-11-13T01:59:41.379 [DEBUG] [Thread-26618] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T01:59:41.380 [DEBUG] [Thread-26618] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T01:59:41.380 [DEBUG] [Thread-26618] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T01:59:41.380 [DEBUG] [Thread-26618] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T01:59:41.398 [INFO] [Thread-26618] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T01:59:41.398 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T01:59:41.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T01:59:42.242 [DEBUG] [Thread-26618] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T01:59:42.242 [DEBUG] [Thread-26618] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T01:59:42.289 [DEBUG] [Thread-26618] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T01:59:42.290 [DEBUG] [Thread-26618] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T01:59:42.299 [DEBUG] [Thread-26618] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T01:59:42.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T01:59:42.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T01:59:42.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-11-13T01:59:42.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T01:59:42.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T01:59:42.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T01:59:42.335 [DEBUG] [Thread-26618] [transport.py] [_log()] EOF in transport thread
2025-11-13T01:59:44.505 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:44.506 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:46.410 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:47.598 [DEBUG] [Thread-26620 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T01:59:50.557 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:00:02.657 [DEBUG] [Thread-26621 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:00:11.896 [DEBUG] [Thread-26622 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:00:12.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:00:12.358 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:00:12.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-11-13T02:00:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 1, 59, 28), 10.94, 47.96, 0.0, 15.99, 14.54, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:00:13.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 01:59:28
2025-11-13T02:00:13.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:00:13.265 [DEBUG] [Thread-26623] [transport.py] [_log()] starting thread (client mode): 0x14981c90
2025-11-13T02:00:13.265 [DEBUG] [Thread-26623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:00:13.285 [DEBUG] [Thread-26623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:00:13.285 [INFO] [Thread-26623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:00:13.288 [DEBUG] [Thread-26623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] client lang: <none>
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] server lang: <none>
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] kex follows: False
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] Compression: none
2025-11-13T02:00:13.289 [DEBUG] [Thread-26623] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:00:13.304 [DEBUG] [Thread-26623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:00:13.304 [DEBUG] [Thread-26623] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:00:13.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:00:13.304 [DEBUG] [Thread-26623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:00:13.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:00:13.305 [DEBUG] [Thread-26623] [transport.py] [_log()] userauth is OK
2025-11-13T02:00:13.305 [DEBUG] [Thread-26623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:00:13.305 [DEBUG] [Thread-26623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:00:13.305 [DEBUG] [Thread-26623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:00:13.305 [DEBUG] [Thread-26623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:00:13.316 [INFO] [Thread-26623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:00:13.316 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:00:14.392 [DEBUG] [Thread-26623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:00:14.392 [DEBUG] [Thread-26623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:00:14.392 [DEBUG] [Thread-26623] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:00:14.433 [DEBUG] [Thread-26623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:00:14.433 [DEBUG] [Thread-26623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:00:14.435 [DEBUG] [Thread-26623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:00:14.507 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:00:14.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:00:14.508 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:00:14.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:00:14.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:00:14.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:00:14.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:00:14.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:00:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:00:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60991.999397 -999.00  +14.90  11.52     51   +5.00 1 1 1 1 1     0    0 11.41 84.57 ZNESW 11.8 11.5 278.8 14.7 15.1 -24.1 15.0 -23.2 14.8 -22.7 15.1 -23.6
2025-11-13T02:00:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:00:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:00:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60991.999397
2025-11-13T02:00:14.555 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:00:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:00:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:00:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:00:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:00:14.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T01:59:28', tmtdew=10.94, humidity=47.96, cloud=0.0, wind=15.99, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:00:00', seeing=1.09, atlas_timestamp='2025-11-12T23:59:07.901', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:59:00')
2025-11-13T02:00:14.557 [DEBUG] [Thread-26623] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:00:14.631 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:00:14.643 [DEBUG] [Thread-26626] [transport.py] [_log()] starting thread (client mode): 0x14980c10
2025-11-13T02:00:14.643 [DEBUG] [Thread-26626] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:00:14.658 [DEBUG] [Thread-26626] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:00:14.658 [INFO] [Thread-26626] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] client lang: <none>
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] server lang: <none>
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] kex follows: False
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] Compression: none
2025-11-13T02:00:14.666 [DEBUG] [Thread-26626] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:00:14.721 [DEBUG] [Thread-26626] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:00:14.722 [DEBUG] [Thread-26626] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:00:14.722 [DEBUG] [Thread-26626] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:00:14.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:00:14.722 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:00:14.779 [DEBUG] [Thread-26626] [transport.py] [_log()] userauth is OK
2025-11-13T02:00:14.779 [DEBUG] [Thread-26626] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:00:14.779 [DEBUG] [Thread-26626] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:00:14.779 [DEBUG] [Thread-26626] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:00:14.779 [DEBUG] [Thread-26626] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:00:14.793 [INFO] [Thread-26626] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:00:14.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:00:14.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:00:15.610 [DEBUG] [Thread-26626] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:00:15.610 [DEBUG] [Thread-26626] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:00:15.658 [DEBUG] [Thread-26626] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:00:15.658 [DEBUG] [Thread-26626] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:00:15.666 [DEBUG] [Thread-26626] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:00:15.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:00:15.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-11-13T02:00:15.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-11-13T02:00:15.690 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:00:15.690 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:00:15.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:00:15.698 [DEBUG] [Thread-26626] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:00:17.685 [DEBUG] [Thread-26628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:00:32.724 [DEBUG] [Thread-26629 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:00:44.710 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:00:44.712 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:00:45.718 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:00:45.718 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:00:45.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-11-13T02:00:46.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 0, 32), 10.99, 47.81, 0.0, 15.46, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:00:46.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:00:32
2025-11-13T02:00:46.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:00:46.612 [DEBUG] [Thread-26630] [transport.py] [_log()] starting thread (client mode): 0x11f00220
2025-11-13T02:00:46.612 [DEBUG] [Thread-26630] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:00:46.633 [DEBUG] [Thread-26630] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:00:46.633 [INFO] [Thread-26630] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:00:46.636 [DEBUG] [Thread-26630] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] client lang: <none>
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] server lang: <none>
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] kex follows: False
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] Compression: none
2025-11-13T02:00:46.637 [DEBUG] [Thread-26630] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:00:46.655 [DEBUG] [Thread-26630] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:00:46.655 [DEBUG] [Thread-26630] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:00:46.656 [DEBUG] [Thread-26630] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:00:46.656 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:00:46.657 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:00:46.658 [DEBUG] [Thread-26630] [transport.py] [_log()] userauth is OK
2025-11-13T02:00:46.658 [DEBUG] [Thread-26630] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:00:46.658 [DEBUG] [Thread-26630] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:00:46.658 [DEBUG] [Thread-26630] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:00:46.658 [DEBUG] [Thread-26630] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:00:46.680 [INFO] [Thread-26630] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:00:46.681 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:00:47.303 [DEBUG] [Thread-26630] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:00:47.304 [DEBUG] [Thread-26630] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:00:47.304 [DEBUG] [Thread-26630] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:00:47.344 [DEBUG] [Thread-26630] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:00:47.344 [DEBUG] [Thread-26630] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:00:47.348 [DEBUG] [Thread-26630] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:00:47.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:00:47.362 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:00:47.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:00:47.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:00:47.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:00:47.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:00:47.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:00:47.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:00:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:00:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.000091 -999.00  +14.90  10.45     51   +5.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.4 10.4 288.6 15.3 15.1 -24.3 15.0 -23.4 14.8 -22.8 15.1 -23.8
2025-11-13T02:00:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:00:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:00:47.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.000091
2025-11-13T02:00:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:00:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:00:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:00:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:00:47.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:00:47.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:00:32', tmtdew=10.99, humidity=47.81, cloud=0.0, wind=15.46, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:00:32', seeing=1.12, atlas_timestamp='2025-11-13T00:00:07.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:59:00')
2025-11-13T02:00:47.379 [DEBUG] [Thread-26630] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:00:47.473 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:00:47.485 [DEBUG] [Thread-26633] [transport.py] [_log()] starting thread (client mode): 0x1496ad10
2025-11-13T02:00:47.486 [DEBUG] [Thread-26633] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:00:47.500 [DEBUG] [Thread-26633] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:00:47.500 [INFO] [Thread-26633] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:00:47.507 [DEBUG] [Thread-26633] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:00:47.507 [DEBUG] [Thread-26633] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] client lang: <none>
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] server lang: <none>
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] kex follows: False
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] Compression: none
2025-11-13T02:00:47.508 [DEBUG] [Thread-26633] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:00:47.568 [DEBUG] [Thread-26633] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:00:47.569 [DEBUG] [Thread-26633] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:00:47.569 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:00:47.570 [DEBUG] [Thread-26633] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:00:47.571 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:00:47.628 [DEBUG] [Thread-26633] [transport.py] [_log()] userauth is OK
2025-11-13T02:00:47.628 [DEBUG] [Thread-26633] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:00:47.628 [DEBUG] [Thread-26633] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:00:47.628 [DEBUG] [Thread-26633] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:00:47.628 [DEBUG] [Thread-26633] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:00:47.646 [INFO] [Thread-26633] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:00:47.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:00:47.656 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:00:47.760 [DEBUG] [Thread-26635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:00:48.507 [DEBUG] [Thread-26633] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:00:48.508 [DEBUG] [Thread-26633] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:00:48.556 [DEBUG] [Thread-26633] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:00:48.556 [DEBUG] [Thread-26633] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:00:48.565 [DEBUG] [Thread-26633] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:00:48.575 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:00:48.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-11-13T02:00:48.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-11-13T02:00:48.594 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:00:48.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:00:48.595 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:00:48.604 [DEBUG] [Thread-26633] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:01:02.815 [DEBUG] [Thread-26636 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:11.952 [DEBUG] [Thread-26637 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:13.288 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:17.851 [DEBUG] [Thread-26638 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:18.600 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:01:18.600 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:01:18.603 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:01:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 1, 4), 11.03, 47.68, 0.0, 15.32, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:01:19.228 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:01:04
2025-11-13T02:01:19.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:01:19.496 [DEBUG] [Thread-26639] [transport.py] [_log()] starting thread (client mode): 0x149814e0
2025-11-13T02:01:19.496 [DEBUG] [Thread-26639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:01:19.516 [DEBUG] [Thread-26639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:01:19.516 [INFO] [Thread-26639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:01:19.517 [DEBUG] [Thread-26639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:01:19.517 [DEBUG] [Thread-26639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:01:19.517 [DEBUG] [Thread-26639] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:01:19.517 [DEBUG] [Thread-26639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:01:19.517 [DEBUG] [Thread-26639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] client lang: <none>
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] server lang: <none>
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] kex follows: False
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] Compression: none
2025-11-13T02:01:19.518 [DEBUG] [Thread-26639] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:01:19.531 [DEBUG] [Thread-26639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:01:19.532 [DEBUG] [Thread-26639] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:01:19.532 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:01:19.533 [DEBUG] [Thread-26639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:01:19.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:01:19.534 [DEBUG] [Thread-26639] [transport.py] [_log()] userauth is OK
2025-11-13T02:01:19.535 [DEBUG] [Thread-26639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:01:19.535 [DEBUG] [Thread-26639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:01:19.535 [DEBUG] [Thread-26639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:01:19.535 [DEBUG] [Thread-26639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:01:19.554 [INFO] [Thread-26639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:01:19.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:01:20.332 [DEBUG] [Thread-26639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:01:20.332 [DEBUG] [Thread-26639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:01:20.333 [DEBUG] [Thread-26639] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:01:20.374 [DEBUG] [Thread-26639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:01:20.374 [DEBUG] [Thread-26639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:01:20.377 [DEBUG] [Thread-26639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:01:20.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:01:20.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:01:20.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:01:20.392 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:01:20.397 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:01:20.399 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:01:20.399 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:01:20.399 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:01:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:01:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.000438 -999.00  +14.80  11.87     52   +5.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.5 11.9 284.4 16.3 15.1 -24.2 15.0 -23.3 14.8 -23.0 15.0 -23.8
2025-11-13T02:01:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:01:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:01:20.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.000438
2025-11-13T02:01:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:01:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:01:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:01:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:01:20.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:01:20.401 [DEBUG] [Thread-26639] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:01:20.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:01:04', tmtdew=11.03, humidity=47.68, cloud=0.0, wind=15.32, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:01:04', seeing=1.12, atlas_timestamp='2025-11-13T00:00:37.843', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:59:00')
2025-11-13T02:01:20.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:01:20.503 [DEBUG] [Thread-26642] [transport.py] [_log()] starting thread (client mode): 0x14988d90
2025-11-13T02:01:20.503 [DEBUG] [Thread-26642] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:01:20.518 [DEBUG] [Thread-26642] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:01:20.518 [INFO] [Thread-26642] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:01:20.525 [DEBUG] [Thread-26642] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:01:20.526 [DEBUG] [Thread-26642] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:01:20.526 [DEBUG] [Thread-26642] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:01:20.526 [DEBUG] [Thread-26642] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:01:20.526 [DEBUG] [Thread-26642] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:01:20.526 [DEBUG] [Thread-26642] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:01:20.526 [DEBUG] [Thread-26642] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:01:20.526 [DEBUG] [Thread-26642] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:01:20.526 [DEBUG] [Thread-26642] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] client lang: <none>
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] server lang: <none>
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] kex follows: False
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] Compression: none
2025-11-13T02:01:20.527 [DEBUG] [Thread-26642] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:01:20.583 [DEBUG] [Thread-26642] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:01:20.583 [DEBUG] [Thread-26642] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:01:20.584 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:01:20.584 [DEBUG] [Thread-26642] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:01:20.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:01:20.640 [DEBUG] [Thread-26642] [transport.py] [_log()] userauth is OK
2025-11-13T02:01:20.640 [DEBUG] [Thread-26642] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:01:20.640 [DEBUG] [Thread-26642] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:01:20.640 [DEBUG] [Thread-26642] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:01:20.640 [DEBUG] [Thread-26642] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:01:20.660 [INFO] [Thread-26642] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:01:20.661 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:01:20.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:01:21.484 [DEBUG] [Thread-26642] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:01:21.484 [DEBUG] [Thread-26642] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:01:21.533 [DEBUG] [Thread-26642] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:01:21.533 [DEBUG] [Thread-26642] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:01:21.542 [DEBUG] [Thread-26642] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:01:21.551 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:01:21.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-11-13T02:01:21.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-11-13T02:01:21.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:01:21.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:01:21.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:01:21.579 [DEBUG] [Thread-26642] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:01:23.069 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:27.239 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:32.887 [DEBUG] [Thread-26644 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:44.914 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:44.915 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:47.927 [DEBUG] [Thread-26645 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:01:51.601 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:01:51.602 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:01:51.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-11-13T02:01:52.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 1, 36), 10.93, 47.68, 0.0, 14.96, 14.51, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:01:52.240 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:01:36
2025-11-13T02:01:52.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:01:52.510 [DEBUG] [Thread-26646] [transport.py] [_log()] starting thread (client mode): 0x1493d930
2025-11-13T02:01:52.510 [DEBUG] [Thread-26646] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:01:52.530 [DEBUG] [Thread-26646] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:01:52.530 [INFO] [Thread-26646] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:01:52.543 [DEBUG] [Thread-26646] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:01:52.543 [DEBUG] [Thread-26646] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:01:52.543 [DEBUG] [Thread-26646] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:01:52.543 [DEBUG] [Thread-26646] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:01:52.543 [DEBUG] [Thread-26646] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:01:52.543 [DEBUG] [Thread-26646] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:01:52.543 [DEBUG] [Thread-26646] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:01:52.543 [DEBUG] [Thread-26646] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] client lang: <none>
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] server lang: <none>
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] kex follows: False
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] Compression: none
2025-11-13T02:01:52.544 [DEBUG] [Thread-26646] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:01:52.564 [DEBUG] [Thread-26646] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:01:52.564 [DEBUG] [Thread-26646] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:01:52.565 [DEBUG] [Thread-26646] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:01:52.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:01:52.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:01:52.567 [DEBUG] [Thread-26646] [transport.py] [_log()] userauth is OK
2025-11-13T02:01:52.567 [DEBUG] [Thread-26646] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:01:52.567 [DEBUG] [Thread-26646] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:01:52.567 [DEBUG] [Thread-26646] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:01:52.567 [DEBUG] [Thread-26646] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:01:52.592 [INFO] [Thread-26646] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:01:52.595 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:01:53.207 [DEBUG] [Thread-26646] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:01:53.208 [DEBUG] [Thread-26646] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:01:53.208 [DEBUG] [Thread-26646] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:01:53.248 [DEBUG] [Thread-26646] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:01:53.249 [DEBUG] [Thread-26646] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:01:53.252 [DEBUG] [Thread-26646] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:01:53.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:01:53.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:01:53.268 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:01:53.269 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:01:53.275 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:01:53.277 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:01:53.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:01:53.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:01:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:01:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.000785 -999.00  +14.80  11.88     52   +5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.2 11.9 279.6 13.7 15.1 -24.1 14.9 -23.3 14.7 -22.8 15.0 -23.9
2025-11-13T02:01:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:01:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:01:53.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.000785
2025-11-13T02:01:53.279 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:01:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:01:53.280 [DEBUG] [Thread-26646] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:01:53.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:01:53.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:01:53.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:01:53.281 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:01:36', tmtdew=10.93, humidity=47.68, cloud=0.0, wind=14.96, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:01:36', seeing=1.07, atlas_timestamp='2025-11-13T00:01:07.824', atlas_cloud=1, atlas_rain=1, zp_data=[0.01624999999999943, 0.012249999999999872, 0.0547500000000003, 0.012000000000000455, 0.06600000000000072, 0.11025000000000063, 0.026999999999999247, -0.01425000000000054, 0.02949999999999875, 0.05900000000000105, 0.12124999999999986, 0.054499999999999105, 0.13049999999999962, 0.04774999999999885, 0.0, 0.0024999999999995026, 0.024250000000000327, 0.06049999999999933, 0.1014999999999997, 0.0962499999999995, 0.05699999999999861, 0.027749999999999275, 0.012250000000001648, 0.00575000000000081, 0.030999999999998806, 0.1255000000000006, 0.09675000000000011, 0.20500000000000007, 0.1379999999999999, 0.08950000000000102, 0.09700000000000131, 0.0010000000000012221, 0.00274999999999892], zp_timestamp='2025-11-12T23:59:00')
2025-11-13T02:01:53.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:02:02.964 [DEBUG] [Thread-26649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:02:12.004 [DEBUG] [Thread-26650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:02:18.024 [DEBUG] [Thread-26651 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:02:33.059 [DEBUG] [Thread-26652 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:02:45.118 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:02:45.120 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:02:48.096 [DEBUG] [Thread-26653 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:02:49.734 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:02:59.628 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:03:03.127 [DEBUG] [Thread-26654 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:03:03.838 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:03:12.063 [DEBUG] [Thread-26655 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:03:18.162 [DEBUG] [Thread-26656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:03:33.197 [DEBUG] [Thread-26657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:03:45.334 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:03:45.335 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:03:48.234 [DEBUG] [Thread-26658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:03.271 [DEBUG] [Thread-26659 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:07.483 [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-11-13T02:04:12.132 [DEBUG] [Thread-26660 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:18.307 [DEBUG] [Thread-26661 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:26.522 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:33.340 [DEBUG] [Thread-26662 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:37.512 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:04:37.513 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:04:37.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-11-13T02:04:38.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 4, 16), 10.88, 48.16, 0.0, 14.12, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:04:38.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:04:16
2025-11-13T02:04:38.303 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:04:38.455 [DEBUG] [Thread-26663] [transport.py] [_log()] starting thread (client mode): 0x11f03eb0
2025-11-13T02:04:38.455 [DEBUG] [Thread-26663] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:04:38.474 [DEBUG] [Thread-26663] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:04:38.474 [INFO] [Thread-26663] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] client lang: <none>
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] server lang: <none>
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] kex follows: False
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] Compression: none
2025-11-13T02:04:38.476 [DEBUG] [Thread-26663] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:04:38.495 [DEBUG] [Thread-26663] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:04:38.495 [DEBUG] [Thread-26663] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:04:38.496 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:04:38.496 [DEBUG] [Thread-26663] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:04:38.497 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:04:38.498 [DEBUG] [Thread-26663] [transport.py] [_log()] userauth is OK
2025-11-13T02:04:38.498 [DEBUG] [Thread-26663] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:04:38.498 [DEBUG] [Thread-26663] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:04:38.498 [DEBUG] [Thread-26663] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:04:38.498 [DEBUG] [Thread-26663] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:04:38.521 [INFO] [Thread-26663] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:04:38.522 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:04:39.319 [DEBUG] [Thread-26663] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:04:39.319 [DEBUG] [Thread-26663] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:04:39.319 [DEBUG] [Thread-26663] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:04:39.360 [DEBUG] [Thread-26663] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:04:39.360 [DEBUG] [Thread-26663] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:04:39.363 [DEBUG] [Thread-26663] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:04:39.374 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:04:39.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:04:39.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:04:39.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:04:39.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:04:39.382 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:04:39.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:04:39.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:04:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:04:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.002869 -999.00  +14.80  10.81     52   +5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.9 10.8 273.6 13.5 15.1 -24.6 14.9 -23.7 14.7 -23.0 15.0 -24.0
2025-11-13T02:04:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:04:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:04:39.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.002869
2025-11-13T02:04:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:04:39.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:04:39.385 [DEBUG] [Thread-26663] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:04:39.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:04:39.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:04:39.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:04:39.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:04:16', tmtdew=10.88, humidity=48.16, cloud=0.0, wind=14.12, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:04:16', seeing=1.01, atlas_timestamp='2025-11-13T00:04:07.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.006249999999999645, -0.005250000000000199, 0.0652500000000007, 0.03950000000000031, 0.08249999999999957, 0.07675000000000054, -0.011000000000001009, -0.031749999999998835, 0.026999999999999247, 0.0389999999999997, 0.08225000000000016, 0.06049999999999933, 0.08650000000000091, 0.049249999999998906, -0.006000000000000227, -0.0005000000000006111, 0.01624999999999943, 0.05349999999999966, 0.11899999999999977, 0.04374999999999929, 0.06099999999999817, 0.04574999999999818, -0.01774999999999949, -0.0072499999999990905, 0.009499999999999176, 0.07150000000000034, 0.05525000000000091, 0.21250000000000036, 0.13899999999999935, 0.011000000000001009, 0.06150000000000233, 0.006000000000000227, 0.008749999999999147], zp_timestamp='2025-11-13T00:01:00')
2025-11-13T02:04:39.470 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:04:39.482 [DEBUG] [Thread-26666] [transport.py] [_log()] starting thread (client mode): 0x11f00ac0
2025-11-13T02:04:39.482 [DEBUG] [Thread-26666] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:04:39.497 [DEBUG] [Thread-26666] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:04:39.497 [INFO] [Thread-26666] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] client lang: <none>
2025-11-13T02:04:39.504 [DEBUG] [Thread-26666] [transport.py] [_log()] server lang: <none>
2025-11-13T02:04:39.505 [DEBUG] [Thread-26666] [transport.py] [_log()] kex follows: False
2025-11-13T02:04:39.505 [DEBUG] [Thread-26666] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:04:39.505 [DEBUG] [Thread-26666] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:04:39.505 [DEBUG] [Thread-26666] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:04:39.505 [DEBUG] [Thread-26666] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:04:39.505 [DEBUG] [Thread-26666] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:04:39.505 [DEBUG] [Thread-26666] [transport.py] [_log()] Compression: none
2025-11-13T02:04:39.505 [DEBUG] [Thread-26666] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:04:39.561 [DEBUG] [Thread-26666] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:04:39.562 [DEBUG] [Thread-26666] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:04:39.562 [DEBUG] [Thread-26666] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:04:39.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:04:39.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:04:39.620 [DEBUG] [Thread-26666] [transport.py] [_log()] userauth is OK
2025-11-13T02:04:39.620 [DEBUG] [Thread-26666] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:04:39.620 [DEBUG] [Thread-26666] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:04:39.620 [DEBUG] [Thread-26666] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:04:39.620 [DEBUG] [Thread-26666] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:04:39.639 [INFO] [Thread-26666] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:04:39.639 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:04:39.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:04:40.472 [DEBUG] [Thread-26666] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:04:40.472 [DEBUG] [Thread-26666] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:04:40.521 [DEBUG] [Thread-26666] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:04:40.521 [DEBUG] [Thread-26666] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:04:40.530 [DEBUG] [Thread-26666] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:04:40.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:04:40.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-11-13T02:04: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-11-13T02:04:40.556 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:04:40.556 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:04:40.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:04:40.564 [DEBUG] [Thread-26666] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:04:45.536 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:45.537 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:48.371 [DEBUG] [Thread-26668 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:53.865 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:04:57.964 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:05:03.424 [DEBUG] [Thread-26669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:05:10.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:05:10.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:05:10.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-11-13T02:05:11.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 4, 48), 10.74, 48.15, 0.0, 16.07, 14.41, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:05:11.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:04:48
2025-11-13T02:05:11.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:05:11.498 [DEBUG] [Thread-26670] [transport.py] [_log()] starting thread (client mode): 0x11f01120
2025-11-13T02:05:11.499 [DEBUG] [Thread-26670] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:05:11.519 [DEBUG] [Thread-26670] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:05:11.519 [INFO] [Thread-26670] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:05:11.522 [DEBUG] [Thread-26670] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:05:11.522 [DEBUG] [Thread-26670] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:05:11.522 [DEBUG] [Thread-26670] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] client lang: <none>
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] server lang: <none>
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] kex follows: False
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] Compression: none
2025-11-13T02:05:11.523 [DEBUG] [Thread-26670] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:05:11.541 [DEBUG] [Thread-26670] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:05:11.542 [DEBUG] [Thread-26670] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:05:11.543 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:05:11.543 [DEBUG] [Thread-26670] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:05:11.544 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:05:11.545 [DEBUG] [Thread-26670] [transport.py] [_log()] userauth is OK
2025-11-13T02:05:11.545 [DEBUG] [Thread-26670] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:05:11.545 [DEBUG] [Thread-26670] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:05:11.546 [DEBUG] [Thread-26670] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:05:11.546 [DEBUG] [Thread-26670] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:05:11.570 [INFO] [Thread-26670] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:05:11.571 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:05:12.210 [DEBUG] [Thread-26672 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:05:12.463 [DEBUG] [Thread-26670] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:05:12.463 [DEBUG] [Thread-26670] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:05:12.464 [DEBUG] [Thread-26670] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:05:12.504 [DEBUG] [Thread-26670] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:05:12.504 [DEBUG] [Thread-26670] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:05:12.507 [DEBUG] [Thread-26670] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:05:12.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:05:12.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:05:12.522 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:05:12.525 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:05:12.531 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:05:12.534 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:05:12.534 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:05:12.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:05:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:05:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.003216 -999.00  +14.80   8.42     52   +5.20 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.1 8.4 276.0 11.8 15.1 -24.6 15.0 -23.7 14.7 -23.1 14.9 -24.0
2025-11-13T02:05:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:05:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:05:12.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.003216
2025-11-13T02:05:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:05:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:05:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:05:12.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:05:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:05:12.537 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:04:48', tmtdew=10.74, humidity=48.15, cloud=0.0, wind=16.07, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:04:48', seeing=0.88, atlas_timestamp='2025-11-13T00:04:37.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.006249999999999645, -0.005250000000000199, 0.0652500000000007, 0.03950000000000031, 0.08249999999999957, 0.07675000000000054, -0.011000000000001009, -0.031749999999998835, 0.026999999999999247, 0.0389999999999997, 0.08225000000000016, 0.06049999999999933, 0.08650000000000091, 0.049249999999998906, -0.006000000000000227, -0.0005000000000006111, 0.01624999999999943, 0.05349999999999966, 0.11899999999999977, 0.04374999999999929, 0.06099999999999817, 0.04574999999999818, -0.01774999999999949, -0.0072499999999990905, 0.009499999999999176, 0.07150000000000034, 0.05525000000000091, 0.21250000000000036, 0.13899999999999935, 0.011000000000001009, 0.06150000000000233, 0.006000000000000227, 0.008749999999999147], zp_timestamp='2025-11-13T00:01:00')
2025-11-13T02:05:12.538 [DEBUG] [Thread-26670] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:05:12.620 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:05:18.463 [DEBUG] [Thread-26674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:05:33.513 [DEBUG] [Thread-26675 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:05:45.740 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:05:45.741 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:05:48.552 [DEBUG] [Thread-26676 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:06:03.586 [DEBUG] [Thread-26677 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:06:12.267 [DEBUG] [Thread-26678 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:06:18.617 [DEBUG] [Thread-26679 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:06:20.723 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:06:33.657 [DEBUG] [Thread-26680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:06:45.945 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:06:45.945 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:06:48.695 [DEBUG] [Thread-26681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:07:03.734 [DEBUG] [Thread-26682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:07:12.344 [DEBUG] [Thread-26683 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:07:18.773 [DEBUG] [Thread-26684 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:07:24.090 [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-11-13T02:07:33.811 [DEBUG] [Thread-26685 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:07:46.149 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:07:46.151 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:07:48.853 [DEBUG] [Thread-26686 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:07:54.106 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:07:54.107 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:07:54.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-11-13T02:07:54.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 7, 28), 11.02, 47.37, 0.0, 14.35, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:07:54.763 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:07:28
2025-11-13T02:07:54.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:07:55.028 [DEBUG] [Thread-26687] [transport.py] [_log()] starting thread (client mode): 0x1493f460
2025-11-13T02:07:55.028 [DEBUG] [Thread-26687] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:07:55.048 [DEBUG] [Thread-26687] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:07:55.048 [INFO] [Thread-26687] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] client lang: <none>
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] server lang: <none>
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] kex follows: False
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] Compression: none
2025-11-13T02:07:55.052 [DEBUG] [Thread-26687] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:07:55.070 [DEBUG] [Thread-26687] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:07:55.071 [DEBUG] [Thread-26687] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:07:55.071 [DEBUG] [Thread-26687] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:07:55.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:07:55.072 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:07:55.073 [DEBUG] [Thread-26687] [transport.py] [_log()] userauth is OK
2025-11-13T02:07:55.073 [DEBUG] [Thread-26687] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:07:55.074 [DEBUG] [Thread-26687] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:07:55.074 [DEBUG] [Thread-26687] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:07:55.074 [DEBUG] [Thread-26687] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:07:55.110 [INFO] [Thread-26687] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:07:55.111 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:07:55.750 [DEBUG] [Thread-26687] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:07:55.750 [DEBUG] [Thread-26687] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:07:55.751 [DEBUG] [Thread-26687] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:07:55.792 [DEBUG] [Thread-26687] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:07:55.792 [DEBUG] [Thread-26687] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:07:55.795 [DEBUG] [Thread-26687] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:07:55.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:07:55.809 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:07:55.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:07:55.813 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:07:55.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:07:55.821 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:07:55.822 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:07:55.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:07:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:07:55.822 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.005299 -999.00  +14.80  11.14     51   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.0 11.1 283.0 15.8 15.1 -24.7 14.9 -23.7 14.7 -23.1 15.0 -24.1
2025-11-13T02:07:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:07:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:07:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.005299
2025-11-13T02:07:55.823 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:07:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:07:55.824 [DEBUG] [Thread-26687] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:07:55.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:07:55.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:07:55.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:07:55.825 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:07:28', tmtdew=11.02, humidity=47.37, cloud=0.0, wind=14.35, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:07:28', seeing=1.07, atlas_timestamp='2025-11-13T00:07:37.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.006750000000000256, 0.0017500000000012506, 0.07875000000000121, 0.0004999999999988347, 0.04049999999999976, 0.054750000000002075, 0.04349999999999987, -0.029749999999999943, -0.0015000000000000568, 0.020500000000000185, 0.060249999999999915, 0.05349999999999966, 0.10249999999999915, 0.04574999999999996, -0.009999999999999787, -0.03250000000000064, 0.023749999999999716, 0.03550000000000075, 0.07699999999999996, 0.08274999999999899, 0.09149999999999991, 0.02324999999999733, -0.014749999999999375, -0.02275000000000027, 0.013999999999999346, 0.05450000000000088, 0.06174999999999997, 0.15300000000000047, 0.13899999999999935, 0.04100000000000037, 0.03700000000000081, -0.021999999999998465, 0.010249999999999204], zp_timestamp='2025-11-13T00:05:00')
2025-11-13T02:07:55.906 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:08:03.886 [DEBUG] [Thread-26690 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:08:12.400 [DEBUG] [Thread-26691 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:08:18.944 [DEBUG] [Thread-26692 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:08:33.979 [DEBUG] [Thread-26693 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:08:46.353 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:08:46.354 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:08:49.008 [DEBUG] [Thread-26694 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:04.042 [DEBUG] [Thread-26695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:12.466 [DEBUG] [Thread-26696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:19.074 [DEBUG] [Thread-26697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:27.134 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:30.294 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:34.108 [DEBUG] [Thread-26698 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:35.338 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:41.724 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:46.565 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:46.575 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:09:49.143 [DEBUG] [Thread-26699 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:00.100 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:04.178 [DEBUG] [Thread-26700 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:04.493 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:07.931 [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-11-13T02:10:12.522 [DEBUG] [Thread-26701 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:13.842 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:18.218 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:19.213 [DEBUG] [Thread-26702 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:24.356 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:28.747 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:34.245 [DEBUG] [Thread-26703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:37.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:10:37.961 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:10:37.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-11-13T02:10:38.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 10, 8), 11.08, 47.17, 0.0, 15.88, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:10:38.616 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:10:08
2025-11-13T02:10:38.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:10:38.884 [DEBUG] [Thread-26704] [transport.py] [_log()] starting thread (client mode): 0x1493ec20
2025-11-13T02:10:38.884 [DEBUG] [Thread-26704] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:10:38.905 [DEBUG] [Thread-26704] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:10:38.905 [INFO] [Thread-26704] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:10:38.908 [DEBUG] [Thread-26704] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:10:38.908 [DEBUG] [Thread-26704] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:10:38.908 [DEBUG] [Thread-26704] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:10:38.908 [DEBUG] [Thread-26704] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:10:38.908 [DEBUG] [Thread-26704] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:10:38.908 [DEBUG] [Thread-26704] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:10:38.908 [DEBUG] [Thread-26704] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:10:38.908 [DEBUG] [Thread-26704] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] client lang: <none>
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] server lang: <none>
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] kex follows: False
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] Compression: none
2025-11-13T02:10:38.909 [DEBUG] [Thread-26704] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:10:38.931 [DEBUG] [Thread-26704] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:10:38.932 [DEBUG] [Thread-26704] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:10:38.932 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:10:38.933 [DEBUG] [Thread-26704] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:10:38.934 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:10:38.935 [DEBUG] [Thread-26704] [transport.py] [_log()] userauth is OK
2025-11-13T02:10:38.935 [DEBUG] [Thread-26704] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:10:38.935 [DEBUG] [Thread-26704] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:10:38.935 [DEBUG] [Thread-26704] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:10:38.935 [DEBUG] [Thread-26704] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:10:38.958 [INFO] [Thread-26704] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:10:38.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:10:39.738 [DEBUG] [Thread-26704] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:10:39.738 [DEBUG] [Thread-26704] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:10:39.738 [DEBUG] [Thread-26704] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:10:39.779 [DEBUG] [Thread-26704] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:10:39.779 [DEBUG] [Thread-26704] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:10:39.782 [DEBUG] [Thread-26704] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:10:39.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:10:39.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:10:39.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:10:39.797 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:10:39.802 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:10:39.804 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:10:39.804 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:10:39.804 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:10:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:10:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.006688 -999.00  +14.80  12.80     51   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.4 12.8 282.2 15.1 15.0 -24.5 14.9 -23.6 14.8 -23.0 15.0 -24.0
2025-11-13T02:10:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:10:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:10:39.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.006688
2025-11-13T02:10:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:10:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:10:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:10:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:10:39.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:10:39.807 [DEBUG] [Thread-26704] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:10:39.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:10:08', tmtdew=11.08, humidity=47.17, cloud=0.0, wind=15.88, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:10:08', seeing=1.12, atlas_timestamp='2025-11-13T00:09:37.843', atlas_cloud=1, atlas_rain=1, zp_data=[0.006750000000000256, 0.0017500000000012506, 0.07875000000000121, 0.0004999999999988347, 0.04049999999999976, 0.054750000000002075, 0.04349999999999987, -0.029749999999999943, -0.0015000000000000568, 0.020500000000000185, 0.060249999999999915, 0.05349999999999966, 0.10249999999999915, 0.04574999999999996, -0.009999999999999787, -0.03250000000000064, 0.023749999999999716, 0.03550000000000075, 0.07699999999999996, 0.08274999999999899, 0.09149999999999991, 0.02324999999999733, -0.014749999999999375, -0.02275000000000027, 0.013999999999999346, 0.05450000000000088, 0.06174999999999997, 0.15300000000000047, 0.13899999999999935, 0.04100000000000037, 0.03700000000000081, -0.021999999999998465, 0.010249999999999204], zp_timestamp='2025-11-13T00:08:00')
2025-11-13T02:10:39.892 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:10:39.904 [DEBUG] [Thread-26707] [transport.py] [_log()] starting thread (client mode): 0x1493eb30
2025-11-13T02:10:39.904 [DEBUG] [Thread-26707] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:10:39.923 [DEBUG] [Thread-26707] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:10:39.923 [INFO] [Thread-26707] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:10:39.930 [DEBUG] [Thread-26707] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] client lang: <none>
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] server lang: <none>
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] kex follows: False
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:10:39.931 [DEBUG] [Thread-26707] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:10:39.932 [DEBUG] [Thread-26707] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:10:39.932 [DEBUG] [Thread-26707] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:10:39.932 [DEBUG] [Thread-26707] [transport.py] [_log()] Compression: none
2025-11-13T02:10:39.932 [DEBUG] [Thread-26707] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:10:39.987 [DEBUG] [Thread-26707] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:10:39.988 [DEBUG] [Thread-26707] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:10:39.989 [DEBUG] [Thread-26707] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:10:39.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:10:39.990 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:10:40.044 [DEBUG] [Thread-26707] [transport.py] [_log()] userauth is OK
2025-11-13T02:10:40.044 [DEBUG] [Thread-26707] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:10:40.044 [DEBUG] [Thread-26707] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:10:40.044 [DEBUG] [Thread-26707] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:10:40.044 [DEBUG] [Thread-26707] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:10:40.063 [INFO] [Thread-26707] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:10:40.063 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:10:40.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:10:40.883 [DEBUG] [Thread-26707] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:10:40.883 [DEBUG] [Thread-26707] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:10:40.932 [DEBUG] [Thread-26707] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:10:40.932 [DEBUG] [Thread-26707] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:10:40.941 [DEBUG] [Thread-26707] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:10:40.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:10:40.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:10:40.957 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:10:40.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:10:40.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:10:40.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:10:40.974 [DEBUG] [Thread-26707] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:10:46.777 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:46.778 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:10:49.277 [DEBUG] [Thread-26709 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:04.328 [DEBUG] [Thread-26710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:10.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:11:10.992 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:11:10.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-11-13T02:11:11.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 10, 40), 11.02, 47.22, 0.0, 15.46, 14.59, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:11:11.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:10:40
2025-11-13T02:11:11.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:11:11.964 [DEBUG] [Thread-26711] [transport.py] [_log()] starting thread (client mode): 0x1493c730
2025-11-13T02:11:11.964 [DEBUG] [Thread-26711] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:11:11.984 [DEBUG] [Thread-26711] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:11:11.984 [INFO] [Thread-26711] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] client lang: <none>
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] server lang: <none>
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] kex follows: False
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] Compression: none
2025-11-13T02:11:11.987 [DEBUG] [Thread-26711] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:11:11.994 [DEBUG] [Thread-26711] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:11:11.994 [DEBUG] [Thread-26711] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:11:11.995 [DEBUG] [Thread-26711] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:11:11.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:11:11.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:11:11.995 [DEBUG] [Thread-26711] [transport.py] [_log()] userauth is OK
2025-11-13T02:11:11.995 [DEBUG] [Thread-26711] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:11:11.995 [DEBUG] [Thread-26711] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:11:11.995 [DEBUG] [Thread-26711] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:11:11.995 [DEBUG] [Thread-26711] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:11:12.004 [INFO] [Thread-26711] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:11:12.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:11:12.575 [DEBUG] [Thread-26713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:12.619 [DEBUG] [Thread-26711] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:11:12.619 [DEBUG] [Thread-26711] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:11:12.619 [DEBUG] [Thread-26711] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:11:12.660 [DEBUG] [Thread-26711] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:11:12.660 [DEBUG] [Thread-26711] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:11:12.662 [DEBUG] [Thread-26711] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:11:12.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:11:12.675 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:11:12.676 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:11:12.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:11:12.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:11:12.679 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:11:12.680 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.007383 -999.00  +14.80  13.39     51   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.5 13.4 286.6 15.6 15.0 -24.9 14.9 -23.7 14.7 -23.2 15.0 -24.0
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.007383
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:11:12.680 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:10:40', tmtdew=11.02, humidity=47.22, cloud=0.0, wind=15.46, temperature=14.59, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:10:40', seeing=1.0, atlas_timestamp='2025-11-13T00:10:37.891', atlas_cloud=1, atlas_rain=1, zp_data=[0.006750000000000256, 0.0017500000000012506, 0.07875000000000121, 0.0004999999999988347, 0.04049999999999976, 0.054750000000002075, 0.04349999999999987, -0.029749999999999943, -0.0015000000000000568, 0.020500000000000185, 0.060249999999999915, 0.05349999999999966, 0.10249999999999915, 0.04574999999999996, -0.009999999999999787, -0.03250000000000064, 0.023749999999999716, 0.03550000000000075, 0.07699999999999996, 0.08274999999999899, 0.09149999999999991, 0.02324999999999733, -0.014749999999999375, -0.02275000000000027, 0.013999999999999346, 0.05450000000000088, 0.06174999999999997, 0.15300000000000047, 0.13899999999999935, 0.04100000000000037, 0.03700000000000081, -0.021999999999998465, 0.010249999999999204], zp_timestamp='2025-11-13T00:08:00')
2025-11-13T02:11:12.680 [DEBUG] [Thread-26711] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:11:12.755 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:11:12.770 [DEBUG] [Thread-26715] [transport.py] [_log()] starting thread (client mode): 0x17346860
2025-11-13T02:11:12.771 [DEBUG] [Thread-26715] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:11:12.785 [DEBUG] [Thread-26715] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:11:12.785 [INFO] [Thread-26715] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:11:12.792 [DEBUG] [Thread-26715] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] client lang: <none>
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] server lang: <none>
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] kex follows: False
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] Compression: none
2025-11-13T02:11:12.793 [DEBUG] [Thread-26715] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:11:12.850 [DEBUG] [Thread-26715] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:11:12.850 [DEBUG] [Thread-26715] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:11:12.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:11:12.851 [DEBUG] [Thread-26715] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:11:12.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:11:12.907 [DEBUG] [Thread-26715] [transport.py] [_log()] userauth is OK
2025-11-13T02:11:12.907 [DEBUG] [Thread-26715] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:11:12.907 [DEBUG] [Thread-26715] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:11:12.907 [DEBUG] [Thread-26715] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:11:12.907 [DEBUG] [Thread-26715] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:11:12.923 [INFO] [Thread-26715] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:11:12.923 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:11:12.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:11:13.778 [DEBUG] [Thread-26715] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:11:13.779 [DEBUG] [Thread-26715] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:11:13.827 [DEBUG] [Thread-26715] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:11:13.827 [DEBUG] [Thread-26715] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:11:13.835 [DEBUG] [Thread-26715] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:11:13.843 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:11:13.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-11-13T02:11:13.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-11-13T02:11:13.859 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:11:13.859 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:11:13.859 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:11:13.867 [DEBUG] [Thread-26715] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:11:19.363 [DEBUG] [Thread-26717 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:32.313 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:34.420 [DEBUG] [Thread-26718 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:35.374 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:43.889 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:11:43.889 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:11:43.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-11-13T02:11:44.535 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 11, 12), 11.0, 47.28, 0.0, 15.53, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:11:44.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:11:12
2025-11-13T02:11:44.661 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:11:44.813 [DEBUG] [Thread-26719] [transport.py] [_log()] starting thread (client mode): 0x1496bb50
2025-11-13T02:11:44.813 [DEBUG] [Thread-26719] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:11:44.833 [DEBUG] [Thread-26719] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:11:44.833 [INFO] [Thread-26719] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] client lang: <none>
2025-11-13T02:11:44.836 [DEBUG] [Thread-26719] [transport.py] [_log()] server lang: <none>
2025-11-13T02:11:44.837 [DEBUG] [Thread-26719] [transport.py] [_log()] kex follows: False
2025-11-13T02:11:44.837 [DEBUG] [Thread-26719] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:11:44.837 [DEBUG] [Thread-26719] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:11:44.837 [DEBUG] [Thread-26719] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:11:44.837 [DEBUG] [Thread-26719] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:11:44.837 [DEBUG] [Thread-26719] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:11:44.837 [DEBUG] [Thread-26719] [transport.py] [_log()] Compression: none
2025-11-13T02:11:44.837 [DEBUG] [Thread-26719] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:11:44.852 [DEBUG] [Thread-26719] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:11:44.852 [DEBUG] [Thread-26719] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:11:44.852 [DEBUG] [Thread-26719] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:11:44.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:11:44.852 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:11:44.853 [DEBUG] [Thread-26719] [transport.py] [_log()] userauth is OK
2025-11-13T02:11:44.853 [DEBUG] [Thread-26719] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:11:44.853 [DEBUG] [Thread-26719] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:11:44.853 [DEBUG] [Thread-26719] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:11:44.853 [DEBUG] [Thread-26719] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:11:44.863 [INFO] [Thread-26719] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:11:44.863 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:11:45.575 [DEBUG] [Thread-26719] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:11:45.575 [DEBUG] [Thread-26719] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:11:45.575 [DEBUG] [Thread-26719] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:11:45.616 [DEBUG] [Thread-26719] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:11:45.616 [DEBUG] [Thread-26719] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:11:45.617 [DEBUG] [Thread-26719] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:11:45.629 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:11:45.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:11:45.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:11:45.631 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:11:45.633 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:11:45.633 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:11:45.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:11:45.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.007730 -999.00  +14.70  11.02     52   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.6 11.0 275.8 17.2 15.0 -24.8 14.9 -23.7 14.7 -23.3 -999.0 -999.0
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.007730
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:11:45.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:11:12', tmtdew=11.0, humidity=47.28, cloud=0.0, wind=15.53, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:11:12', seeing=1.0, atlas_timestamp='2025-11-13T00:11:07.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.006750000000000256, 0.0017500000000012506, 0.07875000000000121, 0.0004999999999988347, 0.04049999999999976, 0.054750000000002075, 0.04349999999999987, -0.029749999999999943, -0.0015000000000000568, 0.020500000000000185, 0.060249999999999915, 0.05349999999999966, 0.10249999999999915, 0.04574999999999996, -0.009999999999999787, -0.03250000000000064, 0.023749999999999716, 0.03550000000000075, 0.07699999999999996, 0.08274999999999899, 0.09149999999999991, 0.02324999999999733, -0.014749999999999375, -0.02275000000000027, 0.013999999999999346, 0.05450000000000088, 0.06174999999999997, 0.15300000000000047, 0.13899999999999935, 0.04100000000000037, 0.03700000000000081, -0.021999999999998465, 0.010249999999999204], zp_timestamp='2025-11-13T00:08:00')
2025-11-13T02:11:45.634 [DEBUG] [Thread-26719] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:11:45.708 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:11:45.719 [DEBUG] [Thread-26722] [transport.py] [_log()] starting thread (client mode): 0x173458d0
2025-11-13T02:11:45.719 [DEBUG] [Thread-26722] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:11:45.734 [DEBUG] [Thread-26722] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:11:45.734 [INFO] [Thread-26722] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:11:45.741 [DEBUG] [Thread-26722] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:11:45.741 [DEBUG] [Thread-26722] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] client lang: <none>
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] server lang: <none>
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] kex follows: False
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] Compression: none
2025-11-13T02:11:45.742 [DEBUG] [Thread-26722] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:11:45.802 [DEBUG] [Thread-26722] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:11:45.802 [DEBUG] [Thread-26722] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:11:45.802 [DEBUG] [Thread-26722] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:11:45.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:11:45.802 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:11:45.859 [DEBUG] [Thread-26722] [transport.py] [_log()] userauth is OK
2025-11-13T02:11:45.859 [DEBUG] [Thread-26722] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:11:45.859 [DEBUG] [Thread-26722] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:11:45.859 [DEBUG] [Thread-26722] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:11:45.859 [DEBUG] [Thread-26722] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:11:45.873 [INFO] [Thread-26722] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:11:45.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:11:45.874 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:11:46.684 [DEBUG] [Thread-26722] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:11:46.685 [DEBUG] [Thread-26722] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:11:46.734 [DEBUG] [Thread-26722] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:11:46.734 [DEBUG] [Thread-26722] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:11:46.743 [DEBUG] [Thread-26722] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:11:46.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:11:46.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-11-13T02:11:46.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-11-13T02:11:46.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:11:46.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:11:46.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:11:46.778 [DEBUG] [Thread-26722] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:11:46.983 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:46.985 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:11:49.459 [DEBUG] [Thread-26724 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:12:04.510 [DEBUG] [Thread-26725 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:12:12.633 [DEBUG] [Thread-26726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:12:16.800 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:12:16.800 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:12:16.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-11-13T02:12:17.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 11, 44), 10.95, 47.43, 0.0, 16.2, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:12:17.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:11:44
2025-11-13T02:12:17.621 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:12:17.772 [DEBUG] [Thread-26727] [transport.py] [_log()] starting thread (client mode): 0x1496bf70
2025-11-13T02:12:17.772 [DEBUG] [Thread-26727] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:12:17.792 [DEBUG] [Thread-26727] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:12:17.792 [INFO] [Thread-26727] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] client lang: <none>
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] server lang: <none>
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] kex follows: False
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:12:17.795 [DEBUG] [Thread-26727] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:12:17.796 [DEBUG] [Thread-26727] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:12:17.796 [DEBUG] [Thread-26727] [transport.py] [_log()] Compression: none
2025-11-13T02:12:17.796 [DEBUG] [Thread-26727] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:12:17.811 [DEBUG] [Thread-26727] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:12:17.811 [DEBUG] [Thread-26727] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:12:17.811 [DEBUG] [Thread-26727] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:12:17.811 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:12:17.812 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:12:17.812 [DEBUG] [Thread-26727] [transport.py] [_log()] userauth is OK
2025-11-13T02:12:17.812 [DEBUG] [Thread-26727] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:12:17.812 [DEBUG] [Thread-26727] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:12:17.812 [DEBUG] [Thread-26727] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:12:17.812 [DEBUG] [Thread-26727] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:12:17.827 [INFO] [Thread-26727] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:12:17.827 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:12:18.492 [DEBUG] [Thread-26727] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:12:18.492 [DEBUG] [Thread-26727] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:12:18.492 [DEBUG] [Thread-26727] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:12:18.533 [DEBUG] [Thread-26727] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:12:18.534 [DEBUG] [Thread-26727] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:12:18.536 [DEBUG] [Thread-26727] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:12:18.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:12:18.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:12:18.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:12:18.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:12:18.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:12:18.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:12:18.560 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:12:18.560 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:12:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:12:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.008077 -999.00  +14.70  15.85     51   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.2 15.8 276.6 17.6 15.0 -24.8 14.9 -23.7 14.7 -23.0 14.9 -24.0
2025-11-13T02:12:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:12:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:12:18.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.008077
2025-11-13T02:12:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:12:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:12:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:12:18.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:12:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:12:18.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:11:44', tmtdew=10.95, humidity=47.43, cloud=0.0, wind=16.2, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:12:16', seeing=0.98, atlas_timestamp='2025-11-13T00:11:37.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:11:00')
2025-11-13T02:12:18.562 [DEBUG] [Thread-26727] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:12:18.647 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:12:18.659 [DEBUG] [Thread-26730] [transport.py] [_log()] starting thread (client mode): 0x11f02e30
2025-11-13T02:12:18.659 [DEBUG] [Thread-26730] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:12:18.674 [DEBUG] [Thread-26730] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:12:18.674 [INFO] [Thread-26730] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:12:18.681 [DEBUG] [Thread-26730] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:12:18.682 [DEBUG] [Thread-26730] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:12:18.682 [DEBUG] [Thread-26730] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:12:18.682 [DEBUG] [Thread-26730] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:12:18.682 [DEBUG] [Thread-26730] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:12:18.682 [DEBUG] [Thread-26730] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:12:18.682 [DEBUG] [Thread-26730] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:12:18.682 [DEBUG] [Thread-26730] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:12:18.683 [DEBUG] [Thread-26730] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:12:18.683 [DEBUG] [Thread-26730] [transport.py] [_log()] client lang: <none>
2025-11-13T02:12:18.683 [DEBUG] [Thread-26730] [transport.py] [_log()] server lang: <none>
2025-11-13T02:12:18.683 [DEBUG] [Thread-26730] [transport.py] [_log()] kex follows: False
2025-11-13T02:12:18.683 [DEBUG] [Thread-26730] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:12:18.683 [DEBUG] [Thread-26730] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:12:18.683 [DEBUG] [Thread-26730] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:12:18.683 [DEBUG] [Thread-26730] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:12:18.684 [DEBUG] [Thread-26730] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:12:18.684 [DEBUG] [Thread-26730] [transport.py] [_log()] Compression: none
2025-11-13T02:12:18.684 [DEBUG] [Thread-26730] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:12:18.740 [DEBUG] [Thread-26730] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:12:18.741 [DEBUG] [Thread-26730] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:12:18.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:12:18.742 [DEBUG] [Thread-26730] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:12:18.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:12:18.799 [DEBUG] [Thread-26730] [transport.py] [_log()] userauth is OK
2025-11-13T02:12:18.800 [DEBUG] [Thread-26730] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:12:18.800 [DEBUG] [Thread-26730] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:12:18.800 [DEBUG] [Thread-26730] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:12:18.800 [DEBUG] [Thread-26730] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:12:18.819 [INFO] [Thread-26730] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:12:18.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:12:18.820 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:12:19.547 [DEBUG] [Thread-26732 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:12:19.639 [DEBUG] [Thread-26730] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:12:19.640 [DEBUG] [Thread-26730] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:12:19.688 [DEBUG] [Thread-26730] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:12:19.688 [DEBUG] [Thread-26730] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:12:19.697 [DEBUG] [Thread-26730] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:12:19.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:12:19.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-11-13T02:12:19.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-11-13T02:12:19.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:12:19.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:12:19.725 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:12:19.733 [DEBUG] [Thread-26730] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:12:34.610 [DEBUG] [Thread-26733 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:12:47.188 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:12:47.190 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:12:49.647 [DEBUG] [Thread-26734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:12:49.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:12:49.732 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:12:49.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-11-13T02:12:50.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 12, 16), 10.97, 47.38, 0.0, 15.95, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:12:50.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:12:16
2025-11-13T02:12:50.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:12:50.711 [DEBUG] [Thread-26735] [transport.py] [_log()] starting thread (client mode): 0x1496a950
2025-11-13T02:12:50.711 [DEBUG] [Thread-26735] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:12:50.732 [DEBUG] [Thread-26735] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:12:50.732 [INFO] [Thread-26735] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:12:50.735 [DEBUG] [Thread-26735] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] client lang: <none>
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] server lang: <none>
2025-11-13T02:12:50.736 [DEBUG] [Thread-26735] [transport.py] [_log()] kex follows: False
2025-11-13T02:12:50.737 [DEBUG] [Thread-26735] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:12:50.737 [DEBUG] [Thread-26735] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:12:50.737 [DEBUG] [Thread-26735] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:12:50.737 [DEBUG] [Thread-26735] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:12:50.737 [DEBUG] [Thread-26735] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:12:50.737 [DEBUG] [Thread-26735] [transport.py] [_log()] Compression: none
2025-11-13T02:12:50.737 [DEBUG] [Thread-26735] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:12:50.756 [DEBUG] [Thread-26735] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:12:50.757 [DEBUG] [Thread-26735] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:12:50.758 [DEBUG] [Thread-26735] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:12:50.758 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:12:50.759 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:12:50.760 [DEBUG] [Thread-26735] [transport.py] [_log()] userauth is OK
2025-11-13T02:12:50.760 [DEBUG] [Thread-26735] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:12:50.760 [DEBUG] [Thread-26735] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:12:50.761 [DEBUG] [Thread-26735] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:12:50.761 [DEBUG] [Thread-26735] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:12:50.774 [INFO] [Thread-26735] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:12:50.776 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:12:51.362 [DEBUG] [Thread-26735] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:12:51.362 [DEBUG] [Thread-26735] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:12:51.363 [DEBUG] [Thread-26735] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:12:51.403 [DEBUG] [Thread-26735] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:12:51.404 [DEBUG] [Thread-26735] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:12:51.406 [DEBUG] [Thread-26735] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:12:51.420 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:12:51.420 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:12:51.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:12:51.423 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:12:51.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:12:51.430 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:12:51.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:12:51.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:12:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:12:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.008424 -999.00  +14.80  14.86     50   +4.60 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.4 14.9 277.4 19.0 15.0 -24.7 14.9 -23.7 14.7 -23.0 14.9 -24.1
2025-11-13T02:12:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:12:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:12:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.008424
2025-11-13T02:12:51.431 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:12:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:12:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:12:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:12:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:12:51.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:12:16', tmtdew=10.97, humidity=47.38, cloud=0.0, wind=15.95, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:12:48', seeing=0.98, atlas_timestamp='2025-11-13T00:12:07.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:11:00')
2025-11-13T02:12:51.432 [DEBUG] [Thread-26735] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:12:51.516 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:12:51.528 [DEBUG] [Thread-26738] [transport.py] [_log()] starting thread (client mode): 0x14944d90
2025-11-13T02:12:51.528 [DEBUG] [Thread-26738] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:12:51.544 [DEBUG] [Thread-26738] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:12:51.544 [INFO] [Thread-26738] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:12:51.556 [DEBUG] [Thread-26738] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:12:51.556 [DEBUG] [Thread-26738] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:12:51.556 [DEBUG] [Thread-26738] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:12:51.556 [DEBUG] [Thread-26738] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:12:51.556 [DEBUG] [Thread-26738] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:12:51.556 [DEBUG] [Thread-26738] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:12:51.557 [DEBUG] [Thread-26738] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:12:51.557 [DEBUG] [Thread-26738] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:12:51.557 [DEBUG] [Thread-26738] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:12:51.557 [DEBUG] [Thread-26738] [transport.py] [_log()] client lang: <none>
2025-11-13T02:12:51.557 [DEBUG] [Thread-26738] [transport.py] [_log()] server lang: <none>
2025-11-13T02:12:51.557 [DEBUG] [Thread-26738] [transport.py] [_log()] kex follows: False
2025-11-13T02:12:51.557 [DEBUG] [Thread-26738] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:12:51.557 [DEBUG] [Thread-26738] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:12:51.558 [DEBUG] [Thread-26738] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:12:51.558 [DEBUG] [Thread-26738] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:12:51.558 [DEBUG] [Thread-26738] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:12:51.558 [DEBUG] [Thread-26738] [transport.py] [_log()] Compression: none
2025-11-13T02:12:51.558 [DEBUG] [Thread-26738] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:12:51.616 [DEBUG] [Thread-26738] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:12:51.617 [DEBUG] [Thread-26738] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:12:51.618 [DEBUG] [Thread-26738] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:12:51.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:12:51.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:12:51.676 [DEBUG] [Thread-26738] [transport.py] [_log()] userauth is OK
2025-11-13T02:12:51.676 [DEBUG] [Thread-26738] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:12:51.676 [DEBUG] [Thread-26738] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:12:51.676 [DEBUG] [Thread-26738] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:12:51.676 [DEBUG] [Thread-26738] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:12:51.695 [INFO] [Thread-26738] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:12:51.696 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:12:51.696 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:12:52.507 [DEBUG] [Thread-26738] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:12:52.508 [DEBUG] [Thread-26738] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:12:52.556 [DEBUG] [Thread-26738] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:12:52.556 [DEBUG] [Thread-26738] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:12:52.565 [DEBUG] [Thread-26738] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:12:52.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:12:52.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:12:52.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-11-13T02:12:52.593 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:12:52.594 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:12:52.594 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:12:52.602 [DEBUG] [Thread-26738] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:13:04.676 [DEBUG] [Thread-26740 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:13:12.690 [DEBUG] [Thread-26741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:13:19.713 [DEBUG] [Thread-26742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:13:22.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:13:22.625 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:13:22.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-11-13T02:13:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 13, 20), 11.16, 47.23, 0.0, 13.96, 14.51, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:13:23.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:13:20
2025-11-13T02:13:23.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:13:23.551 [DEBUG] [Thread-26743] [transport.py] [_log()] starting thread (client mode): 0x1493d0c0
2025-11-13T02:13:23.551 [DEBUG] [Thread-26743] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:13:23.572 [DEBUG] [Thread-26743] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:13:23.572 [INFO] [Thread-26743] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:13:23.573 [DEBUG] [Thread-26743] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:13:23.573 [DEBUG] [Thread-26743] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:13:23.573 [DEBUG] [Thread-26743] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:13:23.573 [DEBUG] [Thread-26743] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] client lang: <none>
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] server lang: <none>
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] kex follows: False
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] Compression: none
2025-11-13T02:13:23.574 [DEBUG] [Thread-26743] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:13:23.593 [DEBUG] [Thread-26743] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:13:23.593 [DEBUG] [Thread-26743] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:13:23.594 [DEBUG] [Thread-26743] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:13:23.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:13:23.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:13:23.596 [DEBUG] [Thread-26743] [transport.py] [_log()] userauth is OK
2025-11-13T02:13:23.596 [DEBUG] [Thread-26743] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:13:23.597 [DEBUG] [Thread-26743] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:13:23.597 [DEBUG] [Thread-26743] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:13:23.597 [DEBUG] [Thread-26743] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:13:23.620 [INFO] [Thread-26743] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:13:23.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:13:24.219 [DEBUG] [Thread-26743] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:13:24.219 [DEBUG] [Thread-26743] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:13:24.220 [DEBUG] [Thread-26743] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:13:24.261 [DEBUG] [Thread-26743] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:13:24.261 [DEBUG] [Thread-26743] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:13:24.264 [DEBUG] [Thread-26743] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:13:24.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:13:24.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:13:24.278 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:13:24.280 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:13:24.285 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:13:24.287 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:13:24.287 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:13:24.287 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:13:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:13:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.008771 -999.00  +14.80  11.19     50   +4.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.9 11.2 276.2 16.9 15.0 -24.6 14.9 -23.7 14.6 -23.1 14.9 -24.1
2025-11-13T02:13:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:13:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:13:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.008771
2025-11-13T02:13:24.288 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:13:24.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:13:24.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:13:24.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:13:24.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:13:24.289 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:13:20', tmtdew=11.16, humidity=47.23, cloud=0.0, wind=13.96, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:13:20', seeing=0.98, atlas_timestamp='2025-11-13T00:12:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:11:00')
2025-11-13T02:13:24.290 [DEBUG] [Thread-26743] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:13:24.373 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:13:24.385 [DEBUG] [Thread-26746] [transport.py] [_log()] starting thread (client mode): 0x17347dc0
2025-11-13T02:13:24.385 [DEBUG] [Thread-26746] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:13:24.401 [DEBUG] [Thread-26746] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:13:24.401 [INFO] [Thread-26746] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] client lang: <none>
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] server lang: <none>
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] kex follows: False
2025-11-13T02:13:24.409 [DEBUG] [Thread-26746] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:13:24.410 [DEBUG] [Thread-26746] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:13:24.410 [DEBUG] [Thread-26746] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:13:24.410 [DEBUG] [Thread-26746] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:13:24.410 [DEBUG] [Thread-26746] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:13:24.410 [DEBUG] [Thread-26746] [transport.py] [_log()] Compression: none
2025-11-13T02:13:24.410 [DEBUG] [Thread-26746] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:13:24.467 [DEBUG] [Thread-26746] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:13:24.468 [DEBUG] [Thread-26746] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:13:24.469 [DEBUG] [Thread-26746] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:13:24.469 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:13:24.470 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:13:24.524 [DEBUG] [Thread-26746] [transport.py] [_log()] userauth is OK
2025-11-13T02:13:24.524 [DEBUG] [Thread-26746] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:13:24.524 [DEBUG] [Thread-26746] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:13:24.524 [DEBUG] [Thread-26746] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:13:24.524 [DEBUG] [Thread-26746] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:13:24.543 [INFO] [Thread-26746] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:13:24.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:13:24.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:13:25.370 [DEBUG] [Thread-26746] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:13:25.371 [DEBUG] [Thread-26746] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:13:25.418 [DEBUG] [Thread-26746] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:13:25.419 [DEBUG] [Thread-26746] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:13:25.428 [DEBUG] [Thread-26746] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:13:25.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:13:25.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')
2025-11-13T02:13:25.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-11-13T02:13:25.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:13:25.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:13:25.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:13:25.462 [DEBUG] [Thread-26746] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:13:34.753 [DEBUG] [Thread-26748 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:13:47.393 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:13:47.394 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:13:49.803 [DEBUG] [Thread-26749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:13:55.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:13:55.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:13:55.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-11-13T02:13:56.142 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 13, 52), 11.06, 47.22, 0.0, 15.6, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:13:56.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:13:52
2025-11-13T02:13:56.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:13:56.414 [DEBUG] [Thread-26750] [transport.py] [_log()] starting thread (client mode): 0x17347880
2025-11-13T02:13:56.414 [DEBUG] [Thread-26750] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:13:56.434 [DEBUG] [Thread-26750] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:13:56.434 [INFO] [Thread-26750] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:13:56.437 [DEBUG] [Thread-26750] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] client lang: <none>
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] server lang: <none>
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] kex follows: False
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:13:56.438 [DEBUG] [Thread-26750] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:13:56.439 [DEBUG] [Thread-26750] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:13:56.439 [DEBUG] [Thread-26750] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:13:56.439 [DEBUG] [Thread-26750] [transport.py] [_log()] Compression: none
2025-11-13T02:13:56.439 [DEBUG] [Thread-26750] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:13:56.457 [DEBUG] [Thread-26750] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:13:56.458 [DEBUG] [Thread-26750] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:13:56.458 [DEBUG] [Thread-26750] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:13:56.458 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:13:56.459 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:13:56.460 [DEBUG] [Thread-26750] [transport.py] [_log()] userauth is OK
2025-11-13T02:13:56.460 [DEBUG] [Thread-26750] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:13:56.460 [DEBUG] [Thread-26750] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:13:56.460 [DEBUG] [Thread-26750] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:13:56.460 [DEBUG] [Thread-26750] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:13:56.479 [INFO] [Thread-26750] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:13:56.479 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:13:57.109 [DEBUG] [Thread-26750] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:13:57.109 [DEBUG] [Thread-26750] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:13:57.109 [DEBUG] [Thread-26750] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:13:57.150 [DEBUG] [Thread-26750] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:13:57.150 [DEBUG] [Thread-26750] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:13:57.153 [DEBUG] [Thread-26750] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:13:57.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:13:57.166 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:13:57.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:13:57.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:13:57.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:13:57.176 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:13:57.177 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:13:57.177 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:13:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:13:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.009119 -999.00  +14.80  15.41     51   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.0 15.4 272.8 17.9 15.0 -24.5 14.9 -23.7 14.7 -23.2 14.9 -24.1
2025-11-13T02:13:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:13:57.177 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:13:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.009119
2025-11-13T02:13:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:13:57.178 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:13:57.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:13:57.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:13:57.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:13:57.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:13:52', tmtdew=11.06, humidity=47.22, cloud=0.0, wind=15.6, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:13:52', seeing=0.88, atlas_timestamp='2025-11-13T00:13:07.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:11:00')
2025-11-13T02:13:57.179 [DEBUG] [Thread-26750] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:13: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-11-13T02:13:57.277 [DEBUG] [Thread-26753] [transport.py] [_log()] starting thread (client mode): 0x17344730
2025-11-13T02:13:57.277 [DEBUG] [Thread-26753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:13:57.295 [DEBUG] [Thread-26753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:13:57.295 [INFO] [Thread-26753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:13:57.304 [DEBUG] [Thread-26753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:13:57.304 [DEBUG] [Thread-26753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:13:57.304 [DEBUG] [Thread-26753] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:13:57.304 [DEBUG] [Thread-26753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] client lang: <none>
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] server lang: <none>
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] kex follows: False
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:13:57.305 [DEBUG] [Thread-26753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:13:57.306 [DEBUG] [Thread-26753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:13:57.306 [DEBUG] [Thread-26753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:13:57.306 [DEBUG] [Thread-26753] [transport.py] [_log()] Compression: none
2025-11-13T02:13:57.306 [DEBUG] [Thread-26753] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:13:57.363 [DEBUG] [Thread-26753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:13:57.364 [DEBUG] [Thread-26753] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:13:57.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:13:57.365 [DEBUG] [Thread-26753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:13:57.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:13:57.419 [DEBUG] [Thread-26753] [transport.py] [_log()] userauth is OK
2025-11-13T02:13:57.420 [DEBUG] [Thread-26753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:13:57.420 [DEBUG] [Thread-26753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:13:57.420 [DEBUG] [Thread-26753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:13:57.420 [DEBUG] [Thread-26753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:13:57.438 [INFO] [Thread-26753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:13:57.439 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:13:57.439 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:13:58.272 [DEBUG] [Thread-26753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:13:58.272 [DEBUG] [Thread-26753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:13:58.320 [DEBUG] [Thread-26753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:13:58.320 [DEBUG] [Thread-26753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:13:58.330 [DEBUG] [Thread-26753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:13:58.341 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:13:58.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-11-13T02:13:58.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-11-13T02:13:58.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:13:58.363 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:13:58.363 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:13:58.373 [DEBUG] [Thread-26753] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:14:04.836 [DEBUG] [Thread-26755 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:14:12.753 [DEBUG] [Thread-26756 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:14:19.890 [DEBUG] [Thread-26757 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:14:28.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:14:28.394 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:14:28.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-11-13T02:14:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 14, 24), 11.05, 47.25, 0.0, 15.86, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:14:29.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:14:24
2025-11-13T02:14:29.223 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:14:29.374 [DEBUG] [Thread-26758] [transport.py] [_log()] starting thread (client mode): 0x11f00a90
2025-11-13T02:14:29.374 [DEBUG] [Thread-26758] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:14:29.393 [DEBUG] [Thread-26758] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:14:29.393 [INFO] [Thread-26758] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] client lang: <none>
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] server lang: <none>
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] kex follows: False
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:14:29.396 [DEBUG] [Thread-26758] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:14:29.397 [DEBUG] [Thread-26758] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:14:29.397 [DEBUG] [Thread-26758] [transport.py] [_log()] Compression: none
2025-11-13T02:14:29.397 [DEBUG] [Thread-26758] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:14:29.411 [DEBUG] [Thread-26758] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:14:29.412 [DEBUG] [Thread-26758] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:14:29.412 [DEBUG] [Thread-26758] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:14:29.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:14:29.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:14:29.413 [DEBUG] [Thread-26758] [transport.py] [_log()] userauth is OK
2025-11-13T02:14:29.413 [DEBUG] [Thread-26758] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:14:29.413 [DEBUG] [Thread-26758] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:14:29.413 [DEBUG] [Thread-26758] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:14:29.413 [DEBUG] [Thread-26758] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:14:29.428 [INFO] [Thread-26758] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:14:29.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:14:30.099 [DEBUG] [Thread-26758] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:14:30.099 [DEBUG] [Thread-26758] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:14:30.099 [DEBUG] [Thread-26758] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:14:30.140 [DEBUG] [Thread-26758] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:14:30.140 [DEBUG] [Thread-26758] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:14:30.142 [DEBUG] [Thread-26758] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:14:30.153 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:14:30.153 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:14:30.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:14:30.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:14:30.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:14:30.158 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:14:30.158 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:14:30.158 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:14:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:14:30.158 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.009813 -999.00  +14.70  13.48     51   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 6.5 13.5 275.4 17.0 15.0 -24.7 14.9 -23.7 14.6 -23.1 14.9 -24.2
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.009813
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:14:30.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:14:24', tmtdew=11.05, humidity=47.25, cloud=0.0, wind=15.86, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:14:24', seeing=0.88, atlas_timestamp='2025-11-13T00:14:07.843', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:11:00')
2025-11-13T02:14:30.160 [DEBUG] [Thread-26758] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:14:30.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:14:30.244 [DEBUG] [Thread-26761] [transport.py] [_log()] starting thread (client mode): 0x14982d40
2025-11-13T02:14:30.244 [DEBUG] [Thread-26761] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:14:30.259 [DEBUG] [Thread-26761] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:14:30.259 [INFO] [Thread-26761] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:14:30.266 [DEBUG] [Thread-26761] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] client lang: <none>
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] server lang: <none>
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] kex follows: False
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] Compression: none
2025-11-13T02:14:30.267 [DEBUG] [Thread-26761] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:14:30.322 [DEBUG] [Thread-26761] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:14:30.322 [DEBUG] [Thread-26761] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:14:30.322 [DEBUG] [Thread-26761] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:14:30.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:14:30.322 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:14:30.379 [DEBUG] [Thread-26761] [transport.py] [_log()] userauth is OK
2025-11-13T02:14:30.379 [DEBUG] [Thread-26761] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:14:30.379 [DEBUG] [Thread-26761] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:14:30.379 [DEBUG] [Thread-26761] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:14:30.380 [DEBUG] [Thread-26761] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:14:30.394 [INFO] [Thread-26761] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:14:30.394 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:14:30.394 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:14:31.240 [DEBUG] [Thread-26761] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:14:31.240 [DEBUG] [Thread-26761] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:14:31.289 [DEBUG] [Thread-26761] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:14:31.289 [DEBUG] [Thread-26761] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:14:31.298 [DEBUG] [Thread-26761] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:14:31.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:14:31.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:14:31.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-11-13T02:14:31.326 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:14:31.326 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:14:31.327 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:14:31.335 [DEBUG] [Thread-26761] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:14:34.924 [DEBUG] [Thread-26763 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:14:47.597 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:14:47.598 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:14:49.979 [DEBUG] [Thread-26764 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:15:01.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:15:01.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:15:01.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:15:02.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 14, 56), 11.02, 47.37, 0.0, 14.05, 14.34, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:15:02.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:14:56
2025-11-13T02:15:02.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:15:02.355 [DEBUG] [Thread-26765] [transport.py] [_log()] starting thread (client mode): 0x1493e6b0
2025-11-13T02:15:02.355 [DEBUG] [Thread-26765] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:15:02.382 [DEBUG] [Thread-26765] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:15:02.382 [INFO] [Thread-26765] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:15:02.384 [DEBUG] [Thread-26765] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:15:02.384 [DEBUG] [Thread-26765] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:15:02.384 [DEBUG] [Thread-26765] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:15:02.384 [DEBUG] [Thread-26765] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:15:02.384 [DEBUG] [Thread-26765] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] client lang: <none>
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] server lang: <none>
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] kex follows: False
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:15:02.385 [DEBUG] [Thread-26765] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:15:02.386 [DEBUG] [Thread-26765] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:15:02.386 [DEBUG] [Thread-26765] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:15:02.386 [DEBUG] [Thread-26765] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:15:02.386 [DEBUG] [Thread-26765] [transport.py] [_log()] Compression: none
2025-11-13T02:15:02.386 [DEBUG] [Thread-26765] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:15:02.401 [DEBUG] [Thread-26765] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:15:02.401 [DEBUG] [Thread-26765] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:15:02.402 [DEBUG] [Thread-26765] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:15:02.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:15:02.402 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:15:02.404 [DEBUG] [Thread-26765] [transport.py] [_log()] userauth is OK
2025-11-13T02:15:02.404 [DEBUG] [Thread-26765] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:15:02.404 [DEBUG] [Thread-26765] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:15:02.404 [DEBUG] [Thread-26765] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:15:02.404 [DEBUG] [Thread-26765] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:15:02.427 [INFO] [Thread-26765] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:15:02.428 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:15:05.011 [DEBUG] [Thread-26767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:15:05.543 [DEBUG] [Thread-26765] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:15:05.543 [DEBUG] [Thread-26765] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:15:05.543 [DEBUG] [Thread-26765] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:15:05.584 [DEBUG] [Thread-26765] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:15:05.584 [DEBUG] [Thread-26765] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:15:05.586 [DEBUG] [Thread-26765] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:15:05.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:15:05.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:15:05.601 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:15:05.602 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:15:05.605 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:15:05.606 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:15:05.606 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.010160 -999.00  +14.70  11.44     51   +4.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.3 11.4 280.4 16.1 15.0 -24.8 14.9 -23.7 14.6 -23.0 14.9 -24.1
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.010160
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:15:05.606 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:14:56', tmtdew=11.02, humidity=47.37, cloud=0.0, wind=14.05, temperature=14.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:14:56', seeing=0.89, atlas_timestamp='2025-11-13T00:14:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:11:00')
2025-11-13T02:15:05.607 [DEBUG] [Thread-26765] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:15:05.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:15:05.691 [DEBUG] [Thread-26769] [transport.py] [_log()] starting thread (client mode): 0x14946a10
2025-11-13T02:15:05.691 [DEBUG] [Thread-26769] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:15:05.705 [DEBUG] [Thread-26769] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:15:05.705 [INFO] [Thread-26769] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] client lang: <none>
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] server lang: <none>
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] kex follows: False
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] Compression: none
2025-11-13T02:15:05.713 [DEBUG] [Thread-26769] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:15:05.773 [DEBUG] [Thread-26769] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:15:05.774 [DEBUG] [Thread-26769] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:15:05.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:15:05.774 [DEBUG] [Thread-26769] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:15:05.774 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:15:05.831 [DEBUG] [Thread-26769] [transport.py] [_log()] userauth is OK
2025-11-13T02:15:05.831 [DEBUG] [Thread-26769] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:15:05.831 [DEBUG] [Thread-26769] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:15:05.831 [DEBUG] [Thread-26769] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:15:05.831 [DEBUG] [Thread-26769] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:15:05.845 [INFO] [Thread-26769] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:15:05.845 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:15:05.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:15:06.664 [DEBUG] [Thread-26769] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:15:06.664 [DEBUG] [Thread-26769] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:15:06.716 [DEBUG] [Thread-26769] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:15:06.716 [DEBUG] [Thread-26769] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:15:06.724 [DEBUG] [Thread-26769] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:15:06.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:15:06.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-11-13T02:15:06.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-11-13T02:15:06.747 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:15:06.748 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:15:06.748 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:15:06.755 [DEBUG] [Thread-26769] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:15:12.817 [DEBUG] [Thread-26771 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:15:20.039 [DEBUG] [Thread-26772 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:15:35.094 [DEBUG] [Thread-26773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:15:36.778 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:15:36.779 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:15:36.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-11-13T02:15:37.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 15, 28), 10.97, 47.51, 0.0, 14.65, 14.32, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:15:37.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:15:28
2025-11-13T02:15:37.581 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:15:37.728 [DEBUG] [Thread-26774] [transport.py] [_log()] starting thread (client mode): 0x149897b0
2025-11-13T02:15:37.728 [DEBUG] [Thread-26774] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:15:37.750 [DEBUG] [Thread-26774] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:15:37.750 [INFO] [Thread-26774] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:15:37.753 [DEBUG] [Thread-26774] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:15:37.753 [DEBUG] [Thread-26774] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:15:37.753 [DEBUG] [Thread-26774] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:15:37.753 [DEBUG] [Thread-26774] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] client lang: <none>
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] server lang: <none>
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] kex follows: False
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] Compression: none
2025-11-13T02:15:37.754 [DEBUG] [Thread-26774] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:15:37.772 [DEBUG] [Thread-26774] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:15:37.773 [DEBUG] [Thread-26774] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:15:37.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:15:37.774 [DEBUG] [Thread-26774] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:15:37.775 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:15:37.776 [DEBUG] [Thread-26774] [transport.py] [_log()] userauth is OK
2025-11-13T02:15:37.777 [DEBUG] [Thread-26774] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:15:37.777 [DEBUG] [Thread-26774] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:15:37.777 [DEBUG] [Thread-26774] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:15:37.777 [DEBUG] [Thread-26774] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:15:37.802 [INFO] [Thread-26774] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:15:37.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:15:38.448 [DEBUG] [Thread-26774] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:15:38.449 [DEBUG] [Thread-26774] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:15:38.449 [DEBUG] [Thread-26774] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:15:38.490 [DEBUG] [Thread-26774] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:15:38.490 [DEBUG] [Thread-26774] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:15:38.494 [DEBUG] [Thread-26774] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:15:38.505 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:15:38.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:15:38.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:15:38.509 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:15:38.515 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:15:38.517 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:15:38.517 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:15:38.517 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:15:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:15:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.010507 -999.00  +14.70  11.28     51   +4.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 9.7 11.3 277.4 13.6 15.0 -24.6 14.9 -23.9 14.6 -23.4 14.9 -24.2
2025-11-13T02:15:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:15:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:15:38.518 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.010507
2025-11-13T02:15:38.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:15:38.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:15:38.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:15:38.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:15:38.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:15:38.520 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:15:28', tmtdew=10.97, humidity=47.51, cloud=0.0, wind=14.65, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:15:28', seeing=0.95, atlas_timestamp='2025-11-13T00:15:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:13:00')
2025-11-13T02:15:38.520 [DEBUG] [Thread-26774] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:15:38.603 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:15:38.616 [DEBUG] [Thread-26777] [transport.py] [_log()] starting thread (client mode): 0x1737eaa0
2025-11-13T02:15:38.616 [DEBUG] [Thread-26777] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:15:38.631 [DEBUG] [Thread-26777] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:15:38.631 [INFO] [Thread-26777] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] client lang: <none>
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] server lang: <none>
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] kex follows: False
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:15:38.639 [DEBUG] [Thread-26777] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:15:38.640 [DEBUG] [Thread-26777] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:15:38.640 [DEBUG] [Thread-26777] [transport.py] [_log()] Compression: none
2025-11-13T02:15:38.640 [DEBUG] [Thread-26777] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:15:38.698 [DEBUG] [Thread-26777] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:15:38.699 [DEBUG] [Thread-26777] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:15:38.699 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:15:38.700 [DEBUG] [Thread-26777] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:15:38.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:15:38.756 [DEBUG] [Thread-26777] [transport.py] [_log()] userauth is OK
2025-11-13T02:15:38.756 [DEBUG] [Thread-26777] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:15:38.756 [DEBUG] [Thread-26777] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:15:38.756 [DEBUG] [Thread-26777] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:15:38.756 [DEBUG] [Thread-26777] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:15:38.774 [INFO] [Thread-26777] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:15:38.775 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:15:38.775 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:15:39.612 [DEBUG] [Thread-26777] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:15:39.613 [DEBUG] [Thread-26777] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:15:39.660 [DEBUG] [Thread-26777] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:15:39.661 [DEBUG] [Thread-26777] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:15:39.670 [DEBUG] [Thread-26777] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:15:39.678 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:15: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-11-13T02:15:39.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:15:39.696 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:15:39.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:15:39.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:15:39.705 [DEBUG] [Thread-26777] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:15:47.801 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:15:47.802 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:15:50.129 [DEBUG] [Thread-26779 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:16:05.183 [DEBUG] [Thread-26780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:16:09.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:16:09.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:16:09.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-11-13T02:16:10.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 15, 28), 10.87, 48.01, 0.0, 16.45, 14.32, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:16:10.380 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:15:28
2025-11-13T02:16:10.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:16:10.649 [DEBUG] [Thread-26781] [transport.py] [_log()] starting thread (client mode): 0x17345600
2025-11-13T02:16:10.649 [DEBUG] [Thread-26781] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:16:10.669 [DEBUG] [Thread-26781] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:16:10.670 [INFO] [Thread-26781] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] client lang: <none>
2025-11-13T02:16:10.673 [DEBUG] [Thread-26781] [transport.py] [_log()] server lang: <none>
2025-11-13T02:16:10.674 [DEBUG] [Thread-26781] [transport.py] [_log()] kex follows: False
2025-11-13T02:16:10.674 [DEBUG] [Thread-26781] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:16:10.674 [DEBUG] [Thread-26781] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:16:10.674 [DEBUG] [Thread-26781] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:16:10.674 [DEBUG] [Thread-26781] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:16:10.674 [DEBUG] [Thread-26781] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:16:10.674 [DEBUG] [Thread-26781] [transport.py] [_log()] Compression: none
2025-11-13T02:16:10.674 [DEBUG] [Thread-26781] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:16:10.690 [DEBUG] [Thread-26781] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:16:10.691 [DEBUG] [Thread-26781] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:16:10.692 [DEBUG] [Thread-26781] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:16:10.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:16:10.692 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:16:10.694 [DEBUG] [Thread-26781] [transport.py] [_log()] userauth is OK
2025-11-13T02:16:10.694 [DEBUG] [Thread-26781] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:16:10.694 [DEBUG] [Thread-26781] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:16:10.694 [DEBUG] [Thread-26781] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:16:10.694 [DEBUG] [Thread-26781] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:16:10.718 [INFO] [Thread-26781] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:16:10.718 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:16:11.380 [DEBUG] [Thread-26781] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:16:11.380 [DEBUG] [Thread-26781] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:16:11.380 [DEBUG] [Thread-26781] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:16:11.421 [DEBUG] [Thread-26781] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:16:11.421 [DEBUG] [Thread-26781] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:16:11.425 [DEBUG] [Thread-26781] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:16:11.437 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:16:11.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:16:11.439 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:16:11.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:16:11.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:16:11.448 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:16:11.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:16:11.449 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:16:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:16:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.010855 -999.00  +14.70  13.93     52   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 9.5 13.9 276.0 16.1 15.0 -24.9 14.8 -23.7 14.6 -23.5 14.9 -24.3
2025-11-13T02:16:11.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:16:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:16:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.010855
2025-11-13T02:16:11.450 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:16:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:16:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:16:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:16:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:16:11.451 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:15:28', tmtdew=10.87, humidity=48.01, cloud=0.0, wind=16.45, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:16:00', seeing=0.95, atlas_timestamp='2025-11-13T00:15:37.872', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:13:00')
2025-11-13T02:16:11.451 [DEBUG] [Thread-26781] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:16:11.534 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:16:11.547 [DEBUG] [Thread-26784] [transport.py] [_log()] starting thread (client mode): 0x14988220
2025-11-13T02:16:11.547 [DEBUG] [Thread-26784] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:16:11.561 [DEBUG] [Thread-26784] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:16:11.561 [INFO] [Thread-26784] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:16:11.569 [DEBUG] [Thread-26784] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:16:11.569 [DEBUG] [Thread-26784] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:16:11.569 [DEBUG] [Thread-26784] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] client lang: <none>
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] server lang: <none>
2025-11-13T02:16:11.570 [DEBUG] [Thread-26784] [transport.py] [_log()] kex follows: False
2025-11-13T02:16:11.571 [DEBUG] [Thread-26784] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:16:11.571 [DEBUG] [Thread-26784] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:16:11.571 [DEBUG] [Thread-26784] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:16:11.571 [DEBUG] [Thread-26784] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:16:11.571 [DEBUG] [Thread-26784] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:16:11.571 [DEBUG] [Thread-26784] [transport.py] [_log()] Compression: none
2025-11-13T02:16:11.571 [DEBUG] [Thread-26784] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:16:11.628 [DEBUG] [Thread-26784] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:16:11.629 [DEBUG] [Thread-26784] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:16:11.630 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:16:11.631 [DEBUG] [Thread-26784] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:16:11.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:16:11.688 [DEBUG] [Thread-26784] [transport.py] [_log()] userauth is OK
2025-11-13T02:16:11.688 [DEBUG] [Thread-26784] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:16:11.688 [DEBUG] [Thread-26784] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:16:11.688 [DEBUG] [Thread-26784] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:16:11.689 [DEBUG] [Thread-26784] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:16:11.707 [INFO] [Thread-26784] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:16:11.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:16:11.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:16:12.544 [DEBUG] [Thread-26784] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:16:12.544 [DEBUG] [Thread-26784] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:16:12.592 [DEBUG] [Thread-26784] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:16:12.592 [DEBUG] [Thread-26784] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:16:12.601 [DEBUG] [Thread-26784] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:16:12.610 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:16:12.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-11-13T02:16:12.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:16:12.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:16:12.629 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:16:12.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:16:12.637 [DEBUG] [Thread-26784] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:16:12.876 [DEBUG] [Thread-26786 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:16:20.226 [DEBUG] [Thread-26787 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:16:35.283 [DEBUG] [Thread-26788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:16:42.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:16:42.660 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:16:42.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-11-13T02:16:43.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 16, 32), 10.87, 48.03, 0.0, 15.26, 14.32, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:16:43.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:16:32
2025-11-13T02:16:43.428 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:16:43.574 [DEBUG] [Thread-26789] [transport.py] [_log()] starting thread (client mode): 0x14946290
2025-11-13T02:16:43.575 [DEBUG] [Thread-26789] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:16:43.591 [DEBUG] [Thread-26789] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:16:43.591 [INFO] [Thread-26789] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] client lang: <none>
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] server lang: <none>
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] kex follows: False
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] Compression: none
2025-11-13T02:16:43.592 [DEBUG] [Thread-26789] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:16:43.607 [DEBUG] [Thread-26789] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:16:43.607 [DEBUG] [Thread-26789] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:16:43.608 [DEBUG] [Thread-26789] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:16:43.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:16:43.608 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:16:43.609 [DEBUG] [Thread-26789] [transport.py] [_log()] userauth is OK
2025-11-13T02:16:43.609 [DEBUG] [Thread-26789] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:16:43.610 [DEBUG] [Thread-26789] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:16:43.610 [DEBUG] [Thread-26789] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:16:43.610 [DEBUG] [Thread-26789] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:16:43.628 [INFO] [Thread-26789] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:16:43.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:16:44.279 [DEBUG] [Thread-26789] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:16:44.280 [DEBUG] [Thread-26789] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:16:44.280 [DEBUG] [Thread-26789] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:16:44.321 [DEBUG] [Thread-26789] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:16:44.321 [DEBUG] [Thread-26789] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:16:44.324 [DEBUG] [Thread-26789] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:16:44.337 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:16:44.337 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:16:44.339 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:16:44.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:16:44.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:16:44.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:16:44.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:16:44.347 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:16:44.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:16:44.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.011202 -999.00  +14.60  15.44     51   +4.80 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.8 15.4 279.0 17.2 14.9 -24.8 14.8 -23.8 14.5 -23.4 14.9 -24.1
2025-11-13T02:16:44.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:16:44.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:16:44.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.011202
2025-11-13T02:16:44.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:16:44.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:16:44.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:16:44.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:16:44.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:16:44.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:16:32', tmtdew=10.87, humidity=48.03, cloud=0.0, wind=15.26, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:16:32', seeing=0.9, atlas_timestamp='2025-11-13T00:16:07.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:13:00')
2025-11-13T02:16:44.350 [DEBUG] [Thread-26789] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:16:44.433 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:16:44.445 [DEBUG] [Thread-26792] [transport.py] [_log()] starting thread (client mode): 0x11f03a60
2025-11-13T02:16:44.445 [DEBUG] [Thread-26792] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:16:44.461 [DEBUG] [Thread-26792] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:16:44.462 [INFO] [Thread-26792] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:16:44.469 [DEBUG] [Thread-26792] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:16:44.469 [DEBUG] [Thread-26792] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:16:44.469 [DEBUG] [Thread-26792] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:16:44.470 [DEBUG] [Thread-26792] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:16:44.470 [DEBUG] [Thread-26792] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:16:44.470 [DEBUG] [Thread-26792] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:16:44.470 [DEBUG] [Thread-26792] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:16:44.470 [DEBUG] [Thread-26792] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:16:44.470 [DEBUG] [Thread-26792] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:16:44.470 [DEBUG] [Thread-26792] [transport.py] [_log()] client lang: <none>
2025-11-13T02:16:44.470 [DEBUG] [Thread-26792] [transport.py] [_log()] server lang: <none>
2025-11-13T02:16:44.471 [DEBUG] [Thread-26792] [transport.py] [_log()] kex follows: False
2025-11-13T02:16:44.471 [DEBUG] [Thread-26792] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:16:44.471 [DEBUG] [Thread-26792] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:16:44.471 [DEBUG] [Thread-26792] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:16:44.471 [DEBUG] [Thread-26792] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:16:44.471 [DEBUG] [Thread-26792] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:16:44.471 [DEBUG] [Thread-26792] [transport.py] [_log()] Compression: none
2025-11-13T02:16:44.471 [DEBUG] [Thread-26792] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:16:44.528 [DEBUG] [Thread-26792] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:16:44.529 [DEBUG] [Thread-26792] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:16:44.530 [DEBUG] [Thread-26792] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:16:44.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:16:44.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:16:44.588 [DEBUG] [Thread-26792] [transport.py] [_log()] userauth is OK
2025-11-13T02:16:44.588 [DEBUG] [Thread-26792] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:16:44.588 [DEBUG] [Thread-26792] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:16:44.588 [DEBUG] [Thread-26792] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:16:44.589 [DEBUG] [Thread-26792] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:16:44.612 [INFO] [Thread-26792] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:16:44.612 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:16:44.613 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:16:45.434 [DEBUG] [Thread-26792] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:16:45.434 [DEBUG] [Thread-26792] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:16:45.482 [DEBUG] [Thread-26792] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:16:45.482 [DEBUG] [Thread-26792] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:16:45.491 [DEBUG] [Thread-26792] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:16:45.500 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:16:45.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-11-13T02:16:45.510 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:16:45.519 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:16:45.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:16:45.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:16:45.528 [DEBUG] [Thread-26792] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:16:48.004 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:16:48.005 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:16:50.320 [DEBUG] [Thread-26794 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:17:05.368 [DEBUG] [Thread-26795 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:17:12.933 [DEBUG] [Thread-26796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:17:15.550 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:17:15.550 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:17:15.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-11-13T02:17:16.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 17, 4), 10.86, 48.06, 0.0, 16.25, 14.32, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:17:16.211 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:17:04
2025-11-13T02:17:16.334 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:17:16.482 [DEBUG] [Thread-26797] [transport.py] [_log()] starting thread (client mode): 0x149886d0
2025-11-13T02:17:16.482 [DEBUG] [Thread-26797] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:17:16.504 [DEBUG] [Thread-26797] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:17:16.504 [INFO] [Thread-26797] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:17:16.507 [DEBUG] [Thread-26797] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:17:16.507 [DEBUG] [Thread-26797] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:17:16.507 [DEBUG] [Thread-26797] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:17:16.507 [DEBUG] [Thread-26797] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] client lang: <none>
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] server lang: <none>
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] kex follows: False
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] Compression: none
2025-11-13T02:17:16.508 [DEBUG] [Thread-26797] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:17:16.525 [DEBUG] [Thread-26797] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:17:16.525 [DEBUG] [Thread-26797] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:17:16.526 [DEBUG] [Thread-26797] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:17:16.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:17:16.526 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:17:16.528 [DEBUG] [Thread-26797] [transport.py] [_log()] userauth is OK
2025-11-13T02:17:16.528 [DEBUG] [Thread-26797] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:17:16.528 [DEBUG] [Thread-26797] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:17:16.528 [DEBUG] [Thread-26797] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:17:16.528 [DEBUG] [Thread-26797] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:17:16.550 [INFO] [Thread-26797] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:17:16.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:17:17.143 [DEBUG] [Thread-26797] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:17:17.143 [DEBUG] [Thread-26797] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:17:17.143 [DEBUG] [Thread-26797] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:17:17.184 [DEBUG] [Thread-26797] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:17:17.184 [DEBUG] [Thread-26797] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:17:17.187 [DEBUG] [Thread-26797] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:17:17.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:17:17.200 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:17:17.202 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:17:17.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:17:17.210 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:17:17.213 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:17:17.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:17:17.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:17:17.213 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:17:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.011896 -999.00  +14.60  10.71     52   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.3 10.7 277.8 16.2 14.9 -24.7 14.8 -23.8 14.5 -23.5 14.8 -24.3
2025-11-13T02:17:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:17:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:17:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.011896
2025-11-13T02:17:17.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:17:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:17:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:17:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:17:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:17:17.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:17:04', tmtdew=10.86, humidity=48.06, cloud=0.0, wind=16.25, temperature=14.32, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:17:04', seeing=1.08, atlas_timestamp='2025-11-13T00:17:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:13:00')
2025-11-13T02:17:17.216 [DEBUG] [Thread-26797] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:17:17.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:17:17.311 [DEBUG] [Thread-26800] [transport.py] [_log()] starting thread (client mode): 0x149896f0
2025-11-13T02:17:17.311 [DEBUG] [Thread-26800] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:17:17.326 [DEBUG] [Thread-26800] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:17:17.326 [INFO] [Thread-26800] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:17:17.333 [DEBUG] [Thread-26800] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:17:17.333 [DEBUG] [Thread-26800] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:17:17.334 [DEBUG] [Thread-26800] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:17:17.334 [DEBUG] [Thread-26800] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:17:17.334 [DEBUG] [Thread-26800] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:17:17.334 [DEBUG] [Thread-26800] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:17:17.334 [DEBUG] [Thread-26800] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:17:17.334 [DEBUG] [Thread-26800] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:17:17.334 [DEBUG] [Thread-26800] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:17:17.334 [DEBUG] [Thread-26800] [transport.py] [_log()] client lang: <none>
2025-11-13T02:17:17.335 [DEBUG] [Thread-26800] [transport.py] [_log()] server lang: <none>
2025-11-13T02:17:17.335 [DEBUG] [Thread-26800] [transport.py] [_log()] kex follows: False
2025-11-13T02:17:17.335 [DEBUG] [Thread-26800] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:17:17.335 [DEBUG] [Thread-26800] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:17:17.335 [DEBUG] [Thread-26800] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:17:17.335 [DEBUG] [Thread-26800] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:17:17.335 [DEBUG] [Thread-26800] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:17:17.336 [DEBUG] [Thread-26800] [transport.py] [_log()] Compression: none
2025-11-13T02:17:17.336 [DEBUG] [Thread-26800] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:17:17.395 [DEBUG] [Thread-26800] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:17:17.395 [DEBUG] [Thread-26800] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:17:17.396 [DEBUG] [Thread-26800] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:17:17.396 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:17:17.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:17:17.451 [DEBUG] [Thread-26800] [transport.py] [_log()] userauth is OK
2025-11-13T02:17:17.451 [DEBUG] [Thread-26800] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:17:17.452 [DEBUG] [Thread-26800] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:17:17.452 [DEBUG] [Thread-26800] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:17:17.452 [DEBUG] [Thread-26800] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:17:17.476 [INFO] [Thread-26800] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:17:17.477 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:17:17.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:17:18.329 [DEBUG] [Thread-26800] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:17:18.329 [DEBUG] [Thread-26800] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:17:18.377 [DEBUG] [Thread-26800] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:17:18.377 [DEBUG] [Thread-26800] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:17:18.386 [DEBUG] [Thread-26800] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:17:18.395 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:17:18.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-11-13T02:17:18.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-11-13T02:17:18.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:17:18.414 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:17:18.414 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:17:18.422 [DEBUG] [Thread-26800] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:17:20.401 [DEBUG] [Thread-26802 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:17:35.456 [DEBUG] [Thread-26803 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:17:48.238 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:17:48.239 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:17:48.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:17:48.434 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:17:48.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-11-13T02:17:49.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 17, 36), 10.84, 48.13, 0.0, 16.59, 14.29, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:17:49.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:17:36
2025-11-13T02:17:49.219 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:17:49.364 [DEBUG] [Thread-26804] [transport.py] [_log()] starting thread (client mode): 0x14945060
2025-11-13T02:17:49.364 [DEBUG] [Thread-26804] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:17:49.384 [DEBUG] [Thread-26804] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:17:49.384 [INFO] [Thread-26804] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:17:49.387 [DEBUG] [Thread-26804] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:17:49.387 [DEBUG] [Thread-26804] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] client lang: <none>
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] server lang: <none>
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] kex follows: False
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] Compression: none
2025-11-13T02:17:49.388 [DEBUG] [Thread-26804] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:17:49.405 [DEBUG] [Thread-26804] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:17:49.406 [DEBUG] [Thread-26804] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:17:49.406 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:17:49.407 [DEBUG] [Thread-26804] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:17:49.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:17:49.409 [DEBUG] [Thread-26804] [transport.py] [_log()] userauth is OK
2025-11-13T02:17:49.409 [DEBUG] [Thread-26804] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:17:49.409 [DEBUG] [Thread-26804] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:17:49.409 [DEBUG] [Thread-26804] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:17:49.409 [DEBUG] [Thread-26804] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:17:49.434 [INFO] [Thread-26804] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:17:49.435 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:17:50.067 [DEBUG] [Thread-26804] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:17:50.067 [DEBUG] [Thread-26804] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:17:50.067 [DEBUG] [Thread-26804] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:17:50.107 [DEBUG] [Thread-26804] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:17:50.108 [DEBUG] [Thread-26804] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:17:50.111 [DEBUG] [Thread-26804] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:17:50.122 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:17:50.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:17:50.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:17:50.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:17:50.132 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:17:50.134 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:17:50.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:17:50.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:17:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:17:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.012244 -999.00  +14.60  11.27     52   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 16.3 11.3 282.8 14.7 14.9 -24.7 14.8 -23.9 14.5 -23.0 14.8 -24.1
2025-11-13T02:17:50.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:17:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:17:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.012244
2025-11-13T02:17:50.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:17:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:17:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:17:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:17:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:17:50.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:17:36', tmtdew=10.84, humidity=48.13, cloud=0.0, wind=16.59, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:17:36', seeing=1.08, atlas_timestamp='2025-11-13T00:17:37.882', atlas_cloud=1, atlas_rain=1, zp_data=[0.0012499999999988631, 0.01025000000000098, 0.060249999999999915, 0.08499999999999908, 0.03850000000000087, 0.09825000000000017, 0.03250000000000064, -0.0467499999999994, 0.05549999999999855, 0.0470000000000006, 0.07474999999999987, 0.039499999999998536, 0.08799999999999919, 0.04875000000000007, 0.042500000000000426, -0.02050000000000196, 0.024750000000000938, 0.0495000000000001, 0.12700000000000067, 0.07774999999999821, 0.09999999999999787, 0.040249999999998565, 0.03825000000000145, 0.00575000000000081, 0.045999999999999375, 0.1014999999999997, 0.10075000000000145, 0.15649999999999942, 0.14400000000000013, 0.08650000000000091, 0.11200000000000188, 0.02800000000000047, 0.0037499999999983658], zp_timestamp='2025-11-13T00:13:00')
2025-11-13T02:17:50.137 [DEBUG] [Thread-26804] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:17:50.221 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:17:50.232 [DEBUG] [Thread-26807] [transport.py] [_log()] starting thread (client mode): 0x14944d90
2025-11-13T02:17:50.233 [DEBUG] [Thread-26807] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:17:50.248 [DEBUG] [Thread-26807] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:17:50.248 [INFO] [Thread-26807] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:17:50.255 [DEBUG] [Thread-26807] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:17:50.255 [DEBUG] [Thread-26807] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] client lang: <none>
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] server lang: <none>
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] kex follows: False
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:17:50.256 [DEBUG] [Thread-26807] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:17:50.257 [DEBUG] [Thread-26807] [transport.py] [_log()] Compression: none
2025-11-13T02:17:50.257 [DEBUG] [Thread-26807] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:17:50.315 [DEBUG] [Thread-26807] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:17:50.315 [DEBUG] [Thread-26807] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:17:50.316 [DEBUG] [Thread-26807] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:17:50.316 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:17:50.317 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:17:50.371 [DEBUG] [Thread-26807] [transport.py] [_log()] userauth is OK
2025-11-13T02:17:50.371 [DEBUG] [Thread-26807] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:17:50.371 [DEBUG] [Thread-26807] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:17:50.371 [DEBUG] [Thread-26807] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:17:50.372 [DEBUG] [Thread-26807] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:17:50.391 [INFO] [Thread-26807] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:17:50.392 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:17:50.392 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:17:50.493 [DEBUG] [Thread-26809 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:17:51.237 [DEBUG] [Thread-26807] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:17:51.237 [DEBUG] [Thread-26807] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:17:51.286 [DEBUG] [Thread-26807] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:17:51.286 [DEBUG] [Thread-26807] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:17:51.295 [DEBUG] [Thread-26807] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:17:51.304 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:17:51.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-11-13T02:17:51.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-11-13T02:17:51.322 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:17:51.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:17:51.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:17:51.331 [DEBUG] [Thread-26807] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:18:05.558 [DEBUG] [Thread-26810 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:18:13.003 [DEBUG] [Thread-26811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:18:20.593 [DEBUG] [Thread-26812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:18:21.353 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:18:21.354 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:18:21.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-11-13T02:18:22.049 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 18, 7), 10.81, 48.23, 0.0, 16.48, 14.31, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:18:22.050 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:18:07
2025-11-13T02:18:22.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:18:22.329 [DEBUG] [Thread-26813] [transport.py] [_log()] starting thread (client mode): 0x19dd99f0
2025-11-13T02:18:22.329 [DEBUG] [Thread-26813] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:18:22.344 [DEBUG] [Thread-26813] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:18:22.344 [INFO] [Thread-26813] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] client lang: <none>
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] server lang: <none>
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] kex follows: False
2025-11-13T02:18:22.345 [DEBUG] [Thread-26813] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:18:22.346 [DEBUG] [Thread-26813] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:18:22.346 [DEBUG] [Thread-26813] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:18:22.346 [DEBUG] [Thread-26813] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:18:22.346 [DEBUG] [Thread-26813] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:18:22.346 [DEBUG] [Thread-26813] [transport.py] [_log()] Compression: none
2025-11-13T02:18:22.346 [DEBUG] [Thread-26813] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:18:22.354 [DEBUG] [Thread-26813] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:18:22.354 [DEBUG] [Thread-26813] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:18:22.355 [DEBUG] [Thread-26813] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:18:22.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:18:22.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:18:22.355 [DEBUG] [Thread-26813] [transport.py] [_log()] userauth is OK
2025-11-13T02:18:22.355 [DEBUG] [Thread-26813] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:18:22.355 [DEBUG] [Thread-26813] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:18:22.355 [DEBUG] [Thread-26813] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:18:22.355 [DEBUG] [Thread-26813] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:18:22.365 [INFO] [Thread-26813] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:18:22.365 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:18:22.995 [DEBUG] [Thread-26813] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:18:22.995 [DEBUG] [Thread-26813] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:18:22.995 [DEBUG] [Thread-26813] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:18:23.036 [DEBUG] [Thread-26813] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:18:23.037 [DEBUG] [Thread-26813] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:18:23.040 [DEBUG] [Thread-26813] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:18:23.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:18:23.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:18:23.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:18:23.056 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:18:23.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:18:23.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:18:23.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:18:23.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:18:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:18:23.063 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.012591 -999.00  +14.60   9.63     52   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.0 9.6 278.4 18.9 14.9 -24.9 14.8 -23.8 14.6 -23.5 14.8 -24.3
2025-11-13T02:18:23.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:18:23.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:18:23.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.012591
2025-11-13T02:18:23.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:18:23.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:18:23.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:18:23.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:18:23.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:18:23.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:18:07', tmtdew=10.81, humidity=48.23, cloud=0.0, wind=16.48, temperature=14.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:18:08', seeing=1.01, atlas_timestamp='2025-11-13T00:18:07.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.012249999999999872, 0.08175000000000132, 0.022499999999999076, 0.05749999999999922, 0.08825000000000216, 0.04800000000000004, 0.025750000000000384, 0.022499999999999076, 0.03200000000000003, 0.07124999999999915, 0.06199999999999939, 0.11299999999999955, 0.0832499999999996, 0.0019999999999988916, -0.021000000000000796, 0.024250000000000327, 0.07099999999999973, 0.09999999999999964, 0.06324999999999825, 0.09899999999999842, 0.08124999999999893, 0.02325000000000088, 0.024750000000000938, 0.04049999999999976, 0.05649999999999977, 0.10875000000000057, 0.1875, 0.14450000000000074, 0.08500000000000085, 0.11150000000000126, 0.030000000000001137, -0.0032500000000013074], zp_timestamp='2025-11-13T00:17:00')
2025-11-13T02:18:23.065 [DEBUG] [Thread-26813] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:18:23.142 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:18:23.154 [DEBUG] [Thread-26816] [transport.py] [_log()] starting thread (client mode): 0x14980e50
2025-11-13T02:18:23.154 [DEBUG] [Thread-26816] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:18:23.168 [DEBUG] [Thread-26816] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:18:23.169 [INFO] [Thread-26816] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:18:23.176 [DEBUG] [Thread-26816] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:18:23.176 [DEBUG] [Thread-26816] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:18:23.176 [DEBUG] [Thread-26816] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:18:23.176 [DEBUG] [Thread-26816] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] client lang: <none>
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] server lang: <none>
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] kex follows: False
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:18:23.177 [DEBUG] [Thread-26816] [transport.py] [_log()] Compression: none
2025-11-13T02:18:23.178 [DEBUG] [Thread-26816] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:18:23.235 [DEBUG] [Thread-26816] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:18:23.235 [DEBUG] [Thread-26816] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:18:23.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:18:23.236 [DEBUG] [Thread-26816] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:18:23.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:18:23.291 [DEBUG] [Thread-26816] [transport.py] [_log()] userauth is OK
2025-11-13T02:18:23.292 [DEBUG] [Thread-26816] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:18:23.292 [DEBUG] [Thread-26816] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:18:23.292 [DEBUG] [Thread-26816] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:18:23.292 [DEBUG] [Thread-26816] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:18:23.310 [INFO] [Thread-26816] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:18:23.311 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:18:23.311 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:18:24.153 [DEBUG] [Thread-26816] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:18:24.154 [DEBUG] [Thread-26816] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:18:24.201 [DEBUG] [Thread-26816] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:18:24.202 [DEBUG] [Thread-26816] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:18:24.210 [DEBUG] [Thread-26816] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:18:24.220 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:18:24.220 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:18:24.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-11-13T02:18:24.238 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:18:24.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:18:24.239 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:18:24.247 [DEBUG] [Thread-26816] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:18:35.625 [DEBUG] [Thread-26818 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:18:48.447 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:18:48.448 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:18:50.689 [DEBUG] [Thread-26819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:18:54.241 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:18:54.242 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:18:54.254 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:18:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 18, 39), 10.86, 47.73, 0.0, 16.2, 14.36, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:18:54.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:18:39
2025-11-13T02:18:55.037 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:18:55.182 [DEBUG] [Thread-26820] [transport.py] [_log()] starting thread (client mode): 0x19dda5f0
2025-11-13T02:18:55.182 [DEBUG] [Thread-26820] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:18:55.201 [DEBUG] [Thread-26820] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:18:55.201 [INFO] [Thread-26820] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:18:55.204 [DEBUG] [Thread-26820] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:18:55.204 [DEBUG] [Thread-26820] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:18:55.204 [DEBUG] [Thread-26820] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:18:55.204 [DEBUG] [Thread-26820] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:18:55.204 [DEBUG] [Thread-26820] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] client lang: <none>
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] server lang: <none>
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] kex follows: False
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] Compression: none
2025-11-13T02:18:55.205 [DEBUG] [Thread-26820] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:18:55.223 [DEBUG] [Thread-26820] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:18:55.224 [DEBUG] [Thread-26820] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:18:55.224 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:18:55.225 [DEBUG] [Thread-26820] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:18:55.225 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:18:55.227 [DEBUG] [Thread-26820] [transport.py] [_log()] userauth is OK
2025-11-13T02:18:55.227 [DEBUG] [Thread-26820] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:18:55.227 [DEBUG] [Thread-26820] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:18:55.227 [DEBUG] [Thread-26820] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:18:55.227 [DEBUG] [Thread-26820] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:18:55.244 [INFO] [Thread-26820] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:18:55.244 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:18:55.845 [DEBUG] [Thread-26820] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:18:55.845 [DEBUG] [Thread-26820] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:18:55.845 [DEBUG] [Thread-26820] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:18:55.886 [DEBUG] [Thread-26820] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:18:55.886 [DEBUG] [Thread-26820] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:18:55.888 [DEBUG] [Thread-26820] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:18:55.899 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:18:55.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:18:55.900 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:18:55.901 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:18:55.903 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:18:55.903 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:18:55.903 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:18:55.903 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.012938 -999.00  +14.60  14.93     52   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.7 14.9 280.6 17.5 14.9 -24.8 14.7 -23.9 14.6 -23.7 14.8 -24.4
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.012938
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:18:55.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:18:39', tmtdew=10.86, humidity=47.73, cloud=0.0, wind=16.2, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:18:40', seeing=1.01, atlas_timestamp='2025-11-13T00:18:37.843', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.012249999999999872, 0.08175000000000132, 0.022499999999999076, 0.05749999999999922, 0.08825000000000216, 0.04800000000000004, 0.025750000000000384, 0.022499999999999076, 0.03200000000000003, 0.07124999999999915, 0.06199999999999939, 0.11299999999999955, 0.0832499999999996, 0.0019999999999988916, -0.021000000000000796, 0.024250000000000327, 0.07099999999999973, 0.09999999999999964, 0.06324999999999825, 0.09899999999999842, 0.08124999999999893, 0.02325000000000088, 0.024750000000000938, 0.04049999999999976, 0.05649999999999977, 0.10875000000000057, 0.1875, 0.14450000000000074, 0.08500000000000085, 0.11150000000000126, 0.030000000000001137, -0.0032500000000013074], zp_timestamp='2025-11-13T00:17:00')
2025-11-13T02:18:55.905 [DEBUG] [Thread-26820] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:18: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-11-13T02:18:55.989 [DEBUG] [Thread-26823] [transport.py] [_log()] starting thread (client mode): 0x14946620
2025-11-13T02:18:55.989 [DEBUG] [Thread-26823] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:18:56.004 [DEBUG] [Thread-26823] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:18:56.004 [INFO] [Thread-26823] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] client lang: <none>
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] server lang: <none>
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] kex follows: False
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:18:56.012 [DEBUG] [Thread-26823] [transport.py] [_log()] Compression: none
2025-11-13T02:18:56.013 [DEBUG] [Thread-26823] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:18:56.070 [DEBUG] [Thread-26823] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:18:56.070 [DEBUG] [Thread-26823] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:18:56.070 [DEBUG] [Thread-26823] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:18:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:18:56.070 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:18:56.126 [DEBUG] [Thread-26823] [transport.py] [_log()] userauth is OK
2025-11-13T02:18:56.126 [DEBUG] [Thread-26823] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:18:56.126 [DEBUG] [Thread-26823] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:18:56.126 [DEBUG] [Thread-26823] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:18:56.126 [DEBUG] [Thread-26823] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:18:56.140 [INFO] [Thread-26823] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:18:56.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:18:56.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:18:56.984 [DEBUG] [Thread-26823] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:18:56.984 [DEBUG] [Thread-26823] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:18:57.032 [DEBUG] [Thread-26823] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:18:57.032 [DEBUG] [Thread-26823] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:18:57.040 [DEBUG] [Thread-26823] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:18:57.048 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:18:57.049 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:18: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') -> 00000000
2025-11-13T02:18:57.064 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:18:57.064 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:18:57.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:18:57.072 [DEBUG] [Thread-26823] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:19:05.721 [DEBUG] [Thread-26825 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:19:13.055 [DEBUG] [Thread-26826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:19:20.773 [DEBUG] [Thread-26827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:19:27.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:19:27.075 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:19:27.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-11-13T02:19:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 19, 11), 10.89, 47.63, 0.0, 16.71, 14.41, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:19:27.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:19:11
2025-11-13T02:19:27.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:19:28.014 [DEBUG] [Thread-26828] [transport.py] [_log()] starting thread (client mode): 0x14947580
2025-11-13T02:19:28.014 [DEBUG] [Thread-26828] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:19:28.035 [DEBUG] [Thread-26828] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:19:28.035 [INFO] [Thread-26828] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:19:28.038 [DEBUG] [Thread-26828] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] client lang: <none>
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] server lang: <none>
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] kex follows: False
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] Compression: none
2025-11-13T02:19:28.039 [DEBUG] [Thread-26828] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:19:28.056 [DEBUG] [Thread-26828] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:19:28.056 [DEBUG] [Thread-26828] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:19:28.057 [DEBUG] [Thread-26828] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:19:28.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:19:28.057 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:19:28.059 [DEBUG] [Thread-26828] [transport.py] [_log()] userauth is OK
2025-11-13T02:19:28.059 [DEBUG] [Thread-26828] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:19:28.059 [DEBUG] [Thread-26828] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:19:28.059 [DEBUG] [Thread-26828] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:19:28.059 [DEBUG] [Thread-26828] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:19:28.083 [INFO] [Thread-26828] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:19:28.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:19:28.727 [DEBUG] [Thread-26828] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:19:28.727 [DEBUG] [Thread-26828] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:19:28.727 [DEBUG] [Thread-26828] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:19:28.767 [DEBUG] [Thread-26828] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:19:28.767 [DEBUG] [Thread-26828] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:19:28.770 [DEBUG] [Thread-26828] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:19:28.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:19:28.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:19:28.776 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:19:28.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:19:28.783 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:19:28.784 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:19:28.784 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:19:28.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:19:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:19:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.012938 -999.00  +14.60  14.93     52   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.7 14.9 280.6 17.5 14.9 -24.8 14.7 -23.9 14.6 -23.7 14.8 -24.4
2025-11-13T02:19:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:19:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:19:28.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.012938
2025-11-13T02:19:28.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:19:28.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:19:28.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:19:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:19:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:19:28.787 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:19:11', tmtdew=10.89, humidity=47.63, cloud=0.0, wind=16.71, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:19:12', seeing=0.92, atlas_timestamp='2025-11-13T00:18:37.843', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.012249999999999872, 0.08175000000000132, 0.022499999999999076, 0.05749999999999922, 0.08825000000000216, 0.04800000000000004, 0.025750000000000384, 0.022499999999999076, 0.03200000000000003, 0.07124999999999915, 0.06199999999999939, 0.11299999999999955, 0.0832499999999996, 0.0019999999999988916, -0.021000000000000796, 0.024250000000000327, 0.07099999999999973, 0.09999999999999964, 0.06324999999999825, 0.09899999999999842, 0.08124999999999893, 0.02325000000000088, 0.024750000000000938, 0.04049999999999976, 0.05649999999999977, 0.10875000000000057, 0.1875, 0.14450000000000074, 0.08500000000000085, 0.11150000000000126, 0.030000000000001137, -0.0032500000000013074], zp_timestamp='2025-11-13T00:17:00')
2025-11-13T02:19:28.787 [DEBUG] [Thread-26828] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:19:28.871 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:19:28.882 [DEBUG] [Thread-26831] [transport.py] [_log()] starting thread (client mode): 0x14989f60
2025-11-13T02:19:28.882 [DEBUG] [Thread-26831] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:19:28.896 [DEBUG] [Thread-26831] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:19:28.896 [INFO] [Thread-26831] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:19:28.904 [DEBUG] [Thread-26831] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:19:28.904 [DEBUG] [Thread-26831] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:19:28.904 [DEBUG] [Thread-26831] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:19:28.904 [DEBUG] [Thread-26831] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] client lang: <none>
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] server lang: <none>
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] kex follows: False
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] Compression: none
2025-11-13T02:19:28.905 [DEBUG] [Thread-26831] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:19:28.968 [DEBUG] [Thread-26831] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:19:28.969 [DEBUG] [Thread-26831] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:19:28.969 [DEBUG] [Thread-26831] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:19:28.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:19:28.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:19:29.030 [DEBUG] [Thread-26831] [transport.py] [_log()] userauth is OK
2025-11-13T02:19:29.030 [DEBUG] [Thread-26831] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:19:29.030 [DEBUG] [Thread-26831] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:19:29.030 [DEBUG] [Thread-26831] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:19:29.031 [DEBUG] [Thread-26831] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:19:29.051 [INFO] [Thread-26831] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:19:29.051 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:19:29.052 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:19:29.849 [DEBUG] [Thread-26831] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:19:29.849 [DEBUG] [Thread-26831] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:19:29.897 [DEBUG] [Thread-26831] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:19:29.897 [DEBUG] [Thread-26831] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:19:29.905 [DEBUG] [Thread-26831] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:19:29.913 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:19:29.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-11-13T02:19:29.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-11-13T02:19:29.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:19:29.929 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:19:29.929 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:19:29.937 [DEBUG] [Thread-26831] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:19:35.806 [DEBUG] [Thread-26833 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:19:48.654 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:19:48.655 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:19:50.848 [DEBUG] [Thread-26834 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:19:59.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:19:59.931 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:19:59.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-11-13T02:20:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 19, 43), 10.81, 48.21, 0.0, 16.55, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:20:00.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:19:43
2025-11-13T02:20:00.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:20:00.852 [DEBUG] [Thread-26835] [transport.py] [_log()] starting thread (client mode): 0x19dda500
2025-11-13T02:20:00.852 [DEBUG] [Thread-26835] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:20:00.872 [DEBUG] [Thread-26835] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:20:00.872 [INFO] [Thread-26835] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:20:00.876 [DEBUG] [Thread-26835] [transport.py] [_log()] client lang: <none>
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] server lang: <none>
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] kex follows: False
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] Compression: none
2025-11-13T02:20:00.877 [DEBUG] [Thread-26835] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:20:00.896 [DEBUG] [Thread-26835] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:20:00.897 [DEBUG] [Thread-26835] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:20:00.897 [DEBUG] [Thread-26835] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:20:00.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:20:00.898 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:20:00.899 [DEBUG] [Thread-26835] [transport.py] [_log()] userauth is OK
2025-11-13T02:20:00.899 [DEBUG] [Thread-26835] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:20:00.899 [DEBUG] [Thread-26835] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:20:00.899 [DEBUG] [Thread-26835] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:20:00.899 [DEBUG] [Thread-26835] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:20:00.920 [INFO] [Thread-26835] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:20:00.921 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:20:01.747 [DEBUG] [Thread-26835] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:20:01.747 [DEBUG] [Thread-26835] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:20:01.747 [DEBUG] [Thread-26835] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:20:01.789 [DEBUG] [Thread-26835] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:20:01.789 [DEBUG] [Thread-26835] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:20:01.791 [DEBUG] [Thread-26835] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:20:01.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:20:01.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:20:01.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:20:01.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:20:01.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:20:01.807 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:20:01.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:20:01.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:20:01.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:20:01.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.013285 -999.00  +14.60  13.88     52   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.2 13.9 274.4 17.9 14.9 -25.0 14.8 -24.0 14.5 -23.6 14.8 -24.4
2025-11-13T02:20:01.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:20:01.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:20:01.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.013285
2025-11-13T02:20:01.807 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:20:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:20:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:20:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:20:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:20:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:19:43', tmtdew=10.81, humidity=48.21, cloud=0.0, wind=16.55, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:19:44', seeing=0.8, atlas_timestamp='2025-11-13T00:19:07.824', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.012249999999999872, 0.08175000000000132, 0.022499999999999076, 0.05749999999999922, 0.08825000000000216, 0.04800000000000004, 0.025750000000000384, 0.022499999999999076, 0.03200000000000003, 0.07124999999999915, 0.06199999999999939, 0.11299999999999955, 0.0832499999999996, 0.0019999999999988916, -0.021000000000000796, 0.024250000000000327, 0.07099999999999973, 0.09999999999999964, 0.06324999999999825, 0.09899999999999842, 0.08124999999999893, 0.02325000000000088, 0.024750000000000938, 0.04049999999999976, 0.05649999999999977, 0.10875000000000057, 0.1875, 0.14450000000000074, 0.08500000000000085, 0.11150000000000126, 0.030000000000001137, -0.0032500000000013074], zp_timestamp='2025-11-13T00:17:00')
2025-11-13T02:20:01.808 [DEBUG] [Thread-26835] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:20:01.882 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:20:01.893 [DEBUG] [Thread-26838] [transport.py] [_log()] starting thread (client mode): 0x19dd9480
2025-11-13T02:20:01.893 [DEBUG] [Thread-26838] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:20:01.907 [DEBUG] [Thread-26838] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:20:01.907 [INFO] [Thread-26838] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:20:01.914 [DEBUG] [Thread-26838] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:20:01.914 [DEBUG] [Thread-26838] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:20:01.914 [DEBUG] [Thread-26838] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:20:01.914 [DEBUG] [Thread-26838] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] client lang: <none>
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] server lang: <none>
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] kex follows: False
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] Compression: none
2025-11-13T02:20:01.915 [DEBUG] [Thread-26838] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:20:01.974 [DEBUG] [Thread-26838] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:20:01.974 [DEBUG] [Thread-26838] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:20:01.975 [DEBUG] [Thread-26838] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:20:01.975 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:20:01.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:20:02.031 [DEBUG] [Thread-26838] [transport.py] [_log()] userauth is OK
2025-11-13T02:20:02.031 [DEBUG] [Thread-26838] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:20:02.031 [DEBUG] [Thread-26838] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:20:02.031 [DEBUG] [Thread-26838] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:20:02.031 [DEBUG] [Thread-26838] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:20:02.065 [INFO] [Thread-26838] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:20:02.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:20:02.069 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:20:02.883 [DEBUG] [Thread-26838] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:20:02.884 [DEBUG] [Thread-26838] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:20:02.931 [DEBUG] [Thread-26838] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:20:02.931 [DEBUG] [Thread-26838] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:20:02.940 [DEBUG] [Thread-26838] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:20:02.949 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:20:02.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-11-13T02:20:02.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-11-13T02:20:02.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:20:02.966 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:20:02.967 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:20:02.974 [DEBUG] [Thread-26838] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:20:05.885 [DEBUG] [Thread-26840 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:20:13.107 [DEBUG] [Thread-26841 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:20:20.936 [DEBUG] [Thread-26842 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:20:32.997 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:20:32.997 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:20:32.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-11-13T02:20:33.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 20, 15), 10.8, 48.28, 0.0, 16.41, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:20:33.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:20:15
2025-11-13T02:20:33.783 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:20:33.928 [DEBUG] [Thread-26843] [transport.py] [_log()] starting thread (client mode): 0x14923850
2025-11-13T02:20:33.928 [DEBUG] [Thread-26843] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:20:33.948 [DEBUG] [Thread-26843] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:20:33.948 [INFO] [Thread-26843] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:20:33.951 [DEBUG] [Thread-26843] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:20:33.951 [DEBUG] [Thread-26843] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:20:33.951 [DEBUG] [Thread-26843] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] client lang: <none>
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] server lang: <none>
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] kex follows: False
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] Compression: none
2025-11-13T02:20:33.952 [DEBUG] [Thread-26843] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:20:33.969 [DEBUG] [Thread-26843] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:20:33.970 [DEBUG] [Thread-26843] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:20:33.970 [DEBUG] [Thread-26843] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:20:33.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:20:33.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:20:33.972 [DEBUG] [Thread-26843] [transport.py] [_log()] userauth is OK
2025-11-13T02:20:33.973 [DEBUG] [Thread-26843] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:20:33.973 [DEBUG] [Thread-26843] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:20:33.973 [DEBUG] [Thread-26843] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:20:33.973 [DEBUG] [Thread-26843] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:20:33.998 [INFO] [Thread-26843] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:20:33.999 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:20:34.647 [DEBUG] [Thread-26843] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:20:34.647 [DEBUG] [Thread-26843] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:20:34.647 [DEBUG] [Thread-26843] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:20:34.687 [DEBUG] [Thread-26843] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:20:34.688 [DEBUG] [Thread-26843] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:20:34.691 [DEBUG] [Thread-26843] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:20:34.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:20:34.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:20:34.704 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:20:34.706 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:20:34.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:20:34.714 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:20:34.714 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:20:34.714 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:20:34.714 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:20:34.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.013632 -999.00  +14.50  13.41     52   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.1 13.4 274.4 17.5 14.8 -25.1 14.7 -24.2 14.5 -23.6 14.8 -24.4
2025-11-13T02:20:34.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:20:34.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:20:34.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.013632
2025-11-13T02:20:34.715 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:20:34.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:20:34.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:20:34.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:20:34.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:20:34.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:20:15', tmtdew=10.8, humidity=48.28, cloud=0.0, wind=16.41, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:20:16', seeing=0.98, atlas_timestamp='2025-11-13T00:19:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.012249999999999872, 0.08175000000000132, 0.022499999999999076, 0.05749999999999922, 0.08825000000000216, 0.04800000000000004, 0.025750000000000384, 0.022499999999999076, 0.03200000000000003, 0.07124999999999915, 0.06199999999999939, 0.11299999999999955, 0.0832499999999996, 0.0019999999999988916, -0.021000000000000796, 0.024250000000000327, 0.07099999999999973, 0.09999999999999964, 0.06324999999999825, 0.09899999999999842, 0.08124999999999893, 0.02325000000000088, 0.024750000000000938, 0.04049999999999976, 0.05649999999999977, 0.10875000000000057, 0.1875, 0.14450000000000074, 0.08500000000000085, 0.11150000000000126, 0.030000000000001137, -0.0032500000000013074], zp_timestamp='2025-11-13T00:17:00')
2025-11-13T02:20:34.717 [DEBUG] [Thread-26843] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:20:34.797 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:20:34.810 [DEBUG] [Thread-26846] [transport.py] [_log()] starting thread (client mode): 0x14921c60
2025-11-13T02:20:34.810 [DEBUG] [Thread-26846] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:20:34.825 [DEBUG] [Thread-26846] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:20:34.825 [INFO] [Thread-26846] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:20:34.832 [DEBUG] [Thread-26846] [transport.py] [_log()] client lang: <none>
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] server lang: <none>
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] kex follows: False
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] Compression: none
2025-11-13T02:20:34.833 [DEBUG] [Thread-26846] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:20:34.890 [DEBUG] [Thread-26846] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:20:34.891 [DEBUG] [Thread-26846] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:20:34.891 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:20:34.892 [DEBUG] [Thread-26846] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:20:34.893 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:20:34.946 [DEBUG] [Thread-26846] [transport.py] [_log()] userauth is OK
2025-11-13T02:20:34.946 [DEBUG] [Thread-26846] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:20:34.947 [DEBUG] [Thread-26846] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:20:34.947 [DEBUG] [Thread-26846] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:20:34.947 [DEBUG] [Thread-26846] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:20:34.964 [INFO] [Thread-26846] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:20:34.964 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:20:34.964 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:20:35.802 [DEBUG] [Thread-26846] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:20:35.802 [DEBUG] [Thread-26846] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:20:35.849 [DEBUG] [Thread-26846] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:20:35.850 [DEBUG] [Thread-26846] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:20:35.859 [DEBUG] [Thread-26846] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:20:35.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:20:35.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:20:35.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-11-13T02:20:35.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:20:35.887 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:20:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:20:35.895 [DEBUG] [Thread-26846] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:20:35.972 [DEBUG] [Thread-26848 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:20:48.856 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:20:48.857 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:20:51.029 [DEBUG] [Thread-26849 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:21:05.915 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:21:05.915 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:21:05.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-11-13T02:21:06.065 [DEBUG] [Thread-26850 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:21:06.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 20, 47), 10.68, 48.31, 0.0, 17.36, 14.29, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:21:06.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:20:47
2025-11-13T02:21:06.686 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:21:06.832 [DEBUG] [Thread-26851] [transport.py] [_log()] starting thread (client mode): 0x173eaaa0
2025-11-13T02:21:06.832 [DEBUG] [Thread-26851] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:21:06.853 [DEBUG] [Thread-26851] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:21:06.853 [INFO] [Thread-26851] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:21:06.856 [DEBUG] [Thread-26851] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] client lang: <none>
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] server lang: <none>
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] kex follows: False
2025-11-13T02:21:06.857 [DEBUG] [Thread-26851] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:21:06.858 [DEBUG] [Thread-26851] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:21:06.858 [DEBUG] [Thread-26851] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:21:06.858 [DEBUG] [Thread-26851] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:21:06.858 [DEBUG] [Thread-26851] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:21:06.858 [DEBUG] [Thread-26851] [transport.py] [_log()] Compression: none
2025-11-13T02:21:06.858 [DEBUG] [Thread-26851] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:21:06.876 [DEBUG] [Thread-26851] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:21:06.884 [DEBUG] [Thread-26851] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:21:06.885 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:21:06.885 [DEBUG] [Thread-26851] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:21:06.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:21:06.887 [DEBUG] [Thread-26851] [transport.py] [_log()] userauth is OK
2025-11-13T02:21:06.887 [DEBUG] [Thread-26851] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:21:06.888 [DEBUG] [Thread-26851] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:21:06.888 [DEBUG] [Thread-26851] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:21:06.888 [DEBUG] [Thread-26851] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:21:06.920 [INFO] [Thread-26851] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:21:06.922 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:21:07.719 [DEBUG] [Thread-26851] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:21:07.719 [DEBUG] [Thread-26851] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:21:07.719 [DEBUG] [Thread-26851] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:21:07.760 [DEBUG] [Thread-26851] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:21:07.760 [DEBUG] [Thread-26851] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:21:07.763 [DEBUG] [Thread-26851] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:21:07.775 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:21:07.775 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:21:07.777 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:21:07.779 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:21:07.785 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:21:07.787 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:21:07.787 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:21:07.787 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:21:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:21:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.014327 -999.00  +14.50   9.15     52   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 9.8 9.2 279.8 14.1 14.8 -25.2 14.8 -24.2 14.5 -23.8 14.8 -24.7
2025-11-13T02:21:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:21:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:21:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.014327
2025-11-13T02:21:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:21:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:21:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:21:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:21:07.789 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:21:07.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:20:47', tmtdew=10.68, humidity=48.31, cloud=0.0, wind=17.36, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:20:48', seeing=0.98, atlas_timestamp='2025-11-13T00:20:37.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.023749999999999716, 0.012249999999999872, 0.08175000000000132, 0.022499999999999076, 0.05749999999999922, 0.08825000000000216, 0.04800000000000004, 0.025750000000000384, 0.022499999999999076, 0.03200000000000003, 0.07124999999999915, 0.06199999999999939, 0.11299999999999955, 0.0832499999999996, 0.0019999999999988916, -0.021000000000000796, 0.024250000000000327, 0.07099999999999973, 0.09999999999999964, 0.06324999999999825, 0.09899999999999842, 0.08124999999999893, 0.02325000000000088, 0.024750000000000938, 0.04049999999999976, 0.05649999999999977, 0.10875000000000057, 0.1875, 0.14450000000000074, 0.08500000000000085, 0.11150000000000126, 0.030000000000001137, -0.0032500000000013074], zp_timestamp='2025-11-13T00:17:00')
2025-11-13T02:21:07.790 [DEBUG] [Thread-26851] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:21:07.873 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:21:07.885 [DEBUG] [Thread-26854] [transport.py] [_log()] starting thread (client mode): 0x17347130
2025-11-13T02:21:07.885 [DEBUG] [Thread-26854] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:21:07.900 [DEBUG] [Thread-26854] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:21:07.900 [INFO] [Thread-26854] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:21:07.911 [DEBUG] [Thread-26854] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] client lang: <none>
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] server lang: <none>
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] kex follows: False
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:21:07.912 [DEBUG] [Thread-26854] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:21:07.913 [DEBUG] [Thread-26854] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:21:07.913 [DEBUG] [Thread-26854] [transport.py] [_log()] Compression: none
2025-11-13T02:21:07.913 [DEBUG] [Thread-26854] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:21:07.971 [DEBUG] [Thread-26854] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:21:07.971 [DEBUG] [Thread-26854] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:21:07.972 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:21:07.972 [DEBUG] [Thread-26854] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:21:07.973 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:21:08.027 [DEBUG] [Thread-26854] [transport.py] [_log()] userauth is OK
2025-11-13T02:21:08.027 [DEBUG] [Thread-26854] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:21:08.027 [DEBUG] [Thread-26854] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:21:08.027 [DEBUG] [Thread-26854] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:21:08.027 [DEBUG] [Thread-26854] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:21:08.045 [INFO] [Thread-26854] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:21:08.046 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:21:08.046 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:21:08.859 [DEBUG] [Thread-26854] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:21:08.859 [DEBUG] [Thread-26854] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:21:08.907 [DEBUG] [Thread-26854] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:21:08.907 [DEBUG] [Thread-26854] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:21:08.916 [DEBUG] [Thread-26854] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:21:08.926 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:21:08.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-11-13T02:21:08.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-11-13T02:21:08.944 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:21:08.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:21:08.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:21:08.953 [DEBUG] [Thread-26854] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:21:13.175 [DEBUG] [Thread-26856 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:21:21.097 [DEBUG] [Thread-26857 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:21:36.142 [DEBUG] [Thread-26858 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:21:38.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:21:38.953 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:21:38.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:21:39.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 21, 19), 10.68, 48.33, 0.0, 17.13, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:21:39.609 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:21:19
2025-11-13T02:21:39.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:21:39.878 [DEBUG] [Thread-26859] [transport.py] [_log()] starting thread (client mode): 0x1737fe80
2025-11-13T02:21:39.878 [DEBUG] [Thread-26859] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:21:39.893 [DEBUG] [Thread-26859] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:21:39.894 [INFO] [Thread-26859] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] client lang: <none>
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] server lang: <none>
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] kex follows: False
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:21:39.897 [DEBUG] [Thread-26859] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:21:39.898 [DEBUG] [Thread-26859] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:21:39.898 [DEBUG] [Thread-26859] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:21:39.898 [DEBUG] [Thread-26859] [transport.py] [_log()] Compression: none
2025-11-13T02:21:39.898 [DEBUG] [Thread-26859] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:21:39.915 [DEBUG] [Thread-26859] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:21:39.916 [DEBUG] [Thread-26859] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:21:39.916 [DEBUG] [Thread-26859] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:21:39.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:21:39.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:21:39.918 [DEBUG] [Thread-26859] [transport.py] [_log()] userauth is OK
2025-11-13T02:21:39.919 [DEBUG] [Thread-26859] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:21:39.919 [DEBUG] [Thread-26859] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:21:39.919 [DEBUG] [Thread-26859] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:21:39.919 [DEBUG] [Thread-26859] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:21:39.955 [INFO] [Thread-26859] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:21:39.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:21:40.557 [DEBUG] [Thread-26859] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:21:40.557 [DEBUG] [Thread-26859] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:21:40.557 [DEBUG] [Thread-26859] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:21:40.598 [DEBUG] [Thread-26859] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:21:40.598 [DEBUG] [Thread-26859] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:21:40.602 [DEBUG] [Thread-26859] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:21:40.614 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:21:40.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:21:40.616 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:21:40.618 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:21:40.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:21:40.624 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:21:40.624 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:21:40.624 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:21:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:21:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.014674 -999.00  +14.50   9.60     52   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.9 9.6 281.4 16.7 14.8 -25.2 14.7 -24.3 14.5 -23.9 14.8 -24.6
2025-11-13T02:21:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:21:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:21:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.014674
2025-11-13T02:21:40.625 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:21:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:21:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:21:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:21:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:21:40.626 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:21:19', tmtdew=10.68, humidity=48.33, cloud=0.0, wind=17.13, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:21:20', seeing=0.83, atlas_timestamp='2025-11-13T00:21:07.834', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:20:00')
2025-11-13T02:21:40.627 [DEBUG] [Thread-26859] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:21:40.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:21:40.723 [DEBUG] [Thread-26862] [transport.py] [_log()] starting thread (client mode): 0x1737e9e0
2025-11-13T02:21:40.723 [DEBUG] [Thread-26862] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:21:40.738 [DEBUG] [Thread-26862] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:21:40.738 [INFO] [Thread-26862] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:21:40.746 [DEBUG] [Thread-26862] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:21:40.746 [DEBUG] [Thread-26862] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:21:40.746 [DEBUG] [Thread-26862] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:21:40.746 [DEBUG] [Thread-26862] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] client lang: <none>
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] server lang: <none>
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] kex follows: False
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:21:40.747 [DEBUG] [Thread-26862] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:21:40.748 [DEBUG] [Thread-26862] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:21:40.748 [DEBUG] [Thread-26862] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:21:40.748 [DEBUG] [Thread-26862] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:21:40.748 [DEBUG] [Thread-26862] [transport.py] [_log()] Compression: none
2025-11-13T02:21:40.748 [DEBUG] [Thread-26862] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:21:40.806 [DEBUG] [Thread-26862] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:21:40.807 [DEBUG] [Thread-26862] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:21:40.807 [DEBUG] [Thread-26862] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:21:40.807 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:21:40.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:21:40.865 [DEBUG] [Thread-26862] [transport.py] [_log()] userauth is OK
2025-11-13T02:21:40.865 [DEBUG] [Thread-26862] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:21:40.865 [DEBUG] [Thread-26862] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:21:40.865 [DEBUG] [Thread-26862] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:21:40.866 [DEBUG] [Thread-26862] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:21:40.889 [INFO] [Thread-26862] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:21:40.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:21:40.890 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:21:41.720 [DEBUG] [Thread-26862] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:21:41.720 [DEBUG] [Thread-26862] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:21:41.769 [DEBUG] [Thread-26862] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:21:41.769 [DEBUG] [Thread-26862] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:21:41.779 [DEBUG] [Thread-26862] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:21:41.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:21:41.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-11-13T02:21: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') -> 00000000
2025-11-13T02:21:41.807 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:21:41.807 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:21:41.808 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:21:41.816 [DEBUG] [Thread-26862] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:21:49.060 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:21:49.062 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:21:51.177 [DEBUG] [Thread-26864 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:22:06.235 [DEBUG] [Thread-26865 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:22:11.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:22:11.830 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:22: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-11-13T02:22:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 21, 51), 10.64, 48.78, 0.0, 16.3, 14.22, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:22:12.525 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:21:51
2025-11-13T02:22:12.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:22:12.809 [DEBUG] [Thread-26866] [transport.py] [_log()] starting thread (client mode): 0x19ddb8b0
2025-11-13T02:22:12.809 [DEBUG] [Thread-26866] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:22:12.830 [DEBUG] [Thread-26866] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:22:12.830 [INFO] [Thread-26866] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] client lang: <none>
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] server lang: <none>
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] kex follows: False
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:22:12.833 [DEBUG] [Thread-26866] [transport.py] [_log()] Compression: none
2025-11-13T02:22:12.834 [DEBUG] [Thread-26866] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:22:12.849 [DEBUG] [Thread-26866] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:22:12.849 [DEBUG] [Thread-26866] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:22:12.849 [DEBUG] [Thread-26866] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:22:12.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:22:12.849 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:22:12.850 [DEBUG] [Thread-26866] [transport.py] [_log()] userauth is OK
2025-11-13T02:22:12.850 [DEBUG] [Thread-26866] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:22:12.850 [DEBUG] [Thread-26866] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:22:12.850 [DEBUG] [Thread-26866] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:22:12.850 [DEBUG] [Thread-26866] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:22:12.862 [INFO] [Thread-26866] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:22:12.862 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:22:13.228 [DEBUG] [Thread-26868 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:22:13.673 [DEBUG] [Thread-26866] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:22:13.673 [DEBUG] [Thread-26866] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:22:13.673 [DEBUG] [Thread-26866] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:22:13.714 [DEBUG] [Thread-26866] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:22:13.714 [DEBUG] [Thread-26866] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:22:13.717 [DEBUG] [Thread-26866] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:22:13.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:22:13.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:22:13.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:22:13.731 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:22:13.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:22:13.734 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:22:13.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:22:13.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:22:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:22:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.015021 -999.00  +14.50  10.56     53   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.3 10.6 264.8 14.7 14.8 -25.4 14.7 -24.4 14.5 -23.9 14.8 -24.7
2025-11-13T02:22:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:22:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:22:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.015021
2025-11-13T02:22:13.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:22:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:22:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:22:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:22:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:22:13.735 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:21:51', tmtdew=10.64, humidity=48.78, cloud=0.0, wind=16.3, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:21:52', seeing=0.83, atlas_timestamp='2025-11-13T00:21:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:20:00')
2025-11-13T02:22:13.735 [DEBUG] [Thread-26866] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:22:13.808 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:22:13.820 [DEBUG] [Thread-26870] [transport.py] [_log()] starting thread (client mode): 0x1737c1c0
2025-11-13T02:22:13.820 [DEBUG] [Thread-26870] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:22:13.835 [DEBUG] [Thread-26870] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:22:13.835 [INFO] [Thread-26870] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:22:13.842 [DEBUG] [Thread-26870] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:22:13.842 [DEBUG] [Thread-26870] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:22:13.842 [DEBUG] [Thread-26870] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] client lang: <none>
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] server lang: <none>
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] kex follows: False
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] Compression: none
2025-11-13T02:22:13.843 [DEBUG] [Thread-26870] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:22:13.905 [DEBUG] [Thread-26870] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:22:13.905 [DEBUG] [Thread-26870] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:22:13.906 [DEBUG] [Thread-26870] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:22:13.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:22:13.906 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:22:13.961 [DEBUG] [Thread-26870] [transport.py] [_log()] userauth is OK
2025-11-13T02:22:13.962 [DEBUG] [Thread-26870] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:22:13.962 [DEBUG] [Thread-26870] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:22:13.962 [DEBUG] [Thread-26870] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:22:13.962 [DEBUG] [Thread-26870] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:22:13.975 [INFO] [Thread-26870] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:22:13.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:22:13.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:22:14.814 [DEBUG] [Thread-26870] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:22:14.815 [DEBUG] [Thread-26870] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:22:14.863 [DEBUG] [Thread-26870] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:22:14.863 [DEBUG] [Thread-26870] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:22:14.871 [DEBUG] [Thread-26870] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:22:14.879 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:22:14.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-11-13T02:22:14.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-11-13T02:22:14.895 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:22:14.895 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:22:14.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:22:14.902 [DEBUG] [Thread-26870] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:22:21.269 [DEBUG] [Thread-26872 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:22:36.325 [DEBUG] [Thread-26873 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:22:44.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:22:44.902 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:22:44.905 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:22:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 22, 23), 10.66, 48.73, 0.0, 16.37, 14.22, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:22:45.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:22:23
2025-11-13T02:22:45.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:22:45.842 [DEBUG] [Thread-26874] [transport.py] [_log()] starting thread (client mode): 0x19ddba90
2025-11-13T02:22:45.842 [DEBUG] [Thread-26874] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:22:45.862 [DEBUG] [Thread-26874] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:22:45.862 [INFO] [Thread-26874] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:22:45.865 [DEBUG] [Thread-26874] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:22:45.865 [DEBUG] [Thread-26874] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:22:45.865 [DEBUG] [Thread-26874] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] client lang: <none>
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] server lang: <none>
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] kex follows: False
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:22:45.866 [DEBUG] [Thread-26874] [transport.py] [_log()] Compression: none
2025-11-13T02:22:45.867 [DEBUG] [Thread-26874] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:22:45.884 [DEBUG] [Thread-26874] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:22:45.885 [DEBUG] [Thread-26874] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:22:45.886 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:22:45.887 [DEBUG] [Thread-26874] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:22:45.887 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:22:45.889 [DEBUG] [Thread-26874] [transport.py] [_log()] userauth is OK
2025-11-13T02:22:45.889 [DEBUG] [Thread-26874] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:22:45.889 [DEBUG] [Thread-26874] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:22:45.889 [DEBUG] [Thread-26874] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:22:45.889 [DEBUG] [Thread-26874] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:22:45.912 [INFO] [Thread-26874] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:22:45.913 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:22:46.559 [DEBUG] [Thread-26874] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:22:46.559 [DEBUG] [Thread-26874] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:22:46.560 [DEBUG] [Thread-26874] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:22:46.600 [DEBUG] [Thread-26874] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:22:46.600 [DEBUG] [Thread-26874] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:22:46.603 [DEBUG] [Thread-26874] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:22:46.615 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:22:46.615 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:22:46.617 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:22:46.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:22:46.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:22:46.626 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:22:46.626 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:22:46.626 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:22:46.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:22:46.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.015368 -999.00  +14.40   9.67     53   +5.00 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.1 9.7 263.8 16.0 14.8 -25.5 14.7 -24.4 14.5 -24.0 14.7 -24.9
2025-11-13T02:22:46.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:22:46.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:22:46.627 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.015368
2025-11-13T02:22:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:22:46.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:22:46.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:22:46.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:22:46.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:22:46.629 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:22:23', tmtdew=10.66, humidity=48.73, cloud=0.0, wind=16.37, temperature=14.22, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:22:24', seeing=0.85, atlas_timestamp='2025-11-13T00:22:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:20:00')
2025-11-13T02:22:46.629 [DEBUG] [Thread-26874] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:22:46.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:22:46.721 [DEBUG] [Thread-26877] [transport.py] [_log()] starting thread (client mode): 0x149218a0
2025-11-13T02:22:46.721 [DEBUG] [Thread-26877] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:22:46.739 [DEBUG] [Thread-26877] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:22:46.739 [INFO] [Thread-26877] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] client lang: <none>
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] server lang: <none>
2025-11-13T02:22:46.747 [DEBUG] [Thread-26877] [transport.py] [_log()] kex follows: False
2025-11-13T02:22:46.748 [DEBUG] [Thread-26877] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:22:46.748 [DEBUG] [Thread-26877] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:22:46.748 [DEBUG] [Thread-26877] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:22:46.748 [DEBUG] [Thread-26877] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:22:46.748 [DEBUG] [Thread-26877] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:22:46.748 [DEBUG] [Thread-26877] [transport.py] [_log()] Compression: none
2025-11-13T02:22:46.748 [DEBUG] [Thread-26877] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:22:46.806 [DEBUG] [Thread-26877] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:22:46.807 [DEBUG] [Thread-26877] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:22:46.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:22:46.808 [DEBUG] [Thread-26877] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:22:46.809 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:22:46.862 [DEBUG] [Thread-26877] [transport.py] [_log()] userauth is OK
2025-11-13T02:22:46.862 [DEBUG] [Thread-26877] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:22:46.863 [DEBUG] [Thread-26877] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:22:46.863 [DEBUG] [Thread-26877] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:22:46.863 [DEBUG] [Thread-26877] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:22:46.883 [INFO] [Thread-26877] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:22:46.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:22:46.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:22:47.750 [DEBUG] [Thread-26877] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:22:47.750 [DEBUG] [Thread-26877] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:22:47.797 [DEBUG] [Thread-26877] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:22:47.798 [DEBUG] [Thread-26877] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:22:47.807 [DEBUG] [Thread-26877] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:22:47.816 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:22:47.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:22: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-11-13T02:22:47.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:22:47.836 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:22:47.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:22:47.844 [DEBUG] [Thread-26877] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:22:49.263 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:22:49.264 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:22:51.359 [DEBUG] [Thread-26879 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:23:06.410 [DEBUG] [Thread-26880 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:23:13.286 [DEBUG] [Thread-26881 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:23:17.859 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:23:17.860 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:23:17.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-11-13T02:23:18.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 22, 55), 10.78, 48.16, 0.0, 16.46, 14.24, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:23:18.527 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:22:55
2025-11-13T02:23:18.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:23:18.798 [DEBUG] [Thread-26882] [transport.py] [_log()] starting thread (client mode): 0x17347d30
2025-11-13T02:23:18.799 [DEBUG] [Thread-26882] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:23:18.819 [DEBUG] [Thread-26882] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:23:18.820 [INFO] [Thread-26882] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:23:18.822 [DEBUG] [Thread-26882] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:23:18.822 [DEBUG] [Thread-26882] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:23:18.822 [DEBUG] [Thread-26882] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] client lang: <none>
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] server lang: <none>
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] kex follows: False
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] Compression: none
2025-11-13T02:23:18.823 [DEBUG] [Thread-26882] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:23:18.842 [DEBUG] [Thread-26882] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:23:18.843 [DEBUG] [Thread-26882] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:23:18.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:23:18.844 [DEBUG] [Thread-26882] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:23:18.845 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:23:18.846 [DEBUG] [Thread-26882] [transport.py] [_log()] userauth is OK
2025-11-13T02:23:18.846 [DEBUG] [Thread-26882] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:23:18.847 [DEBUG] [Thread-26882] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:23:18.847 [DEBUG] [Thread-26882] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:23:18.847 [DEBUG] [Thread-26882] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:23:18.883 [INFO] [Thread-26882] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:23:18.884 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:23:19.499 [DEBUG] [Thread-26882] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:23:19.499 [DEBUG] [Thread-26882] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:23:19.500 [DEBUG] [Thread-26882] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:23:19.540 [DEBUG] [Thread-26882] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:23:19.540 [DEBUG] [Thread-26882] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:23:19.544 [DEBUG] [Thread-26882] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:23:19.557 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:23:19.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:23:19.559 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:23:19.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:23:19.567 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:23:19.569 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:23:19.569 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:23:19.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:23:19.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:23:19.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.015716 -999.00  +14.40  11.20     53   +4.90 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.1 11.2 272.0 13.4 14.8 -25.5 14.7 -24.4 14.4 -24.0 14.7 -24.8
2025-11-13T02:23:19.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:23:19.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:23:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.015716
2025-11-13T02:23:19.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:23:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:23:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:23:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:23:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:23:19.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:22:55', tmtdew=10.78, humidity=48.16, cloud=0.0, wind=16.46, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:22:56', seeing=0.86, atlas_timestamp='2025-11-13T00:22:37.862', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:20:00')
2025-11-13T02:23:19.572 [DEBUG] [Thread-26882] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:23:19.656 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:23:19.668 [DEBUG] [Thread-26885] [transport.py] [_log()] starting thread (client mode): 0x19dda3b0
2025-11-13T02:23:19.669 [DEBUG] [Thread-26885] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:23:19.683 [DEBUG] [Thread-26885] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:23:19.683 [INFO] [Thread-26885] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:23:19.690 [DEBUG] [Thread-26885] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] client lang: <none>
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] server lang: <none>
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] kex follows: False
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] Compression: none
2025-11-13T02:23:19.691 [DEBUG] [Thread-26885] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:23:19.750 [DEBUG] [Thread-26885] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:23:19.751 [DEBUG] [Thread-26885] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:23:19.751 [DEBUG] [Thread-26885] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:23:19.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:23:19.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:23:19.810 [DEBUG] [Thread-26885] [transport.py] [_log()] userauth is OK
2025-11-13T02:23:19.810 [DEBUG] [Thread-26885] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:23:19.810 [DEBUG] [Thread-26885] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:23:19.810 [DEBUG] [Thread-26885] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:23:19.810 [DEBUG] [Thread-26885] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:23:19.829 [INFO] [Thread-26885] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:23:19.829 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:23:19.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:23:20.631 [DEBUG] [Thread-26885] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:23:20.631 [DEBUG] [Thread-26885] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:23:20.682 [DEBUG] [Thread-26885] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:23:20.682 [DEBUG] [Thread-26885] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:23:20.691 [DEBUG] [Thread-26885] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:23:20.702 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:23: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')
2025-11-13T02:23:20.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-11-13T02:23:20.721 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:23:20.721 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:23:20.722 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:23:20.730 [DEBUG] [Thread-26885] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:23:21.447 [DEBUG] [Thread-26887 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:23:36.502 [DEBUG] [Thread-26888 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:23:49.476 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:23:49.477 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:23:50.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:23:50.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:23:50.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-11-13T02:23:51.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 23, 27), 10.8, 48.1, 0.0, 16.71, 14.26, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:23:51.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:23:27
2025-11-13T02:23:51.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:23:51.537 [DEBUG] [Thread-26889 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:23:51.636 [DEBUG] [Thread-26890] [transport.py] [_log()] starting thread (client mode): 0x19dd91b0
2025-11-13T02:23:51.636 [DEBUG] [Thread-26890] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:23:51.657 [DEBUG] [Thread-26890] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:23:51.657 [INFO] [Thread-26890] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] client lang: <none>
2025-11-13T02:23:51.661 [DEBUG] [Thread-26890] [transport.py] [_log()] server lang: <none>
2025-11-13T02:23:51.662 [DEBUG] [Thread-26890] [transport.py] [_log()] kex follows: False
2025-11-13T02:23:51.662 [DEBUG] [Thread-26890] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:23:51.662 [DEBUG] [Thread-26890] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:23:51.662 [DEBUG] [Thread-26890] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:23:51.662 [DEBUG] [Thread-26890] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:23:51.662 [DEBUG] [Thread-26890] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:23:51.662 [DEBUG] [Thread-26890] [transport.py] [_log()] Compression: none
2025-11-13T02:23:51.662 [DEBUG] [Thread-26890] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:23:51.682 [DEBUG] [Thread-26890] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:23:51.683 [DEBUG] [Thread-26890] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:23:51.684 [DEBUG] [Thread-26890] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:23:51.684 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:23:51.685 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:23:51.686 [DEBUG] [Thread-26890] [transport.py] [_log()] userauth is OK
2025-11-13T02:23:51.686 [DEBUG] [Thread-26890] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:23:51.686 [DEBUG] [Thread-26890] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:23:51.686 [DEBUG] [Thread-26890] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:23:51.686 [DEBUG] [Thread-26890] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:23:51.722 [INFO] [Thread-26890] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:23:51.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:23:52.333 [DEBUG] [Thread-26890] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:23:52.333 [DEBUG] [Thread-26890] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:23:52.333 [DEBUG] [Thread-26890] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:23:52.374 [DEBUG] [Thread-26890] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:23:52.374 [DEBUG] [Thread-26890] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:23:52.377 [DEBUG] [Thread-26890] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:23:52.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:23:52.389 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:23:52.391 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:23:52.393 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:23:52.399 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:23:52.401 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:23:52.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:23:52.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:23:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:23:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.016410 -999.00  +14.40  12.99     52   +4.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.9 13.0 263.4 17.7 14.8 -25.5 14.7 -24.4 14.4 -24.1 14.7 -24.9
2025-11-13T02:23:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:23:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:23:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.016410
2025-11-13T02:23:52.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:23:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:23:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:23:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:23:52.403 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:23:52.404 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:23:27', tmtdew=10.8, humidity=48.1, cloud=0.0, wind=16.71, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:23:28', seeing=0.86, atlas_timestamp='2025-11-13T00:23:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:20:00')
2025-11-13T02:23:52.404 [DEBUG] [Thread-26890] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:23:52.487 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:23:52.501 [DEBUG] [Thread-26893] [transport.py] [_log()] starting thread (client mode): 0x14980e50
2025-11-13T02:23:52.501 [DEBUG] [Thread-26893] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:23:52.516 [DEBUG] [Thread-26893] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:23:52.516 [INFO] [Thread-26893] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] client lang: <none>
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] server lang: <none>
2025-11-13T02:23:52.524 [DEBUG] [Thread-26893] [transport.py] [_log()] kex follows: False
2025-11-13T02:23:52.525 [DEBUG] [Thread-26893] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:23:52.525 [DEBUG] [Thread-26893] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:23:52.525 [DEBUG] [Thread-26893] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:23:52.525 [DEBUG] [Thread-26893] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:23:52.525 [DEBUG] [Thread-26893] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:23:52.525 [DEBUG] [Thread-26893] [transport.py] [_log()] Compression: none
2025-11-13T02:23:52.525 [DEBUG] [Thread-26893] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:23:52.582 [DEBUG] [Thread-26893] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:23:52.583 [DEBUG] [Thread-26893] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:23:52.583 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:23:52.584 [DEBUG] [Thread-26893] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:23:52.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:23:52.638 [DEBUG] [Thread-26893] [transport.py] [_log()] userauth is OK
2025-11-13T02:23:52.638 [DEBUG] [Thread-26893] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:23:52.638 [DEBUG] [Thread-26893] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:23:52.638 [DEBUG] [Thread-26893] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:23:52.638 [DEBUG] [Thread-26893] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:23:52.663 [INFO] [Thread-26893] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:23:52.663 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:23:52.664 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:23:53.474 [DEBUG] [Thread-26893] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:23:53.474 [DEBUG] [Thread-26893] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:23:53.521 [DEBUG] [Thread-26893] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:23:53.522 [DEBUG] [Thread-26893] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:23:53.531 [DEBUG] [Thread-26893] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:23:53.540 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:23:53.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:23:53.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:23:53.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:23:53.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:23:53.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:23:53.568 [DEBUG] [Thread-26893] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:24:06.567 [DEBUG] [Thread-26895 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:24:13.343 [DEBUG] [Thread-26896 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:24:21.609 [DEBUG] [Thread-26897 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:24:23.579 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:24:23.579 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:24:23.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-11-13T02:24:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 23, 59), 10.96, 47.56, 0.0, 16.85, 14.34, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:24:24.222 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:23:59
2025-11-13T02:24:24.345 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:24:24.489 [DEBUG] [Thread-26898] [transport.py] [_log()] starting thread (client mode): 0x14980550
2025-11-13T02:24:24.490 [DEBUG] [Thread-26898] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:24:24.510 [DEBUG] [Thread-26898] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:24:24.511 [INFO] [Thread-26898] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] client lang: <none>
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] server lang: <none>
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] kex follows: False
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] Compression: none
2025-11-13T02:24:24.514 [DEBUG] [Thread-26898] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:24:24.531 [DEBUG] [Thread-26898] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:24:24.532 [DEBUG] [Thread-26898] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:24:24.533 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:24:24.533 [DEBUG] [Thread-26898] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:24:24.534 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:24:24.535 [DEBUG] [Thread-26898] [transport.py] [_log()] userauth is OK
2025-11-13T02:24:24.535 [DEBUG] [Thread-26898] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:24:24.536 [DEBUG] [Thread-26898] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:24:24.536 [DEBUG] [Thread-26898] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:24:24.536 [DEBUG] [Thread-26898] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:24:24.561 [INFO] [Thread-26898] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:24:24.561 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:24:25.194 [DEBUG] [Thread-26898] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:24:25.194 [DEBUG] [Thread-26898] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:24:25.194 [DEBUG] [Thread-26898] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:24:25.235 [DEBUG] [Thread-26898] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:24:25.235 [DEBUG] [Thread-26898] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:24:25.238 [DEBUG] [Thread-26898] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:24:25.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:24:25.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:24:25.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:24:25.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:24:25.262 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:24:25.265 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:24:25.265 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:24:25.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:24:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:24:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.016757 -999.00  +14.50  11.69     51   +4.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 9.8 11.7 260.0 19.9 14.8 -25.5 14.7 -24.4 14.4 -23.9 14.7 -24.9
2025-11-13T02:24:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:24:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:24:25.266 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.016757
2025-11-13T02:24:25.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:24:25.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:24:25.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:24:25.267 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:24:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:24:25.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:23:59', tmtdew=10.96, humidity=47.56, cloud=0.0, wind=16.85, temperature=14.34, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:24:00', seeing=0.91, atlas_timestamp='2025-11-13T00:24:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:23:00')
2025-11-13T02:24:25.268 [DEBUG] [Thread-26898] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:24:25.352 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:24:35.587 [DEBUG] [Thread-26901] [transport.py] [_log()] starting thread (client mode): 0x149892a0
2025-11-13T02:24:35.588 [DEBUG] [Thread-26901] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:24:35.602 [DEBUG] [Thread-26901] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:24:35.602 [INFO] [Thread-26901] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:24:35.609 [DEBUG] [Thread-26901] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] client lang: <none>
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] server lang: <none>
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] kex follows: False
2025-11-13T02:24:35.610 [DEBUG] [Thread-26901] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:24:35.611 [DEBUG] [Thread-26901] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:24:35.611 [DEBUG] [Thread-26901] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:24:35.611 [DEBUG] [Thread-26901] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:24:35.611 [DEBUG] [Thread-26901] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:24:35.611 [DEBUG] [Thread-26901] [transport.py] [_log()] Compression: none
2025-11-13T02:24:35.611 [DEBUG] [Thread-26901] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:24:35.670 [DEBUG] [Thread-26901] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:24:35.671 [DEBUG] [Thread-26901] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:24:35.671 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:24:35.672 [DEBUG] [Thread-26901] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:24:35.673 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:24:35.726 [DEBUG] [Thread-26901] [transport.py] [_log()] userauth is OK
2025-11-13T02:24:35.726 [DEBUG] [Thread-26901] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:24:35.726 [DEBUG] [Thread-26901] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:24:35.726 [DEBUG] [Thread-26901] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:24:35.726 [DEBUG] [Thread-26901] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:24:35.745 [INFO] [Thread-26901] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:24:35.745 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:24:35.746 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:24:36.609 [DEBUG] [Thread-26901] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:24:36.609 [DEBUG] [Thread-26901] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:24:36.644 [DEBUG] [Thread-26903 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:24:36.659 [DEBUG] [Thread-26901] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:24:36.659 [DEBUG] [Thread-26901] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:24:36.668 [DEBUG] [Thread-26901] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:24:36.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:24:36.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:24:36.685 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:24:36.695 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:24:36.695 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:24:36.695 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:24:36.703 [DEBUG] [Thread-26901] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:24:49.679 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:24:49.680 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:24:51.693 [DEBUG] [Thread-26904 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:25:06.726 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:25:06.726 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:25: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-11-13T02:25:06.730 [DEBUG] [Thread-26905 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:25:07.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 25, 3), 11.14, 46.97, 0.0, 17.4, 14.41, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:25:07.381 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:25:03
2025-11-13T02:25:07.504 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:25:07.651 [DEBUG] [Thread-26906] [transport.py] [_log()] starting thread (client mode): 0x14988fd0
2025-11-13T02:25:07.651 [DEBUG] [Thread-26906] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:25:07.675 [DEBUG] [Thread-26906] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:25:07.675 [INFO] [Thread-26906] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:25:07.679 [DEBUG] [Thread-26906] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:25:07.679 [DEBUG] [Thread-26906] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:25:07.679 [DEBUG] [Thread-26906] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:25:07.679 [DEBUG] [Thread-26906] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:25:07.679 [DEBUG] [Thread-26906] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:25:07.679 [DEBUG] [Thread-26906] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:25:07.679 [DEBUG] [Thread-26906] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:25:07.679 [DEBUG] [Thread-26906] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] client lang: <none>
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] server lang: <none>
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] kex follows: False
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:25:07.680 [DEBUG] [Thread-26906] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:25:07.681 [DEBUG] [Thread-26906] [transport.py] [_log()] Compression: none
2025-11-13T02:25:07.681 [DEBUG] [Thread-26906] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:25:07.699 [DEBUG] [Thread-26906] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:25:07.700 [DEBUG] [Thread-26906] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:25:07.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:25:07.701 [DEBUG] [Thread-26906] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:25:07.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:25:07.703 [DEBUG] [Thread-26906] [transport.py] [_log()] userauth is OK
2025-11-13T02:25:07.704 [DEBUG] [Thread-26906] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:25:07.704 [DEBUG] [Thread-26906] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:25:07.704 [DEBUG] [Thread-26906] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:25:07.704 [DEBUG] [Thread-26906] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:25:07.730 [INFO] [Thread-26906] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:25:07.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:25:10.079 [DEBUG] [Thread-26906] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:25:10.079 [DEBUG] [Thread-26906] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:25:10.079 [DEBUG] [Thread-26906] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:25:10.119 [DEBUG] [Thread-26906] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:25:10.119 [DEBUG] [Thread-26906] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:25:10.121 [DEBUG] [Thread-26906] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:25:10.190 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:25:10.191 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:25:10.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:25:10.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:25:10.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:25:10.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:25:10.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:25:10.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:25:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:25:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.017105 -999.00  +14.50  12.77     51   +4.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.6 12.8 264.4 13.8 14.8 -25.5 14.7 -24.4 14.4 -23.9 14.7 -25.0
2025-11-13T02:25:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:25:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:25:10.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.017105
2025-11-13T02:25:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:25:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:25:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:25:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:25:10.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:25:10.217 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:25:03', tmtdew=11.14, humidity=46.97, cloud=0.0, wind=17.4, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:25:04', seeing=0.86, atlas_timestamp='2025-11-13T00:24:37.872', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:23:00')
2025-11-13T02:25:10.217 [DEBUG] [Thread-26906] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:25:10.301 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:25:10.314 [DEBUG] [Thread-26909] [transport.py] [_log()] starting thread (client mode): 0x19dda3b0
2025-11-13T02:25:10.314 [DEBUG] [Thread-26909] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:25:10.329 [DEBUG] [Thread-26909] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:25:10.329 [INFO] [Thread-26909] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:25:10.336 [DEBUG] [Thread-26909] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:25:10.336 [DEBUG] [Thread-26909] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:25:10.336 [DEBUG] [Thread-26909] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:25:10.336 [DEBUG] [Thread-26909] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] client lang: <none>
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] server lang: <none>
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] kex follows: False
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] Compression: none
2025-11-13T02:25:10.337 [DEBUG] [Thread-26909] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:25:10.394 [DEBUG] [Thread-26909] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:25:10.394 [DEBUG] [Thread-26909] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:25:10.395 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:25:10.396 [DEBUG] [Thread-26909] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:25:10.397 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:25:10.450 [DEBUG] [Thread-26909] [transport.py] [_log()] userauth is OK
2025-11-13T02:25:10.450 [DEBUG] [Thread-26909] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:25:10.450 [DEBUG] [Thread-26909] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:25:10.450 [DEBUG] [Thread-26909] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:25:10.450 [DEBUG] [Thread-26909] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:25:10.469 [INFO] [Thread-26909] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:25:10.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:25:10.470 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:25:11.347 [DEBUG] [Thread-26909] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:25:11.347 [DEBUG] [Thread-26909] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:25:11.394 [DEBUG] [Thread-26909] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:25:11.395 [DEBUG] [Thread-26909] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:25:11.404 [DEBUG] [Thread-26909] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:25:11.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:25:11.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-11-13T02:25: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-11-13T02:25:11.431 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:25:11.431 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:25:11.432 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:25:11.440 [DEBUG] [Thread-26909] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:25:13.401 [DEBUG] [Thread-26911 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:25:21.768 [DEBUG] [Thread-26912 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:25:36.816 [DEBUG] [Thread-26913 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:25:41.462 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:25:41.462 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:25:41.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-11-13T02:25:42.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 25, 35), 11.1, 47.45, 0.0, 18.1, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:25:42.114 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:25:35
2025-11-13T02:25:42.235 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:25:42.381 [DEBUG] [Thread-26914] [transport.py] [_log()] starting thread (client mode): 0x1498b070
2025-11-13T02:25:42.382 [DEBUG] [Thread-26914] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:25:42.401 [DEBUG] [Thread-26914] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:25:42.401 [INFO] [Thread-26914] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:25:42.404 [DEBUG] [Thread-26914] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:25:42.404 [DEBUG] [Thread-26914] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] client lang: <none>
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] server lang: <none>
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] kex follows: False
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] Compression: none
2025-11-13T02:25:42.405 [DEBUG] [Thread-26914] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:25:42.421 [DEBUG] [Thread-26914] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:25:42.421 [DEBUG] [Thread-26914] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:25:42.422 [DEBUG] [Thread-26914] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:25:42.422 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:25:42.423 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:25:42.424 [DEBUG] [Thread-26914] [transport.py] [_log()] userauth is OK
2025-11-13T02:25:42.424 [DEBUG] [Thread-26914] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:25:42.424 [DEBUG] [Thread-26914] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:25:42.424 [DEBUG] [Thread-26914] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:25:42.425 [DEBUG] [Thread-26914] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:25:42.461 [INFO] [Thread-26914] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:25:42.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:25:43.110 [DEBUG] [Thread-26914] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:25:43.110 [DEBUG] [Thread-26914] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:25:43.111 [DEBUG] [Thread-26914] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:25:43.152 [DEBUG] [Thread-26914] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:25:43.152 [DEBUG] [Thread-26914] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:25:43.155 [DEBUG] [Thread-26914] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:25:43.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:25:43.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:25:43.169 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:25:43.171 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:25:43.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:25:43.178 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:25:43.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:25:43.179 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:25:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:25:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.017452 -999.00  +14.50  11.71     51   +4.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.2 11.7 266.6 16.1 14.8 -25.5 14.7 -24.4 14.4 -24.1 14.7 -25.0
2025-11-13T02:25:43.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:25:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:25:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.017452
2025-11-13T02:25:43.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:25:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:25:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:25:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:25:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:25:43.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:25:35', tmtdew=11.1, humidity=47.45, cloud=0.0, wind=18.1, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:25:36', seeing=0.86, atlas_timestamp='2025-11-13T00:25:07.853', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:23:00')
2025-11-13T02:25:43.181 [DEBUG] [Thread-26914] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:25:43.265 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:25:43.276 [DEBUG] [Thread-26917] [transport.py] [_log()] starting thread (client mode): 0x17344580
2025-11-13T02:25:43.276 [DEBUG] [Thread-26917] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:25:43.291 [DEBUG] [Thread-26917] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:25:43.291 [INFO] [Thread-26917] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:25:43.298 [DEBUG] [Thread-26917] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:25:43.298 [DEBUG] [Thread-26917] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:25:43.298 [DEBUG] [Thread-26917] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] client lang: <none>
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] server lang: <none>
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] kex follows: False
2025-11-13T02:25:43.299 [DEBUG] [Thread-26917] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:25:43.300 [DEBUG] [Thread-26917] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:25:43.300 [DEBUG] [Thread-26917] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:25:43.300 [DEBUG] [Thread-26917] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:25:43.300 [DEBUG] [Thread-26917] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:25:43.300 [DEBUG] [Thread-26917] [transport.py] [_log()] Compression: none
2025-11-13T02:25:43.300 [DEBUG] [Thread-26917] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:25:43.362 [DEBUG] [Thread-26917] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:25:43.362 [DEBUG] [Thread-26917] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:25:43.363 [DEBUG] [Thread-26917] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:25:43.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:25:43.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:25:43.423 [DEBUG] [Thread-26917] [transport.py] [_log()] userauth is OK
2025-11-13T02:25:43.423 [DEBUG] [Thread-26917] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:25:43.423 [DEBUG] [Thread-26917] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:25:43.423 [DEBUG] [Thread-26917] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:25:43.423 [DEBUG] [Thread-26917] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:25:43.449 [INFO] [Thread-26917] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:25:43.449 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:25:43.450 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:25:44.261 [DEBUG] [Thread-26917] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:25:44.261 [DEBUG] [Thread-26917] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:25:44.312 [DEBUG] [Thread-26917] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:25:44.312 [DEBUG] [Thread-26917] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:25:44.323 [DEBUG] [Thread-26917] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:25:44.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:25:44.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-11-13T02:25:44.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-11-13T02:25:44.355 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:25:44.355 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:25:44.355 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:25:44.363 [DEBUG] [Thread-26917] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:25:49.880 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:25:49.882 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:25:51.846 [DEBUG] [Thread-26919 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:06.898 [DEBUG] [Thread-26920 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:13.469 [DEBUG] [Thread-26921 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:14.386 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:26:14.386 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:26:14.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-11-13T02:26:15.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 26, 7), 11.21, 47.1, 0.0, 17.45, 14.51, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:26:15.046 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:26:07
2025-11-13T02:26:15.170 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:26:15.318 [DEBUG] [Thread-26922] [transport.py] [_log()] starting thread (client mode): 0x14982530
2025-11-13T02:26:15.318 [DEBUG] [Thread-26922] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:26:15.338 [DEBUG] [Thread-26922] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:26:15.339 [INFO] [Thread-26922] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:26:15.341 [DEBUG] [Thread-26922] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] client lang: <none>
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] server lang: <none>
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] kex follows: False
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] Compression: none
2025-11-13T02:26:15.342 [DEBUG] [Thread-26922] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:26:15.362 [DEBUG] [Thread-26922] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:26:15.362 [DEBUG] [Thread-26922] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:26:15.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:26:15.363 [DEBUG] [Thread-26922] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:26:15.364 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:26:15.365 [DEBUG] [Thread-26922] [transport.py] [_log()] userauth is OK
2025-11-13T02:26:15.366 [DEBUG] [Thread-26922] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:26:15.366 [DEBUG] [Thread-26922] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:26:15.366 [DEBUG] [Thread-26922] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:26:15.366 [DEBUG] [Thread-26922] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:26:15.385 [INFO] [Thread-26922] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:26:15.385 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:26:16.099 [DEBUG] [Thread-26922] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:26:16.100 [DEBUG] [Thread-26922] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:26:16.100 [DEBUG] [Thread-26922] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:26:16.140 [DEBUG] [Thread-26922] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:26:16.141 [DEBUG] [Thread-26922] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:26:16.143 [DEBUG] [Thread-26922] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:26:16.155 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:26:16.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:26:16.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:26:16.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:26:16.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:26:16.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:26:16.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:26:16.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:26:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:26:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.017799 -999.00  +14.50  12.23     52   +4.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 12.0 12.2 260.6 15.6 14.8 -25.5 14.7 -24.2 14.4 -23.8 14.7 -24.8
2025-11-13T02:26:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:26:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:26:16.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.017799
2025-11-13T02:26:16.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:26:16.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:26:16.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:26:16.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:26:16.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:26:16.168 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:26:07', tmtdew=11.21, humidity=47.1, cloud=0.0, wind=17.45, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:26:08', seeing=0.86, atlas_timestamp='2025-11-13T00:25:37.834', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:23:00')
2025-11-13T02:26:16.168 [DEBUG] [Thread-26922] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:26:16.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:26:16.263 [DEBUG] [Thread-26925] [transport.py] [_log()] starting thread (client mode): 0x14989cc0
2025-11-13T02:26:16.263 [DEBUG] [Thread-26925] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:26:16.280 [DEBUG] [Thread-26925] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:26:16.281 [INFO] [Thread-26925] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:26:16.288 [DEBUG] [Thread-26925] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:26:16.288 [DEBUG] [Thread-26925] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] client lang: <none>
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] server lang: <none>
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] kex follows: False
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:26:16.289 [DEBUG] [Thread-26925] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:26:16.290 [DEBUG] [Thread-26925] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:26:16.290 [DEBUG] [Thread-26925] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:26:16.290 [DEBUG] [Thread-26925] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:26:16.290 [DEBUG] [Thread-26925] [transport.py] [_log()] Compression: none
2025-11-13T02:26:16.290 [DEBUG] [Thread-26925] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:26:16.353 [DEBUG] [Thread-26925] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:26:16.354 [DEBUG] [Thread-26925] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:26:16.355 [DEBUG] [Thread-26925] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:26:16.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:26:16.355 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:26:16.410 [DEBUG] [Thread-26925] [transport.py] [_log()] userauth is OK
2025-11-13T02:26:16.410 [DEBUG] [Thread-26925] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:26:16.410 [DEBUG] [Thread-26925] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:26:16.410 [DEBUG] [Thread-26925] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:26:16.410 [DEBUG] [Thread-26925] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:26:16.429 [INFO] [Thread-26925] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:26:16.430 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:26:16.430 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:26:17.248 [DEBUG] [Thread-26925] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:26:17.249 [DEBUG] [Thread-26925] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:26:17.297 [DEBUG] [Thread-26925] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:26:17.297 [DEBUG] [Thread-26925] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:26:17.306 [DEBUG] [Thread-26925] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:26:17.315 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:26:17.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-11-13T02:26:17.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-11-13T02:26:17.334 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:26:17.334 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:26:17.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:26:17.343 [DEBUG] [Thread-26925] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:26:21.931 [DEBUG] [Thread-26927 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:36.469 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:36.985 [DEBUG] [Thread-26928 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:41.101 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:44.139 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:47.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:26:47.366 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:26:47.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-11-13T02:26:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 26, 39), 11.28, 46.85, 0.0, 17.12, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:26:48.012 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:26:39
2025-11-13T02:26:48.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:26:48.280 [DEBUG] [Thread-26929] [transport.py] [_log()] starting thread (client mode): 0x1498a980
2025-11-13T02:26:48.280 [DEBUG] [Thread-26929] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:26:48.301 [DEBUG] [Thread-26929] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:26:48.301 [INFO] [Thread-26929] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:26:48.304 [DEBUG] [Thread-26929] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] client lang: <none>
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] server lang: <none>
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] kex follows: False
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:26:48.305 [DEBUG] [Thread-26929] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:26:48.306 [DEBUG] [Thread-26929] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:26:48.306 [DEBUG] [Thread-26929] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:26:48.306 [DEBUG] [Thread-26929] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:26:48.306 [DEBUG] [Thread-26929] [transport.py] [_log()] Compression: none
2025-11-13T02:26:48.306 [DEBUG] [Thread-26929] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:26:48.324 [DEBUG] [Thread-26929] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:26:48.325 [DEBUG] [Thread-26929] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:26:48.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:26:48.326 [DEBUG] [Thread-26929] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:26:48.327 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:26:48.328 [DEBUG] [Thread-26929] [transport.py] [_log()] userauth is OK
2025-11-13T02:26:48.328 [DEBUG] [Thread-26929] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:26:48.329 [DEBUG] [Thread-26929] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:26:48.329 [DEBUG] [Thread-26929] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:26:48.329 [DEBUG] [Thread-26929] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:26:48.354 [INFO] [Thread-26929] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:26:48.356 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:26:49.004 [DEBUG] [Thread-26929] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:26:49.004 [DEBUG] [Thread-26929] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:26:49.005 [DEBUG] [Thread-26929] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:26:49.046 [DEBUG] [Thread-26929] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:26:49.046 [DEBUG] [Thread-26929] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:26:49.049 [DEBUG] [Thread-26929] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:26:49.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:26:49.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:26:49.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:26:49.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:26:49.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:26:49.074 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:26:49.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:26:49.075 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:26:49.075 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:26:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.018146 -999.00  +14.40  13.64     52   +4.70 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.6 13.6 254.6 14.6 14.8 -25.5 14.6 -24.4 14.3 -24.0 14.7 -24.9
2025-11-13T02:26:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:26:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:26:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.018146
2025-11-13T02:26:49.076 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:26:49.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:26:49.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:26:49.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:26:49.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:26:49.077 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:26:39', tmtdew=11.28, humidity=46.85, cloud=0.0, wind=17.12, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:26:40', seeing=0.81, atlas_timestamp='2025-11-13T00:26:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.0022500000000000853, 0.00975000000000037, 0.08375000000000021, 0.038000000000000256, 0.015000000000000568, 0.06225000000000058, 0.009999999999999787, 0.012249999999999872, 0.01249999999999929, 0.025000000000000355, 0.07124999999999915, 0.058999999999999275, 0.09049999999999869, 0.08274999999999899, -0.033500000000000085, -0.013999999999999346, 0.0182500000000001, 0.04550000000000054, 0.08199999999999896, 0.044749999999998735, 0.06599999999999895, 0.048749999999998295, 0.007250000000000867, -0.03725000000000023, 0.034999999999998366, 0.06300000000000061, 0.08024999999999949, 0.19250000000000078, 0.136000000000001, 0.062000000000001165, 0.06450000000000067, 0.03049999999999997, 0.011749999999999261], zp_timestamp='2025-11-13T00:23:00')
2025-11-13T02:26:49.077 [DEBUG] [Thread-26929] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:26:49.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:26:49.173 [DEBUG] [Thread-26932] [transport.py] [_log()] starting thread (client mode): 0x1493d870
2025-11-13T02:26:49.173 [DEBUG] [Thread-26932] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:26:49.189 [DEBUG] [Thread-26932] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:26:49.190 [INFO] [Thread-26932] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:26:49.197 [DEBUG] [Thread-26932] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:26:49.197 [DEBUG] [Thread-26932] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:26:49.197 [DEBUG] [Thread-26932] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:26:49.197 [DEBUG] [Thread-26932] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:26:49.197 [DEBUG] [Thread-26932] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:26:49.197 [DEBUG] [Thread-26932] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:26:49.197 [DEBUG] [Thread-26932] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:26:49.197 [DEBUG] [Thread-26932] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] client lang: <none>
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] server lang: <none>
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] kex follows: False
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] Compression: none
2025-11-13T02:26:49.198 [DEBUG] [Thread-26932] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:26:49.257 [DEBUG] [Thread-26932] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:26:49.258 [DEBUG] [Thread-26932] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:26:49.259 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:26:49.259 [DEBUG] [Thread-26932] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:26:49.260 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:26:49.313 [DEBUG] [Thread-26932] [transport.py] [_log()] userauth is OK
2025-11-13T02:26:49.314 [DEBUG] [Thread-26932] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:26:49.314 [DEBUG] [Thread-26932] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:26:49.314 [DEBUG] [Thread-26932] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:26:49.314 [DEBUG] [Thread-26932] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:26:49.338 [INFO] [Thread-26932] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:26:49.339 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:26:49.339 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:26:49.505 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:50.085 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:50.086 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:26:50.209 [DEBUG] [Thread-26932] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:26:50.209 [DEBUG] [Thread-26932] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:26:50.256 [DEBUG] [Thread-26932] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:26:50.257 [DEBUG] [Thread-26932] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:26:50.266 [DEBUG] [Thread-26932] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:26:50.274 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:26:50.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-11-13T02:26:50.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-11-13T02:26:50.292 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:26:50.292 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:26:50.293 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:26:50.301 [DEBUG] [Thread-26932] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:26:52.016 [DEBUG] [Thread-26934 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:27:07.070 [DEBUG] [Thread-26935 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:27:13.521 [DEBUG] [Thread-26936 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:27:20.323 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:27:20.323 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:27:20.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-11-13T02:27:20.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 27, 11), 11.34, 46.67, 0.0, 18.47, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:27:20.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:27:11
2025-11-13T02:27:21.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:27:21.280 [DEBUG] [Thread-26937] [transport.py] [_log()] starting thread (client mode): 0x11f01c60
2025-11-13T02:27:21.280 [DEBUG] [Thread-26937] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:27:21.300 [DEBUG] [Thread-26937] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:27:21.300 [INFO] [Thread-26937] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] client lang: <none>
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] server lang: <none>
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] kex follows: False
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] Compression: none
2025-11-13T02:27:21.302 [DEBUG] [Thread-26937] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:27:21.310 [DEBUG] [Thread-26937] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:27:21.310 [DEBUG] [Thread-26937] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:27:21.310 [DEBUG] [Thread-26937] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:27:21.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:27:21.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:27:21.311 [DEBUG] [Thread-26937] [transport.py] [_log()] userauth is OK
2025-11-13T02:27:21.311 [DEBUG] [Thread-26937] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:27:21.311 [DEBUG] [Thread-26937] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:27:21.311 [DEBUG] [Thread-26937] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:27:21.311 [DEBUG] [Thread-26937] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:27:21.321 [INFO] [Thread-26937] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:27:21.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:27:21.907 [DEBUG] [Thread-26937] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:27:21.907 [DEBUG] [Thread-26937] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:27:21.908 [DEBUG] [Thread-26937] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:27:21.948 [DEBUG] [Thread-26937] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:27:21.948 [DEBUG] [Thread-26937] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:27:21.950 [DEBUG] [Thread-26937] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:27:21.961 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:27:21.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:27:21.962 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:27:21.963 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:27:21.966 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:27:21.967 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:27:21.967 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.018841 -999.00  +14.40  13.15     51   +4.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 17.0 13.2 258.4 16.2 14.7 -25.4 14.6 -24.6 14.4 -24.2 14.7 -24.9
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.018841
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:27:21.967 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:27:11', tmtdew=11.34, humidity=46.67, cloud=0.0, wind=18.47, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:27:12', seeing=0.89, atlas_timestamp='2025-11-13T00:27:07.862', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.029749999999999943, 0.036749999999999616, 0.026999999999999247, 0.00849999999999973, 0.06825000000000081, -0.03449999999999953, -0.029749999999999943, 0.028499999999999304, 0.019999999999999574, 0.05874999999999986, 0.026999999999999247, 0.09399999999999942, 0.03724999999999845, -0.05900000000000105, -0.0470000000000006, -0.013749999999999929, 0.03449999999999953, 0.06999999999999851, 0.05424999999999969, 0.0649999999999995, 0.02474999999999916, -0.010249999999999204, -0.029249999999999332, 0.004999999999999005, 0.0649999999999995, 0.07025000000000148, 0.198500000000001, 0.18299999999999983, 0.04100000000000037, 0.002500000000001279, -0.028999999999999915, 0.012749999999998707], zp_timestamp='2025-11-13T00:25:00')
2025-11-13T02:27:21.968 [DEBUG] [Thread-26937] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:27:22.042 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:27:22.054 [DEBUG] [Thread-26940] [transport.py] [_log()] starting thread (client mode): 0x11f01540
2025-11-13T02:27:22.054 [DEBUG] [Thread-26940] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:27:22.068 [DEBUG] [Thread-26940] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:27:22.068 [INFO] [Thread-26940] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] client lang: <none>
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] server lang: <none>
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] kex follows: False
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] Compression: none
2025-11-13T02:27:22.076 [DEBUG] [Thread-26940] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:27:22.102 [DEBUG] [Thread-26942 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:27:22.131 [DEBUG] [Thread-26940] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:27:22.132 [DEBUG] [Thread-26940] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:27:22.132 [DEBUG] [Thread-26940] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:27:22.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:27:22.132 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:27:22.191 [DEBUG] [Thread-26940] [transport.py] [_log()] userauth is OK
2025-11-13T02:27:22.192 [DEBUG] [Thread-26940] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:27:22.192 [DEBUG] [Thread-26940] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:27:22.192 [DEBUG] [Thread-26940] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:27:22.192 [DEBUG] [Thread-26940] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:27:22.207 [INFO] [Thread-26940] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:27:22.207 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:27:22.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:27:23.053 [DEBUG] [Thread-26940] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:27:23.053 [DEBUG] [Thread-26940] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:27:23.101 [DEBUG] [Thread-26940] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:27:23.101 [DEBUG] [Thread-26940] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:27:23.109 [DEBUG] [Thread-26940] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:27:23.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:27:23.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-11-13T02:27:23.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-11-13T02:27:23.133 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:27:23.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:27:23.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:27:23.141 [DEBUG] [Thread-26940] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:27:37.150 [DEBUG] [Thread-26943 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:27:50.289 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:27:50.290 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:27:52.188 [DEBUG] [Thread-26944 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:27:53.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:27:53.153 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:27:53.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-11-13T02:27:53.805 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 27, 43), 11.49, 46.01, 0.0, 16.75, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:27:53.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:27:43
2025-11-13T02:27:53.927 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:27:54.072 [DEBUG] [Thread-26945] [transport.py] [_log()] starting thread (client mode): 0x19ddad70
2025-11-13T02:27:54.072 [DEBUG] [Thread-26945] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:27:54.092 [DEBUG] [Thread-26945] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:27:54.092 [INFO] [Thread-26945] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:27:54.096 [DEBUG] [Thread-26945] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:27:54.096 [DEBUG] [Thread-26945] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:27:54.096 [DEBUG] [Thread-26945] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:27:54.096 [DEBUG] [Thread-26945] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:27:54.096 [DEBUG] [Thread-26945] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:27:54.096 [DEBUG] [Thread-26945] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:27:54.096 [DEBUG] [Thread-26945] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:27:54.096 [DEBUG] [Thread-26945] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] client lang: <none>
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] server lang: <none>
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] kex follows: False
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] Compression: none
2025-11-13T02:27:54.097 [DEBUG] [Thread-26945] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:27:54.113 [DEBUG] [Thread-26945] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:27:54.114 [DEBUG] [Thread-26945] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:27:54.114 [DEBUG] [Thread-26945] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:27:54.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:27:54.115 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:27:54.116 [DEBUG] [Thread-26945] [transport.py] [_log()] userauth is OK
2025-11-13T02:27:54.117 [DEBUG] [Thread-26945] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:27:54.117 [DEBUG] [Thread-26945] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:27:54.117 [DEBUG] [Thread-26945] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:27:54.117 [DEBUG] [Thread-26945] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:27:54.141 [INFO] [Thread-26945] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:27:54.142 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:27:54.778 [DEBUG] [Thread-26945] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:27:54.779 [DEBUG] [Thread-26945] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:27:54.779 [DEBUG] [Thread-26945] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:27:54.820 [DEBUG] [Thread-26945] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:27:54.820 [DEBUG] [Thread-26945] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:27:54.823 [DEBUG] [Thread-26945] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:27:54.837 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:27:54.837 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:27:54.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:27:54.842 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:27:54.849 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:27:54.851 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:27:54.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:27:54.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:27:54.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:27:54.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.019188 -999.00  +14.40  14.00     51   +4.50 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 14.3 14.0 263.6 18.6 14.7 -25.5 14.6 -24.5 14.3 -24.0 14.7 -24.7
2025-11-13T02:27:54.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:27:54.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:27:54.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.019188
2025-11-13T02:27:54.853 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:27:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:27:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:27:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:27:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:27:54.854 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:27:43', tmtdew=11.49, humidity=46.01, cloud=0.0, wind=16.75, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:27:44', seeing=0.89, atlas_timestamp='2025-11-13T00:27:37.843', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.029749999999999943, 0.036749999999999616, 0.026999999999999247, 0.00849999999999973, 0.06825000000000081, -0.03449999999999953, -0.029749999999999943, 0.028499999999999304, 0.019999999999999574, 0.05874999999999986, 0.026999999999999247, 0.09399999999999942, 0.03724999999999845, -0.05900000000000105, -0.0470000000000006, -0.013749999999999929, 0.03449999999999953, 0.06999999999999851, 0.05424999999999969, 0.0649999999999995, 0.02474999999999916, -0.010249999999999204, -0.029249999999999332, 0.004999999999999005, 0.0649999999999995, 0.07025000000000148, 0.198500000000001, 0.18299999999999983, 0.04100000000000037, 0.002500000000001279, -0.028999999999999915, 0.012749999999998707], zp_timestamp='2025-11-13T00:25:00')
2025-11-13T02:27:54.854 [DEBUG] [Thread-26945] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:27:54.937 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:27:54.948 [DEBUG] [Thread-26948] [transport.py] [_log()] starting thread (client mode): 0x14981e10
2025-11-13T02:27:54.949 [DEBUG] [Thread-26948] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:27:54.963 [DEBUG] [Thread-26948] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:27:54.963 [INFO] [Thread-26948] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] client lang: <none>
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] server lang: <none>
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] kex follows: False
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:27:54.971 [DEBUG] [Thread-26948] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:27:54.972 [DEBUG] [Thread-26948] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:27:54.972 [DEBUG] [Thread-26948] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:27:54.972 [DEBUG] [Thread-26948] [transport.py] [_log()] Compression: none
2025-11-13T02:27:54.972 [DEBUG] [Thread-26948] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:27:55.030 [DEBUG] [Thread-26948] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:27:55.030 [DEBUG] [Thread-26948] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:27:55.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:27:55.031 [DEBUG] [Thread-26948] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:27:55.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:27:55.085 [DEBUG] [Thread-26948] [transport.py] [_log()] userauth is OK
2025-11-13T02:27:55.086 [DEBUG] [Thread-26948] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:27:55.086 [DEBUG] [Thread-26948] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:27:55.086 [DEBUG] [Thread-26948] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:27:55.086 [DEBUG] [Thread-26948] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:27:55.105 [INFO] [Thread-26948] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:27:55.106 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:27:55.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:27:55.924 [DEBUG] [Thread-26948] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:27:55.924 [DEBUG] [Thread-26948] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:27:55.972 [DEBUG] [Thread-26948] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:27:55.972 [DEBUG] [Thread-26948] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:27:55.980 [DEBUG] [Thread-26948] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:27:55.988 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:27:55.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-11-13T02:27:55.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:27:56.004 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:27:56.004 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:27:56.004 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:27:56.011 [DEBUG] [Thread-26948] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:28:07.223 [DEBUG] [Thread-26950 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:28:13.581 [DEBUG] [Thread-26951 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:28:22.276 [DEBUG] [Thread-26952 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:28:26.034 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:28:26.035 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:28:26.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-11-13T02:28:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 28, 15), 11.52, 45.92, 0.0, 17.75, 14.54, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:28:26.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:28:15
2025-11-13T02:28:26.806 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:28:26.951 [DEBUG] [Thread-26953] [transport.py] [_log()] starting thread (client mode): 0x19ddb9a0
2025-11-13T02:28:26.951 [DEBUG] [Thread-26953] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:28:26.967 [DEBUG] [Thread-26953] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:28:26.967 [INFO] [Thread-26953] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:28:26.970 [DEBUG] [Thread-26953] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:28:26.970 [DEBUG] [Thread-26953] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:28:26.970 [DEBUG] [Thread-26953] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:28:26.970 [DEBUG] [Thread-26953] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:28:26.970 [DEBUG] [Thread-26953] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:28:26.970 [DEBUG] [Thread-26953] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:28:26.970 [DEBUG] [Thread-26953] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] client lang: <none>
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] server lang: <none>
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] kex follows: False
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] Compression: none
2025-11-13T02:28:26.971 [DEBUG] [Thread-26953] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:28:26.991 [DEBUG] [Thread-26953] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:28:26.992 [DEBUG] [Thread-26953] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:28:26.992 [DEBUG] [Thread-26953] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:28:26.992 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:28:26.993 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:28:26.994 [DEBUG] [Thread-26953] [transport.py] [_log()] userauth is OK
2025-11-13T02:28:26.995 [DEBUG] [Thread-26953] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:28:26.995 [DEBUG] [Thread-26953] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:28:26.995 [DEBUG] [Thread-26953] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:28:26.995 [DEBUG] [Thread-26953] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:28:27.019 [INFO] [Thread-26953] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:28:27.020 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:28:27.632 [DEBUG] [Thread-26953] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:28:27.632 [DEBUG] [Thread-26953] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:28:27.633 [DEBUG] [Thread-26953] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:28:27.673 [DEBUG] [Thread-26953] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:28:27.673 [DEBUG] [Thread-26953] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:28:27.676 [DEBUG] [Thread-26953] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:28:27.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:28:27.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:28:27.692 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:28:27.693 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:28:27.699 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:28:27.701 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:28:27.701 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:28:27.701 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:28:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:28:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.019535 -999.00  +14.50  11.45     50   +4.40 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 11.9 11.4 259.6 19.0 14.8 -25.5 14.6 -24.5 14.4 -24.1 14.7 -24.8
2025-11-13T02:28:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:28:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:28:27.702 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.019535
2025-11-13T02:28:27.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:28:27.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:28:27.703 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:28:27.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:28:27.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:28:27.704 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:28:15', tmtdew=11.52, humidity=45.92, cloud=0.0, wind=17.75, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:28:16', seeing=0.97, atlas_timestamp='2025-11-13T00:28:07.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.029749999999999943, 0.036749999999999616, 0.026999999999999247, 0.00849999999999973, 0.06825000000000081, -0.03449999999999953, -0.029749999999999943, 0.028499999999999304, 0.019999999999999574, 0.05874999999999986, 0.026999999999999247, 0.09399999999999942, 0.03724999999999845, -0.05900000000000105, -0.0470000000000006, -0.013749999999999929, 0.03449999999999953, 0.06999999999999851, 0.05424999999999969, 0.0649999999999995, 0.02474999999999916, -0.010249999999999204, -0.029249999999999332, 0.004999999999999005, 0.0649999999999995, 0.07025000000000148, 0.198500000000001, 0.18299999999999983, 0.04100000000000037, 0.002500000000001279, -0.028999999999999915, 0.012749999999998707], zp_timestamp='2025-11-13T00:25:00')
2025-11-13T02:28:27.704 [DEBUG] [Thread-26953] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:28:27.786 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:28:27.797 [DEBUG] [Thread-26956] [transport.py] [_log()] starting thread (client mode): 0x11f02a70
2025-11-13T02:28:27.797 [DEBUG] [Thread-26956] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:28:27.816 [DEBUG] [Thread-26956] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:28:27.816 [INFO] [Thread-26956] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:28:27.824 [DEBUG] [Thread-26956] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:28:27.824 [DEBUG] [Thread-26956] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:28:27.824 [DEBUG] [Thread-26956] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] client lang: <none>
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] server lang: <none>
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] kex follows: False
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] Compression: none
2025-11-13T02:28:27.825 [DEBUG] [Thread-26956] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:28:27.881 [DEBUG] [Thread-26956] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:28:27.882 [DEBUG] [Thread-26956] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:28:27.882 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:28:27.883 [DEBUG] [Thread-26956] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:28:27.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:28:27.937 [DEBUG] [Thread-26956] [transport.py] [_log()] userauth is OK
2025-11-13T02:28:27.937 [DEBUG] [Thread-26956] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:28:27.938 [DEBUG] [Thread-26956] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:28:27.938 [DEBUG] [Thread-26956] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:28:27.938 [DEBUG] [Thread-26956] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:28:27.958 [INFO] [Thread-26956] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:28:27.959 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:28:27.959 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:28:28.767 [DEBUG] [Thread-26956] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:28:28.767 [DEBUG] [Thread-26956] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:28:28.815 [DEBUG] [Thread-26956] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:28:28.815 [DEBUG] [Thread-26956] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:28:28.827 [DEBUG] [Thread-26956] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:28:28.835 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:28:28.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-11-13T02:28:28.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-11-13T02:28:28.852 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:28:28.852 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:28:28.853 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:28:28.860 [DEBUG] [Thread-26956] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:28:37.314 [DEBUG] [Thread-26958 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:28:50.490 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:28:50.491 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:28:52.361 [DEBUG] [Thread-26959 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:28:58.875 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:28:58.875 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:28:58.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-11-13T02:28:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 28, 48), 11.64, 45.19, 0.0, 19.6, 14.56, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:28:59.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:28:48
2025-11-13T02:28:59.638 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:28:59.783 [DEBUG] [Thread-26960] [transport.py] [_log()] starting thread (client mode): 0x14944f40
2025-11-13T02:28:59.783 [DEBUG] [Thread-26960] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:28:59.802 [DEBUG] [Thread-26960] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:28:59.803 [INFO] [Thread-26960] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:28:59.806 [DEBUG] [Thread-26960] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:28:59.806 [DEBUG] [Thread-26960] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:28:59.806 [DEBUG] [Thread-26960] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:28:59.806 [DEBUG] [Thread-26960] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:28:59.806 [DEBUG] [Thread-26960] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:28:59.806 [DEBUG] [Thread-26960] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] client lang: <none>
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] server lang: <none>
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] kex follows: False
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] Compression: none
2025-11-13T02:28:59.807 [DEBUG] [Thread-26960] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:28:59.823 [DEBUG] [Thread-26960] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:28:59.824 [DEBUG] [Thread-26960] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:28:59.824 [DEBUG] [Thread-26960] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:28:59.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:28:59.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:28:59.826 [DEBUG] [Thread-26960] [transport.py] [_log()] userauth is OK
2025-11-13T02:28:59.826 [DEBUG] [Thread-26960] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:28:59.826 [DEBUG] [Thread-26960] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:28:59.826 [DEBUG] [Thread-26960] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:28:59.826 [DEBUG] [Thread-26960] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:28:59.851 [INFO] [Thread-26960] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:28:59.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:29:00.484 [DEBUG] [Thread-26960] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:29:00.484 [DEBUG] [Thread-26960] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:29:00.484 [DEBUG] [Thread-26960] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:29:00.524 [DEBUG] [Thread-26960] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:29:00.525 [DEBUG] [Thread-26960] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:29:00.528 [DEBUG] [Thread-26960] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:29:00.541 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:29:00.541 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:29:00.543 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:29:00.545 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:29:00.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:29:00.552 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:29:00.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:29:00.552 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:29:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:29:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.019882 -999.00  +14.50  14.58     50   +4.30 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 15.5 14.6 260.6 17.5 14.7 -25.5 14.6 -24.4 14.3 -24.1 14.7 -24.8
2025-11-13T02:29:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:29:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:29:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.019882
2025-11-13T02:29:00.553 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:29:00.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:29:00.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:29:00.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:29:00.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:29:00.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:28:48', tmtdew=11.64, humidity=45.19, cloud=0.0, wind=19.6, temperature=14.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:28:48', seeing=0.97, atlas_timestamp='2025-11-13T00:28:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.029749999999999943, 0.036749999999999616, 0.026999999999999247, 0.00849999999999973, 0.06825000000000081, -0.03449999999999953, -0.029749999999999943, 0.028499999999999304, 0.019999999999999574, 0.05874999999999986, 0.026999999999999247, 0.09399999999999942, 0.03724999999999845, -0.05900000000000105, -0.0470000000000006, -0.013749999999999929, 0.03449999999999953, 0.06999999999999851, 0.05424999999999969, 0.0649999999999995, 0.02474999999999916, -0.010249999999999204, -0.029249999999999332, 0.004999999999999005, 0.0649999999999995, 0.07025000000000148, 0.198500000000001, 0.18299999999999983, 0.04100000000000037, 0.002500000000001279, -0.028999999999999915, 0.012749999999998707], zp_timestamp='2025-11-13T00:25:00')
2025-11-13T02:29:00.554 [DEBUG] [Thread-26960] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:29:00.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:29:00.654 [DEBUG] [Thread-26963] [transport.py] [_log()] starting thread (client mode): 0x1493f280
2025-11-13T02:29:00.654 [DEBUG] [Thread-26963] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:29:00.669 [DEBUG] [Thread-26963] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:29:00.669 [INFO] [Thread-26963] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:29:00.677 [DEBUG] [Thread-26963] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:29:00.677 [DEBUG] [Thread-26963] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:29:00.677 [DEBUG] [Thread-26963] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:29:00.677 [DEBUG] [Thread-26963] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:29:00.677 [DEBUG] [Thread-26963] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:29:00.677 [DEBUG] [Thread-26963] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:29:00.677 [DEBUG] [Thread-26963] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:29:00.677 [DEBUG] [Thread-26963] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] client lang: <none>
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] server lang: <none>
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] kex follows: False
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] Compression: none
2025-11-13T02:29:00.678 [DEBUG] [Thread-26963] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:29:00.739 [DEBUG] [Thread-26963] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:29:00.740 [DEBUG] [Thread-26963] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:29:00.740 [DEBUG] [Thread-26963] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:29:00.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:29:00.741 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:29:00.797 [DEBUG] [Thread-26963] [transport.py] [_log()] userauth is OK
2025-11-13T02:29:00.797 [DEBUG] [Thread-26963] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:29:00.797 [DEBUG] [Thread-26963] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:29:00.797 [DEBUG] [Thread-26963] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:29:00.797 [DEBUG] [Thread-26963] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:29:00.817 [INFO] [Thread-26963] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:29:00.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:29:00.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:29:01.648 [DEBUG] [Thread-26963] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:29:01.648 [DEBUG] [Thread-26963] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:29:01.697 [DEBUG] [Thread-26963] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:29:01.697 [DEBUG] [Thread-26963] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:29:01.706 [DEBUG] [Thread-26963] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:29:01.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:29:01.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:29:01.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-11-13T02:29:01.734 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:29:01.735 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:29:01.735 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:29:01.743 [DEBUG] [Thread-26963] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:29:07.400 [DEBUG] [Thread-26965 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:29:13.658 [DEBUG] [Thread-26966 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:29:22.448 [DEBUG] [Thread-26967 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:29:31.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:29:31.766 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:29:31.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-11-13T02:29:32.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 29, 20), 11.69, 45.03, 0.0, 19.41, 14.51, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:29:32.413 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:29:20
2025-11-13T02:29:32.536 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:29:32.681 [DEBUG] [Thread-26968] [transport.py] [_log()] starting thread (client mode): 0x11f03eb0
2025-11-13T02:29:32.681 [DEBUG] [Thread-26968] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:29:32.698 [DEBUG] [Thread-26968] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:29:32.698 [INFO] [Thread-26968] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] client lang: <none>
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] server lang: <none>
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] kex follows: False
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:29:32.701 [DEBUG] [Thread-26968] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:29:32.702 [DEBUG] [Thread-26968] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:29:32.702 [DEBUG] [Thread-26968] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:29:32.702 [DEBUG] [Thread-26968] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:29:32.702 [DEBUG] [Thread-26968] [transport.py] [_log()] Compression: none
2025-11-13T02:29:32.702 [DEBUG] [Thread-26968] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:29:32.718 [DEBUG] [Thread-26968] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:29:32.719 [DEBUG] [Thread-26968] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:29:32.719 [DEBUG] [Thread-26968] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:29:32.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:29:32.720 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:29:32.721 [DEBUG] [Thread-26968] [transport.py] [_log()] userauth is OK
2025-11-13T02:29:32.721 [DEBUG] [Thread-26968] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:29:32.722 [DEBUG] [Thread-26968] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:29:32.722 [DEBUG] [Thread-26968] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:29:32.722 [DEBUG] [Thread-26968] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:29:32.739 [INFO] [Thread-26968] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:29:32.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:29:33.321 [DEBUG] [Thread-26968] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:29:33.321 [DEBUG] [Thread-26968] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:29:33.322 [DEBUG] [Thread-26968] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:29:33.362 [DEBUG] [Thread-26968] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:29:33.362 [DEBUG] [Thread-26968] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:29:33.365 [DEBUG] [Thread-26968] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:29:33.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:29:33.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:29:33.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:29:33.376 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:29:33.381 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:29:33.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:29:33.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:29:33.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:29:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:29:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.020229 -999.00  +14.50  13.55     50   +4.40 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 10.1 13.6 271.6 18.1 14.7 -25.5 14.7 -24.5 14.4 -23.9 14.7 -24.9
2025-11-13T02:29:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:29:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:29:33.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.020229
2025-11-13T02:29:33.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:29:33.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:29:33.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:29:33.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:29:33.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:29:33.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:29:20', tmtdew=11.69, humidity=45.03, cloud=0.0, wind=19.41, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:29:20', seeing=0.88, atlas_timestamp='2025-11-13T00:29:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.029749999999999943, 0.036749999999999616, 0.026999999999999247, 0.00849999999999973, 0.06825000000000081, -0.03449999999999953, -0.029749999999999943, 0.028499999999999304, 0.019999999999999574, 0.05874999999999986, 0.026999999999999247, 0.09399999999999942, 0.03724999999999845, -0.05900000000000105, -0.0470000000000006, -0.013749999999999929, 0.03449999999999953, 0.06999999999999851, 0.05424999999999969, 0.0649999999999995, 0.02474999999999916, -0.010249999999999204, -0.029249999999999332, 0.004999999999999005, 0.0649999999999995, 0.07025000000000148, 0.198500000000001, 0.18299999999999983, 0.04100000000000037, 0.002500000000001279, -0.028999999999999915, 0.012749999999998707], zp_timestamp='2025-11-13T00:25:00')
2025-11-13T02:29:33.386 [DEBUG] [Thread-26968] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:29:33.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:29:33.481 [DEBUG] [Thread-26971] [transport.py] [_log()] starting thread (client mode): 0x11f02f50
2025-11-13T02:29:33.481 [DEBUG] [Thread-26971] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:29:33.496 [DEBUG] [Thread-26971] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:29:33.496 [INFO] [Thread-26971] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:29:33.504 [DEBUG] [Thread-26971] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:29:33.504 [DEBUG] [Thread-26971] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] client lang: <none>
2025-11-13T02:29:33.505 [DEBUG] [Thread-26971] [transport.py] [_log()] server lang: <none>
2025-11-13T02:29:33.506 [DEBUG] [Thread-26971] [transport.py] [_log()] kex follows: False
2025-11-13T02:29:33.506 [DEBUG] [Thread-26971] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:29:33.506 [DEBUG] [Thread-26971] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:29:33.506 [DEBUG] [Thread-26971] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:29:33.506 [DEBUG] [Thread-26971] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:29:33.506 [DEBUG] [Thread-26971] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:29:33.506 [DEBUG] [Thread-26971] [transport.py] [_log()] Compression: none
2025-11-13T02:29:33.507 [DEBUG] [Thread-26971] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:29:33.561 [DEBUG] [Thread-26971] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:29:33.562 [DEBUG] [Thread-26971] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:29:33.562 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:29:33.563 [DEBUG] [Thread-26971] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:29:33.564 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:29:33.617 [DEBUG] [Thread-26971] [transport.py] [_log()] userauth is OK
2025-11-13T02:29:33.617 [DEBUG] [Thread-26971] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:29:33.617 [DEBUG] [Thread-26971] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:29:33.617 [DEBUG] [Thread-26971] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:29:33.617 [DEBUG] [Thread-26971] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:29:33.636 [INFO] [Thread-26971] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:29:33.637 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:29:33.637 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:29:34.465 [DEBUG] [Thread-26971] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:29:34.466 [DEBUG] [Thread-26971] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:29:34.514 [DEBUG] [Thread-26971] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:29:34.514 [DEBUG] [Thread-26971] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:29:34.526 [DEBUG] [Thread-26971] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:29:34.536 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:29:34.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:29:34.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-11-13T02:29:34.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:29:34.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:29:34.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:29:34.564 [DEBUG] [Thread-26971] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:29:37.482 [DEBUG] [Thread-26973 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:29:50.693 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:29:50.694 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:29:52.537 [DEBUG] [Thread-26974 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:30:04.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:30:04.595 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:30: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-11-13T02:30:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 29, 52), 11.89, 44.89, 0.0, 19.89, 14.61, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:30:05.244 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:29:52
2025-11-13T02:30:05.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:30:05.515 [DEBUG] [Thread-26975] [transport.py] [_log()] starting thread (client mode): 0x149441f0
2025-11-13T02:30:05.515 [DEBUG] [Thread-26975] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:30:05.535 [DEBUG] [Thread-26975] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:30:05.535 [INFO] [Thread-26975] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:30:05.538 [DEBUG] [Thread-26975] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:30:05.538 [DEBUG] [Thread-26975] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:30:05.538 [DEBUG] [Thread-26975] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] client lang: <none>
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] server lang: <none>
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] kex follows: False
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] Compression: none
2025-11-13T02:30:05.539 [DEBUG] [Thread-26975] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:30:05.555 [DEBUG] [Thread-26975] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:30:05.556 [DEBUG] [Thread-26975] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:30:05.556 [DEBUG] [Thread-26975] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:30:05.557 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:30:05.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:30:05.602 [DEBUG] [Thread-26975] [transport.py] [_log()] userauth is OK
2025-11-13T02:30:05.603 [DEBUG] [Thread-26975] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:30:05.603 [DEBUG] [Thread-26975] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:30:05.603 [DEBUG] [Thread-26975] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:30:05.603 [DEBUG] [Thread-26975] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:30:05.633 [INFO] [Thread-26975] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:30:05.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:30:06.893 [DEBUG] [Thread-26975] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:30:06.893 [DEBUG] [Thread-26975] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:30:06.893 [DEBUG] [Thread-26975] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:30:06.933 [DEBUG] [Thread-26975] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:30:06.933 [DEBUG] [Thread-26975] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:30:06.936 [DEBUG] [Thread-26975] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:30:06.942 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:30:06.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:30:06.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:30:06.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:30:06.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:30:06.954 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:30:06.954 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:30:06.954 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:30:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:30:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.020577 -999.00  +14.50  14.43     49   +4.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.6 14.4 255.0 16.1 14.7 -25.6 14.6 -24.6 14.4 -24.1 14.7 -25.0
2025-11-13T02:30:06.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:30:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:30:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.020577
2025-11-13T02:30:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:30:06.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:30:06.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:30:06.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:30:06.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:30:06.956 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:29:52', tmtdew=11.89, humidity=44.89, cloud=0.0, wind=19.89, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:29:52', seeing=0.88, atlas_timestamp='2025-11-13T00:29:37.853', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01425000000000054, -0.029749999999999943, 0.036749999999999616, 0.026999999999999247, 0.00849999999999973, 0.06825000000000081, -0.03449999999999953, -0.029749999999999943, 0.028499999999999304, 0.019999999999999574, 0.05874999999999986, 0.026999999999999247, 0.09399999999999942, 0.03724999999999845, -0.05900000000000105, -0.0470000000000006, -0.013749999999999929, 0.03449999999999953, 0.06999999999999851, 0.05424999999999969, 0.0649999999999995, 0.02474999999999916, -0.010249999999999204, -0.029249999999999332, 0.004999999999999005, 0.0649999999999995, 0.07025000000000148, 0.198500000000001, 0.18299999999999983, 0.04100000000000037, 0.002500000000001279, -0.028999999999999915, 0.012749999999998707], zp_timestamp='2025-11-13T00:25:00')
2025-11-13T02:30:06.956 [DEBUG] [Thread-26975] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:30:07.045 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:30:07.055 [DEBUG] [Thread-26978] [transport.py] [_log()] starting thread (client mode): 0x1493e530
2025-11-13T02:30:07.056 [DEBUG] [Thread-26978] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:30:07.072 [DEBUG] [Thread-26978] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:30:07.072 [INFO] [Thread-26978] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] client lang: <none>
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] server lang: <none>
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] kex follows: False
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:30:07.080 [DEBUG] [Thread-26978] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:30:07.081 [DEBUG] [Thread-26978] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:30:07.081 [DEBUG] [Thread-26978] [transport.py] [_log()] Compression: none
2025-11-13T02:30:07.081 [DEBUG] [Thread-26978] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:30:07.136 [DEBUG] [Thread-26978] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:30:07.136 [DEBUG] [Thread-26978] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:30:07.137 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:30:07.137 [DEBUG] [Thread-26978] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:30:07.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:30:07.192 [DEBUG] [Thread-26978] [transport.py] [_log()] userauth is OK
2025-11-13T02:30:07.192 [DEBUG] [Thread-26978] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:30:07.193 [DEBUG] [Thread-26978] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:30:07.193 [DEBUG] [Thread-26978] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:30:07.193 [DEBUG] [Thread-26978] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:30:07.215 [INFO] [Thread-26978] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:30:07.216 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:30:07.216 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:30:07.570 [DEBUG] [Thread-26980 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:30:08.056 [DEBUG] [Thread-26978] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:30:08.057 [DEBUG] [Thread-26978] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:30:08.104 [DEBUG] [Thread-26978] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:30:08.104 [DEBUG] [Thread-26978] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:30:08.113 [DEBUG] [Thread-26978] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:30:08.121 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:30:08.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-11-13T02:30:08.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-11-13T02:30:08.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:30:08.139 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:30:08.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:30:08.147 [DEBUG] [Thread-26978] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:30:13.714 [DEBUG] [Thread-26981 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:30:22.620 [DEBUG] [Thread-26982 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:30:37.656 [DEBUG] [Thread-26983 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:30:38.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:30:38.143 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:30:38.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:30:38.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 30, 24), 11.94, 44.73, 0.0, 18.86, 14.61, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:30:38.779 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:30:24
2025-11-13T02:30:38.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:30:39.059 [DEBUG] [Thread-26984] [transport.py] [_log()] starting thread (client mode): 0x1496a500
2025-11-13T02:30:39.060 [DEBUG] [Thread-26984] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:30:39.080 [DEBUG] [Thread-26984] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:30:39.080 [INFO] [Thread-26984] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] client lang: <none>
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] server lang: <none>
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] kex follows: False
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] Compression: none
2025-11-13T02:30:39.083 [DEBUG] [Thread-26984] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:30:39.098 [DEBUG] [Thread-26984] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:30:39.099 [DEBUG] [Thread-26984] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:30:39.099 [DEBUG] [Thread-26984] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:30:39.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:30:39.099 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:30:39.100 [DEBUG] [Thread-26984] [transport.py] [_log()] userauth is OK
2025-11-13T02:30:39.100 [DEBUG] [Thread-26984] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:30:39.100 [DEBUG] [Thread-26984] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:30:39.100 [DEBUG] [Thread-26984] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:30:39.100 [DEBUG] [Thread-26984] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:30:39.111 [INFO] [Thread-26984] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:30:39.112 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:30:39.760 [DEBUG] [Thread-26984] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:30:39.760 [DEBUG] [Thread-26984] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:30:39.760 [DEBUG] [Thread-26984] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:30:39.801 [DEBUG] [Thread-26984] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:30:39.801 [DEBUG] [Thread-26984] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:30:39.805 [DEBUG] [Thread-26984] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:30:39.818 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:30:39.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:30:39.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:30:39.823 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:30:39.829 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:30:39.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:30:39.831 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:30:39.831 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:30:39.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:30:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.020577 -999.00  +14.50  14.43     49   +4.10 1 1 1 1 1     0    0 -999.00 0.00 ZNESW 13.6 14.4 255.0 16.1 14.7 -25.6 14.6 -24.6 14.4 -24.1 14.7 -25.0
2025-11-13T02:30:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:30:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:30:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.020577
2025-11-13T02:30:39.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:30:39.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:30:39.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:30:39.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:30:39.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:30:39.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:30:24', tmtdew=11.94, humidity=44.73, cloud=0.0, wind=18.86, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:30:24', seeing=0.76, atlas_timestamp='2025-11-13T00:29:37.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:29:00')
2025-11-13T02:30:39.833 [DEBUG] [Thread-26984] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:30:39.917 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:30:39.931 [DEBUG] [Thread-26987] [transport.py] [_log()] starting thread (client mode): 0x19dd8ee0
2025-11-13T02:30:39.931 [DEBUG] [Thread-26987] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:30:39.945 [DEBUG] [Thread-26987] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:30:39.946 [INFO] [Thread-26987] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:30:39.953 [DEBUG] [Thread-26987] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:30:39.954 [DEBUG] [Thread-26987] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:30:39.954 [DEBUG] [Thread-26987] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:30:39.954 [DEBUG] [Thread-26987] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:30:39.954 [DEBUG] [Thread-26987] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:30:39.954 [DEBUG] [Thread-26987] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:30:39.954 [DEBUG] [Thread-26987] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:30:39.954 [DEBUG] [Thread-26987] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:30:39.954 [DEBUG] [Thread-26987] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:30:39.955 [DEBUG] [Thread-26987] [transport.py] [_log()] client lang: <none>
2025-11-13T02:30:39.955 [DEBUG] [Thread-26987] [transport.py] [_log()] server lang: <none>
2025-11-13T02:30:39.955 [DEBUG] [Thread-26987] [transport.py] [_log()] kex follows: False
2025-11-13T02:30:39.955 [DEBUG] [Thread-26987] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:30:39.955 [DEBUG] [Thread-26987] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:30:39.955 [DEBUG] [Thread-26987] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:30:39.955 [DEBUG] [Thread-26987] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:30:39.956 [DEBUG] [Thread-26987] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:30:39.956 [DEBUG] [Thread-26987] [transport.py] [_log()] Compression: none
2025-11-13T02:30:39.956 [DEBUG] [Thread-26987] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:30:40.014 [DEBUG] [Thread-26987] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:30:40.015 [DEBUG] [Thread-26987] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:30:40.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:30:40.016 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:30:40.017 [DEBUG] [Thread-26987] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:30:40.073 [DEBUG] [Thread-26987] [transport.py] [_log()] userauth is OK
2025-11-13T02:30:40.073 [DEBUG] [Thread-26987] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:30:40.073 [DEBUG] [Thread-26987] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:30:40.074 [DEBUG] [Thread-26987] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:30:40.074 [DEBUG] [Thread-26987] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:30:40.093 [INFO] [Thread-26987] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:30:40.093 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:30:40.094 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:30:40.895 [DEBUG] [Thread-26987] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:30:40.895 [DEBUG] [Thread-26987] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:30:40.943 [DEBUG] [Thread-26987] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:30:40.943 [DEBUG] [Thread-26987] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:30:40.953 [DEBUG] [Thread-26987] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:30:40.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:30:40.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-11-13T02:30:40.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-11-13T02:30:40.989 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:30:40.990 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:30:40.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:30:40.998 [DEBUG] [Thread-26987] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:30:50.896 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:30:50.897 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:30:52.691 [DEBUG] [Thread-26989 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:31:07.749 [DEBUG] [Thread-26990 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:31:11.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:31:11.021 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:31:11.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-11-13T02:31:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 30, 56), 12.31, 43.5, 0.0, 20.34, 14.66, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:31:11.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:30:56
2025-11-13T02:31:11.798 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:31:11.946 [DEBUG] [Thread-26991] [transport.py] [_log()] starting thread (client mode): 0x1496ae30
2025-11-13T02:31:11.947 [DEBUG] [Thread-26991] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:31:11.967 [DEBUG] [Thread-26991] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:31:11.967 [INFO] [Thread-26991] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] client lang: <none>
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] server lang: <none>
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] kex follows: False
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:31:11.970 [DEBUG] [Thread-26991] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:31:11.971 [DEBUG] [Thread-26991] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:31:11.971 [DEBUG] [Thread-26991] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:31:11.971 [DEBUG] [Thread-26991] [transport.py] [_log()] Compression: none
2025-11-13T02:31:11.971 [DEBUG] [Thread-26991] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:31:11.987 [DEBUG] [Thread-26991] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:31:11.988 [DEBUG] [Thread-26991] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:31:11.989 [DEBUG] [Thread-26991] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:31:11.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:31:11.989 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:31:11.990 [DEBUG] [Thread-26991] [transport.py] [_log()] userauth is OK
2025-11-13T02:31:11.991 [DEBUG] [Thread-26991] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:31:11.991 [DEBUG] [Thread-26991] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:31:11.991 [DEBUG] [Thread-26991] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:31:11.991 [DEBUG] [Thread-26991] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:31:12.009 [INFO] [Thread-26991] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:31:12.009 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:31:12.655 [DEBUG] [Thread-26991] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:31:12.655 [DEBUG] [Thread-26991] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:31:12.655 [DEBUG] [Thread-26991] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:31:12.696 [DEBUG] [Thread-26991] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:31:12.696 [DEBUG] [Thread-26991] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:31:12.698 [DEBUG] [Thread-26991] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:31:12.711 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:31:12.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:31:12.712 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:31:12.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:31:12.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:31:12.716 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:31:12.716 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.021271 -999.00  +14.60  14.88     48   +3.90 1 1 1 1 1     0    0 10.00 10.77 ZNESW 16.4 14.9 259.4 17.6 14.7 -25.4 14.6 -24.4 14.4 -23.9 14.7 -24.7
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.021271
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:31:12.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:30:56', tmtdew=12.31, humidity=43.5, cloud=0.0, wind=20.34, temperature=14.66, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:30:56', seeing=0.76, atlas_timestamp='2025-11-13T00:30:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:29:00')
2025-11-13T02:31:12.718 [DEBUG] [Thread-26991] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:31:12.793 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:31:12.804 [DEBUG] [Thread-26994] [transport.py] [_log()] starting thread (client mode): 0x11f001f0
2025-11-13T02:31:12.805 [DEBUG] [Thread-26994] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:31:12.819 [DEBUG] [Thread-26994] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:31:12.819 [INFO] [Thread-26994] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] client lang: <none>
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] server lang: <none>
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] kex follows: False
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] Compression: none
2025-11-13T02:31:12.827 [DEBUG] [Thread-26994] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:31:12.883 [DEBUG] [Thread-26994] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:31:12.884 [DEBUG] [Thread-26994] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:31:12.884 [DEBUG] [Thread-26994] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:31:12.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:31:12.884 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:31:12.940 [DEBUG] [Thread-26994] [transport.py] [_log()] userauth is OK
2025-11-13T02:31:12.941 [DEBUG] [Thread-26994] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:31:12.941 [DEBUG] [Thread-26994] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:31:12.941 [DEBUG] [Thread-26994] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:31:12.941 [DEBUG] [Thread-26994] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:31:12.955 [INFO] [Thread-26994] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:31:12.956 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:31:12.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:31:13.767 [DEBUG] [Thread-26996 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:31:13.793 [DEBUG] [Thread-26994] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:31:13.793 [DEBUG] [Thread-26994] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:31:13.841 [DEBUG] [Thread-26994] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:31:13.841 [DEBUG] [Thread-26994] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:31:13.849 [DEBUG] [Thread-26994] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:31:13.857 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:31:13.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-11-13T02:31:13.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-11-13T02:31:13.873 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:31:13.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:31:13.874 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:31:13.881 [DEBUG] [Thread-26994] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:31:22.780 [DEBUG] [Thread-26997 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:31:37.835 [DEBUG] [Thread-26998 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:31:43.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:31:43.901 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:31:43.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-11-13T02:31:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 31, 28), 12.45, 43.08, 0.0, 20.03, 14.69, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:31:44.538 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:31:28
2025-11-13T02:31:44.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:31:44.805 [DEBUG] [Thread-26999] [transport.py] [_log()] starting thread (client mode): 0x1496aaa0
2025-11-13T02:31:44.805 [DEBUG] [Thread-26999] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:31:44.825 [DEBUG] [Thread-26999] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:31:44.826 [INFO] [Thread-26999] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:31:44.828 [DEBUG] [Thread-26999] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] client lang: <none>
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] server lang: <none>
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] kex follows: False
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] Compression: none
2025-11-13T02:31:44.829 [DEBUG] [Thread-26999] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:31:44.848 [DEBUG] [Thread-26999] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:31:44.849 [DEBUG] [Thread-26999] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:31:44.850 [DEBUG] [Thread-26999] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:31:44.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:31:44.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:31:44.852 [DEBUG] [Thread-26999] [transport.py] [_log()] userauth is OK
2025-11-13T02:31:44.852 [DEBUG] [Thread-26999] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:31:44.852 [DEBUG] [Thread-26999] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:31:44.853 [DEBUG] [Thread-26999] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:31:44.853 [DEBUG] [Thread-26999] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:31:44.888 [INFO] [Thread-26999] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:31:44.888 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:31:45.491 [DEBUG] [Thread-26999] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:31:45.491 [DEBUG] [Thread-26999] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:31:45.492 [DEBUG] [Thread-26999] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:31:45.533 [DEBUG] [Thread-26999] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:31:45.533 [DEBUG] [Thread-26999] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:31:45.537 [DEBUG] [Thread-26999] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:31:45.550 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:31:45.551 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:31:45.553 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:31:45.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:31:45.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:31:45.562 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:31:45.562 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:31:45.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:31:45.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:31:45.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.021618 -999.00  +14.60  15.51     49   +4.00 1 1 1 1 1     0    0 10.46 13.84 ZNESW 14.1 15.5 261.7 21.2 14.7 -25.5 14.6 -24.5 14.3 -23.9 -999.0 -999.0
2025-11-13T02:31:45.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:31:45.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:31:45.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.021618
2025-11-13T02:31:45.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:31:45.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:31:45.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:31:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:31:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:31:45.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:31:28', tmtdew=12.45, humidity=43.08, cloud=0.0, wind=20.03, temperature=14.69, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:31:29', seeing=0.8, atlas_timestamp='2025-11-13T00:31:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:29:00')
2025-11-13T02:31:45.565 [DEBUG] [Thread-26999] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:31:45.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:31:45.660 [DEBUG] [Thread-27002] [transport.py] [_log()] starting thread (client mode): 0x1496bdc0
2025-11-13T02:31:45.660 [DEBUG] [Thread-27002] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:31:45.676 [DEBUG] [Thread-27002] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:31:45.676 [INFO] [Thread-27002] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] client lang: <none>
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] server lang: <none>
2025-11-13T02:31:45.684 [DEBUG] [Thread-27002] [transport.py] [_log()] kex follows: False
2025-11-13T02:31:45.685 [DEBUG] [Thread-27002] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:31:45.685 [DEBUG] [Thread-27002] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:31:45.685 [DEBUG] [Thread-27002] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:31:45.685 [DEBUG] [Thread-27002] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:31:45.685 [DEBUG] [Thread-27002] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:31:45.685 [DEBUG] [Thread-27002] [transport.py] [_log()] Compression: none
2025-11-13T02:31:45.685 [DEBUG] [Thread-27002] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:31:45.741 [DEBUG] [Thread-27002] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:31:45.741 [DEBUG] [Thread-27002] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:31:45.751 [DEBUG] [Thread-27002] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:31:45.751 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:31:45.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:31:45.797 [DEBUG] [Thread-27002] [transport.py] [_log()] userauth is OK
2025-11-13T02:31:45.797 [DEBUG] [Thread-27002] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:31:45.798 [DEBUG] [Thread-27002] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:31:45.798 [DEBUG] [Thread-27002] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:31:45.798 [DEBUG] [Thread-27002] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:31:45.816 [INFO] [Thread-27002] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:31:45.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:31:45.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:31:46.668 [DEBUG] [Thread-27002] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:31:46.668 [DEBUG] [Thread-27002] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:31:46.716 [DEBUG] [Thread-27002] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:31:46.716 [DEBUG] [Thread-27002] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:31:46.726 [DEBUG] [Thread-27002] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:31:46.735 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:31:46.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-11-13T02:31:46.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-11-13T02:31:46.754 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:31:46.754 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:31:46.755 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:31:46.763 [DEBUG] [Thread-27002] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:31:51.099 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:31:51.100 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:31:52.870 [DEBUG] [Thread-27004 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:31:57.708 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:00.867 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:05.889 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:07.910 [DEBUG] [Thread-27005 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:11.522 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:13.843 [DEBUG] [Thread-27006 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:16.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:32:16.784 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:32:16.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-11-13T02:32:17.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 32, 1), 12.45, 43.25, 0.0, 16.45, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:32:17.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:32:01
2025-11-13T02:32:17.564 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:32:17.713 [DEBUG] [Thread-27007] [transport.py] [_log()] starting thread (client mode): 0x1496a6b0
2025-11-13T02:32:17.713 [DEBUG] [Thread-27007] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:32:17.734 [DEBUG] [Thread-27007] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:32:17.734 [INFO] [Thread-27007] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:32:17.737 [DEBUG] [Thread-27007] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:32:17.737 [DEBUG] [Thread-27007] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:32:17.737 [DEBUG] [Thread-27007] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:32:17.737 [DEBUG] [Thread-27007] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:32:17.737 [DEBUG] [Thread-27007] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] client lang: <none>
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] server lang: <none>
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] kex follows: False
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] Compression: none
2025-11-13T02:32:17.738 [DEBUG] [Thread-27007] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:32:17.755 [DEBUG] [Thread-27007] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:32:17.755 [DEBUG] [Thread-27007] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:32:17.756 [DEBUG] [Thread-27007] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:32:17.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:32:17.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:32:17.758 [DEBUG] [Thread-27007] [transport.py] [_log()] userauth is OK
2025-11-13T02:32:17.758 [DEBUG] [Thread-27007] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:32:17.758 [DEBUG] [Thread-27007] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:32:17.758 [DEBUG] [Thread-27007] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:32:17.758 [DEBUG] [Thread-27007] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:32:17.781 [INFO] [Thread-27007] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:32:17.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:32:18.381 [DEBUG] [Thread-27007] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:32:18.381 [DEBUG] [Thread-27007] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:32:18.382 [DEBUG] [Thread-27007] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:32:18.422 [DEBUG] [Thread-27007] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:32:18.423 [DEBUG] [Thread-27007] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:32:18.426 [DEBUG] [Thread-27007] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:32:18.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:32:18.441 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:32:18.443 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:32:18.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:32:18.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:32:18.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:32:18.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:32:18.453 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:32:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:32:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.021966 -999.00  +14.50  10.61     49   +4.10 1 1 1 1 1     0    0 10.54 16.97 ZNESW 13.9 10.6 257.8 16.1 14.7 -25.5 14.6 -24.5 14.4 -24.0 14.7 -24.8
2025-11-13T02:32:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:32:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:32:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.021966
2025-11-13T02:32:18.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:32:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:32:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:32:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:32:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:32:18.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:32:01', tmtdew=12.45, humidity=43.25, cloud=0.0, wind=16.45, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:32:01', seeing=0.91, atlas_timestamp='2025-11-13T00:31:37.862', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:29:00')
2025-11-13T02:32:18.456 [DEBUG] [Thread-27007] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:32:18.539 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:32:18.551 [DEBUG] [Thread-27010] [transport.py] [_log()] starting thread (client mode): 0x1496b430
2025-11-13T02:32:18.551 [DEBUG] [Thread-27010] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:32:18.566 [DEBUG] [Thread-27010] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:32:18.566 [INFO] [Thread-27010] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:32:18.574 [DEBUG] [Thread-27010] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:32:18.574 [DEBUG] [Thread-27010] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:32:18.574 [DEBUG] [Thread-27010] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:32:18.574 [DEBUG] [Thread-27010] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:32:18.574 [DEBUG] [Thread-27010] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:32:18.574 [DEBUG] [Thread-27010] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:32:18.575 [DEBUG] [Thread-27010] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:32:18.575 [DEBUG] [Thread-27010] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:32:18.575 [DEBUG] [Thread-27010] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:32:18.575 [DEBUG] [Thread-27010] [transport.py] [_log()] client lang: <none>
2025-11-13T02:32:18.575 [DEBUG] [Thread-27010] [transport.py] [_log()] server lang: <none>
2025-11-13T02:32:18.575 [DEBUG] [Thread-27010] [transport.py] [_log()] kex follows: False
2025-11-13T02:32:18.575 [DEBUG] [Thread-27010] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:32:18.575 [DEBUG] [Thread-27010] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:32:18.576 [DEBUG] [Thread-27010] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:32:18.576 [DEBUG] [Thread-27010] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:32:18.576 [DEBUG] [Thread-27010] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:32:18.576 [DEBUG] [Thread-27010] [transport.py] [_log()] Compression: none
2025-11-13T02:32:18.576 [DEBUG] [Thread-27010] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:32:18.633 [DEBUG] [Thread-27010] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:32:18.634 [DEBUG] [Thread-27010] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:32:18.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:32:18.635 [DEBUG] [Thread-27010] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:32:18.636 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:32:18.690 [DEBUG] [Thread-27010] [transport.py] [_log()] userauth is OK
2025-11-13T02:32:18.690 [DEBUG] [Thread-27010] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:32:18.691 [DEBUG] [Thread-27010] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:32:18.691 [DEBUG] [Thread-27010] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:32:18.691 [DEBUG] [Thread-27010] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:32:18.710 [INFO] [Thread-27010] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:32: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-11-13T02:32:18.711 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:32:19.532 [DEBUG] [Thread-27010] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:32:19.532 [DEBUG] [Thread-27010] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:32:19.582 [DEBUG] [Thread-27010] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:32:19.582 [DEBUG] [Thread-27010] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:32:19.591 [DEBUG] [Thread-27010] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:32:19.601 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:32:19.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-11-13T02:32:19.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-11-13T02:32:19.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:32:19.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:32:19.621 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:32:19.629 [DEBUG] [Thread-27010] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:32:22.948 [DEBUG] [Thread-27012 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:30.659 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:35.304 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:37.995 [DEBUG] [Thread-27013 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:49.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:32:49.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:32:49.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-11-13T02:32:50.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 32, 33), 12.41, 43.4, 0.0, 16.62, 14.62, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:32:50.269 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:32:33
2025-11-13T02:32:50.392 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:32:50.537 [DEBUG] [Thread-27014] [transport.py] [_log()] starting thread (client mode): 0x1493d030
2025-11-13T02:32:50.537 [DEBUG] [Thread-27014] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:32:50.560 [DEBUG] [Thread-27014] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:32:50.560 [INFO] [Thread-27014] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:32:50.564 [DEBUG] [Thread-27014] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] client lang: <none>
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] server lang: <none>
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] kex follows: False
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] Compression: none
2025-11-13T02:32:50.565 [DEBUG] [Thread-27014] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:32:50.584 [DEBUG] [Thread-27014] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:32:50.584 [DEBUG] [Thread-27014] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:32:50.585 [DEBUG] [Thread-27014] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:32:50.585 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:32:50.586 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:32:50.587 [DEBUG] [Thread-27014] [transport.py] [_log()] userauth is OK
2025-11-13T02:32:50.587 [DEBUG] [Thread-27014] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:32:50.587 [DEBUG] [Thread-27014] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:32:50.587 [DEBUG] [Thread-27014] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:32:50.587 [DEBUG] [Thread-27014] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:32:50.624 [INFO] [Thread-27014] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:32:50.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:32:51.256 [DEBUG] [Thread-27014] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:32:51.257 [DEBUG] [Thread-27014] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:32:51.257 [DEBUG] [Thread-27014] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:32:51.298 [DEBUG] [Thread-27014] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:32:51.298 [DEBUG] [Thread-27014] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:32:51.301 [DEBUG] [Thread-27014] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:32:51.302 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:51.303 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:51.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:32:51.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:32:51.315 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:32:51.317 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:32:51.323 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:32:51.325 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:32:51.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:32:51.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:32:51.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:32:51.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.022313 -999.00  +14.50  12.48     50   +4.20 1 1 1 1 1     0    0 10.37 18.30 ZNESW 15.6 12.5 256.8 21.2 14.7 -25.5 14.6 -24.5 14.3 -24.1 14.7 -25.0
2025-11-13T02:32:51.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:32:51.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:32:51.326 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.022313
2025-11-13T02:32:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:32:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:32:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:32:51.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:32:51.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:32:51.328 [DEBUG] [Thread-27014] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:32:51.328 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:32:33', tmtdew=12.41, humidity=43.4, cloud=0.0, wind=16.62, temperature=14.62, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:32:33', seeing=0.91, atlas_timestamp='2025-11-13T00:32:07.843', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:29:00')
2025-11-13T02:32:51.412 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:32:51.423 [DEBUG] [Thread-27017] [transport.py] [_log()] starting thread (client mode): 0x1493c040
2025-11-13T02:32:51.423 [DEBUG] [Thread-27017] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:32:51.438 [DEBUG] [Thread-27017] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:32:51.438 [INFO] [Thread-27017] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] client lang: <none>
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] server lang: <none>
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] kex follows: False
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:32:51.446 [DEBUG] [Thread-27017] [transport.py] [_log()] Compression: none
2025-11-13T02:32:51.447 [DEBUG] [Thread-27017] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:32:51.505 [DEBUG] [Thread-27017] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:32:51.505 [DEBUG] [Thread-27017] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:32:51.506 [DEBUG] [Thread-27017] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:32:51.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:32:51.507 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:32:51.561 [DEBUG] [Thread-27017] [transport.py] [_log()] userauth is OK
2025-11-13T02:32:51.561 [DEBUG] [Thread-27017] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:32:51.561 [DEBUG] [Thread-27017] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:32:51.561 [DEBUG] [Thread-27017] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:32:51.561 [DEBUG] [Thread-27017] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:32:51.586 [INFO] [Thread-27017] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:32:51.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:32:51.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:32:52.452 [DEBUG] [Thread-27017] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:32:52.453 [DEBUG] [Thread-27017] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:32:52.500 [DEBUG] [Thread-27017] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:32:52.501 [DEBUG] [Thread-27017] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:32:52.510 [DEBUG] [Thread-27017] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:32:52.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:32:52.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-11-13T02:32: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-11-13T02:32:52.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:32:52.539 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:32:52.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:32:52.547 [DEBUG] [Thread-27017] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:32:53.033 [DEBUG] [Thread-27019 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:55.422 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:32:59.798 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:05.936 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:08.085 [DEBUG] [Thread-27020 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:10.586 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:13.900 [DEBUG] [Thread-27021 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:22.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:33:22.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:33:22.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:33:23.116 [DEBUG] [Thread-27022 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 33, 5), 12.3, 43.71, 0.0, 17.27, 14.61, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:33:23.209 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:33:05
2025-11-13T02:33:23.332 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:33:23.478 [DEBUG] [Thread-27023] [transport.py] [_log()] starting thread (client mode): 0x1493f520
2025-11-13T02:33:23.478 [DEBUG] [Thread-27023] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:33:23.493 [DEBUG] [Thread-27023] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:33:23.494 [INFO] [Thread-27023] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] client lang: <none>
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] server lang: <none>
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] kex follows: False
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] Compression: none
2025-11-13T02:33:23.495 [DEBUG] [Thread-27023] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:33:23.511 [DEBUG] [Thread-27023] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:33:23.512 [DEBUG] [Thread-27023] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:33:23.512 [DEBUG] [Thread-27023] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:33:23.512 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:33:23.513 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:33:23.514 [DEBUG] [Thread-27023] [transport.py] [_log()] userauth is OK
2025-11-13T02:33:23.514 [DEBUG] [Thread-27023] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:33:23.514 [DEBUG] [Thread-27023] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:33:23.514 [DEBUG] [Thread-27023] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:33:23.514 [DEBUG] [Thread-27023] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:33:23.533 [INFO] [Thread-27023] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:33:23.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:33:24.159 [DEBUG] [Thread-27023] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:33:24.159 [DEBUG] [Thread-27023] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:33:24.160 [DEBUG] [Thread-27023] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:33:24.201 [DEBUG] [Thread-27023] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:33:24.201 [DEBUG] [Thread-27023] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:33:24.204 [DEBUG] [Thread-27023] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:33:24.217 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:33:24.217 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:33:24.219 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:33:24.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:33:24.227 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:33:24.229 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:33:24.230 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:33:24.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:33:24.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:33:24.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.022660 -999.00  +14.40  12.87     50   +4.30 1 1 1 1 1     0    0 10.46 19.15 ZNESW 14.5 12.9 263.8 18.9 14.7 -25.7 14.6 -24.5 14.4 -24.0 14.6 -24.9
2025-11-13T02:33:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:33:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:33:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.022660
2025-11-13T02:33:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:33:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:33:24.232 [DEBUG] [Thread-27023] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:33:24.232 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:33:24.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:33:24.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:33:24.233 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:33:05', tmtdew=12.3, humidity=43.71, cloud=0.0, wind=17.27, temperature=14.61, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:33:05', seeing=0.86, atlas_timestamp='2025-11-13T00:32:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:32:00')
2025-11-13T02:33:24.316 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:33:24.329 [DEBUG] [Thread-27026] [transport.py] [_log()] starting thread (client mode): 0x1493f010
2025-11-13T02:33:24.329 [DEBUG] [Thread-27026] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:33:24.344 [DEBUG] [Thread-27026] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:33:24.344 [INFO] [Thread-27026] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:33:24.352 [DEBUG] [Thread-27026] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:33:24.352 [DEBUG] [Thread-27026] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:33:24.352 [DEBUG] [Thread-27026] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:33:24.352 [DEBUG] [Thread-27026] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:33:24.352 [DEBUG] [Thread-27026] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] client lang: <none>
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] server lang: <none>
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] kex follows: False
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:33:24.353 [DEBUG] [Thread-27026] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:33:24.354 [DEBUG] [Thread-27026] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:33:24.354 [DEBUG] [Thread-27026] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:33:24.354 [DEBUG] [Thread-27026] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:33:24.354 [DEBUG] [Thread-27026] [transport.py] [_log()] Compression: none
2025-11-13T02:33:24.354 [DEBUG] [Thread-27026] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:33:24.410 [DEBUG] [Thread-27026] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:33:24.411 [DEBUG] [Thread-27026] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:33:24.411 [DEBUG] [Thread-27026] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:33:24.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:33:24.412 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:33:24.469 [DEBUG] [Thread-27026] [transport.py] [_log()] userauth is OK
2025-11-13T02:33:24.469 [DEBUG] [Thread-27026] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:33:24.470 [DEBUG] [Thread-27026] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:33:24.470 [DEBUG] [Thread-27026] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:33:24.470 [DEBUG] [Thread-27026] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:33:24.489 [INFO] [Thread-27026] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:33:24.490 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:33:24.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:33:25.342 [DEBUG] [Thread-27026] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:33:25.342 [DEBUG] [Thread-27026] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:33:25.390 [DEBUG] [Thread-27026] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:33:25.390 [DEBUG] [Thread-27026] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:33:25.399 [DEBUG] [Thread-27026] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:33:25.408 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:33:25.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-11-13T02:33:25.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-11-13T02:33:25.427 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:33:25.427 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:33:25.428 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:33:25.436 [DEBUG] [Thread-27026] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:33:38.147 [DEBUG] [Thread-27028 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:51.505 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:51.506 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:53.185 [DEBUG] [Thread-27029 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:33:55.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:33:55.454 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:33:55.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-11-13T02:33:56.092 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 33, 37), 12.05, 44.38, 0.0, 18.99, 14.52, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:33:56.093 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:33:37
2025-11-13T02:33:56.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:33:56.365 [DEBUG] [Thread-27030] [transport.py] [_log()] starting thread (client mode): 0x14945930
2025-11-13T02:33:56.365 [DEBUG] [Thread-27030] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:33:56.384 [DEBUG] [Thread-27030] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:33:56.385 [INFO] [Thread-27030] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] client lang: <none>
2025-11-13T02:33:56.388 [DEBUG] [Thread-27030] [transport.py] [_log()] server lang: <none>
2025-11-13T02:33:56.389 [DEBUG] [Thread-27030] [transport.py] [_log()] kex follows: False
2025-11-13T02:33:56.389 [DEBUG] [Thread-27030] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:33:56.389 [DEBUG] [Thread-27030] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:33:56.389 [DEBUG] [Thread-27030] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:33:56.389 [DEBUG] [Thread-27030] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:33:56.389 [DEBUG] [Thread-27030] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:33:56.389 [DEBUG] [Thread-27030] [transport.py] [_log()] Compression: none
2025-11-13T02:33:56.389 [DEBUG] [Thread-27030] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:33:56.407 [DEBUG] [Thread-27030] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:33:56.407 [DEBUG] [Thread-27030] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:33:56.408 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:33:56.408 [DEBUG] [Thread-27030] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:33:56.409 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:33:56.410 [DEBUG] [Thread-27030] [transport.py] [_log()] userauth is OK
2025-11-13T02:33:56.410 [DEBUG] [Thread-27030] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:33:56.411 [DEBUG] [Thread-27030] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:33:56.411 [DEBUG] [Thread-27030] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:33:56.411 [DEBUG] [Thread-27030] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:33:56.431 [INFO] [Thread-27030] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:33:56.432 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:33:57.088 [DEBUG] [Thread-27030] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:33:57.088 [DEBUG] [Thread-27030] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:33:57.088 [DEBUG] [Thread-27030] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:33:57.128 [DEBUG] [Thread-27030] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:33:57.128 [DEBUG] [Thread-27030] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:33:57.131 [DEBUG] [Thread-27030] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:33:57.144 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:33:57.144 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:33:57.145 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:33:57.147 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:33:57.152 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:33:57.154 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:33:57.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:33:57.154 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:33:57.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:33:57.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.023007 -999.00  +14.40  12.40     50   +4.20 1 1 1 1 1     0    0 10.41 20.07 ZNESW 11.2 12.4 255.6 16.7 14.7 -25.5 14.6 -24.4 14.3 -24.1 14.6 -24.9
2025-11-13T02:33:57.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:33:57.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:33:57.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.023007
2025-11-13T02:33:57.155 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:33:57.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:33:57.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:33:57.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:33:57.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:33:57.156 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:33:37', tmtdew=12.05, humidity=44.38, cloud=0.0, wind=18.99, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:33:37', seeing=0.86, atlas_timestamp='2025-11-13T00:33:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:32:00')
2025-11-13T02:33:57.156 [DEBUG] [Thread-27030] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:33:57.240 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:33:57.253 [DEBUG] [Thread-27033] [transport.py] [_log()] starting thread (client mode): 0x1496bf10
2025-11-13T02:33:57.253 [DEBUG] [Thread-27033] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:33:57.268 [DEBUG] [Thread-27033] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:33:57.269 [INFO] [Thread-27033] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:33:57.276 [DEBUG] [Thread-27033] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:33:57.276 [DEBUG] [Thread-27033] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] client lang: <none>
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] server lang: <none>
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] kex follows: False
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] Compression: none
2025-11-13T02:33:57.277 [DEBUG] [Thread-27033] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:33:57.337 [DEBUG] [Thread-27033] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:33:57.337 [DEBUG] [Thread-27033] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:33:57.338 [DEBUG] [Thread-27033] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:33:57.338 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:33:57.339 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:33:57.392 [DEBUG] [Thread-27033] [transport.py] [_log()] userauth is OK
2025-11-13T02:33:57.393 [DEBUG] [Thread-27033] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:33:57.393 [DEBUG] [Thread-27033] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:33:57.393 [DEBUG] [Thread-27033] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:33:57.393 [DEBUG] [Thread-27033] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:33:57.417 [INFO] [Thread-27033] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:33:57.417 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:33:57.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:33:58.234 [DEBUG] [Thread-27033] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:33:58.234 [DEBUG] [Thread-27033] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:33:58.282 [DEBUG] [Thread-27033] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:33:58.282 [DEBUG] [Thread-27033] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:33:58.291 [DEBUG] [Thread-27033] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:33:58.300 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:33:58.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-11-13T02:33:58.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-11-13T02:33:58.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:33:58.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:33:58.319 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:33:58.327 [DEBUG] [Thread-27033] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:34:08.222 [DEBUG] [Thread-27035 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:34:13.959 [DEBUG] [Thread-27036 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:34:14.810 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:34:18.006 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:34:23.267 [DEBUG] [Thread-27037 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:34:28.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:34:28.347 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:34:28.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-11-13T02:34:29.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 34, 9), 11.96, 44.65, 0.0, 18.63, 14.46, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:34:29.020 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:34:09
2025-11-13T02:34:29.149 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:34:29.300 [DEBUG] [Thread-27038] [transport.py] [_log()] starting thread (client mode): 0x11f03df0
2025-11-13T02:34:29.300 [DEBUG] [Thread-27038] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:34:29.320 [DEBUG] [Thread-27038] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:34:29.320 [INFO] [Thread-27038] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:34:29.323 [DEBUG] [Thread-27038] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:34:29.323 [DEBUG] [Thread-27038] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:34:29.323 [DEBUG] [Thread-27038] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:34:29.323 [DEBUG] [Thread-27038] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:34:29.323 [DEBUG] [Thread-27038] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] client lang: <none>
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] server lang: <none>
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] kex follows: False
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] Compression: none
2025-11-13T02:34:29.324 [DEBUG] [Thread-27038] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:34:29.341 [DEBUG] [Thread-27038] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:34:29.342 [DEBUG] [Thread-27038] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:34:29.342 [DEBUG] [Thread-27038] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:34:29.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:34:29.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:34:29.343 [DEBUG] [Thread-27038] [transport.py] [_log()] userauth is OK
2025-11-13T02:34:29.343 [DEBUG] [Thread-27038] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:34:29.343 [DEBUG] [Thread-27038] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:34:29.343 [DEBUG] [Thread-27038] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:34:29.343 [DEBUG] [Thread-27038] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:34:29.359 [INFO] [Thread-27038] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:34:29.359 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:34:29.965 [DEBUG] [Thread-27038] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:34:29.965 [DEBUG] [Thread-27038] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:34:29.965 [DEBUG] [Thread-27038] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:34:30.006 [DEBUG] [Thread-27038] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:34:30.006 [DEBUG] [Thread-27038] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:34:30.008 [DEBUG] [Thread-27038] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:34:30.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:34:30.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:34:30.022 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:34:30.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:34:30.026 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:34:30.026 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:34:30.027 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.023702 -999.00  +14.40  14.91     49   +4.00 1 1 1 1 1     0    0 10.64 23.38 ZNESW 15.5 14.9 256.6 22.2 14.7 -25.4 14.6 -24.5 14.3 -24.0 14.6 -24.9
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.023702
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:34:30.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:34:09', tmtdew=11.96, humidity=44.65, cloud=0.0, wind=18.63, temperature=14.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:34:09', seeing=0.97, atlas_timestamp='2025-11-13T00:34:07.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:32:00')
2025-11-13T02:34:30.028 [DEBUG] [Thread-27038] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:34:30.101 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:34:30.115 [DEBUG] [Thread-27041] [transport.py] [_log()] starting thread (client mode): 0x14982ce0
2025-11-13T02:34:30.115 [DEBUG] [Thread-27041] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:34:30.130 [DEBUG] [Thread-27041] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:34:30.130 [INFO] [Thread-27041] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] client lang: <none>
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] server lang: <none>
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] kex follows: False
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:34:30.138 [DEBUG] [Thread-27041] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:34:30.139 [DEBUG] [Thread-27041] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:34:30.139 [DEBUG] [Thread-27041] [transport.py] [_log()] Compression: none
2025-11-13T02:34:30.139 [DEBUG] [Thread-27041] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:34:30.200 [DEBUG] [Thread-27041] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:34:30.201 [DEBUG] [Thread-27041] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:34:30.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:34:30.201 [DEBUG] [Thread-27041] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:34:30.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:34:30.256 [DEBUG] [Thread-27041] [transport.py] [_log()] userauth is OK
2025-11-13T02:34:30.256 [DEBUG] [Thread-27041] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:34:30.256 [DEBUG] [Thread-27041] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:34:30.256 [DEBUG] [Thread-27041] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:34:30.256 [DEBUG] [Thread-27041] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:34:30.274 [INFO] [Thread-27041] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:34:30.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:34:30.274 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:34:31.136 [DEBUG] [Thread-27041] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:34:31.137 [DEBUG] [Thread-27041] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:34:31.184 [DEBUG] [Thread-27041] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:34:31.185 [DEBUG] [Thread-27041] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:34:31.194 [DEBUG] [Thread-27041] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:34:31.202 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:34:31.203 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:34:31.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-11-13T02:34:31.222 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:34:31.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:34:31.223 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:34:31.231 [DEBUG] [Thread-27041] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:34:38.300 [DEBUG] [Thread-27043 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:34:51.708 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:34:51.710 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:34:53.347 [DEBUG] [Thread-27044 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:35:01.252 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:35:01.253 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:35:01.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-11-13T02:35:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 34, 41), 12.04, 44.21, 0.0, 18.54, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:35:01.887 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:34:41
2025-11-13T02:35:02.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:35:02.156 [DEBUG] [Thread-27045] [transport.py] [_log()] starting thread (client mode): 0x1493c730
2025-11-13T02:35:02.156 [DEBUG] [Thread-27045] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:35:02.166 [DEBUG] [Thread-27045] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:35:02.166 [INFO] [Thread-27045] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:35:02.167 [DEBUG] [Thread-27045] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:35:02.167 [DEBUG] [Thread-27045] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:35:02.167 [DEBUG] [Thread-27045] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] client lang: <none>
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] server lang: <none>
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] kex follows: False
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] Compression: none
2025-11-13T02:35:02.168 [DEBUG] [Thread-27045] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:35:02.175 [DEBUG] [Thread-27045] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:35:02.176 [DEBUG] [Thread-27045] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:35:02.176 [DEBUG] [Thread-27045] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:35:02.176 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:35:02.177 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:35:02.177 [DEBUG] [Thread-27045] [transport.py] [_log()] userauth is OK
2025-11-13T02:35:02.177 [DEBUG] [Thread-27045] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:35:02.178 [DEBUG] [Thread-27045] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:35:02.178 [DEBUG] [Thread-27045] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:35:02.178 [DEBUG] [Thread-27045] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:35:02.195 [INFO] [Thread-27045] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:35:02.196 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:35:02.779 [DEBUG] [Thread-27045] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:35:02.780 [DEBUG] [Thread-27045] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:35:02.780 [DEBUG] [Thread-27045] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:35:02.820 [DEBUG] [Thread-27045] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:35:02.821 [DEBUG] [Thread-27045] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:35:02.823 [DEBUG] [Thread-27045] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:35:02.836 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:35:02.836 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:35:02.838 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:35:02.840 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:35:02.846 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:35:02.848 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:35:02.848 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:35:02.848 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:35:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:35:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.024049 -999.00  +14.40  11.39     49   +4.00 1 1 1 1 1     0    0 10.44 26.45 ZNESW 15.3 11.4 258.2 18.5 14.7 -25.6 14.6 -24.5 14.3 -24.1 14.6 -24.9
2025-11-13T02:35:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:35:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:35:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.024049
2025-11-13T02:35:02.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:35:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:35:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:35:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:35:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:35:02.850 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:34:41', tmtdew=12.04, humidity=44.21, cloud=0.0, wind=18.54, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:34:41', seeing=0.97, atlas_timestamp='2025-11-13T00:34:37.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:32:00')
2025-11-13T02:35:02.851 [DEBUG] [Thread-27045] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:35:02.935 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:35:02.948 [DEBUG] [Thread-27048] [transport.py] [_log()] starting thread (client mode): 0x19ddb880
2025-11-13T02:35:02.948 [DEBUG] [Thread-27048] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:35:02.963 [DEBUG] [Thread-27048] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:35:02.963 [INFO] [Thread-27048] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:35:02.971 [DEBUG] [Thread-27048] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:35:02.971 [DEBUG] [Thread-27048] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:35:02.972 [DEBUG] [Thread-27048] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:35:02.972 [DEBUG] [Thread-27048] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:35:02.972 [DEBUG] [Thread-27048] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:35:02.972 [DEBUG] [Thread-27048] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:35:02.972 [DEBUG] [Thread-27048] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:35:02.972 [DEBUG] [Thread-27048] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:35:02.972 [DEBUG] [Thread-27048] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:35:02.972 [DEBUG] [Thread-27048] [transport.py] [_log()] client lang: <none>
2025-11-13T02:35:02.973 [DEBUG] [Thread-27048] [transport.py] [_log()] server lang: <none>
2025-11-13T02:35:02.973 [DEBUG] [Thread-27048] [transport.py] [_log()] kex follows: False
2025-11-13T02:35:02.973 [DEBUG] [Thread-27048] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:35:02.973 [DEBUG] [Thread-27048] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:35:02.973 [DEBUG] [Thread-27048] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:35:02.973 [DEBUG] [Thread-27048] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:35:02.973 [DEBUG] [Thread-27048] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:35:02.973 [DEBUG] [Thread-27048] [transport.py] [_log()] Compression: none
2025-11-13T02:35:02.974 [DEBUG] [Thread-27048] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:35:03.029 [DEBUG] [Thread-27048] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:35:03.030 [DEBUG] [Thread-27048] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:35:03.031 [DEBUG] [Thread-27048] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:35:03.031 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:35:03.032 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:35:03.085 [DEBUG] [Thread-27048] [transport.py] [_log()] userauth is OK
2025-11-13T02:35:03.085 [DEBUG] [Thread-27048] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:35:03.085 [DEBUG] [Thread-27048] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:35:03.086 [DEBUG] [Thread-27048] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:35:03.086 [DEBUG] [Thread-27048] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:35:03.106 [INFO] [Thread-27048] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:35:03.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:35:03.107 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:35:03.956 [DEBUG] [Thread-27048] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:35:03.956 [DEBUG] [Thread-27048] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:35:04.004 [DEBUG] [Thread-27048] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:35:04.004 [DEBUG] [Thread-27048] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:35:04.012 [DEBUG] [Thread-27048] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:35:04.020 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:35:04.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-11-13T02:35:04.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-11-13T02:35:04.035 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:35:04.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:35:04.035 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:35:04.043 [DEBUG] [Thread-27048] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:35:08.378 [DEBUG] [Thread-27050 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:35:14.012 [DEBUG] [Thread-27051 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:35:23.419 [DEBUG] [Thread-27052 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:35:34.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:35:34.038 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:35:34.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-11-13T02:35:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 35, 13), 12.08, 44.08, 0.0, 17.64, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:35:34.667 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:35:13
2025-11-13T02:35:34.790 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:35:34.935 [DEBUG] [Thread-27053] [transport.py] [_log()] starting thread (client mode): 0x11f00790
2025-11-13T02:35:34.935 [DEBUG] [Thread-27053] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:35:34.955 [DEBUG] [Thread-27053] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:35:34.955 [INFO] [Thread-27053] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:35:34.956 [DEBUG] [Thread-27053] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:35:34.956 [DEBUG] [Thread-27053] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:35:34.956 [DEBUG] [Thread-27053] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] client lang: <none>
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] server lang: <none>
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] kex follows: False
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] Compression: none
2025-11-13T02:35:34.957 [DEBUG] [Thread-27053] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:35:34.975 [DEBUG] [Thread-27053] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:35:34.975 [DEBUG] [Thread-27053] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:35:34.976 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:35:34.976 [DEBUG] [Thread-27053] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:35:34.977 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:35:34.978 [DEBUG] [Thread-27053] [transport.py] [_log()] userauth is OK
2025-11-13T02:35:34.978 [DEBUG] [Thread-27053] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:35:34.978 [DEBUG] [Thread-27053] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:35:34.978 [DEBUG] [Thread-27053] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:35:34.978 [DEBUG] [Thread-27053] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:35:34.997 [INFO] [Thread-27053] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:35:34.997 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:35:35.598 [DEBUG] [Thread-27053] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:35:35.598 [DEBUG] [Thread-27053] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:35:35.599 [DEBUG] [Thread-27053] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:35:35.640 [DEBUG] [Thread-27053] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:35:35.640 [DEBUG] [Thread-27053] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:35:35.642 [DEBUG] [Thread-27053] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:35:35.651 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:35:35.652 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:35:35.656 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:35:35.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:35:35.668 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:35:35.670 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:35:35.670 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:35:35.670 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:35:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:35:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.024396 -999.00  +14.40  15.06     49   +3.90 1 1 1 1 1     0    0 10.87 27.93 ZNESW 17.4 15.1 258.8 22.7 14.7 -25.4 14.6 -24.5 14.3 -24.1 14.7 -25.0
2025-11-13T02:35:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:35:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:35:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.024396
2025-11-13T02:35:35.671 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:35:35.672 [DEBUG] [Thread-27053] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:35:35.672 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:35:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:35:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:35:35.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:35:35.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:35:13', tmtdew=12.08, humidity=44.08, cloud=0.0, wind=17.64, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:35:13', seeing=0.97, atlas_timestamp='2025-11-13T00:35:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.025750000000000384, 0.01925000000000132, 0.07474999999999987, 0.06899999999999906, 0.03550000000000075, 0.1042500000000004, -0.019000000000000128, 0.006250000000001421, 0.058499999999998664, 0.05649999999999977, 0.07225000000000037, 0.05799999999999983, 0.11949999999999861, 0.09324999999999939, -0.0005000000000006111, -0.02000000000000135, 0.02024999999999899, 0.07599999999999874, 0.11099999999999888, 0.07624999999999815, 0.1064999999999987, 0.04974999999999952, 0.039250000000000895, 0.012750000000000483, 0.030499999999998195, 0.10050000000000026, 0.11625000000000085, 0.24650000000000105, 0.16949999999999932, 0.08050000000000068, 0.07800000000000118, 0.03900000000000148, 0.04774999999999885], zp_timestamp='2025-11-13T00:32:00')
2025-11-13T02:35:35.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:35:38.459 [DEBUG] [Thread-27056 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:35:51.915 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:35:51.916 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:35:53.514 [DEBUG] [Thread-27057 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:36:08.550 [DEBUG] [Thread-27058 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:36:14.067 [DEBUG] [Thread-27059 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:36:23.581 [DEBUG] [Thread-27060 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:36:38.612 [DEBUG] [Thread-27061 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:36:52.120 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:36:52.121 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:36:53.648 [DEBUG] [Thread-27062 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:37:08.681 [DEBUG] [Thread-27063 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:37:14.126 [DEBUG] [Thread-27064 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:37:23.716 [DEBUG] [Thread-27065 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:37:38.756 [DEBUG] [Thread-27066 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:37:50.907 [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-11-13T02:37:52.324 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:37:52.325 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:37:53.787 [DEBUG] [Thread-27067 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:38:08.819 [DEBUG] [Thread-27068 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:38:14.199 [DEBUG] [Thread-27069 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:38:20.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:38:20.937 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:38:20.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-11-13T02:38:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 37, 53), 12.17, 43.63, 0.0, 17.96, 14.36, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:38:21.598 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:37:53
2025-11-13T02:38:21.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:38:21.883 [DEBUG] [Thread-27070] [transport.py] [_log()] starting thread (client mode): 0x11f00070
2025-11-13T02:38:21.883 [DEBUG] [Thread-27070] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:38:21.903 [DEBUG] [Thread-27070] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:38:21.903 [INFO] [Thread-27070] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:38:21.906 [DEBUG] [Thread-27070] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:38:21.906 [DEBUG] [Thread-27070] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:38:21.906 [DEBUG] [Thread-27070] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:38:21.906 [DEBUG] [Thread-27070] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] client lang: <none>
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] server lang: <none>
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] kex follows: False
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] Compression: none
2025-11-13T02:38:21.907 [DEBUG] [Thread-27070] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:38:21.925 [DEBUG] [Thread-27070] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:38:21.925 [DEBUG] [Thread-27070] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:38:21.925 [DEBUG] [Thread-27070] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:38:21.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:38:21.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:38:21.968 [DEBUG] [Thread-27070] [transport.py] [_log()] userauth is OK
2025-11-13T02:38:21.969 [DEBUG] [Thread-27070] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:38:21.969 [DEBUG] [Thread-27070] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:38:21.969 [DEBUG] [Thread-27070] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:38:21.969 [DEBUG] [Thread-27070] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:38:21.985 [INFO] [Thread-27070] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:38:21.985 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:38:22.620 [DEBUG] [Thread-27070] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:38:22.620 [DEBUG] [Thread-27070] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:38:22.620 [DEBUG] [Thread-27070] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:38:22.661 [DEBUG] [Thread-27070] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:38:22.661 [DEBUG] [Thread-27070] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:38:22.663 [DEBUG] [Thread-27070] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:38:22.677 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:38:22.677 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:38:22.678 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:38:22.679 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:38:22.682 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:38:22.683 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:38:22.683 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:38:22.683 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:38:22.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:38:22.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.026479 -999.00  +14.30  12.12     49   +3.90 1 1 1 1 1     0    0 11.33 44.20 ZNESW 11.6 12.1 278.0 17.2 14.6 -25.7 14.5 -24.6 14.2 -24.1 14.6 -25.1
2025-11-13T02:38:22.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:38:22.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:38:22.683 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.026479
2025-11-13T02:38:22.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:38:22.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:38:22.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:38:22.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:38:22.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:38:22.684 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:37:53', tmtdew=12.17, humidity=43.63, cloud=0.0, wind=17.96, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:37:53', seeing=0.98, atlas_timestamp='2025-11-13T00:38:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.007250000000000867, 0.10025000000000084, 0.08249999999999957, 0.05150000000000077, 0.10375000000000156, 0.037499999999999645, 0.04625000000000057, 0.09750000000000014, 0.0389999999999997, 0.09224999999999994, 0.08699999999999974, 0.14400000000000013, 0.1067499999999999, 0.015000000000000568, 0.0, 0.047250000000000014, 0.08050000000000068, 0.10099999999999909, 0.07424999999999926, 0.08799999999999741, 0.0752499999999987, 0.04925000000000068, 0.01875000000000071, 0.03999999999999915, 0.14599999999999902, 0.1302500000000002, 0.20000000000000107, 0.22000000000000064, 0.11749999999999972, 0.09700000000000131, 0.04150000000000098, 0.010249999999999204], zp_timestamp='2025-11-13T00:34:00')
2025-11-13T02:38:22.684 [DEBUG] [Thread-27070] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:38:22.764 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:38:22.777 [DEBUG] [Thread-27073] [transport.py] [_log()] starting thread (client mode): 0x149809a0
2025-11-13T02:38:22.777 [DEBUG] [Thread-27073] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:38:22.794 [DEBUG] [Thread-27073] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:38:22.794 [INFO] [Thread-27073] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:38:22.801 [DEBUG] [Thread-27073] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] client lang: <none>
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] server lang: <none>
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] kex follows: False
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] Compression: none
2025-11-13T02:38:22.802 [DEBUG] [Thread-27073] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:38:22.859 [DEBUG] [Thread-27073] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:38:22.860 [DEBUG] [Thread-27073] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:38:22.860 [DEBUG] [Thread-27073] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:38:22.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:38:22.860 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:38:22.917 [DEBUG] [Thread-27073] [transport.py] [_log()] userauth is OK
2025-11-13T02:38:22.917 [DEBUG] [Thread-27073] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:38:22.917 [DEBUG] [Thread-27073] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:38:22.917 [DEBUG] [Thread-27073] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:38:22.917 [DEBUG] [Thread-27073] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:38:22.941 [INFO] [Thread-27073] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:38:22.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:38:22.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:38:23.802 [DEBUG] [Thread-27073] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:38:23.802 [DEBUG] [Thread-27073] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:38:23.851 [DEBUG] [Thread-27073] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:38:23.852 [DEBUG] [Thread-27073] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:38:23.859 [DEBUG] [Thread-27075 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:38:23.861 [DEBUG] [Thread-27073] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:38:23.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:38:23.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-11-13T02:38:23.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-11-13T02:38:23.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:38:23.889 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:38:23.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:38:23.899 [DEBUG] [Thread-27073] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:38:38.924 [DEBUG] [Thread-27076 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:38:52.528 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:38:52.529 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:38:53.890 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:38:53.891 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:38:53.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-11-13T02:38:53.962 [DEBUG] [Thread-27077 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:38:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 38, 25), 12.24, 43.43, 0.0, 17.34, 14.36, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:38:54.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:38:25
2025-11-13T02:38:54.681 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:38:54.825 [DEBUG] [Thread-27078] [transport.py] [_log()] starting thread (client mode): 0x14980130
2025-11-13T02:38:54.825 [DEBUG] [Thread-27078] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:38:54.846 [DEBUG] [Thread-27078] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:38:54.846 [INFO] [Thread-27078] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:38:54.848 [DEBUG] [Thread-27078] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] client lang: <none>
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] server lang: <none>
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] kex follows: False
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] Compression: none
2025-11-13T02:38:54.849 [DEBUG] [Thread-27078] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:38:54.868 [DEBUG] [Thread-27078] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:38:54.868 [DEBUG] [Thread-27078] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:38:54.869 [DEBUG] [Thread-27078] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:38:54.869 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:38:54.870 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:38:54.871 [DEBUG] [Thread-27078] [transport.py] [_log()] userauth is OK
2025-11-13T02:38:54.871 [DEBUG] [Thread-27078] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:38:54.871 [DEBUG] [Thread-27078] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:38:54.871 [DEBUG] [Thread-27078] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:38:54.871 [DEBUG] [Thread-27078] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:38:54.886 [INFO] [Thread-27078] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:38:54.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:38:55.486 [DEBUG] [Thread-27078] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:38:55.486 [DEBUG] [Thread-27078] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:38:55.486 [DEBUG] [Thread-27078] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:38:55.527 [DEBUG] [Thread-27078] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:38:55.527 [DEBUG] [Thread-27078] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:38:55.530 [DEBUG] [Thread-27078] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:38:55.542 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:38:55.542 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:38:55.544 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:38:55.546 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:38:55.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:38:55.555 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:38:55.555 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:38:55.555 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:38:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:38:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.026827 -999.00  +14.30  14.42     49   +4.00 1 1 1 1 1     0    0 11.35 43.36 ZNESW 11.1 14.4 262.6 18.0 14.6 -25.7 14.5 -24.7 14.3 -24.2 14.6 -25.1
2025-11-13T02:38:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:38:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:38:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.026827
2025-11-13T02:38:55.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:38:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:38:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:38:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:38:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:38:55.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:38:25', tmtdew=12.24, humidity=43.43, cloud=0.0, wind=17.34, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:38:25', seeing=0.75, atlas_timestamp='2025-11-13T00:38:37.853', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.007250000000000867, 0.10025000000000084, 0.08249999999999957, 0.05150000000000077, 0.10375000000000156, 0.037499999999999645, 0.04625000000000057, 0.09750000000000014, 0.0389999999999997, 0.09224999999999994, 0.08699999999999974, 0.14400000000000013, 0.1067499999999999, 0.015000000000000568, 0.0, 0.047250000000000014, 0.08050000000000068, 0.10099999999999909, 0.07424999999999926, 0.08799999999999741, 0.0752499999999987, 0.04925000000000068, 0.01875000000000071, 0.03999999999999915, 0.14599999999999902, 0.1302500000000002, 0.20000000000000107, 0.22000000000000064, 0.11749999999999972, 0.09700000000000131, 0.04150000000000098, 0.010249999999999204], zp_timestamp='2025-11-13T00:34:00')
2025-11-13T02:38:55.558 [DEBUG] [Thread-27078] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:38:55.648 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:38:55.660 [DEBUG] [Thread-27081] [transport.py] [_log()] starting thread (client mode): 0x1496b370
2025-11-13T02:38:55.660 [DEBUG] [Thread-27081] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:38:55.677 [DEBUG] [Thread-27081] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:38:55.677 [INFO] [Thread-27081] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:38:55.684 [DEBUG] [Thread-27081] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:38:55.684 [DEBUG] [Thread-27081] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] client lang: <none>
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] server lang: <none>
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] kex follows: False
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] Compression: none
2025-11-13T02:38:55.685 [DEBUG] [Thread-27081] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:38:55.743 [DEBUG] [Thread-27081] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:38:55.744 [DEBUG] [Thread-27081] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:38:55.744 [DEBUG] [Thread-27081] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:38:55.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:38:55.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:38:55.800 [DEBUG] [Thread-27081] [transport.py] [_log()] userauth is OK
2025-11-13T02:38:55.800 [DEBUG] [Thread-27081] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:38:55.800 [DEBUG] [Thread-27081] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:38:55.800 [DEBUG] [Thread-27081] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:38:55.800 [DEBUG] [Thread-27081] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:38:55.814 [INFO] [Thread-27081] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:38:55.814 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:38:55.814 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:38:56.653 [DEBUG] [Thread-27081] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:38:56.653 [DEBUG] [Thread-27081] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:38:56.701 [DEBUG] [Thread-27081] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:38:56.701 [DEBUG] [Thread-27081] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:38:56.709 [DEBUG] [Thread-27081] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:38:56.717 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:38:56.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-11-13T02:38:56.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-11-13T02:38:56.733 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:38:56.733 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:38:56.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:38:56.741 [DEBUG] [Thread-27081] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:39:08.991 [DEBUG] [Thread-27083 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:39:14.273 [DEBUG] [Thread-27084 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:39:24.054 [DEBUG] [Thread-27085 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:39:26.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:39:26.764 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:39:26.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-11-13T02:39:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 38, 57), 12.11, 44.03, 0.0, 14.84, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:39:27.418 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:38:57
2025-11-13T02:39:27.541 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:39:27.687 [DEBUG] [Thread-27086] [transport.py] [_log()] starting thread (client mode): 0x149459c0
2025-11-13T02:39:27.688 [DEBUG] [Thread-27086] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:39:27.704 [DEBUG] [Thread-27086] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:39:27.704 [INFO] [Thread-27086] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] client lang: <none>
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] server lang: <none>
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] kex follows: False
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:39:27.706 [DEBUG] [Thread-27086] [transport.py] [_log()] Compression: none
2025-11-13T02:39:27.707 [DEBUG] [Thread-27086] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:39:27.715 [DEBUG] [Thread-27086] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:39:27.716 [DEBUG] [Thread-27086] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:39:27.716 [DEBUG] [Thread-27086] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:39:27.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:39:27.716 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:39:27.717 [DEBUG] [Thread-27086] [transport.py] [_log()] userauth is OK
2025-11-13T02:39:27.717 [DEBUG] [Thread-27086] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:39:27.717 [DEBUG] [Thread-27086] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:39:27.717 [DEBUG] [Thread-27086] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:39:27.717 [DEBUG] [Thread-27086] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:39:27.728 [INFO] [Thread-27086] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:39:27.729 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:39:28.293 [DEBUG] [Thread-27086] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:39:28.293 [DEBUG] [Thread-27086] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:39:28.294 [DEBUG] [Thread-27086] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:39:28.335 [DEBUG] [Thread-27086] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:39:28.335 [DEBUG] [Thread-27086] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:39:28.338 [DEBUG] [Thread-27086] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:39:28.350 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:39:28.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:39:28.352 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:39:28.354 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:39:28.361 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:39:28.363 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:39:28.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:39:28.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:39:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:39:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.027174 -999.00  +14.30   8.19     50   +4.00 1 1 1 1 1     0    0 11.27 41.66 ZNESW 12.3 8.2 256.4 14.1 14.6 -25.7 14.5 -24.8 14.2 -24.5 14.6 -25.1
2025-11-13T02:39:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:39:28.364 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:39:28.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.027174
2025-11-13T02:39:28.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:39:28.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:39:28.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:39:28.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:39:28.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:39:28.366 [DEBUG] [Thread-27086] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:39:28.366 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:38:57', tmtdew=12.11, humidity=44.03, cloud=0.0, wind=14.84, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:38:57', seeing=0.78, atlas_timestamp='2025-11-13T00:39:07.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.007250000000000867, 0.10025000000000084, 0.08249999999999957, 0.05150000000000077, 0.10375000000000156, 0.037499999999999645, 0.04625000000000057, 0.09750000000000014, 0.0389999999999997, 0.09224999999999994, 0.08699999999999974, 0.14400000000000013, 0.1067499999999999, 0.015000000000000568, 0.0, 0.047250000000000014, 0.08050000000000068, 0.10099999999999909, 0.07424999999999926, 0.08799999999999741, 0.0752499999999987, 0.04925000000000068, 0.01875000000000071, 0.03999999999999915, 0.14599999999999902, 0.1302500000000002, 0.20000000000000107, 0.22000000000000064, 0.11749999999999972, 0.09700000000000131, 0.04150000000000098, 0.010249999999999204], zp_timestamp='2025-11-13T00:38:00')
2025-11-13T02:39:28.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:39:28.474 [DEBUG] [Thread-27089] [transport.py] [_log()] starting thread (client mode): 0x14944f40
2025-11-13T02:39:28.474 [DEBUG] [Thread-27089] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:39:28.489 [DEBUG] [Thread-27089] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:39:28.489 [INFO] [Thread-27089] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:39:28.497 [DEBUG] [Thread-27089] [transport.py] [_log()] client lang: <none>
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] server lang: <none>
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] kex follows: False
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] Compression: none
2025-11-13T02:39:28.498 [DEBUG] [Thread-27089] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:39:28.558 [DEBUG] [Thread-27089] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:39:28.559 [DEBUG] [Thread-27089] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:39:28.560 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:39:28.560 [DEBUG] [Thread-27089] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:39:28.561 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:39:28.617 [DEBUG] [Thread-27089] [transport.py] [_log()] userauth is OK
2025-11-13T02:39:28.617 [DEBUG] [Thread-27089] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:39:28.617 [DEBUG] [Thread-27089] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:39:28.617 [DEBUG] [Thread-27089] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:39:28.617 [DEBUG] [Thread-27089] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:39:28.638 [INFO] [Thread-27089] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:39:28.638 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:39:28.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:39:29.437 [DEBUG] [Thread-27089] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:39:29.437 [DEBUG] [Thread-27089] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:39:29.485 [DEBUG] [Thread-27089] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:39:29.486 [DEBUG] [Thread-27089] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:39:29.495 [DEBUG] [Thread-27089] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:39:29.504 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:39: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')
2025-11-13T02:39:29.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-11-13T02:39:29.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:39:29.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:39:29.524 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:39:29.532 [DEBUG] [Thread-27089] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:39:39.085 [DEBUG] [Thread-27091 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:39:52.731 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:39:52.732 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:39:54.130 [DEBUG] [Thread-27092 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:39:59.554 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:39:59.555 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:39:59.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:40:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 39, 29), 12.01, 44.33, 0.0, 15.09, 14.39, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:40:00.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:39:29
2025-11-13T02:40:00.318 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:40:00.464 [DEBUG] [Thread-27093] [transport.py] [_log()] starting thread (client mode): 0x1493f400
2025-11-13T02:40:00.464 [DEBUG] [Thread-27093] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:40:00.478 [DEBUG] [Thread-27093] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:40:00.479 [INFO] [Thread-27093] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] client lang: <none>
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] server lang: <none>
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] kex follows: False
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] Compression: none
2025-11-13T02:40:00.480 [DEBUG] [Thread-27093] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:40:00.489 [DEBUG] [Thread-27093] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:40:00.489 [DEBUG] [Thread-27093] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:40:00.489 [DEBUG] [Thread-27093] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:40:00.489 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:40:00.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:40:00.490 [DEBUG] [Thread-27093] [transport.py] [_log()] userauth is OK
2025-11-13T02:40:00.491 [DEBUG] [Thread-27093] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:40:00.491 [DEBUG] [Thread-27093] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:40:00.491 [DEBUG] [Thread-27093] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:40:00.491 [DEBUG] [Thread-27093] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:40:00.510 [INFO] [Thread-27093] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:40:00.511 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:40:01.100 [DEBUG] [Thread-27093] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:40:01.100 [DEBUG] [Thread-27093] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:40:01.100 [DEBUG] [Thread-27093] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:40:01.141 [DEBUG] [Thread-27093] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:40:01.141 [DEBUG] [Thread-27093] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:40:01.143 [DEBUG] [Thread-27093] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:40:01.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:40:01.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:40:01.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:40:01.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:40:01.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:40:01.159 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:40:01.159 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.027521 -999.00  +14.20  10.12     50   +4.10 1 1 1 1 1     0    0 11.29 44.13 ZNESW 10.2 10.1 258.6 15.1 14.6 -25.9 14.5 -24.6 14.2 -24.4 14.5 -25.2
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.027521
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:40:01.159 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:39:29', tmtdew=12.01, humidity=44.33, cloud=0.0, wind=15.09, temperature=14.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:39:29', seeing=0.78, atlas_timestamp='2025-11-13T00:39:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.007250000000000867, 0.10025000000000084, 0.08249999999999957, 0.05150000000000077, 0.10375000000000156, 0.037499999999999645, 0.04625000000000057, 0.09750000000000014, 0.0389999999999997, 0.09224999999999994, 0.08699999999999974, 0.14400000000000013, 0.1067499999999999, 0.015000000000000568, 0.0, 0.047250000000000014, 0.08050000000000068, 0.10099999999999909, 0.07424999999999926, 0.08799999999999741, 0.0752499999999987, 0.04925000000000068, 0.01875000000000071, 0.03999999999999915, 0.14599999999999902, 0.1302500000000002, 0.20000000000000107, 0.22000000000000064, 0.11749999999999972, 0.09700000000000131, 0.04150000000000098, 0.010249999999999204], zp_timestamp='2025-11-13T00:38:00')
2025-11-13T02:40:01.160 [DEBUG] [Thread-27093] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:40:01.232 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:40:01.243 [DEBUG] [Thread-27096] [transport.py] [_log()] starting thread (client mode): 0x11f010c0
2025-11-13T02:40:01.243 [DEBUG] [Thread-27096] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:40:01.259 [DEBUG] [Thread-27096] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:40:01.259 [INFO] [Thread-27096] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] client lang: <none>
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] server lang: <none>
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] kex follows: False
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] Compression: none
2025-11-13T02:40:01.268 [DEBUG] [Thread-27096] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:40:01.330 [DEBUG] [Thread-27096] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:40:01.331 [DEBUG] [Thread-27096] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:40:01.331 [DEBUG] [Thread-27096] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:40:01.331 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:40:01.332 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:40:01.392 [DEBUG] [Thread-27096] [transport.py] [_log()] userauth is OK
2025-11-13T02:40:01.392 [DEBUG] [Thread-27096] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:40:01.392 [DEBUG] [Thread-27096] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:40:01.392 [DEBUG] [Thread-27096] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:40:01.392 [DEBUG] [Thread-27096] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:40:01.411 [INFO] [Thread-27096] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:40:01.411 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:40:01.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:40:02.243 [DEBUG] [Thread-27096] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:40:02.243 [DEBUG] [Thread-27096] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:40:02.291 [DEBUG] [Thread-27096] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:40:02.291 [DEBUG] [Thread-27096] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:40:02.299 [DEBUG] [Thread-27096] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:40:02.307 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:40:02.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-11-13T02:40:02.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-11-13T02:40:02.325 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:40:02.325 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:40:02.325 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:40:02.333 [DEBUG] [Thread-27096] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:40:09.163 [DEBUG] [Thread-27098 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:40:14.325 [DEBUG] [Thread-27099 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:40:24.211 [DEBUG] [Thread-27100 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:40:32.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:40:32.341 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:40:32.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-11-13T02:40:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 40, 1), 11.91, 44.63, 0.0, 16.04, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:40:32.981 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:40:01
2025-11-13T02:40:33.104 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:40:33.250 [DEBUG] [Thread-27101] [transport.py] [_log()] starting thread (client mode): 0x14947670
2025-11-13T02:40:33.250 [DEBUG] [Thread-27101] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:40:33.275 [DEBUG] [Thread-27101] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:40:33.275 [INFO] [Thread-27101] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] client lang: <none>
2025-11-13T02:40:33.279 [DEBUG] [Thread-27101] [transport.py] [_log()] server lang: <none>
2025-11-13T02:40:33.280 [DEBUG] [Thread-27101] [transport.py] [_log()] kex follows: False
2025-11-13T02:40:33.280 [DEBUG] [Thread-27101] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:40:33.280 [DEBUG] [Thread-27101] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:40:33.280 [DEBUG] [Thread-27101] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:40:33.280 [DEBUG] [Thread-27101] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:40:33.280 [DEBUG] [Thread-27101] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:40:33.280 [DEBUG] [Thread-27101] [transport.py] [_log()] Compression: none
2025-11-13T02:40:33.280 [DEBUG] [Thread-27101] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:40:33.296 [DEBUG] [Thread-27101] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:40:33.297 [DEBUG] [Thread-27101] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:40:33.297 [DEBUG] [Thread-27101] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:40:33.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:40:33.298 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:40:33.299 [DEBUG] [Thread-27101] [transport.py] [_log()] userauth is OK
2025-11-13T02:40:33.300 [DEBUG] [Thread-27101] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:40:33.300 [DEBUG] [Thread-27101] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:40:33.300 [DEBUG] [Thread-27101] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:40:33.300 [DEBUG] [Thread-27101] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:40:33.323 [INFO] [Thread-27101] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:40:33.323 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:40:33.962 [DEBUG] [Thread-27101] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:40:33.963 [DEBUG] [Thread-27101] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:40:33.963 [DEBUG] [Thread-27101] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:40:34.004 [DEBUG] [Thread-27101] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:40:34.004 [DEBUG] [Thread-27101] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:40:34.007 [DEBUG] [Thread-27101] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:40:34.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:40:34.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:40:34.020 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:40:34.021 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:40:34.023 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:40:34.024 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:40:34.024 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:40:34.024 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:40:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:40:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.027521 -999.00  +14.20  10.12     50   +4.10 1 1 1 1 1     0    0 11.29 44.13 ZNESW 10.2 10.1 258.6 15.1 14.6 -25.9 14.5 -24.6 14.2 -24.4 14.5 -25.2
2025-11-13T02:40:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:40:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:40:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.027521
2025-11-13T02:40:34.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:40:34.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:40:34.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:40:34.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:40:34.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:40:34.025 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:40:01', tmtdew=11.91, humidity=44.63, cloud=0.0, wind=16.04, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:40:01', seeing=0.85, atlas_timestamp='2025-11-13T00:39:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.007250000000000867, 0.10025000000000084, 0.08249999999999957, 0.05150000000000077, 0.10375000000000156, 0.037499999999999645, 0.04625000000000057, 0.09750000000000014, 0.0389999999999997, 0.09224999999999994, 0.08699999999999974, 0.14400000000000013, 0.1067499999999999, 0.015000000000000568, 0.0, 0.047250000000000014, 0.08050000000000068, 0.10099999999999909, 0.07424999999999926, 0.08799999999999741, 0.0752499999999987, 0.04925000000000068, 0.01875000000000071, 0.03999999999999915, 0.14599999999999902, 0.1302500000000002, 0.20000000000000107, 0.22000000000000064, 0.11749999999999972, 0.09700000000000131, 0.04150000000000098, 0.010249999999999204], zp_timestamp='2025-11-13T00:38:00')
2025-11-13T02:40:34.025 [DEBUG] [Thread-27101] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:40:34.098 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:40:34.109 [DEBUG] [Thread-27104] [transport.py] [_log()] starting thread (client mode): 0x14980ee0
2025-11-13T02:40:34.109 [DEBUG] [Thread-27104] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:40:34.124 [DEBUG] [Thread-27104] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:40:34.124 [INFO] [Thread-27104] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:40:34.131 [DEBUG] [Thread-27104] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] client lang: <none>
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] server lang: <none>
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] kex follows: False
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] Compression: none
2025-11-13T02:40:34.132 [DEBUG] [Thread-27104] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:40:34.187 [DEBUG] [Thread-27104] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:40:34.187 [DEBUG] [Thread-27104] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:40:34.187 [DEBUG] [Thread-27104] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:40:34.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:40:34.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:40:34.244 [DEBUG] [Thread-27104] [transport.py] [_log()] userauth is OK
2025-11-13T02:40:34.244 [DEBUG] [Thread-27104] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:40:34.244 [DEBUG] [Thread-27104] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:40:34.244 [DEBUG] [Thread-27104] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:40:34.244 [DEBUG] [Thread-27104] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:40:34.258 [INFO] [Thread-27104] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:40:34.258 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:40:34.259 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:40:35.186 [DEBUG] [Thread-27104] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:40:35.186 [DEBUG] [Thread-27104] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:40:35.234 [DEBUG] [Thread-27104] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:40:35.234 [DEBUG] [Thread-27104] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:40:35.242 [DEBUG] [Thread-27104] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:40:35.250 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:40:35.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:40:35.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-11-13T02:40:35.266 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:40:35.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:40:35.266 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:40:35.274 [DEBUG] [Thread-27104] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:40:39.246 [DEBUG] [Thread-27106 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:40:52.934 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:40:52.934 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:40:54.295 [DEBUG] [Thread-27107 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:41:05.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:41:05.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:41:05.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-11-13T02:41:05.970 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 40, 33), 11.9, 44.66, 0.0, 17.66, 14.26, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:41:05.971 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:40:33
2025-11-13T02:41:06.107 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:41:06.262 [DEBUG] [Thread-27108] [transport.py] [_log()] starting thread (client mode): 0x19dd96f0
2025-11-13T02:41:06.262 [DEBUG] [Thread-27108] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:41:06.281 [DEBUG] [Thread-27108] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:41:06.281 [INFO] [Thread-27108] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:41:06.284 [DEBUG] [Thread-27108] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] client lang: <none>
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] server lang: <none>
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] kex follows: False
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] Compression: none
2025-11-13T02:41:06.285 [DEBUG] [Thread-27108] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:41:06.300 [DEBUG] [Thread-27108] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:41:06.300 [DEBUG] [Thread-27108] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:41:06.300 [DEBUG] [Thread-27108] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:41:06.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:41:06.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:41:06.301 [DEBUG] [Thread-27108] [transport.py] [_log()] userauth is OK
2025-11-13T02:41:06.301 [DEBUG] [Thread-27108] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:41:06.301 [DEBUG] [Thread-27108] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:41:06.301 [DEBUG] [Thread-27108] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:41:06.301 [DEBUG] [Thread-27108] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:41:06.310 [INFO] [Thread-27108] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:41:06.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:41:07.109 [DEBUG] [Thread-27108] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:41:07.109 [DEBUG] [Thread-27108] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:41:07.109 [DEBUG] [Thread-27108] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:41:07.150 [DEBUG] [Thread-27108] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:41:07.150 [DEBUG] [Thread-27108] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:41:07.152 [DEBUG] [Thread-27108] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:41:07.164 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:41:07.164 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:41:07.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:41:07.165 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:41:07.168 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:41:07.169 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:41:07.169 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.027868 -999.00  +14.20  14.46     49   +3.90 1 1 1 1 1     0    0 11.52 45.99 ZNESW 12.4 14.5 267.8 17.0 14.6 -25.7 14.4 -24.7 14.2 -24.4 14.5 -25.0
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.027868
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:41:07.169 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:40:33', tmtdew=11.9, humidity=44.66, cloud=0.0, wind=17.66, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:40:33', seeing=0.85, atlas_timestamp='2025-11-13T00:40:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.007250000000000867, 0.10025000000000084, 0.08249999999999957, 0.05150000000000077, 0.10375000000000156, 0.037499999999999645, 0.04625000000000057, 0.09750000000000014, 0.0389999999999997, 0.09224999999999994, 0.08699999999999974, 0.14400000000000013, 0.1067499999999999, 0.015000000000000568, 0.0, 0.047250000000000014, 0.08050000000000068, 0.10099999999999909, 0.07424999999999926, 0.08799999999999741, 0.0752499999999987, 0.04925000000000068, 0.01875000000000071, 0.03999999999999915, 0.14599999999999902, 0.1302500000000002, 0.20000000000000107, 0.22000000000000064, 0.11749999999999972, 0.09700000000000131, 0.04150000000000098, 0.010249999999999204], zp_timestamp='2025-11-13T00:38:00')
2025-11-13T02:41:07.170 [DEBUG] [Thread-27108] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:41:07.244 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:41:07.255 [DEBUG] [Thread-27111] [transport.py] [_log()] starting thread (client mode): 0x1493c460
2025-11-13T02:41:07.255 [DEBUG] [Thread-27111] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:41:07.270 [DEBUG] [Thread-27111] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:41:07.270 [INFO] [Thread-27111] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:41:07.277 [DEBUG] [Thread-27111] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:41:07.277 [DEBUG] [Thread-27111] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:41:07.277 [DEBUG] [Thread-27111] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:41:07.277 [DEBUG] [Thread-27111] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:41:07.277 [DEBUG] [Thread-27111] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:41:07.277 [DEBUG] [Thread-27111] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] client lang: <none>
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] server lang: <none>
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] kex follows: False
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] Compression: none
2025-11-13T02:41:07.278 [DEBUG] [Thread-27111] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:41:07.335 [DEBUG] [Thread-27111] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:41:07.336 [DEBUG] [Thread-27111] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:41:07.336 [DEBUG] [Thread-27111] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:41:07.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:41:07.336 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:41:07.392 [DEBUG] [Thread-27111] [transport.py] [_log()] userauth is OK
2025-11-13T02:41:07.392 [DEBUG] [Thread-27111] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:41:07.392 [DEBUG] [Thread-27111] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:41:07.392 [DEBUG] [Thread-27111] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:41:07.392 [DEBUG] [Thread-27111] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:41:07.407 [INFO] [Thread-27111] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:41:07.407 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:41:07.407 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:41:08.224 [DEBUG] [Thread-27111] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:41:08.225 [DEBUG] [Thread-27111] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:41:08.272 [DEBUG] [Thread-27111] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:41:08.272 [DEBUG] [Thread-27111] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:41:08.281 [DEBUG] [Thread-27111] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:41:08.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:41:08.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-11-13T02:41:08.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-11-13T02:41:08.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:41:08.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:41:08.309 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:41:08.317 [DEBUG] [Thread-27111] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:41:09.326 [DEBUG] [Thread-27113 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:41:14.379 [DEBUG] [Thread-27114 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:41:24.391 [DEBUG] [Thread-27115 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:41:38.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:41:38.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:41:38.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-11-13T02:41:38.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 41, 5), 11.84, 44.83, 0.0, 17.12, 14.24, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:41:38.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:41:05
2025-11-13T02:41:39.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:41:39.280 [DEBUG] [Thread-27116] [transport.py] [_log()] starting thread (client mode): 0x14982ce0
2025-11-13T02:41:39.280 [DEBUG] [Thread-27116] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:41:39.299 [DEBUG] [Thread-27116] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:41:39.300 [INFO] [Thread-27116] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:41:39.301 [DEBUG] [Thread-27116] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:41:39.301 [DEBUG] [Thread-27116] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:41:39.301 [DEBUG] [Thread-27116] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:41:39.301 [DEBUG] [Thread-27116] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:41:39.301 [DEBUG] [Thread-27116] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] client lang: <none>
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] server lang: <none>
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] kex follows: False
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] Compression: none
2025-11-13T02:41:39.302 [DEBUG] [Thread-27116] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:41:39.319 [DEBUG] [Thread-27116] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:41:39.319 [DEBUG] [Thread-27116] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:41:39.319 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:41:39.320 [DEBUG] [Thread-27116] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:41:39.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:41:39.320 [DEBUG] [Thread-27116] [transport.py] [_log()] userauth is OK
2025-11-13T02:41:39.320 [DEBUG] [Thread-27116] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:41:39.320 [DEBUG] [Thread-27116] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:41:39.320 [DEBUG] [Thread-27116] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:41:39.320 [DEBUG] [Thread-27116] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:41:39.330 [INFO] [Thread-27116] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:41:39.331 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:41:39.422 [DEBUG] [Thread-27118 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:41:39.953 [DEBUG] [Thread-27116] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:41:39.953 [DEBUG] [Thread-27116] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:41:39.954 [DEBUG] [Thread-27116] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:41:39.994 [DEBUG] [Thread-27116] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:41:39.994 [DEBUG] [Thread-27116] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:41:39.997 [DEBUG] [Thread-27116] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:41:40.009 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:41:40.010 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:41:40.012 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:41:40.013 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:41:40.019 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:41:40.021 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:41:40.021 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:41:40.021 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:41:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:41:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.028563 -999.00  +14.20  12.02     49   +3.90 1 1 1 1 1     0    0 11.54 45.56 ZNESW 13.7 12.0 255.0 15.0 14.6 -25.7 14.4 -24.7 14.2 -24.3 14.5 -25.0
2025-11-13T02:41:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:41:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:41:40.022 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.028563
2025-11-13T02:41:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:41:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:41:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:41:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:41:40.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:41:40.023 [DEBUG] [Thread-27116] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:41:40.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:41:05', tmtdew=11.84, humidity=44.83, cloud=0.0, wind=17.12, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:41:37', seeing=0.81, atlas_timestamp='2025-11-13T00:41:07.843', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.007250000000000867, 0.10025000000000084, 0.08249999999999957, 0.05150000000000077, 0.10375000000000156, 0.037499999999999645, 0.04625000000000057, 0.09750000000000014, 0.0389999999999997, 0.09224999999999994, 0.08699999999999974, 0.14400000000000013, 0.1067499999999999, 0.015000000000000568, 0.0, 0.047250000000000014, 0.08050000000000068, 0.10099999999999909, 0.07424999999999926, 0.08799999999999741, 0.0752499999999987, 0.04925000000000068, 0.01875000000000071, 0.03999999999999915, 0.14599999999999902, 0.1302500000000002, 0.20000000000000107, 0.22000000000000064, 0.11749999999999972, 0.09700000000000131, 0.04150000000000098, 0.010249999999999204], zp_timestamp='2025-11-13T00:38:00')
2025-11-13T02:41:40.107 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:41:40.119 [DEBUG] [Thread-27120] [transport.py] [_log()] starting thread (client mode): 0x149893f0
2025-11-13T02:41:40.120 [DEBUG] [Thread-27120] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:41:40.134 [DEBUG] [Thread-27120] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:41:40.134 [INFO] [Thread-27120] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:41:40.142 [DEBUG] [Thread-27120] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:41:40.142 [DEBUG] [Thread-27120] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:41:40.142 [DEBUG] [Thread-27120] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:41:40.142 [DEBUG] [Thread-27120] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:41:40.142 [DEBUG] [Thread-27120] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:41:40.142 [DEBUG] [Thread-27120] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] client lang: <none>
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] server lang: <none>
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] kex follows: False
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] Compression: none
2025-11-13T02:41:40.143 [DEBUG] [Thread-27120] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:41:40.201 [DEBUG] [Thread-27120] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:41:40.201 [DEBUG] [Thread-27120] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:41:40.202 [DEBUG] [Thread-27120] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:41:40.202 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:41:40.203 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:41:40.257 [DEBUG] [Thread-27120] [transport.py] [_log()] userauth is OK
2025-11-13T02:41:40.257 [DEBUG] [Thread-27120] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:41:40.257 [DEBUG] [Thread-27120] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:41:40.257 [DEBUG] [Thread-27120] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:41:40.257 [DEBUG] [Thread-27120] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:41:40.276 [INFO] [Thread-27120] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:41:40.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:41:40.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:41:41.100 [DEBUG] [Thread-27120] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:41:41.100 [DEBUG] [Thread-27120] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:41:41.149 [DEBUG] [Thread-27120] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:41:41.149 [DEBUG] [Thread-27120] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:41:41.158 [DEBUG] [Thread-27120] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:41:41.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:41:41.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-11-13T02:41:41.176 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:41:41.186 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:41:41.186 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:41:41.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:41:41.195 [DEBUG] [Thread-27120] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:41:53.137 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:41:53.139 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:41:54.459 [DEBUG] [Thread-27122 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:42:09.520 [DEBUG] [Thread-27123 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:42:11.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:42:11.194 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:42:11.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-11-13T02:42:11.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 41, 37), 11.78, 44.68, 0.0, 16.04, 14.12, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:42:11.897 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:41:37
2025-11-13T02:42:12.029 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:42:12.183 [DEBUG] [Thread-27124] [transport.py] [_log()] starting thread (client mode): 0x1496ba30
2025-11-13T02:42:12.183 [DEBUG] [Thread-27124] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:42:12.203 [DEBUG] [Thread-27124] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:42:12.203 [INFO] [Thread-27124] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] client lang: <none>
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] server lang: <none>
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] kex follows: False
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] Compression: none
2025-11-13T02:42:12.206 [DEBUG] [Thread-27124] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:42:12.221 [DEBUG] [Thread-27124] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:42:12.221 [DEBUG] [Thread-27124] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:42:12.221 [DEBUG] [Thread-27124] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:42:12.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:42:12.221 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:42:12.222 [DEBUG] [Thread-27124] [transport.py] [_log()] userauth is OK
2025-11-13T02:42:12.222 [DEBUG] [Thread-27124] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:42:12.222 [DEBUG] [Thread-27124] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:42:12.222 [DEBUG] [Thread-27124] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:42:12.222 [DEBUG] [Thread-27124] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:42:12.238 [INFO] [Thread-27124] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:42:12.238 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:42:13.009 [DEBUG] [Thread-27124] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:42:13.009 [DEBUG] [Thread-27124] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:42:13.009 [DEBUG] [Thread-27124] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:42:13.050 [DEBUG] [Thread-27124] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:42:13.050 [DEBUG] [Thread-27124] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:42:13.052 [DEBUG] [Thread-27124] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:42:13.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:42:13.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:42:13.064 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:42:13.065 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:42:13.067 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:42:13.068 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:42:13.068 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:42:13.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:42:13.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:42:13.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.028910 -999.00  +14.20  12.59     50   +4.00 1 1 1 1 1     0    0 11.38 42.35 ZNESW 10.5 12.6 254.2 15.5 14.5 -25.9 14.5 -24.8 14.2 -24.5 14.5 -25.1
2025-11-13T02:42:13.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:42:13.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:42:13.068 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.028910
2025-11-13T02:42:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:42:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:42:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:42:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:42:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:42:13.069 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:41:37', tmtdew=11.78, humidity=44.68, cloud=0.0, wind=16.04, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:42:09', seeing=0.81, atlas_timestamp='2025-11-13T00:41:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[0.031749999999998835, 0.007250000000000867, 0.10025000000000084, 0.08249999999999957, 0.05150000000000077, 0.10375000000000156, 0.037499999999999645, 0.04625000000000057, 0.09750000000000014, 0.0389999999999997, 0.09224999999999994, 0.08699999999999974, 0.14400000000000013, 0.1067499999999999, 0.015000000000000568, 0.0, 0.047250000000000014, 0.08050000000000068, 0.10099999999999909, 0.07424999999999926, 0.08799999999999741, 0.0752499999999987, 0.04925000000000068, 0.01875000000000071, 0.03999999999999915, 0.14599999999999902, 0.1302500000000002, 0.20000000000000107, 0.22000000000000064, 0.11749999999999972, 0.09700000000000131, 0.04150000000000098, 0.010249999999999204], zp_timestamp='2025-11-13T00:38:00')
2025-11-13T02:42:13.069 [DEBUG] [Thread-27124] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:42:13.143 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:42:13.156 [DEBUG] [Thread-27127] [transport.py] [_log()] starting thread (client mode): 0x19dd9b70
2025-11-13T02:42:13.156 [DEBUG] [Thread-27127] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:42:13.170 [DEBUG] [Thread-27127] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:42:13.170 [INFO] [Thread-27127] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] client lang: <none>
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] server lang: <none>
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] kex follows: False
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] Compression: none
2025-11-13T02:42:13.178 [DEBUG] [Thread-27127] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:42:13.235 [DEBUG] [Thread-27127] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:42:13.235 [DEBUG] [Thread-27127] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:42:13.235 [DEBUG] [Thread-27127] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:42:13.235 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:42:13.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:42:13.292 [DEBUG] [Thread-27127] [transport.py] [_log()] userauth is OK
2025-11-13T02:42:13.292 [DEBUG] [Thread-27127] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:42:13.292 [DEBUG] [Thread-27127] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:42:13.292 [DEBUG] [Thread-27127] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:42:13.292 [DEBUG] [Thread-27127] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:42:13.310 [INFO] [Thread-27127] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:42:13.310 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:42:13.310 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:42:14.127 [DEBUG] [Thread-27127] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:42:14.127 [DEBUG] [Thread-27127] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:42:14.175 [DEBUG] [Thread-27127] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:42:14.175 [DEBUG] [Thread-27127] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:42:14.183 [DEBUG] [Thread-27127] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:42:14.191 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:42:14.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-11-13T02:42:14.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-11-13T02:42:14.207 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:42:14.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:42:14.207 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:42:14.215 [DEBUG] [Thread-27127] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:42:14.431 [DEBUG] [Thread-27129 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:42:24.549 [DEBUG] [Thread-27130 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:42:39.603 [DEBUG] [Thread-27131 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:42:44.238 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:42:44.238 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:42:44.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-11-13T02:42:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 42, 41), 11.92, 44.56, 0.0, 15.51, 14.16, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:42:44.879 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:42:41
2025-11-13T02:42:45.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:42:45.146 [DEBUG] [Thread-27132] [transport.py] [_log()] starting thread (client mode): 0x14988d00
2025-11-13T02:42:45.147 [DEBUG] [Thread-27132] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:42:45.166 [DEBUG] [Thread-27132] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:42:45.166 [INFO] [Thread-27132] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] client lang: <none>
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] server lang: <none>
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] kex follows: False
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] Compression: none
2025-11-13T02:42:45.169 [DEBUG] [Thread-27132] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:42:45.186 [DEBUG] [Thread-27132] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:42:45.186 [DEBUG] [Thread-27132] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:42:45.187 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:42:45.187 [DEBUG] [Thread-27132] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:42:45.188 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:42:45.190 [DEBUG] [Thread-27132] [transport.py] [_log()] userauth is OK
2025-11-13T02:42:45.190 [DEBUG] [Thread-27132] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:42:45.190 [DEBUG] [Thread-27132] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:42:45.190 [DEBUG] [Thread-27132] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:42:45.190 [DEBUG] [Thread-27132] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:42:45.215 [INFO] [Thread-27132] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:42:45.215 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:42:45.831 [DEBUG] [Thread-27132] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:42:45.831 [DEBUG] [Thread-27132] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:42:45.831 [DEBUG] [Thread-27132] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:42:45.873 [DEBUG] [Thread-27132] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:42:45.873 [DEBUG] [Thread-27132] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:42:45.877 [DEBUG] [Thread-27132] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:42:45.889 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:42:45.889 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:42:45.891 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:42:45.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:42:45.899 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:42:45.900 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:42:45.901 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:42:45.901 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:42:45.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:42:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.029257 -999.00  +14.20  13.18     49   +3.90 1 1 1 1 1     0    0 11.36 41.12 ZNESW 13.9 13.2 251.0 16.2 14.5 -25.7 14.4 -24.8 14.2 -24.5 14.4 -25.2
2025-11-13T02:42:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:42:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:42:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.029257
2025-11-13T02:42:45.902 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:42:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:42:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:42:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:42:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:42:45.903 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:42:41', tmtdew=11.92, humidity=44.56, cloud=0.0, wind=15.51, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:42:41', seeing=1.08, atlas_timestamp='2025-11-13T00:42:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.005250000000000199, 0.035250000000001336, 0.05249999999999844, 0.005499999999999616, 0.07125000000000092, -0.038000000000000256, -0.004749999999999588, 0.028499999999999304, 0.005499999999999616, 0.049249999999998906, 0.07299999999999862, 0.11500000000000021, 0.06274999999999942, -0.02000000000000135, -0.038000000000000256, -0.004749999999999588, 0.041499999999999204, 0.04349999999999987, 0.0832499999999996, 0.09249999999999758, 0.03674999999999784, 0.043250000000000455, -0.013249999999999318, -0.0015000000000000568, 0.08650000000000091, 0.10374999999999979, 0.18050000000000033, 0.1330000000000009, 0.06900000000000261, 0.08700000000000152, -0.013999999999999346, 0.021749999999999048], zp_timestamp='2025-11-13T00:40:00')
2025-11-13T02:42:45.904 [DEBUG] [Thread-27132] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:42:45.989 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:42:46.000 [DEBUG] [Thread-27135] [transport.py] [_log()] starting thread (client mode): 0x14982ce0
2025-11-13T02:42:46.001 [DEBUG] [Thread-27135] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:42:46.015 [DEBUG] [Thread-27135] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:42:46.015 [INFO] [Thread-27135] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:42:46.023 [DEBUG] [Thread-27135] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:42:46.023 [DEBUG] [Thread-27135] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:42:46.023 [DEBUG] [Thread-27135] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:42:46.023 [DEBUG] [Thread-27135] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:42:46.023 [DEBUG] [Thread-27135] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:42:46.023 [DEBUG] [Thread-27135] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:42:46.023 [DEBUG] [Thread-27135] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] client lang: <none>
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] server lang: <none>
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] kex follows: False
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] Compression: none
2025-11-13T02:42:46.024 [DEBUG] [Thread-27135] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:42:46.084 [DEBUG] [Thread-27135] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:42:46.085 [DEBUG] [Thread-27135] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:42:46.085 [DEBUG] [Thread-27135] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:42:46.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:42:46.086 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:42:46.141 [DEBUG] [Thread-27135] [transport.py] [_log()] userauth is OK
2025-11-13T02:42:46.141 [DEBUG] [Thread-27135] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:42:46.141 [DEBUG] [Thread-27135] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:42:46.141 [DEBUG] [Thread-27135] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:42:46.141 [DEBUG] [Thread-27135] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:42:46.161 [INFO] [Thread-27135] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:42:46.161 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:42:46.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:42:46.993 [DEBUG] [Thread-27135] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:42:46.993 [DEBUG] [Thread-27135] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:42:47.042 [DEBUG] [Thread-27135] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:42:47.043 [DEBUG] [Thread-27135] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:42:47.052 [DEBUG] [Thread-27135] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:42:47.061 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:42:47.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:42:47.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-11-13T02:42:47.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:42:47.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:42:47.080 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:42:47.088 [DEBUG] [Thread-27135] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:42:53.340 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:42:53.341 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:42:54.635 [DEBUG] [Thread-27137 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:43:09.689 [DEBUG] [Thread-27138 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:43:14.482 [DEBUG] [Thread-27139 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:43:17.083 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:43:17.083 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:43:17.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-11-13T02:43:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 43, 13), 11.89, 44.68, 0.0, 15.58, 14.21, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:43:17.731 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:43:13
2025-11-13T02:43:17.849 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:43:17.996 [DEBUG] [Thread-27140] [transport.py] [_log()] starting thread (client mode): 0x14968b50
2025-11-13T02:43:17.997 [DEBUG] [Thread-27140] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:43:18.017 [DEBUG] [Thread-27140] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:43:18.017 [INFO] [Thread-27140] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:43:18.020 [DEBUG] [Thread-27140] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:43:18.020 [DEBUG] [Thread-27140] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:43:18.020 [DEBUG] [Thread-27140] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] client lang: <none>
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] server lang: <none>
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] kex follows: False
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:43:18.021 [DEBUG] [Thread-27140] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:43:18.022 [DEBUG] [Thread-27140] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:43:18.022 [DEBUG] [Thread-27140] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:43:18.022 [DEBUG] [Thread-27140] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:43:18.022 [DEBUG] [Thread-27140] [transport.py] [_log()] Compression: none
2025-11-13T02:43:18.022 [DEBUG] [Thread-27140] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:43:18.041 [DEBUG] [Thread-27140] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:43:18.042 [DEBUG] [Thread-27140] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:43:18.042 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:43:18.043 [DEBUG] [Thread-27140] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:43:18.044 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:43:18.045 [DEBUG] [Thread-27140] [transport.py] [_log()] userauth is OK
2025-11-13T02:43:18.045 [DEBUG] [Thread-27140] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:43:18.045 [DEBUG] [Thread-27140] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:43:18.045 [DEBUG] [Thread-27140] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:43:18.045 [DEBUG] [Thread-27140] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:43:18.082 [INFO] [Thread-27140] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:43:18.083 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:43:18.737 [DEBUG] [Thread-27140] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:43:18.737 [DEBUG] [Thread-27140] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:43:18.737 [DEBUG] [Thread-27140] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:43:18.778 [DEBUG] [Thread-27140] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:43:18.778 [DEBUG] [Thread-27140] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:43:18.781 [DEBUG] [Thread-27140] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:43:18.796 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:43:18.796 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:43:18.798 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:43:18.800 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:43:18.806 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:43:18.808 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:43:18.808 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:43:18.808 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:43:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:43:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.029604 -999.00  +14.20  14.67     49   +3.80 1 1 1 1 1     0    0 11.28 39.29 ZNESW 14.7 14.7 254.2 16.6 14.5 -25.8 14.4 -24.8 14.2 -24.3 14.5 -25.1
2025-11-13T02:43:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:43:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:43:18.809 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.029604
2025-11-13T02:43:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:43:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:43:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:43:18.810 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:43:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:43:18.811 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:43:13', tmtdew=11.89, humidity=44.68, cloud=0.0, wind=15.58, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:43:14', seeing=1.08, atlas_timestamp='2025-11-13T00:42:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.005250000000000199, 0.035250000000001336, 0.05249999999999844, 0.005499999999999616, 0.07125000000000092, -0.038000000000000256, -0.004749999999999588, 0.028499999999999304, 0.005499999999999616, 0.049249999999998906, 0.07299999999999862, 0.11500000000000021, 0.06274999999999942, -0.02000000000000135, -0.038000000000000256, -0.004749999999999588, 0.041499999999999204, 0.04349999999999987, 0.0832499999999996, 0.09249999999999758, 0.03674999999999784, 0.043250000000000455, -0.013249999999999318, -0.0015000000000000568, 0.08650000000000091, 0.10374999999999979, 0.18050000000000033, 0.1330000000000009, 0.06900000000000261, 0.08700000000000152, -0.013999999999999346, 0.021749999999999048], zp_timestamp='2025-11-13T00:40:00')
2025-11-13T02:43:18.811 [DEBUG] [Thread-27140] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:43:18.895 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:43:18.907 [DEBUG] [Thread-27143] [transport.py] [_log()] starting thread (client mode): 0x173447c0
2025-11-13T02:43:18.907 [DEBUG] [Thread-27143] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:43:18.922 [DEBUG] [Thread-27143] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:43:18.922 [INFO] [Thread-27143] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:43:18.930 [DEBUG] [Thread-27143] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:43:18.930 [DEBUG] [Thread-27143] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:43:18.930 [DEBUG] [Thread-27143] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] client lang: <none>
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] server lang: <none>
2025-11-13T02:43:18.931 [DEBUG] [Thread-27143] [transport.py] [_log()] kex follows: False
2025-11-13T02:43:18.932 [DEBUG] [Thread-27143] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:43:18.932 [DEBUG] [Thread-27143] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:43:18.932 [DEBUG] [Thread-27143] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:43:18.932 [DEBUG] [Thread-27143] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:43:18.932 [DEBUG] [Thread-27143] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:43:18.932 [DEBUG] [Thread-27143] [transport.py] [_log()] Compression: none
2025-11-13T02:43:18.933 [DEBUG] [Thread-27143] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:43:18.992 [DEBUG] [Thread-27143] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:43:18.993 [DEBUG] [Thread-27143] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:43:18.994 [DEBUG] [Thread-27143] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:43:18.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:43:18.995 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:43:19.048 [DEBUG] [Thread-27143] [transport.py] [_log()] userauth is OK
2025-11-13T02:43:19.049 [DEBUG] [Thread-27143] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:43:19.049 [DEBUG] [Thread-27143] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:43:19.049 [DEBUG] [Thread-27143] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:43:19.049 [DEBUG] [Thread-27143] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:43:19.067 [INFO] [Thread-27143] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:43:19.067 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:43:19.068 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:43:19.882 [DEBUG] [Thread-27143] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:43:19.883 [DEBUG] [Thread-27143] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:43:19.931 [DEBUG] [Thread-27143] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:43:19.931 [DEBUG] [Thread-27143] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:43:19.943 [DEBUG] [Thread-27143] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:43:19.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:43:19.952 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:43:19.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-11-13T02:43:19.976 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:43:19.976 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:43:19.977 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:43:19.986 [DEBUG] [Thread-27143] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:43:24.726 [DEBUG] [Thread-27145 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:43:39.778 [DEBUG] [Thread-27146 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:43:50.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:43:50.004 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:43:50.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-11-13T02:43:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 43, 45), 11.96, 44.1, 0.0, 16.02, 14.16, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:43:50.668 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:43:45
2025-11-13T02:43:50.785 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:43:50.930 [DEBUG] [Thread-27147] [transport.py] [_log()] starting thread (client mode): 0x14988520
2025-11-13T02:43:50.930 [DEBUG] [Thread-27147] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:43:50.950 [DEBUG] [Thread-27147] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:43:50.950 [INFO] [Thread-27147] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] client lang: <none>
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] server lang: <none>
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] kex follows: False
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:43:50.961 [DEBUG] [Thread-27147] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:43:50.962 [DEBUG] [Thread-27147] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:43:50.962 [DEBUG] [Thread-27147] [transport.py] [_log()] Compression: none
2025-11-13T02:43:50.962 [DEBUG] [Thread-27147] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:43:50.980 [DEBUG] [Thread-27147] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:43:50.981 [DEBUG] [Thread-27147] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:43:50.981 [DEBUG] [Thread-27147] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:43:50.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:43:50.982 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:43:50.984 [DEBUG] [Thread-27147] [transport.py] [_log()] userauth is OK
2025-11-13T02:43:50.984 [DEBUG] [Thread-27147] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:43:50.984 [DEBUG] [Thread-27147] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:43:50.984 [DEBUG] [Thread-27147] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:43:50.984 [DEBUG] [Thread-27147] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:43:51.017 [INFO] [Thread-27147] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:43:51.018 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:43:51.661 [DEBUG] [Thread-27147] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:43:51.661 [DEBUG] [Thread-27147] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:43:51.662 [DEBUG] [Thread-27147] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:43:51.702 [DEBUG] [Thread-27147] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:43:51.703 [DEBUG] [Thread-27147] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:43:51.706 [DEBUG] [Thread-27147] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:43:51.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:43:51.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:43:51.721 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:43:51.723 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:43:51.729 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:43:51.731 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:43:51.731 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:43:51.731 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:43:51.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:43:51.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.029951 -999.00  +14.20  11.79     49   +3.80 1 1 1 1 1     0    0 11.29 38.91 ZNESW 13.7 11.8 259.2 16.5 14.5 -25.7 14.4 -24.7 14.1 -24.3 14.4 -25.1
2025-11-13T02:43:51.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:43:51.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:43:51.732 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.029951
2025-11-13T02:43:51.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:43:51.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:43:51.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:43:51.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:43:51.733 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:43:51.734 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:43:45', tmtdew=11.96, humidity=44.1, cloud=0.0, wind=16.02, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:43:46', seeing=0.88, atlas_timestamp='2025-11-13T00:43:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.005250000000000199, 0.035250000000001336, 0.05249999999999844, 0.005499999999999616, 0.07125000000000092, -0.038000000000000256, -0.004749999999999588, 0.028499999999999304, 0.005499999999999616, 0.049249999999998906, 0.07299999999999862, 0.11500000000000021, 0.06274999999999942, -0.02000000000000135, -0.038000000000000256, -0.004749999999999588, 0.041499999999999204, 0.04349999999999987, 0.0832499999999996, 0.09249999999999758, 0.03674999999999784, 0.043250000000000455, -0.013249999999999318, -0.0015000000000000568, 0.08650000000000091, 0.10374999999999979, 0.18050000000000033, 0.1330000000000009, 0.06900000000000261, 0.08700000000000152, -0.013999999999999346, 0.021749999999999048], zp_timestamp='2025-11-13T00:40:00')
2025-11-13T02:43:51.734 [DEBUG] [Thread-27147] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:43:51.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:43:51.835 [DEBUG] [Thread-27150] [transport.py] [_log()] starting thread (client mode): 0x19ddabf0
2025-11-13T02:43:51.835 [DEBUG] [Thread-27150] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:43:51.850 [DEBUG] [Thread-27150] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:43:51.850 [INFO] [Thread-27150] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:43:51.857 [DEBUG] [Thread-27150] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:43:51.857 [DEBUG] [Thread-27150] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:43:51.857 [DEBUG] [Thread-27150] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:43:51.857 [DEBUG] [Thread-27150] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] client lang: <none>
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] server lang: <none>
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] kex follows: False
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] Compression: none
2025-11-13T02:43:51.858 [DEBUG] [Thread-27150] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:43:51.916 [DEBUG] [Thread-27150] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:43:51.916 [DEBUG] [Thread-27150] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:43:51.917 [DEBUG] [Thread-27150] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:43:51.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:43:51.917 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:43:51.972 [DEBUG] [Thread-27150] [transport.py] [_log()] userauth is OK
2025-11-13T02:43:51.973 [DEBUG] [Thread-27150] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:43:51.973 [DEBUG] [Thread-27150] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:43:51.973 [DEBUG] [Thread-27150] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:43:51.973 [DEBUG] [Thread-27150] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:43:51.991 [INFO] [Thread-27150] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:43:51.991 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:43:51.992 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:43:52.811 [DEBUG] [Thread-27150] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:43:52.812 [DEBUG] [Thread-27150] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:43:52.860 [DEBUG] [Thread-27150] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:43:52.860 [DEBUG] [Thread-27150] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:43:52.869 [DEBUG] [Thread-27150] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:43:52.878 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:43: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-11-13T02:43:52.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:43:52.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:43:52.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:43:52.898 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:43:52.906 [DEBUG] [Thread-27150] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:43:53.543 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:43:53.544 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:43:54.817 [DEBUG] [Thread-27152 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:44:09.875 [DEBUG] [Thread-27153 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:44:14.537 [DEBUG] [Thread-27154 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:44:22.907 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:44:22.907 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:44:22.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-11-13T02:44:23.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 44, 17), 12.01, 43.96, 0.0, 16.07, 14.17, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:44:23.557 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:44:17
2025-11-13T02:44:23.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:44:23.823 [DEBUG] [Thread-27155] [transport.py] [_log()] starting thread (client mode): 0x14982830
2025-11-13T02:44:23.823 [DEBUG] [Thread-27155] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:44:23.842 [DEBUG] [Thread-27155] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:44:23.842 [INFO] [Thread-27155] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:44:23.845 [DEBUG] [Thread-27155] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:44:23.845 [DEBUG] [Thread-27155] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:44:23.845 [DEBUG] [Thread-27155] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:44:23.845 [DEBUG] [Thread-27155] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:44:23.845 [DEBUG] [Thread-27155] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] client lang: <none>
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] server lang: <none>
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] kex follows: False
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] Compression: none
2025-11-13T02:44:23.846 [DEBUG] [Thread-27155] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:44:23.862 [DEBUG] [Thread-27155] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:44:23.862 [DEBUG] [Thread-27155] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:44:23.863 [DEBUG] [Thread-27155] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:44:23.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:44:23.863 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:44:23.864 [DEBUG] [Thread-27155] [transport.py] [_log()] userauth is OK
2025-11-13T02:44:23.865 [DEBUG] [Thread-27155] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:44:23.865 [DEBUG] [Thread-27155] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:44:23.865 [DEBUG] [Thread-27155] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:44:23.865 [DEBUG] [Thread-27155] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:44:23.901 [INFO] [Thread-27155] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:44:23.911 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:44:24.521 [DEBUG] [Thread-27155] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:44:24.521 [DEBUG] [Thread-27155] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:44:24.521 [DEBUG] [Thread-27155] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:44:24.562 [DEBUG] [Thread-27155] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:44:24.562 [DEBUG] [Thread-27155] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:44:24.565 [DEBUG] [Thread-27155] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:44:24.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:44:24.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:44:24.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:44:24.580 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:44:24.585 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:44:24.587 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:44:24.587 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:44:24.587 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:44:24.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:44:24.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.030299 -999.00  +14.20  12.37     49   +3.80 1 1 1 1 1     0    0 11.29 38.40 ZNESW 12.0 12.4 260.4 19.1 14.5 -25.8 14.4 -24.9 14.1 -24.5 14.4 -25.2
2025-11-13T02:44:24.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:44:24.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:44:24.588 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.030299
2025-11-13T02:44:24.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:44:24.589 [DEBUG] [Thread-27155] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:44:24.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:44:24.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:44:24.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:44:24.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:44:24.591 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:44:17', tmtdew=12.01, humidity=43.96, cloud=0.0, wind=16.07, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:44:18', seeing=0.94, atlas_timestamp='2025-11-13T00:43:37.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.005250000000000199, 0.035250000000001336, 0.05249999999999844, 0.005499999999999616, 0.07125000000000092, -0.038000000000000256, -0.004749999999999588, 0.028499999999999304, 0.005499999999999616, 0.049249999999998906, 0.07299999999999862, 0.11500000000000021, 0.06274999999999942, -0.02000000000000135, -0.038000000000000256, -0.004749999999999588, 0.041499999999999204, 0.04349999999999987, 0.0832499999999996, 0.09249999999999758, 0.03674999999999784, 0.043250000000000455, -0.013249999999999318, -0.0015000000000000568, 0.08650000000000091, 0.10374999999999979, 0.18050000000000033, 0.1330000000000009, 0.06900000000000261, 0.08700000000000152, -0.013999999999999346, 0.021749999999999048], zp_timestamp='2025-11-13T00:40:00')
2025-11-13T02:44:24.667 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:44:24.679 [DEBUG] [Thread-27158] [transport.py] [_log()] starting thread (client mode): 0x149f0d60
2025-11-13T02:44:24.680 [DEBUG] [Thread-27158] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:44:24.698 [DEBUG] [Thread-27158] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:44:24.698 [INFO] [Thread-27158] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:44:24.706 [DEBUG] [Thread-27158] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] client lang: <none>
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] server lang: <none>
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] kex follows: False
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:44:24.707 [DEBUG] [Thread-27158] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:44:24.708 [DEBUG] [Thread-27158] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:44:24.708 [DEBUG] [Thread-27158] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:44:24.708 [DEBUG] [Thread-27158] [transport.py] [_log()] Compression: none
2025-11-13T02:44:24.708 [DEBUG] [Thread-27158] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:44:24.763 [DEBUG] [Thread-27158] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:44:24.763 [DEBUG] [Thread-27158] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:44:24.764 [DEBUG] [Thread-27158] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:44:24.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:44:24.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:44:24.828 [DEBUG] [Thread-27158] [transport.py] [_log()] userauth is OK
2025-11-13T02:44:24.829 [DEBUG] [Thread-27158] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:44:24.829 [DEBUG] [Thread-27158] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:44:24.829 [DEBUG] [Thread-27158] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:44:24.829 [DEBUG] [Thread-27158] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:44:24.848 [INFO] [Thread-27158] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:44:24.848 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:44:24.849 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:44:24.908 [DEBUG] [Thread-27160 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:44:25.727 [DEBUG] [Thread-27158] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:44:25.727 [DEBUG] [Thread-27158] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:44:25.775 [DEBUG] [Thread-27158] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:44:25.775 [DEBUG] [Thread-27158] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:44:25.784 [DEBUG] [Thread-27158] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:44:25.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:44:25.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-11-13T02:44:25.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-11-13T02:44:25.821 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:44:25.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:44:25.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:44:25.830 [DEBUG] [Thread-27158] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:44:39.971 [DEBUG] [Thread-27161 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:44:53.746 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:44:53.748 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:44:55.001 [DEBUG] [Thread-27162 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:44:55.852 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:44:55.853 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:44:55.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-11-13T02:44:56.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 44, 49), 12.13, 43.88, 0.0, 18.19, 14.19, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:44:56.511 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:44:49
2025-11-13T02:44:56.632 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:44:56.786 [DEBUG] [Thread-27163] [transport.py] [_log()] starting thread (client mode): 0x14980910
2025-11-13T02:44:56.786 [DEBUG] [Thread-27163] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:44:56.805 [DEBUG] [Thread-27163] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:44:56.805 [INFO] [Thread-27163] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:44:56.808 [DEBUG] [Thread-27163] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] client lang: <none>
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] server lang: <none>
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] kex follows: False
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:44:56.809 [DEBUG] [Thread-27163] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:44:56.810 [DEBUG] [Thread-27163] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:44:56.810 [DEBUG] [Thread-27163] [transport.py] [_log()] Compression: none
2025-11-13T02:44:56.810 [DEBUG] [Thread-27163] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:44:56.832 [DEBUG] [Thread-27163] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:44:56.833 [DEBUG] [Thread-27163] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:44:56.834 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:44:56.834 [DEBUG] [Thread-27163] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:44:56.835 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:44:56.837 [DEBUG] [Thread-27163] [transport.py] [_log()] userauth is OK
2025-11-13T02:44:56.837 [DEBUG] [Thread-27163] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:44:56.837 [DEBUG] [Thread-27163] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:44:56.837 [DEBUG] [Thread-27163] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:44:56.837 [DEBUG] [Thread-27163] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:44:56.872 [INFO] [Thread-27163] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:44:56.873 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:44:57.453 [DEBUG] [Thread-27163] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:44:57.453 [DEBUG] [Thread-27163] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:44:57.453 [DEBUG] [Thread-27163] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:44:57.494 [DEBUG] [Thread-27163] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:44:57.494 [DEBUG] [Thread-27163] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:44:57.497 [DEBUG] [Thread-27163] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:44:57.510 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:44:57.511 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:44:57.512 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:44:57.514 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:44:57.520 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:44:57.523 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:44:57.523 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:44:57.523 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:44:57.531 [DEBUG] [Thread-27163] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:44:57.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:44:57.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.030993 -999.00  +14.20   9.74     49   +3.60 1 1 1 1 1     0    0 11.03 40.56 ZNESW 12.2 9.7 251.2 18.4 14.5 -25.8 14.3 -24.8 14.1 -24.5 14.4 -25.4
2025-11-13T02:44:57.532 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:44:57.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:44:57.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.030993
2025-11-13T02:44:57.533 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:44:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:44:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:44:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:44:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:44:57.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:44:49', tmtdew=12.13, humidity=43.88, cloud=0.0, wind=18.19, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:44:50', seeing=0.94, atlas_timestamp='2025-11-13T00:44:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[0.012749999999998707, -0.005250000000000199, 0.035250000000001336, 0.05249999999999844, 0.005499999999999616, 0.07125000000000092, -0.038000000000000256, -0.004749999999999588, 0.028499999999999304, 0.005499999999999616, 0.049249999999998906, 0.07299999999999862, 0.11500000000000021, 0.06274999999999942, -0.02000000000000135, -0.038000000000000256, -0.004749999999999588, 0.041499999999999204, 0.04349999999999987, 0.0832499999999996, 0.09249999999999758, 0.03674999999999784, 0.043250000000000455, -0.013249999999999318, -0.0015000000000000568, 0.08650000000000091, 0.10374999999999979, 0.18050000000000033, 0.1330000000000009, 0.06900000000000261, 0.08700000000000152, -0.013999999999999346, 0.021749999999999048], zp_timestamp='2025-11-13T00:40:00')
2025-11-13T02:44:57.608 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:44:57.620 [DEBUG] [Thread-27166] [transport.py] [_log()] starting thread (client mode): 0x149f0bb0
2025-11-13T02:44:57.620 [DEBUG] [Thread-27166] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:44:57.635 [DEBUG] [Thread-27166] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:44:57.635 [INFO] [Thread-27166] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] client lang: <none>
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] server lang: <none>
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] kex follows: False
2025-11-13T02:44:57.643 [DEBUG] [Thread-27166] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:44:57.644 [DEBUG] [Thread-27166] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:44:57.644 [DEBUG] [Thread-27166] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:44:57.644 [DEBUG] [Thread-27166] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:44:57.644 [DEBUG] [Thread-27166] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:44:57.644 [DEBUG] [Thread-27166] [transport.py] [_log()] Compression: none
2025-11-13T02:44:57.644 [DEBUG] [Thread-27166] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:44:57.700 [DEBUG] [Thread-27166] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:44:57.701 [DEBUG] [Thread-27166] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:44:57.701 [DEBUG] [Thread-27166] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:44:57.701 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:44:57.702 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:44:57.756 [DEBUG] [Thread-27166] [transport.py] [_log()] userauth is OK
2025-11-13T02:44:57.757 [DEBUG] [Thread-27166] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:44:57.757 [DEBUG] [Thread-27166] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:44:57.757 [DEBUG] [Thread-27166] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:44:57.757 [DEBUG] [Thread-27166] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:44:57.776 [INFO] [Thread-27166] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:44:57.777 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:44:57.777 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:44:58.603 [DEBUG] [Thread-27166] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:44:58.603 [DEBUG] [Thread-27166] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:44:58.650 [DEBUG] [Thread-27166] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:44:58.650 [DEBUG] [Thread-27166] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:44:58.659 [DEBUG] [Thread-27166] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:44:58.668 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:44:58.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-11-13T02:44:58.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-11-13T02:44:58.685 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:44:58.685 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:44:58.686 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:44:58.693 [DEBUG] [Thread-27166] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:45:10.039 [DEBUG] [Thread-27168 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:45:14.598 [DEBUG] [Thread-27169 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:45:25.096 [DEBUG] [Thread-27170 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:45:28.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:45:28.716 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:45:28.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-11-13T02:45:29.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 45, 21), 12.13, 43.85, 0.0, 18.79, 14.12, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:45:29.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:45:21
2025-11-13T02:45:29.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:45:29.602 [DEBUG] [Thread-27171] [transport.py] [_log()] starting thread (client mode): 0x149f1390
2025-11-13T02:45:29.603 [DEBUG] [Thread-27171] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:45:29.624 [DEBUG] [Thread-27171] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:45:29.624 [INFO] [Thread-27171] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:45:29.627 [DEBUG] [Thread-27171] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] client lang: <none>
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] server lang: <none>
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] kex follows: False
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] Compression: none
2025-11-13T02:45:29.628 [DEBUG] [Thread-27171] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:45:29.646 [DEBUG] [Thread-27171] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:45:29.647 [DEBUG] [Thread-27171] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:45:29.647 [DEBUG] [Thread-27171] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:45:29.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:45:29.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:45:29.649 [DEBUG] [Thread-27171] [transport.py] [_log()] userauth is OK
2025-11-13T02:45:29.649 [DEBUG] [Thread-27171] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:45:29.650 [DEBUG] [Thread-27171] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:45:29.650 [DEBUG] [Thread-27171] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:45:29.650 [DEBUG] [Thread-27171] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:45:29.676 [INFO] [Thread-27171] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:45:29.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:45:30.318 [DEBUG] [Thread-27171] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:45:30.318 [DEBUG] [Thread-27171] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:45:30.319 [DEBUG] [Thread-27171] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:45:30.359 [DEBUG] [Thread-27171] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:45:30.360 [DEBUG] [Thread-27171] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:45:30.362 [DEBUG] [Thread-27171] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:45:30.373 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:45:30.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:45:30.375 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:45:30.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:45:30.382 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:45:30.383 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:45:30.383 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:45:30.383 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:45:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:45:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.031340 -999.00  +14.20  11.35     49   +3.60 1 1 1 1 1     0    0 11.43 42.50 ZNESW 11.2 11.3 263.4 17.1 14.5 -25.8 14.4 -24.9 14.1 -24.6 14.4 -25.3
2025-11-13T02:45:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:45:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:45:30.384 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.031340
2025-11-13T02:45:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:45:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:45:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:45:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:45:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:45:30.385 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:45:21', tmtdew=12.13, humidity=43.85, cloud=0.0, wind=18.79, temperature=14.12, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:45:22', seeing=0.94, atlas_timestamp='2025-11-13T00:45:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.006250000000001421, 0.06724999999999959, 0.04550000000000054, 0.019000000000000128, 0.07025000000000148, -0.03149999999999942, -0.00274999999999892, 0.04249999999999865, 0.013999999999999346, 0.08474999999999966, 0.050499999999999545, 0.10299999999999976, 0.06824999999999903, -0.03700000000000081, -0.010500000000000398, 0.015750000000000597, 0.067499999999999, 0.08449999999999847, 0.0702499999999997, 0.0779999999999994, 0.05474999999999852, 0.026250000000000995, 0.021750000000000824, 0.019999999999999574, 0.14150000000000063, 0.1067499999999999, 0.1844999999999999, 0.15600000000000058, 0.060000000000002274, 0.06500000000000128, 0.018000000000000682, 0.040249999999998565], zp_timestamp='2025-11-13T00:43:00')
2025-11-13T02:45:30.386 [DEBUG] [Thread-27171] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:45:30.469 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:45:40.129 [DEBUG] [Thread-27174 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:45:53.952 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:45:53.953 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:45:55.192 [DEBUG] [Thread-27175 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:46:10.225 [DEBUG] [Thread-27176 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:46:14.666 [DEBUG] [Thread-27177 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:46:25.268 [DEBUG] [Thread-27178 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:46:40.305 [DEBUG] [Thread-27179 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:46:54.157 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:46:54.158 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:46:55.338 [DEBUG] [Thread-27180 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:47:10.374 [DEBUG] [Thread-27181 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:47:14.729 [DEBUG] [Thread-27182 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:47:25.406 [DEBUG] [Thread-27183 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:47:40.446 [DEBUG] [Thread-27184 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:47:44.827 [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-11-13T02:47:54.361 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:47:54.362 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:47:55.484 [DEBUG] [Thread-27185 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:48:10.519 [DEBUG] [Thread-27186 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:48:14.786 [DEBUG] [Thread-27187 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:48:14.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:48:14.845 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:48:14.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-11-13T02:48:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 48, 1), 12.63, 42.32, 0.0, 18.37, 14.14, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:48:15.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:48:01
2025-11-13T02:48:15.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:48:15.777 [DEBUG] [Thread-27188] [transport.py] [_log()] starting thread (client mode): 0x149f3280
2025-11-13T02:48:15.778 [DEBUG] [Thread-27188] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:48:15.798 [DEBUG] [Thread-27188] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:48:15.798 [INFO] [Thread-27188] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:48:15.801 [DEBUG] [Thread-27188] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:48:15.802 [DEBUG] [Thread-27188] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:48:15.802 [DEBUG] [Thread-27188] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:48:15.802 [DEBUG] [Thread-27188] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:48:15.802 [DEBUG] [Thread-27188] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:48:15.802 [DEBUG] [Thread-27188] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:48:15.802 [DEBUG] [Thread-27188] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] client lang: <none>
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] server lang: <none>
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] kex follows: False
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] Compression: none
2025-11-13T02:48:15.803 [DEBUG] [Thread-27188] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:48:15.822 [DEBUG] [Thread-27188] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:48:15.823 [DEBUG] [Thread-27188] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:48:15.823 [DEBUG] [Thread-27188] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:48:15.824 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:48:15.825 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:48:15.826 [DEBUG] [Thread-27188] [transport.py] [_log()] userauth is OK
2025-11-13T02:48:15.826 [DEBUG] [Thread-27188] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:48:15.826 [DEBUG] [Thread-27188] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:48:15.826 [DEBUG] [Thread-27188] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:48:15.826 [DEBUG] [Thread-27188] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:48:15.844 [INFO] [Thread-27188] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:48:15.845 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:48:16.490 [DEBUG] [Thread-27188] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:48:16.491 [DEBUG] [Thread-27188] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:48:16.491 [DEBUG] [Thread-27188] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:48:16.532 [DEBUG] [Thread-27188] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:48:16.532 [DEBUG] [Thread-27188] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:48:16.535 [DEBUG] [Thread-27188] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:48:16.548 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:48:16.549 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:48:16.550 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:48:16.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:48:16.557 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:48:16.559 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:48:16.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:48:16.559 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:48:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:48:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.033424 -999.00  +14.10  10.07     48   +3.30 1 1 1 1 1     0    0 12.00 50.74 ZNESW 8.8 10.1 242.6 14.4 14.4 -25.7 14.3 -24.7 14.1 -24.5 14.3 -25.3
2025-11-13T02:48:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:48:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:48:16.560 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.033424
2025-11-13T02:48:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:48:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:48:16.561 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:48:16.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:48:16.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:48:16.562 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:48:01', tmtdew=12.63, humidity=42.32, cloud=0.0, wind=18.37, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:48:02', seeing=0.99, atlas_timestamp='2025-11-13T00:48:07.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.006250000000001421, 0.06724999999999959, 0.04550000000000054, 0.019000000000000128, 0.07025000000000148, -0.03149999999999942, -0.00274999999999892, 0.04249999999999865, 0.013999999999999346, 0.08474999999999966, 0.050499999999999545, 0.10299999999999976, 0.06824999999999903, -0.03700000000000081, -0.010500000000000398, 0.015750000000000597, 0.067499999999999, 0.08449999999999847, 0.0702499999999997, 0.0779999999999994, 0.05474999999999852, 0.026250000000000995, 0.021750000000000824, 0.019999999999999574, 0.14150000000000063, 0.1067499999999999, 0.1844999999999999, 0.15600000000000058, 0.060000000000002274, 0.06500000000000128, 0.018000000000000682, 0.040249999999998565], zp_timestamp='2025-11-13T00:43:00')
2025-11-13T02:48:16.562 [DEBUG] [Thread-27188] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:48:16.645 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:48:16.658 [DEBUG] [Thread-27191] [transport.py] [_log()] starting thread (client mode): 0x17347580
2025-11-13T02:48:16.658 [DEBUG] [Thread-27191] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:48:16.673 [DEBUG] [Thread-27191] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:48:16.673 [INFO] [Thread-27191] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:48:16.681 [DEBUG] [Thread-27191] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:48:16.681 [DEBUG] [Thread-27191] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:48:16.681 [DEBUG] [Thread-27191] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:48:16.681 [DEBUG] [Thread-27191] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:48:16.681 [DEBUG] [Thread-27191] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:48:16.681 [DEBUG] [Thread-27191] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:48:16.681 [DEBUG] [Thread-27191] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:48:16.682 [DEBUG] [Thread-27191] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:48:16.682 [DEBUG] [Thread-27191] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:48:16.682 [DEBUG] [Thread-27191] [transport.py] [_log()] client lang: <none>
2025-11-13T02:48:16.682 [DEBUG] [Thread-27191] [transport.py] [_log()] server lang: <none>
2025-11-13T02:48:16.682 [DEBUG] [Thread-27191] [transport.py] [_log()] kex follows: False
2025-11-13T02:48:16.682 [DEBUG] [Thread-27191] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:48:16.682 [DEBUG] [Thread-27191] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:48:16.682 [DEBUG] [Thread-27191] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:48:16.683 [DEBUG] [Thread-27191] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:48:16.683 [DEBUG] [Thread-27191] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:48:16.683 [DEBUG] [Thread-27191] [transport.py] [_log()] Compression: none
2025-11-13T02:48:16.683 [DEBUG] [Thread-27191] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:48:16.740 [DEBUG] [Thread-27191] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:48:16.741 [DEBUG] [Thread-27191] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:48:16.742 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:48:16.742 [DEBUG] [Thread-27191] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:48:16.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:48:16.797 [DEBUG] [Thread-27191] [transport.py] [_log()] userauth is OK
2025-11-13T02:48:16.797 [DEBUG] [Thread-27191] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:48:16.797 [DEBUG] [Thread-27191] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:48:16.797 [DEBUG] [Thread-27191] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:48:16.797 [DEBUG] [Thread-27191] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:48:16.816 [INFO] [Thread-27191] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:48:16.817 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:48:16.817 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:48:17.716 [DEBUG] [Thread-27191] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:48:17.717 [DEBUG] [Thread-27191] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:48:17.765 [DEBUG] [Thread-27191] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:48:17.765 [DEBUG] [Thread-27191] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:48:17.774 [DEBUG] [Thread-27191] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:48:17.783 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:48:17.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')
2025-11-13T02:48:17.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:48:17.802 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:48:17.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:48:17.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:48:17.811 [DEBUG] [Thread-27191] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:48:25.555 [DEBUG] [Thread-27193 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:48:40.603 [DEBUG] [Thread-27194 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:48:47.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:48:47.833 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:48:47.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-11-13T02:48:48.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 48, 33), 12.91, 41.44, 0.0, 22.19, 14.25, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:48:48.482 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:48:33
2025-11-13T02:48:48.607 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:48:48.752 [DEBUG] [Thread-27195] [transport.py] [_log()] starting thread (client mode): 0x149f0880
2025-11-13T02:48:48.752 [DEBUG] [Thread-27195] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:48:48.770 [DEBUG] [Thread-27195] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:48:48.770 [INFO] [Thread-27195] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] client lang: <none>
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] server lang: <none>
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] kex follows: False
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:48:48.771 [DEBUG] [Thread-27195] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:48:48.772 [DEBUG] [Thread-27195] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:48:48.772 [DEBUG] [Thread-27195] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:48:48.772 [DEBUG] [Thread-27195] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:48:48.772 [DEBUG] [Thread-27195] [transport.py] [_log()] Compression: none
2025-11-13T02:48:48.772 [DEBUG] [Thread-27195] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:48:48.788 [DEBUG] [Thread-27195] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:48:48.788 [DEBUG] [Thread-27195] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:48:48.789 [DEBUG] [Thread-27195] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:48:48.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:48:48.789 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:48:48.790 [DEBUG] [Thread-27195] [transport.py] [_log()] userauth is OK
2025-11-13T02:48:48.790 [DEBUG] [Thread-27195] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:48:48.790 [DEBUG] [Thread-27195] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:48:48.790 [DEBUG] [Thread-27195] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:48:48.790 [DEBUG] [Thread-27195] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:48:48.804 [INFO] [Thread-27195] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:48:48.805 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:48:49.426 [DEBUG] [Thread-27195] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:48:49.426 [DEBUG] [Thread-27195] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:48:49.427 [DEBUG] [Thread-27195] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:48:49.468 [DEBUG] [Thread-27195] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:48:49.468 [DEBUG] [Thread-27195] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:48:49.471 [DEBUG] [Thread-27195] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:48:49.483 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:48:49.483 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:48:49.485 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:48:49.487 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:48:49.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:48:49.494 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:48:49.494 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:48:49.495 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:48:49.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:48:49.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.033771 -999.00  +14.10   7.21     47   +3.20 1 1 1 1 1     0    0 11.82 51.32 ZNESW 6.3 7.2 242.3 18.5 14.4 -25.8 14.3 -24.8 14.0 -24.3 14.3 -25.0
2025-11-13T02:48:49.495 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:48:49.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:48:49.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.033771
2025-11-13T02:48:49.496 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:48:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:48:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:48:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:48:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:48:49.497 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:48:33', tmtdew=12.91, humidity=41.44, cloud=0.0, wind=22.19, temperature=14.25, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:48:34', seeing=0.95, atlas_timestamp='2025-11-13T00:48:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.006250000000001421, 0.06724999999999959, 0.04550000000000054, 0.019000000000000128, 0.07025000000000148, -0.03149999999999942, -0.00274999999999892, 0.04249999999999865, 0.013999999999999346, 0.08474999999999966, 0.050499999999999545, 0.10299999999999976, 0.06824999999999903, -0.03700000000000081, -0.010500000000000398, 0.015750000000000597, 0.067499999999999, 0.08449999999999847, 0.0702499999999997, 0.0779999999999994, 0.05474999999999852, 0.026250000000000995, 0.021750000000000824, 0.019999999999999574, 0.14150000000000063, 0.1067499999999999, 0.1844999999999999, 0.15600000000000058, 0.060000000000002274, 0.06500000000000128, 0.018000000000000682, 0.040249999999998565], zp_timestamp='2025-11-13T00:46:00')
2025-11-13T02:48:49.497 [DEBUG] [Thread-27195] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:48:49.581 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:48:49.593 [DEBUG] [Thread-27198] [transport.py] [_log()] starting thread (client mode): 0x149f33d0
2025-11-13T02:48:49.593 [DEBUG] [Thread-27198] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:48:49.608 [DEBUG] [Thread-27198] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:48:49.609 [INFO] [Thread-27198] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] client lang: <none>
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] server lang: <none>
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] kex follows: False
2025-11-13T02:48:49.616 [DEBUG] [Thread-27198] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:48:49.617 [DEBUG] [Thread-27198] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:48:49.617 [DEBUG] [Thread-27198] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:48:49.617 [DEBUG] [Thread-27198] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:48:49.617 [DEBUG] [Thread-27198] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:48:49.617 [DEBUG] [Thread-27198] [transport.py] [_log()] Compression: none
2025-11-13T02:48:49.617 [DEBUG] [Thread-27198] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:48:49.676 [DEBUG] [Thread-27198] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:48:49.677 [DEBUG] [Thread-27198] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:48:49.678 [DEBUG] [Thread-27198] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:48:49.678 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:48:49.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:48:49.732 [DEBUG] [Thread-27198] [transport.py] [_log()] userauth is OK
2025-11-13T02:48:49.732 [DEBUG] [Thread-27198] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:48:49.733 [DEBUG] [Thread-27198] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:48:49.733 [DEBUG] [Thread-27198] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:48:49.733 [DEBUG] [Thread-27198] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:48:49.752 [INFO] [Thread-27198] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:48:49.752 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:48:49.753 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:48:50.580 [DEBUG] [Thread-27198] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:48:50.580 [DEBUG] [Thread-27198] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:48:50.629 [DEBUG] [Thread-27198] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:48:50.629 [DEBUG] [Thread-27198] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:48:50.638 [DEBUG] [Thread-27198] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:48:50.647 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:48:50.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-11-13T02:48:50.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-11-13T02:48:50.666 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:48:50.666 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:48:50.667 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:48:50.675 [DEBUG] [Thread-27198] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:48:54.618 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:48:54.620 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:48:55.635 [DEBUG] [Thread-27200 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:49:10.697 [DEBUG] [Thread-27201 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:49:14.850 [DEBUG] [Thread-27202 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:49:20.696 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:49:20.696 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:49:20.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:49:21.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 49, 5), 12.8, 41.75, 0.0, 17.43, 14.17, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:49:21.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:49:05
2025-11-13T02:49:21.475 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:49:21.621 [DEBUG] [Thread-27203] [transport.py] [_log()] starting thread (client mode): 0x17344250
2025-11-13T02:49:21.621 [DEBUG] [Thread-27203] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:49:21.641 [DEBUG] [Thread-27203] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:49:21.641 [INFO] [Thread-27203] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:49:21.644 [DEBUG] [Thread-27203] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] client lang: <none>
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] server lang: <none>
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] kex follows: False
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] Compression: none
2025-11-13T02:49:21.645 [DEBUG] [Thread-27203] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:49:21.665 [DEBUG] [Thread-27203] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:49:21.666 [DEBUG] [Thread-27203] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:49:21.667 [DEBUG] [Thread-27203] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:49:21.667 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:49:21.668 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:49:21.670 [DEBUG] [Thread-27203] [transport.py] [_log()] userauth is OK
2025-11-13T02:49:21.670 [DEBUG] [Thread-27203] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:49:21.670 [DEBUG] [Thread-27203] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:49:21.670 [DEBUG] [Thread-27203] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:49:21.670 [DEBUG] [Thread-27203] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:49:21.702 [INFO] [Thread-27203] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:49:21.702 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:49:22.304 [DEBUG] [Thread-27203] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:49:22.305 [DEBUG] [Thread-27203] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:49:22.305 [DEBUG] [Thread-27203] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:49:22.346 [DEBUG] [Thread-27203] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:49:22.346 [DEBUG] [Thread-27203] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:49:22.350 [DEBUG] [Thread-27203] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:49:22.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:49:22.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:49:22.366 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:49:22.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:49:22.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:49:22.376 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:49:22.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:49:22.377 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:49:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:49:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.034118 -999.00  +14.10  11.56     47   +3.00 1 1 1 1 1     0    0 11.89 53.98 ZNESW 9.7 11.6 239.6 14.2 14.4 -25.7 14.3 -24.7 14.1 -24.6 14.4 -25.1
2025-11-13T02:49:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:49:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:49:22.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.034118
2025-11-13T02:49:22.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:49:22.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:49:22.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:49:22.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:49:22.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:49:22.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:49:05', tmtdew=12.8, humidity=41.75, cloud=0.0, wind=17.43, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:49:06', seeing=0.95, atlas_timestamp='2025-11-13T00:49:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.006250000000001421, 0.06724999999999959, 0.04550000000000054, 0.019000000000000128, 0.07025000000000148, -0.03149999999999942, -0.00274999999999892, 0.04249999999999865, 0.013999999999999346, 0.08474999999999966, 0.050499999999999545, 0.10299999999999976, 0.06824999999999903, -0.03700000000000081, -0.010500000000000398, 0.015750000000000597, 0.067499999999999, 0.08449999999999847, 0.0702499999999997, 0.0779999999999994, 0.05474999999999852, 0.026250000000000995, 0.021750000000000824, 0.019999999999999574, 0.14150000000000063, 0.1067499999999999, 0.1844999999999999, 0.15600000000000058, 0.060000000000002274, 0.06500000000000128, 0.018000000000000682, 0.040249999999998565], zp_timestamp='2025-11-13T00:46:00')
2025-11-13T02:49:22.379 [DEBUG] [Thread-27203] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:49:22.463 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:49:22.475 [DEBUG] [Thread-27206] [transport.py] [_log()] starting thread (client mode): 0x1498ace0
2025-11-13T02:49:22.475 [DEBUG] [Thread-27206] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:49:22.490 [DEBUG] [Thread-27206] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:49:22.491 [INFO] [Thread-27206] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:49:22.498 [DEBUG] [Thread-27206] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:49:22.498 [DEBUG] [Thread-27206] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:49:22.498 [DEBUG] [Thread-27206] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:49:22.498 [DEBUG] [Thread-27206] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:49:22.498 [DEBUG] [Thread-27206] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:49:22.498 [DEBUG] [Thread-27206] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:49:22.498 [DEBUG] [Thread-27206] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:49:22.498 [DEBUG] [Thread-27206] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] client lang: <none>
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] server lang: <none>
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] kex follows: False
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] Compression: none
2025-11-13T02:49:22.499 [DEBUG] [Thread-27206] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:49:22.556 [DEBUG] [Thread-27206] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:49:22.557 [DEBUG] [Thread-27206] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:49:22.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:49:22.558 [DEBUG] [Thread-27206] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:49:22.559 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:49:22.613 [DEBUG] [Thread-27206] [transport.py] [_log()] userauth is OK
2025-11-13T02:49:22.614 [DEBUG] [Thread-27206] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:49:22.614 [DEBUG] [Thread-27206] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:49:22.614 [DEBUG] [Thread-27206] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:49:22.614 [DEBUG] [Thread-27206] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:49:22.633 [INFO] [Thread-27206] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:49:22.634 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:49:22.634 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:49:23.460 [DEBUG] [Thread-27206] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:49:23.461 [DEBUG] [Thread-27206] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:49:23.509 [DEBUG] [Thread-27206] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:49:23.509 [DEBUG] [Thread-27206] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:49:23.518 [DEBUG] [Thread-27206] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:49:23.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:49:23.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:49:23.537 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:49:23.547 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:49:23.547 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:49:23.548 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:49:23.555 [DEBUG] [Thread-27206] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:49:25.728 [DEBUG] [Thread-27208 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:49:40.779 [DEBUG] [Thread-27209 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:49:53.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:49:53.566 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:49:53.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-11-13T02:49:54.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 49, 37), 12.98, 41.17, 0.0, 17.13, 14.17, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:49:54.236 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:49:37
2025-11-13T02:49:54.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:49:54.518 [DEBUG] [Thread-27210] [transport.py] [_log()] starting thread (client mode): 0x149f3c10
2025-11-13T02:49:54.518 [DEBUG] [Thread-27210] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:49:54.539 [DEBUG] [Thread-27210] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:49:54.539 [INFO] [Thread-27210] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] client lang: <none>
2025-11-13T02:49:54.542 [DEBUG] [Thread-27210] [transport.py] [_log()] server lang: <none>
2025-11-13T02:49:54.543 [DEBUG] [Thread-27210] [transport.py] [_log()] kex follows: False
2025-11-13T02:49:54.543 [DEBUG] [Thread-27210] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:49:54.543 [DEBUG] [Thread-27210] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:49:54.543 [DEBUG] [Thread-27210] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:49:54.543 [DEBUG] [Thread-27210] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:49:54.543 [DEBUG] [Thread-27210] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:49:54.543 [DEBUG] [Thread-27210] [transport.py] [_log()] Compression: none
2025-11-13T02:49:54.543 [DEBUG] [Thread-27210] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:49:54.558 [DEBUG] [Thread-27210] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:49:54.558 [DEBUG] [Thread-27210] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:49:54.558 [DEBUG] [Thread-27210] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:49:54.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:49:54.558 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:49:54.559 [DEBUG] [Thread-27210] [transport.py] [_log()] userauth is OK
2025-11-13T02:49:54.559 [DEBUG] [Thread-27210] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:49:54.559 [DEBUG] [Thread-27210] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:49:54.559 [DEBUG] [Thread-27210] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:49:54.559 [DEBUG] [Thread-27210] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:49:54.568 [INFO] [Thread-27210] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:49:54.569 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:49:54.823 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:49:54.824 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:49:55.193 [DEBUG] [Thread-27210] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:49:55.193 [DEBUG] [Thread-27210] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:49:55.193 [DEBUG] [Thread-27210] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:49:55.234 [DEBUG] [Thread-27210] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:49:55.234 [DEBUG] [Thread-27210] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:49:55.236 [DEBUG] [Thread-27210] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:49:55.248 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:49:55.248 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:49:55.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:49:55.256 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:49:55.264 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:49:55.268 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:49:55.268 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.034118 -999.00  +14.10  11.56     47   +3.00 1 1 1 1 1     0    0 11.89 53.98 ZNESW 9.7 11.6 239.6 14.2 14.4 -25.7 14.3 -24.7 14.1 -24.6 14.4 -25.1
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.034118
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:49:55.268 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:49:37', tmtdew=12.98, humidity=41.17, cloud=0.0, wind=17.13, temperature=14.17, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:49:38', seeing=1.14, atlas_timestamp='2025-11-13T00:49:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.006250000000001421, 0.06724999999999959, 0.04550000000000054, 0.019000000000000128, 0.07025000000000148, -0.03149999999999942, -0.00274999999999892, 0.04249999999999865, 0.013999999999999346, 0.08474999999999966, 0.050499999999999545, 0.10299999999999976, 0.06824999999999903, -0.03700000000000081, -0.010500000000000398, 0.015750000000000597, 0.067499999999999, 0.08449999999999847, 0.0702499999999997, 0.0779999999999994, 0.05474999999999852, 0.026250000000000995, 0.021750000000000824, 0.019999999999999574, 0.14150000000000063, 0.1067499999999999, 0.1844999999999999, 0.15600000000000058, 0.060000000000002274, 0.06500000000000128, 0.018000000000000682, 0.040249999999998565], zp_timestamp='2025-11-13T00:46:00')
2025-11-13T02:49:55.271 [DEBUG] [Thread-27210] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:49:55.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:49:55.355 [DEBUG] [Thread-27213] [transport.py] [_log()] starting thread (client mode): 0x173477f0
2025-11-13T02:49:55.355 [DEBUG] [Thread-27213] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:49:55.369 [DEBUG] [Thread-27213] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:49:55.369 [INFO] [Thread-27213] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] client lang: <none>
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] server lang: <none>
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] kex follows: False
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] Compression: none
2025-11-13T02:49:55.377 [DEBUG] [Thread-27213] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:49:55.435 [DEBUG] [Thread-27213] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:49:55.435 [DEBUG] [Thread-27213] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:49:55.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:49:55.435 [DEBUG] [Thread-27213] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:49:55.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:49:55.492 [DEBUG] [Thread-27213] [transport.py] [_log()] userauth is OK
2025-11-13T02:49:55.492 [DEBUG] [Thread-27213] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:49:55.492 [DEBUG] [Thread-27213] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:49:55.492 [DEBUG] [Thread-27213] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:49:55.492 [DEBUG] [Thread-27213] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:49:55.506 [INFO] [Thread-27213] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:49:55.506 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:49:55.506 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:49:55.817 [DEBUG] [Thread-27215 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:49:56.342 [DEBUG] [Thread-27213] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:49:56.342 [DEBUG] [Thread-27213] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:49:56.390 [DEBUG] [Thread-27213] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:49:56.390 [DEBUG] [Thread-27213] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:49:56.398 [DEBUG] [Thread-27213] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:49:56.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:49:56.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:49:56.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-11-13T02:49:56.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:49:56.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:49:56.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:49:56.429 [DEBUG] [Thread-27213] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:50:10.857 [DEBUG] [Thread-27216 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:50:14.918 [DEBUG] [Thread-27217 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:50:25.892 [DEBUG] [Thread-27218 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:50:26.452 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:50:26.452 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:50:26.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-11-13T02:50:27.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 50, 9), 13.02, 41.04, 0.0, 17.93, 14.21, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:50:27.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:50:09
2025-11-13T02:50:27.249 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:50:27.394 [DEBUG] [Thread-27219] [transport.py] [_log()] starting thread (client mode): 0x17345210
2025-11-13T02:50:27.394 [DEBUG] [Thread-27219] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:50:27.414 [DEBUG] [Thread-27219] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:50:27.414 [INFO] [Thread-27219] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:50:27.418 [DEBUG] [Thread-27219] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:50:27.418 [DEBUG] [Thread-27219] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:50:27.418 [DEBUG] [Thread-27219] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:50:27.418 [DEBUG] [Thread-27219] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] client lang: <none>
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] server lang: <none>
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] kex follows: False
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] Compression: none
2025-11-13T02:50:27.419 [DEBUG] [Thread-27219] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:50:27.437 [DEBUG] [Thread-27219] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:50:27.437 [DEBUG] [Thread-27219] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:50:27.438 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:50:27.438 [DEBUG] [Thread-27219] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:50:27.439 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:50:27.441 [DEBUG] [Thread-27219] [transport.py] [_log()] userauth is OK
2025-11-13T02:50:27.441 [DEBUG] [Thread-27219] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:50:27.441 [DEBUG] [Thread-27219] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:50:27.441 [DEBUG] [Thread-27219] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:50:27.441 [DEBUG] [Thread-27219] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:50:27.475 [INFO] [Thread-27219] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:50:27.475 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:50:28.113 [DEBUG] [Thread-27219] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:50:28.114 [DEBUG] [Thread-27219] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:50:28.114 [DEBUG] [Thread-27219] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:50:28.155 [DEBUG] [Thread-27219] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:50:28.155 [DEBUG] [Thread-27219] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:50:28.158 [DEBUG] [Thread-27219] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:50:28.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:50:28.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:50:28.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:50:28.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:50:28.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:50:28.183 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:50:28.183 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:50:28.183 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:50:28.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:50:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.034465 -999.00  +14.10  12.69     46   +2.80 1 1 1 1 1     0    0 11.84 54.91 ZNESW 9.5 12.7 229.8 17.6 14.3 -25.7 14.3 -24.7 14.1 -24.4 14.3 -25.0
2025-11-13T02:50:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:50:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:50:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.034465
2025-11-13T02:50:28.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:50:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:50:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:50:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:50:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:50:28.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:50:09', tmtdew=13.02, humidity=41.04, cloud=0.0, wind=17.93, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:50:10', seeing=0.87, atlas_timestamp='2025-11-13T00:49:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.006250000000001421, 0.06724999999999959, 0.04550000000000054, 0.019000000000000128, 0.07025000000000148, -0.03149999999999942, -0.00274999999999892, 0.04249999999999865, 0.013999999999999346, 0.08474999999999966, 0.050499999999999545, 0.10299999999999976, 0.06824999999999903, -0.03700000000000081, -0.010500000000000398, 0.015750000000000597, 0.067499999999999, 0.08449999999999847, 0.0702499999999997, 0.0779999999999994, 0.05474999999999852, 0.026250000000000995, 0.021750000000000824, 0.019999999999999574, 0.14150000000000063, 0.1067499999999999, 0.1844999999999999, 0.15600000000000058, 0.060000000000002274, 0.06500000000000128, 0.018000000000000682, 0.040249999999998565], zp_timestamp='2025-11-13T00:46:00')
2025-11-13T02:50:28.185 [DEBUG] [Thread-27219] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:50:28.270 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:50:28.282 [DEBUG] [Thread-27222] [transport.py] [_log()] starting thread (client mode): 0x17345ba0
2025-11-13T02:50:28.282 [DEBUG] [Thread-27222] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:50:28.298 [DEBUG] [Thread-27222] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:50:28.299 [INFO] [Thread-27222] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:50:28.306 [DEBUG] [Thread-27222] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:50:28.306 [DEBUG] [Thread-27222] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:50:28.306 [DEBUG] [Thread-27222] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:50:28.306 [DEBUG] [Thread-27222] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:50:28.306 [DEBUG] [Thread-27222] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] client lang: <none>
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] server lang: <none>
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] kex follows: False
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] Compression: none
2025-11-13T02:50:28.307 [DEBUG] [Thread-27222] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:50:28.365 [DEBUG] [Thread-27222] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:50:28.366 [DEBUG] [Thread-27222] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:50:28.366 [DEBUG] [Thread-27222] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:50:28.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:50:28.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:50:28.424 [DEBUG] [Thread-27222] [transport.py] [_log()] userauth is OK
2025-11-13T02:50:28.424 [DEBUG] [Thread-27222] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:50:28.425 [DEBUG] [Thread-27222] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:50:28.425 [DEBUG] [Thread-27222] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:50:28.425 [DEBUG] [Thread-27222] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:50:28.444 [INFO] [Thread-27222] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:50:28.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:50:28.445 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:50:29.306 [DEBUG] [Thread-27222] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:50:29.306 [DEBUG] [Thread-27222] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:50:29.354 [DEBUG] [Thread-27222] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:50:29.354 [DEBUG] [Thread-27222] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:50:29.363 [DEBUG] [Thread-27222] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:50:29.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:50:29.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-11-13T02:50:29.380 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:50:29.389 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:50:29.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:50:29.390 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:50:29.397 [DEBUG] [Thread-27222] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:50:40.926 [DEBUG] [Thread-27224 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:50:55.026 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:50:55.027 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:50:55.992 [DEBUG] [Thread-27225 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:50:59.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:50:59.420 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:50:59.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-11-13T02:51:00.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 50, 41), 13.3, 40.17, 0.0, 18.97, 14.24, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:51:00.079 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:50:41
2025-11-13T02:51:00.202 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:51:00.347 [DEBUG] [Thread-27226] [transport.py] [_log()] starting thread (client mode): 0x1498afb0
2025-11-13T02:51:00.347 [DEBUG] [Thread-27226] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:51:00.367 [DEBUG] [Thread-27226] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:51:00.368 [INFO] [Thread-27226] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] client lang: <none>
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] server lang: <none>
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] kex follows: False
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] Compression: none
2025-11-13T02:51:00.371 [DEBUG] [Thread-27226] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:51:00.389 [DEBUG] [Thread-27226] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:51:00.389 [DEBUG] [Thread-27226] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:51:00.390 [DEBUG] [Thread-27226] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:51:00.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:51:00.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:51:00.433 [DEBUG] [Thread-27226] [transport.py] [_log()] userauth is OK
2025-11-13T02:51:00.433 [DEBUG] [Thread-27226] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:51:00.434 [DEBUG] [Thread-27226] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:51:00.434 [DEBUG] [Thread-27226] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:51:00.434 [DEBUG] [Thread-27226] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:51:00.465 [INFO] [Thread-27226] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:51:00.466 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:51:01.118 [DEBUG] [Thread-27226] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:51:01.119 [DEBUG] [Thread-27226] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:51:01.119 [DEBUG] [Thread-27226] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:51:01.160 [DEBUG] [Thread-27226] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:51:01.160 [DEBUG] [Thread-27226] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:51:01.163 [DEBUG] [Thread-27226] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:51:01.174 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:51:01.175 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:51:01.177 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:51:01.179 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:51:01.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:51:01.187 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:51:01.187 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:51:01.188 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:51:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:51:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.034812 -999.00  +14.10   7.48     46   +2.80 1 1 1 1 1     0    0 11.94 52.91 ZNESW 10.1 7.5 230.0 13.9 14.3 -25.7 14.2 -24.7 14.0 -24.2 14.3 -25.2
2025-11-13T02:51:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:51:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:51:01.188 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.034812
2025-11-13T02:51:01.189 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:51:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:51:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:51:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:51:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:51:01.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:50:41', tmtdew=13.3, humidity=40.17, cloud=0.0, wind=18.97, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:50:42', seeing=0.87, atlas_timestamp='2025-11-13T00:50:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[0.021749999999999048, 0.006250000000001421, 0.06724999999999959, 0.04550000000000054, 0.019000000000000128, 0.07025000000000148, -0.03149999999999942, -0.00274999999999892, 0.04249999999999865, 0.013999999999999346, 0.08474999999999966, 0.050499999999999545, 0.10299999999999976, 0.06824999999999903, -0.03700000000000081, -0.010500000000000398, 0.015750000000000597, 0.067499999999999, 0.08449999999999847, 0.0702499999999997, 0.0779999999999994, 0.05474999999999852, 0.026250000000000995, 0.021750000000000824, 0.019999999999999574, 0.14150000000000063, 0.1067499999999999, 0.1844999999999999, 0.15600000000000058, 0.060000000000002274, 0.06500000000000128, 0.018000000000000682, 0.040249999999998565], zp_timestamp='2025-11-13T00:46:00')
2025-11-13T02:51:01.190 [DEBUG] [Thread-27226] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:51:01.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:51:01.285 [DEBUG] [Thread-27229] [transport.py] [_log()] starting thread (client mode): 0x149208b0
2025-11-13T02:51:01.285 [DEBUG] [Thread-27229] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:51:01.300 [DEBUG] [Thread-27229] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:51:01.300 [INFO] [Thread-27229] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:51:01.308 [DEBUG] [Thread-27229] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:51:01.308 [DEBUG] [Thread-27229] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:51:01.308 [DEBUG] [Thread-27229] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:51:01.308 [DEBUG] [Thread-27229] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:51:01.308 [DEBUG] [Thread-27229] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:51:01.308 [DEBUG] [Thread-27229] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] client lang: <none>
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] server lang: <none>
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] kex follows: False
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:51:01.309 [DEBUG] [Thread-27229] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:51:01.310 [DEBUG] [Thread-27229] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:51:01.310 [DEBUG] [Thread-27229] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:51:01.310 [DEBUG] [Thread-27229] [transport.py] [_log()] Compression: none
2025-11-13T02:51:01.310 [DEBUG] [Thread-27229] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:51:01.370 [DEBUG] [Thread-27229] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:51:01.371 [DEBUG] [Thread-27229] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:51:01.372 [DEBUG] [Thread-27229] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:51:01.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:51:01.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:51:01.428 [DEBUG] [Thread-27229] [transport.py] [_log()] userauth is OK
2025-11-13T02:51:01.428 [DEBUG] [Thread-27229] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:51:01.428 [DEBUG] [Thread-27229] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:51:01.429 [DEBUG] [Thread-27229] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:51:01.429 [DEBUG] [Thread-27229] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:51:01.450 [INFO] [Thread-27229] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:51:01.450 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:51:01.451 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:51:02.368 [DEBUG] [Thread-27229] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:51:02.369 [DEBUG] [Thread-27229] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:51:02.417 [DEBUG] [Thread-27229] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:51:02.417 [DEBUG] [Thread-27229] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:51:02.426 [DEBUG] [Thread-27229] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:51:02.435 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:51:02.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:51:02.445 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:51:02.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:51:02.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:51:02.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:51:02.463 [DEBUG] [Thread-27229] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:51:11.031 [DEBUG] [Thread-27231 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:51:14.970 [DEBUG] [Thread-27232 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:51:26.076 [DEBUG] [Thread-27233 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:51:32.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:51:32.486 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:51:32.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-11-13T02:51:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 51, 13), 13.38, 39.96, 0.0, 17.45, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:51:33.143 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:51:13
2025-11-13T02:51:33.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:51:33.410 [DEBUG] [Thread-27234] [transport.py] [_log()] starting thread (client mode): 0x1737c0d0
2025-11-13T02:51:33.410 [DEBUG] [Thread-27234] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:51:33.430 [DEBUG] [Thread-27234] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:51:33.430 [INFO] [Thread-27234] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:51:33.432 [DEBUG] [Thread-27234] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] client lang: <none>
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] server lang: <none>
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] kex follows: False
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] Compression: none
2025-11-13T02:51:33.433 [DEBUG] [Thread-27234] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:51:33.446 [DEBUG] [Thread-27234] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:51:33.447 [DEBUG] [Thread-27234] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:51:33.447 [DEBUG] [Thread-27234] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:51:33.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:51:33.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:51:33.450 [DEBUG] [Thread-27234] [transport.py] [_log()] userauth is OK
2025-11-13T02:51:33.450 [DEBUG] [Thread-27234] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:51:33.451 [DEBUG] [Thread-27234] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:51:33.451 [DEBUG] [Thread-27234] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:51:33.451 [DEBUG] [Thread-27234] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:51:33.487 [INFO] [Thread-27234] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:51:33.488 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:51:34.148 [DEBUG] [Thread-27234] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:51:34.148 [DEBUG] [Thread-27234] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:51:34.149 [DEBUG] [Thread-27234] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:51:34.188 [DEBUG] [Thread-27234] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:51:34.189 [DEBUG] [Thread-27234] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:51:34.192 [DEBUG] [Thread-27234] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:51:34.204 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:51:34.204 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:51:34.206 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:51:34.208 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:51:34.212 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:51:34.214 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:51:34.214 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:51:34.214 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:51:34.214 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:51:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.035160 -999.00  +14.10  14.31     46   +2.70 1 1 1 1 1     0    0 12.06 55.33 ZNESW 12.0 14.3 226.2 22.6 14.3 -25.6 14.2 -24.7 14.0 -24.3 14.3 -25.0
2025-11-13T02:51:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:51:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:51:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.035160
2025-11-13T02:51:34.215 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:51:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:51:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:51:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:51:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:51:34.216 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:51:13', tmtdew=13.38, humidity=39.96, cloud=0.0, wind=17.45, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:51:14', seeing=0.87, atlas_timestamp='2025-11-13T00:50:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:49:00')
2025-11-13T02:51:34.216 [DEBUG] [Thread-27234] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:51:34.299 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:51:34.311 [DEBUG] [Thread-27237] [transport.py] [_log()] starting thread (client mode): 0x17345600
2025-11-13T02:51:34.312 [DEBUG] [Thread-27237] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:51:34.329 [DEBUG] [Thread-27237] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:51:34.329 [INFO] [Thread-27237] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:51:34.336 [DEBUG] [Thread-27237] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:51:34.337 [DEBUG] [Thread-27237] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:51:34.337 [DEBUG] [Thread-27237] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:51:34.337 [DEBUG] [Thread-27237] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:51:34.337 [DEBUG] [Thread-27237] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:51:34.337 [DEBUG] [Thread-27237] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:51:34.337 [DEBUG] [Thread-27237] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:51:34.337 [DEBUG] [Thread-27237] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:51:34.338 [DEBUG] [Thread-27237] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:51:34.338 [DEBUG] [Thread-27237] [transport.py] [_log()] client lang: <none>
2025-11-13T02:51:34.338 [DEBUG] [Thread-27237] [transport.py] [_log()] server lang: <none>
2025-11-13T02:51:34.338 [DEBUG] [Thread-27237] [transport.py] [_log()] kex follows: False
2025-11-13T02:51:34.338 [DEBUG] [Thread-27237] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:51:34.338 [DEBUG] [Thread-27237] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:51:34.338 [DEBUG] [Thread-27237] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:51:34.338 [DEBUG] [Thread-27237] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:51:34.339 [DEBUG] [Thread-27237] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:51:34.339 [DEBUG] [Thread-27237] [transport.py] [_log()] Compression: none
2025-11-13T02:51:34.339 [DEBUG] [Thread-27237] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:51:34.397 [DEBUG] [Thread-27237] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:51:34.398 [DEBUG] [Thread-27237] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:51:34.398 [DEBUG] [Thread-27237] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:51:34.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:51:34.399 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:51:34.457 [DEBUG] [Thread-27237] [transport.py] [_log()] userauth is OK
2025-11-13T02:51:34.457 [DEBUG] [Thread-27237] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:51:34.457 [DEBUG] [Thread-27237] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:51:34.457 [DEBUG] [Thread-27237] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:51:34.457 [DEBUG] [Thread-27237] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:51:34.477 [INFO] [Thread-27237] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:51:34.478 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:51:34.478 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:51:35.310 [DEBUG] [Thread-27237] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:51:35.310 [DEBUG] [Thread-27237] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:51:35.357 [DEBUG] [Thread-27237] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:51:35.358 [DEBUG] [Thread-27237] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:51:35.367 [DEBUG] [Thread-27237] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:51:35.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:51:35.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-11-13T02:51:35.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-11-13T02:51:35.401 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:51:35.401 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:51:35.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:51:35.413 [DEBUG] [Thread-27237] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:51:41.113 [DEBUG] [Thread-27239 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:51:55.227 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:51:55.228 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:51:56.175 [DEBUG] [Thread-27240 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:52:05.432 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:52:05.432 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:52:05.433 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:52:06.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 51, 45), 13.56, 39.58, 0.0, 19.92, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:52:06.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:51:45
2025-11-13T02:52:06.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:52:06.346 [DEBUG] [Thread-27241] [transport.py] [_log()] starting thread (client mode): 0x17345780
2025-11-13T02:52:06.346 [DEBUG] [Thread-27241] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:52:06.366 [DEBUG] [Thread-27241] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:52:06.366 [INFO] [Thread-27241] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] client lang: <none>
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] server lang: <none>
2025-11-13T02:52:06.369 [DEBUG] [Thread-27241] [transport.py] [_log()] kex follows: False
2025-11-13T02:52:06.370 [DEBUG] [Thread-27241] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:52:06.370 [DEBUG] [Thread-27241] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:52:06.370 [DEBUG] [Thread-27241] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:52:06.370 [DEBUG] [Thread-27241] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:52:06.370 [DEBUG] [Thread-27241] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:52:06.370 [DEBUG] [Thread-27241] [transport.py] [_log()] Compression: none
2025-11-13T02:52:06.370 [DEBUG] [Thread-27241] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:52:06.386 [DEBUG] [Thread-27241] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:52:06.386 [DEBUG] [Thread-27241] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:52:06.387 [DEBUG] [Thread-27241] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:52:06.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:52:06.387 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:52:06.389 [DEBUG] [Thread-27241] [transport.py] [_log()] userauth is OK
2025-11-13T02:52:06.389 [DEBUG] [Thread-27241] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:52:06.389 [DEBUG] [Thread-27241] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:52:06.389 [DEBUG] [Thread-27241] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:52:06.389 [DEBUG] [Thread-27241] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:52:06.412 [INFO] [Thread-27241] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:52:06.412 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:52:06.982 [DEBUG] [Thread-27241] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:52:06.982 [DEBUG] [Thread-27241] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:52:06.982 [DEBUG] [Thread-27241] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:52:07.023 [DEBUG] [Thread-27241] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:52:07.023 [DEBUG] [Thread-27241] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:52:07.026 [DEBUG] [Thread-27241] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:52:07.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:52:07.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:52:07.042 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:52:07.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:52:07.050 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:52:07.053 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:52:07.053 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:52:07.053 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:52:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:52:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.035854 -999.00  +14.20  14.82     45   +2.50 1 1 1 1 1     0    0 12.45 62.38 ZNESW 10.2 14.8 249.2 18.2 14.4 -25.5 14.2 -24.7 14.0 -24.2 14.3 -25.0
2025-11-13T02:52:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:52:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:52:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.035854
2025-11-13T02:52:07.054 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:52:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:52:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:52:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:52:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:52:07.055 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:51:45', tmtdew=13.56, humidity=39.58, cloud=0.0, wind=19.92, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:51:46', seeing=0.92, atlas_timestamp='2025-11-13T00:51:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:49:00')
2025-11-13T02:52:07.056 [DEBUG] [Thread-27241] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:52:07.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:52:07.160 [DEBUG] [Thread-27244] [transport.py] [_log()] starting thread (client mode): 0x1496bdc0
2025-11-13T02:52:07.160 [DEBUG] [Thread-27244] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:52:07.175 [DEBUG] [Thread-27244] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:52:07.175 [INFO] [Thread-27244] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] client lang: <none>
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] server lang: <none>
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] kex follows: False
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:52:07.183 [DEBUG] [Thread-27244] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:52:07.184 [DEBUG] [Thread-27244] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:52:07.184 [DEBUG] [Thread-27244] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:52:07.184 [DEBUG] [Thread-27244] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:52:07.184 [DEBUG] [Thread-27244] [transport.py] [_log()] Compression: none
2025-11-13T02:52:07.184 [DEBUG] [Thread-27244] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:52:07.243 [DEBUG] [Thread-27244] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:52:07.244 [DEBUG] [Thread-27244] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:52:07.244 [DEBUG] [Thread-27244] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:52:07.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:52:07.245 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:52:07.300 [DEBUG] [Thread-27244] [transport.py] [_log()] userauth is OK
2025-11-13T02:52:07.300 [DEBUG] [Thread-27244] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:52:07.300 [DEBUG] [Thread-27244] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:52:07.300 [DEBUG] [Thread-27244] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:52:07.300 [DEBUG] [Thread-27244] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:52:07.319 [INFO] [Thread-27244] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:52:07.319 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:52:07.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:52:08.175 [DEBUG] [Thread-27244] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:52:08.175 [DEBUG] [Thread-27244] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:52:08.223 [DEBUG] [Thread-27244] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:52:08.223 [DEBUG] [Thread-27244] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:52:08.232 [DEBUG] [Thread-27244] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:52:08.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:52:08.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-11-13T02:52:08.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-11-13T02:52:08.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:52:08.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:52:08.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:52:08.269 [DEBUG] [Thread-27244] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:52:11.208 [DEBUG] [Thread-27246 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:52:15.030 [DEBUG] [Thread-27247 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:52:26.262 [DEBUG] [Thread-27248 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:52:38.278 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:52:38.279 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:52:38.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-11-13T02:52:38.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 52, 18), 13.62, 39.43, 0.0, 20.33, 14.31, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:52:38.928 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:52:18
2025-11-13T02:52:39.051 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:52:39.198 [DEBUG] [Thread-27249] [transport.py] [_log()] starting thread (client mode): 0x14989270
2025-11-13T02:52:39.198 [DEBUG] [Thread-27249] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:52:39.218 [DEBUG] [Thread-27249] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:52:39.218 [INFO] [Thread-27249] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:52:39.221 [DEBUG] [Thread-27249] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:52:39.221 [DEBUG] [Thread-27249] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:52:39.221 [DEBUG] [Thread-27249] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:52:39.221 [DEBUG] [Thread-27249] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:52:39.221 [DEBUG] [Thread-27249] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] client lang: <none>
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] server lang: <none>
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] kex follows: False
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] Compression: none
2025-11-13T02:52:39.222 [DEBUG] [Thread-27249] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:52:39.241 [DEBUG] [Thread-27249] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:52:39.242 [DEBUG] [Thread-27249] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:52:39.243 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:52:39.243 [DEBUG] [Thread-27249] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:52:39.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:52:39.245 [DEBUG] [Thread-27249] [transport.py] [_log()] userauth is OK
2025-11-13T02:52:39.245 [DEBUG] [Thread-27249] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:52:39.246 [DEBUG] [Thread-27249] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:52:39.246 [DEBUG] [Thread-27249] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:52:39.246 [DEBUG] [Thread-27249] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:52:39.266 [INFO] [Thread-27249] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:52:39.266 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:52:39.921 [DEBUG] [Thread-27249] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:52:39.922 [DEBUG] [Thread-27249] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:52:39.922 [DEBUG] [Thread-27249] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:52:39.963 [DEBUG] [Thread-27249] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:52:39.963 [DEBUG] [Thread-27249] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:52:39.966 [DEBUG] [Thread-27249] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:52:39.980 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:52:39.981 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:52:39.982 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:52:39.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:52:39.996 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:52:39.998 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:52:39.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:52:39.998 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:52:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:52:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.036201 -999.00  +14.20  14.01     45   +2.50 1 1 1 1 1     0    0 12.63 67.37 ZNESW 17.0 14.0 237.0 15.4 14.3 -25.5 14.2 -24.6 14.1 -24.3 14.3 -25.0
2025-11-13T02:52:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:52:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:52:39.999 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.036201
2025-11-13T02:52:40.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:52:40.000 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:52:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:52:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:52:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:52:40.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:52:18', tmtdew=13.62, humidity=39.43, cloud=0.0, wind=20.33, temperature=14.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:52:18', seeing=0.92, atlas_timestamp='2025-11-13T00:52:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:49:00')
2025-11-13T02:52:40.001 [DEBUG] [Thread-27249] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:52:40.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:52:40.097 [DEBUG] [Thread-27252] [transport.py] [_log()] starting thread (client mode): 0x1737c820
2025-11-13T02:52:40.097 [DEBUG] [Thread-27252] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:52:40.111 [DEBUG] [Thread-27252] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:52:40.112 [INFO] [Thread-27252] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] client lang: <none>
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] server lang: <none>
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] kex follows: False
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:52:40.119 [DEBUG] [Thread-27252] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:52:40.120 [DEBUG] [Thread-27252] [transport.py] [_log()] Compression: none
2025-11-13T02:52:40.120 [DEBUG] [Thread-27252] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:52:40.177 [DEBUG] [Thread-27252] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:52:40.178 [DEBUG] [Thread-27252] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:52:40.179 [DEBUG] [Thread-27252] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:52:40.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:52:40.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:52:40.237 [DEBUG] [Thread-27252] [transport.py] [_log()] userauth is OK
2025-11-13T02:52:40.237 [DEBUG] [Thread-27252] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:52:40.237 [DEBUG] [Thread-27252] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:52:40.237 [DEBUG] [Thread-27252] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:52:40.237 [DEBUG] [Thread-27252] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:52:40.256 [INFO] [Thread-27252] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:52:40.256 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:52:40.258 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:52:41.063 [DEBUG] [Thread-27252] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:52:41.064 [DEBUG] [Thread-27252] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:52:41.111 [DEBUG] [Thread-27252] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:52:41.111 [DEBUG] [Thread-27252] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:52:41.121 [DEBUG] [Thread-27252] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:52:41.129 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:52:41.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-11-13T02:52:41.139 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:52:41.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:52:41.149 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:52:41.149 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:52:41.157 [DEBUG] [Thread-27252] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:52:41.293 [DEBUG] [Thread-27254 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:52:55.429 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:52:55.430 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:52:56.356 [DEBUG] [Thread-27255 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:53:11.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:53:11.180 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:53:11.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-11-13T02:53:11.386 [DEBUG] [Thread-27256 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:53:11.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 52, 50), 13.85, 38.68, 0.0, 21.37, 14.36, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:53:11.885 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:52:50
2025-11-13T02:53:12.014 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:53:12.168 [DEBUG] [Thread-27257] [transport.py] [_log()] starting thread (client mode): 0x17346e90
2025-11-13T02:53:12.168 [DEBUG] [Thread-27257] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:53:12.187 [DEBUG] [Thread-27257] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:53:12.187 [INFO] [Thread-27257] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] client lang: <none>
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] server lang: <none>
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] kex follows: False
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] Compression: none
2025-11-13T02:53:12.191 [DEBUG] [Thread-27257] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:53:12.208 [DEBUG] [Thread-27257] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:53:12.208 [DEBUG] [Thread-27257] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:53:12.209 [DEBUG] [Thread-27257] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:53:12.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:53:12.209 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:53:12.210 [DEBUG] [Thread-27257] [transport.py] [_log()] userauth is OK
2025-11-13T02:53:12.210 [DEBUG] [Thread-27257] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:53:12.210 [DEBUG] [Thread-27257] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:53:12.210 [DEBUG] [Thread-27257] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:53:12.210 [DEBUG] [Thread-27257] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:53:12.222 [INFO] [Thread-27257] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:53:12.222 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:53:12.875 [DEBUG] [Thread-27257] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:53:12.875 [DEBUG] [Thread-27257] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:53:12.875 [DEBUG] [Thread-27257] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:53:12.916 [DEBUG] [Thread-27257] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:53:12.916 [DEBUG] [Thread-27257] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:53:12.918 [DEBUG] [Thread-27257] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:53:12.930 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:53:12.930 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:53:12.931 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:53:12.932 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:53:12.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:53:12.935 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:53:12.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:53:12.935 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.036549 -999.00  +14.30  11.84     44   +2.40 1 1 1 1 1     0    0 12.63 69.93 ZNESW 9.8 11.8 246.8 18.1 14.3 -25.5 14.2 -24.7 14.1 -24.2 14.4 -25.0
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.036549
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:53:12.936 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:52:50', tmtdew=13.85, humidity=38.68, cloud=0.0, wind=21.37, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:52:50', seeing=0.83, atlas_timestamp='2025-11-13T00:52:37.834', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:49:00')
2025-11-13T02:53:12.937 [DEBUG] [Thread-27257] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:53:13.011 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:53:13.023 [DEBUG] [Thread-27260] [transport.py] [_log()] starting thread (client mode): 0x14922ad0
2025-11-13T02:53:13.023 [DEBUG] [Thread-27260] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:53:13.037 [DEBUG] [Thread-27260] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:53:13.037 [INFO] [Thread-27260] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:53:13.044 [DEBUG] [Thread-27260] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:53:13.044 [DEBUG] [Thread-27260] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:53:13.044 [DEBUG] [Thread-27260] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:53:13.044 [DEBUG] [Thread-27260] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:53:13.044 [DEBUG] [Thread-27260] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] client lang: <none>
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] server lang: <none>
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] kex follows: False
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] Compression: none
2025-11-13T02:53:13.045 [DEBUG] [Thread-27260] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:53:13.103 [DEBUG] [Thread-27260] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:53:13.103 [DEBUG] [Thread-27260] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:53:13.103 [DEBUG] [Thread-27260] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:53:13.103 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:53:13.104 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:53:13.160 [DEBUG] [Thread-27260] [transport.py] [_log()] userauth is OK
2025-11-13T02:53:13.160 [DEBUG] [Thread-27260] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:53:13.160 [DEBUG] [Thread-27260] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:53:13.160 [DEBUG] [Thread-27260] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:53:13.160 [DEBUG] [Thread-27260] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:53:13.176 [INFO] [Thread-27260] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:53:13.176 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:53:13.176 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:53:13.974 [DEBUG] [Thread-27260] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:53:13.974 [DEBUG] [Thread-27260] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:53:14.022 [DEBUG] [Thread-27260] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:53:14.022 [DEBUG] [Thread-27260] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:53:14.031 [DEBUG] [Thread-27260] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:53:14.041 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:53:14.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:53: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-11-13T02:53:14.059 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:53:14.059 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:53:14.060 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:53:14.068 [DEBUG] [Thread-27260] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:53:15.087 [DEBUG] [Thread-27262 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:53:26.421 [DEBUG] [Thread-27263 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:53:41.482 [DEBUG] [Thread-27264 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:53:44.090 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:53:44.091 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:53:44.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-11-13T02:53:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 53, 22), 13.89, 38.6, 0.0, 20.12, 14.41, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:53:44.758 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:53:22
2025-11-13T02:53:44.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:53:45.025 [DEBUG] [Thread-27265] [transport.py] [_log()] starting thread (client mode): 0x17345f60
2025-11-13T02:53:45.025 [DEBUG] [Thread-27265] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:53:45.045 [DEBUG] [Thread-27265] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:53:45.045 [INFO] [Thread-27265] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:53:45.048 [DEBUG] [Thread-27265] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:53:45.048 [DEBUG] [Thread-27265] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:53:45.048 [DEBUG] [Thread-27265] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:53:45.048 [DEBUG] [Thread-27265] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] client lang: <none>
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] server lang: <none>
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] kex follows: False
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] Compression: none
2025-11-13T02:53:45.049 [DEBUG] [Thread-27265] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:53:45.067 [DEBUG] [Thread-27265] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:53:45.067 [DEBUG] [Thread-27265] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:53:45.068 [DEBUG] [Thread-27265] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:53:45.068 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:53:45.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:53:45.070 [DEBUG] [Thread-27265] [transport.py] [_log()] userauth is OK
2025-11-13T02:53:45.070 [DEBUG] [Thread-27265] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:53:45.070 [DEBUG] [Thread-27265] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:53:45.070 [DEBUG] [Thread-27265] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:53:45.070 [DEBUG] [Thread-27265] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:53:45.084 [INFO] [Thread-27265] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:53:45.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:53:45.703 [DEBUG] [Thread-27265] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:53:45.703 [DEBUG] [Thread-27265] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:53:45.703 [DEBUG] [Thread-27265] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:53:45.743 [DEBUG] [Thread-27265] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:53:45.744 [DEBUG] [Thread-27265] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:53:45.747 [DEBUG] [Thread-27265] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:53:45.758 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:53:45.759 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:53:45.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:53:45.762 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:53:45.768 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:53:45.770 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:53:45.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:53:45.770 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:53:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:53:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.036896 -999.00  +14.30  10.80     44   +2.50 1 1 1 1 1     0    0 12.55 69.55 ZNESW 8.5 10.8 243.8 20.1 14.4 -25.7 14.2 -24.5 14.1 -24.1 14.3 -25.0
2025-11-13T02:53:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:53:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:53:45.771 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.036896
2025-11-13T02:53:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:53:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:53:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:53:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:53:45.772 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:53:45.773 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:53:22', tmtdew=13.89, humidity=38.6, cloud=0.0, wind=20.12, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:53:22', seeing=0.91, atlas_timestamp='2025-11-13T00:53:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:49:00')
2025-11-13T02:53:45.773 [DEBUG] [Thread-27265] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:53:45.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:53:45.868 [DEBUG] [Thread-27268] [transport.py] [_log()] starting thread (client mode): 0x1493f400
2025-11-13T02:53:45.868 [DEBUG] [Thread-27268] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:53:45.883 [DEBUG] [Thread-27268] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:53:45.883 [INFO] [Thread-27268] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:53:45.890 [DEBUG] [Thread-27268] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:53:45.890 [DEBUG] [Thread-27268] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:53:45.890 [DEBUG] [Thread-27268] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] client lang: <none>
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] server lang: <none>
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] kex follows: False
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] Compression: none
2025-11-13T02:53:45.891 [DEBUG] [Thread-27268] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:53:45.948 [DEBUG] [Thread-27268] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:53:45.949 [DEBUG] [Thread-27268] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:53:45.949 [DEBUG] [Thread-27268] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:53:45.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:53:45.950 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:53:46.004 [DEBUG] [Thread-27268] [transport.py] [_log()] userauth is OK
2025-11-13T02:53:46.004 [DEBUG] [Thread-27268] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:53:46.005 [DEBUG] [Thread-27268] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:53:46.005 [DEBUG] [Thread-27268] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:53:46.005 [DEBUG] [Thread-27268] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:53:46.029 [INFO] [Thread-27268] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:53:46.030 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:53:46.030 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:53:46.861 [DEBUG] [Thread-27268] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:53:46.861 [DEBUG] [Thread-27268] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:53:46.909 [DEBUG] [Thread-27268] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:53:46.909 [DEBUG] [Thread-27268] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:53:46.917 [DEBUG] [Thread-27268] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:53:46.925 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:53:46.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-11-13T02:53:46.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-11-13T02:53:46.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:53:46.941 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:53:46.941 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:53:46.949 [DEBUG] [Thread-27268] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:53:55.633 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:53:55.634 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:53:56.512 [DEBUG] [Thread-27270 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:11.564 [DEBUG] [Thread-27271 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:15.143 [DEBUG] [Thread-27272 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:16.949 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:54:16.949 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:54:16.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-11-13T02:54:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 53, 53), 13.9, 38.58, 0.0, 21.03, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:54:17.615 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:53:53
2025-11-13T02:54:17.739 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:54:17.884 [DEBUG] [Thread-27273] [transport.py] [_log()] starting thread (client mode): 0x1498a920
2025-11-13T02:54:17.884 [DEBUG] [Thread-27273] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:54:17.904 [DEBUG] [Thread-27273] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:54:17.904 [INFO] [Thread-27273] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:54:17.907 [DEBUG] [Thread-27273] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] client lang: <none>
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] server lang: <none>
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] kex follows: False
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] Compression: none
2025-11-13T02:54:17.908 [DEBUG] [Thread-27273] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:54:17.926 [DEBUG] [Thread-27273] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:54:17.927 [DEBUG] [Thread-27273] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:54:17.927 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:54:17.928 [DEBUG] [Thread-27273] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:54:17.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:54:17.930 [DEBUG] [Thread-27273] [transport.py] [_log()] userauth is OK
2025-11-13T02:54:17.930 [DEBUG] [Thread-27273] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:54:17.930 [DEBUG] [Thread-27273] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:54:17.930 [DEBUG] [Thread-27273] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:54:17.930 [DEBUG] [Thread-27273] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:54:17.948 [INFO] [Thread-27273] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:54:17.949 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:54:18.570 [DEBUG] [Thread-27273] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:54:18.570 [DEBUG] [Thread-27273] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:54:18.571 [DEBUG] [Thread-27273] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:54:18.612 [DEBUG] [Thread-27273] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:54:18.612 [DEBUG] [Thread-27273] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:54:18.616 [DEBUG] [Thread-27273] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:54:18.627 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:54:18.628 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:54:18.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:54:18.632 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:54:18.638 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:54:18.640 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:54:18.640 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:54:18.640 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:54:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:54:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.037243 -999.00  +14.30  11.86     45   +2.50 1 1 1 1 1     0    0 12.74 82.86 ZNESW 13.2 11.9 244.4 17.4 14.4 -25.6 14.2 -24.6 14.1 -24.3 14.3 -24.9
2025-11-13T02:54:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:54:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:54:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.037243
2025-11-13T02:54:18.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:54:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:54:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:54:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:54:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:54:18.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:53:53', tmtdew=13.9, humidity=38.58, cloud=0.0, wind=21.03, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:53:54', seeing=0.91, atlas_timestamp='2025-11-13T00:53:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:49:00')
2025-11-13T02:54:18.642 [DEBUG] [Thread-27273] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:54:18.726 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:54:18.739 [DEBUG] [Thread-27276] [transport.py] [_log()] starting thread (client mode): 0x149f2fb0
2025-11-13T02:54:18.739 [DEBUG] [Thread-27276] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:54:18.746 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:18.753 [DEBUG] [Thread-27276] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:54:18.754 [INFO] [Thread-27276] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:54:18.761 [DEBUG] [Thread-27276] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] client lang: <none>
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] server lang: <none>
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] kex follows: False
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:54:18.762 [DEBUG] [Thread-27276] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:54:18.763 [DEBUG] [Thread-27276] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:54:18.763 [DEBUG] [Thread-27276] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:54:18.763 [DEBUG] [Thread-27276] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:54:18.763 [DEBUG] [Thread-27276] [transport.py] [_log()] Compression: none
2025-11-13T02:54:18.763 [DEBUG] [Thread-27276] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:54:18.820 [DEBUG] [Thread-27276] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:54:18.821 [DEBUG] [Thread-27276] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:54:18.822 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:54:18.822 [DEBUG] [Thread-27276] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:54:18.823 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:54:18.877 [DEBUG] [Thread-27276] [transport.py] [_log()] userauth is OK
2025-11-13T02:54:18.877 [DEBUG] [Thread-27276] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:54:18.877 [DEBUG] [Thread-27276] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:54:18.877 [DEBUG] [Thread-27276] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:54:18.877 [DEBUG] [Thread-27276] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:54:18.895 [INFO] [Thread-27276] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:54:18.896 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:54:18.896 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:54:19.706 [DEBUG] [Thread-27276] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:54:19.707 [DEBUG] [Thread-27276] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:54:19.755 [DEBUG] [Thread-27276] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:54:19.755 [DEBUG] [Thread-27276] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:54:19.764 [DEBUG] [Thread-27276] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:54:19.774 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:54:19.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-11-13T02:54:19.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-11-13T02:54:19.792 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:54:19.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:54:19.793 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:54:19.801 [DEBUG] [Thread-27276] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:54:24.604 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:26.598 [DEBUG] [Thread-27278 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:27.649 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:33.308 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:41.639 [DEBUG] [Thread-27279 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:49.824 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:54:49.824 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:54:49.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-11-13T02:54:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 54, 25), 13.91, 38.55, 0.0, 21.44, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:54:50.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:54:25
2025-11-13T02:54:50.589 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:54:50.735 [DEBUG] [Thread-27280] [transport.py] [_log()] starting thread (client mode): 0x14921ae0
2025-11-13T02:54:50.735 [DEBUG] [Thread-27280] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:54:50.755 [DEBUG] [Thread-27280] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:54:50.755 [INFO] [Thread-27280] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:54:50.758 [DEBUG] [Thread-27280] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:54:50.758 [DEBUG] [Thread-27280] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:54:50.758 [DEBUG] [Thread-27280] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:54:50.758 [DEBUG] [Thread-27280] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:54:50.758 [DEBUG] [Thread-27280] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:54:50.758 [DEBUG] [Thread-27280] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:54:50.758 [DEBUG] [Thread-27280] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] client lang: <none>
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] server lang: <none>
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] kex follows: False
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] Compression: none
2025-11-13T02:54:50.759 [DEBUG] [Thread-27280] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:54:50.778 [DEBUG] [Thread-27280] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:54:50.779 [DEBUG] [Thread-27280] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:54:50.779 [DEBUG] [Thread-27280] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:54:50.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:54:50.780 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:54:50.782 [DEBUG] [Thread-27280] [transport.py] [_log()] userauth is OK
2025-11-13T02:54:50.782 [DEBUG] [Thread-27280] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:54:50.782 [DEBUG] [Thread-27280] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:54:50.782 [DEBUG] [Thread-27280] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:54:50.782 [DEBUG] [Thread-27280] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:54:50.818 [INFO] [Thread-27280] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:54:50.818 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:54:51.447 [DEBUG] [Thread-27280] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:54:51.447 [DEBUG] [Thread-27280] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:54:51.447 [DEBUG] [Thread-27280] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:54:51.487 [DEBUG] [Thread-27280] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:54:51.488 [DEBUG] [Thread-27280] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:54:51.491 [DEBUG] [Thread-27280] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:54:51.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:54:51.503 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:54:51.505 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:54:51.507 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:54:51.513 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:54:51.515 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:54:51.515 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:54:51.515 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:54:51.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:54:51.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.037590 -999.00  +14.20  13.98     45   +2.50 1 1 1 1 1     0    0 13.76 95.83 ZNESW 12.7 14.0 232.6 18.1 14.3 -25.6 14.2 -24.7 14.1 -24.3 14.3 -25.1
2025-11-13T02:54:51.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:54:51.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:54:51.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.037590
2025-11-13T02:54:51.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:54:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:54:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:54:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:54:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:54:51.517 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:54:25', tmtdew=13.91, humidity=38.55, cloud=0.0, wind=21.44, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:54:26', seeing=0.78, atlas_timestamp='2025-11-13T00:54:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:53:00')
2025-11-13T02:54:51.518 [DEBUG] [Thread-27280] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:54:51.602 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:54:51.614 [DEBUG] [Thread-27283] [transport.py] [_log()] starting thread (client mode): 0x14983100
2025-11-13T02:54:51.614 [DEBUG] [Thread-27283] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:54:51.629 [DEBUG] [Thread-27283] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:54:51.629 [INFO] [Thread-27283] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:54:51.637 [DEBUG] [Thread-27283] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] client lang: <none>
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] server lang: <none>
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] kex follows: False
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] Compression: none
2025-11-13T02:54:51.638 [DEBUG] [Thread-27283] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:54:51.702 [DEBUG] [Thread-27283] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:54:51.702 [DEBUG] [Thread-27283] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:54:51.703 [DEBUG] [Thread-27283] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:54:51.703 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:54:51.704 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:54:51.765 [DEBUG] [Thread-27283] [transport.py] [_log()] userauth is OK
2025-11-13T02:54:51.765 [DEBUG] [Thread-27283] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:54:51.765 [DEBUG] [Thread-27283] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:54:51.765 [DEBUG] [Thread-27283] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:54:51.765 [DEBUG] [Thread-27283] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:54:51.784 [INFO] [Thread-27283] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:54:51.784 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:54:51.785 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:54:52.621 [DEBUG] [Thread-27283] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:54:52.621 [DEBUG] [Thread-27283] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:54:52.670 [DEBUG] [Thread-27283] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:54:52.670 [DEBUG] [Thread-27283] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:54:52.679 [DEBUG] [Thread-27283] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:54:52.688 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:54:52.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T02:54:52.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-11-13T02:54:52.707 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:54:52.708 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:54:52.708 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:54:52.716 [DEBUG] [Thread-27283] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:54:55.836 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:55.837 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:54:56.675 [DEBUG] [Thread-27285 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:55:11.721 [DEBUG] [Thread-27286 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:55:15.200 [DEBUG] [Thread-27287 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:55:22.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:55:22.723 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:55:22.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-11-13T02:55:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 54, 57), 13.91, 38.55, 0.0, 18.7, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:55:23.367 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:54:57
2025-11-13T02:55:23.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:55:23.635 [DEBUG] [Thread-27288] [transport.py] [_log()] starting thread (client mode): 0x1496be80
2025-11-13T02:55:23.635 [DEBUG] [Thread-27288] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:55:23.655 [DEBUG] [Thread-27288] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:55:23.655 [INFO] [Thread-27288] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:55:23.658 [DEBUG] [Thread-27288] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:55:23.658 [DEBUG] [Thread-27288] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:55:23.658 [DEBUG] [Thread-27288] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] client lang: <none>
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] server lang: <none>
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] kex follows: False
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] Compression: none
2025-11-13T02:55:23.659 [DEBUG] [Thread-27288] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:55:23.679 [DEBUG] [Thread-27288] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:55:23.679 [DEBUG] [Thread-27288] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:55:23.680 [DEBUG] [Thread-27288] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:55:23.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:55:23.680 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:55:23.682 [DEBUG] [Thread-27288] [transport.py] [_log()] userauth is OK
2025-11-13T02:55:23.682 [DEBUG] [Thread-27288] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:55:23.682 [DEBUG] [Thread-27288] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:55:23.682 [DEBUG] [Thread-27288] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:55:23.682 [DEBUG] [Thread-27288] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:55:23.715 [INFO] [Thread-27288] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:55:23.716 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:55:24.366 [DEBUG] [Thread-27288] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:55:24.366 [DEBUG] [Thread-27288] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:55:24.367 [DEBUG] [Thread-27288] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:55:24.408 [DEBUG] [Thread-27288] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:55:24.408 [DEBUG] [Thread-27288] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:55:24.412 [DEBUG] [Thread-27288] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:55:24.421 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:55:24.422 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:55:24.424 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:55:24.426 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:55:24.431 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:55:24.433 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:55:24.434 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:55:24.434 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:55:24.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:55:24.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.038284 -999.00  +14.20  14.63     44   +2.30 1 1 1 1 1     0    0 14.68 119.94 ZNESW 15.3 14.6 240.0 23.1 14.4 -25.5 14.3 -24.5 14.0 -24.2 14.3 -25.1
2025-11-13T02:55:24.434 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:55:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:55:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.038284
2025-11-13T02:55:24.435 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:55:24.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:55:24.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:55:24.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:55:24.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:55:24.436 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:54:57', tmtdew=13.91, humidity=38.55, cloud=0.0, wind=18.7, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:54:58', seeing=0.89, atlas_timestamp='2025-11-13T00:55:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:53:00')
2025-11-13T02:55:24.436 [DEBUG] [Thread-27288] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:55:24.519 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:55:24.533 [DEBUG] [Thread-27291] [transport.py] [_log()] starting thread (client mode): 0x1496ba90
2025-11-13T02:55:24.533 [DEBUG] [Thread-27291] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:55:24.548 [DEBUG] [Thread-27291] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:55:24.549 [INFO] [Thread-27291] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:55:24.556 [DEBUG] [Thread-27291] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:55:24.556 [DEBUG] [Thread-27291] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:55:24.556 [DEBUG] [Thread-27291] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] client lang: <none>
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] server lang: <none>
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] kex follows: False
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] Compression: none
2025-11-13T02:55:24.557 [DEBUG] [Thread-27291] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:55:24.621 [DEBUG] [Thread-27291] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:55:24.622 [DEBUG] [Thread-27291] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:55:24.622 [DEBUG] [Thread-27291] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:55:24.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:55:24.623 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:55:24.676 [DEBUG] [Thread-27291] [transport.py] [_log()] userauth is OK
2025-11-13T02:55:24.677 [DEBUG] [Thread-27291] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:55:24.677 [DEBUG] [Thread-27291] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:55:24.677 [DEBUG] [Thread-27291] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:55:24.677 [DEBUG] [Thread-27291] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:55:24.698 [INFO] [Thread-27291] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:55:24.698 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:55:24.699 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:55:25.533 [DEBUG] [Thread-27291] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:55:25.533 [DEBUG] [Thread-27291] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:55:25.582 [DEBUG] [Thread-27291] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:55:25.582 [DEBUG] [Thread-27291] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:55:25.591 [DEBUG] [Thread-27291] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:55:25.600 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:55:25.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-11-13T02:55:25.610 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:55:25.620 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:55:25.620 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:55:25.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:55:25.628 [DEBUG] [Thread-27291] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:55:26.757 [DEBUG] [Thread-27293 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:55:41.809 [DEBUG] [Thread-27294 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:55:55.651 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:55:55.651 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:55:55.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:55:56.040 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:55:56.040 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:55:56.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 55, 29), 13.9, 38.56, 0.0, 18.03, 14.39, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:55:56.305 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:55:29
2025-11-13T02:55:56.429 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:55:56.577 [DEBUG] [Thread-27295] [transport.py] [_log()] starting thread (client mode): 0x1737dc00
2025-11-13T02:55:56.577 [DEBUG] [Thread-27295] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:55:56.598 [DEBUG] [Thread-27295] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:55:56.598 [INFO] [Thread-27295] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:55:56.601 [DEBUG] [Thread-27295] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:55:56.601 [DEBUG] [Thread-27295] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:55:56.601 [DEBUG] [Thread-27295] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:55:56.601 [DEBUG] [Thread-27295] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:55:56.601 [DEBUG] [Thread-27295] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:55:56.601 [DEBUG] [Thread-27295] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:55:56.601 [DEBUG] [Thread-27295] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] client lang: <none>
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] server lang: <none>
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] kex follows: False
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] Compression: none
2025-11-13T02:55:56.602 [DEBUG] [Thread-27295] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:55:56.618 [DEBUG] [Thread-27295] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:55:56.618 [DEBUG] [Thread-27295] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:55:56.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:55:56.619 [DEBUG] [Thread-27295] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:55:56.620 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:55:56.622 [DEBUG] [Thread-27295] [transport.py] [_log()] userauth is OK
2025-11-13T02:55:56.622 [DEBUG] [Thread-27295] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:55:56.622 [DEBUG] [Thread-27295] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:55:56.622 [DEBUG] [Thread-27295] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:55:56.622 [DEBUG] [Thread-27295] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:55:56.645 [INFO] [Thread-27295] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:55:56.646 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:55:56.842 [DEBUG] [Thread-27297 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:55:57.266 [DEBUG] [Thread-27295] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:55:57.267 [DEBUG] [Thread-27295] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:55:57.267 [DEBUG] [Thread-27295] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:55:57.308 [DEBUG] [Thread-27295] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:55:57.308 [DEBUG] [Thread-27295] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:55:57.312 [DEBUG] [Thread-27295] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:55:57.324 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:55:57.324 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:55:57.326 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:55:57.329 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:55:57.335 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:55:57.338 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:55:57.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:55:57.338 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:55:57.338 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.038632 -999.00  +14.20   8.57     44   +2.20 1 1 1 1 1     0    0 14.15 114.33 ZNESW 12.4 8.6 225.1 19.1 14.3 -25.5 14.3 -24.4 14.0 -24.0 14.4 -24.7
2025-11-13T02:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.038632
2025-11-13T02:55:57.339 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:55:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:55:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:55:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:55:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:55:57.340 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:55:29', tmtdew=13.9, humidity=38.56, cloud=0.0, wind=18.03, temperature=14.39, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:55:30', seeing=0.89, atlas_timestamp='2025-11-13T00:55:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:53:00')
2025-11-13T02:55:57.341 [DEBUG] [Thread-27295] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:55:57.424 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:55:57.440 [DEBUG] [Thread-27299] [transport.py] [_log()] starting thread (client mode): 0x14945f60
2025-11-13T02:55:57.440 [DEBUG] [Thread-27299] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:55:57.455 [DEBUG] [Thread-27299] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:55:57.455 [INFO] [Thread-27299] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:55:57.462 [DEBUG] [Thread-27299] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:55:57.462 [DEBUG] [Thread-27299] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] client lang: <none>
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] server lang: <none>
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] kex follows: False
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:55:57.463 [DEBUG] [Thread-27299] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:55:57.464 [DEBUG] [Thread-27299] [transport.py] [_log()] Compression: none
2025-11-13T02:55:57.464 [DEBUG] [Thread-27299] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:55:57.525 [DEBUG] [Thread-27299] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:55:57.526 [DEBUG] [Thread-27299] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:55:57.526 [DEBUG] [Thread-27299] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:55:57.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:55:57.527 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:55:57.580 [DEBUG] [Thread-27299] [transport.py] [_log()] userauth is OK
2025-11-13T02:55:57.581 [DEBUG] [Thread-27299] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:55:57.581 [DEBUG] [Thread-27299] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:55:57.581 [DEBUG] [Thread-27299] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:55:57.581 [DEBUG] [Thread-27299] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:55:57.600 [INFO] [Thread-27299] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:55:57.600 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:55:57.601 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:55:58.408 [DEBUG] [Thread-27299] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:55:58.408 [DEBUG] [Thread-27299] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:55:58.455 [DEBUG] [Thread-27299] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:55:58.456 [DEBUG] [Thread-27299] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:55:58.465 [DEBUG] [Thread-27299] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:55:58.474 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02: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')
2025-11-13T02:55:58.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-11-13T02:55:58.493 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:55:58.493 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:55:58.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:55:58.502 [DEBUG] [Thread-27299] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:56:11.878 [DEBUG] [Thread-27301 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:56:15.256 [DEBUG] [Thread-27302 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:56:26.928 [DEBUG] [Thread-27303 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:56:28.510 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:56:28.510 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:56:28.513 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T02:56:29.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 56, 1), 13.97, 38.38, 0.0, 19.34, 14.41, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:56:29.180 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:56:01
2025-11-13T02:56:29.304 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:56:29.448 [DEBUG] [Thread-27304] [transport.py] [_log()] starting thread (client mode): 0x14981ff0
2025-11-13T02:56:29.448 [DEBUG] [Thread-27304] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:56:29.468 [DEBUG] [Thread-27304] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:56:29.469 [INFO] [Thread-27304] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:56:29.471 [DEBUG] [Thread-27304] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] client lang: <none>
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] server lang: <none>
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] kex follows: False
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] Compression: none
2025-11-13T02:56:29.472 [DEBUG] [Thread-27304] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:56:29.489 [DEBUG] [Thread-27304] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:56:29.490 [DEBUG] [Thread-27304] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:56:29.490 [DEBUG] [Thread-27304] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:56:29.490 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:56:29.491 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:56:29.492 [DEBUG] [Thread-27304] [transport.py] [_log()] userauth is OK
2025-11-13T02:56:29.492 [DEBUG] [Thread-27304] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:56:29.492 [DEBUG] [Thread-27304] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:56:29.492 [DEBUG] [Thread-27304] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:56:29.492 [DEBUG] [Thread-27304] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:56:29.517 [INFO] [Thread-27304] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:56:29.518 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:56:30.131 [DEBUG] [Thread-27304] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:56:30.131 [DEBUG] [Thread-27304] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:56:30.132 [DEBUG] [Thread-27304] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:56:30.172 [DEBUG] [Thread-27304] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:56:30.172 [DEBUG] [Thread-27304] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:56:30.175 [DEBUG] [Thread-27304] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:56:30.188 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:56:30.188 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:56:30.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:56:30.192 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:56:30.197 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:56:30.198 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:56:30.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:56:30.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:56:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:56:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.038979 -999.00  +14.30  13.46     43   +2.10 1 1 1 1 1     0    0 14.70 120.00 ZNESW 12.0 13.5 244.8 16.4 14.4 -25.4 14.3 -24.5 14.1 -24.1 14.4 -24.8
2025-11-13T02:56:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:56:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:56:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.038979
2025-11-13T02:56:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:56:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:56:30.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:56:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:56:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:56:30.201 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:56:01', tmtdew=13.97, humidity=38.38, cloud=0.0, wind=19.34, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:56:02', seeing=1.0, atlas_timestamp='2025-11-13T00:56:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:53:00')
2025-11-13T02:56:30.201 [DEBUG] [Thread-27304] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:56:30.284 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:56:30.298 [DEBUG] [Thread-27307] [transport.py] [_log()] starting thread (client mode): 0x11f03c10
2025-11-13T02:56:30.298 [DEBUG] [Thread-27307] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:56:30.312 [DEBUG] [Thread-27307] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:56:30.313 [INFO] [Thread-27307] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:56:30.320 [DEBUG] [Thread-27307] [transport.py] [_log()] client lang: <none>
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] server lang: <none>
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] kex follows: False
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] Compression: none
2025-11-13T02:56:30.321 [DEBUG] [Thread-27307] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:56:30.384 [DEBUG] [Thread-27307] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:56:30.384 [DEBUG] [Thread-27307] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:56:30.385 [DEBUG] [Thread-27307] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:56:30.385 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:56:30.386 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:56:30.440 [DEBUG] [Thread-27307] [transport.py] [_log()] userauth is OK
2025-11-13T02:56:30.441 [DEBUG] [Thread-27307] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:56:30.441 [DEBUG] [Thread-27307] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:56:30.441 [DEBUG] [Thread-27307] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:56:30.441 [DEBUG] [Thread-27307] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:56:30.460 [INFO] [Thread-27307] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:56:30.461 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:56:30.461 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:56:31.282 [DEBUG] [Thread-27307] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:56:31.282 [DEBUG] [Thread-27307] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:56:31.329 [DEBUG] [Thread-27307] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:56:31.330 [DEBUG] [Thread-27307] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:56:31.339 [DEBUG] [Thread-27307] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:56:31.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:56:31.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-11-13T02:56:31.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-11-13T02:56:31.367 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:56:31.367 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:56:31.368 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:56:31.376 [DEBUG] [Thread-27307] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:56:41.961 [DEBUG] [Thread-27309 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:56:56.242 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:56:56.243 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:56:57.024 [DEBUG] [Thread-27310 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:57:01.370 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:57:01.371 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:57:01.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-11-13T02:57:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 56, 33), 14.16, 37.9, 0.0, 19.94, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:57:02.070 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:56:33
2025-11-13T02:57:02.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:57:02.352 [DEBUG] [Thread-27311] [transport.py] [_log()] starting thread (client mode): 0x19ddb640
2025-11-13T02:57:02.352 [DEBUG] [Thread-27311] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:57:02.373 [DEBUG] [Thread-27311] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:57:02.373 [INFO] [Thread-27311] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] client lang: <none>
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] server lang: <none>
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] kex follows: False
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] Compression: none
2025-11-13T02:57:02.377 [DEBUG] [Thread-27311] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:57:02.393 [DEBUG] [Thread-27311] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:57:02.393 [DEBUG] [Thread-27311] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:57:02.393 [DEBUG] [Thread-27311] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:57:02.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:57:02.393 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:57:02.394 [DEBUG] [Thread-27311] [transport.py] [_log()] userauth is OK
2025-11-13T02:57:02.394 [DEBUG] [Thread-27311] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:57:02.394 [DEBUG] [Thread-27311] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:57:02.394 [DEBUG] [Thread-27311] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:57:02.394 [DEBUG] [Thread-27311] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:57:02.403 [INFO] [Thread-27311] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:57:02.404 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:57:03.018 [DEBUG] [Thread-27311] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:57:03.019 [DEBUG] [Thread-27311] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:57:03.019 [DEBUG] [Thread-27311] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:57:03.059 [DEBUG] [Thread-27311] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:57:03.059 [DEBUG] [Thread-27311] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:57:03.061 [DEBUG] [Thread-27311] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:57:03.074 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:57:03.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:57:03.075 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:57:03.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:57:03.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:57:03.079 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:57:03.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:57:03.079 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.039326 -999.00  +14.30  11.87     43   +2.00 1 1 1 1 1     0    0 14.56 123.33 ZNESW 8.8 11.9 245.0 18.0 14.4 -25.3 14.2 -24.4 14.1 -24.0 14.4 -24.9
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.039326
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:57:03.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:56:33', tmtdew=14.16, humidity=37.9, cloud=0.0, wind=19.94, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:56:34', seeing=1.02, atlas_timestamp='2025-11-13T00:56:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[0.008749999999999147, 0.03625000000000078, 0.04525000000000112, 0.03049999999999997, -0.010500000000000398, 0.08024999999999949, 0.017999999999998906, 0.005250000000000199, 0.01649999999999885, 0.009000000000000341, 0.06475000000000009, 0.0470000000000006, 0.10899999999999999, 0.0572499999999998, -0.022500000000000853, -0.009499999999999176, 0.03974999999999973, 0.05749999999999922, 0.09299999999999997, 0.09675000000000011, 0.07899999999999885, 0.07174999999999798, 0.013250000000001094, -0.005250000000000199, 0.04099999999999859, 0.1355000000000004, 0.08474999999999966, 0.15549999999999997, 0.21199999999999974, 0.08000000000000185, 0.06900000000000084, 0.03700000000000081, -0.007250000000000867], zp_timestamp='2025-11-13T00:53:00')
2025-11-13T02:57:03.081 [DEBUG] [Thread-27311] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:57:03.155 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:57:03.166 [DEBUG] [Thread-27314] [transport.py] [_log()] starting thread (client mode): 0x1493e3e0
2025-11-13T02:57:03.166 [DEBUG] [Thread-27314] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:57:03.180 [DEBUG] [Thread-27314] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:57:03.180 [INFO] [Thread-27314] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] client lang: <none>
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] server lang: <none>
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] kex follows: False
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] Compression: none
2025-11-13T02:57:03.188 [DEBUG] [Thread-27314] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:57:03.243 [DEBUG] [Thread-27314] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:57:03.244 [DEBUG] [Thread-27314] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:57:03.244 [DEBUG] [Thread-27314] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:57:03.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:57:03.244 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:57:03.300 [DEBUG] [Thread-27314] [transport.py] [_log()] userauth is OK
2025-11-13T02:57:03.300 [DEBUG] [Thread-27314] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:57:03.300 [DEBUG] [Thread-27314] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:57:03.300 [DEBUG] [Thread-27314] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:57:03.300 [DEBUG] [Thread-27314] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:57:03.315 [INFO] [Thread-27314] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:57:03.315 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:57:03.315 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:57:04.115 [DEBUG] [Thread-27314] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:57:04.115 [DEBUG] [Thread-27314] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:57:04.163 [DEBUG] [Thread-27314] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:57:04.163 [DEBUG] [Thread-27314] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:57:04.171 [DEBUG] [Thread-27314] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:57:04.179 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:57:04.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')
2025-11-13T02:57:04.187 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:57:04.195 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:57:04.195 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:57:04.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:57:04.203 [DEBUG] [Thread-27314] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:57:12.060 [DEBUG] [Thread-27316 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:57:15.323 [DEBUG] [Thread-27317 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:57:27.116 [DEBUG] [Thread-27318 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:57:34.225 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:57:34.226 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:57:34.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-11-13T02:57:34.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 57, 6), 14.26, 37.63, 0.0, 19.83, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:57:34.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:57:06
2025-11-13T02:57:35.021 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:57:35.166 [DEBUG] [Thread-27319] [transport.py] [_log()] starting thread (client mode): 0x19dd9ff0
2025-11-13T02:57:35.166 [DEBUG] [Thread-27319] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:57:35.186 [DEBUG] [Thread-27319] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:57:35.186 [INFO] [Thread-27319] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:57:35.189 [DEBUG] [Thread-27319] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:57:35.189 [DEBUG] [Thread-27319] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:57:35.189 [DEBUG] [Thread-27319] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:57:35.189 [DEBUG] [Thread-27319] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:57:35.189 [DEBUG] [Thread-27319] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] client lang: <none>
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] server lang: <none>
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] kex follows: False
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] Compression: none
2025-11-13T02:57:35.190 [DEBUG] [Thread-27319] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:57:35.209 [DEBUG] [Thread-27319] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:57:35.209 [DEBUG] [Thread-27319] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:57:35.210 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:57:35.210 [DEBUG] [Thread-27319] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:57:35.211 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:57:35.213 [DEBUG] [Thread-27319] [transport.py] [_log()] userauth is OK
2025-11-13T02:57:35.213 [DEBUG] [Thread-27319] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:57:35.213 [DEBUG] [Thread-27319] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:57:35.213 [DEBUG] [Thread-27319] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:57:35.213 [DEBUG] [Thread-27319] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:57:35.245 [INFO] [Thread-27319] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:57:35.245 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:57:35.888 [DEBUG] [Thread-27319] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:57:35.888 [DEBUG] [Thread-27319] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:57:35.889 [DEBUG] [Thread-27319] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:57:35.929 [DEBUG] [Thread-27319] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:57:35.929 [DEBUG] [Thread-27319] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:57:35.932 [DEBUG] [Thread-27319] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:57:35.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:57:35.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:57:35.946 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:57:35.947 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:57:35.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:57:35.950 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:57:35.950 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:57:35.950 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.039674 -999.00  +14.30  12.54     43   +2.00 1 1 1 1 1     0    0 14.13 114.70 ZNESW 11.5 12.5 240.2 19.3 14.4 -25.4 14.3 -24.4 14.1 -24.0 14.4 -24.6
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.039674
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:57:35.951 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:57:06', tmtdew=14.26, humidity=37.63, cloud=0.0, wind=19.83, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:57:06', seeing=1.02, atlas_timestamp='2025-11-13T00:57:07.834', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013750000000001705, 0.004250000000000753, 0.026250000000000995, 0.010499999999998622, 0.002500000000001279, 0.03675000000000139, -0.025000000000000355, 0.0022500000000000853, 0.0045000000000001705, -0.006999999999999673, 0.06625000000000014, 0.06300000000000061, 0.08300000000000018, 0.04624999999999879, -0.03250000000000064, -0.0070000000000014495, 0.006750000000000256, 0.06649999999999956, 0.07349999999999923, 0.048749999999998295, 0.08599999999999852, 0.025749999999998607, 0.011250000000000426, -0.004250000000000753, 0.04349999999999987, 0.08549999999999969, 0.07675000000000054, 0.16750000000000043, 0.16900000000000048, 0.06850000000000023, 0.05600000000000094, -0.0009999999999994458, -0.009250000000001535], zp_timestamp='2025-11-13T00:55:00')
2025-11-13T02:57:35.952 [DEBUG] [Thread-27319] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:57:36.023 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:57:36.037 [DEBUG] [Thread-27322] [transport.py] [_log()] starting thread (client mode): 0x1493e320
2025-11-13T02:57:36.037 [DEBUG] [Thread-27322] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:57:36.052 [DEBUG] [Thread-27322] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:57:36.052 [INFO] [Thread-27322] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:57:36.060 [DEBUG] [Thread-27322] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:57:36.060 [DEBUG] [Thread-27322] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:57:36.060 [DEBUG] [Thread-27322] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] client lang: <none>
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] server lang: <none>
2025-11-13T02:57:36.061 [DEBUG] [Thread-27322] [transport.py] [_log()] kex follows: False
2025-11-13T02:57:36.062 [DEBUG] [Thread-27322] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:57:36.062 [DEBUG] [Thread-27322] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:57:36.062 [DEBUG] [Thread-27322] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:57:36.062 [DEBUG] [Thread-27322] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:57:36.062 [DEBUG] [Thread-27322] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:57:36.062 [DEBUG] [Thread-27322] [transport.py] [_log()] Compression: none
2025-11-13T02:57:36.062 [DEBUG] [Thread-27322] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:57:36.121 [DEBUG] [Thread-27322] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:57:36.122 [DEBUG] [Thread-27322] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:57:36.122 [DEBUG] [Thread-27322] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:57:36.122 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:57:36.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:57:36.180 [DEBUG] [Thread-27322] [transport.py] [_log()] userauth is OK
2025-11-13T02:57:36.181 [DEBUG] [Thread-27322] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:57:36.181 [DEBUG] [Thread-27322] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:57:36.181 [DEBUG] [Thread-27322] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:57:36.181 [DEBUG] [Thread-27322] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:57:36.206 [INFO] [Thread-27322] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:57:36.206 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:57:36.207 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:57:37.029 [DEBUG] [Thread-27322] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:57:37.030 [DEBUG] [Thread-27322] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:57:37.078 [DEBUG] [Thread-27322] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:57:37.078 [DEBUG] [Thread-27322] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:57:37.087 [DEBUG] [Thread-27322] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:57:37.096 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:57:37.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-11-13T02:57:37.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-11-13T02:57:37.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:57:37.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:57:37.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:57:37.123 [DEBUG] [Thread-27322] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:57:42.152 [DEBUG] [Thread-27324 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:57:56.447 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:57:56.448 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:57:57.189 [DEBUG] [Thread-27325 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:58:07.135 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:58:07.135 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:58: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-11-13T02:58:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 57, 38), 14.28, 37.58, 0.0, 18.67, 14.41, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:58:07.788 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:57:38
2025-11-13T02:58:07.912 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:58:08.056 [DEBUG] [Thread-27326] [transport.py] [_log()] starting thread (client mode): 0x14989d50
2025-11-13T02:58:08.056 [DEBUG] [Thread-27326] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:58:08.074 [DEBUG] [Thread-27326] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:58:08.074 [INFO] [Thread-27326] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:58:08.075 [DEBUG] [Thread-27326] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:58:08.075 [DEBUG] [Thread-27326] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:58:08.075 [DEBUG] [Thread-27326] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:58:08.075 [DEBUG] [Thread-27326] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:58:08.075 [DEBUG] [Thread-27326] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:58:08.075 [DEBUG] [Thread-27326] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] client lang: <none>
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] server lang: <none>
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] kex follows: False
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] Compression: none
2025-11-13T02:58:08.076 [DEBUG] [Thread-27326] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:58:08.086 [DEBUG] [Thread-27326] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:58:08.086 [DEBUG] [Thread-27326] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:58:08.087 [DEBUG] [Thread-27326] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:58:08.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:58:08.087 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:58:08.088 [DEBUG] [Thread-27326] [transport.py] [_log()] userauth is OK
2025-11-13T02:58:08.088 [DEBUG] [Thread-27326] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:58:08.088 [DEBUG] [Thread-27326] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:58:08.088 [DEBUG] [Thread-27326] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:58:08.088 [DEBUG] [Thread-27326] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:58:08.105 [INFO] [Thread-27326] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:58:08.106 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:58:08.709 [DEBUG] [Thread-27326] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:58:08.718 [DEBUG] [Thread-27326] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:58:08.719 [DEBUG] [Thread-27326] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:58:08.749 [DEBUG] [Thread-27326] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:58:08.750 [DEBUG] [Thread-27326] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:58:08.755 [DEBUG] [Thread-27326] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:58:08.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:58:08.770 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:58:08.772 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:58:08.773 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:58:08.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:58:08.779 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:58:08.780 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:58:08.780 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:58:08.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:58:08.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.040021 -999.00  +14.30   9.86     43   +2.10 1 1 1 1 1     0    0 14.79 124.12 ZNESW 9.2 9.9 218.0 14.1 14.4 -25.5 14.3 -24.5 14.1 -24.1 14.4 -24.7
2025-11-13T02:58:08.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:58:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:58:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.040021
2025-11-13T02:58:08.781 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:58:08.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:58:08.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:58:08.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:58:08.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:58:08.782 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:57:38', tmtdew=14.28, humidity=37.58, cloud=0.0, wind=18.67, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:57:38', seeing=0.82, atlas_timestamp='2025-11-13T00:57:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013750000000001705, 0.004250000000000753, 0.026250000000000995, 0.010499999999998622, 0.002500000000001279, 0.03675000000000139, -0.025000000000000355, 0.0022500000000000853, 0.0045000000000001705, -0.006999999999999673, 0.06625000000000014, 0.06300000000000061, 0.08300000000000018, 0.04624999999999879, -0.03250000000000064, -0.0070000000000014495, 0.006750000000000256, 0.06649999999999956, 0.07349999999999923, 0.048749999999998295, 0.08599999999999852, 0.025749999999998607, 0.011250000000000426, -0.004250000000000753, 0.04349999999999987, 0.08549999999999969, 0.07675000000000054, 0.16750000000000043, 0.16900000000000048, 0.06850000000000023, 0.05600000000000094, -0.0009999999999994458, -0.009250000000001535], zp_timestamp='2025-11-13T00:55:00')
2025-11-13T02:58:08.782 [DEBUG] [Thread-27326] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:58:08.866 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:58:08.878 [DEBUG] [Thread-27329] [transport.py] [_log()] starting thread (client mode): 0x14981180
2025-11-13T02:58:08.878 [DEBUG] [Thread-27329] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:58:08.893 [DEBUG] [Thread-27329] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:58:08.893 [INFO] [Thread-27329] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] client lang: <none>
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] server lang: <none>
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] kex follows: False
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:58:08.901 [DEBUG] [Thread-27329] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:58:08.902 [DEBUG] [Thread-27329] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:58:08.902 [DEBUG] [Thread-27329] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:58:08.902 [DEBUG] [Thread-27329] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:58:08.902 [DEBUG] [Thread-27329] [transport.py] [_log()] Compression: none
2025-11-13T02:58:08.902 [DEBUG] [Thread-27329] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:58:08.965 [DEBUG] [Thread-27329] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:58:08.965 [DEBUG] [Thread-27329] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:58:08.966 [DEBUG] [Thread-27329] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:58:08.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:58:08.967 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:58:09.026 [DEBUG] [Thread-27329] [transport.py] [_log()] userauth is OK
2025-11-13T02:58:09.027 [DEBUG] [Thread-27329] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:58:09.027 [DEBUG] [Thread-27329] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:58:09.027 [DEBUG] [Thread-27329] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:58:09.027 [DEBUG] [Thread-27329] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:58:09.046 [INFO] [Thread-27329] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:58:09.047 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:58:09.049 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:58:09.862 [DEBUG] [Thread-27329] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:58:09.863 [DEBUG] [Thread-27329] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:58:09.910 [DEBUG] [Thread-27329] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:58:09.911 [DEBUG] [Thread-27329] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:58:09.920 [DEBUG] [Thread-27329] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:58:09.929 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:58:09.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-11-13T02:58: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-11-13T02:58:09.948 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:58:09.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:58:09.949 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:58:09.957 [DEBUG] [Thread-27329] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:58:12.229 [DEBUG] [Thread-27331 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:58:15.387 [DEBUG] [Thread-27332 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:58:27.271 [DEBUG] [Thread-27333 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:58:39.973 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:58:39.974 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:58:39.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-11-13T02:58:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 58, 10), 14.32, 37.48, 0.0, 18.97, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:58:40.614 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:58:10
2025-11-13T02:58:40.736 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:58:40.882 [DEBUG] [Thread-27334] [transport.py] [_log()] starting thread (client mode): 0x149835b0
2025-11-13T02:58:40.882 [DEBUG] [Thread-27334] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:58:40.902 [DEBUG] [Thread-27334] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:58:40.903 [INFO] [Thread-27334] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] client lang: <none>
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] server lang: <none>
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] kex follows: False
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] Compression: none
2025-11-13T02:58:40.906 [DEBUG] [Thread-27334] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:58:40.923 [DEBUG] [Thread-27334] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:58:40.924 [DEBUG] [Thread-27334] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:58:40.924 [DEBUG] [Thread-27334] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:58:40.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:58:40.925 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:58:40.927 [DEBUG] [Thread-27334] [transport.py] [_log()] userauth is OK
2025-11-13T02:58:40.927 [DEBUG] [Thread-27334] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:58:40.927 [DEBUG] [Thread-27334] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:58:40.927 [DEBUG] [Thread-27334] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:58:40.927 [DEBUG] [Thread-27334] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:58:40.947 [INFO] [Thread-27334] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:58:40.948 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:58:41.555 [DEBUG] [Thread-27334] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:58:41.555 [DEBUG] [Thread-27334] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:58:41.556 [DEBUG] [Thread-27334] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:58:41.596 [DEBUG] [Thread-27334] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:58:41.597 [DEBUG] [Thread-27334] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:58:41.600 [DEBUG] [Thread-27334] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:58:41.611 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:58:41.611 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:58:41.613 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:58:41.614 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:58:41.619 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:58:41.621 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:58:41.621 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:58:41.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:58:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:58:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.040715 -999.00  +14.20   7.79     43   +2.00 1 1 1 1 1     0    0 15.88 154.33 ZNESW 10.6 7.8 255.5 17.7 14.4 -25.4 14.3 -24.4 14.1 -23.9 14.3 -24.9
2025-11-13T02:58:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:58:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:58:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.040715
2025-11-13T02:58:41.622 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:58:41.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:58:41.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:58:41.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:58:41.623 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:58:41.624 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:58:10', tmtdew=14.32, humidity=37.48, cloud=0.0, wind=18.97, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:58:10', seeing=0.82, atlas_timestamp='2025-11-13T00:58:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013750000000001705, 0.004250000000000753, 0.026250000000000995, 0.010499999999998622, 0.002500000000001279, 0.03675000000000139, -0.025000000000000355, 0.0022500000000000853, 0.0045000000000001705, -0.006999999999999673, 0.06625000000000014, 0.06300000000000061, 0.08300000000000018, 0.04624999999999879, -0.03250000000000064, -0.0070000000000014495, 0.006750000000000256, 0.06649999999999956, 0.07349999999999923, 0.048749999999998295, 0.08599999999999852, 0.025749999999998607, 0.011250000000000426, -0.004250000000000753, 0.04349999999999987, 0.08549999999999969, 0.07675000000000054, 0.16750000000000043, 0.16900000000000048, 0.06850000000000023, 0.05600000000000094, -0.0009999999999994458, -0.009250000000001535], zp_timestamp='2025-11-13T00:55:00')
2025-11-13T02:58:41.624 [DEBUG] [Thread-27334] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:58:41.707 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:58:41.719 [DEBUG] [Thread-27337] [transport.py] [_log()] starting thread (client mode): 0x14921c00
2025-11-13T02:58:41.719 [DEBUG] [Thread-27337] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:58:41.734 [DEBUG] [Thread-27337] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:58:41.734 [INFO] [Thread-27337] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:58:41.741 [DEBUG] [Thread-27337] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] client lang: <none>
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] server lang: <none>
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] kex follows: False
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:58:41.742 [DEBUG] [Thread-27337] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:58:41.743 [DEBUG] [Thread-27337] [transport.py] [_log()] Compression: none
2025-11-13T02:58:41.743 [DEBUG] [Thread-27337] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:58:41.805 [DEBUG] [Thread-27337] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:58:41.805 [DEBUG] [Thread-27337] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:58:41.806 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:58:41.807 [DEBUG] [Thread-27337] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:58:41.808 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:58:41.860 [DEBUG] [Thread-27337] [transport.py] [_log()] userauth is OK
2025-11-13T02:58:41.861 [DEBUG] [Thread-27337] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:58:41.861 [DEBUG] [Thread-27337] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:58:41.861 [DEBUG] [Thread-27337] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:58:41.861 [DEBUG] [Thread-27337] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:58:41.880 [INFO] [Thread-27337] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:58:41.880 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:58:41.881 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:58:42.310 [DEBUG] [Thread-27339 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:58:42.695 [DEBUG] [Thread-27337] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:58:42.695 [DEBUG] [Thread-27337] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:58:42.743 [DEBUG] [Thread-27337] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:58:42.744 [DEBUG] [Thread-27337] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:58:42.753 [DEBUG] [Thread-27337] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:58:42.762 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:58:42.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-11-13T02:58:42.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-11-13T02:58:42.781 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:58:42.781 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:58:42.781 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:58:42.789 [DEBUG] [Thread-27337] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:58:56.656 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:58:56.657 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:58:57.360 [DEBUG] [Thread-27340 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:59:12.393 [DEBUG] [Thread-27341 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:59:12.812 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:59:12.812 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:59:12.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-11-13T02:59:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 58, 42), 14.37, 37.47, 0.0, 16.96, 14.36, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:59:13.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:58:42
2025-11-13T02:59:13.590 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:59:13.734 [DEBUG] [Thread-27342] [transport.py] [_log()] starting thread (client mode): 0x11f02890
2025-11-13T02:59:13.734 [DEBUG] [Thread-27342] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:59:13.755 [DEBUG] [Thread-27342] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:59:13.755 [INFO] [Thread-27342] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:59:13.758 [DEBUG] [Thread-27342] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:59:13.758 [DEBUG] [Thread-27342] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:59:13.758 [DEBUG] [Thread-27342] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:59:13.758 [DEBUG] [Thread-27342] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:59:13.758 [DEBUG] [Thread-27342] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:59:13.758 [DEBUG] [Thread-27342] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] client lang: <none>
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] server lang: <none>
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] kex follows: False
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] Compression: none
2025-11-13T02:59:13.759 [DEBUG] [Thread-27342] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:59:13.777 [DEBUG] [Thread-27342] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:59:13.777 [DEBUG] [Thread-27342] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:59:13.778 [DEBUG] [Thread-27342] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:59:13.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:59:13.778 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:59:13.779 [DEBUG] [Thread-27342] [transport.py] [_log()] userauth is OK
2025-11-13T02:59:13.780 [DEBUG] [Thread-27342] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:59:13.780 [DEBUG] [Thread-27342] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:59:13.780 [DEBUG] [Thread-27342] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:59:13.780 [DEBUG] [Thread-27342] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:59:13.797 [INFO] [Thread-27342] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:59:13.799 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:59:14.432 [DEBUG] [Thread-27342] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:59:14.433 [DEBUG] [Thread-27342] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:59:14.433 [DEBUG] [Thread-27342] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:59:14.474 [DEBUG] [Thread-27342] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:59:14.474 [DEBUG] [Thread-27342] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:59:14.478 [DEBUG] [Thread-27342] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:59:14.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:59:14.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:59:14.492 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:59:14.494 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:59:14.499 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:59:14.501 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:59:14.501 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:59:14.501 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:59:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:59:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.040715 -999.00  +14.20   7.79     43   +2.00 1 1 1 1 1     0    0 15.88 154.33 ZNESW 10.6 7.8 255.5 17.7 14.4 -25.4 14.3 -24.4 14.1 -23.9 14.3 -24.9
2025-11-13T02:59:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:59:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:59:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.040715
2025-11-13T02:59:14.502 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:59:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:59:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:59:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:59:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:59:14.503 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:58:42', tmtdew=14.37, humidity=37.47, cloud=0.0, wind=16.96, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:58:42', seeing=0.83, atlas_timestamp='2025-11-13T00:58:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013750000000001705, 0.004250000000000753, 0.026250000000000995, 0.010499999999998622, 0.002500000000001279, 0.03675000000000139, -0.025000000000000355, 0.0022500000000000853, 0.0045000000000001705, -0.006999999999999673, 0.06625000000000014, 0.06300000000000061, 0.08300000000000018, 0.04624999999999879, -0.03250000000000064, -0.0070000000000014495, 0.006750000000000256, 0.06649999999999956, 0.07349999999999923, 0.048749999999998295, 0.08599999999999852, 0.025749999999998607, 0.011250000000000426, -0.004250000000000753, 0.04349999999999987, 0.08549999999999969, 0.07675000000000054, 0.16750000000000043, 0.16900000000000048, 0.06850000000000023, 0.05600000000000094, -0.0009999999999994458, -0.009250000000001535], zp_timestamp='2025-11-13T00:55:00')
2025-11-13T02:59:14.504 [DEBUG] [Thread-27342] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:59:14.587 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:59:14.600 [DEBUG] [Thread-27345] [transport.py] [_log()] starting thread (client mode): 0x19ddb520
2025-11-13T02:59:14.601 [DEBUG] [Thread-27345] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:59:14.615 [DEBUG] [Thread-27345] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:59:14.615 [INFO] [Thread-27345] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:59:14.623 [DEBUG] [Thread-27345] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] client lang: <none>
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] server lang: <none>
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] kex follows: False
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] Compression: none
2025-11-13T02:59:14.624 [DEBUG] [Thread-27345] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:59:14.681 [DEBUG] [Thread-27345] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:59:14.681 [DEBUG] [Thread-27345] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:59:14.682 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:59:14.683 [DEBUG] [Thread-27345] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:59:14.683 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:59:14.736 [DEBUG] [Thread-27345] [transport.py] [_log()] userauth is OK
2025-11-13T02:59:14.737 [DEBUG] [Thread-27345] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:59:14.737 [DEBUG] [Thread-27345] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:59:14.737 [DEBUG] [Thread-27345] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:59:14.737 [DEBUG] [Thread-27345] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:59:14.756 [INFO] [Thread-27345] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:59:14.756 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:59:14.757 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:59:15.440 [DEBUG] [Thread-27347 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:59:15.609 [DEBUG] [Thread-27345] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:59:15.609 [DEBUG] [Thread-27345] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:59:15.657 [DEBUG] [Thread-27345] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:59:15.657 [DEBUG] [Thread-27345] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:59:15.665 [DEBUG] [Thread-27345] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:59:15.673 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:59: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')
2025-11-13T02:59:15.681 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T02:59:15.689 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:59:15.689 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:59:15.689 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:59:15.697 [DEBUG] [Thread-27345] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:59:27.429 [DEBUG] [Thread-27348 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:59:42.478 [DEBUG] [Thread-27349 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:59:45.719 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T02:59:45.720 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T02:59:45.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-11-13T02:59:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 59, 14), 14.31, 37.61, 0.0, 17.4, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T02:59:46.365 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:59:14
2025-11-13T02:59:46.487 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T02:59:46.632 [DEBUG] [Thread-27350] [transport.py] [_log()] starting thread (client mode): 0x14981e40
2025-11-13T02:59:46.632 [DEBUG] [Thread-27350] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:59:46.652 [DEBUG] [Thread-27350] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T02:59:46.652 [INFO] [Thread-27350] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T02:59:46.655 [DEBUG] [Thread-27350] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:59:46.655 [DEBUG] [Thread-27350] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T02:59:46.655 [DEBUG] [Thread-27350] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:59:46.655 [DEBUG] [Thread-27350] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:59:46.655 [DEBUG] [Thread-27350] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:59:46.655 [DEBUG] [Thread-27350] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:59:46.655 [DEBUG] [Thread-27350] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:59:46.655 [DEBUG] [Thread-27350] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] client lang: <none>
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] server lang: <none>
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] kex follows: False
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] Compression: none
2025-11-13T02:59:46.656 [DEBUG] [Thread-27350] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:59:46.677 [DEBUG] [Thread-27350] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:59:46.678 [DEBUG] [Thread-27350] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:59:46.679 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T02:59:46.680 [DEBUG] [Thread-27350] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T02:59:46.681 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:59:46.682 [DEBUG] [Thread-27350] [transport.py] [_log()] userauth is OK
2025-11-13T02:59:46.683 [DEBUG] [Thread-27350] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:59:46.683 [DEBUG] [Thread-27350] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:59:46.683 [DEBUG] [Thread-27350] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T02:59:46.683 [DEBUG] [Thread-27350] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:59:46.718 [INFO] [Thread-27350] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:59:46.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:59:47.318 [DEBUG] [Thread-27350] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:59:47.318 [DEBUG] [Thread-27350] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:59:47.319 [DEBUG] [Thread-27350] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T02:59:47.359 [DEBUG] [Thread-27350] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:59:47.359 [DEBUG] [Thread-27350] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:59:47.361 [DEBUG] [Thread-27350] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:59:47.372 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:59:47.372 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T02:59:47.373 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T02:59:47.374 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T02:59:47.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:59:47.378 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T02:59:47.378 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.041062 -999.00  +14.20   4.66     43   +2.10 1 1 1 1 1     0    0 15.70 148.53 ZNESW 9.1 4.7 208.1 11.3 14.3 -25.6 14.2 -24.6 14.0 -24.2 14.3 -25.0
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.041062
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T02:59:47.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:59:14', tmtdew=14.31, humidity=37.61, cloud=0.0, wind=17.4, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:59:14', seeing=1.01, atlas_timestamp='2025-11-13T00:59:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013750000000001705, 0.004250000000000753, 0.026250000000000995, 0.010499999999998622, 0.002500000000001279, 0.03675000000000139, -0.025000000000000355, 0.0022500000000000853, 0.0045000000000001705, -0.006999999999999673, 0.06625000000000014, 0.06300000000000061, 0.08300000000000018, 0.04624999999999879, -0.03250000000000064, -0.0070000000000014495, 0.006750000000000256, 0.06649999999999956, 0.07349999999999923, 0.048749999999998295, 0.08599999999999852, 0.025749999999998607, 0.011250000000000426, -0.004250000000000753, 0.04349999999999987, 0.08549999999999969, 0.07675000000000054, 0.16750000000000043, 0.16900000000000048, 0.06850000000000023, 0.05600000000000094, -0.0009999999999994458, -0.009250000000001535], zp_timestamp='2025-11-13T00:55:00')
2025-11-13T02:59:47.379 [DEBUG] [Thread-27350] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:59:47.453 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T02:59:47.464 [DEBUG] [Thread-27353] [transport.py] [_log()] starting thread (client mode): 0x11f02800
2025-11-13T02:59:47.464 [DEBUG] [Thread-27353] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T02:59:47.479 [DEBUG] [Thread-27353] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T02:59:47.479 [INFO] [Thread-27353] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T02:59:47.486 [DEBUG] [Thread-27353] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] client lang: <none>
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] server lang: <none>
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] kex follows: False
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] Compression: none
2025-11-13T02:59:47.487 [DEBUG] [Thread-27353] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T02:59:47.547 [DEBUG] [Thread-27353] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T02:59:47.547 [DEBUG] [Thread-27353] [transport.py] [_log()] Switch to new keys ...
2025-11-13T02:59:47.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T02:59:47.547 [DEBUG] [Thread-27353] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T02:59:47.547 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T02:59:47.604 [DEBUG] [Thread-27353] [transport.py] [_log()] userauth is OK
2025-11-13T02:59:47.604 [DEBUG] [Thread-27353] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T02:59:47.604 [DEBUG] [Thread-27353] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T02:59:47.604 [DEBUG] [Thread-27353] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T02:59:47.604 [DEBUG] [Thread-27353] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T02:59:47.622 [INFO] [Thread-27353] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T02:59:47.622 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T02:59:47.622 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T02:59:48.493 [DEBUG] [Thread-27353] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T02:59:48.493 [DEBUG] [Thread-27353] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T02:59:48.541 [DEBUG] [Thread-27353] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T02:59:48.541 [DEBUG] [Thread-27353] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T02:59:48.550 [DEBUG] [Thread-27353] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T02:59:48.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T02:59:48.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-11-13T02:59:48.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-11-13T02:59:48.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T02:59:48.574 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T02:59:48.574 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T02:59:48.582 [DEBUG] [Thread-27353] [transport.py] [_log()] EOF in transport thread
2025-11-13T02:59:56.859 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:59:56.860 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T02:59:57.510 [DEBUG] [Thread-27355 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:12.557 [DEBUG] [Thread-27356 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:15.494 [DEBUG] [Thread-27357 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:18.604 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:00:18.604 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:00:18.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-11-13T03:00:19.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 2, 59, 46), 14.38, 37.42, 0.0, 20.38, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:00:19.292 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 02:59:46
2025-11-13T03:00:19.423 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:00:19.575 [DEBUG] [Thread-27358] [transport.py] [_log()] starting thread (client mode): 0x11f01bd0
2025-11-13T03:00:19.575 [DEBUG] [Thread-27358] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:00:19.597 [DEBUG] [Thread-27358] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:00:19.597 [INFO] [Thread-27358] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:00:19.600 [DEBUG] [Thread-27358] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:00:19.600 [DEBUG] [Thread-27358] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:00:19.600 [DEBUG] [Thread-27358] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:00:19.600 [DEBUG] [Thread-27358] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:00:19.600 [DEBUG] [Thread-27358] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] client lang: <none>
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] server lang: <none>
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] kex follows: False
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] Compression: none
2025-11-13T03:00:19.601 [DEBUG] [Thread-27358] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:00:19.618 [DEBUG] [Thread-27358] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:00:19.618 [DEBUG] [Thread-27358] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:00:19.618 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:00:19.619 [DEBUG] [Thread-27358] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:00:19.619 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:00:19.619 [DEBUG] [Thread-27358] [transport.py] [_log()] userauth is OK
2025-11-13T03:00:19.619 [DEBUG] [Thread-27358] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:00:19.619 [DEBUG] [Thread-27358] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:00:19.620 [DEBUG] [Thread-27358] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:00:19.620 [DEBUG] [Thread-27358] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:00:19.639 [INFO] [Thread-27358] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:00:19.639 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:00:20.247 [DEBUG] [Thread-27358] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:00:20.247 [DEBUG] [Thread-27358] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:00:20.248 [DEBUG] [Thread-27358] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:00:20.288 [DEBUG] [Thread-27358] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:00:20.288 [DEBUG] [Thread-27358] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:00:20.291 [DEBUG] [Thread-27358] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:00:20.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:00:20.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:00:20.303 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:00:20.304 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:00:20.307 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:00:20.308 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:00:20.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.041410 -999.00  +14.20   8.32     43   +2.00 1 1 1 1 1     0    0 15.23 136.24 ZNESW 8.4 8.3 236.7 20.3 14.3 -25.5 14.3 -24.6 14.0 -24.3 14.3 -24.9
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.041410
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:00:20.308 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T02:59:46', tmtdew=14.38, humidity=37.42, cloud=0.0, wind=20.38, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T02:59:46', seeing=1.01, atlas_timestamp='2025-11-13T00:59:37.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.013750000000001705, 0.004250000000000753, 0.026250000000000995, 0.010499999999998622, 0.002500000000001279, 0.03675000000000139, -0.025000000000000355, 0.0022500000000000853, 0.0045000000000001705, -0.006999999999999673, 0.06625000000000014, 0.06300000000000061, 0.08300000000000018, 0.04624999999999879, -0.03250000000000064, -0.0070000000000014495, 0.006750000000000256, 0.06649999999999956, 0.07349999999999923, 0.048749999999998295, 0.08599999999999852, 0.025749999999998607, 0.011250000000000426, -0.004250000000000753, 0.04349999999999987, 0.08549999999999969, 0.07675000000000054, 0.16750000000000043, 0.16900000000000048, 0.06850000000000023, 0.05600000000000094, -0.0009999999999994458, -0.009250000000001535], zp_timestamp='2025-11-13T00:55:00')
2025-11-13T03:00:20.309 [DEBUG] [Thread-27358] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:00:20.384 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:00:20.396 [DEBUG] [Thread-27361] [transport.py] [_log()] starting thread (client mode): 0x1493fd60
2025-11-13T03:00:20.396 [DEBUG] [Thread-27361] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:00:20.414 [DEBUG] [Thread-27361] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:00:20.414 [INFO] [Thread-27361] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:00:20.421 [DEBUG] [Thread-27361] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:00:20.421 [DEBUG] [Thread-27361] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:00:20.421 [DEBUG] [Thread-27361] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:00:20.421 [DEBUG] [Thread-27361] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:00:20.421 [DEBUG] [Thread-27361] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:00:20.421 [DEBUG] [Thread-27361] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:00:20.421 [DEBUG] [Thread-27361] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:00:20.421 [DEBUG] [Thread-27361] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] client lang: <none>
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] server lang: <none>
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] kex follows: False
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] Compression: none
2025-11-13T03:00:20.422 [DEBUG] [Thread-27361] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:00:20.479 [DEBUG] [Thread-27361] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:00:20.479 [DEBUG] [Thread-27361] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:00:20.479 [DEBUG] [Thread-27361] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:00:20.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:00:20.479 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:00:20.536 [DEBUG] [Thread-27361] [transport.py] [_log()] userauth is OK
2025-11-13T03:00:20.536 [DEBUG] [Thread-27361] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:00:20.536 [DEBUG] [Thread-27361] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:00:20.536 [DEBUG] [Thread-27361] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:00:20.536 [DEBUG] [Thread-27361] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:00:20.550 [INFO] [Thread-27361] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:00:20.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:00:20.550 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:00:21.382 [DEBUG] [Thread-27361] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:00:21.382 [DEBUG] [Thread-27361] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:00:21.430 [DEBUG] [Thread-27361] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:00:21.431 [DEBUG] [Thread-27361] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:00:21.440 [DEBUG] [Thread-27361] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:00:21.449 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:00:21.449 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:00:21.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-11-13T03:00:21.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:00:21.468 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:00:21.469 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:00:21.477 [DEBUG] [Thread-27361] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:00:27.600 [DEBUG] [Thread-27363 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:42.666 [DEBUG] [Thread-27364 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:51.473 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:00:51.473 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:00:51.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-11-13T03:00:52.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 0, 18), 14.35, 37.52, 0.0, 20.03, 14.31, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:00:52.139 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:00:18
2025-11-13T03:00:52.284 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:00:52.436 [DEBUG] [Thread-27365] [transport.py] [_log()] starting thread (client mode): 0x11f01240
2025-11-13T03:00:52.436 [DEBUG] [Thread-27365] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:00:52.456 [DEBUG] [Thread-27365] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:00:52.456 [INFO] [Thread-27365] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] client lang: <none>
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] server lang: <none>
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] kex follows: False
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:00:52.459 [DEBUG] [Thread-27365] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:00:52.460 [DEBUG] [Thread-27365] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:00:52.460 [DEBUG] [Thread-27365] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:00:52.460 [DEBUG] [Thread-27365] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:00:52.460 [DEBUG] [Thread-27365] [transport.py] [_log()] Compression: none
2025-11-13T03:00:52.460 [DEBUG] [Thread-27365] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:00:52.477 [DEBUG] [Thread-27365] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:00:52.477 [DEBUG] [Thread-27365] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:00:52.477 [DEBUG] [Thread-27365] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:00:52.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:00:52.478 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:00:52.478 [DEBUG] [Thread-27365] [transport.py] [_log()] userauth is OK
2025-11-13T03:00:52.478 [DEBUG] [Thread-27365] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:00:52.478 [DEBUG] [Thread-27365] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:00:52.478 [DEBUG] [Thread-27365] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:00:52.478 [DEBUG] [Thread-27365] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:00:52.491 [INFO] [Thread-27365] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:00:52.492 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:00:53.136 [DEBUG] [Thread-27365] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:00:53.136 [DEBUG] [Thread-27365] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:00:53.136 [DEBUG] [Thread-27365] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:00:53.177 [DEBUG] [Thread-27365] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:00:53.177 [DEBUG] [Thread-27365] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:00:53.180 [DEBUG] [Thread-27365] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:00:53.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:00:53.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:00:53.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:00:53.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:00:53.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:00:53.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:00:53.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.041757 -999.00  +14.20  11.35     43   +2.00 1 1 1 1 1     0    0 15.32 135.59 ZNESW 12.4 11.3 199.1 16.1 14.3 -25.5 14.2 -24.6 14.0 -24.2 14.3 -25.0
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.041757
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:00:53.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:00:53.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:00:18', tmtdew=14.35, humidity=37.52, cloud=0.0, wind=20.03, temperature=14.31, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:00:18', seeing=1.07, atlas_timestamp='2025-11-13T01:00:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T00:58:00')
2025-11-13T03:00:53.200 [DEBUG] [Thread-27365] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:00:53.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:00:53.285 [DEBUG] [Thread-27368] [transport.py] [_log()] starting thread (client mode): 0x149809a0
2025-11-13T03:00:53.285 [DEBUG] [Thread-27368] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:00:53.301 [DEBUG] [Thread-27368] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:00:53.301 [INFO] [Thread-27368] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] client lang: <none>
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] server lang: <none>
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] kex follows: False
2025-11-13T03:00:53.308 [DEBUG] [Thread-27368] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:00:53.309 [DEBUG] [Thread-27368] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:00:53.309 [DEBUG] [Thread-27368] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:00:53.309 [DEBUG] [Thread-27368] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:00:53.309 [DEBUG] [Thread-27368] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:00:53.309 [DEBUG] [Thread-27368] [transport.py] [_log()] Compression: none
2025-11-13T03:00:53.309 [DEBUG] [Thread-27368] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:00:53.367 [DEBUG] [Thread-27368] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:00:53.367 [DEBUG] [Thread-27368] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:00:53.367 [DEBUG] [Thread-27368] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:00:53.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:00:53.368 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:00:53.424 [DEBUG] [Thread-27368] [transport.py] [_log()] userauth is OK
2025-11-13T03:00:53.424 [DEBUG] [Thread-27368] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:00:53.424 [DEBUG] [Thread-27368] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:00:53.424 [DEBUG] [Thread-27368] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:00:53.424 [DEBUG] [Thread-27368] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:00:53.438 [INFO] [Thread-27368] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:00:53.438 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:00:53.438 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:00:54.268 [DEBUG] [Thread-27368] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:00:54.268 [DEBUG] [Thread-27368] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:00:54.316 [DEBUG] [Thread-27368] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:00:54.316 [DEBUG] [Thread-27368] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:00:54.324 [DEBUG] [Thread-27368] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:00:54.331 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:00:54.332 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:00:54.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-11-13T03:00:54.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:00:54.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:00:54.348 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:00:54.356 [DEBUG] [Thread-27368] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:00:55.402 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:57.061 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:57.062 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:57.704 [DEBUG] [Thread-27370 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:00:58.599 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:03.671 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:09.581 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:12.751 [DEBUG] [Thread-27371 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:15.549 [DEBUG] [Thread-27372 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:24.378 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:01:24.387 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:01:24.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-11-13T03:01:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 0, 50), 14.31, 37.47, 0.0, 20.41, 14.26, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:01:25.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:00:50
2025-11-13T03:01:25.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:01:25.347 [DEBUG] [Thread-27373] [transport.py] [_log()] starting thread (client mode): 0x19ddab90
2025-11-13T03:01:25.347 [DEBUG] [Thread-27373] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:01:25.367 [DEBUG] [Thread-27373] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:01:25.367 [INFO] [Thread-27373] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:01:25.370 [DEBUG] [Thread-27373] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] client lang: <none>
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] server lang: <none>
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] kex follows: False
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] Compression: none
2025-11-13T03:01:25.371 [DEBUG] [Thread-27373] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:01:25.387 [DEBUG] [Thread-27373] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:01:25.387 [DEBUG] [Thread-27373] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:01:25.387 [DEBUG] [Thread-27373] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:01:25.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:01:25.388 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:01:25.432 [DEBUG] [Thread-27373] [transport.py] [_log()] userauth is OK
2025-11-13T03:01:25.432 [DEBUG] [Thread-27373] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:01:25.432 [DEBUG] [Thread-27373] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:01:25.432 [DEBUG] [Thread-27373] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:01:25.433 [DEBUG] [Thread-27373] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:01:25.452 [INFO] [Thread-27373] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:01:25.452 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:01:26.091 [DEBUG] [Thread-27373] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:01:26.091 [DEBUG] [Thread-27373] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:01:26.092 [DEBUG] [Thread-27373] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:01:26.133 [DEBUG] [Thread-27373] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:01:26.133 [DEBUG] [Thread-27373] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:01:26.137 [DEBUG] [Thread-27373] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:01:26.149 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:01:26.150 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:01:26.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:01:26.154 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:01:26.159 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:01:26.161 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:01:26.161 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:01:26.161 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:01:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:01:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.042104 -999.00  +14.20   8.71     43   +1.90 1 1 1 1 1     0    0 15.62 139.83 ZNESW 10.5 8.7 224.0 13.3 14.3 -25.5 14.2 -24.6 14.0 -24.1 14.3 -24.8
2025-11-13T03:01:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:01:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:01:26.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.042104
2025-11-13T03:01:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:01:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:01:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:01:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:01:26.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:01:26.164 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:00:50', tmtdew=14.31, humidity=37.47, cloud=0.0, wind=20.41, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:01:24', seeing=1.06, atlas_timestamp='2025-11-13T01:00:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T00:58:00')
2025-11-13T03:01:26.164 [DEBUG] [Thread-27373] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:01:26.250 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:01:26.262 [DEBUG] [Thread-27376] [transport.py] [_log()] starting thread (client mode): 0x14982830
2025-11-13T03:01:26.262 [DEBUG] [Thread-27376] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:01:26.277 [DEBUG] [Thread-27376] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:01:26.278 [INFO] [Thread-27376] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:01:26.285 [DEBUG] [Thread-27376] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] client lang: <none>
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] server lang: <none>
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] kex follows: False
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:01:26.286 [DEBUG] [Thread-27376] [transport.py] [_log()] Compression: none
2025-11-13T03:01:26.287 [DEBUG] [Thread-27376] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:01:26.345 [DEBUG] [Thread-27376] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:01:26.345 [DEBUG] [Thread-27376] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:01:26.346 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:01:26.346 [DEBUG] [Thread-27376] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:01:26.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:01:26.401 [DEBUG] [Thread-27376] [transport.py] [_log()] userauth is OK
2025-11-13T03:01:26.401 [DEBUG] [Thread-27376] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:01:26.401 [DEBUG] [Thread-27376] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:01:26.402 [DEBUG] [Thread-27376] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:01:26.402 [DEBUG] [Thread-27376] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:01:26.421 [INFO] [Thread-27376] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:01:26.422 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:01:26.422 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:01:27.274 [DEBUG] [Thread-27376] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:01:27.274 [DEBUG] [Thread-27376] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:01:27.326 [DEBUG] [Thread-27376] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:01:27.327 [DEBUG] [Thread-27376] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:01:27.336 [DEBUG] [Thread-27376] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:01:27.345 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:01:27.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-11-13T03:01:27.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-11-13T03:01:27.363 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:01:27.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:01:27.364 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:01:27.372 [DEBUG] [Thread-27376] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:01:27.788 [DEBUG] [Thread-27378 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:28.430 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:33.045 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:42.828 [DEBUG] [Thread-27379 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:43.175 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:47.779 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:54.690 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:57.262 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:57.263 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:57.394 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:01:57.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:01:57.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:01:57.862 [DEBUG] [Thread-27380 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:58.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 1, 23), 14.44, 37.13, 0.0, 20.91, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:01:58.078 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:01:23
2025-11-13T03:01:58.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:01:58.346 [DEBUG] [Thread-27381] [transport.py] [_log()] starting thread (client mode): 0x149230d0
2025-11-13T03:01:58.347 [DEBUG] [Thread-27381] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:01:58.366 [DEBUG] [Thread-27381] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:01:58.366 [INFO] [Thread-27381] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:01:58.369 [DEBUG] [Thread-27381] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:01:58.369 [DEBUG] [Thread-27381] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:01:58.369 [DEBUG] [Thread-27381] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:01:58.369 [DEBUG] [Thread-27381] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:01:58.369 [DEBUG] [Thread-27381] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:01:58.369 [DEBUG] [Thread-27381] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:01:58.369 [DEBUG] [Thread-27381] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] client lang: <none>
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] server lang: <none>
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] kex follows: False
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] Compression: none
2025-11-13T03:01:58.370 [DEBUG] [Thread-27381] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:01:58.389 [DEBUG] [Thread-27381] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:01:58.390 [DEBUG] [Thread-27381] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:01:58.390 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:01:58.390 [DEBUG] [Thread-27381] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:01:58.391 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:01:58.393 [DEBUG] [Thread-27381] [transport.py] [_log()] userauth is OK
2025-11-13T03:01:58.393 [DEBUG] [Thread-27381] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:01:58.393 [DEBUG] [Thread-27381] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:01:58.393 [DEBUG] [Thread-27381] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:01:58.393 [DEBUG] [Thread-27381] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:01:58.416 [INFO] [Thread-27381] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:01:58.418 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:01:59.070 [DEBUG] [Thread-27381] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:01:59.070 [DEBUG] [Thread-27381] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:01:59.070 [DEBUG] [Thread-27381] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:01:59.106 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:01:59.111 [DEBUG] [Thread-27381] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:01:59.111 [DEBUG] [Thread-27381] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:01:59.114 [DEBUG] [Thread-27381] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:01:59.125 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:01:59.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:01:59.127 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:01:59.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:01:59.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:01:59.135 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:01:59.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:01:59.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:01:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:01:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.042452 -999.00  +14.20   8.83     43   +2.00 1 1 1 1 1     0    0 15.30 133.36 ZNESW 12.7 8.8 217.6 20.6 14.3 -25.6 14.2 -24.5 14.0 -24.0 14.3 -25.6
2025-11-13T03:01:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:01:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:01:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.042452
2025-11-13T03:01:59.136 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:01:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:01:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:01:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:01:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:01:59.137 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:01:23', tmtdew=14.44, humidity=37.13, cloud=0.0, wind=20.91, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:01:56', seeing=0.99, atlas_timestamp='2025-11-13T01:01:07.853', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T00:58:00')
2025-11-13T03:01:59.137 [DEBUG] [Thread-27381] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:01:59.223 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:01:59.234 [DEBUG] [Thread-27384] [transport.py] [_log()] starting thread (client mode): 0x14921900
2025-11-13T03:01:59.234 [DEBUG] [Thread-27384] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:01:59.249 [DEBUG] [Thread-27384] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:01:59.249 [INFO] [Thread-27384] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:01:59.256 [DEBUG] [Thread-27384] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:01:59.256 [DEBUG] [Thread-27384] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:01:59.256 [DEBUG] [Thread-27384] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] client lang: <none>
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] server lang: <none>
2025-11-13T03:01:59.257 [DEBUG] [Thread-27384] [transport.py] [_log()] kex follows: False
2025-11-13T03:01:59.258 [DEBUG] [Thread-27384] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:01:59.258 [DEBUG] [Thread-27384] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:01:59.258 [DEBUG] [Thread-27384] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:01:59.258 [DEBUG] [Thread-27384] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:01:59.258 [DEBUG] [Thread-27384] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:01:59.258 [DEBUG] [Thread-27384] [transport.py] [_log()] Compression: none
2025-11-13T03:01:59.258 [DEBUG] [Thread-27384] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:01:59.320 [DEBUG] [Thread-27384] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:01:59.320 [DEBUG] [Thread-27384] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:01:59.320 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:01:59.321 [DEBUG] [Thread-27384] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:01:59.321 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:01:59.376 [DEBUG] [Thread-27384] [transport.py] [_log()] userauth is OK
2025-11-13T03:01:59.376 [DEBUG] [Thread-27384] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:01:59.377 [DEBUG] [Thread-27384] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:01:59.377 [DEBUG] [Thread-27384] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:01:59.377 [DEBUG] [Thread-27384] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:01:59.396 [INFO] [Thread-27384] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:01:59.396 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:01:59.397 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:02:00.237 [DEBUG] [Thread-27384] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:02:00.237 [DEBUG] [Thread-27384] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:02:00.285 [DEBUG] [Thread-27384] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:02:00.285 [DEBUG] [Thread-27384] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:02:00.294 [DEBUG] [Thread-27384] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:02:00.302 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:02:00.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-11-13T03:02:00.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-11-13T03:02:00.319 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:02:00.319 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:02:00.320 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:02:00.327 [DEBUG] [Thread-27384] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:02:12.889 [DEBUG] [Thread-27386 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:02:15.604 [DEBUG] [Thread-27387 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:02:27.930 [DEBUG] [Thread-27388 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:02:30.346 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:02:30.346 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:02:30.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-11-13T03:02:30.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 2, 27), 14.36, 37.48, 0.0, 20.93, 14.26, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:02:30.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:02:27
2025-11-13T03:02:31.105 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:02:31.250 [DEBUG] [Thread-27389] [transport.py] [_log()] starting thread (client mode): 0x1496b400
2025-11-13T03:02:31.251 [DEBUG] [Thread-27389] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:02:31.262 [DEBUG] [Thread-27389] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:02:31.263 [INFO] [Thread-27389] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:02:31.265 [DEBUG] [Thread-27389] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:02:31.265 [DEBUG] [Thread-27389] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:02:31.265 [DEBUG] [Thread-27389] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:02:31.265 [DEBUG] [Thread-27389] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] client lang: <none>
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] server lang: <none>
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] kex follows: False
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] Compression: none
2025-11-13T03:02:31.266 [DEBUG] [Thread-27389] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:02:31.281 [DEBUG] [Thread-27389] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:02:31.282 [DEBUG] [Thread-27389] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:02:31.282 [DEBUG] [Thread-27389] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:02:31.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:02:31.282 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:02:31.283 [DEBUG] [Thread-27389] [transport.py] [_log()] userauth is OK
2025-11-13T03:02:31.283 [DEBUG] [Thread-27389] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:02:31.283 [DEBUG] [Thread-27389] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:02:31.283 [DEBUG] [Thread-27389] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:02:31.283 [DEBUG] [Thread-27389] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:02:31.295 [INFO] [Thread-27389] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:02:31.295 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:02:31.931 [DEBUG] [Thread-27389] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:02:31.931 [DEBUG] [Thread-27389] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:02:31.932 [DEBUG] [Thread-27389] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:02:31.973 [DEBUG] [Thread-27389] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:02:31.973 [DEBUG] [Thread-27389] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:02:31.976 [DEBUG] [Thread-27389] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:02:31.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:02:31.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:02:31.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:02:31.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:02:31.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:02:32.000 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:02:32.000 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:02:32.000 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:02:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:02:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.043146 -999.00  +14.10   8.06     43   +1.80 1 1 1 1 1     0    0 14.38 110.78 ZNESW 4.0 8.1 198.6 15.6 14.3 -25.3 14.2 -24.4 14.0 -23.8 14.2 -24.7
2025-11-13T03:02:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:02:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:02:32.001 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.043146
2025-11-13T03:02:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:02:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:02:32.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:02:32.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:02:32.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:02:32.003 [DEBUG] [Thread-27389] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:02:32.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:02:27', tmtdew=14.36, humidity=37.48, cloud=0.0, wind=20.93, temperature=14.26, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:02:28', seeing=0.99, atlas_timestamp='2025-11-13T01:02:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T00:58:00')
2025-11-13T03:02:32.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:02:32.099 [DEBUG] [Thread-27392] [transport.py] [_log()] starting thread (client mode): 0x14983100
2025-11-13T03:02:32.099 [DEBUG] [Thread-27392] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:02:32.114 [DEBUG] [Thread-27392] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:02:32.114 [INFO] [Thread-27392] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:02:32.121 [DEBUG] [Thread-27392] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] client lang: <none>
2025-11-13T03:02:32.122 [DEBUG] [Thread-27392] [transport.py] [_log()] server lang: <none>
2025-11-13T03:02:32.123 [DEBUG] [Thread-27392] [transport.py] [_log()] kex follows: False
2025-11-13T03:02:32.123 [DEBUG] [Thread-27392] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:02:32.123 [DEBUG] [Thread-27392] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:02:32.123 [DEBUG] [Thread-27392] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:02:32.123 [DEBUG] [Thread-27392] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:02:32.123 [DEBUG] [Thread-27392] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:02:32.123 [DEBUG] [Thread-27392] [transport.py] [_log()] Compression: none
2025-11-13T03:02:32.123 [DEBUG] [Thread-27392] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:02:32.180 [DEBUG] [Thread-27392] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:02:32.181 [DEBUG] [Thread-27392] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:02:32.181 [DEBUG] [Thread-27392] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:02:32.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:02:32.182 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:02:32.237 [DEBUG] [Thread-27392] [transport.py] [_log()] userauth is OK
2025-11-13T03:02:32.237 [DEBUG] [Thread-27392] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:02:32.237 [DEBUG] [Thread-27392] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:02:32.237 [DEBUG] [Thread-27392] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:02:32.237 [DEBUG] [Thread-27392] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:02:32.256 [INFO] [Thread-27392] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:02:32.257 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:02:32.257 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:02:33.065 [DEBUG] [Thread-27392] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:02:33.065 [DEBUG] [Thread-27392] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:02:33.113 [DEBUG] [Thread-27392] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:02:33.114 [DEBUG] [Thread-27392] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:02:33.123 [DEBUG] [Thread-27392] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:02:33.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:02:33.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-11-13T03:02:33.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-11-13T03:02:33.150 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:02:33.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:02:33.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:02:33.159 [DEBUG] [Thread-27392] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:02:42.970 [DEBUG] [Thread-27394 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:02:57.464 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:02:57.467 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:02:58.020 [DEBUG] [Thread-27395 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:01.784 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:03.163 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:03:03.163 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:03:03.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-11-13T03:03:03.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 2, 59), 14.32, 37.45, 0.0, 18.97, 14.24, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:03:03.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:02:59
2025-11-13T03:03:03.926 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:03:04.074 [DEBUG] [Thread-27396] [transport.py] [_log()] starting thread (client mode): 0x1737d210
2025-11-13T03:03:04.074 [DEBUG] [Thread-27396] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:03:04.095 [DEBUG] [Thread-27396] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:03:04.095 [INFO] [Thread-27396] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] client lang: <none>
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] server lang: <none>
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] kex follows: False
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:03:04.098 [DEBUG] [Thread-27396] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:03:04.099 [DEBUG] [Thread-27396] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:03:04.099 [DEBUG] [Thread-27396] [transport.py] [_log()] Compression: none
2025-11-13T03:03:04.099 [DEBUG] [Thread-27396] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:03:04.121 [DEBUG] [Thread-27396] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:03:04.122 [DEBUG] [Thread-27396] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:03:04.122 [DEBUG] [Thread-27396] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:03:04.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:03:04.123 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:03:04.125 [DEBUG] [Thread-27396] [transport.py] [_log()] userauth is OK
2025-11-13T03:03:04.125 [DEBUG] [Thread-27396] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:03:04.125 [DEBUG] [Thread-27396] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:03:04.125 [DEBUG] [Thread-27396] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:03:04.125 [DEBUG] [Thread-27396] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:03:04.149 [INFO] [Thread-27396] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:03:04.150 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:03:04.811 [DEBUG] [Thread-27396] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:03:04.812 [DEBUG] [Thread-27396] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:03:04.812 [DEBUG] [Thread-27396] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:03:04.853 [DEBUG] [Thread-27396] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:03:04.853 [DEBUG] [Thread-27396] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:03:04.856 [DEBUG] [Thread-27396] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:03:04.868 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:03:04.868 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:03:04.870 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:03:04.872 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:03:04.878 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:03:04.879 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:03:04.880 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:03:04.880 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:03:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:03:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.043493 -999.00  +14.10   5.39     43   +2.00 1 1 1 1 1     0    0 14.68 115.54 ZNESW 7.3 5.4 194.5 18.2 14.3 -25.5 14.2 -24.4 13.9 -24.0 14.3 -24.7
2025-11-13T03:03:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:03:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:03:04.880 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.043493
2025-11-13T03:03:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:03:04.881 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:03:04.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:03:04.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:03:04.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:03:04.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:02:59', tmtdew=14.32, humidity=37.45, cloud=0.0, wind=18.97, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:03:00', seeing=1.11, atlas_timestamp='2025-11-13T01:02:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T00:58:00')
2025-11-13T03:03:04.882 [DEBUG] [Thread-27396] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:03:04.922 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:04.960 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:03:04.973 [DEBUG] [Thread-27399] [transport.py] [_log()] starting thread (client mode): 0x1737e7d0
2025-11-13T03:03:04.973 [DEBUG] [Thread-27399] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:03:04.988 [DEBUG] [Thread-27399] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:03:04.988 [INFO] [Thread-27399] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] client lang: <none>
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] server lang: <none>
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] kex follows: False
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:03:04.997 [DEBUG] [Thread-27399] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:03:04.998 [DEBUG] [Thread-27399] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:03:04.998 [DEBUG] [Thread-27399] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:03:04.998 [DEBUG] [Thread-27399] [transport.py] [_log()] Compression: none
2025-11-13T03:03:04.998 [DEBUG] [Thread-27399] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:03:05.053 [DEBUG] [Thread-27399] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:03:05.053 [DEBUG] [Thread-27399] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:03:05.054 [DEBUG] [Thread-27399] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:03:05.054 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:03:05.055 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:03:05.112 [DEBUG] [Thread-27399] [transport.py] [_log()] userauth is OK
2025-11-13T03:03:05.112 [DEBUG] [Thread-27399] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:03:05.112 [DEBUG] [Thread-27399] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:03:05.113 [DEBUG] [Thread-27399] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:03:05.113 [DEBUG] [Thread-27399] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:03:05.132 [INFO] [Thread-27399] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:03:05.132 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:03:05.133 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:03:05.977 [DEBUG] [Thread-27399] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:03:05.977 [DEBUG] [Thread-27399] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:03:06.026 [DEBUG] [Thread-27399] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:03:06.026 [DEBUG] [Thread-27399] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:03:06.035 [DEBUG] [Thread-27399] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:03:06.044 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:03:06.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:03:06.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:03:06.062 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:03:06.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:03:06.063 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:03:06.071 [DEBUG] [Thread-27399] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:03:13.056 [DEBUG] [Thread-27401 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:15.678 [DEBUG] [Thread-27402 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:28.106 [DEBUG] [Thread-27403 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:36.094 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:03:36.094 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:03:36.097 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:03:36.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 3, 31), 14.3, 37.48, 0.0, 21.28, 14.21, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:03:36.723 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:03:31
2025-11-13T03:03:36.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:03:36.990 [DEBUG] [Thread-27404] [transport.py] [_log()] starting thread (client mode): 0x11f03cd0
2025-11-13T03:03:36.990 [DEBUG] [Thread-27404] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:03:37.010 [DEBUG] [Thread-27404] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:03:37.010 [INFO] [Thread-27404] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:03:37.013 [DEBUG] [Thread-27404] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:03:37.013 [DEBUG] [Thread-27404] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:03:37.013 [DEBUG] [Thread-27404] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:03:37.013 [DEBUG] [Thread-27404] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:03:37.013 [DEBUG] [Thread-27404] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:03:37.013 [DEBUG] [Thread-27404] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] client lang: <none>
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] server lang: <none>
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] kex follows: False
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] Compression: none
2025-11-13T03:03:37.014 [DEBUG] [Thread-27404] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:03:37.025 [DEBUG] [Thread-27404] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:03:37.025 [DEBUG] [Thread-27404] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:03:37.026 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:03:37.027 [DEBUG] [Thread-27404] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:03:37.028 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:03:37.029 [DEBUG] [Thread-27404] [transport.py] [_log()] userauth is OK
2025-11-13T03:03:37.029 [DEBUG] [Thread-27404] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:03:37.030 [DEBUG] [Thread-27404] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:03:37.030 [DEBUG] [Thread-27404] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:03:37.030 [DEBUG] [Thread-27404] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:03:37.054 [INFO] [Thread-27404] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:03:37.055 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:03:37.601 [DEBUG] [Thread-27404] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:03:37.602 [DEBUG] [Thread-27404] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:03:37.602 [DEBUG] [Thread-27404] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:03:37.643 [DEBUG] [Thread-27404] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:03:37.643 [DEBUG] [Thread-27404] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:03:37.646 [DEBUG] [Thread-27404] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:03:37.659 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:03:37.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:03:37.661 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:03:37.663 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:03:37.670 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:03:37.672 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:03:37.672 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:03:37.672 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:03:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:03:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.043840 -999.00  +14.10  10.05     43   +1.80 1 1 1 1 1     0    0 14.76 110.28 ZNESW 9.6 10.1 251.0 22.1 14.3 -25.3 14.2 -24.4 13.9 -23.9 14.2 -24.7
2025-11-13T03:03:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:03:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:03:37.673 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.043840
2025-11-13T03:03:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:03:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:03:37.674 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:03:37.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:03:37.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:03:37.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:03:31', tmtdew=14.3, humidity=37.48, cloud=0.0, wind=21.28, temperature=14.21, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:03:32', seeing=1.17, atlas_timestamp='2025-11-13T01:03:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T01:01:00')
2025-11-13T03:03:37.676 [DEBUG] [Thread-27404] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:03:37.759 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:03:37.772 [DEBUG] [Thread-27407] [transport.py] [_log()] starting thread (client mode): 0x1493e1a0
2025-11-13T03:03:37.772 [DEBUG] [Thread-27407] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:03:37.792 [DEBUG] [Thread-27407] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:03:37.792 [INFO] [Thread-27407] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:03:37.800 [DEBUG] [Thread-27407] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:03:37.800 [DEBUG] [Thread-27407] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:03:37.800 [DEBUG] [Thread-27407] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] client lang: <none>
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] server lang: <none>
2025-11-13T03:03:37.801 [DEBUG] [Thread-27407] [transport.py] [_log()] kex follows: False
2025-11-13T03:03:37.802 [DEBUG] [Thread-27407] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:03:37.802 [DEBUG] [Thread-27407] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:03:37.802 [DEBUG] [Thread-27407] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:03:37.802 [DEBUG] [Thread-27407] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:03:37.802 [DEBUG] [Thread-27407] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:03:37.802 [DEBUG] [Thread-27407] [transport.py] [_log()] Compression: none
2025-11-13T03:03:37.802 [DEBUG] [Thread-27407] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:03:37.864 [DEBUG] [Thread-27407] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:03:37.865 [DEBUG] [Thread-27407] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:03:37.866 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:03:37.866 [DEBUG] [Thread-27407] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:03:37.867 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:03:37.921 [DEBUG] [Thread-27407] [transport.py] [_log()] userauth is OK
2025-11-13T03:03:37.921 [DEBUG] [Thread-27407] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:03:37.921 [DEBUG] [Thread-27407] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:03:37.921 [DEBUG] [Thread-27407] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:03:37.921 [DEBUG] [Thread-27407] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:03:37.941 [INFO] [Thread-27407] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:03:37.942 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:03:37.942 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:03:38.800 [DEBUG] [Thread-27407] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:03:38.800 [DEBUG] [Thread-27407] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:03:38.849 [DEBUG] [Thread-27407] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:03:38.849 [DEBUG] [Thread-27407] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:03:38.858 [DEBUG] [Thread-27407] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:03:38.867 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:03:38.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')
2025-11-13T03:03:38.877 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:03:38.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:03:38.886 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:03:38.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:03:38.895 [DEBUG] [Thread-27407] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:03:43.138 [DEBUG] [Thread-27409 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:57.668 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:57.669 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:03:58.201 [DEBUG] [Thread-27410 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:04:08.916 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:04:08.916 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:04:08.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-11-13T03:04:09.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 4, 3), 14.43, 37.15, 0.0, 20.89, 14.19, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:04:09.556 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:04:03
2025-11-13T03:04:09.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:04:09.834 [DEBUG] [Thread-27411] [transport.py] [_log()] starting thread (client mode): 0x14921900
2025-11-13T03:04:09.834 [DEBUG] [Thread-27411] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:04:09.853 [DEBUG] [Thread-27411] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:04:09.853 [INFO] [Thread-27411] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:04:09.856 [DEBUG] [Thread-27411] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:04:09.856 [DEBUG] [Thread-27411] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:04:09.856 [DEBUG] [Thread-27411] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:04:09.856 [DEBUG] [Thread-27411] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:04:09.856 [DEBUG] [Thread-27411] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:04:09.856 [DEBUG] [Thread-27411] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] client lang: <none>
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] server lang: <none>
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] kex follows: False
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] Compression: none
2025-11-13T03:04:09.857 [DEBUG] [Thread-27411] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:04:09.872 [DEBUG] [Thread-27411] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:04:09.872 [DEBUG] [Thread-27411] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:04:09.872 [DEBUG] [Thread-27411] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:04:09.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:04:09.872 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:04:09.873 [DEBUG] [Thread-27411] [transport.py] [_log()] userauth is OK
2025-11-13T03:04:09.873 [DEBUG] [Thread-27411] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:04:09.873 [DEBUG] [Thread-27411] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:04:09.873 [DEBUG] [Thread-27411] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:04:09.873 [DEBUG] [Thread-27411] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:04:09.882 [INFO] [Thread-27411] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:04:09.882 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:04:10.514 [DEBUG] [Thread-27411] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:04:10.514 [DEBUG] [Thread-27411] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:04:10.514 [DEBUG] [Thread-27411] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:04:10.555 [DEBUG] [Thread-27411] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:04:10.555 [DEBUG] [Thread-27411] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:04:10.557 [DEBUG] [Thread-27411] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:04:10.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:04:10.570 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:04:10.571 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:04:10.572 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:04:10.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:04:10.576 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:04:10.576 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:04:10.576 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:04:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:04:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.044187 -999.00  +14.10   5.41     43   +1.80 1 1 1 1 1     0    0 14.77 108.25 ZNESW 8.1 5.4 245.1 11.9 14.3 -25.2 14.2 -24.4 13.9 -23.8 14.2 -24.8
2025-11-13T03:04:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:04:10.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:04:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.044187
2025-11-13T03:04:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:04:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:04:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:04:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:04:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:04:10.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:04:03', tmtdew=14.43, humidity=37.15, cloud=0.0, wind=20.89, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:04:04', seeing=1.17, atlas_timestamp='2025-11-13T01:03:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T01:01:00')
2025-11-13T03:04:10.577 [DEBUG] [Thread-27411] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:04:10.653 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:04:10.664 [DEBUG] [Thread-27414] [transport.py] [_log()] starting thread (client mode): 0x14981360
2025-11-13T03:04:10.664 [DEBUG] [Thread-27414] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:04:10.679 [DEBUG] [Thread-27414] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:04:10.679 [INFO] [Thread-27414] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] client lang: <none>
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] server lang: <none>
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] kex follows: False
2025-11-13T03:04:10.686 [DEBUG] [Thread-27414] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:04:10.687 [DEBUG] [Thread-27414] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:04:10.687 [DEBUG] [Thread-27414] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:04:10.687 [DEBUG] [Thread-27414] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:04:10.687 [DEBUG] [Thread-27414] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:04:10.687 [DEBUG] [Thread-27414] [transport.py] [_log()] Compression: none
2025-11-13T03:04:10.687 [DEBUG] [Thread-27414] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:04:10.743 [DEBUG] [Thread-27414] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:04:10.743 [DEBUG] [Thread-27414] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:04:10.743 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:04:10.743 [DEBUG] [Thread-27414] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:04:10.744 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:04:10.800 [DEBUG] [Thread-27414] [transport.py] [_log()] userauth is OK
2025-11-13T03:04:10.800 [DEBUG] [Thread-27414] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:04:10.801 [DEBUG] [Thread-27414] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:04:10.801 [DEBUG] [Thread-27414] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:04:10.801 [DEBUG] [Thread-27414] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:04:10.820 [INFO] [Thread-27414] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:04:10.820 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:04:10.821 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:04:11.653 [DEBUG] [Thread-27414] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:04:11.653 [DEBUG] [Thread-27414] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:04:11.701 [DEBUG] [Thread-27414] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:04:11.701 [DEBUG] [Thread-27414] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:04:11.710 [DEBUG] [Thread-27414] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:04:11.718 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:04:11.719 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:04:11.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-11-13T03:04:11.736 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:04:11.736 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:04:11.736 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:04:11.744 [DEBUG] [Thread-27414] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:04:13.235 [DEBUG] [Thread-27416 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:04:15.736 [DEBUG] [Thread-27417 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:04:28.286 [DEBUG] [Thread-27418 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:04:41.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:04:41.767 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:04:41.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-11-13T03:04:42.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 4, 35), 14.5, 37.23, 0.0, 20.91, 14.24, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:04:42.397 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:04:35
2025-11-13T03:04:42.519 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:04:42.667 [DEBUG] [Thread-27419] [transport.py] [_log()] starting thread (client mode): 0x173471c0
2025-11-13T03:04:42.667 [DEBUG] [Thread-27419] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:04:42.687 [DEBUG] [Thread-27419] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:04:42.687 [INFO] [Thread-27419] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:04:42.691 [DEBUG] [Thread-27419] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] client lang: <none>
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] server lang: <none>
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] kex follows: False
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] Compression: none
2025-11-13T03:04:42.692 [DEBUG] [Thread-27419] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:04:42.710 [DEBUG] [Thread-27419] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:04:42.710 [DEBUG] [Thread-27419] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:04:42.711 [DEBUG] [Thread-27419] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:04:42.711 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:04:42.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:04:42.753 [DEBUG] [Thread-27419] [transport.py] [_log()] userauth is OK
2025-11-13T03:04:42.753 [DEBUG] [Thread-27419] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:04:42.753 [DEBUG] [Thread-27419] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:04:42.753 [DEBUG] [Thread-27419] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:04:42.753 [DEBUG] [Thread-27419] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:04:42.773 [INFO] [Thread-27419] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:04:42.774 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:04:43.320 [DEBUG] [Thread-27421 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:04:43.386 [DEBUG] [Thread-27419] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:04:43.386 [DEBUG] [Thread-27419] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:04:43.387 [DEBUG] [Thread-27419] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:04:43.426 [DEBUG] [Thread-27419] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:04:43.427 [DEBUG] [Thread-27419] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:04:43.430 [DEBUG] [Thread-27419] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:04:43.441 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:04:43.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:04:43.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:04:43.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:04:43.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:04:43.455 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:04:43.455 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:04:43.455 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:04:43.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:04:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.044535 -999.00  +14.10  10.20     43   +1.80 1 1 1 1 1     0    0 14.90 111.66 ZNESW 8.9 10.2 194.0 15.9 14.3 -25.4 14.2 -24.3 13.9 -24.1 14.2 -24.7
2025-11-13T03:04:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:04:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:04:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.044535
2025-11-13T03:04:43.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:04:43.457 [DEBUG] [Thread-27419] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:04:43.457 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:04:43.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:04:43.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:04:43.458 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:04:43.459 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:04:35', tmtdew=14.5, humidity=37.23, cloud=0.0, wind=20.91, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:04:36', seeing=1.06, atlas_timestamp='2025-11-13T01:04:07.824', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T01:01:00')
2025-11-13T03:04:43.544 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:04:43.555 [DEBUG] [Thread-27423] [transport.py] [_log()] starting thread (client mode): 0x149f3c40
2025-11-13T03:04:43.555 [DEBUG] [Thread-27423] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:04:43.569 [DEBUG] [Thread-27423] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:04:43.569 [INFO] [Thread-27423] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] client lang: <none>
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] server lang: <none>
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] kex follows: False
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] Compression: none
2025-11-13T03:04:43.577 [DEBUG] [Thread-27423] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:04:43.634 [DEBUG] [Thread-27423] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:04:43.635 [DEBUG] [Thread-27423] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:04:43.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:04:43.635 [DEBUG] [Thread-27423] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:04:43.635 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:04:43.692 [DEBUG] [Thread-27423] [transport.py] [_log()] userauth is OK
2025-11-13T03:04:43.692 [DEBUG] [Thread-27423] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:04:43.692 [DEBUG] [Thread-27423] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:04:43.692 [DEBUG] [Thread-27423] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:04:43.692 [DEBUG] [Thread-27423] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:04:43.706 [INFO] [Thread-27423] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:04:43.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:04:43.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:04:44.545 [DEBUG] [Thread-27423] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:04:44.545 [DEBUG] [Thread-27423] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:04:44.593 [DEBUG] [Thread-27423] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:04:44.593 [DEBUG] [Thread-27423] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:04:44.601 [DEBUG] [Thread-27423] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:04:44.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:04:44.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-11-13T03:04: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') -> 00000000
2025-11-13T03:04:44.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:04:44.625 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:04:44.626 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:04:44.633 [DEBUG] [Thread-27423] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:04:57.874 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:04:57.875 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:04:58.354 [DEBUG] [Thread-27425 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:05:13.417 [DEBUG] [Thread-27426 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:05:14.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:05:14.641 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:05:14.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-11-13T03:05:15.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 5, 7), 14.52, 37.18, 0.0, 20.06, 14.24, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:05:15.265 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:05:07
2025-11-13T03:05:15.388 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:05:15.535 [DEBUG] [Thread-27427] [transport.py] [_log()] starting thread (client mode): 0x1493e7a0
2025-11-13T03:05:15.535 [DEBUG] [Thread-27427] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:05:15.555 [DEBUG] [Thread-27427] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:05:15.555 [INFO] [Thread-27427] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:05:15.558 [DEBUG] [Thread-27427] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:05:15.558 [DEBUG] [Thread-27427] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] client lang: <none>
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] server lang: <none>
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] kex follows: False
2025-11-13T03:05:15.559 [DEBUG] [Thread-27427] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:05:15.560 [DEBUG] [Thread-27427] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:05:15.560 [DEBUG] [Thread-27427] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:05:15.560 [DEBUG] [Thread-27427] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:05:15.560 [DEBUG] [Thread-27427] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:05:15.560 [DEBUG] [Thread-27427] [transport.py] [_log()] Compression: none
2025-11-13T03:05:15.560 [DEBUG] [Thread-27427] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:05:15.578 [DEBUG] [Thread-27427] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:05:15.579 [DEBUG] [Thread-27427] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:05:15.579 [DEBUG] [Thread-27427] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:05:15.579 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:05:15.580 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:05:15.621 [DEBUG] [Thread-27427] [transport.py] [_log()] userauth is OK
2025-11-13T03:05:15.621 [DEBUG] [Thread-27427] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:05:15.621 [DEBUG] [Thread-27427] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:05:15.621 [DEBUG] [Thread-27427] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:05:15.621 [DEBUG] [Thread-27427] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:05:15.652 [INFO] [Thread-27427] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:05:15.653 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:05:15.793 [DEBUG] [Thread-27429 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:05:16.288 [DEBUG] [Thread-27427] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:05:16.289 [DEBUG] [Thread-27427] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:05:16.289 [DEBUG] [Thread-27427] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:05:16.330 [DEBUG] [Thread-27427] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:05:16.330 [DEBUG] [Thread-27427] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:05:16.333 [DEBUG] [Thread-27427] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:05:16.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:05:16.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:05:16.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:05:16.350 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:05:16.356 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:05:16.358 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:05:16.358 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:05:16.358 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:05:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:05:16.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.044882 -999.00  +14.00   9.43     43   +1.70 1 1 1 1 1     0    0 14.79 110.98 ZNESW 13.6 9.4 227.2 16.5 14.3 -25.3 14.2 -24.3 13.9 -24.0 14.2 -24.8
2025-11-13T03:05:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:05:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:05:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.044882
2025-11-13T03:05:16.359 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:05:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:05:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:05:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:05:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:05:16.360 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:05:07', tmtdew=14.52, humidity=37.18, cloud=0.0, wind=20.06, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:05:08', seeing=1.06, atlas_timestamp='2025-11-13T01:04:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T01:01:00')
2025-11-13T03:05:16.360 [DEBUG] [Thread-27427] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:05:16.445 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:05:16.456 [DEBUG] [Thread-27431] [transport.py] [_log()] starting thread (client mode): 0x173459f0
2025-11-13T03:05:16.456 [DEBUG] [Thread-27431] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:05:16.471 [DEBUG] [Thread-27431] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:05:16.471 [INFO] [Thread-27431] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:05:16.479 [DEBUG] [Thread-27431] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:05:16.479 [DEBUG] [Thread-27431] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:05:16.479 [DEBUG] [Thread-27431] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:05:16.479 [DEBUG] [Thread-27431] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] client lang: <none>
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] server lang: <none>
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] kex follows: False
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] Compression: none
2025-11-13T03:05:16.480 [DEBUG] [Thread-27431] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:05:16.537 [DEBUG] [Thread-27431] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:05:16.537 [DEBUG] [Thread-27431] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:05:16.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:05:16.538 [DEBUG] [Thread-27431] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:05:16.539 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:05:16.593 [DEBUG] [Thread-27431] [transport.py] [_log()] userauth is OK
2025-11-13T03:05:16.593 [DEBUG] [Thread-27431] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:05:16.593 [DEBUG] [Thread-27431] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:05:16.593 [DEBUG] [Thread-27431] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:05:16.594 [DEBUG] [Thread-27431] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:05:16.612 [INFO] [Thread-27431] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:05:16.613 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:05:16.614 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:05:17.451 [DEBUG] [Thread-27431] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:05:17.452 [DEBUG] [Thread-27431] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:05:17.500 [DEBUG] [Thread-27431] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:05:17.500 [DEBUG] [Thread-27431] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:05:17.510 [DEBUG] [Thread-27431] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:05:17.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:05:17.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-11-13T03:05: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-11-13T03:05:17.539 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:05:17.540 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:05:17.540 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:05:17.549 [DEBUG] [Thread-27431] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:05:28.453 [DEBUG] [Thread-27433 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:05:43.512 [DEBUG] [Thread-27434 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:05:47.570 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:05:47.570 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:05:47.573 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:05:48.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 5, 39), 14.55, 36.57, 0.0, 21.56, 14.11, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:05:48.204 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:05:39
2025-11-13T03:05:48.325 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:05:48.470 [DEBUG] [Thread-27435] [transport.py] [_log()] starting thread (client mode): 0x17345ba0
2025-11-13T03:05:48.470 [DEBUG] [Thread-27435] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:05:48.481 [DEBUG] [Thread-27435] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:05:48.481 [INFO] [Thread-27435] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] client lang: <none>
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] server lang: <none>
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] kex follows: False
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:05:48.484 [DEBUG] [Thread-27435] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:05:48.485 [DEBUG] [Thread-27435] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:05:48.485 [DEBUG] [Thread-27435] [transport.py] [_log()] Compression: none
2025-11-13T03:05:48.485 [DEBUG] [Thread-27435] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:05:48.499 [DEBUG] [Thread-27435] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:05:48.499 [DEBUG] [Thread-27435] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:05:48.500 [DEBUG] [Thread-27435] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:05:48.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:05:48.500 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:05:48.501 [DEBUG] [Thread-27435] [transport.py] [_log()] userauth is OK
2025-11-13T03:05:48.501 [DEBUG] [Thread-27435] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:05:48.501 [DEBUG] [Thread-27435] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:05:48.501 [DEBUG] [Thread-27435] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:05:48.501 [DEBUG] [Thread-27435] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:05:48.516 [INFO] [Thread-27435] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:05:48.516 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:05:49.192 [DEBUG] [Thread-27435] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:05:49.193 [DEBUG] [Thread-27435] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:05:49.193 [DEBUG] [Thread-27435] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:05:49.234 [DEBUG] [Thread-27435] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:05:49.234 [DEBUG] [Thread-27435] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:05:49.238 [DEBUG] [Thread-27435] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:05:49.249 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:05:49.250 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:05:49.251 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:05:49.253 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:05:49.258 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:05:49.260 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:05:49.261 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:05:49.261 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:05:49.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:05:49.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.045576 -999.00  +14.00   7.16     43   +1.70 1 1 1 1 1     0    0 14.70 105.87 ZNESW 8.4 7.2 217.6 19.4 14.2 -25.2 14.1 -24.2 13.9 -23.9 14.2 -24.7
2025-11-13T03:05:49.261 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:05:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:05:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.045576
2025-11-13T03:05:49.262 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:05:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:05:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:05:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:05:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:05:49.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:05:39', tmtdew=14.55, humidity=36.57, cloud=0.0, wind=21.56, temperature=14.11, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:05:40', seeing=1.0, atlas_timestamp='2025-11-13T01:05:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T01:01:00')
2025-11-13T03:05:49.263 [DEBUG] [Thread-27435] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:05:49.347 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:05:49.358 [DEBUG] [Thread-27438] [transport.py] [_log()] starting thread (client mode): 0x19ddb790
2025-11-13T03:05:49.358 [DEBUG] [Thread-27438] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:05:49.373 [DEBUG] [Thread-27438] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:05:49.374 [INFO] [Thread-27438] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:05:49.381 [DEBUG] [Thread-27438] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] client lang: <none>
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] server lang: <none>
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] kex follows: False
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] Compression: none
2025-11-13T03:05:49.382 [DEBUG] [Thread-27438] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:05:49.447 [DEBUG] [Thread-27438] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:05:49.447 [DEBUG] [Thread-27438] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:05:49.448 [DEBUG] [Thread-27438] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:05:49.448 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:05:49.449 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:05:49.505 [DEBUG] [Thread-27438] [transport.py] [_log()] userauth is OK
2025-11-13T03:05:49.505 [DEBUG] [Thread-27438] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:05:49.505 [DEBUG] [Thread-27438] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:05:49.505 [DEBUG] [Thread-27438] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:05:49.506 [DEBUG] [Thread-27438] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:05:49.526 [INFO] [Thread-27438] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:05:49.527 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:05:49.527 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:05:50.374 [DEBUG] [Thread-27438] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:05:50.374 [DEBUG] [Thread-27438] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:05:50.422 [DEBUG] [Thread-27438] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:05:50.422 [DEBUG] [Thread-27438] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:05:50.431 [DEBUG] [Thread-27438] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:05:50.440 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:05:50.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-11-13T03:05:50.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-11-13T03:05:50.459 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:05:50.459 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:05:50.460 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:05:50.468 [DEBUG] [Thread-27438] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:05:58.077 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:05:58.078 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:05:58.550 [DEBUG] [Thread-27440 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:06:13.606 [DEBUG] [Thread-27441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:06:15.862 [DEBUG] [Thread-27442 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:06:20.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:06:20.491 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:06:20.493 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:06:21.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 6, 11), 14.56, 36.55, 0.0, 21.81, 14.14, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:06:21.122 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:06:11
2025-11-13T03:06:21.245 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:06:21.390 [DEBUG] [Thread-27443] [transport.py] [_log()] starting thread (client mode): 0x14944b80
2025-11-13T03:06:21.390 [DEBUG] [Thread-27443] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:06:21.412 [DEBUG] [Thread-27443] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:06:21.412 [INFO] [Thread-27443] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:06:21.415 [DEBUG] [Thread-27443] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:06:21.415 [DEBUG] [Thread-27443] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:06:21.415 [DEBUG] [Thread-27443] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] client lang: <none>
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] server lang: <none>
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] kex follows: False
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] Compression: none
2025-11-13T03:06:21.416 [DEBUG] [Thread-27443] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:06:21.433 [DEBUG] [Thread-27443] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:06:21.433 [DEBUG] [Thread-27443] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:06:21.434 [DEBUG] [Thread-27443] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:06:21.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:06:21.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:06:21.436 [DEBUG] [Thread-27443] [transport.py] [_log()] userauth is OK
2025-11-13T03:06:21.436 [DEBUG] [Thread-27443] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:06:21.436 [DEBUG] [Thread-27443] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:06:21.436 [DEBUG] [Thread-27443] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:06:21.436 [DEBUG] [Thread-27443] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:06:21.460 [INFO] [Thread-27443] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:06:21.460 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:06:22.054 [DEBUG] [Thread-27443] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:06:22.054 [DEBUG] [Thread-27443] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:06:22.054 [DEBUG] [Thread-27443] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:06:22.095 [DEBUG] [Thread-27443] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:06:22.095 [DEBUG] [Thread-27443] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:06:22.098 [DEBUG] [Thread-27443] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:06:22.111 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:06:22.112 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:06:22.113 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:06:22.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:06:22.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:06:22.124 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:06:22.124 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:06:22.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:06:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:06:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.045923 -999.00  +14.00   5.32     42   +1.50 1 1 1 1 1     0    0 14.60 106.53 ZNESW 8.2 5.3 220.7 17.0 14.2 -25.2 14.1 -24.3 13.9 -23.8 14.2 -24.6
2025-11-13T03:06:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:06:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:06:22.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.045923
2025-11-13T03:06:22.126 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:06:22.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:06:22.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:06:22.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:06:22.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:06:22.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:06:11', tmtdew=14.56, humidity=36.55, cloud=0.0, wind=21.81, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:06:12', seeing=1.0, atlas_timestamp='2025-11-13T01:06:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, -0.01574999999999882, 0.05275000000000141, 0.014999999999998792, 0.020500000000000185, 0.04225000000000101, -0.04499999999999993, -0.009249999999999758, 0.026499999999998636, -0.006000000000000227, 0.06325000000000003, 0.045999999999999375, 0.08449999999999847, 0.06925000000000026, -0.06400000000000006, -0.031000000000000583, 0.004249999999998977, 0.03200000000000003, 0.051000000000000156, 0.08174999999999955, 0.03149999999999764, 0.01774999999999949, -0.00274999999999892, -0.013249999999999318, 0.0029999999999983373, 0.10350000000000037, 0.0677500000000002, 0.16699999999999982, 0.15300000000000047, 0.10150000000000148, 0.03950000000000031, 0.027000000000001023, -0.015249999999999986], zp_timestamp='2025-11-13T01:01:00')
2025-11-13T03:06:22.127 [DEBUG] [Thread-27443] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:06:22.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:06:22.225 [DEBUG] [Thread-27446] [transport.py] [_log()] starting thread (client mode): 0x1496b610
2025-11-13T03:06:22.225 [DEBUG] [Thread-27446] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:06:22.240 [DEBUG] [Thread-27446] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:06:22.240 [INFO] [Thread-27446] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:06:22.248 [DEBUG] [Thread-27446] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:06:22.248 [DEBUG] [Thread-27446] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:06:22.248 [DEBUG] [Thread-27446] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:06:22.248 [DEBUG] [Thread-27446] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:06:22.248 [DEBUG] [Thread-27446] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:06:22.248 [DEBUG] [Thread-27446] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:06:22.248 [DEBUG] [Thread-27446] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:06:22.249 [DEBUG] [Thread-27446] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:06:22.249 [DEBUG] [Thread-27446] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:06:22.249 [DEBUG] [Thread-27446] [transport.py] [_log()] client lang: <none>
2025-11-13T03:06:22.249 [DEBUG] [Thread-27446] [transport.py] [_log()] server lang: <none>
2025-11-13T03:06:22.249 [DEBUG] [Thread-27446] [transport.py] [_log()] kex follows: False
2025-11-13T03:06:22.249 [DEBUG] [Thread-27446] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:06:22.249 [DEBUG] [Thread-27446] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:06:22.249 [DEBUG] [Thread-27446] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:06:22.250 [DEBUG] [Thread-27446] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:06:22.250 [DEBUG] [Thread-27446] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:06:22.250 [DEBUG] [Thread-27446] [transport.py] [_log()] Compression: none
2025-11-13T03:06:22.250 [DEBUG] [Thread-27446] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:06:22.305 [DEBUG] [Thread-27446] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:06:22.306 [DEBUG] [Thread-27446] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:06:22.306 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:06:22.307 [DEBUG] [Thread-27446] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:06:22.308 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:06:22.365 [DEBUG] [Thread-27446] [transport.py] [_log()] userauth is OK
2025-11-13T03:06:22.365 [DEBUG] [Thread-27446] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:06:22.365 [DEBUG] [Thread-27446] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:06:22.365 [DEBUG] [Thread-27446] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:06:22.365 [DEBUG] [Thread-27446] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:06:22.390 [INFO] [Thread-27446] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:06:22.390 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:06:22.391 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:06:23.223 [DEBUG] [Thread-27446] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:06:23.223 [DEBUG] [Thread-27446] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:06:23.271 [DEBUG] [Thread-27446] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:06:23.271 [DEBUG] [Thread-27446] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:06:23.280 [DEBUG] [Thread-27446] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:06:23.290 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:06:23.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:06:23.302 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:06:23.313 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:06:23.314 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:06:23.314 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:06:23.322 [DEBUG] [Thread-27446] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:06:28.638 [DEBUG] [Thread-27448 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:06:43.687 [DEBUG] [Thread-27449 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:06:53.321 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:06:53.322 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:06:53.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-11-13T03:06:53.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 6, 43), 14.7, 36.1, 0.0, 20.26, 14.19, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:06:53.961 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:06:43
2025-11-13T03:06:54.084 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:06:54.229 [DEBUG] [Thread-27450] [transport.py] [_log()] starting thread (client mode): 0x19dd9600
2025-11-13T03:06:54.229 [DEBUG] [Thread-27450] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:06:54.249 [DEBUG] [Thread-27450] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:06:54.249 [INFO] [Thread-27450] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] client lang: <none>
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] server lang: <none>
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] kex follows: False
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] Compression: none
2025-11-13T03:06:54.251 [DEBUG] [Thread-27450] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:06:54.262 [DEBUG] [Thread-27450] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:06:54.262 [DEBUG] [Thread-27450] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:06:54.262 [DEBUG] [Thread-27450] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:06:54.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:06:54.263 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:06:54.264 [DEBUG] [Thread-27450] [transport.py] [_log()] userauth is OK
2025-11-13T03:06:54.264 [DEBUG] [Thread-27450] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:06:54.264 [DEBUG] [Thread-27450] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:06:54.264 [DEBUG] [Thread-27450] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:06:54.264 [DEBUG] [Thread-27450] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:06:54.277 [INFO] [Thread-27450] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:06:54.278 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:06:54.884 [DEBUG] [Thread-27450] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:06:54.885 [DEBUG] [Thread-27450] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:06:54.885 [DEBUG] [Thread-27450] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:06:54.925 [DEBUG] [Thread-27450] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:06:54.925 [DEBUG] [Thread-27450] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:06:54.928 [DEBUG] [Thread-27450] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:06:54.941 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:06:54.942 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:06:54.943 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:06:54.945 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:06:54.950 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:06:54.952 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:06:54.952 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:06:54.952 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:06:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:06:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.046271 -999.00  +14.10  10.62     42   +1.40 1 1 1 1 1     0    0 14.75 113.45 ZNESW 4.0 10.6 232.0 18.7 14.2 -25.2 14.1 -24.3 13.9 -23.7 14.2 -24.6
2025-11-13T03:06:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:06:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:06:54.953 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.046271
2025-11-13T03:06:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:06:54.954 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:06:54.954 [DEBUG] [Thread-27450] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:06:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:06:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:06:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:06:54.955 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:06:43', tmtdew=14.7, humidity=36.1, cloud=0.0, wind=20.26, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:06:44', seeing=0.78, atlas_timestamp='2025-11-13T01:06:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:05:00')
2025-11-13T03:06:55.038 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:06:55.050 [DEBUG] [Thread-27453] [transport.py] [_log()] starting thread (client mode): 0x149f2b60
2025-11-13T03:06:55.050 [DEBUG] [Thread-27453] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:06:55.064 [DEBUG] [Thread-27453] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:06:55.065 [INFO] [Thread-27453] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:06:55.072 [DEBUG] [Thread-27453] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] client lang: <none>
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] server lang: <none>
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] kex follows: False
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] Compression: none
2025-11-13T03:06:55.073 [DEBUG] [Thread-27453] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:06:55.137 [DEBUG] [Thread-27453] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:06:55.137 [DEBUG] [Thread-27453] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:06:55.138 [DEBUG] [Thread-27453] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:06:55.138 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:06:55.139 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:06:55.193 [DEBUG] [Thread-27453] [transport.py] [_log()] userauth is OK
2025-11-13T03:06:55.193 [DEBUG] [Thread-27453] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:06:55.193 [DEBUG] [Thread-27453] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:06:55.193 [DEBUG] [Thread-27453] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:06:55.193 [DEBUG] [Thread-27453] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:06:55.212 [INFO] [Thread-27453] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:06:55.212 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:06:55.213 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:06:56.028 [DEBUG] [Thread-27453] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:06:56.028 [DEBUG] [Thread-27453] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:06:56.077 [DEBUG] [Thread-27453] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:06:56.077 [DEBUG] [Thread-27453] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:06:56.087 [DEBUG] [Thread-27453] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:06:56.097 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:06:56.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-11-13T03:06:56.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-11-13T03:06:56.115 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:06:56.115 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:06:56.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:06:56.123 [DEBUG] [Thread-27453] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:06:58.281 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:06:58.282 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:06:58.719 [DEBUG] [Thread-27455 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:07:13.775 [DEBUG] [Thread-27456 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:07:15.918 [DEBUG] [Thread-27457 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:07:26.125 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:07:26.126 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:07:26.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-11-13T03:07:26.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 7, 15), 14.7, 36.1, 0.0, 21.26, 14.19, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:07:26.751 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:07:15
2025-11-13T03:07:26.874 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:07:27.020 [DEBUG] [Thread-27458] [transport.py] [_log()] starting thread (client mode): 0x14980970
2025-11-13T03:07:27.020 [DEBUG] [Thread-27458] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:07:27.041 [DEBUG] [Thread-27458] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:07:27.042 [INFO] [Thread-27458] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:07:27.045 [DEBUG] [Thread-27458] [transport.py] [_log()] client lang: <none>
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] server lang: <none>
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] kex follows: False
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] Compression: none
2025-11-13T03:07:27.046 [DEBUG] [Thread-27458] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:07:27.066 [DEBUG] [Thread-27458] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:07:27.067 [DEBUG] [Thread-27458] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:07:27.067 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:07:27.068 [DEBUG] [Thread-27458] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:07:27.069 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:07:27.070 [DEBUG] [Thread-27458] [transport.py] [_log()] userauth is OK
2025-11-13T03:07:27.070 [DEBUG] [Thread-27458] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:07:27.071 [DEBUG] [Thread-27458] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:07:27.071 [DEBUG] [Thread-27458] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:07:27.071 [DEBUG] [Thread-27458] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:07:27.095 [INFO] [Thread-27458] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:07:27.096 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:07:27.723 [DEBUG] [Thread-27458] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:07:27.723 [DEBUG] [Thread-27458] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:07:27.723 [DEBUG] [Thread-27458] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:07:27.763 [DEBUG] [Thread-27458] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:07:27.764 [DEBUG] [Thread-27458] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:07:27.767 [DEBUG] [Thread-27458] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:07:27.779 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:07:27.780 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:07:27.782 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:07:27.784 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:07:27.790 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:07:27.793 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:07:27.793 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:07:27.793 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:07:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:07:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.046271 -999.00  +14.10  10.62     42   +1.40 1 1 1 1 1     0    0 14.75 113.45 ZNESW 4.0 10.6 232.0 18.7 14.2 -25.2 14.1 -24.3 13.9 -23.7 14.2 -24.6
2025-11-13T03:07:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:07:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:07:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.046271
2025-11-13T03:07:27.794 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:07:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:07:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:07:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:07:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:07:27.795 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:07:15', tmtdew=14.7, humidity=36.1, cloud=0.0, wind=21.26, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:07:16', seeing=0.78, atlas_timestamp='2025-11-13T01:06:37.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:05:00')
2025-11-13T03:07:27.796 [DEBUG] [Thread-27458] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:07:27.883 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:07:27.896 [DEBUG] [Thread-27461] [transport.py] [_log()] starting thread (client mode): 0x14944b80
2025-11-13T03:07:27.896 [DEBUG] [Thread-27461] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:07:27.914 [DEBUG] [Thread-27461] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:07:27.914 [INFO] [Thread-27461] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:07:27.922 [DEBUG] [Thread-27461] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:07:27.922 [DEBUG] [Thread-27461] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:07:27.922 [DEBUG] [Thread-27461] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] client lang: <none>
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] server lang: <none>
2025-11-13T03:07:27.923 [DEBUG] [Thread-27461] [transport.py] [_log()] kex follows: False
2025-11-13T03:07:27.924 [DEBUG] [Thread-27461] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:07:27.924 [DEBUG] [Thread-27461] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:07:27.924 [DEBUG] [Thread-27461] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:07:27.924 [DEBUG] [Thread-27461] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:07:27.924 [DEBUG] [Thread-27461] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:07:27.924 [DEBUG] [Thread-27461] [transport.py] [_log()] Compression: none
2025-11-13T03:07:27.924 [DEBUG] [Thread-27461] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:07:27.985 [DEBUG] [Thread-27461] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:07:27.986 [DEBUG] [Thread-27461] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:07:27.987 [DEBUG] [Thread-27461] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:07:27.987 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:07:27.988 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:07:28.044 [DEBUG] [Thread-27461] [transport.py] [_log()] userauth is OK
2025-11-13T03:07:28.045 [DEBUG] [Thread-27461] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:07:28.045 [DEBUG] [Thread-27461] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:07:28.045 [DEBUG] [Thread-27461] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:07:28.045 [DEBUG] [Thread-27461] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:07:28.065 [INFO] [Thread-27461] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:07:28.066 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:07:28.066 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:07:28.806 [DEBUG] [Thread-27463 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:07:28.894 [DEBUG] [Thread-27461] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:07:28.895 [DEBUG] [Thread-27461] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:07:28.942 [DEBUG] [Thread-27461] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:07:28.942 [DEBUG] [Thread-27461] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:07:28.951 [DEBUG] [Thread-27461] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:07:28.960 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:07:28.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-11-13T03:07:28.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-11-13T03:07:28.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:07:28.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:07:28.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:07:28.986 [DEBUG] [Thread-27461] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:07:43.861 [DEBUG] [Thread-27464 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:07:58.486 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:07:58.486 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:07:58.893 [DEBUG] [Thread-27465 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:07:59.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:07:59.007 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:07:59.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-11-13T03:07:59.641 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 7, 47), 14.83, 35.87, 0.0, 21.21, 14.16, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:07:59.642 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:07:47
2025-11-13T03:07:59.774 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:07:59.925 [DEBUG] [Thread-27466] [transport.py] [_log()] starting thread (client mode): 0x14981c90
2025-11-13T03:07:59.926 [DEBUG] [Thread-27466] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:07:59.949 [DEBUG] [Thread-27466] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:07:59.949 [INFO] [Thread-27466] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:07:59.952 [DEBUG] [Thread-27466] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] client lang: <none>
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] server lang: <none>
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] kex follows: False
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] Compression: none
2025-11-13T03:07:59.953 [DEBUG] [Thread-27466] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:07:59.970 [DEBUG] [Thread-27466] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:07:59.970 [DEBUG] [Thread-27466] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:07:59.970 [DEBUG] [Thread-27466] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:07:59.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:07:59.970 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:07:59.971 [DEBUG] [Thread-27466] [transport.py] [_log()] userauth is OK
2025-11-13T03:07:59.971 [DEBUG] [Thread-27466] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:07:59.971 [DEBUG] [Thread-27466] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:07:59.971 [DEBUG] [Thread-27466] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:07:59.971 [DEBUG] [Thread-27466] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:07:59.986 [INFO] [Thread-27466] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:07:59.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:08:00.630 [DEBUG] [Thread-27466] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:08:00.630 [DEBUG] [Thread-27466] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:08:00.630 [DEBUG] [Thread-27466] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:08:00.671 [DEBUG] [Thread-27466] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:08:00.671 [DEBUG] [Thread-27466] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:08:00.674 [DEBUG] [Thread-27466] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:08:00.687 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:08:00.687 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:08:00.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:08:00.688 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:08:00.690 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:08:00.691 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:08:00.691 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:08:00.691 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:08:00.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:08:00.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.046618 -999.00  +14.00   8.82     42   +1.40 1 1 1 1 1     0    0 15.05 122.25 ZNESW 9.1 8.8 212.6 18.7 14.2 -25.1 14.1 -24.2 13.9 -23.9 14.2 -24.6
2025-11-13T03:08:00.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:08:00.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:08:00.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.046618
2025-11-13T03:08:00.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:08:00.691 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:08:00.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:08:00.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:08:00.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:08:00.692 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:07:47', tmtdew=14.83, humidity=35.87, cloud=0.0, wind=21.21, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:07:48', seeing=0.88, atlas_timestamp='2025-11-13T01:07:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:05:00')
2025-11-13T03:08:00.692 [DEBUG] [Thread-27466] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:08:00.765 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:08:00.776 [DEBUG] [Thread-27469] [transport.py] [_log()] starting thread (client mode): 0x1498a710
2025-11-13T03:08:00.776 [DEBUG] [Thread-27469] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:08:00.791 [DEBUG] [Thread-27469] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:08:00.791 [INFO] [Thread-27469] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] client lang: <none>
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] server lang: <none>
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] kex follows: False
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] Compression: none
2025-11-13T03:08:00.799 [DEBUG] [Thread-27469] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:08:00.855 [DEBUG] [Thread-27469] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:08:00.855 [DEBUG] [Thread-27469] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:08:00.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:08:00.855 [DEBUG] [Thread-27469] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:08:00.855 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:08:00.912 [DEBUG] [Thread-27469] [transport.py] [_log()] userauth is OK
2025-11-13T03:08:00.912 [DEBUG] [Thread-27469] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:08:00.912 [DEBUG] [Thread-27469] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:08:00.912 [DEBUG] [Thread-27469] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:08:00.912 [DEBUG] [Thread-27469] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:08:00.927 [INFO] [Thread-27469] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:08:00.927 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:08:00.927 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:08:01.769 [DEBUG] [Thread-27469] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:08:01.769 [DEBUG] [Thread-27469] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:08:01.817 [DEBUG] [Thread-27469] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:08:01.817 [DEBUG] [Thread-27469] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:08:01.826 [DEBUG] [Thread-27469] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:08:01.833 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:08:01.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-11-13T03:08:01.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-11-13T03:08:01.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:08:01.851 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:08:01.851 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:08:01.859 [DEBUG] [Thread-27469] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:08:13.925 [DEBUG] [Thread-27471 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:08:15.974 [DEBUG] [Thread-27472 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:08:28.973 [DEBUG] [Thread-27473 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:08:31.882 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:08:31.882 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:08:31.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-11-13T03:08:32.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 8, 19), 14.86, 35.8, 0.0, 21.53, 14.19, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:08:32.522 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:08:19
2025-11-13T03:08:32.660 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:08:32.805 [DEBUG] [Thread-27474] [transport.py] [_log()] starting thread (client mode): 0x149f1120
2025-11-13T03:08:32.805 [DEBUG] [Thread-27474] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:08:32.825 [DEBUG] [Thread-27474] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:08:32.825 [INFO] [Thread-27474] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] client lang: <none>
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] server lang: <none>
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] kex follows: False
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] Compression: none
2025-11-13T03:08:32.829 [DEBUG] [Thread-27474] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:08:32.849 [DEBUG] [Thread-27474] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:08:32.849 [DEBUG] [Thread-27474] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:08:32.850 [DEBUG] [Thread-27474] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:08:32.850 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:08:32.851 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:08:32.853 [DEBUG] [Thread-27474] [transport.py] [_log()] userauth is OK
2025-11-13T03:08:32.853 [DEBUG] [Thread-27474] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:08:32.853 [DEBUG] [Thread-27474] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:08:32.853 [DEBUG] [Thread-27474] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:08:32.853 [DEBUG] [Thread-27474] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:08:32.878 [INFO] [Thread-27474] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:08:32.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:08:33.524 [DEBUG] [Thread-27474] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:08:33.525 [DEBUG] [Thread-27474] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:08:33.525 [DEBUG] [Thread-27474] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:08:33.566 [DEBUG] [Thread-27474] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:08:33.566 [DEBUG] [Thread-27474] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:08:33.569 [DEBUG] [Thread-27474] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:08:33.574 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:08:33.575 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:08:33.576 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:08:33.578 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:08:33.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:08:33.584 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:08:33.584 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:08:33.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:08:33.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:08:33.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.046965 -999.00  +14.00   9.38     42   +1.40 1 1 1 1 1     0    0 15.78 138.72 ZNESW 9.7 9.4 221.4 18.4 14.2 -25.2 14.1 -24.2 13.9 -23.7 14.2 -24.6
2025-11-13T03:08:33.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:08:33.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:08:33.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.046965
2025-11-13T03:08:33.586 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:08:33.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:08:33.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:08:33.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:08:33.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:08:33.587 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:08:19', tmtdew=14.86, humidity=35.8, cloud=0.0, wind=21.53, temperature=14.19, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:08:20', seeing=0.91, atlas_timestamp='2025-11-13T01:07:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:05:00')
2025-11-13T03:08:33.587 [DEBUG] [Thread-27474] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:08:33.671 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:08:33.683 [DEBUG] [Thread-27477] [transport.py] [_log()] starting thread (client mode): 0x11f03310
2025-11-13T03:08:33.683 [DEBUG] [Thread-27477] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:08:33.698 [DEBUG] [Thread-27477] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:08:33.698 [INFO] [Thread-27477] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:08:33.706 [DEBUG] [Thread-27477] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:08:33.706 [DEBUG] [Thread-27477] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:08:33.706 [DEBUG] [Thread-27477] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:08:33.706 [DEBUG] [Thread-27477] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:08:33.706 [DEBUG] [Thread-27477] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:08:33.706 [DEBUG] [Thread-27477] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:08:33.707 [DEBUG] [Thread-27477] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:08:33.707 [DEBUG] [Thread-27477] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:08:33.707 [DEBUG] [Thread-27477] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:08:33.707 [DEBUG] [Thread-27477] [transport.py] [_log()] client lang: <none>
2025-11-13T03:08:33.707 [DEBUG] [Thread-27477] [transport.py] [_log()] server lang: <none>
2025-11-13T03:08:33.707 [DEBUG] [Thread-27477] [transport.py] [_log()] kex follows: False
2025-11-13T03:08:33.707 [DEBUG] [Thread-27477] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:08:33.707 [DEBUG] [Thread-27477] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:08:33.708 [DEBUG] [Thread-27477] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:08:33.708 [DEBUG] [Thread-27477] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:08:33.708 [DEBUG] [Thread-27477] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:08:33.708 [DEBUG] [Thread-27477] [transport.py] [_log()] Compression: none
2025-11-13T03:08:33.708 [DEBUG] [Thread-27477] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:08:33.764 [DEBUG] [Thread-27477] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:08:33.764 [DEBUG] [Thread-27477] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:08:33.764 [DEBUG] [Thread-27477] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:08:33.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:08:33.764 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:08:33.821 [DEBUG] [Thread-27477] [transport.py] [_log()] userauth is OK
2025-11-13T03:08:33.821 [DEBUG] [Thread-27477] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:08:33.821 [DEBUG] [Thread-27477] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:08:33.821 [DEBUG] [Thread-27477] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:08:33.821 [DEBUG] [Thread-27477] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:08:33.840 [INFO] [Thread-27477] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:08: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-11-13T03:08:33.841 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:08:34.658 [DEBUG] [Thread-27477] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:08:34.659 [DEBUG] [Thread-27477] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:08:34.706 [DEBUG] [Thread-27477] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:08:34.707 [DEBUG] [Thread-27477] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:08:34.716 [DEBUG] [Thread-27477] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:08:34.725 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:08:34.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-11-13T03:08:34.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-11-13T03:08:34.743 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:08:34.744 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:08:34.744 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:08:34.752 [DEBUG] [Thread-27477] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:08:44.005 [DEBUG] [Thread-27479 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:08:58.690 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:08:58.691 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:08:59.063 [DEBUG] [Thread-27480 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:09:04.775 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:09:04.775 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:09:04.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-11-13T03:09:05.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 8, 51), 14.96, 35.65, 0.0, 20.31, 14.14, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:09:05.400 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:08:51
2025-11-13T03:09:05.523 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:09:05.669 [DEBUG] [Thread-27481] [transport.py] [_log()] starting thread (client mode): 0x14989ea0
2025-11-13T03:09:05.669 [DEBUG] [Thread-27481] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:09:05.688 [DEBUG] [Thread-27481] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:09:05.689 [INFO] [Thread-27481] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:09:05.692 [DEBUG] [Thread-27481] [transport.py] [_log()] client lang: <none>
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] server lang: <none>
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] kex follows: False
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] Compression: none
2025-11-13T03:09:05.693 [DEBUG] [Thread-27481] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:09:05.711 [DEBUG] [Thread-27481] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:09:05.712 [DEBUG] [Thread-27481] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:09:05.712 [DEBUG] [Thread-27481] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:09:05.712 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:09:05.713 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:09:05.714 [DEBUG] [Thread-27481] [transport.py] [_log()] userauth is OK
2025-11-13T03:09:05.714 [DEBUG] [Thread-27481] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:09:05.714 [DEBUG] [Thread-27481] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:09:05.714 [DEBUG] [Thread-27481] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:09:05.715 [DEBUG] [Thread-27481] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:09:05.733 [INFO] [Thread-27481] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:09:05.734 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:09:06.376 [DEBUG] [Thread-27481] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:09:06.377 [DEBUG] [Thread-27481] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:09:06.377 [DEBUG] [Thread-27481] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:09:06.418 [DEBUG] [Thread-27481] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:09:06.418 [DEBUG] [Thread-27481] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:09:06.421 [DEBUG] [Thread-27481] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:09:06.433 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:09:06.434 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:09:06.436 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:09:06.438 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:09:06.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:09:06.446 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:09:06.446 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:09:06.446 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:09:06.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:09:06.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.047313 -999.00  +14.10   9.01     42   +1.30 1 1 1 1 1     0    0 16.06 138.69 ZNESW 8.1 9.0 214.4 14.2 14.2 -25.1 14.1 -24.1 13.9 -23.7 14.2 -24.5
2025-11-13T03:09:06.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:09:06.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:09:06.447 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.047313
2025-11-13T03:09:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:09:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:09:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:09:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:09:06.448 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:09:06.449 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:08:51', tmtdew=14.96, humidity=35.65, cloud=0.0, wind=20.31, temperature=14.14, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:08:52', seeing=0.91, atlas_timestamp='2025-11-13T01:08:07.843', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:05:00')
2025-11-13T03:09:06.449 [DEBUG] [Thread-27481] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:09:06.533 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:09:06.545 [DEBUG] [Thread-27484] [transport.py] [_log()] starting thread (client mode): 0x1737ce20
2025-11-13T03:09:06.545 [DEBUG] [Thread-27484] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:09:06.560 [DEBUG] [Thread-27484] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:09:06.560 [INFO] [Thread-27484] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:09:06.568 [DEBUG] [Thread-27484] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:09:06.568 [DEBUG] [Thread-27484] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:09:06.568 [DEBUG] [Thread-27484] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] client lang: <none>
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] server lang: <none>
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] kex follows: False
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:09:06.569 [DEBUG] [Thread-27484] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:09:06.570 [DEBUG] [Thread-27484] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:09:06.570 [DEBUG] [Thread-27484] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:09:06.570 [DEBUG] [Thread-27484] [transport.py] [_log()] Compression: none
2025-11-13T03:09:06.570 [DEBUG] [Thread-27484] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:09:06.625 [DEBUG] [Thread-27484] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:09:06.626 [DEBUG] [Thread-27484] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:09:06.626 [DEBUG] [Thread-27484] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:09:06.626 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:09:06.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:09:06.681 [DEBUG] [Thread-27484] [transport.py] [_log()] userauth is OK
2025-11-13T03:09:06.681 [DEBUG] [Thread-27484] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:09:06.681 [DEBUG] [Thread-27484] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:09:06.681 [DEBUG] [Thread-27484] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:09:06.681 [DEBUG] [Thread-27484] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:09:06.710 [INFO] [Thread-27484] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:09:06.710 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:09:06.712 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:09:07.558 [DEBUG] [Thread-27484] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:09:07.558 [DEBUG] [Thread-27484] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:09:07.606 [DEBUG] [Thread-27484] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:09:07.607 [DEBUG] [Thread-27484] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:09:07.616 [DEBUG] [Thread-27484] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:09:07.625 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:09:07.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-11-13T03:09:07.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-11-13T03:09:07.644 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:09:07.644 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:09:07.645 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:09:07.653 [DEBUG] [Thread-27484] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:09:14.101 [DEBUG] [Thread-27486 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:09:16.027 [DEBUG] [Thread-27487 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:09:29.148 [DEBUG] [Thread-27488 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:09:37.665 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:09:37.674 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:09:37.677 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:09:38.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 9, 23), 15.01, 35.54, 0.0, 21.54, 14.16, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:09:38.317 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:09:23
2025-11-13T03:09:38.440 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:09:38.585 [DEBUG] [Thread-27489] [transport.py] [_log()] starting thread (client mode): 0x1498ada0
2025-11-13T03:09:38.585 [DEBUG] [Thread-27489] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:09:38.606 [DEBUG] [Thread-27489] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:09:38.606 [INFO] [Thread-27489] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:09:38.607 [DEBUG] [Thread-27489] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] client lang: <none>
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] server lang: <none>
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] kex follows: False
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] Compression: none
2025-11-13T03:09:38.608 [DEBUG] [Thread-27489] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:09:38.625 [DEBUG] [Thread-27489] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:09:38.626 [DEBUG] [Thread-27489] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:09:38.627 [DEBUG] [Thread-27489] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:09:38.627 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:09:38.628 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:09:38.629 [DEBUG] [Thread-27489] [transport.py] [_log()] userauth is OK
2025-11-13T03:09:38.629 [DEBUG] [Thread-27489] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:09:38.629 [DEBUG] [Thread-27489] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:09:38.629 [DEBUG] [Thread-27489] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:09:38.629 [DEBUG] [Thread-27489] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:09:38.654 [INFO] [Thread-27489] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:09:38.654 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:09:39.292 [DEBUG] [Thread-27489] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:09:39.292 [DEBUG] [Thread-27489] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:09:39.293 [DEBUG] [Thread-27489] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:09:39.334 [DEBUG] [Thread-27489] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:09:39.334 [DEBUG] [Thread-27489] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:09:39.337 [DEBUG] [Thread-27489] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:09:39.348 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:09:39.349 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:09:39.351 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:09:39.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:09:39.359 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:09:39.360 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:09:39.361 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:09:39.361 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:09:39.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:09:39.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.048007 -999.00  +14.10   8.73     41   +1.10 1 1 1 1 1     0    0 15.72 133.81 ZNESW 8.6 8.7 192.1 14.1 14.2 -25.0 14.1 -24.1 13.9 -23.6 14.2 -24.4
2025-11-13T03:09:39.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:09:39.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:09:39.361 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.048007
2025-11-13T03:09:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:09:39.362 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:09:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:09:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:09:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:09:39.363 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:09:23', tmtdew=15.01, humidity=35.54, cloud=0.0, wind=21.54, temperature=14.16, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:09:24', seeing=0.9, atlas_timestamp='2025-11-13T01:09:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:08:00')
2025-11-13T03:09:39.363 [DEBUG] [Thread-27489] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:09:39.448 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:09:39.460 [DEBUG] [Thread-27492] [transport.py] [_log()] starting thread (client mode): 0x1498ace0
2025-11-13T03:09:39.460 [DEBUG] [Thread-27492] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:09:39.475 [DEBUG] [Thread-27492] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:09:39.475 [INFO] [Thread-27492] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:09:39.482 [DEBUG] [Thread-27492] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:09:39.482 [DEBUG] [Thread-27492] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] client lang: <none>
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] server lang: <none>
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] kex follows: False
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] Compression: none
2025-11-13T03:09:39.483 [DEBUG] [Thread-27492] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:09:39.543 [DEBUG] [Thread-27492] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:09:39.544 [DEBUG] [Thread-27492] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:09:39.544 [DEBUG] [Thread-27492] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:09:39.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:09:39.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:09:39.601 [DEBUG] [Thread-27492] [transport.py] [_log()] userauth is OK
2025-11-13T03:09:39.601 [DEBUG] [Thread-27492] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:09:39.601 [DEBUG] [Thread-27492] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:09:39.601 [DEBUG] [Thread-27492] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:09:39.602 [DEBUG] [Thread-27492] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:09:39.620 [INFO] [Thread-27492] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:09:39.621 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:09:39.621 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:09:40.453 [DEBUG] [Thread-27492] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:09:40.454 [DEBUG] [Thread-27492] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:09:40.502 [DEBUG] [Thread-27492] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:09:40.502 [DEBUG] [Thread-27492] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:09:40.511 [DEBUG] [Thread-27492] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:09:40.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:09:40.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-11-13T03:09:40.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-11-13T03:09:40.538 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:09:40.538 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:09:40.539 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:09:40.547 [DEBUG] [Thread-27492] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:09:44.182 [DEBUG] [Thread-27494 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:09:58.894 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:09:58.895 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:09:59.230 [DEBUG] [Thread-27495 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:10:10.563 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:10:10.564 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:10:10.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-11-13T03:10:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 9, 55), 15.23, 35.0, 0.0, 19.37, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:10:11.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:09:55
2025-11-13T03:10:11.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:10:11.458 [DEBUG] [Thread-27496] [transport.py] [_log()] starting thread (client mode): 0x14989480
2025-11-13T03:10:11.458 [DEBUG] [Thread-27496] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:10:11.479 [DEBUG] [Thread-27496] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:10:11.479 [INFO] [Thread-27496] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:10:11.482 [DEBUG] [Thread-27496] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:10:11.482 [DEBUG] [Thread-27496] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:10:11.482 [DEBUG] [Thread-27496] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:10:11.482 [DEBUG] [Thread-27496] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] client lang: <none>
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] server lang: <none>
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] kex follows: False
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:10:11.483 [DEBUG] [Thread-27496] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:10:11.484 [DEBUG] [Thread-27496] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:10:11.484 [DEBUG] [Thread-27496] [transport.py] [_log()] Compression: none
2025-11-13T03:10:11.484 [DEBUG] [Thread-27496] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:10:11.503 [DEBUG] [Thread-27496] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:10:11.504 [DEBUG] [Thread-27496] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:10:11.505 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:10:11.505 [DEBUG] [Thread-27496] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:10:11.506 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:10:11.507 [DEBUG] [Thread-27496] [transport.py] [_log()] userauth is OK
2025-11-13T03:10:11.508 [DEBUG] [Thread-27496] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:10:11.508 [DEBUG] [Thread-27496] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:10:11.508 [DEBUG] [Thread-27496] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:10:11.508 [DEBUG] [Thread-27496] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:10:11.532 [INFO] [Thread-27496] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:10:11.534 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:10:13.056 [DEBUG] [Thread-27496] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:10:13.057 [DEBUG] [Thread-27496] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:10:13.058 [DEBUG] [Thread-27496] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:10:13.097 [DEBUG] [Thread-27496] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:10:13.098 [DEBUG] [Thread-27496] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:10:13.101 [DEBUG] [Thread-27496] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:10:13.114 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:10:13.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:10:13.116 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:10:13.118 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:10:13.125 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:10:13.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:10:13.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:10:13.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:10:13.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:10:13.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.048354 -999.00  +14.10  10.87     40   +1.00 1 1 1 1 1     0    0 15.85 130.55 ZNESW 9.2 10.9 214.4 17.8 14.2 -25.0 14.1 -24.2 13.9 -23.6 14.2 -24.3
2025-11-13T03:10:13.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:10:13.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:10:13.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.048354
2025-11-13T03:10:13.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:10:13.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:10:13.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:10:13.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:10:13.129 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:10:13.130 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:09:55', tmtdew=15.23, humidity=35.0, cloud=0.0, wind=19.37, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:09:56', seeing=0.8, atlas_timestamp='2025-11-13T01:09:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:08:00')
2025-11-13T03:10:13.130 [DEBUG] [Thread-27496] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:10: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-11-13T03:10:13.226 [DEBUG] [Thread-27499] [transport.py] [_log()] starting thread (client mode): 0x17346650
2025-11-13T03:10:13.226 [DEBUG] [Thread-27499] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:10:13.243 [DEBUG] [Thread-27499] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:10:13.243 [INFO] [Thread-27499] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] client lang: <none>
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] server lang: <none>
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] kex follows: False
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:10:13.251 [DEBUG] [Thread-27499] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:10:13.252 [DEBUG] [Thread-27499] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:10:13.252 [DEBUG] [Thread-27499] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:10:13.252 [DEBUG] [Thread-27499] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:10:13.252 [DEBUG] [Thread-27499] [transport.py] [_log()] Compression: none
2025-11-13T03:10:13.252 [DEBUG] [Thread-27499] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:10:13.308 [DEBUG] [Thread-27499] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:10:13.309 [DEBUG] [Thread-27499] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:10:13.309 [DEBUG] [Thread-27499] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:10:13.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:10:13.310 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:10:13.365 [DEBUG] [Thread-27499] [transport.py] [_log()] userauth is OK
2025-11-13T03:10:13.365 [DEBUG] [Thread-27499] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:10:13.365 [DEBUG] [Thread-27499] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:10:13.365 [DEBUG] [Thread-27499] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:10:13.365 [DEBUG] [Thread-27499] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:10:13.385 [INFO] [Thread-27499] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:10:13.385 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:10:13.386 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:10:14.187 [DEBUG] [Thread-27499] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:10:14.187 [DEBUG] [Thread-27499] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:10:14.235 [DEBUG] [Thread-27499] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:10:14.235 [DEBUG] [Thread-27499] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:10:14.244 [DEBUG] [Thread-27499] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:10:14.252 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:10:14.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-11-13T03:10:14.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-11-13T03:10:14.268 [DEBUG] [Thread-27501 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:10:14.270 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:10:14.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:10:14.271 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:10:14.279 [DEBUG] [Thread-27499] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:10:16.084 [DEBUG] [Thread-27502 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:10:29.315 [DEBUG] [Thread-27503 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:10:44.298 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:10:44.298 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:10:44.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-11-13T03:10:44.343 [DEBUG] [Thread-27504 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:10:44.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 10, 27), 15.29, 34.84, 0.0, 18.99, 14.24, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:10:44.924 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:10:27
2025-11-13T03:10:45.043 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:10:45.188 [DEBUG] [Thread-27505] [transport.py] [_log()] starting thread (client mode): 0x17344730
2025-11-13T03:10:45.189 [DEBUG] [Thread-27505] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:10:45.210 [DEBUG] [Thread-27505] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:10:45.210 [INFO] [Thread-27505] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:10:45.213 [DEBUG] [Thread-27505] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:10:45.213 [DEBUG] [Thread-27505] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] client lang: <none>
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] server lang: <none>
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] kex follows: False
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:10:45.214 [DEBUG] [Thread-27505] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:10:45.215 [DEBUG] [Thread-27505] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:10:45.215 [DEBUG] [Thread-27505] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:10:45.215 [DEBUG] [Thread-27505] [transport.py] [_log()] Compression: none
2025-11-13T03:10:45.215 [DEBUG] [Thread-27505] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:10:45.234 [DEBUG] [Thread-27505] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:10:45.234 [DEBUG] [Thread-27505] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:10:45.236 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:10:45.236 [DEBUG] [Thread-27505] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:10:45.237 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:10:45.238 [DEBUG] [Thread-27505] [transport.py] [_log()] userauth is OK
2025-11-13T03:10:45.238 [DEBUG] [Thread-27505] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:10:45.238 [DEBUG] [Thread-27505] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:10:45.238 [DEBUG] [Thread-27505] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:10:45.239 [DEBUG] [Thread-27505] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:10:45.261 [INFO] [Thread-27505] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:10:45.262 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:10:45.878 [DEBUG] [Thread-27505] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:10:45.878 [DEBUG] [Thread-27505] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:10:45.879 [DEBUG] [Thread-27505] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:10:45.920 [DEBUG] [Thread-27505] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:10:45.920 [DEBUG] [Thread-27505] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:10:45.923 [DEBUG] [Thread-27505] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:10:45.935 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:10:45.935 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:10:45.937 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:10:45.939 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:10:45.944 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:10:45.945 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:10:45.945 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:10:45.945 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:10:45.945 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.048701 -999.00  +14.10   8.78     40   +1.00 1 1 1 1 1     0    0 15.78 125.66 ZNESW 6.1 8.8 240.5 17.5 14.2 -25.0 14.1 -24.2 13.9 -23.7 14.2 -24.5
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.048701
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:10:45.946 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:10:27', tmtdew=15.29, humidity=34.84, cloud=0.0, wind=18.99, temperature=14.24, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:10:28', seeing=0.83, atlas_timestamp='2025-11-13T01:10:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:08:00')
2025-11-13T03:10:45.947 [DEBUG] [Thread-27505] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:10:46.031 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:10:46.042 [DEBUG] [Thread-27508] [transport.py] [_log()] starting thread (client mode): 0x149f36d0
2025-11-13T03:10:46.042 [DEBUG] [Thread-27508] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:10:46.059 [DEBUG] [Thread-27508] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:10:46.059 [INFO] [Thread-27508] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:10:46.066 [DEBUG] [Thread-27508] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] client lang: <none>
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] server lang: <none>
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] kex follows: False
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:10:46.067 [DEBUG] [Thread-27508] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:10:46.068 [DEBUG] [Thread-27508] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:10:46.068 [DEBUG] [Thread-27508] [transport.py] [_log()] Compression: none
2025-11-13T03:10:46.068 [DEBUG] [Thread-27508] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:10:46.125 [DEBUG] [Thread-27508] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:10:46.125 [DEBUG] [Thread-27508] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:10:46.126 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:10:46.126 [DEBUG] [Thread-27508] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:10:46.127 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:10:46.181 [DEBUG] [Thread-27508] [transport.py] [_log()] userauth is OK
2025-11-13T03:10:46.181 [DEBUG] [Thread-27508] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:10:46.181 [DEBUG] [Thread-27508] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:10:46.181 [DEBUG] [Thread-27508] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:10:46.182 [DEBUG] [Thread-27508] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:10:46.204 [INFO] [Thread-27508] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:10:46.204 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:10:46.205 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:10:47.049 [DEBUG] [Thread-27508] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:10:47.050 [DEBUG] [Thread-27508] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:10:47.097 [DEBUG] [Thread-27508] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:10:47.098 [DEBUG] [Thread-27508] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:10:47.107 [DEBUG] [Thread-27508] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:10:47.116 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:10:47.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-11-13T03:10:47.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-11-13T03:10:47.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:10:47.135 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:10:47.136 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:10:47.144 [DEBUG] [Thread-27508] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:10:59.096 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:10:59.097 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:10:59.378 [DEBUG] [Thread-27510 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:11:14.429 [DEBUG] [Thread-27511 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:11:16.150 [DEBUG] [Thread-27512 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:11:17.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:11:17.141 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:11:17.144 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:11:17.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 10, 59), 15.37, 34.79, 0.0, 19.14, 14.29, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:11:17.784 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:10:59
2025-11-13T03:11:17.904 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:11:18.053 [DEBUG] [Thread-27513] [transport.py] [_log()] starting thread (client mode): 0x1737c0d0
2025-11-13T03:11:18.053 [DEBUG] [Thread-27513] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:11:18.073 [DEBUG] [Thread-27513] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:11:18.073 [INFO] [Thread-27513] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:11:18.076 [DEBUG] [Thread-27513] [transport.py] [_log()] client lang: <none>
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] server lang: <none>
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] kex follows: False
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] Compression: none
2025-11-13T03:11:18.077 [DEBUG] [Thread-27513] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:11:18.094 [DEBUG] [Thread-27513] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:11:18.095 [DEBUG] [Thread-27513] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:11:18.096 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:11:18.096 [DEBUG] [Thread-27513] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:11:18.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:11:18.098 [DEBUG] [Thread-27513] [transport.py] [_log()] userauth is OK
2025-11-13T03:11:18.098 [DEBUG] [Thread-27513] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:11:18.098 [DEBUG] [Thread-27513] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:11:18.098 [DEBUG] [Thread-27513] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:11:18.098 [DEBUG] [Thread-27513] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:11:18.123 [INFO] [Thread-27513] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:11:18.124 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:11:18.763 [DEBUG] [Thread-27513] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:11:18.763 [DEBUG] [Thread-27513] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:11:18.764 [DEBUG] [Thread-27513] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:11:18.803 [DEBUG] [Thread-27513] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:11:18.804 [DEBUG] [Thread-27513] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:11:18.807 [DEBUG] [Thread-27513] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:11:18.819 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:11:18.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:11:18.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:11:18.822 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:11:18.828 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:11:18.830 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:11:18.830 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:11:18.830 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:11:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:11:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.049048 -999.00  +14.10  11.76     40   +0.90 1 1 1 1 1     0    0 15.44 123.14 ZNESW 10.3 11.8 206.2 17.4 14.3 -25.1 14.1 -24.0 13.9 -23.6 14.2 -24.3
2025-11-13T03:11:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:11:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:11:18.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.049048
2025-11-13T03:11:18.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:11:18.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:11:18.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:11:18.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:11:18.832 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:11:18.833 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:10:59', tmtdew=15.37, humidity=34.79, cloud=0.0, wind=19.14, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:11:01', seeing=0.83, atlas_timestamp='2025-11-13T01:10:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:08:00')
2025-11-13T03:11:18.833 [DEBUG] [Thread-27513] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:11:18.916 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:11:18.929 [DEBUG] [Thread-27516] [transport.py] [_log()] starting thread (client mode): 0x1737e440
2025-11-13T03:11:18.929 [DEBUG] [Thread-27516] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:11:18.944 [DEBUG] [Thread-27516] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:11:18.944 [INFO] [Thread-27516] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:11:18.951 [DEBUG] [Thread-27516] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] client lang: <none>
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] server lang: <none>
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] kex follows: False
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:11:18.952 [DEBUG] [Thread-27516] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:11:18.953 [DEBUG] [Thread-27516] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:11:18.953 [DEBUG] [Thread-27516] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:11:18.953 [DEBUG] [Thread-27516] [transport.py] [_log()] Compression: none
2025-11-13T03:11:18.953 [DEBUG] [Thread-27516] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:11:19.008 [DEBUG] [Thread-27516] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:11:19.009 [DEBUG] [Thread-27516] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:11:19.010 [DEBUG] [Thread-27516] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:11:19.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:11:19.011 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:11:19.065 [DEBUG] [Thread-27516] [transport.py] [_log()] userauth is OK
2025-11-13T03:11:19.065 [DEBUG] [Thread-27516] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:11:19.065 [DEBUG] [Thread-27516] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:11:19.066 [DEBUG] [Thread-27516] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:11:19.066 [DEBUG] [Thread-27516] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:11:19.084 [INFO] [Thread-27516] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:11:19.085 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:11:19.085 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:11:19.891 [DEBUG] [Thread-27516] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:11:19.891 [DEBUG] [Thread-27516] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:11:19.939 [DEBUG] [Thread-27516] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:11:19.940 [DEBUG] [Thread-27516] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:11:19.949 [DEBUG] [Thread-27516] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:11:19.959 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:11:19.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-11-13T03:11:19.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-11-13T03:11:19.977 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:11:19.978 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:11:19.978 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:11:19.986 [DEBUG] [Thread-27516] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:11:29.462 [DEBUG] [Thread-27518 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:11:44.515 [DEBUG] [Thread-27519 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:11:49.984 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:11:49.984 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:11:49.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-11-13T03:11:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 11, 32), 15.43, 34.62, 0.0, 18.1, 14.27, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:11:50.653 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:11:32
2025-11-13T03:11:50.780 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:11:50.937 [DEBUG] [Thread-27520] [transport.py] [_log()] starting thread (client mode): 0x149890c0
2025-11-13T03:11:50.937 [DEBUG] [Thread-27520] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:11:50.956 [DEBUG] [Thread-27520] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:11:50.956 [INFO] [Thread-27520] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] client lang: <none>
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] server lang: <none>
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] kex follows: False
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] Compression: none
2025-11-13T03:11:50.960 [DEBUG] [Thread-27520] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:11:50.971 [DEBUG] [Thread-27520] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:11:50.971 [DEBUG] [Thread-27520] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:11:50.971 [DEBUG] [Thread-27520] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:11:50.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:11:50.971 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:11:50.972 [DEBUG] [Thread-27520] [transport.py] [_log()] userauth is OK
2025-11-13T03:11:50.972 [DEBUG] [Thread-27520] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:11:50.972 [DEBUG] [Thread-27520] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:11:50.972 [DEBUG] [Thread-27520] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:11:50.972 [DEBUG] [Thread-27520] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:11:50.987 [INFO] [Thread-27520] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:11:50.987 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:11:51.602 [DEBUG] [Thread-27520] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:11:51.602 [DEBUG] [Thread-27520] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:11:51.602 [DEBUG] [Thread-27520] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:11:51.643 [DEBUG] [Thread-27520] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:11:51.643 [DEBUG] [Thread-27520] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:11:51.645 [DEBUG] [Thread-27520] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:11:51.657 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:11:51.657 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:11:51.658 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:11:51.659 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:11:51.673 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:11:51.674 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:11:51.674 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:11:51.674 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.049396 -999.00  +14.20  10.17     40   +0.90 1 1 1 1 1     0    0 15.84 123.93 ZNESW 10.1 10.2 208.2 17.6 14.3 -25.2 14.2 -24.2 13.9 -23.5 14.2 -24.3
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.049396
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:11:51.675 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:11:32', tmtdew=15.43, humidity=34.62, cloud=0.0, wind=18.1, temperature=14.27, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:11:33', seeing=0.95, atlas_timestamp='2025-11-13T01:11:07.814', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:08:00')
2025-11-13T03:11:51.676 [DEBUG] [Thread-27520] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:11:51.750 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:11:51.761 [DEBUG] [Thread-27523] [transport.py] [_log()] starting thread (client mode): 0x149f05b0
2025-11-13T03:11:51.762 [DEBUG] [Thread-27523] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:11:51.777 [DEBUG] [Thread-27523] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:11:51.777 [INFO] [Thread-27523] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:11:51.784 [DEBUG] [Thread-27523] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] client lang: <none>
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] server lang: <none>
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] kex follows: False
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] Compression: none
2025-11-13T03:11:51.785 [DEBUG] [Thread-27523] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:11:51.843 [DEBUG] [Thread-27523] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:11:51.843 [DEBUG] [Thread-27523] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:11:51.844 [DEBUG] [Thread-27523] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:11:51.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:11:51.844 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:11:51.900 [DEBUG] [Thread-27523] [transport.py] [_log()] userauth is OK
2025-11-13T03:11:51.900 [DEBUG] [Thread-27523] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:11:51.900 [DEBUG] [Thread-27523] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:11:51.900 [DEBUG] [Thread-27523] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:11:51.900 [DEBUG] [Thread-27523] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:11:51.919 [INFO] [Thread-27523] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:11:51.919 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:11:51.919 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:11:52.713 [DEBUG] [Thread-27523] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:11:52.713 [DEBUG] [Thread-27523] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:11:52.761 [DEBUG] [Thread-27523] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:11:52.761 [DEBUG] [Thread-27523] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:11:52.770 [DEBUG] [Thread-27523] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:11:52.778 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:11:52.778 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:11:52.786 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:11:52.794 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:11:52.794 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:11:52.794 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:11:52.802 [DEBUG] [Thread-27523] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:11:59.298 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:11:59.300 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:11:59.551 [DEBUG] [Thread-27525 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:12:14.602 [DEBUG] [Thread-27526 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:12:16.206 [DEBUG] [Thread-27527 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:12:22.802 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:12:22.802 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:12: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-11-13T03:12:23.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 12, 4), 15.51, 34.42, 0.0, 17.56, 14.29, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:12:23.444 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:12:04
2025-11-13T03:12:23.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:12:23.712 [DEBUG] [Thread-27528] [transport.py] [_log()] starting thread (client mode): 0x17347580
2025-11-13T03:12:23.712 [DEBUG] [Thread-27528] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:12:23.733 [DEBUG] [Thread-27528] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:12:23.733 [INFO] [Thread-27528] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:12:23.736 [DEBUG] [Thread-27528] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:12:23.736 [DEBUG] [Thread-27528] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] client lang: <none>
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] server lang: <none>
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] kex follows: False
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:12:23.737 [DEBUG] [Thread-27528] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:12:23.738 [DEBUG] [Thread-27528] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:12:23.738 [DEBUG] [Thread-27528] [transport.py] [_log()] Compression: none
2025-11-13T03:12:23.738 [DEBUG] [Thread-27528] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:12:23.756 [DEBUG] [Thread-27528] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:12:23.756 [DEBUG] [Thread-27528] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:12:23.756 [DEBUG] [Thread-27528] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:12:23.756 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:12:23.757 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:12:23.757 [DEBUG] [Thread-27528] [transport.py] [_log()] userauth is OK
2025-11-13T03:12:23.757 [DEBUG] [Thread-27528] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:12:23.757 [DEBUG] [Thread-27528] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:12:23.757 [DEBUG] [Thread-27528] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:12:23.757 [DEBUG] [Thread-27528] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:12:23.781 [INFO] [Thread-27528] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:12:23.782 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:12:24.421 [DEBUG] [Thread-27528] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:12:24.421 [DEBUG] [Thread-27528] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:12:24.422 [DEBUG] [Thread-27528] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:12:24.462 [DEBUG] [Thread-27528] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:12:24.462 [DEBUG] [Thread-27528] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:12:24.465 [DEBUG] [Thread-27528] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:12:24.477 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:12:24.478 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:12:24.480 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:12:24.481 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:12:24.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:12:24.488 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:12:24.489 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:12:24.489 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:12:24.489 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:12:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.049743 -999.00  +14.20   7.08     40   +0.90 1 1 1 1 1     0    0 15.67 123.78 ZNESW 7.7 7.1 232.3 15.9 14.2 -25.3 14.1 -24.2 13.9 -23.8 14.2 -24.4
2025-11-13T03:12:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:12:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:12:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.049743
2025-11-13T03:12:24.490 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:12:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:12:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:12:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:12:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:12:24.491 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:12:04', tmtdew=15.51, humidity=34.42, cloud=0.0, wind=17.56, temperature=14.29, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:12:05', seeing=0.91, atlas_timestamp='2025-11-13T01:11:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.006250000000001421, -0.020749999999999602, 0.047250000000000014, -0.0035000000000007248, -0.012000000000000455, 0.04525000000000112, -0.02400000000000091, -0.03074999999999939, 0.0015000000000000568, 0.009000000000000341, 0.04124999999999979, 0.0600000000000005, 0.07399999999999984, 0.05325000000000024, -0.04100000000000037, -0.041999999999999815, 0.008250000000000313, 0.04800000000000004, 0.07099999999999973, 0.04324999999999868, 0.07699999999999818, 0.07074999999999854, -0.004749999999999588, -0.04224999999999923, 0.007999999999999119, 0.10250000000000092, 0.1022500000000015, 0.21649999999999991, 0.12399999999999878, 0.09350000000000236, 0.018500000000001293, 0.05600000000000094, -0.02325000000000088], zp_timestamp='2025-11-13T01:08:00')
2025-11-13T03:12:24.491 [DEBUG] [Thread-27528] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:12:24.575 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:12:24.587 [DEBUG] [Thread-27531] [transport.py] [_log()] starting thread (client mode): 0x14946bf0
2025-11-13T03:12:24.587 [DEBUG] [Thread-27531] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:12:24.607 [DEBUG] [Thread-27531] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:12:24.607 [INFO] [Thread-27531] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:12:24.614 [DEBUG] [Thread-27531] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] client lang: <none>
2025-11-13T03:12:24.615 [DEBUG] [Thread-27531] [transport.py] [_log()] server lang: <none>
2025-11-13T03:12:24.616 [DEBUG] [Thread-27531] [transport.py] [_log()] kex follows: False
2025-11-13T03:12:24.616 [DEBUG] [Thread-27531] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:12:24.616 [DEBUG] [Thread-27531] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:12:24.616 [DEBUG] [Thread-27531] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:12:24.616 [DEBUG] [Thread-27531] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:12:24.616 [DEBUG] [Thread-27531] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:12:24.616 [DEBUG] [Thread-27531] [transport.py] [_log()] Compression: none
2025-11-13T03:12:24.616 [DEBUG] [Thread-27531] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:12:24.672 [DEBUG] [Thread-27531] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:12:24.673 [DEBUG] [Thread-27531] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:12:24.674 [DEBUG] [Thread-27531] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:12:24.674 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:12:24.675 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:12:24.729 [DEBUG] [Thread-27531] [transport.py] [_log()] userauth is OK
2025-11-13T03:12:24.729 [DEBUG] [Thread-27531] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:12:24.729 [DEBUG] [Thread-27531] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:12:24.730 [DEBUG] [Thread-27531] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:12:24.730 [DEBUG] [Thread-27531] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:12:24.750 [INFO] [Thread-27531] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:12:24.751 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:12:24.751 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:12:25.644 [DEBUG] [Thread-27531] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:12:25.644 [DEBUG] [Thread-27531] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:12:25.692 [DEBUG] [Thread-27531] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:12:25.692 [DEBUG] [Thread-27531] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:12:25.700 [DEBUG] [Thread-27531] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:12:25.708 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:12:25.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-11-13T03:12:25.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:12:25.724 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:12:25.724 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:12:25.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:12:25.732 [DEBUG] [Thread-27531] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:12:29.637 [DEBUG] [Thread-27533 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:12:44.674 [DEBUG] [Thread-27534 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:12:55.755 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:12:55.755 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:12:55.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-11-13T03:12:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 12, 36), 15.79, 33.87, 0.0, 18.03, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:12:56.377 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:12:36
2025-11-13T03:12:56.500 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:12:56.647 [DEBUG] [Thread-27535] [transport.py] [_log()] starting thread (client mode): 0x1737f2e0
2025-11-13T03:12:56.647 [DEBUG] [Thread-27535] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:12:56.667 [DEBUG] [Thread-27535] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:12:56.667 [INFO] [Thread-27535] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:12:56.668 [DEBUG] [Thread-27535] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] client lang: <none>
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] server lang: <none>
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] kex follows: False
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] Compression: none
2025-11-13T03:12:56.669 [DEBUG] [Thread-27535] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:12:56.686 [DEBUG] [Thread-27535] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:12:56.686 [DEBUG] [Thread-27535] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:12:56.687 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:12:56.687 [DEBUG] [Thread-27535] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:12:56.688 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:12:56.689 [DEBUG] [Thread-27535] [transport.py] [_log()] userauth is OK
2025-11-13T03:12:56.689 [DEBUG] [Thread-27535] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:12:56.689 [DEBUG] [Thread-27535] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:12:56.690 [DEBUG] [Thread-27535] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:12:56.690 [DEBUG] [Thread-27535] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:12:56.724 [INFO] [Thread-27535] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:12:56.725 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:12:57.343 [DEBUG] [Thread-27535] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:12:57.343 [DEBUG] [Thread-27535] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:12:57.344 [DEBUG] [Thread-27535] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:12:57.384 [DEBUG] [Thread-27535] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:12:57.385 [DEBUG] [Thread-27535] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:12:57.388 [DEBUG] [Thread-27535] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:12:57.402 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:12:57.402 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:12:57.404 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:12:57.406 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:12:57.411 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:12:57.413 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:12:57.413 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:12:57.413 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:12:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:12:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.050437 -999.00  +14.30   7.45     39   +0.70 1 1 1 1 1     0    0 15.32 109.56 ZNESW 9.2 7.5 260.5 18.9 14.3 -25.1 14.1 -23.9 14.0 -23.6 14.2 -24.3
2025-11-13T03:12:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:12:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:12:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.050437
2025-11-13T03:12:57.414 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:12:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:12:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:12:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:12:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:12:57.415 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:12:36', tmtdew=15.79, humidity=33.87, cloud=0.0, wind=18.03, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:12:37', seeing=0.88, atlas_timestamp='2025-11-13T01:12:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.011749999999999261, 0.0652500000000007, 0.047999999999998266, -0.0045000000000001705, 0.047250000000000014, -0.020500000000000185, -0.011749999999999261, 0.023999999999999133, 0.0129999999999999, 0.06824999999999903, 0.031000000000000583, 0.13700000000000045, 0.05025000000000013, -0.005500000000001393, -0.025000000000000355, 0.04224999999999923, 0.06550000000000011, 0.08399999999999963, 0.10224999999999973, 0.12899999999999956, 0.087749999999998, 0.02725000000000044, 0.00575000000000081, 0.03799999999999848, 0.12850000000000072, 0.11374999999999957, 0.1479999999999997, 0.2010000000000005, 0.08399999999999963, 0.0710000000000015, 0.04550000000000054, -0.04725000000000179], zp_timestamp='2025-11-13T01:11:00')
2025-11-13T03:12:57.415 [DEBUG] [Thread-27535] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:12:57.499 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:12:57.511 [DEBUG] [Thread-27538] [transport.py] [_log()] starting thread (client mode): 0x11f03310
2025-11-13T03:12:57.511 [DEBUG] [Thread-27538] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:12:57.526 [DEBUG] [Thread-27538] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:12:57.526 [INFO] [Thread-27538] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:12:57.533 [DEBUG] [Thread-27538] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:12:57.533 [DEBUG] [Thread-27538] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:12:57.533 [DEBUG] [Thread-27538] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] client lang: <none>
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] server lang: <none>
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] kex follows: False
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] Compression: none
2025-11-13T03:12:57.534 [DEBUG] [Thread-27538] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:12:57.592 [DEBUG] [Thread-27538] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:12:57.592 [DEBUG] [Thread-27538] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:12:57.593 [DEBUG] [Thread-27538] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:12:57.593 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:12:57.594 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:12:57.648 [DEBUG] [Thread-27538] [transport.py] [_log()] userauth is OK
2025-11-13T03:12:57.649 [DEBUG] [Thread-27538] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:12:57.649 [DEBUG] [Thread-27538] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:12:57.649 [DEBUG] [Thread-27538] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:12:57.649 [DEBUG] [Thread-27538] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:12:57.668 [INFO] [Thread-27538] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:12:57.669 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:12:57.669 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:12:58.460 [DEBUG] [Thread-27538] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:12:58.460 [DEBUG] [Thread-27538] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:12:58.509 [DEBUG] [Thread-27538] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:12:58.509 [DEBUG] [Thread-27538] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:12:58.518 [DEBUG] [Thread-27538] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:12:58.527 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:12:58.528 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:12:58.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-11-13T03:12:58.546 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:12:58.546 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:12:58.547 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:12:58.554 [DEBUG] [Thread-27538] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:12:59.556 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:12:59.557 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:12:59.711 [DEBUG] [Thread-27540 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:13:14.761 [DEBUG] [Thread-27541 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:13:16.275 [DEBUG] [Thread-27542 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:13:28.577 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:13:28.578 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:13:28.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-11-13T03:13:29.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 13, 8), 15.88, 33.64, 0.0, 17.01, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:13:29.205 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:13:08
2025-11-13T03:13:29.327 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:13:29.473 [DEBUG] [Thread-27543] [transport.py] [_log()] starting thread (client mode): 0x17346140
2025-11-13T03:13:29.473 [DEBUG] [Thread-27543] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:13:29.494 [DEBUG] [Thread-27543] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:13:29.494 [INFO] [Thread-27543] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:13:29.497 [DEBUG] [Thread-27543] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:13:29.497 [DEBUG] [Thread-27543] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:13:29.497 [DEBUG] [Thread-27543] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:13:29.497 [DEBUG] [Thread-27543] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:13:29.497 [DEBUG] [Thread-27543] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:13:29.497 [DEBUG] [Thread-27543] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:13:29.497 [DEBUG] [Thread-27543] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:13:29.497 [DEBUG] [Thread-27543] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] client lang: <none>
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] server lang: <none>
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] kex follows: False
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] Compression: none
2025-11-13T03:13:29.498 [DEBUG] [Thread-27543] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:13:29.515 [DEBUG] [Thread-27543] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:13:29.516 [DEBUG] [Thread-27543] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:13:29.516 [DEBUG] [Thread-27543] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:13:29.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:13:29.517 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:13:29.519 [DEBUG] [Thread-27543] [transport.py] [_log()] userauth is OK
2025-11-13T03:13:29.519 [DEBUG] [Thread-27543] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:13:29.519 [DEBUG] [Thread-27543] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:13:29.519 [DEBUG] [Thread-27543] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:13:29.519 [DEBUG] [Thread-27543] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:13:29.544 [INFO] [Thread-27543] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:13:29.545 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:13:29.801 [DEBUG] [Thread-27545 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:13:30.186 [DEBUG] [Thread-27543] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:13:30.187 [DEBUG] [Thread-27543] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:13:30.187 [DEBUG] [Thread-27543] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:13:30.227 [DEBUG] [Thread-27543] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:13:30.228 [DEBUG] [Thread-27543] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:13:30.231 [DEBUG] [Thread-27543] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:13:30.244 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:13:30.244 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:13:30.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:13:30.247 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:13:30.252 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:13:30.254 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:13:30.255 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:13:30.255 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:13:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:13:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.050784 -999.00  +14.20   7.79     39   +0.80 1 1 1 1 1     0    0 15.40 109.34 ZNESW 7.5 7.8 241.4 15.4 14.3 -25.0 14.2 -24.1 13.9 -23.6 14.2 -24.2
2025-11-13T03:13:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:13:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:13:30.255 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.050784
2025-11-13T03:13:30.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:13:30.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:13:30.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:13:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:13:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:13:30.257 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:13:08', tmtdew=15.88, humidity=33.64, cloud=0.0, wind=17.01, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:13:09', seeing=0.88, atlas_timestamp='2025-11-13T01:13:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.011749999999999261, 0.0652500000000007, 0.047999999999998266, -0.0045000000000001705, 0.047250000000000014, -0.020500000000000185, -0.011749999999999261, 0.023999999999999133, 0.0129999999999999, 0.06824999999999903, 0.031000000000000583, 0.13700000000000045, 0.05025000000000013, -0.005500000000001393, -0.025000000000000355, 0.04224999999999923, 0.06550000000000011, 0.08399999999999963, 0.10224999999999973, 0.12899999999999956, 0.087749999999998, 0.02725000000000044, 0.00575000000000081, 0.03799999999999848, 0.12850000000000072, 0.11374999999999957, 0.1479999999999997, 0.2010000000000005, 0.08399999999999963, 0.0710000000000015, 0.04550000000000054, -0.04725000000000179], zp_timestamp='2025-11-13T01:11:00')
2025-11-13T03:13:30.257 [DEBUG] [Thread-27543] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:13:30.340 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:13:30.353 [DEBUG] [Thread-27547] [transport.py] [_log()] starting thread (client mode): 0x149446d0
2025-11-13T03:13:30.353 [DEBUG] [Thread-27547] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:13:30.367 [DEBUG] [Thread-27547] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:13:30.367 [INFO] [Thread-27547] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:13:30.375 [DEBUG] [Thread-27547] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:13:30.375 [DEBUG] [Thread-27547] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:13:30.375 [DEBUG] [Thread-27547] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:13:30.375 [DEBUG] [Thread-27547] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:13:30.375 [DEBUG] [Thread-27547] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:13:30.375 [DEBUG] [Thread-27547] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:13:30.375 [DEBUG] [Thread-27547] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:13:30.375 [DEBUG] [Thread-27547] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] client lang: <none>
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] server lang: <none>
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] kex follows: False
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] Compression: none
2025-11-13T03:13:30.376 [DEBUG] [Thread-27547] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:13:30.433 [DEBUG] [Thread-27547] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:13:30.433 [DEBUG] [Thread-27547] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:13:30.434 [DEBUG] [Thread-27547] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:13:30.434 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:13:30.435 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:13:30.489 [DEBUG] [Thread-27547] [transport.py] [_log()] userauth is OK
2025-11-13T03:13:30.489 [DEBUG] [Thread-27547] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:13:30.489 [DEBUG] [Thread-27547] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:13:30.489 [DEBUG] [Thread-27547] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:13:30.489 [DEBUG] [Thread-27547] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:13:30.508 [INFO] [Thread-27547] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:13:30.509 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:13:30.509 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:13:31.355 [DEBUG] [Thread-27547] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:13:31.355 [DEBUG] [Thread-27547] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:13:31.406 [DEBUG] [Thread-27547] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:13:31.406 [DEBUG] [Thread-27547] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:13:31.418 [DEBUG] [Thread-27547] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:13:31.430 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:13:31.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-11-13T03:13:31.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-11-13T03:13:31.453 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:13:31.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:13:31.454 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:13:31.465 [DEBUG] [Thread-27547] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:13:44.835 [DEBUG] [Thread-27549 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:13:59.762 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:13:59.763 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:13:59.876 [DEBUG] [Thread-27550 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:14:01.485 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:14:01.485 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:14:01.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-11-13T03:14:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 13, 40), 15.86, 33.59, 0.0, 19.06, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:14:02.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:13:40
2025-11-13T03:14:02.237 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:14:02.383 [DEBUG] [Thread-27551] [transport.py] [_log()] starting thread (client mode): 0x1498b070
2025-11-13T03:14:02.383 [DEBUG] [Thread-27551] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:14:02.405 [DEBUG] [Thread-27551] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:14:02.405 [INFO] [Thread-27551] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] client lang: <none>
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] server lang: <none>
2025-11-13T03:14:02.408 [DEBUG] [Thread-27551] [transport.py] [_log()] kex follows: False
2025-11-13T03:14:02.409 [DEBUG] [Thread-27551] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:14:02.409 [DEBUG] [Thread-27551] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:14:02.409 [DEBUG] [Thread-27551] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:14:02.409 [DEBUG] [Thread-27551] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:14:02.409 [DEBUG] [Thread-27551] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:14:02.409 [DEBUG] [Thread-27551] [transport.py] [_log()] Compression: none
2025-11-13T03:14:02.409 [DEBUG] [Thread-27551] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:14:02.427 [DEBUG] [Thread-27551] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:14:02.428 [DEBUG] [Thread-27551] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:14:02.428 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:14:02.429 [DEBUG] [Thread-27551] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:14:02.430 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:14:02.431 [DEBUG] [Thread-27551] [transport.py] [_log()] userauth is OK
2025-11-13T03:14:02.431 [DEBUG] [Thread-27551] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:14:02.431 [DEBUG] [Thread-27551] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:14:02.431 [DEBUG] [Thread-27551] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:14:02.431 [DEBUG] [Thread-27551] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:14:02.455 [INFO] [Thread-27551] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:14:02.456 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:14:03.063 [DEBUG] [Thread-27551] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:14:03.064 [DEBUG] [Thread-27551] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:14:03.064 [DEBUG] [Thread-27551] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:14:03.105 [DEBUG] [Thread-27551] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:14:03.105 [DEBUG] [Thread-27551] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:14:03.108 [DEBUG] [Thread-27551] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:14:03.120 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:14:03.120 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:14:03.122 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:14:03.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:14:03.129 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:14:03.131 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:14:03.132 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:14:03.132 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:14:03.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:14:03.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.051132 -999.00  +14.20   9.69     40   +0.80 1 1 1 1 1     0    0 15.45 108.72 ZNESW 6.9 9.7 224.2 13.1 14.3 -25.2 14.2 -24.1 13.9 -23.7 14.2 -24.3
2025-11-13T03:14:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:14:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:14:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.051132
2025-11-13T03:14:03.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:14:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:14:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:14:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:14:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:14:03.134 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:13:40', tmtdew=15.86, humidity=33.59, cloud=0.0, wind=19.06, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:13:41', seeing=0.86, atlas_timestamp='2025-11-13T01:13:37.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.011749999999999261, 0.0652500000000007, 0.047999999999998266, -0.0045000000000001705, 0.047250000000000014, -0.020500000000000185, -0.011749999999999261, 0.023999999999999133, 0.0129999999999999, 0.06824999999999903, 0.031000000000000583, 0.13700000000000045, 0.05025000000000013, -0.005500000000001393, -0.025000000000000355, 0.04224999999999923, 0.06550000000000011, 0.08399999999999963, 0.10224999999999973, 0.12899999999999956, 0.087749999999998, 0.02725000000000044, 0.00575000000000081, 0.03799999999999848, 0.12850000000000072, 0.11374999999999957, 0.1479999999999997, 0.2010000000000005, 0.08399999999999963, 0.0710000000000015, 0.04550000000000054, -0.04725000000000179], zp_timestamp='2025-11-13T01:11:00')
2025-11-13T03:14:03.135 [DEBUG] [Thread-27551] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:14:03.218 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:14:03.230 [DEBUG] [Thread-27554] [transport.py] [_log()] starting thread (client mode): 0x14922380
2025-11-13T03:14:03.230 [DEBUG] [Thread-27554] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:14:03.244 [DEBUG] [Thread-27554] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:14:03.244 [INFO] [Thread-27554] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:14:03.252 [DEBUG] [Thread-27554] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:14:03.252 [DEBUG] [Thread-27554] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:14:03.252 [DEBUG] [Thread-27554] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:14:03.252 [DEBUG] [Thread-27554] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:14:03.252 [DEBUG] [Thread-27554] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] client lang: <none>
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] server lang: <none>
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] kex follows: False
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] Compression: none
2025-11-13T03:14:03.253 [DEBUG] [Thread-27554] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:14:03.313 [DEBUG] [Thread-27554] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:14:03.313 [DEBUG] [Thread-27554] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:14:03.314 [DEBUG] [Thread-27554] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:14:03.314 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:14:03.315 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:14:03.369 [DEBUG] [Thread-27554] [transport.py] [_log()] userauth is OK
2025-11-13T03:14:03.369 [DEBUG] [Thread-27554] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:14:03.369 [DEBUG] [Thread-27554] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:14:03.369 [DEBUG] [Thread-27554] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:14:03.369 [DEBUG] [Thread-27554] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:14:03.388 [INFO] [Thread-27554] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:14:03.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:14:03.389 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:14:04.192 [DEBUG] [Thread-27554] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:14:04.193 [DEBUG] [Thread-27554] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:14:04.241 [DEBUG] [Thread-27554] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:14:04.241 [DEBUG] [Thread-27554] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:14:04.250 [DEBUG] [Thread-27554] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:14:04.259 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:14:04.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-11-13T03:14:04.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-11-13T03:14:04.278 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:14:04.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:14:04.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:14:04.287 [DEBUG] [Thread-27554] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:14:14.909 [DEBUG] [Thread-27556 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:14:16.344 [DEBUG] [Thread-27557 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:14:29.946 [DEBUG] [Thread-27558 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:14:34.283 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:14:34.283 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:14:34.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-11-13T03:14:34.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 14, 12), 15.86, 33.58, 0.0, 21.56, 14.41, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:14:34.901 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:14:12
2025-11-13T03:14:35.023 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:14:35.169 [DEBUG] [Thread-27559] [transport.py] [_log()] starting thread (client mode): 0x149f3e20
2025-11-13T03:14:35.169 [DEBUG] [Thread-27559] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:14:35.188 [DEBUG] [Thread-27559] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:14:35.188 [INFO] [Thread-27559] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] client lang: <none>
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] server lang: <none>
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] kex follows: False
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] Compression: none
2025-11-13T03:14:35.191 [DEBUG] [Thread-27559] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:14:35.199 [DEBUG] [Thread-27559] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:14:35.200 [DEBUG] [Thread-27559] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:14:35.200 [DEBUG] [Thread-27559] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:14:35.200 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:14:35.201 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:14:35.202 [DEBUG] [Thread-27559] [transport.py] [_log()] userauth is OK
2025-11-13T03:14:35.202 [DEBUG] [Thread-27559] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:14:35.202 [DEBUG] [Thread-27559] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:14:35.202 [DEBUG] [Thread-27559] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:14:35.202 [DEBUG] [Thread-27559] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:14:35.227 [INFO] [Thread-27559] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:14:35.227 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:14:35.831 [DEBUG] [Thread-27559] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:14:35.831 [DEBUG] [Thread-27559] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:14:35.831 [DEBUG] [Thread-27559] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:14:35.872 [DEBUG] [Thread-27559] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:14:35.872 [DEBUG] [Thread-27559] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:14:35.875 [DEBUG] [Thread-27559] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:14:35.886 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:14:35.887 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:14:35.888 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:14:35.890 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:14:35.895 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:14:35.897 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:14:35.897 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:14:35.897 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:14:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:14:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.051479 -999.00  +14.20   7.14     40   +0.80 1 1 1 1 1     0    0 15.27 103.28 ZNESW 8.7 7.1 205.2 16.3 14.3 -25.2 14.2 -24.2 13.9 -23.7 14.2 -24.4
2025-11-13T03:14:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:14:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:14:35.898 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.051479
2025-11-13T03:14:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:14:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:14:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:14:35.899 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:14:35.900 [DEBUG] [Thread-27559] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:14:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:14:35.900 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:14:12', tmtdew=15.86, humidity=33.58, cloud=0.0, wind=21.56, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:14:13', seeing=0.86, atlas_timestamp='2025-11-13T01:14:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.011749999999999261, 0.0652500000000007, 0.047999999999998266, -0.0045000000000001705, 0.047250000000000014, -0.020500000000000185, -0.011749999999999261, 0.023999999999999133, 0.0129999999999999, 0.06824999999999903, 0.031000000000000583, 0.13700000000000045, 0.05025000000000013, -0.005500000000001393, -0.025000000000000355, 0.04224999999999923, 0.06550000000000011, 0.08399999999999963, 0.10224999999999973, 0.12899999999999956, 0.087749999999998, 0.02725000000000044, 0.00575000000000081, 0.03799999999999848, 0.12850000000000072, 0.11374999999999957, 0.1479999999999997, 0.2010000000000005, 0.08399999999999963, 0.0710000000000015, 0.04550000000000054, -0.04725000000000179], zp_timestamp='2025-11-13T01:11:00')
2025-11-13T03:14:35.983 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:14:35.997 [DEBUG] [Thread-27562] [transport.py] [_log()] starting thread (client mode): 0x14981000
2025-11-13T03:14:35.997 [DEBUG] [Thread-27562] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:14:36.012 [DEBUG] [Thread-27562] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:14:36.012 [INFO] [Thread-27562] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:14:36.021 [DEBUG] [Thread-27562] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:14:36.021 [DEBUG] [Thread-27562] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:14:36.021 [DEBUG] [Thread-27562] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:14:36.021 [DEBUG] [Thread-27562] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:14:36.021 [DEBUG] [Thread-27562] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:14:36.022 [DEBUG] [Thread-27562] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:14:36.022 [DEBUG] [Thread-27562] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:14:36.022 [DEBUG] [Thread-27562] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:14:36.022 [DEBUG] [Thread-27562] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:14:36.022 [DEBUG] [Thread-27562] [transport.py] [_log()] client lang: <none>
2025-11-13T03:14:36.022 [DEBUG] [Thread-27562] [transport.py] [_log()] server lang: <none>
2025-11-13T03:14:36.022 [DEBUG] [Thread-27562] [transport.py] [_log()] kex follows: False
2025-11-13T03:14:36.022 [DEBUG] [Thread-27562] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:14:36.023 [DEBUG] [Thread-27562] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:14:36.023 [DEBUG] [Thread-27562] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:14:36.023 [DEBUG] [Thread-27562] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:14:36.023 [DEBUG] [Thread-27562] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:14:36.023 [DEBUG] [Thread-27562] [transport.py] [_log()] Compression: none
2025-11-13T03:14:36.023 [DEBUG] [Thread-27562] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:14:36.081 [DEBUG] [Thread-27562] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:14:36.082 [DEBUG] [Thread-27562] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:14:36.083 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:14:36.084 [DEBUG] [Thread-27562] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:14:36.085 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:14:36.141 [DEBUG] [Thread-27562] [transport.py] [_log()] userauth is OK
2025-11-13T03:14:36.141 [DEBUG] [Thread-27562] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:14:36.142 [DEBUG] [Thread-27562] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:14:36.142 [DEBUG] [Thread-27562] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:14:36.142 [DEBUG] [Thread-27562] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:14:36.161 [INFO] [Thread-27562] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:14:36.162 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:14:36.162 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:14:36.982 [DEBUG] [Thread-27562] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:14:36.982 [DEBUG] [Thread-27562] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:14:37.030 [DEBUG] [Thread-27562] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:14:37.030 [DEBUG] [Thread-27562] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:14:37.039 [DEBUG] [Thread-27562] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:14:37.055 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:14:37.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-11-13T03:14:37.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-11-13T03:14:37.073 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:14:37.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:14:37.074 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:14:37.082 [DEBUG] [Thread-27562] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:14:44.978 [DEBUG] [Thread-27564 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:14:59.965 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:14:59.966 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:15:00.030 [DEBUG] [Thread-27565 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:15:07.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:15:07.081 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:15:07.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-11-13T03:15:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 14, 44), 15.7, 33.71, 0.0, 17.86, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:15:07.699 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:14:44
2025-11-13T03:15:07.821 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:15:07.967 [DEBUG] [Thread-27566] [transport.py] [_log()] starting thread (client mode): 0x11f00430
2025-11-13T03:15:07.967 [DEBUG] [Thread-27566] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:15:07.988 [DEBUG] [Thread-27566] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:15:07.988 [INFO] [Thread-27566] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] client lang: <none>
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] server lang: <none>
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] kex follows: False
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] Compression: none
2025-11-13T03:15:07.991 [DEBUG] [Thread-27566] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:15:08.008 [DEBUG] [Thread-27566] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:15:08.009 [DEBUG] [Thread-27566] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:15:08.009 [DEBUG] [Thread-27566] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:15:08.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:15:08.010 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:15:08.011 [DEBUG] [Thread-27566] [transport.py] [_log()] userauth is OK
2025-11-13T03:15:08.011 [DEBUG] [Thread-27566] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:15:08.011 [DEBUG] [Thread-27566] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:15:08.011 [DEBUG] [Thread-27566] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:15:08.012 [DEBUG] [Thread-27566] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:15:08.027 [INFO] [Thread-27566] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:15:08.027 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:15:08.695 [DEBUG] [Thread-27566] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:15:08.695 [DEBUG] [Thread-27566] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:15:08.696 [DEBUG] [Thread-27566] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:15:08.737 [DEBUG] [Thread-27566] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:15:08.737 [DEBUG] [Thread-27566] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:15:08.740 [DEBUG] [Thread-27566] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:15:08.752 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:15:08.753 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:15:08.754 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:15:08.756 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:15:08.763 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:15:08.765 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:15:08.765 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:15:08.765 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:15:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:15:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.051826 -999.00  +14.20   9.48     40   +0.90 1 1 1 1 1     0    0 15.39 105.02 ZNESW 5.7 9.5 235.8 13.9 14.3 -25.0 14.2 -24.2 13.9 -23.9 14.2 -24.5
2025-11-13T03:15:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:15:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:15:08.766 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.051826
2025-11-13T03:15:08.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:15:08.767 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:15:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:15:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:15:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:15:08.768 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:14:44', tmtdew=15.7, humidity=33.71, cloud=0.0, wind=17.86, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:14:45', seeing=0.91, atlas_timestamp='2025-11-13T01:14:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[-0.01025000000000098, 0.011749999999999261, 0.0652500000000007, 0.047999999999998266, -0.0045000000000001705, 0.047250000000000014, -0.020500000000000185, -0.011749999999999261, 0.023999999999999133, 0.0129999999999999, 0.06824999999999903, 0.031000000000000583, 0.13700000000000045, 0.05025000000000013, -0.005500000000001393, -0.025000000000000355, 0.04224999999999923, 0.06550000000000011, 0.08399999999999963, 0.10224999999999973, 0.12899999999999956, 0.087749999999998, 0.02725000000000044, 0.00575000000000081, 0.03799999999999848, 0.12850000000000072, 0.11374999999999957, 0.1479999999999997, 0.2010000000000005, 0.08399999999999963, 0.0710000000000015, 0.04550000000000054, -0.04725000000000179], zp_timestamp='2025-11-13T01:11:00')
2025-11-13T03:15:08.768 [DEBUG] [Thread-27566] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:15:08.856 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:15:08.868 [DEBUG] [Thread-27569] [transport.py] [_log()] starting thread (client mode): 0x11f00730
2025-11-13T03:15:08.868 [DEBUG] [Thread-27569] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:15:08.883 [DEBUG] [Thread-27569] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:15:08.883 [INFO] [Thread-27569] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:15:08.891 [DEBUG] [Thread-27569] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:15:08.891 [DEBUG] [Thread-27569] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:15:08.891 [DEBUG] [Thread-27569] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:15:08.891 [DEBUG] [Thread-27569] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:15:08.891 [DEBUG] [Thread-27569] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:15:08.891 [DEBUG] [Thread-27569] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] client lang: <none>
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] server lang: <none>
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] kex follows: False
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:15:08.892 [DEBUG] [Thread-27569] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:15:08.893 [DEBUG] [Thread-27569] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:15:08.893 [DEBUG] [Thread-27569] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:15:08.893 [DEBUG] [Thread-27569] [transport.py] [_log()] Compression: none
2025-11-13T03:15:08.893 [DEBUG] [Thread-27569] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:15:08.949 [DEBUG] [Thread-27569] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:15:08.950 [DEBUG] [Thread-27569] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:15:08.951 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:15:08.951 [DEBUG] [Thread-27569] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:15:08.952 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:15:09.005 [DEBUG] [Thread-27569] [transport.py] [_log()] userauth is OK
2025-11-13T03:15:09.005 [DEBUG] [Thread-27569] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:15:09.005 [DEBUG] [Thread-27569] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:15:09.005 [DEBUG] [Thread-27569] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:15:09.005 [DEBUG] [Thread-27569] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:15:09.025 [INFO] [Thread-27569] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:15:09.025 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:15:09.025 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:15:09.821 [DEBUG] [Thread-27569] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:15:09.821 [DEBUG] [Thread-27569] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:15:09.869 [DEBUG] [Thread-27569] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:15:09.870 [DEBUG] [Thread-27569] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:15:09.882 [DEBUG] [Thread-27569] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:15:09.892 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:15:09.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-11-13T03:15: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') -> 00000000
2025-11-13T03:15:09.912 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:15:09.912 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:15:09.913 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:15:09.921 [DEBUG] [Thread-27569] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:15:15.062 [DEBUG] [Thread-27571 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:15:16.405 [DEBUG] [Thread-27572 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:15:30.114 [DEBUG] [Thread-27573 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:15:39.925 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:15:39.926 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:15:39.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-11-13T03:15:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 15, 16), 15.66, 33.81, 0.0, 18.17, 14.36, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:15:40.585 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:15:16
2025-11-13T03:15:40.712 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:15:40.865 [DEBUG] [Thread-27574] [transport.py] [_log()] starting thread (client mode): 0x1496b700
2025-11-13T03:15:40.865 [DEBUG] [Thread-27574] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:15:40.884 [DEBUG] [Thread-27574] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:15:40.884 [INFO] [Thread-27574] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] client lang: <none>
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] server lang: <none>
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] kex follows: False
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] Compression: none
2025-11-13T03:15:40.885 [DEBUG] [Thread-27574] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:15:40.896 [DEBUG] [Thread-27574] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:15:40.896 [DEBUG] [Thread-27574] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:15:40.897 [DEBUG] [Thread-27574] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:15:40.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:15:40.897 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:15:40.898 [DEBUG] [Thread-27574] [transport.py] [_log()] userauth is OK
2025-11-13T03:15:40.898 [DEBUG] [Thread-27574] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:15:40.898 [DEBUG] [Thread-27574] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:15:40.898 [DEBUG] [Thread-27574] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:15:40.898 [DEBUG] [Thread-27574] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:15:40.909 [INFO] [Thread-27574] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:15:40.909 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:15:41.504 [DEBUG] [Thread-27574] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:15:41.504 [DEBUG] [Thread-27574] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:15:41.504 [DEBUG] [Thread-27574] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:15:41.545 [DEBUG] [Thread-27574] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:15:41.545 [DEBUG] [Thread-27574] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:15:41.547 [DEBUG] [Thread-27574] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:15:41.559 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:15:41.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:15:41.561 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:15:41.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:15:41.565 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:15:41.565 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:15:41.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:15:41.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:15:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:15:41.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.052173 -999.00  +14.20   8.06     40   +0.80 1 1 1 1 1     0    0 15.38 106.85 ZNESW 10.8 8.1 226.4 16.1 14.3 -25.2 14.2 -24.0 13.9 -23.7 14.2 -24.3
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.052173
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:15:41.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:15:16', tmtdew=15.66, humidity=33.81, cloud=0.0, wind=18.17, temperature=14.36, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:15:17', seeing=0.84, atlas_timestamp='2025-11-13T01:15:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:14:00')
2025-11-13T03:15:41.566 [DEBUG] [Thread-27574] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:15:41.640 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:15:41.652 [DEBUG] [Thread-27577] [transport.py] [_log()] starting thread (client mode): 0x1496a710
2025-11-13T03:15:41.652 [DEBUG] [Thread-27577] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:15:41.668 [DEBUG] [Thread-27577] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:15:41.668 [INFO] [Thread-27577] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] client lang: <none>
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] server lang: <none>
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] kex follows: False
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] Compression: none
2025-11-13T03:15:41.676 [DEBUG] [Thread-27577] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:15:41.731 [DEBUG] [Thread-27577] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:15:41.731 [DEBUG] [Thread-27577] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:15:41.731 [DEBUG] [Thread-27577] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:15:41.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:15:41.731 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:15:41.788 [DEBUG] [Thread-27577] [transport.py] [_log()] userauth is OK
2025-11-13T03:15:41.788 [DEBUG] [Thread-27577] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:15:41.788 [DEBUG] [Thread-27577] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:15:41.788 [DEBUG] [Thread-27577] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:15:41.788 [DEBUG] [Thread-27577] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:15:41.803 [INFO] [Thread-27577] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:15:41.803 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:15:41.803 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:15:42.616 [DEBUG] [Thread-27577] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:15:42.616 [DEBUG] [Thread-27577] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:15:42.665 [DEBUG] [Thread-27577] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:15:42.665 [DEBUG] [Thread-27577] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:15:42.673 [DEBUG] [Thread-27577] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:15:42.681 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:15:42.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-11-13T03:15:42.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-11-13T03:15:42.697 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:15:42.697 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:15:42.697 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:15:42.705 [DEBUG] [Thread-27577] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:15:45.148 [DEBUG] [Thread-27579 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:16:00.172 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:16:00.173 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:16:00.194 [DEBUG] [Thread-27580 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:16:12.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:16:12.728 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:16:12.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-11-13T03:16:13.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 15, 48), 15.69, 33.87, 0.0, 17.96, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:16:13.355 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:15:48
2025-11-13T03:16:13.478 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:16:13.623 [DEBUG] [Thread-27581] [transport.py] [_log()] starting thread (client mode): 0x149805b0
2025-11-13T03:16:13.623 [DEBUG] [Thread-27581] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:16:13.635 [DEBUG] [Thread-27581] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:16:13.635 [INFO] [Thread-27581] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] client lang: <none>
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] server lang: <none>
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] kex follows: False
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:16:13.637 [DEBUG] [Thread-27581] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:16:13.638 [DEBUG] [Thread-27581] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:16:13.638 [DEBUG] [Thread-27581] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:16:13.638 [DEBUG] [Thread-27581] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:16:13.638 [DEBUG] [Thread-27581] [transport.py] [_log()] Compression: none
2025-11-13T03:16:13.638 [DEBUG] [Thread-27581] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:16:13.646 [DEBUG] [Thread-27581] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:16:13.646 [DEBUG] [Thread-27581] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:16:13.646 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:16:13.646 [DEBUG] [Thread-27581] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:16:13.647 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:16:13.647 [DEBUG] [Thread-27581] [transport.py] [_log()] userauth is OK
2025-11-13T03:16:13.647 [DEBUG] [Thread-27581] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:16:13.647 [DEBUG] [Thread-27581] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:16:13.648 [DEBUG] [Thread-27581] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:16:13.648 [DEBUG] [Thread-27581] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:16:13.660 [INFO] [Thread-27581] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:16:13.661 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:16:14.286 [DEBUG] [Thread-27581] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:16:14.286 [DEBUG] [Thread-27581] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:16:14.287 [DEBUG] [Thread-27581] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:16:14.327 [DEBUG] [Thread-27581] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:16:14.327 [DEBUG] [Thread-27581] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:16:14.330 [DEBUG] [Thread-27581] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:16:14.338 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:16:14.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:16:14.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:16:14.342 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:16:14.347 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:16:14.349 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:16:14.349 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:16:14.349 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:16:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:16:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.052868 -999.00  +14.20   7.53     39   +0.70 1 1 1 1 1     0    0 15.95 119.97 ZNESW 6.8 7.5 212.3 15.7 14.3 -25.2 14.1 -24.2 13.9 -23.6 14.2 -24.5
2025-11-13T03:16:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:16:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:16:14.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.052868
2025-11-13T03:16:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:16:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:16:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:16:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:16:14.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:16:14.352 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:15:48', tmtdew=15.69, humidity=33.87, cloud=0.0, wind=17.96, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:15:49', seeing=0.84, atlas_timestamp='2025-11-13T01:16:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:14:00')
2025-11-13T03:16:14.352 [DEBUG] [Thread-27581] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:16:14.434 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:16:14.447 [DEBUG] [Thread-27584] [transport.py] [_log()] starting thread (client mode): 0x149f2b60
2025-11-13T03:16:14.447 [DEBUG] [Thread-27584] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:16:14.462 [DEBUG] [Thread-27584] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:16:14.462 [INFO] [Thread-27584] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:16:14.470 [DEBUG] [Thread-27584] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:16:14.470 [DEBUG] [Thread-27584] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:16:14.470 [DEBUG] [Thread-27584] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:16:14.470 [DEBUG] [Thread-27584] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] client lang: <none>
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] server lang: <none>
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] kex follows: False
2025-11-13T03:16:14.471 [DEBUG] [Thread-27584] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:16:14.472 [DEBUG] [Thread-27584] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:16:14.472 [DEBUG] [Thread-27584] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:16:14.472 [DEBUG] [Thread-27584] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:16:14.472 [DEBUG] [Thread-27584] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:16:14.472 [DEBUG] [Thread-27584] [transport.py] [_log()] Compression: none
2025-11-13T03:16:14.472 [DEBUG] [Thread-27584] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:16:14.529 [DEBUG] [Thread-27584] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:16:14.529 [DEBUG] [Thread-27584] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:16:14.530 [DEBUG] [Thread-27584] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:16:14.530 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:16:14.531 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:16:14.585 [DEBUG] [Thread-27584] [transport.py] [_log()] userauth is OK
2025-11-13T03:16:14.585 [DEBUG] [Thread-27584] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:16:14.585 [DEBUG] [Thread-27584] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:16:14.585 [DEBUG] [Thread-27584] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:16:14.585 [DEBUG] [Thread-27584] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:16:14.604 [INFO] [Thread-27584] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:16:14.604 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:16:14.605 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:16:15.229 [DEBUG] [Thread-27586 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:16:15.403 [DEBUG] [Thread-27584] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:16:15.403 [DEBUG] [Thread-27584] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:16:15.451 [DEBUG] [Thread-27584] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:16:15.451 [DEBUG] [Thread-27584] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:16:15.460 [DEBUG] [Thread-27584] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:16:15.468 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:16:15.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-11-13T03:16:15.476 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:16:15.485 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:16:15.486 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:16:15.486 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:16:15.494 [DEBUG] [Thread-27584] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:16:16.475 [DEBUG] [Thread-27587 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:16:30.279 [DEBUG] [Thread-27588 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:16:45.315 [DEBUG] [Thread-27589 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:16:45.516 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:16:45.517 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:16:45.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-11-13T03:16:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 16, 20), 15.73, 33.76, 0.0, 18.44, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:16:46.148 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:16:20
2025-11-13T03:16:46.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:16:46.417 [DEBUG] [Thread-27590] [transport.py] [_log()] starting thread (client mode): 0x1496be20
2025-11-13T03:16:46.417 [DEBUG] [Thread-27590] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:16:46.437 [DEBUG] [Thread-27590] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:16:46.437 [INFO] [Thread-27590] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:16:46.440 [DEBUG] [Thread-27590] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:16:46.446 [DEBUG] [Thread-27590] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:16:46.446 [DEBUG] [Thread-27590] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:16:46.446 [DEBUG] [Thread-27590] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] client lang: <none>
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] server lang: <none>
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] kex follows: False
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] Compression: none
2025-11-13T03:16:46.447 [DEBUG] [Thread-27590] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:16:46.465 [DEBUG] [Thread-27590] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:16:46.466 [DEBUG] [Thread-27590] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:16:46.466 [DEBUG] [Thread-27590] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:16:46.466 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:16:46.467 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:16:46.468 [DEBUG] [Thread-27590] [transport.py] [_log()] userauth is OK
2025-11-13T03:16:46.468 [DEBUG] [Thread-27590] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:16:46.468 [DEBUG] [Thread-27590] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:16:46.468 [DEBUG] [Thread-27590] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:16:46.468 [DEBUG] [Thread-27590] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:16:46.503 [INFO] [Thread-27590] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:16:46.504 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:16:47.116 [DEBUG] [Thread-27590] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:16:47.116 [DEBUG] [Thread-27590] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:16:47.116 [DEBUG] [Thread-27590] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:16:47.157 [DEBUG] [Thread-27590] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:16:47.157 [DEBUG] [Thread-27590] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:16:47.162 [DEBUG] [Thread-27590] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:16:47.167 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:16:47.167 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:16:47.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:16:47.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:16:47.178 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:16:47.180 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:16:47.180 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:16:47.180 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:16:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:16:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.052868 -999.00  +14.20   7.53     39   +0.70 1 1 1 1 1     0    0 15.95 119.97 ZNESW 6.8 7.5 212.3 15.7 14.3 -25.2 14.1 -24.2 13.9 -23.6 14.2 -24.5
2025-11-13T03:16:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:16:47.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:16:47.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.052868
2025-11-13T03:16:47.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:16:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:16:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:16:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:16:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:16:47.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:16:20', tmtdew=15.73, humidity=33.76, cloud=0.0, wind=18.44, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:16:21', seeing=0.96, atlas_timestamp='2025-11-13T01:16:07.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:14:00')
2025-11-13T03:16:47.183 [DEBUG] [Thread-27590] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:16:47.267 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:16:47.278 [DEBUG] [Thread-27593] [transport.py] [_log()] starting thread (client mode): 0x19ddb6a0
2025-11-13T03:16:47.279 [DEBUG] [Thread-27593] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:16:47.293 [DEBUG] [Thread-27593] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:16:47.293 [INFO] [Thread-27593] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:16:47.301 [DEBUG] [Thread-27593] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] client lang: <none>
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] server lang: <none>
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] kex follows: False
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] Compression: none
2025-11-13T03:16:47.302 [DEBUG] [Thread-27593] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:16:47.362 [DEBUG] [Thread-27593] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:16:47.363 [DEBUG] [Thread-27593] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:16:47.363 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:16:47.364 [DEBUG] [Thread-27593] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:16:47.365 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:16:47.421 [DEBUG] [Thread-27593] [transport.py] [_log()] userauth is OK
2025-11-13T03:16:47.421 [DEBUG] [Thread-27593] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:16:47.421 [DEBUG] [Thread-27593] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:16:47.421 [DEBUG] [Thread-27593] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:16:47.422 [DEBUG] [Thread-27593] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:16:47.440 [INFO] [Thread-27593] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:16:47.441 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:16:47.441 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:16:48.280 [DEBUG] [Thread-27593] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:16:48.281 [DEBUG] [Thread-27593] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:16:48.329 [DEBUG] [Thread-27593] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:16:48.329 [DEBUG] [Thread-27593] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:16:48.338 [DEBUG] [Thread-27593] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:16:48.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:16:48.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-11-13T03:16:48.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-11-13T03:16:48.366 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:16:48.366 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:16:48.367 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:16:48.375 [DEBUG] [Thread-27593] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:17:00.347 [DEBUG] [Thread-27595 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:17:00.376 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:17:00.376 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:17:15.398 [DEBUG] [Thread-27596 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:17:16.530 [DEBUG] [Thread-27597 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:17:18.395 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:17:18.395 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:17:18.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-11-13T03:17:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 16, 52), 15.97, 33.54, 0.0, 18.86, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:17:19.038 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:16:52
2025-11-13T03:17:19.162 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:17:19.313 [DEBUG] [Thread-27598] [transport.py] [_log()] starting thread (client mode): 0x149f3490
2025-11-13T03:17:19.313 [DEBUG] [Thread-27598] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:17:19.334 [DEBUG] [Thread-27598] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:17:19.334 [INFO] [Thread-27598] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:17:19.337 [DEBUG] [Thread-27598] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] client lang: <none>
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] server lang: <none>
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] kex follows: False
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] Compression: none
2025-11-13T03:17:19.338 [DEBUG] [Thread-27598] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:17:19.356 [DEBUG] [Thread-27598] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:17:19.356 [DEBUG] [Thread-27598] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:17:19.357 [DEBUG] [Thread-27598] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:17:19.357 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:17:19.358 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:17:19.359 [DEBUG] [Thread-27598] [transport.py] [_log()] userauth is OK
2025-11-13T03:17:19.359 [DEBUG] [Thread-27598] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:17:19.359 [DEBUG] [Thread-27598] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:17:19.359 [DEBUG] [Thread-27598] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:17:19.359 [DEBUG] [Thread-27598] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:17:19.374 [INFO] [Thread-27598] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:17:19.375 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:17:20.113 [DEBUG] [Thread-27598] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:17:20.113 [DEBUG] [Thread-27598] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:17:20.114 [DEBUG] [Thread-27598] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:17:20.154 [DEBUG] [Thread-27598] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:17:20.154 [DEBUG] [Thread-27598] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:17:20.158 [DEBUG] [Thread-27598] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:17:20.170 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:17:20.170 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:17:20.172 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:17:20.174 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:17:20.180 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:17:20.181 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:17:20.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:17:20.182 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:17:20.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:17:20.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.053215 -999.00  +14.20   5.60     39   +0.60 1 1 1 1 1     0    0 16.28 126.76 ZNESW 9.9 5.6 208.8 14.9 14.3 -24.9 14.2 -24.1 13.9 -23.7 14.2 -24.4
2025-11-13T03:17:20.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:17:20.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:17:20.182 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.053215
2025-11-13T03:17:20.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:17:20.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:17:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:17:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:17:20.184 [DEBUG] [Thread-27598] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:17:20.184 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:17:20.185 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:16:52', tmtdew=15.97, humidity=33.54, cloud=0.0, wind=18.86, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:16:53', seeing=1.03, atlas_timestamp='2025-11-13T01:16:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:14:00')
2025-11-13T03:17:20.268 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:17:20.281 [DEBUG] [Thread-27601] [transport.py] [_log()] starting thread (client mode): 0x149f2fe0
2025-11-13T03:17:20.282 [DEBUG] [Thread-27601] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:17:20.297 [DEBUG] [Thread-27601] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:17:20.297 [INFO] [Thread-27601] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:17:20.305 [DEBUG] [Thread-27601] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:17:20.305 [DEBUG] [Thread-27601] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:17:20.305 [DEBUG] [Thread-27601] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] client lang: <none>
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] server lang: <none>
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] kex follows: False
2025-11-13T03:17:20.306 [DEBUG] [Thread-27601] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:17:20.307 [DEBUG] [Thread-27601] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:17:20.307 [DEBUG] [Thread-27601] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:17:20.307 [DEBUG] [Thread-27601] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:17:20.307 [DEBUG] [Thread-27601] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:17:20.307 [DEBUG] [Thread-27601] [transport.py] [_log()] Compression: none
2025-11-13T03:17:20.307 [DEBUG] [Thread-27601] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:17:20.364 [DEBUG] [Thread-27601] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:17:20.365 [DEBUG] [Thread-27601] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:17:20.366 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:17:20.366 [DEBUG] [Thread-27601] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:17:20.367 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:17:20.420 [DEBUG] [Thread-27601] [transport.py] [_log()] userauth is OK
2025-11-13T03:17:20.421 [DEBUG] [Thread-27601] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:17:20.421 [DEBUG] [Thread-27601] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:17:20.421 [DEBUG] [Thread-27601] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:17:20.421 [DEBUG] [Thread-27601] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:17:20.440 [INFO] [Thread-27601] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:17:20.440 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:17:20.442 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:17:21.253 [DEBUG] [Thread-27601] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:17:21.253 [DEBUG] [Thread-27601] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:17:21.304 [DEBUG] [Thread-27601] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:17:21.304 [DEBUG] [Thread-27601] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:17:21.314 [DEBUG] [Thread-27601] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:17:21.323 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:17:21.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-11-13T03:17:21.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-11-13T03:17:21.342 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:17:21.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:17:21.343 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:17:21.351 [DEBUG] [Thread-27601] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:17:30.433 [DEBUG] [Thread-27603 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:17:45.483 [DEBUG] [Thread-27604 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:17:51.373 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:17:51.374 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:17:51.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-11-13T03:17:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 17, 24), 16.03, 33.41, 0.0, 17.36, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:17:52.010 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:17:24
2025-11-13T03:17:52.132 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:17:52.277 [DEBUG] [Thread-27605] [transport.py] [_log()] starting thread (client mode): 0x1737c550
2025-11-13T03:17:52.278 [DEBUG] [Thread-27605] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:17:52.301 [DEBUG] [Thread-27605] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:17:52.301 [INFO] [Thread-27605] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] client lang: <none>
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] server lang: <none>
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] kex follows: False
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] Compression: none
2025-11-13T03:17:52.305 [DEBUG] [Thread-27605] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:17:52.322 [DEBUG] [Thread-27605] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:17:52.323 [DEBUG] [Thread-27605] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:17:52.323 [DEBUG] [Thread-27605] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:17:52.323 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:17:52.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:17:52.325 [DEBUG] [Thread-27605] [transport.py] [_log()] userauth is OK
2025-11-13T03:17:52.325 [DEBUG] [Thread-27605] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:17:52.326 [DEBUG] [Thread-27605] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:17:52.326 [DEBUG] [Thread-27605] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:17:52.326 [DEBUG] [Thread-27605] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:17:52.339 [INFO] [Thread-27605] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:17:52.340 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:17:52.993 [DEBUG] [Thread-27605] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:17:52.993 [DEBUG] [Thread-27605] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:17:52.994 [DEBUG] [Thread-27605] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:17:53.034 [DEBUG] [Thread-27605] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:17:53.035 [DEBUG] [Thread-27605] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:17:53.038 [DEBUG] [Thread-27605] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:17:53.050 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:17:53.051 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:17:53.053 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:17:53.055 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:17:53.061 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:17:53.063 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:17:53.063 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:17:53.063 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:17:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:17:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.053562 -999.00  +14.20   5.68     39   +0.70 1 1 1 1 1     0    0 16.55 126.78 ZNESW 6.4 5.7 220.8 11.9 14.3 -25.2 14.2 -24.1 13.9 -23.8 14.2 -24.5
2025-11-13T03:17:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:17:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:17:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.053562
2025-11-13T03:17:53.064 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:17:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:17:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:17:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:17:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:17:53.065 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:17:24', tmtdew=16.03, humidity=33.41, cloud=0.0, wind=17.36, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:17:25', seeing=1.03, atlas_timestamp='2025-11-13T01:17:07.757', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:14:00')
2025-11-13T03:17:53.066 [DEBUG] [Thread-27605] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:17:53.149 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:17:53.162 [DEBUG] [Thread-27608] [transport.py] [_log()] starting thread (client mode): 0x1493f9d0
2025-11-13T03:17:53.163 [DEBUG] [Thread-27608] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:17:53.177 [DEBUG] [Thread-27608] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:17:53.177 [INFO] [Thread-27608] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:17:53.185 [DEBUG] [Thread-27608] [transport.py] [_log()] client lang: <none>
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] server lang: <none>
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] kex follows: False
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] Compression: none
2025-11-13T03:17:53.186 [DEBUG] [Thread-27608] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:17:53.245 [DEBUG] [Thread-27608] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:17:53.245 [DEBUG] [Thread-27608] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:17:53.246 [DEBUG] [Thread-27608] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:17:53.246 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:17:53.247 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:17:53.301 [DEBUG] [Thread-27608] [transport.py] [_log()] userauth is OK
2025-11-13T03:17:53.302 [DEBUG] [Thread-27608] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:17:53.302 [DEBUG] [Thread-27608] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:17:53.302 [DEBUG] [Thread-27608] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:17:53.302 [DEBUG] [Thread-27608] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:17:53.320 [INFO] [Thread-27608] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:17:53.320 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:17:53.321 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:17:54.114 [DEBUG] [Thread-27608] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:17:54.114 [DEBUG] [Thread-27608] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:17:54.163 [DEBUG] [Thread-27608] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:17:54.163 [DEBUG] [Thread-27608] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:17:54.172 [DEBUG] [Thread-27608] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:17:54.181 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:17:54.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:17:54.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:17:54.200 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:17:54.200 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:17:54.201 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:17:54.209 [DEBUG] [Thread-27608] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:18:00.520 [DEBUG] [Thread-27610 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:18:00.578 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:18:00.579 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:18:15.573 [DEBUG] [Thread-27611 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:18:16.588 [DEBUG] [Thread-27612 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:18:24.231 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:18:24.232 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:18:24.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-11-13T03:18:24.869 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 17, 56), 16.04, 33.39, 0.0, 17.8, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:18:24.870 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:17:56
2025-11-13T03:18:24.992 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:18:25.137 [DEBUG] [Thread-27613] [transport.py] [_log()] starting thread (client mode): 0x19dd9d80
2025-11-13T03:18:25.137 [DEBUG] [Thread-27613] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:18:25.158 [DEBUG] [Thread-27613] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:18:25.158 [INFO] [Thread-27613] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] client lang: <none>
2025-11-13T03:18:25.161 [DEBUG] [Thread-27613] [transport.py] [_log()] server lang: <none>
2025-11-13T03:18:25.162 [DEBUG] [Thread-27613] [transport.py] [_log()] kex follows: False
2025-11-13T03:18:25.162 [DEBUG] [Thread-27613] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:18:25.162 [DEBUG] [Thread-27613] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:18:25.162 [DEBUG] [Thread-27613] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:18:25.162 [DEBUG] [Thread-27613] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:18:25.162 [DEBUG] [Thread-27613] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:18:25.162 [DEBUG] [Thread-27613] [transport.py] [_log()] Compression: none
2025-11-13T03:18:25.162 [DEBUG] [Thread-27613] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:18:25.178 [DEBUG] [Thread-27613] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:18:25.178 [DEBUG] [Thread-27613] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:18:25.179 [DEBUG] [Thread-27613] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:18:25.179 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:18:25.180 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:18:25.181 [DEBUG] [Thread-27613] [transport.py] [_log()] userauth is OK
2025-11-13T03:18:25.181 [DEBUG] [Thread-27613] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:18:25.181 [DEBUG] [Thread-27613] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:18:25.181 [DEBUG] [Thread-27613] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:18:25.181 [DEBUG] [Thread-27613] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:18:25.217 [INFO] [Thread-27613] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:18:25.219 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:18:26.019 [DEBUG] [Thread-27613] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:18:26.019 [DEBUG] [Thread-27613] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:18:26.020 [DEBUG] [Thread-27613] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:18:26.060 [DEBUG] [Thread-27613] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:18:26.061 [DEBUG] [Thread-27613] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:18:26.064 [DEBUG] [Thread-27613] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:18:26.075 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:18:26.076 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:18:26.077 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:18:26.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:18:26.085 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:18:26.086 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:18:26.086 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:18:26.087 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:18:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:18:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.053909 -999.00  +14.20   7.39     39   +0.60 1 1 1 1 1     0    0 16.32 128.37 ZNESW 6.8 7.4 232.5 14.5 14.3 -25.2 14.2 -24.2 13.9 -23.6 14.2 -24.5
2025-11-13T03:18:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:18:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:18:26.087 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.053909
2025-11-13T03:18:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:18:26.088 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:18:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:18:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:18:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:18:26.089 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:17:56', tmtdew=16.04, humidity=33.39, cloud=0.0, wind=17.8, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:17:57', seeing=1.03, atlas_timestamp='2025-11-13T01:17:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:14:00')
2025-11-13T03:18:26.089 [DEBUG] [Thread-27613] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:18:26.172 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:18:26.187 [DEBUG] [Thread-27616] [transport.py] [_log()] starting thread (client mode): 0x11f01ff0
2025-11-13T03:18:26.187 [DEBUG] [Thread-27616] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:18:26.204 [DEBUG] [Thread-27616] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:18:26.204 [INFO] [Thread-27616] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] client lang: <none>
2025-11-13T03:18:26.215 [DEBUG] [Thread-27616] [transport.py] [_log()] server lang: <none>
2025-11-13T03:18:26.216 [DEBUG] [Thread-27616] [transport.py] [_log()] kex follows: False
2025-11-13T03:18:26.216 [DEBUG] [Thread-27616] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:18:26.216 [DEBUG] [Thread-27616] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:18:26.216 [DEBUG] [Thread-27616] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:18:26.216 [DEBUG] [Thread-27616] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:18:26.216 [DEBUG] [Thread-27616] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:18:26.216 [DEBUG] [Thread-27616] [transport.py] [_log()] Compression: none
2025-11-13T03:18:26.216 [DEBUG] [Thread-27616] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:18:26.285 [DEBUG] [Thread-27616] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:18:26.286 [DEBUG] [Thread-27616] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:18:26.286 [DEBUG] [Thread-27616] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:18:26.286 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:18:26.287 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:18:26.344 [DEBUG] [Thread-27616] [transport.py] [_log()] userauth is OK
2025-11-13T03:18:26.344 [DEBUG] [Thread-27616] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:18:26.344 [DEBUG] [Thread-27616] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:18:26.345 [DEBUG] [Thread-27616] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:18:26.345 [DEBUG] [Thread-27616] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:18:26.363 [INFO] [Thread-27616] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:18:26.364 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:18:26.364 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:18:27.198 [DEBUG] [Thread-27616] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:18:27.199 [DEBUG] [Thread-27616] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:18:27.246 [DEBUG] [Thread-27616] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:18:27.246 [DEBUG] [Thread-27616] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:18:27.254 [DEBUG] [Thread-27616] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:18:27.262 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:18:27.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-11-13T03:18:27.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-11-13T03:18:27.277 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:18:27.277 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:18:27.277 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:18:27.285 [DEBUG] [Thread-27616] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:18:30.600 [DEBUG] [Thread-27618 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:18:45.651 [DEBUG] [Thread-27619 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:18:57.307 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:18:57.308 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:18:57.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-11-13T03:18:57.982 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 18, 28), 16.05, 33.36, 0.0, 16.59, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:18:57.983 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:18:28
2025-11-13T03:18:58.112 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:18:58.264 [DEBUG] [Thread-27620] [transport.py] [_log()] starting thread (client mode): 0x1496bc70
2025-11-13T03:18:58.264 [DEBUG] [Thread-27620] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:18:58.285 [DEBUG] [Thread-27620] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:18:58.285 [INFO] [Thread-27620] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] client lang: <none>
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] server lang: <none>
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] kex follows: False
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] Compression: none
2025-11-13T03:18:58.288 [DEBUG] [Thread-27620] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:18:58.304 [DEBUG] [Thread-27620] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:18:58.304 [DEBUG] [Thread-27620] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:18:58.304 [DEBUG] [Thread-27620] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:18:58.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:18:58.304 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:18:58.305 [DEBUG] [Thread-27620] [transport.py] [_log()] userauth is OK
2025-11-13T03:18:58.305 [DEBUG] [Thread-27620] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:18:58.305 [DEBUG] [Thread-27620] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:18:58.305 [DEBUG] [Thread-27620] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:18:58.305 [DEBUG] [Thread-27620] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:18:58.318 [INFO] [Thread-27620] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:18:58.318 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:18:58.942 [DEBUG] [Thread-27620] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:18:58.942 [DEBUG] [Thread-27620] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:18:58.943 [DEBUG] [Thread-27620] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:18:58.983 [DEBUG] [Thread-27620] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:18:58.984 [DEBUG] [Thread-27620] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:18:58.986 [DEBUG] [Thread-27620] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:18:58.997 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:18:58.997 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:18:58.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:18:59.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:18:59.005 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:18:59.007 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:18:59.007 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:18:59.007 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:18:59.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:18:59.007 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.054257 -999.00  +14.20   9.06     39   +0.60 1 1 1 1 1     0    0 16.69 131.67 ZNESW 10.5 9.1 216.9 15.3 14.3 -25.1 14.2 -24.2 13.9 -23.9 14.3 -24.4
2025-11-13T03:18:59.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:18:59.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:18:59.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.054257
2025-11-13T03:18:59.008 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:18:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:18:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:18:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:18:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:18:59.009 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:18:28', tmtdew=16.05, humidity=33.36, cloud=0.0, wind=16.59, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:18:29', seeing=1.03, atlas_timestamp='2025-11-13T01:18:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:17:00')
2025-11-13T03:18:59.009 [DEBUG] [Thread-27620] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:18:59.092 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:18:59.108 [DEBUG] [Thread-27623] [transport.py] [_log()] starting thread (client mode): 0x19dda050
2025-11-13T03:18:59.108 [DEBUG] [Thread-27623] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:18:59.122 [DEBUG] [Thread-27623] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:18:59.123 [INFO] [Thread-27623] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:18:59.130 [DEBUG] [Thread-27623] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:18:59.130 [DEBUG] [Thread-27623] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:18:59.130 [DEBUG] [Thread-27623] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] client lang: <none>
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] server lang: <none>
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] kex follows: False
2025-11-13T03:18:59.131 [DEBUG] [Thread-27623] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:18:59.132 [DEBUG] [Thread-27623] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:18:59.132 [DEBUG] [Thread-27623] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:18:59.132 [DEBUG] [Thread-27623] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:18:59.132 [DEBUG] [Thread-27623] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:18:59.132 [DEBUG] [Thread-27623] [transport.py] [_log()] Compression: none
2025-11-13T03:18:59.132 [DEBUG] [Thread-27623] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:18:59.188 [DEBUG] [Thread-27623] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:18:59.188 [DEBUG] [Thread-27623] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:18:59.189 [DEBUG] [Thread-27623] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:18:59.189 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:18:59.190 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:18:59.244 [DEBUG] [Thread-27623] [transport.py] [_log()] userauth is OK
2025-11-13T03:18:59.244 [DEBUG] [Thread-27623] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:18:59.244 [DEBUG] [Thread-27623] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:18:59.244 [DEBUG] [Thread-27623] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:18:59.245 [DEBUG] [Thread-27623] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:18:59.263 [INFO] [Thread-27623] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:18:59.263 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:18:59.263 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:19:00.075 [DEBUG] [Thread-27623] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:19:00.075 [DEBUG] [Thread-27623] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:19:00.122 [DEBUG] [Thread-27623] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:19:00.122 [DEBUG] [Thread-27623] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:19:00.131 [DEBUG] [Thread-27623] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:19:00.139 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:19:00.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-11-13T03:19:00.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-11-13T03:19:00.156 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:19:00.156 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:19:00.157 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:19:00.164 [DEBUG] [Thread-27623] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:19:00.684 [DEBUG] [Thread-27625 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:19:00.781 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:19:00.782 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:19:15.743 [DEBUG] [Thread-27626 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:19:16.643 [DEBUG] [Thread-27627 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:19:30.187 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:19:30.196 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:19:30.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:19:30.780 [DEBUG] [Thread-27628 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:19:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 19), 16.16, 32.83, 0.0, 18.28, 14.46, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:19:30.845 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:19:00
2025-11-13T03:19:30.968 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:19:31.113 [DEBUG] [Thread-27629] [transport.py] [_log()] starting thread (client mode): 0x1737e380
2025-11-13T03:19:31.113 [DEBUG] [Thread-27629] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:19:31.133 [DEBUG] [Thread-27629] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:19:31.133 [INFO] [Thread-27629] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:19:31.136 [DEBUG] [Thread-27629] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] client lang: <none>
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] server lang: <none>
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] kex follows: False
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:19:31.137 [DEBUG] [Thread-27629] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:19:31.138 [DEBUG] [Thread-27629] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:19:31.138 [DEBUG] [Thread-27629] [transport.py] [_log()] Compression: none
2025-11-13T03:19:31.138 [DEBUG] [Thread-27629] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:19:31.157 [DEBUG] [Thread-27629] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:19:31.157 [DEBUG] [Thread-27629] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:19:31.158 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:19:31.158 [DEBUG] [Thread-27629] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:19:31.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:19:31.160 [DEBUG] [Thread-27629] [transport.py] [_log()] userauth is OK
2025-11-13T03:19:31.160 [DEBUG] [Thread-27629] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:19:31.160 [DEBUG] [Thread-27629] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:19:31.160 [DEBUG] [Thread-27629] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:19:31.161 [DEBUG] [Thread-27629] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:19:31.183 [INFO] [Thread-27629] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:19:31.184 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:19:31.985 [DEBUG] [Thread-27629] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:19:31.985 [DEBUG] [Thread-27629] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:19:31.985 [DEBUG] [Thread-27629] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:19:32.026 [DEBUG] [Thread-27629] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:19:32.026 [DEBUG] [Thread-27629] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:19:32.029 [DEBUG] [Thread-27629] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:19:32.040 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:19:32.040 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:19:32.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:19:32.041 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:19:32.044 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:19:32.045 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:19:32.045 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.054604 -999.00  +14.20  12.36     39   +0.60 1 1 1 1 1     0    0 16.55 132.80 ZNESW 9.2 12.4 221.6 15.9 14.3 -25.1 14.2 -24.2 13.9 -23.7 14.2 -24.6
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.054604
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:19:32.045 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:19:00', tmtdew=16.16, humidity=32.83, cloud=0.0, wind=18.28, temperature=14.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:19:01', seeing=1.03, atlas_timestamp='2025-11-13T01:18:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:17:00')
2025-11-13T03:19:32.046 [DEBUG] [Thread-27629] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:19:32.124 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:19:32.135 [DEBUG] [Thread-27632] [transport.py] [_log()] starting thread (client mode): 0x1498a080
2025-11-13T03:19:32.135 [DEBUG] [Thread-27632] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:19:32.153 [DEBUG] [Thread-27632] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:19:32.153 [INFO] [Thread-27632] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:19:32.160 [DEBUG] [Thread-27632] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:19:32.160 [DEBUG] [Thread-27632] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] client lang: <none>
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] server lang: <none>
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] kex follows: False
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] Compression: none
2025-11-13T03:19:32.161 [DEBUG] [Thread-27632] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:19:32.219 [DEBUG] [Thread-27632] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:19:32.219 [DEBUG] [Thread-27632] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:19:32.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:19:32.220 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:19:32.220 [DEBUG] [Thread-27632] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:19:32.276 [DEBUG] [Thread-27632] [transport.py] [_log()] userauth is OK
2025-11-13T03:19:32.276 [DEBUG] [Thread-27632] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:19:32.276 [DEBUG] [Thread-27632] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:19:32.276 [DEBUG] [Thread-27632] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:19:32.276 [DEBUG] [Thread-27632] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:19:32.291 [INFO] [Thread-27632] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:19:32.291 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:19:32.291 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:19:33.149 [DEBUG] [Thread-27632] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:19:33.149 [DEBUG] [Thread-27632] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:19:33.197 [DEBUG] [Thread-27632] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:19:33.197 [DEBUG] [Thread-27632] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:19:33.205 [DEBUG] [Thread-27632] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:19:33.213 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:19:33.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-11-13T03:19:33.221 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:19:33.229 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:19:33.229 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:19:33.229 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:19:33.237 [DEBUG] [Thread-27632] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:19:45.809 [DEBUG] [Thread-27634 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:20:00.859 [DEBUG] [Thread-27635 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:20:00.984 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:20:00.985 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:20:03.260 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:20:03.260 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:20:03.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-11-13T03:20:03.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 19, 32), 16.17, 32.83, 0.0, 16.69, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:20:03.893 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:19:32
2025-11-13T03:20:04.016 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:20:04.161 [DEBUG] [Thread-27636] [transport.py] [_log()] starting thread (client mode): 0x1496bee0
2025-11-13T03:20:04.161 [DEBUG] [Thread-27636] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:20:04.180 [DEBUG] [Thread-27636] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:20:04.181 [INFO] [Thread-27636] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] client lang: <none>
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] server lang: <none>
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] kex follows: False
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] Compression: none
2025-11-13T03:20:04.184 [DEBUG] [Thread-27636] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:20:04.203 [DEBUG] [Thread-27636] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:20:04.203 [DEBUG] [Thread-27636] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:20:04.204 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:20:04.204 [DEBUG] [Thread-27636] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:20:04.205 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:20:04.206 [DEBUG] [Thread-27636] [transport.py] [_log()] userauth is OK
2025-11-13T03:20:04.207 [DEBUG] [Thread-27636] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:20:04.207 [DEBUG] [Thread-27636] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:20:04.207 [DEBUG] [Thread-27636] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:20:04.207 [DEBUG] [Thread-27636] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:20:04.242 [INFO] [Thread-27636] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:20:04.242 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:20:05.049 [DEBUG] [Thread-27636] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:20:05.049 [DEBUG] [Thread-27636] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:20:05.050 [DEBUG] [Thread-27636] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:20:05.090 [DEBUG] [Thread-27636] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:20:05.090 [DEBUG] [Thread-27636] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:20:05.092 [DEBUG] [Thread-27636] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:20:05.106 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:20:05.107 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:20:05.108 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:20:05.109 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:20:05.115 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:20:05.116 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:20:05.117 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:20:05.117 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:20:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:20:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.055298 -999.00  +14.20   8.65     39   +0.50 1 1 1 1 1     0    0 17.20 141.77 ZNESW 8.3 8.7 209.3 14.2 14.3 -25.1 14.2 -24.3 13.9 -23.9 14.3 -24.6
2025-11-13T03:20:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:20:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:20:05.117 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.055298
2025-11-13T03:20:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:20:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:20:05.118 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:20:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:20:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:20:05.119 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:19:32', tmtdew=16.17, humidity=32.83, cloud=0.0, wind=16.69, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:19:33', seeing=0.93, atlas_timestamp='2025-11-13T01:19:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:17:00')
2025-11-13T03:20:05.119 [DEBUG] [Thread-27636] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:20:05.202 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:20:05.214 [DEBUG] [Thread-27639] [transport.py] [_log()] starting thread (client mode): 0x14923850
2025-11-13T03:20:05.214 [DEBUG] [Thread-27639] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:20:05.229 [DEBUG] [Thread-27639] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:20:05.230 [INFO] [Thread-27639] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] client lang: <none>
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] server lang: <none>
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] kex follows: False
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:20:05.237 [DEBUG] [Thread-27639] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:20:05.238 [DEBUG] [Thread-27639] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:20:05.238 [DEBUG] [Thread-27639] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:20:05.238 [DEBUG] [Thread-27639] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:20:05.238 [DEBUG] [Thread-27639] [transport.py] [_log()] Compression: none
2025-11-13T03:20:05.238 [DEBUG] [Thread-27639] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:20:05.298 [DEBUG] [Thread-27639] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:20:05.298 [DEBUG] [Thread-27639] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:20:05.299 [DEBUG] [Thread-27639] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:20:05.299 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:20:05.300 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:20:05.356 [DEBUG] [Thread-27639] [transport.py] [_log()] userauth is OK
2025-11-13T03:20:05.356 [DEBUG] [Thread-27639] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:20:05.356 [DEBUG] [Thread-27639] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:20:05.356 [DEBUG] [Thread-27639] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:20:05.356 [DEBUG] [Thread-27639] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:20:05.370 [INFO] [Thread-27639] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:20:05.370 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:20:05.372 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:20:06.200 [DEBUG] [Thread-27639] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:20:06.200 [DEBUG] [Thread-27639] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:20:06.248 [DEBUG] [Thread-27639] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:20:06.248 [DEBUG] [Thread-27639] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:20:06.256 [DEBUG] [Thread-27639] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:20:06.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:20:06.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-11-13T03:20: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') -> 00000000
2025-11-13T03:20:06.279 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:20:06.279 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:20:06.279 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:20:06.287 [DEBUG] [Thread-27639] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:20:15.886 [DEBUG] [Thread-27641 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:20:16.721 [DEBUG] [Thread-27642 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:20:30.929 [DEBUG] [Thread-27643 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:20:36.310 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:20:36.310 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:20:36.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-11-13T03:20:36.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 20, 4), 16.21, 32.71, 0.0, 18.53, 14.41, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:20:36.962 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:20:04
2025-11-13T03:20:37.086 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:20:37.233 [DEBUG] [Thread-27644] [transport.py] [_log()] starting thread (client mode): 0x19ddb790
2025-11-13T03:20:37.233 [DEBUG] [Thread-27644] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:20:37.252 [DEBUG] [Thread-27644] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:20:37.252 [INFO] [Thread-27644] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:20:37.253 [DEBUG] [Thread-27644] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] client lang: <none>
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] server lang: <none>
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] kex follows: False
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:20:37.254 [DEBUG] [Thread-27644] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:20:37.255 [DEBUG] [Thread-27644] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:20:37.255 [DEBUG] [Thread-27644] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:20:37.255 [DEBUG] [Thread-27644] [transport.py] [_log()] Compression: none
2025-11-13T03:20:37.255 [DEBUG] [Thread-27644] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:20:37.269 [DEBUG] [Thread-27644] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:20:37.270 [DEBUG] [Thread-27644] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:20:37.271 [DEBUG] [Thread-27644] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:20:37.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:20:37.272 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:20:37.273 [DEBUG] [Thread-27644] [transport.py] [_log()] userauth is OK
2025-11-13T03:20:37.273 [DEBUG] [Thread-27644] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:20:37.274 [DEBUG] [Thread-27644] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:20:37.274 [DEBUG] [Thread-27644] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:20:37.274 [DEBUG] [Thread-27644] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:20:37.293 [INFO] [Thread-27644] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:20:37.294 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:20:38.186 [DEBUG] [Thread-27644] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:20:38.186 [DEBUG] [Thread-27644] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:20:38.186 [DEBUG] [Thread-27644] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:20:38.227 [DEBUG] [Thread-27644] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:20:38.227 [DEBUG] [Thread-27644] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:20:38.229 [DEBUG] [Thread-27644] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:20:38.241 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:20:38.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:20:38.242 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:20:38.243 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:20:38.246 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:20:38.247 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:20:38.247 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.055645 -999.00  +14.20   6.29     39   +0.50 1 1 1 1 1     0    0 16.74 140.46 ZNESW 5.0 6.3 227.8 11.3 14.3 -25.2 14.2 -24.1 13.9 -23.8 14.2 -24.5
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.055645
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:20:38.247 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:20:04', tmtdew=16.21, humidity=32.71, cloud=0.0, wind=18.53, temperature=14.41, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:20:05', seeing=0.79, atlas_timestamp='2025-11-13T01:20:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:17:00')
2025-11-13T03:20:38.248 [DEBUG] [Thread-27644] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:20:38.322 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:20:38.333 [DEBUG] [Thread-27647] [transport.py] [_log()] starting thread (client mode): 0x19ddbfd0
2025-11-13T03:20:38.333 [DEBUG] [Thread-27647] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:20:38.347 [DEBUG] [Thread-27647] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:20:38.347 [INFO] [Thread-27647] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] client lang: <none>
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] server lang: <none>
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] kex follows: False
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] Compression: none
2025-11-13T03:20:38.355 [DEBUG] [Thread-27647] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:20:38.411 [DEBUG] [Thread-27647] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:20:38.411 [DEBUG] [Thread-27647] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:20:38.411 [DEBUG] [Thread-27647] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:20:38.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:20:38.411 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:20:38.468 [DEBUG] [Thread-27647] [transport.py] [_log()] userauth is OK
2025-11-13T03:20:38.468 [DEBUG] [Thread-27647] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:20:38.468 [DEBUG] [Thread-27647] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:20:38.468 [DEBUG] [Thread-27647] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:20:38.468 [DEBUG] [Thread-27647] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:20:38.481 [INFO] [Thread-27647] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:20:38.482 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:20:38.482 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:20:39.293 [DEBUG] [Thread-27647] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:20:39.293 [DEBUG] [Thread-27647] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:20:39.342 [DEBUG] [Thread-27647] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:20:39.342 [DEBUG] [Thread-27647] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:20:39.350 [DEBUG] [Thread-27647] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:20:39.359 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:20:39.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-11-13T03:20:39.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-11-13T03:20:39.376 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:20:39.376 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:20:39.377 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:20:39.384 [DEBUG] [Thread-27647] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:20:45.967 [DEBUG] [Thread-27649 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:21:01.017 [DEBUG] [Thread-27650 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:21:01.189 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:21:01.190 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:21:09.406 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:21:09.407 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:21:09.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-11-13T03:21:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 20, 36), 16.2, 32.73, 0.0, 18.83, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:21:10.111 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:20:36
2025-11-13T03:21:10.242 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:21:10.395 [DEBUG] [Thread-27651] [transport.py] [_log()] starting thread (client mode): 0x19dd9510
2025-11-13T03:21:10.396 [DEBUG] [Thread-27651] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:21:10.415 [DEBUG] [Thread-27651] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:21:10.415 [INFO] [Thread-27651] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] client lang: <none>
2025-11-13T03:21:10.416 [DEBUG] [Thread-27651] [transport.py] [_log()] server lang: <none>
2025-11-13T03:21:10.417 [DEBUG] [Thread-27651] [transport.py] [_log()] kex follows: False
2025-11-13T03:21:10.417 [DEBUG] [Thread-27651] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:21:10.417 [DEBUG] [Thread-27651] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:21:10.417 [DEBUG] [Thread-27651] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:21:10.417 [DEBUG] [Thread-27651] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:21:10.417 [DEBUG] [Thread-27651] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:21:10.417 [DEBUG] [Thread-27651] [transport.py] [_log()] Compression: none
2025-11-13T03:21:10.417 [DEBUG] [Thread-27651] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:21:10.424 [DEBUG] [Thread-27651] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:21:10.424 [DEBUG] [Thread-27651] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:21:10.424 [DEBUG] [Thread-27651] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:21:10.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:21:10.424 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:21:10.425 [DEBUG] [Thread-27651] [transport.py] [_log()] userauth is OK
2025-11-13T03:21:10.425 [DEBUG] [Thread-27651] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:21:10.425 [DEBUG] [Thread-27651] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:21:10.425 [DEBUG] [Thread-27651] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:21:10.425 [DEBUG] [Thread-27651] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:21:10.440 [INFO] [Thread-27651] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:21:10.440 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:21:11.067 [DEBUG] [Thread-27651] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:21:11.067 [DEBUG] [Thread-27651] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:21:11.067 [DEBUG] [Thread-27651] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:21:11.108 [DEBUG] [Thread-27651] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:21:11.108 [DEBUG] [Thread-27651] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:21:11.110 [DEBUG] [Thread-27651] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:21:11.123 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:21:11.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:21:11.123 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:21:11.124 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:21:11.126 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:21:11.127 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:21:11.127 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:21:11.127 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:21:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:21:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.055993 -999.00  +14.20   7.83     39   +0.60 1 1 1 1 1     0    0 17.06 132.07 ZNESW 7.8 7.8 220.5 13.2 14.3 -25.3 14.2 -24.4 13.9 -23.9 14.2 -24.6
2025-11-13T03:21:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:21:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:21:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.055993
2025-11-13T03:21:11.127 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:21:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:21:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:21:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:21:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:21:11.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:20:36', tmtdew=16.2, humidity=32.73, cloud=0.0, wind=18.83, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:20:37', seeing=0.79, atlas_timestamp='2025-11-13T01:20:37.795', atlas_cloud=1, atlas_rain=1, zp_data=[-0.009249999999999758, 0.007749999999999702, 0.09224999999999994, 0.03449999999999953, 0.012000000000000455, 0.09925000000000139, -0.021000000000000796, -0.0012499999999988631, 0.02949999999999875, 0.016000000000000014, 0.043250000000000455, 0.05299999999999905, 0.09699999999999953, 0.049249999999998906, 0.0039999999999995595, -0.014000000000001123, 0.008749999999999147, 0.046499999999999986, 0.08799999999999919, 0.07574999999999932, 0.10099999999999909, 0.1117499999999989, 0.06575000000000131, 0.012249999999999872, 0.013499999999998735, 0.08050000000000068, 0.08675000000000033, 0.182500000000001, 0.09800000000000075, 0.07900000000000063, 0.06500000000000128, 0.02800000000000047, -0.04025000000000034], zp_timestamp='2025-11-13T01:17:00')
2025-11-13T03:21:11.128 [DEBUG] [Thread-27651] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:21:11.205 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:21:11.216 [DEBUG] [Thread-27654] [transport.py] [_log()] starting thread (client mode): 0x19dda5f0
2025-11-13T03:21:11.216 [DEBUG] [Thread-27654] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:21:11.230 [DEBUG] [Thread-27654] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:21:11.230 [INFO] [Thread-27654] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:21:11.237 [DEBUG] [Thread-27654] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] client lang: <none>
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] server lang: <none>
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] kex follows: False
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] Compression: none
2025-11-13T03:21:11.238 [DEBUG] [Thread-27654] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:21:11.295 [DEBUG] [Thread-27654] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:21:11.295 [DEBUG] [Thread-27654] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:21:11.295 [DEBUG] [Thread-27654] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:21:11.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:21:11.295 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:21:11.352 [DEBUG] [Thread-27654] [transport.py] [_log()] userauth is OK
2025-11-13T03:21:11.352 [DEBUG] [Thread-27654] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:21:11.352 [DEBUG] [Thread-27654] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:21:11.352 [DEBUG] [Thread-27654] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:21:11.352 [DEBUG] [Thread-27654] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:21:11.369 [INFO] [Thread-27654] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:21:11.369 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:21:11.369 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:21:12.174 [DEBUG] [Thread-27654] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:21:12.174 [DEBUG] [Thread-27654] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:21:12.226 [DEBUG] [Thread-27654] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:21:12.226 [DEBUG] [Thread-27654] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:21:12.239 [DEBUG] [Thread-27654] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:21:12.251 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:21:12.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-11-13T03:21:12.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-11-13T03:21:12.276 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:21:12.276 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:21:12.276 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:21:12.288 [DEBUG] [Thread-27654] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:21:16.050 [DEBUG] [Thread-27656 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:21:16.789 [DEBUG] [Thread-27657 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:21:31.108 [DEBUG] [Thread-27658 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:21:42.306 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:21:42.306 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:21: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-11-13T03:21:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 21, 8), 16.18, 32.78, 0.0, 16.8, 14.46, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:21:42.998 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:21:08
2025-11-13T03:21:43.128 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:21:43.281 [DEBUG] [Thread-27659] [transport.py] [_log()] starting thread (client mode): 0x19dda290
2025-11-13T03:21:43.281 [DEBUG] [Thread-27659] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:21:43.301 [DEBUG] [Thread-27659] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:21:43.302 [INFO] [Thread-27659] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] client lang: <none>
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] server lang: <none>
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] kex follows: False
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] Compression: none
2025-11-13T03:21:43.305 [DEBUG] [Thread-27659] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:21:43.323 [DEBUG] [Thread-27659] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:21:43.324 [DEBUG] [Thread-27659] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:21:43.324 [DEBUG] [Thread-27659] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:21:43.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:21:43.324 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:21:43.325 [DEBUG] [Thread-27659] [transport.py] [_log()] userauth is OK
2025-11-13T03:21:43.325 [DEBUG] [Thread-27659] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:21:43.325 [DEBUG] [Thread-27659] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:21:43.325 [DEBUG] [Thread-27659] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:21:43.325 [DEBUG] [Thread-27659] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:21:43.334 [INFO] [Thread-27659] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:21:43.335 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:21:44.128 [DEBUG] [Thread-27659] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:21:44.128 [DEBUG] [Thread-27659] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:21:44.128 [DEBUG] [Thread-27659] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:21:44.168 [DEBUG] [Thread-27659] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:21:44.168 [DEBUG] [Thread-27659] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:21:44.171 [DEBUG] [Thread-27659] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:21:44.182 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:21:44.182 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:21:44.184 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:21:44.185 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:21:44.190 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:21:44.192 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:21:44.192 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:21:44.192 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:21:44.192 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:21:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.056340 -999.00  +14.20   8.41     39   +0.50 1 1 1 1 1     0    0 16.65 132.62 ZNESW 8.2 8.4 234.8 12.3 14.3 -25.1 14.2 -24.3 13.9 -23.8 14.2 -24.6
2025-11-13T03:21:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:21:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:21:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.056340
2025-11-13T03:21:44.193 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:21:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:21:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:21:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:21:44.194 [DEBUG] [Thread-27659] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:21:44.194 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:21:44.195 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:21:08', tmtdew=16.18, humidity=32.78, cloud=0.0, wind=16.8, temperature=14.46, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:21:41', seeing=1.15, atlas_timestamp='2025-11-13T01:21:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:19:00')
2025-11-13T03:21:44.277 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:21:44.288 [DEBUG] [Thread-27662] [transport.py] [_log()] starting thread (client mode): 0x14974280
2025-11-13T03:21:44.289 [DEBUG] [Thread-27662] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:21:44.303 [DEBUG] [Thread-27662] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:21:44.303 [INFO] [Thread-27662] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:21:44.311 [DEBUG] [Thread-27662] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:21:44.311 [DEBUG] [Thread-27662] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:21:44.311 [DEBUG] [Thread-27662] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:21:44.311 [DEBUG] [Thread-27662] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:21:44.311 [DEBUG] [Thread-27662] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:21:44.311 [DEBUG] [Thread-27662] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:21:44.312 [DEBUG] [Thread-27662] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:21:44.312 [DEBUG] [Thread-27662] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:21:44.312 [DEBUG] [Thread-27662] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:21:44.312 [DEBUG] [Thread-27662] [transport.py] [_log()] client lang: <none>
2025-11-13T03:21:44.312 [DEBUG] [Thread-27662] [transport.py] [_log()] server lang: <none>
2025-11-13T03:21:44.312 [DEBUG] [Thread-27662] [transport.py] [_log()] kex follows: False
2025-11-13T03:21:44.312 [DEBUG] [Thread-27662] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:21:44.312 [DEBUG] [Thread-27662] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:21:44.313 [DEBUG] [Thread-27662] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:21:44.313 [DEBUG] [Thread-27662] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:21:44.313 [DEBUG] [Thread-27662] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:21:44.313 [DEBUG] [Thread-27662] [transport.py] [_log()] Compression: none
2025-11-13T03:21:44.313 [DEBUG] [Thread-27662] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:21:44.369 [DEBUG] [Thread-27662] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:21:44.370 [DEBUG] [Thread-27662] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:21:44.371 [DEBUG] [Thread-27662] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:21:44.371 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:21:44.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:21:44.436 [DEBUG] [Thread-27662] [transport.py] [_log()] userauth is OK
2025-11-13T03:21:44.436 [DEBUG] [Thread-27662] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:21:44.436 [DEBUG] [Thread-27662] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:21:44.436 [DEBUG] [Thread-27662] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:21:44.437 [DEBUG] [Thread-27662] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:21:44.457 [INFO] [Thread-27662] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:21:44.457 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:21:44.458 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:21:45.262 [DEBUG] [Thread-27662] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:21:45.263 [DEBUG] [Thread-27662] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:21:45.311 [DEBUG] [Thread-27662] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:21:45.311 [DEBUG] [Thread-27662] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:21:45.321 [DEBUG] [Thread-27662] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:21:45.330 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:21:45.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-11-13T03:21: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-11-13T03:21:45.353 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:21:45.353 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:21:45.353 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:21:45.365 [DEBUG] [Thread-27662] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:21:46.139 [DEBUG] [Thread-27664 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:22:01.193 [DEBUG] [Thread-27665 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:22:01.395 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:22:01.396 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:22:15.383 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:22:15.383 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:22:15.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-11-13T03:22:16.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 21, 40), 16.28, 32.68, 0.0, 18.44, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:22:16.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:21:40
2025-11-13T03:22:16.153 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:22:16.223 [DEBUG] [Thread-27666 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:22:16.298 [DEBUG] [Thread-27667] [transport.py] [_log()] starting thread (client mode): 0x1493cbe0
2025-11-13T03:22:16.298 [DEBUG] [Thread-27667] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:22:16.319 [DEBUG] [Thread-27667] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:22:16.319 [INFO] [Thread-27667] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:22:16.322 [DEBUG] [Thread-27667] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] client lang: <none>
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] server lang: <none>
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] kex follows: False
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] Compression: none
2025-11-13T03:22:16.323 [DEBUG] [Thread-27667] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:22:16.341 [DEBUG] [Thread-27667] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:22:16.341 [DEBUG] [Thread-27667] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:22:16.342 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:22:16.342 [DEBUG] [Thread-27667] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:22:16.343 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:22:16.344 [DEBUG] [Thread-27667] [transport.py] [_log()] userauth is OK
2025-11-13T03:22:16.344 [DEBUG] [Thread-27667] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:22:16.345 [DEBUG] [Thread-27667] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:22:16.345 [DEBUG] [Thread-27667] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:22:16.345 [DEBUG] [Thread-27667] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:22:16.381 [INFO] [Thread-27667] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:22:16.382 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:22:16.858 [DEBUG] [Thread-27669 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:22:17.012 [DEBUG] [Thread-27667] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:22:17.013 [DEBUG] [Thread-27667] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:22:17.013 [DEBUG] [Thread-27667] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:22:17.053 [DEBUG] [Thread-27667] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:22:17.054 [DEBUG] [Thread-27667] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:22:17.057 [DEBUG] [Thread-27667] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:22:17.069 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:22:17.069 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:22:17.071 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:22:17.072 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:22:17.078 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:22:17.080 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:22:17.080 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:22:17.080 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:22:17.080 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:22:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.056687 -999.00  +14.20   8.38     38   +0.40 1 1 1 1 1     0    0 16.97 128.06 ZNESW 8.7 8.4 213.0 18.5 14.3 -25.1 14.2 -24.4 13.9 -24.0 14.2 -24.5
2025-11-13T03:22:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:22:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:22:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.056687
2025-11-13T03:22:17.081 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:22:17.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:22:17.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:22:17.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:22:17.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:22:17.082 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:21:40', tmtdew=16.28, humidity=32.68, cloud=0.0, wind=18.44, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:22:13', seeing=1.15, atlas_timestamp='2025-11-13T01:21:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:19:00')
2025-11-13T03:22:17.082 [DEBUG] [Thread-27667] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:22:17.170 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:22:17.183 [DEBUG] [Thread-27671] [transport.py] [_log()] starting thread (client mode): 0x14922770
2025-11-13T03:22:17.183 [DEBUG] [Thread-27671] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:22:17.197 [DEBUG] [Thread-27671] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:22:17.197 [INFO] [Thread-27671] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:22:17.205 [DEBUG] [Thread-27671] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:22:17.205 [DEBUG] [Thread-27671] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:22:17.205 [DEBUG] [Thread-27671] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:22:17.205 [DEBUG] [Thread-27671] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] client lang: <none>
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] server lang: <none>
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] kex follows: False
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:22:17.206 [DEBUG] [Thread-27671] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:22:17.207 [DEBUG] [Thread-27671] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:22:17.207 [DEBUG] [Thread-27671] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:22:17.207 [DEBUG] [Thread-27671] [transport.py] [_log()] Compression: none
2025-11-13T03:22:17.207 [DEBUG] [Thread-27671] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:22:17.267 [DEBUG] [Thread-27671] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:22:17.268 [DEBUG] [Thread-27671] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:22:17.268 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:22:17.269 [DEBUG] [Thread-27671] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:22:17.270 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:22:17.325 [DEBUG] [Thread-27671] [transport.py] [_log()] userauth is OK
2025-11-13T03:22:17.325 [DEBUG] [Thread-27671] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:22:17.325 [DEBUG] [Thread-27671] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:22:17.325 [DEBUG] [Thread-27671] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:22:17.325 [DEBUG] [Thread-27671] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:22:17.343 [INFO] [Thread-27671] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:22:17.344 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:22:17.344 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:22:18.180 [DEBUG] [Thread-27671] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:22:18.180 [DEBUG] [Thread-27671] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:22:18.228 [DEBUG] [Thread-27671] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:22:18.228 [DEBUG] [Thread-27671] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:22:18.237 [DEBUG] [Thread-27671] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:22:18.246 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:22:18.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-11-13T03:22: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-11-13T03:22:18.264 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:22:18.265 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:22:18.265 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:22:18.273 [DEBUG] [Thread-27671] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:22:31.256 [DEBUG] [Thread-27673 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:22:46.309 [DEBUG] [Thread-27674 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:22:48.296 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:22:48.296 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:22:48.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-11-13T03:22:48.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 22, 44), 16.43, 31.91, 0.0, 17.01, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:22:48.960 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:22:44
2025-11-13T03:22:49.085 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:22:49.237 [DEBUG] [Thread-27675] [transport.py] [_log()] starting thread (client mode): 0x14977430
2025-11-13T03:22:49.237 [DEBUG] [Thread-27675] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:22:49.258 [DEBUG] [Thread-27675] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:22:49.259 [INFO] [Thread-27675] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:22:49.261 [DEBUG] [Thread-27675] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] client lang: <none>
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] server lang: <none>
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] kex follows: False
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] Compression: none
2025-11-13T03:22:49.262 [DEBUG] [Thread-27675] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:22:49.278 [DEBUG] [Thread-27675] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:22:49.278 [DEBUG] [Thread-27675] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:22:49.278 [DEBUG] [Thread-27675] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:22:49.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:22:49.278 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:22:49.279 [DEBUG] [Thread-27675] [transport.py] [_log()] userauth is OK
2025-11-13T03:22:49.279 [DEBUG] [Thread-27675] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:22:49.279 [DEBUG] [Thread-27675] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:22:49.279 [DEBUG] [Thread-27675] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:22:49.279 [DEBUG] [Thread-27675] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:22:49.287 [INFO] [Thread-27675] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:22:49.288 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:22:49.934 [DEBUG] [Thread-27675] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:22:49.934 [DEBUG] [Thread-27675] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:22:49.934 [DEBUG] [Thread-27675] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:22:49.975 [DEBUG] [Thread-27675] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:22:49.975 [DEBUG] [Thread-27675] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:22:49.977 [DEBUG] [Thread-27675] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:22:49.990 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:22:49.990 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:22:49.991 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:22:49.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:22:49.995 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:22:49.995 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:22:49.995 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:22:49.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:22:49.995 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.057034 -999.00  +14.30   9.45     38   +0.40 1 1 1 1 1     0    0 16.65 119.24 ZNESW 8.0 9.4 253.0 14.7 14.3 -25.1 14.2 -24.2 13.9 -23.7 14.2 -24.5
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.057034
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:22:49.996 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:22:44', tmtdew=16.43, humidity=31.91, cloud=0.0, wind=17.01, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:22:45', seeing=1.26, atlas_timestamp='2025-11-13T01:22:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:19:00')
2025-11-13T03:22:49.996 [DEBUG] [Thread-27675] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:22:50.070 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:22:50.081 [DEBUG] [Thread-27678] [transport.py] [_log()] starting thread (client mode): 0x14977be0
2025-11-13T03:22:50.081 [DEBUG] [Thread-27678] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:22:50.096 [DEBUG] [Thread-27678] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:22:50.096 [INFO] [Thread-27678] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] client lang: <none>
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] server lang: <none>
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] kex follows: False
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] Compression: none
2025-11-13T03:22:50.104 [DEBUG] [Thread-27678] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:22:50.159 [DEBUG] [Thread-27678] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:22:50.159 [DEBUG] [Thread-27678] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:22:50.159 [DEBUG] [Thread-27678] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:22:50.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:22:50.159 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:22:50.216 [DEBUG] [Thread-27678] [transport.py] [_log()] userauth is OK
2025-11-13T03:22:50.216 [DEBUG] [Thread-27678] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:22:50.216 [DEBUG] [Thread-27678] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:22:50.216 [DEBUG] [Thread-27678] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:22:50.216 [DEBUG] [Thread-27678] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:22:50.230 [INFO] [Thread-27678] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:22:50.230 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:22:50.230 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:22:51.015 [DEBUG] [Thread-27678] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:22:51.015 [DEBUG] [Thread-27678] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:22:51.063 [DEBUG] [Thread-27678] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:22:51.063 [DEBUG] [Thread-27678] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:22:51.071 [DEBUG] [Thread-27678] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:22:51.079 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:22:51.079 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:22:51.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-11-13T03:22:51.095 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:22:51.095 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:22:51.095 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:22:51.103 [DEBUG] [Thread-27678] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:23:01.340 [DEBUG] [Thread-27680 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:01.600 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:01.601 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:05.867 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:11.190 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:14.262 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:16.391 [DEBUG] [Thread-27681 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:16.923 [DEBUG] [Thread-27682 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:19.630 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:21.098 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:23:21.098 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:23:21.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-11-13T03:23:21.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 23, 17), 16.43, 31.95, 0.0, 16.45, 14.56, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:23:21.744 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:23:17
2025-11-13T03:23:21.865 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:23:22.014 [DEBUG] [Thread-27683] [transport.py] [_log()] starting thread (client mode): 0x14976290
2025-11-13T03:23:22.014 [DEBUG] [Thread-27683] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:23:22.034 [DEBUG] [Thread-27683] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:23:22.034 [INFO] [Thread-27683] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] client lang: <none>
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] server lang: <none>
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] kex follows: False
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:23:22.038 [DEBUG] [Thread-27683] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:23:22.039 [DEBUG] [Thread-27683] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:23:22.039 [DEBUG] [Thread-27683] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:23:22.039 [DEBUG] [Thread-27683] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:23:22.039 [DEBUG] [Thread-27683] [transport.py] [_log()] Compression: none
2025-11-13T03:23:22.039 [DEBUG] [Thread-27683] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:23:22.057 [DEBUG] [Thread-27683] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:23:22.057 [DEBUG] [Thread-27683] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:23:22.058 [DEBUG] [Thread-27683] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:23:22.058 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:23:22.059 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:23:22.060 [DEBUG] [Thread-27683] [transport.py] [_log()] userauth is OK
2025-11-13T03:23:22.060 [DEBUG] [Thread-27683] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:23:22.060 [DEBUG] [Thread-27683] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:23:22.060 [DEBUG] [Thread-27683] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:23:22.060 [DEBUG] [Thread-27683] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:23:22.085 [INFO] [Thread-27683] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:23:22.086 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:23:22.743 [DEBUG] [Thread-27683] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:23:22.743 [DEBUG] [Thread-27683] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:23:22.744 [DEBUG] [Thread-27683] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:23:22.785 [DEBUG] [Thread-27683] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:23:22.785 [DEBUG] [Thread-27683] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:23:22.789 [DEBUG] [Thread-27683] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:23:22.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:23:22.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:23:22.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:23:22.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:23:22.810 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:23:22.812 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:23:22.812 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:23:22.812 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:23:22.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:23:22.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.057729 -999.00  +14.30  10.64     38   +0.40 1 1 1 1 1     0    0 16.64 124.03 ZNESW 5.4 10.6 216.1 14.4 14.4 -25.1 14.2 -24.2 14.0 -23.9 14.3 -24.6
2025-11-13T03:23:22.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:23:22.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:23:22.813 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.057729
2025-11-13T03:23:22.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:23:22.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:23:22.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:23:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:23:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:23:22.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:23:17', tmtdew=16.43, humidity=31.95, cloud=0.0, wind=16.45, temperature=14.56, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:23:17', seeing=1.26, atlas_timestamp='2025-11-13T01:23:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:19:00')
2025-11-13T03:23:22.815 [DEBUG] [Thread-27683] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:23:22.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:23:22.915 [DEBUG] [Thread-27686] [transport.py] [_log()] starting thread (client mode): 0x14923bb0
2025-11-13T03:23:22.915 [DEBUG] [Thread-27686] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:23:22.931 [DEBUG] [Thread-27686] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:23:22.931 [INFO] [Thread-27686] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:23:22.939 [DEBUG] [Thread-27686] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:23:22.939 [DEBUG] [Thread-27686] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:23:22.939 [DEBUG] [Thread-27686] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:23:22.939 [DEBUG] [Thread-27686] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:23:22.939 [DEBUG] [Thread-27686] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] client lang: <none>
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] server lang: <none>
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] kex follows: False
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] Compression: none
2025-11-13T03:23:22.940 [DEBUG] [Thread-27686] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:23:22.996 [DEBUG] [Thread-27686] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:23:22.997 [DEBUG] [Thread-27686] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:23:22.997 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:23:22.998 [DEBUG] [Thread-27686] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:23:22.999 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:23:23.053 [DEBUG] [Thread-27686] [transport.py] [_log()] userauth is OK
2025-11-13T03:23:23.053 [DEBUG] [Thread-27686] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:23:23.053 [DEBUG] [Thread-27686] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:23:23.053 [DEBUG] [Thread-27686] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:23:23.054 [DEBUG] [Thread-27686] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:23:23.073 [INFO] [Thread-27686] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:23:23.074 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:23:23.074 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:23:23.908 [DEBUG] [Thread-27686] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:23:23.908 [DEBUG] [Thread-27686] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:23:23.957 [DEBUG] [Thread-27686] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:23:23.957 [DEBUG] [Thread-27686] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:23:23.966 [DEBUG] [Thread-27686] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:23:23.975 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:23:23.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-11-13T03:23:23.984 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:23:23.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:23:23.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:23:23.994 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:23:24.001 [DEBUG] [Thread-27686] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:23:31.421 [DEBUG] [Thread-27688 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:46.472 [DEBUG] [Thread-27689 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:23:54.024 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:23:54.024 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:23:54.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-11-13T03:23:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 23, 49), 16.33, 32.45, 0.0, 16.97, 14.52, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:23:54.645 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:23:49
2025-11-13T03:23:54.764 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:23:54.909 [DEBUG] [Thread-27690] [transport.py] [_log()] starting thread (client mode): 0x149215d0
2025-11-13T03:23:54.909 [DEBUG] [Thread-27690] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:23:54.930 [DEBUG] [Thread-27690] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:23:54.930 [INFO] [Thread-27690] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:23:54.933 [DEBUG] [Thread-27690] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:23:54.933 [DEBUG] [Thread-27690] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:23:54.933 [DEBUG] [Thread-27690] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:23:54.933 [DEBUG] [Thread-27690] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:23:54.933 [DEBUG] [Thread-27690] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:23:54.933 [DEBUG] [Thread-27690] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:23:54.933 [DEBUG] [Thread-27690] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:23:54.933 [DEBUG] [Thread-27690] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] client lang: <none>
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] server lang: <none>
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] kex follows: False
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] Compression: none
2025-11-13T03:23:54.934 [DEBUG] [Thread-27690] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:23:54.953 [DEBUG] [Thread-27690] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:23:54.953 [DEBUG] [Thread-27690] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:23:54.954 [DEBUG] [Thread-27690] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:23:54.954 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:23:54.955 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:23:54.956 [DEBUG] [Thread-27690] [transport.py] [_log()] userauth is OK
2025-11-13T03:23:54.956 [DEBUG] [Thread-27690] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:23:54.956 [DEBUG] [Thread-27690] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:23:54.957 [DEBUG] [Thread-27690] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:23:54.957 [DEBUG] [Thread-27690] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:23:54.993 [INFO] [Thread-27690] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:23:54.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:23:55.645 [DEBUG] [Thread-27690] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:23:55.645 [DEBUG] [Thread-27690] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:23:55.646 [DEBUG] [Thread-27690] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:23:55.687 [DEBUG] [Thread-27690] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:23:55.687 [DEBUG] [Thread-27690] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:23:55.690 [DEBUG] [Thread-27690] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:23:55.703 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:23:55.703 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:23:55.705 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:23:55.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:23:55.713 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:23:55.715 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:23:55.715 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:23:55.715 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:23:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:23:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.058076 -999.00  +14.30   8.70     39   +0.50 1 1 1 1 1     0    0 16.59 121.74 ZNESW 12.0 8.7 231.5 11.2 14.3 -25.0 14.2 -24.3 13.9 -23.7 14.2 -24.4
2025-11-13T03:23:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:23:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:23:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.058076
2025-11-13T03:23:55.716 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:23:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:23:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:23:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:23:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:23:55.717 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:23:49', tmtdew=16.33, humidity=32.45, cloud=0.0, wind=16.97, temperature=14.52, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:23:49', seeing=1.16, atlas_timestamp='2025-11-13T01:23:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:19:00')
2025-11-13T03:23:55.718 [DEBUG] [Thread-27690] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:23: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-11-13T03:23:55.813 [DEBUG] [Thread-27693] [transport.py] [_log()] starting thread (client mode): 0x1496b1c0
2025-11-13T03:23:55.814 [DEBUG] [Thread-27693] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:23:55.828 [DEBUG] [Thread-27693] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:23:55.828 [INFO] [Thread-27693] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:23:55.835 [DEBUG] [Thread-27693] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:23:55.836 [DEBUG] [Thread-27693] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:23:55.836 [DEBUG] [Thread-27693] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:23:55.836 [DEBUG] [Thread-27693] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:23:55.836 [DEBUG] [Thread-27693] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:23:55.836 [DEBUG] [Thread-27693] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:23:55.836 [DEBUG] [Thread-27693] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:23:55.836 [DEBUG] [Thread-27693] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:23:55.836 [DEBUG] [Thread-27693] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:23:55.837 [DEBUG] [Thread-27693] [transport.py] [_log()] client lang: <none>
2025-11-13T03:23:55.837 [DEBUG] [Thread-27693] [transport.py] [_log()] server lang: <none>
2025-11-13T03:23:55.837 [DEBUG] [Thread-27693] [transport.py] [_log()] kex follows: False
2025-11-13T03:23:55.837 [DEBUG] [Thread-27693] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:23:55.837 [DEBUG] [Thread-27693] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:23:55.837 [DEBUG] [Thread-27693] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:23:55.837 [DEBUG] [Thread-27693] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:23:55.837 [DEBUG] [Thread-27693] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:23:55.838 [DEBUG] [Thread-27693] [transport.py] [_log()] Compression: none
2025-11-13T03:23:55.838 [DEBUG] [Thread-27693] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:23:55.897 [DEBUG] [Thread-27693] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:23:55.898 [DEBUG] [Thread-27693] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:23:55.898 [DEBUG] [Thread-27693] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:23:55.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:23:55.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:23:55.957 [DEBUG] [Thread-27693] [transport.py] [_log()] userauth is OK
2025-11-13T03:23:55.957 [DEBUG] [Thread-27693] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:23:55.957 [DEBUG] [Thread-27693] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:23:55.957 [DEBUG] [Thread-27693] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:23:55.957 [DEBUG] [Thread-27693] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:23:55.981 [INFO] [Thread-27693] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:23:55.981 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:23:55.982 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:23:56.809 [DEBUG] [Thread-27693] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:23:56.809 [DEBUG] [Thread-27693] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:23:56.857 [DEBUG] [Thread-27693] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:23:56.858 [DEBUG] [Thread-27693] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:23:56.866 [DEBUG] [Thread-27693] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:23:56.875 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:23:56.875 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:23:56.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-11-13T03:23:56.893 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:23:56.893 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:23:56.893 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:23:56.901 [DEBUG] [Thread-27693] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:24:01.507 [DEBUG] [Thread-27695 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:24:01.805 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:24:01.806 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:24:16.552 [DEBUG] [Thread-27696 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:24:16.981 [DEBUG] [Thread-27697 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:24:26.923 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:24:26.923 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:24:26.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-11-13T03:24:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 24, 21), 16.33, 32.45, 0.0, 16.59, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:24:27.539 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:24:21
2025-11-13T03:24:27.656 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:24:27.801 [DEBUG] [Thread-27698] [transport.py] [_log()] starting thread (client mode): 0x14974880
2025-11-13T03:24:27.801 [DEBUG] [Thread-27698] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:24:27.821 [DEBUG] [Thread-27698] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:24:27.821 [INFO] [Thread-27698] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] client lang: <none>
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] server lang: <none>
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] kex follows: False
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:24:27.824 [DEBUG] [Thread-27698] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:24:27.825 [DEBUG] [Thread-27698] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:24:27.825 [DEBUG] [Thread-27698] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:24:27.825 [DEBUG] [Thread-27698] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:24:27.825 [DEBUG] [Thread-27698] [transport.py] [_log()] Compression: none
2025-11-13T03:24:27.825 [DEBUG] [Thread-27698] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:24:27.841 [DEBUG] [Thread-27698] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:24:27.842 [DEBUG] [Thread-27698] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:24:27.842 [DEBUG] [Thread-27698] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:24:27.842 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:24:27.843 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:24:27.844 [DEBUG] [Thread-27698] [transport.py] [_log()] userauth is OK
2025-11-13T03:24:27.845 [DEBUG] [Thread-27698] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:24:27.845 [DEBUG] [Thread-27698] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:24:27.845 [DEBUG] [Thread-27698] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:24:27.845 [DEBUG] [Thread-27698] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:24:27.878 [INFO] [Thread-27698] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:24:27.879 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:24:28.493 [DEBUG] [Thread-27698] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:24:28.493 [DEBUG] [Thread-27698] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:24:28.493 [DEBUG] [Thread-27698] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:24:28.534 [DEBUG] [Thread-27698] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:24:28.535 [DEBUG] [Thread-27698] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:24:28.537 [DEBUG] [Thread-27698] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:24:28.552 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:24:28.552 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:24:28.554 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:24:28.556 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:24:28.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:24:28.564 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:24:28.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:24:28.565 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:24:28.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:24:28.565 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.058423 -999.00  +14.30   7.35     38   +0.40 1 1 1 1 1     0    0 16.58 120.73 ZNESW 6.0 7.3 225.2 13.2 14.3 -25.0 14.2 -24.2 14.0 -23.8 14.2 -24.3
2025-11-13T03:24:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:24:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:24:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.058423
2025-11-13T03:24:28.566 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:24:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:24:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:24:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:24:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:24:28.567 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:24:21', tmtdew=16.33, humidity=32.45, cloud=0.0, wind=16.59, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:24:21', seeing=1.12, atlas_timestamp='2025-11-13T01:24:07.747', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:19:00')
2025-11-13T03:24:28.567 [DEBUG] [Thread-27698] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:24:28.651 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:24:28.663 [DEBUG] [Thread-27701] [transport.py] [_log()] starting thread (client mode): 0x1493cca0
2025-11-13T03:24:28.663 [DEBUG] [Thread-27701] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:24:28.678 [DEBUG] [Thread-27701] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:24:28.678 [INFO] [Thread-27701] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:24:28.685 [DEBUG] [Thread-27701] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:24:28.685 [DEBUG] [Thread-27701] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] client lang: <none>
2025-11-13T03:24:28.686 [DEBUG] [Thread-27701] [transport.py] [_log()] server lang: <none>
2025-11-13T03:24:28.687 [DEBUG] [Thread-27701] [transport.py] [_log()] kex follows: False
2025-11-13T03:24:28.687 [DEBUG] [Thread-27701] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:24:28.687 [DEBUG] [Thread-27701] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:24:28.687 [DEBUG] [Thread-27701] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:24:28.687 [DEBUG] [Thread-27701] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:24:28.687 [DEBUG] [Thread-27701] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:24:28.687 [DEBUG] [Thread-27701] [transport.py] [_log()] Compression: none
2025-11-13T03:24:28.687 [DEBUG] [Thread-27701] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:24:28.747 [DEBUG] [Thread-27701] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:24:28.747 [DEBUG] [Thread-27701] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:24:28.747 [DEBUG] [Thread-27701] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:24:28.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:24:28.747 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:24:28.808 [DEBUG] [Thread-27701] [transport.py] [_log()] userauth is OK
2025-11-13T03:24:28.808 [DEBUG] [Thread-27701] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:24:28.808 [DEBUG] [Thread-27701] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:24:28.808 [DEBUG] [Thread-27701] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:24:28.808 [DEBUG] [Thread-27701] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:24:28.822 [INFO] [Thread-27701] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:24:28.822 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:24:28.822 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:24:29.609 [DEBUG] [Thread-27701] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:24:29.610 [DEBUG] [Thread-27701] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:24:29.657 [DEBUG] [Thread-27701] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:24:29.658 [DEBUG] [Thread-27701] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:24:29.667 [DEBUG] [Thread-27701] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:24:29.675 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:24:29.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-11-13T03:24:29.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-11-13T03:24:29.693 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:24:29.693 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:24:29.694 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:24:29.701 [DEBUG] [Thread-27701] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:24:31.590 [DEBUG] [Thread-27703 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:24:46.637 [DEBUG] [Thread-27704 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:24:59.724 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:24:59.724 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:24:59.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-11-13T03:25:00.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 24, 53), 16.37, 32.48, 0.0, 15.86, 14.51, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:25:00.344 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:24:53
2025-11-13T03:25:00.461 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:25:00.608 [DEBUG] [Thread-27705] [transport.py] [_log()] starting thread (client mode): 0x14976200
2025-11-13T03:25:00.608 [DEBUG] [Thread-27705] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:25:00.627 [DEBUG] [Thread-27705] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:25:00.627 [INFO] [Thread-27705] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] client lang: <none>
2025-11-13T03:25:00.631 [DEBUG] [Thread-27705] [transport.py] [_log()] server lang: <none>
2025-11-13T03:25:00.632 [DEBUG] [Thread-27705] [transport.py] [_log()] kex follows: False
2025-11-13T03:25:00.632 [DEBUG] [Thread-27705] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:25:00.632 [DEBUG] [Thread-27705] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:25:00.632 [DEBUG] [Thread-27705] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:25:00.632 [DEBUG] [Thread-27705] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:25:00.632 [DEBUG] [Thread-27705] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:25:00.632 [DEBUG] [Thread-27705] [transport.py] [_log()] Compression: none
2025-11-13T03:25:00.632 [DEBUG] [Thread-27705] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:25:00.648 [DEBUG] [Thread-27705] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:25:00.649 [DEBUG] [Thread-27705] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:25:00.649 [DEBUG] [Thread-27705] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:25:00.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:25:00.650 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:25:00.651 [DEBUG] [Thread-27705] [transport.py] [_log()] userauth is OK
2025-11-13T03:25:00.651 [DEBUG] [Thread-27705] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:25:00.652 [DEBUG] [Thread-27705] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:25:00.652 [DEBUG] [Thread-27705] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:25:00.652 [DEBUG] [Thread-27705] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:25:00.676 [INFO] [Thread-27705] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:25:00.677 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:25:01.349 [DEBUG] [Thread-27705] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:25:01.349 [DEBUG] [Thread-27705] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:25:01.349 [DEBUG] [Thread-27705] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:25:01.390 [DEBUG] [Thread-27705] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:25:01.390 [DEBUG] [Thread-27705] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:25:01.394 [DEBUG] [Thread-27705] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:25:01.406 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:25:01.407 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:25:01.408 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:25:01.410 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:25:01.417 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:25:01.419 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:25:01.419 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:25:01.419 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:25:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:25:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.058770 -999.00  +14.30   9.56     38   +0.30 1 1 1 1 1     0    0 16.89 127.34 ZNESW 10.0 9.6 229.4 14.5 14.3 -25.0 14.2 -24.2 14.0 -23.8 14.3 -24.3
2025-11-13T03:25:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:25:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:25:01.420 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.058770
2025-11-13T03:25:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:25:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:25:01.421 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:25:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:25:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:25:01.422 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:24:53', tmtdew=16.37, humidity=32.48, cloud=0.0, wind=15.86, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:24:53', seeing=1.12, atlas_timestamp='2025-11-13T01:24:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:23:00')
2025-11-13T03:25:01.422 [DEBUG] [Thread-27705] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:25:01.505 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:25:01.518 [DEBUG] [Thread-27708] [transport.py] [_log()] starting thread (client mode): 0x14980cd0
2025-11-13T03:25:01.518 [DEBUG] [Thread-27708] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:25:01.532 [DEBUG] [Thread-27708] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:25:01.532 [INFO] [Thread-27708] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:25:01.540 [DEBUG] [Thread-27708] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:25:01.540 [DEBUG] [Thread-27708] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] client lang: <none>
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] server lang: <none>
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] kex follows: False
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:25:01.541 [DEBUG] [Thread-27708] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:25:01.542 [DEBUG] [Thread-27708] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:25:01.542 [DEBUG] [Thread-27708] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:25:01.542 [DEBUG] [Thread-27708] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:25:01.542 [DEBUG] [Thread-27708] [transport.py] [_log()] Compression: none
2025-11-13T03:25:01.542 [DEBUG] [Thread-27708] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:25:01.601 [DEBUG] [Thread-27708] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:25:01.602 [DEBUG] [Thread-27708] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:25:01.602 [DEBUG] [Thread-27708] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:25:01.603 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:25:01.604 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:25:01.657 [DEBUG] [Thread-27708] [transport.py] [_log()] userauth is OK
2025-11-13T03:25:01.657 [DEBUG] [Thread-27708] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:25:01.657 [DEBUG] [Thread-27708] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:25:01.657 [DEBUG] [Thread-27708] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:25:01.657 [DEBUG] [Thread-27708] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:25:01.668 [DEBUG] [Thread-27710 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:25:01.680 [INFO] [Thread-27708] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:25:01.680 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:25:01.680 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:25:02.008 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:25:02.009 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:25:02.499 [DEBUG] [Thread-27708] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:25:02.499 [DEBUG] [Thread-27708] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:25:02.547 [DEBUG] [Thread-27708] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:25:02.548 [DEBUG] [Thread-27708] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:25:02.557 [DEBUG] [Thread-27708] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:25:02.565 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:25:02.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-11-13T03:25:02.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-11-13T03:25:02.582 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:25:02.582 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:25:02.582 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:25:02.590 [DEBUG] [Thread-27708] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:25:16.713 [DEBUG] [Thread-27711 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:25:17.054 [DEBUG] [Thread-27712 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:25:31.744 [DEBUG] [Thread-27713 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:25:32.602 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:25:32.603 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:25: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-11-13T03:25:33.229 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 25, 25), 16.42, 32.35, 0.0, 17.56, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:25:33.230 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:25:25
2025-11-13T03:25:33.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:25:33.503 [DEBUG] [Thread-27714] [transport.py] [_log()] starting thread (client mode): 0x149236d0
2025-11-13T03:25:33.503 [DEBUG] [Thread-27714] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:25:33.524 [DEBUG] [Thread-27714] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:25:33.524 [INFO] [Thread-27714] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:25:33.524 [DEBUG] [Thread-27714] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] client lang: <none>
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] server lang: <none>
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] kex follows: False
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] Compression: none
2025-11-13T03:25:33.525 [DEBUG] [Thread-27714] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:25:33.543 [DEBUG] [Thread-27714] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:25:33.544 [DEBUG] [Thread-27714] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:25:33.545 [DEBUG] [Thread-27714] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:25:33.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:25:33.545 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:25:33.547 [DEBUG] [Thread-27714] [transport.py] [_log()] userauth is OK
2025-11-13T03:25:33.547 [DEBUG] [Thread-27714] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:25:33.547 [DEBUG] [Thread-27714] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:25:33.547 [DEBUG] [Thread-27714] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:25:33.547 [DEBUG] [Thread-27714] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:25:33.572 [INFO] [Thread-27714] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:25:33.573 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:25:34.209 [DEBUG] [Thread-27714] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:25:34.209 [DEBUG] [Thread-27714] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:25:34.209 [DEBUG] [Thread-27714] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:25:34.249 [DEBUG] [Thread-27714] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:25:34.250 [DEBUG] [Thread-27714] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:25:34.253 [DEBUG] [Thread-27714] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:25:34.260 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:25:34.260 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:25:34.261 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:25:34.263 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:25:34.267 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:25:34.269 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:25:34.269 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:25:34.270 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:25:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:25:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.059117 -999.00  +14.30   6.21     38   +0.30 1 1 1 1 1     0    0 17.03 128.56 ZNESW 8.6 6.2 232.2 10.8 14.3 -25.3 14.2 -24.3 14.0 -23.8 14.3 -24.6
2025-11-13T03:25:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:25:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:25:34.270 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.059117
2025-11-13T03:25:34.271 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:25:34.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:25:34.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:25:34.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:25:34.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:25:34.272 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:25:25', tmtdew=16.42, humidity=32.35, cloud=0.0, wind=17.56, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:25:26', seeing=1.05, atlas_timestamp='2025-11-13T01:25:07.709', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:23:00')
2025-11-13T03:25:34.272 [DEBUG] [Thread-27714] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:25:34.356 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:25:34.368 [DEBUG] [Thread-27717] [transport.py] [_log()] starting thread (client mode): 0x1493dd50
2025-11-13T03:25:34.368 [DEBUG] [Thread-27717] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:25:34.383 [DEBUG] [Thread-27717] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:25:34.383 [INFO] [Thread-27717] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:25:34.391 [DEBUG] [Thread-27717] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:25:34.391 [DEBUG] [Thread-27717] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:25:34.391 [DEBUG] [Thread-27717] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] client lang: <none>
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] server lang: <none>
2025-11-13T03:25:34.392 [DEBUG] [Thread-27717] [transport.py] [_log()] kex follows: False
2025-11-13T03:25:34.393 [DEBUG] [Thread-27717] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:25:34.393 [DEBUG] [Thread-27717] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:25:34.393 [DEBUG] [Thread-27717] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:25:34.393 [DEBUG] [Thread-27717] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:25:34.393 [DEBUG] [Thread-27717] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:25:34.393 [DEBUG] [Thread-27717] [transport.py] [_log()] Compression: none
2025-11-13T03:25:34.393 [DEBUG] [Thread-27717] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:25:34.449 [DEBUG] [Thread-27717] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:25:34.450 [DEBUG] [Thread-27717] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:25:34.451 [DEBUG] [Thread-27717] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:25:34.451 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:25:34.453 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:25:34.506 [DEBUG] [Thread-27717] [transport.py] [_log()] userauth is OK
2025-11-13T03:25:34.506 [DEBUG] [Thread-27717] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:25:34.506 [DEBUG] [Thread-27717] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:25:34.506 [DEBUG] [Thread-27717] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:25:34.506 [DEBUG] [Thread-27717] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:25:34.525 [INFO] [Thread-27717] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:25:34.526 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:25:34.526 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:25:35.405 [DEBUG] [Thread-27717] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:25:35.405 [DEBUG] [Thread-27717] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:25:35.452 [DEBUG] [Thread-27717] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:25:35.453 [DEBUG] [Thread-27717] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:25:35.462 [DEBUG] [Thread-27717] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:25:35.471 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:25:35.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')
2025-11-13T03:25:35.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-11-13T03:25:35.490 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:25:35.490 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:25:35.491 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:25:35.499 [DEBUG] [Thread-27717] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:25:46.782 [DEBUG] [Thread-27719 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:26:01.843 [DEBUG] [Thread-27720 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:26:02.211 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:26:02.212 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:26:05.515 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:26:05.515 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:26:05.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-11-13T03:26:06.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 25, 57), 16.53, 31.83, 0.0, 17.19, 14.54, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:26:06.141 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:25:57
2025-11-13T03:26:06.263 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:26:06.407 [DEBUG] [Thread-27721] [transport.py] [_log()] starting thread (client mode): 0x14976020
2025-11-13T03:26:06.407 [DEBUG] [Thread-27721] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:26:06.425 [DEBUG] [Thread-27721] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:26:06.425 [INFO] [Thread-27721] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:26:06.428 [DEBUG] [Thread-27721] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:26:06.428 [DEBUG] [Thread-27721] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:26:06.428 [DEBUG] [Thread-27721] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:26:06.428 [DEBUG] [Thread-27721] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] client lang: <none>
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] server lang: <none>
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] kex follows: False
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] Compression: none
2025-11-13T03:26:06.429 [DEBUG] [Thread-27721] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:26:06.446 [DEBUG] [Thread-27721] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:26:06.446 [DEBUG] [Thread-27721] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:26:06.447 [DEBUG] [Thread-27721] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:26:06.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:26:06.447 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:26:06.448 [DEBUG] [Thread-27721] [transport.py] [_log()] userauth is OK
2025-11-13T03:26:06.449 [DEBUG] [Thread-27721] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:26:06.449 [DEBUG] [Thread-27721] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:26:06.449 [DEBUG] [Thread-27721] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:26:06.449 [DEBUG] [Thread-27721] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:26:06.473 [INFO] [Thread-27721] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:26:06.473 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:26:07.096 [DEBUG] [Thread-27721] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:26:07.096 [DEBUG] [Thread-27721] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:26:07.097 [DEBUG] [Thread-27721] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:26:07.137 [DEBUG] [Thread-27721] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:26:07.138 [DEBUG] [Thread-27721] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:26:07.141 [DEBUG] [Thread-27721] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:26:07.154 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:26:07.155 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:26:07.156 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:26:07.158 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:26:07.163 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:26:07.165 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:26:07.165 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:26:07.165 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:26:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:26:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.059465 -999.00  +14.30   9.09     38   +0.30 1 1 1 1 1     0    0 16.83 134.62 ZNESW 7.0 9.1 222.0 13.1 14.3 -25.3 14.2 -24.4 14.0 -24.0 14.2 -24.6
2025-11-13T03:26:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:26:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:26:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.059465
2025-11-13T03:26:07.166 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:26:07.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:26:07.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:26:07.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:26:07.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:26:07.167 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:25:57', tmtdew=16.53, humidity=31.83, cloud=0.0, wind=17.19, temperature=14.54, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:25:58', seeing=1.05, atlas_timestamp='2025-11-13T01:25:37.776', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:23:00')
2025-11-13T03:26:07.168 [DEBUG] [Thread-27721] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:26:07.251 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:26:07.262 [DEBUG] [Thread-27724] [transport.py] [_log()] starting thread (client mode): 0x1496a530
2025-11-13T03:26:07.262 [DEBUG] [Thread-27724] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:26:07.279 [DEBUG] [Thread-27724] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:26:07.279 [INFO] [Thread-27724] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:26:07.287 [DEBUG] [Thread-27724] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:26:07.287 [DEBUG] [Thread-27724] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:26:07.287 [DEBUG] [Thread-27724] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:26:07.287 [DEBUG] [Thread-27724] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:26:07.287 [DEBUG] [Thread-27724] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] client lang: <none>
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] server lang: <none>
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] kex follows: False
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] Compression: none
2025-11-13T03:26:07.288 [DEBUG] [Thread-27724] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:26:07.346 [DEBUG] [Thread-27724] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:26:07.346 [DEBUG] [Thread-27724] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:26:07.347 [DEBUG] [Thread-27724] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:26:07.347 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:26:07.348 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:26:07.405 [DEBUG] [Thread-27724] [transport.py] [_log()] userauth is OK
2025-11-13T03:26:07.406 [DEBUG] [Thread-27724] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:26:07.406 [DEBUG] [Thread-27724] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:26:07.406 [DEBUG] [Thread-27724] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:26:07.406 [DEBUG] [Thread-27724] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:26:07.425 [INFO] [Thread-27724] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:26: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-11-13T03:26:07.426 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:26:08.284 [DEBUG] [Thread-27724] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:26:08.284 [DEBUG] [Thread-27724] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:26:08.333 [DEBUG] [Thread-27724] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:26:08.333 [DEBUG] [Thread-27724] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:26:08.342 [DEBUG] [Thread-27724] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:26:08.351 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:26:08.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-11-13T03:26: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') -> 00000000
2025-11-13T03:26:08.370 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:26:08.370 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:26:08.371 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:26:08.379 [DEBUG] [Thread-27724] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:26:16.876 [DEBUG] [Thread-27726 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:26:17.111 [DEBUG] [Thread-27727 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:26:31.927 [DEBUG] [Thread-27728 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:26:38.401 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:26:38.401 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:26:38.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:26:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 26, 29), 16.52, 31.85, 0.0, 17.68, 14.57, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:26:39.062 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:26:29
2025-11-13T03:26:39.190 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:26:39.341 [DEBUG] [Thread-27729] [transport.py] [_log()] starting thread (client mode): 0x14974e80
2025-11-13T03:26:39.342 [DEBUG] [Thread-27729] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:26:39.352 [DEBUG] [Thread-27729] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:26:39.353 [INFO] [Thread-27729] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] client lang: <none>
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] server lang: <none>
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] kex follows: False
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:26:39.354 [DEBUG] [Thread-27729] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:26:39.355 [DEBUG] [Thread-27729] [transport.py] [_log()] Compression: none
2025-11-13T03:26:39.355 [DEBUG] [Thread-27729] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:26:39.362 [DEBUG] [Thread-27729] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:26:39.362 [DEBUG] [Thread-27729] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:26:39.362 [DEBUG] [Thread-27729] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:26:39.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:26:39.362 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:26:39.363 [DEBUG] [Thread-27729] [transport.py] [_log()] userauth is OK
2025-11-13T03:26:39.363 [DEBUG] [Thread-27729] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:26:39.363 [DEBUG] [Thread-27729] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:26:39.363 [DEBUG] [Thread-27729] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:26:39.363 [DEBUG] [Thread-27729] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:26:39.372 [INFO] [Thread-27729] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:26:39.373 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:26:39.946 [DEBUG] [Thread-27729] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:26:39.946 [DEBUG] [Thread-27729] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:26:39.946 [DEBUG] [Thread-27729] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:26:39.987 [DEBUG] [Thread-27729] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:26:39.987 [DEBUG] [Thread-27729] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:26:39.988 [DEBUG] [Thread-27729] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:26:39.998 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:26:39.998 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:26:39.999 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:26:40.000 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:26:40.002 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:26:40.002 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:26:40.002 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:26:40.002 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.060159 -999.00  +14.30   5.49     38   +0.40 1 1 1 1 1     0    0 17.39 139.10 ZNESW 6.5 5.5 226.9 14.0 14.3 -25.2 14.2 -24.4 14.0 -23.9 14.2 -24.7
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.060159
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:26:40.003 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:26:29', tmtdew=16.52, humidity=31.85, cloud=0.0, wind=17.68, temperature=14.57, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:26:30', seeing=1.06, atlas_timestamp='2025-11-13T01:26:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:23:00')
2025-11-13T03:26:40.003 [DEBUG] [Thread-27729] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:26:40.076 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:26:40.089 [DEBUG] [Thread-27732] [transport.py] [_log()] starting thread (client mode): 0x149f2fe0
2025-11-13T03:26:40.089 [DEBUG] [Thread-27732] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:26:40.105 [DEBUG] [Thread-27732] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:26:40.105 [INFO] [Thread-27732] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] client lang: <none>
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] server lang: <none>
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] kex follows: False
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:26:40.112 [DEBUG] [Thread-27732] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:26:40.113 [DEBUG] [Thread-27732] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:26:40.113 [DEBUG] [Thread-27732] [transport.py] [_log()] Compression: none
2025-11-13T03:26:40.113 [DEBUG] [Thread-27732] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:26:40.172 [DEBUG] [Thread-27732] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:26:40.172 [DEBUG] [Thread-27732] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:26:40.172 [DEBUG] [Thread-27732] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:26:40.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:26:40.172 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:26:40.229 [DEBUG] [Thread-27732] [transport.py] [_log()] userauth is OK
2025-11-13T03:26:40.229 [DEBUG] [Thread-27732] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:26:40.229 [DEBUG] [Thread-27732] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:26:40.229 [DEBUG] [Thread-27732] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:26:40.229 [DEBUG] [Thread-27732] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:26:40.243 [INFO] [Thread-27732] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:26:40.243 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:26:40.243 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:26:41.053 [DEBUG] [Thread-27732] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:26:41.053 [DEBUG] [Thread-27732] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:26:41.102 [DEBUG] [Thread-27732] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:26:41.102 [DEBUG] [Thread-27732] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:26:41.110 [DEBUG] [Thread-27732] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:26:41.118 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:26:41.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-11-13T03:26:41.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-11-13T03:26:41.134 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:26:41.134 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:26:41.134 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:26:41.142 [DEBUG] [Thread-27732] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:26:46.957 [DEBUG] [Thread-27734 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:27:02.007 [DEBUG] [Thread-27735 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:27:02.413 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:27:02.414 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:27:11.140 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:27:11.140 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:27:11.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-11-13T03:27:11.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 27, 1), 16.48, 31.93, 0.0, 18.42, 14.51, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:27:11.786 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:27:01
2025-11-13T03:27:11.909 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:27:12.057 [DEBUG] [Thread-27736] [transport.py] [_log()] starting thread (client mode): 0x1496ba90
2025-11-13T03:27:12.057 [DEBUG] [Thread-27736] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:27:12.077 [DEBUG] [Thread-27736] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:27:12.077 [INFO] [Thread-27736] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] client lang: <none>
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] server lang: <none>
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] kex follows: False
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:27:12.078 [DEBUG] [Thread-27736] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:27:12.079 [DEBUG] [Thread-27736] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:27:12.079 [DEBUG] [Thread-27736] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:27:12.079 [DEBUG] [Thread-27736] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:27:12.079 [DEBUG] [Thread-27736] [transport.py] [_log()] Compression: none
2025-11-13T03:27:12.079 [DEBUG] [Thread-27736] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:27:12.096 [DEBUG] [Thread-27736] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:27:12.096 [DEBUG] [Thread-27736] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:27:12.097 [DEBUG] [Thread-27736] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:27:12.097 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:27:12.098 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:27:12.099 [DEBUG] [Thread-27736] [transport.py] [_log()] userauth is OK
2025-11-13T03:27:12.099 [DEBUG] [Thread-27736] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:27:12.099 [DEBUG] [Thread-27736] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:27:12.100 [DEBUG] [Thread-27736] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:27:12.100 [DEBUG] [Thread-27736] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:27:12.124 [INFO] [Thread-27736] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:27:12.125 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:27:12.761 [DEBUG] [Thread-27736] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:27:12.761 [DEBUG] [Thread-27736] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:27:12.761 [DEBUG] [Thread-27736] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:27:12.802 [DEBUG] [Thread-27736] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:27:12.802 [DEBUG] [Thread-27736] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:27:12.805 [DEBUG] [Thread-27736] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:27:12.817 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:27:12.817 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:27:12.819 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:27:12.821 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:27:12.826 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:27:12.828 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:27:12.828 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:27:12.828 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:27:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:27:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.060159 -999.00  +14.30   5.49     38   +0.40 1 1 1 1 1     0    0 17.39 139.10 ZNESW 6.5 5.5 226.9 14.0 14.3 -25.2 14.2 -24.4 14.0 -23.9 14.2 -24.7
2025-11-13T03:27:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:27:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:27:12.829 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.060159
2025-11-13T03:27:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:27:12.830 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:27:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:27:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:27:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:27:12.831 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:27:01', tmtdew=16.48, humidity=31.93, cloud=0.0, wind=18.42, temperature=14.51, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:27:02', seeing=0.87, atlas_timestamp='2025-11-13T01:26:37.738', atlas_cloud=1, atlas_rain=1, zp_data=[0.00274999999999892, 0.0012500000000006395, 0.056250000000000355, 0.06349999999999767, 0.04749999999999943, 0.08025000000000126, 0.019999999999999574, 0.025249999999999773, 0.05349999999999966, 0.018000000000000682, 0.02474999999999916, 0.06849999999999845, 0.11199999999999832, 0.062249999999998806, 0.006999999999999673, 0.0009999999999994458, 0.04574999999999996, 0.049999999999998934, 0.056499999999997996, 0.10024999999999906, 0.12499999999999822, 0.09174999999999933, 0.0417500000000004, 0.016750000000000043, 0.04899999999999949, 0.1349999999999998, 0.11875000000000036, 0.1905000000000001, 0.18100000000000094, 0.10600000000000165, 0.11500000000000021, 0.05500000000000149, -0.06625000000000014], zp_timestamp='2025-11-13T01:23:00')
2025-11-13T03:27:12.831 [DEBUG] [Thread-27736] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:27:12.915 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:27:12.927 [DEBUG] [Thread-27739] [transport.py] [_log()] starting thread (client mode): 0x14983cd0
2025-11-13T03:27:12.927 [DEBUG] [Thread-27739] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:27:12.942 [DEBUG] [Thread-27739] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:27:12.942 [INFO] [Thread-27739] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:27:12.949 [DEBUG] [Thread-27739] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:27:12.949 [DEBUG] [Thread-27739] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:27:12.949 [DEBUG] [Thread-27739] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:27:12.949 [DEBUG] [Thread-27739] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:27:12.949 [DEBUG] [Thread-27739] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:27:12.949 [DEBUG] [Thread-27739] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:27:12.949 [DEBUG] [Thread-27739] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] client lang: <none>
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] server lang: <none>
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] kex follows: False
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] Compression: none
2025-11-13T03:27:12.950 [DEBUG] [Thread-27739] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:27:13.010 [DEBUG] [Thread-27739] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:27:13.011 [DEBUG] [Thread-27739] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:27:13.012 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:27:13.012 [DEBUG] [Thread-27739] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:27:13.013 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:27:13.068 [DEBUG] [Thread-27739] [transport.py] [_log()] userauth is OK
2025-11-13T03:27:13.068 [DEBUG] [Thread-27739] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:27:13.068 [DEBUG] [Thread-27739] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:27:13.068 [DEBUG] [Thread-27739] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:27:13.068 [DEBUG] [Thread-27739] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:27:13.087 [INFO] [Thread-27739] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:27:13.088 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:27:13.088 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:27:13.899 [DEBUG] [Thread-27739] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:27:13.899 [DEBUG] [Thread-27739] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:27:13.948 [DEBUG] [Thread-27739] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:27:13.948 [DEBUG] [Thread-27739] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:27:13.957 [DEBUG] [Thread-27739] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:27:13.966 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:27:13.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-11-13T03:27:13.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-11-13T03:27:13.985 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:27:13.986 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:27:13.986 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:27:13.994 [DEBUG] [Thread-27739] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:27:17.041 [DEBUG] [Thread-27741 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:27:17.163 [DEBUG] [Thread-27742 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:27:32.077 [DEBUG] [Thread-27743 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:27:44.011 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:27:44.011 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:27:44.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-11-13T03:27:44.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 27, 33), 16.33, 32.45, 0.0, 20.33, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:27:44.646 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:27:33
2025-11-13T03:27:44.769 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:27:44.914 [DEBUG] [Thread-27744] [transport.py] [_log()] starting thread (client mode): 0x149835b0
2025-11-13T03:27:44.914 [DEBUG] [Thread-27744] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:27:44.925 [DEBUG] [Thread-27744] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:27:44.925 [INFO] [Thread-27744] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] client lang: <none>
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] server lang: <none>
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] kex follows: False
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] Compression: none
2025-11-13T03:27:44.926 [DEBUG] [Thread-27744] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:27:44.935 [DEBUG] [Thread-27744] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:27:44.935 [DEBUG] [Thread-27744] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:27:44.935 [DEBUG] [Thread-27744] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:27:44.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:27:44.936 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:27:44.937 [DEBUG] [Thread-27744] [transport.py] [_log()] userauth is OK
2025-11-13T03:27:44.937 [DEBUG] [Thread-27744] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:27:44.937 [DEBUG] [Thread-27744] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:27:44.937 [DEBUG] [Thread-27744] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:27:44.937 [DEBUG] [Thread-27744] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:27:44.956 [INFO] [Thread-27744] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:27:44.956 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:27:45.673 [DEBUG] [Thread-27744] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:27:45.674 [DEBUG] [Thread-27744] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:27:45.674 [DEBUG] [Thread-27744] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:27:45.715 [DEBUG] [Thread-27744] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:27:45.715 [DEBUG] [Thread-27744] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:27:45.718 [DEBUG] [Thread-27744] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:27:45.729 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:27:45.730 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:27:45.732 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:27:45.733 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:27:45.739 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:27:45.740 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:27:45.741 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:27:45.741 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:27:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:27:45.741 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.060507 -999.00  +14.20  12.10     39   +0.50 1 1 1 1 1     0    0 17.48 138.67 ZNESW 11.3 12.1 221.8 15.3 14.3 -25.3 14.2 -24.3 14.0 -24.0 14.3 -24.7
2025-11-13T03:27:45.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:27:45.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:27:45.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.060507
2025-11-13T03:27:45.742 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:27:45.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:27:45.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:27:45.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:27:45.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:27:45.743 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:27:33', tmtdew=16.33, humidity=32.45, cloud=0.0, wind=20.33, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:27:34', seeing=0.87, atlas_timestamp='2025-11-13T01:27:07.805', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.03074999999999939, 0.06825000000000081, 0.04749999999999943, 0.02549999999999919, 0.02525000000000155, 0.02749999999999808, 0.024250000000000327, 0.022499999999999076, -0.014499999999998181, 0.04475000000000051, 0.05299999999999905, 0.0884999999999998, 0.03524999999999956, -0.053000000000000824, -0.006000000000000227, 0.02725000000000044, 0.050499999999999545, 0.058999999999999275, 0.07924999999999827, 0.12549999999999883, 0.027249999999998664, 0.03225000000000122, 0.004749999999999588, 0.005999999999998451, 0.13349999999999973, 0.09375, 0.11850000000000094, 0.12100000000000044, 0.07200000000000095, 0.11900000000000155, 0.053000000000000824, -0.06825000000000081], zp_timestamp='2025-11-13T01:26:00')
2025-11-13T03:27:45.743 [DEBUG] [Thread-27744] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:27:45.826 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:27:45.840 [DEBUG] [Thread-27747] [transport.py] [_log()] starting thread (client mode): 0x1498aef0
2025-11-13T03:27:45.840 [DEBUG] [Thread-27747] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:27:45.855 [DEBUG] [Thread-27747] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:27:45.855 [INFO] [Thread-27747] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] client lang: <none>
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] server lang: <none>
2025-11-13T03:27:45.863 [DEBUG] [Thread-27747] [transport.py] [_log()] kex follows: False
2025-11-13T03:27:45.864 [DEBUG] [Thread-27747] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:27:45.864 [DEBUG] [Thread-27747] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:27:45.864 [DEBUG] [Thread-27747] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:27:45.864 [DEBUG] [Thread-27747] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:27:45.864 [DEBUG] [Thread-27747] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:27:45.864 [DEBUG] [Thread-27747] [transport.py] [_log()] Compression: none
2025-11-13T03:27:45.864 [DEBUG] [Thread-27747] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:27:45.927 [DEBUG] [Thread-27747] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:27:45.928 [DEBUG] [Thread-27747] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:27:45.928 [DEBUG] [Thread-27747] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:27:45.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:27:45.929 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:27:45.986 [DEBUG] [Thread-27747] [transport.py] [_log()] userauth is OK
2025-11-13T03:27:45.986 [DEBUG] [Thread-27747] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:27:45.987 [DEBUG] [Thread-27747] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:27:45.987 [DEBUG] [Thread-27747] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:27:45.987 [DEBUG] [Thread-27747] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:27:46.009 [INFO] [Thread-27747] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:27:46.009 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:27:46.010 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:27:46.839 [DEBUG] [Thread-27747] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:27:46.839 [DEBUG] [Thread-27747] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:27:46.886 [DEBUG] [Thread-27747] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:27:46.887 [DEBUG] [Thread-27747] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:27:46.896 [DEBUG] [Thread-27747] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:27:46.905 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:27:46.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-11-13T03:27:46.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-11-13T03:27:46.924 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:27:46.924 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:27:46.924 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:27:46.932 [DEBUG] [Thread-27747] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:27:47.113 [DEBUG] [Thread-27749 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:02.180 [DEBUG] [Thread-27750 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:02.616 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:02.617 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:16.944 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:28:16.944 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:28:16.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-11-13T03:28:17.215 [DEBUG] [Thread-27751 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:17.223 [DEBUG] [Thread-27752 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 28, 5), 16.24, 32.65, 0.0, 18.44, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:28:17.574 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:28:05
2025-11-13T03:28:17.697 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:28:17.841 [DEBUG] [Thread-27753] [transport.py] [_log()] starting thread (client mode): 0x149760b0
2025-11-13T03:28:17.842 [DEBUG] [Thread-27753] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:28:17.861 [DEBUG] [Thread-27753] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:28:17.862 [INFO] [Thread-27753] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] client lang: <none>
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] server lang: <none>
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] kex follows: False
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] Compression: none
2025-11-13T03:28:17.863 [DEBUG] [Thread-27753] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:28:17.876 [DEBUG] [Thread-27753] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:28:17.876 [DEBUG] [Thread-27753] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:28:17.877 [DEBUG] [Thread-27753] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:28:17.877 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:28:17.878 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:28:17.879 [DEBUG] [Thread-27753] [transport.py] [_log()] userauth is OK
2025-11-13T03:28:17.879 [DEBUG] [Thread-27753] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:28:17.879 [DEBUG] [Thread-27753] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:28:17.879 [DEBUG] [Thread-27753] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:28:17.879 [DEBUG] [Thread-27753] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:28:17.897 [INFO] [Thread-27753] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:28:17.898 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:28:18.563 [DEBUG] [Thread-27753] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:28:18.563 [DEBUG] [Thread-27753] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:28:18.563 [DEBUG] [Thread-27753] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:28:18.604 [DEBUG] [Thread-27753] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:28:18.604 [DEBUG] [Thread-27753] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:28:18.607 [DEBUG] [Thread-27753] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:28:18.619 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:28:18.620 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:28:18.622 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:28:18.624 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:28:18.630 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:28:18.632 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:28:18.633 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:28:18.633 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:28:18.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:28:18.633 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.060854 -999.00  +14.20   8.14     38   +0.30 1 1 1 1 1     0    0 17.77 150.62 ZNESW 11.2 8.1 226.7 16.1 14.3 -25.1 14.2 -24.5 13.9 -24.1 14.3 -24.6
2025-11-13T03:28:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:28:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:28:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.060854
2025-11-13T03:28:18.634 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:28:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:28:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:28:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:28:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:28:18.635 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:28:05', tmtdew=16.24, humidity=32.65, cloud=0.0, wind=18.44, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:28:06', seeing=1.05, atlas_timestamp='2025-11-13T01:27:37.786', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.03074999999999939, 0.06825000000000081, 0.04749999999999943, 0.02549999999999919, 0.02525000000000155, 0.02749999999999808, 0.024250000000000327, 0.022499999999999076, -0.014499999999998181, 0.04475000000000051, 0.05299999999999905, 0.0884999999999998, 0.03524999999999956, -0.053000000000000824, -0.006000000000000227, 0.02725000000000044, 0.050499999999999545, 0.058999999999999275, 0.07924999999999827, 0.12549999999999883, 0.027249999999998664, 0.03225000000000122, 0.004749999999999588, 0.005999999999998451, 0.13349999999999973, 0.09375, 0.11850000000000094, 0.12100000000000044, 0.07200000000000095, 0.11900000000000155, 0.053000000000000824, -0.06825000000000081], zp_timestamp='2025-11-13T01:26:00')
2025-11-13T03:28:18.636 [DEBUG] [Thread-27753] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:28:18.719 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:28:18.732 [DEBUG] [Thread-27756] [transport.py] [_log()] starting thread (client mode): 0x149235e0
2025-11-13T03:28:18.732 [DEBUG] [Thread-27756] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:28:18.734 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:18.746 [DEBUG] [Thread-27756] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:28:18.746 [INFO] [Thread-27756] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] client lang: <none>
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] server lang: <none>
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] kex follows: False
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:28:18.754 [DEBUG] [Thread-27756] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:28:18.755 [DEBUG] [Thread-27756] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:28:18.755 [DEBUG] [Thread-27756] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:28:18.755 [DEBUG] [Thread-27756] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:28:18.755 [DEBUG] [Thread-27756] [transport.py] [_log()] Compression: none
2025-11-13T03:28:18.755 [DEBUG] [Thread-27756] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:28:18.814 [DEBUG] [Thread-27756] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:28:18.815 [DEBUG] [Thread-27756] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:28:18.815 [DEBUG] [Thread-27756] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:28:18.815 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:28:18.816 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:28:18.870 [DEBUG] [Thread-27756] [transport.py] [_log()] userauth is OK
2025-11-13T03:28:18.870 [DEBUG] [Thread-27756] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:28:18.871 [DEBUG] [Thread-27756] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:28:18.871 [DEBUG] [Thread-27756] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:28:18.871 [DEBUG] [Thread-27756] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:28:18.890 [INFO] [Thread-27756] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:28:18.890 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:28:18.891 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:28:19.703 [DEBUG] [Thread-27756] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:28:19.704 [DEBUG] [Thread-27756] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:28:19.752 [DEBUG] [Thread-27756] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:28:19.752 [DEBUG] [Thread-27756] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:28:19.761 [DEBUG] [Thread-27756] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:28:19.770 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:28:19.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-11-13T03:28:19.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-11-13T03:28:19.788 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:28:19.789 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:28:19.789 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:28:19.798 [DEBUG] [Thread-27756] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:28:22.194 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:27.374 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:32.256 [DEBUG] [Thread-27758 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:33.115 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:47.299 [DEBUG] [Thread-27759 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:49.820 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:28:49.820 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:28:49.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-11-13T03:28:50.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 28, 37), 16.34, 32.16, 0.0, 17.2, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:28:50.453 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:28:37
2025-11-13T03:28:50.576 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:28:50.722 [DEBUG] [Thread-27760] [transport.py] [_log()] starting thread (client mode): 0x1493e770
2025-11-13T03:28:50.722 [DEBUG] [Thread-27760] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:28:50.745 [DEBUG] [Thread-27760] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:28:50.745 [INFO] [Thread-27760] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:28:50.749 [DEBUG] [Thread-27760] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:28:50.749 [DEBUG] [Thread-27760] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] client lang: <none>
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] server lang: <none>
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] kex follows: False
2025-11-13T03:28:50.750 [DEBUG] [Thread-27760] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:28:50.751 [DEBUG] [Thread-27760] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:28:50.751 [DEBUG] [Thread-27760] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:28:50.751 [DEBUG] [Thread-27760] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:28:50.751 [DEBUG] [Thread-27760] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:28:50.751 [DEBUG] [Thread-27760] [transport.py] [_log()] Compression: none
2025-11-13T03:28:50.751 [DEBUG] [Thread-27760] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:28:50.771 [DEBUG] [Thread-27760] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:28:50.772 [DEBUG] [Thread-27760] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:28:50.772 [DEBUG] [Thread-27760] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:28:50.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:28:50.773 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:28:50.774 [DEBUG] [Thread-27760] [transport.py] [_log()] userauth is OK
2025-11-13T03:28:50.775 [DEBUG] [Thread-27760] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:28:50.775 [DEBUG] [Thread-27760] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:28:50.775 [DEBUG] [Thread-27760] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:28:50.775 [DEBUG] [Thread-27760] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:28:50.801 [INFO] [Thread-27760] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:28:50.802 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:28:51.395 [DEBUG] [Thread-27760] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:28:51.396 [DEBUG] [Thread-27760] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:28:51.396 [DEBUG] [Thread-27760] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:28:51.436 [DEBUG] [Thread-27760] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:28:51.437 [DEBUG] [Thread-27760] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:28:51.440 [DEBUG] [Thread-27760] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:28:51.452 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:28:51.453 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:28:51.455 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:28:51.457 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:28:51.462 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:28:51.464 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:28:51.464 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:28:51.465 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:28:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:28:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.061201 -999.00  +14.20  11.75     38   +0.20 1 1 1 1 1     0    0 17.15 131.91 ZNESW 9.1 11.8 222.8 15.2 14.3 -25.5 14.2 -24.4 13.9 -24.0 14.2 -24.6
2025-11-13T03:28:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:28:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:28:51.465 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.061201
2025-11-13T03:28:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:28:51.466 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:28:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:28:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:28:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:28:51.467 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:28:37', tmtdew=16.34, humidity=32.16, cloud=0.0, wind=17.2, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:28:38', seeing=1.05, atlas_timestamp='2025-11-13T01:28:07.766', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.03074999999999939, 0.06825000000000081, 0.04749999999999943, 0.02549999999999919, 0.02525000000000155, 0.02749999999999808, 0.024250000000000327, 0.022499999999999076, -0.014499999999998181, 0.04475000000000051, 0.05299999999999905, 0.0884999999999998, 0.03524999999999956, -0.053000000000000824, -0.006000000000000227, 0.02725000000000044, 0.050499999999999545, 0.058999999999999275, 0.07924999999999827, 0.12549999999999883, 0.027249999999998664, 0.03225000000000122, 0.004749999999999588, 0.005999999999998451, 0.13349999999999973, 0.09375, 0.11850000000000094, 0.12100000000000044, 0.07200000000000095, 0.11900000000000155, 0.053000000000000824, -0.06825000000000081], zp_timestamp='2025-11-13T01:26:00')
2025-11-13T03:28:51.467 [DEBUG] [Thread-27760] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:28:51.550 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:28:51.563 [DEBUG] [Thread-27763] [transport.py] [_log()] starting thread (client mode): 0x1496bee0
2025-11-13T03:28:51.563 [DEBUG] [Thread-27763] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:28:51.578 [DEBUG] [Thread-27763] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:28:51.578 [INFO] [Thread-27763] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] client lang: <none>
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] server lang: <none>
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] kex follows: False
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:28:51.586 [DEBUG] [Thread-27763] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:28:51.587 [DEBUG] [Thread-27763] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:28:51.587 [DEBUG] [Thread-27763] [transport.py] [_log()] Compression: none
2025-11-13T03:28:51.587 [DEBUG] [Thread-27763] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:28:51.646 [DEBUG] [Thread-27763] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:28:51.647 [DEBUG] [Thread-27763] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:28:51.647 [DEBUG] [Thread-27763] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:28:51.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:28:51.648 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:28:51.702 [DEBUG] [Thread-27763] [transport.py] [_log()] userauth is OK
2025-11-13T03:28:51.703 [DEBUG] [Thread-27763] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:28:51.703 [DEBUG] [Thread-27763] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:28:51.703 [DEBUG] [Thread-27763] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:28:51.703 [DEBUG] [Thread-27763] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:28:51.722 [INFO] [Thread-27763] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:28:51.723 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:28:51.723 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:28:52.136 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:28:52.514 [DEBUG] [Thread-27763] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:28:52.514 [DEBUG] [Thread-27763] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:28:52.562 [DEBUG] [Thread-27763] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:28:52.562 [DEBUG] [Thread-27763] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:28:52.571 [DEBUG] [Thread-27763] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:28:52.580 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:28:52.581 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:28:52.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-11-13T03:28:52.599 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:28:52.600 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:28:52.600 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:28:52.608 [DEBUG] [Thread-27763] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:28:56.935 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:02.337 [DEBUG] [Thread-27765 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:02.820 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:02.821 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:16.896 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:17.277 [DEBUG] [Thread-27766 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:17.387 [DEBUG] [Thread-27767 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:21.681 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:22.631 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:29:22.631 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:29:22.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-11-13T03:29:23.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 29, 9), 16.43, 31.93, 0.0, 16.48, 14.47, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:29:23.256 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:29:09
2025-11-13T03:29:23.379 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:29:23.524 [DEBUG] [Thread-27768] [transport.py] [_log()] starting thread (client mode): 0x149f3a60
2025-11-13T03:29:23.524 [DEBUG] [Thread-27768] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:29:23.544 [DEBUG] [Thread-27768] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:29:23.544 [INFO] [Thread-27768] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:29:23.547 [DEBUG] [Thread-27768] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:29:23.547 [DEBUG] [Thread-27768] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:29:23.547 [DEBUG] [Thread-27768] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:29:23.547 [DEBUG] [Thread-27768] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:29:23.547 [DEBUG] [Thread-27768] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:29:23.547 [DEBUG] [Thread-27768] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] client lang: <none>
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] server lang: <none>
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] kex follows: False
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] Compression: none
2025-11-13T03:29:23.548 [DEBUG] [Thread-27768] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:29:23.564 [DEBUG] [Thread-27768] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:29:23.564 [DEBUG] [Thread-27768] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:29:23.565 [DEBUG] [Thread-27768] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:29:23.565 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:29:23.566 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:29:23.566 [DEBUG] [Thread-27768] [transport.py] [_log()] userauth is OK
2025-11-13T03:29:23.567 [DEBUG] [Thread-27768] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:29:23.567 [DEBUG] [Thread-27768] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:29:23.567 [DEBUG] [Thread-27768] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:29:23.567 [DEBUG] [Thread-27768] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:29:23.584 [INFO] [Thread-27768] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:29:23.585 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:29:24.225 [DEBUG] [Thread-27768] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:29:24.225 [DEBUG] [Thread-27768] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:29:24.225 [DEBUG] [Thread-27768] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:29:24.266 [DEBUG] [Thread-27768] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:29:24.266 [DEBUG] [Thread-27768] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:29:24.269 [DEBUG] [Thread-27768] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:29:24.280 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:29:24.281 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:29:24.283 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:29:24.284 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:29:24.290 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:29:24.292 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:29:24.293 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:29:24.293 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:29:24.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:29:24.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.061548 -999.00  +14.20   9.73     38   +0.30 1 1 1 1 1     0    0 17.13 127.45 ZNESW 6.1 9.7 218.5 14.3 14.3 -25.2 14.2 -24.5 13.9 -23.9 14.2 -24.8
2025-11-13T03:29:24.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:29:24.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:29:24.293 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.061548
2025-11-13T03:29:24.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:29:24.294 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:29:24.295 [DEBUG] [Thread-27768] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:29:24.301 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:29:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:29:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:29:24.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:29:09', tmtdew=16.43, humidity=31.93, cloud=0.0, wind=16.48, temperature=14.47, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:29:10', seeing=0.9, atlas_timestamp='2025-11-13T01:28:37.747', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.03074999999999939, 0.06825000000000081, 0.04749999999999943, 0.02549999999999919, 0.02525000000000155, 0.02749999999999808, 0.024250000000000327, 0.022499999999999076, -0.014499999999998181, 0.04475000000000051, 0.05299999999999905, 0.0884999999999998, 0.03524999999999956, -0.053000000000000824, -0.006000000000000227, 0.02725000000000044, 0.050499999999999545, 0.058999999999999275, 0.07924999999999827, 0.12549999999999883, 0.027249999999998664, 0.03225000000000122, 0.004749999999999588, 0.005999999999998451, 0.13349999999999973, 0.09375, 0.11850000000000094, 0.12100000000000044, 0.07200000000000095, 0.11900000000000155, 0.053000000000000824, -0.06825000000000081], zp_timestamp='2025-11-13T01:26:00')
2025-11-13T03:29:24.388 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:29:24.401 [DEBUG] [Thread-27771] [transport.py] [_log()] starting thread (client mode): 0x14947550
2025-11-13T03:29:24.401 [DEBUG] [Thread-27771] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:29:24.417 [DEBUG] [Thread-27771] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:29:24.417 [INFO] [Thread-27771] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:29:24.425 [DEBUG] [Thread-27771] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:29:24.425 [DEBUG] [Thread-27771] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:29:24.425 [DEBUG] [Thread-27771] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:29:24.425 [DEBUG] [Thread-27771] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] client lang: <none>
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] server lang: <none>
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] kex follows: False
2025-11-13T03:29:24.426 [DEBUG] [Thread-27771] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:29:24.427 [DEBUG] [Thread-27771] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:29:24.427 [DEBUG] [Thread-27771] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:29:24.427 [DEBUG] [Thread-27771] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:29:24.427 [DEBUG] [Thread-27771] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:29:24.427 [DEBUG] [Thread-27771] [transport.py] [_log()] Compression: none
2025-11-13T03:29:24.427 [DEBUG] [Thread-27771] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:29:24.482 [DEBUG] [Thread-27771] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:29:24.483 [DEBUG] [Thread-27771] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:29:24.483 [DEBUG] [Thread-27771] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:29:24.483 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:29:24.484 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:29:24.538 [DEBUG] [Thread-27771] [transport.py] [_log()] userauth is OK
2025-11-13T03:29:24.538 [DEBUG] [Thread-27771] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:29:24.538 [DEBUG] [Thread-27771] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:29:24.538 [DEBUG] [Thread-27771] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:29:24.538 [DEBUG] [Thread-27771] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:29:24.561 [INFO] [Thread-27771] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:29:24.561 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:29:24.562 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:29:25.435 [DEBUG] [Thread-27771] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:29:25.436 [DEBUG] [Thread-27771] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:29:25.484 [DEBUG] [Thread-27771] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:29:25.484 [DEBUG] [Thread-27771] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:29:25.493 [DEBUG] [Thread-27771] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:29:25.502 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:29:25.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-11-13T03:29:25.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-11-13T03:29:25.520 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:29:25.521 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:29:25.521 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:29:25.530 [DEBUG] [Thread-27771] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:29:28.414 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:32.423 [DEBUG] [Thread-27773 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:32.796 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:47.486 [DEBUG] [Thread-27774 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:29:55.545 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:29:55.545 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:29:55.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-11-13T03:29:56.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 29, 41), 16.51, 31.88, 0.0, 16.64, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:29:56.179 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:29:41
2025-11-13T03:29:56.302 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:29:56.450 [DEBUG] [Thread-27775] [transport.py] [_log()] starting thread (client mode): 0x14982ad0
2025-11-13T03:29:56.450 [DEBUG] [Thread-27775] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:29:56.470 [DEBUG] [Thread-27775] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:29:56.470 [INFO] [Thread-27775] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] client lang: <none>
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] server lang: <none>
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] kex follows: False
2025-11-13T03:29:56.473 [DEBUG] [Thread-27775] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:29:56.474 [DEBUG] [Thread-27775] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:29:56.474 [DEBUG] [Thread-27775] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:29:56.474 [DEBUG] [Thread-27775] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:29:56.474 [DEBUG] [Thread-27775] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:29:56.474 [DEBUG] [Thread-27775] [transport.py] [_log()] Compression: none
2025-11-13T03:29:56.474 [DEBUG] [Thread-27775] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:29:56.491 [DEBUG] [Thread-27775] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:29:56.492 [DEBUG] [Thread-27775] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:29:56.492 [DEBUG] [Thread-27775] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:29:56.492 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:29:56.493 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:29:56.494 [DEBUG] [Thread-27775] [transport.py] [_log()] userauth is OK
2025-11-13T03:29:56.494 [DEBUG] [Thread-27775] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:29:56.494 [DEBUG] [Thread-27775] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:29:56.494 [DEBUG] [Thread-27775] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:29:56.494 [DEBUG] [Thread-27775] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:29:56.519 [INFO] [Thread-27775] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:29:56.519 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:29:57.138 [DEBUG] [Thread-27775] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:29:57.138 [DEBUG] [Thread-27775] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:29:57.138 [DEBUG] [Thread-27775] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:29:57.179 [DEBUG] [Thread-27775] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:29:57.179 [DEBUG] [Thread-27775] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:29:57.181 [DEBUG] [Thread-27775] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:29:57.193 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:29:57.193 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:29:57.194 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:29:57.195 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:29:57.198 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:29:57.199 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:29:57.199 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:29:57.199 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:29:57.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:29:57.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.061895 -999.00  +14.20   7.50     38   +0.30 1 1 1 1 1     0    0 16.38 103.45 ZNESW 8.9 7.5 242.0 15.1 14.3 -25.4 14.2 -24.5 13.9 -24.0 14.2 -24.8
2025-11-13T03:29:57.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:29:57.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:29:57.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.061895
2025-11-13T03:29:57.199 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:29:57.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:29:57.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:29:57.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:29:57.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:29:57.200 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:29:41', tmtdew=16.51, humidity=31.88, cloud=0.0, wind=16.64, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:29:42', seeing=0.9, atlas_timestamp='2025-11-13T01:29:07.728', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.03074999999999939, 0.06825000000000081, 0.04749999999999943, 0.02549999999999919, 0.02525000000000155, 0.02749999999999808, 0.024250000000000327, 0.022499999999999076, -0.014499999999998181, 0.04475000000000051, 0.05299999999999905, 0.0884999999999998, 0.03524999999999956, -0.053000000000000824, -0.006000000000000227, 0.02725000000000044, 0.050499999999999545, 0.058999999999999275, 0.07924999999999827, 0.12549999999999883, 0.027249999999998664, 0.03225000000000122, 0.004749999999999588, 0.005999999999998451, 0.13349999999999973, 0.09375, 0.11850000000000094, 0.12100000000000044, 0.07200000000000095, 0.11900000000000155, 0.053000000000000824, -0.06825000000000081], zp_timestamp='2025-11-13T01:26:00')
2025-11-13T03:29:57.200 [DEBUG] [Thread-27775] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:29:57.274 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:29:57.288 [DEBUG] [Thread-27778] [transport.py] [_log()] starting thread (client mode): 0x14989270
2025-11-13T03:29:57.288 [DEBUG] [Thread-27778] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:29:57.304 [DEBUG] [Thread-27778] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:29:57.304 [INFO] [Thread-27778] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] client lang: <none>
2025-11-13T03:29:57.312 [DEBUG] [Thread-27778] [transport.py] [_log()] server lang: <none>
2025-11-13T03:29:57.313 [DEBUG] [Thread-27778] [transport.py] [_log()] kex follows: False
2025-11-13T03:29:57.313 [DEBUG] [Thread-27778] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:29:57.313 [DEBUG] [Thread-27778] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:29:57.313 [DEBUG] [Thread-27778] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:29:57.313 [DEBUG] [Thread-27778] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:29:57.313 [DEBUG] [Thread-27778] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:29:57.313 [DEBUG] [Thread-27778] [transport.py] [_log()] Compression: none
2025-11-13T03:29:57.313 [DEBUG] [Thread-27778] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:29:57.371 [DEBUG] [Thread-27778] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:29:57.371 [DEBUG] [Thread-27778] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:29:57.372 [DEBUG] [Thread-27778] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:29:57.372 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:29:57.373 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:29:57.427 [DEBUG] [Thread-27778] [transport.py] [_log()] userauth is OK
2025-11-13T03:29:57.427 [DEBUG] [Thread-27778] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:29:57.427 [DEBUG] [Thread-27778] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:29:57.427 [DEBUG] [Thread-27778] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:29:57.427 [DEBUG] [Thread-27778] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:29:57.446 [INFO] [Thread-27778] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:29:57.447 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:29:57.447 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:29:58.242 [DEBUG] [Thread-27778] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:29:58.242 [DEBUG] [Thread-27778] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:29:58.289 [DEBUG] [Thread-27778] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:29:58.290 [DEBUG] [Thread-27778] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:29:58.299 [DEBUG] [Thread-27778] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:29:58.308 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:29:58.308 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:29:58.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-11-13T03:29:58.327 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:29:58.327 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:29:58.328 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:29:58.336 [DEBUG] [Thread-27778] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:30:02.517 [DEBUG] [Thread-27780 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:30:03.026 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:30:03.026 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:30:17.345 [DEBUG] [Thread-27781 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:30:17.558 [DEBUG] [Thread-27782 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:30:28.357 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:30:28.357 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:30:28.358 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:30:29.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 30, 14), 16.49, 31.91, 0.0, 16.64, 14.49, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:30:29.002 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:30:14
2025-11-13T03:30:29.133 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:30:29.285 [DEBUG] [Thread-27783] [transport.py] [_log()] starting thread (client mode): 0x1737e020
2025-11-13T03:30:29.285 [DEBUG] [Thread-27783] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:30:29.307 [DEBUG] [Thread-27783] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:30:29.307 [INFO] [Thread-27783] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] client lang: <none>
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] server lang: <none>
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] kex follows: False
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] Compression: none
2025-11-13T03:30:29.310 [DEBUG] [Thread-27783] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:30:29.325 [DEBUG] [Thread-27783] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:30:29.325 [DEBUG] [Thread-27783] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:30:29.325 [DEBUG] [Thread-27783] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:30:29.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:30:29.325 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:30:29.326 [DEBUG] [Thread-27783] [transport.py] [_log()] userauth is OK
2025-11-13T03:30:29.326 [DEBUG] [Thread-27783] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:30:29.326 [DEBUG] [Thread-27783] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:30:29.326 [DEBUG] [Thread-27783] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:30:29.326 [DEBUG] [Thread-27783] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:30:29.342 [INFO] [Thread-27783] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:30:29.342 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:30:29.933 [DEBUG] [Thread-27783] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:30:29.933 [DEBUG] [Thread-27783] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:30:29.933 [DEBUG] [Thread-27783] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:30:29.974 [DEBUG] [Thread-27783] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:30:29.974 [DEBUG] [Thread-27783] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:30:29.976 [DEBUG] [Thread-27783] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:30:29.987 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:30:29.987 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:30:29.988 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:30:29.989 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:30:29.992 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:30:29.993 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:30:29.993 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.062590 -999.00  +14.20  11.11     38   +0.20 1 1 1 1 1     0    0 16.67 102.81 ZNESW 11.0 11.1 242.0 17.8 14.3 -25.2 14.2 -24.5 13.9 -24.2 14.2 -24.8
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.062590
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:30:29.993 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:30:14', tmtdew=16.49, humidity=31.91, cloud=0.0, wind=16.64, temperature=14.49, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:30:14', seeing=0.99, atlas_timestamp='2025-11-13T01:30:07.776', atlas_cloud=1, atlas_rain=1, zp_data=[0.011749999999999261, -0.03074999999999939, 0.06825000000000081, 0.04749999999999943, 0.02549999999999919, 0.02525000000000155, 0.02749999999999808, 0.024250000000000327, 0.022499999999999076, -0.014499999999998181, 0.04475000000000051, 0.05299999999999905, 0.0884999999999998, 0.03524999999999956, -0.053000000000000824, -0.006000000000000227, 0.02725000000000044, 0.050499999999999545, 0.058999999999999275, 0.07924999999999827, 0.12549999999999883, 0.027249999999998664, 0.03225000000000122, 0.004749999999999588, 0.005999999999998451, 0.13349999999999973, 0.09375, 0.11850000000000094, 0.12100000000000044, 0.07200000000000095, 0.11900000000000155, 0.053000000000000824, -0.06825000000000081], zp_timestamp='2025-11-13T01:26:00')
2025-11-13T03:30:29.994 [DEBUG] [Thread-27783] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:30:30.069 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:30:30.081 [DEBUG] [Thread-27786] [transport.py] [_log()] starting thread (client mode): 0x1496b340
2025-11-13T03:30:30.081 [DEBUG] [Thread-27786] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:30:30.096 [DEBUG] [Thread-27786] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:30:30.096 [INFO] [Thread-27786] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:30:30.103 [DEBUG] [Thread-27786] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:30:30.103 [DEBUG] [Thread-27786] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:30:30.103 [DEBUG] [Thread-27786] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:30:30.103 [DEBUG] [Thread-27786] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] client lang: <none>
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] server lang: <none>
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] kex follows: False
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] Compression: none
2025-11-13T03:30:30.104 [DEBUG] [Thread-27786] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:30:30.160 [DEBUG] [Thread-27786] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:30:30.161 [DEBUG] [Thread-27786] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:30:30.161 [DEBUG] [Thread-27786] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:30:30.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:30:30.161 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:30:30.221 [DEBUG] [Thread-27786] [transport.py] [_log()] userauth is OK
2025-11-13T03:30:30.221 [DEBUG] [Thread-27786] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:30:30.221 [DEBUG] [Thread-27786] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:30:30.221 [DEBUG] [Thread-27786] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:30:30.221 [DEBUG] [Thread-27786] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:30:30.236 [INFO] [Thread-27786] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:30:30.236 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:30:30.236 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:30:31.071 [DEBUG] [Thread-27786] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:30:31.071 [DEBUG] [Thread-27786] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:30:31.119 [DEBUG] [Thread-27786] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:30:31.119 [DEBUG] [Thread-27786] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:30:31.127 [DEBUG] [Thread-27786] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:30:31.135 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:30:31.135 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:30:31.143 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w') -> 00000000
2025-11-13T03:30:31.151 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:30:31.151 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:30:31.151 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:30:31.159 [DEBUG] [Thread-27786] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:30:32.594 [DEBUG] [Thread-27788 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:30:36.548 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:30:39.623 [DEBUG] [Thread-26441 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:30:47.635 [DEBUG] [Thread-27789 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:31:01.181 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:31:01.181 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:31:01.183 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:31:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 30, 46), 16.5, 31.88, 0.0, 18.9, 14.42, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:31:01.808 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:30:46
2025-11-13T03:31:01.931 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:31:02.078 [DEBUG] [Thread-27790] [transport.py] [_log()] starting thread (client mode): 0x149f0340
2025-11-13T03:31:02.078 [DEBUG] [Thread-27790] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:31:02.098 [DEBUG] [Thread-27790] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:31:02.098 [INFO] [Thread-27790] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:31:02.099 [DEBUG] [Thread-27790] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] client lang: <none>
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] server lang: <none>
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] kex follows: False
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:31:02.100 [DEBUG] [Thread-27790] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:31:02.101 [DEBUG] [Thread-27790] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:31:02.101 [DEBUG] [Thread-27790] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:31:02.101 [DEBUG] [Thread-27790] [transport.py] [_log()] Compression: none
2025-11-13T03:31:02.101 [DEBUG] [Thread-27790] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:31:02.110 [DEBUG] [Thread-27790] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:31:02.111 [DEBUG] [Thread-27790] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:31:02.112 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:31:02.113 [DEBUG] [Thread-27790] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:31:02.113 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:31:02.115 [DEBUG] [Thread-27790] [transport.py] [_log()] userauth is OK
2025-11-13T03:31:02.115 [DEBUG] [Thread-27790] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:31:02.115 [DEBUG] [Thread-27790] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:31:02.115 [DEBUG] [Thread-27790] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:31:02.115 [DEBUG] [Thread-27790] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:31:02.153 [INFO] [Thread-27790] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:31:02.153 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:31:02.667 [DEBUG] [Thread-27792 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:31:02.743 [DEBUG] [Thread-27790] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:31:02.743 [DEBUG] [Thread-27790] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:31:02.744 [DEBUG] [Thread-27790] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:31:02.785 [DEBUG] [Thread-27790] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:31:02.785 [DEBUG] [Thread-27790] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:31:02.789 [DEBUG] [Thread-27790] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:31:02.800 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:31:02.801 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:31:02.803 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:31:02.804 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:31:02.811 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:31:02.813 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:31:02.813 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:31:02.813 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:31:02.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:31:02.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.062937 -999.00  +14.20   8.90     38   +0.20 1 1 1 1 1     0    0 16.31 92.31 ZNESW 11.6 8.9 244.9 15.8 14.3 -25.3 14.2 -24.4 13.9 -24.1 14.3 -24.6
2025-11-13T03:31:02.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:31:02.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:31:02.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.062937
2025-11-13T03:31:02.814 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:31:02.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:31:02.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:31:02.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:31:02.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:31:02.815 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:30:46', tmtdew=16.5, humidity=31.88, cloud=0.0, wind=18.9, temperature=14.42, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:30:46', seeing=0.99, atlas_timestamp='2025-11-13T01:30:37.757', atlas_cloud=1, atlas_rain=1, zp_data=[0.01425000000000054, 0.028750000000000497, 0.1067499999999999, 0.039499999999998536, 0.07600000000000051, 0.02525000000000155, -0.0030000000000001137, 0.01425000000000054, 0.038999999999997925, 0.041999999999999815, 0.056750000000000966, 0.0470000000000006, 0.13700000000000045, 0.0337499999999995, -0.03300000000000125, 0.032999999999999474, 0.0467499999999994, 0.06949999999999967, 0.08299999999999841, 0.09524999999999828, 0.08949999999999925, 0.08024999999999949, 0.02325000000000088, 0.03775000000000084, 0.011999999999998678, 0.17099999999999937, 0.11824999999999974, 0.19650000000000034, 0.20749999999999957, 0.11300000000000132, 0.09600000000000186, 0.0730000000000004, -0.06975000000000087], zp_timestamp='2025-11-13T01:29:00')
2025-11-13T03:31:02.816 [DEBUG] [Thread-27790] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:31:02.899 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:31:02.914 [DEBUG] [Thread-27794] [transport.py] [_log()] starting thread (client mode): 0x19dda5f0
2025-11-13T03:31:02.914 [DEBUG] [Thread-27794] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:31:02.929 [DEBUG] [Thread-27794] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:31:02.929 [INFO] [Thread-27794] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] client lang: <none>
2025-11-13T03:31:02.937 [DEBUG] [Thread-27794] [transport.py] [_log()] server lang: <none>
2025-11-13T03:31:02.938 [DEBUG] [Thread-27794] [transport.py] [_log()] kex follows: False
2025-11-13T03:31:02.938 [DEBUG] [Thread-27794] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:31:02.938 [DEBUG] [Thread-27794] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:31:02.938 [DEBUG] [Thread-27794] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:31:02.938 [DEBUG] [Thread-27794] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:31:02.938 [DEBUG] [Thread-27794] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:31:02.938 [DEBUG] [Thread-27794] [transport.py] [_log()] Compression: none
2025-11-13T03:31:02.938 [DEBUG] [Thread-27794] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:31:02.995 [DEBUG] [Thread-27794] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:31:02.996 [DEBUG] [Thread-27794] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:31:02.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:31:02.997 [DEBUG] [Thread-27794] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:31:02.998 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:31:03.050 [DEBUG] [Thread-27794] [transport.py] [_log()] userauth is OK
2025-11-13T03:31:03.051 [DEBUG] [Thread-27794] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:31:03.051 [DEBUG] [Thread-27794] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:31:03.051 [DEBUG] [Thread-27794] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:31:03.051 [DEBUG] [Thread-27794] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:31:03.070 [INFO] [Thread-27794] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:31:03.071 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:31:03.073 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:31:03.229 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:31:03.230 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:31:03.928 [DEBUG] [Thread-27794] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:31:03.928 [DEBUG] [Thread-27794] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:31:03.975 [DEBUG] [Thread-27794] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:31:03.976 [DEBUG] [Thread-27794] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:31:03.985 [DEBUG] [Thread-27794] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:31:03.994 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:31:03.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-11-13T03:31:04.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-11-13T03:31:04.016 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:31:04.016 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:31:04.017 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:31:04.024 [DEBUG] [Thread-27794] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:31:17.423 [DEBUG] [Thread-27796 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:31:17.701 [DEBUG] [Thread-27797 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:31:32.764 [DEBUG] [Thread-27798 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:31:34.027 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:31:34.027 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:31:34.030 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Issuing SQL command SELECT timestamp, avg_t_min_tdew, avg_hum, avg_cloud, avg_wind, avg_temp, t_min_tdew_warn, hum_warn, rain_warn, cloud_warn, wind_warn, temp_warn FROM current_weather ORDER BY timestamp DESC LIMIT 1
2025-11-13T03:31:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 31, 18), 16.52, 31.83, 0.0, 19.25, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:31:34.654 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:31:18
2025-11-13T03:31:34.777 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:31:34.922 [DEBUG] [Thread-27799] [transport.py] [_log()] starting thread (client mode): 0x1737ead0
2025-11-13T03:31:34.923 [DEBUG] [Thread-27799] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:31:34.942 [DEBUG] [Thread-27799] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:31:34.942 [INFO] [Thread-27799] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:31:34.945 [DEBUG] [Thread-27799] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:31:34.945 [DEBUG] [Thread-27799] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:31:34.945 [DEBUG] [Thread-27799] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:31:34.945 [DEBUG] [Thread-27799] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:31:34.945 [DEBUG] [Thread-27799] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:31:34.945 [DEBUG] [Thread-27799] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:31:34.945 [DEBUG] [Thread-27799] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:31:34.945 [DEBUG] [Thread-27799] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] client lang: <none>
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] server lang: <none>
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] kex follows: False
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] Compression: none
2025-11-13T03:31:34.946 [DEBUG] [Thread-27799] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:31:34.963 [DEBUG] [Thread-27799] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:31:34.964 [DEBUG] [Thread-27799] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:31:34.964 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:31:34.965 [DEBUG] [Thread-27799] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:31:34.966 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:31:34.967 [DEBUG] [Thread-27799] [transport.py] [_log()] userauth is OK
2025-11-13T03:31:34.968 [DEBUG] [Thread-27799] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:31:34.968 [DEBUG] [Thread-27799] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:31:34.968 [DEBUG] [Thread-27799] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:31:34.968 [DEBUG] [Thread-27799] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:31:34.994 [INFO] [Thread-27799] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:31:34.995 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:31:35.650 [DEBUG] [Thread-27799] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:31:35.650 [DEBUG] [Thread-27799] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:31:35.650 [DEBUG] [Thread-27799] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:31:35.691 [DEBUG] [Thread-27799] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:31:35.691 [DEBUG] [Thread-27799] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:31:35.694 [DEBUG] [Thread-27799] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:31:35.706 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:31:35.707 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:31:35.709 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:31:35.711 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:31:35.717 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:31:35.719 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:31:35.719 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:31:35.719 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:31:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:31:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.063284 -999.00  +14.20   6.07     38   +0.30 1 1 1 1 1     0    0 16.09 89.07 ZNESW 3.0 6.1 219.3 12.5 14.3 -25.5 14.2 -24.5 13.9 -24.1 14.3 -24.9
2025-11-13T03:31:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:31:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:31:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.063284
2025-11-13T03:31:35.720 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:31:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:31:35.721 [DEBUG] [Thread-27799] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:31:35.721 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:31:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:31:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:31:35.722 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:31:18', tmtdew=16.52, humidity=31.83, cloud=0.0, wind=19.25, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:31:18', seeing=1.18, atlas_timestamp='2025-11-13T01:31:07.738', atlas_cloud=1, atlas_rain=1, zp_data=[0.01425000000000054, 0.028750000000000497, 0.1067499999999999, 0.039499999999998536, 0.07600000000000051, 0.02525000000000155, -0.0030000000000001137, 0.01425000000000054, 0.038999999999997925, 0.041999999999999815, 0.056750000000000966, 0.0470000000000006, 0.13700000000000045, 0.0337499999999995, -0.03300000000000125, 0.032999999999999474, 0.0467499999999994, 0.06949999999999967, 0.08299999999999841, 0.09524999999999828, 0.08949999999999925, 0.08024999999999949, 0.02325000000000088, 0.03775000000000084, 0.011999999999998678, 0.17099999999999937, 0.11824999999999974, 0.19650000000000034, 0.20749999999999957, 0.11300000000000132, 0.09600000000000186, 0.0730000000000004, -0.06975000000000087], zp_timestamp='2025-11-13T01:29:00')
2025-11-13T03:31:35.805 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:31:35.817 [DEBUG] [Thread-27802] [transport.py] [_log()] starting thread (client mode): 0x149446d0
2025-11-13T03:31:35.818 [DEBUG] [Thread-27802] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:31:35.832 [DEBUG] [Thread-27802] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:31:35.832 [INFO] [Thread-27802] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] client lang: <none>
2025-11-13T03:31:35.840 [DEBUG] [Thread-27802] [transport.py] [_log()] server lang: <none>
2025-11-13T03:31:35.841 [DEBUG] [Thread-27802] [transport.py] [_log()] kex follows: False
2025-11-13T03:31:35.841 [DEBUG] [Thread-27802] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:31:35.841 [DEBUG] [Thread-27802] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:31:35.841 [DEBUG] [Thread-27802] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:31:35.841 [DEBUG] [Thread-27802] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:31:35.841 [DEBUG] [Thread-27802] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:31:35.841 [DEBUG] [Thread-27802] [transport.py] [_log()] Compression: none
2025-11-13T03:31:35.841 [DEBUG] [Thread-27802] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:31:35.898 [DEBUG] [Thread-27802] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:31:35.899 [DEBUG] [Thread-27802] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:31:35.899 [DEBUG] [Thread-27802] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:31:35.899 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:31:35.900 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:31:35.955 [DEBUG] [Thread-27802] [transport.py] [_log()] userauth is OK
2025-11-13T03:31:35.955 [DEBUG] [Thread-27802] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:31:35.955 [DEBUG] [Thread-27802] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:31:35.955 [DEBUG] [Thread-27802] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:31:35.955 [DEBUG] [Thread-27802] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:31:35.974 [INFO] [Thread-27802] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:31:35.975 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:31:35.975 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:31:36.783 [DEBUG] [Thread-27802] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:31:36.783 [DEBUG] [Thread-27802] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:31:36.999 [DEBUG] [Thread-27802] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:31:37.000 [DEBUG] [Thread-27802] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:31:37.009 [DEBUG] [Thread-27802] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:31:37.018 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:31:37.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-11-13T03:31:37.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-11-13T03:31:37.037 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:31:37.037 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:31:37.038 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:31:37.046 [DEBUG] [Thread-27802] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:31:47.796 [DEBUG] [Thread-27804 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:32:02.847 [DEBUG] [Thread-27805 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:32:03.433 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:32:03.434 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:32:07.058 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:32:07.058 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:32:07.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-11-13T03:32:07.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 31, 50), 16.41, 32.38, 0.0, 16.41, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:32:07.682 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:31:50
2025-11-13T03:32:07.804 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:32:07.950 [DEBUG] [Thread-27806] [transport.py] [_log()] starting thread (client mode): 0x14983ac0
2025-11-13T03:32:07.950 [DEBUG] [Thread-27806] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:32:07.973 [DEBUG] [Thread-27806] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:32:07.973 [INFO] [Thread-27806] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] client lang: <none>
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] server lang: <none>
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] kex follows: False
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:32:07.975 [DEBUG] [Thread-27806] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:32:07.976 [DEBUG] [Thread-27806] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:32:07.976 [DEBUG] [Thread-27806] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:32:07.976 [DEBUG] [Thread-27806] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:32:07.976 [DEBUG] [Thread-27806] [transport.py] [_log()] Compression: none
2025-11-13T03:32:07.976 [DEBUG] [Thread-27806] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:32:07.993 [DEBUG] [Thread-27806] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:32:07.994 [DEBUG] [Thread-27806] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:32:07.994 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:32:07.995 [DEBUG] [Thread-27806] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:32:07.996 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:32:07.997 [DEBUG] [Thread-27806] [transport.py] [_log()] userauth is OK
2025-11-13T03:32:07.997 [DEBUG] [Thread-27806] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:32:07.998 [DEBUG] [Thread-27806] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:32:07.998 [DEBUG] [Thread-27806] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:32:07.998 [DEBUG] [Thread-27806] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:32:08.034 [INFO] [Thread-27806] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:32:08.035 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:32:08.658 [DEBUG] [Thread-27806] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:32:08.658 [DEBUG] [Thread-27806] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:32:08.658 [DEBUG] [Thread-27806] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:32:08.699 [DEBUG] [Thread-27806] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:32:08.699 [DEBUG] [Thread-27806] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:32:08.702 [DEBUG] [Thread-27806] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:32:08.713 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:32:08.714 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:32:08.716 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:32:08.718 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:32:08.724 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:32:08.727 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:32:08.727 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:32:08.727 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:32:08.727 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:32:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.063631 -999.00  +14.20  10.74     38   +0.20 1 1 1 1 1     0    0 15.97 82.03 ZNESW 8.6 10.7 231.0 13.2 14.3 -25.6 14.2 -24.5 13.9 -24.0 14.2 -24.7
2025-11-13T03:32:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:32:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:32:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.063631
2025-11-13T03:32:08.728 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:32:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:32:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:32:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:32:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:32:08.729 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:31:50', tmtdew=16.41, humidity=32.38, cloud=0.0, wind=16.41, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:31:50', seeing=1.09, atlas_timestamp='2025-11-13T01:31:37.718', atlas_cloud=1, atlas_rain=1, zp_data=[0.01425000000000054, 0.028750000000000497, 0.1067499999999999, 0.039499999999998536, 0.07600000000000051, 0.02525000000000155, -0.0030000000000001137, 0.01425000000000054, 0.038999999999997925, 0.041999999999999815, 0.056750000000000966, 0.0470000000000006, 0.13700000000000045, 0.0337499999999995, -0.03300000000000125, 0.032999999999999474, 0.0467499999999994, 0.06949999999999967, 0.08299999999999841, 0.09524999999999828, 0.08949999999999925, 0.08024999999999949, 0.02325000000000088, 0.03775000000000084, 0.011999999999998678, 0.17099999999999937, 0.11824999999999974, 0.19650000000000034, 0.20749999999999957, 0.11300000000000132, 0.09600000000000186, 0.0730000000000004, -0.06975000000000087], zp_timestamp='2025-11-13T01:29:00')
2025-11-13T03:32:08.730 [DEBUG] [Thread-27806] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:32:08.812 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:32:08.823 [DEBUG] [Thread-27809] [transport.py] [_log()] starting thread (client mode): 0x11f03a60
2025-11-13T03:32:08.823 [DEBUG] [Thread-27809] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:32:08.838 [DEBUG] [Thread-27809] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:32:08.838 [INFO] [Thread-27809] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:32:08.845 [DEBUG] [Thread-27809] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:32:08.845 [DEBUG] [Thread-27809] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] client lang: <none>
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] server lang: <none>
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] kex follows: False
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] Compression: none
2025-11-13T03:32:08.846 [DEBUG] [Thread-27809] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:32:08.903 [DEBUG] [Thread-27809] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:32:08.904 [DEBUG] [Thread-27809] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:32:08.904 [DEBUG] [Thread-27809] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:32:08.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:32:08.905 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:32:08.959 [DEBUG] [Thread-27809] [transport.py] [_log()] userauth is OK
2025-11-13T03:32:08.959 [DEBUG] [Thread-27809] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:32:08.959 [DEBUG] [Thread-27809] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:32:08.960 [DEBUG] [Thread-27809] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:32:08.960 [DEBUG] [Thread-27809] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:32:08.979 [INFO] [Thread-27809] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:32:08.979 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:32:08.980 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:32:09.785 [DEBUG] [Thread-27809] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:32:09.785 [DEBUG] [Thread-27809] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:32:09.833 [DEBUG] [Thread-27809] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:32:09.833 [DEBUG] [Thread-27809] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:32:09.842 [DEBUG] [Thread-27809] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:32:09.851 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:32:09.852 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/docker_data/io.saao.ac.za/wp-app/IO/current_weather.json', 'w')
2025-11-13T03:32:09.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-11-13T03:32:09.870 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:32:09.870 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:32:09.871 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:32:09.879 [DEBUG] [Thread-27809] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:32:17.486 [DEBUG] [Thread-27811 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:32:17.893 [DEBUG] [Thread-27812 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:32:32.942 [DEBUG] [Thread-27813 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:32:39.884 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:32:39.884 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:32:39.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-11-13T03:32:40.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 32, 21), 16.53, 32.08, 0.0, 17.13, 14.37, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:32:40.505 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:32:21
2025-11-13T03:32:40.628 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:32:40.772 [DEBUG] [Thread-27814] [transport.py] [_log()] starting thread (client mode): 0x1737e9b0
2025-11-13T03:32:40.773 [DEBUG] [Thread-27814] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:32:40.793 [DEBUG] [Thread-27814] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:32:40.794 [INFO] [Thread-27814] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:32:40.797 [DEBUG] [Thread-27814] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:32:40.797 [DEBUG] [Thread-27814] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:32:40.797 [DEBUG] [Thread-27814] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:32:40.797 [DEBUG] [Thread-27814] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:32:40.797 [DEBUG] [Thread-27814] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:32:40.797 [DEBUG] [Thread-27814] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:32:40.797 [DEBUG] [Thread-27814] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:32:40.797 [DEBUG] [Thread-27814] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] client lang: <none>
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] server lang: <none>
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] kex follows: False
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] Compression: none
2025-11-13T03:32:40.798 [DEBUG] [Thread-27814] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:32:40.817 [DEBUG] [Thread-27814] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:32:40.818 [DEBUG] [Thread-27814] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:32:40.818 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:32:40.819 [DEBUG] [Thread-27814] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:32:40.820 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:32:40.821 [DEBUG] [Thread-27814] [transport.py] [_log()] userauth is OK
2025-11-13T03:32:40.821 [DEBUG] [Thread-27814] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:32:40.821 [DEBUG] [Thread-27814] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:32:40.821 [DEBUG] [Thread-27814] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:32:40.821 [DEBUG] [Thread-27814] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:32:40.859 [INFO] [Thread-27814] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:32:40.860 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:32:41.501 [DEBUG] [Thread-27814] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:32:41.501 [DEBUG] [Thread-27814] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:32:41.502 [DEBUG] [Thread-27814] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:32:41.543 [DEBUG] [Thread-27814] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:32:41.543 [DEBUG] [Thread-27814] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:32:41.546 [DEBUG] [Thread-27814] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:32:41.558 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:32:41.558 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:32:41.560 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:32:41.562 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:32:41.568 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:32:41.570 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:32:41.570 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:32:41.570 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:32:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:32:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.063979 -999.00  +14.20   7.91     38   +0.20 1 1 1 1 1     0    0 15.97 87.01 ZNESW 9.6 7.9 240.4 14.4 14.3 -25.4 14.2 -24.5 13.9 -24.2 14.2 -24.9
2025-11-13T03:32:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:32:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:32:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.063979
2025-11-13T03:32:41.571 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:32:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:32:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:32:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:32:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:32:41.572 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:32:21', tmtdew=16.53, humidity=32.08, cloud=0.0, wind=17.13, temperature=14.37, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:32:22', seeing=1.09, atlas_timestamp='2025-11-13T01:32:07.786', atlas_cloud=1, atlas_rain=1, zp_data=[0.01425000000000054, 0.028750000000000497, 0.1067499999999999, 0.039499999999998536, 0.07600000000000051, 0.02525000000000155, -0.0030000000000001137, 0.01425000000000054, 0.038999999999997925, 0.041999999999999815, 0.056750000000000966, 0.0470000000000006, 0.13700000000000045, 0.0337499999999995, -0.03300000000000125, 0.032999999999999474, 0.0467499999999994, 0.06949999999999967, 0.08299999999999841, 0.09524999999999828, 0.08949999999999925, 0.08024999999999949, 0.02325000000000088, 0.03775000000000084, 0.011999999999998678, 0.17099999999999937, 0.11824999999999974, 0.19650000000000034, 0.20749999999999957, 0.11300000000000132, 0.09600000000000186, 0.0730000000000004, -0.06975000000000087], zp_timestamp='2025-11-13T01:29:00')
2025-11-13T03:32:41.573 [DEBUG] [Thread-27814] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:32:41.654 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:32:41.667 [DEBUG] [Thread-27817] [transport.py] [_log()] starting thread (client mode): 0x14980e50
2025-11-13T03:32:41.667 [DEBUG] [Thread-27817] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:32:41.685 [DEBUG] [Thread-27817] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:32:41.685 [INFO] [Thread-27817] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:32:41.692 [DEBUG] [Thread-27817] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:32:41.692 [DEBUG] [Thread-27817] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:32:41.692 [DEBUG] [Thread-27817] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:32:41.692 [DEBUG] [Thread-27817] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:32:41.692 [DEBUG] [Thread-27817] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:32:41.692 [DEBUG] [Thread-27817] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:32:41.692 [DEBUG] [Thread-27817] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] client lang: <none>
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] server lang: <none>
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] kex follows: False
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] Compression: none
2025-11-13T03:32:41.693 [DEBUG] [Thread-27817] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:32:41.751 [DEBUG] [Thread-27817] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:32:41.752 [DEBUG] [Thread-27817] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:32:41.752 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:32:41.753 [DEBUG] [Thread-27817] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:32:41.754 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:32:41.807 [DEBUG] [Thread-27817] [transport.py] [_log()] userauth is OK
2025-11-13T03:32:41.808 [DEBUG] [Thread-27817] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:32:41.808 [DEBUG] [Thread-27817] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:32:41.808 [DEBUG] [Thread-27817] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:32:41.808 [DEBUG] [Thread-27817] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:32:41.828 [INFO] [Thread-27817] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:32:41.828 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:32:41.829 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:32:42.673 [DEBUG] [Thread-27817] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:32:42.674 [DEBUG] [Thread-27817] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:32:42.722 [DEBUG] [Thread-27817] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:32:42.722 [DEBUG] [Thread-27817] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:32:42.731 [DEBUG] [Thread-27817] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:32:42.740 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:32:42.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-11-13T03:32:42.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-11-13T03:32:42.759 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:32:42.760 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:32:42.760 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:32:42.768 [DEBUG] [Thread-27817] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:32:47.981 [DEBUG] [Thread-27819 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:33:03.031 [DEBUG] [Thread-27820 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:33:03.644 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:33:03.645 [DEBUG] [Thread-12 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:33:12.791 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:33:12.791 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:33:12.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-11-13T03:33:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 32, 54), 16.54, 31.68, 0.0, 17.08, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:33:13.412 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:32:54
2025-11-13T03:33:13.534 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:33:13.682 [DEBUG] [Thread-27821] [transport.py] [_log()] starting thread (client mode): 0x14980a60
2025-11-13T03:33:13.682 [DEBUG] [Thread-27821] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:33:13.702 [DEBUG] [Thread-27821] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:33:13.702 [INFO] [Thread-27821] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:33:13.705 [DEBUG] [Thread-27821] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] client lang: <none>
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] server lang: <none>
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] kex follows: False
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] Compression: none
2025-11-13T03:33:13.706 [DEBUG] [Thread-27821] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:33:13.726 [DEBUG] [Thread-27821] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:33:13.727 [DEBUG] [Thread-27821] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:33:13.727 [DEBUG] [Thread-27821] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:33:13.728 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:33:13.729 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:33:13.730 [DEBUG] [Thread-27821] [transport.py] [_log()] userauth is OK
2025-11-13T03:33:13.731 [DEBUG] [Thread-27821] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:33:13.731 [DEBUG] [Thread-27821] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:33:13.731 [DEBUG] [Thread-27821] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:33:13.731 [DEBUG] [Thread-27821] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:33:13.766 [INFO] [Thread-27821] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:33:13.767 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:33:14.386 [DEBUG] [Thread-27821] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:33:14.386 [DEBUG] [Thread-27821] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:33:14.387 [DEBUG] [Thread-27821] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:33:14.428 [DEBUG] [Thread-27821] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:33:14.428 [DEBUG] [Thread-27821] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:33:14.431 [DEBUG] [Thread-27821] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:33:14.442 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:33:14.442 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:33:14.444 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:33:14.446 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:33:14.451 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:33:14.453 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:33:14.454 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:33:14.454 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:33:14.454 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:33:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.064326 -999.00  +14.20   9.37     38   +0.10 1 1 1 1 1     0    0 16.24 78.16 ZNESW 11.4 9.4 247.9 14.1 14.3 -25.5 14.2 -24.5 13.9 -24.1 14.2 -24.7
2025-11-13T03:33:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:33:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:33:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.064326
2025-11-13T03:33:14.455 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:33:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:33:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:33:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:33:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:33:14.456 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:32:54', tmtdew=16.54, humidity=31.68, cloud=0.0, wind=17.08, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:32:54', seeing=0.97, atlas_timestamp='2025-11-13T01:32:37.766', atlas_cloud=1, atlas_rain=1, zp_data=[0.01425000000000054, 0.028750000000000497, 0.1067499999999999, 0.039499999999998536, 0.07600000000000051, 0.02525000000000155, -0.0030000000000001137, 0.01425000000000054, 0.038999999999997925, 0.041999999999999815, 0.056750000000000966, 0.0470000000000006, 0.13700000000000045, 0.0337499999999995, -0.03300000000000125, 0.032999999999999474, 0.0467499999999994, 0.06949999999999967, 0.08299999999999841, 0.09524999999999828, 0.08949999999999925, 0.08024999999999949, 0.02325000000000088, 0.03775000000000084, 0.011999999999998678, 0.17099999999999937, 0.11824999999999974, 0.19650000000000034, 0.20749999999999957, 0.11300000000000132, 0.09600000000000186, 0.0730000000000004, -0.06975000000000087], zp_timestamp='2025-11-13T01:29:00')
2025-11-13T03:33:14.456 [DEBUG] [Thread-27821] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:33:14.538 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:33:14.550 [DEBUG] [Thread-27824] [transport.py] [_log()] starting thread (client mode): 0x14921420
2025-11-13T03:33:14.550 [DEBUG] [Thread-27824] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:33:14.565 [DEBUG] [Thread-27824] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:33:14.565 [INFO] [Thread-27824] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] client lang: <none>
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] server lang: <none>
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] kex follows: False
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:33:14.573 [DEBUG] [Thread-27824] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:33:14.574 [DEBUG] [Thread-27824] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:33:14.574 [DEBUG] [Thread-27824] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:33:14.574 [DEBUG] [Thread-27824] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:33:14.574 [DEBUG] [Thread-27824] [transport.py] [_log()] Compression: none
2025-11-13T03:33:14.574 [DEBUG] [Thread-27824] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:33:14.631 [DEBUG] [Thread-27824] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:33:14.632 [DEBUG] [Thread-27824] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:33:14.632 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:33:14.633 [DEBUG] [Thread-27824] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:33:14.634 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:33:14.687 [DEBUG] [Thread-27824] [transport.py] [_log()] userauth is OK
2025-11-13T03:33:14.687 [DEBUG] [Thread-27824] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:33:14.687 [DEBUG] [Thread-27824] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:33:14.687 [DEBUG] [Thread-27824] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:33:14.687 [DEBUG] [Thread-27824] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:33:14.705 [INFO] [Thread-27824] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:33:14.706 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as io using private key
2025-11-13T03:33:14.706 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:33:15.542 [DEBUG] [Thread-27824] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:33:15.543 [DEBUG] [Thread-27824] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:33:15.591 [DEBUG] [Thread-27824] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:33:15.591 [DEBUG] [Thread-27824] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:33:15.600 [DEBUG] [Thread-27824] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:33:15.609 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:33:15.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-11-13T03:33:15.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-11-13T03:33:15.628 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:33:15.628 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:33:15.629 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:33:15.637 [DEBUG] [Thread-27824] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:33:17.550 [DEBUG] [Thread-27826 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:33:18.066 [DEBUG] [Thread-27827 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:33:33.126 [DEBUG] [Thread-27828 (handle)] [driver.py] [get_weather_state()] Getting weather_state
2025-11-13T03:33:45.658 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Polling weather from database
2025-11-13T03:33:45.659 [INFO] [poll_weather_worker] [driver.py] [connect()] Connecting to database localhost as user suthweather
2025-11-13T03:33:45.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-11-13T03:33:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] cw_data = ((datetime.datetime(2025, 11, 13, 3, 33, 26), 16.55, 31.67, 0.0, 16.3, 14.44, 0, 0, 0, 2, 0, 0),)
2025-11-13T03:33:46.280 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Datetime = 2025-11-13 03:33:26
2025-11-13T03:33:46.402 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting Atlas cloud sensor data
2025-11-13T03:33:46.550 [DEBUG] [Thread-27829] [transport.py] [_log()] starting thread (client mode): 0x149807f0
2025-11-13T03:33:46.550 [DEBUG] [Thread-27829] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:33:46.570 [DEBUG] [Thread-27829] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.13
2025-11-13T03:33:46.570 [INFO] [Thread-27829] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_8.2p1)
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, kex-strict-s-v00@openssh.com
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] server key: rsa-sha2-512, rsa-sha2-256, ssh-rsa, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] client lang: <none>
2025-11-13T03:33:46.574 [DEBUG] [Thread-27829] [transport.py] [_log()] server lang: <none>
2025-11-13T03:33:46.575 [DEBUG] [Thread-27829] [transport.py] [_log()] kex follows: False
2025-11-13T03:33:46.575 [DEBUG] [Thread-27829] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:33:46.575 [DEBUG] [Thread-27829] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:33:46.575 [DEBUG] [Thread-27829] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:33:46.575 [DEBUG] [Thread-27829] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:33:46.575 [DEBUG] [Thread-27829] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:33:46.575 [DEBUG] [Thread-27829] [transport.py] [_log()] Compression: none
2025-11-13T03:33:46.575 [DEBUG] [Thread-27829] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:33:46.593 [DEBUG] [Thread-27829] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:33:46.594 [DEBUG] [Thread-27829] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:33:46.595 [DEBUG] [Thread-27829] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,sk-ssh-ed25519@openssh.com,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,sk-ecdsa-sha2-nistp256@openssh.com'}
2025-11-13T03:33:46.595 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for atlasallsky.suth.saao.ac.za: b'c0949f18cce87e4d835f6e07603ff9b8'
2025-11-13T03:33:46.596 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:33:46.597 [DEBUG] [Thread-27829] [transport.py] [_log()] userauth is OK
2025-11-13T03:33:46.597 [DEBUG] [Thread-27829] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:33:46.597 [DEBUG] [Thread-27829] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:33:46.598 [DEBUG] [Thread-27829] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'sk-ssh-ed25519@openssh.com', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'sk-ecdsa-sha2-nistp256@openssh.com']
2025-11-13T03:33:46.598 [DEBUG] [Thread-27829] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:33:46.622 [INFO] [Thread-27829] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:33:46.623 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] Max packet in: 32768 bytes
2025-11-13T03:33:47.277 [DEBUG] [Thread-27829] [transport.py] [_log()] Received global request "hostkeys-00@openssh.com"
2025-11-13T03:33:47.277 [DEBUG] [Thread-27829] [transport.py] [_log()] Rejecting "hostkeys-00@openssh.com" global request from server.
2025-11-13T03:33:47.278 [DEBUG] [Thread-27829] [transport.py] [_log()] Debug msg: b'/home/weather/.ssh/authorized_keys:5: key options: agent-forwarding port-forwarding pty user-rc x11-forwarding'
2025-11-13T03:33:47.319 [DEBUG] [Thread-27829] [channel.py] [_log()] [chan 0] Max packet out: 32768 bytes
2025-11-13T03:33:47.319 [DEBUG] [Thread-27829] [transport.py] [_log()] Secsh channel 0 opened.
2025-11-13T03:33:47.323 [DEBUG] [Thread-27829] [channel.py] [_log()] [chan 0] Sesch channel 0 request ok
2025-11-13T03:33:47.336 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] Opened sftp connection (server version 3)
2025-11-13T03:33:47.336 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] stat(b'/home/weather/weather.log')
2025-11-13T03:33:47.338 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb')
2025-11-13T03:33:47.340 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] open(b'/home/weather/weather.log', 'rb') -> 00000000
2025-11-13T03:33:47.345 [DEBUG] [poll_weather_worker] [sftp.py] [_log()] [chan 0] close(00000000)
2025-11-13T03:33:47.347 [INFO] [poll_weather_worker] [driver.py] [read_atlas_file()] File '/home/weather/weather.log' copied to '/tmp/weather.log'
2025-11-13T03:33:47.347 [INFO] [poll_weather_worker] [sftp.py] [_log()] [chan 0] sftp session closed.
2025-11-13T03:33:47.348 [DEBUG] [poll_weather_worker] [channel.py] [_log()] [chan 0] EOF sent (0)
2025-11-13T03:33:47.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got atlas file
2025-11-13T03:33:47.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got last line: 60992.065020 -999.00  +14.20   9.22     38   +0.10 1 1 1 1 1     0    0 15.73 75.98 ZNESW 7.7 9.2 224.8 16.7 14.3 -25.5 14.2 -24.6 13.9 -24.0 14.2 -24.9
2025-11-13T03:33:47.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Splitting last line
2025-11-13T03:33:47.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting timestamp token
2025-11-13T03:33:47.348 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud timestamp = 60992.065020
2025-11-13T03:33:47.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got timestamp in astropy Time
2025-11-13T03:33:47.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting rain token
2025-11-13T03:33:47.349 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got rain token = 1
2025-11-13T03:33:47.350 [DEBUG] [Thread-27829] [transport.py] [_log()] EOF in transport thread
2025-11-13T03:33:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Getting cloud token
2025-11-13T03:33:47.350 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Got cloud token = 1
2025-11-13T03:33:47.351 [DEBUG] [poll_weather_worker] [driver.py] [poll_weather_state()] Returning weather state: WeatherState(timestamp='2025-11-13T03:33:26', tmtdew=16.55, humidity=31.67, cloud=0.0, wind=16.3, temperature=14.44, tmtdew_warn=0, humidity_warn=0, rain_warn=0, cloud_warn=2, wind_warn=0, temperature_warn=0, seeing_timestamp='2025-11-13T03:33:26', seeing=0.99, atlas_timestamp='2025-11-13T01:33:37.728', atlas_cloud=1, atlas_rain=1, zp_data=[0.01425000000000054, 0.028750000000000497, 0.1067499999999999, 0.039499999999998536, 0.07600000000000051, 0.02525000000000155, -0.0030000000000001137, 0.01425000000000054, 0.038999999999997925, 0.041999999999999815, 0.056750000000000966, 0.0470000000000006, 0.13700000000000045, 0.0337499999999995, -0.03300000000000125, 0.032999999999999474, 0.0467499999999994, 0.06949999999999967, 0.08299999999999841, 0.09524999999999828, 0.08949999999999925, 0.08024999999999949, 0.02325000000000088, 0.03775000000000084, 0.011999999999998678, 0.17099999999999937, 0.11824999999999974, 0.19650000000000034, 0.20749999999999957, 0.11300000000000132, 0.09600000000000186, 0.0730000000000004, -0.06975000000000087], zp_timestamp='2025-11-13T01:31:00')
2025-11-13T03:33:47.435 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connecting to io.saao.ac.za as io using private key
2025-11-13T03:33:47.447 [DEBUG] [Thread-27832] [transport.py] [_log()] starting thread (client mode): 0x1737d420
2025-11-13T03:33:47.447 [DEBUG] [Thread-27832] [transport.py] [_log()] Local version/idstring: SSH-2.0-paramiko_3.0.0
2025-11-13T03:33:47.462 [DEBUG] [Thread-27832] [transport.py] [_log()] Remote version/idstring: SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
2025-11-13T03:33:47.463 [INFO] [Thread-27832] [transport.py] [_log()] Connected (version 2.0, client OpenSSH_7.6p1)
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] === Key exchange possibilities ===
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] kex algos: curve25519-sha256, curve25519-sha256@libssh.org, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group-exchange-sha256, diffie-hellman-group16-sha512, diffie-hellman-group18-sha512, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] server key: ssh-rsa, rsa-sha2-512, rsa-sha2-256, ecdsa-sha2-nistp256, ssh-ed25519
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] client encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] server encrypt: chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] client mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] server mac: umac-64-etm@openssh.com, umac-128-etm@openssh.com, hmac-sha2-256-etm@openssh.com, hmac-sha2-512-etm@openssh.com, hmac-sha1-etm@openssh.com, umac-64@openssh.com, umac-128@openssh.com, hmac-sha2-256, hmac-sha2-512, hmac-sha1
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] client compress: none, zlib@openssh.com
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] server compress: none, zlib@openssh.com
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] client lang: <none>
2025-11-13T03:33:47.470 [DEBUG] [Thread-27832] [transport.py] [_log()] server lang: <none>
2025-11-13T03:33:47.471 [DEBUG] [Thread-27832] [transport.py] [_log()] kex follows: False
2025-11-13T03:33:47.471 [DEBUG] [Thread-27832] [transport.py] [_log()] === Key exchange agreements ===
2025-11-13T03:33:47.471 [DEBUG] [Thread-27832] [transport.py] [_log()] Kex: curve25519-sha256@libssh.org
2025-11-13T03:33:47.471 [DEBUG] [Thread-27832] [transport.py] [_log()] HostKey: ssh-ed25519
2025-11-13T03:33:47.471 [DEBUG] [Thread-27832] [transport.py] [_log()] Cipher: aes128-ctr
2025-11-13T03:33:47.471 [DEBUG] [Thread-27832] [transport.py] [_log()] MAC: hmac-sha2-256
2025-11-13T03:33:47.471 [DEBUG] [Thread-27832] [transport.py] [_log()] Compression: none
2025-11-13T03:33:47.471 [DEBUG] [Thread-27832] [transport.py] [_log()] === End of kex handshake ===
2025-11-13T03:33:47.536 [DEBUG] [Thread-27832] [transport.py] [_log()] kex engine KexCurve25519 specified hash_algo <built-in function openssl_sha256>
2025-11-13T03:33:47.536 [DEBUG] [Thread-27832] [transport.py] [_log()] Switch to new keys ...
2025-11-13T03:33:47.537 [DEBUG] [Thread-27832] [transport.py] [_log()] Got EXT_INFO: {'server-sig-algs': b'ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521'}
2025-11-13T03:33:47.537 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Adding ssh-ed25519 host key for io.saao.ac.za: b'00503ecc12de43871af86ff856296a9d'
2025-11-13T03:33:47.538 [DEBUG] [poll_weather_worker] [transport.py] [_log()] Trying SSH key b'ede500ba65c9d1f2496be9b8baf59e24'
2025-11-13T03:33:47.595 [DEBUG] [Thread-27832] [transport.py] [_log()] userauth is OK
2025-11-13T03:33:47.595 [DEBUG] [Thread-27832] [transport.py] [_log()] Finalizing pubkey algorithm for key of type 'ssh-rsa'
2025-11-13T03:33:47.596 [DEBUG] [Thread-27832] [transport.py] [_log()] Our pubkey algorithm list: ['rsa-sha2-512', 'rsa-sha2-256', 'ssh-rsa']
2025-11-13T03:33:47.596 [DEBUG] [Thread-27832] [transport.py] [_log()] Server-side algorithm list: ['ssh-ed25519', 'ssh-rsa', 'rsa-sha2-256', 'rsa-sha2-512', 'ssh-dss', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521']
2025-11-13T03:33:47.596 [DEBUG] [Thread-27832] [transport.py] [_log()] Agreed upon 'rsa-sha2-512' pubkey algorithm
2025-11-13T03:33:47.615 [INFO] [Thread-27832] [transport.py] [_log()] Authentication (publickey) successful!
2025-11-13T03:33:47.615 [DEBUG] [poll_weather_worker] [driver.py] [write_weather_to_remote_file()] Connected to io.saao.ac.za as i
[file cut: first 33554432 bytes kept]
[document cut: first 32643621 of 33554432 characters kept]
